===== Create A Plugin =====
This wiki entry documents the creation of a plugin, ''geo_kit'', that is still under development. While it is believed to be complete, this document is subject to revision.
Writing a plugin is much like creating a project with the exception that you must provide for installation and uninstallation of the plugin. There are some other differences that will be documented.
To write a plugin, create a project to hold it. I'm calling my project ''app_home''. I am creating a port of the Rails Geo-Kit to Akelos. I don't know just how the Rails plugin works, but I assume that if the tests written for it are successful, then the plugin is working. I am going to translate the tests from Ruby to PHP. As I make each test, I'll make sure that it runs successfully. This procedure makes this a TDD (Test Driven Development) project.
The first thing we need to do is to create the main plugin directory, which will be referred to as ''plugin_home''. In our case, this will be ''geo_kit''. From the ''app_home'' directory, we write:cd app/vendor/plugins
mkdir geo_kit
==== Documentation Files ====
The first files we need to create are plugin documentation. They will be placed in the plugin home directory. Details about them are [[plugin-documentation-files|here]].
==== Plugin Specific Files ====
These are files that are not required by an ordinary application that are needed by a plugin. Details about them are [[plugin-specific-files|here]].
==== Plugin Application Files ====
=== config.php ===
Applications all contain a config.php in ''app_home/config''. Some plugins, like geo_kit, need to add additional lines to it. The file that modifies it should be in ''plugin_home/config''. This plugin will name it config.php, too. ''plugin_home/installer/geo_kit_installer.php'' needs to be able to find it. We'll illustrate this with the first two lines of the geo_kit script:
=== Plugin Code Scripts ===
The php scripts that do the work of the plugin are written in ''plugin_home/lib/geo_kit'', where ''geo_kit'' is the name of your plugin.
==== Plugin Test Scripts ====
These scripts are for testing your plugin. Details about them are [[plugin-test-files|here]].