/** * 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; }
/** * 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))); } }
/** * 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; }
/** * 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; }
/** * 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'); }
/** * 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(); }
/** * 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))); } }
/** * 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))); } }