/[cvs]/nfo/php/libs/org.netfrag.flib/Site/Widget/TableBrowser.php
ViewVC logotype

Annotation of /nfo/php/libs/org.netfrag.flib/Site/Widget/TableBrowser.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.4 - (hide annotations)
Sat Nov 20 18:33:33 2004 UTC (19 years, 9 months ago) by jonen
Branch: MAIN
CVS Tags: HEAD
Changes since 1.3: +16 -5 lines
+ enabled session register of table_state
  (it seems like it DOES support more TB at session..or?..)
+ fixed paging

1 joko 1.1 <?
2     /*
3     ## -----------------------------------------------------------------
4 jonen 1.4 ## $Id: TableBrowser.php,v 1.3 2002/12/23 11:29:49 jonen Exp $
5 joko 1.1 ## ------------------------------------------------------------------
6 jonen 1.2 ## $Log: TableBrowser.php,v $
7 jonen 1.4 ## Revision 1.3 2002/12/23 11:29:49 jonen
8     ## + disabled save state to session var, cause this doesn't support
9     ## more than one TB paging settings
10     ##
11 jonen 1.3 ## Revision 1.2 2002/12/18 22:38:49 jonen
12     ## + added (semi-, needs rework!) paging of case 'list'
13     ##
14 jonen 1.2 ## Revision 1.1 2002/12/06 04:11:58 joko
15     ## + initial check-in - moved here from core-lib
16     ##
17 joko 1.1 ## Revision 1.9 2002/12/05 23:15:51 cvsjoko
18     ## + added handler for iterating through 'list's (very normal arrays)
19     ##
20     ## Revision 1.8 2002/10/09 00:43:48 cvsjoko
21     ## + bugfix: don't do errors if form-declaration does not exist
22     ##
23     ## Revision 1.7 2002/07/04 08:06:50 cvsmax
24     ## + integrate 'table-browser' to gui-layout and code
25     ## + create 'account_betsTB.page'
26     ## + create 'home_account.page'
27     ##
28     ## Revision 1.6 2002/07/03 14:09:51 cvsmax
29     ## + purged old code
30     ##
31     ## Revision 1.5 2002/06/30 01:43:09 cvsjoko
32     ## + modified sort-order (now: up => ascending, down => descending)
33     ## + isOnFirstPage, isOnLastPage
34     ##
35     ## Revision 1.4 2002/06/29 23:59:40 cvsjoko
36     ## + conversion to unix
37     ##
38     ## Revision 1.3 2002/06/29 23:55:32 cvsjoko
39     ## + column-sorting
40     ##
41     ## Revision 1.2 2002/06/29 08:31:55 cvsjoko
42     ## + paging
43     ##
44     ## Revision 1.1 2002/06/29 02:53:37 cvsjoko
45     ## no message
46     ##
47     ##
48     ## ------------------------------------------------------------------
49     */
50    
51     // to be used in two different cases:
52     // - iterating through db-resultsets
53     // - iterating through form-definitions
54    
55     class TableBrowser {
56    
57     // identification (for storing data to session-variable)
58     var $ident;
59    
60     // current status of TableEditor
61     var $status;
62    
63     // (temporary) buffer
64     var $buffer;
65    
66     function TableBrowser( $ident, $args = array() ) {
67    
68     // register session-var, if not yet done
69     global $table_state;
70 jonen 1.3 // TODO: if save state in session, each TableBrowser 'MUST' have
71     // its own session-var to support more than one TB at session
72 jonen 1.4 if (!session_is_registered('table_state')) {
73     session_register('table_state');
74     }
75    
76     //print "table_state: " . Dumper($table_state) . "<br>";
77 joko 1.1
78     // store ident to object-variable
79     $this->ident = $ident;
80     // store given args to object-variables
81     foreach($args as $key => $value) {
82     $this->$key = $value;
83     }
84     // mixin args to object-variables
85     if ($args[mixin]) {
86     foreach($args[mixin] as $key => $value) {
87     $this->$key = $value;
88     }
89     }
90    
91     // store paging-info to session
92     if ($this->reset || !$table_state[$this->ident][paging]) {
93     $table_state[$this->ident][paging] = $this->paging;
94     }
95     // store sorting-info to session
96     if ($this->reset || !$table_state[$this->ident][sorting]) {
97     $table_state[$this->ident][sorting] = $this->sorting;
98     }
99    
100     // modify paging-vars with control-vars
101     $control_paging = $_GET[t];
102     if ($control_paging) {
103     $pagenumber = $table_state[$this->ident][paging][page];
104     $pagenumber_max = $table_state[$this->ident][paging][pagemax];
105     switch ($control_paging) {
106     case 'pl':
107     if ($pagenumber > 0) { $pagenumber--; }
108     break;
109     case 'pr':
110     if ($pagenumber_max && ($pagenumber < $pagenumber_max) ) { $pagenumber++; }
111     break;
112     }
113     $table_state[$this->ident][paging][page] = $pagenumber;
114     }
115    
116     // modify sorting-vars with control-vars
117     $control_sorting_down = $_GET[sd];
118     $control_sorting_up = $_GET[su];
119     // TODO: multiple-column-sorting
120     if ($control_sorting_down) {
121     $table_state[$this->ident][sorting][column] = $control_sorting_down;
122     $table_state[$this->ident][sorting][way] = 'down';
123     }
124     if ($control_sorting_up) {
125     $table_state[$this->ident][sorting][column] = $control_sorting_up;
126     $table_state[$this->ident][sorting][way] = 'up';
127     }
128    
129     }
130    
131    
132     function getContent() {
133    
134     global $table_state;
135    
136     # get some args from object-vars
137     $callback_head = $this->head_callback;
138     $callback_row = $this->row_callback;
139    
140     $paging = $table_state[$this->ident][paging];
141     $sorting = $table_state[$this->ident][sorting];
142    
143     # check if result from mysql or result is abstract form definition
144     switch ($this->type) {
145     case 'dbtable':
146    
147     // get base sql-string
148     $sql = $this->sqlbase;
149    
150     // modify sql (filters)
151     if (count($this->filters)) {
152     foreach($this->filters as $field => $criteria) {
153     $sql .= " AND $field $criteria";
154     }
155     $sql .= $sql_add;
156     }
157    
158     // modify sql (sorting)
159     if ($sorting[enabled] && $sorting[column]) {
160     switch ($sorting[way]) {
161     case 'up':
162     $sorting_way_sql = 'ASC';
163     break;
164     case 'down':
165     $sorting_way_sql = 'DESC';
166     break;
167     }
168     $sql_add = " ORDER BY $sorting[column] $sorting_way_sql";
169     $sql .= $sql_add;
170     }
171    
172     // modify sql (paging)
173     if ($paging[enabled]) {
174     // get count of rows
175     $res = send_sql($sql);
176     // store maxpages
177     //$table_state[$this->ident][paging][pagemax] = (mysql_num_rows($res) / $this->paging[pagesize]) - 1;
178     $table_state[$this->ident][paging][pagemax] = round(mysql_num_rows($res) / $this->paging[pagesize]) - 1;
179     $sql_add = " LIMIT " . $paging[page] * $paging[pagesize] . ", " . $paging[pagesize] * 1;
180     $sql .= $sql_add;
181     }
182    
183     // header
184     if ($this->sorting[enabled]) {
185     for ($i = 0; $i <= count($this->fields); $i++) {
186     $key = $this->fields[$i];
187     $row[$key] = $this->captions[$i];
188     $sort[$key][up][urlpart] = $this->getLinkPart('SortUp', $key);
189     $sort[$key][down][urlpart] = $this->getLinkPart('SortDown', $key);
190     }
191     $this->buffer .= $callback_head($row, $sort) . "\n";
192     }
193    
194     // issue sql-command
195     //print $sql . "<br>";
196     $res = send_sql($sql);
197     // iterate through database-result
198     while($row = mysql_fetch_array($res, MYSQL_ASSOC)) {
199     $this->buffer .= $callback_row($row) . "\n";
200     }
201     break;
202    
203     case 'form_def':
204     # iterate through form-definition
205     if (!is_array($this->handle)) {
206     // TODO: use $this->debug!
207     if ($this->debug) {
208     print "missing form definition<br>";
209     }
210     return;
211     }
212     reset($this->handle);
213     while($row = current($this->handle)) {
214     if (!$this->filters[keys] || in_array($row[title], $this->filters[keys])) {
215     $this->buffer .= $callback_row($row) . "\n";
216     }
217     next($this->handle);
218     }
219     break;
220    
221     case 'list':
222     # iterate through form-definition
223     if (!is_array($this->handle)) {
224     // TODO: use $this->debug!
225     if ($this->debug) {
226     print "missing handle!<br>";
227     }
228     return;
229     }
230     reset($this->handle);
231 jonen 1.2
232     // modify sql (paging)
233     if ($paging[enabled]) {
234     // get count of rows
235     // store maxpages
236     //$table_state[$this->ident][paging][pagemax] = (mysql_num_rows($res) / $this->paging[pagesize]) - 1;
237 jonen 1.4 //$table_state[$this->ident][paging][pagemax] = round(count($this->handle) / $this->paging[pagesize]) - 1;
238     if(round(count($this->handle) / $this->paging[pagesize]) > count($this->handle) / $this->paging[pagesize]) {
239     $table_state[$this->ident][paging][pagemax] = round(count($this->handle) / $this->paging[pagesize]) -1;
240     } else {
241     $table_state[$this->ident][paging][pagemax] = round(count($this->handle) / $this->paging[pagesize]);
242     }
243 jonen 1.2 $idx_start = $paging[page] * $paging[pagesize];
244     for ($i = $idx_start; $i > 0; $i--) {
245     next($this->handle);
246     }
247     }
248    
249     $counter = 0;
250 joko 1.1 while($row = current($this->handle)) {
251     if (!$this->filters[keys] || in_array($row[title], $this->filters[keys])) {
252     $this->buffer .= $callback_row($row) . "\n";
253     }
254     next($this->handle);
255 jonen 1.2 $counter++;
256     if ($paging[pagesize] == $counter) {
257     break;
258     }
259 joko 1.1 }
260     break;
261    
262     }
263    
264     return $this->buffer;
265     }
266    
267     function getLinkPart($key, $arg = '') {
268     switch($key) {
269     case 'PageLeft':
270     return '&t=pl';
271     break;
272     case 'PageRight':
273     return '&t=pr';
274     break;
275     case 'SortDown':
276     return '&sd=' . $arg;
277     break;
278     case 'SortUp':
279     return '&su=' . $arg;
280     break;
281     }
282     }
283    
284     function needsPagingControl() {
285     global $table_state;
286     $paging = $table_state[$this->ident][paging];
287     return $paging[enabled];
288     }
289    
290     function isOnFirstPage() {
291     global $table_state;
292     //print "p: " . $table_state[$this->ident][paging][page] . "<br>";
293     return ($table_state[$this->ident][paging][page] == 0);
294     }
295    
296     function isOnLastPage() {
297     global $table_state;
298     //print "p: " . $table_state[$this->ident][paging][page] . "<br>";
299     //print "pm: " . $table_state[$this->ident][paging][pagemax] . "<br>";
300     return ($table_state[$this->ident][paging][page] == $table_state[$this->ident][paging][pagemax]);
301     }
302    
303     }
304    
305     ?>

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed