index 0257297037f0d8272c7cdb346f2d2e3b3699d95d..2e10d7215e84e4a0291045348bb438b59a0bbc38 100644 (file)
<?php
/*
- This code is part of GOsa (https://gosa.gonicus.de)
- Copyright (C) 2003 Cajus Pollmeier
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * This code is part of GOsa (http://www.gosa-project.org)
+ * Copyright (C) 2003-2008 GONICUS GmbH
+ *
+ * ID: $$Id$$
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/*! \brief The plugin base class
/* Save unit tags */
var $gosaUnitTag= "";
+ var $skipTagging= FALSE;
/*!
\brief Used standard values
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;
$this->acl_base= $dn;
/* Get LDAP descriptor */
- $ldap= $this->config->get_ldap_link();
if ($dn !== NULL){
/* Load data to 'attrs' and save 'dn' */
if ($parent !== NULL){
$this->attrs= $parent->attrs;
} else {
+ $ldap= $this->config->get_ldap_link();
$ldap->cat ($dn);
$this->attrs= $ldap->fetch();
}
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;
unset($this->saved_attributes["$index"]["count"]);
}
+ if(isset($this->attrs['gosaUnitTag'])){
+ $this->saved_attributes['gosaUnitTag'] = $this->attrs['gosaUnitTag'][0];
+ }
}
/* Save initial account state */
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
$data = "";
}
$this->$val= $data;
- //echo "<font color='blue'>".$val."</font><br>";
- }else{
- //echo "<font color='red'>".$val."</font><br>";
}
}
}
}
}
+ /* Handle tagging */
+ $this->tag_attrs($this->attrs);
}
function cleanup()
{
foreach ($this->attrs as $index => $value){
-
+
/* Convert arrays with one element to non arrays, if the saved
attributes are no array, too */
if (is_array($this->attrs[$index]) &&
if ($command != ""){
if (!check_command($command)){
- $message[]= sprintf(_("Command '%s', specified as CHECK hook for plugin '%s' doesn't seem to exist."), $command,
- get_class($this));
+ $message[]= msgPool::cmdnotfound("CHECK", get_class($this));
} else {
/* Generate "ldif" for check hook */
$current_csn = getEntryCSN($this->dn);
if($current_csn != $this->entryCSN && !empty($this->entryCSN) && !empty($current_csn)){
$this->entryCSN = $current_csn;
- $message[] = _("The object has changed since opened in GOsa. Please ensure that nobody has done serious changes that may get lost if you save this entry.");
+ $message[] = _("The object has changed since opened in GOsa. All changes that may be done by others get lost if you save this entry!");
}
}
return ($message);
/* Additional attributes */
foreach ($add_attrs as $name => $value){
- $command= preg_replace("/%$name/", $value, $command);
+ $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);
+ $command= preg_replace("/%dn( |$)/", $this->dn." ", $command);
if (check_command($command)){
@DEBUG (DEBUG_SHELL, __LINE__, __FUNCTION__, __FILE__,
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);
+ $message[]= msgPool::cmdnotfound("POSTCREATE", get_class($this));
+ msg_dialog::display(_("Error"), $message, ERROR_DIALOG);
}
}
}
/* Additional attributes */
foreach ($add_attrs as $name => $value){
- $command= preg_replace("/%$name/", $value, $command);
+ $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);
+ $command= preg_replace("/%dn( |$)/", $this->dn." ", $command);
if (check_command($command)){
@DEBUG (DEBUG_SHELL, __LINE__, __FUNCTION__, __FILE__,
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);
+ $message[]= msgPool::cmdnotfound("POSTMODIFY", get_class($this));
+ msg_dialog::display(_("Error"), $message, ERROR_DIALOG);
}
}
}
/* Additional attributes */
foreach ($add_attrs as $name => $value){
- $command= preg_replace("/%$name/", $value, $command);
+ $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__,
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);
+ $message[]= msgPool::cmdnotfound("POSTREMOVE", get_class($this));
+ msg_dialog::display(_("Error"), $message, ERROR_DIALOG);
}
}
}
{
/* 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);
return (FALSE);
}
- /* Perform a search for all objects to be moved */
- $objects= array();
- $ldap->cd($src_dn);
- $ldap->search("(objectClass=*)", array("dn"));
- while($attrs= $ldap->fetch()){
- $dn= $attrs['dn'];
- $objects[$dn]= strlen($dn);
- }
-
- /* Sort objects by indent level */
- asort($objects);
- reset($objects);
-
- /* Copy objects from small to big indent levels by replacing src_dn by dst_dn */
- foreach ($objects as $object => $len){
- $src= $object;
- $dst= preg_replace("/$src_dn$/", "$dst_dn", $object);
- if (!$this->copy($src, $dst)){
- return (FALSE);
- }
- }
+ $this->copy($src_dn, $dst_dn);
/* Remove src_dn */
$ldap->cd($src_dn);
- $ldap->recursive_remove();
+ $ldap->recursive_remove($src_dn);
return (TRUE);
}
$tmp = $source[$var][$i];
}
$this->$var = $tmp;
-# echo $var."=".$tmp."<br>";
}else{
$this->$var = $source[$var][0];
-# echo $var."=".$source[$var][0]."<br>";
}
}else{
$this->$var= $source[$var];
-# echo $var."=".$source[$var]."<br>";
}
}
}
}
-
- 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.
+ /* 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 == ""){
}
}
}
-
+
+ /* 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))."<br>";
- flush();
- }
- return;
- }
- if (count($attrs)){
- if ($show){
- echo sprintf(_("Adding tag (%s) to object '%s'"), $tag, @LDAP::fix($dn))."<br>";
- 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))."<br>";
- 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;
}
+ /* Initially this object was tagged.
+ - But now, it is no longer inside a tagged department.
+ So force the remove of the tag.
+ (objectClass was already removed obove)
+ */
+ if($tag == "" && $this->gosaUnitTag){
+ $at['gosaUnitTag'] = array();
+ }
}
/* 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);
}
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);
}
}
$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;
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."<br> ";
+ 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
}
/* 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."'");
}
/* Acls for this object must be adjusted */
if($found){
- if($output_changes){
- echo "<font color='green'>".
- _("Changing ACL dn")." : <br> -"._("from")." <b> ".
- $old_dn.
- "</b><br> -"._("to")." <b>".
- $new_dn.
- "</b></font><br>";
- }
+ $debug_info= _("Changing ACL dn")." : <br> -"._("from")." <b> ".
+ $old_dn."</b><br> -"._("to")." <b>".$new_dn."</b><br>";
+ @DEBUG (DEBUG_ACL, __LINE__, __FUNCTION__, __FILE__,$debug_info,"ACL");
+
$update[$attrs['dn']] =array();
foreach($acls as $acl){
$update[$attrs['dn']]['gosaAclEntry'][] = $acl;
*/
function enable_multiple_support()
{
+ $this->ignore_account = TRUE;
$this->multiple_support_active = TRUE;
}
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.");
}
/* 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()) {
}
+ /*! \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
*/