19declare(strict_types=1);
30 public function getIssues(array $conditions_by_ref_id, array $context = []): array
34 foreach ($conditions_by_ref_id as $conditions) {
35 foreach ($conditions as $condition) {
36 foreach ($condition->getStaticInputConfigurationIssues($context) as $issue) {
46 if ($affected_ref_ids === []) {
51 'contradictory_static_input_constraints',
56 'lso_static_input_configuration_contradictory_constraints'
73 foreach ($issues as $issue) {
74 foreach ($issue->affected_ref_ids as $ref_id) {
75 $ref_ids[$ref_id] = $ref_id;
81 return array_values($ref_ids);
90 $details_by_ref_id = [];
92 foreach ($issues as $issue) {
93 foreach ($issue->details as $detail) {
94 $ref_id = $detail->affected_ref_id;
95 $signature = $detail->title_language_var .
'|' . ($detail->description_language_var ??
'');
97 if (!isset($details_by_ref_id[$ref_id][$signature])) {
98 $details_by_ref_id[$ref_id][$signature] = $detail;
103 $details_by_ref_id[$ref_id][$signature],
109 ksort($details_by_ref_id);
110 foreach ($details_by_ref_id as $ref_id => $details) {
112 $details_by_ref_id[$ref_id] = array_values($details);
115 return $details_by_ref_id;
123 $requires_completed = [];
124 $requires_not_completed = [];
125 $any_completed_clauses = [];
126 $has_constraints =
false;
128 foreach ($conditions as $condition) {
129 foreach ($condition->getStaticInputConditionConstraints() as $constraint) {
130 $has_constraints =
true;
131 $kind = (string) $constraint[
'kind'];
132 $ref_ids = array_values(array_unique(array_map(
134 $constraint[
'ref_ids']
137 if ($kind ===
'all_completed') {
138 foreach ($ref_ids as $ref_id) {
139 $requires_completed[$ref_id] =
true;
144 if ($kind ===
'none_completed') {
145 foreach ($ref_ids as $ref_id) {
146 $requires_not_completed[$ref_id] =
true;
151 if ($kind ===
'any_completed') {
152 $any_completed_clauses[] = $ref_ids;
157 if (!$has_constraints) {
161 if (array_intersect_key($requires_completed, $requires_not_completed) !== []) {
165 foreach ($any_completed_clauses as $clause) {
170 static fn(
int $ref_id):
bool => isset($requires_not_completed[$ref_id])
188 foreach ($conditions as $condition) {
189 $ref_id = (
int) $condition->getObjRefId();
191 $ref_ids[$ref_id] = $ref_id;
197 return array_values($ref_ids);
204 $properties = $left->properties_by_language_var;
206 foreach ($right->properties_by_language_var as $language_var => $value) {
207 if (!isset($properties[$language_var])) {
208 $properties[$language_var] = $value;
212 $current_value = $properties[$language_var];
213 if (is_array($current_value) || is_array($value)) {
214 $properties[$language_var] = array_values(array_unique(array_merge(
215 is_array($current_value) ? $current_value : [$current_value],
216 is_array($value) ? $value : [$value]
221 if ($current_value !== $value) {
222 $properties[$language_var] = array_values(array_unique([$current_value, $value], SORT_REGULAR));
227 $left->affected_ref_id,
228 $left->title_language_var,
229 $left->description_language_var,
getIssues(array $conditions_by_ref_id, array $context=[])
hasContradictoryStaticConstraints(array $conditions)
getIssueDetailsByRefId(array $issues)
mergeIssueDetails(StaticInputConfigurationIssueDetail $left, StaticInputConfigurationIssueDetail $right)
getOwningRefIds(array $conditions)
getAffectedRefIds(array $issues)