Merge pull request #15649 from JMAConsulting/core-1346
[civicrm-core.git] / Civi / Api4 / Service / Spec / RequestSpec.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\Spec;
23
24 class RequestSpec {
25
26 /**
27 * @var string
28 */
29 protected $entity;
30
31 /**
32 * @var string
33 */
34 protected $action;
35
36 /**
37 * @var FieldSpec[]
38 */
39 protected $fields = [];
40
41 /**
42 * @param string $entity
43 * @param string $action
44 */
45 public function __construct($entity, $action) {
46 $this->entity = $entity;
47 $this->action = $action;
48 }
49
50 public function addFieldSpec(FieldSpec $field) {
51 $this->fields[] = $field;
52 }
53
54 /**
55 * @param $name
56 *
57 * @return FieldSpec|null
58 */
59 public function getFieldByName($name) {
60 foreach ($this->fields as $field) {
61 if ($field->getName() === $name) {
62 return $field;
63 }
64 }
65
66 return NULL;
67 }
68
69 /**
70 * @return array
71 * Gets all the field names currently part of the specification
72 */
73 public function getFieldNames() {
74 return array_map(function(FieldSpec $field) {
75 return $field->getName();
76 }, $this->fields);
77 }
78
79 /**
80 * @return array|FieldSpec[]
81 */
82 public function getRequiredFields() {
83 return array_filter($this->fields, function (FieldSpec $field) {
84 return $field->isRequired();
85 });
86 }
87
88 /**
89 * @return array|FieldSpec[]
90 */
91 public function getConditionalRequiredFields() {
92 return array_filter($this->fields, function (FieldSpec $field) {
93 return $field->getRequiredIf();
94 });
95 }
96
97 /**
98 * @param array $fieldNames
99 * Optional array of fields to return
100 * @return FieldSpec[]
101 */
102 public function getFields($fieldNames = NULL) {
103 if (!$fieldNames) {
104 return $this->fields;
105 }
106 $fields = [];
107 foreach ($this->fields as $field) {
108 if (in_array($field->getName(), $fieldNames)) {
109 $fields[] = $field;
110 }
111 }
112 return $fields;
113 }
114
115 /**
116 * @return string
117 */
118 public function getEntity() {
119 return $this->entity;
120 }
121
122 /**
123 * @return string
124 */
125 public function getAction() {
126 return $this->action;
127 }
128
129 }