diff --git a/plugins/example.json b/plugins/example.json index cce4ddb7..fc2fcbde 100644 --- a/plugins/example.json +++ b/plugins/example.json @@ -6,10 +6,13 @@ "contact": "nobody@example.org", "require": { "myaac": "0.4.3", - "myaac_": ">=0.7,<1.0", // support for defining versions like in composer (since 0.8.0) + "myaac_": ">=0.7,<1.0", // support for defining versions like in composer (since 0.8) "php": "5.2.0", - "php_": ">5.4,<7.0", // support for defining versions like in composer (since 0.8.0) - "database": "21" + "php_": ">5.4,<7.0", // support for defining versions like in composer (since 0.8) + "database": "21", + "php-ext": "curl", // php extension needs to be installed (since 0.8) + "table": "accounts", // table need to exist in database (since 0.8) + "column": "players.online" // column need to exist in database (since 0.8) }, "install": "plugins/example/install.php", "uninstall": [ diff --git a/system/libs/plugins.php b/system/libs/plugins.php index f41ed1ea..016fa526 100644 --- a/system/libs/plugins.php +++ b/system/libs/plugins.php @@ -180,15 +180,42 @@ class Plugins { $continue = false; } - foreach($require as $req => $version) { - if(in_array($req, array('myaac', 'myaac_', 'php', 'php_', 'database', 'database_'))) { - continue; - } + if($continue) { + foreach($require as $req => $version) { + if(in_array($req, array('myaac', 'myaac_', 'php', 'php_', 'database', 'database_'))) { + continue; + } - if(!self::is_installed($req, $version)) { - self::$error = "This plugin requires another plugin to run correctly. The another plugin is: " . $req . ", with version " . $version . "."; - $continue = false; - break; + $req = strtolower($req); + if(in_array($req, array('php-ext', 'php-extension'))) { // require php extension + if(!extension_loaded($version)) { + self::$error = "This plugin requires php extension: " . $version . " to be installed."; + $continue = false; + break; + } + } + else if($req == 'table') { + if(!$db->hasTable($version)) { + self::$error = "This plugin requires table: " . $version . " to exist in the database."; + $continue = false; + break; + } + } + else if($req == 'column') { + $tmp = explode('.', $version); + if(count($tmp) == 2) { + if(!$db->hasColumn($tmp[0], $tmp[1])) { + self::$error = "This plugin requires database column: " . $tmp[0] . "." . $tmp[1] . " to exist in database."; + $continue = false; + break; + } + } + } + else if(!self::is_installed($req, $version)) { + self::$error = "This plugin requires another plugin to run correctly. The another plugin is: " . $req . ", with version " . $version . "."; + $continue = false; + break; + } } } } diff --git a/system/libs/pot/OTS_DB_MySQL.php b/system/libs/pot/OTS_DB_MySQL.php index 4b93b7dc..85656c65 100644 --- a/system/libs/pot/OTS_DB_MySQL.php +++ b/system/libs/pot/OTS_DB_MySQL.php @@ -197,7 +197,7 @@ class OTS_DB_MySQL extends OTS_Base_DB } private function hasColumnInternal($table, $column) { - return ($this->has_column_cache[$table . '.' . $column] = count($this->query("SHOW COLUMNS FROM `" . $table . "` LIKE '" . $column . "'")->fetchAll()) > 0); + return $this->hasTable($table) && ($this->has_column_cache[$table . '.' . $column] = count($this->query("SHOW COLUMNS FROM `" . $table . "` LIKE '" . $column . "'")->fetchAll()) > 0); } public function revalidateCache() {