Code

Updated Image Production.
[gosa.git] / plugins / admin / systems / class_servRepositorySetup.inc
index 9330f48317b37d0917a92ec3e25ba70ed556551a..6bbfb43483c57af16ed7b8474d89d583fb634d95 100644 (file)
@@ -9,16 +9,17 @@ class servRepositorySetup  extends plugin
 
   /* attribute list for save action */
   var $ignore_account   = TRUE;
-  var $attributes       = array("Release","ParentServer","Url");
+  var $attributes       = array("Release","ParentServer","Url","cn");
   var $objectclasses    = array("whatever");
 
   /* Attributes */
-  var $Release          ="";
-  var $ParentServer     ="";
-  var $Url              ="";   
-  var $Sections         =array();
-  var $ParentServers    ="";
-  var $initialy_was=false;
+  var $Release          = "";
+  var $ParentServer     = "";
+  var $Url              = "";   
+  var $Sections         = array();
+  var $ParentServers    = "";
+  var $initialy_was     = false;
+  var $cn               = "";
 
   function servRepositorySetup ($config, $dn= NULL,$data = false)
   {
@@ -60,13 +61,34 @@ class servRepositorySetup  extends plugin
     $smarty= get_smarty();
 
     if((isset($_POST['AddSection']))&&(isset($_POST['SectionName']))&&(!empty($_POST['SectionName']))){
-      $this->Sections[$_POST['SectionName']]=$_POST['SectionName'];
+     
+      /* Replace multiple spaces with a single, and cut of white spaces (trim)*/ 
+      $val = preg_replace("/\ \ * /" , " ", trim($_POST['SectionName']));
+    
+      /* check if there are more than one entry given ( "section1 section2 )*/
+      if(preg_match("/ /",$val)){
+
+        /* Generate list of new section names */
+        $vals = split(" ",$val);
+        /* Add new entries */ 
+        foreach($vals as $entry){
+          $entry = trim($entry);
+          $this->Sections[$entry]=$entry;
+        }
+      }else{
+        $this->Sections[$val]=$val;
+      }
     }
     
     foreach($_POST as $name => $value){
       if(preg_match("/^delete_/",$name)){
-        if(isset($this->Sections[$value])){
-          unset($this->Sections[$value]);
+
+        $val = preg_replace("/^delete_/","",$name);
+        $val = base64_decode(preg_replace("/_.*$/","",$val));
+
+        if(isset($this->Sections[$val])){
+          unset($this->Sections[$val]);
         }
       }
     }
@@ -79,7 +101,7 @@ class servRepositorySetup  extends plugin
     foreach($this->Sections as $sec){
       $divlist->AddEntry(array(
                               array("string"=>$sec),
-                              array("string"=>sprintf($dellink,$sec,$sec),"attach"=>"style='border-right:0px;width:20px;'")
+                              array("string"=>sprintf($dellink,base64_encode($sec),$sec),"attach"=>"style='border-right:0px;width:20px;'")
                               ));
     }
   
@@ -89,9 +111,10 @@ class servRepositorySetup  extends plugin
       $smarty->assign($attr       ,$this->$attr);
       $smarty->assign($attr."ACL" ,chkacl($this->acl,$attr));
     }
-
-    $smarty->assign("ParentServers"   ,$this->getParentServers());
-    $smarty->assign("ParentServerKeys",array_flip($this->getParentServers()));
+  
+    $tmp = $this->getParentServers();
+    $smarty->assign("ParentServers"   ,$tmp);
+    $smarty->assign("ParentServerKeys",array_flip($tmp));
 
     return($smarty->fetch(get_template_path('servRepositorySetup.tpl', TRUE)));
   }
@@ -106,7 +129,8 @@ class servRepositorySetup  extends plugin
   /* Check supplied data */
   function check()
   {
-    $message= array();
+    /* Call common method to give check the hook */
+    $message= plugin::check();
 
     if(empty($this->Release)){
       $message[]=_("Please enter a value for 'release'.");
@@ -138,9 +162,46 @@ class servRepositorySetup  extends plugin
     $ldap->cd($this->config->current['BASE']);
     $ldap->search("(objectClass=FAIrepositoryServer)",array("*"));
     while($attr = $ldap->fetch()){
+      if($attr['cn'][0] == $this->cn) continue;
       $ret[$attr['cn'][0]]= $attr['cn'][0];   
     }
-    $ret['none']= "";
+
+    $ret = array_merge($ret,$this->GetHookElements());
+    
+    $ret['none']= " ";
+    asort($ret);
+    return($ret);
+  }
+
+  /* this funtions calls a defined hook 
+      and parses all additional serverdata 
+   */
+  function GetHookElements()
+  {
+    $ret = array();
+    $cmd= search_config($this->config->data['TABS'], "servrepository", "REPOSITORY_HOOK");
+    if(!empty($cmd)){
+      $res = shell_exec($cmd);
+      $res2 = trim($res);
+      if(!$res){
+        print_red(sprintf(_("Can't execute specified REPOSITORY_HOOK '%s'. Please check your gosa.conf."),$cmd));
+      }elseif(empty($res2)){
+        print_red(sprintf(_("The specified REPOSITORY_HOOK '%s', specified in your gosa.conf, returns an empty string."),$cmd));
+      }else{  
+        $tmp = split("\n",$res);
+        foreach($tmp as $hook){
+          /* skip empty */
+          if(empty($hook)) continue;
+
+          if(preg_match("/;/",$hook)){ 
+            $hookinfo = split(";",$hook);
+            $ret[$hookinfo[0]] = $hookinfo[0];
+          }else{
+            $ret[$hook] = $hook;
+          }
+        }
+      }
+    }
     return($ret);
   }