Fixed AUTHROS file corruption
[squirrelmail.git] / doc / plugin.txt
index 47f31f9aa080561fb6b9c5c356e5ded70532010b..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
 ======================================
 
@@ -74,12 +85,25 @@ in the plugin directory is requested, it must do a chdir("..") before
 including any of the standard SquirrelMail files.
 
 
+Hook Data Passed
+----------------
+Hooks, when executed, are called with one parameter, an array of data
+that is passed to the hook.  The first element in the array is the name
+of the hook that is being called.  Any other elements in the array are
+dependant on the type of hook that is being called.
+
+Some of the information in the array may be changed.  By default, the
+plugins should never change data unless it is documented otherwise.
+
+
 List of hooks
 -------------
   generic_header                  functions/page_header.php
   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)
@@ -94,19 +118,31 @@ 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
   login_bottom                    src/login.php
+  html_top                        src/read_body.php
   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
@@ -115,7 +151,8 @@ List of hooks
   help_chapter                    src/help.php
   addrbook_html_search_below      src/addrbook_search_html.php
   addressbook_bottom              src/addressbook.php
-  ^ attachment $type0/$type1      functions/mime.php
+  ^ attachment $type0/$type1      functions/mime.php (see note on attachments)
+   
    
 (*) Options
 -----------
@@ -125,14 +162,6 @@ The second way, you create your own section that they can choose from and it
 displays its own range of options.
 
 
-(^) Attachment Hooks
---------------------
-When a message has attachments, this hook is called with the MIME types.  For
-instance, a .zip file hook is "attachment application/x-zip".  The hook should
-probably show a link to do a specific action, such as "Verify" or "View" for a
-.zip file.
-
-
 First:  Integrating into existing options
 -----------------------------------------
 There are two hooks you need to use for this one:
@@ -163,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>
@@ -199,3 +229,91 @@ three hooks you will need to use.
     You should put the code in here that loads your preferences back
     into usable variables.  Examples of this can be found in the file
     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
+instance, a .zip file hook is "attachment application/x-zip".  The hook should
+probably show a link to do a specific action, such as "Verify" or "View" for a
+.zip file.
+
+This is a breakdown of the data passed in the array to the hook that is called:
+
+  [0] = Hook's name ('attachment text/plain')
+  [1] = Array of links of actions (more below) (Alterable)
+  [2] = Used for returning to mail message (startMessage)
+  [3] = Used for finding message to display (id)
+  [4] = Mailbox name, urlencode()'d (urlMailbox)
+  [5] = Entity ID inside mail message (ent)
+  [6] = Default URL to go to when filename is clicked on (Alterable)
+  [7] = Filename that is displayed for the attachment
+  [8] = Sent if message was found from a search (where)
+  [9] = Sent if message was found from a search (what)
+  
+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.