96f654881279642651bbd7f8b45a2f376bfbb968
[civicrm-core.git] / Civi / Api4 / Service / Schema / Joinable / OptionValueJoinable.php
1 <?php
2
3 namespace Civi\Api4\Service\Schema\Joinable;
4
5 class OptionValueJoinable extends Joinable {
6 /**
7 * @var string
8 */
9 protected $optionGroupName;
10
11 /**
12 * @param string $optionGroup
13 * Can be either the option group name or ID
14 * @param string|null $alias
15 * The join alias
16 * @param string $keyColumn
17 * Which column to use to join, defaults to "value"
18 */
19 public function __construct($optionGroup, $alias = NULL, $keyColumn = 'value') {
20 $this->optionGroupName = $optionGroup;
21 $optionValueTable = 'civicrm_option_value';
22
23 // default join alias to option group name, e.g. activity_type
24 if (!$alias && !is_numeric($optionGroup)) {
25 $alias = $optionGroup;
26 }
27
28 parent::__construct($optionValueTable, $keyColumn, $alias);
29
30 if (!is_numeric($optionGroup)) {
31 $subSelect = 'SELECT id FROM civicrm_option_group WHERE name = "%s"';
32 $subQuery = sprintf($subSelect, $optionGroup);
33 $condition = sprintf('%s.option_group_id = (%s)', $alias, $subQuery);
34 }
35 else {
36 $condition = sprintf('%s.option_group_id = %d', $alias, $optionGroup);
37 }
38
39 $this->addCondition($condition);
40 }
41
42 /**
43 * The existing condition must also be re-aliased
44 *
45 * @param string $alias
46 *
47 * @return $this
48 */
49 public function setAlias($alias) {
50 foreach ($this->conditions as $index => $condition) {
51 $search = $this->alias . '.';
52 $replace = $alias . '.';
53 $this->conditions[$index] = str_replace($search, $replace, $condition);
54 }
55
56 parent::setAlias($alias);
57
58 return $this;
59 }
60
61 }