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 42a29ee..61c4322 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.
 /**
  * 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
  * 
  * @param object $boxes Object of the class mailboxes
  * @author Steve Brown
@@ -115,5 +116,16 @@ function getBoxStructure ($boxes) {
         $box['ChildBoxes'][] = getBoxStructure($boxes->mbxs[$i]);
     }
     
         $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;
 }
     return $box;
 }
index 27fada3..6d9169c 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']) {
     $span = '';
     $spanend = '';
     if ($settings['useSpecialFolderColor'] && $box['IsSpecial']) {
@@ -219,22 +224,6 @@ function buildMailboxTree ($box, $settings, $icon_theme_path, $indent_factor=0)
         $spanend = '</span>';
     }
 
         $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 = '';
     $end .= '</span>';
 
     $out = '';
index 37f8f0e..245b497 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;
        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) {
        if (node.url || ((!this.config.folderLinks || !node.url) && node._hc)) str += '</a>';
        str += '</div>';
        if (node._hc) {
index 2deb4aa..47005ea 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']) {
         $span = '';
         $spanend = '';
         if ($settings['useSpecialFolderColor'] && $box['IsSpecial']) {
@@ -205,11 +210,6 @@ function buildMailboxTree ($box, $settings, $icon_theme_path, $parent_node=-1) {
             $spanend = '</span>';
         }               
         
             $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;'),
         $name = str_replace(
                     array(' ','<','>'),
                     array('&nbsp;','&lt;','&gt;'),