X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Finclude%2Fclass_pluglist.inc;h=528052a875c054e5d28e3f98bd51f356a48c0b1e;hb=30d939bbc772a9b8cdd9704e8034101e957ab972;hp=1337de824b7f8cb3659bd6a042f698916bf436b1;hpb=8e7ac286389669883b1a5684127b6d1e0a63b91f;p=gosa.git
diff --git a/gosa-core/include/class_pluglist.inc b/gosa-core/include/class_pluglist.inc
index 1337de824..528052a87 100644
--- a/gosa-core/include/class_pluglist.inc
+++ b/gosa-core/include/class_pluglist.inc
@@ -1,24 +1,25 @@
config= &$config;
/* Create dirlist for all plugins */
- $this->dirlist= $this->get_plugins ($this->dirlist, $this->config->data);
+ $this->dirlist= $this->get_plugins ($this->dirlist, $this->config->data['MENU']);
- /* Fill info part of pluglist */
- $classes= get_declared_classes();
+ /* Fill info part of pluglist */
+ $classes= get_declared_classes();
- foreach ($classes as $cname){
- $cmethods = get_class_methods($cname);
- if (in_array_ics('plInfo',$cmethods)){
- $this->info[$cname]= @call_user_func(array($cname, 'plInfo'));
- }
- }
+ foreach ($classes as $cname){
+ $cmethods = get_class_methods($cname);
+ if (in_array_ics('plInfo',$cmethods)){
+ $this->info[$cname]= call_user_func(array($cname, 'plInfo'));
+ }
+ }
/* Provide field for 'all' */
$this->info['all']= array();
@@ -58,65 +61,88 @@ class pluglist {
function get_plugins($list, &$config)
{
- /* Error reporting, because I'm getting strange messages in PHP 4.2.x */
- if (!isset($config['PATH']) && !isset($config['CLASS'])){
+ global $class_mapping;
+
+ if (!isset($config['CLASS'])){
if (is_array($config)){
foreach ($config as $val){
$list= $this->get_plugins($list, $val);
}
}
} else {
- if (isset ($config['PATH']) && is_array($config)){
- $list[$this->index++]= $config['PATH'];
- if (isset($config['CLASS'])){
- $class= $config['CLASS'];
- }
+ if (is_array($config) && isset($class_mapping[$config['CLASS']])){
+ $list[$this->index++]= dirname($class_mapping[$config['CLASS']]);
+ } else {
+ $list[$this->index++]= "";
}
}
return ($list);
}
+
+ /*! \brief Check whether we are allowed to modify the given acl or not..
+ This function is used to check which plugins are visible.
+
+ @param The acl tag to test, eg. "users/user:self", "systems", ...
+ @return Boolean TRUE on success else FALSE
+ */
function check_access($aclname)
{
- $deps= $this->ui->get_module_departments($aclname);
+ if (isset($this->silly_cache[$aclname])) {
+ return $this->silly_cache[$aclname];
+ }
+ /* Split given acl string into an array.
+ e.g. "user,systems" => array("users","systems");
+ */
$acls_to_check = array();
if(preg_match("/,/",$aclname)){
$acls_to_check = split(",",$aclname);
}else{
$acls_to_check = array($aclname);
}
-
- if(preg_match("/\//",$aclname)){
- foreach($deps as $dep){
- foreach($acls_to_check as $acl_to_check){
- if($this->ui->get_permissions($dep,$acl_to_check) != ""){
- return(TRUE);
- }
+
+ foreach($acls_to_check as $acl_to_check){
+ $acl_to_check = trim($acl_to_check);
+
+ /* Check if the given acl tag is only valid for self acl entries
+ ui->get_permissions($this->ui->dn,$acl_to_check,"") != ""){
+ $this->silly_cache[$aclname]= TRUE;
+ return(TRUE);
}
- }
- }else{
- foreach($deps as $dep){
- foreach($acls_to_check as $acl_to_check){
- if($this->ui->get_category_permissions($dep,$acl_to_check) != ""){
- return(TRUE);
- }
+ $this->silly_cache[$aclname]= FALSE;
+ return(FALSE);
+ }else{
+
+ /* No self acls. Check if we have any acls for the given ACL type */
+ $deps = $this->ui->get_module_departments($acl_to_check,TRUE);
+ if(count($deps)){
+ $this->silly_cache[$aclname]= TRUE;
+ return TRUE;
}
}
}
+
+ $this->silly_cache[$aclname]= FALSE;
return (FALSE);
}
+
function gen_headlines()
{
$ret = array();
if(count($this->headlines) == 0){
foreach($this->config->data['MENU'] as $headline => $plugins){
foreach( $plugins as $id => $plug){
- $attrs = (get_class_vars($plug['CLASS']));
- $ret[$id]['HEADLINE'] = $headline;
- $ret[$id]['NAME'] = $attrs['plHeadline'];
+ if (plugin_available($plug['CLASS'])){
+ $attrs = (get_class_vars($plug['CLASS']));
+ $ret[$id]['HEADLINE'] = $headline;
+ $ret[$id]['NAME'] = $attrs['plHeadline'];
+ }
}
}
$this->headlines = $ret;
@@ -147,16 +173,24 @@ class pluglist {
/* Read information from class variable */
if (!isset($info['CLASS'])){
- print_red(_("Your gosa.conf format has changed. Please re-run setup!"));
- display_error_page();
+ msg_dialog::display(
+ _("Configuration error"),
+ _("The configuration format has changed. Please re-run setup!"),
+ FATAL_ERROR_DIALOG);
+ exit();
+ }
+ if (!plugin_available($info['CLASS'])){
+ continue;
}
$vars= get_class_vars($info['CLASS']);
- $plHeadline= $vars['plHeadline'];
+ if (isset($info['NAME'])){
+ $plHeadline= _($info['NAME']);
+ } else {
+ $plHeadline= $vars['plHeadline'];
+ }
$plDescription= $vars['plDescription'];
-
- $index= $this->get_index($info['PATH'],$info['CLASS']);
- $image= get_template_path('images/'.$info['ICON']);
+ $index= $this->get_index($info['CLASS']);
$href= "main.php?plug=$index&reset=1";
if(!$vars){
@@ -167,9 +201,11 @@ class pluglist {
if ($this->check_access($info['ACL'])){
+ $this->allowed_plugins[$index] = $index;
+
$entries= $entries."\n";
} else {
$entries.= "
\n";
}
- /* Generate icon entry with description */
- $current= '';
- $this->menuparts[_($headline)][]= $current;
- if(!isset($_SESSION['maxC'])){
- $_SESSION['maxC'] = "RO0K9CzEYCSAAOtOICCFhEDBKGSKANyHMKDHAEwFLNTJILwEMODJYPgMRA0F9IOPSPUKNEVCUKyDBAHNbIWFJOIP";
+ if(!session::is_set('maxC')){
+ session::set('maxC',"RO0K9CzEYCSAAOtOICCFhEDBKGSKANyHMKDHAEwFLNTJILwEMODJYPgMRA0F9IOPSPUKNEVCUKyDBAHNbIWFJOIP");
}
}
}
@@ -239,11 +266,12 @@ class pluglist {
function show_iconmenu()
{
+ global $class_mapping;
if ($this->iconmenu == ""){
$cfg= $this->config->data['MENU'];
if (isset($this->config->current['ICONSIZE'])){
- list($x, $y)= split("x", $this->config->current['ICONSIZE']);
+ list($x, $y)= split("x", $this->config->get_cfg_value("iconsize"));
$isize= "width=\"$x\" height=\"$y\"";
} else {
$isize= "";
@@ -259,12 +287,21 @@ class pluglist {
foreach ($plug as $info){
+ if (!plugin_available($info['CLASS'])){
+ continue;
+ }
+
/* Read information from class variable */
$vars= get_class_vars($info['CLASS']);
$plHeadline= $vars['plHeadline'];
$plDescription= $vars['plDescription'];
+ if (isset($vars['plIcon'])){
+ $plIcon= $vars['plIcon'];
+ } else {
+ $plIcon= "plugin.png";
+ }
- $index= $this->get_index($info['PATH'],$info['CLASS']);
+ $index= $this->get_index($info['CLASS']);
$href = "main.php?plug=".$index."&reset=1";
@@ -279,15 +316,23 @@ class pluglist {
if ($this->check_access($info['ACL'])){
- /* Hm this looks doubled */
- $image= get_template_path('images/'.$info['ICON']);
+ /* Load icon */
+ if (isset($info['ICON'])){
+ $image= get_template_path('images/'.$info['ICON']);
+ } else {
+ if(!preg_match("/\//",$plIcon)){
+ $image= get_template_path("plugins/".preg_replace('%^.*/([^/]+)/[^/]+$%', '\1', $class_mapping[$info['CLASS']])."/images/$plIcon");
+ }else{
+ $image = $plIcon;
+ }
+ }
if ($col > 5){
$entries= $entries."";
$col = 1;
}
$entries= $entries."