Fixed to use sm_mt_randomize()
[squirrelmail.git] / doc / plugin.txt
index 1031e0ca8a0c6dbbefa86b755000463400500e02..1e619385a8ba1d8479a12e0a751c1b3aedeb6b6d 100644 (file)
@@ -1,3 +1,14 @@
+$Id$
+
+It is best if you check out the SquirrelMail development FAQ for more
+information.  This document may be obsoleted at some point in the future (or
+maybe we'll write a script to get the wiki contents and dump them in here
+automatically).
+
+FAQ -> http://www.squirrelmail.org/wiki/wiki.php?DeveloperFAQ
+Plugin Hooks -> http://www.squirrelmail.org/wiki/wiki.php?DevelopingPlugins
+
+
 A FEW NOTES ON THE PLUGIN ARCHITECTURE
 ======================================
 
@@ -91,6 +102,8 @@ List of hooks
   menuline                        functions/page_header.php
   compose_button_row              src/compose.php
   compose_bottom                  src/compose.php
+  compose_form                    src/compose.php
+  compose_send                    src/compose.php
   left_main_before                src/left_main.php
   left_main_after                 src/left_main.php
   * options_save                  src/options.php  (see note on options)
@@ -105,13 +118,21 @@ List of hooks
   * options_folders_bottom        src/options_folders.php
   * options_folders_inside        src/options_folders.php
   * options_folders_save          src/options_folders.php
+  & options_identities_process    src/options_identities.php
+  & options_identities_top        src/options_identities.php
+  & options_identities_renumber   src/options_identities.php (multiple places)
+  & options_identities_table      src/options_identities.php
+  & options_identities_buttons    src/options_identities.php
   logout                          src/signout.php
+  logout_above_text               src/signout.php
   login_before                    src/webmail.php
   login_verified                  src/webmail.php
   loading_prefs                   src/load_prefs.php
   mailbox_index_before            functions/mailbox_display.php
   mailbox_index_after             functions/mailbox_display.php
   mailbox_form_before             functions/mailbox_display.php
+  subject_link                    functions/mailbox_display.php
+  motd                            src/right_main.php
   right_main_after_header         src/right_main.php
   right_main_bottom               src/right_main.php
   login_top                       src/login.php
@@ -120,6 +141,8 @@ List of hooks
   read_body_top                   src/read_body.php
   read_body_bottom                src/read_body.php
   html_bottom                     src/read_body.php
+  read_body_header                src/read_body.php
+  read_body_header_right          src/read_body.php
   search_before_form              src/search.php
   search_after_form               src/search.php
   search_bottom                   src/search.php
@@ -169,10 +192,11 @@ 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
-    page.  This should output HTML that looks like this:
+    page.  This should output HTML that looks like this.  Make sure to read
+    the section on outputting your own pages.
 
     -----cut here-----  
-      function my_function() {
+      function my_plugin_name_my_function() {
          global $color
          ?>
          <table width=50% cellpadding=3 cellspacing=0 border=0 align=center>
@@ -207,6 +231,33 @@ three hooks you will need to use.
     src/load_prefs.php
 
 
+(&) Identity Hooks
+------------------
+Some hooks are passed special information in the array of arguments.  See
+the SpamCop plugin for how to use them.
+
+options_identities_process
+   [0] = Hook's name
+   [1] = Should I run the SaveUpdateFunction() (alterable)
+
+options_identities_renumber
+   [0] = Hook's name
+   [1] = Renumber it from ('default' or 1 through # idents - 1)
+   [2] = Renumber it to (same thing)
+   
+options_identities_table
+   [0] = Hook's name
+   [1] = Color of table (use it like   <tr<?PHP echo $Info[1]?>>   in your
+         plugin)
+   [2] = Is this an empty section?
+   [3] = What is the 'post' value?
+  
+options_identities_buttons
+   [0] = Hook's name
+   [1] = Is this an empty section (the one at the end of the list)?
+   [2] = What is the 'post' value?
+
+
 (^) Attachment Hooks
 --------------------
 When a message has attachments, this hook is called with the MIME types.  For
@@ -232,3 +283,37 @@ To set up links for actions, you assign them like this:
   $Args[1]['your_plugin_name']['href'] = 'URL to link to';
   $Args[1]['your_plugin_name']['text'] = 'What to display';
     
+
+Outputting Your Own Pages
+-------------------------
+
+Often, when you want to provide your own customized options screen or create
+another web page instead of just using standard hooks, you will be creating
+your own .php files.  An example of this is the attachment_common plugin's
+image.php file.
+
+To make sure that security is maintained and standards are followed, the top
+of your PHP script should look very similar to this:
+
+  <?PHP
+    /* This is my php file.
+     * description goes here.
+     */
+     
+    chdir('..');
+    include('../src/validate.php');
+    
+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
+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
+mention that it requires SquirrelMail 1.1.1 or later.
+
+After that, if you need further functions, just use
+
+  include('../functions/filename.php');
+  
+in your script.  Since 1.0.5, it was no longer necessary (nor recommended)
+to use the "if (! isset($filename_php))" syntax.