X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fadmin%2Ffai%2Fclass_faiVariable.inc;h=4e51ef8402784bcbe997faf42a119501c3800899;hb=90cb0cbd940168e234d506e42644e52fc7af5c4d;hp=2d2e581bf16e3d71a5d00ec568bf6dd4ac1b9798;hpb=d7770a6bc0b4961139935ffe41ac66e6208cdcf3;p=gosa.git diff --git a/plugins/admin/fai/class_faiVariable.inc b/plugins/admin/fai/class_faiVariable.inc index 2d2e581bf..4e51ef840 100644 --- a/plugins/admin/fai/class_faiVariable.inc +++ b/plugins/admin/fai/class_faiVariable.inc @@ -34,18 +34,42 @@ class faiVariable extends plugin var $dialog = NULL; // a dialog, e.g. new disk dialog var $SubObjects = array(); // All leafobjects of this object + var $FAIstate = ""; + var $base = ""; + var $release = ""; + var $copy_paste_mode = false; + var $cut_paste_mode = false; + + var $CopyPasteVars = array("SubObjects"); + function faiVariable ($config, $dn= NULL) { /* Load Attributes */ plugin::plugin ($config, $dn); + $this->acl ="#all#"; + /* If "dn==new" we try to create a new entry * 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"){ $this->dn =$dn; + /* Set acls + */ + $ui = get_userinfo(); + $acl = get_permissions ($this->dn, $ui->subtreeACL); + $acli = get_module_permission($acl, "FAIclass", $this->dn); + $this->acl=$acli; + + /* Get FAIstate + */ + if(isset($this->attrs['FAIstate'][0])){ + $this->FAIstate = $this->attrs['FAIstate'][0]; + } + /* Read all leaf objects of this object (For FAIscript this would be FAIscriptEntry) */ $ldap = $this->config->get_ldap_link(); @@ -85,6 +109,7 @@ class faiVariable extends plugin /* Add new sub object */ if(isset($_POST['AddSubObject'])){ $this->dialog= new $this->subClassName($this->config,"new"); + $this->dialog->acl = $this->acl; $this->is_dialog=true; } @@ -97,8 +122,8 @@ class faiVariable extends plugin if((isset($_POST['EditSubObject']))&&(isset($_POST['SubObject']))){ $var = $_POST['SubObject'][0]; - $this->dialog= new $this->subClassName($this->config,$this->dn,$this->SubObjects[$var]); + $this->dialog->acl = $this->acl; $_SESSION['objectinfo'] = $this->SubObjects[$var]['dn']; $this->is_dialog=true; } @@ -168,7 +193,6 @@ class faiVariable extends plugin } $smarty->assign("SubObjects",$this->getList()); - $smarty->assign("SubObjectKeys",array_flip($this->getList())); /* Magic quotes GPC, escapes every ' " \, to solve some security risks * If we post the escaped strings they will be escaped again @@ -182,6 +206,11 @@ class faiVariable extends plugin } } + foreach($this->attributes as $attr){ + $smarty->assign($attr."ACL",chkacl($this->acl,$attr)); + } + + $display.= $smarty->fetch(get_template_path('faiVariable.tpl', TRUE)); return($display); } @@ -226,7 +255,7 @@ class faiVariable extends plugin */ function save_object() { - if(isset($_POST['FAIvariable_posted'])){ + if((isset($_POST['FAIvariable_posted'])) && ($this->FAIstate != "freeze") ){ plugin::save_object(); foreach($this->attributes as $attrs){ if(isset($_POST[$attrs])){ @@ -240,7 +269,22 @@ class faiVariable extends plugin /* Check supplied data */ function check() { - $message= array(); + /* Call common method to give check the hook */ + $message= plugin::check(); + + /* If this is a new script, check if a script with this name already exists */ + if(!empty($this->release) && ($this->copy_paste_mode || $this->cut_paste_mode) ){ + + /* Check if current name is already used for fai scripts in selected release */ + $dn = 'cn='.$this->cn.",ou=variables,".$this->release; + $ldap = $this->config->get_ldap_link(); + $ldap->cat($dn); + if($ldap->count()){ + + $r =convert_department_dn($this->release);; + $message[] = sprintf(_("Can't insert a fai variable named '%s' in '%s' there is already a variable with the given name."),$this->cn,$r); + } + } return ($message); } @@ -251,12 +295,19 @@ class faiVariable extends plugin plugin::save(); $ldap = $this->config->get_ldap_link(); - - $ldap->cat($this->dn); + + /* Copy & Paste : Ensure that FAIstate is copied too */ + if($this->copy_paste_mode && preg_match("/freeze/",$this->FAIstate)){ + $this->attrs['FAIstate'] = $this->FAIstate; + } + + $ldap->cat($this->dn,array("objectClass")); if($ldap->count()!=0){ /* Write FAIscript to ldap*/ $ldap->cd($this->dn); - $ldap->modify($this->attrs); + $this->cleanup(); + $ldap->modify ($this->attrs); + }else{ /* Write FAIscript to ldap*/ $ldap->cd(preg_replace('/^[^,]+,[^,]+,/', '', $this->dn)); @@ -264,7 +315,10 @@ class faiVariable extends plugin $ldap->cd($this->dn); $ldap->add($this->attrs); } - show_ldap_error($ldap->get_error()); + show_ldap_error($ldap->get_error(), _("Saving FAI variable base failed")); + + /* Do object tagging */ + $this->handle_object_tagging(); /* Prepare FAIscriptEntry to write it to ldap * First sort array. @@ -301,10 +355,25 @@ class faiVariable extends plugin $sub_dn = "cn=".$obj['cn'].",".$this->dn; + if($this->copy_paste_mode){ + $obj['status'] = "new"; + } + if($obj['status']=="new"){ - $ldap->cat($sub_dn); + $ldap->cat($sub_dn,array("objectClass")); if($ldap->count()){ - $obj['status']="modify"; + $obj['status']="edited"; + } + } + + /* Check if gosaAdministrativeUnitTag is required as object class */ + if($obj['status'] == "edited"){ + $ldap->cat($sub_dn,array("objectClass")); + $attrs = $ldap->fetch(); + if(isset($attrs['objectClass'])){ + if(in_array_ics("gosaAdministrativeUnitTag",$attrs['objectClass'])){ + $tmp['objectClass'][] = "gosaAdministrativeUnitTag"; + } } } @@ -312,10 +381,14 @@ class faiVariable extends plugin $ldap->cd($sub_dn); $ldap->rmdir_recursive($sub_dn); $this->handle_post_events("remove"); + show_ldap_error($ldap->get_error(), _("Removing FAI variable failed")); }elseif($obj['status'] == "edited"){ $ldap->cd($sub_dn); - $ldap->modify($tmp); + $this->cleanup(); + $ldap->modify ($tmp); + $this->handle_post_events("modify"); + show_ldap_error($ldap->get_error(), _("Saving FAI variable failed")); }elseif($obj['status']=="new"){ if($tmp['description'] == array()){ @@ -327,8 +400,32 @@ class faiVariable extends plugin $ldap->cd($sub_dn); $ldap->add($tmp); $this->handle_post_events("add"); + show_ldap_error($ldap->get_error(), _("Saving FAI variable failed")); } - show_ldap_error($ldap->get_error()); + + $this->handle_object_tagging($sub_dn, $this->gosaUnitTag); + } + } + + /* return copy & paste dialog + */ + function getCopyDialog() + { + /* Ask for cn */ + $smarty = get_smarty(); + $smarty->assign("cn" ,$this->cn); + $str = $smarty->fetch(get_template_path("paste_fai_object.tpl",TRUE)); + $ret = array(); + $ret['string'] = $str; + $ret['status'] = ""; + return($ret); + } + + /* Get posted cn */ + function saveCopyDialog() + { + if(isset($_POST['cn'])){ + $this->cn = $_POST['cn']; } } }