protected function is_excluded_by_api($test, $root) { static $filter_switch; static $last_backup; if(is_null($filter_switch)) { $config =& AEFactory::getConfiguration(); $filter_switch = AEUtilScripting::getScriptingParameter('filter.incremental',0); $filter_switch = ($filter_switch == 1); $last_backup = $config->get('volatile.filter.last_backup', null); if(is_null($last_backup) && $filter_switch) { // Get a list of backups on this profile $backups = AEPlatform::get_statistics_list(0, 0, AEPlatform::get_active_profile() ); // Find this backup's ID $model =& AEFactory::getStatistics(); $id = $model->getId(); if(is_null($id)) $id = -1; // Initialise jimport('joomla.utilities.date'); $last_backup = time(); $now = $last_backup; // Find the last time a successful backup with this profile was made if(count($backups)) foreach($backups as $backup) { // Skip the current backup if($backup['id'] == $id) continue; // Skip non-complete backups if($backup['status'] != 'complete') continue; $jdate = new JDate($backup['backupstart']); $backuptime = $jdate->toUnix(); $last_backup = $backuptime; break; } if($last_backup == $now) { // No suitable backup found; disable this filter $config->set('volatile.scripting.incfile.filter.incremental',0); $filter_switch = false; } else { // Cache the last backup timestamp $config->set('volatile.filter.last_backup',$last_backup); } } } if(!$filter_switch) return false; // Get the filesystem path for $root $config =& AEFactory::getConfiguration(); $fsroot = $config->get('volatile.filesystem.current_root',''); $ds = ($fsroot == '') || ($fsroot == '/') ? '' : DS; $filename = $fsroot.$ds.$test; // Get the timestamp of the file $timestamp = @filemtime($filename); // If we could not get this information, include the file in the archive if($timestamp === false) return false; // Compare it with the last backup timestamp and exclude if it's older than the last backup if($timestamp <= $last_backup) { //AEUtilLogger::WriteLog(_AE_LOG_DEBUG, "Excluding $filename due to incremental backup restrictions"); return true; } // No match? Just include the file! return false; }
/** * Loads the factory from the storage (if it exists) and returns a reference to the * Kettenrad object. * @param $tag string The backup tag to load * @return AECoreKettenrad A reference to the Kettenrad object */ public static function &load($tag = null) { if(is_null($tag) && defined('AKEEBA_BACKUP_ORIGIN')) { $tag = AKEEBA_BACKUP_ORIGIN; } // In order to load anything, we need to have the correct profile loaded. Let's assume // that the latest backup record in this tag has the correct profile number set. $config =& AEFactory::getConfiguration(); if( empty($config->activeProfile) ) { // Only bother loading a configuration if none has been already loaded $statList = AEPlatform::get_statistics_list(0,1,array( array('field' => 'tag', 'value' => $tag) ),array( 'by' => 'id', 'order' => 'DESC' ) ); if(is_array($statList)) { $stat = array_pop($statList); $profile = $stat['profile_id']; AEPlatform::load_configuration($profile); } } AEUtilLogger::openLog($tag); AEUtilLogger::WriteLog(_AE_LOG_DEBUG, "Kettenrad :: Attempting to load from database ($tag)"); $serialized_factory = AEUtilTempvars::get($tag); if($serialized_factory !== false) { AEUtilLogger::WriteLog(_AE_LOG_DEBUG, " -- Loaded stored Akeeba Factory ($tag)"); AEFactory::unserialize($serialized_factory); } else { // There is no serialized factory. Nuke the in-memory factory. AEUtilLogger::WriteLog(_AE_LOG_DEBUG, " -- Stored Akeeba Factory ($tag) not found - hard reset"); AEFactory::nuke(); AEPlatform::load_configuration(); } unset($serialized_factory); return AEFactory::getKettenrad(); }
/** * Was the last backup a failed one? Used to apply magic settings as a means of * troubleshooting. * * @return bool */ public function isLastBackupFailed() { // Get the last backup record ID $list = AEPlatform::get_statistics_list(0,1); if(empty($list)) return false; $id = $list[0]; $statmodel->setId($id); $record = AEPlatform::get_statistics($id); return ($record['status'] == 'fail'); }