Next fixes to db_pager usage/behaviour.
[fa-stable.git] / includes / ui / db_pager_view.inc
1 <?php
2 //--------------------------------------------------------------------------------------------------
3 function pager_link($link_text, $url)
4 {
5         global $path_to_root;
6         
7         $link = access_string($link_text);
8
9         $href = $path_to_root . $url;
10         return "<a href='$href'$link[1]>" . $link[0] . "</a>";
11 }
12
13 function navi_button($name, $value, $enabled=true, $icon = false) {
14         global $path_to_root;
15         return "<button ". ($enabled ? '':'disabled')
16                 ." class=\"navibutton\" type=\"submit\""
17             ." name=\"$name\"  id=\"$name\" value=\"$value\">"
18                 .($icon ? "<img src='$path_to_root/themes/".user_theme()."/images/".$icon."'>":'')
19                 ."<span>$value</span></button>\n";
20 }
21
22 function navi_button_cell($name, $value, $enabled=true, $align='left') {
23         label_cell(navi_button($name, $value, $enabled), "align='$align'");
24 }
25 //-----------------------------------------------------------------------------
26 //
27 //    Sql paged table view. Call this function inside form.
28 //
29 function display_db_pager(&$pager) {
30     global      $table_style, $use_popup_windows, $use_date_picker, $path_to_root;
31
32         $pager->select_records();
33
34         div_start("_{$pager->name}_span");
35     $headers = array();
36 //display_error(print_r($pager->columns,true));
37         foreach($pager->columns as $num_col=>$col) {
38         if (isset($col['head'])) {
39                         if (!isset($col['ord'])) 
40                                 $headers[] = $col['head'];
41                         else {
42                                 $icon = (($col['ord'] == 'desc') ? 'sort_desc.gif' : 
43                                         ($col['ord'] == 'asc' ? 'sort_asc.gif' : 'sort_none.gif'));
44                                 $headers[] = navi_button($pager->name.'_sort_'.$num_col, 
45                                         $col['head'], true, $icon);
46                         }
47                 }
48         }
49     /* show a table of records returned by the sql */
50     start_table("$table_style width=95%");
51     table_header($headers);
52
53         if($pager->header_fun) {        // if set header handler
54                 start_row("class='{$pager->header_class}'");
55                 $fun = $pager->header_fun;
56                 if (method_exists($pager, $fun)) { 
57                         $h = $pager->$fun($pager);
58                 } elseif (function_exists($fun)) {
59                         $h = $fun($pager);
60                 }
61                 
62                 foreach($h as $c) {      // draw header columns
63                         $pars = isset($c[1]) ? $c[1] : '';
64                         label_cell($c[0], $pars);
65                 }
66                 end_row();
67         }
68
69         $cc = 0; //row colour counter
70         foreach($pager->data as $line_no => $row) {     
71
72                 $marker = $pager->marker;
73             if ($marker && $marker($row)) 
74                 start_row("class='$pager->marker_class'");
75             else        
76                         alt_table_row_color($cc);
77             foreach ($pager->columns as $k=>$col) {
78                    $coltype = $col['type'];
79                    $cell = isset($col['name']) ? $row[$col['name']] : '';
80
81                    if (isset($col['fun'])) { // use data input function if defined
82                     $fun = $col['fun']; 
83                     if (method_exists($pager, $fun)) { 
84                                 $cell = $pager->$fun($row, $cell);
85                         } elseif (function_exists($fun)) {
86                                 $cell = $fun($row, $cell);
87                         } else
88                                 $cell = '';
89                    }
90
91                    switch($coltype) { // format column
92                     case 'date':
93                           label_cell(sql2date($cell), "align='center'"); break;
94                     case 'dstamp':      // time stamp displayed as date
95                           label_cell(sql2date(substr($cell, 0, 10)), "align='center'"); break;
96                     case 'tstamp':      // time stamp - FIX user format
97                           label_cell(sql2date(substr($cell, 0, 10)).
98                           ' '. substr($cell, 10), "align='center'"); break;
99                     case 'percent':
100                           percent_cell($cell); break;
101                     case 'amount':
102                           if ($cell=='')
103                                 label_cell('');
104                           else
105                                 amount_cell($cell, false); break;
106                     case 'qty':
107                           if ($cell=='')
108                                 label_cell('');
109                           else
110                                 qty_cell($cell, false, isset($col['dec']) ? $col['dec'] : null); break;
111                     case 'rate':
112                           rate_cell($cell);  break;
113                     default:
114 //                  case 'text':
115                           if (isset( $col['align']))
116                                   label_cell($cell, "align='" . $col['align'] . "'");
117                           else
118                                   label_cell($cell);
119                     case 'skip':        // column not displayed
120                   }
121           }
122             end_row();
123         }
124         //end of while loop
125
126         if($pager->footer_fun) {        // if set footer handler
127                 start_row("class='{$pager->footer_class}'");
128                 $fun = $pager->footer_fun;
129                 if (method_exists($pager, $fun)) { 
130                         $h = $pager->$fun($pager);
131                 } elseif (function_exists($fun)) {
132                         $h = $fun($pager);
133                 }
134                 
135                 foreach($h as $c) {      // draw footer columns
136                         $pars = isset($c[1]) ? $c[1] : '';
137                         label_cell($c[0], $pars);
138                 }
139                 end_row();
140         }
141
142         end_table();
143         start_table("$table_style align='center' class='navibar' width=95%");
144         start_row();
145          if($pager->rec_count) {
146                 $from = ($pager->curr_page-1)*$pager->page_len+1;
147                 $to = $from + $pager->page_len - 1;
148                 if ($to > $pager->rec_count)
149                   $to = $pager->rec_count;
150                 $all = $pager->rec_count;
151                 label_cell(sprintf( _('Records %d-%d of %d'), $from, $to, $all),
152                         "style='border:none'");
153                 echo "<td style='border:none'>";
154                 $but_pref = $pager->name.'_page_';
155             start_table("align='right'");
156                 start_row();
157                 echo navi_button_cell($but_pref.'first', _('First'), $pager->first_page, 'right');
158                 echo navi_button_cell($but_pref.'prev', _('Prev'), $pager->prev_page,'right');
159                 echo navi_button_cell($but_pref.'next', _('Next'), $pager->next_page,'right');
160                 echo navi_button_cell($but_pref.'last', _('Last'), $pager->last_page, 'right');
161                 end_row(); 
162                 end_table();    
163                 echo "</td>";
164         } else {
165           label_cell( _('No records'));
166         }
167         end_row();
168         end_table();
169
170    if (isset($pager->marker_txt))
171                 display_note($pager->marker_txt, 0, 1, "class='$pager->notice_class'");
172
173   div_end();
174   return true;
175 }
176
177
178 ?>