/**
  * 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
 /**
  * Lists all the enabled extensions and dumps to the template
  *
  * @param  $phpbb_extension_manager     An instance of the extension manager
  * @return null
  */
 public static function list_enabled_exts(\phpbb\extension\manager $phpbb_extension_manager)
 {
     $enabled_extension_meta_data = array();
     foreach ($phpbb_extension_manager->all_enabled() as $name => $location) {
         $md_manager = $phpbb_extension_manager->create_extension_metadata_manager($name, objects::$template);
         try {
             $meta = $md_manager->get_metadata('all');
             $enabled_extension_meta_data[$name] = array('META_DISPLAY_NAME' => $md_manager->get_metadata('display-name'), 'META_NAME' => $name, 'META_VERSION' => $meta['version']);
             $force_update = objects::$request->variable('versioncheck_force', false);
             $updates = self::version_check($md_manager, $force_update, !$force_update);
             $enabled_extension_meta_data[$name]['S_UP_TO_DATE'] = empty($updates);
             $enabled_extension_meta_data[$name]['S_VERSIONCHECK'] = true;
             $enabled_extension_meta_data[$name]['U_VERSIONCHECK_FORCE'] = objects::$u_action . '&action=details&versioncheck_force=1&ext_name=' . urlencode($md_manager->get_metadata('name'));
         } catch (\phpbb\extension\exception $e) {
             objects::$template->assign_block_vars('disabled', array('META_DISPLAY_NAME' => objects::$user->lang('EXTENSION_INVALID_LIST', $name, $e), 'META_NAME' => $name, 'S_VERSIONCHECK' => false));
         } catch (\RuntimeException $e) {
             $enabled_extension_meta_data[$name]['S_VERSIONCHECK'] = false;
         }
     }
     uasort($enabled_extension_meta_data, array('self', 'sort_extension_meta_data_table'));
     foreach ($enabled_extension_meta_data as $name => $block_vars) {
         $block_vars['U_DETAILS'] = objects::$u_action . '&action=details&ext_name=' . urlencode($name);
         objects::$template->assign_block_vars('enabled', $block_vars);
         self::output_actions('enabled', array('DISABLE' => objects::$u_action . '&action=disable&ext_name=' . urlencode($name)));
     }
 }
示例#3
0
文件: router.php 项目: phpbb/phpbb
 /**
  * Get the list of routes
  *
  * @return RouteCollection Get the route collection
  */
 public function get_routes()
 {
     if ($this->route_collection == null || empty($this->routing_files)) {
         $this->find_routing_files($this->extension_manager !== null ? $this->extension_manager->all_enabled(false) : array())->find($this->phpbb_root_path);
     }
     return $this->route_collection;
 }
 /**
  * Append extension resources to an array of resouces
  *
  * @see resources_locator_interface::locate_resources()
  *
  * @param mixed[] $resources List of resources
  *
  * @return mixed[] List of resources
  */
 protected function append_ext_resources(array $resources)
 {
     if ($this->extension_manager !== null) {
         foreach ($this->extension_manager->all_enabled(false) as $path) {
             if (file_exists($this->phpbb_root_path . $path . 'config/' . $this->environment . '/routing/environment.yml')) {
                 $resources[] = [$path . 'config/' . $this->environment . '/routing/environment.yml', 'yaml'];
             } else {
                 if (!is_dir($this->phpbb_root_path . $path . 'config/' . $this->environment)) {
                     if (file_exists($this->phpbb_root_path . $path . 'config/default/routing/environment.yml')) {
                         $resources[] = [$path . 'config/default/routing/environment.yml', 'yaml'];
                     } else {
                         if (!is_dir($this->phpbb_root_path . $path . 'config/default/routing') && file_exists($this->phpbb_root_path . $path . 'config/routing.yml')) {
                             $resources[] = [$path . 'config/routing.yml', 'yaml'];
                         }
                     }
                 }
             }
         }
     }
     return $resources;
 }
