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