phpldapadmin/lib/TreeItem.php

369 lines
8.4 KiB
PHP

<?php
/**
* Classes and functions for the LDAP tree.
*
* @author The phpLDAPadmin development team
* @package phpLDAPadmin
*/
/**
* Represents an item in the tree.
*
* @package phpLDAPadmin
* @subpackage Tree
*/
class TreeItem {
# This entry's DN
protected $dn;
# The server this entry belongs to.
private $server_id;
# The objectclasses in LDAP, used to deterimine the icon and template
protected $objectclasses = array();
# Is this a base entry?
private $base_entry = false;
# Array of dn - the children
private $children = array();
# An icon file path
protected $icon;
# Is the entry a leaf?
private $leaf = false;
# Is the node open?
private $open = false;
# Is the size of children limited?
private $size_limited = true;
# Last template used to edit this entry
private $template = null;
# Do we need to sort the children
private $childsort = true;
# Are we reading the children
private $reading_children = false;
public function __construct($server_id,$dn) {
if (DEBUG_ENABLED && (($fargs=func_get_args())||$fargs='NOARGS'))
{
debug_log('Entered (%%)', 33, 0, __FILE__, __LINE__, __METHOD__, $fargs);
}
$this->server_id = $server_id;
$this->dn = $dn;
}
/**
* Get the DN of this tree item.
*
* @return DN The DN of this item.
*/
public function getDN() {
if (DEBUG_ENABLED && (($fargs=func_get_args())||$fargs='NOARGS'))
{
debug_log('Entered (%%)', 33, 1, __FILE__, __LINE__, __METHOD__, $fargs, $this->dn);
}
return $this->dn;
}
public function getDNEncode() {
return urlencode(preg_replace('/%([0-9a-fA-F]+)/',"%25\\1",$this->dn));
}
/**
* Get the RDN of this tree items DN.
*
* @return RDN The RDN of this items DN.
*/
public function getRDN() {
if (DEBUG_ENABLED && (($fargs=func_get_args())||$fargs='NOARGS'))
{
debug_log('Entered (%%)', 33, 0, __FILE__, __LINE__, __METHOD__, $fargs);
}
return get_rdn($this->getDN(),0,true);
}
/**
* Set this item as a LDAP base DN item.
*/
public function setBase() {
if (DEBUG_ENABLED && (($fargs=func_get_args())||$fargs='NOARGS'))
{
debug_log('Entered (%%)', 33, 1, __FILE__, __LINE__, __METHOD__, $fargs);
}
$this->base_entry = true;
}
/**
* Return if this item is a base DN item.
*/
public function isBaseDN() {
if (DEBUG_ENABLED && (($fargs=func_get_args())||$fargs='NOARGS'))
{
debug_log('Entered (%%)', 33, 1, __FILE__, __LINE__, __METHOD__, $fargs, $this->base_entry);
}
return $this->base_entry;
}
public function setObjectClasses($oc) {
if (DEBUG_ENABLED && (($fargs=func_get_args())||$fargs='NOARGS'))
{
debug_log('Entered (%%)', 33, 1, __FILE__, __LINE__, __METHOD__, $fargs);
}
$this->objectclasses = $oc;
}
public function getObjectClasses() {
if (DEBUG_ENABLED && (($fargs=func_get_args())||$fargs='NOARGS'))
{
debug_log('Entered (%%)', 33, 1, __FILE__, __LINE__, __METHOD__, $fargs, $this->objectclasses);
}
return $this->objectclasses;
}
public function isInLDAP() {
if (DEBUG_ENABLED && (($fargs=func_get_args())||$fargs='NOARGS'))
{
debug_log('Entered (%%)', 33, 0, __FILE__, __LINE__, __METHOD__, $fargs);
}
return count($this->objectclasses) ? true : false;
}
/**
* Returns null if the children have never be defined
* or an array of the dn of the children
*/
public function getChildren() {
if (DEBUG_ENABLED && (($fargs=func_get_args())||$fargs='NOARGS'))
{
debug_log('Entered (%%)', 33, 1, __FILE__, __LINE__, __METHOD__, $fargs, $this->children);
}
if ($this->childsort && ! $this->reading_children) {
usort($this->children,'pla_compare_dns');
$this->childsort = false;
}
return $this->children;
}
public function readingChildren($bool) {
$this->reading_children = $bool;
}
/**
* Do the children require resorting
*/
public function isChildSorted() {
if (DEBUG_ENABLED && (($fargs=func_get_args())||$fargs='NOARGS'))
{
debug_log('Entered (%%)', 33, 1, __FILE__, __LINE__, __METHOD__, $fargs, $this->childsort);
}
return $this->childsort;
}
/**
* Mark the children as sorted
*/
public function childSorted() {
if (DEBUG_ENABLED && (($fargs=func_get_args())||$fargs='NOARGS'))
{
debug_log('Entered (%%)', 33, 1, __FILE__, __LINE__, __METHOD__, $fargs);
}
$this->childsort = false;
}
/**
* Add a child to this DN entry.
*
* @param DN The DN to add.
*/
public function addChild($dn) {
if (DEBUG_ENABLED && (($fargs=func_get_args())||$fargs='NOARGS'))
{
debug_log('Entered (%%)', 33, 0, __FILE__, __LINE__, __METHOD__, $fargs);
}
if (in_array($dn,$this->children))
{
return;
}
$this->children[] = $dn;
$this->childsort = true;
}
/**
* Delete a child from this DN entry.
*
* @param DN The DN to add.
*/
public function delChild($dn) {
if (DEBUG_ENABLED && (($fargs=func_get_args())||$fargs='NOARGS'))
{
debug_log('Entered (%%)', 33, 0, __FILE__, __LINE__, __METHOD__, $fargs);
}
if ($this->children) {
# If the parent hasnt been opened in the tree, then there wont be any children.
$index = array_search($dn,$this->children);
if ($index !== false)
{
unset($this->children[$index]);
}
}
}
/**
* Rename this DN.
*
* @param DN The DN to rename to.
*/
public function rename($dn) {
if (DEBUG_ENABLED && (($fargs=func_get_args())||$fargs='NOARGS'))
{
debug_log('Entered (%%)', 33, 0, __FILE__, __LINE__, __METHOD__, $fargs);
}
$this->dn = $dn;
}
/**
* Return if this item has been opened.
*/
public function isOpened() {
if (DEBUG_ENABLED && (($fargs=func_get_args())||$fargs='NOARGS'))
{
debug_log('Entered (%%)', 33, 1, __FILE__, __LINE__, __METHOD__, $fargs, $this->open);
}
return $this->open;
}
/**
* Mark this node as closed.
*/
public function close() {
if (DEBUG_ENABLED && (($fargs=func_get_args())||$fargs='NOARGS'))
{
debug_log('Entered (%%)', 33, 0, __FILE__, __LINE__, __METHOD__, $fargs);
}
$this->open = false;
}
/**
* Opens the node ; the children of the node must have been defined
*/
public function open() {
if (DEBUG_ENABLED && (($fargs=func_get_args())||$fargs='NOARGS'))
{
debug_log('Entered (%%)', 33, 0, __FILE__, __LINE__, __METHOD__, $fargs);
}
$this->open = true;
}
/**
* Mark this node as a leaf.
*/
public function setLeaf() {
if (DEBUG_ENABLED && (($fargs=func_get_args())||$fargs='NOARGS'))
{
debug_log('Entered (%%)', 33, 1, __FILE__, __LINE__, __METHOD__, $fargs);
}
$this->leaf = true;
}
/**
* Return if this node is a leaf.
*/
public function isLeaf() {
if (DEBUG_ENABLED && (($fargs=func_get_args())||$fargs='NOARGS'))
{
debug_log('Entered (%%)', 33, 1, __FILE__, __LINE__, __METHOD__, $fargs, $this->leaf);
}
return $this->leaf;
}
/**
* Returns the path of the icon file used to represent this node ;
* If the icon hasnt been set, it will call get_icon()
*/
public function getIcon() {
if (DEBUG_ENABLED && (($fargs=func_get_args())||$fargs='NOARGS'))
{
debug_log('Entered (%%)', 33, 1, __FILE__, __LINE__, __METHOD__, $fargs, $this->icon);
}
if (! $this->icon)
{
$this->icon = get_icon($this->server_id, $this->dn, $this->objectclasses);
}
return $this->icon;
}
/**
* Mark this node as a size limited (it wont have all its children).
*/
public function setSizeLimited() {
if (DEBUG_ENABLED && (($fargs=func_get_args())||$fargs='NOARGS'))
{
debug_log('Entered (%%)', 33, 1, __FILE__, __LINE__, __METHOD__, $fargs);
}
$this->size_limited = true;
}
/**
* Clear the size limited flag.
*/
public function unsetSizeLimited() {
if (DEBUG_ENABLED && (($fargs=func_get_args())||$fargs='NOARGS'))
{
debug_log('Entered (%%)', 33, 0, __FILE__, __LINE__, __METHOD__, $fargs);
}
$this->size_limited = false;
}
/**
* Return if this node has hit an LDAP size limit (and thus doesnt have all its children).
*/
public function isSizeLimited() {
if (DEBUG_ENABLED && (($fargs=func_get_args())||$fargs='NOARGS'))
{
debug_log('Entered (%%)', 33, 0, __FILE__, __LINE__, __METHOD__, $fargs);
}
return $this->size_limited;
}
public function setTemplate($template) {
if (DEBUG_ENABLED && (($fargs=func_get_args())||$fargs='NOARGS'))
{
debug_log('Entered (%%)', 33, 1, __FILE__, __LINE__, __METHOD__, $fargs);
}
$this->template = $template;
}
public function getTemplate() {
if (DEBUG_ENABLED && (($fargs=func_get_args())||$fargs='NOARGS'))
{
debug_log('Entered (%%)', 33, 0, __FILE__, __LINE__, __METHOD__, $fargs);
}
return $this->template;
}
}