From 3dbe968ccf5579f4de7e9689a421966e0d7cec82 Mon Sep 17 00:00:00 2001 From: hickert Date: Wed, 26 Apr 2006 12:01:53 +0000 Subject: [PATCH] Updated the Multiselect window class git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@3117 594d385d-05f5-0310-b6e9-bd551577e9d8 --- ihtml/themes/default/MultiSelectWindow.tpl | 43 ++++- include/class_MultiSelectWindow.inc | 189 ++++++++++++++++++--- 2 files changed, 206 insertions(+), 26 deletions(-) diff --git a/ihtml/themes/default/MultiSelectWindow.tpl b/ihtml/themes/default/MultiSelectWindow.tpl index 1cfbad5cb..25672ee88 100644 --- a/ihtml/themes/default/MultiSelectWindow.tpl +++ b/ihtml/themes/default/MultiSelectWindow.tpl @@ -16,6 +16,42 @@ + {if $is_headpage} + +
+

+ [i]{t}Information{/t} +

+
+
+ {$Information} +
+
+
+

+ [F]{t}Filters{/t} +

+
+
+ {if $Display_alphabet} + + {$alphabet} +
+ {/if} + { if $CheckBoxes != ""} + + + + +
+ {$CheckBoxes} +
+ {/if} + {$regexes} + {$apply} +
+ + {else}

@@ -50,8 +86,11 @@ {$apply}

+ + {/if} +{if $Display_Save | $Display_Close}

 

@@ -64,7 +103,7 @@ {/if}

