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

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

public run ( )
    public function run()
    {
        $this->language->add_lang('migrator');
        if (!isset($this->config['version_update_from'])) {
            $this->config->set('version_update_from', $this->config['version']);
        }
        $original_version = $this->config['version_update_from'];
        $this->migrator->set_output_handler(new log_wrapper_migrator_output_handler($this->language, new installer_migrator_output_handler($this->iohandler), $this->phpbb_root_path . 'store/migrations_' . time() . '.log', $this->filesystem));
        $this->migrator->create_migrations_table();
        $migrations = $this->extension_manager->get_finder()->core_path('phpbb/db/migration/data/')->extension_directory('/migrations')->get_classes();
        $this->migrator->set_migrations($migrations);
        $migration_step_count = $this->installer_config->get('database_update_migration_steps', -1);
        if ($migration_step_count < 0) {
            $migration_step_count = count($this->migrator->get_installable_migrations()) * 2;
            $this->installer_config->set('database_update_migration_steps', $migration_step_count);
        }
        $progress_count = $this->installer_config->get('database_update_count', 0);
        $restart_progress_bar = $progress_count === 0;
        // Only "restart" when the update runs for the first time
        $this->iohandler->set_task_count($migration_step_count, $restart_progress_bar);
        $this->installer_config->set_task_progress_count($migration_step_count);
        while (!$this->migrator->finished()) {
            try {
                $this->migrator->update();
                $progress_count++;
                $last_run_migration = $this->migrator->get_last_run_migration();
                if (isset($last_run_migration['effectively_installed']) && $last_run_migration['effectively_installed']) {
                    // We skipped two step, so increment $progress_count by another one
                    $progress_count++;
                } else {
                    if ($last_run_migration['task'] === 'process_schema_step' && !$last_run_migration['state']['migration_schema_done'] || $last_run_migration['task'] === 'process_data_step' && !$last_run_migration['state']['migration_data_done']) {
                        // We just run a step that wasn't counted yet so make it count
                        $migration_step_count++;
                    }
                }
                $this->iohandler->set_task_count($migration_step_count);
                $this->installer_config->set_task_progress_count($migration_step_count);
                $this->iohandler->set_progress('STAGE_UPDATE_DATABASE', $progress_count);
            } catch (exception $e) {
                $msg = $e->getParameters();
                array_unshift($msg, $e->getMessage());
                $this->iohandler->add_error_message($msg);
                throw new user_interaction_required_exception();
            }
            if ($this->installer_config->get_time_remaining() <= 0 || $this->installer_config->get_memory_remaining() <= 0) {
                $this->installer_config->set('database_update_count', $progress_count);
                $this->installer_config->set('database_update_migration_steps', $migration_step_count);
                throw new resource_limit_reached_exception();
            }
        }
        if ($original_version !== $this->config['version']) {
            $this->log->add('admin', isset($this->user->data['user_id']) ? $this->user->data['user_id'] : ANONYMOUS, $this->user->ip, 'LOG_UPDATE_DATABASE', false, array($original_version, $this->config['version']));
        }
        $this->iohandler->add_success_message('INLINE_UPDATE_SUCCESSFUL');
        $this->cache->purge();
        $this->config->increment('assets_version', 1);
    }