/** * Callback for updating a theme. * * @param array $form * Nested array of form elements that comprise the form. * @param \Drupal\Core\Form\FormStateInterface $form_state * The current state of the form. */ public static function updateTheme(array $form, FormStateInterface $form_state) { if ($theme = SystemThemeSettings::getTheme($form, $form_state)) { $update_manager = new UpdateManager($theme); $installed = []; // Iterate over all pending updates. $pending = $update_manager->getPendingUpdates(); foreach ($pending as $version => $update) { // Run the update. $result = $update->update($theme); // Update failed. Show a message and stop the process. if ($result === FALSE) { drupal_set_message(t('The update @title (@version) failed. No further updates can be processed at this time.', ['@title' => $update->getTitle(), '@version' => $version]), 'error'); break; } // Update succeeded. $installed[] = $version; } // Save the last installed schema version. if ($installed) { $installed = array_flip($installed); foreach (array_keys($installed) as $version) { $installed[$version] = new FormattableMarkup('@version - @title', ['@version' => $version, '@title' => $pending[$version]->getTitle()]); } $build = ['#theme' => 'item_list', '#items' => $installed]; drupal_set_message(t('Successfully installed the following update(s) for %theme: @installed', ['%theme' => $theme->getTitle(), '@installed' => \Drupal::service('renderer')->render($build)])); // Save the latest installed version. $theme->setSetting('schema', max(array_keys($installed))); } } }
/** * Installs a Bootstrap based theme. */ protected final function install() { $update_manager = new UpdateManager($this); $this->setSetting('schema', $update_manager->getLatestVersion()); }