/
ActivitySchemaMapSubscriber.php
39 lines (31 loc) · 1.17 KB
/
ActivitySchemaMapSubscriber.php
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
namespace Civi\Api4\Event\Subscriber;
use Civi\Api4\Event\SchemaMapBuildEvent;
use Civi\Api4\Service\Schema\Joinable\ExtraJoinable;
use Civi\Api4\Service\Schema\Joinable\Joinable;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* @service civi.api4.activitySchema
*/
class ActivitySchemaMapSubscriber extends \Civi\Core\Service\AutoService implements EventSubscriberInterface {
/**
* @return array
*/
public static function getSubscribedEvents() {
return [
'api.schema_map.build' => 'onSchemaBuild',
];
}
/**
* @param \Civi\Api4\Event\SchemaMapBuildEvent $event
*/
public function onSchemaBuild(SchemaMapBuildEvent $event): void {
$schema = $event->getSchemaMap();
$table = $schema->getTableByName('civicrm_activity');
$link = (new ExtraJoinable('civicrm_case', 'id', 'case_id'))
->setBaseTable('civicrm_activity')
->setJoinType(Joinable::JOIN_TYPE_MANY_TO_ONE)
->addCondition('`{target_table}`.`id` = (SELECT `civicrm_case_activity`.`case_id` FROM `civicrm_case_activity` WHERE `civicrm_case_activity`.`activity_id` = `{base_table}`.`id` LIMIT 1)');
$table->addTableLink('id', $link);
}
}