From: tassium Date: Thu, 4 Sep 2003 20:26:53 +0000 (+0000) Subject: New hook function: boolean_hook_function(), which is used for hooks that want a true... X-Git-Url: https://vcs.fsf.org/?p=squirrelmail.git;a=commitdiff_plain;h=5576644bf958bf275ff3db4d856b58de881f35ba;hp=97892060aa6334e15afb0bda92f5b2a45a4a1c64 New hook function: boolean_hook_function(), which is used for hooks that want a true/false value from the plugins. Currently used in isSpecialMailbox() git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@5623 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- diff --git a/ChangeLog b/ChangeLog index 65dfb770..8e8b0359 100644 --- a/ChangeLog +++ b/ChangeLog @@ -81,7 +81,9 @@ Version 1.5.0 -- CVS - Encoding of Russian translation changed to utf-8. Lithuanian translation changed to iso-8859-4. Fix allows to use national letters in folder names correctly. - Added "Bypass Trash" checkbox to folder index, used with the Delete - button. (tassium) + button. (update: This needs work and will be changed, possibly removed) + - Fixed a problem with delete_move_next and server thread-sorting. + - New hook function: boolean_hook_function() Used for true/false hooks. ************************************** *** SquirrelMail Stable Series 1.4 *** diff --git a/functions/imap_mailbox.php b/functions/imap_mailbox.php index 18af1782..5d8a1a6a 100755 --- a/functions/imap_mailbox.php +++ b/functions/imap_mailbox.php @@ -182,7 +182,7 @@ function isSpecialMailbox( $box ) { isTrashMailbox($box) || isSentMailbox($box) || isDraftMailbox($box) ); if ( !$ret ) { - $ret = do_hook_function( 'special_mailbox', $box ); + $ret = boolean_hook_function('special_mailbox',$box,1); } return $ret; } diff --git a/functions/plugin.php b/functions/plugin.php index 99b7f4c9..9c70edd1 100644 --- a/functions/plugin.php +++ b/functions/plugin.php @@ -90,6 +90,51 @@ function concat_hook_function($name,$parm=NULL) { return $ret; } +/** + * This function is used for hooks which are to return true or + * false. If $priority is > 0, any one or more trues will override + * any falses. If $priority < 0, then one or more falses will + * override any trues. + * Priority 0 means majority rules. Ties will be broken with $tie */ +function boolean_hook_function($name,$parm=NULL,$priority=0,$tie=false) { + global $squirrelmail_plugin_hooks; + $yea = 0; + $nay = 0; + $ret = $tie; + + if (isset($squirrelmail_plugin_hooks[$name]) && + is_array($squirrelmail_plugin_hooks[$name])) { + + /* Loop over the plugins that registered the hook */ + foreach ($squirrelmail_plugin_hooks[$name] as $function) { + if (function_exists($function)) { + $ret = $function($parm); + if ($ret) { + $yea++; + } else { + $nay++; + } + } + } + + /* Examine the aftermath and assign the return value appropriately */ + if (($priority > 0) && ($yea)) { + $ret = true; + } elseif (($priority < 0) && ($nay)) { + $ret = false; + } elseif ($yea > $nay) { + $ret = true; + } elseif ($nay > $yea) { + $ret = false; + } else { + // There's a tie, no action needed. + } + return $ret; + } + // If the code gets here, there was a problem - no hooks, etc. + return NULL; +} + /** * This function checks whether the user's USER_AGENT is known to * be broken. If so, returns true and the plugin is invisible to the