Browse Source

Added Plugins documentation

Tobias Reich 9 years ago
parent
commit
3b8c3b75c0
2 changed files with 155 additions and 1 deletions
  1. 154 0
      docs/Plugins.md
  2. 1 1
      readme.md

+ 154 - 0
docs/Plugins.md

@@ -0,0 +1,154 @@
+### About
+
+The plugin-system of Lychee allows you to execute scripts, when a certain action fires. Plugins are hooks, which are injected directly into Lychee. They only affect the back-end and can't modify the front-end.
+
+### Use Cases
+
+* Automatically watermark photos on upload
+* Automatically set albums public
+* Write metadata changes back to the original photo
+* …
+
+### How to create a plugin
+
+1. Create a folder in `plugins/`
+2. Create an `index.php` within the new folder and with the following content:
+
+```php
+<?php
+
+###
+# @name			ExamplePlugin
+# @author		Tobias Reich
+# @copyright	2014 by Tobias Reich
+###
+
+if (!defined('LYCHEE')) exit('Error: Direct access is not allowed!');
+
+class ExamplePlugin implements SplObserver {
+
+	private $database = null;
+	private $settings = null;
+
+	public function __construct($database, $settings) {
+
+		# These params are passed to your plugin from Lychee
+		# Save them to access the database and settings of Lychee
+		$this->database = $database;
+		$this->settings = $settings;
+		
+		# Add more code here if wanted
+		# __construct() will be called every time Lychee gets called
+		# Make sure this part is performant
+
+		return true;
+
+	}
+
+	public function update(\SplSubject $subject) {
+
+		# Check if the called hook is the hook you are waiting for
+		# A list of all hooks is available online
+		if ($subject->action!=='Photo::add:before') return false;
+
+		# Do something when Photo::add:before gets called
+		# $this->database => The database of Lychee
+		# $this->settings => The settings of Lychee
+		# $subject->args => Params passed to the original function
+		
+		return true;
+		
+	}
+
+}
+
+# Register your plugin
+$plugins->attach(new ExamplePlugin($database, $settings));
+```
+
+3. Add the plugin-path to the database of Lychee
+
+Select the table `lychee_settings` and edit the value of `plugins` to the path of your plugin. The path must be relative from the `plugins/`-folder: `ExamplePlugin/index.php`.
+
+Divide multiple plugins with commas: `Plugin01/index.php,Plugin02/index.php`.
+
+### Available hooks
+
+##### About :before and :after
+Hooks named `:before` will be executed prior to the original function.
+Hooks named `:after` will be executed after the original function.
+
+`Album::add:before` will be called when the user creates a new album in Lychee. The album doesn't exist at this moment.
+`Album::add:after` will be called after the album has been created.
+
+##### Album
+These hooks are called from `php/modules/Album.php`.
+
+| Name | Description |
+|:-----------|:------------|:------------|
+| Album::add:before | User adds album |
+| Album::add:after |  |
+| Album::get:before | User opens album |
+| Album::get:after |  |
+| Album::getAll:before | User opens album overview |
+| Album::getAll:after |  |
+| Album::getArchive:before | User downloads album |
+| Album::getArchive:after |  |
+| Album::setTitle:before | User renames album |
+| Album::setTitle:after |  |
+| Album::setDescription:before | User sets description |
+| Album::setDescription:after |  |
+| Album::getPublic:before | User makes album public or private |
+| Album::getPublic:after |  |
+| Album::setPassword:before | User sets password |
+| Album::setPassword:after |  |
+| Album::checkPassword:before | Lychee checks if password is correct |
+| Album::checkPassword:after |  |
+| Album::delete:before | User deletes album |
+| Album::delete:after |  |
+
+##### Photo
+These hooks are called from `php/modules/Photo.php`.
+
+| Name | Description |
+|:-----------|:------------|:------------|
+| Photo::add:before | User uploads photos |
+| Photo::add:after |  |
+| Photo::createThumb:before | Lychee creates thumbs |
+| Photo::createThumb:after |  |
+| Photo::adjustFile:before | Lychee adjusts files |
+| Photo::adjustFile:after |  |
+| Photo::get:before | User opens photo |
+| Photo::get:after |  |
+| Photo::getInfo:before | Lychee reads the metadata of an image |
+| Photo::getInfo:after |  |
+| Photo::getArchive:before | User downloads photo |
+| Photo::getArchive:after |  |
+| Photo::setTitle:before | User renames photo |
+| Photo::setTitle:after |  |
+| Photo::setDescription:before | User sets description |
+| Photo::setDescription:after |  |
+| Photo::setStar:before | User stars photo |
+| Photo::setStar:after |  |
+| Photo::getPublic:before | Lychee checks if photo is public |
+| Photo::getPublic:after |  |
+| Photo::setPublic:before | User shares photo |
+| Photo::setPublic:after |  |
+| Photo::setAlbum:before | User moves photo to album |
+| Photo::setAlbum:after |  |
+| Photo::setTags:before | User sets tags |
+| Photo::setTags:after |  |
+| Photo::delete:before | User deletes photo |
+| Photo::delete:after |  |
+
+##### Session
+These hooks are called from `php/modules/Session.php`.
+
+| Name | Description |
+|:-----------|:------------|:------------|
+| Session::init:before | Someone opens Lychee |
+| Session::init:after |  |
+| Session::login:before | Someone logs in |
+| Session::login:after |  |
+| Session::logout:before | User logs out |
+| Session::logout:after |  |

+ 1 - 1
readme.md

@@ -41,7 +41,7 @@ Lychee supports [Twitter Cards](https://dev.twitter.com/docs/cards) and [Open Gr
 
 ### Plugins and Extensions
 
-The plugin-system of Lychee allows you to execute scripts, when a certain action fires. Plugins are hooks, which are injected directly into Lychee. [Plugin documentation &#187;](docs/)
+The plugin-system of Lychee allows you to execute scripts, when a certain action fires. Plugins are hooks, which are injected directly into Lychee. [Plugin documentation &#187;](docs/Plugins.md)
 
 It's also possible to build extensions upon Lychee. The way to do so isn't documented and can change every time. We recommend to use the plugin-system, when possible.