From 973e113e8c346a1ae9279c1086b2d10aa89e3ec8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Menrath?= Date: Tue, 17 Dec 2024 16:08:34 +0100 Subject: [PATCH] =?UTF-8?q?Home=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Home.md | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 Home.md diff --git a/Home.md b/Home.md new file mode 100644 index 0000000..2743875 --- /dev/null +++ b/Home.md @@ -0,0 +1,71 @@ +## Developer documentation + +### Overview + +The entry point of the plugin is the initialization of the singleton class `\Event_Bridge_For_ActivityPub\Setup` in the main plugin file `event-bridge-for-activitypub.php`. +The constructor of that class calls its `setup_hooks()` function. This function provides hooks that initialize all parts of the _Event Bridge For ActivityPub_ whenever needed. + +### File structure + +Note that almost all files and folder within the `activitypub` folders are structured the same way as in the WordPress ActivityPub plugin. + +### Event Plugin Integrations + +This plugin supports multiple event plugins, even at the same time. To add a new one you first need to add some basic information about your event plugin. Just create a new file in `./includes/integrations/my-event-plugin.php`. Implement at least all abstract functions of the `Event_Plugin_Integration` class. + +#### Basic Event Plugin Integration + +```php + namespace Event_Bridge_For_ActivityPub\Integrations; + + // Exit if accessed directly. + defined( 'ABSPATH' ) || exit; // @codeCoverageIgnore + + /** + * Integration information for My Event Plugin + * + * This class defines necessary meta information is for the integration of My Event Plugin with the ActivityPub plugin. + */ + final class My_Event_Plugin extends Event_Plugin_Integration { +``` + +#### Registering an Event Plugin Integration + +Then you need to tell the Event Bridge for ActivityPub about that class by adding it to the `EVENT_PLUGIN_INTEGRATIONS` constant in the `includes/setup.php` file: + +```php + private const EVENT_PLUGIN_INTEGRATIONS = array( + ... + \Event_Bridge_For_ActivityPub\Integrations\My_Event_Plugin::class, + ); +``` + +#### Additional Feature: Event Sources + +Not all _Event Plugin Integrations_ support the event-sources feature. To add support for it an integration must implement the `Feature_Event_Sources` interface. + +```php +namespace Event_Bridge_For_ActivityPub\Integrations; + +// Exit if accessed directly. +defined( 'ABSPATH' ) || exit; // @codeCoverageIgnore + + /** + * Integration information for My Event Plugin. + * + * This class defines necessary meta information is for the integration of My Event Plugin with the ActivityPub plugin. + * This integration supports the Event Sources Feature. + */ +final class GatherPress extends Event_Plugin_Integration implements Feature_Event_Sources { +``` + +### Transformer + +Transformers are the classes that convert an WordPress post type (e.g. one used for events) to _ActivityStreams_. +The Event Bridge for ActivityPub then takes care of applying the transformer, so you can jump right into [implementing it](./transformer.md). + +### Event Sources Feature – Transmogrifier + +The event sources feature allows to aggregate events from external ActivityPub actors. As the initialization of the Event-Sources feature is quite complex all of that initialization is done in the `init` function of the file `includes/class-event-sources.php` which is called by the `\Event_Bridge_For_ActivityPub\Setup` class (`includes/class-setup.php`). + +In this plugin we call a **_Transmogrifier_** the **opposite** of a **_Transformer_**. It takes care of converting an ActivityPub (`Event`) object in _ActivityStreams_ to the WordPress representation of an event plugin. The transmogrifier classes are only used when the `Event Sources` feature is activated. The _Event Bridge For ActivityPub_ can register transformers for multiple event plugins at the same time, however only one transmogrifier, that is one target even plugin can be used as a target for incoming external ActivityPub `Event` objects.