PHPackages                             devskio/ds\_notifier - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Mail &amp; Notifications](/categories/mail)
4. /
5. devskio/ds\_notifier

ActiveTypo3-cms-extension[Mail &amp; Notifications](/categories/mail)

devskio/ds\_notifier
====================

Notifier

1.1.1(8mo ago)01.3k[1 issues](https://github.com/devskio/ds_notifier/issues)GPL-2.0-or-laterPHPPHP ^8.3

Since Sep 9Pushed 1w ago1 watchersCompare

[ Source](https://github.com/devskio/ds_notifier)[ Packagist](https://packagist.org/packages/devskio/ds_notifier)[ RSS](/packages/devskio-ds-notifier/feed)WikiDiscussions master Synced 2d ago

READMEChangelogDependencies (2)Versions (21)Used By (0)

Notifier
========

[](#notifier)

The `ds_notifier` extension for TYPO3 CMS provides a flexible notification system that can handle various notification channels like Email and Slack (upcoming). It allows for dynamic event handling and custom notification configurations.

Features
--------

[](#features)

- **Dynamic Event Handling**: Utilize custom events to trigger notifications.
- **Multiple Notification Channels**: Supports Email, and potentially more channels in the future (Slack, ...).
- **Event-Driven Notifications**: Configure notifications based on system or custom events.
- **Localization Support**: Comes with built-in support for translations.

Requirements
------------

[](#requirements)

- PHP 8.3 or higher
- TYPO3 CMS 13.4 or higher

Installation
------------

[](#installation)

1. Install the extension via Composer:

    ```
    composer require devskio/ds_notifier
    ```
2. Run database compare to add the new tables.

Usage
-----

[](#usage)

#### Built-in events

[](#built-in-events)

Notiz is shipped with a few built-in events that can be used to trigger notifications.

##### TYPO3: Cache Flush

[](#typo3-cache-flush)

The [CacheFlush](./Classes/Event/Typo3/Core/Cache/CacheFlush.php) event is triggered when TYPO3's caching system is flushed. This can occur during various system maintenance tasks or via explicit backend actions. Handling this event allows developers to notify system administrators when the cache is cleared.

##### Notifier: Notification Send Error

[](#notifier-notification-send-error)

The [NotificationSendError](./Classes/Event/Notifier/NotificationSendError.php) event is triggered when there is an error during the notification sending process. This event allows for handling errors specifically related to the notification system, such as logging errors, sending alerts to administrators, or attempting to resend notifications. It provides a mechanism to robustly manage failures in the notification delivery process.

##### Scheduler: Task failure

[](#scheduler-task-failure)

The [TaskFailure](./Classes/Event/Notifier/TaskFailure.php) event is triggered when there is scheduler task failure. This allow for prompt notification of system administrators when a scheduled task fails. Tha can also serve as logging mechanism for task failures.

##### Form: Submit Finisher

[](#form-submit-finisher)

The [SubmitFinisherEvent](./Classes/Event/Form/SubmitFinisherEvent.php) adds new [Form Framework finisher](https://docs.typo3.org/p/typo3/cms-form/main/en-us/DeveloperGuide/Finishers/Index.html) which is triggered at the end of the form submission process in TYPO3's form framework. This event allows for custom actions to be executed after a form has been successfully submitted and processed. It is particularly useful for integrating additional notifications related to form submissions.

### Notifications and recipients configuration

[](#notifications-and-recipients-configuration)

The extension can be configured via TYPO3's backend configuration modules. You can set up different notification channels, layouts, and more.

#### Create a notification recipient

[](#create-a-notification-recipient)

We need to set up Recipient record first, so we can use it later in Notification record. To set up a notification recipient, in Backend navigate to List module and create a new record of type "Recipient". Here we can define for which type of communication channel recipient is meant, either Email or Slack, then fill in the required fields and save the record.

[![recipient.png](readme/recipient.png)](readme/recipient.png)

[![recipientSlack.png](readme/recipientSlack.png)](readme/recipientSlack.png)

For slack we also need to define slack webhook for specific channel. [Here](https://api.slack.com/messaging/webhooks) you can find more information on how to get your slack webhook.

#### Create a notification

[](#create-a-notification)

To create a notification, in Backend navigate to List module and create a new record of type "Notification". We select for which communication channel is this notification meant, then we can select specific event when this notification is supposed to be sent and for which sites it's supposed to available.

> **NOTE**: For "Form: Submit Finisher event", we first need to add Notifier finisher as Finisher in form configuration, so we can select this form later in notification record.

[![notification1.png](readme/notification1.png)](readme/notification1.png)

After event is selected, we can define, notifications body, layout and see available markers for body, that can be used inside body.

> **NOTE**: For "Form: Submit Finisher event", we can use form fields like {formValues}.{formFieldHandle} for example {formValues}.{text-1}.

[![notification2.png](readme/notification2.png)](readme/notification2.png)Next we select recipient of the notification, we can select multiple recipients for one notification.

[![notification3.png](readme/notification3.png)](readme/notification3.png)

For slack setting up notification is similar to email, but we need to select slack recipient where notification will be sent.

[![notification4.png](readme/notification4.png)](readme/notification4.png)

After save, notification should be ready to be sent when respective event is triggered.

### Triggering notifications

[](#triggering-notifications)

Predefined events are triggered by their respective events (cache flush, form submit finisher, error occurrence). But all notifications can be triggered in code by calling TYPO3's `EventDispatcher` and passing event object with optional data.

```
$eventDispatcher = GeneralUtility::makeInstance(EventDispatcher::class);
$eventDispatcher->dispatch(new CacheFlush(new CacheFlushEvent($groups)));
```

Customization
-------------

[](#customization)

Developers can extend the functionality by creating custom layouts, event handlers or notification channels.

### Custom layouts and templates override

[](#custom-layouts-and-templates-override)

You can override email templates via Typo3's Fluid email paths.

```
$GLOBALS['TYPO3_CONF_VARS']['MAIL']['templateRootPaths'][700]
    = 'EXT:my_site_extension/Resources/Private/Templates/Email';
$GLOBALS['TYPO3_CONF_VARS']['MAIL']['layoutRootPaths'][700]
    = 'EXT:my_site_extension/Resources/Private/Layouts';
$GLOBALS['TYPO3_CONF_VARS']['MAIL']['layoutRootPaths'][700]
    = 'EXT:my_site_extension/Resources/Private/Layouts';
```

To create a custom layouts for your notifications you need to add it to via `TCEFORM.tsconfig`.

```
tx_dsnotifier_domain_model_notification {
    layout {
        addItems {
            TestLayout = Test
            AdminLayout = Admin
        }
    }
}
```

### Custom events

[](#custom-events)

You can create custom events by implementing the `EventInterface` via our class `AbstractEvent` and dispatching them via TYPO3's `EventDispatcher` in your code. Each event should have a label, group defined via tags, that are displayed in notification configuration and optional flexibleConfiguration for adding custom Flex form. Language translations can be used. Next each event can have a specific markers, that can be used in notification body, and specific recipients, that will receive the notification. All this data can be passed from class to constructor, and then used in event object. All markers and emails are displayed in notification configuration.

> **NOTE**: Group must be enumeration.

```
use Devsk\DsNotifier\Attribute\Event\Email;
use Devsk\DsNotifier\Attribute\Event\Marker;
use Devsk\DsNotifier\Attribute\NotifierEvent;
use Devsk\DsNotifier\Event\AbstractEvent;

#[NotifierEvent(
    label: 'Custom event notification',
    group: EventGroup::CUSTOMGROUP,
    flexibleConfigurationFile: 'FILE:EXT:my_site_extension/Configuration/FlexForms/Notifier/CustomEvent.xml',
)]
class CustomEvent extends AbstractEvent
{
    #[Marker('Custom event value')]
    protected string $customValue = '';

    #[Marker('Custom event other')]
    protected string $customOtherValue = '';

    #[Email('Custom event email')]
    protected $customEmail;

    public function __construct(string $customValue,string $customOtherValue, $customEmail)
    {
        $this->customValue = $customValue;
        $this->customOtherValue = $customOtherValue;
        $this->customEmail = $customEmail;
    }

    public function getCustomValue(): string
    {
        return $this->customValue;
    }

    public function getCustomOtherValue(): string
    {
        return $this->customOtherValue;
    }

    public function getCustomEmail()
    {
        return $this->customEmail;
    }
}
```

If email template is created for custom event, it should be placed in `your_extension/Resources/Private/Templates/Email/EventGroupName/CustomEventName.html`. Then that template will be used in for notification body, otherwise default will be used.

### Extending Notification Channels

[](#extending-notification-channels)

Custom notification channel can be created by extending the `NotificationInterface` via our custom class `Notification`. In your custom channel class you need to define your notification login in `send()` function.

```
class CustomNotificationChannel extends Notification
{
    public function send(EventInterface $event): void
    {
        // Your custom notification logic here
    }
}
```

This new notification channel must be registered in Classes.php configuration.

```
Model\Notification::class => [
        'subclasses' => [
            Model\Notification\CustomNotificationChannel::class => Model\Notification\CustomNotificationChannel::class,
        ],
    ],
    Model\Notification\CustomNotificationChannel::class => [
        'recordType' => Model\Notification\CustomNotificationChannel::class,
        'tableName' => Model\Notification\CustomNotificationChannel::tableName(),
    ],
];
```

And of course don't forget to override notification TCA for new channel to display and configure it in notification record.

```
$tca = [
        'columns' => [
            'channel' => [
                'config' => [
                    'items' => array_merge($GLOBALS['TCA']['tx_dsnotifier_domain_model_notification']['columns']['channel']['config']['items'],[
                        [
                            'label' => "{$lll}:tx_dsnotifier_domain_model_notification.channel.customNotificationChannel",
                            'value' => CustomNotificationChannel::class,
                            'icon' => 'custom-notification-channel.svg
                        ],
                    ]),
                ],
            ],
        ],
        'types' => [
            CustomNotificationChannel::class => [
                'showitem' => "
                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
                    --palette--;;general,
                --div--;{$lll}:tx_dsnotifier_domain_model_notification.tab.customNotificationChannel,
                    --palette--;;customNotificationChannel,
                --div--;LLL:EXT:ds_notifier/Resources/Private/Language/locallang_db.xlf:tx_dsnotifier_domain_model_notification.tab.configuration,
                    --palette--;;configuration,
                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
                    --palette--;;access,
                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
                    --palette--;;language,
                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
                ",
                'subtype_value_field' => 'event',
                'columnsOverrides' => [
                    'body' => [
                        'config' => [
                            'renderType' => ((new Typo3Version())->getMajorVersion() > 12) ? 'codeEditor' : 't3editor',
                            'format' => 'html',
                        ],
                    ],
                ],
            ],
        ],
        'palettes' => [
            'customNotificationChannel' => [
                'label' => "{$lll}:tx_dsnotifier_domain_model_notification.palette.customNotificationChannel",
                'showitem' => 'body',
            ],
        ],
    ];

    $GLOBALS['TCA']['tx_dsnotifier_domain_model_notification'] = array_replace_recursive($GLOBALS['TCA']['tx_dsnotifier_domain_model_notification'], $tca);
```

Support
-------

[](#support)

For support, contact the development team at [DEVSK](https://www.devsk.io/).

License
-------

[](#license)

This project is licensed under the GPL-2.0-or-later. See the `LICENSE` file for more details.

###  Health Score

47

—

FairBetter than 93% of packages

Maintenance82

Actively maintained with recent releases

Popularity19

Limited adoption so far

Community11

Small or concentrated contributor base

Maturity64

Established project with proven stability

 Bus Factor1

Top contributor holds 76.3% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~26 days

Recently: every ~56 days

Total

17

Last Release

240d ago

Major Versions

0.2.0 → 1.0.02025-03-26

0.3.0 → 1.1.02025-11-05

### Community

Maintainers

![](https://www.gravatar.com/avatar/1ed8b219e562bd124e9fdd3693d2272f404f8ff1bc448cf67cccb1c4c4a9c2f1?d=identicon)[devskio](/maintainers/devskio)

---

Top Contributors

[![ondrejgrosko](https://avatars.githubusercontent.com/u/142219522?v=4)](https://github.com/ondrejgrosko "ondrejgrosko (71 commits)")[![miroslavborecky](https://avatars.githubusercontent.com/u/142002780?v=4)](https://github.com/miroslavborecky "miroslavborecky (19 commits)")[![michalpodrouzek](https://avatars.githubusercontent.com/u/172371092?v=4)](https://github.com/michalpodrouzek "michalpodrouzek (2 commits)")[![devskio](https://avatars.githubusercontent.com/u/138782632?v=4)](https://github.com/devskio "devskio (1 commits)")

---

Tags

notificationnotifierTYPO3 CMS

### Embed Badge

![Health badge](/badges/devskio-ds-notifier/health.svg)

```
[![Health](https://phpackages.com/badges/devskio-ds-notifier/health.svg)](https://phpackages.com/packages/devskio-ds-notifier)
```

###  Alternatives

[symfony/notifier

Sends notifications via one or more channels (email, SMS, ...)

80643.9M438](/packages/symfony-notifier)[guanguans/notify

Push notification SDK(AnPush、Bark、Chanify、DingTalk、Discord、Gitter、GoogleChat、IGot、Lark、Mattermost、MicrosoftTeams、NotifyX、NowPush、Ntfy、Push、Pushback、PushBullet、PushDeer、PushMe、Pushover、PushPlus、QQ、RocketChat、ServerChan、ShowdocPush、SimplePush、Slack、Telegram、WeWork、WPush、XiZhi、YiFengChuanHua、ZohoCliq、ZohoCliqWebHook、Zulip).

687114.3k8](/packages/guanguans-notify)[friendsoftypo3/content-blocks

TYPO3 CMS Content Blocks - Content Types API | Define reusable components via YAML

103519.9k53](/packages/friendsoftypo3-content-blocks)[yieldstudio/laravel-expo-notifier

Easily send Expo notifications with Laravel.

59140.8k](/packages/yieldstudio-laravel-expo-notifier)[brotkrueml/schema

Embedding schema.org vocabulary - API and view helpers for schema.org markup

34653.7k16](/packages/brotkrueml-schema)[web-vision/deepltranslate-core

DeepL Translate (CORE) - This extension provides option to translate content element, and TCA record texts to DeepL supported languages.

33142.5k8](/packages/web-vision-deepltranslate-core)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
