phpbb\install\module\update_database\task\update_extensions::run PHP Метод

run() публичный Метод

public run ( )
    public function run()
    {
        $this->user->session_begin();
        $this->user->setup(array('common', 'acp/common', 'cli'));
        $update_info = $this->install_config->get('update_info_unprocessed', []);
        $version_from = !empty($update_info) ? $update_info['version']['from'] : $this->config['version_update_from'];
        if (!empty($version_from)) {
            $update_extensions = $this->iohandler->get_input('update-extensions', []);
            // Create list of default extensions that need to be enabled in update
            $default_update_extensions = [];
            foreach (self::$default_extensions_update as $version => $extensions) {
                if ($this->update_helper->phpbb_version_compare($version_from, $version, '<=')) {
                    $default_update_extensions = array_merge($default_update_extensions, $extensions);
                }
            }
            $all_available_extensions = $this->extension_manager->all_available();
            $i = $this->install_config->get('update_extensions_index', 0);
            $available_extensions = array_slice($all_available_extensions, $i);
            // Update available extensions
            foreach ($available_extensions as $ext_name => $ext_path) {
                // Update extensions if:
                //	1) Extension is currently enabled
                //	2) Extension was implicitly defined as needing an update
                //	3) Extension was newly added as default phpBB extension in
                //		this update and should be enabled by default.
                if ($this->extension_manager->is_enabled($ext_name) || in_array($ext_name, $update_extensions) || in_array($ext_name, $default_update_extensions)) {
                    try {
                        $extension_enabled = $this->extension_manager->is_enabled($ext_name);
                        if ($extension_enabled) {
                            $this->extension_manager->disable($ext_name);
                        }
                        $this->extension_manager->enable($ext_name);
                        $extensions = $this->get_extensions();
                        if (isset($extensions[$ext_name]) && $extensions[$ext_name]['ext_active']) {
                            // Create log
                            $this->log->add('admin', ANONYMOUS, '', 'LOG_EXT_UPDATE', time(), array($ext_name));
                            $this->iohandler->add_success_message(array('CLI_EXTENSION_UPDATE_SUCCESS', $ext_name));
                        } else {
                            $this->iohandler->add_log_message('CLI_EXTENSION_UPDATE_FAILURE', array($ext_name));
                        }
                        // Disable extensions if it was disabled by the admin before
                        if (!$extension_enabled && !in_array($ext_name, $default_update_extensions)) {
                            $this->extension_manager->disable($ext_name);
                        }
                    } catch (\Exception $e) {
                        // Add fail log and continue
                        $this->iohandler->add_log_message('CLI_EXTENSION_UPDATE_FAILURE', array($ext_name));
                    }
                }
                $i++;
                // Stop execution if resource limit is reached
                if ($this->install_config->get_time_remaining() <= 0 || $this->install_config->get_memory_remaining() <= 0) {
                    break;
                }
            }
            $this->install_config->set('update_extensions_index', $i);
            if ($i < sizeof($all_available_extensions)) {
                throw new resource_limit_reached_exception();
            }
        }
        $this->config->delete('version_update_from');
        $this->cache->purge();
        $this->config->increment('assets_version', 1);
    }