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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
<?php
namespace Civi\Api4\Service\Schema\Joinable;
use Civi\Api4\CustomField;
class CustomGroupJoinable extends Joinable {
/**
* @var string
*/
protected $joinSide = self::JOIN_SIDE_LEFT;
/**
* @var string
*
* Name of the custom field column.
*/
protected $columns;
/**
* @param $targetTable
* @param $alias
* @param bool $isMultiRecord
* @param null $entity
*/
public function __construct($targetTable, $alias, $isMultiRecord, $entity, $columns) {
$this->entity = $entity;
$this->columns = $columns;
parent::__construct($targetTable, 'entity_id', $alias);
$this->joinType = $isMultiRecord ?
self::JOIN_TYPE_ONE_TO_MANY : self::JOIN_TYPE_ONE_TO_ONE;
}
/**
* @inheritDoc
*/
public function getEntityFields() {
if (!$this->entityFields) {
$fields = CustomField::get()
->setSelect(['custom_group.name', 'custom_group_id', 'name', 'label', 'data_type', 'html_type', 'is_required', 'is_searchable', 'is_search_range', 'weight', 'is_active', 'is_view', 'option_group_id', 'default_value'])
->addWhere('custom_group.table_name', '=', $this->getTargetTable())
->execute();
foreach ($fields as $field) {
$this->entityFields[] = \Civi\Api4\Service\Spec\SpecFormatter::arrayToField($field, $this->getEntity());
}
}
return $this->entityFields;
}
/**
* @inheritDoc
*/
public function getField($fieldName) {
foreach ($this->getEntityFields() as $field) {
$name = $field->getName();
if ($name === $fieldName || strrpos($name, '.' . $fieldName) === strlen($name) - strlen($fieldName) - 1) {
return $field;
}
}
return NULL;
}
/**
* @return string
*/
public function getSqlColumn($fieldName) {
return $this->columns[$fieldName];
}
}
|