Added optional dbpager header and footer
authorJanusz Dobrowolski <janusz@frontaccounting.eu>
Sun, 16 Nov 2008 19:39:34 +0000 (19:39 +0000)
committerJanusz Dobrowolski <janusz@frontaccounting.eu>
Sun, 16 Nov 2008 19:39:34 +0000 (19:39 +0000)
includes/db_pager.inc
includes/ui/db_pager_view.inc

index c407675dedfb1f97142afe389a8c50cbd51b3740..90f61ec347908c6a2aadd039e8799f980273b86d 100644 (file)
@@ -16,7 +16,10 @@ class db_pager {
        var $marker_txt;        
        var $marker_class;
        var $notice_class;
-                       
+       var $header_fun;        // additional row between title and body
+       var $header_class;
+       var $footer_fun;
+       var $footer_class;
        var $data = array();
 
        var $curr_page,
@@ -35,7 +38,8 @@ class db_pager {
                $group;
        var     $extra_where;
        
-       var $ready = false;
+       var $ready = false; // this var is false after change in sql before first
+                                               // and before first query.
 
        //  db_pager constructor
        //  accepts $sql like 'SELECT .... FROM .... [WHERE ...] [GROUP ...]'
@@ -237,7 +241,7 @@ class db_pager {
                $group = $this->group;          
 
                if(count($this->extra_where)) {
-                   $wherw .= ($where=='' ? '' : ' AND ')
+                   $where .= ($where=='' ? '' : ' AND ')
                                .implode( $this->extra_where, ' AND ');
                }
                if ($where) $where = " WHERE($where)";
@@ -321,6 +325,24 @@ class db_pager {
                $this->marker_class = $markercl;
                $this->notice_class = $msgclass;
        }
+       //
+       //      Set handler to display additional row between titles and pager body.
+       //      Return array of column contents.
+       //
+       function set_header($func, $headercl='inquirybg')
+       {
+               $this->header_fun = $func;
+               $this->header_class = $headercl;
+       }
+       //
+       //      Set handler to display additional row between pager body and navibar.
+       //      Return array of column contents.
+       //
+       function set_footer($func, $footercl='inquirybg')
+       {
+               $this->footer_fun = $func;
+               $this->footer_class = $footercl;
+       }
 };
 //-----------------------------------------------------------------------------
 //     Creates new db_pager $_SESSION object on first page call.
@@ -350,17 +372,15 @@ class db_pager {
 
 function &new_db_pager($name, $sql, $coldef, $page_len = 0)  {
 
-    if (isset($name) && isset($_SESSION[$name])) {
-                // kill old pager if any on first page call
-           if ($_SERVER['REQUEST_METHOD'] == 'GET')
-                       unset($_SESSION[$name]);
-           else
-               return $_SESSION[$name];
-    }
-    $ret =& new db_pager($sql, $name, $page_len);
-    $ret->set_columns($coldef);
+    if ($_SERVER['REQUEST_METHOD'] == 'GET')
+               unset($_SESSION[$name]); // kill old pager if any exists on first page call
 
-    if (isset($name)) $_SESSION[$name] = &$ret;
+       if (!isset($_SESSION[$name]))
+           $_SESSION[$name] =& new db_pager($sql, $name, $page_len);
+       
+       $ret = &$_SESSION[$name];
+    $ret->set_sql($sql);
+    $ret->set_columns($coldef);
 
     return $ret;
 }
index e9990815f5d22e78d464a551d186dda6827c45f1..67b3ea4760d0ff4b63362fdfdf14bb8f14e18142 100644 (file)
@@ -50,6 +50,22 @@ function display_db_pager(&$pager) {
     start_table("$table_style width=95%");
     table_header($headers);
 
+       if($pager->header_fun) {        // if set header handler
+               start_row("class='{$pager->header_class}'");
+               $fun = $pager->header_fun;
+               if (method_exists($pager, $fun)) { 
+                       $h = $pager->$fun($pager);
+               } elseif (function_exists($fun)) {
+                       $h = $fun($pager);
+               }
+               
+               foreach($h as $c) {      // draw header columns
+                       $pars = isset($c[1]) ? $c[1] : '';
+                       label_cell($c[0], $pars);
+               }
+               end_row();
+       }
+
        $cc = 0; //row colour counter
        foreach($pager->data as $line_no => $row) {     
 
@@ -83,7 +99,10 @@ function display_db_pager(&$pager) {
                    case 'percent':
                          percent_cell($cell); break;
                    case 'amount':
-                         amount_cell($cell, false); break;
+                         if ($cell=='')
+                               label_cell('');
+                         else
+                               amount_cell($cell, false); break;
                    case 'qty':
                          qty_cell($cell); break;
                    case 'rate':
@@ -100,6 +119,23 @@ function display_db_pager(&$pager) {
            end_row();
        }
        //end of while loop
+
+       if($pager->footer_fun) {        // if set footer handler
+               start_row("class='{$pager->footer_class}'");
+               $fun = $pager->footer_fun;
+               if (method_exists($pager, $fun)) { 
+                       $h = $pager->$fun($pager);
+               } elseif (function_exists($fun)) {
+                       $h = $fun($pager);
+               }
+               
+               foreach($h as $c) {      // draw footer columns
+                       $pars = isset($c[1]) ? $c[1] : '';
+                       label_cell($c[0], $pars);
+               }
+               end_row();
+       }
+
        end_table();
        start_table("$table_style align='center' class='navibar' width=95%");
        start_row();