Code

Fixed department list
[gosa.git] / plugins / admin / fai / class_faiPackageEntry.inc
index 954cbd77b28d4fa50ebb4759a48434b5babeb311..a8c78aeb39310843101f8bf0606c40f84ca6aab6 100644 (file)
@@ -11,97 +11,141 @@ class faiPackageEntry extends plugin
   var $ignore_account= TRUE;
   var $attributes   = array();
   var $objectclasses= array();
-  var $strID        = "";  
+  var $pkgs        = array();  
 
   var $buffer       = array();
   var $categories   = array();
-  var $searchStr    = "*";
+  var $searchStrPKG = "";
+  var $selected     = array();
 
   /* Array with available class names */
   var $FAIAllclasses        = array();
 
-  function faiPackageEntry ($config, $dn= NULL,$strID=false)
+  function faiPackageEntry ($config, $dn= NULL,$pkgs,$selected=array())
   {
     plugin::plugin ($config, $dn);
-    $this->strID = $strID;
+    
+    $this->pkgs=$pkgs;
+
+    if(isset($_SESSION['searchStrPKG'])){
+      $this->searchStrPKG=$_SESSION['searchStrPKG'];
+    }
+    $this->selected=$selected;
 
+    $this->searchStrPKG= _("Please enter your search string here");
   }
 
   function execute()
   {
+       /* Call parent execute */
+       plugin::execute();
+
     /* Fill templating stuff */
     $smarty     = get_smarty();
     $display = "";
 
     $divlist = new divlist("PackageEntry");
     $divlist->SetSummary(_("This list displays all assigned package names for this repository settings."));
-    $divlist->SetEntriesPerPage(20);
-    $divlist->SetHeader(array(array("string"=>" "),
-                              array("string"=>"Name"),
-                              array("string"=>"Version"),
-                              array("string"=>"Description")));
+    $divlist->SetEntriesPerPage(0);
+    $divlist->SetHeight("650px;");
+    $divlist->SetHeader(array(array("string" => " ", "attach" => "style='text-align:center;width:20px;'"),
+                              array("string" => "Name", "attach" => "style='width:180px;'"),
+                              array("string" => "Version", "attach" ),
+                              array("string" => "Description", "attach" => "style='width:240px;border-right:0px;text-align:left;'")));
 
     if(isset($_GET['search'])){
-      $this->searchStr= $_GET['search']."*";
+      $this->searchStrPKG= $_GET['search']."*";
     }
-
-    $pkgs = $this->genPkgs();
-    foreach($pkgs as $cat => $entries){
-      if(!isset($this->categories[$cat])){  
-        $this->categories[$cat] = false;
-      }
-      if(isset($_POST['chkchange'])){
-        $this->searchStr = $_POST['searchStr'];
-        if(isset($_POST['CAT'.$cat])){
-          $this->categories[$cat]=true;
-        }else{
-          $this->categories[$cat]=false;
+    
+    $pkgs= $this->pkgs;
+
+    unset($this->categories);
+    foreach($pkgs as $name => $entry){
+      $cat = $entry[2];
+      if(!empty($cat)){
+        if(!isset($this->categories[$cat])){  
+          $this->categories[$cat] = true;
+        }
+        if(isset($_POST['chkchange'])){
+          $this->searchStrPKG = $_POST['searchStrPKG'];
+          if(isset($_POST['CAT'.$cat])){
+            $this->categories[$cat]=true;
+          }else{
+            $this->categories[$cat]=false;
+          }
         }
       } 
-  
     }
 
-    $CHKS = "<table><tr><td><input type='hidden' value='chkchange' name='chkchange'>";
+    $this->searchStrPKG = preg_replace("/^\+/","",$this->searchStrPKG);
+    if(empty($this->searchStrPKG)){
+      $this->searchStrPKG = "*";
+    }
+
+    @ksort($this->categories);
+
+$CHKS = "<input type='hidden' value='chkchange' name='chkchange'><table summary=''><tr>";
+    $i = 0;
+    if(is_array($this->categories)) 
     foreach($this->categories as $cat => $selected){
+      if($i == 3){
+        $CHKS .="</tr><tr>";
+        $i = 0;
+      }
+      $i ++ ;
       if($selected){
-        $CHKS .="<input type='checkbox' value='1' name='CAT".$cat."' checked>&nbsp;".$cat."&nbsp;";
+        $CHKS .="<td><input type='checkbox' value='1' name='CAT".$cat."' checked onclick='document.mainform.submit()'>&nbsp;".$cat."&nbsp;</td>";
       }else{
-        $CHKS .="<input type='checkbox' value='1' name='CAT".$cat."'>&nbsp;".$cat."&nbsp;";
+        $CHKS .="<td><input type='checkbox' value='1' name='CAT".$cat."' onclick='document.mainform.submit()'>&nbsp;".$cat."&nbsp;</td>";
       }
     }
-    $CHKS .= "<br><input type='submit' name='refresh0' value='"._("refresh")."'> </td></tr></table>";
+    $CHKS .= "</tr></table>";
+
 
-    $packages = array();
-    foreach($this->categories as $cat => $use){
-      if($use){
-        $packages = array_merge($packages,$pkgs[$cat]);
-      }
-    }
-/*
     foreach($_POST as $name => $value){
       if(preg_match("/^wasonpage_/i",$name)){
         $name = preg_replace("/^wasonpage_/","",$name);
+        $n =base64_decode($name);
+
         if(isset($_POST['use_'.$name])){
-          print "was checked";
+          $this->selected[$n] = $n; 
+        }else{
+          if(isset($this->selected[$n])){
+            unset($this->selected[$n]);
+          }
         }
+
       }
-    
     }
 
-*/
-    foreach($packages as $pkg){
-      if(preg_match("/^".str_replace("*",".*",$this->searchStr)."/i",$pkg[0])){
-      $chkbox = "<input type='checkbox' value='1' name='use_".base64_encode($pkg[0])."'>
-                 <input type='hidden' value='1' name='wasonpage_".base64_encode($pkg[0])."'>";
-      $divlist->AddEntry(array(array("string"=>$chkbox),
-                               array("string"=>$pkg[0]),
-                               array("string"=>$pkg[1]),
-                               array("string"=>$pkg[3])));
+    $cnt = 0; 
+    foreach($pkgs as $pkg){
+      if($cnt > 200) {
+        print_red(sprintf(_("Your specified search string '%s' returned too many results. Only the first 200 entries are shown, to keep the memory usage low."),$this->searchStrPKG));
+        break;
+      }
+      if((preg_match("/^".str_replace("*",".*",$this->searchStrPKG)."/i",$pkg[0]))||
+         (preg_match("/^".str_replace("*",".*",$this->searchStrPKG)."/i",$pkg[3]))){
+        if($this->categories[$pkg[2]]){
+          if(in_array($pkg[0],$this->selected)){
+            $check = " checked ";
+          }else{
+            $check = "";
+          }
+          $cnt ++ ;
+          $chkbox = "<input type='checkbox' value='1' name='use_".base64_encode($pkg[0])."' ".$check.">
+                   <input type='hidden' value='1' name='wasonpage_".base64_encode($pkg[0])."'>";
+          $divlist->AddEntry(array(array("string"=>$chkbox, "attach" => "style='text-align:center;width:20px;'"),
+                               array("string"=>$pkg[0], "attach" => "style='width:180px;'"),
+                               array("string"=>htmlentities($pkg[1])),
+                               array("string"=>htmlentities($pkg[3]), "attach" => "style='width:221px;border-right:0px;text-align:left;'")));
+        }
       }
     }
 
+    $_SESSION['searchStrPKG']       = $this->searchStrPKG;
     $smarty->assign("CHKS"          , $CHKS);
-    $smarty->assign("searchStr"     , $this->searchStr);
+    $smarty->assign("searchStrPKG"  , $this->searchStrPKG);
     $smarty->assign("faihead"       , "");
     $smarty->assign("failist"       , $divlist->DrawList());
     $smarty->assign("infoimage"     , get_template_path('images/info.png'));
@@ -117,57 +161,36 @@ class faiPackageEntry extends plugin
   /* Save data to object */
   function save_object()
   {
+    foreach($_POST as $name => $value){
+      if(preg_match("/^wasonpage_/i",$name)){
+        $name = preg_replace("/^wasonpage_/","",$name);
+        $n =base64_decode($name);
+        if(isset($_POST['use_'.$name])){
+          $this->selected[$n] = $n;
+        }else{
+          if(isset($this->selected[$n])){
+            unset($this->selected[$n]);
+          }
+        }
+
+      }
+    }
+
   }
 
   /* Check supplied data */
   function check()
   {
-    $message= array();
+    /* Call common method to give check the hook */
+    $message= plugin::check();
+        
     return ($message);
   }
 
   function save()
   {
-    $tmp = array();
-    foreach($this->FAIAllclasses as $class => $obj){
-      if($obj['status']==true){
-        $tmp[$class]=$class;
-      }
-    }
-    return($tmp);
-  }
-
-    /* Generate listbox friendly SubObject list
-  */
-  function genPkgs(){
-    /* Generate a list off available packages for this mirror, section and release
-     */
-    $strID = $this->strID;    // This var contains the path to the parsed package file
-    
-    /* Open the packelist */
-    $fp = fopen($strID,"r");  
-    $a_ret = array();
-    /* Only read this file if it wasn't read before */
-    if(!isset($this->buffer[$strID])){
-      $str = "";
-      /* Parse every line and create an array */
-      while(!feof($fp)){
-        $str= fgets($fp,512);
-        $stra= split("\|",$str);
-        if(count($stra)==4){
-          $a_ret[$stra[2]][] = $stra;
-          } 
-        }
-        
-        /* Save our Data, to avoid reading it again */
-      $this->buffer[$strID]=$a_ret;
-      return($a_ret);
-    }else{
-      return $this->buffer[$strID];
-    }
+    return($this->selected);
   }
-
-
 }
 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
 ?>