X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fadmin%2Fsystems%2Fclass_servRepository.inc;h=1fc0458ef9fd6f388c7c71077283ca5a5586f74a;hb=e1caeaac864e3118ac900e3fc2d697bd88da1326;hp=a205138978ce365e7101111a40332dcb8d283084;hpb=6a798c99f3cd57b6e98610975ac80dcd7e094a90;p=gosa.git diff --git a/plugins/admin/systems/class_servRepository.inc b/plugins/admin/systems/class_servRepository.inc index a20513897..1fc0458ef 100644 --- a/plugins/admin/systems/class_servRepository.inc +++ b/plugins/admin/systems/class_servRepository.inc @@ -8,7 +8,7 @@ class servrepository extends plugin var $cli_parameters = array("eins" => "Eins ist toll", "zwei" => "Zwei ist noch besser"); /* attribute list for save action */ -// var $ignore_account = TRUE; + // var $ignore_account = TRUE; var $attributes = array("FAIrepository"); var $objectclasses = array("FAIrepositoryServer"); @@ -20,28 +20,65 @@ 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); - $this->repositories = array(); - for($i = 0; $i < $this->attrs['FAIrepository']['count']; $i++){ - $tmp = split("\|",$this->attrs['FAIrepository'][$i]); - $tmp2 = array(); - $tmp3 = array(); - - $tmp2['ParentServer'] = $tmp[1]; - $tmp2['Url'] = $tmp[0]; - $tmp2['Release'] = $tmp[2]; - - $tmp3 = split(",",$tmp[3]); + 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); - foreach($tmp3 as $sec){ - $tmp2['Sections'][$sec]=$sec; - } - $this->repositories[$tmp[2]]=$tmp2; - + $this->repositories = array(); + if(isset($this->attrs['FAIrepository'])){ + for($i = 0; $i < $this->attrs['FAIrepository']['count']; $i++){ + $tmp = split("\|",$this->attrs['FAIrepository'][$i]); + $tmp2 = array(); + $tmp3 = array(); + + if(isset($tmp[1])){ + $tmp2['ParentServer'] = $tmp[1]; + if(empty($tmp[1])){ + $tmp2['ParentServer'] = "none"; + } + }else{ + $tmp2['ParentServer'] = "none"; + } + + if(isset($tmp[0])){ + $tmp2['Url'] = $tmp[0]; + }else{ + $tmp2['Url'] = ""; + } + + if(isset($tmp[2])){ + $tmp2['Release'] = $tmp[2]; + }else{ + $tmp2['Release'] = ""; + } + + if(isset($tmp[3])){ + $tmp3 = split(",",$tmp[3]); + foreach($tmp3 as $sec){ + $tmp2['Sections'][$sec]=$sec; + } + }else{ + $tmp['Section']=array(); + } + + $this->repositories[$tmp[2]]=$tmp2; + } } } @@ -50,11 +87,23 @@ 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')); $smarty->assign("launchimage", get_template_path('images/small_filter.png')); $smarty->assign("tree_image", get_template_path('images/tree.png')); @@ -77,31 +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("/^edit_/",$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; - $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 = new servRepositorySetup($this->config,$this->dn); $this->dialog->acl = $this->acl; } + + if((preg_match("/^delete_/",$name))&&(!$once) && $allow_edit){ + $once = true; + $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'])) && $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(); @@ -115,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; } } @@ -136,25 +270,48 @@ class servrepository extends plugin Repository setup dialog handling /END */ - $divlist = new divSelectBox("repositories"); + $divlist = new divList("repositories"); + $divlist->SetEntriesPerPage(0); $divlist->setHeight(400); - $edit = ""; - + $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"; + $edit = " "; + $delete = ""; + 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"=>$name), - array("string"=>_("Sections")." :".$str), - array("string"=>preg_replace("/%s/",$name,$edit),"attach"=>"style='border-right:0px;'") - )); + 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); @@ -162,7 +319,29 @@ class servrepository extends plugin function remove_from_parent() { - /* This cannot be removed... */ + + 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, array('dn')); + + if($ldap->count()){ + $ldap->cd($this->dn); + $this->cleanup(); + $ldap->modify ($this->attrs); + + $this->handle_post_events("modify"); + } } @@ -170,13 +349,18 @@ class servrepository extends plugin function save_object() { plugin::save_object(); + if(isset($_POST['regex'])){ + $this->regex = $_POST['regex']; + } } /* Check supplied data */ function check() { - $message= array(); + /* Call common method to give check the hook */ + $message= plugin::check(); + return ($message); } @@ -184,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(); @@ -193,6 +385,11 @@ class servrepository extends plugin $str.=$sec.","; } $str=preg_replace("/,$/","",$str); + + if($conf['ParentServer']=="none"){ + $conf['ParentServer'] =""; + } + $arr[]=$conf['Url']."|".$conf['ParentServer']."|".$conf['Release']."|".$str; } $this->attrs['FAIrepository'] = $arr; @@ -200,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']);