function UpdateReady::submitForm

Same name and namespace in other branches
  1. 9 core/modules/update/src/Form/UpdateReady.php \Drupal\update\Form\UpdateReady::submitForm()
  2. 8.9.x core/modules/update/src/Form/UpdateReady.php \Drupal\update\Form\UpdateReady::submitForm()
  3. 10 core/modules/update/src/Form/UpdateReady.php \Drupal\update\Form\UpdateReady::submitForm()

Overrides FormInterface::submitForm

File

core/modules/update/src/Form/UpdateReady.php, line 120

Class

UpdateReady
Configure update settings for this site.

Namespace

Drupal\update\Form

Code

public function submitForm(array &$form, FormStateInterface $form_state) {
    $session = $this->getRequest()
        ->getSession();
    // Store maintenance_mode setting so we can restore it when done.
    $session->set('maintenance_mode', $this->state
        ->get('system.maintenance_mode'));
    if ($form_state->getValue('maintenance_mode') == TRUE) {
        $this->state
            ->set('system.maintenance_mode', TRUE);
    }
    $projects = $session->remove('update_manager_update_projects');
    if ($projects) {
        // Make sure the Updater registry is loaded.
        drupal_get_updaters();
        $updates = [];
        $directory = _update_manager_extract_directory();
        $project_real_location = NULL;
        foreach ($projects as $project => $url) {
            $project_location = $directory . '/' . $project;
            $updater = Updater::factory($project_location, $this->root);
            $project_real_location = \Drupal::service('file_system')->realpath($project_location);
            $updates[] = [
                'project' => $project,
                'updater_name' => get_class($updater),
                'local_url' => $project_real_location,
            ];
        }
        // If the owner of the last directory we extracted is the same as the
        // owner of our configuration directory (e.g. sites/default) where we're
        // trying to install the code, there's no need to prompt for FTP/SSH
        // credentials. Instead, we instantiate a Drupal\Core\FileTransfer\Local
        // and invoke update_authorize_run_update() directly.
        if (fileowner($project_real_location) == fileowner($this->sitePath)) {
            $this->moduleHandler
                ->loadInclude('update', 'inc', 'update.authorize');
            $filetransfer = new Local($this->root, \Drupal::service('file_system'));
            $response = update_authorize_run_update($filetransfer, $updates);
            if ($response instanceof Response) {
                $form_state->setResponse($response);
            }
        }
        else {
            // The page title must be passed here to ensure it is initially used
            // when authorize.php loads for the first time with the FTP/SSH
            // credentials form.
            system_authorized_init('update_authorize_run_update', __DIR__ . '/../../update.authorize.inc', [
                $updates,
            ], $this->t('Update manager'));
            $form_state->setRedirectUrl(system_authorized_get_url());
        }
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.