* plugins: require php-extension, table or column

Some additional options for plugin developers, to require specific php
extension, database table or column to be present on installed system!
This commit is contained in:
slawkens1 2018-02-05 21:25:14 +01:00
parent 808612cd10
commit 9c536bd845
3 changed files with 42 additions and 12 deletions

View File

@ -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": [

View File

@ -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;
}
}
}
}

View File

@ -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() {