A FEW NOTES ON THE PLUGIN ARCHITECTURE
======================================
-The plugin architecture of SquirrelMail is designed to make it
-possible to add new features without having to patch SquirrelMail
-itself. At the moment the plugin part of SquirrelMail should be
-considered "alpha" or "beta" quality code.
-
-Until the functionality and code is more stable, be prepared for
-plugins to suddenly stop working.
-
-Functionality like password changing, displaying ads and calendars
-should be possible to add as plugins.
+The plugin architecture of SquirrelMail is designed to make it possible to
+add new features without having to patch SquirrelMail itself. Functionality
+like password changing, displaying ads and calendars should be possible to
+add as plugins.
The idea
In the main SquirrelMail files the file functions/plugin.php. In
places where hooks are made available they are executed by calling the
-function do_hook("hookname").
+function do_hook('hookname').
-The do_hook traverses the array $squirrelmail_plugin_hooks["hookname"]
+The do_hook traverses the array $squirrelmail_plugin_hooks['hookname']
and executes all the functions that are named in that array.
A plugin must reside in a subdirectory in the plugins/ directory. The
To start using a plugin, its name must be added to the $plugins array
in config.php like this:
- $plugins[0] = "plugin_name";
+ $plugins[0] = 'plugin_name';
When a plugin is registered the file plugins/plugin_name/setup.php is
included and the function squirrelmail_plugin_init_plugin_name is
function squirrelmail_plugin_init_demo () {
global $squirrelmail_plugin_hooks;
- $squirrelmail_plugin_hooks["generic_header"]["demo"] = "plugin_demo_header";
- $squirrelmail_plugin_hooks["menuline"]["demo"] = "plugin_demo_menuline";
+ $squirrelmail_plugin_hooks['generic_header']['demo'] = 'plugin_demo_header';
+ $squirrelmail_plugin_hooks['menuline']['demo'] = 'plugin_demo_menuline';
}
Note that the SquirrelMail files assume that all other SquirrelMail
files are available as ../directory/file. This means that if some file
-in the plugin directory is requested, it must do a chdir("..") before
+in the plugin directory is requested, it must do a chdir('..') before
including any of the standard SquirrelMail files.
html_bottom src/read_body.php
read_body_header src/read_body.php
read_body_header_right src/read_body.php
+ read_body_after_from src/read_body.php
search_before_form src/search.php
search_after_form src/search.php
search_bottom src/search.php
addressbook_bottom src/addressbook.php
^ attachment $type0/$type1 functions/mime.php (see note on attachments)
-
(*) Options
-----------
There are two ways to do options for your plugin. First, you can incorporate it
three hooks you will need to use.
1. options_link_and_description
- This creates the link and has a description that are shown on the options
+ This creates the link and has a description that is shown on the options
page. This should output HTML that looks like this. Make sure to read
- the section on outputting your own pages.
+ the section on outputing your own pages.
-----cut here-----
function my_plugin_name_my_function() {
?>
<table width=50% cellpadding=3 cellspacing=0 border=0 align=center>
<tr>
- <td bgcolor="<? echo $color[9] ?>">
+ <td bgcolor="<?php echo $color[9] ?>">
<a href="../plugins/YOUR_PLUGIN/YOUR_OPTIONS.php">YOUR OPTIONS NAME</a>
</td>
</tr>
<tr>
- <td bgcolor="<? echo $color[0] ?>">
+ <td bgcolor="<?php echo $color[0] ?>">
YOUR DESCRIPTION
</td>
</tr>
$Args[1]['your_plugin_name']['href'] = 'URL to link to';
$Args[1]['your_plugin_name']['text'] = 'What to display';
+It's also possible to specify a hook as "attachment type0/*",
+for example "attachment text/*". This hook will be executed whenever there's
+no more specific rule available for that type.
+
Outputting Your Own Pages
-------------------------
The validate.php script will include internationalization support,
config.php variables, strings.php functions, and also authenticate that the
-user is truly logged in. Validate.php also calls stripslashes() on incoming
+user is truly logged in. validate.php also calls stripslashes() on incoming
data (if gpc_magic_quotes() is on). You should never need to worry about
that stuff again. As a warning, this has only really been ironed out in
1.1.1. If you create/modify a plugin to follow these rules, you must