3 namespace Civi\Api4\Event\Subscriber
;
5 use Civi\Api4\Event\Events
;
6 use Civi\Api4\Event\SchemaMapBuildEvent
;
7 use Civi\Api4\Service\Schema\Joinable\ActivityToActivityContactAssigneesJoinable
;
8 use Civi\Api4\Service\Schema\Joinable\BridgeJoinable
;
9 use Civi\Api4\Service\Schema\Joinable\Joinable
;
10 use Symfony\Component\EventDispatcher\EventSubscriberInterface
;
12 class ActivitySchemaMapSubscriber
implements EventSubscriberInterface
{
17 public static function getSubscribedEvents() {
19 Events
::SCHEMA_MAP_BUILD
=> 'onSchemaBuild',
24 * @param \Civi\Api4\Event\SchemaMapBuildEvent $event
26 public function onSchemaBuild(SchemaMapBuildEvent
$event) {
27 $schema = $event->getSchemaMap();
28 $table = $schema->getTableByName('civicrm_activity');
30 $middleAlias = \CRM_Utils_String
::createRandom(10, implode(range('a', 'z')));
31 $middleLink = new ActivityToActivityContactAssigneesJoinable($middleAlias);
33 $bridge = new BridgeJoinable('civicrm_contact', 'id', 'assignees', $middleLink);
34 $bridge->setBaseTable('civicrm_activity_contact');
35 $bridge->setJoinType(Joinable
::JOIN_TYPE_ONE_TO_MANY
);
37 $table->addTableLink('contact_id', $bridge);