/[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.3 - (hide annotations)
Mon Dec 23 11:29:49 2002 UTC (21 years, 8 months ago) by jonen
Branch: MAIN
Changes since 1.2: +9 -4 lines
+ disabled save state to session var, cause this doesn't support
   more than one TB paging settings

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

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