Skip to content
Matthias edited this page Aug 27, 2016 · 15 revisions

There is a new plugin architecture which will be available from ViMbAdmin V3.

There are two types of plugins:

  • system plugins - plugins which are bundled with ViMbAdmin;
  • non-system / third party plugins - these will be available through modules (standard Zend Framework structure).

Examples

  1. System Plugin - Plugins: Access Permissions

Plugin Discovery and Setup

Plugins are discovered automatically when a controller extends ViMbAdmin_Controller_PluginAction. This implements an observable behavior which means it implements a notify() function to call plugin hooks.

The application/plugins directory and application/modules/*/plugins directories are scanned for plugins.

notify() takes three arguments - the controller name (eg. mailbox), the action name (eg. add), the hook name (eg. addPrepare) and the self reference to the action.

Plugins implement an update() method which, typically, reflects on its own object and calls a function made up of this data if it exists. e.g. $this->mailbox_add_addPrepare().

Workflow of Actions in Hooks

The standard workflow of hooks are normally:

    <module>_<process>_pre<command> -> use to do pre checks, can be used to stop the action
                |
                v
    <module>_<process>_preFlush -> do actions before changes are done in database
                |
                v
    interal processing in core
                |
                v
    <module>_<process>_postFlush -> do actions after core is commited changes to database
                |
                v
    <module>_<process>_post<command> -> do additional actions before the workflow is finished
  • <module> could be alias, mailbox, see below for more detailed information
  • <process> can be add, delete, see below for more detailed information
  • <command> is fixed by core, see below for more detailed information

Available Hooks

We will list available hooks here. Please open a pull request to add additional hooks.

Hooks for Aliases

  • Adding / editing aliases
    • alias_add_formPostProcess - called after the add / edit form has been instantiated;
    • alias_add_addPrepare - called at the start of the add/edit process;
    • alias_add_addPrevalidate - called just before $form->isValid() is called;
    • alias_add_addPostvalidate - called just after a successful $form->isValid();
    • alias_add_addPreflush
    • alias_add_addPostflush
  • Deleting Aliases
    • alias_delete_preRemove - called before an alias is deleted. It must return true to allow deletion or false to cancel deletion!
    • alias_delete_preFlush - called just before the database is flushed; Use this to make irreversible changes in the database.
    • alias_delete_postFlush - called just after the database is flushed; Use this to make irreversible changes in the database.
  • Other Actions
    • alias_toggleActive_preflush
    • alias_toggleActive_postflush
    • alias_toggleActive_preToggle - can be used to check if the alias is allowed to be toggled. Method must return true or false!

Hooks for Mailboxes

  • Listing mailboxes
    • mailbox_list_listPostProcess - called after the core code for listing mailboxes has executed;
  • Adding / editing mailboxes
    • mailbox_add_formPostProcess - called after the add / edit form has been instantiated;
    • mailbox_add_addPrepare - called just before we determine if an add / edit form has been posted;
    • mailbox_add_addPrevalidate - called just before $form->isValid() is called;
    • mailbox_add_addPostvalidate - called just after a successful $form->isValid();
    • mailbox_add_addPreflush - called just before the database is flushed; Use this to make irreversible changes in the database.
    • mailbox_add_addPostflush - called just after the database is flushed; Use this to make irreversible changes in the database.
    • mailbox_add_addFinish - called just before the final redirect()
    • mailbox_purge_preRemove - called before a mailbox is deleted. It must return true to allow deletion or false to cancel deletion!

Hooks for Archives

  • archive_add_preSerialize
  • archive_add_preFlushAdd
  • archive_add_postFlushAdd
  • archive_add_prePurge
  • archive_add_preFlushPurge
  • archive_add_postFlushPurge
  • archive_cancel_preFlushRestore
  • archive_cancel_postFlushRestore
  • archive_cancel_mailboxRestored
  • archive_deletePendings_preRemove
  • archive_deletePendings_postRemove
  • archive_restorePendings_preFlushRestore
  • archive_restorePendings_postFlushRestore
  • archive_restorePendings_restored

Hooks for Export Settings

  • export_settings_thunderbird_preSetSettings