1.20.x installer.pages.inc | installer_browser_installation_select_versions_form($form, &$form_state, $projects) |
Form builder for the select versions form.
Parameters
$projects: An array of projects selected for install, keyed by project name.
File
- modules/
installer/ installer.pages.inc, line 209 - Page callbacks used by the Installer browse pages.
Code
function installer_browser_installation_select_versions_form($form, &$form_state, $projects) {
module_load_include('inc', 'installer', 'installer.browser');
backdrop_add_js(backdrop_get_path('module', 'installer') . '/js/installer.select_releases.js');
$zip_loaded = installer_browser_check_zip_loaded();
$form = array();
// First unset any old data.
unset($_SESSION['installer_browser_install_releases_list']);
$form['#tree'] = TRUE;
$form['releases-header'] = array(
'#type' => 'item',
'#markup' => t("You're about to install:"),
);
$form['releases'] = array();
$project_type = 'module';
foreach ($projects as $project) {
// Get the available releases for this project.
$release_data = installer_browser_get_project_release_data($project);
if (!$release_data) {
backdrop_set_message(t('Could not fetch releases for project %project.', array('%project' => $project['title'])), 'warning');
watchdog('installer', 'Could not fetch releases for project %project.', array('%project' => $project['title']), WATCHDOG_ERROR);
installer_browser_install_queue_remove($project['name']);
continue;
}
// We use the update module to calculate the recommended version.
$project_data = array(
'existing_major' => 0,
'existing_version' => 0,
'install_type' => '',
);
module_load_include('inc', 'update', 'update.compare');
update_calculate_project_update_status($project_data, $release_data);
$releases_list = array();
foreach ($release_data['releases'] as $version => $release) {
$release_title = format_string("@project @version - @date", array(
'@project' => $project['title'],
'@version' => $release['version'],
'@date' => format_date($release['date'], 'custom', 'M j, Y'),
));
if (isset($release['terms']['Release type']) && !empty($release['terms']['Release type'])) {
$release_title .= check_plain(" (" . implode(', ', $release['terms']['Release type']) . ")");
}
$releases_list[$version] = $release_title;
if (isset($release['release_link'])) {
$releases_list[$version] .= ' (' . l(t('release notes'), $release['release_link'], array('attributes' => array('title' => t('Release notes for @project_title', array('@project_title' => $project['title'])), 'target' => '_blank'))) . ')';
}
}
$form['releases'][$project['name']]['project'] = array(
'#type' => 'value',
'#value' => $project,
);
$form['releases'][$project['name']]['release_name'] = array(
'#type' => 'radios',
'#title' => t('Select release for @project', array('@project' => $project['title'])),
'#options' => $releases_list,
'#default_value' => key($releases_list),
'#prefix' => '<div class="installer-browser-releases-wrapper installer-browser-release-' . $project['name'] . '">',
'#suffix' => '</div>',
'#attributes' => array(
'class' => array('installer-browser-releases-radios'),
),
'#required' => TRUE,
);
$form['releases'][$project['name']]['selected_text'] = array(
'#type' => 'item',
'#prefix' => '<div class="installer-browser-selected-release installer-browser-selected-release-' . $project['name'] . '">',
'#suffix' => '</div>',
'#markup' => reset($releases_list),
);
if (isset($project_data['recommended'])) {
// If there is a recommended release set, then only show it and show the
// jQuery link.
$recommended_releases = array();
$recommended_releases[$project_data['recommended']] = $releases_list[$project_data['recommended']];
$form['releases'][$project['name']]['release_name']['#default_value'] = $project_data['recommended'];
$form['releases'][$project['name']]['selected_text']['#markup'] = $releases_list[$project_data['recommended']];
}
if (count($releases_list) > 1) {
$form['releases'][$project['name']]['selected_text']['#markup'] .=
' (<a class="installer-browser-show-releases-link js-show" href="#" rel="' . $project['name'] . '">' . t('change release') . '</a>)';
}
// Update the project type based on the type of projects being selected.
if (isset($project['type'])) {
$project_type = $project['type'];
}
}
ksort($form['releases']);
// If there is nothing to install, go to the enable page.
if (empty($form['releases'])) {
backdrop_set_message(t('No releases data found for any of the selected projects.'), 'warning');
backdrop_goto('admin/installer/install/enable');
}
backdrop_set_message(t('It is recommended that you back up your database and site before you continue. !link.', array('!link' => l(t('Learn how'), 'https://backdropcms.org/backups'))), 'warning');
$form['maintenance_mode'] = array(
'#type' => 'checkbox',
'#title' => t('Perform updates with site in maintenance mode (strongly recommended)'),
'#default_value' => TRUE,
);
$form['actions']['#type'] = 'actions';
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Install'),
'#disabled' => !$zip_loaded,
);
$form['actions']['cancel'] = array(
'#type' => 'link',
'#name' => 'cancel',
'#title' => t('Cancel'),
'#href' => installer_browser_path($project_type),
'#options' => array(),
);
return $form;
}