From: hickert Date: Wed, 30 Aug 2006 11:14:30 +0000 (+0000) Subject: Added FAIscript editing/saving update. Only load FAIscript from edit mode X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=6410fbb3abdce59e0ff5700b0a3c62e1e28f0b47;p=gosa.git Added FAIscript editing/saving update. Only load FAIscript from edit mode git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@4543 594d385d-05f5-0310-b6e9-bd551577e9d8 --- diff --git a/plugins/admin/fai/class_faiHook.inc b/plugins/admin/fai/class_faiHook.inc index 9eae05cb4..5473946bb 100644 --- a/plugins/admin/fai/class_faiHook.inc +++ b/plugins/admin/fai/class_faiHook.inc @@ -24,8 +24,10 @@ class faiHook extends plugin var $subClassName = "faiHookEntry"; /* Attributes to initialise for each subObject */ - var $subAttributes = array("cn","description","FAItask","FAIscript"); + var $subAttributes = array("cn","description","FAItask"); + var $sub_Load_Later = array("FAIscript"); var $sub64coded = array(); + var $subBinary = array("FAIscript"); /* Specific attributes */ var $cn = ""; // The class name for this object @@ -68,41 +70,51 @@ class faiHook extends plugin $ldap->cd ($this->dn); $attrs_to_search = $this->subAttributes; $attrs_to_search[] = "FAIstate"; - $ldap->search("(&(objectClass=FAIclass)(objectClass=".$this->subClass."))",$attrs_to_search); + $ldap->search("(&(objectClass=FAIclass)(objectClass=".$this->subClass."))", array("dn")); while($object = $ldap->fetch()){ + /* Set status for save management */ + $objects = array(); + $objects['status'] = "FreshLoaded"; + $objects['dn'] = $object['dn']; + $objects = $this->get_object_attributes($objects,$this->subAttributes); + $this->SubObjects[$objects['cn']] = $objects; + } + } + } - /* Skip objects, that are tagged as removed */ - if(isset($object['FAIstate'][0])){ - if(preg_match("/removed$/",$object['FAIstate'][0])){ - continue; - } - } - /* 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]; - } - } + /* 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(); - $this->SubObjects[$object['cn'][0]]['status'] = "edited"; - $this->SubObjects[$object['cn'][0]]['dn'] = $object['dn']; + foreach($attributes as $attrs){ + if(isset($tmp[$attrs][0])){ + $var = $tmp[$attrs][0]; - foreach($this->sub64coded as $codeIt){ - $this->SubObjects[$object['cn'][0]][$codeIt]=base64_decode($this->SubObjects[$object['cn'][0]][$codeIt]); + /* Check if we must decode some attributes */ + if(in_array_ics($attrs,$this->sub64coded)){ + $var = base64_decode($var); } - foreach($this->subAttributes as $attrs){ - $this->SubObjects[$object['cn'][0]][$attrs]=addslashes($this->SubObjects[$object['cn'][0]][$attrs]); + /* 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]]['FAIscript'] = addslashes( $ldap->get_attribute($object['dn'], "FAIscript",$r_array=0)); + + /* Fix slashes */ + $var = addslashes($var); + $object[$attrs] = $var; } } + return($object); } + function getUsedFAItask($cn) { $ret = array(); @@ -134,9 +146,15 @@ class faiHook 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]); - $this->dialog->acl = $this->acl; - $_SESSION['objectinfo'] = $this->SubObjects[$entry]['dn']; + + $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); + + + $_SESSION['objectinfo'] = $obj['dn']; $this->dialog->parent = &$this; $this->is_dialog=true; } @@ -144,7 +162,8 @@ class faiHook extends plugin $once = false; $entry = preg_replace("/^deletescript_/","",$name); $entry = base64_decode(preg_replace("/_.*/","",$entry)); - if($this->SubObjects[$entry]['status'] == "edited"){ + + if(($this->SubObjects[$entry]['status'] == "edited")||($this->SubObjects[$entry]['status'] == "FreshLoaded")){ $this->SubObjects[$entry]['status']= "delete"; }else{ unset($this->SubObjects[$entry]); @@ -161,30 +180,6 @@ class faiHook extends plugin $this->is_dialog=true; } - if($this->dn != "new"){ - $_SESSION['objectinfo']= $this->dn; - } - /* Edit selected Sub Object */ - if((isset($_POST['EditSubObject']))&&(isset($_POST['SubObject']))){ - $hook = $_POST['SubObject'][0]; - - $this->dialog= new $this->subClassName($this->config,$this->dn,$this->SubObjects[$hook]); - $this->dialog->acl = $this->acl; - $this->dialog->parent = &$this; - $_SESSION['objectinfo'] = $this->SubObjects[$hook]['dn']; - $this->is_dialog=true; - } - - /* Remove Sub object */ - if((isset($_POST['DelSubObject']))&&(isset($_POST['SubObject']))){ - foreach($_POST['SubObject'] as $hook){ - if($this->SubObjects[$hook]['status'] == "edited"){ - $this->SubObjects[$hook]['status']= "delete"; - }else{ - unset($this->SubObjects[$hook]); - } - } - } /* Save Dialog */ if(isset($_POST['SaveSubObject'])){ @@ -206,8 +201,10 @@ class faiHook extends plugin $obj = $this->dialog->save(); if(isset($obj['remove'])){ + $old_stat = $this->SubObjects[$obj['remove']['from']]['status']; + /* Depending on status, set new status */ - if($this->SubObjects[$obj['remove']['from']]['status']=="edited"){ + 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']]); @@ -216,6 +213,9 @@ class faiHook 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; @@ -402,6 +402,14 @@ class faiHook 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; @@ -420,7 +428,8 @@ class faiHook extends plugin } $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(); } diff --git a/plugins/admin/fai/class_faiManagement.inc b/plugins/admin/fai/class_faiManagement.inc index 4a955f0e1..cc71020a2 100644 --- a/plugins/admin/fai/class_faiManagement.inc +++ b/plugins/admin/fai/class_faiManagement.inc @@ -492,7 +492,7 @@ class faiManagement extends plugin $this->dialog = new $a_setup[0]($this->config, $this->config->data['TABS'][$a_setup[2]],$this->dn); - $this->is_dialog = true; + $this->is_dialog = false; } @@ -596,8 +596,14 @@ class faiManagement extends plugin $display.= "\n"; $display.= "

"; } + }else{ + $display.= "

\n"; + $display.= " "; + $display.= "\n"; + $display.= "

"; + } - return($display); + return($display); }