X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;ds=sidebyside;f=plugins%2Fadmin%2Fsystems%2Fclass_servRepository.inc;h=de72d986e397a8165a1782e6eecca2c3a509729e;hb=8cce7d888235a4d43d31b527154b3f5577c78799;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..de72d986e 100644 --- a/plugins/admin/systems/class_servRepository.inc +++ b/plugins/admin/systems/class_servRepository.inc @@ -1,6 +1,6 @@ DisplayName = _("Repository service"); + + /* Skip this if fai is deactivated */ + $tmp= $this->config->search("faiManagement", "CLASS",array('menu','tabs')); + if(!empty($tmp)){ + $this->fai_activated = TRUE; + }else{ + return; + } $this->repositories = array(); if(isset($this->attrs['FAIrepository'])){ @@ -66,6 +78,24 @@ class servrepository extends plugin $this->repositories[$tmp[2]]=$tmp2; } } + + + /* Create divlist */ + $divlist = new MultiSelectWindow($this->config,"repositories","server/servRepository"); + $divlist->SetTitle("repositories"); + $divlist->SetSummary(_("List of configured repositories.")); + $divlist->SetInformation(_("This menu allows you to create, delete and edit repository settings.")); + $divlist->EnableCloseButton(FALSE); + $divlist->EnableSaveButton(FALSE); + $divlist->AddHeader(array("string"=>_("Release"),"attach"=>"style='width:80px;'")); + $divlist->AddHeader(array("string"=>_("Sections"))); + $divlist->AddHeader(array("string"=>_("Options"),"attach"=>"style='border-right:0px;width:55px;'")); + $divlist->AddRegex("regex",_("Regular expression for matching object names"),"*",TRUE); + $divlist->EnableAplhabet(TRUE); + if($this->acl_is_createable()){ + $divlist->SetListHeader(""); + } + $this->divlist = $divlist; } function execute() @@ -73,90 +103,119 @@ class servrepository extends plugin /* Call parent execute */ plugin::execute(); + if($this->is_account && !$this->view_logged){ + $this->view_logged = TRUE; + new log("view","server/".get_class($this),$this->dn); + } + + if(!$this->fai_activated){ + $str = "

"._("You can't use this plugin until FAI is activated.")."

"; + return $str; + } + /* Fill templating stuff */ $smarty= get_smarty(); + $smarty->assign("is_createable",$this->acl_is_createable()); $display= ""; - /* Smarty vars*/ - $smarty->assign("infoimage", get_template_path('images/info.png')); - $smarty->assign("search_image", get_template_path('images/search.png')); - $smarty->assign("launchimage", get_template_path('images/small_filter.png')); - $smarty->assign("tree_image", get_template_path('images/tree.png')); - $smarty->assign("alphabet", generate_alphabet()); - $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(isset($_POST['servRepository'])){ + foreach($_POST as $name => $value){ - if((preg_match("/^delete_/",$name))&&(!$once)){ - - $value = preg_replace("/delete_/","",$name); - $value = preg_replace("/_.$/","",$value); - - if(isset($this->repositories[$value])){ + if(preg_match("/AddRepository/",$name) && $this->acl_is_createable()){ $once = true; - unset($this->repositories[$value]); + $this->dialog = new servRepositorySetup($this->config,$this->dn); + $this->dialog->parent = $this; } - } - 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) && $this->acl_is_removeable()){ $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->parent = $this; + } + } } } } - - if((isset($_GET['act']))&&($_GET['act']=="open")&&(isset($_GET['id']))){ - $obj = $this->repositories[$_GET['id']]; + if((isset($_GET['act']))&&($_GET['act']=="open_repository")&&(isset($_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; - } - - /* - if(isset($_POST['AddRepository'])){ - $this->dialog = new servRepositorySetup($this->config,$this->dn); - $this->dialog->acl = $this->acl; + $this->dialog->parent = $this; } - */ - if(isset($_POST['repository_setup_save'])){ + if(isset($_POST['repository_setup_save']) && is_object($this->dialog)){ $this->dialog->save_object(); if(($this->dialog->is_new_name())&&(isset($this->repositories[$this->dialog->GetName()]))){ print_red(_("This name is already in use.")); @@ -168,18 +227,24 @@ class servrepository extends plugin } }else{ $obj = $this->dialog->save(); - $this->dialog = NULL; + 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 = FALSE; $this->is_dialog= false; - $this->repositories[$obj['Release']]=$obj; } } if(isset($_POST['repository_setup_cancel'])){ - $this->dialog=NULL; + $this->dialog=FALSE; $this->is_dialog = false; } - if($this->dialog != NULL){ + if(is_object($this->dialog)){ $this->dialog->save_object(); $this->is_dialog = true; return($this->dialog->execute()); @@ -189,66 +254,46 @@ class servrepository extends plugin Repository setup dialog handling /END */ - $divlist = new divList("repositories"); - $divlist->SetEntriesPerPage(0); - $divlist->setHeight(400); - $divlist->setHeader(array(array("string"=>_("Release"),"attach"=>"style='width:80px;'"), - array("string"=>_("Sections")), - array("string"=>_("Options"),"attach"=>"style='border-right:0px;width:55px;'") - ) ); - - $link = "%s"; + $link = "%s"; $edit = " "; - $delete = ""; + + /* Hide delete icon, if delete is not allowed */ + if($this->acl_is_removeable()){ + $delete = ""; + }else{ + $delete = " "; + } + $this->divlist->ClearElementsList(); foreach($this->repositories as $name => $reps){ $str = " "; - - if(preg_match("/".str_replace("*",".*",$this->regex)."/",$reps['Release'])){ - - - foreach($reps['Sections'] as $sec){ - $str.=$sec." "; - } - - $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;'") - )); + if(preg_match("/".str_replace("*",".*",$this->divlist->regex)."/",$reps['Release'])){ + foreach($reps['Sections'] as $sec){ + $str.=$sec." "; + } + $this->divlist->AddElement(array( + 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;'") + )); } } - $smarty -> assign("Repositories",$divlist->DrawList()); + $smarty->assign("Repositories",$this->divlist->Draw()); $display.= $smarty->fetch(get_template_path('servRepository.tpl', TRUE)); return($display); } - function remove_from_parent() - { - plugin::remove_from_parent(); - $ldap= $this->config->get_ldap_link(); - $ldap->cd ($this->config->current['BASE']); - - $ldap->cat($this->dn); - - if($ldap->count()){ - $ldap->cd($this->dn); - $ldap->modify($this->attrs); - $this->handle_post_events("modify"); - } - } - /* Save data to object */ function save_object() { plugin::save_object(); - if(isset($_POST['regex'])){ - $this->regex = $_POST['regex']; + if(is_object($this->divlist)){ + $this->divlist->save_object(); } } @@ -256,7 +301,8 @@ class servrepository extends plugin /* Check supplied data */ function check() { - $message= array(); + /* Call common method to give check the hook */ + $message= plugin::check(); return ($message); } @@ -264,6 +310,8 @@ class servrepository extends plugin /* Save to LDAP */ function save() { + if(!$this->fai_activated) return; + plugin::save(); $arr = array(); @@ -285,11 +333,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']); @@ -298,8 +348,47 @@ class servrepository extends plugin $ldap->add($this->attrs); $this->handle_post_events("add"); } + + if($this->initially_was_account){ + new log("modify","server/".get_class($this),$this->dn,array_keys($this->attrs),$ldap->get_error()); + }else{ + new log("create","server/".get_class($this),$this->dn,array_keys($this->attrs),$ldap->get_error()); + } } + + function getListEntry() + { + $fields = goService::getListEntry(); + $fields['Message'] = _("Repository service"); + $fields['AllowEdit'] = true; + $fields['AllowStart'] = $fields['AllowStop'] = $fields['AllowRestart'] = false; + return($fields); + } + + /* Return plugin informations for acl handling */ + static function plInfo() + { + return (array( + "plShortName" => _("Repository"), + "plDescription" => _("Repository service")." ("._("Services").")", + "plSelfModify" => FALSE, + "plDepends" => array(), + "plPriority" => 84, + "plSection" => array("administration"), + "plCategory" => array("server"), + + "plProvidedAcls"=> array( + "cn" => _("Name"), + "start" => _("Start"), + "stop" => _("Stop"), + "restart" => _("Restart"), + "Release" => _("Releases"), + "Section" => _("Sections"), + "ParentServer" => _("Parent server"), + "Url" => _("Url")) + )); + } } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: