File Manager

Current Directory: /home/astoriaah/www/old15/administrator/components/com_akeeba/alice/core/domain
Viewing File: /home/astoriaah/www/old15/administrator/components/com_akeeba/alice/core/domain/abstract.php
<?php /** * Akeeba Engine * The modular PHP5 site backup engine * * @copyright Copyright (c)2009-2014 Nicholas K. Dionysopoulos * @license GNU GPL version 3 or, at your option, any later version * @package akeebaengine * */ // Protection against direct access defined('AKEEBAENGINE') or die(); /** * Abstract class for checks. Every domain that performs checks should extend this one */ class AliceCoreDomainAbstract extends AliceAbstractPart { /** @var int Domain priority */ public $priority = 20; /** @var int Progress percentage */ protected $progress = 0; /** @var null Handle to Akeeba Backup log to analyze */ protected $log = null; /** @var string Name of the current step */ protected $stepName = ''; /** @var string Name of the checks to load */ protected $checksName = ''; /** @var array Stack of check to be performed */ private $checks = array(); /** @var int Total number of checks to be performed */ private $totalChecks = 0; public function __construct($priority, $checksName, $stepName) { $this->priority = $priority; $this->checksName = $checksName; $this->stepName = $stepName; parent::__construct(); AliceUtilLogger::WriteLog(_AE_LOG_DEBUG, __CLASS__ . " :: New instance"); } protected function _prepare() { $this->progress = 0; $this->setStep($this->stepName); $this->setState('prepared'); } protected function _run() { // Run in a loop until we run out of time, or breakflag is set $registry = AliceFactory::getConfiguration(); $timer = AliceFactory::getTimer(); // Let's check if I already have a stack coming from previous call $this->log = $registry->get('volatile.alice.logToAnalyze'); $this->checks = $registry->get('volatile.alice.' . $this->checksName . '.checks', array()); $this->totalChecks = $registry->get('volatile.alice.' . $this->checksName . '.totalChecks', 0); // No incoming stack, let's build it now if ( !$this->checks) { $this->checks = AliceUtilScripting::getChecksStack($this->checksName); $this->totalChecks = count($this->checks); } while (($timer->getTimeLeft() > 0) && ( !$registry->get('volatile.breakflag', false)) && count($this->checks)) { if ($this->getState() == 'postrun') { AliceUtilLogger::WriteLog(_AE_LOG_DEBUG, __CLASS__ . " :: Already finished"); $this->setStep("-"); $this->setSubstep(""); break; } else { // Did I finished every check? if ( !$this->checks) { return; } $error = ''; $solution = ''; $className = array_shift($this->checks); $check = new $className($this->log); $this->setSubstep($check->getName()); $this->progress = ($this->totalChecks - count($this->checks)) / $this->totalChecks; // Well, check, do your job! try { $check->check(); } catch (Exception $e) { // Mhm... log didn't passed the check. Let's save the error and the suggested solution $error = $e->getMessage(); $solution = $check->getSolution(); } $result = $check->getResult(); $feedback = $registry->get('volatile.alice.feedback', array()); $feedback[] = array( 'check' => $check->getName(), 'result' => $result, 'error' => $error, 'solution' => $solution ); $registry->set('volatile.alice.feedback', $feedback); unset($check); } } // Let's save everything $registry->set('volatile.alice.requirements.checks', $this->checks); $registry->set('volatile.alice.requirements.totalChecks', $this->totalChecks); $this->setState('postrun'); } protected function _finalize() { $this->setState('finished'); } public function getProgress() { return $this->progress; } public function getStepName() { return $this->stepName; } }