Skip to main content

Activity Provider

Standards

  • Nextcloud Activity API -- OCP\Activity\IProvider, OCP\Activity\IFilter, OCP\Activity\ActivitySettings

Overview

The Activity Provider publishes events to the Nextcloud Activity stream whenever objects, registers, or schemas are created, updated, or deleted in OpenRegister. Users see these events in the Activity app alongside file changes, calendar events, and other Nextcloud activity. The provider supports per-user notification settings and a dedicated sidebar filter.

Key Capabilities

9 Event Types

The provider handles nine CRUD event subjects covering all three core entity types:

SubjectEntityTrigger
object_createdObjectNew object saved
object_updatedObjectExisting object modified
object_deletedObjectObject removed
register_createdRegisterNew register created
register_updatedRegisterRegister modified
register_deletedRegisterRegister removed
schema_createdSchemaNew schema created
schema_updatedSchemaSchema modified
schema_deletedSchemaSchema removed

Activity Provider (Event Rendering)

Provider (lib/Activity/Provider.php) implements OCP\Activity\IProvider and parses raw activity events into human-readable format. It delegates subject text generation to ProviderSubjectHandler for localized, rich-text event descriptions. Events are rendered with the OpenRegister app icon.

Activity Filter (Sidebar)

Filter (lib/Activity/Filter.php) implements OCP\Activity\IFilter and provides a dedicated "Open Register" entry in the Activity app sidebar. It filters for three activity types: openregister_objects, openregister_registers, openregister_schemas.

3 Activity Settings (Per-User Notifications)

Three ActivitySettings subclasses let users control which OpenRegister events appear in their activity stream and email notifications:

SettingClassIdentifierDefault StreamDefault Mail
Object changesObjectSettingopenregister_objectsEnabledDisabled
Register changesRegisterSettingopenregister_registersEnabledDisabled
Schema changesSchemaSettingopenregister_schemasEnabledDisabled

All three are grouped under "Open Register" in the Activity settings page.

Event Listener

ActivityEventListener (lib/Listener/ActivityEventListener.php) implements IEventListener and bridges OpenRegister entity lifecycle events to the ActivityService. It listens for ObjectCreatedEvent, ObjectUpdatedEvent, ObjectDeletedEvent, and the corresponding Register and Schema events.

ActivityService

ActivityService (lib/Service/ActivityService.php) handles the actual publishing of events to the Nextcloud Activity Manager via IActivityManager::publish().

Registration Status

Current state: The Activity classes are fully implemented, but registration is incomplete:

  • Not in info.xml: No <activity> section declaring providers, filters, or settings. Nextcloud's standard mechanism for Activity registration uses info.xml entries.
  • Not in Application.php: The ActivityEventListener is not registered via registerEventListener() in the register() method.
  • Partially working: Despite missing formal registration, some OpenRegister activity events (e.g., "Request created:", "Lead created:") do appear in the Activity stream, likely published via direct ActivityService calls from other code paths. However, no "Open Register" filter appears in the Activity sidebar (Pipelinq has one, but OpenRegister does not).

Required info.xml Registration

<activity>
<providers>
<provider>OCA\OpenRegister\Activity\Provider</provider>
</providers>
<filters>
<filter>OCA\OpenRegister\Activity\Filter</filter>
</filters>
<settings>
<setting>OCA\OpenRegister\Activity\Setting\ObjectSetting</setting>
<setting>OCA\OpenRegister\Activity\Setting\RegisterSetting</setting>
<setting>OCA\OpenRegister\Activity\Setting\SchemaSetting</setting>
</settings>
</activity>

Files

FilePurpose
lib/Activity/Provider.phpIProvider -- parses events into rich text
lib/Activity/ProviderSubjectHandler.phpLocalized subject text generation
lib/Activity/Filter.phpIFilter -- sidebar filter for Activity app
lib/Activity/Setting/ObjectSetting.phpPer-user notification setting for objects
lib/Activity/Setting/RegisterSetting.phpPer-user notification setting for registers
lib/Activity/Setting/SchemaSetting.phpPer-user notification setting for schemas
lib/Listener/ActivityEventListener.phpEvent listener bridging entity events to ActivityService
lib/Service/ActivityService.phpPublishes events to IActivityManager