* Added several hooks
[squirrelmail.git] / doc / plugin.txt
index 574e1066bb6d981d853c1af3a9eb13fcc7ad39e5..ccdff59da7bd13b52921e82af73e61b37e7a4246 100644 (file)
@@ -72,3 +72,235 @@ 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
 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)
+  * options_link_and_description  src/options.php  (see note on options)
+  * options_highlight_bottom      src/options_highlight.php
+  * options_personal_bottom       src/options_personal.php
+  * options_personal_inside       src/options_personal.php
+  * options_personal_save         src/options_personal.php
+  * options_display_bottom        src/options_display.php
+  * options_display_inside        src/options_display.php
+  * options_display_save          src/options_display.php
+  * 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
+  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
+  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
+  help_top                        src/help.php
+  help_bottom                     src/help.php
+  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 (see note on attachments)
+   
+   
+(*) Options
+-----------
+There are two ways to do options for your plugin.  First, you can incorporate it
+into an existing section of the preferences (Display, Personal, or Folders).
+The second way, you create your own section that they can choose from and it 
+displays its own range of options.
+
+
+First:  Integrating into existing options
+-----------------------------------------
+There are two hooks you need to use for this one:
+
+1.  options_YOUCHOOSE_inside
+    This is the code that goes inside the table for the section you choose.  Since
+    it is going inside an existing table, it must be in this form:
+    ------cut here-------
+      <tr>
+         <td>
+            OPTION_NAME
+         </td>
+         <td>
+            OPTION_INPUT
+         </td>
+      </tr>   
+    ------cut here-------
+
+2.  options_YOUCHOOSE_save
+    This is the code that saves your preferences into the users' preference 
+    file.  For an example of how to do this, see src/options.php.
+
+    
+Second:  Create your own section
+-------------------------------
+It is possible to create your own options sections with plugins.  There are
+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.  Make sure to read
+    the section on outputting your own pages.
+
+    -----cut here-----  
+      function my_plugin_name_my_function() {
+         global $color
+         ?>
+         <table width=50% cellpadding=3 cellspacing=0 border=0 align=center>
+            <tr>
+               <td bgcolor="<? echo $color[9] ?>">
+                  <a href="../plugins/YOUR_PLUGIN/YOUR_OPTIONS.php">YOUR OPTIONS NAME</a>
+               </td>
+            </tr>
+            <tr>
+               <td bgcolor="<? echo $color[0] ?>">
+                  YOUR DESCRIPTION
+               </td>
+            </tr>
+         </table>
+         <?php
+      }
+    -----cut here-----  
+
+2.  options_save
+    Here is the code that you need to do to save your options in the 
+    preference files or manipulate whatever data you are trying to change
+    through the options section.  You can look at options.php for details 
+    on how this is to be done.
+
+3.  loading_prefs (optional)
+    If you are wanting to save preferences to the preference files, then
+    you need to do this step as well.  Otherwise if you are manipulating
+    other data, ignore this step.
+
+    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.