File Manager

Current Directory: /home/astoriaah/www/old15/plugins/system/srp
Viewing File: /home/astoriaah/www/old15/plugins/system/srp/srp.php
<?php /** * @package AkeebaBackup * @subpackage SRP * @copyright Copyright (c)2009-2014 Nicholas K. Dionysopoulos * @license GNU General Public License version 3, or later * * @since 3.3 */ defined('_JEXEC') or die(); // PHP version check if(defined('PHP_VERSION')) { $version = PHP_VERSION; } elseif(function_exists('phpversion')) { $version = phpversion(); } else { $version = '5.0.0'; // all bets are off! } if(!version_compare($version, '5.3.0', '>=')) return; // Make sure Akeeba Backup is installed if(!file_exists(JPATH_ADMINISTRATOR.'/components/com_akeeba')) { return; } // Load F0F if(!defined('F0F_INCLUDED')) { include_once JPATH_SITE.'/libraries/f0f/include.php'; } if(!defined('F0F_INCLUDED') || !class_exists('F0FLess', true)) { return; } JLoader::import('joomla.filesystem.file'); $db = JFactory::getDBO(); // Is Akeeba Backup enabled? $query = $db->getQuery(true) ->select($db->qn('enabled')) ->from($db->qn('#__extensions')) ->where($db->qn('element').' = '.$db->q('com_akeeba')) ->where($db->qn('type').' = '.$db->q('component')); $db->setQuery($query); $enabled = $db->loadResult(); if(!$enabled) { return; } // Is it the Pro release? include_once JPATH_ADMINISTRATOR.'/components/com_akeeba/version.php'; if(!defined('AKEEBA_PRO')) { return; } if(!AKEEBA_PRO) { return; } JLoader::import('joomla.application.plugin'); class plgSystemSRP extends JPlugin { private static $extraMessage = null; public function onSRPEnabled() { return true; } public function onAfterInitialise() { // Make sure this is the back-end $app = JFactory::getApplication(); if (!in_array($app->getName(),array('administrator','admin'))) { return; } // If the user tried to access Joomla!'s com_installer, hijack his // request and forward them to our private, improved implementation! $input = JFactory::getApplication()->input; $component = $input->getCmd('option', ''); $task = $input->getCmd('task', ''); $skipsrp = $input->getInt('skipsrp', -1); $view = $input->getCmd('view', ''); $installtype = $input->getCmd('installtype', 'upload'); $session = JFactory::getSession(); // If skipsrp was not defined, read it from the session if ($skipsrp < 0) { $skipsrp = $session->get('skipsrp', 0, 'akeeba.srp'); } // Save skipsrp to the session $session->set('skipsrp', $skipsrp, 'akeeba.srp'); // If we are told to disable SRP show a message in the installer main page if ($skipsrp && (empty($view) || (($view = 'update') && empty($task)))) { $lang = JFactory::getLanguage(); $lang->load('com_akeeba', JPATH_ADMINISTRATOR, 'en-GB', true, false); $lang->load('com_akeeba', JPATH_ADMINISTRATOR, null, true, true); $lang->load('lib_joomla', JPATH_ADMINISTRATOR, 'en-GB', true, false); $lang->load('lib_joomla', JPATH_ADMINISTRATOR, null, true, true); $lang->load('com_installer', JPATH_ADMINISTRATOR, 'en-GB', true, false); $lang->load('com_installer', JPATH_ADMINISTRATOR, null, true, true); // Append an Akeeba Backup SRP notification message to the installer's cached message $message = $app->getUserState('com_installer.message', ''); if (!empty($message)) { $message .= "<hr />"; } $extraMessageFile = F0FTemplateUtils::parsePath('site://plugins/system/srp/tmpl/skipsrp.php', true); @ob_start(); include_once $extraMessageFile; $extraMessage = @ob_get_clean(); $message .= $extraMessage; $app->setUserState('com_installer.message', $message); return; } // All other cases when we are told not to enable SRP: do nothing at all. if ($skipsrp) { return; } // Only catch requests to the extensions installer if ($component != 'com_installer') { return; } // Only catch requests to com_installer's install and update views if (!in_array($view, array('install', 'update', 'akeeba', ''))) { return; } $lang = JFactory::getLanguage(); $lang->load('com_akeeba', JPATH_ADMINISTRATOR, 'en-GB', true, false); $lang->load('com_akeeba', JPATH_ADMINISTRATOR, null, true, true); $lang->load('lib_joomla', JPATH_ADMINISTRATOR, 'en-GB', true, false); $lang->load('lib_joomla', JPATH_ADMINISTRATOR, null, true, true); $lang->load('com_installer', JPATH_ADMINISTRATOR, 'en-GB', true, false); $lang->load('com_installer', JPATH_ADMINISTRATOR, null, true, true); require_once F0FTemplateUtils::parsePath('admin://components/com_akeeba/models/installer.php', true); $model = new AkeebaModelInstaller(); if (($view == '') || (($view == 'install') && empty($task))) { // Append an Akeeba Backup SRP notification message to the installer's cached message $message = $app->getUserState('com_installer.message', ''); if (!empty($message)) { $message .= "<hr />"; } // Load and add our custom message $extraMessageFile = F0FTemplateUtils::parsePath('site://plugins/system/srp/tmpl/message.php', true); @ob_start(); include_once $extraMessageFile; $extraMessage = @ob_get_clean(); $message .= $extraMessage; $app->setUserState('com_installer.message', $message); } elseif (($view == 'update') && empty($task)) { // Show an Akeeba Backup SRP notification message $lang = JFactory::getLanguage(); $lang->load('com_akeeba', JPATH_ADMINISTRATOR, 'en-GB', true, false); $lang->load('com_akeeba', JPATH_ADMINISTRATOR, null, true, true); $extraMessageFile = F0FTemplateUtils::parsePath('site://plugins/system/srp/tmpl/update_message.php', true); @ob_start(); include_once $extraMessageFile; self::$extraMessage = @ob_get_clean(); } elseif ($task == 'install.install') { $context = 'com_installer.install'; // Set FTP credentials, if given, saving them to the session for later use JClientHelper::setCredentialsFromRequest('ftp'); $ftpCredentials = JClientHelper::getCredentials('ftp'); $session = JFactory::getSession(); $session->set('ftp', $ftpCredentials, 'akeeba'); switch ($installtype) { case 'upload': if ($model->upload()) { // Go to extraction step $url = JRoute::_('index.php?option=com_installer&view=install&task=install.akextract', false); JFactory::getApplication()->redirect($url); } else { // We failed :( $this->_cleanUpSession(); $url = JRoute::_('index.php?option=com_installer&view=install', false); JFactory::getApplication()->redirect($url); } break; case 'url': if ($model->download()) { // Go to extraction step $url = JRoute::_('index.php?option=com_installer&view=install&task=install.akextract', false); JFactory::getApplication()->redirect($url); } else { // We failed :( $this->_cleanUpSession(); $url = JRoute::_('index.php?option=com_installer&view=install', false); JFactory::getApplication()->redirect($url); } break; default: case 'folder': // Save the package information to the session and go to the install.akpreinstall step $model->fromDirectory(); $url = JRoute::_('index.php?option=com_installer&view=install&task=install.akpreinstall', false); JFactory::getApplication()->redirect($url); break; } } elseif ($task == 'install.akextract') { // Apply any saved FTP credentials $this->_applyFTPCredentials(); // Extract the package and go to the install.akpreinstall step if ($model->extract()) { $url = JRoute::_('index.php?option=com_installer&view=install&task=install.akpreinstall', false); JFactory::getApplication()->redirect($url); } else { // We failed :( $this->_cleanUpSession(); $url = JRoute::_('index.php?option=com_installer&view=install', false); JFactory::getApplication()->redirect($url); } } elseif ($task == 'install.akpreinstall') { // Apply any saved FTP credentials $this->_applyFTPCredentials(); // Perform the pre-installation inspection. This is where we decide if we will take an SRP backup. // If an SRP backup is to be taken we redirect to Akeeba Backup, else to the install.akrealinstall // task of the controller. $srpURL = $model->getSrpUrl(); if ($srpURL !== false) { JFactory::getApplication()->redirect($srpURL); } else { $url = JRoute::_('index.php?option=com_installer&view=install&task=install.akrealinstall', false); JFactory::getApplication()->redirect($url); } } elseif ($task == 'install.akrealinstall') { // Apply any saved FTP credentials $this->_applyFTPCredentials(); // Manipulate the input object, faking an install from directory $session = JFactory::getSession(); $package = $session->get('package', null, 'akeeba'); $input = JFactory::getApplication()->input; $input->set('task', 'install.install'); $input->set('installtype', 'folder'); $input->set('install_directory', $package['dir']); // Run the real installation $model->install(); // Clean up $model->cleanUp(); // If we have any more UIDs we are updating. In this case go to update.akupdatedl $uid = $session->get('uid', array(), 'akeeba'); if (!empty($uid)) { $session->set('package', null, 'akeeba'); $session->set('compressed_package', null, 'akeeba'); $redirect_url = JRoute::_('index.php?option=com_installer&view=update&task=update.akupdatedl', false); JFactory::getApplication()->redirect($redirect_url); return; } $this->_cleanUpSession(); // Post installation redirection $app = JFactory::getApplication(); $redirect_url = $app->getUserState('com_installer.redirect_url'); if (empty($redirect_url)) { $redirect_url = JRoute::_('index.php?option=com_installer&view=install', false); } else { // Wipe out the user state when we're going to redirect $app->setUserState('com_installer.redirect_url', ''); $app->setUserState('com_installer.message', ''); $app->setUserState('com_installer.extension_message', ''); } JFactory::getApplication()->redirect($redirect_url); } elseif ($task == 'update.update') { // Set FTP credentials, if given, saving them to the session for later use JClientHelper::setCredentialsFromRequest('ftp'); $ftpCredentials = JClientHelper::getCredentials('ftp'); $session = JFactory::getSession(); $session->set('ftp', $ftpCredentials, 'akeeba'); // Get the list of update record IDs (uids) $uid = $input->get('cid', array(), 'array'); JArrayHelper::toInteger($uid, array()); // Save uids in the session $session->set('uid', $uid, 'akeeba'); // Go to update.akupdatedl step $url = JRoute::_('index.php?option=com_installer&view=update&task=update.akupdatedl', false); JFactory::getApplication()->redirect($url); } elseif ($task == 'update.akupdatedl') { // Apply any saved FTP credentials $this->_applyFTPCredentials(); // Pop the next update ID and save the stack back to the session $session = JFactory::getSession(); $uid = $session->get('uid', array(), 'akeeba'); $currentUID = array_shift($uid); $session->set('uid', $uid, 'akeeba'); // Download the update package if ($model->downloadUpdate($currentUID)) { $url = JRoute::_('index.php?option=com_installer&view=install&task=install.akextract', false); JFactory::getApplication()->redirect($url); } else { // We failed :( $this->_cleanUpSession(); $url = JRoute::_('index.php?option=com_installer&view=install', false); JFactory::getApplication()->redirect($url); } } else { return; } } public function onAfterRender() { if (empty(self::$extraMessage)) { return; } if (version_compare(JVERSION, '3.0', 'gt')) { $buffer = JFactory::getApplication()->getBody(); $buffer = str_replace('</html>', self::$extraMessage . '</html>', $buffer); JFactory::getApplication()->setBody($buffer); } else { $buffer = JResponse::getBody(); $buffer = str_replace('</html>', self::$extraMessage . '</html>', $buffer); JResponse::setBody($buffer); } } /** * Cleans up the session variables used in SRP */ private function _cleanUpSession() { $session = JFactory::getSession(); $session->set('ftp', null, 'akeeba'); $session->set('package', null, 'akeeba'); $session->set('compressed_package', null, 'akeeba'); $session->set('uid', null, 'akeeba'); } private function _applyFTPCredentials() { $session = JFactory::getSession(); $credentials = $session->get('ftp', array('user' => '', 'pass' => ''), 'akeeba'); JClientHelper::setCredentials('ftp', $credentials['user'], $credentials['pass']); } }