1: <?php
  2:   3:   4:   5:   6:   7:   8:   9:  10:  11:  12:  13:  14: 
 15: 
 16: defined('CON_FRAMEWORK') || die('Illegal call: Missing framework initialization - request aborted.');
 17: 
 18:  19:  20:  21:  22:  23: 
 24: class cGuiScrollList {
 25: 
 26:      27:  28:  29: 
 30:     public $data = Array();
 31: 
 32:      33:  34:  35: 
 36:     public $header = Array();
 37: 
 38:      39:  40:  41: 
 42:     public $resultsPerPage;
 43: 
 44:      45:  46:  47: 
 48:     public $listStart;
 49: 
 50:      51:  52:  53: 
 54:     public $sortable;
 55: 
 56:      57:  58:  59: 
 60:     public $sortlink;
 61: 
 62:      63:  64: 
 65:     public $objTable;
 66: 
 67:      68:  69: 
 70:     public $objHeaderRow;
 71: 
 72:      73:  74: 
 75:     public $objHeaderItem;
 76: 
 77:      78:  79: 
 80:     public $objRow;
 81: 
 82:      83:  84: 
 85:     public $objItem;
 86: 
 87:      88:  89:  90: 
 91: 
 92:      93:  94:  95:  96:  97: 
 98:     public function __construct($defaultstyle = true, $action = "") {
 99:         global $cfg, $area, $frame;
100: 
101:         $this->resultsPerPage = 0;
102:         $this->listStart = 1;
103:         $this->sortable = false;
104: 
105:         $this->objTable = new cHTMLTable();
106:         if ($defaultstyle == true) {
107:             $this->objTable->setClass("generic");
108:             $this->objTable->updateAttributes(array(
109:                 "cellpadding" => "2"
110:             ));
111:         }
112: 
113:         $this->objHeaderRow = new cHTMLTableRow();
114: 
115:         $this->objHeaderItem = new cHTMLTableHead();
116: 
117:         $this->objRow = new cHTMLTableRow();
118: 
119:         $this->objItem = new cHTMLTableData();
120: 
121:         $this->sortlink = new cHTMLLink();
122:         $this->sortlink->setStyle("color: #666666;");
123:         $this->sortlink->setCLink($area, $frame, $action);
124:     }
125: 
126:     127: 128: 129: 130: 131: 132: 
133:     public function setSortable($key, $sortable) {
134:         $this->sortable[$key] = $sortable;
135:     }
136: 
137:     138: 139: 140: 141: 142: 143: 144: 
145:     public function setCustom($key, $custom) {
146:         $this->sortlink->setCustom($key, $custom);
147:     }
148: 
149:     150: 151: 152: 153: 
154:     public function onRenderRow($row) {
155:         $this->objRow->setStyle("white-space:nowrap;");
156:     }
157: 
158:     159: 160: 161: 162: 
163:     public function onRenderColumn($column) {
164:     }
165: 
166:     167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 
180:     public function setHeader() {
181:         $numargs = func_num_args();
182: 
183:         for ($i = 0; $i < $numargs; $i++) {
184:             $this->header[$i] = func_get_arg($i);
185:         }
186:     }
187: 
188:     189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 
203:     public function setData($index) {
204:         $numargs = func_num_args();
205: 
206:         for ($i = 1; $i < $numargs; $i++) {
207:             $this->data[$index][$i] = func_get_arg($i);
208:         }
209:     }
210: 
211:     212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 
226:     public function setHiddenData($index) {
227:         $numargs = func_num_args();
228: 
229:         for ($i = 1; $i < $numargs; $i++) {
230:             $this->data[$index]["hiddendata"][$i] = func_get_arg($i);
231:         }
232:     }
233: 
234:     235: 236: 237: 238: 
239:     public function setResultsPerPage($numresults) {
240:         $this->resultsPerPage = $numresults;
241:     }
242: 
243:     244: 245: 246: 247: 
248:     public function setListStart($startpage) {
249:         $this->listStart = $startpage;
250:     }
251: 
252:     253: 254: 255: 256: 257: 
258:     public function getCurrentPage() {
259:         if ($this->resultsPerPage == 0) {
260:             return 1;
261:         }
262: 
263:         return ($this->listStart);
264:     }
265: 
266:     267: 268: 269: 270: 271: 
272:     public function getNumPages() {
273:         return (ceil(count($this->data) / $this->resultsPerPage));
274:     }
275: 
276:     277: 278: 279: 280: 281: 
282:     public function sort($field, $order) {
283:         if ($order == "") {
284:             $order = SORT_ASC;
285:         }
286: 
287:         if ($order == "ASC") {
288:             $order = SORT_ASC;
289:         }
290: 
291:         if ($order == "DESC") {
292:             $order = SORT_DESC;
293:         }
294: 
295:         $this->sortkey = $field;
296:         $this->sortmode = $order;
297: 
298:         $field = $field + 1;
299:         $this->data = cArray::csort($this->data, "$field", $order);
300:     }
301: 
302:     303: 304: 305: 306: 307: 308: 
309:     public function convert($field, $value, $hiddendata) {
310:         return $value;
311:     }
312: 
313:     314: 315: 316: 317: 
318:     public function render($return = true) {
319:         global $cfg;
320: 
321:         $currentpage = $this->getCurrentPage();
322: 
323:         $itemstart = (($currentpage - 1) * $this->resultsPerPage) + 1;
324: 
325:         $headeroutput = "";
326:         $output = "";
327: 
328:         
329:         foreach ($this->header as $key => $value) {
330:             if (is_array($this->sortable)) {
331:                 if (array_key_exists($key, $this->sortable) && $this->sortable[$key] == true) {
332:                     $this->sortlink->setContent($value);
333:                     $this->sortlink->setCustom("sortby", $key);
334: 
335:                     if ($this->sortkey == $key && $this->sortmode == SORT_ASC) {
336:                         $this->sortlink->setCustom("sortmode", "DESC");
337:                     } else {
338:                         $this->sortlink->setCustom("sortmode", "ASC");
339:                     }
340: 
341:                     $this->objHeaderItem->setContent($this->sortlink->render());
342:                     $headeroutput .= $this->objHeaderItem->render();
343:                 } else {
344:                     $this->objHeaderItem->setContent($value);
345:                     $headeroutput .= $this->objHeaderItem->render();
346:                 }
347:             } else {
348:                 $this->objHeaderItem->setContent($value);
349:                 $headeroutput .= $this->objHeaderItem->render();
350:             }
351:             $this->objHeaderItem->advanceID();
352:         }
353: 
354:         $this->objHeaderRow->setContent($headeroutput);
355: 
356:         $headeroutput = $this->objHeaderRow->render();
357: 
358:         if ($this->resultsPerPage == 0) {
359:             $itemend = count($this->data) - ($itemstart - 1);
360:         } else {
361:             $itemend = $currentpage * $this->resultsPerPage;
362:         }
363: 
364:         if ($itemend > count($this->data)) {
365:             $itemend = count($this->data);
366:         }
367: 
368:         for ($i = $itemstart; $i < $itemend + 1; $i++) {
369: 
370:             
371:             
372:             if ($this->data[$i - 1] == NULL) {
373:                 continue;
374:             }
375: 
376:             $items = "";
377: 
378:             $this->onRenderRow($i);
379: 
380:             foreach ($this->data[$i - 1] as $key => $value) {
381:                 $this->onRenderColumn($key);
382: 
383:                 if ($key != "hiddendata") {
384:                     $hiddendata = $this->data[$i - 1]["hiddendata"];
385: 
386:                     $this->objItem->setContent($this->convert($key, $value, $hiddendata));
387:                     $items .= $this->objItem->render();
388:                 }
389:                 $this->objItem->advanceID();
390:             }
391: 
392:             $this->objRow->setContent($items);
393:             $items = "";
394: 
395:             $output .= $this->objRow->render();
396:             $this->objRow->advanceID();
397:         }
398: 
399:         $this->objTable->setContent($headeroutput . $output);
400: 
401:         $output = stripslashes($this->objTable->render());
402: 
403:         if ($return == true) {
404:             return $output;
405:         } else {
406:             echo $output;
407:         }
408:     }
409: 
410: }
411: