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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.3 - (show annotations)
Mon Dec 23 11:29:49 2002 UTC (21 years, 9 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 <?
2 /*
3 ## -----------------------------------------------------------------
4 ## $Id: TableBrowser.php,v 1.2 2002/12/18 22:38:49 jonen Exp $
5 ## ------------------------------------------------------------------
6 ## $Log: TableBrowser.php,v $
7 ## Revision 1.2 2002/12/18 22:38:49 jonen
8 ## + added (semi-, needs rework!) paging of case 'list'
9 ##
10 ## Revision 1.1 2002/12/06 04:11:58 joko
11 ## + initial check-in - moved here from core-lib
12 ##
13 ## 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 // 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
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
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 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 $counter++;
245 if ($paging[pagesize] == $counter) {
246 break;
247 }
248 }
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