X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Finclude%2Fclass_plugin.inc;h=31d5b4bafd80e2c155c2852626394c08e60b80f1;hb=06cc53394cf695b3bc663073e526d7d94e4bb2d6;hp=4c78534f9debb7c1b2e7c376bdb6b434983251dd;hpb=eadd13d48d6457be42e8466b54c215afe25c3ad2;p=gosa.git diff --git a/gosa-core/include/class_plugin.inc b/gosa-core/include/class_plugin.inc index 4c78534f9..31d5b4baf 100644 --- a/gosa-core/include/class_plugin.inc +++ b/gosa-core/include/class_plugin.inc @@ -180,7 +180,7 @@ class plugin /* Set the template flag according to the existence of objectClass gosaUserTemplate */ if (isset($this->attrs['objectClass'])){ - if (in_array ("gosaUserTemplate", $this->attrs['objectClass'])){ + if (in_array_ics ("gosaUserTemplate", $this->attrs['objectClass'])){ $this->is_template= TRUE; @DEBUG (DEBUG_TRACE, __LINE__, __FUNCTION__, __FILE__, "found", "Template check"); @@ -273,7 +273,7 @@ class plugin /* Remove objectClasses from entry */ $ldap->cd($this->dn); $this->attrs= array(); - $this->attrs['objectClass']= array_remove_entries($this->objectclasses,$oc); + $this->attrs['objectClass']= array_remove_entries_ics($this->objectclasses,$oc); /* Unset attributes from entry */ foreach ($this->attributes as $val){ @@ -636,8 +636,11 @@ class plugin if (check_command($command)){ @DEBUG (DEBUG_SHELL, __LINE__, __FUNCTION__, __FILE__, $command, "Execute"); - - exec($command); + exec($command,$arr); + foreach($arr as $str){ + @DEBUG (DEBUG_SHELL, __LINE__, __FUNCTION__, __FILE__, + $command, "Result: ".$str); + } } else { $message= msgPool::cmdnotfound("POSTCREATE", get_class($this)); msg_dialog::display(_("Error"), $message, ERROR_DIALOG); @@ -674,7 +677,11 @@ class plugin if (check_command($command)){ @DEBUG (DEBUG_SHELL, __LINE__, __FUNCTION__, __FILE__,$command, "Execute"); - exec($command); + exec($command,$arr); + foreach($arr as $str){ + @DEBUG (DEBUG_SHELL, __LINE__, __FUNCTION__, __FILE__, + $command, "Result: ".$str); + } } else { $message= msgPool::cmdnotfound("POSTMODIFY", get_class($this)); msg_dialog::display(_("Error"), $message, ERROR_DIALOG); @@ -712,7 +719,11 @@ class plugin @DEBUG (DEBUG_SHELL, __LINE__, __FUNCTION__, __FILE__, $command, "Execute"); - exec($command); + exec($command,$arr); + foreach($arr as $str){ + @DEBUG (DEBUG_SHELL, __LINE__, __FUNCTION__, __FILE__, + $command, "Result: ".$str); + } } else { $message= msgPool::cmdnotfound("POSTREMOVE", get_class($this)); msg_dialog::display(_("Error"), $message, ERROR_DIALOG); @@ -898,6 +909,9 @@ class plugin /* Try to move the source entry to the destination position */ $ldap = $this->config->get_ldap_link(); + $ldap->cd($this->config->current['BASE']); + $ldap->create_missing_trees(preg_replace("/^[^,]+,/","",$dst_dn)); + if (!$ldap->rename_dn($src_dn,$dst_dn)){ msg_dialog::display(_("LDAP error"), msgPool::ldaperror($ldap->get_error(), $src_dn, "", get_class())); return(FALSE); @@ -1204,24 +1218,24 @@ class plugin } /* Get configuration from gosa.conf */ - $tmp = $this->config->current; + $config = $this->config; /* Create lokal ldap connection */ $ldap= $this->config->get_ldap_link(); $ldap->cd($this->config->current['BASE']); /* check if there are special server configurations for snapshots */ - if(!isset($tmp['SNAPSHOT_SERVER'])){ + if($config->get_cfg_value("snapshot_server") == ""){ /* Source and destination server are both the same, just copy source to dest obj */ $ldap_to = $ldap; $snapldapbase = $this->config->current['BASE']; }else{ - $server = $tmp['SNAPSHOT_SERVER']; - $user = $tmp['SNAPSHOT_USER']; - $password = $tmp['SNAPSHOT_PASSWORD']; - $snapldapbase = $tmp['SNAPSHOT_BASE']; + $server = $config->get_cfg_value("snapshot_server"); + $user = $config->get_cfg_value("snapshot_user"); + $password = $config->get_cfg_value("snapshot_password"); + $snapldapbase = $config->get_cfg_value("snapshot_base"); $ldap_to = new ldapMultiplexer(new LDAP($user,$password, $server)); $ldap_to -> cd($snapldapbase); @@ -1240,7 +1254,7 @@ class plugin /* Collect some infos */ $base = $this->config->current['BASE']; - $snap_base = $tmp['SNAPSHOT_BASE']; + $snap_base = $config->get_cfg_value("snapshot_base"); $base_of_object = preg_replace ('/^[^,]+,/i', '', $this->dn); $new_base = preg_replace("/".normalizePreg($base)."$/","",$base_of_object).$snap_base; @@ -1302,31 +1316,28 @@ class plugin There will also be some errors psoted, if the configuration failed */ function snapshotEnabled() { - $tmp = $this->config->current; - if(isset($tmp['ENABLE_SNAPSHOT'])){ - if (preg_match("/^true$/i", $tmp['ENABLE_SNAPSHOT']) || preg_match("/yes/i", $tmp['ENABLE_SNAPSHOT'])){ - - /* Check if the snapshot_base is defined */ - if(!isset($tmp['SNAPSHOT_BASE'])){ - msg_dialog::display(_("Configuration error"), sprintf(_("The snapshot functionality is enabled, but the required variable '%s' is not set."),"SNAPSHOT_BASE"), ERROR_DIALOG); - return(FALSE); - } - - /* check if there are special server configurations for snapshots */ - if(isset($tmp['SNAPSHOT_SERVER'])){ - - /* check if all required vars are available to create a new ldap connection */ - $missing = ""; - foreach(array("SNAPSHOT_SERVER","SNAPSHOT_USER","SNAPSHOT_PASSWORD","SNAPSHOT_BASE") as $var){ - if(!isset($tmp[$var])){ - $missing .= $var." "; - msg_dialog::display(_("Configuration error"), sprintf(_("The snapshot functionality is enabled, but the required variable '%s' is not set."), $missing), ERROR_DIALOG); - return(FALSE); - } - } - } - return(TRUE); - } + $config = $this->config; + if($config->get_cfg_value("enable_snapshot") == "true"){ + /* Check if the snapshot_base is defined */ + if ($config->get_cfg_value("snapshot_base") == ""){ + msg_dialog::display(_("Configuration error"), sprintf(_("The snapshot functionality is enabled, but the required variable '%s' is not set."),"SNAPSHOT_BASE"), ERROR_DIALOG); + return(FALSE); + } + + /* check if there are special server configurations for snapshots */ + if ($config->get_cfg_value("snapshot_server") != ""){ + + /* check if all required vars are available to create a new ldap connection */ + $missing = ""; + foreach(array("snapshot_server","snapshot_user","snapshot_password","snapshot_base") as $var){ + if($config->get_cfg_value($var) == ""){ + $missing .= $var." "; + msg_dialog::display(_("Configuration error"), sprintf(_("The snapshot functionality is enabled, but the required variable '%s' is not set."), $missing), ERROR_DIALOG); + return(FALSE); + } + } + } + return(TRUE); } return(FALSE); } @@ -1503,9 +1514,12 @@ class plugin } - function showSnapshotDialog($base,$baseSuffixe) + function showSnapshotDialog($base,$baseSuffixe,&$parent) { $once = true; + $ui = get_userinfo(); + $this->parent = $parent; + foreach($_POST as $name => $value){ /* Create a new snapshot, display a dialog */ @@ -1513,26 +1527,40 @@ class plugin $once = false; $entry = preg_replace("/^CreateSnapShotDialog_/","",$name); $entry = base64_decode(preg_replace("/_[xy]$/","",$entry)); - $this->snapDialog = new SnapShotDialog($this->config,$entry,$this); - } + if(!empty($entry) && $ui->allow_snapshot_create($entry,$this->parent->acl_module)){ + $this->snapDialog = new SnapShotDialog($this->config,$entry,$this); + }else{ + msg_dialog::display(_("Permission"),sprintf(_("You are not allowed to create a snapshot for %s."),$entry),ERROR_DIALOG); + } + } + /* Restore a snapshot, display a dialog with all snapshots of the current object */ if(preg_match("/^RestoreSnapShotDialog_/",$name) && $once){ $once = false; $entry = preg_replace("/^RestoreSnapShotDialog_/","",$name); $entry = base64_decode(preg_replace("/_[xy]$/","",$entry)); - $this->snapDialog = new SnapShotDialog($this->config,$entry,$this); - $this->snapDialog->display_restore_dialog = true; + if(!empty($entry) && $ui->allow_snapshot_restore($entry,$this->parent->acl_module)){ + $this->snapDialog = new SnapShotDialog($this->config,$entry,$this); + $this->snapDialog->display_restore_dialog = true; + }else{ + msg_dialog::display(_("Permission"),sprintf(_("You are not allowed to restore a snapshot for %s."),$entry),ERROR_DIALOG); + } } /* Restore one of the already deleted objects */ if(((isset($_POST['menu_action']) && $_POST['menu_action'] == "RestoreDeletedSnapShot") || preg_match("/^RestoreDeletedSnapShot_/",$name)) && $once){ $once = false; - $this->snapDialog = new SnapShotDialog($this->config,"",$this); - $this->snapDialog->set_snapshot_bases($baseSuffixe); - $this->snapDialog->display_restore_dialog = true; - $this->snapDialog->display_all_removed_objects = true; + + if($ui->allow_snapshot_restore($base,$this->parent->acl_module)){ + $this->snapDialog = new SnapShotDialog($this->config,"",$this); + $this->snapDialog->set_snapshot_bases($baseSuffixe); + $this->snapDialog->display_restore_dialog = true; + $this->snapDialog->display_all_removed_objects = true; + }else{ + msg_dialog::display(_("Permission"),sprintf(_("You are not allowed to restore a snapshot for %s."),$base),ERROR_DIALOG); + } } /* Restore selected snapshot */ @@ -1540,9 +1568,11 @@ class plugin $once = false; $entry = preg_replace("/^RestoreSnapShot_/","",$name); $entry = base64_decode(trim(preg_replace("/_[xy]$/","",$entry))); - if(!empty($entry)){ + if(!empty($entry) && $ui->allow_snapshot_restore($entry,$this->parent->acl_module)){ $this->restore_snapshot($entry); $this->snapDialog = NULL; + }else{ + msg_dialog::display(_("Permission"),sprintf(_("You are not allowed to restore a snapshot for %s."),$entry),ERROR_DIALOG); } } } @@ -1614,14 +1644,15 @@ class plugin { $ui= get_userinfo(); if($base == "") $base = $this->acl_base; - return preg_match('/c/', $ui->get_permissions($this->acl_base, $this->acl_category.get_class($this), '0')); + return preg_match('/c/', $ui->get_permissions($base, $this->acl_category.get_class($this), '0')); } - function acl_is_removeable() + function acl_is_removeable($base ="") { $ui= get_userinfo(); - return preg_match('/d/', $ui->get_permissions($this->acl_base, $this->acl_category.get_class($this), '0')); + if($base == "") $base = $this->acl_base; + return preg_match('/d/', $ui->get_permissions($base, $this->acl_category.get_class($this), '0')); } @@ -1644,18 +1675,18 @@ class plugin return $ui->get_permissions($this->acl_base, $this->acl_category.get_class($this), $attribute,$skip_write); } - /* Get all allowed bases to move an object to or to create a new object. - Idepartments also contains all base departments which lead to the allowed bases */ - function get_allowed_bases($category = "") + + /*! \brief Returns a list of all available departments for this object. + If this object is new, all departments we are allowed to create a new user in are returned. + If this is an existing object, return all deps. we are allowed to move tis object too. + + @return Array [dn] => "..name" // All deps. we are allowed to act on. + */ + function get_allowed_bases() { $ui = get_userinfo(); $deps = array(); - /* Set category */ - if(empty($category)){ - $category = $this->acl_category.get_class($this); - } - /* Is this a new object ? Or just an edited existing object */ if(!$this->initially_was_account && $this->is_account){ $new = true; @@ -1663,17 +1694,10 @@ class plugin $new = false; } - $cat_bases = $ui->get_module_departments(preg_replace("/\/.*$/","",$category)); foreach($this->config->idepartments as $dn => $name){ - - if(!in_array_ics($dn,$cat_bases)){ - continue; - } - - $acl = $ui->get_permissions($dn,$category); - if($new && preg_match("/c/",$acl)){ + if($new && $this->acl_is_createable($dn)){ $deps[$dn] = $name; - }elseif(!$new && preg_match("/m/",$acl)){ + }elseif(!$new && $this->acl_is_moveable($dn)){ $deps[$dn] = $name; } } @@ -1681,8 +1705,10 @@ class plugin /* Add current base */ if(isset($this->base) && isset($this->config->idepartments[$this->base])){ $deps[$this->base] = $this->config->idepartments[$this->base]; + }elseif(strtolower($this->dn) == strtolower($this->config->current['BASE'])){ + }else{ - trigger_error("No default base found in class ".get_class($this).". ".$this->base); + trigger_error("Cannot return list of departments, no default base found in class ".get_class($this).". ".$this->base); } return($deps); } @@ -1931,6 +1957,136 @@ class plugin $message = plugin::check(); return($message); } + + + /*! \brief Returns the snapshot header part for "Actions" menu in management dialogs + @param $layer_menu + */ + function get_snapshot_header($base,$category) + { + $str = ""; + $ui = get_userinfo(); + if($this->snapshotEnabled() && $ui->allow_snapshot_restore($base,$category)){ + + $ok = false; + foreach($this->get_used_snapshot_bases() as $base){ + $ok |= count($this->getAllDeletedSnapshots($base)) >= 1 ; + } + + if($ok){ + $str = "..| "._("Restore"). "|RestoreDeletedSnapShot|\n"; + }else{ + $str = "..| "._("Restore")."||\n"; + } + } + return($str); + } + + + function get_snapshot_action($base,$category) + { + $str= ""; + $ui = get_userinfo(); + if($this->snapshotEnabled()){ + if ($ui->allow_snapshot_restore($base,$category)){ + + if(count($this->Available_SnapsShots($base))){ + $str.= " "; + } else { + $str = " "; + } + } + if($ui->allow_snapshot_create($base,$category)){ + $str.= " "; + }else{ + $str = "  "; + } + } + + return($str); + } + + + function get_copypaste_action($base,$category,$class,$copy = TRUE, $cut = TRUE) + { + $ui = get_userinfo(); + $action = ""; + if($this->CopyPasteHandler){ + if($cut){ + if($ui->is_cutable($base,$category,$class)){ + $action .= " "; + }else{ + $action.="  "; + } + } + if($copy){ + if($ui->is_copyable($base,$category,$class)){ + $action.= " "; + }else{ + $action.="  "; + } + } + } + + return($action); + } + + + function get_copypaste_header($base,$category,$copy = TRUE, $cut = TRUE) + { + $s = ""; + $ui =get_userinfo(); + + if(!is_array($category)){ + $category = array($category); + } + + /* Check permissions for each category, if there is at least one category which + support read or paste permissions for the given base, then display the specific actions. + */ + $readable = $pasteable = TRUE; + foreach($category as $cat){ + $readable |= $ui->get_category_permissions($base,$cat); + $pasteable|= $ui->is_pasteable($base,$cat); + } + + if(($cut || $copy) && isset($this->CopyPasteHandler) && is_object($this->CopyPasteHandler)){ + if($readable){ + $s.= "..|---|\n"; + if($copy){ + $s.= "..|". + " "._("Copy")."|"."multiple_copy_systems|\n"; + } + if($cut){ + $s.= "..|". + " "._("Cut")."|"."multiple_cut_systems|\n"; + } + } + + if($pasteable){ + if($this->CopyPasteHandler->entries_queued()){ + $img = ""; + $s.="..|".$img." "._("Paste")."|editPaste|\n"; + }else{ + $img = ""; + $s.="..|".$img." "._("Paste")."\n"; + } + } + } + return($s); + } + + + function get_used_snapshot_bases() + { + return(array()); + } } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: