ILIAS  trunk Revision v13.0_alpha-62-g3b72d83f2e5
ILIAS\LearningSequence\Content\Condition\StaticInputConfigurationAnalyzer Class Reference
+ Collaboration diagram for ILIAS\LearningSequence\Content\Condition\StaticInputConfigurationAnalyzer:

Public Member Functions

 getIssues (array $conditions_by_ref_id, array $context=[])
 
 getAffectedRefIds (array $issues)
 
 getIssueDetailsByRefId (array $issues)
 

Protected Member Functions

 hasContradictoryStaticConstraints (array $conditions)
 
 getOwningRefIds (array $conditions)
 
 mergeIssueDetails (StaticInputConfigurationIssueDetail $left, StaticInputConfigurationIssueDetail $right)
 

Detailed Description

Definition at line 23 of file StaticInputConfigurationAnalyzer.php.

Member Function Documentation

◆ getAffectedRefIds()

ILIAS\LearningSequence\Content\Condition\StaticInputConfigurationAnalyzer::getAffectedRefIds ( array  $issues)
Parameters
StaticInputConfigurationIssue[]$issues
Returns
int[]

Definition at line 70 of file StaticInputConfigurationAnalyzer.php.

70 : array
71 {
72 $ref_ids = [];
73 foreach ($issues as $issue) {
74 foreach ($issue->affected_ref_ids as $ref_id) {
75 $ref_ids[$ref_id] = $ref_id;
76 }
77 }
78
79 sort($ref_ids);
80
81 return array_values($ref_ids);
82 }

References ILIAS\UI\examples\Symbol\Glyph\Sort\sort().

+ Here is the call graph for this function:

◆ getIssueDetailsByRefId()

ILIAS\LearningSequence\Content\Condition\StaticInputConfigurationAnalyzer::getIssueDetailsByRefId ( array  $issues)
Parameters
StaticInputConfigurationIssue[]$issues
Returns
array<int, StaticInputConfigurationIssueDetail[]>

Definition at line 88 of file StaticInputConfigurationAnalyzer.php.

88 : array
89 {
90 $details_by_ref_id = [];
91
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 ?? '');
96
97 if (!isset($details_by_ref_id[$ref_id][$signature])) {
98 $details_by_ref_id[$ref_id][$signature] = $detail;
99 continue;
100 }
101
102 $details_by_ref_id[$ref_id][$signature] = $this->mergeIssueDetails(
103 $details_by_ref_id[$ref_id][$signature],
104 $detail
105 );
106 }
107 }
108
109 ksort($details_by_ref_id);
110 foreach ($details_by_ref_id as $ref_id => $details) {
111 ksort($details);
112 $details_by_ref_id[$ref_id] = array_values($details);
113 }
114
115 return $details_by_ref_id;
116 }
mergeIssueDetails(StaticInputConfigurationIssueDetail $left, StaticInputConfigurationIssueDetail $right)

References ILIAS\LearningSequence\Content\Condition\StaticInputConfigurationAnalyzer\mergeIssueDetails().

+ Here is the call graph for this function:

◆ getIssues()

ILIAS\LearningSequence\Content\Condition\StaticInputConfigurationAnalyzer::getIssues ( array  $conditions_by_ref_id,
array  $context = [] 
)
Parameters
array<int,AbstractCondition[]>$conditions_by_ref_id
array<string,mixed>$context
Returns
StaticInputConfigurationIssue[]

Definition at line 30 of file StaticInputConfigurationAnalyzer.php.

30 : array
31 {
32 $issues = [];
33
34 foreach ($conditions_by_ref_id as $conditions) {
35 foreach ($conditions as $condition) {
36 foreach ($condition->getStaticInputConfigurationIssues($context) as $issue) {
37 $issues[] = $issue;
38 }
39 }
40
41 if (!$this->hasContradictoryStaticConstraints($conditions)) {
42 continue;
43 }
44
45 $affected_ref_ids = $this->getOwningRefIds($conditions);
46 if ($affected_ref_ids === []) {
47 continue;
48 }
49
50 $issues[] = new StaticInputConfigurationIssue(
51 'contradictory_static_input_constraints',
52 $affected_ref_ids,
53 details: array_map(
54 static fn(int $ref_id): StaticInputConfigurationIssueDetail => new StaticInputConfigurationIssueDetail(
55 $ref_id,
56 'lso_static_input_configuration_contradictory_constraints'
57 ),
58 $affected_ref_ids
59 )
60 );
61 }
62
63 return $issues;
64 }

References ILIAS\LearningSequence\Content\Condition\StaticInputConfigurationAnalyzer\getOwningRefIds(), and ILIAS\LearningSequence\Content\Condition\StaticInputConfigurationAnalyzer\hasContradictoryStaticConstraints().

+ Here is the call graph for this function:

◆ getOwningRefIds()

ILIAS\LearningSequence\Content\Condition\StaticInputConfigurationAnalyzer::getOwningRefIds ( array  $conditions)
protected
Parameters
AbstractCondition[]$conditions
Returns
int[]

Definition at line 184 of file StaticInputConfigurationAnalyzer.php.

184 : array
185 {
186 $ref_ids = [];
187
188 foreach ($conditions as $condition) {
189 $ref_id = (int) $condition->getObjRefId();
190 if ($ref_id > 0) {
191 $ref_ids[$ref_id] = $ref_id;
192 }
193 }
194
195 sort($ref_ids);
196
197 return array_values($ref_ids);
198 }

References ILIAS\Repository\int(), and ILIAS\UI\examples\Symbol\Glyph\Sort\sort().

Referenced by ILIAS\LearningSequence\Content\Condition\StaticInputConfigurationAnalyzer\getIssues().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ hasContradictoryStaticConstraints()

ILIAS\LearningSequence\Content\Condition\StaticInputConfigurationAnalyzer::hasContradictoryStaticConstraints ( array  $conditions)
protected
Parameters
AbstractCondition[]$conditions

Definition at line 121 of file StaticInputConfigurationAnalyzer.php.

121 : bool
122 {
123 $requires_completed = [];
124 $requires_not_completed = [];
125 $any_completed_clauses = [];
126 $has_constraints = false;
127
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(
133 'intval',
134 $constraint['ref_ids']
135 )));
136
137 if ($kind === 'all_completed') {
138 foreach ($ref_ids as $ref_id) {
139 $requires_completed[$ref_id] = true;
140 }
141 continue;
142 }
143
144 if ($kind === 'none_completed') {
145 foreach ($ref_ids as $ref_id) {
146 $requires_not_completed[$ref_id] = true;
147 }
148 continue;
149 }
150
151 if ($kind === 'any_completed') {
152 $any_completed_clauses[] = $ref_ids;
153 }
154 }
155 }
156
157 if (!$has_constraints) {
158 return false;
159 }
160
161 if (array_intersect_key($requires_completed, $requires_not_completed) !== []) {
162 return true;
163 }
164
165 foreach ($any_completed_clauses as $clause) {
166 if (
167 $clause === []
168 || array_all(
169 $clause,
170 static fn(int $ref_id): bool => isset($requires_not_completed[$ref_id])
171 )
172 ) {
173 return true;
174 }
175 }
176
177 return false;
178 }

Referenced by ILIAS\LearningSequence\Content\Condition\StaticInputConfigurationAnalyzer\getIssues().

+ Here is the caller graph for this function:

◆ mergeIssueDetails()

ILIAS\LearningSequence\Content\Condition\StaticInputConfigurationAnalyzer::mergeIssueDetails ( StaticInputConfigurationIssueDetail  $left,
StaticInputConfigurationIssueDetail  $right 
)
protected

Definition at line 200 of file StaticInputConfigurationAnalyzer.php.

204 $properties = $left->properties_by_language_var;
205
206 foreach ($right->properties_by_language_var as $language_var => $value) {
207 if (!isset($properties[$language_var])) {
208 $properties[$language_var] = $value;
209 continue;
210 }
211
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]
217 ), SORT_REGULAR));
218 continue;
219 }
220
221 if ($current_value !== $value) {
222 $properties[$language_var] = array_values(array_unique([$current_value, $value], SORT_REGULAR));
223 }
224 }
225
226 return new StaticInputConfigurationIssueDetail(
227 $left->affected_ref_id,
228 $left->title_language_var,
229 $left->description_language_var,
230 $properties
231 );
232 }

Referenced by ILIAS\LearningSequence\Content\Condition\StaticInputConfigurationAnalyzer\getIssueDetailsByRefId().

+ Here is the caller graph for this function:

The documentation for this class was generated from the following file: