diff --git a/gosa-plugins/fai/admin/fai/class_faiPackageEntry.inc b/gosa-plugins/fai/admin/fai/class_faiPackageEntry.inc
index c72eea51e0c45d43bbaead91ea8ad63c031d50cc..f86f89a96aff64eefcd72d3697101ef4e5c5789e 100644 (file)
<?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 */
$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" => " ", "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()'> ".$cat." </td>";
+ $Section_boxes .="<td><input type='checkbox' value='1' name='CAT".$cat."' checked ".
+ "onclick='document.mainform.submit()'> ".$cat." </td>";
}else{
- $CHKS .="<td><input type='checkbox' value='1' name='CAT".$cat."' onclick='document.mainform.submit()'> ".$cat." </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()'> ".$cat." </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" => " ", "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);