From 698c48feabfe9ca3cdb6f127150a21892d880ff3 Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Fri, 17 Aug 2018 11:52:23 +0200 Subject: [PATCH] Add ThemeBundle autowire + add TwigListener to load the favicon --- config/services.yaml | 11 ++++ main/inc/lib/template.lib.php | 31 ++-------- favicon.ico => public/favicon.ico | Bin .../EventListener/LegacyListener.php | 5 +- .../EventListener/SetupThemeListener.php | 2 +- .../EventListener/TwigListener.php | 55 ++++++++++++++++++ src/ThemeBundle/Model/MenuItemModel.php | 12 ++-- src/ThemeBundle/Resources/config/services.xml | 6 +- .../Resources/config/services.yaml | 19 ++---- .../Resources/views/Layout/head.html.twig | 2 +- src/ThemeBundle/Theme/ThemeManager.php | 14 ++--- 11 files changed, 95 insertions(+), 62 deletions(-) rename favicon.ico => public/favicon.ico (100%) mode change 100755 => 100644 create mode 100644 src/ThemeBundle/EventListener/TwigListener.php diff --git a/config/services.yaml b/config/services.yaml index 3e7e163994..36c4397f7b 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -14,6 +14,17 @@ services: exclude: '../src/PageBundle/{Entity,Migrations,Tests}' public: true + Chamilo\ThemeBundle\: + autowire: true + resource: '../src/ThemeBundle/*' + exclude: '../src/ThemeBundle/{Entity,Migrations,Tests}' + public: true + + Chamilo\ThemeBundle\Controller\ExceptionController: + public: true + arguments: + $debug: '%kernel.debug%' + # Put parameters here that don't need to change on each machine where the app is deployed # https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration parameters: diff --git a/main/inc/lib/template.lib.php b/main/inc/lib/template.lib.php index 0bb998d66b..9ae75d675c 100755 --- a/main/inc/lib/template.lib.php +++ b/main/inc/lib/template.lib.php @@ -985,38 +985,17 @@ class Template public static function getPortalIcon($theme) { // Default root chamilo favicon - $favico = ''; + $icon = ''; // Added to verify if in the current Chamilo Theme exist a favicon - $favicoThemeUrl = api_get_path(SYS_CSS_PATH).'/themes/'.$theme.'/images/'; + $themeUrl = api_get_path(SYS_CSS_PATH).'themes/'.$theme.'/images/'; //If exist pick the current chamilo theme favicon - if (is_file($favicoThemeUrl.'favicon.ico')) { - $favico = ''; + if (is_file($themeUrl.'favicon.ico')) { + $icon = ''; } - if (api_is_multiple_url_enabled()) { - $access_url_id = api_get_current_access_url_id(); - if ($access_url_id != -1) { - $url_info = api_get_access_url($access_url_id); - $url = api_remove_trailing_slash( - preg_replace('/https?:\/\//i', '', $url_info['url']) - ); - $clean_url = api_replace_dangerous_char($url); - $clean_url = str_replace('/', '-', $clean_url); - $clean_url .= '/'; - $homep = api_get_path(REL_PATH).'home/'.$clean_url; //homep for Home Path - $icon_real_homep = api_get_path(SYS_APP_PATH).'home/'.$clean_url; - //we create the new dir for the new sites - if (is_file($icon_real_homep.'favicon.ico')) { - $favico = ''; - } - } - } - - //var_dump(Container::$container->get('router')->generate('main', ['name' => '1'])); - //var_dump(api_get_path(WEB_PATH)); - return $favico; + return $icon; } /** diff --git a/favicon.ico b/public/favicon.ico old mode 100755 new mode 100644 similarity index 100% rename from favicon.ico rename to public/favicon.ico diff --git a/src/CoreBundle/EventListener/LegacyListener.php b/src/CoreBundle/EventListener/LegacyListener.php index 02f1a1fcfd..67c6c20574 100644 --- a/src/CoreBundle/EventListener/LegacyListener.php +++ b/src/CoreBundle/EventListener/LegacyListener.php @@ -133,8 +133,9 @@ class LegacyListener $twig->addGlobal('_admin', $adminInfo); - $theme = api_get_visual_theme(); - $twig->addGlobal('favico', \Template::getPortalIcon($theme)); + // Theme icon is loaded in the TwigListener src/ThemeBundle/EventListener/TwigListener.php + //$theme = api_get_visual_theme(); + //$twig->addGlobal('favico', \Template::getPortalIcon($theme)); $extraFooter = trim(api_get_setting('footer_extra_content')); $twig->addGlobal('footer_extra_content', $extraFooter); diff --git a/src/ThemeBundle/EventListener/SetupThemeListener.php b/src/ThemeBundle/EventListener/SetupThemeListener.php index 59ac99799d..ab1ab439b0 100644 --- a/src/ThemeBundle/EventListener/SetupThemeListener.php +++ b/src/ThemeBundle/EventListener/SetupThemeListener.php @@ -21,7 +21,7 @@ class SetupThemeListener protected $lteAdmin; - public function __construct($manager, $cssBase = null, $lteAdmin = null) + public function __construct(ThemeManager $manager, $cssBase = null, $lteAdmin = null) { $this->cssBase = $cssBase ?: 'bundles/avanzuadmintheme/'; $this->lteAdmin = $lteAdmin ?: 'vendor/AdminLTE/css/'; diff --git a/src/ThemeBundle/EventListener/TwigListener.php b/src/ThemeBundle/EventListener/TwigListener.php new file mode 100644 index 0000000000..c75c35d6a5 --- /dev/null +++ b/src/ThemeBundle/EventListener/TwigListener.php @@ -0,0 +1,55 @@ +container = $container; + } + + use ContainerAwareTrait; + + /** + * @param GetResponseEvent $event + */ + public function onKernelRequest(GetResponseEvent $event) + { + if (!$event->isMasterRequest()) { + return; + } + + $container = $this->container; + + Container::setContainer($container); + Container::setLegacyServices($container); + + $theme = api_get_visual_theme(); + $twig = $container->get('twig'); + $twig->addGlobal('favico', \Template::getPortalIcon($theme)); + } + + /** + * @return array + */ + public static function getSubscribedEvents() + { + return [ + // must be registered before the default Locale listener + KernelEvents::REQUEST => [['onKernelRequest', 15]], + ]; + } + +} diff --git a/src/ThemeBundle/Model/MenuItemModel.php b/src/ThemeBundle/Model/MenuItemModel.php index a2faa6990d..cb5fda1408 100644 --- a/src/ThemeBundle/Model/MenuItemModel.php +++ b/src/ThemeBundle/Model/MenuItemModel.php @@ -15,7 +15,7 @@ namespace Chamilo\ThemeBundle\Model; class MenuItemModel implements MenuItemInterface { /** - * @var mixed + * @var string */ protected $identifier; @@ -60,17 +60,17 @@ class MenuItemModel implements MenuItemInterface protected $parent = null; public function __construct( - $id, - $label, - $route, - $routeArgs = [], + string $identifier = '', + $label = '', + $route = '', + array $routeArgs = [], $icon = false, $badge = false, $badgeColor = 'green' ) { $this->badge = $badge; $this->icon = $icon; - $this->identifier = $id; + $this->identifier = $identifier; $this->label = $label; $this->route = $route; $this->routeArgs = $routeArgs; diff --git a/src/ThemeBundle/Resources/config/services.xml b/src/ThemeBundle/Resources/config/services.xml index 9e1fbc2916..d9b8f398e0 100644 --- a/src/ThemeBundle/Resources/config/services.xml +++ b/src/ThemeBundle/Resources/config/services.xml @@ -20,9 +20,9 @@ - - %kernel.debug% - + + + diff --git a/src/ThemeBundle/Resources/config/services.yaml b/src/ThemeBundle/Resources/config/services.yaml index f0e2c9c2a0..da76b5e7f4 100644 --- a/src/ThemeBundle/Resources/config/services.yaml +++ b/src/ThemeBundle/Resources/config/services.yaml @@ -1,14 +1,5 @@ -services: - _defaults: - autowire: true - - Chamilo\ThemeBundle\Controller\ExceptionController: - public: true - arguments: - $twig: '@twig' - $debug: '%kernel.debug%' - - chamilo_theme_widget_extension: - class: 'Chamilo\ThemeBundle\Twig\WidgetExtension' - tags: - - 'twig.extension' +#services: +# chamilo_theme_widget_extension: +# class: 'Chamilo\ThemeBundle\Twig\WidgetExtension' +# tags: +# - 'twig.extension' diff --git a/src/ThemeBundle/Resources/views/Layout/head.html.twig b/src/ThemeBundle/Resources/views/Layout/head.html.twig index 97df17178f..6a8ddf8bb6 100644 --- a/src/ThemeBundle/Resources/views/Layout/head.html.twig +++ b/src/ThemeBundle/Resources/views/Layout/head.html.twig @@ -76,7 +76,7 @@ {#{% endjavascripts %}#} {% endblock %} -{# Add third party libraries that can't be loaded using webpack #} +{# Add third party js libraries that can't be loaded using webpack #} {% include "@ChamiloTheme/Layout/legacy_js.html.twig" %} {# app.js is generated using the file webpack.config.js and using yarn read /assets/README.md for more info #} diff --git a/src/ThemeBundle/Theme/ThemeManager.php b/src/ThemeBundle/Theme/ThemeManager.php index 5eabb3d560..a50e8f71c2 100644 --- a/src/ThemeBundle/Theme/ThemeManager.php +++ b/src/ThemeBundle/Theme/ThemeManager.php @@ -4,7 +4,8 @@ namespace Chamilo\ThemeBundle\Theme; use Chamilo\FoundationBundle\Util\DependencyResolverInterface; -use Symfony\Component\DependencyInjection\Container; +use Symfony\Component\DependencyInjection\ContainerAwareInterface; +use Symfony\Component\DependencyInjection\ContainerAwareTrait; use Symfony\Component\HttpKernel\Config\FileLocator; /** @@ -12,17 +13,13 @@ use Symfony\Component\HttpKernel\Config\FileLocator; * * @package Chamilo\ThemeBundle\Theme */ -class ThemeManager +class ThemeManager implements ContainerAwareInterface { - /** @var Container */ - protected $container; + use ContainerAwareTrait; protected $stylesheets = []; - protected $javascripts = []; - protected $locations = []; - protected $resolverClass; /** @@ -31,9 +28,8 @@ class ThemeManager * @param $container * @param null $resolverClass */ - public function __construct($container, $resolverClass = null) + public function __construct($resolverClass = null) { - $this->container = $container; $this->resolverClass = $resolverClass ?: 'Chamilo\ThemeBundle\Util\DependencyResolver'; }