X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fadmin%2Fsystems%2Fclass_servRepository.inc;h=1fc0458ef9fd6f388c7c71077283ca5a5586f74a;hb=30827656c010419d41e5249cee16edf2d01969b9;hp=c6d54f13a82f70b0bfdee0ab6d5b2cdf1d1060ab;hpb=e1f170e62326fc1b1052bd3297b2583d17591a39;p=gosa.git diff --git a/plugins/admin/systems/class_servRepository.inc b/plugins/admin/systems/class_servRepository.inc index c6d54f13a..1fc0458ef 100644 --- a/plugins/admin/systems/class_servRepository.inc +++ b/plugins/admin/systems/class_servRepository.inc @@ -20,12 +20,26 @@ class servrepository extends plugin /* Repositories */ var $repositories = array(); - var $FAIrepository = array(); + var $FAIrepository = array(); - function servrepository ($config, $dn= NULL) + var $fai_activated = FALSE; + + function servrepository ($config, $dn= NULL, $parent= NULL) { - plugin::plugin ($config, $dn); + plugin::plugin ($config, $dn, $parent); + + /* Skip this if fai is deactivated */ + $tmp = search_config($this->config->data,"faiManagement","CLASS"); + if(!empty($tmp)){ + $this->fai_activated = TRUE; + }else{ + return; + } + $ui = get_userinfo(); + $tmp= get_permissions ($this->dn, $ui->subtreeACL); + $this->acl= get_module_permission($tmp, "FAIclass", $this->dn); + $this->repositories = array(); if(isset($this->attrs['FAIrepository'])){ for($i = 0; $i < $this->attrs['FAIrepository']['count']; $i++){ @@ -73,10 +87,21 @@ class servrepository extends plugin /* Call parent execute */ plugin::execute(); + if(!$this->fai_activated){ + $str = "

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

"; + return $str; + } + /* Fill templating stuff */ $smarty= get_smarty(); $display= ""; + $ui = get_userinfo(); + $tmp= get_permissions ($this->dn, $ui->subtreeACL); + $this->acl= get_module_permission($tmp, "FAIclass", $this->dn); + $allow_edit = !preg_match("/disabled/i",chkacl($this->acl,"FAIclass")); + + /* Smarty vars*/ $smarty->assign("infoimage", get_template_path('images/info.png')); $smarty->assign("search_image", get_template_path('images/search.png')); @@ -101,45 +126,110 @@ class servrepository extends plugin _("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("/^delete_/",$name))&&(!$once)){ - if(isset($this->repositories[$value])){ + if(isset($_POST['servRepository'])){ + foreach($_POST as $name => $value){ + + if(preg_match("/AddRepository/",$name) && !$once && $allow_edit){ $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)){ - if(isset($this->repositories[$value])){ + if((preg_match("/^delete_/",$name))&&(!$once) && $allow_edit){ $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) && $allow_edit){ + $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']]; + if((isset($_GET['act']))&&($_GET['act']=="open")&&(isset($_GET['id'])) && $allow_edit){ + $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; } + */ if(isset($_POST['repository_setup_save'])){ $this->dialog->save_object(); @@ -153,9 +243,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; } } @@ -175,46 +271,47 @@ class servrepository extends plugin */ $divlist = new divList("repositories"); - $divlist->SetEntriesPerPage(12); + $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:69px;'") + array("string"=>_("Options"),"attach"=>"style='border-right:0px;width:55px;'") ) ); - $link = "%s"; + $link = "%s"; $edit = " "; $delete = ""; - if(count($this->repositories)==0){ - $divlist->AddEntry(array( - array("string"=>" ","attach"=>"style='width:80px;'"), - array("string"=>" "), - array("string"=>" ","attach"=>"style='border-right:0px;width:50px;text-align:right;'") - )); - } - foreach($this->repositories as $name => $reps){ $str = " "; - if(preg_match("/".str_replace("*",".*",$this->regex)."/",$reps['Release'])){ - foreach($reps['Sections'] as $sec){ $str.=$sec." "; } - + + if($allow_edit){ + $link_str = sprintf($link,base64_encode($name),$name); + $sections = sprintf($link,base64_encode($name),_("Sections")." :".$str); + $options = preg_replace("/%s/",base64_encode($name),$edit.$delete); + }else{ + $link_str = $name; + $sections = _("Sections")." :".$str; + $options = ""; + } + + $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:50px;text-align:right;'") - )); + array("string"=>$link_str,"attach"=>"style='width:80px;'"), + array("string"=>$sections), + array("string"=>$options,"attach"=>"style='border-right:0px;width:55px;text-align:right;'"))); } } $smarty -> assign("Repositories",$divlist->DrawList()); + $smarty -> assign("FAIclassACL",chkacl($this->acl,"FAIclass")); $display.= $smarty->fetch(get_template_path('servRepository.tpl', TRUE)); return($display); @@ -222,15 +319,27 @@ class servrepository extends plugin function remove_from_parent() { + + if(!$this->fai_activated) return; + + /* Skip if not allowed */ + $ui = get_userinfo(); + $tmp= get_permissions ($this->dn, $ui->subtreeACL); + $this->acl= get_module_permission($tmp, "FAIclass", $this->dn); + + if(preg_match("/disabled/",chkacl($this->acl,"FAIclass"))) return; + plugin::remove_from_parent(); $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"); } } @@ -249,7 +358,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); } @@ -257,6 +368,14 @@ class servrepository extends plugin /* Save to LDAP */ function save() { + if(!$this->fai_activated) return; + + /* Skip if not allowed */ + $ui = get_userinfo(); + $tmp= get_permissions ($this->dn, $ui->subtreeACL); + $this->acl= get_module_permission($tmp, "FAIclass", $this->dn); + + if(preg_match("/disabled/",chkacl($this->acl,"FAIclass"))) return; plugin::save(); $arr = array(); @@ -278,11 +397,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']);