ILIAS  trunk Revision v11.0_alpha-1753-gb21ca8c4367
All Data Structures Namespaces Files Functions Variables Enumerations Enumerator Modules Pages
class.ilStudyProgrammeEvents.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
22 {
23  public const PUBLIC_EVENTS = [
24  self::EVENT_USER_ASSIGNED,
25  self::EVENT_USER_DEASSIGNED,
26  self::EVENT_USER_REASSIGNED,
27  ];
28  /*
29  self::EVENT_USER_SUCCESSFUL,
30  self::EVENT_USER_NOT_SUCCESSFUL,
31  self::EVENT_VALIDITY_CHANGE,
32  self::EVENT_SCORE_CHANGE
33 
34  will all trigger self::EVENT_USER_SUCCESSFUL on ilAppEventHandler,
35  but only once! and for root-prg only.
36  This prevents e.g. certificate to rebuild on every (sucessive) change
37  */
38 
39  public function __construct(
40  protected ilLogger $logger,
41  protected ilAppEventHandler $app_event_handler,
42  protected PRGEventHandler $prg_event_handler
43  ) {
44  }
45 
46  public function raise(string $event, array $parameter): void
47  {
48  $parameter_formatter = static function ($value) use (&$parameter_formatter) {
49  if (is_object($value)) {
50  return get_class($value);
51  }
52 
53  if (is_array($value)) {
54  return array_map(
55  $parameter_formatter,
56  $value
57  );
58  }
59 
60  return $value;
61  };
62 
63  $this->logger->debug("PRG raised: " . $event . ' (' . var_export(array_map(
64  $parameter_formatter,
65  $parameter
66  ), true) . ')');
67 
68  if (in_array($event, [
69  self::EVENT_USER_ASSIGNED,
70  self::EVENT_USER_DEASSIGNED,
71  self::EVENT_USER_SUCCESSFUL,
72  self::EVENT_USER_NOT_SUCCESSFUL,
73  self::EVENT_VALIDITY_CHANGE
74  ])) {
75  $this->prg_event_handler->updateLPStatus($parameter['prg_id'], $parameter['usr_id']);
76  }
77 
78  if (in_array($event, [
79  self::EVENT_USER_SUCCESSFUL,
80  self::EVENT_USER_NOT_SUCCESSFUL,
81  self::EVENT_VALIDITY_CHANGE,
82  self::EVENT_SCORE_CHANGE
83  ])
84  && $parameter["root_prg_id"] === $parameter["prg_id"]
85  ) {
86  $cert = fn() => $this->app_event_handler->raise(self::COMPONENT, self::EVENT_USER_SUCCESSFUL, $parameter);
87  $this->prg_event_handler->triggerCertificateOnce($cert, $parameter["root_prg_id"], $parameter["usr_id"]);
88  }
89 
90  if ($event === self::EVENT_USER_ABOUT_TO_FAIL) {
91  $this->prg_event_handler->sendRiskyToFailMail($parameter['ass_id'], $parameter['root_prg_id']);
92  }
93  if ($event === self::EVENT_USER_TO_RESTART) {
94  $this->prg_event_handler->sendInformToReAssignMail($parameter['ass_id'], $parameter['root_prg_id']);
95  }
96  if ($event === self::EVENT_USER_REASSIGNED) {
97  $this->prg_event_handler->sendReAssignedMail($parameter['ass_id'], $parameter['root_prg_id']);
98  }
99  if ($event === self::EVENT_VALIDITY_CHANGE) {
100  $this->prg_event_handler->resetMailFlagValidity($parameter['ass_id'], $parameter['root_prg_id']);
101  }
102  if ($event === self::EVENT_DEADLINE_CHANGE) {
103  $this->prg_event_handler->resetMailFlagDeadline($parameter['ass_id'], $parameter['root_prg_id']);
104  }
105 
106  if (in_array($event, self::PUBLIC_EVENTS)) {
107  $this->app_event_handler->raise(self::COMPONENT, $event, $parameter);
108  }
109  }
110 
111  public function userAssigned(ilPRGAssignment $assignment): void
112  {
113  $this->raise(
114  self::EVENT_USER_ASSIGNED,
115  [
116  "root_prg_id" => $assignment->getRootId(),
117  "prg_id" => $assignment->getRootId(),
118  "usr_id" => $assignment->getUserId(),
119  "ass_id" => $assignment->getId()
120  ]
121  );
122  }
123 
124  public function userDeassigned(ilPRGAssignment $a_assignment): void
125  {
126  $this->raise(
127  self::EVENT_USER_DEASSIGNED,
128  [
129  "root_prg_id" => $a_assignment->getRootId(),
130  "prg_id" => $a_assignment->getRootId(),
131  "usr_id" => $a_assignment->getUserId(),
132  "ass_id" => $a_assignment->getId()
133  ]
134  );
135  }
136 
137  public function userReAssigned(ilPRGAssignment $assignment): void
138  {
139  $this->raise(
140  self::EVENT_USER_REASSIGNED,
141  [
142  "ass_id" => $assignment->getId(),
143  "root_prg_id" => (int) $assignment->getRootId()
144  ]
145  );
146  }
147 
148  public function userSuccessful(ilPRGAssignment $assignment, int $pgs_node_id): void
149  {
150  $this->raise(
151  self::EVENT_USER_SUCCESSFUL,
152  [
153  "root_prg_id" => $assignment->getRootId(),
154  "prg_id" => $pgs_node_id,
155  "usr_id" => $assignment->getUserId(),
156  "ass_id" => $assignment->getId()
157  ]
158  );
159  }
160 
161  public function informUserByMailToRestart(ilPRGAssignment $assignment): void
162  {
163  $this->raise(
164  self::EVENT_USER_TO_RESTART,
165  [
166  "ass_id" => (int) $assignment->getId(),
167  "root_prg_id" => (int) $assignment->getRootId()
168  ]
169  );
170  }
171 
172  public function userRiskyToFail(ilPRGAssignment $assignment): void
173  {
174  $this->raise(
175  self::EVENT_USER_ABOUT_TO_FAIL,
176  [
177  "ass_id" => (int) $assignment->getId(),
178  "root_prg_id" => (int) $assignment->getRootId()
179  ]
180  );
181  }
182 
183  public function validityChange(ilPRGAssignment $assignment, int $pgs_node_id): void
184  {
185  $this->raise(self::EVENT_VALIDITY_CHANGE, [
186  "ass_id" => $assignment->getId(),
187  "root_prg_id" => $assignment->getRootId(),
188  "prg_id" => $pgs_node_id,
189  "usr_id" => $assignment->getUserId()
190  ]);
191  }
192 
193  public function deadlineChange(ilPRGAssignment $assignment, int $pgs_node_id): void
194  {
195  $this->raise(self::EVENT_DEADLINE_CHANGE, [
196  "ass_id" => $assignment->getId(),
197  "root_prg_id" => $assignment->getRootId(),
198  "prg_id" => $pgs_node_id,
199  "usr_id" => $assignment->getUserId()
200  ]);
201  }
202 
203  public function scoreChange(ilPRGAssignment $assignment, int $pgs_node_id): void
204  {
205  $this->raise(self::EVENT_SCORE_CHANGE, [
206  "ass_id" => $assignment->getId(),
207  "root_prg_id" => $assignment->getRootId(),
208  "prg_id" => $pgs_node_id,
209  "usr_id" => $assignment->getUserId()
210  ]);
211  }
212 
213  public function userRevertSuccessful(ilPRGAssignment $assignment, int $pgs_node_id): void
214  {
215  $this->raise(self::EVENT_USER_NOT_SUCCESSFUL, [
216  "ass_id" => $assignment->getId(),
217  "root_prg_id" => $assignment->getRootId(),
218  "prg_id" => $pgs_node_id,
219  "usr_id" => $assignment->getUserId()
220  ]);
221  }
222 }
Global event handler.
informUserByMailToRestart(ilPRGAssignment $assignment)
userDeassigned(ilPRGAssignment $a_assignment)
userSuccessful(ilPRGAssignment $assignment, int $pgs_node_id)
__construct(protected ilLogger $logger, protected ilAppEventHandler $app_event_handler, protected PRGEventHandler $prg_event_handler)
userAssigned(ilPRGAssignment $assignment)
userRevertSuccessful(ilPRGAssignment $assignment, int $pgs_node_id)
validityChange(ilPRGAssignment $assignment, int $pgs_node_id)
userReAssigned(ilPRGAssignment $assignment)
Assignments are relations of users to a PRG; They hold progress-information for (sub-)nodes of the PR...
userRiskyToFail(ilPRGAssignment $assignment)
deadlineChange(ilPRGAssignment $assignment, int $pgs_node_id)
scoreChange(ilPRGAssignment $assignment, int $pgs_node_id)