X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=include%2Fclass_plugin.inc;h=3d59015a24b6dc343e888fd3cb7877f827d5961b;hb=0a404520e61c50991850fecd39f8ec9bd09ec464;hp=23fa324cabd8b83b8e481602d16f12d0a4877965;hpb=beff02a2165efc8df752e5f2e1cf0a534b6b3281;p=gosa.git diff --git a/include/class_plugin.inc b/include/class_plugin.inc index 23fa324ca..3d59015a2 100644 --- a/include/class_plugin.inc +++ b/include/class_plugin.inc @@ -108,6 +108,10 @@ class plugin var $new= TRUE; var $saved_attributes= array(); + /* Plugin identifier */ + var $plHeadline= ""; + var $plDescription= ""; + /*! \brief plugin constructor If 'dn' is set, the node loads the given 'dn' from LDAP @@ -263,7 +267,7 @@ class plugin { /* Save values to object */ foreach ($this->attributes as $val){ - if (chkacl ($this->acl, "$val") == "" && isset ($_POST["$val"])){ + if ($this->acl_is_writeable($val) && isset ($_POST["$val"])){ /* Check for modifications */ if (get_magic_quotes_gpc()) { $data= stripcslashes($_POST["$val"]); @@ -285,6 +289,9 @@ class plugin $data = ""; } $this->$val= $data; + //echo "".$val."
"; + }else{ + //echo "".$val."
"; } } } @@ -500,9 +507,45 @@ class plugin return FALSE; } + + /* Show header message for tab dialogs */ + function show_enable_header($button_text, $text, $disabled= FALSE) + { + if ($disabled == TRUE){ + $state= "disabled"; + } else { + $state= ""; + } + $display= "\n

$text

\n"; + $display.= "acl_is_createable()?'':'disabled')." ".$state. + ">

 

"; + + return($display); + } + + + /* Show header message for tab dialogs */ + function show_disable_header($button_text, $text, $disabled= FALSE) + { + if ($disabled == TRUE){ + $state= "disabled"; + } else { + $state= ""; + } + $display= "\n

$text

\n"; + $display.= "acl_is_removeable()?'':'disabled')." ".$state. + ">

 

"; + + return($display); + } + + /* Show header message for tab dialogs */ function show_header($button_text, $text, $disabled= FALSE) { + echo "FIXME: show_header should be replaced by show_disable_header and show_enable_header
"; if ($disabled == TRUE){ $state= "disabled"; } else { @@ -510,12 +553,13 @@ class plugin } $display= "\n

$text

\n"; $display.= "acl, "all")." ".$state. + ($this->acl_is_createable()?'':'disabled')." ".$state. ">

 

