ILIAS  release_9 Revision v9.13-25-g2c18ec4c24f
class.ilIndividualAssessmentMembersStorageDB.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
22 
27 {
28  public const MEMBERS_TABLE = "iass_members";
29 
30 
31  public function __construct(
32  protected ilDBInterface $db,
33  protected IRSS $irss,
34  protected ilIndividualAssessmentGradingStakeholder $stakeholder
35  ) {
36  }
37 
42  {
43  $members = new ilIndividualAssessmentMembers($obj);
44  $obj_id = $obj->getId();
45  $sql = $this->loadMembersQuery($obj_id);
46  $res = $this->db->query($sql);
47  while ($rec = $this->db->fetchAssoc($res)) {
48  $members = $members->withAdditionalRecord($rec);
49  }
50  return $members;
51  }
52 
56  public function loadMembersAsSingleObjects(
58  string $filter = null,
59  string $sort = null
60  ): array {
61  $members = [];
62  $sql = $this->loadMemberQuery();
63  $sql .= " WHERE obj_id = " . $this->db->quote($obj->getId(), 'integer');
64 
65  if (!is_null($filter)) {
66  $sql .= $this->getWhereFromFilter($filter);
67  }
68 
69  if (!is_null($sort)) {
70  $sql .= $this->getOrderByFromSort($sort);
71  }
72  $res = $this->db->query($sql);
73  while ($rec = $this->db->fetchAssoc($res)) {
74  $usr = new ilObjUser((int)$rec["usr_id"]);
75  $members[] = $this->createAssessmentMember($obj, $usr, $rec);
76  }
77  return $members;
78  }
79 
84  {
85  $obj_id = $obj->getId();
86  $usr_id = $usr->getId();
87  $sql = $this->loadMemberQuery();
88  $sql .= " WHERE obj_id = " . $this->db->quote($obj_id, 'integer') . "\n"
89  . " AND iassme.usr_id = " . $this->db->quote($usr_id, 'integer');
90 
91  $rec = $this->db->fetchAssoc($this->db->query($sql));
92  if ($rec) {
93  return $this->createAssessmentMember($obj, $usr, $rec);
94  } else {
95  throw new ilIndividualAssessmentException("invalid usr-obj combination");
96  }
97  }
98 
99  protected function createAssessmentMember(
101  ilObjUser $usr,
102  array $record
105  if (!is_null($changer_id)) {
106  $changer_id = (int) $changer_id;
107  }
108  $change_time = null;
109  $change_time_db = $record[ilIndividualAssessmentMembers::FIELD_CHANGE_TIME];
110  if (!is_null($change_time_db)) {
111  $change_time = new DateTimeImmutable($change_time_db);
112  }
113  $examiner_id = $record[ilIndividualAssessmentMembers::FIELD_EXAMINER_ID];
114  if (!is_null($examiner_id)) {
115  $examiner_id = (int) $examiner_id;
116  }
117  return new ilIndividualAssessmentMember(
118  $obj,
119  $usr,
120  $this->createGrading($record, $usr->getFullname()),
122  $examiner_id,
123  $changer_id,
124  $change_time
125  );
126  }
127 
128  protected function createGrading(array $record, string $user_fullname): ilIndividualAssessmentUserGrading
129  {
130  $event_time = null;
131  $event_time_db = $record[ilIndividualAssessmentMembers::FIELD_EVENTTIME];
132  if (!is_null($event_time_db)) {
133  $event_time = new DateTimeImmutable();
134  $event_time = $event_time->setTimestamp((int) $event_time_db);
135  }
137  $user_fullname,
144  $event_time,
147  );
148  }
149 
153  public function updateMember(ilIndividualAssessmentMember $member): void
154  {
155  $where = [
156  "obj_id" => ["integer", $member->assessmentId()],
157  "usr_id" => ["integer", $member->id()]
158  ];
159 
160  $event_time = $member->eventTime();
161  if (!is_null($event_time)) {
162  $event_time = $event_time->getTimestamp();
163  }
164 
165  $values = [
167  ilIndividualAssessmentMembers::FIELD_EXAMINER_ID => ["integer", $member->examinerId() ?? "NULL"],
168  ilIndividualAssessmentMembers::FIELD_RECORD => ["text", $member->record()],
170  ilIndividualAssessmentMembers::FIELD_PLACE => ["text", $member->place()],
171  ilIndividualAssessmentMembers::FIELD_EVENTTIME => ["integer", $event_time],
172  ilIndividualAssessmentMembers::FIELD_NOTIFY => ["integer", $member->notify()],
179  ];
180 
181  $this->db->update(self::MEMBERS_TABLE, $values, $where);
182  }
183 
184  protected function getActualDateTime(): string
185  {
186  return date("Y-m-d H:i:s");
187  }
188 
192  public function deleteMembers(ilObjIndividualAssessment $obj): void
193  {
194  foreach($this->loadMembers($obj) as $member) {
195  if($identifier = $member[ilIndividualAssessmentMembers::FIELD_FILE_NAME]) {
196  $resource_id = $this->irss->manage()->find($identifier);
197  $this->irss->manage()->remove($resource_id, $this->stakeholder);
198  }
199  }
200 
201  $sql = "DELETE FROM " . self::MEMBERS_TABLE . " WHERE obj_id = " . $this->db->quote($obj->getId(), 'integer');
202  $this->db->manipulate($sql);
203  }
204 
205  protected function loadMemberQuery(): string
206  {
207  return "SELECT "
208  . "iassme.obj_id,"
209  . "iassme.usr_id,"
210  . "iassme.examiner_id,"
211  . "iassme.record,"
212  . "iassme.internal_note,"
213  . "iassme.notify,"
214  . "iassme.notification_ts,"
215  . "iassme.learning_progress,"
216  . "iassme.finalized,"
217  . "iassme.place,"
218  . "iassme.event_time,"
219  . "iassme.user_view_file,"
220  . "iassme.file_name,"
221  . "iassme.changer_id,"
222  . "iassme.change_time,"
223  . "usr.login AS user_login,"
224  . "ex.login AS examiner_login"
225  . " FROM " . self::MEMBERS_TABLE . " iassme\n"
226  . " JOIN usr_data usr ON iassme.usr_id = usr.usr_id\n"
227  . " LEFT JOIN usr_data ex ON iassme.examiner_id = ex.usr_id\n"
228  ;
229  }
230 
231  protected function loadMembersQuery(int $obj_id): string
232  {
233  return "SELECT ex.firstname as " . ilIndividualAssessmentMembers::FIELD_EXAMINER_FIRSTNAME
237  . " ,usr.firstname as " . ilIndividualAssessmentMembers::FIELD_FIRSTNAME
238  . " ,usr.lastname as " . ilIndividualAssessmentMembers::FIELD_LASTNAME
239  . " ,usr.login as " . ilIndividualAssessmentMembers::FIELD_LOGIN
241  . " ,iassme.obj_id, iassme.usr_id, iassme.examiner_id, iassme.record, iassme.internal_note, iassme.notify"
242  . " ,iassme.notification_ts, iassme.learning_progress, iassme.finalized,iassme.place"
243  . " ,iassme.event_time, iassme.changer_id, iassme.change_time\n"
244  . " FROM iass_members iassme"
245  . " JOIN usr_data usr ON iassme.usr_id = usr.usr_id"
246  . " LEFT JOIN usr_data ex ON iassme.examiner_id = ex.usr_id"
247  . " LEFT JOIN usr_data ud ON iassme.changer_id = ud.usr_id"
248  . " WHERE obj_id = " . $this->db->quote($obj_id, 'integer');
249  }
250 
254  public function insertMembersRecord(ilObjIndividualAssessment $iass, array $record): void
255  {
256  $values = [
257  "obj_id" => [
258  "integer",
259  $iass->getId()
260  ],
261  "usr_id" => [
262  "integer",
264  ],
266  "text",
268  ],
270  "integer",
272  ],
274  "integer",
275  0
276  ],
278  "integer",
279  -1
280  ]
281  ];
282 
285  [
286  "integer",
288  ];
289  }
290  if (isset($record[ilIndividualAssessmentMembers::FIELD_RECORD])) {
292  [
293  "text",
295  ];
296  }
299  [
300  "text",
302  ];
303  }
304  if (isset($record[ilIndividualAssessmentMembers::FIELD_PLACE])) {
306  [
307  "text",
309  ];
310  }
313  [
314  "integer",
316  ];
317  }
320  [
321  "text",
323  ];
324  }
327  [
328  "integer",
330  ];
331  }
334  [
335  "integer",
337  ];
338  }
341  [
342  "text",
344  ];
345  }
346 
347  $this->db->insert(self::MEMBERS_TABLE, $values);
348  }
349 
353  public function removeMembersRecord(ilObjIndividualAssessment $iass, array $record): void
354  {
355 
356  if(array_key_exists(ilIndividualAssessmentMembers::FIELD_FILE_NAME, $record)
357  && $identifier = $record[ilIndividualAssessmentMembers::FIELD_FILE_NAME]) {
358  $resource_id = $this->irss->manage()->find($identifier);
359  $this->irss->manage()->remove($resource_id, $this->stakeholder);
360  }
361 
362  $sql =
363  "DELETE FROM " . self::MEMBERS_TABLE . PHP_EOL
364  . "WHERE obj_id = " . $this->db->quote($iass->getId(), 'integer') . PHP_EOL
365  . "AND usr_id = " . $this->db->quote($record[ilIndividualAssessmentMembers::FIELD_USR_ID], 'integer') . PHP_EOL
366  ;
367 
368  $this->db->manipulate($sql);
369  }
370 
374  protected function getWhereFromFilter($filter): string
375  {
376  switch ($filter) {
378  return " AND finalized = 0 AND examiner_id IS NULL\n";
380  return " AND finalized = 0 AND examiner_id IS NOT NULL\n";
382  return " AND finalized = 1 AND learning_progress = 2\n";
384  return " AND finalized = 1 AND learning_progress = 3\n";
385  default:
386  return "";
387  }
388  }
389 
390  protected function getOrderByFromSort(string $sort): string
391  {
392  $vals = explode(":", $sort);
393 
394  return " ORDER BY " . $vals[0] . " " . $vals[1];
395  }
396 }
createAssessmentMember(ilObjIndividualAssessment $obj, ilObjUser $usr, array $record)
loadMember(ilObjIndividualAssessment $obj, ilObjUser $usr)
Get ilIndividualAssessmentMember-object containing member info associated with $obj and $usr...
$res
Definition: ltiservices.php:69
deleteMembers(ilObjIndividualAssessment $obj)
Delete entries associated with members-object.
For the purpose of streamlining the grading and learning-process status definition outside of tests...
__construct(protected ilDBInterface $db, protected IRSS $irss, protected ilIndividualAssessmentGradingStakeholder $stakeholder)
removeMembersRecord(ilObjIndividualAssessment $iass, array $record)
Remove a membership associated with a IndividualAssessment object inside storage.$record ...
loadMembersAsSingleObjects(ilObjIndividualAssessment $obj, string $filter=null, string $sort=null)
Get ilIndividualAssessmentMember-object for each obj member associated with $obj.ilIndividualAssessme...
getFullname(int $a_max_strlen=0)
insertMembersRecord(ilObjIndividualAssessment $iass, array $record)
Create a membership inside storage.$record
loadMembers(ilObjIndividualAssessment $obj)
Get ilIndividualAssessmentMembers-object containing member info associated with $obj.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
updateMember(ilIndividualAssessmentMember $member)
Create a new storage entry for member-object.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Member administration related logic, add and remove members, get the list of all members, etc ...