/** * Public constructor, loads filter data and filter classes */ public final function __construct() { static $initializing = false; parent::__construct(); // Call parent's constructor // Load filter data from platform's database AEUtilLogger::WriteLog(_AE_LOG_DEBUG,'Fetching filter data from database'); $this->filter_registry =& AEPlatform::load_filters(); // Load platform, plugin and core filters $this->filters = array(); $locations = array( AEFactory::getAkeebaRoot().DIRECTORY_SEPARATOR.'platform'.DIRECTORY_SEPARATOR.AKEEBAPLATFORM.DIRECTORY_SEPARATOR.'filters', AEFactory::getAkeebaRoot().DIRECTORY_SEPARATOR.'plugins'.DIRECTORY_SEPARATOR.'filters', AEFactory::getAkeebaRoot().DIRECTORY_SEPARATOR.'filters' ); AEUtilLogger::WriteLog(_AE_LOG_DEBUG,'Loading filters'); foreach($locations as $folder) { $is_platform = ($folder == AEFactory::getAkeebaRoot().DIRECTORY_SEPARATOR.'platform'.DIRECTORY_SEPARATOR.AKEEBAPLATFORM.DIRECTORY_SEPARATOR.'filters'); $files = AEUtilScanner::getFiles($folder); if($files === false) continue; // Skip inexistent folders if(empty($files)) continue; // Skip no-match folders // Loop all files foreach($files as $file) { if( substr($file,-4) != '.php' ) continue; // Skip non-PHP files $filter_name = ($is_platform ? 'Platform' : '').ucfirst(basename($file,'.php')); // Extract filter base name if(array_key_exists($filter_name, $this->filters)) continue; // Skip already loaded filters AEUtilLogger::WriteLog(_AE_LOG_DEBUG,'-- Loading filter '.$filter_name); $this->filters[$filter_name] =& AEFactory::getFilterObject($filter_name); // Add the filter } } // Load platform, plugin and core stacked filters $locations = array( AEFactory::getAkeebaRoot().DIRECTORY_SEPARATOR.'platform'.DIRECTORY_SEPARATOR.AKEEBAPLATFORM.DIRECTORY_SEPARATOR.'filters'.DIRECTORY_SEPARATOR.'stack', AEFactory::getAkeebaRoot().DIRECTORY_SEPARATOR.'plugins'.DIRECTORY_SEPARATOR.'filters'.DIRECTORY_SEPARATOR.'stack', AEFactory::getAkeebaRoot().DIRECTORY_SEPARATOR.'filters'.DIRECTORY_SEPARATOR.'stack' ); $config =& AEFactory::getConfiguration(); AEUtilLogger::WriteLog(_AE_LOG_DEBUG,'Loading optional filters'); foreach($locations as $folder) { $is_platform = ($folder == AEFactory::getAkeebaRoot().DIRECTORY_SEPARATOR.'platform'.DIRECTORY_SEPARATOR.AKEEBAPLATFORM.DIRECTORY_SEPARATOR.'filters'.DIRECTORY_SEPARATOR.'stack'); $files = AEUtilScanner::getFiles($folder); if($files === false) continue; // Skip inexistent folders if(empty($files)) continue; // Skip no-match folders // Loop all files foreach($files as $file) { if( substr($file,-4) != '.php' ) continue; // Skip non-PHP files $bare_name = strtolower(basename($file,'.php')); $filter_name = 'Stack'.($is_platform ? 'Platform' : '').ucfirst(basename($file,'.php')); // Extract filter base name if(array_key_exists($filter_name, $this->filters)) continue; // Skip already loaded filters if( !file_exists( substr($file,0,-4).'.ini' ) ) continue; // Make sure the INI file also exists $key = "core.filters.$bare_name.enabled"; if($config->get($key,0)) { AEUtilLogger::WriteLog(_AE_LOG_DEBUG,'-- Loading optional filter '.$filter_name); $this->filters[$filter_name] =& AEFactory::getFilterObject($filter_name); // Add the filter } } } }