Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Development #128

Merged
merged 36 commits into from
Jan 16, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
b728ba2
Add maxDepth and storing subobjects
rjzondervan Dec 27, 2024
e332d44
Filter on subobjects
rjzondervan Dec 27, 2024
118fb06
Fix migration
rjzondervan Dec 30, 2024
3d30dbe
Add filteroptions
rjzondervan Dec 31, 2024
5623672
only show schemas of a specific register
SudoThijn Jan 3, 2025
e68f546
Merge remote-tracking branch 'origin/development' into feature/search…
rjzondervan Jan 6, 2025
e8dcbbf
get maxdepth from schema
rjzondervan Jan 6, 2025
7aa88d9
Merge branch 'feature/search-in-subobjects' into feature/AXCVDWOF-48/gte
rjzondervan Jan 6, 2025
585feba
Merge branch 'feature/AXCVDWOF-48/gte' into feature/search-in-subobjects
rjzondervan Jan 6, 2025
22da30f
Also allow array subobjects
rjzondervan Jan 6, 2025
8288a13
Add missing docblock
rjzondervan Jan 6, 2025
55c81a0
Merge pull request #120 from ConductionNL/feature/search-in-subobjects
rjzondervan Jan 6, 2025
d9d8732
fixed schemas not loading on register edit
SudoThijn Jan 6, 2025
13b4933
Merge pull request #121 from ConductionNL/feature/register-fix
SudoThijn Jan 7, 2025
0b0cc1e
Merge remote-tracking branch 'origin/development' into feature/REGIST…
remko48 Jan 7, 2025
c40859e
small fix
remko48 Jan 7, 2025
2a645ba
Merge pull request #118 from ConductionNL/feature/REGISTERS-87/schema…
SudoThijn Jan 7, 2025
1438f83
Add events
rubenvdlinde Jan 7, 2025
e595d3f
First stages on fixing the event dispatcher calls
rjzondervan Jan 8, 2025
c497df7
Document new registration route for event listeners
rjzondervan Jan 9, 2025
025570b
Fix documentation in line with latest Nextcloud documentation
rjzondervan Jan 9, 2025
04956fc
Dispatch events one layer deeper
rjzondervan Jan 9, 2025
23476df
Small copy fix
rjzondervan Jan 9, 2025
c0294c8
Merge pull request #124 from ConductionNL/feature/CONNECTOR-134/event…
rjzondervan Jan 9, 2025
2798dce
Remove creating audit trail in controller as this is also done in the…
rjzondervan Jan 9, 2025
ef95b6b
Fix copy paste error
rjzondervan Jan 9, 2025
7e63891
Clearify one piece of text
rjzondervan Jan 9, 2025
a8ffdab
Merge pull request #122 from ConductionNL/feature/CONNECTOR-134/events
rjzondervan Jan 9, 2025
db8aa72
fixed object upload
SudoThijn Jan 10, 2025
1fa9ba7
Merge pull request #125 from ConductionNL/fix/uploade-object
SudoThijn Jan 10, 2025
6c73eaa
Add setting default values
rjzondervan Jan 13, 2025
9660a0f
Add docblock
rjzondervan Jan 13, 2025
f73bccd
Style fix
rjzondervan Jan 13, 2025
5b65d14
Merge pull request #126 from ConductionNL/feature/REGISTERS-94/defaul…
rjzondervan Jan 13, 2025
f5ce9bd
fix extend for sub objects with maxDepth
bbrands02 Jan 16, 2025
cd5bc10
Merge pull request #127 from ConductionNL/feature/CONNECTOR-182/fix-e…
bbrands02 Jan 16, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file modified appinfo/info.xml
100644 → 100755
Empty file.
3 changes: 2 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@
"guzzlehttp/guzzle": "^7.0",
"opis/json-schema": "^2.3",
"symfony/uid": "^6.4",
"symfony/yaml": "^6.4"
"symfony/yaml": "^6.4",
"twig/twig": "^3.18"
},
"require-dev": {
"nextcloud/ocp": "dev-stable29",
Expand Down
124 changes: 102 additions & 22 deletions composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

137 changes: 137 additions & 0 deletions docs/events.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
# Events Documentation

## Overview

This document provides a comprehensive overview of all events in the OpenRegister application. Events are a crucial part of OpenRegister's component-based architecture, enabling seamless integration with other Nextcloud applications. In Nextcloud's ecosystem, each application functions as an independent component - events provide a standardized way for these components to communicate and interact with OpenRegister.

These events can be used to hook into various actions and extend functionality, allowing other applications to respond to changes in OpenRegister's data and workflow without tight coupling. This event-driven approach promotes loose coupling between components while enabling rich integration possibilities.

## Available Events

### Schema Events

#### SchemaCreatedEvent
- **Class**: `OCA\OpenRegister\Event\SchemaCreatedEvent`
- **Triggered**: When a new schema is created in the system
- **Data Provided**:
- `getSchema()`: Returns the Schema object that was created
- **Usage**: Can be used to perform additional setup or trigger notifications when new schemas are created

#### SchemaUpdatedEvent
- **Class**: `OCA\OpenRegister\Event\SchemaUpdatedEvent`
- **Triggered**: When a schema is updated
- **Data Provided**:
- `getSchema()`: Returns the updated Schema object
- `getOldSchema()`: Returns the Schema object before updates
- **Usage**: Useful for tracking changes to schemas and triggering related actions

#### SchemaDeletedEvent
- **Class**: `OCA\OpenRegister\Event\SchemaDeletedEvent`
- **Triggered**: When a schema is deleted from the system
- **Data Provided**:
- `getSchema()`: Returns the Schema object that was deleted
- **Usage**: Can be used to perform cleanup or trigger additional actions when schemas are removed

### Register Events

#### RegisterCreatedEvent
- **Class**: `OCA\OpenRegister\Event\RegisterCreatedEvent`
- **Triggered**: When a new register is created
- **Data Provided**:
- `getRegister()`: Returns the Register object that was created
- **Usage**: Can be used to perform additional setup or trigger notifications when new registers are created

#### RegisterUpdatedEvent
- **Class**: `OCA\OpenRegister\Event\RegisterUpdatedEvent`
- **Triggered**: When a register is updated
- **Data Provided**:
- `getRegister()`: Returns the updated Register object
- `getOldRegister()`: Returns the Register object before updates
- **Usage**: Useful for tracking changes to registers and triggering related actions

#### RegisterDeletedEvent
- **Class**: `OCA\OpenRegister\Event\RegisterDeletedEvent`
- **Triggered**: When a register is deleted
- **Data Provided**:
- `getRegister()`: Returns the Register object that was deleted
- **Usage**: Can be used for cleanup operations or notifications when registers are removed

### Object Events

#### ObjectCreatedEvent
- **Class**: `OCA\OpenRegister\Event\ObjectCreatedEvent`
- **Triggered**: When a new object is created in a register
- **Data Provided**:
- `getObject()`: Returns the ObjectEntity that was created
- **Usage**: Useful for tracking new entries, triggering notifications, or performing additional processing on new objects

#### ObjectUpdatedEvent
- **Class**: `OCA\OpenRegister\Event\ObjectUpdatedEvent`
- **Triggered**: When an existing object is updated in a register
- **Data Provided**:
- `getObject()`: Returns the updated ObjectEntity
- `getOldObject()`: Returns the ObjectEntity before updates
- **Usage**: Useful for tracking changes to objects, auditing modifications, or triggering follow-up actions

#### ObjectDeletedEvent
- **Class**: `OCA\OpenRegister\Event\ObjectDeletedEvent`
- **Triggered**: When an object is deleted from a register
- **Data Provided**:
- `getObject()`: Returns the ObjectEntity that was deleted
- **Usage**: Can be used for cleanup operations, maintaining related data integrity, or sending notifications about deletions

## Using Events

Events are a powerful way to decouple different parts of your application and respond to changes in the system. The OpenRegister app uses Nextcloud's event dispatcher system to broadcast various events that you can listen to.

### Event Handling Overview

Events are dispatched at key points in the application lifecycle, such as when objects are created, updated, or deleted. By implementing event listeners, you can:

- Perform additional actions when changes occur
- Maintain data consistency across different parts of the system
- Send notifications or trigger external integrations
- Add custom business logic without modifying core code
- Create audit trails and logs

### Implementation Steps

To start handling events in your application, follow these steps:

### 1. Create an Event Listener Class

First, create a class that will handle the event. Your listener class should:

- Implement the `IEventListener` interface
- Define a `handle()` method that receives the event object
- Be placed in an appropriate namespace in your application

Here's a basic example structure:

```php
namespace OCA\MyApp\Listener;

use OCA\OpenRegister\Event\SchemaCreatedEvent;
use OCA\OpenRegister\Event\SchemaUpdatedEvent;
use OCA\OpenRegister\Event\SchemaDeletedEvent;

class SchemaListener implements IEventListener {
public function handle(SchemaCreatedEvent $event) {
// Handle the event
}
}
```

### 2. Register the Event Listener

After creating your listener class, you need to register it with Nextcloud's event dispatcher system. This is done in your application's `lib/AppInfo/Application.php` file by registering the listener in the `register()` method:

```php
/* @var IEventDispatcher $dispatcher */
$dispatcher = $this->getContainer()->get(IEventDispatcher::class);
$dispatcher->addServiceListener(eventName: SchemaCreatedEvent::class, className: SchemaCreatedListener::class);
```

This line registers the `SchemaListener` class to handle `SchemaCreatedEvent` events. You can register your listener to other events by adding similar lines.

You can read more about event handling in the [Nextcloud documentation](https://docs.nextcloud.com/server/latest/developer_manual/basics/events.html).
Loading
Loading