/[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.1 - (show 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 <?
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