/**
  * @return array
  *
  * @see update_script_selection_form()
  */
 private function listUpdates()
 {
     // [
     //   'oxygen' => [
     //   'pending' => [
     //     7001 => 'Update description.',
     //   ],
     //   'start' => 7001,
     // ],
     $list = array();
     require_once DRUPAL_ROOT . '/includes/install.inc';
     drupal_load_updates();
     foreach (update_get_update_list() as $extension => $info) {
         if (!isset($info['start'])) {
             // @todo: The update is incompatible, show a warning?
             continue;
         }
         $list[$extension] = $info['start'];
     }
     $updates = array();
     foreach (update_resolve_dependencies($list) as $update) {
         if (!$update['allowed']) {
             if ($update['missing_dependencies']) {
                 // Some module dependency is missing, so it's not safe to update.
                 continue;
             } else {
                 // There was a PHP syntax error in the module.
                 continue;
             }
         }
         $updates = array($update['module'] => $update['number']) + $updates;
     }
     return $updates;
 }
Exemple #2
0
function update_script_selection_form($form, &$form_state)
{
    $count = 0;
    $incompatible_count = 0;
    $form['start'] = array('#tree' => TRUE, '#type' => 'fieldset', '#collapsed' => TRUE, '#collapsible' => TRUE);
    // Ensure system.module's updates appear first.
    $form['start']['system'] = array();
    $updates = update_get_update_list();
    $starting_updates = array();
    $incompatible_updates_exist = FALSE;
    foreach ($updates as $module => $update) {
        if (!isset($update['start'])) {
            $form['start'][$module] = array('#title' => $module, '#item' => $update['warning'], '#prefix' => '<div class="warning">', '#suffix' => '</div>');
            $incompatible_updates_exist = TRUE;
            continue;
        }
        if (!empty($update['pending'])) {
            $starting_updates[$module] = $update['start'];
            $form['start'][$module] = array('#type' => 'hidden', '#value' => $update['start']);
            $form['start'][$module . '_updates'] = array('#theme' => 'item_list', '#items' => $update['pending'], '#title' => $module . ' module');
        }
        if (isset($update['pending'])) {
            $count = $count + count($update['pending']);
        }
    }
    // Find and label any incompatible updates.
    foreach (update_resolve_dependencies($starting_updates) as $function => $data) {
        if (!$data['allowed']) {
            $incompatible_updates_exist = TRUE;
            $incompatible_count++;
            $module_update_key = $data['module'] . '_updates';
            if (isset($form['start'][$module_update_key]['#items'][$data['number']])) {
                $text = $data['missing_dependencies'] ? 'This update will been skipped due to the following missing dependencies: <em>' . implode(', ', $data['missing_dependencies']) . '</em>' : "This update will be skipped due to an error in the module's code.";
                $form['start'][$module_update_key]['#items'][$data['number']] .= '<div class="warning">' . $text . '</div>';
            }
            // Move the module containing this update to the top of the list.
            $form['start'] = array($module_update_key => $form['start'][$module_update_key]) + $form['start'];
        }
    }
    // Warn the user if any updates were incompatible.
    if ($incompatible_updates_exist) {
        drupal_set_message('Some of the pending updates cannot be applied because their dependencies were not met.', 'warning');
    }
    if (empty($count)) {
        drupal_set_message(t('No pending updates.'));
        unset($form);
        $form['links'] = array('#markup' => theme('item_list', array('items' => update_helpful_links())));
    } else {
        $form['help'] = array('#markup' => '<p>The version of Drupal you are updating from has been automatically detected.</p>', '#weight' => -5);
        if ($incompatible_count) {
            $form['start']['#title'] = format_plural($count, '1 pending update (@number_applied to be applied, @number_incompatible skipped)', '@count pending updates (@number_applied to be applied, @number_incompatible skipped)', array('@number_applied' => $count - $incompatible_count, '@number_incompatible' => $incompatible_count));
        } else {
            $form['start']['#title'] = format_plural($count, '1 pending update', '@count pending updates');
        }
        $form['has_js'] = array('#type' => 'hidden', '#default_value' => FALSE);
        $form['actions'] = array('#type' => 'actions');
        $form['actions']['submit'] = array('#type' => 'submit', '#value' => 'Apply pending updates');
    }
    return $form;
}
Exemple #3
0
function update_script_selection_form($form, &$form_state)
{
    $count = 0;
    $form['start'] = array('#tree' => TRUE, '#type' => 'fieldset', '#collapsed' => TRUE, '#collapsible' => TRUE);
    // Ensure system.module's updates appear first
    $form['start']['system'] = array();
    $updates = update_get_update_list();
    foreach ($updates as $module => $update) {
        if (!isset($update['start'])) {
            $form['start'][$module] = array('#title' => $module, '#item' => $update['warning'], '#prefix' => '<div class="warning">', '#suffix' => '</div>');
            continue;
        }
        if (!empty($update['pending'])) {
            $form['start'][$module] = array('#type' => 'hidden', '#value' => $update['start']);
            $form['start'][$module . '_updates'] = array('#markup' => theme('item_list', array('items' => $update['pending'], 'title' => $module . ' module')));
        }
        if (isset($update['pending'])) {
            $count = $count + count($update['pending']);
        }
    }
    if (empty($count)) {
        drupal_set_message(t('No pending updates.'));
        unset($form);
        $form['links'] = array('#markup' => theme('item_list', array('items' => update_helpful_links())));
    } else {
        $form['help'] = array('#markup' => '<p>The version of Drupal you are updating from has been automatically detected.</p>', '#weight' => -5);
        $form['start']['#title'] = format_plural($count, '1 pending update', '@count pending updates');
        $form['has_js'] = array('#type' => 'hidden', '#default_value' => FALSE);
        $form['submit'] = array('#type' => 'submit', '#value' => 'Apply pending updates');
    }
    return $form;
}
 protected function getLastUpdate($module)
 {
     $this->getDrupalHelper()->loadLegacyFile('/core/includes/update.inc');
     $this->getDrupalHelper()->loadLegacyFile('/core/includes/schema.inc');
     $updates = update_get_update_list();
     if (empty($updates[$module]['pending'])) {
         $lastUpdateSchema = drupal_get_schema_versions($module);
     } else {
         $lastUpdateSchema = reset(array_keys($updates[$module]['pending'], max($updates[$module]['pending'])));
     }
     return $lastUpdateSchema;
 }
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $io = new DrupalStyle($input, $output);
     $this->getDrupalHelper()->loadLegacyFile('/core/includes/install.inc');
     $this->getDrupalHelper()->loadLegacyFile('/core/includes/update.inc');
     $module = $input->getArgument('module');
     $update_n = $input->getArgument('update-n');
     $module_handler = $this->getModuleHandler();
     drupal_load_updates();
     update_fix_compatibility();
     $updates = update_get_update_list();
     if ($module != 'all') {
         if (!isset($updates[$module])) {
             $io->error(sprintf($this->trans('commands.update.execute.messages.no-module-updates'), $module));
             return;
         } else {
             // filter to execute only a specific module updates
             $updates = [$module => $updates[$module]];
             if ($update_n && !isset($updates[$module]['pending'][$update_n])) {
                 $io->info(sprintf($this->trans('commands.update.execute.messages.module-update-function-not-found'), $module, $update_n));
             }
         }
     }
     $io->info($this->trans('commands.site.maintenance.description'));
     $state = $this->getService('state');
     $state->set('system.maintenance_mode', true);
     foreach ($updates as $module_name => $module_updates) {
         foreach ($module_updates['pending'] as $update_number => $update) {
             if ($module != 'all' && $update_n !== null && $update_n != $update_number) {
                 continue;
             }
             //Executing all pending updates
             if ($update_n > $module_updates['start']) {
                 $io->info($this->trans('commands.update.execute.messages.executing-required-previous-updates'));
             }
             for ($update_index = $module_updates['start']; $update_index <= $update_number; $update_index++) {
                 $io->info(sprintf($this->trans('commands.update.execute.messages.executing-update'), $update_index, $module_name));
                 try {
                     $module_handler->invoke($module_name, 'update_' . $update_index);
                 } catch (\Exception $e) {
                     watchdog_exception('update', $e);
                     $io->error($e->getMessage());
                 }
                 //Update module schema version
                 drupal_set_installed_schema_version($module_name, $update_index);
             }
         }
     }
     $state->set('system.maintenance_mode', false);
     $io->info($this->trans('commands.site.maintenance.messages.maintenance-off'));
     $this->getChain()->addCommand('cache:rebuild', ['cache' => 'all']);
 }
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     /*      drupal_set_installed_schema_version('sample', '8000');
             exit();*/
     include_once DRUPAL_ROOT . '/core/includes/install.inc';
     include_once DRUPAL_ROOT . '/core/includes/update.inc';
     $module = $input->getArgument('module');
     $update_n = $input->getArgument('update-n');
     $module_handler = $this->getModuleHandler();
     drupal_load_updates();
     update_fix_compatibility();
     $updates = update_get_update_list();
     if ($module != 'all') {
         if (!isset($updates[$module])) {
             $output->writeln('[-] <error>' . sprintf($this->trans('commands.update.execute.messages.no-module-updates'), $module) . '</error>');
             return;
         } else {
             // filter to execute only a specific module updates
             $updates = [$module => $updates[$module]];
             if ($update_n && !isset($updates[$module]['pending'][$update_n])) {
                 $output->writeln('[-] <info>' . sprintf($this->trans('commands.update.execute.messages.module-update-function-not-found'), $module, $update_n) . '</info>');
             }
         }
     }
     $output->writeln('[-] <info>' . $this->trans('commands.site.maintenance.description') . '</info>');
     \Drupal::state()->set('system.maintenance_mode', true);
     foreach ($updates as $module_name => $module_updates) {
         foreach ($module_updates['pending'] as $update_number => $update) {
             if ($module != 'all' && $update_n != null and $update_n != $update_number) {
                 continue;
             }
             //Executing all pending updates
             if ($update_n > $module_updates['start']) {
                 $output->writeln('[-] <info>' . $this->trans('commands.update.execute.messages.executing-required-previous-updates') . '</info>');
             }
             for ($update_index = $module_updates['start']; $update_index <= $update_number; $update_index++) {
                 $output->writeln('[-] <info>' . sprintf($this->trans('commands.update.execute.messages.executing-update'), $update_index, $module_name) . '</info>');
                 try {
                     $module_handler->invoke($module_name, 'update_' . $update_index);
                 } catch (\Exception $e) {
                     watchdog_exception('update', $e);
                     $output->writeln('<error>' . $e->getMessage() . '</error>');
                 }
                 //Update module schema version
                 drupal_set_installed_schema_version($module_name, $update_index);
             }
         }
     }
     \Drupal::state()->set('system.maintenance_mode', false);
     $output->writeln('[-] <info>' . $this->trans('commands.site.maintenance.messages.maintenance-off') . '</info>');
     $this->getHelper('chain')->addCommand('cache:rebuild', ['cache' => 'all']);
 }
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $io = new DrupalStyle($input, $output);
     $this->get('site')->loadLegacyFile('/core/includes/update.inc');
     $this->get('site')->loadLegacyFile('/core/includes/install.inc');
     $updateRegistry = $this->getDrupalService('update.post_update_registry');
     drupal_load_updates();
     update_fix_compatibility();
     $updates = update_get_update_list();
     $postUpdates = $updateRegistry->getPendingUpdateInformation();
     $requirements = update_check_requirements();
     $severity = drupal_requirements_severity($requirements);
     $io->newLine();
     if ($severity == REQUIREMENT_ERROR || $severity == REQUIREMENT_WARNING) {
         $io->info($this->trans('commands.update.debug.messages.requirements-error'));
         $tableHeader = [$this->trans('commands.update.debug.messages.severity'), $this->trans('commands.update.debug.messages.title'), $this->trans('commands.update.debug.messages.value'), $this->trans('commands.update.debug.messages.description')];
         $tableRows = [];
         foreach ($requirements as $requirement) {
             if (isset($requirement['minimum schema']) & in_array($requirement['minimum schema'], array(REQUIREMENT_ERROR, REQUIREMENT_WARNING))) {
                 $tableRows[] = [$requirement['severity'], $requirement['title'], $requirement['value'], $requirement['description']];
             }
         }
         $io->table($tableHeader, $tableRows);
         return;
     }
     if (empty($updates)) {
         $io->info($this->trans('commands.update.debug.messages.no-updates'));
         return;
     }
     $tableHeader = [$this->trans('commands.update.debug.messages.module'), $this->trans('commands.update.debug.messages.update-n'), $this->trans('commands.update.debug.messages.description')];
     $io->info($this->trans('commands.update.debug.messages.module-list'));
     $tableRows = [];
     foreach ($updates as $module => $module_updates) {
         foreach ($module_updates['pending'] as $update_n => $update) {
             list(, $description) = explode($update_n . " - ", $update);
             $tableRows[] = [$module, $update_n, trim($description)];
         }
     }
     $io->table($tableHeader, $tableRows);
     $tableHeader = [$this->trans('commands.update.debug.messages.module'), $this->trans('commands.update.debug.messages.post-update'), $this->trans('commands.update.debug.messages.description')];
     $io->info($this->trans('commands.update.debug.messages.module-list-post-update'));
     $tableRows = [];
     foreach ($postUpdates as $module => $module_updates) {
         foreach ($module_updates['pending'] as $postUpdateFunction => $message) {
             $tableRows[] = [$module, $postUpdateFunction, $message];
         }
     }
     $io->table($tableHeader, $tableRows);
 }
 /**
  * Returns available database schema updates once a new version is installed.
  *
  * @return array
  */
 public function getSchemaUpdates()
 {
     require_once DRUPAL_ROOT . '/core/includes/install.inc';
     require_once DRUPAL_ROOT . '/core/includes/update.inc';
     if (!self::canUpdate($this->name)) {
         return array();
     }
     module_load_include('install', $this->name);
     if (!($updates = drupal_get_schema_versions($this->name))) {
         return array();
     }
     $modules_with_updates = update_get_update_list();
     if ($updates = $modules_with_updates[$this->name]) {
         if ($updates['start']) {
             return $updates['pending'];
         }
     }
     return array();
 }
