Event Condition Action

ECA - New rules engine for Drupal 9+

Jürgen Haas

12 April 2022

About us

Agenda

  1. Introduction
  2. Quick Demo
  3. ECA Architecture
  4. Modeller
  5. Objectives
  6. Full Demo
  7. Roadmap

Introduction

For a huge customer project, which eventually started to migrate from Drupal 7 to 9, we faced the problem that the old site heavily used the Rules module - and repeated research convinced us that Rules wasn’t ready for the job.

Neither custom code nor hard-coded business logic was on.

It was time to consider a brand-new approach!

Status of the famous Rules module

The Rules module for Drupal 8 is still in its alpha release stage … still needs significant work. (Excerpt description tr_rulez)

Previously

Early feedback to our prototype

Early feedback to our prototype

Early feedback to our prototype

Early feedback to our prototype

Quick Demo

ECA Architecture

  • ECA is a processor - Period. No more, no less
  • An event subscriber listens to all Drupal events and triggers the processor
  • This processes all available ECA models - all models for the current event
  • The ECA models are config entities

Where does the config come from?

ECA doesn’t care!

What components does the processor support?

  • Events: all Drupal events - you can add custom events
  • Conditions: ECA provides a plugin manager
  • Actions: all Drupal actions - you can add custom actions

Gateways, as a kind of extended conditions is also supported, not fully functional yet.

What’s already included in ECA?

  • Processor for ECA config entities with all contained rules
  • Plugin managers for modellers, events and conditions
  • Interfaces and abstract base classes and traits
  • Integration of all actions from Drupal core actions module
  • Extensive context stack support (dependency)
  • Support for caching, loops, logging, states, tokens, etc.
  • Prevent recursion
  • TypedData support
  • Tagging for event characterization
  • Tests

11 Submodules

  • ECA Base: context, cron, custom, state, token, etc.
  • ECA Config: listen, read & write config
  • ECA Content: entities, fields, token, etc.
  • ECA Form: build, validate, submit, etc.
  • ECA Log: create and listen
  • ECA Migrate: listen to all migrate events
  • ECA Misc: kernel, Drupal core, routing, etc.
  • ECA Queue: task queue, scheduled tasks, etc.
  • ECA User: login, logout, cancel, switch, roles, etc.
  • ECA Views: query, export, etc.
  • ECA Workflow: transitions, etc.

Contrib modules supporting ECA

Preparing support for more contrib

Modeller

  • A modeller is the user interface for ECA config entities.
  • It can be integrated as a @EcaModeller plugin, that stores models as config entities. The plugin manager is provided by the ECA module.
  • May be BPMN but not necessarily. Only the structure Event - Condition - Action matters.
  • Two modellers are already integrated:

Camunda Desktop Client

Download

Integrated by Camunda BPMN module.

BPMN.iO

Integrated in Drupal UI. Everything is provided by BPMN.iO module.

More information

Structure: Modeller

Possible modellers

Objectives

ECA got started to provide a “Rules” equivalent for Drupal 9 and beyond. While getting close to deliver on that objective, ECA solves additional challenges and helps to trim-down the overhead of each Drupal application.

Reduce the need for custom modules

  • Far less likely your site needs a custom module for …
    • most of the hooks
    • form altering, validation or submit handlers
    • specific needs for cron or queue tasks

Reduce number of modules

Transparency for business owners

Provide a tool where people understanding their business logic, but not necessarily Drupal details, can participate in building and maintaining the configuration throughout the lifecycle of the Drupal application.

Solid workflow

At the same time, Drupal CMI helps to track all the changes. In the future, we may even be able to support revisions and moderation, so that rock-solid workflows can be applied when needed.

Full Demo

Roadmap

ECA

Directories: 83
Files: 246
Lines of Code: 25658
Comment Lines of Code: 8662 (33.76%)
Non-Comment Lines of Code: 16996 (66.24%)

Test Coverage: almost 75%

Code Style: all clean

BPMN.IO

Directories: 1
Files: 2
Lines of Code: 161
Comment Lines of Code: 55 (34.16%)
Non-Comment Lines of Code: 106 (65.84%)

Test Coverage: 0%

Code Style: all clean

Releases

Beta-1 on 3rd November 2021
Beta-2 on 12th January 2022
Beta-3 on 17 March 2022
Beta-4 on 19 March 2022
Beta-5 on 21 March 2022
Beta-6 on 23 March 2022
Beta-7 on 29 March 2022
Beta-8 on 12 April 2022

RC-1 later this week !?!

Release 1.0.0 soon after

Modules and Issue Queues

Any help is highly appreciated

  • Development
    • ECA and plugins
    • Optimization of the integrated BPMN.iO client
  • Tests
  • Review and feedback
  • Support (Issue queue and in chats)
  • Documentation
  • Translations
  • Descriptions on the drupal.org project pages
  • Spread the word
  • Join us on Drupal Slack