X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Finclude%2Fclass_plugin.inc;h=e33b2ec613feebaad84cdcd40bb6e3b1060ac42f;hb=b4517f3f06a0f04435fd4f889c04f946de8f3e45;hp=0257297037f0d8272c7cdb346f2d2e3b3699d95d;hpb=654d905191af7e2a795fa39957b4c7445102a6cb;p=gosa.git diff --git a/gosa-core/include/class_plugin.inc b/gosa-core/include/class_plugin.inc index 025729703..e33b2ec61 100644 --- a/gosa-core/include/class_plugin.inc +++ b/gosa-core/include/class_plugin.inc @@ -111,10 +111,6 @@ class plugin var $acl_base= ""; var $acl_category= ""; - /* Plugin identifier */ - var $plHeadline= ""; - var $plDescription= ""; - /* This can be set to render the tabulators in another stylesheet */ var $pl_notify= FALSE; @@ -216,7 +212,7 @@ class plugin unset($this->saved_attributes[$index]); continue; } - if ($this->saved_attributes[$index]["count"] == 1){ + if (isset($this->saved_attributes[$index][0]) || $this->saved_attributes[$index]["count"] == 1){ $tmp= $this->saved_attributes[$index][0]; unset($this->saved_attributes[$index]); $this->saved_attributes[$index]= $tmp; @@ -239,10 +235,11 @@ class plugin function execute() { /* This one is empty currently. Fabian - please fill in the docu code */ - $_SESSION['current_class_for_help'] = get_class($this); + session::set('current_class_for_help',get_class($this)); /* Reset Lock message POST/GET check array, to prevent perg_match errors*/ - $_SESSION['LOCK_VARS_TO_USE'] = $_SESSION['LOCK_VARS_USED'] =array(); + session::set('LOCK_VARS_TO_USE',array()); + session::set('LOCK_VARS_USED',array()); } /*! \brief execute plugin @@ -317,9 +314,6 @@ class plugin $data = ""; } $this->$val= $data; - //echo "".$val."
"; - }else{ - //echo "".$val."
"; } } } @@ -363,6 +357,8 @@ class plugin } } + /* Handle tagging */ + $this->tag_attrs(&$this->attrs); } @@ -622,7 +618,7 @@ class plugin exec($command); } else { $message= sprintf(_("Command '%s', specified as POSTCREATE for plugin '%s' doesn't seem to exist."), $command, get_class($this)); - print_red ($message); + msg_dialog::display(_("Error"), $message, ERROR_DIALOG); } } } @@ -654,7 +650,7 @@ class plugin exec($command); } else { $message= sprintf(_("Command '%s', specified as POSTMODIFY for plugin '%s' doesn't seem to exist."), $command, get_class($this)); - print_red ($message); + msg_dialog::display(_("Error"), $message, ERROR_DIALOG); } } } @@ -690,7 +686,7 @@ class plugin exec($command); } else { $message= sprintf(_("Command '%s', specified as POSTREMOVE for plugin '%s' doesn't seem to exist."), $command, get_class($this)); - print_red ($message); + msg_dialog::display(_("Error"), $message, ERROR_DIALOG); } } } @@ -821,7 +817,7 @@ class plugin { /* Rename dn in possible object groups */ $ldap= $this->config->get_ldap_link(); - $ldap->search('(&(objectClass=gosaGroupOfNames)(member='.@LDAP::fix($src_dn).'))', + $ldap->search('(&(objectClass=gosaGroupOfNames)(member='.@LDAP::prepare4filter($src_dn).'))', array('cn')); while ($attrs= $ldap->fetch()){ $og= new ogroup($this->config, $ldap->getDN()); @@ -859,6 +855,11 @@ class plugin function move($src_dn, $dst_dn) { + /* Do not copy if only upper- lowercase has changed */ + if(strtolower($src_dn) == strtolower($dst_dn)){ + return(TRUE); + } + /* Copy source to destination */ if (!$this->copy($src_dn, $dst_dn)){ return (FALSE); @@ -973,26 +974,18 @@ class plugin $tmp = $source[$var][$i]; } $this->$var = $tmp; -# echo $var."=".$tmp."
"; }else{ $this->$var = $source[$var][0]; -# echo $var."=".$source[$var][0]."
"; } }else{ $this->$var= $source[$var]; -# echo $var."=".$source[$var]."
"; } } } } - - function handle_object_tagging($dn= "", $tag= "", $show= false) + function tag_attrs($at, $dn= "", $tag= "", $show= false) { - //FIXME: How to optimize this? We have at least two - // LDAP accesses per object. It would be a good - // idea to have it integrated. - /* No dn? Self-operation... */ if ($dn == ""){ $dn= $this->dn; @@ -1030,71 +1023,17 @@ class plugin } } + /* Remove tags that may already be here... */ + remove_objectClass("gosaAdministrativeUnitTag", &$at); + if (isset($at['gosaUnitTag'])){ + unset($at['gosaUnitTag']); + } /* Set tag? */ if ($tag != ""){ - /* Set objectclass and attribute */ - $ldap= $this->config->get_ldap_link(); - $ldap->cat($dn, array('gosaUnitTag', 'objectClass')); - $attrs= $ldap->fetch(); - if(isset($attrs['gosaUnitTag'][0]) && $attrs['gosaUnitTag'][0] == $tag){ - if ($show) { - echo sprintf(_("Object '%s' is already tagged"), @LDAP::fix($dn))."
"; - flush(); - } - return; - } - if (count($attrs)){ - if ($show){ - echo sprintf(_("Adding tag (%s) to object '%s'"), $tag, @LDAP::fix($dn))."
"; - flush(); - } - $nattrs= array("gosaUnitTag" => $tag); - $nattrs['objectClass']= array(); - for ($i= 0; $i<$attrs['objectClass']['count']; $i++){ - $oc= $attrs['objectClass'][$i]; - if ($oc != "gosaAdministrativeUnitTag"){ - $nattrs['objectClass'][]= $oc; - } - } - $nattrs['objectClass'][]= "gosaAdministrativeUnitTag"; - $ldap->cd($dn); - $ldap->modify($nattrs); - show_ldap_error($ldap->get_error(), sprintf(_("Handle object tagging with dn '%s' failed."),$dn)); - } else { - @DEBUG (DEBUG_TRACE, __LINE__, __FUNCTION__, __FILE__, "Not tagging ($tag) $dn - seems to have moved away", "Tagging"); - } - - } else { - /* Remove objectclass and attribute */ - $ldap= $this->config->get_ldap_link(); - $ldap->cat($dn, array('gosaUnitTag', 'objectClass')); - $attrs= $ldap->fetch(); - if (isset($attrs['objectClass']) && !in_array_ics("gosaAdministrativeUnitTag", $attrs['objectClass'])){ - @DEBUG (DEBUG_TRACE, __LINE__, __FUNCTION__, __FILE__, "$dn is not tagged", "Tagging"); - return; - } - if (count($attrs)){ - if ($show){ - echo sprintf(_("Removing tag from object '%s'"), @LDAP::fix($dn))."
"; - flush(); - } - $nattrs= array("gosaUnitTag" => array()); - $nattrs['objectClass']= array(); - for ($i= 0; $i<$attrs['objectClass']['count']; $i++){ - $oc= $attrs['objectClass'][$i]; - if ($oc != "gosaAdministrativeUnitTag"){ - $nattrs['objectClass'][]= $oc; - } - } - $ldap->cd($dn); - $ldap->modify($nattrs); - show_ldap_error($ldap->get_error(), sprintf(_("Handle object tagging with dn '%s' failed."),$dn)); - } else { - @DEBUG (DEBUG_TRACE, __LINE__, __FUNCTION__, __FILE__, "Not removing tag ($tag) $dn - seems to have moved away", "Tagging"); - } + add_objectClass("gosaAdministrativeUnitTag", &$at); + $at['gosaUnitTag']= $tag; } - } @@ -1211,7 +1150,7 @@ class plugin /* Check if the snapshot_base is defined */ if(!isset($tmp['SNAPSHOT_BASE'])){ - print_red(sprintf(_("The snapshot functionality is enabled, but the required variable '%s' is not configured in your gosa.conf."),"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); } @@ -1223,7 +1162,7 @@ class plugin foreach(array("SNAPSHOT_SERVER","SNAPSHOT_USER","SNAPSHOT_PASSWORD","SNAPSHOT_BASE") as $var){ if(!isset($tmp[$var])){ $missing .= $var." "; - print_red(sprintf(_("The snapshot functionality is enabled, but the required variable(s) '%s' is not configured in your gosa.conf."),$missing)); + msg_dialog::display(_("Configuration error"), sprintf(_("The snapshot functionality is enabled, but the required variable '%s' is not set."), $missing), ERROR_DIALOG); return(FALSE); } } @@ -1448,7 +1387,7 @@ class plugin $msgs = $this->snapDialog->check(); if(count($msgs)){ foreach($msgs as $msg){ - print_red($msg); + msg_dialog::display(_("Error"), $msg, ERROR_DIALOG); } }else{ $this->dn = $this->snapDialog->dn; @@ -1574,12 +1513,12 @@ class plugin if(isset($this->base) && isset($this->config->idepartments[$this->base])){ $deps[$this->base] = $this->config->idepartments[$this->base]; }else{ - echo "No default base found. ".$this->base."
"; + trigger_error("No default base found in class ".get_class($this).". ".$this->base); } - return($deps); } + /* This function modifies object acls too, if an object is moved. * $old_dn specifies the actually used dn * $new_dn specifies the destiantion dn @@ -1593,8 +1532,10 @@ class plugin } /* Update userinfo if necessary */ - if($_SESSION['ui']->dn == $old_dn){ - $_SESSION['ui']->dn = $new_dn; + $ui = session::get('ui'); + if($ui->dn == $old_dn){ + $ui->dn = $new_dn; + session::set('ui',$ui); new log("view","acl/".get_class($this),$this->dn,array(),"Updated current user dn from '".$old_dn."' to '".$new_dn."'"); } @@ -1655,14 +1596,10 @@ class plugin /* Acls for this object must be adjusted */ if($found){ - if($output_changes){ - echo "". - _("Changing ACL dn")." : 
 -"._("from")."  ". - $old_dn. - "
 -"._("to")." ". - $new_dn. - "

"; - } + $debug_info= _("Changing ACL dn")." : 
 -"._("from")."  ". + $old_dn."
 -"._("to")." ".$new_dn."
"; + @DEBUG (DEBUG_ACL, __LINE__, __FUNCTION__, __FILE__,$debug_info,"ACL"); + $update[$attrs['dn']] =array(); foreach($acls as $acl){ $update[$attrs['dn']]['gosaAclEntry'][] = $acl; @@ -1718,6 +1655,7 @@ class plugin */ function enable_multiple_support() { + $this->ignore_account = TRUE; $this->multiple_support_active = TRUE; } @@ -1754,10 +1692,11 @@ class plugin function multiple_execute() { /* This one is empty currently. Fabian - please fill in the docu code */ - $_SESSION['current_class_for_help'] = get_class($this); + session::set('current_class_for_help',get_class($this)); /* Reset Lock message POST/GET check array, to prevent perg_match errors*/ - $_SESSION['LOCK_VARS_TO_USE'] = $_SESSION['LOCK_VARS_USED'] =array(); + session::set('LOCK_VARS_TO_USE',array()); + session::set('LOCK_VARS_USED',array()); return("Multiple edit is currently not implemented for this plugin."); } @@ -1774,11 +1713,13 @@ class plugin /* Save values to object */ $this->multi_boxes = array(); foreach ($this->attributes as $val){ - if ($this->acl_is_writeable($val) && isset ($_POST["$val"])){ + + /* Get selected checkboxes from multiple edit */ + if(isset($_POST["use_".$val])){ + $this->multi_boxes[] = $val; + } - if(isset($_POST["use_".$val])){ - $this->multi_boxes[] = $val; - } + if ($this->acl_is_writeable($val) && isset ($_POST["$val"])){ /* Check for modifications */ if (get_magic_quotes_gpc()) { @@ -1800,6 +1741,18 @@ class plugin } + /*! \brief Returns all attributes of this plugin, + to be able to detect multiple used attributes + in multi_plugg::detect_multiple_used_attributes(). + @return array Attributes required for intialization of multi_plug + */ + public function get_multi_init_values() + { + $attrs = $this->attrs; + return($attrs); + } + + /*! \brief Check given values in multiple edit @return array Error messages */