Source for file plugin.php
Documentation is available at plugin.php
 * This file provides the framework for a plugin architecture.  
 * Documentation on how to write plugins might show up some time.  
 * @copyright © 1999-2006 The SquirrelMail Project Team  
 * @license http://opensource.org/licenses/gpl-license.php GNU Public License  
 * @version $Id: plugin.php,v 1.60 2006/09/30 07:09:09 tokul Exp $  
 * This function adds a plugin.  
 * @param string $name Internal plugin name (ie. delete_move_next)  
        include_once(SM_PATH . 
"plugins/$name/setup.php");  
        $function = 
"squirrelmail_plugin_init_$name";  
 * This function executes a hook.  
 * @param string $name Name of hook to fire  
    global $squirrelmail_plugin_hooks, $currentHookName;  
    $currentHookName = 
$name;  
    if (isset
($squirrelmail_plugin_hooks[$name])  
          && 
is_array($squirrelmail_plugin_hooks[$name])) { 
        foreach ($squirrelmail_plugin_hooks[$name] as $function) {  
            /* Add something to set correct gettext domain for plugin. */  
    /* Variable-length argument lists have a slight problem when */  
    /* passing values by reference. Pity. This is a workaround.  */  
 * This function executes a hook and allows for parameters to be  
 * passed, wherein each plugin can modify the parameters before  
 * they are passed to the next funciton. Whether or not the  
 * parameters are modified, plugins on this hook should always  
 * return the given parameters.  
 * @param string name the name of the hook  
 * @param mixed param the parameters to pass to the hook function  
 * @return mixed the possibly modified hook parameters  
    global $squirrelmail_plugin_hooks, $currentHookName;  
    $currentHookName = 
$name;  
    if (isset
($squirrelmail_plugin_hooks[$name])  
          && 
is_array($squirrelmail_plugin_hooks[$name])) { 
        foreach ($squirrelmail_plugin_hooks[$name] as $function) {  
            /* Add something to set correct gettext domain for plugin. */  
                $parm = 
$function($parm);  
    /* Variable-length argument lists have a slight problem when */  
    /* passing values by reference. Pity. This is a workaround.  */  
 * This function executes a hook and allows for parameters to be passed.  
 * @param string name the name of the hook  
 * @param mixed param the parameters to pass to the hook function  
 * @return mixed the return value of the hook function  
    global $squirrelmail_plugin_hooks, $currentHookName;  
    $currentHookName = 
$name;  
    if (isset
($squirrelmail_plugin_hooks[$name])  
          && 
is_array($squirrelmail_plugin_hooks[$name])) { 
        foreach ($squirrelmail_plugin_hooks[$name] as $function) {  
            /* Add something to set correct gettext domain for plugin. */  
    /* Variable-length argument lists have a slight problem when */  
    /* passing values by reference. Pity. This is a workaround.  */  
 * This function executes a hook, allows for parameters to be passed,  
 * and looks for an array returned from each plugin: each array is  
 * then merged into one and returned to the core hook location.  
 * Note that unlike PHP's array_merge function, matching array keys  
 * will not overwrite each other, instead, values under such keys  
 * will be concatenated if they are both strings, or merged if they  
 * are arrays (in the same (non-overwrite) manner recursively).  
 * Plugins returning non-arrays (strings, objects, etc) will have  
 * their output added to the end of the ultimate return array,  
 * unless ALL values returned are strings, in which case one string  
 * with all returned strings concatenated together is returned.  
 * @param string name the name of the hook  
 * @param mixed param the parameters to pass to the hook function  
 * @return mixed the merged return arrays or strings of each  
    global $squirrelmail_plugin_hooks, $currentHookName;  
    $currentHookName = 
$name;  
    if (isset
($squirrelmail_plugin_hooks[$name])  
          && 
is_array($squirrelmail_plugin_hooks[$name])) { 
        foreach ($squirrelmail_plugin_hooks[$name] as $function) {  
            /* Add something to set correct gettext domain for plugin. */  
                $plugin_ret = 
$function($parm);  
                if (!empty($plugin_ret)) {  
    /* Variable-length argument lists have a slight problem when */  
    /* passing values by reference. Pity. This is a workaround.  */  
 * 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  
 * 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  
 * @return bool the result of the function  
    global $squirrelmail_plugin_hooks, $currentHookName;  
    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) {  
        /* Examine the aftermath and assign the return value appropriately */  
        if (($priority > 
0) && 
($yea)) {  
        } elseif (($priority < 
0) && 
($nay)) {  
            // There's a tie, no action needed.  
    // If the code gets here, there was a problem - no hooks, etc.  
 * 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  
 * *** THIS IS A TEST FOR JAVASCRIPT SUPPORT ***  
 * FIXME: This function needs to have its name changed!  
 * @return bool whether this browser properly supports JavaScript  
 * @deprecated use checkForJavascript() since 1.5.1  
 * Check if plugin is enabled  
 * @param string $plugin_name plugin name  
   * check if variable is empty. if var is not set, php empty  
   * returns true without error notice.  
   * then check if it is an array  
  if (empty($plugins) || 
! is_array($plugins))  
  if ( in_array($plugin_name,$plugins) ) {  
  * Check a plugin's version.  
  * Returns TRUE if the given plugin is installed,  
  * activated and is at minimum version $a.$b.$c.  
  * If any one of those conditions fails, FALSE  
  * will be returned (careful of plugins that are  
  * sufficiently versioned but are not activated).  
  * By overriding the default value of $force_inclusion,  
  * this function will attempt to grab versioning  
  * information from the given plugin even if it  
  * is not activated (plugin still has to be  
  * unpackaged and set in place in the plugins  
  * directory).  Use with care - some plugins  
  * might break SquirrelMail when this is used.  
  * Note that this function assumes plugin  
  * versioning is consistently applied in the same  
  * fashion that SquirrelMail versions are, with the  
  * exception that an applicable SquirrelMail  
  * version may be appended to the version number  
  * (which will be ignored herein).  That is, plugin  
  * version number schemes are expected in the following  
  * format:  1.2.3, or 1.2.3-1.4.0.  
  * Any characters after the third number are discarded,  
  * so formats such as the following will also work,  
  * although extra information about beta versions can  
  * possibly confuse the desired results of the version  
  * check:  1.2.3-beta4, 1.2.3.RC2, and so forth.  
  * @param string plugin_name   name of the plugin to  
  * @param int  a               major version number  
  * @param int  b               minor version number  
  * @param int  c               release number  
  * @param bool force_inclusion try to get version info  
  *                              for plugins not activated?  
                              $force_inclusion = 
FALSE)  
   $info_function = 
$plugin_name . 
'_info';  
   $version_function = 
$plugin_name . 
'_version';  
   // first attempt to find the plugin info function, wherein  
   // the plugin version should be available  
      $plugin_info = 
$info_function();  
   else if ($force_inclusion   
      include_once(SM_PATH . 
'plugins/' . 
$plugin_name . 
'/setup.php');  
         $plugin_info = 
$info_function();  
   if (!empty($plugin_info['version']))  
      $plugin_version = 
$plugin_info['version'];  
   // otherwise, look for older version function   
         $plugin_version = 
$version_function();  
   if (!$plugin_version) return FALSE;  
   // now massage version number into something we understand  
   $plugin_version = 
explode('.', $plugin_version);  
   if (!isset
($plugin_version[0])) $plugin_version[0] = 
0;  
   if (!isset
($plugin_version[1])) $plugin_version[1] = 
0;  
   if (!isset
($plugin_version[2])) $plugin_version[2] = 
0;  
//   sm_print_r($plugin_version);  
   // now test the version number  
   if ($plugin_version[0] < 
$a ||
  
      ($plugin_version[0] == 
$a && 
$plugin_version[1] < 
$b) ||
  
      ($plugin_version[0] == 
$a && 
$plugin_version[1] == 
$b && 
$plugin_version[2] < 
$c))  
 
 
	
		Documentation generated on Sat, 07 Oct 2006 16:13:04 +0300 by phpDocumentor 1.3.0RC6