index 09cdc47f852e714cacfc4e82248e3b1d30e2be9f..8de6494ce09d4bcac183b61632881e280edefa25 100644 (file)
\sa ObjectList
*/
-class ObjectListViewport {
+class ObjectListViewport implements GOsaGuiElement {
+
+ /* Internal variable for color alternation */
+ protected $colorAlternator= 0;
- /* Dummy here ----> */
private $headline;
private $footer;
private $entryFormat;
+
+ /* Dummy here ----> */
private $attributes= array('cn', '_icon', '_actions', 'dn');
/* <---- Dummy here */
+ private $displayHeaderFlag= TRUE;
+ private $displayFooterFlag= TRUE;
+ private $numberOfCols= 0;
+
/*!
\brief Container for objects
*/
private $objects;
+ /*!
+ \brief Switch to handle multiselect or not
+ */
+ private $multiselect;
+ /*! \brief ID used to identify objects of same list */
+ private $id = "";
+
+
/*! \brief ObjectListViewport constructor
The ObjectListViewport class renders/handles the ObjectList defined by $config.
\param config Config section that is used to configure this ObjectListViewport
*/
- public function __construct($config){
+ public function __construct($config, $multiselect= TRUE, $displayHeader= TRUE, $displayFooter= FALSE){
+
+ /* Transfer initialization values */
+ $this->displayFooterFlag= $displayFooter;
+ $this->displayHeaderFlag= $displayHeader;
+ $this->multiselect= $multiselect;
- /* Dummy here */
+ /* Load list configuration from ConfigManager */
$cr= Registry::getInstance("ConfigManager");
$cr->setSection($config);
- $this->headline= $cr->getValue("headline");
+ $this->parseHeadline($cr->getValue("headline"));
$this->footer= $cr->getValue("footer");
$this->entryFormat= $cr->getValue("entryFormat");
/* Load and instanciate classes, extract filter, icons, view hooks, etc. */
$this->objects= new ObjectList($config);
+
+ /* generate an unique id */
+ $this->id= uniqid();
}
+
/*! \brief Handles _POST / _GET events
Processes the list of registered plugins to do their eventHandler and adapt
}
- /*! \brief Renders headline into a string
+ /*! \brief Processes post events
- Gets the headline description from the ObjectList object and renders it.
+ Processes all post events and acts as needed.
- \return HTML rendered headline
+ \return bool for if changes are present or not
*/
- private function renderHeadline(){
- # Dummy implementation. Use pre-defined headline.
- $buffer= $this->headline."\n";
+ public function process(){
- #TODO: Make $buffer a proper HTML table output
- return $buffer;
+ /* TODO: process input */
+ return FALSE;
}
- /*! \brief Renders footer into a string
-
- Gets the footer description from the ObjectList object and renders it.
-
- \return HTML rendered footer
- */
- private function renderFooter(){
- # Dummy implementation. Use pre-defined footer.
- $buffer= "|".$this->footer."|";
-
- #TODO: Make $buffer a proper HTML table output
- return $buffer."|\n";
+#/*! \brief Renders headline into a string
+#
+# Gets the headline description from the ObjectList object and renders it.
+#
+# \return HTML rendered headline
+# */
+#private function renderHeadline(){
+# $tpl =" <tr>
+# <td class='ObjectListViewport_TD_Header' id='ObjectListViewport_TD_Header_".$this->id."'>
+# <table class='ObjectListViewport_Header_Table' id='ObjectListViewport_Header_Table_".$this->id."'>
+# <tr>
+# {content}
+# </tr>
+# </table>
+# </td>
+# </tr>";
+# $buffer ="";
+# foreach($this->headline as $key => $value){
+# $buffer .= "<td class='ObjectListViewport_Header_Cell' style='".$value['style']."'>".$value['name']."</td>\n";
+# }
+# return(preg_replace("/\{content\}/", $buffer,$tpl));
+#}
+
+
+#/*! \brief Renders footer into a string
+#
+# Gets the footer description from the ObjectList object and renders it.
+#
+# \return HTML rendered footer
+# */
+#private function renderFooter(){
+# $buffer ="<tr>
+# <td class='ObjectListViewport_TD_Footer' id='ObjectListViewport_TD_Footer_".$this->id."'>
+# <table class='ObjectListViewport_Footer_Table'>
+# <tr>
+# <td class='ObjectListViewport_Footer_Cell' colspan='".count($this->headline)."'>".$this->footer."</td>
+# </tr>
+# </table>
+# </td>
+# </tr>";
+# return $buffer;
+#}
+
+
+ /* TODO: replace this -> not our task */
+ private function getEntryIcon($entry,$alt = ""){
+ return("<img src='images/".$entry['_icon']."' alt='".$alt."' class='center'>");
}
/*! \brief Renders entries from the ObjectList iterator into a string
-
Gets the entry descriptions from the ObjectList object and renders them.
-
\return HTML rendered list entries
*/
private function renderEntry($entry){
if (!isset($entry[$attribute])){
throw new ObjectListViewportException(sprintf(_("Can't locate attribute '%s' to replace in entry!"), $attribute));
} else {
- $buffer= preg_replace('/\{'.$attribute.'\}/', $entry[$attribute],$buffer);
+
+ if(preg_match("/_icon/i",$attribute)){
+ $buffer= preg_replace('/\{'.$attribute.'\}/', $this->getEntryIcon($entry),$buffer);
+ }else{
+ $buffer= preg_replace('/\{'.$attribute.'\}/', $entry[$attribute],$buffer);
+ }
}
}
foreach ($matches as $match){
$filterName= preg_replace('/,.+$/', '', $match[1]);
$filterParameter= preg_replace('/^[^,]+,/', '', $match[1]);
- $buffer= preg_replace('/\{_filter\('.$match[1].'\)\}/', $this->applyEntryFilter($filterName, $filterParameter), $buffer);
+ $buffer= preg_replace('/\{_filter\('.normalizePreg($match[1]).'\)\}/', $this->applyEntryFilter($filterName, $filterParameter), $buffer);
}
#TODO: Make $buffer a proper HTML table output
+ $tmp = split("\|",trim($buffer,"|"));
+
+ /* define entry template */
+ $tpl = "<td class='ObjectListViewport_Entry_Cell' style='{style_1}'>
+ <div style='{style_2}'>
+ {content}
+ </div>
+ </td>
+ ";
+ /* Template vriables to replace */
+ $attrs = array("/\{style_1\}/","/\{style_2\}/","/\{content\}/");
+
+ /* Append template for each given col */
+ $buffer ="";
+ for($i= 0; $i < $this->numberOfCols; $i++){
+
+ /* If current entry is the last to appen, then skip adding styles */
+ if($i == ($this->numberOfCols-1)){
+ $buffer.= preg_replace( $attrs,
+ array($this->headline[$i]['style'],"width:100%;overflow:hidden;",$tmp[$i]),$tpl);
+ }else{
+ $buffer.= preg_replace( $attrs,
+ array($this->headline[$i]['style'],"width:100%;overflow:hidden;".$this->headline[$i]['style'],$tmp[$i]),$tpl);
+ }
+ }
- return $buffer."\n";
+ /* Add class depending on given id, to alternate background colors */
+ if($this->colorAlternator++ & 1){
+ $a = "class='ObjectListViewport_Entry_Row1'";
+ }else{
+ $a = "class='ObjectListViewport_Entry_Row2'";
+ }
+
+ return "<tr ".$a.">\n".$buffer."</tr>\n";
}
\return HTML rendered list
*/
public function render() {
- /* Generate fixed headline */
- $buffer= $this->renderHeadline();
/* Apply current filter */
+ $entries = "";
$objects= new ObjectListFilterIterator($this->objects->getIterator());
foreach ($objects as $value){
- $buffer.= $this->renderEntry($value);
+ $entries .= $this->renderEntry($value);
}
- /* Generate footer */
- $buffer.= $this->renderFooter();
+ $smarty = get_smarty();
+ $smarty->assign("OLV_Entries",$objects);
+ $smarty->assign("OLV_List_Id",$this->id);
- return ($buffer);
+ /* Footer variables */
+ $smarty->assign("OLV_Footer_Enabled",$this->displayFooterFlag);
+ $smarty->assign("OLV_Footer_Message",$this->footer);
+ $smarty->assign("OLV_Num_Cols",$this->numberOfCols);
+
+ /* Assign Headline values */
+ $smarty->assign("OLV_Header_Enabled",$this->displayHeaderFlag);
+ $smarty->assign("OLV_Header",$this->headline);
+
+ return($smarty->fetch("ObjectListViewport.tpl"));
+ }
+
+
+ /*! \brief Parses the given headline format string
+
+ \return Array with cell properties (width, alignment,name)
+ */
+ private function parseHeadline($data)
+ {
+ /* Each cell definition is seperated by |
+ * split by and go through each definition
+ */
+ $this->headline= array();
+ $this->numberOfCols= 0;
+ $tmp= split("\|", trim($data, "|"));
+ $cell_formats= array();
+
+ foreach($tmp as $key => $dta){
+
+ $width= "";
+ $alignment= "";
+ $name= preg_replace("/\{[^\}]*+\}/", "", $dta);
+ $style= "";
+
+ /* Parse format string and detect width & alignment */
+ if(preg_match("/\{.*\}/", $dta)){
+ $format= preg_replace("/^[^\{]*+\{([^\}]*).*$/", "\\1", $dta);
+
+ /* Get aligment */
+ if(preg_match("/:/",$format)){
+ $al= preg_replace("/^[^:]*+:([a-z]*).*$/i", "\\1", $format);
+
+ if(preg_match("/T/i", $al)){
+ $alignment.= "top-";
+ $style.= "vertical-align: top;";
+ }
+ if(preg_match("/B/i", $al)){
+ $alignment.= "bottom-";
+ $style.= "vertical-align: bottom;";
+ }
+ if(preg_match("/R/i", $al)){
+ $alignment.= "right";
+ $style.= "text-align: right;";
+ }elseif(preg_match("/L/i", $al)){
+ $alignment.= "left";
+ $style.= "text-align: left;";
+ }elseif(preg_match("/C/i", $al) || preg_match("/M/i", $al) ){
+ $alignment.= "center";
+ $style.= "text-align: center;";
+ }
+ }
+
+ /* Get width */
+ $width = preg_replace("/^([^:]*).*$/","\\1", $format);
+ if(!empty($width)){
+ $style.= "width: ".$width.";";
+ }
+ }
+
+ $cell_formats[$key]= array("name" => $name, "width" => $width, "alignment" => $alignment, "style" => $style);
+ $this->numberOfCols++;
+ }
+ $this->headline= $cell_formats;
}
}