ConLite/conlite/classes/class.ui.php

1410 Zeilen
40 KiB
PHP

<?php
/**
* Project:
* Contenido Content Management System
*
* Description:
* Contenido UI Classes
*
* Requirements:
* @con_php_req 5.0
*
*
* @package Contenido Backend classes
* @version 1.5.3
* @author Timo A. Hummel
* @copyright four for business AG <www.4fb.de>
* @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 .= '<script language="javascript">' . $script . '</script>';
}
}
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 .= '<script language="javascript">' . $script . '</script>';
}
}
#echo '<br>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 border="0" src="' . $this->image[$key] . '" width="' . $this->imagewidth[$key] . '">');
$img = $value->render();
} else if(!empty ($this->image[$key])) {
$value->setContent('<img border="0" src="' . $this->image[$key] . '">');
$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 = '<img border="0" src="' . $this->image[$key] . '" width="' . $this->imagewidth[$key] . '">';
} else {
$img = '<img border="0" src="' . $this->image[$key] . '">';
}
}
}
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 '<br> 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 = '<table border="0"><tr>';
foreach ($this->actions[$key] as $key => $singleaction) {
$fullactions .= '<td nowrap="nowrap">' . $singleaction . '</td>';
}
$fullactions .= '</tr></table>';
}
$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 = "&nbsp;";
}
if ($caption == "") {
$caption = "&nbsp;";
}
$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 = '<form ' . $fextra . ' enctype="multipart/form-data" style="margin:0px" name="' . $this->formname . '" method="' . $this->formmethod . '" action="' . $this->formaction . '">' . "\n";
$this->formvars[$sess->name] = $sess->id;
if (is_array($this->formvars)) {
foreach ($this->formvars as $key => $value) {
$form .= '<input type="hidden" name="' . $key . '" value="' . $value . '">' . "\n";
}
}
if (!array_key_exists("action", $this->formvars)) {
$form .= '<input type="hidden" name="action" value="">';
}
$tpl->set('s', 'FORM', $form);
$tpl->set('s', 'ID', $this->tableid);
$tpl->set('s', 'BORDERCOLOR', $this->tablebordercolor);
if ($this->header != "") {
$header = '<tr class="text_medium" style="background-color: ' . $cfg["color"]["table_header"] . ';">';
$header .= '<td class="textg_medium" colspan="2" valign="top" style="border: 0px; border-bottom: 0px;border-top:1px; border-right:1px;border-color: ' . $cfg["color"]["table_border"] . '; border-style: solid;">' . $this->header . '</td></tr>';
}
$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 = '<tr class="text_medium" style="background-color: ' . $cfg["color"]["table_header"] . ';">';
$subheader .= '<td colspan="2" valign="top" style="border: 0px;border-top: 0px; border-bottom:0px; border-right:1px;border-color: ' . $cfg["color"]["table_border"] . '; border-style: solid;">' . $this->captions[$key] . '</td></tr>';
$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 = '<img src="' . $cfg["path"]["contenido_fullhtml"] . 'images/but_cancel.gif" border="0">';
$tpl->set('s', 'CANCELLINK', '<a href="' . $this->cancelLink . '">' . $img . '</a>');
} 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 .= '<input style="margin-left: 5px;" title="' . $value["description"] . '" alt="' . $value["description"] . '" type="image" src="' . $value["image"] . '" name="submit" onclick="' . $onclick . '" ' . $accesskey . '>';
}
$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 = '<form style="margin:0px"';
$form .= ' name="' . $this->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 .= '<input type="hidden" name="' . $key . '" value="' . $value . '">' . "\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"] = '<script type="text/javascript">' .
"parent.parent.frames['left'].frames['left_bottom'].location.reload();"
. "</script>";
}
function setContent($content) {
$this->content = $content;
}
function setMessageBox() {
global $sess;
$this->scripts["__msgbox"] = '<script type="text/javascript" src="scripts/messageBox.js.php?contenido=' . $sess->id . '"></script>' .
'<script type="text/javascript">
/* Session-ID */
var sid = "' . $sess->id . '";
/* Create messageBox
instance */
box = new messageBox("", "", "", 0, 0);
</script>';
}
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 = '<a target="' . $target . '"' . $alt . 'href="' . $this->link . '"' . $attributes . '>';
break;
case "clink":
$link = '<a target="' . $target . '"' . $alt . 'href="main.php?area=' . $this->targetarea .
'&frame=' . $this->targetframe .
'&action=' . $this->targetaction . $custom . "&contenido=" . $sess->id .
'"' . $attributes . '>';
break;
case "multilink":
$tmp_mstr = '<a ' . $alt . 'href="javascript:conMultiLink(\'%s\', \'%s\', \'%s\', \'%s\')"' . $attributes . '>';
$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 . "</a>");
} else {
list($this->img_width, $this->img_height, $this->img_type, $this->img_attr) = getimagesize($cfg['path']['contenido'] . $this->images);
return ($link . '<img src="' . $this->images . '" border="0" width="' . $this->img_width . '" height="' . $this->img_height . '"/></a>');
}
}
}
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;
}
}
}