15b174c8b92da9d98b568ccbb31398b2c7012a3f
[squirrelmail.git] / doc / tree.txt
1 So what is this tree stuff?
2 ===========================
3
4 In order to get correct folder deletion across the board for all
5 different RFC2060 compliant IMAP servers, deleting of folders 
6 needed to work by deleting subfolders (inferiors) first, working
7 up to the top folder that is desired to be deleted.
8
9 The best way to do this was to use a tree, and walk the thing in
10 preorder to get subfolders first (leaves), working our way up the 
11 tree.  I chose to use an array for the tree structure.
12
13 The array has the following elements:
14 $tree[0]["value"]             = <full folder name>
15 $tree[0]["doIHaveChildren"]   = boolean
16 $tree[0]["subNodes"]          = indexes of the array that are
17                                   child nodes of this node
18
19 The trickiest part was finding the correct parent node when creating
20 a new node in the tree.  Check the documentation in the code for
21 more info on this.
22
23 Basically all we had to do as loop through each of the items that
24 need to be in the tree (folders, subfolders), find their parent,
25 let their parent know it has a new child, and insert the values
26 into the child.
27
28 Once the tree is generated, a simple preorder or postorder walk
29 of the tree can be done doing whatever function you desire (delete,
30 create, etc).
31
32 Preorder walking gives you the tree from the leaves up.  Postorder
33 walks the tree from the root node down to the leaves.