X-Git-Url: https://jfr.im/git/irc/unrealircd/unrealircd-webpanel.git/blobdiff_plain/90dc8f2b5b50ff38baec8b9b67ee2c10d014e924..ea90b321a4b3768028d841b307c362af97a5e6e1:/plugins.php diff --git a/plugins.php b/plugins.php index 39ee1d5..c080e1b 100644 --- a/plugins.php +++ b/plugins.php @@ -1,9 +1,5 @@ error) - { - Message::Fail("Warning: Plugin \"$modname\" failed to load: $plugin->error"); - } - else - { - self::$list[] = $plugin; - } - } + static $list = []; + + static function load($modname) + { + $plugin = new Plugin($modname); + if ($plugin->error) + { + Message::Fail("Warning: Plugin \"$modname\" failed to load: $plugin->error"); + } + else + { + self::$list[] = $plugin; + } + } + static function plugin_exists($name, $version = NULL) + { + foreach(self::$list as $p) + if (!strcasecmp($p->name,$name) && (!$version || ($version >= $p->version))) + return true; + + return false; + } + } class Plugin { - public $name; - public $author; - public $version; - public $description; - public $handle; - - public $error = NULL; - function __construct($handle) - { - if (!is_dir("plugins/$handle")) - $this->error = "Plugin directory \"plugins/$handle\" doesn't exist"; - - else if (!is_file("plugins/$handle/$handle.php")) - $this->error = "Plugin file \"plugins/$handle/$handle.php\" doesn't exist"; - - else - { - require_once "plugins/$handle/$handle.php"; - - if (!class_exists($handle)) - $this->error = "Class \"$handle\" doesn't exist"; - - else - { - $plugin = new $handle(); - - if (!isset($plugin->name)) - $this->error = "Plugin name not defined"; - elseif (!isset($plugin->author)) - $this->error = "Plugin author not defined"; - elseif (!isset($plugin->version)) - $this->error = "Plugin version not defined"; - elseif (!isset($plugin->description)) - $this->error = "Plugin description not defined"; - else - { - $this->handle = $handle; - $this->name = $plugin->name; - $this->author = $plugin->author; - $this->version = $plugin->version; - $this->description = $plugin->description; - } - } - } - } + public $name; + public $author; + public $version; + public $description; + public $handle; + public $email; + + public $error = NULL; + function __construct($handle) + { + if (!is_dir(UPATH."/plugins/$handle")) + $this->error = "Plugin directory \"".UPATH."/plugins/$handle\" doesn't exist"; + + else if (!is_file(UPATH."/plugins/$handle/$handle.php")) + $this->error = "Plugin file \"".UPATH."/plugins/$handle/$handle.php\" doesn't exist"; + + else + { + require_once UPATH."/plugins/$handle/$handle.php"; + + if (!class_exists($handle)) + $this->error = "Class \"$handle\" doesn't exist"; + + else + { + $plugin = new $handle(); + + if (!isset($plugin->name)) + $this->error = "Plugin name not defined"; + elseif (!isset($plugin->author)) + $this->error = "Plugin author not defined"; + elseif (!isset($plugin->version)) + $this->error = "Plugin version not defined"; + elseif (!isset($plugin->description)) + $this->error = "Plugin description not defined"; + elseif (!isset($plugin->email)) + $this->error = "Plugin email not defined"; + else + { + $this->handle = $handle; + $this->name = $plugin->name; + $this->author = $plugin->author; + $this->version = $plugin->version; + $this->description = $plugin->description; + $this->email = $plugin->email; + } + } + } + } +} + +if (get_config("plugins")) +{ + foreach(get_config("plugins") as $plugin) + Plugins::load($plugin); +} + +/* Requires the plugin */ +function require_plugin($name, $version) +{ + if (!Plugins::plugin_exists($name,$version)) + die("Missing plugin: $name v$version"); +} + + + +/* I'm not a fan of globals */ +class AuthModLoaded +{ + public static $status = 0; } -if (defined('PLUGINS')) +function is_auth_provided() { - foreach(PLUGINS as $plugin) - Plugins::load($plugin); + return AuthModLoaded::$status; } \ No newline at end of file