File Manager

Current Directory: /home/astoriaah/www/plugins/system/yootheme
Viewing File: /home/astoriaah/www/plugins/system/yootheme/yootheme.php
<?php defined('_JEXEC') or die; use Joomla\Registry\Registry; use YOOtheme\Module\ConfigLoader; use YOOtheme\Theme; class plgSystemYOOtheme extends JPlugin { protected $db; protected $cms; protected $app = array(); protected $root = JPATH_ROOT; protected $loaded = false; public function __construct(&$subject, $config = array()) { parent::__construct($subject, $config); $this->cms = JFactory::getApplication(); } public function __sleep() { return array(); // override serialize for debug logger } public function onAfterRoute() { if ($response = $this->handleRequest()) { if ($response->getStatusCode() == 403 && !strpos($response->getContentType(), 'json') && JFactory::getUser()->guest) { if ($this->cms->isAdmin()) { return; } $response = $response->withRedirect(JRoute::_('index.php?option=com_users&view=login', false)); } $response->send(); JEventDispatcher::getInstance()->trigger('onAfterRespond'); exit; } } public function onAfterDispatch() { if (isset($this->app['events'])) { $this->app['events']->trigger('dispatch', array($this->cms->getDocument(), $this->cms->input)); } } public function onBeforeRender() { if (isset($this->app['events'])) { $this->app['events']->trigger('content', array($this->cms->getDocument()->getBuffer('component'))); } } public function onBeforeCompileHead() { if (isset($this->app['events'])) { $this->app['events']->trigger('view', array($this->app)); } } public function onAfterCleanModuleList(&$modules) { if (isset($this->app['events'])) { $this->app['events']->trigger('modules.load', array(&$modules)); } } public function onContentPrepareForm($form, $data) { if (isset($this->app['events'])) { $this->app['events']->trigger('content.form', array($form, (object) $data)); } } public function onContentPrepareData($context, $data) { if (isset($this->app['events'])) { $this->app['events']->trigger('content.data', array($context, (object) $data)); } } public function onGetIcons($context) { if ($context != 'mod_quickicon' || !JFactory::getUser()->authorise('core.edit', 'com_templates')) { return; } if (!$templ = $this->loadTemplateStyle() or !$templ->params->get('yootheme')) { return; } return array(array( 'image' => 'star', 'text' => 'YOOtheme', 'link' => "index.php?option=com_ajax&p=customizer&style={$templ->id}", )); } protected function handleRequest() { $path = $this->cms->input->get('p'); $option = $this->cms->input->getCmd('option'); $style = $this->cms->input->getInt($option == 'com_templates' ? 'id' : 'style'); $active = $this->cms->isAdmin() && in_array($option, array('com_modules', 'com_advancedmodules', 'com_content', 'com_templates'), true); $templ = ($path && $option == 'com_ajax' || $active) ? $this->loadTemplateStyle($style) : $this->cms->getTemplate(true); if ($templ && $templ->params->get('yootheme') && $this->loadTemplate($templ)) { return $path && $option == 'com_ajax' ? $this->app->run(false) : null; } } protected function loadTemplate($templ) { if ($this->loaded) { return; } $this->loaded = true; $templ->params->set('config', json_decode($templ->params->get('config', '{}'), true)); $template = "{$this->root}/templates/{$templ->template}/config.php"; $bootstrap = "{$this->root}/templates/{$templ->template}/vendor/yootheme/theme/bootstrap.php"; if (($app = require $bootstrap) && is_array($config = require $template)) { $app->addLoader(new ConfigLoader($config)); $app->addLoader(function ($options, $next) use ($templ) { $module = $next($options); if ($module instanceof Theme) { $module->id = $templ->id; $module->title = @$templ->title; $module->default = $templ->home == 1; $module->params = $templ->params; $module->template = $templ->template; JHtml::register('theme', function () use ($module) { return $module; }); } return $module; }); $app->load('config.php', dirname($template)); if ($child = $templ->params->get('config.child_theme')) { $app->load(array('config.php', 'builder/*/index.php'), "{$this->root}/templates/{$templ->template}_{$child}"); } $app->init(); return $this->app = $app; } } protected function loadTemplateStyle($id = 0) { $query = "SELECT * FROM #__template_styles WHERE " . ($id ? "id={$id}" : "client_id=0 AND home=1"); if ($templ = $this->db->setQuery($query)->loadObject()) { $templ->params = new Registry($templ->params); return $templ; } } }