"; return($display); } + function postcreate($add_attrs= array()) { /* Find postcreate entries for this class */ @@ -667,7 +711,7 @@ class plugin { /* Rename dn in possible object groups */ $ldap= $this->config->get_ldap_link(); - $ldap->search('(&(objectClass=gosaGroupOfNames)(member='.$src_dn.'))', + $ldap->search('(&(objectClass=gosaGroupOfNames)(member='.@LDAP::fix($src_dn).'))', array('cn')); while ($attrs= $ldap->fetch()){ $og= new ogroup($this->config, $ldap->getDN()); @@ -679,7 +723,7 @@ class plugin $ldap->cat($dst_dn); $attrs= $ldap->fetch(); if (count($attrs)){ - trigger_error("Trying to overwrite $dst_dn, which already exists.", + trigger_error("Trying to overwrite ".@LDAP::fix($dst_dn).", which already exists.", E_USER_WARNING); return (FALSE); } @@ -687,7 +731,7 @@ class plugin $ldap->cat($src_dn); $attrs= $ldap->fetch(); if (!count($attrs)){ - trigger_error("Trying to move $src_dn, which does not seem to exist.", + trigger_error("Trying to move ".@LDAP::fix($src_dn).", which does not seem to exist.", E_USER_WARNING); return (FALSE); } @@ -701,7 +745,7 @@ class plugin $r=ldap_bind($ds,$this->config->current['ADMIN'], $this->config->current['PASSWORD']); error_reporting (0); - $sr=ldap_read($ds, $ldap->fix($src_dn), "objectClass=*"); + $sr=ldap_read($ds, @LDAP::fix($src_dn), "objectClass=*"); /* Fill data from LDAP */ $new= array(); @@ -729,14 +773,14 @@ class plugin /* Adapt naming attribute */ $dst_name= preg_replace("/^([^=]+)=.*$/", "\\1", $dst_dn); $dst_val = preg_replace("/^[^=]+=([^,+]+).*,.*$/", "\\1", $dst_dn); - $new[$dst_name]= $dst_val; + $new[$dst_name]= @LDAP::fix($dst_val); /* Check if this is a department. * If it is a dep. && there is a , override in his ou * change \2C to , again, else this entry can't be saved ... */ - if((isset($new['ou'])) &&( preg_match("/\\\\2C/",$new['ou']))){ - $new['ou'] = preg_replace("/\\\\2C/",",",$new['ou']); + if((isset($new['ou'])) &&( preg_match("/\\,/",$new['ou']))){ + $new['ou'] = preg_replace("/\\\\,/",",",$new['ou']); } /* Save copy */ @@ -928,7 +972,7 @@ class plugin echo sprintf(_("Adding tag (%s) to object '%s'"), $tag, @LDAP::fix($dn))."
"; flush(); } - $nattrs= array("gosaUnitTag" => $this->gosaUnitTag); + $nattrs= array("gosaUnitTag" => $tag); $nattrs['objectClass']= array(); for ($i= 0; $i<$attrs['objectClass']['count']; $i++){ $oc= $attrs['objectClass'][$i]; @@ -939,7 +983,7 @@ class plugin $nattrs['objectClass'][]= "gosaAdministrativeUnitTag"; $ldap->cd($dn); $ldap->modify($nattrs); - show_ldap_error($ldap->get_error(), _("Handle object tagging failed")); + 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"); } @@ -968,7 +1012,7 @@ class plugin } $ldap->cd($dn); $ldap->modify($nattrs); - show_ldap_error($ldap->get_error(), _("Handle object tagging failed")); + 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"); } @@ -996,12 +1040,6 @@ class plugin /* Get configuration from gosa.conf */ $tmp = $this->config->current; - /* Check if the undo level is specified */ - if(isset($tmp['SNAPSHOT_UNDO_LEVEL'])){ - $UndoLvl = $tmp['SNAPSHOT_UNDO_LEVEL']; - }else{ - $UndoLvl = 5; - } /* Create lokal ldap connection */ $ldap= $this->config->get_ldap_link(); @@ -1022,10 +1060,9 @@ class plugin $ldap_to = new LDAP($user,$password, $server); $ldap_to -> cd($snapldapbase); - show_ldap_error($ldap_to->get_error(), _("Snapshot failed.")); + show_ldap_error($ldap->get_error(), sprintf(_("Saving object snapshot with dn '%s' failed."),$snapldapbase)); } - /* check if the dn exists */ if ($ldap->dn_exists($this->dn)){ @@ -1069,25 +1106,24 @@ class plugin $ldap_to->cd($new_dn); $ldap_to->add($target); - show_ldap_error($ldap_to->get_error(), _("Create snapshot failed.")); - show_ldap_error($ldap->get_error(), _("Create snapshot failed.")); + show_ldap_error($ldap->get_error(), sprintf(_("Saving object snapshot with dn '%s' failed."),$new_base)); + show_ldap_error($ldap_to->get_error(), sprintf(_("Saving object snapshot with dn '%s' failed."),$new_base)); + } + } - /* Check amount of used snapshots, and remove old ones if necessary */ - $test = $this->Available_SnapsShots($this->dn,true); - if(count($test) > $UndoLvl){ - $toDel = array(); - foreach($test as $entry){ - $toDel[preg_replace("/-/","",$entry['gosaSnapshotTimestamp'][0])] = $entry['dn']; - } - krsort($toDel); - $i = 0 ; - foreach($toDel as $entryID => $entry){ - $i ++ ; - if($i > $UndoLvl){ - $ldap_to->rmdir_recursive($entry); - } - } - } + function remove_snapshot($dn) + { +echo "FIXME: remove_snapshot uses old acl's
"; + $ui = get_userinfo(); + $acl = get_permissions ($dn, $ui->subtreeACL); + $acl = get_module_permission($acl, "snapshot", $dn); + + if (chkacl($this->acl, "delete") == ""){ + $ldap = $this->config->get_ldap_link(); + $ldap->cd($this->config->current['BASE']); + $ldap->rmdir_recursive($dn); + }else{ + print_red (_("You are not allowed to delete this snapshot!")); } } @@ -1146,7 +1182,7 @@ class plugin $snapldapbase = $tmp['SNAPSHOT_LDAP_BASE']; $ldap_to = new LDAP($user,$password, $server); $ldap_to -> cd ($snapldapbase); - show_ldap_error($ldap_to->get_error(), _("Snapshot failed.")); + show_ldap_error($ldap->get_error(), sprintf(_("Method get available snapshots with dn '%s' failed."),$this->dn)); }else{ $ldap_to = $ldap; } @@ -1202,7 +1238,7 @@ class plugin $snapldapbase = $tmp['SNAPSHOT_LDAP_BASE']; $ldap_to = new LDAP($user,$password, $server); $ldap_to->cd ($snapldapbase); - show_ldap_error($ldap_to->get_error(), _("Snapshot failed.")); + show_ldap_error($ldap->get_error(), sprintf(_("Method get deleted snapshots with dn '%s' failed."),$this->dn)); }else{ $ldap_to = $ldap; } @@ -1266,7 +1302,7 @@ class plugin $snapldapbase = $tmp['SNAPSHOT_LDAP_BASE']; $ldap_to = new LDAP($user,$password, $server); $ldap_to->cd ($snapldapbase); - show_ldap_error($ldap_to->get_error(), _("Snapshot failed.")); + show_ldap_error($ldap->get_error(), sprintf(_("Restore snapshot with dn '%s' failed."),$snapldapbase)); }else{ $ldap_to = $ldap; } @@ -1280,7 +1316,7 @@ class plugin /* Import the given data */ $ldap->import_complete_ldif($data,$err,false,false); - show_ldap_error($ldap_to->get_error().$err, _("Restore snapshot failed.")); + show_ldap_error($ldap->get_error(), sprintf(_("Restore snapshot with dn '%s' failed."),$dn)); } @@ -1290,28 +1326,39 @@ class plugin foreach($_POST as $name => $value){ /* Create a new snapshot, display a dialog */ - if(preg_match("/^CreateSnapShot_/",$name) && $once){ + if(preg_match("/^CreateSnapShotDialog_/",$name) && $once){ $once = false; - $entry = preg_replace("/^CreateSnapShot_/","",$name); + $entry = preg_replace("/^CreateSnapShotDialog_/","",$name); $entry = base64_decode(preg_replace("/_[xy]$/","",$entry)); $this->snapDialog = new SnapShotDialog($this->config,$entry,$this); } /* Restore a snapshot, display a dialog with all snapshots of the current object */ - if(preg_match("/^RestoreSnapShot_/",$name) && $once){ + if(preg_match("/^RestoreSnapShotDialog_/",$name) && $once){ $once = false; - $entry = preg_replace("/^RestoreSnapShot_/","",$name); + $entry = preg_replace("/^RestoreSnapShotDialog_/","",$name); $entry = base64_decode(preg_replace("/_[xy]$/","",$entry)); $this->snapDialog = new SnapShotDialog($this->config,$entry,$this); - $this->snapDialog->Restore = true; + $this->snapDialog->display_restore_dialog = true; } /* Restore one of the already deleted objects */ if(preg_match("/^RestoreDeletedSnapShot_/",$name) && $once){ $once = false; $this->snapDialog = new SnapShotDialog($this->config,$baseSuffixe,$this); - $this->snapDialog->Restore = true; - $this->snapDialog->DeletedOnes = true; + $this->snapDialog->display_restore_dialog = true; + $this->snapDialog->display_all_removed_objects = true; + } + + /* Restore selected snapshot */ + if(preg_match("/^RestoreSnapShot_/",$name) && $once){ + $once = false; + $entry = preg_replace("/^RestoreSnapShot_/","",$name); + $entry = base64_decode(trim(preg_replace("/_[xy]$/","",$entry))); + if(!empty($entry)){ + $this->restore_snapshot($entry); + $this->snapDialog = NULL; + } } } @@ -1333,12 +1380,6 @@ class plugin /* Restore is requested, restore the object with the posted dn .*/ if((isset($_POST['RestoreSnapshot'])) && (isset($_POST['SnapShot']))){ - $entry =trim($_POST['SnapShot']); - if(!empty($entry)){ - $entry = base64_decode($entry); - $this->restore_snapshot($entry); - $this->snapDialog = NULL; - } } if(isset($_POST['CancelSnapshot'])){ @@ -1350,6 +1391,54 @@ class plugin return($this->snapDialog->execute()); } } + + + function plInfo() + { + return array(); + } + + + function acl_is_writeable($attribute) + { + $ui= get_userinfo(); + return preg_match('/w/', $ui->get_permissions($this->dn, get_class($this), $attribute)); + } + + + function acl_is_readable($attribute) + { + $ui= get_userinfo(); + return preg_match('/r/', $ui->get_permissions($this->dn, get_class($this), $attribute)); + } + + + function acl_is_createable() + { + $ui= get_userinfo(); + return preg_match('/c/', $ui->get_permissions($this->dn, get_class($this), '0')); + } + + + function acl_is_removeable() + { + $ui= get_userinfo(); + return preg_match('/d/', $ui->get_permissions($this->dn, get_class($this), '0')); + } + + + function acl_is_moveable() + { + $ui= get_userinfo(); + return preg_match('/m/', $ui->get_permissions($this->dn, get_class($this), '0')); + } + + + function getacl($attribute) + { + $ui= get_userinfo(); + return $ui->get_permissions($this->dn, get_class($this), $attribute); + } } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: ?>