Fix feature check in apps (missing parenthesis), allow multiple requires (comma separated)

This commit is contained in:
Stefan Parviainen 2014-12-22 17:45:43 +01:00
parent d3830aea96
commit bd2be2b10c

View File

@ -83,35 +83,37 @@ function parse_app_description($f) {
$ret['target'] = str_replace(array('\'','"'),array(''','&dquot;'),$ret['target']); $ret['target'] = str_replace(array('\'','"'),array(''','&dquot;'),$ret['target']);
if(array_key_exists('requires',$ret)) { if(array_key_exists('requires',$ret)) {
$require = trim(strtolower($ret['requires'])); $requires = explode(',',$ret['requires']);
switch($require) { foreach($requires as $require) {
case 'nologin': $require = trim(strtolower($require));
if(local_user()) switch($require) {
unset($ret); case 'nologin':
break; if(local_user())
case 'admin': unset($ret);
if(! is_site_admin()) break;
unset($ret); case 'admin':
break; if(! is_site_admin())
case 'local_user': unset($ret);
if(! local_user()) break;
unset($ret); case 'local_user':
break; if(! local_user())
case 'public_profile': unset($ret);
if(! is_public_profile()) break;
unset($ret); case 'public_profile':
break; if(! is_public_profile())
case 'observer': unset($ret);
if(! $observer) break;
unset($ret); case 'observer':
break; if(! $observer)
default: unset($ret);
if(! local_user() && feature_enabled(local_user(),$require)) break;
unset($ret); default:
break; if(! (local_user() && feature_enabled(local_user(),$require)))
unset($ret);
break;
}
} }
// logger('require: ' . print_r($ret,true));
} }
if($ret) { if($ret) {
translate_system_apps($ret); translate_system_apps($ret);
@ -189,34 +191,37 @@ function app_render($papp,$mode = 'view') {
$papp['desc'] = str_replace(array('\'','"'),array(''','&dquot;'),$papp['desc']); $papp['desc'] = str_replace(array('\'','"'),array(''','&dquot;'),$papp['desc']);
if($k === 'requires') { if($k === 'requires') {
$require = trim(strtolower($v)); $requires = explode(',',$v);
switch($require) { foreach($requires as $require) {
case 'nologin': $require = trim(strtolower($require));
if(local_user()) switch($require) {
return ''; case 'nologin':
break; if(local_user())
case 'admin': return '';
if(! is_site_admin()) break;
return ''; case 'admin':
break; if(! is_site_admin())
case 'local_user': return '';
if(! local_user()) break;
return ''; case 'local_user':
break; if(! local_user())
case 'public_profile': return '';
if(! is_public_profile()) break;
return ''; case 'public_profile':
break; if(! is_public_profile())
case 'observer': return '';
$observer = get_app()->get_observer(); break;
if(! $observer) case 'observer':
return ''; $observer = get_app()->get_observer();
break; if(! $observer)
default: return '';
if(! local_user() && feature_enabled(local_user(),$require)) break;
return ''; default:
break; if(! (local_user() && feature_enabled(local_user(),$require)))
return '';
break;
}
} }
} }