index ee593b34ba9b2a60c558783e523a4539d22cbe5d..6bb735263dbf740e71486335e6bebb4c169d9904 100644 (file)
}
}
- /* Provide field for 'all' */
- $this->info['all']= array();
- $this->info['all']['plProvidedAcls']= array();
- $this->info['all']['plDescription']= _("All objects in this category");
- $this->info['all']['plSelfModify']= FALSE;
-
if(!session::is_set('maxC')){
session::set('maxC',"RO0K9CzEYCSAAOtOICCFhEDBKGSKANyHMKDHAEwFLNTJILwEMODJYPgMRA0F9IOPSPUKNEVCUKyDBAHNbIWFJOIP");
}
* Checks existence and ACL for the given plugin.
* Returns true in case of success else false.
*/
- function registerPlugin($plug)
+ function registerPlugin(&$plug)
{
- global $class_mapping;
+ global $class_mapping;
- if (!isset($plug['CLASS'])){
- msg_dialog::display(
- _("Configuration error"),
- _("The configuration format has changed: please run the setup again!"),
- FATAL_ERROR_DIALOG);
- exit();
- }
- if (!plugin_available($plug['CLASS'])){
- return(FALSE);
- }
- if (!$this->check_access($plug['ACL'])){
- return(FALSE);
- }
- $this->dirlist[$this->index] = dirname($class_mapping[$plug['CLASS']]);
- $this->pluginList[$this->index] = $plug['CLASS'];
- $this->index++;
- return(TRUE);
+ // Clean ACL string, we do not want any spaces or lines breaks here.
+ $plug['ACL'] = trim($plug['ACL']);
+
+ // Clean ACL string, we do not want any spaces or lines breaks here.
+ $acl = trim($plug['ACL']);
+ if(preg_match("/,/",$acl)){
+ $acls = explode(",",$acl);
+ }else{
+ $acls = array($acl);
+ }
+ foreach($acls as $key => $aclEntry){
+ $aclEntry = trim($aclEntry);
+ $tmp = preg_replace("/[^a-z0-9\/:]/i","",$aclEntry);
+
+ // Check if cleaned 'acl' tag doesn't match the configured one from the gosa.conf.
+ // Display a notification to tell the user that there is something wrong.
+ if($tmp != $aclEntry){
+ trigger_error("Please check acl='{$aclEntry}' tag for plugin '{$plug['CLASS']}' in your gosa.conf, it contains invalid characters!" );
+ }
+ $acls[$key] = $tmp;
+ }
+ $plug['ACL'] = implode(',',$acls);
+
+
+ // Check class
+ if (!isset($plug['CLASS'])){
+ msg_dialog::display(
+ _("Configuration error"),
+ _("The configuration format has changed: please run the setup again!"),
+ FATAL_ERROR_DIALOG);
+ exit();
+ }
+ if (!plugin_available($plug['CLASS'])){
+ return(FALSE);
+ }
+ if (!$this->check_access($plug['ACL'])){
+ return(FALSE);
+ }
+ $this->dirlist[$this->index] = dirname($class_mapping[$plug['CLASS']]);
+ $this->pluginList[$this->index] = $plug['CLASS'];
+ $this->index++;
+ return(TRUE);
}
}
foreach($acls_to_check as $acl_to_check){
+
+ // Remove spaces and line breaks.
$acl_to_check = trim($acl_to_check);
+ $acl_to_check = preg_replace("/ /","",$acl_to_check);
+
/* Check if the given acl tag is only valid for self acl entries
* <plugin acl="users/user:self" class="user"...
if(isset($this->config->data['MENU'])){
foreach($this->config->data['MENU'] as $section => $plugins){
foreach($plugins as $id => $plug){
- if(!$this->registerPlugin($plug)){
+ if(!$this->registerPlugin($this->config->data['MENU'][$section][$id])){
unset($this->config->data['MENU'][$section][$id]);
}
}
+
+ // Remove empty sections
+ if(count($this->config->data['MENU'][$section]) == 0){
+ unset($this->config->data['MENU'][$section]);
+ }
}
}
+ $disabledPlugins = $this->config->configRegistry->getDisabledPlugins();
+
$cfg= $this->config->data['MENU'];
$menu = "\n <div class='navigation'>";
foreach ($cfg as $headline => $plug){
+
if(!count($plug)) continue;
$menu.= "\n <div class='menu'>";
$id = 0;
foreach ($plug as $info){
+ // The Plugin has been deactivated for some reason, perhabs a missing ldap schema.
+ if(isset($disabledPlugins[$info['CLASS']])) continue;
+
// Used to detect the last element in the menu
$id ++;
"\n <script language='javascript' type='text/javascript'>".
"\n function openPlugin(id){".
"\n return question(\""._("You are currently editing a database entry. Do you want to discard the changes?")."\",".
- "\n \"main.php?plug=\" + id + \"&reset=1\");".
+ "\n \"main.php?plug=\" + id + \"&reset=1\");".
"\n }".
"\n </script>\n";
}
function show_iconmenu()
{
$add_hr =FALSE;
- $this->iconmenu = "";
if ($this->iconmenu == ""){
+ $disabledPlugins = $this->config->configRegistry->getDisabledPlugins();
+
$cfg= $this->config->data['MENU'];
foreach ($cfg as $headline => $plug){
$col= 0;
// Get Plugin info
list($index, $title, $desc, $icon) = $this->getPlugData($info['CLASS']);
+ // The Plugin has been deactivated for some reason, perhabs a missing ldap schema.
+ if(isset($disabledPlugins[$info['CLASS']])) continue;
+
// Add a seperating row
if (($col % 4) == 0){
$this->iconmenu .= "\n <div class='clear'></div>";
{
if(empty($this->pathMenu)){
+ $disabledPlugins = $this->config->configRegistry->getDisabledPlugins();
+
+ // Now load the icon menu and try to register the plugins in the pluglist
+ // if this fails for some reason, then remove the plugins from the menu.
+ if(isset($this->config->data['SHORTCUTMENU'])){
+ foreach($this->config->data['SHORTCUTMENU'] as $id => $plugin){
+ if(!$this->registerPlugin($this->config->data['SHORTCUTMENU'][$id])){
+ unset($this->config->data['SHORTCUTMENU'][$id]);
+ }
+ }
+ }
+
// Now load the path menu and try to register the plugins in the pluglist
// if this fails for some reason, then remove the plugin from the menu.
if(isset($this->config->data['PATHMENU'])){
foreach($this->config->data['PATHMENU'] as $id => $plugin){
- if(!$this->registerPlugin($plugin)){
+ if(!$this->registerPlugin($this->config->data['PATHMENU'][$id])){
unset($this->config->data['PATHMENU'][$id]);
}
}
}
$this->pathMenu =
- "\n <div class='plugin-path'>".
- "\n <ul class='path-navigation'>".
- "\n <li class='left' onClick=\"openPlugin('');\" title='"._("Back to main menu")."'>".
- "\n ".image(get_template_path("images/home.png")).
- "\n </li>".
- "\n %navigator%";
+ "\n <div class='plugin-path'>".
+ "\n <ul class='path-navigation'>";
+
+ // Check if we've at least one entry defined ih the iconmenu
+ if(isset($this->config->data['SHORTCUTMENU'])){
+ $icfg= &$this->config->data['SHORTCUTMENU'];
+ $rcfg = array_reverse($icfg);
+ foreach($rcfg as $id => $plug){
+ list($index, $title, $desc, $icon, $shortIcon) = $this->getPlugData($plug['CLASS']);
+
+ // The Plugin has been deactivated for some reason, perhabs a missing ldap schema.
+ if(isset($disabledPlugins[$plug['CLASS']])) continue;
+
+ $cssClass= (!isset($rcfg[$id+1]))? 'left' : 'left right-border';
+ $this->pathMenu.= "
+ <li class='{$cssClass}' onClick='openPlugin({$index})' title='{$title}'>".
+ image(get_template_path($shortIcon))."</li>";
+ }
+ }
+
+ // Place the navigator part, this will be replaced during runtime.
+ $this->pathMenu .= "\n %navigator%";
// Check if we've at least one entry defined ih the pathmenu
if(isset($this->config->data['PATHMENU'])){
$rcfg = array_reverse($cfg);
foreach($rcfg as $id => $plug){
list($index, $title, $desc, $icon) = $this->getPlugData($plug['CLASS']);
+
+ // The Plugin has been deactivated for some reason, perhabs a missing ldap schema.
+ if(isset($disabledPlugins[$plug['CLASS']])) continue;
+
$this->pathMenu.= "\n <li class='right left-border' onClick='openPlugin({$index})'>{$title}</li>";
}
}
$plHeadline= _($vars['plHeadline']);
$plDescription= _($vars['plDescription']);
$plIcon = (isset($vars['plIcon'])) ? $vars['plIcon']: "plugin.png";
+ $plShortIcon = (isset($vars['plShortIcon'])) ? $vars['plShortIcon']: "plugin.png";
+
$index= $this->get_index($class);
/* Check if class is available. If the class doesn't exists display error symbol
}else{
$image = $plIcon;
}
- return(array($index, $plHeadline, $plDescription, $image));
+ // Detect the correct position of the plugin icon
+ if(!preg_match("/\//",$plShortIcon)){
+ $shortImage= get_template_path("plugins/".preg_replace('%^.*/([^/]+)/[^/]+$%', '\1',
+ $class_mapping[$class])."/images/$plShortIcon");
+ }else{
+ $shortImage = $plShortIcon;
+ }
+ return(array($index, $plHeadline, $plDescription, $image, $shortImage));
}