/**
  * Check versions for all extensions and return the ones that need an update
  *
  * @param bool $check_disabled
  * @param bool $check_purged
  * @param bool $force_update
  * @return array extension names => version info(new, current)
  */
 public function check_ext_versions($check_disabled = true, $check_purged = true, $force_update = false)
 {
     if ($check_disabled && $check_purged) {
         $extensions = $this->manager->all_available();
     } else {
         if ($check_disabled) {
             $extensions = $this->manager->all_configured();
         } else {
             if ($check_purged) {
                 $extensions = array_diff($this->manager->all_available(), $this->manager->all_disabled());
             } else {
                 $extensions = $this->manager->all_enabled();
             }
         }
     }
     $version_info = array();
     foreach (array_keys($extensions) as $extname) {
         try {
             $md_manager = $this->manager->create_extension_metadata_manager($extname, $this->template);
             // We only need an update if the version check returns potential updates
             if ($new_versions = $this->version_check($md_manager, $force_update)) {
                 $curr_version = $md_manager->get_metadata('version');
                 $version_info[$extname] = array('new' => $new_versions, 'current' => $curr_version);
             }
         } catch (\Exception $e) {
             // TODO: Should we store this information, if there is version check info available?
             continue;
         }
     }
     return $version_info;
 }
示例#2
0
 /**
  * {@inheritdoc}
  */
 public function run()
 {
     $this->user->session_begin();
     $this->user->setup(array('common', 'acp/common', 'cli'));
     $install_extensions = $this->iohandler->get_input('install-extensions', array());
     $all_available_extensions = $this->extension_manager->all_available();
     $i = $this->install_config->get('install_extensions_index', 0);
     $available_extensions = array_slice($all_available_extensions, $i);
     // Install extensions
     foreach ($available_extensions as $ext_name => $ext_path) {
         if (!empty($install_extensions) && $install_extensions !== ['all'] && !in_array($ext_name, $install_extensions)) {
             continue;
         }
         try {
             $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_ENABLE', time(), array($ext_name));
                 $this->iohandler->add_success_message(array('CLI_EXTENSION_ENABLE_SUCCESS', $ext_name));
             } else {
                 $this->iohandler->add_log_message(array('CLI_EXTENSION_ENABLE_FAILURE', $ext_name));
             }
         } catch (\Exception $e) {
             // Add fail log and continue
             $this->iohandler->add_log_message(array('CLI_EXTENSION_ENABLE_FAILURE', $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('install_extensions_index', $i);
     if ($i < sizeof($all_available_extensions)) {
         throw new resource_limit_reached_exception();
     }
 }
示例#3
0
 /**
  * Lists all the available extensions and dumps to the template
  *
  * @param  $phpbb_extension_manager     An instance of the extension manager
  * @return null
  */
 public function list_available_exts(\phpbb\extension\manager $phpbb_extension_manager)
 {
     $uninstalled = array_diff_key($phpbb_extension_manager->all_available(), $phpbb_extension_manager->all_configured());
     $available_extension_meta_data = array();
     foreach ($uninstalled as $name => $location) {
         $md_manager = $phpbb_extension_manager->create_extension_metadata_manager($name, $this->template);
         try {
             $meta = $md_manager->get_metadata('all');
             $available_extension_meta_data[$name] = array('META_DISPLAY_NAME' => $md_manager->get_metadata('display-name'), 'META_VERSION' => $meta['version']);
             $force_update = $this->request->variable('versioncheck_force', false);
             $updates = $this->version_check($md_manager, $force_update, !$force_update);
             $available_extension_meta_data[$name]['S_UP_TO_DATE'] = empty($updates);
             $available_extension_meta_data[$name]['S_VERSIONCHECK'] = true;
             $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'));
         } catch (\phpbb\extension\exception $e) {
             $this->template->assign_block_vars('disabled', array('META_DISPLAY_NAME' => $this->user->lang('EXTENSION_INVALID_LIST', $name, $e), 'S_VERSIONCHECK' => false));
         } catch (\RuntimeException $e) {
             $available_extension_meta_data[$name]['S_VERSIONCHECK'] = false;
         }
     }
     uasort($available_extension_meta_data, array($this, 'sort_extension_meta_data_table'));
     foreach ($available_extension_meta_data as $name => $block_vars) {
         $block_vars['U_DETAILS'] = $this->u_action . '&amp;action=details&amp;ext_name=' . urlencode($name);
         $this->template->assign_block_vars('disabled', $block_vars);
         $this->output_actions('disabled', array('ENABLE' => $this->u_action . '&amp;action=enable_pre&amp;ext_name=' . urlencode($name)));
     }
 }
示例#4
0
 /**
  * Lists all the available extensions and dumps to the template
  *
  * @param  $phpbb_extension_manager     An instance of the extension manager
  * @return null
  */
 public static function list_available_exts(\phpbb\extension\manager $phpbb_extension_manager)
 {
     $uninstalled = array_diff_key($phpbb_extension_manager->all_available(), $phpbb_extension_manager->all_configured());
     $available_extension_meta_data = array();
     foreach ($uninstalled as $name => $location) {
         $md_manager = $phpbb_extension_manager->create_extension_metadata_manager($name, objects::$template);
         try {
             $display_ext_name = $md_manager->get_metadata('display-name');
             $meta = $md_manager->get_metadata('all');
             $available_extension_meta_data[$name] = array('IS_BROKEN' => false, 'META_DISPLAY_NAME' => $display_ext_name, 'META_NAME' => $name, 'META_VERSION' => $meta['version'], 'U_DELETE' => objects::$u_action . '&amp;action=delete_ext&amp;ext_name=' . urlencode($name), 'U_EXT_NAME' => $name);
         } catch (\phpbb\extension\exception $e) {
             $available_extension_meta_data[$name] = array('IS_BROKEN' => true, 'META_DISPLAY_NAME' => isset($display_ext_name) ? $display_ext_name : objects::$user->lang['EXTENSION_BROKEN'] . ' (' . $name . ')', 'META_NAME' => $name, 'META_VERSION' => isset($meta['version']) ? $meta['version'] : '0.0.0', 'U_DELETE' => objects::$u_action . '&amp;action=delete_ext&amp;ext_name=' . urlencode($name), 'U_EXT_NAME' => $name);
         }
     }
     uasort($available_extension_meta_data, array('self', 'sort_extension_meta_data_table'));
     foreach ($available_extension_meta_data as $name => $block_vars) {
         if (!$block_vars['IS_BROKEN']) {
             $block_vars['U_DETAILS'] = objects::$u_action . '&amp;action=details&amp;ext_name=' . urlencode($name);
         }
         objects::$template->assign_block_vars('disabled', $block_vars);
         self::output_actions('disabled', array('ENABLE' => objects::$u_action . '&amp;action=enable_pre&amp;ext_name=' . urlencode($name)));
     }
 }
示例#5
0
 /**
  * Lists all the available extensions and dumps to the template
  *
  * @param  $phpbb_extension_manager     An instance of the extension manager
  * @return null
  */
 public function list_available_exts(\phpbb\extension\manager $phpbb_extension_manager)
 {
     global $template, $request, $user;
     $uninstalled = array_diff_key($phpbb_extension_manager->all_available(), $phpbb_extension_manager->all_configured());
     $available_extension_meta_data = array();
     foreach ($uninstalled as $name => $location) {
         $md_manager = $phpbb_extension_manager->create_extension_metadata_manager($name, $template);
         try {
             $display_ext_name = $md_manager->get_metadata('display-name');
             $meta = $md_manager->get_metadata('all');
             $available_extension_meta_data[$name] = array('META_DISPLAY_NAME' => $display_ext_name, 'META_VERSION' => $meta['version'], 'U_DELETE' => $this->main_link . '&amp;action=delete&amp;ext_name=' . urlencode($name));
         } catch (\phpbb\extension\exception $e) {
             $available_extension_meta_data[$name] = array('META_DISPLAY_NAME' => isset($display_ext_name) ? $display_ext_name : 'Broken extension (' . $name . ')', 'META_VERSION' => isset($meta['version']) ? $meta['version'] : '0.0.0', 'U_DELETE' => $this->main_link . '&amp;action=delete&amp;ext_name=' . urlencode($name));
         }
     }
     uasort($available_extension_meta_data, array($this, 'sort_extension_meta_data_table'));
     foreach ($available_extension_meta_data as $name => $block_vars) {
         $template->assign_block_vars('disabled', $block_vars);
     }
 }
示例#6
0
 /**
  * {@inheritdoc}
  */
 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);
 }