Deux commandes permettent d’ajouter et enlever des plugins :
Ajouter un plugin :
bin/setup plugin:add /chemin/vers/le/plugin
Enlever un plugin :
bin/setup plugin:remove nom-du-plugin
Un plugin comporte une arborescence minimale :
├── composer.json
├── manifest.json
└── public
Le fichier manifest.json est une déclaration du plugin à Phraseanet dans un format json. Voici le fichier manifest.json le plus minimal qui soit :
{
"name": "mon-plugin",
"description" : "Hello World plugin!"
}
De nombreuses propriétés peuvent être ajoutées à ce fichier, comme dans l’exemple ci-dessous :
{
"name": "custom-connector",
"description" : "A custom class connector",
"keywords" : ["connector"],
"authors" : [
{
"name" : "Author name",
"homepage" : "http://example.com",
"email" : "email@example.com"
}
],
"homepage" : "http://example.com/project/example",
"license" : "MIT",
"version" : "0.1",
"minimum-phraseanet-version": "4.0",
"maximum-phraseanet-version": "4.1",
"twig-paths": ["custom-twig-views"],
"services" : [
{
"class": "Vendor\\PluginService"
}
],
"commands" : [
{
"class": "Vendor\\CustomCommand"
}
],
"extra" : {
"custom-property" : "value"
}
}
Détails des propriétés possibles pour le fichier manifest.json :
Note
Twig est automatiquement configuré pour les plugins : Si un dossiers “views” est présent à la racine, alors un namespace “plugins-%nom-du-plugin%” est créé dans Twig.
Le fichier composer.json sert à gérer les dépendances PHP du plugin et créer un autoloader dédié.
{
"name": "vendor/phraseanet-plugin-name",
"description": "A Hello world plugin",
"license" : "MIT",
"autoload": {
"psr-0": {
"Vendor" : "src"
}
}
}
Le fichier précédent déclare que les sources du plugin sont chargées depuis le dossier src selon une structure PSR-0. Il est recommandé de consulter la documentation de composer pour plus d’informations.
Beaucoup de personnalisations sont possibles via les plugins. La plupart d’entre elles requièrent de bonnes connaissances de Silex, Twig et d’autres composants utilisés par Phraseanet.
La consultation de plugins existants comme Mail log plugin et Syslog plugin donne des pistes sur le développement de ceux ci.
Il faut noter deux pistes pour l’écriture de plugins :
Les services ajoutés via la propriété “services” du fichier manifest.json doivent implémenter l’interface Alchemy\Phrasea\Plugin\PluginProviderInterface.
Les commandes ajoutées via la propriété “commands” du fichier manifest.json doivent implémenter l’interface Alchemy\Phrasea\Command\CommandInterface. Une base simple est d’étendre la classe abstraite Alchemy\Phrasea\Command\Command.