public UpdateManagerInstall::submitForm(array &$form, FormStateInterface $form_state)
Form submission handler.
Parameters
array $form: An associative array containing the structure of the form.
\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.
Overrides FormInterface::submitForm
File
- core/modules/update/src/Form/UpdateManagerInstall.php, line 134
Class
- UpdateManagerInstall
- Configure update settings for this site.
Namespace
Drupal\update\Form
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | public function submitForm( array & $form , FormStateInterface $form_state ) { $local_cache = NULL; if ( $form_state ->getValue( 'project_url' )) { $local_cache = update_manager_file_get( $form_state ->getValue( 'project_url' )); if (! $local_cache ) { drupal_set_message( $this ->t( 'Unable to retrieve Drupal project from %url.' , array ( '%url' => $form_state ->getValue( 'project_url' ))), 'error' ); return ; } } elseif ( $_FILES [ 'files' ][ 'name' ][ 'project_upload' ]) { $validators = array ( 'file_validate_extensions' => array (archiver_get_extensions())); if (!( $finfo = file_save_upload( 'project_upload' , $validators , NULL, 0, FILE_EXISTS_REPLACE))) { // Failed to upload the file. file_save_upload() calls // drupal_set_message() on failure. return ; } $local_cache = $finfo ->getFileUri(); } $directory = _update_manager_extract_directory(); try { $archive = update_manager_archive_extract( $local_cache , $directory ); } catch (\Exception $e ) { drupal_set_message( $e ->getMessage(), 'error' ); return ; } $files = $archive ->listContents(); if (! $files ) { drupal_set_message( $this ->t( 'Provided archive contains no files.' ), 'error' ); return ; } // Unfortunately, we can only use the directory name to determine the // project name. Some archivers list the first file as the directory (i.e., // MODULE/) and others list an actual file (i.e., MODULE/README.TXT). $project = strtok ( $files [0], '/\\' ); $archive_errors = $this ->moduleHandler->invokeAll( 'verify_update_archive' , array ( $project , $local_cache , $directory )); if (! empty ( $archive_errors )) { drupal_set_message( array_shift ( $archive_errors ), 'error' ); // @todo: Fix me in D8: We need a way to set multiple errors on the same // form element and have all of them appear! if (! empty ( $archive_errors )) { foreach ( $archive_errors as $error ) { drupal_set_message( $error , 'error' ); } } return ; } // Make sure the Updater registry is loaded. drupal_get_updaters(); $project_location = $directory . '/' . $project ; try { $updater = Updater::factory( $project_location , $this ->root); } catch (\Exception $e ) { drupal_set_message( $e ->getMessage(), 'error' ); return ; } try { $project_title = Updater::getProjectTitle( $project_location ); } catch (\Exception $e ) { drupal_set_message( $e ->getMessage(), 'error' ); return ; } if (! $project_title ) { drupal_set_message( $this ->t( 'Unable to determine %project name.' , array ( '%project' => $project )), 'error' ); } if ( $updater ->isInstalled()) { drupal_set_message( $this ->t( '%project is already installed.' , array ( '%project' => $project_title )), 'error' ); return ; } $project_real_location = drupal_realpath( $project_location ); $arguments = array ( 'project' => $project , 'updater_name' => get_class( $updater ), 'local_url' => $project_real_location , ); // This process is inherently difficult to test therefore use a state flag. $test_authorize = FALSE; if (drupal_valid_test_ua()) { $test_authorize = \Drupal::state()->get( 'test_uploaders_via_prompt' , FALSE); } // If the owner of the 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_install() directly. if ( fileowner ( $project_real_location ) == fileowner ( $this ->sitePath) && ! $test_authorize ) { $this ->moduleHandler->loadInclude( 'update' , 'inc' , 'update.authorize' ); $filetransfer = new Local( $this ->root); $response = call_user_func_array( 'update_authorize_run_install' , array_merge ( array ( $filetransfer ), $arguments )); if ( $response instanceof Response) { $form_state ->setResponse( $response ); } } // Otherwise, go through the regular workflow to prompt for FTP/SSH // credentials and invoke update_authorize_run_install() indirectly with // whatever FileTransfer object authorize.php creates for us. 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_install' , __DIR__ . '/../../update.authorize.inc' , $arguments , $this ->t( 'Update manager' )); $form_state ->setRedirectUrl(system_authorized_get_url()); } } |
Please login to continue.