protected function _prepare() { Factory::getLog()->log(LogLevel::DEBUG, __CLASS__ . " :: Processing parameters"); // Get the DB connection parameters if (is_array($this->_parametersArray)) { $driver = array_key_exists('driver', $this->_parametersArray) ? $this->_parametersArray['driver'] : 'mysql'; $host = array_key_exists('host', $this->_parametersArray) ? $this->_parametersArray['host'] : ''; $port = array_key_exists('port', $this->_parametersArray) ? $this->_parametersArray['port'] : ''; $username = array_key_exists('username', $this->_parametersArray) ? $this->_parametersArray['username'] : ''; $username = array_key_exists('user', $this->_parametersArray) ? $this->_parametersArray['user'] : $username; $password = array_key_exists('password', $this->_parametersArray) ? $this->_parametersArray['password'] : ''; $database = array_key_exists('database', $this->_parametersArray) ? $this->_parametersArray['database'] : ''; $prefix = array_key_exists('prefix', $this->_parametersArray) ? $this->_parametersArray['prefix'] : ''; } if ($driver == 'mysql' && !function_exists('mysql_connect')) { $driver = 'mysqli'; } $options = array('driver' => $driver, 'host' => $host . ($port != '' ? ':' . $port : ''), 'user' => $username, 'password' => $password, 'database' => $database, 'prefix' => is_null($prefix) ? '' : $prefix); $db = Factory::getDatabase($options); $driverType = $db->getDriverType(); if ($driverType == 'mssql') { $driverType = 'sqlsrv'; } $className = '\\Akeeba\\Engine\\Dump\\Reverse\\' . ucfirst($driverType); Factory::getLog()->log(LogLevel::DEBUG, __CLASS__ . " :: Instanciating new reverse engineering database dump engine {$className}"); if (!class_exists($className, true)) { $this->setState('error', 'Akeeba Engine does not have a reverse engineering dump engine for ' . $driverType . ' databases'); } else { $this->_engine = new $className(); $this->_engine->setup($this->_parametersArray); $this->_engine->callStage('_prepare'); $this->setState($this->_engine->getState(), $this->_engine->getError()); $this->propagateFromObject($this->_engine); } }
/** * Get the information for the latest backup * * @return array|null An array of backup record information or null if there is no usable backup for site transfer */ public function getLatestBackupInformation() { // Initialise $ret = null; $db = Factory::getDatabase(); /** @var AkeebaModelStatistics $model */ $model = F0FModel::getTmpInstance('Statistics', 'AkeebaModel'); $model->savestate(0); $model->setState('limitstart', 0); $model->setState('limit', 1); $backups = $model->getStatisticsListWithMeta(false, null, $db->qn('id') . ' DESC'); // No valid backups? No joy. if (empty($backups)) { return $ret; } // Get the latest backup $backup = array_shift($backups); // If it's not stored on the server (e.g. remote backup), no joy. if ($backup['meta'] != 'ok') { return $ret; } // If it's not a full site backup, no joy. if ($backup['type'] != 'full') { return $ret; } return $backup; }
protected function _prepare() { Factory::getLog()->log(LogLevel::DEBUG, __CLASS__ . " :: Processing parameters"); $options = null; // Get the DB connection parameters if (is_array($this->_parametersArray)) { $driver = array_key_exists('driver', $this->_parametersArray) ? $this->_parametersArray['driver'] : 'mysql'; $host = array_key_exists('host', $this->_parametersArray) ? $this->_parametersArray['host'] : ''; $port = array_key_exists('port', $this->_parametersArray) ? $this->_parametersArray['port'] : ''; $username = array_key_exists('username', $this->_parametersArray) ? $this->_parametersArray['username'] : ''; $username = array_key_exists('user', $this->_parametersArray) ? $this->_parametersArray['user'] : $username; $password = array_key_exists('password', $this->_parametersArray) ? $this->_parametersArray['password'] : ''; $database = array_key_exists('database', $this->_parametersArray) ? $this->_parametersArray['database'] : ''; $prefix = array_key_exists('prefix', $this->_parametersArray) ? $this->_parametersArray['prefix'] : ''; $options = array('driver' => $driver, 'host' => $host . ($port != '' ? ':' . $port : ''), 'user' => $username, 'password' => $password, 'database' => $database, 'prefix' => is_null($prefix) ? '' : $prefix); } $db = Factory::getDatabase($options); $driverType = $db->getDriverType(); $className = '\\Akeeba\\Engine\\Dump\\Native\\' . ucfirst($driverType); // Check if we have a native dump driver if (!class_exists($className, true)) { Factory::getLog()->log(LogLevel::DEBUG, __CLASS__ . " :: Native database dump engine {$className} not found; trying Reverse Engineering instead"); // Native driver nor found, I will try falling back to reverse engineering $className = '\\Akeeba\\Engine\\Dump\\Reverse\\' . ucfirst($driverType); } if (!class_exists($className, true)) { $this->setState('error', 'Akeeba Engine does not have a native dump engine for ' . $driverType . ' databases'); } else { Factory::getLog()->log(LogLevel::DEBUG, __CLASS__ . " :: Instanciating new native database dump engine {$className}"); $this->_engine = new $className(); $this->_engine->setup($this->_parametersArray); $this->_engine->callStage('_prepare'); $this->setState($this->_engine->getState(), $this->_engine->getError()); } }
private static function loadConfig() { $db = Factory::getDatabase(); $sql = $db->getQuery(true)->select($db->qn('params'))->from($db->qn('#__extensions'))->where($db->qn('element') . " = " . $db->q('com_akeeba')); $db->setQuery($sql); $config_ini = $db->loadResult(); // OK, Joomla! 1.6 stores values JSON-encoded so, what do I do? Right! $config_ini = json_decode($config_ini, true); if (is_null($config_ini) || empty($config_ini)) { $config_ini = array(); } return $config_ini; }
/** * Returns a list of the database tables, views, procedures, functions and triggers, * along with their filter status in array format, for use in the GUI * @return array */ public function make_listing($root) { // Get database inclusion filters $filters = Factory::getFilters(); $database_list = $filters->getInclusions('db'); // Load the database object for the selected database $config = $database_list[$root]; $config['user'] = $config['username']; $db = Factory::getDatabase($config); // Load the table data try { $table_data = $db->getTables(); } catch (Exception $e) { $table_data = array(); } // Process filters $tables = array(); if (!empty($table_data)) { foreach ($table_data as $table_name => $table_type) { $status = array(); // Add table type $status['type'] = $table_type; // Check dbobject/all filter (exclude) $result = $filters->isFilteredExtended($table_name, $root, 'dbobject', 'all', $byFilter); $status['tables'] = !$result ? 0 : ($byFilter == 'tables' ? 1 : 2); // Check dbobject/content filter (skip table data) $result = $filters->isFilteredExtended($table_name, $root, 'dbobject', 'content', $byFilter); $status['tabledata'] = !$result ? 0 : ($byFilter == 'tabledata' ? 1 : 2); if ($table_type != 'table') { $status['tabledata'] = 2; } // We can't filter contents of views, merge tables, black holes, procedures, functions and triggers :) $tables[$table_name] = $status; } } return array('tables' => $tables, 'root' => $root); }
/** * Implements the _run() abstract method * * @return void */ protected function _run() { if ($this->getState() == 'postrun') { Factory::getLog()->log(LogLevel::DEBUG, __CLASS__ . " :: Already finished"); $this->setStep(''); $this->setSubstep(''); return; } else { $this->setState('running'); } // Initialise the extra notes variable, used by platform classes to return warnings and errors $extraNotes = null; // Load the version defines Platform::getInstance()->load_version_defines(); $registry = Factory::getConfiguration(); // Write log file's header $version = defined('AKEEBABACKUP_VERSION') ? AKEEBABACKUP_VERSION : AKEEBA_VERSION; $date = defined('AKEEBABACKUP_DATE') ? AKEEBABACKUP_DATE : AKEEBA_DATE; Factory::getLog()->log(LogLevel::INFO, "--------------------------------------------------------------------------------"); Factory::getLog()->log(LogLevel::INFO, "Akeeba Backup " . $version . ' (' . $date . ')'); Factory::getLog()->log(LogLevel::INFO, "Got backup?"); Factory::getLog()->log(LogLevel::INFO, "--------------------------------------------------------------------------------"); // PHP configuration variables are tried to be logged only for debug and info log levels if ($registry->get('akeeba.basic.log_level') >= 2) { Factory::getLog()->log(LogLevel::INFO, "--- System Information ---"); Factory::getLog()->log(LogLevel::INFO, "PHP Version :" . PHP_VERSION); Factory::getLog()->log(LogLevel::INFO, "PHP OS :" . PHP_OS); Factory::getLog()->log(LogLevel::INFO, "PHP SAPI :" . PHP_SAPI); if (function_exists('php_uname')) { Factory::getLog()->log(LogLevel::INFO, "OS Version :" . php_uname('s')); } $db = Factory::getDatabase(); Factory::getLog()->log(LogLevel::INFO, "DB Version :" . $db->getVersion()); if (isset($_SERVER['SERVER_SOFTWARE'])) { $server = $_SERVER['SERVER_SOFTWARE']; } elseif ($sf = getenv('SERVER_SOFTWARE')) { $server = $sf; } else { $server = 'n/a'; } Factory::getLog()->log(LogLevel::INFO, "Web Server :" . $server); $platform = 'Unknown platform'; $version = '(unknown version)'; $platformData = Platform::getInstance()->getPlatformVersion(); Factory::getLog()->log(LogLevel::INFO, $platformData['name'] . " version :" . $platformData['version']); if (isset($_SERVER['HTTP_USER_AGENT'])) { Factory::getLog()->log(LogLevel::INFO, "User agent :" . phpversion() <= "4.2.1" ? getenv("HTTP_USER_AGENT") : $_SERVER['HTTP_USER_AGENT']); } Factory::getLog()->log(LogLevel::INFO, "Safe mode :" . ini_get("safe_mode")); Factory::getLog()->log(LogLevel::INFO, "Display errors :" . ini_get("display_errors")); Factory::getLog()->log(LogLevel::INFO, "Error reporting :" . self::error2string()); Factory::getLog()->log(LogLevel::INFO, "Error display :" . self::errordisplay()); Factory::getLog()->log(LogLevel::INFO, "Disabled functions :" . ini_get("disable_functions")); Factory::getLog()->log(LogLevel::INFO, "open_basedir restr.:" . ini_get('open_basedir')); Factory::getLog()->log(LogLevel::INFO, "Max. exec. time :" . ini_get("max_execution_time")); Factory::getLog()->log(LogLevel::INFO, "Memory limit :" . ini_get("memory_limit")); if (function_exists("memory_get_usage")) { Factory::getLog()->log(LogLevel::INFO, "Current mem. usage :" . memory_get_usage()); } if (function_exists("gzcompress")) { Factory::getLog()->log(LogLevel::INFO, "GZIP Compression : available (good)"); } else { Factory::getLog()->log(LogLevel::INFO, "GZIP Compression : n/a (no compression)"); } $extraNotes = Platform::getInstance()->log_platform_special_directories(); if (!empty($extraNotes) && is_array($extraNotes)) { if (isset($extraNotes['warnings']) && is_array($extraNotes['warnings'])) { foreach ($extraNotes['warnings'] as $warning) { $this->setWarning($warning); } } if (isset($extraNotes['errors']) && is_array($extraNotes['errors'])) { foreach ($extraNotes['errors'] as $error) { $this->setError($error); } } } Factory::getLog()->log(LogLevel::INFO, "Output directory :" . $registry->get('akeeba.basic.output_directory')); Factory::getLog()->log(LogLevel::INFO, "Part size (bytes) :" . $registry->get('engine.archiver.common.part_size', 0)); Factory::getLog()->log(LogLevel::INFO, "--------------------------------------------------------------------------------"); } // Quirks reporting $quirks = Factory::getConfigurationChecks()->getDetailedStatus(true); if (!empty($quirks)) { Factory::getLog()->log(LogLevel::INFO, "Akeeba Backup has detected the following potential problems:"); foreach ($quirks as $q) { Factory::getLog()->log(LogLevel::INFO, '- ' . $q['code'] . ' ' . $q['description'] . ' (' . $q['severity'] . ')'); } Factory::getLog()->log(LogLevel::INFO, "You probably do not have to worry about them, but you should be aware of them."); Factory::getLog()->log(LogLevel::INFO, "--------------------------------------------------------------------------------"); } if (!version_compare(PHP_VERSION, '5.4.0', 'ge')) { Factory::getLog()->log(LogLevel::WARNING, "You are using an outdated version of PHP. Akeeba Engine may not work properly. Please upgrade to PHP 5.4.0 or later."); } // Report profile ID $profile_id = Platform::getInstance()->get_active_profile(); Factory::getLog()->log(LogLevel::INFO, "Loaded profile #{$profile_id}"); // Get archive name list($relativeArchiveName, $absoluteArchiveName) = $this->getArchiveName(); // ==== Stats initialisation === $origin = Platform::getInstance()->get_backup_origin(); // Get backup origin $profile_id = Platform::getInstance()->get_active_profile(); // Get active profile $registry = Factory::getConfiguration(); $backupType = $registry->get('akeeba.basic.backup_type'); Factory::getLog()->log(LogLevel::DEBUG, "Backup type is now set to '" . $backupType . "'"); // Substitute "variables" in the archive name $fsUtils = Factory::getFilesystemTools(); $description = $fsUtils->replace_archive_name_variables($this->description); $comment = $fsUtils->replace_archive_name_variables($this->comment); if ($registry->get('volatile.writer.store_on_server', true)) { // Archive files are stored on our server $stat_relativeArchiveName = $relativeArchiveName; $stat_absoluteArchiveName = $absoluteArchiveName; } else { // Archive files are not stored on our server (FTP backup, cloud backup, sent by email, etc) $stat_relativeArchiveName = ''; $stat_absoluteArchiveName = ''; } $kettenrad = Factory::getKettenrad(); $temp = array('description' => $description, 'comment' => $comment, 'backupstart' => Platform::getInstance()->get_timestamp_database(), 'status' => 'run', 'origin' => $origin, 'type' => $backupType, 'profile_id' => $profile_id, 'archivename' => $stat_relativeArchiveName, 'absolute_path' => $stat_absoluteArchiveName, 'multipart' => 0, 'filesexist' => 1, 'tag' => $kettenrad->getTag(), 'backupid' => $kettenrad->getBackupId()); // Save the entry $statistics = Factory::getStatistics(); $statistics->setStatistics($temp); if ($statistics->getError()) { $this->setError($statistics->getError()); return; } $statistics->release_multipart_lock(); // Initialize the archive. if (Factory::getEngineParamsProvider()->getScriptingParameter('core.createarchive', true)) { Factory::getLog()->log(LogLevel::DEBUG, "Expanded archive file name: " . $absoluteArchiveName); Factory::getLog()->log(LogLevel::DEBUG, "Initializing archiver engine"); $archiver = Factory::getArchiverEngine(); $archiver->initialize($absoluteArchiveName); $archiver->setComment($comment); // Add the comment to the archive itself. $archiver->propagateToObject($this); if ($this->getError()) { return; } } $this->setState('postrun'); }
/** * Saves the nested filter data array $filter_data to the database * * @param array $filter_data The filter data to save * * @return bool True on success */ public function save_filters(&$filter_data) { $profile_id = $this->get_active_profile(); $db = Factory::getDatabase($this->get_platform_database_options()); $sql = $db->getQuery(true)->update($db->qn($this->tableNameProfiles))->set($db->qn('filters') . '=' . $db->q(serialize($filter_data)))->where($db->qn('id') . ' = ' . $db->q($profile_id)); $db->setQuery($sql); try { $db->query(); } catch (\Exception $exc) { return false; } return true; }
/** * Keeps a maximum number of "obsolete" records * * @return void */ protected function apply_obsolete_quotas() { $this->setStep('Applying quota limit on obsolete backup records'); $this->setSubstep(''); $registry = Factory::getConfiguration(); $limit = $registry->get('akeeba.quota.obsolete_quota', 0); $limit = (int) $limit; if ($limit <= 0) { return; } $statsTable = Platform::getInstance()->tableNameStats; $db = Factory::getDatabase(Platform::getInstance()->get_platform_database_options()); $query = $db->getQuery(true)->select(array($db->qn('id'), $db->qn('backupid'), $db->qn('absolute_path')))->from($db->qn($statsTable))->where($db->qn('status') . ' = ' . $db->q('complete'))->where($db->qn('filesexist') . '=' . $db->q('0'))->order($db->qn('id') . ' DESC'); $db->setQuery($query, $limit, 100000); $records = $db->loadAssocList(); if (empty($records)) { return; } $array = array(); // Delete backup-specific log files if they exist and add the IDs of the records to delete in the $array foreach ($records as $stat) { $array[] = $stat['id']; // We can't delete logs if there is no backup ID in the record if (!isset($stat['backupid']) || empty($stat['backupid'])) { continue; } $logFileName = 'akeeba.' . $stat['tag'] . '.' . $stat['backupid'] . '.log'; $logPath = dirname($stat['absolute_path']) . '/' . $logFileName; @unlink($logPath); } $ids = array(); foreach ($array as $id) { $ids[] = $db->q($id); } $ids = implode(',', $ids); $query = $db->getQuery(true)->delete($db->qn($statsTable))->where($db->qn('id') . " IN ({$ids})"); $db->setQuery($query); $db->query(); }
protected function createDatabasesINI() { // caching databases.ini contents Factory::getLog()->log(LogLevel::DEBUG, __CLASS__ . "AkeebaCUBEDomainDBBackup :: Creating databases.ini data"); // Create a new string $this->databases_ini = ''; $blankOutPass = Factory::getConfiguration()->get('engine.dump.common.blankoutpass', 0); // Loop through databases list foreach ($this->dumpedDatabases as $definition) { $section = basename($definition['dumpFile']); $dboInstance = Factory::getDatabase($definition); $type = $dboInstance->name; $tech = $dboInstance->getDriverType(); if ($blankOutPass) { $this->databases_ini .= <<<ENDDEF [{$section}] dbtype = "{$type}" dbtech = "{$tech}" dbname = "{$definition['database']}" sqlfile = "{$definition['dumpFile']}" dbhost = "{$definition['host']}" dbuser = "" dbpass = "" prefix = "{$definition['prefix']}" parts = "{$definition['parts']}" ENDDEF; } else { // We have to escape the password $escapedPassword = addcslashes($definition['password'], "\"\\\n\r"); $this->databases_ini .= <<<ENDDEF [{$section}] dbtype = "{$type}" dbtech = "{$tech}" dbname = "{$definition['database']}" sqlfile = "{$definition['dumpFile']}" dbhost = "{$definition['host']}" dbuser = "******" dbpass = "******" prefix = "{$definition['prefix']}" parts = "{$definition['parts']}" ENDDEF; } } }
public function &get($tag = null) { $storage_filename = $this->get_storage_filename($tag); $ret = false; switch ($this->storageEngine) { case 'file': $data = @file_get_contents($storage_filename); if ($data === false) { return $ret; } break; case 'db': $db = Factory::getDatabase(); $sql = $db->getQuery(true)->select($db->qn('data'))->from($db->qn('#__ak_storage'))->where($db->qn('tag') . ' = ' . $db->q($storage_filename)); $db->setQuery($sql); try { $data = $db->loadResult(); } catch (\Exception $e) { $data = ''; } break; } $ret = $this->decode($data); unset($data); return $ret; }
/** * Returns a list of emails to the Super Administrators * * @return array */ public function get_administrator_emails() { $options = $this->get_platform_database_options(); $db = Factory::getDatabase($options); // Load the root asset node and read the rules $query = $db->getQuery(true)->select($db->qn('rules'))->from('#__assets')->where($db->qn('name') . ' = ' . $db->q('root.1')); $db->setQuery($query); $jsonRules = $db->loadResult(); $rules = json_decode($jsonRules, true); $adminGroups = array(); $mails = array(); if (array_key_exists('core.admin', $rules)) { $rawGroups = $rules['core.admin']; if (!empty($rawGroups)) { foreach ($rawGroups as $group => $allowed) { if ($allowed) { $adminGroups[] = $db->q($group); } } } } if (empty($adminGroups)) { return $mails; } $adminGroups = implode(',', $adminGroups); $query = $db->getQuery(true)->select(array($db->qn('u') . '.' . $db->qn('name'), $db->qn('u') . '.' . $db->qn('email')))->from($db->qn('#__users') . ' AS ' . $db->qn('u'))->join('INNER', $db->qn('#__user_usergroup_map') . ' AS ' . $db->qn('m') . ' ON (' . $db->qn('m') . '.' . $db->qn('user_id') . ' = ' . $db->qn('u') . '.' . $db->qn('id') . ')')->where($db->qn('m') . '.' . $db->qn('group_id') . ' IN (' . $adminGroups . ')'); $db->setQuery($query); $superAdmins = $db->loadAssocList(); if (!empty($superAdmins)) { foreach ($superAdmins as $admin) { $mails[] = $admin['email']; } } return $mails; }
/** * Returns the selected profile's name. If no ID is specified, the current * profile's name is returned. * * @return string */ public function get_profile_name($id = null) { if (empty($id)) { $id = $this->get_active_profile(); } $id = (int) $id; $sql = 'SELECT `description` FROM `#__ak_profiles` WHERE `id` = ' . $id; $db = Factory::getDatabase($this->get_platform_database_options()); $db->setQuery($sql); return $db->loadResult(); }
/** * Return an instance of DriverBase * * @return DriverBase */ protected function &getDB() { $host = $this->host . ($this->port != '' ? ':' . $this->port : ''); $user = $this->username; $password = $this->password; $driver = $this->driver; $database = $this->database; $prefix = is_null($this->prefix) ? '' : $this->prefix; $options = array('driver' => $driver, 'host' => $host, 'user' => $user, 'password' => $password, 'database' => $database, 'prefix' => $prefix); $db = Factory::getDatabase($options); if ($error = $db->getError()) { $this->setError(__CLASS__ . ' :: Database Error: ' . $error); $false = false; return $false; } if ($db->getErrorNum() > 0) { $error = $db->getErrorMsg(); $this->setError(__CLASS__ . ' :: Database Error: ' . $error); $false = false; return $false; } return $db; }
/** * Loads the current configuration off the database table * * @param int $profile_id The profile where to read the configuration from, defaults to current profile * * @return bool True if everything was read properly */ public function load_configuration($profile_id = null) { // Load the database class $db = Factory::getDatabase($this->get_platform_database_options()); // Initialize the registry $registry = Factory::getConfiguration(); $registry->reset(); // 1) Load the INI format local configuration dump: $filename = realpath(dirname(__FILE__) . '/Config/config.ini'); $ini_data_local = file_get_contents($filename); // Configuration found. Convert to array format. $ini_data_local = \Akeeba\Engine\Util\ParseIni::parse_ini_file_php($ini_data_local, true, true); $ini_data = array(); foreach ($ini_data_local as $section => $row) { if (!empty($row)) { foreach ($row as $key => $value) { $ini_data["{$section}.{$key}"] = $value; } } } unset($ini_data_local); // Import the configuration array $protected_keys = $registry->getProtectedKeys(); $registry->resetProtectedKeys(); $registry->mergeArray($ini_data, false, false); $registry->setProtectedKeys($protected_keys); // 2) Load the INI format local configuration dump off the database: $db = \Akeeba\Engine\Factory::getDatabase($this->get_platform_database_options()); $sql = $db->getQuery(true)->select($db->qn('configuration'))->from($db->qn($this->tableNameProfiles))->where($db->qn('id') . ' = ' . $db->q(1)); $db->setQuery($sql); $ini_data_local = $db->loadResult(); if (empty($ini_data_local) || is_null($ini_data_local)) { // No configuration was saved yet - store the defaults $this->save_configuration($profile_id); } else { // Configuration found. Convert to array format. if (function_exists('get_magic_quotes_runtime')) { if (@get_magic_quotes_runtime()) { $ini_data_local = stripslashes($ini_data_local); } } // Decrypt the data if required $ini_data_local = \Akeeba\Engine\Factory::getSecureSettings()->decryptSettings($ini_data_local); $ini_data_local = \Akeeba\Engine\Util\ParseIni::parse_ini_file_php($ini_data_local, true, true); $ini_data = array(); foreach ($ini_data_local as $section => $row) { if (is_array($row) && !empty($row)) { foreach ($row as $key => $value) { $ini_data["{$section}.{$key}"] = $value; } } } unset($ini_data_local); $allowedOverrides = array('akeeba.basic.clientsidewait', 'akeeba.basic.file_extensions', 'akeeba.basic.exclude_folders', 'akeeba.basic.exclude_files', 'akeeba.tuning.min_exec_time', 'akeeba.tuning.max_exec_time', 'akeeba.tuning.run_time_bias'); foreach ($allowedOverrides as $key) { if (isset($ini_data[$key])) { $registry->setKeyProtection($key, false); $registry->set($key, $ini_data[$key]); $registry->setKeyProtection($key, true); } } } $registry->activeProfile = 1; // Apply config overrides if (is_array($this->configOverrides) && !empty($this->configOverrides)) { $protected_keys = $registry->getProtectedKeys(); $registry->resetProtectedKeys(); $registry->mergeArray($this->configOverrides, false, false); $registry->setProtectedKeys($protected_keys); } $registry->activeProfile = $profile_id; }
protected function createDatabasesINI() { // caching databases.ini contents Factory::getLog()->log(LogLevel::DEBUG, __CLASS__ . "AkeebaCUBEDomainDBBackup :: Creating databases.ini data"); // Create a new string $this->databases_ini = ''; $blankOutPass = Factory::getConfiguration()->get('engine.dump.common.blankoutpass', 0); $siteRoot = Factory::getConfiguration()->get('akeeba.platform.newroot', ''); // Loop through databases list foreach ($this->dumpedDatabases as $definition) { $section = basename($definition['dumpFile']); $dboInstance = Factory::getDatabase($definition); $type = $dboInstance->name; $tech = $dboInstance->getDriverType(); // If the database is a sqlite one, we have to process the database name which contains the path // At the moment we only handle the case where the db file is UNDER site root if ($tech == 'sqlite') { $definition['database'] = str_replace($siteRoot, '#SITEROOT#', $definition['database']); } if ($blankOutPass) { $this->databases_ini .= <<<ENDDEF [{$section}] dbtype = "{$type}" dbtech = "{$tech}" dbname = "{$definition['database']}" sqlfile = "{$definition['dumpFile']}" dbhost = "{$definition['host']}" dbuser = "" dbpass = "" prefix = "{$definition['prefix']}" parts = "{$definition['parts']}" ENDDEF; } else { // We have to escape the password $escapedPassword = addcslashes($definition['password'], "\"\\\n\r"); $this->databases_ini .= <<<ENDDEF [{$section}] dbtype = "{$type}" dbtech = "{$tech}" dbname = "{$definition['database']}" sqlfile = "{$definition['dumpFile']}" dbhost = "{$definition['host']}" dbuser = "******" dbpass = "******" prefix = "{$definition['prefix']}" parts = "{$definition['parts']}" ENDDEF; } } }