%PDF- %PDF-
Direktori : /home/lightco1/upgrade.lightco.com.au/administrator/components/com_akeeba/Dispatcher/ |
Current File : /home/lightco1/upgrade.lightco.com.au/administrator/components/com_akeeba/Dispatcher/Dispatcher.php |
<?php /** * @package AkeebaBackup * @copyright Copyright (c)2006-2017 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Backup\Admin\Dispatcher; // Protect from unauthorized access defined('_JEXEC') or die(); use Akeeba\Backup\Admin\Helper\SecretWord; use Akeeba\Backup\Admin\Model\ControlPanel; use Akeeba\Engine\Factory; use Akeeba\Engine\Platform; use FOF30\Container\Container; use FOF30\Dispatcher\Dispatcher as BaseDispatcher; use FOF30\Dispatcher\Mixin\ViewAliases; use FOF30\Factory\Exception\ModelNotFound; use JFactory; class Dispatcher extends BaseDispatcher { use ViewAliases { onBeforeDispatch as onBeforeDispatchViewAliases; } /** @var string The name of the default view, in case none is specified */ public $defaultView = 'ControlPanel'; public function __construct(Container $container, array $config) { parent::__construct($container, $config); $this->viewNameAliases = [ 'buadmin' => 'Manage', 'buadmins' => 'Manage', 'config' => 'Configuration', 'configs' => 'Configuration', 'confwiz' => 'ConfigurationWizard', 'confwizs' => 'ConfigurationWizard', 'confwizes' => 'ConfigurationWizard', 'cpanel' => 'ControlPanel', 'cpanels' => 'ControlPanel', 'dbef' => 'DatabaseFilters', 'dbefs' => 'DatabaseFilters', 'eff' => 'IncludeFolders', 'effs' => 'IncludeFolders', 'fsfilter' => 'FileFilters', 'fsfilters' => 'FileFilters', 'ftpbrowser' => 'FTPBrowser', 'ftpbrowsers' => 'FTPBrowser', 'sftpbrowser' => 'SFTPBrowser', 'sftpbrowsers' => 'SFTPBrowser', 'multidb' => 'MultipleDatabases', 'multidbs' => 'MultipleDatabases', 'regexdbfilter' => 'RegExDatabaseFilters', 'regexdbfilters' => 'RegExDatabaseFilters', 'regexfsfilter' => 'RegExFileFilters', 'regexfsfilters' => 'RegExFileFilters', 'remotefile' => 'RemoteFiles', 'remotefiles' => 'RemoteFiles', 's3import' => 'S3Import', 's3imports' => 'S3Import', ]; } /** * Executes before dispatching the request to the appropriate controller */ public function onBeforeDispatch() { $this->onBeforeDispatchViewAliases(); // Load the FOF language $lang = $this->container->platform->getLanguage(); $lang->load('lib_fof30', JPATH_ADMINISTRATOR, 'en-GB', true, true); $lang->load('lib_fof30', JPATH_ADMINISTRATOR, null, true, false); // Necessary for routing the Alice view $this->container->inflector->addWord('Alice', 'Alices'); // Does the user have adequate permissions to access our component? if (!$this->container->platform->authorise('core.manage', 'com_akeeba')) { throw new \RuntimeException(\JText::_('JERROR_ALERTNOAUTHOR'), 404); } // Load Akeeba Engine $this->loadAkeebaEngine(); // Load the Akeeba Engine configuration try { $this->loadAkeebaEngineConfiguration(); } catch (\Exception $e) { // Maybe the tables are not installed? /** @var ControlPanel $cPanelModel */ $cPanelModel = $this->container->factory->model('ControlPanel')->tmpInstance(); try { $cPanelModel->checkAndFixDatabase(); } catch (\RuntimeException $e) { // The update is stuck. We will display a warning in the Control Panel } $msg = \JText::_('COM_AKEEBA_CONTROLPANEL_MSG_REBUILTTABLES'); $this->container->platform->redirect('index.php', 307, $msg, 'warning'); } // Prevents the "SQLSTATE[HY000]: General error: 2014" due to resource sharing with Akeeba Engine // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // !!!!! WARNING: ALWAYS GO THROUGH JFactory; DO NOT GO THROUGH $this->container->db !!!!! // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ $jDbo = JFactory::getDbo(); if ($jDbo->name == 'pdomysql') { @JFactory::getDbo()->disconnect(); } // Load the utils helper library Platform::getInstance()->load_version_defines(); Platform::getInstance()->apply_quirk_definitions(); // Make sure the front-end backup Secret Word is stored encrypted $params = $this->container->params; SecretWord::enforceEncryption($params, 'frontend_secret_word'); // Make sure we have a version loaded @include_once($this->container->backEndPath . '/version.php'); if (!defined('AKEEBA_VERSION')) { define('AKEEBA_VERSION', 'dev'); define('AKEEBA_DATE', date('Y-m-d')); } // Create a media file versioning tag $this->container->mediaVersion = md5(AKEEBA_VERSION . AKEEBA_DATE); // Perform certain functionality only in HTML tasks $format = $this->input->getCmd('format', 'html'); if ($format == 'html') { // Load common media files $this->loadCommonMediaFiles(); // Perform common maintenance tasks $this->autoMaintenance(); } // Set the linkbar style to Classic (Bootstrap tabs). The sidebar takes too much space and requires adding // manual HTML to render it... $this->container->renderer->setOption('linkbar_style', 'classic'); } /** * Loads all the static media files (JS and CSS) which are common across many views of the component. * * @return void */ private function loadCommonMediaFiles() { \JHtml::_('jquery.framework'); $mediaVersion = $this->container->mediaVersion; // Do not mode: everything depends on UserInterfaceCommon $this->container->template->addJS('media://com_akeeba/js/UserInterfaceCommon.min.js', false, false, $mediaVersion); // Do not move: System depends on Modal $this->container->template->addJS('media://com_akeeba/js/Modal.min.js', false, false, $mediaVersion); // Do not move: System depends on Ajax $this->container->template->addJS('media://com_akeeba/js/Ajax.min.js', false, false, $mediaVersion); // Do not move: System depends on Ajax $this->container->template->addJS('media://com_akeeba/js/System.min.js', false, false, $mediaVersion); // Do not move: Tooltip depends on System $this->container->template->addJS('media://com_akeeba/js/Tooltip.min.js', false, false, $mediaVersion); // Always add last (it's the least important) $this->container->template->addJS('media://com_akeeba/js/piecon.min.js', false, false, $mediaVersion); $this->container->template->addCSS('media://com_akeeba/css/akeebaui.min.css', $mediaVersion); } /** * Perform common maintenance tasks * * @return void */ private function autoMaintenance() { /** @var \Akeeba\Backup\Admin\Model\ControlPanel $model */ $model = $this->container->factory->model('ControlPanel')->tmpInstance(); // Update the db structure if necessary (once per session at most) $lastVersion = $this->container->platform->getSessionVar('magicParamsUpdateVersion', null, 'com_akeeba'); if ($lastVersion != AKEEBA_VERSION) { try { $model->checkAndFixDatabase(); $this->container->platform->setSessionVar('magicParamsUpdateVersion', AKEEBA_VERSION, 'com_akeeba'); } catch (\RuntimeException $e) { // The update is stuck. We will display a warning in the Control Panel } } // Update magic parameters if necessary $model->updateMagicParameters(); } public function onAfterDispatch() { // See the after_render.php file for an explanation. TL;DR: CloudFlare Rocket Loader is a broken pile of crap. if ($this->input->get('format', 'html') != 'html') { return; } if (!function_exists('akeebaBackupOnAfterRenderToFixBrokenCloudFlareRocketLoader')) { require_once __DIR__ . '/after_render.php'; } JFactory::getApplication()->registerEvent('onAfterRender', 'akeebaBackupOnAfterRenderToFixBrokenCloudFlareRocketLoader'); } public function loadAkeebaEngine() { // Necessary defines for Akeeba Engine if (!defined('AKEEBAENGINE')) { define('AKEEBAENGINE', 1); define('AKEEBAROOT', $this->container->backEndPath . '/BackupEngine'); define('ALICEROOT', $this->container->backEndPath . '/AliceEngine'); } // Make sure we have a profile set throughout the component's lifetime $profile_id = $this->container->platform->getSessionVar('profile', null, 'akeeba'); if (is_null($profile_id)) { $this->container->platform->setSessionVar('profile', 1, 'akeeba'); } // Load Akeeba Engine $basePath = $this->container->backEndPath; require_once $basePath . '/BackupEngine/Factory.php'; // Load ALICE (Pro version only) if (@file_exists($basePath . '/AliceEngine/factory.php')) { require_once $basePath . '/AliceEngine/factory.php'; } } public function loadAkeebaEngineConfiguration() { Platform::addPlatform('joomla3x', $this->container->backEndPath . '/BackupPlatform/Joomla3x'); $akeebaEngineConfig = Factory::getConfiguration(); Platform::getInstance()->load_configuration(); unset($akeebaEngineConfig); } }