313 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
			
		
		
	
	
			313 lines
		
	
	
		
			8.0 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;
 | |
| 
 | |
| 		array_push($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;
 | |
| 	}
 | |
| }
 | |
| ?>
 |