Newer
Older
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
<?php
/**
* @author Jaap Jansma <jaap.jansma@civicoop.org>
* @license AGPL-3.0
*/
namespace Civi\DataProcessor\Source\Contact;
use Civi\DataProcessor\DataFlow\SqlTableDataFlow;
use Civi\DataProcessor\DataSpecification\DataSpecification;
use Civi\DataProcessor\DataSpecification\FieldExistsException;
use Civi\DataProcessor\DataSpecification\FieldSpecification;
use Civi\DataProcessor\Source\AbstractSource;
use Civi\DataProcessor\DataSpecification\CustomFieldSpecification;
use CRM_Dataprocessor_ExtensionUtil as E;
class MultipleCustomGroupSource extends AbstractSource {
/**
* @var string
*/
protected $custom_group_name;
/**
* @var string
*/
protected $custom_group_title;
/**
* @var string
*/
protected $custom_group_table_name;
/**
* @var \Civi\DataProcessor\DataSpecification\DataSpecification
*/
protected $availableFields;
/**
* @var \Civi\DataProcessor\DataSpecification\DataSpecification
*/
protected $availableFilterFields;
public function __construct($custom_group_name, $custom_group_title, $custom_group_table_name) {
parent::__construct();
$this->custom_group_name = $custom_group_name;
$this->custom_group_title = $custom_group_title;
$this->custom_group_table_name = $custom_group_table_name;
}
/**
* Initialize the join
*
* @return void
*/
public function initialize() {
if (!$this->dataFlow) {
$this->dataFlow = new SqlTableDataFlow($this->custom_group_table_name, $this->getSourceName());
}
}
/**
* @return \Civi\DataProcessor\DataSpecification\DataSpecification
* @throws \Exception
*/
public function getAvailableFields() {
if (!$this->availableFields) {
$this->availableFields = new DataSpecification();
$this->availableFields->addFieldSpecification('entity_id', new FieldSpecification('entity_id','Integer', E::ts('Contact ID'), null, $this->getSourceName().'_entity_id'));
$this->loadCustomGroupsAndFields($this->availableFields, false);
}
return $this->availableFields;
}
/**
* @return \Civi\DataProcessor\DataSpecification\DataSpecification
* @throws \Exception
*/
public function getAvailableFilterFields() {
if (!$this->availableFilterFields) {
$this->availableFilterFields = new DataSpecification();
$this->availableFilterFields->addFieldSpecification('entity_id', new FieldSpecification('entity_id','Integer', E::ts('Contact ID'), null, $this->getSourceName().'_entity_id'));
$this->loadCustomGroupsAndFields($this->availableFilterFields, true);
}
return $this->availableFilterFields;
}
/**
* Add custom fields to the available fields section
*
* @param DataSpecification $dataSpecification
* @param bool $onlySearchAbleFields
* @throws \Civi\DataProcessor\DataSpecification\FieldExistsException
* @throws \Exception
*/
protected function loadCustomGroupsAndFields(DataSpecification $dataSpecification, $onlySearchAbleFields) {
$params['options']['limit'] = 0;
$params['custom_group_id'] = $this->custom_group_name;
$params['is_active'] = 1;
if ($onlySearchAbleFields) {
$params['is_searchable'] = 1;
}
$customFields = civicrm_api3('CustomField', 'get', $params);
foreach ($customFields['values'] as $field) {
$alias = $this->getSourceName() . '_' . $field['name'];
$customFieldSpec = new CustomFieldSpecification(
$this->custom_group_name, $this->custom_group_table_name, $this->custom_group_title,
$field,
$alias
);
$dataSpecification->addFieldSpecification($customFieldSpec->name, $customFieldSpec);
}
}
/**
* Ensures a field is in the data source
*
* @param \Civi\DataProcessor\DataSpecification\FieldSpecification $fieldSpecification
* @throws \Exception
*/
public function ensureFieldInSource(FieldSpecification $fieldSpecification) {
try {
$this->dataFlow->getDataSpecification()->addFieldSpecification($fieldSpecification->alias, $fieldSpecification);
} catch (FieldExistsException $e) {
// Do nothing.
}