ILIAS  release_9 Revision v9.13-25-g2c18ec4c24f
class.ilObjIndividualAssessmentGUI.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
37 {
38  public const TAB_SETTINGS = 'settings';
39  public const TAB_INFO = 'info_short';
40  public const TAB_PERMISSION = 'perm_settings';
41  public const TAB_MEMBERS = 'members';
42  public const TAB_LP = 'learning_progress';
43  public const TAB_EXPORT = 'export';
44  public const TAB_META_DATA = "meta_data";
45 
47  protected ilObjUser $usr;
53 
54 
55  public function __construct($data, int $id = 0, bool $call_by_reference = true, bool $prepare_output = true)
56  {
57  global $DIC;
58  $this->ilNavigationHistory = $DIC['ilNavigationHistory'];
59  $this->type = 'iass';
60  $this->tpl = $DIC['tpl'];
61  $this->ctrl = $DIC['ilCtrl'];
62  $this->usr = $DIC['ilUser'];
63  $this->error_object = $DIC['ilErr'];
64  $this->lng = $DIC['lng'];
65  $this->lng->loadLanguageModule('iass');
66  $this->tpl->loadStandardTemplate();
67  $this->refinery = $DIC->refinery();
68  $this->request_wrapper = $DIC->http()->wrapper()->query();
69  $this->irss = $DIC['resource_storage'];
70 
72  }
73 
74  protected function addLocatorItems(): void
75  {
76  if (is_object($this->object)) {
77  $this->locator->addItem(
78  $this->object->getTitle(),
79  $this->ctrl->getLinkTarget($this, "view"),
80  "",
81  $this->object->getRefId()
82  );
83  }
84  }
85 
86  protected function recordIndividualAssessmentRead(): void
87  {
89  $this->object->getType(),
90  $this->object->getRefId(),
91  $this->object->getId(),
92  $this->usr->getId()
93  );
94  }
95 
96  public function executeCommand(): void
97  {
98  $next_class = $this->ctrl->getNextClass($this);
99  $cmd = $this->ctrl->getCmd();
100  $this->prepareOutput();
101  $this->addToNavigationHistory();
102 
103  switch ($next_class) {
104  case 'ilpermissiongui':
105  $this->tabs_gui->activateTab(self::TAB_PERMISSION);
106  $ilPermissionGUI = new ilPermissionGUI($this);
107  $this->ctrl->forwardCommand($ilPermissionGUI);
108  break;
109  case 'ilindividualassessmentsettingsgui':
110  $this->tabs_gui->activateTab(self::TAB_SETTINGS);
111  $gui = $this->object->getSettingsGUI();
112  $this->ctrl->forwardCommand($gui);
113  break;
114  case 'ilindividualassessmentmembersgui':
115  $this->membersObject();
116  break;
117  case 'ilinfoscreengui':
118  $this->tabs_gui->activateTab(self::TAB_INFO);
119  $info = $this->buildInfoScreen();
120  $this->ctrl->forwardCommand($info);
121  break;
122  case 'illearningprogressgui':
123  $this->tabs_gui->activateTab(self::TAB_LP);
126  $this->object->getRefId(),
127  $this->usr->getId()
128  );
129  $this->ctrl->forwardCommand($learning_progress);
130  break;
131  case "ilcommonactiondispatchergui":
133  $this->ctrl->forwardCommand($gui);
134  break;
135  case "ilexportgui":
136  $this->tabs_gui->activateTab(self::TAB_EXPORT);
137  $exp_gui = new ilExportGUI($this); // $this is the ilObj...GUI class of the resource
138  $exp_gui->addFormat("xml");
139  $this->ctrl->forwardCommand($exp_gui);
140  break;
141  case 'ilobjectmetadatagui':
142  $this->checkPermissionBool("write");
143  $this->tabs_gui->activateTab(self::TAB_META_DATA);
144  $md_gui = new ilObjectMetaDataGUI($this->object);
145  $this->ctrl->forwardCommand($md_gui);
146  break;
147  case 'ilobjectcopygui':
148  $cp = new ilObjectCopyGUI($this);
149  $cp->setType('crs');
150  $this->ctrl->forwardCommand($cp);
151  break;
152  default:
153  if (!$cmd) {
154  $cmd = 'view';
155  if ($this->object->accessHandler()->mayViewAnyUser() || $this->object->accessHandler()->mayEditMembers()) {
156  $this->ctrl->setCmdClass('ilIndividualassessmentmembersgui');
157  $cmd = 'members';
158  }
159  }
160  if($cmd === 'edit' && $this->object->accessHandler()->simulateMember()) {
161  $cmd = 'view';
162  }
163 
164  $cmd .= 'Object';
165  $this->$cmd();
166  }
167 
168  $this->addHeaderAction();
169  }
170 
171  public function viewObject(): void
172  {
173  $this->tabs_gui->activateTab(self::TAB_INFO);
174  $this->ctrl->setCmd('showSummary');
175  $this->ctrl->setCmdClass('ilinfoscreengui');
176  $info = $this->buildInfoScreen();
177  $this->ctrl->forwardCommand($info);
179  }
180 
181  public function membersObject(): void
182  {
183  $this->tabs_gui->activateTab(self::TAB_MEMBERS);
184  $gui = $this->object->getMembersGUI();
185  $this->ctrl->forwardCommand($gui);
186  }
187 
188  protected function buildInfoScreen(): ilInfoScreenGUI
189  {
190  $info = new ilInfoScreenGUI($this);
191  if ($this->object) {
192  $record_gui = new ilAdvancedMDRecordGUI(ilAdvancedMDRecordGUI::MODE_INFO, 'iass', $this->object->getId());
193  $record_gui->setInfoObject($info);
194  $record_gui->parse();
195 
196  $info->addMetaDataSections($this->object->getId(), 0, $this->object->getType());
197 
198  $info = $this->addGeneralDataToInfo($info);
199  if ($this->object->loadMembers()->userAllreadyMember($this->usr)) {
200  $info = $this->addMemberDataToInfo($info);
201  }
202  $info = $this->addContactDataToInfo($info);
203  }
204  return $info;
205  }
206 
208  {
209  $member = $this->object->membersStorage()->loadMember($this->object, $this->usr);
210  $info->addSection($this->txt('grading_info'));
211  if ($member->finalized()) {
212  $info->addProperty($this->txt('grading'), $this->getEntryForStatus($member->LPStatus()));
213  }
214  if ($member->notify() && $member->finalized()) {
215  $info->addProperty($this->txt('grading_record'), nl2br($member->record()));
216  if (($member->viewFile()) && $member->fileName() && $member->fileName() != "") {
217  $tpl = new ilTemplate("tpl.iass_user_file_download.html", true, true, "Modules/IndividualAssessment");
218  $tpl->setVariable("FILE_NAME", $member->fileName());
219  $tpl->setVariable("HREF", $this->ctrl->getLinkTarget($this, "downloadFile"));
220  $info->addProperty($this->txt('iass_upload_file'), $tpl->get());
221  }
222  }
223 
224  return $info;
225  }
226 
227  protected function downloadFileObject(): void
228  {
229  $member = $this->object->membersStorage()->loadMember($this->object, $this->usr);
230  if (
231  $member
232  && $member->notify()
233  && $member->finalized()
234  && $member->viewFile()
235  && $member->fileName()
236  && $member->fileName() != ""
237  ) {
238  $identifier = $member->getGrading()->getFile();
239  $resource_id = $this->irss->manage()->find($identifier);
240  if($resource_id) {
241  $this->irss->consume()->download($resource_id)->run();
242  }
243  }
244  }
245 
247  {
248  $content = $this->object->getSettings()->getContent();
249  if ($content !== null && $content !== '') {
250  $info->addSection($this->txt('general'));
251  $info->addProperty($this->txt('content'), $content);
252  }
253  return $info;
254  }
255 
257  {
258  $info_settings = $this->object->getInfoSettings();
259  if ($this->shouldShowContactInfo($info_settings)) {
260  $info->addSection($this->txt('iass_contact_info'));
261  $info->addProperty($this->txt('iass_contact'), $info_settings->getContact());
262  $info->addProperty($this->txt('iass_responsibility'), $info_settings->getResponsibility());
263  $info->addProperty($this->txt('iass_phone'), $info_settings->getPhone());
264  $info->addProperty($this->txt('iass_mails'), $info_settings->getMails());
265  $info->addProperty($this->txt('iass_consultation_hours'), $info_settings->getConsultationHours());
266  }
267  return $info;
268  }
269 
270  protected function shouldShowContactInfo(ilIndividualAssessmentInfoSettings $info_settings): bool
271  {
272  $val = $info_settings->getContact();
273  if ($val !== null && $val !== '') {
274  return true;
275  }
276  $val = $info_settings->getResponsibility();
277  if ($val !== null && $val !== '') {
278  return true;
279  }
280  $val = $info_settings->getPhone();
281  if ($val !== null && $val !== '') {
282  return true;
283  }
284  $val = $info_settings->getMails();
285  if ($val !== null && $val !== '') {
286  return true;
287  }
288  $val = $info_settings->getConsultationHours();
289  if ($val !== null && $val !== '') {
290  return true;
291  }
292  return false;
293  }
294 
295  protected function getTabs(): void
296  {
297  if ($this->object->accessHandler()->mayEditMembers()
298  || $this->object->accessHandler()->mayGradeAnyUser()
299  || $this->object->accessHandler()->mayAmendAllUsers()
300  || $this->object->accessHandler()->mayViewAnyUser()) {
301  $this->tabs_gui->addTab(
302  self::TAB_MEMBERS,
303  $this->txt('il_iass_members'),
304  $this->getLinkTarget('members')
305  );
306  }
307 
308  if ($this->object->accessHandler()->mayReadObject()) {
309  $this->tabs_gui->addTab(
310  self::TAB_INFO,
311  $this->txt('info_short'),
312  $this->getLinkTarget('info')
313  );
314  }
315 
316  if ($this->object->accessHandler()->mayEditObject()) {
317  $this->tabs_gui->addTab(
318  self::TAB_SETTINGS,
319  $this->txt('settings'),
320  $this->getLinkTarget('settings')
321  );
322  }
323 
324  if (($this->object->accessHandler()->mayViewAllUsers()
325  || $this->object->accessHandler()->mayEditLearningProgressSettings()
326  || ($this->object->loadMembers()->userAllreadyMember($this->usr)
327  && $this->object->isActiveLP()))
329  $this->tabs_gui->addTab(
330  self::TAB_LP,
331  $this->txt('learning_progress'),
332  $this->ctrl->getLinkTargetByClass('illearningprogressgui')
333  );
334  }
335 
336  if ($this->object->accessHandler()->mayEditObject()) {
337  $mdgui = new ilObjectMetaDataGUI($this->object);
338  $mdtab = $mdgui->getTab();
339  if ($mdtab) {
340  $this->tabs_gui->addTab(
341  self::TAB_META_DATA,
342  $this->txt("meta_data"),
343  $mdtab
344  );
345  }
346  }
347 
348  if ($this->object->accessHandler()->mayEditObject()) {
349  $this->tabs_gui->addTarget(
350  self::TAB_EXPORT,
351  $this->ctrl->getLinkTargetByClass('ilexportgui', ''),
352  'export',
353  'ilexportgui'
354  );
355  }
356 
357  if ($this->object->accessHandler()->mayEditPermissions()) {
358  $this->tabs_gui->addTarget(
359  self::TAB_PERMISSION,
360  $this->ctrl->getLinkTargetByClass('ilpermissiongui', 'perm'),
361  array(),
362  'ilpermissiongui'
363  );
364  }
365  parent::getTabs();
366  }
367 
368  protected function getLinkTarget(string $cmd): string
369  {
370  if ($cmd == 'settings') {
371  return $this->ctrl->getLinkTargetByClass('ilindividualassessmentsettingsgui', 'edit');
372  }
373  if ($cmd == 'info') {
374  return $this->ctrl->getLinkTarget($this, 'view');
375  }
376  if ($cmd == 'members') {
377  return $this->ctrl->getLinkTargetByClass('ilindividualassessmentmembersgui', 'view');
378  }
379  return $this->ctrl->getLinkTarget($this, $cmd);
380  }
381 
382  public function editObject(): void
383  {
384  $link = $this->getLinkTarget('settings');
385  $this->ctrl->redirectToURL($link);
386  }
387 
389  {
390  return $this->initEditForm();
391  }
392 
393  public function handleAccessViolation(): void
394  {
395  $this->error_object->raiseError($this->txt("msg_no_perm_read"), $this->error_object->WARNING);
396  }
397 
398  public static function _goto(string $a_target, string $a_add = ''): void
399  {
400  global $DIC;
401  $a_target = (int) $a_target;
402  if ($DIC['ilAccess']->checkAccess('write', '', $a_target)) {
403  ilObjectGUI::_gotoRepositoryNode($a_target, 'edit');
404  }
405  if ($DIC['ilAccess']->checkAccess('read', '', $a_target)) {
407  }
408  }
409 
410  protected function getEntryForStatus(int $status): string
411  {
412  switch ($status) {
414  return $this->txt('iass_status_pending');
416  return $this->txt('iass_status_completed');
418  return $this->txt('iass_status_failed');
419  default:
420  throw new ilIndividualAssessmentException("Status for id $status not found!");
421  }
422  }
423 
424  protected function afterSave(ilObject $new_object): void
425  {
426  $this->tpl->setOnScreenMessage("success", $this->txt("iass_added"), true);
427  $this->ctrl->setParameter($this, "ref_id", $new_object->getRefId());
428  $this->ctrl->redirectToUrl($this->ctrl->getLinkTargetByClass(
429  'ilIndividualassessmentsettingsgui',
430  'edit',
431  '',
432  false,
433  false
434  ));
435  }
436 
437  public function addToNavigationHistory(): void
438  {
439  if (!$this->getCreationMode()) {
440  if ($this->object->accessHandler()->mayReadObject()) {
441  $ref_id = $this->request_wrapper->retrieve("ref_id", $this->refinery->kindlyTo()->int());
442  $link = ilLink::_getLink($ref_id, "iass");
443  $this->ilNavigationHistory->addItem($ref_id, $link, 'iass');
444  }
445  }
446  }
447 
448  protected function txt(string $code): string
449  {
450  return $this->lng->txt($code);
451  }
452 }
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Class ilInfoScreenGUI.
GUI class for the workflow of copying objects.
prepareOutput(bool $show_sub_objects=true)
addProperty(string $a_name, string $a_value, string $a_link="")
add a property to current section
get(string $part=self::DEFAULT_BLOCK)
Renders the given block and returns the html string.
static _gotoRepositoryNode(int $ref_id, string $cmd="")
For the purpose of streamlining the grading and learning-process status definition outside of tests...
shouldShowContactInfo(ilIndividualAssessmentInfoSettings $info_settings)
setVariable(string $variable, $value='')
Sets the given variable to the given value.
$learning_progress
Definition: plugin.php:29
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
global $DIC
Definition: feed.php:28
Export User Interface Class.
__construct(VocabulariesInterface $vocabularies)
ilGlobalTemplateInterface $tpl
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Class ilObjectGUI Basic methods of all Output classes.
static _recordReadEvent(string $a_type, int $a_ref_id, int $obj_id, int $usr_id, bool $isCatchupWriteEvents=true, $a_ext_rc=null, $a_ext_time=null)
addSection(string $a_title)
Last visited history for repository items.
checkPermissionBool(string $perm, string $cmd="", string $type="", ?int $ref_id=null)
Error Handling & global info handling.
static _goto(string $a_target, string $a_add='')
__construct($data, int $id=0, bool $call_by_reference=true, bool $prepare_output=true)
setInfoObject(ilInfoScreenGUI $info)
get info sections
New PermissionGUI (extends from old ilPermission2GUI) RBAC related output.
ILIAS HTTP Wrapper RequestWrapper $request_wrapper
addHeaderAction()
Add header action menu.
addItem(int $a_ref_id, string $a_link, string $a_type, string $a_title="", ?int $a_sub_obj_id=null, string $a_goto_link="")
Add an item to the stack.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static getInstanceFromAjaxCall()
(Re-)Build instance from ajax call