(NFC) (dev/core#878) Simplify copyright header (Civi/*)
[civicrm-core.git] / Civi / Api4 / Service / Schema / Joinable / OptionValueJoinable.php
1 <?php
2
3 /*
4 +--------------------------------------------------------------------+
5 | Copyright CiviCRM LLC. All rights reserved. |
6 | |
7 | This work is published under the GNU AGPLv3 license with some |
8 | permitted exceptions and without any warranty. For full license |
9 | and copyright information, see https://civicrm.org/licensing |
10 +--------------------------------------------------------------------+
11 */
12
13 /**
14 *
15 * @package CRM
16 * @copyright CiviCRM LLC https://civicrm.org/licensing
17 * $Id$
18 *
19 */
20
21
22 namespace Civi\Api4\Service\Schema\Joinable;
23
24 class OptionValueJoinable extends Joinable {
25 /**
26 * @var string
27 */
28 protected $optionGroupName;
29
30 /**
31 * @param string $optionGroup
32 * Can be either the option group name or ID
33 * @param string|null $alias
34 * The join alias
35 * @param string $keyColumn
36 * Which column to use to join, defaults to "value"
37 */
38 public function __construct($optionGroup, $alias = NULL, $keyColumn = 'value') {
39 $this->optionGroupName = $optionGroup;
40 $optionValueTable = 'civicrm_option_value';
41
42 // default join alias to option group name, e.g. activity_type
43 if (!$alias && !is_numeric($optionGroup)) {
44 $alias = $optionGroup;
45 }
46
47 parent::__construct($optionValueTable, $keyColumn, $alias);
48
49 if (!is_numeric($optionGroup)) {
50 $subSelect = 'SELECT id FROM civicrm_option_group WHERE name = "%s"';
51 $subQuery = sprintf($subSelect, $optionGroup);
52 $condition = sprintf('%s.option_group_id = (%s)', $alias, $subQuery);
53 }
54 else {
55 $condition = sprintf('%s.option_group_id = %d', $alias, $optionGroup);
56 }
57
58 $this->addCondition($condition);
59 }
60
61 /**
62 * The existing condition must also be re-aliased
63 *
64 * @param string $alias
65 *
66 * @return $this
67 */
68 public function setAlias($alias) {
69 foreach ($this->conditions as $index => $condition) {
70 $search = $this->alias . '.';
71 $replace = $alias . '.';
72 $this->conditions[$index] = str_replace($search, $replace, $condition);
73 }
74
75 parent::setAlias($alias);
76
77 return $this;
78 }
79
80 }