Bring the left_main_after_each_folder hook to life
authorpdontthink <pdontthink@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Wed, 9 Jul 2008 08:46:36 +0000 (08:46 +0000)
committerpdontthink <pdontthink@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Wed, 9 Jul 2008 08:46:36 +0000 (08:46 +0000)
git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@13222 7612ce4b-ef26-0410-bec9-ea0150e637f0

functions/template/folder_list_util.php
templates/default/left_main.tpl
templates/default_advanced/js/dtree.js
templates/default_advanced/left_main.tpl

index 42a29eee9794357ec78e6482dde3b67638babe72..61c4322acf1013df5e7896e673a2faf2fd311c46 100644 (file)
@@ -47,6 +47,7 @@ function getMessageCount ($boxes, $type='total') {
 /**
  * Recursively iterates a mailboxes object to build a data structure that is
  * easy for template authors to work with.
+FIXME: well.... why not document that data structure here?
  * 
  * @param object $boxes Object of the class mailboxes
  * @author Steve Brown
@@ -115,5 +116,16 @@ function getBoxStructure ($boxes) {
         $box['ChildBoxes'][] = getBoxStructure($boxes->mbxs[$i]);
     }
     
+    // if plugins want to add some text or link after the folder name in
+    // the folder list, they should add to the "ExtraOutput" array element
+    // in $box (remember, it's passed through the hook by reference) -- making
+    // sure to play nice with other plugins by *concatenating* to "ExtraOutput"
+    // and NOT by overwriting it
+    //
+    // known users of this hook:
+    // empty_folders
+    //
+    do_hook('left_main_after_each_folder', $box);
+
     return $box;
 }
index 27fada32e99638b8a2c02ae5363c503a25cf0d49..6d9169c78c859ed63b12d9f0867ddad623c2ad67 100644 (file)
@@ -209,6 +209,11 @@ function buildMailboxTree ($box, $settings, $icon_theme_path, $indent_factor=0)
         }
     }
 
+    // Add any extra output that may have been added by plugins, etc
+    //
+    if (!empty($box['ExtraOutput']))
+        $end .= $box['ExtraOutput'];
+
     $span = '';
     $spanend = '';
     if ($settings['useSpecialFolderColor'] && $box['IsSpecial']) {
@@ -219,22 +224,6 @@ function buildMailboxTree ($box, $settings, $icon_theme_path, $indent_factor=0)
         $spanend = '</span>';
     }
 
-/********
- * Pulling imapConnection due to segfaults that cannot be tracked down.  Best
- * we can determine, it's some combination of this var and >= 4 plugins enabled.
- * No further clue from anyone.
- ********
- * Update: syntax of this hook call changed a bit, so if the error is so anomalous,
- * it might be worth trying this again to see if it is still segfaulting
- ********
-    
-    // let plugins fiddle with end of line
-// FIXME: no hooks in templates! Although note that I'm not sure we can avoid it here because the context of which folder we are displaying is important to the hook, unless we preemptively iterate through all folders and collect the output from the hook call for that and give that to the template.... seems like overkill; I say this hook remains
-    $end .= concat_hook_function('left_main_after_each_folder',
-            $temp=array(isset($numMessages) ? &$numMessages : '',
-            &$box['MailboxFullName'], &$settings['imapConnection']));
-*/
-
     $end .= '</span>';
 
     $out = '';
index 37f8f0e0759c244759af4297f4045f8443c8cc5d..245b497e17f07c7f5021b24003c2d92422b48140 100644 (file)
@@ -141,6 +141,7 @@ dTree.prototype.node = function(node, nodeId) {
        else if ((!this.config.folderLinks || !node.url) && node._hc && node.pid != this.root.id)
                str += '<a href="javascript: ' + this.obj + '.o(' + nodeId + ');" class="node">';
        str += node.name;
+//FIXME: if node.name contains a hyperlink, either the plugin that put it there should be responsible for adding the </a> for the main folder link or the line below should be changed to detect inner links and close the main one before any; for now, it seems to work anyway although I think the resultant HTML is invalid (hyperlink within a hyperlink and extra, out of place closing </a> at the end)
        if (node.url || ((!this.config.folderLinks || !node.url) && node._hc)) str += '</a>';
        str += '</div>';
        if (node._hc) {
index 2deb4aa9baa0503c7803bbd8fc1d3ed9639ebacb..47005eab964439477dbf4ab53bdbf4a2fd456201 100644 (file)
@@ -195,6 +195,11 @@ function buildMailboxTree ($box, $settings, $icon_theme_path, $parent_node=-1) {
             }
         }
 
+        // Add any extra output that may have been added by plugins, etc
+        //
+        if (!empty($box['ExtraOutput']))
+            $end .= $box['ExtraOutput'];
+
         $span = '';
         $spanend = '';
         if ($settings['useSpecialFolderColor'] && $box['IsSpecial']) {
@@ -205,11 +210,6 @@ function buildMailboxTree ($box, $settings, $icon_theme_path, $parent_node=-1) {
             $spanend = '</span>';
         }               
         
-        /**
-         * NOTE: Plugins would horribly break this advanced tree, so we are
-         *       going to skip that part altogether.
-         */     
-
         $name = str_replace(
                     array(' ','<','>'),
                     array('&nbsp;','&lt;','&gt;'),