From 988a67a0eeacfdbadbf60fd9e8107d2206141544 Mon Sep 17 00:00:00 2001 From: hickert Date: Wed, 30 Aug 2006 04:51:48 +0000 Subject: [PATCH] Fixed saving for templates. Only save edited templates. Load load template contents, if we want to edit this object. git-svn-id: https://oss.gonicus.de/repositories/gosa/branches/2.5@4537 594d385d-05f5-0310-b6e9-bd551577e9d8 --- plugins/admin/fai/class_faiTemplate.inc | 90 +++++++++++++++++++------ 1 file changed, 69 insertions(+), 21 deletions(-) diff --git a/plugins/admin/fai/class_faiTemplate.inc b/plugins/admin/fai/class_faiTemplate.inc index 56e7f613d..7ea94ba48 100644 --- a/plugins/admin/fai/class_faiTemplate.inc +++ b/plugins/admin/fai/class_faiTemplate.inc @@ -24,8 +24,10 @@ class faiTemplate extends plugin var $subClassName = "faiTemplateEntry"; /* Attributes to initialise for each subObject */ - var $subAttributes = array("cn","description","FAItemplateFile","FAItemplatePath","FAIowner","FAImode"); + var $subAttributes = array("cn","description","FAItemplatePath","FAIowner","FAImode"); var $sub64coded = array(); + var $sub_Load_Later = array("FAItemplateFile"); + var $subBinary = array("FAItemplateFile"); /* Specific attributes */ var $cn = ""; // The class name for this object @@ -47,7 +49,7 @@ class faiTemplate extends plugin * Else we must read all objects from ldap which belong to this entry. * First read SubObjects from ldap ... and then the partition definitions for the SubObjects. */ - if($dn != "new"){ + if($dn != "new"){ $this->dn =$dn; /* Set acls @@ -67,31 +69,52 @@ class faiTemplate extends plugin */ $ldap = $this->config->get_ldap_link(); $ldap->cd ($this->dn); - $ldap->search("(&(objectClass=FAIclass)(objectClass=".$this->subClass."))",$this->subAttributes); + $ldap->search("(&(objectClass=FAIclass)(objectClass=".$this->subClass."))",array("dn")); while($object = $ldap->fetch()){ + /* Set status for save management */ - - foreach($this->subAttributes as $attrs){ - if(!isset($object[$attrs][0])){ - $this->SubObjects[$object['cn'][0]][$attrs]=""; - }else{ - $this->SubObjects[$object['cn'][0]][$attrs]=$object[$attrs][0]; - } + $objects = array(); + $objects['status'] = "FreshLoaded"; + $objects['dn'] = $object['dn']; + $objects = $this->get_object_attributes($objects,$this->subAttributes); + $this->SubObjects[$objects['cn']] = $objects; + } + } + } + + + /* Reload some attributes */ + function get_object_attributes($object,$attributes) + { + $ldap = $this->config->get_ldap_link(); + $ldap->cd($this->config->current['BASE']); + $ldap->cat($object['dn'],$attributes); + $tmp = $ldap->fetch(); + + foreach($attributes as $attrs){ + if(isset($tmp[$attrs][0])){ + $var = $tmp[$attrs][0]; + + /* Check if we must decode some attributes */ + if(in_array_ics($attrs,$this->sub64coded)){ + $var = base64_decode($var); } - foreach($this->sub64coded as $codeIt){ - $this->SubObjects[$object['cn'][0]][$codeIt]= base64_decode($this->SubObjects[$object['cn'][0]][$codeIt]); - } + /* check if this is a binary entry */ + if(in_array_ics($attrs,$this->subBinary)){ + $var = addslashes( $ldap->get_attribute($object['dn'], $attrs,$r_array=0)); + } - $this->SubObjects[$object['cn'][0]]['FAItemplateFile']= $ldap->get_attribute($object['dn'], "FAItemplateFile",$r_array=0); - - $this->SubObjects[$object['cn'][0]]['status']= "edited"; - $this->SubObjects[$object['cn'][0]]['dn']= $object['dn']; + /* Fix slashes */ + $var = addslashes($var); + $object[$attrs] = $var; } } + return($object); } + function execute() { /* Call parent execute */ @@ -109,9 +132,15 @@ class faiTemplate extends plugin $once = false; $entry = preg_replace("/^editscript_/","",$name); $entry = base64_decode(preg_replace("/_.*/","",$entry)); - $this->dialog= new $this->subClassName($this->config,$this->dn,$this->SubObjects[$entry]); + + $obj = $this->SubObjects[$entry]; + if($obj['status'] == "FreshLoaded"){ + $obj = $this->get_object_attributes($obj,$this->sub_Load_Later); + } + + $this->dialog= new $this->subClassName($this->config,$this->dn,$obj); $this->dialog->acl = $this->acl; - $_SESSION['objectinfo'] = $this->SubObjects[$entry]['dn']; + $_SESSION['objectinfo'] = $obj['dn']; $this->dialog->parent = &$this; $this->is_dialog=true; } @@ -147,9 +176,14 @@ class faiTemplate extends plugin print_red($msg); } }else{ + + /* Get return object */ $obj = $this->dialog->save(); if(isset($obj['remove'])){ - if($this->SubObjects[$obj['remove']['from']]['status']=="edited"){ + $old_stat = $this->SubObjects[$obj['remove']['from']]['status']; + + /* Depending on status, set new status */ + if($old_stat == "edited" || $old_stat == "FreshLoaded"){ $this->SubObjects[$obj['remove']['from']]['status'] = "delete"; }elseif($this->SubObjects[$obj['remove']['from']]['status']=="new"){ unset($this->SubObjects[$obj['remove']['from']]); @@ -158,8 +192,12 @@ class faiTemplate extends plugin $this->SubObjects[$obj['remove']['to']] = $obj; unset($this->SubObjects[$obj['remove']['to']]['remove']); }else{ + if($obj['status'] == "FreshLoaded"){ + $obj['status'] = "edited"; + } $this->SubObjects[$obj['cn']]=$obj; } + $this->is_dialog=false; unset($this->dialog); $this->dialog=NULL; @@ -333,11 +371,20 @@ class faiTemplate extends plugin * After deletion, we perform add and modify */ $Objects = array(); + + /* We do not need to save untouched objects */ + foreach($this->SubObjects as $name => $obj){ + if($obj['status'] == "FreshLoaded"){ + unset($this->SubObjects[$name]); + } + } + foreach($this->SubObjects as $name => $obj){ if($obj['status'] == "delete"){ $Objects[$name] = $obj; } } + foreach($this->SubObjects as $name => $obj){ if($obj['status'] != "delete"){ $Objects[$name] = $obj; @@ -350,7 +397,8 @@ class faiTemplate extends plugin $obj[$codeIt]=base64_encode($obj[$codeIt]); } $tmp = array(); - foreach($this->subAttributes as $attrs){ + $attributes = array_merge($this->sub_Load_Later,$this->subAttributes); + foreach($attributes as $attrs){ if(empty($obj[$attrs])){ $obj[$attrs] = array(); } -- 2.30.2