* @license http://www.contenido.org/license/LIZENZ.txt * @link http://www.4fb.de * @link http://www.contenido.org * @since file available since contenido release <= 4.6 * * {@internal * created 2003-05-20 * modified 2008-06-30, Dominik Ziegler, add security fix * modified 2010-12-13, Ortwin Pinke, count up object id's in cScrollList while rendering * * $Id$: * }} * */ if (!defined('CON_FRAMEWORK')) { die('Illegal call'); } class UI_Left_Top { var $link; var $javascripts; function __construct() { } function setLink($link) { $this->link = $link; } function setJS($type, $script) { $this->javascripts[$type] = $script; } function render() { global $sess, $cfg; $tpl = new Template(); $tpl->reset(); $tpl->set('s', 'SESSID', $sess->id); $scripts = ""; if (is_array($this->javascripts)) { foreach ($this->javascripts as $script) { $scripts .= ''; } } if (is_object($this->link)) { $tpl->set('s', 'LINK', $this->link->render() . $this->additional); } else { $tpl->set('s', 'LINK', ''); } $tpl->set('s', 'JAVASCRIPTS', $scripts); $tpl->set('s', 'CAPTION', $this->caption); $tpl->generate($cfg['path']['contenido'] . $cfg['path']['templates'] . $cfg['templates']['generic_left_top']); } function setAdditionalContent($content) { $this->additional = $content; } } class UI_Menu { var $link; var $title; var $caption; var $javascripts; var $type; var $image; var $alt; var $actions; var $padding; var $imagewidth; var $extra; var $border; var $show; var $bgColor; function __construct() { $this->padding = 2; $this->border = 0; $this->rowmark = true; } function setTitle($item, $title) { $this->title[$item] = $title; } function setRowmark($rowmark = true) { $this->rowmark = $rowmark; } function setImage($item, $image, $maxwidth = 0) { $this->image[$item] = $image; $this->imagewidth[$item] = $maxwidth; $this->show[$item] = $show; } function setExtra($item, $extra) { $this->extra[$item] = $extra; } function setLink($item, $link) { $this->link[$item] = $link; } function setActions($item, $key, $action) { $this->actions[$item][$key] = $action; } function setPadding($padding) { $this->padding = $padding; } function setBorder($border) { $this->border = $border; } function setBgColor($item, $bgColor) { $this->bgColor[$item] = $bgColor; } function render($print = true) { global $sess, $cfg; $tpl = new Template(); $tpl->reset(); $tpl->set('s', 'SID', $sess->id); $scripts = ""; if (is_array($this->javascripts)) { foreach ($this->javascripts as $script) { $scripts .= ''; } } #echo '
Debug (B.A.): ' . $scripts; $tpl->set('s', 'JSACTIONS', $scripts); $tpl->set('s', 'CELLPADDING', $this->padding); $tpl->set('s', 'BORDER', $this->border); $tpl->set('s', 'BORDERCOLOR', $cfg['color']['table_border']); if (is_array($this->link)) { $dark = false; foreach ($this->link as $key => $value) { if ($value != NULL) { if (!empty($this->imagewidth[$key]) && !empty ($this->image[$key])) { $value->setContent(''); $img = $value->render(); } else if(!empty ($this->image[$key])) { $value->setContent(''); $img = $value->render(); } $value->setContent($this->title[$key]); $link = $value->render(); } else { $link = $this->title[$key]; if (!empty($this->image[$key])) { if ($this->imagewidth[$key] != 0) { $img = ''; } else { $img = ''; } } } if (isset($this->bgColor[$key])) { $bgColor = $this->bgColor[$key]; } else { $dark = !$dark; if ($dark) { $bgColor = $cfg["color"]["table_dark"]; } else { $bgColor = $cfg["color"]["table_light"]; } if (isset($_GET['idworkflow']) && $_GET['idworkflow'] == $value) { //$mlist->setExtra($iMenu, 'id="marked" '); $bgColor = $cfg["color"]["table_light_active"]; } if (!empty($this->extra[$key]) && $this->extra[$key] == 'id="marked" ') { $bgColor = $cfg["color"]["table_light_active"]; } } $tpl->set('d', 'NAME', $link); if (empty($this->image[$key])) { $tpl->set('d', 'ICON', ''); } else { $tpl->set('d', 'ICON', $img); } if (!empty($this->extra[$key]) || $this->rowmark == true) { $extraadd = ""; if(empty($this->extra[$key])) { $this->extra[$key] = ''; } if ($this->rowmark == true) { $extraadd = 'onmouseover="row.over(this)" onmouseout="row.out(this)" onclick="row.click(this)"'; #echo '
Debug(B.A): ' . $extraadd; } $tpl->set('d', 'EXTRA', $this->extra[$key] . $extraadd); } else { $tpl->set('d', 'EXTRA', ''); } $fullactions = ""; if (is_array($this->actions[$key])) { $fullactions = ''; foreach ($this->actions[$key] as $key => $singleaction) { $fullactions .= ''; } $fullactions .= '
' . $singleaction . '
'; } $tpl->set('d', 'ACTIONS', $fullactions); $tpl->set('d', 'BGCOLOR', $bgColor); $tpl->next(); } } $rendered = $tpl->generate($cfg['path']['contenido'] . $cfg['path']['templates'] . $cfg['templates']['generic_menu'], true); if ($print == true) { echo $rendered; } else { return $rendered; } } } class UI_Table_Form { var $items; var $captions; var $id; var $rownames; var $itemType; var $formname; var $formmethod; var $formaction; var $formvars; var $tableid; var $tablebordercolor; var $header; var $cancelLink; var $submitjs; var $accesskey; var $width; function __construct($name, $action = "", $method = "post") { global $sess, $cfg; $this->formname = $name; if ($action == "") { $this->formaction = "main.php"; } else { $this->formaction = $action; } $this->formmethod = $method; $this->tableid = ""; $this->tablebordercolor = $cfg['color']['table_border']; $this->setAccessKey('s'); $this->custom = array(); $this->setActionButton("submit", $cfg['path']['contenido_fullhtml'] . "images/but_ok.gif", i18n("Save changes"), "s"); } function setWidth($width) { $this->width = $width; } function setVar($name, $value) { $this->formvars[$name] = $value; } function add($caption, $field, $rowname = "", $style = "") { $n = ""; if (is_array($field)) { foreach ($field as $value) { if (is_object($value) && method_exists($value, "render")) { $n .= $value->render(); } else { $n .= $value; } } $field = $n; } if (is_object($field) && method_exists($field, "render")) { $n = $field->render(); $field = $n; } if ($field == "") { $field = " "; } if ($caption == "") { $caption = " "; } $this->id++; $this->items[$this->id] = $field; $this->captions[$this->id] = $caption; if ($rowname == "") { $rowname = $this->id; } $this->rownames[$this->id] = $rowname; $this->styles[$this->id] = $style; } function addCancel($link) { $this->cancelLink = $link; } function addHeader($header) { $this->header = $header; } function addSubHeader($header) { $this->id++; $this->items[$this->id] = ''; $this->captions[$this->id] = $header; $this->itemType[$this->id] = 'subheader'; } function setSubmitJS($js) { $this->submitjs = $js; } function setAccessKey($key) { $this->accessKey = $key; } function setActionEvent($id, $event) { $this->custom[$id]["event"] = $event; } function setActionButton($id, $image, $description = "", $accesskey = false, $action = false) { $this->custom[$id]["image"] = $image; $this->custom[$id]["type"] = "actionsetter"; $this->custom[$id]["action"] = $action; $this->custom[$id]["description"] = $description; $this->custom[$id]["accesskey"] = $accesskey; $this->custom[$id]["event"] = ""; } function setConfirm($id, $title, $description) { $this->custom[$id]["confirmtitle"] = $title; $this->custom[$id]["confirmdescription"] = $description; } function unsetActionButton($id) { unset($this->custom[$id]); } function render($return = true) { global $sess, $cfg; $tpl = new Template; $extra = ""; if ($this->submitjs != "") { $fextra = 'onsubmit="' . $this->submitjs . '"'; } else { $fextra = ""; } $form = '
' . "\n"; $this->formvars[$sess->name] = $sess->id; if (is_array($this->formvars)) { foreach ($this->formvars as $key => $value) { $form .= '' . "\n"; } } if (!array_key_exists("action", $this->formvars)) { $form .= ''; } $tpl->set('s', 'FORM', $form); $tpl->set('s', 'ID', $this->tableid); $tpl->set('s', 'BORDERCOLOR', $this->tablebordercolor); if ($this->header != "") { $header = ''; $header .= '' . $this->header . ''; } $tpl->set('s', 'HEADER', $header); $dark = false; if (is_array($this->items)) { foreach ($this->items as $key => $value) { if (isset($this->itemType[$key]) && $this->itemType[$key] == 'subheader') { $subheader = ''; $subheader .= '' . $this->captions[$key] . ''; $tpl->set('d', 'SUBHEADER', $subheader); } else { $tpl->set('d', 'SUBHEADER', ''); $tpl->set('d', 'CATNAME', $this->captions[$key]); $tpl->set('d', 'CATFIELD', $value); $tpl->set('d', 'ROWNAME', $this->rownames[$key]); $tpl->set('d', 'STYLES', $this->styles[$key]); $tpl->set('d', 'PADDING_LEFT', '0'); $dark = !$dark; if ($dark) { $bgColor = $cfg["color"]["table_dark"]; } else { $bgColor = $cfg["color"]["table_light"]; } $tpl->set('d', 'BGCOLOR', $bgColor); $tpl->set('d', 'BORDERCOLOR', $this->tablebordercolor); $tpl->next(); } } } $tpl->set('s', 'CONTENIDOPATH', $cfg["path"]["contenido_fullhtml"]); if ($this->cancelLink != "") { $img = ''; $tpl->set('s', 'CANCELLINK', '' . $img . ''); } else { $tpl->set('s', 'CANCELLINK', ''); } if ($this->accesskey != "") { $tpl->set('s', 'KEY', $this->accesskey); } else { $tpl->set('s', 'KEY', ''); } $tpl->set('s', 'EXTRA', $extra); $custombuttons = ""; foreach ($this->custom as $key => $value) { if ($value["accesskey"] != "") { $accesskey = 'accesskey="' . $value["accesskey"] . '"'; } else { $accesskey = ""; } $onclick = ""; if ($value["action"] !== false) { if ($value["confirmtitle"] != "") { $action = '[\''; $action .= addslashes('document.forms[\'' . $this->formname . '\'].elements[\'action\'].value = \'' . $value["action"] . '\'') . '\',\''; $action .= addslashes('document.forms[\'' . $this->formname . '\'].submit()'); $action .= '\']'; $onclick = 'box.confirm(\'' . $value["confirmtitle"] . '\', \'' . $value["confirmdescription"] . '\', ' . $action . ');return false;'; } else { $onclick = 'document.forms[\'' . $this->formname . '\'].elements[\'action\'].value = \'' . $value["action"] . '\';'; } } if ($value["event"] != "") { $onclick .= $value["event"]; } $custombuttons .= ''; } $tpl->set('s', 'EXTRABUTTONS', $custombuttons); $extra = ""; if ($this->width != 0) { $extra .= 'width="' . $this->width . '"'; } $tpl->set('s', 'EXTRAB', $extra); $tpl->set('s', 'PADDING_LEFT', '0'); $tpl->set('s', 'ROWNAME', $this->id); $rendered = $tpl->generate($cfg["path"]["contenido"] . $cfg['path']['templates'] . $cfg['templates']['generic_table_form'], true); if ($return == true) { return ($rendered); } else { echo $rendered; } } } class UI_Form { var $items; var $content; var $id; var $rownames; var $formname; var $formmethod; var $formaction; var $formvars; var $formtarget; var $formevent; var $tableid; var $tablebordercolor; var $header; public function __construct($name, $action = "", $method = "post", $target = "") { global $sess, $cfg; $this->formname = $name; if ($action == "") { $this->formaction = "main.php"; } else { $this->formaction = $action; } $this->formmethod = $method; $this->formtarget = $target; } function setVar($name, $value) { $this->formvars[$name] = $value; } function setEvent($event, $jsCall) { $this->formevent = " on$event=\"$jsCall\""; } function add($field, $content = "") { $this->id++; $this->items[$this->id] = $field; $this->content[$this->id] = $content; } function render($return = true) { global $sess, $cfg; $content = ""; $tpl = new Template; $form = 'formname . '"'; $form .= ' method="' . $this->formmethod . '"'; $form .= ' action="' . $this->formaction . '"'; if (!empty($this->formtarget)) $form .= ' target="' . $this->formtarget . '"'; $form .= ' ' . $this->formevent; $form .= '>' . "\n"; $this->formvars[$sess->name] = $sess->id; if (is_array($this->formvars)) { foreach ($this->formvars as $key => $value) { $form .= '' . "\n"; } } $tpl->set('s', 'FORM', $form); if (is_array($this->items)) { foreach ($this->items as $key => $value) { $content .= $this->content[$key]; } } $tpl->set('s', 'CONTENT', $content); $rendered = $tpl->generate($cfg['path']['contenido'] . $cfg['path']['templates'] . $cfg['templates']['generic_form'], true); if ($return == true) { return ($rendered); } else { echo $rendered; } } } class UI_Page { var $scripts; var $content; var $margin; function __construct() { $this->margin = 10; } function setMargin($margin) { $this->margin = $margin; } function addScript($name, $script) { $this->scripts[$name] = $script; } function setReload() { $this->scripts["__reload"] = '"; } function setContent($content) { $this->content = $content; } function setMessageBox() { global $sess; $this->scripts["__msgbox"] = '' . ''; } function render($print = true) { global $sess, $cfg; $tpl = new Template(); $scripts = ""; if (is_array($this->scripts)) { foreach ($this->scripts as $key => $value) { $scripts .= $value; } } $tpl->set('s', 'SCRIPTS', $scripts); $tpl->set('s', 'CONTENT', $this->content); $tpl->set('s', 'MARGIN', $this->margin); $tpl->set('s', 'EXTRA', ''); $rendered = $tpl->generate($cfg['path']['contenido'] . $cfg['path']['templates'] . $cfg['templates']['generic_page'], false); if ($print == true) { echo $rendered; } else { return $rendered; } } } class Link { var $alt = ''; var $link; var $title; var $targetarea; var $targetframe; var $targetaction; var $targetarea2; var $targetframe2; var $targetaction2; var $caption; var $javascripts; var $type; var $custom; var $content; var $attributes; var $img_width; var $img_height; var $img_type; var $img_attr; function setLink($link) { $this->link = $link; $this->type = "link"; } function setCLink($targetarea, $targetframe, $targetaction) { $this->targetarea = $targetarea; $this->targetframe = $targetframe; $this->targetaction = $targetaction; $this->type = "clink"; } function setMultiLink($righttoparea, $righttopaction, $rightbottomarea, $rightbottomaction) { $this->targetarea = $righttoparea; $this->targetframe = 3; $this->targetaction = $righttopaction; $this->targetarea2 = $rightbottomarea; $this->targetframe2 = 4; $this->targetaction2 = $rightbottomaction; $this->type = "multilink"; } function setAlt($alt) { $this->alt = $alt; } function setCustom($key, $value) { $this->custom[$key] = $value; } function setImage($image) { $this->images = $image; } function setJavascript($js) { $this->javascripts = $js; } function setContent($content) { $this->content = $content; } function updateAttributes($attributes) { $this->attributes = $attributes; } function render() { global $sess, $cfg; $custom = ''; $attributes = ''; if ($this->alt != "") { $alt = 'alt="' . $this->alt . '" title="' . $this->alt . '" '; } else { $alt = " "; } if (is_array($this->custom)) { foreach ($this->custom as $key => $value) { $custom .= "&$key=$value"; } } if (is_array($this->attributes)) { foreach ($this->attributes as $key => $value) { $attributes .= " $key=\"$value\" "; } } switch ($this->targetframe) { case 1: $target = "left_top"; break; case 2: $target = "left_bottom"; break; case 3: $target = "right_top"; break; case 4: $target = "right_bottom"; break; default: $target = ""; } switch ($this->type) { case "link": $link = ''; break; case "clink": $link = ''; break; case "multilink": $tmp_mstr = ''; $mstr = sprintf($tmp_mstr, 'right_top', $sess->url("main.php?area=" . $this->targetarea . "&frame=" . $this->targetframe . "&action=" . $this->targetaction . $custom), 'right_bottom', $sess->url("main.php?area=" . $this->targetarea2 . "&frame=" . $this->targetframe2 . "&action=" . $this->targetaction2 . $custom)); $link = $mstr; break; } if (empty($this->images)) { return ($link . $this->content . ""); } else { list($this->img_width, $this->img_height, $this->img_type, $this->img_attr) = getimagesize($cfg['path']['contenido'] . $this->images); return ($link . ''); } } } class UI_List { var $link; var $title; var $caption; var $javascripts; var $type; var $image; var $alt; var $actions; var $padding; var $imagewidth; var $extra; var $border; var $bgcolor; var $solid; var $width; function __construct() { $this->padding = 2; $this->border = 0; } function setWidth($width) { $this->width = $width; } function setCellAlignment($item, $cell, $alignment) { $this->cellalignment[$item][$cell] = $alignment; } function setCellVAlignment($item, $cell, $alignment) { $this->cellvalignment[$item][$cell] = $alignment; } function setBgColor($item, $color) { $this->bgcolor[$item] = $color; } function setCell($item, $cell, $value) { $this->cells[$item][$cell] = $value; $this->cellalignment[$item][$cell] = ""; } function setCellExtra($item, $cell, $extra) { $this->extra[$item][$cell] = $extra; } function setPadding($padding) { $this->padding = $padding; } function setBorder($border) { $this->border = $border; } function setExtra($item, $extra) { $this->extra[$item] = $extra; } function setSolidBorder($solid) { $this->solid = $solid; } function render($print = false) { global $sess, $cfg; $tpl = new Template(); $tpl2 = new Template(); $tpl->reset(); $tpl->set('s', 'SID', $sess->id); $tpl->set('s', 'CELLPADDING', $this->padding); $tpl->set('s', 'BORDER', $this->border); $tpl->set('s', 'BORDERCOLOR', $cfg['color']['table_border']); $colcount = 0; if (is_array($this->cells)) { $dark = true; foreach ($this->cells as $row => $cells) { $thefont = ''; $unne = ''; if ($colcount == 0) { $thefont = 'color: #666666;font-weight: normal;'; } $colcount++; $dark = !$dark; if ($dark) { $bgColor = $cfg["color"]["table_dark"]; } else { $bgColor = $cfg["color"]["table_light"]; } if (!empty($this->bgcolor[$row])) { $bgColor = $this->bgcolor[$row]; } $content = ""; $count = 0; foreach ($cells as $key => $value) { $thefontDispl = $thefont . (empty($this->extra[$row][$key]))?'':$this->extra[$row][$key]; $count++; $tpl2->reset(); if ($this->solid) { if ($count < count($cells)) { if ($colcount < count($this->cells)) { $tpl2->set('s', 'EXTRA', $thefontDispl . 'border: 0px; border-right: 1px; border-color: #B3B3B3; border-style: solid;'); } else { $tpl2->set('s', 'EXTRA', $thefontDispl . 'border: 0px; border-right: 1px; border-color: #B3B3B3; border-style: solid;'); } } else { if ($colcount < count($this->cells)) { $tpl2->set('s', 'EXTRA', $thefontDispl . 'border: 0px;border-color: #B3B3B3; border-style: solid;'); } else { $tpl2->set('s', 'EXTRA', $thefontDispl); } } } if ($colcount > 0) { $tpl2->set('s', 'BORDERS', ';border-bottom:1px solid #B3B3B3;'); } if ($this->cellalignment[$row][$key] != "") { $tpl2->set('s', 'ALIGN', $this->cellalignment[$row][$key]); } else { $tpl2->set('s', 'ALIGN', 'left'); } if (!empty($this->cellvalignment[$row][$key])) { $tpl2->set('s', 'VALIGN', $this->cellvalignment[$row][$key]); } else { $tpl2->set('s', 'VALIGN', 'top'); } $tpl2->set('s', 'CONTENT', $value); $content .= $tpl2->generate($cfg['path']['contenido'] . $cfg['path']['templates'] . $cfg['templates']['generic_list_row'], true); } $tpl->set('d', 'ROWS', $content); $tpl->set('d', 'BGCOLOR', $bgColor); $tpl->next(); } } if ($this->width) { $tpl->set('s', 'EXTRA', 'width: ' . $this->width . ';'); } $rendered = $tpl->generate($cfg['path']['contenido'] . $cfg['path']['templates'] . $cfg['templates']['generic_list'], true); if ($print == true) { echo $rendered; } else { return $rendered; } } } /** * Class ScrollableList * Class for scrollable backend lists */ class cScrollList { /** * Data container * @var array */ var $data = Array(); /** * Header container * @var array */ var $header = Array(); /** * Number of records displayed per page * @var string */ var $resultsPerPage; /** * Start page * @var string */ var $listStart; /** * sortable array * @var array */ protected $_aSortable; /** * sortlink * @var string */ var $sortlink; /** * Table item * */ var $objTable; /** * Header row * */ var $objHeaderRow; /** * Header item * */ var $objHeaderItem; /** * Header item * */ var $objRow; /** * Header item * */ var $objItem; /* TODO: Shouldn't $area and $frame be parameters instead of global variables? */ /** * Creates a new FrontendList object. * * @param $defaultstyle boolean use the default style for object initializing? */ function __construct($defaultstyle = true, $action = "") { global $cfg, $area, $frame; $this->resultsPerPage = 0; $this->listStart = 1; $this->_aSortable = []; $this->objTable = new cHTMLTable(); if ($defaultstyle == true) { $this->objTable->setStyle('border-collapse:collapse;border: 1px; border-style: solid; border-top:0px;border-color: ' . $cfg["color"]["table_border"] . ';'); $this->objTable->updateAttributes(array("cellspacing" => 0, "cellpadding" => 2)); } $this->objHeaderRow = new cHTMLTableRow(); if ($defaultstyle == true) { $this->objHeaderRow->setClass("text_medium"); $this->objHeaderRow->setStyle("background-color: #E2E2E2;white-space:nowrap;"); } $this->objHeaderItem = new cHTMLTableHead(); if ($defaultstyle == true) { $this->objHeaderItem->setClass("textg_medium"); $this->objHeaderItem->setStyle('white-space:nowrap; border: 1px; border-style: solid;border-bottom: 0px;border-color: ' . $cfg["color"]["table_border"] . ';'); $this->objHeaderItem->updateAttributes(array("align" => "left")); } $this->objRow = new cHTMLTableRow(); if ($defaultstyle == true) { $this->objRow->setClass("text_medium"); } $this->objItem = new cHTMLTableData(); if ($defaultstyle == true) { $this->objItem->setStyle('white-space:nowrap; border: 1px; border-style: solid;border-top:0px;border-color: ' . $cfg["color"]["table_border"] . ';'); } $this->sortlink = new cHTMLLink(); $this->sortlink->setStyle("color: #666666;"); $this->sortlink->setCLink($area, $frame, $action); } /** * Sets the sortable flag for a specific row. * * $obj->setSortable(true); * * @param $sortable boolean true or false */ function setSortable($key, $sortable) { $this->_aSortable[$key] = $sortable; } /** * Sets the custom parameters for sortable links * * $obj->setCustom($key, $custom); * * @param $key Custom entry key * @param $custom Custom entry value */ function setCustom($key, $custom) { $this->sortlink->setCustom($key, $custom); } /** * Is called when a new row is rendered * * @param $row The current row which is being rendered */ function onRenderRow($row) { global $cfg; if ($row % 2) { $col = $cfg["color"]["table_dark"]; } else { $col = $cfg["color"]["table_light"]; } $this->objRow->setStyle("white-space:nowrap; background-color: $col;"); } /** * Is called when a new column is rendered * * @param $row The current column which is being rendered */ function onRenderColumn($column) { } /** * Sets header data. * * Note: This function eats as many parameters as you specify. * * Example: * $obj->setHeader("foo", "bar"); * * Make sure that the amount of parameters stays the same for all * setData calls in a single object. * * @param $index Numeric index * @param ... Additional parameters (data) */ function setHeader() { $numargs = func_num_args(); for ($i = 0; $i < $numargs; $i++) { $this->header[$i] = func_get_arg($i); } } /** * Sets data. * * Note: This function eats as many parameters as you specify. * * Example: * $obj->setData(0, "foo", "bar"); * * Make sure that the amount of parameters stays the same for all * setData calls in a single object. Also make sure that your index * starts from 0 and ends with the actual number - 1. * * @param $index Numeric index * @param ... Additional parameters (data) */ function setData($index) { $numargs = func_num_args(); for ($i = 1; $i < $numargs; $i++) { $this->data[$index][$i] = func_get_arg($i); } } /** * Sets hidden data. * * Note: This function eats as many parameters as you specify. * * Example: * $obj->setHiddenData(0, "foo", "bar"); * * Make sure that the amount of parameters stays the same for all * setData calls in a single object. Also make sure that your index * starts from 0 and ends with the actual number - 1. * * @param $index Numeric index * @param ... Additional parameters (data) */ function setHiddenData($index) { $numargs = func_num_args(); for ($i = 1; $i < $numargs; $i++) { $this->data[$index]["hiddendata"][$i] = func_get_arg($i); } } /** * Sets the number of records per page. * * @param $numresults Amount of records per page */ function setResultsPerPage($numresults) { $this->resultsPerPage = $numresults; } /** * Sets the starting page number. * * @param $startpage Page number on which the list display starts */ function setListStart($startpage) { $this->listStart = $startpage; } /** * Returns the current page. * * @param $none * @returns Current page number */ function getCurrentPage() { if ($this->resultsPerPage == 0) { return 1; } return ($this->listStart); } /** * Returns the amount of pages. * * @param $none * @returns Amount of pages */ function getNumPages() { return (ceil(count($this->data) / $this->resultsPerPage)); } /** * Sorts the list by a given field and a given order. * * @param $field Field index * @param $order Sort order (see php's sort documentation) */ function sort($field, $order) { if ($order == "") { $order = SORT_ASC; } if ($order == "ASC") { $order = SORT_ASC; } if ($order == "DESC") { $order = SORT_DESC; } $this->sortkey = $field; $this->sortmode = $order; $field = intval($field) + 1; $this->data = array_csort($this->data, "$field", $order); } /** * Field converting facility. * Needs to be overridden in the child class to work properbly. * * @param $field Field index * @param $value Field value */ function convert($field, $value, $hiddendata) { return $value; } /** * Outputs or optionally returns * * @param $return If true, returns the list */ function render($return = true) { $currentpage = $this->getCurrentPage(); $itemstart = (($currentpage - 1) * $this->resultsPerPage) + 1; $headeroutput = ""; $output = ""; /* Render header */ foreach ($this->header as $key => $value) { if (is_array($this->_aSortable)) { if (array_key_exists($key, $this->_aSortable) && $this->_aSortable[$key] == true) { $this->sortlink->setContent($value); $this->sortlink->setCustom("sortby", $key); if ($this->sortkey == $key && $this->sortmode == SORT_ASC) { $this->sortlink->setCustom("sortmode", "DESC"); } else { $this->sortlink->setCustom("sortmode", "ASC"); } $this->objHeaderItem->setContent($this->sortlink->render()); $headeroutput .= $this->objHeaderItem->render(); } else { $this->objHeaderItem->setContent($value); $headeroutput .= $this->objHeaderItem->render(); } } else { $this->objHeaderItem->setContent($value); $headeroutput .= $this->objHeaderItem->render(); } $this->objHeaderItem->advanceID(); } $this->objHeaderRow->setContent($headeroutput); $headeroutput = $this->objHeaderRow->render(); if ($this->resultsPerPage == 0) { $itemend = count($this->data) - ($itemstart - 1); } else { $itemend = $currentpage * $this->resultsPerPage; } if ($itemend > count($this->data)) { $itemend = count($this->data); } for ($i = $itemstart; $i < $itemend + 1; $i++) { $items = ""; $this->onRenderRow($i); foreach ($this->data[$i - 1] as $key => $value) { $this->onRenderColumn($key); if ($key != "hiddendata") { $hiddendata = $this->data[$i - 1]["hiddendata"]; $this->objItem->setContent($this->convert($key, $value, $hiddendata)); $items .= $this->objItem->render(); } $this->objItem->advanceID(); } $this->objRow->setContent($items); $items = ""; $output .= $this->objRow->render(); $this->objRow->advanceID(); } $this->objTable->setContent($headeroutput . $output); $output = $this->objTable->render(); if ($return == true) { return $output; } else { echo $output; } } }