index 8be727a5b31de73ebad4b90d92969e18beae44eb..8c57c441961039ba3c5a21867a7f34a92ba27179 100644 (file)
--- a/include/class_plugin.inc
+++ b/include/class_plugin.inc
/* Save unit tags */
var $gosaUnitTag= "";
+ var $skipTagging= FALSE;
/*!
\brief Used standard values
var $new= TRUE;
var $saved_attributes= array();
+ /* This can be set to render the tabulators in another stylesheet */
+ var $pl_notify= FALSE;
+
/*! \brief plugin constructor
If 'dn' is set, the node loads the given 'dn' from LDAP
}
}
+ /* Handle tagging */
+ $this->tag_attrs(&$this->attrs);
}
}
}
}
+
+ /* Update saved attributes and ensure that next cleanups will be successful too */
+ foreach($this->attrs as $name => $value){
+ $this->saved_attributes[$name] = $value;
+ }
}
/* Check formular input */
/* Show header message for tab dialogs */
function show_header($button_text, $text, $disabled= FALSE)
{
+ $state = "disabled";
+ if($this->is_account && $this->acl == "#all#"){
+ $state= "";
+ }elseif(!$this->is_account && chkacl($this->acl,"create") == ""){
+ $state= "";
+ }
+
if ($disabled == TRUE){
$state= "disabled";
- } else {
- $state= "";
}
+
$display= "<table summary=\"\" width=\"100%\"><tr>\n<td colspan=2><p><b>$text</b></p>\n";
- $display.= "<input type=submit value=\"$button_text\" name=\"modify_state\" ".
- chkacl($this->acl, "all")." ".$state.
- "><p class=\"seperator\"> </p></td></tr></table>";
+ $display.= "<input type=submit value=\"$button_text\" name=\"modify_state\" ".$state.">".
+ "<p class=\"seperator\"> </p></td></tr></table>";
return($display);
}
}
if ($command != ""){
+
+ /* Additional attributes */
+ foreach ($add_attrs as $name => $value){
+ $command= preg_replace("/%$name( |$)/", "$value ", $command);
+ }
+
/* Walk through attribute list */
foreach ($this->attributes as $attr){
if (!is_array($this->$attr)){
- $command= preg_replace("/%$attr/", $this->$attr, $command);
+ $command= preg_replace("/%$attr( |$)/", $this->$attr." ", $command);
}
}
- $command= preg_replace("/%dn/", $this->dn, $command);
-
- /* Additional attributes */
- foreach ($add_attrs as $name => $value){
- $command= preg_replace("/%$name/", $value, $command);
- }
+ $command= preg_replace("/%dn( |$)/", $this->dn." ", $command);
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= sprintf(_("Command '%s', specified as POSTCREATE for plugin '%s' doesn't seem to exist."), $command, get_class($this));
print_red ($message);
}
if ($command != ""){
+
+ /* Additional attributes */
+ foreach ($add_attrs as $name => $value){
+ $command= preg_replace("/%$name( |$)/", "$value ", $command);
+ }
+
/* Walk through attribute list */
foreach ($this->attributes as $attr){
if (!is_array($this->$attr)){
- $command= preg_replace("/%$attr/", $this->$attr, $command);
+ $command= preg_replace("/%$attr( |$)/", $this->$attr." ", $command);
}
}
- $command= preg_replace("/%dn/", $this->dn, $command);
-
- /* Additional attributes */
- foreach ($add_attrs as $name => $value){
- $command= preg_replace("/%$name/", $value, $command);
- }
+ $command= preg_replace("/%dn( |$)/", $this->dn." ", $command);
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= sprintf(_("Command '%s', specified as POSTMODIFY for plugin '%s' doesn't seem to exist."), $command, get_class($this));
print_red ($message);
}
if ($command != ""){
+
+ /* Additional attributes */
+ foreach ($add_attrs as $name => $value){
+ $command= preg_replace("/%$name( |$)/", "$value ", $command);
+ }
+
/* Walk through attribute list */
foreach ($this->attributes as $attr){
if (!is_array($this->$attr)){
- $command= preg_replace("/%$attr/", $this->$attr, $command);
+ $command= preg_replace("/%$attr( |$)/", $this->$attr." ", $command);
}
}
- $command= preg_replace("/%dn/", $this->dn, $command);
-
- /* Additional attributes */
- foreach ($add_attrs as $name => $value){
- $command= preg_replace("/%$name/", $value, $command);
- }
+ $command= preg_replace("/%dn( |$)/", $this->dn." ", $command);
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= sprintf(_("Command '%s', specified as POSTREMOVE for plugin '%s' doesn't seem to exist."), $command, get_class($this));
print_red ($message);
{
/* 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());
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);
}
$todo[] = "is_account";
foreach($todo as $var){
- $this->$var = $source->$var;
+ if (isset($source->$var)){
+ $this->$var= $source->$var;
+ }
+ }
+ }
+
+
+ function tag_attrs($at, $dn= "", $tag= "", $show= false)
+ {
+ /* Skip tagging?
+ If this is called from departmentGeneric, we have to skip this
+ tagging procedure.
+ */
+ if($this->skipTagging){
+ return;
+ }
+
+ /* No dn? Self-operation... */
+ if ($dn == ""){
+ $dn= $this->dn;
+
+ /* No tag? Find it yourself... */
+ if ($tag == ""){
+ $len= strlen($dn);
+
+ @DEBUG (DEBUG_TRACE, __LINE__, __FUNCTION__, __FILE__, "No tag for $dn - looking for one...", "Tagging");
+ $relevant= array();
+ foreach ($this->config->adepartments as $key => $ntag){
+
+ /* This one is bigger than our dn, its not relevant... */
+ if ($len <= strlen($key)){
+ continue;
+ }
+
+ /* This one matches with the latter part. Break and don't fix this entry */
+ if (preg_match('/(^|,)'.normalizePreg($key).'$/', $dn)){
+ @DEBUG (DEBUG_TRACE, __LINE__, __FUNCTION__, __FILE__, "DEBUG: Possibly relevant: $key", "Tagging");
+ $relevant[strlen($key)]= $ntag;
+ continue;
+ }
+
+ }
+
+ /* If we've some relevant tags to set, just get the longest one */
+ if (count($relevant)){
+ ksort($relevant);
+ $tmp= array_keys($relevant);
+ $idx= end($tmp);
+ $tag= $relevant[$idx];
+ $this->gosaUnitTag= $tag;
+ }
+ }
+ }
+
+ /* Remove tags that may already be here... */
+ remove_objectClass("gosaAdministrativeUnitTag", &$at);
+ if (isset($at['gosaUnitTag'])){
+ unset($at['gosaUnitTag']);
+ }
+
+ /* Set tag? */
+ if ($tag != ""){
+ add_objectClass("gosaAdministrativeUnitTag", &$at);
+ $at['gosaUnitTag']= $tag;
}
}