/[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.4 - (show 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 <?
2 /*
3 ## -----------------------------------------------------------------
4 ## $Id: TableBrowser.php,v 1.3 2002/12/23 11:29:49 jonen Exp $
5 ## ------------------------------------------------------------------
6 ## $Log: TableBrowser.php,v $
7 ## 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 ## Revision 1.2 2002/12/18 22:38:49 jonen
12 ## + added (semi-, needs rework!) paging of case 'list'
13 ##
14 ## Revision 1.1 2002/12/06 04:11:58 joko
15 ## + initial check-in - moved here from core-lib
16 ##
17 ## 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 // TODO: if save state in session, each TableBrowser 'MUST' have
71 // its own session-var to support more than one TB at session
72 if (!session_is_registered('table_state')) {
73 session_register('table_state');
74 }
75
76 //print "table_state: " . Dumper($table_state) . "<br>";
77
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
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 //$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 $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 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 $counter++;
256 if ($paging[pagesize] == $counter) {
257 break;
258 }
259 }
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