/[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.2 - (hide annotations)
Wed Dec 18 22:38:49 2002 UTC (21 years, 9 months ago) by jonen
Branch: MAIN
Changes since 1.1: +23 -2 lines
+ added (semi-, needs rework!) paging of case 'list'

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

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