Source for file tree.php
Documentation is available at tree.php
* This file provides functions to walk trees of folders, for
* instance to delete a whole tree.
* @copyright 1999-2020 The SquirrelMail Project Team
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id: tree.php 14840 2020-01-07 07:42:38Z pdontthink $
/** Clearly, this needs the IMAP functions.. */
require_once(SM_PATH .
'functions/imap.php');
* Recursive function to find the correct parent for a new node.
* @param mixed value the value to find a parent for
* @param int treeIndexToStart where to start the search, usually the root node (0)
* @param array tree the tree to search
* @return int the index of the parent
// is $value in $tree[$treeIndexToStart]['value']
if ((isset
($tree[$treeIndexToStart])) &&
(strstr($value, $tree[$treeIndexToStart]['value']))) {
// do I have children, if not then must be a childnode of the current node
if ($tree[$treeIndexToStart]['doIHaveChildren']) {
// loop through each subNode checking to see if we are a subNode of one of them
for ($i=
0;$i<
count($tree[$treeIndexToStart]['subNodes']);$i++
) {
// if we aren't a child of one of the subNodes, must be a child of current node
return $treeIndexToStart;
return $treeIndexToStart;
// we aren't a child of this node at all
* Will insert a new value into the tree, based on a given comparison value.
* @param mixed comparisonValue the value to determine where the new element should be placed.
* @param mixed value the new node to insert
* @param array tree the tree to insert the node in, by ref
$newNodeIndex =
count($tree);
$tree[$newNodeIndex]['value'] =
$value;
$tree[$newNodeIndex]['doIHaveChildren'] =
false;
if ($tree[$parentNode]['doIHaveChildren'] ==
false) {
// make sure the parent knows it has children
$tree[$parentNode]['subNodes'][0] =
$newNodeIndex;
$tree[$parentNode]['doIHaveChildren'] =
true;
$nextSubNode =
count($tree[$parentNode]['subNodes']);
// make sure the parent knows it has children
$tree[$parentNode]['subNodes'][$nextSubNode] =
$newNodeIndex;
* Recursively walk the tree of trash mailboxes and delete all folders and messages
* @param int index the place in the tree to start, usually 0
* @param stream imap_stream the IMAP connection to send commands to
* @param array tree the tree to walk
if ($tree[$index]['doIHaveChildren']) {
for ($j =
0; $j <
count($tree[$index]['subNodes']); $j++
) {
if ($tree[$index]['value'] !=
$trash_folder) {
if ($mbx_response['EXISTS'] >
0) {
// CLOSE === EXPUNGE and UNSELECT
if ($tree[$index]['value'] !=
$trash_folder) {
if ($mbx_response['EXISTS'] >
0) {
// CLOSE === EXPUNGE and UNSELECT
* Recursively delete a tree of mail folders.
* @param int index the place in the tree to start, usually 0
* @param stream imap_stream the IMAP connection to send commands to
* @param array tree the tree to walk
if ($tree[$index]['doIHaveChildren']) {
for ($j =
0; $j <
count($tree[$index]['subNodes']); $j++
) {
* Recursively walk a tree of folders to create them under the trash folder.
global $trash_folder, $delimiter;
$position =
strrpos($topFolderName, $delimiter);
if ($position !==
FALSE) {
$subFolderName =
substr($tree[$index]['value'], $position);
if ($tree[$index]['doIHaveChildren']) {
$messageCount =
$mbx_response['EXISTS'];
// after copy close the mailbox to get in unselected state
for ($j =
0;$j <
count($tree[$index]['subNodes']); $j++
)
$messageCount =
$mbx_response['EXISTS'];
// after copy close the mailbox to get in unselected state
* Recursive function that outputs a tree In-Pre-Order.
* @param int index the node to start (usually 0)
* @param array tree the tree to walk
if ($tree[$index]['doIHaveChildren']) {
for ($j =
0; $j <
count($tree[$index]['subNodes']); $j++
) {
echo
$tree[$index]['value'] .
'<br />';
echo
$tree[$index]['value'] .
'<br />';
Documentation generated on Mon, 13 Jan 2020 04:25:24 +0100 by phpDocumentor 1.4.3