<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://gwiki3.thatlinuxbox.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Yolanda</id>
		<title>GeeklogWiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://gwiki3.thatlinuxbox.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Yolanda"/>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/Special:Contributions/Yolanda"/>
		<updated>2026-04-06T10:19:55Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.27.5</generator>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=Plugin_APIG2&amp;diff=515</id>
		<title>Plugin APIG2</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=Plugin_APIG2&amp;diff=515"/>
				<updated>2004-10-24T11:37:59Z</updated>
		
		<summary type="html">&lt;p&gt;Yolanda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Geeklog 2 (GL2) is the next generation of content management systems in the popular [http://www.geeklog.net/ Geeklog] family. Geeklog is becoming a very popular backend for many sites. However, as development continues in the 1.3.x branch of Geeklog and features continue to be added, several architechural problems have been uncovered. These issues include scalability, performance and weakness is the plugin API. &lt;br /&gt;
&lt;br /&gt;
The goal of the GL2 project is to improve all of these areas. This document draws out the plans for the GL2 plugin API. Until the first official release of GL2, this document can be considered a work in progress. For history details please seen the history section at the end of this document (for releases) or refer to the wiki change log (for a detailed list of changes).&lt;br /&gt;
&lt;br /&gt;
It is especially important to note that it is planned for GL2 to use [http://www.zend.com/php5/ PHP 5] and make extensive use of the [http://pear.php.net/ PEAR] extenstions to php. These choices, along with a authentication and access engine developed by Tony Bibbs, will shape the implementation of the plugin API.&lt;br /&gt;
&lt;br /&gt;
=== Plugin Overview ===&lt;br /&gt;
&lt;br /&gt;
The GL2 plugin architecture will be event based. Each plugin will register to listen for events that are generated by the GL2 kernel and other plugins. The GL2 kernel will act as a router for these events. When an event occurs, the GL2 kernel will call all the plugins that have registered for that event.&lt;br /&gt;
&lt;br /&gt;
== The Plugin Interface Class ==&lt;br /&gt;
&lt;br /&gt;
The main component of GL2 plugins will be the plugin interface class. This class will need to be implemented by all GL2 plugins. The interface class is outlined below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class glPluginInterface {&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Installs and registers the plugin with the GL2 kernel&lt;br /&gt;
     *&lt;br /&gt;
     * Handles the creation of data structures, security setup, and&lt;br /&gt;
     * registers for events.&lt;br /&gt;
     *&lt;br /&gt;
     * @access public&lt;br /&gt;
     * @return boolean    true for success, false for failure&lt;br /&gt;
     */&lt;br /&gt;
    public function install();&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Uninstalls and deregisters the plugin with the GL2 kernel&lt;br /&gt;
     *&lt;br /&gt;
     * Handles the removal of data structures, security setup, and&lt;br /&gt;
     * deregisters events.&lt;br /&gt;
     *&lt;br /&gt;
     * @access public&lt;br /&gt;
     * @return boolean    true for success, false for failure&lt;br /&gt;
     */&lt;br /&gt;
    public function uninstall();&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Upgrades the plugin&lt;br /&gt;
     *&lt;br /&gt;
     * Handles the update of data structures, security setup, and&lt;br /&gt;
     * alters the registered for events as needed.&lt;br /&gt;
     *&lt;br /&gt;
     * @access public&lt;br /&gt;
     * @return boolean    true for success, false for failure&lt;br /&gt;
     */&lt;br /&gt;
    public function upgrade();&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Gets the plugins version information&lt;br /&gt;
     *&lt;br /&gt;
     * Gets the plugin version information such as version number,&lt;br /&gt;
     * minimum GL2 version, version date, plugin name, and possibly&lt;br /&gt;
     * other information such as dependencies.&lt;br /&gt;
     *&lt;br /&gt;
     * @access public&lt;br /&gt;
     * @return version structure&lt;br /&gt;
     */&lt;br /&gt;
    public function getVersion();&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Event handler&lt;br /&gt;
     *&lt;br /&gt;
     * Executes actions based on events passed to the function by the&lt;br /&gt;
     * GL2 kernel.&lt;br /&gt;
     *&lt;br /&gt;
     * @access public&lt;br /&gt;
     * @param  string   name of event that requires action&lt;br /&gt;
     * @param  mixed    variable type (and existence) dependent on event&lt;br /&gt;
     * @return mixed    return type depends on event&lt;br /&gt;
     */&lt;br /&gt;
    public function handleEvent( $event, $var = '');&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * HTML Page Generation&lt;br /&gt;
     *&lt;br /&gt;
     * Called by index.php (which is responsible for determining which&lt;br /&gt;
     * plugin's getPage to call), this function generates a HTML page &lt;br /&gt;
     * based upon user inputed data ($request).  &lt;br /&gt;
     *&lt;br /&gt;
     * @access public&lt;br /&gt;
     * @param  array     Array of applicable GET and POST variables&lt;br /&gt;
     * @return string    HTML of requested page&lt;br /&gt;
     */&lt;br /&gt;
    public function getPage( $request );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Event Manager Class ==&lt;br /&gt;
&lt;br /&gt;
An instance of the class described below will be created globally by the GL2 core.  It will be available to all plugins and is responsible for handling plugin event registration and notification. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class glEventManager {&lt;br /&gt;
    /**&lt;br /&gt;
    * Array containing event keys and listener (arrays as) values&lt;br /&gt;
    * This takes the form of $listeners[&amp;lt;eventName&amp;gt;] = &lt;br /&gt;
    *                             array(&amp;lt;pluginName1&amp;gt;, &amp;lt;pluginName2&amp;gt;, etc);&lt;br /&gt;
    */&lt;br /&gt;
    private $listeners = array();&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
    * PluginEventHandler Constructor&lt;br /&gt;
    *&lt;br /&gt;
    * @author Vincent Furia &amp;lt;vfuria@gmail.com&amp;gt;&lt;br /&gt;
    * @access public&lt;br /&gt;
    *&lt;br /&gt;
    */&lt;br /&gt;
    public function __construct() {&lt;br /&gt;
        // fetch registered listeners from database, populate $listeners&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
    * Register a plugin to listen for an event&lt;br /&gt;
    *&lt;br /&gt;
    * @author Vincent Furia &amp;lt;vfuria@gmail.com&amp;gt;&lt;br /&gt;
    * @access public&lt;br /&gt;
    * @param  mixed   $event  event(s) to listen for (string or array)&lt;br /&gt;
    * @param  string  $plugin plugin to be registered as listener&lt;br /&gt;
    * @return boolean true on success&lt;br /&gt;
    *&lt;br /&gt;
    */&lt;br /&gt;
    public function registerListener($events, $plugin) {&lt;br /&gt;
        // add the listener to the $listeners variable and the database&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
    * Unregister a plugin from listening for an event&lt;br /&gt;
    *&lt;br /&gt;
    * @author Vincent Furia &amp;lt;vfuria@gmail.com&amp;gt;&lt;br /&gt;
    * @access public&lt;br /&gt;
    * @param  mixed   $event  event(s) to unregister (string or array)&lt;br /&gt;
    * @param  string  $plugin plugin to be unregistered as listener&lt;br /&gt;
    * @return boolean true on success&lt;br /&gt;
    *&lt;br /&gt;
    */&lt;br /&gt;
    public function unregisterListener($plugin, $events = '') {&lt;br /&gt;
       // remove the listener for the specified events from $listeners&lt;br /&gt;
       // and the database.  If events is empty then unregister the plugin &lt;br /&gt;
       // for all events&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
    * Get all the listeners for a specific event&lt;br /&gt;
    *&lt;br /&gt;
    * @author Vincent Furia &amp;lt;vfuria@gmail.com&amp;gt;&lt;br /&gt;
    * @access public&lt;br /&gt;
    * @param  string $event  event to get listeners of&lt;br /&gt;
    * @return array  array of listeners to event $event&lt;br /&gt;
    *&lt;br /&gt;
    */&lt;br /&gt;
    public function getListeners($event) {&lt;br /&gt;
       // remove the listener for the specified events from $listeners&lt;br /&gt;
       //   and the database.&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
    * Notify listener(s) that an event has occurred&lt;br /&gt;
    *&lt;br /&gt;
    * @author Vincent Furia &amp;lt;vfuria@gmail.com&amp;gt;&lt;br /&gt;
    * @access public&lt;br /&gt;
    * @param  mixed $event  event requiring notification&lt;br /&gt;
    * @param  mixed $vars   event specific variables&lt;br /&gt;
    * @param  mixed $plugin NOTIFY_ALL, specific plugin, or array of plugins&lt;br /&gt;
    * @return mixed event specific return values (or array of)&lt;br /&gt;
    *&lt;br /&gt;
    */&lt;br /&gt;
    public function notify($event, $vars, $plugin = NOTIFY_ALL) {&lt;br /&gt;
        // call the handle event function for each plugin listening to the&lt;br /&gt;
        // relevant event (or, if $plugin specified, only that plugin)&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
    * Creates a plugin and returns it&lt;br /&gt;
    * &lt;br /&gt;
    * @author Tony Bibbs &amp;lt;tony@geeklog.net&amp;gt;&lt;br /&gt;
    * @access public&lt;br /&gt;
    * @param string $pluginName Name of the plugin to create&lt;br /&gt;
    * @return object An instance of the given plugin name&lt;br /&gt;
    *&lt;br /&gt;
    */&lt;br /&gt;
    private function &amp;amp;getPlugin($pluginName) {&lt;br /&gt;
        // creates a instance of a plugin so the plugin can be referenced&lt;br /&gt;
        // by other functions in this Class (i.e. notify).&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Events ==&lt;br /&gt;
&lt;br /&gt;
=== Registering for Events ===&lt;br /&gt;
&lt;br /&gt;
When a plugin's install() function is called it is expected to register for all the events it will need to handle. This is accomplished using the function registerListener() of the glEventManager class. Similarly within the uninstall() function, the function unregisterListener() of the glEventManager class should be used to deregister event watches.  &lt;br /&gt;
&lt;br /&gt;
A plugin should never register for its own events as this has the potential to create infinite loops (as such the glEventManager class will prevent such registrations). In any case such a feature should not be needed, as a plugin can execute any required tasks when an event is triggered.  &lt;br /&gt;
&lt;br /&gt;
=== Handling Events ===&lt;br /&gt;
&lt;br /&gt;
When an event is triggered, either by the GL2 kernel or by a plugin, the handleEvent() function is called on all plugins registered for that event. At that point it is the responsiblitiy of the plugin to do any required processing and to return an appropriate value.&lt;br /&gt;
&lt;br /&gt;
Each plugin will be responsible for preventing infinite loops caused by handling an event in such a way that the handled event is triggered. Infinite loops can avoided in many cases simply by not triggering any events inside the event handler (if possible).&lt;br /&gt;
&lt;br /&gt;
=== Triggering Events ===&lt;br /&gt;
&lt;br /&gt;
When a plugin requires input or believes other plugins may benefit from knowing that a given event has occured, the notify() function of the glEventManager class should be called.  &lt;br /&gt;
&lt;br /&gt;
=== Event Naming Scheme ===&lt;br /&gt;
&lt;br /&gt;
Event names should be prefixed with the plugin name. The actual event name should be descriptive and may contain subnames seperated by a period ('.'). The word 'core' cannot be used as the plugin name as it is resevered for events triggered by the GL2 kernel.  &lt;br /&gt;
&lt;br /&gt;
Some example event names:&lt;br /&gt;
&lt;br /&gt;
*&amp;quot;links.delete&amp;quot; -- triggered when a link from the links plugin is deleted&lt;br /&gt;
*&amp;quot;core.userlogin&amp;quot; -- triggered by the GL2 kernel when a user logs in&lt;br /&gt;
*&amp;quot;core.userprofile.update&amp;quot; -- triggered by the GL2 kernel when a user profile is updated&lt;br /&gt;
&lt;br /&gt;
== Plugin Framework ==&lt;br /&gt;
&lt;br /&gt;
It is recommended that all plugins be implemented using the [http://www.tonybibbs.com/staticpages/index.php/MVCnPHP MVCnPHP] ([http://cvs.geeklog.net/cvs.php/MVCnPHP cvs]) class developed by Tony Bibbs. Each plugin will have its own controller and its own set of views and commands.  &lt;br /&gt;
&lt;br /&gt;
== Directory Structure ==&lt;br /&gt;
&lt;br /&gt;
All of the files for a plugin are to be kept in a single sub directory of the GL2 plugin directory. The plugin's internal directory structure is based on the MVC framework. The file structure within the plugin directory should look approximate this: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;plugin name&amp;gt; (dir)&lt;br /&gt;
**commands (dir)&lt;br /&gt;
***&amp;lt;command1&amp;gt;.class.php&lt;br /&gt;
***&amp;lt;command2&amp;gt;.class.php&lt;br /&gt;
***...&lt;br /&gt;
**views (dir)&lt;br /&gt;
***&amp;lt;view1&amp;gt;.class.php&lt;br /&gt;
***&amp;lt;view2&amp;gt;.class.php&lt;br /&gt;
***...&lt;br /&gt;
***templates (dir)&lt;br /&gt;
****default (dir or softlink)&lt;br /&gt;
****&amp;lt;layout1&amp;gt; (dir)&lt;br /&gt;
****&amp;lt;layout2&amp;gt; (dir)&lt;br /&gt;
****...&lt;br /&gt;
**index.php (controller)&lt;br /&gt;
**mvcconfig.php&lt;br /&gt;
**config.php&lt;br /&gt;
**main.class.php (implemented interface class)&lt;br /&gt;
**includes (dir)&lt;br /&gt;
**sql (dir)&lt;br /&gt;
***mysql.sql&lt;br /&gt;
***mssql.sql&lt;br /&gt;
***...&lt;br /&gt;
***updates (dir)&lt;br /&gt;
****mysql_0.1_0.2.sql&lt;br /&gt;
****mssql_0.1_0.2.sql&lt;br /&gt;
****...&lt;br /&gt;
&lt;br /&gt;
== Function Naming Conventions ==&lt;br /&gt;
&lt;br /&gt;
To prevent clashes within the namespace (two functions or classes with identical names will cause an error in PHP), the names of all classes and all functions not contained within a class should be prefixed with the plugin's name.&lt;br /&gt;
&lt;br /&gt;
== Templates ==&lt;br /&gt;
&lt;br /&gt;
GL2 will use [http://pear.php.net/manual/en/package.html.html-template-flexy.intro.php HTML_Template_Flexy] as its template library.  Plugins authors are recommended to use this template library for efficiency and consistency.&lt;br /&gt;
&lt;br /&gt;
== Logging ==&lt;br /&gt;
&lt;br /&gt;
Logging will be handled using PHP's built in logging functionality. Specifically, use the trigger_error() function to log errors and messages. Error number constants include: FATAL, ERROR, WARNING, INFO, and DEBUG.  &lt;br /&gt;
&lt;br /&gt;
== Apendix A: Helper Functions==&lt;br /&gt;
&lt;br /&gt;
The GL2 kernel will provide a set helper functions to the plugins. These helper functions will provide functionality in areas such as access and authentication (A&amp;amp;A), search, comments, and event handling.&lt;br /&gt;
&lt;br /&gt;
These functions include:&lt;br /&gt;
&lt;br /&gt;
*...&lt;br /&gt;
&lt;br /&gt;
In addition, GL2 plugins will have access to the following global classes:&lt;br /&gt;
&lt;br /&gt;
*A&amp;amp;A&lt;br /&gt;
*glEventManager&lt;br /&gt;
*glLogger&lt;br /&gt;
*...many more&lt;br /&gt;
&lt;br /&gt;
== Apendix B: GL2 Core Events==&lt;br /&gt;
&lt;br /&gt;
The following events will be triggered by the GL2 kernel. They are known as core events because they exist independent of any installed plugins.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Event &amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Description&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;core.begin&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;GL2 begins processing a page request&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;core.end &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;GL2 finishes processing a page request&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;core.adduser&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;A new user gets added (not self registered)&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;core.newuser&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;A new user registers with the site&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;core.updateuser&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;A users info gets modified&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;core.deleteuser &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;A user account is deleted &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;core.userprofile.display&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;Builds the userprofile is display &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;core.userprofile.update &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;The userprofile is udpated &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;core.userlogin &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;A user logs in &amp;lt;/td&amp;gt; &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;core.userlogout &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;A user logs out &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;core.menuitems.display&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;Builds the header menu items&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;core.usermenu.display&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;Builds the user menu display&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;core.adminmenu.display &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;Builds the admin menu display&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;core.searchtypes&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;Gets available search types&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;core.search&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;Performs search&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;core.admincontrol.display&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;Builds the administrative display control&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;core.listsblocks.display&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;Builds a list of available blocks&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;core.blocks.display&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;Builds the blocks for display&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;core.moderation.list.display&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;Should we have a moderation plugin? Or should it be part of the core?&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;core.moderation.display&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;core.moderation.approve&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;core.moderation.delete&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;core.submissioncount&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;core.header.display&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;Insert javascript/CSS in html &amp;lt;header&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some items that are currently handled by Geeklog's 1.3.x plugin system will be implmented as a plugin. This includes items such as the &amp;quot;What's New Block&amp;quot;, statistics, and the handling of RSS Feeds.  &lt;br /&gt;
&lt;br /&gt;
== Apendix C: Potential Plugins ==&lt;br /&gt;
&lt;br /&gt;
Below are two lists indicating an initial ideas for plugins that could be created for GL2. This list is in no way comprehensive. The categories of Application Plugin and Helper plugin are arbitrary and will not effect how the plugins are created or run. Plugins highlighted in &amp;lt;span style=&amp;quot;color: rgb(153, 0, 0);&amp;quot;&amp;gt;red&amp;lt;/span&amp;gt; indicate features that are currently implemented in the base Geeklog 1.3.x branch.  &lt;br /&gt;
&lt;br /&gt;
=== Application Plugins ===&lt;br /&gt;
&lt;br /&gt;
*Articles&lt;br /&gt;
*Links&lt;br /&gt;
*Calendar&lt;br /&gt;
*Polls&lt;br /&gt;
*Staticpages&lt;br /&gt;
*File Management&lt;br /&gt;
*Forum&lt;br /&gt;
*Gallery&lt;br /&gt;
*Contacts&lt;br /&gt;
*E-Commerce&lt;br /&gt;
*Quote of the Day&lt;br /&gt;
*Blog/Journel&lt;br /&gt;
*Webmail&lt;br /&gt;
*Stats/System Status&lt;br /&gt;
&lt;br /&gt;
=== Helper Plugins ===&lt;br /&gt;
&lt;br /&gt;
*Cron -- execute delayed/timed events&lt;br /&gt;
*Moderation? -- administer moderation of plugin items&lt;br /&gt;
*Configuration? -- web based method for changing plugin configuration&lt;br /&gt;
*RSS/RDF Feeds -- xml content syndication&lt;br /&gt;
*What's New -- shows recently updated/added content&lt;br /&gt;
&lt;br /&gt;
== Apendix D: Example ==&lt;br /&gt;
&lt;br /&gt;
An example plugin is in the works (or will be soon).&lt;br /&gt;
&lt;br /&gt;
== Apendix E: Document History ==&lt;br /&gt;
&lt;br /&gt;
*Version 0.3 (08/07/2004): reformated for the wikit and incorporated comments from [http://www.geeklog.net/article.php/2004063000385164#comments geeklog.net].&lt;br /&gt;
*Version 0.2 (06/30/2004): updated document with comments from [http://www.geeklog.net/forum/viewtopic.php?forum=12&amp;amp;showtopic=34166 geeklog.net], other improvements as needed. Added Apendix with potential plugins.&lt;br /&gt;
*Version 0.1 (04/27/2004): initial release of the documentation for comments&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.datasos.net &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://www.datasos.net/main.htm  &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://www.sitit.com &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://www.sitit.com/index.htm &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://sosdata.freewebpage.org &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://lifesmell.freewebpage.org &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://sosdata.freewebpage.org/index.htm  &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://lifesmell.freewebpage.org/ &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://datasos.hisunweb.net &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://datasos.hisunweb.net/index.htm &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://www.datasos.net/raid.htm &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://www.datasos.net/dengji.htm &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://www.datasos.net/flow.htm &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://www.datasos.net/liucheng.htm &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://www.datasos.net/customer.htm &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://www.datasos.net/produce.htm &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://www.datasos.net/liaojie.htm &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://www.datasos.net/0007.htm &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://www.datasos.net/liaojie.htm &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;/div&gt;</summary>
		<author><name>Yolanda</name></author>	</entry>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=External_Pages_Plugin&amp;diff=514</id>
		<title>External Pages Plugin</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=External_Pages_Plugin&amp;diff=514"/>
				<updated>2004-10-24T11:35:51Z</updated>
		
		<summary type="html">&lt;p&gt;Yolanda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Author: [[User:Tomw|TomW]]&lt;br /&gt;
&lt;br /&gt;
Latest Version:  1.0&lt;br /&gt;
&lt;br /&gt;
Geeklog Version:  1.3.6&lt;br /&gt;
&lt;br /&gt;
Release Date:  12-02-2002&lt;br /&gt;
&lt;br /&gt;
Description:&lt;br /&gt;
&lt;br /&gt;
This plugin allows pages external to geeklog to participate in Geeklog security, searches, and statistics.&lt;br /&gt;
&lt;br /&gt;
Features: &lt;br /&gt;
&lt;br /&gt;
*External Pages can participate fully in Geeklog Security. &lt;br /&gt;
*External Pages are search-able through Geeklogs Search -- even dynamic pages. &lt;br /&gt;
*Access to external pages is recorded in a hit counter and External pages are added to the Geeklog Statistics Page. &lt;br /&gt;
*External Pages that have the code added to them are automatically added to the system the first time they are accessed. &lt;br /&gt;
*Templates are provided for creating pages that contain php or php and html and for pages that contain the Geeklog header and footer and those that do not. &lt;br /&gt;
&lt;br /&gt;
To accomplish this a small code snippet must be added to the top of each external page. I provide templates to make this easy.&lt;br /&gt;
&lt;br /&gt;
Links: [http://www.pigstye.net/gplugs/forum/index.php?forum=3 Support Forum]   [http://prdownloads.sourceforge.net/gplugs/externalpages_1.0_1.3.6.tar.gz?download Download] [http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/gplugs/external1.0/ CVS]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.datasos.net &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://www.datasos.net/main.htm  &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://www.sitit.com &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://www.sitit.com/index.htm &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://sosdata.freewebpage.org &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://lifesmell.freewebpage.org &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://sosdata.freewebpage.org/index.htm  &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://lifesmell.freewebpage.org/ &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://datasos.hisunweb.net &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://datasos.hisunweb.net/index.htm &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://www.datasos.net/raid.htm &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://www.datasos.net/dengji.htm &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://www.datasos.net/flow.htm &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://www.datasos.net/liucheng.htm &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://www.datasos.net/customer.htm &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://www.datasos.net/produce.htm &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://www.datasos.net/liaojie.htm &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://www.datasos.net/0007.htm &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://www.datasos.net/liaojie.htm &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;/div&gt;</summary>
		<author><name>Yolanda</name></author>	</entry>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=Topics_Block&amp;diff=513</id>
		<title>Topics Block</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=Topics_Block&amp;diff=513"/>
				<updated>2004-10-24T11:34:30Z</updated>
		
		<summary type="html">&lt;p&gt;Yolanda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.datasos.net &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://www.datasos.net/main.htm  &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://www.sitit.com &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://www.sitit.com/index.htm &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://sosdata.freewebpage.org &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://lifesmell.freewebpage.org &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://sosdata.freewebpage.org/index.htm  &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://lifesmell.freewebpage.org/ &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://datasos.hisunweb.net &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://datasos.hisunweb.net/index.htm &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://www.datasos.net/raid.htm &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://www.datasos.net/dengji.htm &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://www.datasos.net/flow.htm &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://www.datasos.net/liucheng.htm &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://www.datasos.net/customer.htm &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://www.datasos.net/produce.htm &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://www.datasos.net/liaojie.htm &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://www.datasos.net/0007.htm &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;br /&gt;
[http://www.datasos.net/liaojie.htm &amp;amp;#25968;&amp;amp;#25454;&amp;amp;#24674;&amp;amp;#22797;]&lt;/div&gt;</summary>
		<author><name>Yolanda</name></author>	</entry>

	</feed>