示例#5
0
 /**
  * Set custom style location (able to use directory outside of phpBB).
  *
  * Note: Templates are still compiled to phpBB's cache directory.
  *
  * @param string|array $names Array of names (or detailed names) or string of name of template(s) in inheritance tree order, used by extensions.
  *	E.g. array(
  *			'name' 		=> 'adm',
  *			'ext_path' 	=> 'adm/style/',
  *		)
  * @param string|array of string $paths Array of style paths, relative to current root directory
  * @return \phpbb\template\template $this
  */
 public function set_custom_style($names, $paths)
 {
     $paths = is_string($paths) ? array($paths) : $paths;
     $names = is_string($names) ? array($names) : $names;
     // Set as __main__ namespace
     $this->twig->getLoader()->setPaths($paths);
     // Add all namespaces for all extensions
     if ($this->extension_manager instanceof \phpbb\extension\manager) {
         $names[] = 'all';
         foreach ($this->extension_manager->all_enabled() as $ext_namespace => $ext_path) {
             // namespaces cannot contain /
             $namespace = str_replace('/', '_', $ext_namespace);
             $paths = array();
             foreach ($names as $template_dir) {
                 if (is_array($template_dir)) {
                     if (isset($template_dir['ext_path'])) {
                         $ext_style_template_path = $ext_path . $template_dir['ext_path'];
                         $ext_style_path = dirname($ext_style_template_path);
                         $ext_style_theme_path = $ext_style_path . 'theme/';
                     } else {
                         $ext_style_path = $ext_path . 'styles/' . $template_dir['name'] . '/';
                         $ext_style_template_path = $ext_style_path . 'template/';
                         $ext_style_theme_path = $ext_style_path . 'theme/';
                     }
                 } else {
                     $ext_style_path = $ext_path . 'styles/' . $template_dir . '/';
                     $ext_style_template_path = $ext_style_path . 'template/';
                     $ext_style_theme_path = $ext_style_path . 'theme/';
                 }
                 $is_valid_dir = false;
                 if (is_dir($ext_style_template_path)) {
                     $is_valid_dir = true;
                     $paths[] = $ext_style_template_path;
                 }
                 if (is_dir($ext_style_theme_path)) {
                     $is_valid_dir = true;
                     $paths[] = $ext_style_theme_path;
                 }
                 if ($is_valid_dir) {
                     // Add the base style directory as a safe directory
                     $this->twig->getLoader()->addSafeDirectory($ext_style_path);
                 }
             }
             $this->twig->getLoader()->setPaths($paths, $namespace);
         }
     }
     return $this;
 }
示例#6
0
 /**
  * Disable all extensions wich are required by the given extension.
  * 
  * @param mixed $extension_name The name of the extension.
  * @return void
  */
 public function disable_requiring_extensions($extension_name)
 {
     $extensions = $this->manager->all_enabled();
     $this->temporary_disabled_extensions[$extension_name] = array();
     foreach ($extensions as $ext_name => $ext_path) {
         if ($this->manager->is_disabled($ext_name)) {
             continue;
         }
         $meta_data = $this->manager->create_extension_metadata_manager($ext_name, $this->template)->get_metadata();
         if (isset($meta_data['require'][$extension_name])) {
             // Save that this extension is disabled
             $this->temporary_disabled_extensions[$extension_name][] = $ext_name;
             $this->manager->disable($ext_name);
         }
     }
     $this->config->set('wolfsblvt.core.temporary_disabled_extensions', json_encode($this->temporary_disabled_extensions));
     // Overwrite success message
     $this->user->add_lang_ext('wolfsblvt/core', 'extensions_override');
 }
示例#7
0
 /**
  * Get the list of enabled phpBB extensions
  *
  * Used in EVENT node
  *
  * @return array
  */
 public function get_phpbb_extensions()
 {
     return $this->extension_manager ? $this->extension_manager->all_enabled() : array();
 }
