Verzeichnisstruktur phpBB-3.2.0


Veröffentlicht
06.01.2017

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

(Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

update.php

Zuletzt modifiziert: 09.10.2024, 12:57 - Dateigröße: 6.19 KiB


001  <?php
002  /**
003   *
004   * This file is part of the phpBB Forum Software package.
005   *
006   * @copyright (c) phpBB Limited <https://www.phpbb.com>
007   * @license GNU General Public License, version 2 (GPL-2.0)
008   *
009   * For full copyright and license information, please see
010   * the docs/CREDITS.txt file.
011   *
012   */
013   
014  namespace phpbb\install\module\update_database\task;
015   
016  use phpbb\db\migration\exception;
017  use phpbb\db\output_handler\installer_migrator_output_handler;
018  use phpbb\db\output_handler\log_wrapper_migrator_output_handler;
019  use phpbb\install\exception\resource_limit_reached_exception;
020  use phpbb\install\exception\user_interaction_required_exception;
021  use phpbb\install\task_base;
022   
023  /**
024   * Database updater task
025   */
026  class update extends task_base
027  {
028      /**
029       * @var \phpbb\cache\driver\driver_interface
030       */
031      protected $cache;
032   
033      /**
034       * @var \phpbb\config\config
035       */
036      protected $config;
037   
038      /**
039       * @var \phpbb\extension\manager
040       */
041      protected $extension_manager;
042   
043      /**
044       * @var \phpbb\filesystem\filesystem
045       */
046      protected $filesystem;
047   
048      /**
049       * @var \phpbb\install\helper\config
050       */
051      protected $installer_config;
052   
053      /**
054       * @var \phpbb\install\helper\iohandler\iohandler_interface
055       */
056      protected $iohandler;
057   
058      /**
059       * @var \phpbb\language\language
060       */
061      protected $language;
062   
063      /**
064       * @var \phpbb\log\log
065       */
066      protected $log;
067   
068      /**
069       * @var \phpbb\db\migrator
070       */
071      protected $migrator;
072   
073      /**
074       * @var \phpbb\user
075       */
076      protected $user;
077   
078      /**
079       * @var string
080       */
081      protected $phpbb_root_path;
082   
083      /**
084       * Constructor
085       *
086       * @param \phpbb\install\helper\container_factory                $container
087       * @param \phpbb\filesystem\filesystem                            $filesystem
088       * @param \phpbb\install\helper\config                            $installer_config
089       * @param \phpbb\install\helper\iohandler\iohandler_interface    $iohandler
090       * @param \phpbb\language\language                                $language
091       * @param string                                                $phpbb_root_path
092       */
093      public function __construct(\phpbb\install\helper\container_factory $container, \phpbb\filesystem\filesystem $filesystem, \phpbb\install\helper\config $installer_config, \phpbb\install\helper\iohandler\iohandler_interface $iohandler, \phpbb\language\language $language, $phpbb_root_path)
094      {
095          $this->filesystem            = $filesystem;
096          $this->installer_config        = $installer_config;
097          $this->iohandler            = $iohandler;
098          $this->language                = $language;
099          $this->phpbb_root_path        = $phpbb_root_path;
100   
101          $this->cache                = $container->get('cache.driver');
102          $this->config                = $container->get('config');
103          $this->extension_manager    = $container->get('ext.manager');
104          $this->log                    = $container->get('log');
105          $this->migrator                = $container->get('migrator');
106          $this->user                    = $container->get('user');
107   
108          parent::__construct(true);
109      }
110   
111      /**
112       * {@inheritdoc}
113       */
114      public function run()
115      {
116          $this->language->add_lang('migrator');
117   
118          if (!isset($this->config['version_update_from']))
119          {
120              $this->config->set('version_update_from', $this->config['version']);
121          }
122   
123          $original_version = $this->config['version_update_from'];
124   
125          $this->migrator->set_output_handler(
126              new log_wrapper_migrator_output_handler(
127                  $this->language,
128                  new installer_migrator_output_handler($this->iohandler),
129                  $this->phpbb_root_path . 'store/migrations_' . time() . '.log',
130                  $this->filesystem
131              )
132          );
133   
134          $this->migrator->create_migrations_table();
135   
136          $migrations = $this->extension_manager
137              ->get_finder()
138              ->core_path('phpbb/db/migration/data/')
139              ->extension_directory('/migrations')
140              ->get_classes();
141   
142          $this->migrator->set_migrations($migrations);
143   
144          $migration_step_count = $this->installer_config->get('database_update_migration_steps', -1);
145          if ($migration_step_count < 0)
146          {
147              $migration_step_count = count($this->migrator->get_installable_migrations()) * 2;
148              $this->installer_config->set('database_update_migration_steps', $migration_step_count);
149          }
150   
151          $progress_count = $this->installer_config->get('database_update_count', 0);
152          $restart_progress_bar = ($progress_count === 0); // Only "restart" when the update runs for the first time
153          $this->iohandler->set_task_count($migration_step_count, $restart_progress_bar);
154          $this->installer_config->set_task_progress_count($migration_step_count);
155   
156          while (!$this->migrator->finished())
157          {
158              try
159              {
160                  $this->migrator->update();
161                  $progress_count++;
162   
163                  $last_run_migration = $this->migrator->get_last_run_migration();
164                  if (isset($last_run_migration['effectively_installed']) && $last_run_migration['effectively_installed'])
165                  {
166                      // We skipped two step, so increment $progress_count by another one
167                      $progress_count++;
168                  }
169                  else if (($last_run_migration['task'] === 'process_schema_step' && !$last_run_migration['state']['migration_schema_done']) ||
170                      ($last_run_migration['task'] === 'process_data_step' && !$last_run_migration['state']['migration_data_done']))
171                  {
172                      // We just run a step that wasn't counted yet so make it count
173                      $migration_step_count++;
174                  }
175   
176                  $this->iohandler->set_task_count($migration_step_count);
177                  $this->installer_config->set_task_progress_count($migration_step_count);
178                  $this->iohandler->set_progress('STAGE_UPDATE_DATABASE', $progress_count);
179              }
180              catch (exception $e)
181              {
182                  $msg = $e->getParameters();
183                  array_unshift($msg, $e->getMessage());
184   
185                  $this->iohandler->add_error_message($msg);
186                  throw new user_interaction_required_exception();
187              }
188   
189              if ($this->installer_config->get_time_remaining() <= 0 || $this->installer_config->get_memory_remaining() <= 0)
190              {
191                  $this->installer_config->set('database_update_count', $progress_count);
192                  $this->installer_config->set('database_update_migration_steps', $migration_step_count);
193                  throw new resource_limit_reached_exception();
194              }
195          }
196   
197          if ($original_version !== $this->config['version'])
198          {
199              $this->log->add(
200                  'admin',
201                  (isset($this->user->data['user_id'])) ? $this->user->data['user_id'] : ANONYMOUS,
202                  $this->user->ip,
203                  'LOG_UPDATE_DATABASE',
204                  false,
205                  array(
206                      $original_version,
207                      $this->config['version']
208                  )
209              );
210          }
211   
212          $this->iohandler->add_success_message('INLINE_UPDATE_SUCCESSFUL');
213   
214          $this->cache->purge();
215   
216          $this->config->increment('assets_version', 1);
217      }
218   
219      /**
220       * {@inheritdoc}
221       */
222      static public function get_step_count()
223      {
224          return 0;
225      }
226   
227      /**
228       * {@inheritdoc}
229       */
230      public function get_task_lang_name()
231      {
232          return '';
233      }
234  }
235