Beispiel #1
0
	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;
	}
Beispiel #2
0
	/**
	 * 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();
	}
Beispiel #3
0
	/**
	 * 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');
	}