示例#8
0
 /**
  * Lists all the enabled extensions and dumps to the template
  *
  * @param  $phpbb_extension_manager     An instance of the extension manager
  * @return null
  */
 public function list_enabled_exts(\phpbb\extension\manager $phpbb_extension_manager)
 {
     $enabled_extension_meta_data = array();
     foreach ($phpbb_extension_manager->all_enabled() as $name => $location) {
         $md_manager = $phpbb_extension_manager->create_extension_metadata_manager($name, $this->template);
         try {
             $meta = $md_manager->get_metadata('all');
             $enabled_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);
             $enabled_extension_meta_data[$name]['S_UP_TO_DATE'] = empty($updates);
             $enabled_extension_meta_data[$name]['S_VERSIONCHECK'] = true;
             $enabled_extension_meta_data[$name]['U_VERSIONCHECK_FORCE'] = $this->u_action . '&action=details&versioncheck_force=1&ext_name=' . urlencode($md_manager->get_metadata('name'));
         } catch (\phpbb\extension\exception $e) {
             $message = call_user_func_array(array($this->user, 'lang'), array_merge(array($e->getMessage()), $e->get_parameters()));
             $this->template->assign_block_vars('disabled', array('META_DISPLAY_NAME' => $this->user->lang('EXTENSION_INVALID_LIST', $name, $message), 'S_VERSIONCHECK' => false));
         } catch (\RuntimeException $e) {
             $enabled_extension_meta_data[$name]['S_VERSIONCHECK'] = false;
         }
     }
     uasort($enabled_extension_meta_data, array($this, 'sort_extension_meta_data_table'));
     foreach ($enabled_extension_meta_data as $name => $block_vars) {
         $block_vars['NAME'] = $name;
         $block_vars['U_DETAILS'] = $this->u_action . '&action=details&ext_name=' . urlencode($name);
         $this->template->assign_block_vars('enabled', $block_vars);
         $this->output_actions('enabled', array('DISABLE' => $this->u_action . '&action=disable_pre&ext_name=' . urlencode($name)));
     }
 }
示例#9
0
 /**
  * Lists all the enabled extensions and dumps to the template
  *
  * @param  $phpbb_extension_manager     An instance of the extension manager
  * @param  $ext_name                    Name of the reenabled extension
  * @return null
  */
 public function list_enabled_exts(\phpbb\extension\manager $phpbb_extension_manager, $ext_name)
 {
     $enabled_extension_meta_data = array();
     foreach ($phpbb_extension_manager->all_enabled() as $name => $location) {
         $md_manager = $phpbb_extension_manager->create_extension_metadata_manager($name, $this->template);
         try {
             $meta = $md_manager->get_metadata('all');
             $enabled_extension_meta_data[$name] = array('META_DISPLAY_NAME' => $md_manager->get_metadata('display-name'), 'META_VERSION' => $meta['version']);
             if ($name == $ext_name) {
                 $enabled_extension_meta_data[$name]['REENABLED'] = true;
             }
             $force_update = $this->request->variable('versioncheck_force', false);
             $updates = $this->version_check($md_manager, $force_update, !$force_update);
             $enabled_extension_meta_data[$name]['S_UP_TO_DATE'] = empty($updates);
             $enabled_extension_meta_data[$name]['S_VERSIONCHECK'] = true;
         } 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) {
             $enabled_extension_meta_data[$name]['S_VERSIONCHECK'] = false;
         }
     }
     uasort($enabled_extension_meta_data, array($this, 'sort_extension_meta_data_table'));
     foreach ($enabled_extension_meta_data as $name => $block_vars) {
         $this->template->assign_block_vars('enabled', $block_vars);
         $this->output_actions('enabled', array('REENABLE' => $this->u_action . '&action=reenable&ext_name=' . urlencode($name), 'REINSTALL' => $this->u_action . '&action=reinstall&ext_name=' . urlencode($name)));
     }
 }