ConLite/conlite/classes/widgets/class.widgets.treeview.php

489 Zeilen
15 KiB
PHP
Originalformat Blame Verlauf

<?php
/* * ***************************************
* File : $RCSfile: class.widgets.treeview.php,v $
* Project : Contenido
* Descr : Visual representation of a cTree
* Modified : $Date$
*
* <20> four for business AG, www.4fb.de
*
* $Id$
* **************************************** */
define("TREEVIEW_GRIDLINE_SOLID", "solid");
define("TREEVIEW_GRIDLINE_DASHED", "dashed");
define("TREEVIEW_GRIDLINE_DOTTED", "dotted");
define("TREEVIEW_GRIDLINE_NONE", "none");
define("TREEVIEW_BACKGROUND_NONE", "none");
define("TREEVIEW_BACKGROUND_SHADED", "shaded");
define("TREEVIEW_MOUSEOVER_NONE", "none");
define("TREEVIEW_MOUSEOVER_MARK", "mark");
/**
* class cWidgetTreeView
* cWidgetTreeView is a visual representation of a cTree. It supports folding,
* optional gridline marks and item icons.
*/
class cWidgetTreeView extends cTree {
/* * * Attributes: ** */
/**
*
* @access private
*/
var $_globalActions;
/**
*
* @access private
*/
var $_setItemActions;
/**
*
* @access private
*/
var $_unsetItemActions;
/**
*
* @access private
*/
var $_setAttributeActions;
/**
*
* @access private
*/
var $_unsetAttributeActions;
var $_baseLink;
function __construct($uuid, $treename = false) {
global $cfg, $auth;
parent::__construct();
$this->_uuid = $uuid;
//$this->setGridlineMode(TREEVIEW_GRIDLINE_DOTTED);
if ($treename != false) {
$this->setTreeName($treename);
}
$this->setBackgroundColors(array($cfg['color']['table_light'], $cfg['color']['table_dark']));
$this->_user = new cApiUser($auth->auth["uid"]);
}
function processParameters() {
if (($items = $this->_user->getUserProperty("expandstate", $this->_uuid)) !== false) {
$list = unserialize($items);
foreach ($list as $litem) {
$this->setCollapsed($litem);
}
}
if (!empty($this->_name)) {
$treename = $this->_name . "_";
}
if (array_key_exists($treename . "collapse", $_GET)) {
$this->setCollapsed($_GET[$treename . "collapse"]);
}
if (array_key_exists($treename . "expand", $_GET)) {
$this->setExpanded($_GET[$treename . "expand"]);
}
$xlist = array(); // Define variable before using it by reference...
$this->getCollapsedList($xlist);
$slist = serialize($xlist);
$this->_user->setUserProperty("expandstate", $this->_uuid, $slist);
}
/**
* applies an action to all items in the tree.
*
* @param cApiClickableAction action action object
* @return void
* @access public
*/
function applyGlobalAction($action) {
}
// end of member function applyGlobalAction
/**
* removes the action from all treeitems.
*
* @param cApiClickableAction action Removes the action from the global context.
* @return void
* @access public
*/
function removeGlobalAction($action) {
}
// end of member function removeGlobalAction
/**
* flushes all actions
*
* @return void
* @access public
*/
function flushGlobalActions() {
}
// end of member function flushGlobalActions
/**
* sets an action to a specific item.
*
* @param mixed item cTreeItem-Object or an id of a TreeItem-Object
* @param cApiClickableAction action
* @return void
* @access public
*/
function applyItemAction($item, $action) {
}
// end of member function applyItemAction
/**
* unsets an action from a specific item. Note that you can unset global actions
* using this method!
*
* @param mixed item cTreeItem-Object or an id of a TreeItem-Object
* @param cApiClickableAction action Action to unset
* @return void
* @access public
*/
function removeItemAction($item, $action) {
}
// end of member function removeItemAction
/**
* flushes all actions for a specific item
*
* @param mixed item cTreeItem-Object or an id of a TreeItem-Object
* @return void
* @access public
*/
function flushItemActions($item) {
}
// end of member function flushItemActions
/**
* Applies an action to all items with a certain attribute set.
*
* @param array attributes Values which need to match. The array key is the attribute name. Multiple array
entries are connected with "AND".
* @param cApiClickableAction action Action to apply
* @return void
* @access public
*/
function applyActionByItemAttribute($attributes, $action) {
}
// end of member function applyActionByItemAttribute
/**
* Removes an action from all items with a certain attribute set.
*
* @param array attributes Values which need to match. The array key is the attribute name. Multiple array
entries are connected with "AND".
* @param cApiClickableAction action Action to remove
* @return void
* @access public
*/
function removeActionByItemAttribute($attributes, $action) {
}
// end of member function removeActionByItemAttribute
/**
* Removes all actions for items with specific attributes
*
* @param array attributes Values which need to match. The array key is the attribute name. Multiple array
entries are connected with "AND".
* @return void
* @access public
*/
function flushActionByItemAttribute($attributes) {
}
// end of member function flushActionByItemAttribute
/**
*
*
* @param int mode Sets the gridline mode to one of the following values:
* TREEVIEW_GRIDLINE_SOLID
* TREEVIEW_GRIDLINE_DASHED
* TREEVIEW_GRIDLINE_DOTTED
* TREEVIEW_GRIDLINE_NONE
*
* @return void
* @access public
*/
function setGridlineMode($mode) {
$this->_gridlineMode = $mode;
}
// end of member function setGridlineMode
function setBackgroundMode($mode) {
$this->_backgroundMode = $mode;
}
function setMouseoverMode($mode) {
$this->_mouseoverMode = $mode;
}
function setBackgroundColors($colors) {
$this->_backgroundColors = $colors;
}
/**
*
*
* @return void
* @access public
*/
function render($with_root = true) {
$objects = $this->flatTraverse(0);
if ($with_root == false) {
unset($objects[0]);
}
$img = new cHTMLImage;
$r_table = new cHTMLTable;
$r_row = new cHTMLTableRow;
$r_leftcell = new cHTMLTableData;
$r_rightcell = new cHTMLTableData;
$r_actioncell = new cHTMLTableData;
$img_spacer = new cHTMLImage;
$img_spacer->updateAttributes(array('width' => '16', 'height' => '20'));
$img_spacer->setAlt("");
$img_spacer->setSrc("images/spacer.gif");
$img_spacer->advanceID();
$r_table->setCellPadding(0);
$r_table->setCellSpacing(0);
$r_table->setWidth("100%");
$r_rightcell->setStyleDefinition("padding-left", "3px");
$r_rightcell->setVerticalAlignment("middle");
$r_leftcell->setVerticalAlignment("middle");
$r_leftcell->updateAttributes(array("nowrap" => "nowrap"));
$r_rightcell->updateAttributes(array("nowrap" => "nowrap"));
$r_actioncell->updateAttributes(array("nowrap" => "nowrap"));
$r_leftcell->setWidth("1%");
$r_rightcell->setWidth("100%");
$r_actioncell->setAlignment("right");
$r_actioncell->setWidth("1%");
if (!is_object($this->_baseLink)) {
$this->_baseLink = new cHTMLLink;
}
$lastitem = array();
foreach ($objects as $key => $object) {
$img->setAlt("");
$r_table->advanceID();
$r_rightcell->advanceID();
$r_leftcell->advanceID();
$r_row->advanceID();
$r_actioncell->advanceID();
for ($level = 1; $level < $object->_level + 1; $level++) {
if ($object->_level == $level) {
if ($object->_next === false) {
if (count($object->_subitems) > 0) {
$link = $this->_setExpandCollapseLink($this->_baseLink, $object);
$link->advanceID();
$img->setSrc($this->_getExpandCollapseIcon($object));
$img->advanceID();
$link->setContent($img);
$out .= $link->render();
} else {
if ($level == 1 && $with_root == false) {
$out .= $img_spacer->render();
} else {
$img->setSrc($this->_buildImagePath("grid_linedownrightend.gif"));
$img->advanceID();
$out .= $img->render();
}
}
$lastitem[$level] = true;
} else {
if (count($object->_subitems) > 0) {
$link = $this->_setExpandCollapseLink($this->_baseLink, $object);
$link->advanceID();
$img->setSrc($this->_getExpandCollapseIcon($object));
$img->advanceID();
$link->setContent($img);
$out .= $link->render();
} else {
if ($level == 1 && $with_root == false) {
$out .= $img_spacer->render();
} else {
$img->setSrc($this->_buildImagePath("grid_linedownright.gif"));
$out .= $img->render();
}
}
$lastitem[$level] = false;
}
} else {
if ($lastitem[$level] == true) {
$out .= $img_spacer->render();
} else {
if ($level == 1 && $with_root == false) {
$out .= $img_spacer->render();
} else {
$img->setSrc($this->_buildImagePath("/grid_linedown.gif"));
$img->advanceID();
$out .= $img->render();
}
}
}
}
/* Fetch Render icon from the meta object */
if (is_object($object->payload)) {
/* Fetch payload object */
$meta = $object->payload->getMetaObject();
if (is_object($meta)) {
$icon = $meta->getIcon();
$actions = $meta->getActions();
$r_actioncell->setContent($actions);
$img->setAlt($meta->getDescription());
$img->advanceID();
/* Check if we've got an edit link */
if (count($meta->_editAction) > 0) {
$meta->defineActions();
$edit = $meta->getAction($meta->_editAction);
$edit->setIcon($icon);
$renderedIcon = $edit->render();
$edit->_link->setContent($object->_name);
$edit->_link->advanceID();
$renderedName = $edit->_link->render();
} else {
$img->setSrc($icon);
$renderedIcon = $img->render();
$renderedName = $object->_name;
}
}
} else {
if (isset($object->_attributes["icon"])) {
$img->setSrc($object->_attributes["icon"]);
$renderedIcon = $img->render();
$renderedName = $object->_name;
} else {
/* Fetch tree icon */
if ($object->_id == 0) {
$icon = $object->_treeIcon;
$img->setSrc($icon);
$renderedIcon = $img->render();
$renderedName = $object->_name;
} else {
$icon = $object->_treeIcon;
$img->setSrc($icon);
$renderedIcon = $img->render();
$renderedName = $object->_name;
}
}
}
if ($this->_backgroundMode == TREEVIEW_BACKGROUND_SHADED) {
if (current($this->_backgroundColors) === false) {
reset($this->_backgroundColors);
}
$color = current($this->_backgroundColors);
next($this->_backgroundColors);
$r_rightcell->setBackgroundColor($color);
$r_leftcell->setBackgroundColor($color);
$r_actioncell->setBackgroundColor($color);
}
$img->setSrc($icon);
$r_leftcell->setContent($out . $renderedIcon);
$r_rightcell->setContent($renderedName);
$r_row->setContent(array($r_leftcell, $r_rightcell, $r_actioncell));
$r_table->setContent($r_row);
$result .= $r_table->render();
unset($out);
}
return ('<table cellspacing="0" cellpadding="0" width="100%" border="0"><tr><td>' . $result . '</td></tr></table>');
}
// end of member function render
function _getExpandCollapseIcon($object) {
if ($object->_collapsed == true) {
return ($this->_buildImagePath("grid_expand.gif"));
} else {
return ($this->_buildImagePath("grid_collapse.gif"));
}
}
function _setExpandCollapseLink($link, $object) {
if (!empty($this->_name)) {
$treename = $this->_name . "_";
}
unset($link->_custom[$treename . "expand"]);
unset($link->_custom[$treename . "collapse"]);
if ($object->_collapsed == true) {
$link->setCustom($treename . "expand", $object->_id);
} else {
$link->setCustom($treename . "collapse", $object->_id);
}
return ($link);
}
function _buildImagePath($image) {
return ("./images/" . $this->_gridlineMode . "/" . $image);
}
function setBaseLink($link) {
$this->_baseLink = $link;
}
}