Code

Added coloring of rows
[gosa.git] / include / class_ObjectListViewport.inc
index 6f070214b3fbb88ffac2a47a7265c7b95c90f96c..9f3aec6e795145ea0b18d229af6b24231b71345d 100644 (file)
@@ -30,8 +30,11 @@ class ObjectListViewport {
   private $footer;
   private $entryFormat;
   private $attributes= array('cn', '_icon', '_actions', 'dn');
-
+  
   /* <---- Dummy here */
+  private $b_displayHeader    = TRUE;
+  private $b_displayFooter    = TRUE;
+  private $i_numberOfCols     = 0;
 
   /*!
     \brief Container for objects
@@ -45,7 +48,9 @@ class ObjectListViewport {
    */
        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.
@@ -58,12 +63,15 @@ class ObjectListViewport {
     /* Dummy here */
     $cr= Registry::getInstance("ConfigManager");
     $cr->setSection($config);
-    $this->headline= $this->parseHeadline($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 = preg_replace("/[^0-9]/","",microtime());
   }
 
        /*! \brief Handles _POST / _GET events
@@ -84,12 +92,20 @@ class ObjectListViewport {
       \return HTML rendered headline
         */
   private function renderHeadline(){
-    $buffer ="<tr>\n";
+    $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 style='".$value['style']."'>".$value['name']."</td>\n";
+      $buffer .= "<td class='ObjectListViewport_Header_Cell' style='".$value['style']."'>".$value['name']."</td>\n";
     }
-    $buffer.="</tr>\n";
-    return $buffer;
+    return(preg_replace("/\{content\}/", $buffer,$tpl));
   }
 
 
@@ -100,10 +116,15 @@ class ObjectListViewport {
       \return HTML rendered footer
         */
   private function renderFooter(){
-
-    $buffer ="<tr>\n";
-    $buffer .= "<td colspan='".count($this->headline)."'>".$this->footer."</td>\n";
-    $buffer.="</tr>\n";
+    $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;
   }
 
@@ -117,7 +138,7 @@ class ObjectListViewport {
            Gets the entry descriptions from the ObjectList object and renders them.
       \return HTML rendered list entries
         */
-  private function renderEntry($entry){
+  private function renderEntry($entry,$entry_id){
 
     /* Copy template */
     $buffer= $this->entryFormat;
@@ -145,16 +166,39 @@ class ObjectListViewport {
     }
 
     #TODO: Make $buffer a proper HTML table output
-
     $tmp = split("\|",trim($buffer,"|"));  
 
-    $buffer ="<tr>\n";
-    foreach($tmp as $key => $value){
-      $buffer .= "<td class='ObjectListViewportEntry' style='".$this->headline[$key]['style']."'>".$value."</td>\n";
+    /* 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->i_numberOfCols ; $i ++){
+
+      /* If current entry is the last to appen, then skip adding styles */
+      if($i == ($this->i_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);
+      }
+    }
+
+    if($entry_id % 2){
+      $a = "class='ObjectListViewport_Entry_Row1'";
+    }else{
+      $a = "class='ObjectListViewport_Entry_Row2'";
     }
-    $buffer.="</tr>\n";
 
-    return $buffer."\n";
+    return "<tr ".$a.">".$buffer."</tr>\n";
   }
 
 
@@ -178,21 +222,46 @@ class ObjectListViewport {
         */
   public function render() {
 
-    /* Generate fixed headline */
-    $buffer= $this->renderHeadline();
+    $header = $footer = "";
+    if($this->b_displayHeader){
+      $header = $this->renderHeadline();
+    }
+    if($this->b_displayFooter){
+      $footer = $this->renderFooter();
+    }
 
     /* Apply current filter */
+    $entries = "";
     $objects= new ObjectListFilterIterator($this->objects->getIterator());
-    
-    foreach ($objects as $value){
-      $buffer.= $this->renderEntry($value);
+    foreach ($objects as $key => $value){
+      $entries .= $this->renderEntry($value,$key);
     }
 
-    /* Generate footer */
-    $buffer.= $this->renderFooter();
-
-
-    return ("<table class='ObjectListViewportTable'>".$buffer."</table>");
+    /* Generate fixed headline */
+    $buffer = "
+    <table class='ObjectListViewport' id='ObjectListViewport".$this->id."' cellspacing=0 cellpadding=0>
+      <tr>
+        <td>
+              <table class='ObjectListViewport_Table' id='ObjectListViewport_Table".$this->id."' cellpadding=0 cellspacing=0 >
+                ".$header."
+                <tr>
+                  <td class='ObjectListViewport_TD_Entries' id='ObjectListViewport_TD_Entries".$this->id."'>
+                    <div class='ObjectListViewport_Entry_Cover' id='ObjectListViewport_Entry_Cover".$this->id."'> 
+                      <table class='ObjectListViewport_Entry_Table' id='ObjectListViewport_Entry_Table".$this->id."'>
+                        ".$entries."
+                      </table> 
+                    </div>
+                  </td>
+                </tr>
+                ".$footer."
+              </table>
+
+        </td>
+      </tr>
+    </table>
+";
+
+    return ($buffer);
   }
 
 
@@ -205,7 +274,9 @@ class ObjectListViewport {
     /* Each cell definition is seperated by | 
      *  split by and go through each definition
      */
-    $tmp = split("\|",trim($data,"|"));  
+    $this->headline = array();
+    $this->i_numberOfCols = 0;
+    $tmp = split("\|",trim($data,"|")); 
     $cell_formats = array();
     foreach($tmp as $key => $data){
 
@@ -245,16 +316,22 @@ class ObjectListViewport {
         /* Get width */
         $s_width = preg_replace("/^([^:]*).*$/","\\1",$s_format);
         if(!empty($s_width)){
-          $s_style = "width: ".$s_width.";";
+          $s_style.= "width: ".$s_width.";";
         }
-        
-        $cell_formats[$key] = array("name" => $s_name, "width" => $s_width, "alignment" => $s_alignment,"style" => $s_style);
       }
+      $cell_formats[$key] = array("name" => $s_name, "width" => $s_width, "alignment" => $s_alignment,"style" => $s_style);
+      $this->i_numberOfCols ++;
     }
-    return($cell_formats);
+    $this->headline = $cell_formats;
   }
 
 
+  public function enableFooter($bool = TRUE){
+    $this->b_displayFooter = $bool;
+  }
+  public function enableHeader($bool = TRUE){
+    $this->b_displayHeader = $bool;
+  }
   
 }