(NFC) (dev/core#878) Simplify '@copyright' annotation
[civicrm-core.git] / Civi / Api4 / Event / Subscriber / OptionValuePreCreationSubscriber.php
CommitLineData
19b53e5b
C
1<?php
2
380f3545
TO
3/*
4 +--------------------------------------------------------------------+
5 | CiviCRM version 5 |
6 +--------------------------------------------------------------------+
f299f7db 7 | Copyright CiviCRM LLC (c) 2004-2020 |
380f3545
TO
8 +--------------------------------------------------------------------+
9 | This file is a part of CiviCRM. |
10 | |
11 | CiviCRM is free software; you can copy, modify, and distribute it |
12 | under the terms of the GNU Affero General Public License |
13 | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
14 | |
15 | CiviCRM is distributed in the hope that it will be useful, but |
16 | WITHOUT ANY WARRANTY; without even the implied warranty of |
17 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
18 | See the GNU Affero General Public License for more details. |
19 | |
20 | You should have received a copy of the GNU Affero General Public |
21 | License and the CiviCRM Licensing Exception along |
22 | with this program; if not, contact CiviCRM LLC |
23 | at info[AT]civicrm[DOT]org. If you have questions about the |
24 | GNU Affero General Public License or the licensing of CiviCRM, |
25 | see the CiviCRM license FAQ at http://civicrm.org/licensing |
26 +--------------------------------------------------------------------+
27 */
28
29/**
30 *
31 * @package CRM
ca5cec67 32 * @copyright CiviCRM LLC https://civicrm.org/licensing
380f3545
TO
33 * $Id$
34 *
35 */
36
37
19b53e5b
C
38namespace Civi\Api4\Event\Subscriber;
39
40use Civi\Api4\Generic\DAOCreateAction;
41use Civi\Api4\OptionGroup;
42
43class OptionValuePreCreationSubscriber extends Generic\PreCreationSubscriber {
44
45 /**
46 * @param \Civi\Api4\Generic\DAOCreateAction $request
47 */
48 protected function modify(DAOCreateAction $request) {
49 $this->setOptionGroupId($request);
50 }
51
52 /**
53 * @param \Civi\Api4\Generic\DAOCreateAction $request
54 *
55 * @return bool
56 */
57 protected function applies(DAOCreateAction $request) {
58 return $request->getEntityName() === 'OptionValue';
59 }
60
61 /**
62 * @param \Civi\Api4\Generic\DAOCreateAction $request
63 * @throws \API_Exception
64 * @throws \Exception
65 */
66 private function setOptionGroupId(DAOCreateAction $request) {
67 $optionGroupName = $request->getValue('option_group');
68 if (!$optionGroupName || $request->getValue('option_group_id')) {
69 return;
70 }
71
72 $optionGroup = OptionGroup::get()
73 ->setCheckPermissions(FALSE)
74 ->addSelect('id')
75 ->addWhere('name', '=', $optionGroupName)
76 ->execute();
77
78 if ($optionGroup->count() !== 1) {
79 throw new \Exception('Option group name must match only a single group');
80 }
81
82 $request->addValue('option_group_id', $optionGroup->first()['id']);
83 }
84
85}