b2evolution

Multilingual multiuser multiblog engine

b2evolution Technical Documentation (Version 1.9) [ class tree: plugins ] [ index: plugins ] [ all elements ]

Source for file _test.plugin.php

Documentation is available at _test.plugin.php

  1. <?php
  2. /**
  3.  * This file implements the TEST plugin.
  4.  *
  5.  * For the most recent and complete Plugin API documentation
  6.  * see {@link Plugin} in ../evocore/_plugin.class.php.
  7.  *
  8.  * This file is part of the evoCore framework - {@link http://evocore.net/}
  9.  * See also {@link http://sourceforge.net/projects/evocms/}.
  10.  *
  11.  * @copyright (c)2003-2006 by Francois PLANQUE - {@link http://fplanque.net/}
  12.  *  Parts of this file are copyright (c)2004-2006 by Daniel HAHLER - {@link http://thequod.de/contact}.
  13.  *
  14.  *  {@internal License choice
  15.  *  - If you have received this file as part of a package, please find the license.txt file in
  16.  *    the same folder or the closest folder above for complete license terms.
  17.  *  - If you have received this file individually (e-g: from http://cvs.sourceforge.net/viewcvs.py/evocms/)
  18.  *    then you must choose one of the following licenses before using the file:
  19.  *    - GNU General Public License 2 (GPL) - http://www.opensource.org/licenses/gpl-license.php
  20.  *    - Mozilla Public License 1.1 (MPL) - http://www.opensource.org/licenses/mozilla1.1.php
  21.  *  }}}
  22.  *
  23.  *  {@internal Open Source relicensing agreement:
  24.  *  Daniel HAHLER grants Francois PLANQUE the right to license
  25.  *  Daniel HAHLER's contributions to this file and the b2evolution project
  26.  *  under any OSI approved OSS license (http://www.opensource.org/licenses/).
  27.  *  }}}
  28.  *
  29.  * @package plugins
  30.  *
  31.  *  {@internal Below is a list of authors who have contributed to design/coding of this file: }}
  32.  * @author fplanque: Francois PLANQUE - {@link http://fplanque.net/}
  33.  * @author blueyed: Daniel HAHLER
  34.  *
  35.  * @version $Id: _test.plugin.php,v 1.48.2.8 2006/12/26 00:07:42 fplanque Exp $
  36.  */
  37. if!defined('EVO_MAIN_INIT') ) die'Please, do not access this page directly.' );
  38.  
  39.  
  40. /**
  41.  * TEST Plugin
  42.  *
  43.  * This plugin responds to virtually all possible plugin events :P
  44.  *
  45.  * @package plugins
  46.  */
  47. class test_plugin extends Plugin
  48. {
  49.     /**
  50.      * Variables below MUST be overriden by plugin implementations,
  51.      * either in the subclass declaration or in the subclass constructor.
  52.      */
  53.     var $name = 'Test';
  54.     var $code = 'evo_TEST';
  55.     var $priority = 50;
  56.     var $version = '1.9-dev';
  57.     var $author = 'The b2evo Group';
  58.     var $help_url = '';  // empty URL defaults to manual wiki, in this case: http://manual.b2evolution.net/Plugins/test_plugin';
  59.  
  60.     /*
  61.      * These variables MAY be overriden.
  62.      */
  63.     var $apply_rendering = 'opt-out';
  64.     var $number_of_installs = 1;
  65.     var $group = 'test';
  66.  
  67.  
  68.     /**
  69.      * Init
  70.      *
  71.      * This gets called after a plugin has been registered/instantiated.
  72.      */
  73.     function PluginInit$params )
  74.     {
  75.         $this->short_desc = 'Test plugin';
  76.         $this->long_desc = 'This plugin responds to virtually all possible plugin events :P';
  77.     }
  78.  
  79.  
  80.     /**
  81.      * Get the settings that the plugin can use.
  82.      *
  83.      * Those settings are transfered into a Settings member object of the plugin
  84.      * and can be edited in the backoffice (Settings / Plugins).
  85.      *
  86.      * @see Plugin::GetDefaultSettings()
  87.      * @see PluginSettings
  88.      * @see Plugin::PluginSettingsValidateSet()
  89.      * @return array 
  90.      */
  91.     function GetDefaultSettings$params )
  92.     {
  93.         $r array(
  94.             'click_me' => array(
  95.                     'label' => 'Click me!',
  96.                     'defaultvalue' => '1',
  97.                     'type' => 'checkbox',
  98.                 ),
  99.             'input_me' => array(
  100.                     'label' => 'How are you?',
  101.                     'defaultvalue' => '',
  102.                     'note' => 'Welcome to b2evolution',
  103.                 ),
  104.             'my_select' => array(
  105.                     'label' => 'Selector',
  106.                     'id' => $this->classname.'_my_select',
  107.                     'onchange' => 'document.getElementById("'.$this->classname.'_a_disabled_one").disabled = ( this.value == "sun" );',
  108.                     'defaultvalue' => 'one',
  109.                     'type' => 'select',
  110.                     'options' => array'sun' => 'Sunday''mon' => 'Monday' ),
  111.                 ),
  112.             'a_disabled_one' => array(
  113.                     'label' => 'This one is disabled',
  114.                     'id' => $this->classname.'_a_disabled_one',
  115.                     'type' => 'checkbox',
  116.                     'defaultvalue' => '1',
  117.                     'disabled' => true// this can be useful if you detect that something cannot be changed. You probably want to add a 'note' then, too.
  118.                     'note' => 'Change the above select input to "Monday" to enable it.',
  119.                 ),
  120.             );
  121.  
  122.         if$params['for_editing')
  123.         // we're asked for the settings for editing:
  124.             if$this->Settings->get('my_select'== 'mon' )
  125.             {
  126.                 $r['a_disabled_one']['disabled'false;
  127.             }
  128.         }
  129.  
  130.         return $r;
  131.     }
  132.  
  133.  
  134.     /**
  135.      * User settings.
  136.      *
  137.      * @see Plugin::GetDefaultUserSettings()
  138.      * @see PluginUserSettings
  139.      * @see Plugin::PluginUserSettingsValidateSet()
  140.      * @return array 
  141.      */
  142.     function GetDefaultUserSettings()
  143.     {
  144.         return array(
  145.                 'echo_random' => array(
  146.                     'label' => 'Echo a random number in AdminBeginPayload event',
  147.                     'type' => 'checkbox',
  148.                     'defaultvalue' => '0',
  149.                 ),
  150.                 'deactivate' => array(
  151.                     'label' => 'Deactivate',
  152.                     'type' => 'checkbox',
  153.                     'defaultvalue' => '0',
  154.                 ),
  155.             );
  156.     }
  157.  
  158.  
  159.     /**
  160.      * We trigger an extra event ourself (which we also provide ourselves).
  161.      *
  162.      * @return array 
  163.      */
  164.     function GetExtraEvents()
  165.     {
  166.         return array(
  167.                 // Gets "min" and "max" as params and should return a random number in between:
  168.                 'test_plugin_get_random' => 'TEST event that returns a random number.',
  169.             );
  170.     }
  171.  
  172.  
  173.     /**
  174.      * Define a test cron job
  175.      */
  176.     function GetCronJobs$params )
  177.     {
  178.         return array(
  179.                 array(
  180.                     'name' => 'TEST plugin - cron job',
  181.                     'ctrl' => 'test_job',
  182.                     'params' => array'param' => ),
  183.                 ),
  184.             );
  185.     }
  186.  
  187.  
  188.     /**
  189.      * Execute/Handle a test/sample cronjob.
  190.      */
  191.     function ExecCronJob$params )
  192.     {
  193.         if$params['ctrl'== 'test_job' )
  194.         {
  195.             return array'code' => 1'message' => 'Test successful.' );
  196.         }
  197.     }
  198.  
  199.  
  200.     /**
  201.      * Deactive the plugin for the current request if the user wants it so.
  202.      * @see Plugin::AppendLoginRegisteredUser()
  203.      */
  204.     function AppendLoginRegisteredUser()
  205.     {
  206.         if$this->UserSettings->get('deactivate') )
  207.         {
  208.             $this->forget_events();
  209.         }
  210.     }
  211.  
  212.  
  213.     /**
  214.      * Define some dependencies.
  215.      *
  216.      * @see Plugin::GetDependencies()
  217.      * @return array 
  218.      */
  219.     function GetDependencies()
  220.     {
  221.         return array(
  222.                 'recommends' => array(
  223.                     'events_by_one' => arrayarray('Foo''Bar')array('FooBar''BarFoo') )// a plugin that provides "Foo" and "Bar", and one (may be the same) that provides "FooBar" and "BarFoo"
  224.                     'events' => array'some_event''some_other_event' ),
  225.                     'plugins' => arrayarray'some_plugin''1' ) )// at least version 1 of some_plugin
  226.                 ),
  227.  
  228.                 'requires' => array(
  229.                     // Same syntax as with the 'recommends' class above, but would prevent the plugin from being installed.
  230.                 ),
  231.             );
  232.     }
  233.  
  234.  
  235.     /**
  236.      * Gets asked for, if user settings get updated.
  237.      *
  238.      * We just add a note.
  239.      *
  240.      * @see Plugin::PluginUserSettingsUpdateAction()
  241.      */
  242.     function PluginUserSettingsUpdateAction()
  243.     {
  244.         if$this->UserSettings->get('echo_random') )
  245.         {
  246.             $this->msg'TEST plugin: Random numbers have been disabled.' );
  247.         }
  248.         else
  249.         {
  250.             $this->msg'TEST plugin: Random numbers have been enabled.' );
  251.         }
  252.  
  253.         return true;
  254.     }
  255.  
  256.  
  257.     /**
  258.      * Event handlers:
  259.      */
  260.  
  261.     /**
  262.      * Event handler: Called when ending the admin html head section.
  263.      *
  264.      * @see Plugin::AdminEndHtmlHead()
  265.      * @param array Associative array of parameters
  266.      * @return boolean did we do something?
  267.      */
  268.     function AdminEndHtmlHead$params )
  269.     {
  270.         echo '<!-- This comment was added by the TEST plugin -->';
  271.  
  272.         return true;
  273.     }
  274.  
  275.  
  276.     /**
  277.      * Event handler: Called right after displaying the admin page footer.
  278.      *
  279.      * @see Plugin::AdminAfterPageFooter()
  280.      * @param array Associative array of parameters
  281.      * @return boolean did we do something?
  282.      */
  283.     function AdminAfterPageFooter$params )
  284.     {
  285.         echo '<p class="footer">This is the TEST plugin responding to the AdminAfterPageFooter event!</p>';
  286.  
  287.         return true;
  288.     }
  289.  
  290.  
  291.     /**
  292.      * Event handler: Called when displaying editor toolbars.
  293.      *
  294.      * @see Plugin::AdminDisplayToolbar()
  295.      * @param array Associative array of parameters
  296.      * @return boolean did we display a toolbar?
  297.      */
  298.     function AdminDisplayToolbar$params )
  299.     {
  300.         echo '<div class="edit_toolbar">This is the TEST Toolbar</div>';
  301.  
  302.         return true;
  303.     }
  304.  
  305.  
  306.     /**
  307.      * Event handler: Called when displaying editor buttons.
  308.      *
  309.      * @see Plugin::AdminDisplayEditorButton()
  310.      * @param array Associative array of parameters
  311.      * @return boolean did we display ?
  312.      */
  313.     function AdminDisplayEditorButton$params )
  314.     {
  315.         if$params['edit_layout'== 'simple' )
  316.         // this is the "simple" layout, we do nothing
  317.             return false;
  318.         }
  319.         ?>
  320.         <input type="button" value="TEST" onclick="alert('Hi! This is the TEST plugin (AdminDisplayEditorButton)!');" />
  321.         <?php
  322.         return true;
  323.     }
  324.  
  325.  
  326.     /**
  327.      * @see Plugin::AdminDisplayItemFormFieldset()
  328.      */
  329.     function AdminDisplayItemFormFieldset$params )
  330.     {
  331.         $params['Form']->begin_fieldset'TEST plugin' );
  332.         $params['Form']->info_field'TEST plugin''This is the TEST plugin responding to the AdminDisplayItemFormFieldset event.' );
  333.         $params['Form']->end_fieldset'Foo' );
  334.     }
  335.  
  336.  
  337.     /**
  338.      * @see Plugin::AdminBeforeItemEditCreate()
  339.      */
  340.     function AdminBeforeItemEditCreate$params )
  341.     {
  342.         $this->msg'This is the TEST plugin responding to the AdminBeforeItemEditCreate event.' );
  343.     }
  344.  
  345.  
  346.     /**
  347.      * @see Plugin::AdminBeforeItemEditUpdate()
  348.      */
  349.     function AdminBeforeItemEditUpdate$params )
  350.     {
  351.         $this->msg'This is the TEST plugin responding to the AdminBeforeItemEditUpdate event.' );
  352.     }
  353.  
  354.  
  355.     /**
  356.      * Event handler: Gets invoked in /admin/_header.php for every backoffice page after
  357.      *                the menu structure is build. You can use the {@link $AdminUI} object
  358.      *                to modify it.
  359.      *
  360.      * This is the hook to register menu entries. See {@link register_menu_entry()}.
  361.      *
  362.      * @see Plugin::AdminAfterMenuInit()
  363.      */
  364.     function AdminAfterMenuInit()
  365.     {
  366.         $this->register_menu_entry'Test tab' );
  367.     }
  368.  
  369.  
  370.     /**
  371.      * Event handler: Called when handling actions for the "Tools" menu.
  372.      *
  373.      * Use {@link $Messages} to add Messages for the user.
  374.      *
  375.      * @see Plugin::AdminToolAction()
  376.      */
  377.     function AdminToolAction$params )
  378.     {
  379.         global $Messages;
  380.  
  381.         $Messages->add'Hello, This is the AdminToolAction for the TEST plugin.' );
  382.     }
  383.  
  384.  
  385.     /**
  386.      * Event handler: Called when displaying the block in the "Tools" menu.
  387.      *
  388.      * @see Plugin::AdminToolPayload()
  389.      */
  390.     function AdminToolPayload$params )
  391.     {
  392.         echo 'Hello, This is the AdminToolPayload for the TEST plugin.';
  393.     }
  394.  
  395.  
  396.     /**
  397.      * Event handler: Method that gets invoked when our tab (?tab=plug_ID_X) is selected.
  398.      *
  399.      * You should catch params (GET/POST) here and do actions (no output!).
  400.      * Use {@link $Messages} to add messages for the user.
  401.      *
  402.      * @see Plugin::AdminTabAction()
  403.      */
  404.     function AdminTabAction()
  405.     {
  406.         global $Plugins;
  407.  
  408.         $this->text_from_AdminTabAction '<p>This is text from AdminTabAction for the TEST plugin.</p>'
  409.             .'<p>Here is a random number: '
  410.             .$Plugins->get_trigger_event_first_return('test_plugin_get_random'array'min'=>-1000'max'=>1000 )).'</p>';
  411.  
  412.         if$this->param_text param$this->get_class_id('text') ) )
  413.         {
  414.             $this->text_from_AdminTabAction .= '<p>You have said: '.$this->param_text.'</p>';
  415.         }
  416.     }
  417.  
  418.  
  419.     /**
  420.      * Event handler: Gets invoked when our tab is selected and should get displayed.
  421.      *
  422.      * @see Plugin::AdminTabPayload()
  423.      */
  424.     function AdminTabPayload()
  425.     {
  426.         echo 'Hello, this is the AdminTabPayload for the TEST plugin.';
  427.  
  428.         echo $this->text_from_AdminTabAction;
  429.  
  430.         // TODO: this is tedious.. should either be a global function (get_admin_Form()) or a plugin helper..
  431.         $Form new Form();
  432.         $Form->begin_form();
  433.         $Form->hidden_ctrl()// needed to pass the "ctrl=tools" param
  434.         $Form->hiddens_by_keyget_memorized() )// needed to pass all other memorized params, especially "tab"
  435.  
  436.         $Form->text_input$this->get_class_id().'_text'$this->param_text'20''Text' );
  437.  
  438.         $Form->button_input()// default "submit" button
  439.  
  440.         $Form->end_form();
  441.     }
  442.  
  443.  
  444.     /**
  445.      * Event handler: Gets invoked before the main payload in the backoffice.
  446.      *
  447.      * @see Plugin::AdminBeginPayload()
  448.      */
  449.     function AdminBeginPayload()
  450.     {
  451.         global $Plugins;
  452.  
  453.         echo '<div class="panelblock center">TEST plugin: AdminBeginPayload event.</div>';
  454.  
  455.         if$this->UserSettings->get('echo_random') )
  456.         {
  457.             echo '<div class="panelblock center">TEST plugin: A random number requested by user setting: '
  458.                     .$Plugins->get_trigger_event_first_return('test_plugin_get_random'array'min'=>0'max'=>1000 ) ).'</div>';
  459.         }
  460.     }
  461.  
  462.  
  463.     /**
  464.      * Event handler: Called when rendering item/post contents as HTML.
  465.      *
  466.      * Note: return value is ignored. You have to change $params['content'].
  467.      *
  468.      * @see Plugin::RenderItemAsHtml()
  469.      */
  470.     function RenderItemAsHtml$params )
  471.     {
  472.         $params['data''TEST['.$params['data'].']TEST';
  473.     }
  474.  
  475.  
  476.     /**
  477.      * Event handler: Called when rendering item/post contents as XML.
  478.      *
  479.      * Note: return value is ignored. You have to change $params['content'].
  480.      *
  481.      * @see Plugin::RenderItemAsXml()
  482.      */
  483.     function RenderItemAsXml$params )
  484.     {
  485.         // Do the same as with HTML:
  486.         $this->RenderItemAsHtml$params );
  487.     }
  488.  
  489.  
  490.     /**
  491.      * Event handler: Called when rendering item/post contents as text.
  492.      *
  493.      * Note: return value is ignored. You have to change $params['content'].
  494.      *
  495.      * @see Plugin::RenderItemAsText()
  496.      */
  497.     function RenderItemAsText$params )
  498.     {
  499.         // Do nothing.
  500.     }
  501.  
  502.  
  503.     /**
  504.      * Event handler: Called when displaying item/post contents as HTML.
  505.      *
  506.      * Note: return value is ignored. You have to change $params['content'].
  507.      *
  508.      * @see Plugin::DisplayItemAsHtml()
  509.      */
  510.     function DisplayItemAsHtml$params )
  511.     {
  512.         $params['data'$params['data']."\n<br />-- test_plugin::DisplayItemAsHtml()";
  513.     }
  514.  
  515.  
  516.     /**
  517.      * Event handler: Called when displaying item/post contents as XML.
  518.      *
  519.      * Note: return value is ignored. You have to change $params['content'].
  520.      *
  521.      * @see Plugin::DisplayItemAsXml()
  522.      */
  523.     function DisplayItemAsXml$params )
  524.     {
  525.         $params['data'$params['data']."\n<br />-- test_plugin::DisplayItemAsXml()";
  526.     }
  527.  
  528.  
  529.     /**
  530.      * Event handler: Called when displaying item/post contents as text.
  531.      *
  532.      * Note: return value is ignored. You have to change $params['content'].
  533.      *
  534.      * @see Plugin::DisplayItemAsText()
  535.      */
  536.     function DisplayItemAsText$params )
  537.     {
  538.         $params['data'$params['data']."\n<br />-- test_plugin::DisplayItemAsText()";
  539.     }
  540.  
  541.  
  542.     /**
  543.      * Wrap a to be displayed IP address.
  544.      * @see Plugin::FilterIpAddress()
  545.      */
  546.     function FilterIpAddress$params )
  547.     {
  548.         $params['data''[[IP:'.$params['data'].' (TEST plugin)]]';
  549.     }
  550.  
  551.  
  552.     /**
  553.      * Event handler: Called before the plugin is installed.
  554.      * @see Plugin::BeforeInstall()
  555.      */
  556.     function BeforeInstall()
  557.     {
  558.         global $Plugins;
  559.         $this->msg'TEST plugin: BeforeInstall event.' );
  560.         return true;
  561.     }
  562.  
  563.  
  564.     /**
  565.      * Event handler: Called when the plugin has been installed.
  566.      * @see Plugin::AfterInstall()
  567.      */
  568.     function AfterInstall()
  569.     {
  570.         $this->msg'TEST plugin sucessfully installed. All the hard work we did was adding this message in the AfterInstall event.. ;)' );
  571.     }
  572.  
  573.  
  574.     /**
  575.      * Event handler: Called before the plugin is going to be un-installed.
  576.      * @see Plugin::BeforeUninstall()
  577.      */
  578.     function BeforeUninstall()
  579.     {
  580.         $this->msg'TEST plugin sucessfully un-installed. All the hard work we did was adding this message.. ;)' );
  581.         return true;
  582.     }
  583.  
  584.  
  585.     /**
  586.      * Event handler: called when a new user has registered.
  587.      * @see Plugin::AfterUserRegistration()
  588.      */
  589.     function AfterUserRegistration$params )
  590.     {
  591.         $this->msg'The TEST plugin welcomes the new user '.$params['User']->dget('login').'!' );
  592.     }
  593.  
  594.  
  595.     /**
  596.      * Event handler: Called at the end of the "Login" form.
  597.      * @see Plugin::DisplayLoginFormFieldset()
  598.      */
  599.     function DisplayLoginFormFieldset$params )
  600.     {
  601.         $params['Form']->info_field'TEST plugin''This is added by the TEST plugin.' );
  602.     }
  603.  
  604.  
  605.     /**
  606.      * Event handler: Called when a user tries to login.
  607.      * @see Plugin::LoginAttempt()
  608.      */
  609.     function LoginAttempt()
  610.     {
  611.         // $this->msg( 'NO LOGIN!', 'login_error' );
  612.         $this->msg'This the TEST plugin responding to the LoginAttempt event.''note' );
  613.     }
  614.  
  615.  
  616.     /**
  617.      * Automagically login every user as "demouser" who is not logged in and does not
  618.      * try to currently.
  619.      *
  620.      * To enable/test it, change the "if-0" check below to "if( 1 )".
  621.      *
  622.      * @see Plugin::AlternateAuthentication()
  623.      */
  624.     function AlternateAuthentication()
  625.     {
  626.         if// you should only enable it for test purposes, because it automagically logs every user in as "demouser"!
  627.         {
  628.             global $Session$Messages$UserCache;
  629.  
  630.             if$demo_User $UserCache->get_by_login('demouser') )
  631.             // demouser exists:
  632.                 $Session->set_User$demo_User );
  633.                 $Messages->add'Logged in as demouser.''success' );
  634.                 return true;
  635.             }
  636.         }
  637.     }
  638.  
  639.  
  640.     /**
  641.      * @see Plugin::DisplayValidateAccountFormFieldset()
  642.      */
  643.     function DisplayValidateAccountFormFieldset$params )
  644.     {
  645.         $params['Form']->info'TEST plugin''This is the TEST plugin responding to the ValidateAccountFormSent event.' );
  646.     }
  647.  
  648.  
  649.     /**
  650.      * Gets provided as plugin event (and gets also used internally for demonstration).
  651.      *
  652.      * @param array Associative array of parameters
  653.      *               'min': mininum number
  654.      *               'max': maxinum number
  655.      * @return integer 
  656.      */
  657.     function test_plugin_get_random$params )
  658.     {
  659.         return rand$params['min']$params['max');
  660.     }
  661.  
  662. }
  663.  
  664.  
  665. /*
  666.  * $Log: _test.plugin.php,v $
  667.  * Revision 1.48.2.8  2006/12/26 00:07:42  fplanque
  668.  * reduce strain on translators. plugin devs need to understand english anyway.
  669.  *
  670.  * Revision 1.48.2.7  2006/11/04 19:55:12  fplanque
  671.  * Reinjected old Log blocks. Removing them from CVS was a bad idea -- especially since Daniel has decided branch 1.9 was his HEAD...
  672.  *
  673.  * Revision 1.48  2006/07/10 22:53:38  blueyed
  674.  * Grouping of plugins added, based on a patch from balupton
  675.  *
  676.  * Revision 1.47  2006/07/10 20:19:30  blueyed
  677.  * Fixed PluginInit behaviour. It now gets called on both installed and non-installed Plugins, but with the "is_installed" param appropriately set.
  678.  *
  679.  * Revision 1.46  2006/07/07 21:26:49  blueyed
  680.  * Bumped to 1.9-dev
  681.  *
  682.  * Revision 1.45  2006/07/06 19:56:29  fplanque
  683.  * no message
  684.  *
  685.  * Revision 1.44  2006/06/16 21:30:57  fplanque
  686.  * Started clean numbering of plugin versions (feel free do add dots...)
  687.  *
  688.  * Revision 1.43  2006/06/13 21:33:40  blueyed
  689.  * Add note when updating PluginUserSettings
  690.  *
  691.  * Revision 1.42  2006/06/06 20:35:50  blueyed
  692.  * Plugins can define extra events that they trigger themselves.
  693.  *
  694.  * Revision 1.41  2006/05/30 19:39:55  fplanque
  695.  * plugin cleanup
  696.  *
  697.  * Revision 1.40  2006/05/24 20:43:19  blueyed
  698.  * Pass "Item" as param to Render* event methods.
  699.  *
  700.  * Revision 1.39  2006/05/22 20:35:37  blueyed
  701.  * Passthrough some attribute of plugin settings, allowing to use JS handlers. Also fixed submitting of disabled form elements.
  702.  *
  703.  * Revision 1.38  2006/05/05 19:36:24  blueyed
  704.  * New events
  705.  *
  706.  * Revision 1.37  2006/05/02 01:47:58  blueyed
  707.  * Normalization
  708.  *
  709.  * Revision 1.36  2006/04/24 15:43:37  fplanque
  710.  * no message
  711.  *
  712.  * Revision 1.35  2006/04/22 02:36:39  blueyed
  713.  * Validate users on registration through email link (+cleanup around it)
  714.  *
  715.  * Revision 1.34  2006/04/21 16:53:27  blueyed
  716.  * Bumping TODO, please comment.
  717.  *
  718.  * Revision 1.33  2006/04/20 22:24:08  blueyed
  719.  * plugin hooks cleanup
  720.  *
  721.  * Revision 1.32  2006/04/19 22:26:25  blueyed
  722.  * cleanup/polish
  723.  *
  724.  * Revision 1.31  2006/04/19 20:14:03  fplanque
  725.  * do not restrict to :// (does not catch subdomains, not even www.)
  726.  *
  727.  * Revision 1.30  2006/04/19 18:55:37  blueyed
  728.  * Added login handling hook: AlternateAuthentication
  729.  *
  730.  * Revision 1.29  2006/04/18 17:06:14  blueyed
  731.  * Added "disabled" to plugin (user) settings (Thanks to balupton)
  732.  *
  733.  * Revision 1.28  2006/04/11 21:22:26  fplanque
  734.  * partial cleanup
  735.  *
  736.  */
  737. ?>

Documentation generated on Tue, 18 Dec 2007 22:53:18 +0100 by phpDocumentor 1.4.0