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 * * @param string name the hook name * @param mixed parm the parameters for the hook function * @param int priority * @param bool tie * @return bool the result of the function */ function boolean_hook_function($name,$parm=NULL,$priority=0,$tie=false) { global $squirrelmail_plugin_hooks, $currentHookName; $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 */ $currentHookName = $name; foreach ($squirrelmail_plugin_hooks[$name] as $function) { if (function_exists($function)) { $ret = $function($parm); if ($ret) { $yea++; } else { $nay++; } } } $currentHookName = ''; /* 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 * offending browser. * *** THIS IS A TEST FOR JAVASCRIPT SUPPORT *** * FIXME: This function needs to have its name changed! * * @return bool whether this browser properly supports JavaScript */ function soupNazi(){ return !checkForJavascript(); } /*************************************/ /*** MAIN PLUGIN LOADING CODE HERE ***/ /*************************************/ /* On startup, register all plugins configured for use. */ if (isset($plugins) && is_array($plugins)) { foreach ($plugins as $name) { use_plugin($name); } } ?>