/** * Set custom style location (able to use directory outside of src). * * Note: Templates are still compiled to src'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 \src\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 \src\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; }
/** * Get the list of enabled src extensions * * Used in EVENT node * * @return array */ public function get_src_extensions() { return $this->extension_manager ? $this->extension_manager->all_enabled() : array(); }
/** * Lists all the enabled extensions and dumps to the template * * @param $src_extension_manager An instance of the extension manager * @return null */ public function list_enabled_exts(\src\extension\manager $src_extension_manager) { $enabled_extension_meta_data = array(); foreach ($src_extension_manager->all_enabled() as $name => $location) { $md_manager = $src_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 (\src\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) { $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))); } }