Fix for #28 and #23. This patch removes the mod and event registers so that modules can now be loaded dynamicly instead of using a global configuration file.
This commit is contained in:
parent
71547eec26
commit
8c1a7afda5
|
@ -1,5 +0,0 @@
|
||||||
<?php return array (
|
|
||||||
'register' =>
|
|
||||||
array (
|
|
||||||
),
|
|
||||||
) ;
|
|
|
@ -2,7 +2,6 @@
|
||||||
'SITE_URL' => '',
|
'SITE_URL' => '',
|
||||||
'SITE_DOMAIN' => '',
|
'SITE_DOMAIN' => '',
|
||||||
'SERVER_NAME' => '',
|
'SERVER_NAME' => '',
|
||||||
'registers_update_interval' => 3600,
|
|
||||||
'administrator_mail' => '',
|
'administrator_mail' => '',
|
||||||
'default_controller' => 'standard',
|
'default_controller' => 'standard',
|
||||||
'default_function' => 'index',
|
'default_function' => 'index',
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
class EventRegisterBuildEvent extends Event {
|
|
||||||
|
|
||||||
public $register = array();
|
|
||||||
|
|
||||||
public function init($call){}
|
|
||||||
|
|
||||||
public function addEvent($modName, $eventName) {
|
|
||||||
if (!isset($this->register[$eventName])) {
|
|
||||||
$this->register[$eventName] = array();
|
|
||||||
}
|
|
||||||
$this->register[$eventName][] = $modName;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
|
|
@ -11,7 +11,7 @@ class Core {
|
||||||
|
|
||||||
public $mods;
|
public $mods;
|
||||||
private $loaded = false;
|
private $loaded = false;
|
||||||
private $register;
|
public $register;
|
||||||
|
|
||||||
## START/STOP
|
## START/STOP
|
||||||
public function init() {
|
public function init() {
|
||||||
|
@ -23,12 +23,12 @@ class Core {
|
||||||
$this->mods = new stdClass();
|
$this->mods = new stdClass();
|
||||||
$this->loadStartupFiles();
|
$this->loadStartupFiles();
|
||||||
|
|
||||||
$this->mods->events->fireEvent('coreStartEvent');
|
$this->buildRegister();
|
||||||
// Mod register exists, check if expired
|
$this->mods->events->buildEventRegister();
|
||||||
if ( ( date('U') - $this->mods->config->main->registers_last_update) > $this->mods->config->main->registers_update_interval) {
|
|
||||||
$this->mods->logger->log("Registers have expired. Updating...", 'Core');
|
$event = $this->mods->events->fireEvent('coreStartEvent');
|
||||||
$this->buildModRegister();
|
if ($event->isCancelled()) {
|
||||||
$this->mods->events->buildEventRegister();
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,13 +99,6 @@ class Core {
|
||||||
}
|
}
|
||||||
|
|
||||||
private function loadModule($name, $version = null) {
|
private function loadModule($name, $version = null) {
|
||||||
// Load the register if not loaded yet
|
|
||||||
if (!isset($this->mods->config->modregister->register)) {
|
|
||||||
$this->buildModRegister();
|
|
||||||
} else {
|
|
||||||
$this->register = $this->mods->config->modregister->register;
|
|
||||||
}
|
|
||||||
|
|
||||||
// The basic module path
|
// The basic module path
|
||||||
$path = FUZEPATH . "Modules/";
|
$path = FUZEPATH . "Modules/";
|
||||||
|
|
||||||
|
@ -186,14 +179,20 @@ class Core {
|
||||||
'moduleName' => $name);
|
'moduleName' => $name);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function buildModRegister() {
|
public function buildRegister() {
|
||||||
$this->mods->logger->newLevel("Building Mod Register", 'Core');
|
$this->mods->logger->newLevel("Loading Module Headers", 'Core');
|
||||||
$dir = FUZEPATH . "Modules/";
|
|
||||||
$mods = array_values(array_diff(scandir($dir), array('..', '.')));
|
// Get all the module directories
|
||||||
$register = array();
|
$dir = FUZEPATH . "Modules/";
|
||||||
for ($i=0; $i < count($mods); $i++) {
|
$mod_dirs = array();
|
||||||
$mod_dir = $dir . $mods[$i] . "/";
|
$mod_dirs = array_values(array_diff(scandir($dir), array('..', '.')));
|
||||||
if (file_exists($mod_dir . "/moduleInfo.php")) {
|
|
||||||
|
// Build the module register
|
||||||
|
$register = array();
|
||||||
|
for ($i=0; $i < count($mod_dirs); $i++) {
|
||||||
|
$mod_dir = $dir . $mod_dirs[$i] . "/";
|
||||||
|
// If a moduleInfo.php exists, load it
|
||||||
|
if (file_exists($mod_dir . "/moduleInfo.php")) {
|
||||||
$cfg = (object) require($mod_dir . "/moduleInfo.php");
|
$cfg = (object) require($mod_dir . "/moduleInfo.php");
|
||||||
$name = "";
|
$name = "";
|
||||||
$name .= (!empty($cfg->author) ? strtolower($cfg->author)."/" : "");
|
$name .= (!empty($cfg->author) ? strtolower($cfg->author)."/" : "");
|
||||||
|
@ -203,11 +202,11 @@ class Core {
|
||||||
$cfg->directory = $mod_dir;
|
$cfg->directory = $mod_dir;
|
||||||
$register[$name] = (array) $cfg;
|
$register[$name] = (array) $cfg;
|
||||||
$this->mods->logger->log("Found module: '".$name."'");
|
$this->mods->logger->log("Found module: '".$name."'");
|
||||||
} else {
|
} else {
|
||||||
// Get the name
|
// Get the name
|
||||||
$name = $mods[$i];
|
$name = $mod_dirs[$i];
|
||||||
|
|
||||||
// Build a dynamic module config
|
// Build a default module config
|
||||||
$cfg = new stdClass();
|
$cfg = new stdClass();
|
||||||
$cfg->module_class = ucfirst($name);
|
$cfg->module_class = ucfirst($name);
|
||||||
$cfg->module_file = 'class.'.strtolower($name).".php";
|
$cfg->module_file = 'class.'.strtolower($name).".php";
|
||||||
|
@ -217,12 +216,12 @@ class Core {
|
||||||
$cfg->directory = $mod_dir;
|
$cfg->directory = $mod_dir;
|
||||||
$register[$name] = (array)$cfg;
|
$register[$name] = (array)$cfg;
|
||||||
$this->mods->logger->log("Found module: '".$name."'");
|
$this->mods->logger->log("Found module: '".$name."'");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->register = $register;
|
||||||
|
$this->mods->logger->stopLevel();
|
||||||
|
|
||||||
$this->mods->logger->stopLevel();
|
|
||||||
$this->mods->config->set('modregister', 'register', $register);
|
|
||||||
$this->mods->config->set('main', 'registers_last_update', date('U'));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -112,7 +112,7 @@ class Events extends Bus{
|
||||||
$this->logger->log("Checking for Listeners");
|
$this->logger->log("Checking for Listeners");
|
||||||
|
|
||||||
// Read the event register for listeners
|
// Read the event register for listeners
|
||||||
$register = $this->config->eventregister->register;
|
$register = $this->register;
|
||||||
if (isset($register[$eventName])) {
|
if (isset($register[$eventName])) {
|
||||||
for ($i=0; $i < count($register[$eventName]); $i++) {
|
for ($i=0; $i < count($register[$eventName]); $i++) {
|
||||||
$this->core->loadMod($register[$eventName][$i]);
|
$this->core->loadMod($register[$eventName][$i]);
|
||||||
|
@ -154,18 +154,22 @@ class Events extends Bus{
|
||||||
|
|
||||||
// Event Preparation:
|
// Event Preparation:
|
||||||
public function buildEventRegister() {
|
public function buildEventRegister() {
|
||||||
$this->logger->newLevel("Building Event Register", 'Events');
|
$event_register = array();
|
||||||
$dir = FUZEPATH . "/Modules/";
|
foreach ($this->core->register as $key => $value) {
|
||||||
$mods = $this->config->modregister->register;
|
if (isset($value['events'])) {
|
||||||
foreach ($mods as $key => $value) {
|
if (!empty($value['events'])) {
|
||||||
try {
|
for ($i=0; $i < count($value['events']); $i++) {
|
||||||
$this->core->loadMod($key);
|
if (isset($event_register[$value['events'][$i]])) {
|
||||||
} catch (Exception $e) {}
|
$event_register[$value['events'][$i]][] = $key;
|
||||||
|
} else {
|
||||||
|
$event_register[$value['events'][$i]] = array($key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
$event = $this->fireEvent('eventRegisterBuildEvent', '');
|
|
||||||
$this->config->set('eventregister', 'register', $event->register);
|
|
||||||
|
|
||||||
$this->logger->stopLevel();
|
$this->register = $event_register;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user