objectlist[$class_name])) { if (!class_exists($class_name, true)) { $self->objectlist[$class_name] = false; } else { $self->objectlist[$class_name] = new $class_name; } } return $self->objectlist[$class_name]; } /** * Internal function which removes a class named $class_name * * @param string $class_name */ protected static function unsetClassInstance($class_name) { $self = self::getInstance(); if (isset($self->objectlist[$class_name])) { $self->objectlist[$class_name] = null; unset($self->objectlist[$class_name]); } } // ======================================================================== // Public factory interface // ======================================================================== /** * Gets a serialized snapshot of the Factory for safekeeping (hibernate) * @return string The serialized snapshot of the Factory */ public static function serialize() { $self = self::getInstance(); // Call _onSerialize in all classes known to the factory if (!empty($self->objectlist)) { foreach ($self->objectlist as $class_name => $object) { $o = $self->objectlist[$class_name]; if (method_exists($o, '_onSerialize')) { call_user_func('_onSerialize', $o); } } } // Serialize the factory return serialize(self::getInstance()); } /** * Regenerates the full Factory state from a serialized snapshot (resume) * * @param string $serialized_data The serialized snapshot to resume from */ public static function unserialize($serialized_data) { self::getInstance($serialized_data); } /** * Reset the internal factory state, freeing all previosuly created objects */ public static function nuke() { $self = self::getInstance(); foreach ($self->objectlist as $key => $object) { $self->objectlist[$key] = null; } $self->objectlist = array(); } // ======================================================================== // Alice classes // ======================================================================== /** * Returns an Akeeba Configuration object * @return AliceConfiguration The Akeeba Configuration object */ public static function &getConfiguration() { return self::getClassInstance('AliceConfiguration'); } /** * Get the a reference to the Akeeba Engine's timer * @return \Awf\Timer\Timer */ public static function &getTimer() { // TODO I should create another Timer, since I could have problems with backup settings // ie steps too close => backup error. I can't use the same settings for find that error :) return Factory::getTimer(); } /** * Get a reference to Alice's heart, Kettenrad * @return AliceCoreKettenrad */ public static function &getKettenrad() { return self::getClassInstance('AliceCoreKettenrad'); } /** * Loads an engine domain class and returns its associated object * * @param string $domain_name The name of the domain, e.g. requirements for AliceCoreDomainRequirements * * @return AliceAbstractPart */ public static function &getDomainObject($domain_name) { return self::getClassInstance('AliceCoreDomain' . ucfirst($domain_name)); } // ======================================================================== // Handy functions // ======================================================================== public static function getAliceRoot() { static $root = null; if (empty($root)) { if (defined('ALICEROOT')) { $root = ALICEROOT; } else { $root = dirname(__FILE__); } } return $root; } } // Make sure the class autoloader is loaded if (defined('ALICEROOT')) { require_once ALICEROOT . DIRECTORY_SEPARATOR . 'autoloader.php'; } else { require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'autoloader.php'; } // Try to register AliceAutoloader with SPL, or fall back to making use of JLoader // Obviously, performance is better with SPL, but not all systems support it. if (function_exists('spl_autoload_register')) { // Joomla! is using its own autoloader function which has to be registered first... if (function_exists('__autoload')) { spl_autoload_register('__autoload'); } // ...and then register ourselves. spl_autoload_register('AliceAutoloader'); } else { // Guys, it's 2011 at the time of this writing. If you have a host which // doesn't support SPL yet, SWITCH HOSTS! throw new Exception('Akeeba Backup REQUIRES the SPL extension to be loaded and activated', 500); } // Define and register the timeout trap function AliceTimeoutTrap() { if (connection_status() >= 2) { AliceUtilLogger::WriteLog(_AE_LOG_ERROR, 'ALICE has timed out'); } } register_shutdown_function("AliceTimeoutTrap");