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