Code

Updated FAI partition handling
[gosa.git] / gosa-plugins / fai / admin / fai / class_faiPackageEntry.inc
index c72eea51e0c45d43bbaead91ea8ad63c031d50cc..f86f89a96aff64eefcd72d3697101ef4e5c5789e 100644 (file)
@@ -1,35 +1,67 @@
 <?php
 
+/*! \brief  See contructor
+
+*/
 class faiPackageEntry extends plugin
 {
   /* attribute list for save action */
   var $ignore_account= TRUE;
   var $attributes   = array();
   var $objectclasses= array();
-  var $pkgs        = array();  
+  var $pkgs         = array();  
 
-  var $buffer       = array();
-  var $categories   = array();
-  var $searchStrPKG = "";
-  var $selected     = array();
+  var $package_sections   = array();
+  var $searchStrPKG       = "*";
+  var $selected           = array();
 
   /* Array with available class names */
   var $FAIAllclasses        = array();
-
-  function faiPackageEntry (&$config, $dn= NULL,$pkgs,$selected=array())
+  var $FAIdebianRelease ="";
+
+  
+  /*! \brief  Allows to select a set of packages for a specific release.
+              The packages are loaded from the GOsa si daemon directly
+      @param  Object    The GOsa configuration object
+      @param  String    The release name for which the packages will be loaded
+      @param  Array     Packages that schould be marked as selected.
+   */
+  function faiPackageEntry (&$config,$release, $used_packages=array())
   {
-    plugin::plugin ($config, $dn);
-    
-    $this->pkgs=$pkgs;
+    plugin::plugin ($config, NULL);
 
-    if(session::is_set('searchStrPKG')){
-      $this->searchStrPKG = session::get('searchStrPKG');
-    }
-    $this->selected=$selected;
+    $this->FAIdebianRelease = $release;
+    $this->selected         = $used_packages;
+    $this->initializeSections();
+
+    /* Get old search filter, if there is one*/ 
+    $this->searchStrPKG     = _("Please enter your search string here");
+    if(session::is_set("searchStrPKG")){
+      $this->searchStrPKG = session::get("searchStrPKG");
+    }    
+  }
 
-    $this->searchStrPKG= _("Please enter your search string here");
+
+  /*! \brief  Load all release seactions from GOsa support daemon
+   */  
+  function initializeSections()
+  {
+    $this->package_sections = array();
+    $q = new gosaSupportDaemon();
+    $ret = $q->FAI_get_package_sections($this->FAIdebianRelease);
+    if($q->is_error()){
+      msg_dialog::display(_("Service infrastructure"),msgPool::siError($q->get_error()),ERROR_DIALOG);
+    }else{
+      foreach($ret as $entry){
+        $this->package_sections[array_pop($entry)] = TRUE; 
+      }
+    }
   }
 
+
+  /*! \brief  Create HTML for this plugin.
+      @return String The html code for this plugin.
+   */
   function execute()
   {
     /* Call parent execute */
@@ -39,111 +71,66 @@ class faiPackageEntry extends plugin
     $smarty     = get_smarty();
     $display = "";
 
-    $divlist = new divlist("PackageEntry");
-    $divlist->SetPluginMode();
-    $divlist->SetSummary(_("This list displays all assigned package names for this repository settings."));
-    $divlist->SetEntriesPerPage(0);
-    $divlist->SetHeight("650px;");
-    $divlist->SetHeader(array(array("string" => "&nbsp;", "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->searchStrPKG= $_GET['search']."*";
-    }
-    
-    $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;
-          }
-        }
-      } 
-    }
-
-    $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>";
+    /* Create section checkboxes 
+     */ 
+    $Section_boxes = "
+          <div style='height:450px; overflow:scroll;'> 
+            <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>";
+    foreach($this->package_sections as $cat => $selected){
+      if($i == 2){
+        $Section_boxes .="</tr><tr>";
         $i = 0;
       }
-      $i ++ ;
       if($selected){
-        $CHKS .="<td><input type='checkbox' value='1' name='CAT".$cat."' checked onclick='document.mainform.submit()'>&nbsp;".$cat."&nbsp;</td>";
+        $Section_boxes .="<td><input type='checkbox' value='1' name='CAT".$cat."' checked ".
+          "onclick='document.mainform.submit()'>&nbsp;".$cat."&nbsp;</td>";
       }else{
-        $CHKS .="<td><input type='checkbox' value='1' name='CAT".$cat."' onclick='document.mainform.submit()'>&nbsp;".$cat."&nbsp;</td>";
-      }
-    }
-    $CHKS .= "</tr></table>";
-
-
-    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]);
-          }
-        }
-
+        $Section_boxes .="<td><input type='checkbox' value='1' name='CAT".$cat."' ".
+          "onclick='document.mainform.submit()'>&nbsp;".$cat."&nbsp;</td>";
       }
+      $i ++ ;
     }
+    $Section_boxes .= "</tr></table></div>";
 
-    /* Prepare search filter */
-    $search_str = preg_replace("/\\\\\*/",".*",normalizePreg($this->searchStrPKG));
-
+    /* Create List && fill it with packages
+     */
     $cnt = 0; 
