Plugin API - RainLoop/rainloop-webmail GitHub Wiki

Defining a New hook

If you are developing a plugin that allows others to interact with it you can do a couple of things to get started.

First, your plugin should have access to the Plugins Manager, you can see how this is done in the Actions class below:

public function Plugins() {

if (null === $this->oPlugins) {

`$this->oPlugins = new \RainLoop\Plugins\Manager($this);`

`$this->oPlugins->SetLogger($this->Logger());`

}

return $this->oPlugins;

}

Secondly, when you wish to call the hook you would use the following:

$this->Plugins()->RunHook($hookName, array $hookParameters);

Known Hooks

  • filter.application-config

function filterApplicationConfig( \RainLoop\Config\Application() $oConfig ) {}

  • main.fabrica, main.fabrica[2]

function mainFabrica(string $sName, array &$mResult) {} function mainFabrica2(string $sName, array &$mResult, \RainLoop\Model\Account $oAccount) {}

  • filter.fabrica

function filterFabrica(string $sName, array &$mResult, \RainLoop\Model\Account $oAccount) {}

  • filter.acount (Actually for accounts)

function filterAcount(\RainLoop\Model\Account $oAccount) {}

  • filter.login-credentials.step-1 filter.login-credentials.step-2

function filterLoginCredentialsStep1(string &$sEmail, string &$sPassword) { }

  • filter.login-credentials

function filterLoginCredentials(string &$sEmail, string &$sLogin, string &$sPassword) { }

  • event.login-pre-login-provide

function loginPreLoginProvide() { }

-- event.login-post-login-provide

function loginPostLoginProvide (\RainLoop\Model\Account &$oAccount) { }

  • filter.filters-fake

function filtersFake(\RainLoop\Model\Account $oAccount, array &$aFakeFilters) {}

  • filter.filters-save

function filtersSave(\RainLoop\Model\Account $oAccount, array &$aFilters, string &$sRaw, &$bRawIsActive) { }

  • service.app-delay-start-begin

function serviceAppDelayStartBegin() { }

  • service.app-delay-start-end

function serviceAppDelayStartEnd() { }

  • filter.system-folders-names

function systemFolderNames(\RainLoop\Model\Account $oAccount, array &$aCache) { }

  • filter.folders-before

function foldersBefore(\RainLoop\Model\Account $oAccount, &$oFolderCollection) { }

  • filter.folders-post

function foldersPost(\RainLoop\Model\Account $oAccount, &$oFolderCollection() { }

  • filter.folders-system-types

function foldersSystemTypes(\RainLoop\Model\Account $oAccount, array &$aList) { }

  • filter.folders-complete

function foldersComplete(\RainLoop\Model\Account $oAccount, &$oFolderCollection() { }

  • filter.message-html / filter.message-plain

function filterMessage(\RainLoop\Model\Account $oAccount, \MailSo\Mime\Message &$oMessage, string &$sTextToAdd){ }

  • filter.build-message

function buildMessage ( \MailSo\Mime\Message &$oMessage ) { }

  • filter.build-message[2]

function buildMessage2 ( \MailSo\Mime\Message &$oMessage, \RainLoop\Model\Account $oAccount ) { }

  • filter.read-receipt-message-plain

function readReceiptMessagePlain(\RainLoop\Model\Account $oAccount, \MailSo\Mime\Message &$oMessage, string &$sText) { }

  • filter.build-read-receipt-message

function buildReadReceiptMessage(\MailSo\Mime\Message &$oMessage, \RainLoop\Model\Account $oAccount) { }

  • filter.smtp-message-stream

function smtpMessageStream(\RainLoop\Model\Account $oAccount, &$rMessageStream &$iMessageStreamSize) { }

  • filter.message-rcpt

function messageRcpt(\RainLoop\Model\Account $oAccount, &$oRcpt) { }

  • filter.smtp-from

function smtpFrom(\RainLoop\Model\Account $oAccount, \MailSo\Mime\Message $oMessage, string &$sFrom) { }

  • filter.smtp-hidden-rcpt

function smtpHiddenRcpt(\RainLoop\Model\Account $oAccount, \MailSo\Mime\Message $oMessage, array &$aHiddenRcpt) { }

  • filter.send-message

function filterSendMessage(\MailSo\Mime\Message &$oMessage) { }

  • filter.send-message[2]

function filterSendMessage2(\MailSo\Mime\Message &$oMessage, \RainLoop\Model\Account $oAccount) { }

  • filter.sent-message-stream

function filterSentMessageStream(\RainLoop\Model\Account $oAccount, &$rMessageStream, &$iMessageStreamSize) { }

  • filter.send-read-receipt-message

function filtersendReadReceiptMessage(\MailSo\Mime\Message &$oMessage, \RainLoop\Model\Account $oAccount) { }

  • ajax.suggestions-input-parameters function ajaxSuggestionsInputParameters(string &$sQuery, &$iLimit, \RainLoop\Model\Account $oAccount) { }

  • ajax.suggestions-pre function ajaxSuggestionsPre(array &$aResult, string $sQuery, \RainLoop\Model\Account $oAccount, $iLimit) { }

  • ajax.suggestions-post function ajaxSuggestionsPost(array &$aResult, string $sQuery, \RainLoop\Model\Account $oAccount, $iLimit) { }

  • filter.result-message function filterResultMessage(\MailSo\Mime\Message &$oMessage) { }

  • filter.result-message[2] function filterResultMessage2(\MailSo\Mime\Message &$oMessage, \RainLoop\Model\Account $oAccount) { }

  • main.default-response-data function mainDefaultResponseData($sActionName, &$mResult) { }

  • main.default-response function mainDefaultResponse($sActionName, &$aResponseItem) { }

  • main.default-response-error-data function mainDefaultResponseErrorData($sActionName, &$iErrorCode, &$sErrorMessage) { }

  • filter.action-params function filterActionParams($sMethodName, &$aCurrentActionParams) { }

  • filter.response-object function filterResponseObject($sClassName, $mResult) { }