Skip to content

Entities

This page is the reference for FedMS' data model in code. For the domain-level meaning of each concept, see the Concepts section.

The entity type map

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Drupal core
├── user
├── node              (FedMS-relevant bundles: book, page)
├── media             (image, document, pdf, audio, video, remote_video, vector_image)
├── taxonomy_term     (FedMS-relevant vocab: fedms_task_milestone)
├── webform
├── webform_submission
├── paragraph         (FedMS bundles: text, media, view, webform)
├── block_content
└── ...

Group module
├── group             (FedMS bundles: org, event, session)
└── group_relationship  (incl. all the relationship_type combinations)

FedMS — fedms_content
├── fedms_event       (bundle: fedms_event_type — ships `in`)
└── fedms_session     (bundle: fedms_session_type — ships `in`)

FedMS — fedms_attachment
└── fedms_attachment  (bundle: fedms_attachment_type — ships `default`)

FedMS — fedms_task
├── fedms_task        (no bundle — single content type)
└── fedms_task_pattern (config entity)

The two worlds

Always remember: orgs, events, and sessions exist as two parallel entities:

Concept Group entity Content entity
Org group (bundle org) (none — orgs have no editorial content entity)
Event group (bundle event) fedms_event
Session group (bundle session) fedms_session

The group side owns structure, membership, and federation; the content side owns editorial body and translations. See Concepts → index.

Entity-class reference

Entity type PHP class
fedms_event Drupal\fedms_content\Entity\Event
fedms_session Drupal\fedms_content\Entity\Session
fedms_attachment Drupal\fedms_attachment\Entity\Attachment
fedms_task Drupal\fedms_task\Entity\Task
fedms_task_pattern Drupal\fedms_task\Entity\TaskPattern

All five extend RevisionableContentEntityBase (content entities) or ConfigEntityBase (the pattern), and all five use declare(strict_types=1);.

Field reference

Group fields (added by fedms_federation)

Field On Type Purpose
field_address org address Postal address.
field_phone org telephone Phone.
field_email org email Email.
field_homepage org link Website.
field_logo org media reference Logo.
field_color org color_field Brand color.
field_url org link Canonical URL.
field_org_types org taxonomy_term reference Categorization.
field_license_type org list_string License tier.
field_gitlab_id org string GitLab project ID — federation anchor.
field_date event, session smart_date Start/end window.
field_venue event, session text_long Venue.
field_accommodations event, session text_long Accommodation info.
field_description org, event, session text_long (paragraph in content world) Short description.
field_event_profile event entity_reference Reusable event profile (planned).
field_session_profile session entity_reference Reusable session profile (planned).
field_flag_start_processed event, session boolean Lifecycle: start-of-window processed?
field_flag_end_processed event, session boolean Lifecycle: end-of-window processed?
field_sync event, session boolean Federation sync marker.
subgroup_depth, subgroup_left, subgroup_right, subgroup_tree all three various Subgroup-tree metadata maintained by the subgroup module.

group_relationship base fields (added by fedms_federation)

Field Type Purpose
status boolean Soft-delete switch. FALSE = removed but preserved.

fedms_event / fedms_session base fields

(See src/Entity/Event.php and src/Entity/Session.php in fedms_content.)

Field Type
status boolean
description entity_reference_revisions (paragraph) — unlimited, translatable
uid entity_reference (user) — owner
created, changed created / changed

fedms_attachment base fields

(See src/Entity/Attachment.php in fedms_attachment.)

Field Type
label string
status boolean
uid entity_reference (user) — owner
created, changed created / changed
description entity_reference_revisions (paragraph) — unlimited
group entity_reference (group, bundles event + session)
assignee entity_reference (user) — unlimited
visibility list_string (private, group, public)
fedms_task_patterns list_string — unlimited

Default attachment-type bundle ships field_video.

fedms_task base fields

(See src/Entity/Task.php in fedms_task.)

Field Type
label string — required
status boolean — completion flag
uid entity_reference (user) — owner / author
created, changed created / changed
assignee entity_reference (user) — required
group entity_reference (group) — required
milestone entity_reference (taxonomy_term) — required
pattern entity_reference (fedms_task_pattern)
actionable, due timestamp
attachment entity_reference (fedms_attachment)
media entity_reference (media)
node entity_reference (node)
user entity_reference (user)
webform entity_reference (webform)
webform_submission entity_reference (webform_submission)

node / media base fields (added by fedms_task)

Field Type
fedms_task_patterns list_string — unlimited

(fedms_attachment ships its own equivalent on the attachment entity directly, so it's not added there by fedms_task.)

fedms_task_pattern config fields

(See src/Entity/TaskPattern.php in fedms_task.)

Field Type Purpose
id string Machine name.
label string Pattern label.
taskLabel string Task label template (tokens supported).
milestone string UUID of the milestone term.
rule string ECA rule ID.
conditions array of string Condition plugin IDs.
conditionArguments array Per-condition arguments.
successors array of string Successor pattern IDs.
actionableRelation string task created / session start / session end.
actionableRelationDate string DateTime::modify() modifier.
dueRelation, dueRelationDate same Same, for the due timestamp.

Group relationship types (fedms_federation)

The full matrix:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
org-group_membership
org-subgroup-event
org-group_node-book
org-group_node-page
org-group_media-{audio,document,image,pdf,remote_video,vector_image,video}

event-group_membership
event-subgroup-session
event-group_node-book
event-group_node-page
event-group_media-{audio,document,image,pdf,remote_video,vector_image,video}

session-group_membership
session-group_node-book
session-group_node-page
session-group_media-{audio,document,image,pdf,remote_video,vector_image,video}

Each is a group.relationship_type.<id> config entity.

Cross-world navigation in code

To go between the group world and the content world:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
// Group → content (not directly linked; content entities reference
// the group they belong to, not vice versa).
// Use a query:
$content = $entity_type_manager->getStorage('fedms_event')
  ->loadByProperties(['some_group_ref_field' => $group->id()]);

// Group → parent group (org / event):
$parent = $entity_type_manager
  ->getHandler('group', 'subgroup')
  ->getParent($group);

// User → groups they are member of:
$memberships = GroupMembership::loadByUser($user);

Next steps

  • Modules — where each entity is owned.
  • ECA models — how entities trigger behavior.
  • Concepts — the user-facing definitions.