-    foreach($pkgs as $pkg){
-      if($cnt > 200) {
-        msg_dialog::display(_("Error"), _("Search returned too many reults - showing the first 200 matches, only!"), ERROR_DIALOG);
-        break;
+    $this->reload();
+    $divlist = new divlist("PackageEntry");
+    $divlist->SetPluginMode();
+    $divlist->SetSummary(_("This list displays all assigned package names for this repository settings."));
+    $divlist->SetEntriesPerPage(0);
+    $divlist->SetHeader(array(array("string" => "&nbsp;", "attach" => "style='text-align:center;width:20px;'"),
+                              array("string" => "Name", "attach" => "style='width:180px;'"),
+                              array("string" => "Version", "attach"=>"style='width:240px;'" ),
+                              array("string" => "Description", "attach" => "style='border-right:0px;text-align:left;'")));
+
+    foreach($this->pkgs as $pkg){
+      if(in_array($pkg['PACKAGE'],$this->selected)){
+        $check = " checked ";
+      }else{
+        $check = "";
       }
-      if((preg_match("/^".$search_str."/i",$pkg[0]))||
-         (preg_match("/^".$search_str."/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;'")));
-        }
+  
+      $desc = " ";
+      if(isset($pkg['DESCRIPTION'])){
+        $desc = base64_decode($pkg['DESCRIPTION']);
       }
+
+      $chkbox = "<input type='checkbox' value='1' name='use_".base64_encode($pkg['PACKAGE'])."' ".$check.">
+        <input type='hidden' value='1' name='wasonpage_".base64_encode($pkg['PACKAGE'])."'>";
+      $divlist->AddEntry(array(array("string"=>$chkbox, "attach" => "style='text-align:center;width:20px;'"),
+            array("string"=>"<div style='width:178px; overflow:hidden;'>".$pkg['PACKAGE']."</div>", 
+              "attach" => "style='width:180px;' title='".$pkg['PACKAGE']." (".$pkg['VERSION'].")'"),
+            array("string"=>"<div style='width:238px; overflow:hidden;'>".htmlentities($pkg['VERSION'])."</div>",   
+              "attach" => "style='width:240px' title='".$pkg['PACKAGE']." (".$pkg['VERSION'].")'"),
+            array("string"=>htmlentities($desc), 
+              "attach" => "style='border-right:0px;text-align:left;'")));
     }
 
-    session::set('searchStrPKG',$this->searchStrPKG);
-    $smarty->assign("CHKS"          , $CHKS);
+    $smarty->assign("Section_boxes"          , $Section_boxes);
     $smarty->assign("searchStrPKG"  , $this->searchStrPKG);
     $smarty->assign("faihead"       , "");
     $smarty->assign("failist"       , $divlist->DrawList());
@@ -151,15 +138,18 @@ $CHKS = "<input type='hidden' value='chkchange' name='chkchange'><table summary=
     $smarty->assign("launchimage"   , get_template_path('images/launch.png'));
     $smarty->assign("alphabet"      , generate_alphabet());
     $smarty->assign("apply"         , apply_filter(TRUE));
-    $smarty->assign("search_image"  , get_template_path('images/search.png'));
+    $smarty->assign("search_image"  , get_template_path('images/lists/search.png'));
 
     $display.= $smarty->fetch(get_template_path('faiPackageEntry.tpl', TRUE));
     return($display);
   }
 
-  /* Save data to object */
+
+  /*! \brief  Save HTML POST data to object 
+   */
   function save_object()
   {
+    /* Keep sections selected */
     foreach($_POST as $name => $value){
       if(preg_match("/^wasonpage_/i",$name)){
         $name = preg_replace("/^wasonpage_/","",$name);
@@ -175,17 +165,43 @@ $CHKS = "<input type='hidden' value='chkchange' name='chkchange'><table summary=
       }
     }
 
+    /* Get Posted search filter 
+     */
+    if(isset($_POST['searchStrPKG'])){
+      $this->searchStrPKG = get_post("searchStrPKG");
+    }
+    if(isset($_GET['search'])){
+      $this->searchStrPKG= $_GET['search']."*";
+    }
+    if(empty($this->searchStrPKG)){
+      $this->searchStrPKG = "*";
+    }
+    session::set('searchStrPKG',$this->searchStrPKG);
   }
 
-  /* Check supplied data */
-  function check()
+
+  /*! \brief  Reload list of displayed packages 
+   */
+  function reload()
   {
-    /* Call common method to give check the hook */
-    $message= plugin::check();
-        
-    return ($message);
+    $this->pkgs = array(); 
+    $q          = new gosaSupportDaemon();
+    $filter     = preg_replace("/\*/","%",array($this->searchStrPKG));
+    $attrs      = array("distribution", "package","version", "section", "description", "timestamp");
+    $ret        = $q->FAI_get_packages($this->FAIdebianRelease,$attrs,$filter,0,200);
+    if($q->is_error()){
+      msg_dialog::display(_("Service infrastructure"),msgPool::siError($q->get_error()),ERROR_DIALOG);
+    }else{
+      foreach($ret as $attr){
+        $this->pkgs[$attr['PACKAGE']] = $attr;
+      }
+    }
   }
 
+
+  /*! \brief  Return all selected packages 
+      @return Array  All selected package names
+   */  
   function save()
   {
     return($this->selected);