Files
server/usr/share/psa-horde/imp/lib/Ftree/Element.php
2026-01-07 20:52:11 +01:00

171 lines
5.1 KiB
PHP

<?php
/**
* Copyright 2013-2017 Horde LLC (http://www.horde.org/)
*
* See the enclosed file COPYING for license information (GPL). If you
* did not receive this file, see http://www.horde.org/licenses/gpl.
*
* @category Horde
* @copyright 2013-2017 Horde LLC
* @license http://www.horde.org/licenses/gpl GPL
* @package IMP
*/
/**
* A tree element.
*
* @author Michael Slusarz <slusarz@horde.org>
* @category Horde
* @copyright 2013-2017 Horde LLC
* @license http://www.horde.org/licenses/gpl GPL
* @package IMP
*
* @property-read IMP_Ftree_Account $account Account object for this element.
* @property-read boolean $base_elt True if this is the base element.
* @property-read boolean $children True if this element has children.
* @property-read array $child_list The list of the element's children.
* @property boolean $container True if this element is a container.
* @property-read boolean $inbox True if this is the INBOX.
* @property boolean $invisible True if this element is invisible.
* @property-read integer $level The tree level of the current element.
* @property-read IMP_Mailbox $mbox_ob The IMP_Mailbox object for this
* element.
* @property-read boolean $namespace True if this is a namespace container
* element.
* @property-read Horde_Imap_Client_Data_Namespace $namespace_info Namespace
* info.
* @property-read boolean $namespace_other True if this is an 'Other'
* namespace.
* @property-read boolean $namespace_shared True if this is a 'Shared'
* namespace.
* @property boolean $needsort True if this level needs a sort.
* @property-read boolean $nochildren True if this element doesn't allow
* children.
* @property-read boolean $nonimap True if this is a non-IMAP element.
* @property boolean $open True if this element is open (a/k/a expanded).
* @property-read IMP_Ftree_Element $parent The parent element (null if not
* found).
* @property boolean $polled True if this element is polled.
* @property-read boolean $remote True if this is a remote container.
* @property-read boolean $remote_auth True if this is a remote account that
* has been authenticated.
* @property-read boolean $remote_mbox True if this is a remote mailbox.
* @property boolean $subscribed True if the element is subscribed.
* @property-read boolean $vfolder True if this element is a virtual folder.
*/
class IMP_Ftree_Element
{
/**
* The element ID.
*
* @var string
*/
protected $_id;
/**
* IMP folder tree object.
*
* @var IMP_Ftree
*/
protected $_tree;
/**
* Constructor.
*
* @param string $id Element ID.
* @param IMP_Ftree $tree The base tree object.
*/
public function __construct($id, IMP_Ftree $tree)
{
$this->_id = $id;
$this->_tree = $tree;
}
/**
*/
public function __sleep()
{
throw new LogicException('Object can not be serialized.');
}
/**
* @return string Element ID.
*/
public function __toString()
{
return $this->_id;
}
/**
*/
public function __get($name)
{
switch ($name) {
case 'account':
return $this->_tree->getAccount($this->_id);
case 'base_elt':
return ($this->_id == IMP_Ftree::BASE_ELT);
case 'child_list':
return $this->_tree->getChildren($this->_id);
case 'inbox':
return ($this->_id == 'INBOX');
case 'level':
if ($this->base_elt) {
return 0;
}
$i = substr_count($this->_id, $this->namespace_info->delimiter);
$elt = $this;
while ($elt = $elt->parent) {
if ($elt->namespace) {
return $i + 1;
} elseif ($elt->remote) {
if ($this->remote_mbox) {
++$i;
}
return $i + 1;
}
}
return $i;
case 'mbox_ob':
return IMP_Mailbox::get($this->_id);
case 'namespace':
return ($this->namespace_other || $this->namespace_shared);
case 'namespace_info':
return $this->mbox_ob->imp_imap->getNamespace($this->_id);
case 'parent':
return $this->_tree->getParent($this->_id);
default:
return $this->_tree->getAttribute($name, $this->_id);
}
}
/**
*/
public function __set($name, $value)
{
switch ($name) {
case 'container':
case 'invisible':
case 'needsort':
case 'open':
case 'polled':
case 'subscribed':
$this->_tree->setAttribute($name, $this->_id, $value);
break;
}
}
}