type == 'site') { if (($node->site_status == HOSTING_SITE_ENABLED)) { $options['migrate'] = array( 'title' => t('Migrate'), 'description' => t('Move the site to a new platform.'), 'weight' => 7 ); } } return $options; } function hosting_migrate_perm() { return array( 'create migrate task', ); } function theme_hosting_task_migrate_form(&$form) { $node = $form['#node']; $packages = $form['#packages']; $headers = array(); $rows = array(); $headers[] = t("Type"); $headers[] = t("Package"); $errors = array(); $warnings = array(); foreach (array_keys($packages[$node->platform]) as $package) { $row = array(); $row[] = array('class' => 'hosting-package-name', 'data' => $packages[$node->platform][$package]->package_type); $row[] = array('class' => 'hosting-package-name', 'data' => $packages[$node->platform][$package]->title); foreach (array_keys($packages) as $platform) { if (array_key_exists($package, $packages[$platform])) { $comparison = hosting_package_instance_version_compare($packages[$node->platform][$package], $packages[$platform][$package]); $display = $packages[$platform][$package]->version; if ($packages[$platform][$package]->schema_version) { $display .= " (" . $packages[$platform][$package]->schema_version . ")"; } if ($comparison > 0) { $row[] = array('class' => 'hosting-package-upgrade', 'data' => $display); } elseif ($comparison == 0) { $row[] = array('class' => 'hosting-package-same', 'data' => $display); } else { $row[] = array('class' => 'hosting-package-downgrade', 'data' => $display); $errors[$platform] = TRUE; } } else { $row[] = array('class' => 'hosting-package-missing', 'data' => t("Missing")); $warnings[$platform] = TRUE; } } $rows[] = $row; } foreach (array_keys($packages) as $platform) { $header = array(); $header['class'] = 'hosting-package-upgrade'; if ($platform == $node->platform) { $header['class'] = 'hosting-package-same'; } elseif (array_key_exists($platform, $errors)) { $header['class'] = 'hosting-package-downgrade'; $form['radios'][$platform]['parameters']['target_platform']['#attributes']['disabled'] = 'disabled'; } elseif (array_key_exists($platform, $warnings)) { $header['class'] = 'hosting-package-missing'; } $header['data'] = drupal_render($form['radios'][$platform]['parameters']['target_platform']); $headers[] = $header; } $output .= "
" . theme('table', $headers, $rows) . "
"; $output .= drupal_render($form); return $output; } function hosting_task_migrate_form_validate($form_id, $form_values, $form, $site) { if (!$form_values['parameters']['target_platform']) { form_set_error('parameters][target_platform', t('You need to select a valid platform to migrate your site to.')); } if ($form_values['parameters']['target_platform'] == $site->platform) { form_set_error('parameters][target_platform', t('You may not select your current platform to migrate your site to.')); } } function hosting_task_migrate_form($node) { $site_instances = hosting_package_instances_load( array('rid' => $node->nid, 'i.status' => 1)); $site_platform = node_load($node->platform); $cols = array(); $packages = array(); $form['radios']['#tree'] = false; $form['radios'][$node->platform]['parameters']['#tree'] = TRUE; $form['radios'][$node->platform]['parameters']['target_platform'] = array( '#type' => 'radio', '#title' => t('Current'), '#default_value' => $node->platform, '#disabled' => TRUE, "#return_value" => $node->platform, ); foreach ($site_instances as $instance) { $packages[$node->platform][$instance->package_id] = $instance; } $profile_platform_instances = hosting_package_instances_load( array('r.type' => 'platform', 'n.nid' => $node->profile)); if (sizeof($profile_platform_instances) <= 1) { $form['no_targets'] = array( '#value' => t('
There are no platforms that can meet the depdendencies for this site')); return $form; } foreach ($profile_platform_instances as $profile_instance) { if ($profile_instance->rid != $node->platform) { $platform = node_load($profile_instance->rid); if ($platform->web_server == $site_platform->web_server) { $form['radios'][$platform->nid]['parameters']['#tree'] = TRUE; $form['radios'][$platform->nid]['parameters']['target_platform'] = array( '#type' => 'radio', '#title' => $platform->title, "#return_value" => $platform->nid, ); $platform_instances = hosting_package_instances_load( array('rid' => $profile_instance->iid)); foreach ($platform_instances as $instance) { $packages[$platform->nid][$instance->package_id] = $instance; } } } } $form['#node'] = $node; $form['#packages'] = $packages; $form['#theme'] = 'hosting_task_migrate_form'; return $form; $table = array(); if (sizeof($options)) { $form['target_platform'] = array( '#type' => 'radios', '#title' => t('Migrate to'), '#options' => $options, '#required' => TRUE ); } else { $form['target_text'] = array('#type' => 'item', '#value' => t('No valid platforms to migrate to.') ); } return $form; }