Exemple #9
0
 /**
  * @param \Symfony\Component\Console\Input\InputInterface   $input
  * @param \Symfony\Component\Console\Output\OutputInterface $output
  */
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $io = new DrupalStyle($input, $output);
     $this->get('site')->loadLegacyFile('/core/includes/update.inc');
     $this->get('site')->loadLegacyFile('/core/includes/install.inc');
     drupal_load_updates();
     update_fix_compatibility();
     $requirements = update_check_requirements();
     $severity = drupal_requirements_severity($requirements);
     $updates = update_get_update_list();
     $io->newLine();
     if ($severity == REQUIREMENT_ERROR || $severity == REQUIREMENT_WARNING) {
         $this->populateRequirements($io, $requirements);
     } elseif (empty($updates)) {
         $io->info($this->trans('commands.update.debug.messages.no-updates'));
     } else {
         $this->populateUpdate($io, $updates);
         $this->populatePostUpdate($io);
     }
 }
 /**
  * @param \Symfony\Component\Console\Input\InputInterface   $input
  * @param \Symfony\Component\Console\Output\OutputInterface $output
  */
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $io = new DrupalStyle($input, $output);
     $this->module = $input->getArgument('module');
     $this->update_n = $input->getArgument('update-n');
     $this->get('site')->loadLegacyFile('/core/includes/install.inc');
     $this->get('site')->loadLegacyFile('/core/includes/update.inc');
     drupal_load_updates();
     update_fix_compatibility();
     $updates = update_get_update_list();
     $this->checkUpdates($io);
     $io->info($this->trans('commands.site.maintenance.description'));
     $state = $this->getDrupalService('state');
     $state->set('system.maintenance_mode', true);
     $this->runUpdates($io, $updates);
     $this->runPostUpdates($io);
     $state->set('system.maintenance_mode', false);
     $io->info($this->trans('commands.site.maintenance.messages.maintenance-off'));
     $this->get('chain_queue')->addCommand('cache:rebuild', ['cache' => 'all']);
 }
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $table = $this->getHelperSet()->get('table');
     $table->setlayout($table::LAYOUT_COMPACT);
     include_once DRUPAL_ROOT . '/core/includes/update.inc';
     include_once DRUPAL_ROOT . '/core/includes/install.inc';
     $module_handler = $this->getModuleHandler();
     drupal_load_updates();
     update_fix_compatibility();
     $updates = update_get_update_list();
     $requirements = update_check_requirements();
     $severity = drupal_requirements_severity($requirements);
     if ($severity == REQUIREMENT_ERROR || $severity == REQUIREMENT_WARNING) {
         $output->writeln('[-] <info>' . $this->trans('commands.update.debug.messages.requirements-error') . '</info>');
         $table->setHeaders([$this->trans('commands.update.debug.messages.severity'), $this->trans('commands.update.debug.messages.title'), $this->trans('commands.update.debug.messages.value'), $this->trans('commands.update.debug.messages.description')]);
         foreach ($requirements as $requirement) {
             if (isset($requirement['minimum schema']) & in_array($requirement['minimum schema'], array(REQUIREMENT_ERROR, REQUIREMENT_WARNING))) {
                 $table->addRow([$requirement['severity'], $requirement['title'], $requirement['value'], $requirement['description']]);
             }
         }
         $table->render($output);
         return;
     }
     if (empty($updates)) {
         $output->writeln('[-] <info>' . $this->trans('commands.update.debug.messages.no-updates') . '</info>');
         return;
     }
     $table->setHeaders([$this->trans('commands.update.debug.messages.module'), $this->trans('commands.update.debug.messages.update-n'), $this->trans('commands.update.debug.messages.description')]);
     $output->writeln('<info>' . $this->trans('commands.update.debug.messages.module-list') . '</info>');
     foreach ($updates as $module => $module_updates) {
         foreach ($module_updates['pending'] as $update_n => $update) {
             list(, $description) = split($update_n . " - ", $update);
             $table->addRow([$module, $update_n, trim($description)]);
         }
     }
     $table->render($output);
 }
Exemple #12
0
 /**
  * Retrieves module updates.
  *
  * @return array
  *   The module updates that can be performed.
  */
 protected function getModuleUpdates()
 {
     $return = array();
     $updates = update_get_update_list();
     foreach ($updates as $module => $update) {
         $return[$module] = $update['start'];
     }
     return $return;
 }