Store Events

Modules can subscribe to lifecycle events emitted by ModuleWorkSpacesStore.

BeforeUpdateModuleEvent

Triggered before a module record is updated.

Methods: - getModule() — returns the ModuleValuesObject being updated.

public function onBeforeUpdateModuleHandler(BeforeUpdateModuleEvent $event): void
{
    $module = $event->getModule();
    // logic before the module is updated
}

BeforeUpdateWorkSpaceModuleEvent

Triggered before a workspace-scoped module record is updated.

Methods: - getModule() — returns the ModuleValuesObject. - getWorkSpace() — returns the IWorkSpace context.

public function onBeforeUpdateWorkSpaceModuleHandler(BeforeUpdateWorkSpaceModuleEvent $event): void
{
    $module = $event->getModule();
    $workspace = $event->getWorkSpace();
    // logic before the workspace module is updated
}

IInstallableWorkSpaceModule

A lifecycle hook rather than an event: a workspace module implementing this interface is called once its own status in a workspace has just been written — after onLoadWorkSpaceModule() on enabling. Use it to put in place what the workspace needs to start using the module (a default record, a setting), and to take it away on disabling. Only the module whose status changes is called; other modules are not notified.

Both methods run inside the status transaction, so throwing rolls the change back.

use plugin\Modules\domain\scope\IInstallableWorkSpaceModule;

class TestModulePlugin extends DisplayPlugin implements IInstallableWorkSpaceModule
{
    public function onInstallWorkSpaceModule(IWorkSpace $workSpace): void
    {
        // Give the workspace what it needs to start using the module
    }

    public function onUninstallWorkSpaceModule(IWorkSpace $workSpace): void
    {
        // Usually nothing: the workspace keeps its records for the day the module comes back
    }
}

CreateWorkSpaceProviderEvent

Triggered when a workspace provider needs to be resolved.

Methods: - getWorkSpaceProvider() — returns the current IWorkSpaceProvider or null. - setWorkSpaceProvider(IWorkSpaceProvider $workSpaceProvider) — sets the provider.

public function onCreateWorkSpaceProviderHandler(CreateWorkSpaceProviderEvent $event): void
{
    $provider = new MyWorkSpaceProvider();

    $event->setWorkSpaceProvider($provider);
}

BeforeDisplayModuleDictionaryEvent

Triggered before a module's dictionary is displayed in system scope — the page on /modules/manage/{idModule}/dictionaries/{ident}/ where the records a workspace template installs are authored.

One route serves every declared dictionary, so a handler that cares about only one of them tells them apart by the dictionary on the event.

Methods: - getStageBuilder() — the StageBuilder the page is built with. - getBreadcrumbs() — the breadcrumbs object, modified in place. - getModule() — the module the dictionary belongs to. - getDictionary() — the dictionary being displayed: ident, caption, table and store class. - getParentUrl() / setParentUrl() — where the page returns to, the module catalogue by default.

public function onBeforeDisplayModuleDictionaryHandler(BeforeDisplayModuleDictionaryEvent $event): void
{
    if ($event->getDictionary()->getIdent() !== 'competencies') {
        return;
    }

    $event->setParentUrl($this->getUrl('/somewhere-else/'));
    $event->getBreadcrumbs()->setItems([...]);
}