/[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.2 - (show 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 <?
2 /*
3 ## -----------------------------------------------------------------
4 ## $Id: TableBrowser.php,v 1.1 2002/12/06 04:11:58 joko Exp $
5 ## ------------------------------------------------------------------
6 ## $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 ## 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
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 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 $counter++;
240 if ($paging[pagesize] == $counter) {
241 break;
242 }
243 }
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