improved plugin files loading
This commit is contained in:
parent
a2af53f5f8
commit
99b7e1464f
@ -180,53 +180,67 @@ class PluginManager {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load complete plugins directory and start all configured plugins
|
* Load complete Plugins Directory and start all configured Plugins
|
||||||
*/
|
*/
|
||||||
public function loadPlugins($dir = '') {
|
public function loadPlugins() {
|
||||||
//TODO first include all files, than handle plugin activation
|
$pluginsDirectory = ManiaControlDir . '/plugins/';
|
||||||
$pluginsDirectory = ManiaControlDir . '/plugins/' . $dir . '/';
|
|
||||||
$pluginFiles = scandir($pluginsDirectory, 0);
|
$classesBefore = get_declared_classes();
|
||||||
foreach($pluginFiles as $pluginFile) {
|
$this->loadPluginFiles($pluginsDirectory);
|
||||||
|
$classesAfter = get_declared_classes();
|
||||||
|
|
||||||
|
$newClasses = array_diff($classesAfter, $classesBefore);
|
||||||
|
foreach($newClasses as $className) {
|
||||||
|
if (!$this->isPluginClass($className)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->addPluginClass($className);
|
||||||
|
$className::prepare($this->maniaControl);
|
||||||
|
|
||||||
|
if ($this->isPluginActive($className)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!$this->getSavedPluginStatus($className)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->activatePlugin($className);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load all Plugin Files from the Directory
|
||||||
|
*
|
||||||
|
* @param string $directory
|
||||||
|
*/
|
||||||
|
private function loadPluginFiles($directory = '') {
|
||||||
|
$pluginFiles = scandir($directory);
|
||||||
|
foreach ($pluginFiles as $pluginFile) {
|
||||||
if (stripos($pluginFile, '.') === 0) {
|
if (stripos($pluginFile, '.') === 0) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_dir($pluginsDirectory . $pluginFile)) {
|
$filePath = $directory . $pluginFile;
|
||||||
$this->loadPlugins($pluginFile);
|
if (is_file($filePath)) {
|
||||||
|
$success = include_once $filePath;
|
||||||
|
if (!$success) {
|
||||||
|
trigger_error("Error loading File '{$filePath}'!");
|
||||||
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$classesBefore = get_declared_classes();
|
$dirPath = $directory . $pluginFile;
|
||||||
$success = include_once $pluginsDirectory . $pluginFile;
|
if (is_dir($dirPath)) {
|
||||||
if (!$success) {
|
$this->loadPluginFiles($dirPath . '/');
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
$classesAfter = get_declared_classes();
|
|
||||||
$newClasses = array_diff($classesAfter, $classesBefore);
|
|
||||||
foreach($newClasses as $className) {
|
|
||||||
if (!$this->isPluginClass($className)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Prepare Plugin
|
|
||||||
$className::prepare($this->maniaControl);
|
|
||||||
|
|
||||||
$this->addPluginClass($className);
|
|
||||||
if ($this->isPluginActive($className)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (!$this->getSavedPluginStatus($className)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$this->activatePlugin($className);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns an Plugin if it is activated
|
* Returns a Plugin if it is activated
|
||||||
*
|
*
|
||||||
* @param string $pluginClass
|
* @param string $pluginClass
|
||||||
* @return Plugin
|
* @return Plugin
|
||||||
|
Loading…
Reference in New Issue
Block a user