index 1a537eb4d442a87ab4e1cd8e2f81836c0a5eadb1..6bb735263dbf740e71486335e6bebb4c169d9904 100644 (file)
* 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]);
+ }
}
}
"\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";
}
$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 right-border' onClick=\"openPlugin('');\" title='"._("Dash board")."'>".
- "\n ".image(get_template_path("images/dashBoard.png")).
- "\n </li>".
- "\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'])){
$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));
}