3) { $dirParts = array_splice($dirParts, 0, -3); $myDir = implode(DIRECTORY_SEPARATOR, $dirParts); } if (@file_exists(__DIR__ . '/../../helpers/integration.php')) { require_once __DIR__ . '/../../helpers/integration.php'; } elseif (@file_exists('../../helpers/integration.php')) { require_once '../../helpers/integration.php'; } elseif (@file_exists($myDir . '/helpers/integration.php')) { require_once $myDir . '/helpers/integration.php'; } // Load the platform defines if (!defined('APATH_BASE')) { require_once __DIR__ . '/../defines.php'; } // Load the version file if (@file_exists(__DIR__ . '/../version.php')) { require_once __DIR__ . '/../version.php'; } // Add our app to the autoloader, if it's not already set $prefixes = Autoloader::getInstance()->getPrefixes(); if (!array_key_exists('Solo\\', $prefixes)) { Autoloader::getInstance()->addMap('Solo\\', APATH_BASE . '/Solo'); } // Include the Akeeba Engine factory if (!defined('AKEEBAENGINE')) { define('AKEEBAENGINE', 1); $factoryPath = __DIR__ . '/../Solo/engine/Factory.php'; // Load the engine if (!file_exists($factoryPath)) { echo "ERROR!\n"; echo "Could not load the backup engine; file does not exist. Technical information:\n"; echo "Path to " . basename(__FILE__) . ": " . __DIR__ . "\n"; echo "Path to factory file: $factoryPath\n"; die("\n"); } else { try { require_once $factoryPath; } catch (\Exception $e) { echo "ERROR!\n"; echo "Backup engine returned an error. Technical information:\n"; echo "Error message:\n\n"; echo $e->getMessage() . "\n\n"; echo "Path to " . basename(__FILE__) . ":" . __DIR__ . "\n"; echo "Path to factory file: $factoryPath\n"; die("\n"); } } Platform::addPlatform('Solo', __DIR__ . '/../Solo/Platform/Solo'); Platform::getInstance()->load_version_defines(); Platform::getInstance()->apply_quirk_definitions(); } class BackupApplication extends \Awf\Application\Cli { const secretKeyRelativePath = '/engine/secretkey.php'; public function __construct(\Awf\Container\Container $container = null) { parent::__construct($container); if (empty($this->container->basePath)) { $this->container->basePath = APATH_BASE . '/Solo'; } } public function initialise() { // Load the extra language files Text::loadLanguage(null, 'akeeba', '.com_akeeba.ini'); // Halt if the configuration does not exist yet $configPath = $this->getContainer()->appConfig->getDefaultPath(); if (!@file_exists($configPath)) { $this->out('Configuration not found; aborting'); $this->close(254); } // Load the configuration if it's present if (@file_exists($configPath)) { // Load the application's configuration $this->container->appConfig->loadConfiguration($configPath); // Load Akeeba Engine's settings encryption preferences $secretKeyFile = $this->getContainer()->basePath . static::secretKeyRelativePath; if (@file_exists($secretKeyFile)) { require_once $secretKeyFile; } // Load Akeeba Engine's configuration Platform::getInstance()->load_configuration(); } return $this; } /** * Language file processing callback. It converts _QQ_ to " and replaces the product name in the legacy INI files * imported from Akeeba Backup for Joomla!. * * @param string $filename The full path to the file being loaded * @param array $strings The key/value array of the translations * * @return boolean|array False to prevent loading the file, or array of processed language string, or true to * ignore this processing callback. */ public function processLanguageIniFile($filename, $strings) { foreach ($strings as $k => $v) { $v = str_replace('_QQ_', '"', $v); $v = str_replace('Akeeba Backup', 'Akeeba Solo', $v); $strings[$k] = $v; } return $strings; } /** * Method to run the application routines. Most likely you will want to instantiate a controller * and execute it, or perform some sort of task directly. * * @return void */ protected function doExecute() { // Get the backup profile and description $profile = $this->getContainer()->input->get('profile', 1, 'int'); $debugmessage = ''; if ($this->getContainer()->input->get('debug', -1, 'int') != -1) { if (!defined('AKEEBADEBUG')) { define('AKEEBADEBUG', 1); } $debugmessage = "*** DEBUG MODE ENABLED ***\n"; } $version = AKEEBA_VERSION; $date = AKEEBA_DATE; $start_backup = time(); $phpversion = PHP_VERSION; $phpenvironment = PHP_SAPI; if ($this->getContainer()->input->get('quiet', -1, 'int') == -1) { $year = gmdate('Y'); echo <<getContainer()->input->get('quiet', -1, 'int') == -1) { echo "Site paths determined by this script:\n"; echo "APATH_BASE : " . APATH_BASE . "\n"; } $startup_check = true; $url = Platform::getInstance()->get_platform_configuration_option('siteurl', ''); if (empty($url)) { echo <<get_platform_configuration_option('frontend_enable', ''); $secret = Platform::getInstance()->get_platform_configuration_option('frontend_secret_word', ''); if (!$frontend_enabled) { echo <<getContainer()->input->get('method', '', 'cmd'); if (!empty($overridemethod)) { $method = $overridemethod; } if (empty($method)) { echo <<close(255); } // Perform the backup $url = rtrim($url, '/'); $secret = urlencode($secret); $url .= "/index.php?view=check&key={$secret}"; $timestamp = date('Y-m-d H:i:s'); $result = $this->fetchURL($url, $method); echo "[{$timestamp}] Got $result\n"; if (empty($result) || ($result === false)) { echo "[{$timestamp}] No message received\n"; echo <<fetchURL($headers['location'], $method); } else { return ($body); } break; case 'fopen': $opts = array( 'http' => array( 'method' => "GET", 'header' => "Accept-language: en\r\n" ) ); $context = stream_context_create($opts); $result = @file_get_contents($url, false, $context); break; } return $result; } } if (!isset($container)) { $container = new \Solo\Container(); } $app = new BackupApplication($container); $app->initialise()->execute();