예제 #1
0
 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);
     }
 }
예제 #2
0
 /**
  * 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;
 }
예제 #3
0
파일: Native.php 프로젝트: ForAEdesWeb/AEW2
 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());
     }
 }
예제 #4
0
파일: Comconfig.php 프로젝트: esorone/efcpw
 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;
 }
예제 #5
0
 /**
  * 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);
 }
예제 #6
0
 /**
  * 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');
 }
예제 #7
0
파일: Base.php 프로젝트: BillVGN/PortalPRP
 /**
  * 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;
 }
예제 #8
0
 /**
  * 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();
 }
예제 #9
0
파일: Db.php 프로젝트: esorone/efcpw
    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;
            }
        }
    }
예제 #10
0
 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;
 }
예제 #11
0
 /**
  * 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;
 }
예제 #12
0
 /**
  * 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();
 }
예제 #13
0
 /**
  * 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;
 }
예제 #14
0
 /**
  * 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;
 }
예제 #15
0
    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;
            }
        }
    }