Verzeichnisstruktur phpBB-3.1.0


Veröffentlicht
27.10.2014

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

acp_extensions.php

Zuletzt modifiziert: 09.10.2024, 12:52 - Dateigröße: 17.82 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  /**
 015  * @ignore
 016  */
 017  if (!defined('IN_PHPBB'))
 018  {
 019      exit;
 020  }
 021   
 022  class acp_extensions
 023  {
 024      var $u_action;
 025   
 026      private $db;
 027      private $config;
 028      private $template;
 029      private $user;
 030      private $cache;
 031      private $log;
 032      private $request;
 033   
 034      function main()
 035      {
 036          // Start the page
 037          global $config, $user, $template, $request, $phpbb_extension_manager, $db, $phpbb_root_path, $phpEx, $phpbb_log, $cache;
 038   
 039          $this->db = $db;
 040          $this->config = $config;
 041          $this->template = $template;
 042          $this->user = $user;
 043          $this->cache = $cache;
 044          $this->request = $request;
 045          $this->log = $phpbb_log;
 046   
 047          $user->add_lang(array('install', 'acp/extensions', 'migrator'));
 048   
 049          $this->page_title = 'ACP_EXTENSIONS';
 050   
 051          $action = $request->variable('action', 'list');
 052          $ext_name = $request->variable('ext_name', '');
 053   
 054          // What is a safe limit of execution time? Half the max execution time should be safe.
 055          $safe_time_limit = (ini_get('max_execution_time') / 2);
 056          $start_time = time();
 057   
 058          // Cancel action
 059          if ($request->is_set_post('cancel'))
 060          {
 061              $action = 'list';
 062              $ext_name = '';
 063          }
 064   
 065          if (in_array($action, array('enable', 'disable', 'delete_data')) && !check_link_hash($request->variable('hash', ''), $action . '.' . $ext_name))
 066          {
 067              trigger_error('FORM_INVALID', E_USER_WARNING);
 068          }
 069   
 070          // If they've specified an extension, let's load the metadata manager and validate it.
 071          if ($ext_name)
 072          {
 073              $md_manager = new \phpbb\extension\metadata_manager($ext_name, $config, $phpbb_extension_manager, $template, $user, $phpbb_root_path);
 074   
 075              try
 076              {
 077                  $md_manager->get_metadata('all');
 078              }
 079              catch(\phpbb\extension\exception $e)
 080              {
 081                  trigger_error($e, E_USER_WARNING);
 082              }
 083          }
 084   
 085          // What are we doing?
 086          switch ($action)
 087          {
 088              case 'set_config_version_check_force_unstable':
 089                  $force_unstable = $this->request->variable('force_unstable', false);
 090   
 091                  if ($force_unstable)
 092                  {
 093                      $s_hidden_fields = build_hidden_fields(array(
 094                          'force_unstable'    => $force_unstable,
 095                      ));
 096   
 097                      confirm_box(false, $user->lang('EXTENSION_FORCE_UNSTABLE_CONFIRM'), $s_hidden_fields);
 098                  }
 099                  else
 100                  {
 101                      $config->set('extension_force_unstable', false);
 102                      trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action));
 103                  }
 104                  break;
 105   
 106              case 'list':
 107              default:
 108                  if (confirm_box(true))
 109                  {
 110                      $config->set('extension_force_unstable', true);
 111                      trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action));
 112                  }
 113   
 114                  $this->list_enabled_exts($phpbb_extension_manager);
 115                  $this->list_disabled_exts($phpbb_extension_manager);
 116                  $this->list_available_exts($phpbb_extension_manager);
 117   
 118                  $this->template->assign_vars(array(
 119                      'U_VERSIONCHECK_FORCE'     => $this->u_action . '&amp;action=list&amp;versioncheck_force=1',
 120                      'FORCE_UNSTABLE'        => $config['extension_force_unstable'],
 121                      'U_ACTION'                 => $this->u_action,
 122                  ));
 123   
 124                  add_form_key('version_check_settings');
 125   
 126                  $this->tpl_name = 'acp_ext_list';
 127              break;
 128   
 129              case 'enable_pre':
 130                  if (!$md_manager->validate_dir())
 131                  {
 132                      trigger_error($user->lang['EXTENSION_DIR_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
 133                  }
 134   
 135                  if (!$md_manager->validate_enable())
 136                  {
 137                      trigger_error($user->lang['EXTENSION_NOT_AVAILABLE'] . adm_back_link($this->u_action), E_USER_WARNING);
 138                  }
 139   
 140                  $extension = $phpbb_extension_manager->get_extension($ext_name);
 141                  if (!$extension->is_enableable())
 142                  {
 143                      trigger_error($user->lang['EXTENSION_NOT_ENABLEABLE'] . adm_back_link($this->u_action), E_USER_WARNING);
 144                  }
 145   
 146                  if ($phpbb_extension_manager->is_enabled($ext_name))
 147                  {
 148                      redirect($this->u_action);
 149                  }
 150   
 151                  $this->tpl_name = 'acp_ext_enable';
 152   
 153                  $template->assign_vars(array(
 154                      'PRE'                => true,
 155                      'L_CONFIRM_MESSAGE'    => $this->user->lang('EXTENSION_ENABLE_CONFIRM', $md_manager->get_metadata('display-name')),
 156                      'U_ENABLE'            => $this->u_action . '&amp;action=enable&amp;ext_name=' . urlencode($ext_name) . '&amp;hash=' . generate_link_hash('enable.' . $ext_name),
 157                  ));
 158              break;
 159   
 160              case 'enable':
 161                  if (!$md_manager->validate_dir())
 162                  {
 163                      trigger_error($user->lang['EXTENSION_DIR_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
 164                  }
 165   
 166                  if (!$md_manager->validate_enable())
 167                  {
 168                      trigger_error($user->lang['EXTENSION_NOT_AVAILABLE'] . adm_back_link($this->u_action), E_USER_WARNING);
 169                  }
 170   
 171                  $extension = $phpbb_extension_manager->get_extension($ext_name);
 172                  if (!$extension->is_enableable())
 173                  {
 174                      trigger_error($user->lang['EXTENSION_NOT_ENABLEABLE'] . adm_back_link($this->u_action), E_USER_WARNING);
 175                  }
 176   
 177                  if ($phpbb_extension_manager->is_enabled($ext_name))
 178                  {
 179                      redirect($this->u_action);
 180                  }
 181   
 182                  try
 183                  {
 184                      while ($phpbb_extension_manager->enable_step($ext_name))
 185                      {
 186                          // Are we approaching the time limit? If so we want to pause the update and continue after refreshing
 187                          if ((time() - $start_time) >= $safe_time_limit)
 188                          {
 189                              $template->assign_var('S_NEXT_STEP', true);
 190   
 191                              meta_refresh(0, $this->u_action . '&amp;action=enable&amp;ext_name=' . urlencode($ext_name) . '&amp;hash=' . generate_link_hash('enable.' . $ext_name));
 192                          }
 193                      }
 194                      $this->log->add('admin', $user->data['user_id'], $user->ip, 'LOG_EXT_ENABLE', time(), array($ext_name));
 195                  }
 196                  catch (\phpbb\db\migration\exception $e)
 197                  {
 198                      $template->assign_var('MIGRATOR_ERROR', $e->getLocalisedMessage($user));
 199                  }
 200   
 201                  $this->tpl_name = 'acp_ext_enable';
 202   
 203                  $template->assign_vars(array(
 204                      'U_RETURN'        => $this->u_action . '&amp;action=list',
 205                  ));
 206              break;
 207   
 208              case 'disable_pre':
 209                  if (!$phpbb_extension_manager->is_enabled($ext_name))
 210                  {
 211                      redirect($this->u_action);
 212                  }
 213   
 214                  $this->tpl_name = 'acp_ext_disable';
 215   
 216                  $template->assign_vars(array(
 217                      'PRE'                => true,
 218                      'L_CONFIRM_MESSAGE'    => $this->user->lang('EXTENSION_DISABLE_CONFIRM', $md_manager->get_metadata('display-name')),
 219                      'U_DISABLE'            => $this->u_action . '&amp;action=disable&amp;ext_name=' . urlencode($ext_name) . '&amp;hash=' . generate_link_hash('disable.' . $ext_name),
 220                  ));
 221              break;
 222   
 223              case 'disable':
 224                  if (!$phpbb_extension_manager->is_enabled($ext_name))
 225                  {
 226                      redirect($this->u_action);
 227                  }
 228   
 229                  while ($phpbb_extension_manager->disable_step($ext_name))
 230                  {
 231                      // Are we approaching the time limit? If so we want to pause the update and continue after refreshing
 232                      if ((time() - $start_time) >= $safe_time_limit)
 233                      {
 234                          $template->assign_var('S_NEXT_STEP', true);
 235   
 236                          meta_refresh(0, $this->u_action . '&amp;action=disable&amp;ext_name=' . urlencode($ext_name) . '&amp;hash=' . generate_link_hash('disable.' . $ext_name));
 237                      }
 238                  }
 239                  $this->log->add('admin', $user->data['user_id'], $user->ip, 'LOG_EXT_DISABLE', time(), array($ext_name));
 240   
 241                  $this->tpl_name = 'acp_ext_disable';
 242   
 243                  $template->assign_vars(array(
 244                      'U_RETURN'    => $this->u_action . '&amp;action=list',
 245                  ));
 246              break;
 247   
 248              case 'delete_data_pre':
 249                  if ($phpbb_extension_manager->is_enabled($ext_name))
 250                  {
 251                      redirect($this->u_action);
 252                  }
 253                  $this->tpl_name = 'acp_ext_delete_data';
 254   
 255                  $template->assign_vars(array(
 256                      'PRE'                => true,
 257                      'L_CONFIRM_MESSAGE'    => $this->user->lang('EXTENSION_DELETE_DATA_CONFIRM', $md_manager->get_metadata('display-name')),
 258                      'U_PURGE'            => $this->u_action . '&amp;action=delete_data&amp;ext_name=' . urlencode($ext_name) . '&amp;hash=' . generate_link_hash('delete_data.' . $ext_name),
 259                  ));
 260              break;
 261   
 262              case 'delete_data':
 263                  if ($phpbb_extension_manager->is_enabled($ext_name))
 264                  {
 265                      redirect($this->u_action);
 266                  }
 267   
 268                  try
 269                  {
 270                      while ($phpbb_extension_manager->purge_step($ext_name))
 271                      {
 272                          // Are we approaching the time limit? If so we want to pause the update and continue after refreshing
 273                          if ((time() - $start_time) >= $safe_time_limit)
 274                          {
 275                              $template->assign_var('S_NEXT_STEP', true);
 276   
 277                              meta_refresh(0, $this->u_action . '&amp;action=delete_data&amp;ext_name=' . urlencode($ext_name) . '&amp;hash=' . generate_link_hash('delete_data.' . $ext_name));
 278                          }
 279                      }
 280                      $this->log->add('admin', $user->data['user_id'], $user->ip, 'LOG_EXT_PURGE', time(), array($ext_name));
 281                  }
 282                  catch (\phpbb\db\migration\exception $e)
 283                  {
 284                      $template->assign_var('MIGRATOR_ERROR', $e->getLocalisedMessage($user));
 285                  }
 286   
 287                  $this->tpl_name = 'acp_ext_delete_data';
 288   
 289                  $template->assign_vars(array(
 290                      'U_RETURN'    => $this->u_action . '&amp;action=list',
 291                  ));
 292              break;
 293   
 294              case 'details':
 295                  // Output it to the template
 296                  $md_manager->output_template_data();
 297   
 298                  try
 299                  {
 300                      $updates_available = $this->version_check($md_manager, $request->variable('versioncheck_force', false));
 301   
 302                      $template->assign_vars(array(
 303                          'S_UP_TO_DATE'        => empty($updates_available),
 304                          'S_VERSIONCHECK'    => true,
 305                          'UP_TO_DATE_MSG'    => $this->user->lang(empty($updates_available) ? 'UP_TO_DATE' : 'NOT_UP_TO_DATE', $md_manager->get_metadata('display-name')),
 306                      ));
 307   
 308                      foreach ($updates_available as $branch => $version_data)
 309                      {
 310                          $template->assign_block_vars('updates_available', $version_data);
 311                      }
 312                  }
 313                  catch (\RuntimeException $e)
 314                  {
 315                      $template->assign_vars(array(
 316                          'S_VERSIONCHECK_STATUS'            => $e->getCode(),
 317                          'VERSIONCHECK_FAIL_REASON'        => ($e->getMessage() !== $user->lang('VERSIONCHECK_FAIL')) ? $e->getMessage() : '',
 318                      ));
 319                  }
 320   
 321                  $template->assign_vars(array(
 322                      'U_BACK'                => $this->u_action . '&amp;action=list',
 323                      'U_VERSIONCHECK_FORCE'    => $this->u_action . '&amp;action=details&amp;versioncheck_force=1&amp;ext_name=' . urlencode($md_manager->get_metadata('name')),
 324                  ));
 325   
 326                  $this->tpl_name = 'acp_ext_details';
 327              break;
 328          }
 329      }
 330   
 331      /**
 332      * Lists all the enabled extensions and dumps to the template
 333      *
 334      * @param  $phpbb_extension_manager     An instance of the extension manager
 335      * @return null
 336      */
 337      public function list_enabled_exts(\phpbb\extension\manager $phpbb_extension_manager)
 338      {
 339          $enabled_extension_meta_data = array();
 340   
 341          foreach ($phpbb_extension_manager->all_enabled() as $name => $location)
 342          {
 343              $md_manager = $phpbb_extension_manager->create_extension_metadata_manager($name, $this->template);
 344   
 345              try
 346              {
 347                  $meta = $md_manager->get_metadata('all');
 348                  $enabled_extension_meta_data[$name] = array(
 349                      'META_DISPLAY_NAME' => $md_manager->get_metadata('display-name'),
 350                      'META_VERSION' => $meta['version'],
 351                  );
 352   
 353                  $force_update = $this->request->variable('versioncheck_force', false);
 354                  $updates = $this->version_check($md_manager, $force_update, !$force_update);
 355   
 356                  $enabled_extension_meta_data[$name]['S_UP_TO_DATE'] = empty($updates);
 357                  $enabled_extension_meta_data[$name]['S_VERSIONCHECK'] = true;
 358                  $enabled_extension_meta_data[$name]['U_VERSIONCHECK_FORCE'] = $this->u_action . '&amp;action=details&amp;versioncheck_force=1&amp;ext_name=' . urlencode($md_manager->get_metadata('name'));
 359              }
 360              catch(\phpbb\extension\exception $e)
 361              {
 362                  $this->template->assign_block_vars('disabled', array(
 363                      'META_DISPLAY_NAME'        => $this->user->lang('EXTENSION_INVALID_LIST', $name, $e),
 364                      'S_VERSIONCHECK'        => false,
 365                  ));
 366              }
 367              catch (\RuntimeException $e)
 368              {
 369                  $enabled_extension_meta_data[$name]['S_VERSIONCHECK'] = false;
 370              }
 371          }
 372   
 373          uasort($enabled_extension_meta_data, array($this, 'sort_extension_meta_data_table'));
 374   
 375          foreach ($enabled_extension_meta_data as $name => $block_vars)
 376          {
 377              $block_vars['U_DETAILS'] = $this->u_action . '&amp;action=details&amp;ext_name=' . urlencode($name);
 378   
 379              $this->template->assign_block_vars('enabled', $block_vars);
 380   
 381              $this->output_actions('enabled', array(
 382                  'DISABLE'        => $this->u_action . '&amp;action=disable_pre&amp;ext_name=' . urlencode($name),
 383              ));
 384          }
 385      }
 386   
 387      /**
 388      * Lists all the disabled extensions and dumps to the template
 389      *
 390      * @param  $phpbb_extension_manager     An instance of the extension manager
 391      * @return null
 392      */
 393      public function list_disabled_exts(\phpbb\extension\manager $phpbb_extension_manager)
 394      {
 395          $disabled_extension_meta_data = array();
 396   
 397          foreach ($phpbb_extension_manager->all_disabled() as $name => $location)
 398          {
 399              $md_manager = $phpbb_extension_manager->create_extension_metadata_manager($name, $this->template);
 400   
 401              try
 402              {
 403                  $meta = $md_manager->get_metadata('all');
 404                  $disabled_extension_meta_data[$name] = array(
 405                      'META_DISPLAY_NAME' => $md_manager->get_metadata('display-name'),
 406                      'META_VERSION' => $meta['version'],
 407                  );
 408   
 409                  $force_update = $this->request->variable('versioncheck_force', false);
 410                  $updates = $this->version_check($md_manager, $force_update, !$force_update);
 411   
 412                  $disabled_extension_meta_data[$name]['S_UP_TO_DATE'] = empty($updates);
 413                  $disabled_extension_meta_data[$name]['S_VERSIONCHECK'] = true;
 414                  $disabled_extension_meta_data[$name]['U_VERSIONCHECK_FORCE'] = $this->u_action . '&amp;action=details&amp;versioncheck_force=1&amp;ext_name=' . urlencode($md_manager->get_metadata('name'));
 415              }
 416              catch(\phpbb\extension\exception $e)
 417              {
 418                  $this->template->assign_block_vars('disabled', array(
 419                      'META_DISPLAY_NAME'        => $this->user->lang('EXTENSION_INVALID_LIST', $name, $e),
 420                      'S_VERSIONCHECK'        => false,
 421                  ));
 422              }
 423              catch (\RuntimeException $e)
 424              {
 425                  $disabeld_extension_meta_data[$name]['S_VERSIONCHECK'] = false;
 426              }
 427          }
 428   
 429          uasort($disabled_extension_meta_data, array($this, 'sort_extension_meta_data_table'));
 430   
 431          foreach ($disabled_extension_meta_data as $name => $block_vars)
 432          {
 433              $block_vars['U_DETAILS'] = $this->u_action . '&amp;action=details&amp;ext_name=' . urlencode($name);
 434   
 435              $this->template->assign_block_vars('disabled', $block_vars);
 436   
 437              $this->output_actions('disabled', array(
 438                  'ENABLE'        => $this->u_action . '&amp;action=enable_pre&amp;ext_name=' . urlencode($name),
 439                  'DELETE_DATA'    => $this->u_action . '&amp;action=delete_data_pre&amp;ext_name=' . urlencode($name),
 440              ));
 441          }
 442      }
 443   
 444      /**
 445      * Lists all the available extensions and dumps to the template
 446      *
 447      * @param  $phpbb_extension_manager     An instance of the extension manager
 448      * @return null
 449      */
 450      public function list_available_exts(\phpbb\extension\manager $phpbb_extension_manager)
 451      {
 452          $uninstalled = array_diff_key($phpbb_extension_manager->all_available(), $phpbb_extension_manager->all_configured());
 453   
 454          $available_extension_meta_data = array();
 455   
 456          foreach ($uninstalled as $name => $location)
 457          {
 458              $md_manager = $phpbb_extension_manager->create_extension_metadata_manager($name, $this->template);
 459   
 460              try
 461              {
 462                  $meta = $md_manager->get_metadata('all');
 463                  $available_extension_meta_data[$name] = array(
 464                      'META_DISPLAY_NAME' => $md_manager->get_metadata('display-name'),
 465                      'META_VERSION' => $meta['version'],
 466                  );
 467   
 468                  $force_update = $this->request->variable('versioncheck_force', false);
 469                  $updates = $this->version_check($md_manager, $force_update, !$force_update);
 470   
 471                  $available_extension_meta_data[$name]['S_UP_TO_DATE'] = empty($updates);
 472                  $available_extension_meta_data[$name]['S_VERSIONCHECK'] = true;
 473                  $available_extension_meta_data[$name]['U_VERSIONCHECK_FORCE'] = $this->u_action . '&amp;action=details&amp;versioncheck_force=1&amp;ext_name=' . urlencode($md_manager->get_metadata('name'));
 474              }
 475              catch(\phpbb\extension\exception $e)
 476              {
 477                  $this->template->assign_block_vars('disabled', array(
 478                      'META_DISPLAY_NAME'        => $this->user->lang('EXTENSION_INVALID_LIST', $name, $e),
 479                      'S_VERSIONCHECK'        => false,
 480                  ));
 481              }
 482              catch (\RuntimeException $e)
 483              {
 484                  $available_extension_meta_data[$name]['S_VERSIONCHECK'] = false;
 485              }
 486          }
 487   
 488          uasort($available_extension_meta_data, array($this, 'sort_extension_meta_data_table'));
 489   
 490          foreach ($available_extension_meta_data as $name => $block_vars)
 491          {
 492              $block_vars['U_DETAILS'] = $this->u_action . '&amp;action=details&amp;ext_name=' . urlencode($name);
 493   
 494              $this->template->assign_block_vars('disabled', $block_vars);
 495   
 496              $this->output_actions('disabled', array(
 497                  'ENABLE'        => $this->u_action . '&amp;action=enable_pre&amp;ext_name=' . urlencode($name),
 498              ));
 499          }
 500      }
 501   
 502      /**
 503      * Output actions to a block
 504      *
 505      * @param string $block
 506      * @param array $actions
 507      */
 508      private function output_actions($block, $actions)
 509      {
 510          foreach ($actions as $lang => $url)
 511          {
 512              $this->template->assign_block_vars($block . '.actions', array(
 513                  'L_ACTION'            => $this->user->lang('EXTENSION_' . $lang),
 514                  'L_ACTION_EXPLAIN'    => (isset($this->user->lang['EXTENSION_' . $lang . '_EXPLAIN'])) ? $this->user->lang('EXTENSION_' . $lang . '_EXPLAIN') : '',
 515                  'U_ACTION'            => $url,
 516              ));
 517          }
 518      }
 519   
 520      /**
 521      * Check the version and return the available updates.
 522      *
 523      * @param \phpbb\extension\metadata_manager $md_manager The metadata manager for the version to check.
 524      * @param bool $force_update Ignores cached data. Defaults to false.
 525      * @param bool $force_cache Force the use of the cache. Override $force_update.
 526      * @return string
 527      * @throws RuntimeException
 528      */
 529      protected function version_check(\phpbb\extension\metadata_manager $md_manager, $force_update = false, $force_cache = false)
 530      {
 531          $meta = $md_manager->get_metadata('all');
 532   
 533          if (!isset($meta['extra']['version-check']))
 534          {
 535              throw new \RuntimeException($this->user->lang('NO_VERSIONCHECK'), 1);
 536          }
 537   
 538          $version_check = $meta['extra']['version-check'];
 539   
 540          $version_helper = new \phpbb\version_helper($this->cache, $this->config, $this->user);
 541          $version_helper->set_current_version($meta['version']);
 542          $version_helper->set_file_location($version_check['host'], $version_check['directory'], $version_check['filename']);
 543          $version_helper->force_stability($this->config['extension_force_unstable'] ? 'unstable' : null);
 544   
 545          return $updates = $version_helper->get_suggested_updates($force_update, $force_cache);
 546      }
 547   
 548      /**
 549      * Sort helper for the table containing the metadata about the extensions.
 550      */
 551      protected function sort_extension_meta_data_table($val1, $val2)
 552      {
 553          return strnatcasecmp($val1['META_DISPLAY_NAME'], $val2['META_DISPLAY_NAME']);
 554      }
 555  }
 556