/[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.1 - (hide annotations)
Fri Dec 6 04:11:58 2002 UTC (21 years, 9 months ago) by joko
Branch: MAIN
+ initial check-in - moved here from core-lib

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

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