plugin version compatibility checking. To use, set MinVersion, MaxVersion or MinPHPversion in the plugin header block. Case is not important. We check the project versions against STD_VERSION, which should be rolled to a new y of x.x.y if the plugin interface or project code changes in an incompatible way.
This commit is contained in:
parent
f4d47f825d
commit
66c8658898
@ -348,19 +348,46 @@ function get_plugin_info($plugin){
|
||||
} else {
|
||||
$info[$k][] = array('name' => $v);
|
||||
}
|
||||
} else {
|
||||
// if (array_key_exists($k, $info)){
|
||||
$info[$k] = $v;
|
||||
// }
|
||||
}
|
||||
else {
|
||||
$info[$k] = $v;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return $info;
|
||||
}
|
||||
|
||||
function check_plugin_versions($info) {
|
||||
|
||||
if(! is_array($info))
|
||||
return true;
|
||||
|
||||
if(array_key_exists('minversion',$info)) {
|
||||
if(version_compare(trim($info['minversion']),STD_VERSION, '<')) {
|
||||
logger('minversion limit: ' . $info['name'],LOGGER_NORMAL,LOG_WARNING);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if(array_key_exists('maxversion',$info)) {
|
||||
if(version_compare(trim($info['maxversion']),STD_VERSION, '>')) {
|
||||
logger('maxversion limit: ' . $info['name'],LOGGER_NORMAL,LOG_WARNING);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if(array_key_exists('minphpversion',$info)) {
|
||||
if(version_compare(trim($info['minphpversion']),PHP_VERSION, '<')) {
|
||||
logger('minphpversion limit: ' . $info['name'],LOGGER_NORMAL,LOG_WARNING);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief Parse theme comment in search of theme infos.
|
||||
|
@ -1092,6 +1092,23 @@ function admin_page_plugins(&$a){
|
||||
return '';
|
||||
}
|
||||
|
||||
$enabled = in_array($plugin,$a->plugins);
|
||||
$info = get_plugin_info($plugin);
|
||||
$x = check_plugin_versions($info);
|
||||
|
||||
// disable plugins which are installed but incompatible versions
|
||||
|
||||
if($enabled && ! $x) {
|
||||
$enabled = false;
|
||||
$idz = array_search($plugin, $a->plugins);
|
||||
if ($idz !== false) {
|
||||
unset($a->plugins[$idz]);
|
||||
uninstall_plugin($plugin);
|
||||
set_config("system","addon", implode(", ",$a->plugins));
|
||||
}
|
||||
}
|
||||
$info['disabled'] = 1-intval($x);
|
||||
|
||||
if (x($_GET,"a") && $_GET['a']=="t"){
|
||||
check_form_security_token_redirectOnErr('/admin/plugins', 'admin_plugins', 't');
|
||||
|
||||
@ -1142,6 +1159,7 @@ function admin_page_plugins(&$a){
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$t = get_markup_template('admin_plugins_details.tpl');
|
||||
return replace_macros($t, array(
|
||||
'$title' => t('Administration'),
|
||||
@ -1153,9 +1171,14 @@ function admin_page_plugins(&$a){
|
||||
'$plugin' => $plugin,
|
||||
'$status' => $status,
|
||||
'$action' => $action,
|
||||
'$info' => get_plugin_info($plugin),
|
||||
'$info' => $info,
|
||||
'$str_author' => t('Author: '),
|
||||
'$str_maintainer' => t('Maintainer: '),
|
||||
'$str_minversion' => t('Minimum project version: '),
|
||||
'$str_maxversion' => t('Maximum project version: '),
|
||||
'$str_minphpversion' => t('Minimum PHP version: '),
|
||||
|
||||
'$disabled' => t('Disabled - version incompatibility'),
|
||||
|
||||
'$admin_form' => $admin_form,
|
||||
'$function' => 'plugins',
|
||||
@ -1177,7 +1200,23 @@ function admin_page_plugins(&$a){
|
||||
if (is_dir($file)){
|
||||
list($tmp, $id) = array_map('trim', explode('/', $file));
|
||||
$info = get_plugin_info($id);
|
||||
$plugins[] = array( $id, (in_array($id, $a->plugins)?"on":"off") , $info);
|
||||
$enabled = in_array($id,$a->plugins);
|
||||
$x = check_plugin_versions($info);
|
||||
|
||||
// disable plugins which are installed but incompatible versions
|
||||
|
||||
if($enabled && ! $x) {
|
||||
$enabled = false;
|
||||
$idz = array_search($id, $a->plugins);
|
||||
if ($idz !== false) {
|
||||
unset($a->plugins[$idz]);
|
||||
uninstall_plugin($id);
|
||||
set_config("system","addon", implode(", ",$a->plugins));
|
||||
}
|
||||
}
|
||||
$info['disabled'] = 1-intval($x);
|
||||
|
||||
$plugins[] = array( $id, (($enabled)?"on":"off") , $info);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1190,6 +1229,7 @@ function admin_page_plugins(&$a){
|
||||
'$baseurl' => $a->get_baseurl(true),
|
||||
'$function' => 'plugins',
|
||||
'$plugins' => $plugins,
|
||||
'$disabled' => t('Disabled - version incompatibility'),
|
||||
'$form_security_token' => get_form_security_token('admin_plugins'),
|
||||
));
|
||||
}
|
||||
|
@ -1 +1 @@
|
||||
2016-01-10.1274H
|
||||
2016-01-11.1275H
|
||||
|
@ -4,8 +4,12 @@
|
||||
<ul id='pluginslist'>
|
||||
{{foreach $plugins as $p}}
|
||||
<li class='plugin {{$p.1}}'>
|
||||
{{if ! $p.2.disabled}}
|
||||
<a class='toggleplugin' href='{{$baseurl}}/admin/{{$function}}/{{$p.0}}?a=t&t={{$form_security_token}}' title="{{if $p.1==on}}Disable{{else}}Enable{{/if}}" ><i class='{{if $p.1==on}}icon-check{{else}}icon-check-empty{{/if}} admin-icons'></i></a>
|
||||
<a href='{{$baseurl}}/admin/{{$function}}/{{$p.0}}'><span class='name'>{{$p.2.name}}</span></a> - <span class="version">{{$p.2.version}}</span>
|
||||
{{else}}
|
||||
<i class='icon-stop admin-icons'></i>
|
||||
{{/if}}
|
||||
<a href='{{$baseurl}}/admin/{{$function}}/{{$p.0}}'><span class='name'>{{$p.2.name}}</span></a> - <span class="version">{{$p.2.version}}</span>{{if $p.2.disabled}} {{$disabled}}{{/if}}
|
||||
{{if $p.2.experimental}} {{$experimental}} {{/if}}{{if $p.2.unsupported}} {{$unsupported}} {{/if}}
|
||||
|
||||
<div class='desc'>{{$p.2.description}}</div>
|
||||
|
@ -1,7 +1,12 @@
|
||||
<div class = "generic-content-wrapper-styled" id='adminpage'>
|
||||
<h1>{{$title}} - {{$page}}</h1>
|
||||
|
||||
<p><i class='toggleplugin {{if $status==on}}icon-check{{else}}icon-check-empty{{/if}} admin-icons'></i> {{$info.name}} - {{$info.version}} : <a href="{{$baseurl}}/admin/{{$function}}/{{$plugin}}/?a=t&t={{$form_security_token}}">{{$action}}</a></p>
|
||||
|
||||
<p>{{if ! $info.disabled}}<i class='toggleplugin {{if $status==on}}icon-check{{else}}icon-check-empty{{/if}} admin-icons'></i>{{else}}<i class='icon-stop admin-icons'></i>{{/if}} {{$info.name}} - {{$info.version}}{{if ! $info.disabled}} : <a href="{{$baseurl}}/admin/{{$function}}/{{$plugin}}/?a=t&t={{$form_security_token}}">{{$action}}</a>{{/if}}</p>
|
||||
|
||||
{{if $info.disabled}}
|
||||
<p>{{$disabled}}</p>
|
||||
{{/if}}
|
||||
|
||||
<p>{{$info.description}}</p>
|
||||
|
||||
{{foreach $info.author as $a}}
|
||||
@ -10,6 +15,16 @@
|
||||
</p>
|
||||
{{/foreach}}
|
||||
|
||||
{{if $info.minversion}}
|
||||
<p class="versionlimit">{{$str_minversion}}{{$info.minversion}}</p>
|
||||
{{/if}}
|
||||
{{if $info.maxversion}}
|
||||
<p class="versionlimit">{{$str_maxversion}}{{$info.maxversion}}</p>
|
||||
{{/if}}
|
||||
{{if $info.minphpversion}}
|
||||
<p class="versionlimit">{{$str_minphpversion}}{{$info.minphpversion}}</p>
|
||||
{{/if}}
|
||||
|
||||
|
||||
{{foreach $info.maintainer as $a}}
|
||||
<p class="maintainer">{{$str_maintainer}}
|
||||
|
Reference in New Issue
Block a user