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\Joinable
;
8 use Symfony\Component\EventDispatcher\EventSubscriberInterface
;
10 class ContactSchemaMapSubscriber
implements EventSubscriberInterface
{
15 public static function getSubscribedEvents() {
17 Events
::SCHEMA_MAP_BUILD
=> 'onSchemaBuild',
22 * @param \Civi\Api4\Event\SchemaMapBuildEvent $event
24 public function onSchemaBuild(SchemaMapBuildEvent
$event) {
25 $schema = $event->getSchemaMap();
26 $table = $schema->getTableByName('civicrm_contact');
27 $this->addCreatedActivitiesLink($table);
28 $this->fixPreferredLanguageAlias($table);
32 * @param \Civi\Api4\Service\Schema\Table $table
34 private function addCreatedActivitiesLink($table) {
35 $alias = 'created_activities';
36 $joinable = new Joinable('civicrm_activity_contact', 'contact_id', $alias);
37 $joinable->addCondition($alias . '.record_type_id = 1');
38 $joinable->setJoinType($joinable::JOIN_TYPE_ONE_TO_MANY
);
39 $table->addTableLink('id', $joinable);
43 * @param \Civi\Api4\Service\Schema\Table $table
45 private function fixPreferredLanguageAlias($table) {
46 foreach ($table->getExternalLinks() as $link) {
47 if ($link->getAlias() === 'languages') {
48 $link->setAlias('preferred_language');