. * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. */ class PMFeatureRegistry { private $features = array (); private $triggers = array (); private static $instance = null; /** * This function is the constructor of the PMPluginRegistry class * param * * @return void */ private function __construct () { } /** * This function is instancing to this class * param * * @return object */ public static function getSingleton () { if (self::$instance == null) { self::$instance = new PMFeatureRegistry(); } return self::$instance; } /** * Register the feature in the singleton * * @param unknown_type $className * @param unknown_type $featureName * @param unknown_type $filename */ public function registerFeature ($featureName, $filename = null) { $className = $featureName . "Feature"; $feature = new $className( $featureName, $filename ); if (isset( $this->features[$featureName] )) { $this->features[$featureName]->iVersion = $feature->iVersion; return; } else { $this->features[$featureName] = $feature; } } /** * Enable the plugin in the singleton * * @param unknown_type $featureName */ public function enableFeature ($featureName) { $feature = $this->retrieveFeature($featureName); if ($feature) { $feature->enable(); } throw new Exception( "Unable to enable feature '$featureName' (feature not found)" ); } /** * disable the plugin in the singleton * * @param unknown_type $featureName */ public function disableFeature ($featureName) { $feature = $this->retrieveFeature($featureName); if ($feature) { $feature->enable(); } throw new Exception( "Unable to disable feature '$featureName' (feature not found)" ); } /** * install the plugin * * @param unknown_type $featureName */ public function installFeature ($featureName) { try { $this->registerFeature($featureName); $feature = $this->retrieveFeature($featureName); if ($feature) { $feature->install(); } else { throw new Exception( "Unable to install feature '$featureName' (feature not found)" ); } } catch (Exception $e) { global $G_PUBLISH; $aMessage['MESSAGE'] = $e->getMessage(); $G_PUBLISH = new Publisher(); $G_PUBLISH->AddContent( 'xmlform', 'xmlform', 'login/showMessage', '', $aMessage ); G::RenderPage( 'publish' ); die(); } } public function retrieveFeature($name) { foreach ($this->features as $featureName => $feature) { if ($featureName === $name) { return $feature; } } return false; } /** * execute all triggers related to a triggerId * * @param unknown_type $menuId * @return object */ public function executeTriggers ($triggerId, $data) { foreach ($this->features as $feature) { $feature->executeTriggers($triggerId, $data); } } public function setupFeatures () { $path = PATH_FEATURES; $featureDirList = glob(PATH_FEATURES."/*", GLOB_ONLYDIR); foreach ($featureDirList as $directory) { if (basename($directory) === 'ViewContainers') { continue; } $name = basename($directory); $featureClass = $name.'Feature'; require_once $directory.DS.$featureClass.'.php'; $feature = new $featureClass($name); $feature->setup(); $this->features[$name] = $feature; } } } /*----------------------------------********---------------------------------*/