+{/if} - - + diff --git a/include/class_MultiSelectWindow.inc b/include/class_MultiSelectWindow.inc index 8c382d00d..ae286ca8f 100644 --- a/include/class_MultiSelectWindow.inc +++ b/include/class_MultiSelectWindow.inc @@ -19,92 +19,152 @@ class MultiSelectWindow{ var $array_Checkboxes = array(); var $array_Regexes = array(); - var $config = ""; + var $config = array(""); var $is_closed = false; var $is_saved = false; + var $is_headpage = false; // if true the design changes + + var $filterName = "Liste"; + function ClearElementsList() { $this->array_Elements = array(); } - function AddRegex($name,$string,$value,$conn) + /* Adds a regex input field to the current dialog */ + function AddRegex($name,$string,$value,$conn,$image="images/search.png") { $arr = array(); + + /* Check if the given input field name was already used + for this type of dialog */ + if(isset($_SESSION['MultiDialogFilters'][$this->filterName][$name])){ + $arr['value'] = $_SESSION['MultiDialogFilters'][$this->filterName][$name]; + $this->$name = $arr['value']; + }else{ + $arr['value'] = $value; + } + $arr['name'] = $name; $arr['string'] = $string; - $arr['value'] = $value; + $arr['image'] = $image; $arr['connAlpha'] = $conn; // Connect with alphabet select $this->array_Regexes[] = $arr; } - function MultiSelectWindow($config){ + /* Contrucktion */ + function MultiSelectWindow($config,$filterName) + { $this->config = $config; $this->SaveButtonString = _("Save"); $this->CloseButtonString = _("Close"); + $this->filterName = $filterName; } - function SetTitle($str){ + /* Enables the headpage mode, which changes the list look */ + function SetHeadpageMode() + { + $this->is_headpage = true; + } + + /* Sets the List internal name (not displayed anywhere) + it is used to identify every single list + */ + function SetTitle($str) + { $this->string_Title = $str; } - function SetListHeader($str){ + /* Set the list header string */ + function SetListHeader($str) + { $this->string_ListHeader = $str; } - function SetSummary($str){ + /* This sets the list description which is the first gray bar on top of the list */ + function SetSummary($str) + { $this->string_Summary = $str; } - function SetSaveButtonString($str){ + /* If the save button is enabled, you can change its caption with this function */ + function SetSaveButtonString($str) + { $this->SaveButtonString = $str; } - function SetCloseButtonString($str){ + /* If the close button is enabled, you can change its caption with this function */ + function SetCloseButtonString($str) + { $this->CloseButtonString = $str; } - function SetInformation($str){ + /* With this function you can change the text of the information box */ + function SetInformation($str)i + { $this->string_Information = $str; } - function EnableAplhabet($bool){ + /* Display the alphabet selection box*/ + function EnableAplhabet($bool) + { $this->bool_DisplayAlpahabet = $bool; } - function AddHeader($arr){ + /* Add additional header col */ + function AddHeader($arr) + { $this->array_Header[] = $arr; } - function AddElement($arr){ + /* add additional List element */ + function AddElement($arr) + { $this->array_Elements[] = $arr; } - function AddCheckBox($name,$value,$string,$default){ + /* Add a checkbox to the filter element, + the name specifies an existing class var to store the 'selection' */ + function AddCheckBox($name,$value,$string,$default) + { $arr = array(); + + /* Check if there was already a variable + for this dialog which we should use instead of the default*/ + if(isset($_SESSION['MultiDialogFilters'][$this->filterName][$name])){ + $arr['default'] = $_SESSION['MultiDialogFilters'][$this->filterName][$name]; + $this->$name = $arr['default']; + }else{ + $arr['default'] = $default; + } + $arr['name'] = $name; $arr['string'] = $string; $arr['value'] = $value; - $arr['default'] = $default; $this->array_Checkboxes[] = $arr; } + /* Returns true if the close button was pressed */ function isClosed() { return($this->is_closed); } + /* Enable the close button */ function EnableCloseButton($bool) { $this->bool_DisplayCloseButton = $bool; } + /* Enable the save button on the bottom of the list*/ function EnableSaveButton ($bool) { $this->bool_DisplaySaveButton = $bool; } + /* Draw the list with all list elements and filters */ function Draw() { $smarty = get_smarty(); @@ -134,9 +194,9 @@ class MultiSelectWindow{ $boxClick = " onClick='document.mainform.submit();' "; foreach($this->array_Checkboxes as $box){ if($box['default'] == true){ - $boxes .=" ".$box['string']."
"; + $boxes .=" ".$box['string']."
"; }else{ - $boxes .=" ".$box['string']."
"; + $boxes .=" ".$box['string']."
"; } } $smarty->assign("CheckBoxes", $boxes); @@ -173,12 +233,18 @@ class MultiSelectWindow{ $smarty->assign("DivList" , $divlist->DrawList()); - $smarty->assign("search_image", get_template_path('images/search.png')); - $smarty->assign("searchu_image", get_template_path('images/search_user.png')); - $smarty->assign("tree_image", get_template_path('images/tree.png')); - $smarty->assign("infoimage", get_template_path('images/info_small.png')); - $smarty->assign("launchimage", get_template_path('images/rocket.png')); - $smarty->assign("apply", apply_filter()); + + if($this->is_headpage){ + $smarty->assign("tree_image", get_template_path('images/tree.png')); + $smarty->assign("infoimage", get_template_path('images/info.png')); + $smarty->assign("launchimage", get_template_path('images/launch.png')); + $smarty->assign("apply", apply_filter()); + }else{ + $smarty->assign("tree_image", get_template_path('images/tree.png')); + $smarty->assign("infoimage", get_template_path('images/info_small.png')); + $smarty->assign("launchimage", get_template_path('images/rocket.png')); + $smarty->assign("apply", apply_filter()); + } /* Button handling */ $smarty->assign("SaveButtonString" ,$this->SaveButtonString); @@ -187,10 +253,14 @@ class MultiSelectWindow{ $smarty->assign("Display_Close", $this->bool_DisplayCloseButton); $smarty->assign("Display_Save" , $this->bool_DisplaySaveButton); + $smarty->assign("filterName" , $this->filterName); + $smarty->assign("is_headpage" , $this->is_headpage); + $display = $smarty->fetch(get_template_path("MultiSelectWindow.tpl")); return($display); } + /* Set the close var, which simulates the close button is pressed */ function Close() { $this->is_closed = true; @@ -201,9 +271,11 @@ class MultiSelectWindow{ $this->is_saved = true; } + /* Store all checkboxes/ regexes ... + Store data also into a session var, to keep the checkboxes check after reload */ function save_object() { - if(isset($_POST['MultiSelectWindow'])){ + if(isset($_POST['MultiSelectWindow'.$this->filterName])){ /* Check posts from checkboxes */ @@ -215,12 +287,15 @@ class MultiSelectWindow{ $this->array_Checkboxes[$key]['default'] = false; $this->$box['name'] = false; } + /* Save settings in out session */ + $_SESSION['MultiDialogFilters'][$this->filterName][$box['name']] = $this->$box['name']; } /* Check regex posts */ foreach($this->array_Regexes as $key => $box){ $this->array_Regexes[$key]['value'] = $_POST[$box['name']]; $this->$box['name'] = $_POST[$box['name']]; + $_SESSION['MultiDialogFilters'][$this->filterName][$box['name']] = $this->$box['name']; } /* call close/save if buttons are pressed */ @@ -249,6 +324,72 @@ class MultiSelectWindow{ } } + + /* this function adds the sub-departments of the current tree to the list */ + function AddDepartments($base = false) + { + + #FIXME the num of header cols must match the num of entry cols . + + /* check for a valid base */ + if(!$base){ + if(!isset($_SESSION['CurrentMainBase'])){ + $_SESSION['CurrentMainBase'] = $this->config->current['BASE']; + } + $base = $_SESSION['CurrentMainBase']; + } + + /* Create ldap obj and switch into base*/ + $ldap = $this->config->get_ldap_link(); + $ldap->cd($base); + + /* reset current deps */ + $this->departments = array(); + + /* Get all departments within this subtree */ + $deps= get_list("(&(|(ou=*)(description=*))(objectClass=gosaDepartment))", $this->ui->subtreeACL, + $base, array("ou", "description"), GL_SIZELIMIT | GL_CONVERT); + + /* Edit delete link for system types + */ + $linkopen = "%s"; + + /* Create an array with all visible (in the list) departments */ + $departments = array(); + foreach($deps as $value){ + if(isset($value['description'][0])){ + $this->departments[$value['dn']]= get_sub_department($value['dn'])." - [".$value["description"][0]."]"; + }else{ + $this->departments[$value['dn']]= get_sub_department($value['dn']); + } + } + natcasesort($this->departments); + + /* Add deps to this dialog object list */ + foreach($this->departments as $key=> $val){ + /* Add missing entries ... */ + if(!isset($this->config->departments[trim($key)])){ + $this->config->departments[trim($key)]=""; + } + + /* check if this department contains sub-departments + Display different image in this case + */ + $non_empty=""; + $nkey= normalizePreg($key); + foreach($this->config->departments as $keyd=>$vald ){ + if(preg_match("/$nkey\/.*/",$keyd)){ + $non_empty="full"; + } + } + + /* Add to divlist */ + $field1 = array("string" => "department", "attach" => "style='text-align:center;width:20px;'"); + $field2 = array("string" => sprintf($linkopen,base64_encode($key),$val), "attach" => "style=''"); + $field3 = array("string" => " ", "attach" => "style='width:60px;border-right:0px;text-align:right;'"); + $this->AddElement(array($field1,$field2,$field3)); + } + } } ?> -- 2.30.2