X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fadmin%2Fsystems%2Fclass_servRepository.inc;h=961c49a59b204dd0bd7813c9e0feb612bcf4af7b;hb=88d7a7686efaf3d5585206cb5808ed83081a5f5b;hp=6f75496ac74ffd65550705d3107460eb5672518c;hpb=7412ee9005686a7b539037731bcf90770c50bed9;p=gosa.git diff --git a/plugins/admin/systems/class_servRepository.inc b/plugins/admin/systems/class_servRepository.inc index 6f75496ac..961c49a59 100644 --- a/plugins/admin/systems/class_servRepository.inc +++ b/plugins/admin/systems/class_servRepository.inc @@ -19,13 +19,21 @@ class servrepository extends plugin var $dialog = NULL; /* Repositories */ - var $repositories = array(); - var $FAIrepository = array(); + var $repositories = array(); + var $FAIrepository = array(); + + + var $conflicts = array("FAIrepositoryServer"); + var $DisplayName = ""; + var $StatusFlag = ""; + function servrepository ($config, $dn= NULL) { plugin::plugin ($config, $dn); + $this->DisplayName = _("Repository service"); + $this->repositories = array(); if(isset($this->attrs['FAIrepository'])){ for($i = 0; $i < $this->attrs['FAIrepository']['count']; $i++){ @@ -86,64 +94,98 @@ class servrepository extends plugin $smarty->assign("apply", apply_filter()); $smarty->assign("regex", $this->regex); - - /* Do we need to flip is_account state? */ - if (isset($_POST['modify_state'])){ - $this->is_account= !$this->is_account; - } - /* Show tab dialog headers */ - if ($this->is_account){ - $display= $this->show_header(_("Remove FAI repository extension."), - _("This server has FAI repository features enabled. You can disable them by clicking below.")); - } else { - $display= $this->show_header(_("Add FAI repository extension."), - _("This server has FAI repository features disabled. You can enable them by clicking below.")); - return ($display); - } - /* - ADD / EDIT Repository - Dialog Handling - */ - + ADD / EDIT Repository + Dialog Handling + */ $once = false; - foreach($_POST as $name => $value){ - - if(preg_match("/AddRepository/",$name)){ - $once = true; - $this->dialog = new servRepositorySetup($this->config,$this->dn); - $this->dialog->acl = $this->acl; - } - - if((preg_match("/^delete_/",$name))&&(!$once)){ + if(isset($_POST['servRepository'])){ + foreach($_POST as $name => $value){ - $value = preg_replace("/delete_/","",$name); - $value = preg_replace("/_.$/","",$value); - - if(isset($this->repositories[$value])){ + if(preg_match("/AddRepository/",$name)){ $once = true; - unset($this->repositories[$value]); + $this->dialog = new servRepositorySetup($this->config,$this->dn); + $this->dialog->acl = $this->acl; } - } - if((preg_match("/^edit_/",$name))&&(!$once)){ - $value = preg_replace("/edit_/","",$name); - $value = preg_replace("/_.$/","",$value); - if(isset($this->repositories[$value])){ + if((preg_match("/^delete_/",$name))&&(!$once)){ $once = true; - $obj = $this->repositories[$value]; - - /* to be able to detect if this was renamed */ - $obj['initialy_was'] = $obj['Release']; - $this->dialog = new servRepositorySetup($this->config,$this->dn,$obj); - $this->dialog->acl = $this->acl; + $value = preg_replace("/delete_/","",$name); + $value = base64_decode(preg_replace("/_.*$/","",$value)); + + $url = $this->repositories[$value]['Url']; + $release = $this->repositories[$value]['Release']; + + $ldap = $this->config->get_ldap_link(); + $ldap->cd ($this->config->current['BASE']); + + $ldap->search("(&(objectClass=gotoWorkstation)(objectClass=FAIobject)(FAIdebianMirror=".$url."))",array("cn","FAIclass")); + + $found = false; + $found_in = " "; + while($attrs = $ldap->fetch()){ + foreach($attrs['FAIclass'] as $class){ + if(preg_match("/".str_replace("/","\/",$release)."$/i",$class)){ + $found = true; + $found_in .= $attrs['cn'][0]." "; + } + } + } + + if($found){ + print_red(sprintf(_("You can't delete this release, it is still used by these workstations [%s]. Please solve this dependencies first, to keep data base consistency."),$found_in)); + }else{ + if(isset($this->repositories[$value])){ + unset($this->repositories[$value]); + } + } + } + + if((preg_match("/^edit_/",$name))&&(!$once)){ + $value = preg_replace("/edit_/","",$name); + $value = base64_decode(preg_replace("/_.$/","",$value)); + + if(isset($this->repositories[$value])){ + + $ldap = $this->config->get_ldap_link(); + $ldap->cd ($this->config->current['BASE']); + + $url = $this->repositories[$value]['Url']; + $release = $this->repositories[$value]['Release']; + + $ldap->search("(&(objectClass=gotoWorkstation)(objectClass=FAIobject)(FAIdebianMirror=".$url."))",array("cn","FAIclass")); + + $found = false; + $found_in = " "; + while($attrs = $ldap->fetch()){ + foreach($attrs['FAIclass'] as $class){ + if(preg_match("/".str_replace("/","\/",$release)."$/i",$class)){ + $found = true; + $found_in .= $attrs['cn'][0]." "; + } + } + } + + if($found){ + print_red(sprintf(_("Be careful editing this release, it is still used by these workstations [%s]."),$found_in)); + } + + if(isset($this->repositories[$value])){ + $once = true; + $obj = $this->repositories[$value]; + + /* to be able to detect if this was renamed */ + $obj['initialy_was'] = $obj['Release']; + $this->dialog = new servRepositorySetup($this->config,$this->dn,$obj); + $this->dialog->acl = $this->acl; + } + } } } } - if((isset($_GET['act']))&&($_GET['act']=="open")&&(isset($_GET['id']))){ - $obj = $this->repositories[$_GET['id']]; + $obj = $this->repositories[base64_decode($_GET['id'])]; $obj['initialy_was'] = $obj['Release']; $this->dialog = new servRepositorySetup($this->config,$this->dn,$obj); $this->dialog->acl = $this->acl; @@ -168,9 +210,15 @@ class servrepository extends plugin } }else{ $obj = $this->dialog->save(); + if($this->dialog->is_new_name()){ + $oldname = $this->dialog->initialy_was; + $this->repositories[$obj['Release']]=$obj; + unset($this->repositories[$oldname]); + }else{ + $this->repositories[$obj['Release']]=$obj; + } $this->dialog = NULL; $this->is_dialog= false; - $this->repositories[$obj['Release']]=$obj; } } @@ -214,9 +262,9 @@ class servrepository extends plugin } $divlist->AddEntry(array( - array("string"=>preg_replace("/%s/",$name,$link),"attach"=>"style='width:80px;'"), - array("string"=>sprintf($link,$name,_("Sections")." :".$str)), - array("string"=>preg_replace("/%s/",$name,$edit.$delete),"attach"=>"style='border-right:0px;width:55px;text-align:right;'") + array("string"=>sprintf($link,base64_encode($name),$name),"attach"=>"style='width:80px;'"), + array("string"=>sprintf($link,base64_encode($name),_("Sections")." :".$str)), + array("string"=>preg_replace("/%s/",base64_encode($name),$edit.$delete),"attach"=>"style='border-right:0px;width:55px;text-align:right;'") )); } } @@ -230,14 +278,23 @@ class servrepository extends plugin function remove_from_parent() { plugin::remove_from_parent(); + + /* Remove status flag, it is not a memeber of + this->attributes, so ensure that it is deleted too */ + if(!empty($this->StatusFlag)){ + $this->attrs[$this->StatusFlag] = array(); + } + $ldap= $this->config->get_ldap_link(); $ldap->cd ($this->config->current['BASE']); - $ldap->cat($this->dn); + $ldap->cat($this->dn, array('dn')); if($ldap->count()){ $ldap->cd($this->dn); - $ldap->modify($this->attrs); + $this->cleanup(); + $ldap->modify ($this->attrs); + $this->handle_post_events("modify"); } } @@ -256,7 +313,9 @@ class servrepository extends plugin /* Check supplied data */ function check() { - $message= array(); + /* Call common method to give check the hook */ + $message= plugin::check(); + return ($message); } @@ -285,11 +344,13 @@ class servrepository extends plugin $ldap= $this->config->get_ldap_link(); $ldap->cd ($this->config->current['BASE']); - $ldap->cat($this->dn); + $ldap->cat($this->dn, array('dn')); if($ldap->count()){ $ldap->cd($this->dn); - $ldap->modify($this->attrs); + $this->cleanup(); + $ldap->modify ($this->attrs); + $this->handle_post_events("modify"); }else{ $ldap->cd ($this->config->current['BASE']); @@ -300,6 +361,88 @@ class servrepository extends plugin } } + /* Get updates for status flag */ + function updateStatusState() + { + if(empty($this->StatusFlag)) return; + + $attrs = array(); + $flag = $this->StatusFlag; + $ldap = $this->config->get_ldap_link(); + $ldap->cd($this->cn); + $ldap->cat($this->dn,array($flag)); + if($ldap->count()){ + $attrs = $ldap->fetch(); + } + if(isset($attrs[$flag][0])){ + $this->$flag = $attrs[$flag][0]; + } + } + + + function getListEntry() + { + $this->updateStatusState(); + $flag = $this->StatusFlag; + if(empty($flag)){ + $fields['Status'] = ""; + }else{ + $fields['Status'] = $this->$flag; + } + $fields['Message'] = _("Repository service"); + $fields['AllowStart'] = true; + $fields['AllowStop'] = true; + $fields['AllowRestart'] = true; + $fields['AllowRemove']= true; + $fields['AllowEdit'] = true; + return($fields); + } + + + /* Directly save new status flag */ + function setStatus($value) + { + if($value == "none") return; + if(!$this->initially_was_account) return; + if(empty($this->StatusFlag)) return; + $ldap = $this->config->get_ldap_link(); + $ldap->cd($this->dn); + $ldap->cat($this->dn,array("objectClass")); + if($ldap->count()){ + + $tmp = $ldap->fetch(); + for($i = 0; $i < $tmp['objectClass']['count']; $i ++){ + $attrs['objectClass'][] = $tmp['objectClass'][$i]; + } + $flag = $this->StatusFlag; + $attrs[$flag] = $value; + $this->$flag = $value; + $ldap->modify($attrs); + show_ldap_error($ldap->get_error(), sprintf(_("Set status flag for server services/repository with dn '%s' failed."),$this->dn)); + $this->action_hook(); + } + } + + + /* Return plugin informations for acl handling */ + function plInfo() + { + return (array( + "plShortName" => _("Repository"), + "plDescription" => _("Repository service"), + "plSelfModify" => FALSE, + "plDepends" => array(), + "plPriority" => 0, + "plSection" => array("administration"), + "plCategory" => array("server"), + + "plProvidedAcls"=> array( + "cn" => _("Name"), + "Release" => _("Releases"), + "ParentServer" => _("Parent server"), + "Url" => _("Url")) + )); + } } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: