ILIAS  release_8 Revision v8.19
All Data Structures Namespaces Files Functions Variables Modules Pages
class.ilBadgeProfileGUI.php
Go to the documentation of this file.
1 <?php
2 
20 
27 {
28  public const BACKPACK_EMAIL = "badge_mozilla_bp";
30 
31  protected ilCtrl $ctrl;
32  protected ilLanguage $lng;
34  protected ilTabsGUI $tabs;
35  protected ilObjUser $user;
37  protected \ILIAS\UI\Factory $factory;
38  protected \ILIAS\UI\Renderer $renderer;
40 
41  public function __construct()
42  {
43  global $DIC;
44 
45  $this->ctrl = $DIC->ctrl();
46  $this->lng = $DIC->language();
47  $this->tpl = $DIC["tpl"];
48  $this->tabs = $DIC->tabs();
49  $this->user = $DIC->user();
50  $this->access = $DIC->access();
51  $this->factory = $DIC->ui()->factory();
52  $this->renderer = $DIC->ui()->renderer();
53  $this->request = new ilBadgeGUIRequest(
54  $DIC->http(),
55  $DIC->refinery()
56  );
57 
58  $this->noti_repo = new BadgeNotificationPrefRepository();
59  }
60 
61 
62  public function executeCommand(): void
63  {
64  $ilCtrl = $this->ctrl;
65  $lng = $this->lng;
66 
67  $lng->loadLanguageModule("badge");
68 
69  switch ($ilCtrl->getNextClass()) {
70  default:
71  $this->setTabs();
72  $cmd = $ilCtrl->getCmd("listBadges");
73  $this->$cmd();
74  break;
75  }
76  }
77 
78  protected function setTabs(): void
79  {
80  $ilTabs = $this->tabs;
81  $lng = $this->lng;
82  $ilCtrl = $this->ctrl;
83  }
84 
85  protected function getSubTabs(string $a_active): void
86  {
87  $ilTabs = $this->tabs;
88  $lng = $this->lng;
89  $ilCtrl = $this->ctrl;
90 
91  $ilTabs->addTab(
92  "list",
93  $lng->txt("badge_profile_view"),
94  $ilCtrl->getLinkTarget($this, "listBadges")
95  );
96  $ilTabs->addTab(
97  "manage",
98  $lng->txt("badge_profile_manage"),
99  $ilCtrl->getLinkTarget($this, "manageBadges")
100  );
101  $ilTabs->activateTab($a_active);
102  }
103 
104  protected function listBadges(): void
105  {
106  $tpl = $this->tpl;
108 
109  $this->getSubTabs("list");
110 
111  $data = array();
112 
113  // see ilBadgePersonalTableGUI::getItems()
114  foreach (ilBadgeAssignment::getInstancesByUserId($ilUser->getId()) as $ass) {
115  $badge = new ilBadge($ass->getBadgeId());
116 
117  $data[] = array(
118  "id" => $badge->getId(),
119  "title" => $badge->getTitle(),
120  "description" => $badge->getDescription(),
121  "image" => $badge->getImagePath(),
122  "name" => $badge->getImage(),
123  "issued_on" => $ass->getTimestamp(),
124  "active" => (bool) $ass->getPosition(),
125  "object" => $badge->getParentMeta(),
126  "renderer" => new ilBadgeRenderer($ass)
127  );
128  }
129 
130  // :TODO:
131  $data = ilArrayUtil::sortArray($data, "issued_on", "desc", true);
132 
133  $tmpl = new ilTemplate("tpl.badge_backpack.html", true, true, "Services/Badge");
134 
136 
137  $cards = array();
138  $badge_components = array();
139 
140  foreach ($data as $badge) {
141  $modal = $this->factory->modal()->roundtrip(
142  $badge["title"],
143  $this->factory->legacy($badge["renderer"]->renderModalContent())
144  )->withCancelButtonLabel("ok");
145  $image = $this->factory->image()->responsive(ilWACSignedPath::signFile($badge["image"]), $badge["name"])
146  ->withAction($modal->getShowSignal());
147 
148  $this->ctrl->setParameter($this, "badge_id", $badge["id"]);
149  $url = $this->ctrl->getLinkTarget($this, $badge["active"]
150  ? "deactivateInCard"
151  : "activateInCard");
152  $this->ctrl->setParameter($this, "badge_id", "");
153  $profile_button = $this->factory->button()->standard(
154  $this->lng->txt(!$badge["active"] ? "badge_add_to_profile" : "badge_remove_from_profile"),
155  $url
156  );
157 
158  if ($badge["object"]["type"] !== "bdga") {
159  $parent_icon = $this->factory->symbol()->icon()->custom(
160  ilObject::_getIcon((int) $badge["object"]["id"], "big", $badge["object"]["type"]),
161  $this->lng->txt("obj_" . $badge["object"]["type"]),
162  "medium"
163  );
164 
165  $ref_ids = ilObject::_getAllReferences($badge["object"]["id"]);
166  $parent_ref_id = array_shift($ref_ids);
167  if ($parent_ref_id && $this->access->checkAccess("read", "", $parent_ref_id)) {
168  $parent_link = $this->factory->link()->standard($badge["object"]["title"], ilLink::_getLink($parent_ref_id));
169  } else {
170  $parent_link = $this->factory->legacy($badge["object"]["title"]);
171  }
172 
173  $badge_sections = [
174  $this->factory->listing()->descriptive([
175  $this->lng->txt("object") => $this->factory->legacy(
176  $this->renderer->render($parent_icon) . $this->renderer->render($parent_link)
177  )
178  ]),
179  $profile_button
180  ];
181  } else {
182  $badge_sections = [$profile_button];
183  }
184 
185  $cards[] = $this->factory->card()->standard($badge["title"], $image)->withSections($badge_sections)
186  ->withTitleAction($modal->getShowSignal());
187 
188  $badge_components[] = $modal;
189  }
190 
191  $deck = $this->factory->deck($cards)->withSmallCardsSize();
192  $badge_components[] = $deck;
193 
194  $tmpl->setVariable("DECK", $this->renderer->render($badge_components));
195  $tpl->setContent($tmpl->get());
196 
197  $this->noti_repo->updateLastCheckedTimestamp();
198  }
199 
200  protected function manageBadges(): void
201  {
202  $tpl = $this->tpl;
203 
204  $this->getSubTabs("manage");
205 
206  $tbl = new ilBadgePersonalTableGUI($this, "manageBadges");
207 
208  $tpl->setContent($tbl->getHTML());
209  }
210 
211  protected function applyFilter(): void
212  {
213  $tbl = new ilBadgePersonalTableGUI($this, "manageBadges");
214  $tbl->resetOffset();
215  $tbl->writeFilterToSession();
216  $this->manageBadges();
217  }
218 
219  protected function resetFilter(): void
220  {
221  $tbl = new ilBadgePersonalTableGUI($this, "manageBadges");
222  $tbl->resetOffset();
223  $tbl->resetFilter();
224  $this->manageBadges();
225  }
226 
227  protected function getMultiSelection(): array
228  {
229  $lng = $this->lng;
230  $ilCtrl = $this->ctrl;
232 
233  $ids = $this->request->getBadgeIds();
234  if (count($ids) > 0) {
235  $res = array();
236  foreach ($ids as $id) {
237  $ass = new ilBadgeAssignment($id, $ilUser->getId());
238  if ($ass->getTimestamp()) {
239  $res[] = $ass;
240  }
241  }
242 
243  return $res;
244  }
245 
246  $this->tpl->setOnScreenMessage('failure', $lng->txt("select_one"), true);
247  $ilCtrl->redirect($this, "manageBadges");
248  return [];
249  }
250 
251  protected function activate(): void
252  {
253  $lng = $this->lng;
254  $ilCtrl = $this->ctrl;
255 
256  foreach ($this->getMultiSelection() as $ass) {
257  // already active?
258  if (!$ass->getPosition()) {
259  $ass->setPosition(999);
260  $ass->store();
261  }
262  }
263 
264  $this->tpl->setOnScreenMessage('success', $lng->txt("settings_saved"), true);
265  $ilCtrl->redirect($this, "manageBadges");
266  }
267 
268  protected function deactivate(): void
269  {
270  $lng = $this->lng;
271  $ilCtrl = $this->ctrl;
272 
273  foreach ($this->getMultiSelection() as $ass) {
274  // already inactive?
275  if ($ass->getPosition()) {
276  $ass->setPosition(null);
277  $ass->store();
278  }
279  }
280 
281  $this->tpl->setOnScreenMessage('success', $lng->txt("settings_saved"), true);
282  $ilCtrl->redirect($this, "manageBadges");
283  }
284 
285  protected function activateInCard(): void
286  {
287  $lng = $this->lng;
288  $ilCtrl = $this->ctrl;
289 
290  foreach ($this->getMultiSelection() as $ass) {
291  // already active?
292  if (!$ass->getPosition()) {
293  $ass->setPosition(999);
294  $ass->store();
295  }
296  }
297 
298  $this->tpl->setOnScreenMessage('success', $lng->txt("settings_saved"), true);
299  $ilCtrl->redirect($this, "listBadges");
300  }
301 
302  protected function deactivateInCard(): void
303  {
304  $lng = $this->lng;
305  $ilCtrl = $this->ctrl;
306 
307  foreach ($this->getMultiSelection() as $ass) {
308  // already inactive?
309  if ($ass->getPosition()) {
310  $ass->setPosition(null);
311  $ass->store();
312  }
313  }
314 
315  $this->tpl->setOnScreenMessage('success', $lng->txt("settings_saved"), true);
316  $ilCtrl->redirect($this, "listBadges");
317  }
318 
319 
320 
321  protected function setBackpackSubTabs(): void
322  {
323  $ilTabs = $this->tabs;
324  $lng = $this->lng;
325  $ilCtrl = $this->ctrl;
326 
327  $ilTabs->addSubTab(
328  "backpack_badges",
329  $lng->txt("obj_bdga"),
330  $ilCtrl->getLinkTarget($this, "listBackpackGroups")
331  );
332 
333  $ilTabs->addSubTab(
334  "backpack_settings",
335  $lng->txt("settings"),
336  $ilCtrl->getLinkTarget($this, "editSettings")
337  );
338 
339  $ilTabs->activateTab("backpack_badges");
340  }
341 
342  protected function listBackpackGroups(): void
343  {
344  $lng = $this->lng;
345  $tpl = $this->tpl;
346  $ilCtrl = $this->ctrl;
347  $ilTabs = $this->tabs;
348 
349  $this->setBackpackSubTabs();
350  $ilTabs->activateSubTab("backpack_badges");
351 
352  $this->tpl->setOnScreenMessage('info', $lng->txt("badge_backpack_gallery_info"));
353 
354  $bp = new ilBadgeBackpack($this->getBackpackMail());
355  $bp_groups = $bp->getGroups();
356 
357  if (!count($bp_groups)) {
358  $this->tpl->setOnScreenMessage('info', $lng->txt("badge_backpack_no_groups"));
359  return;
360  }
361 
362  $tmpl = new ilTemplate("tpl.badge_backpack.html", true, true, "Services/Badge");
363 
364  $tmpl->setVariable("BACKPACK_TITLE", $lng->txt("badge_backpack_list"));
365 
367 
368  foreach ($bp_groups as $group_id => $group) {
369  $bp_badges = $bp->getBadges($group_id);
370  if (count($bp_badges)) {
371  foreach ($bp_badges as $idx => $badge) {
372  $tmpl->setCurrentBlock("badge_bl");
373  $tmpl->setVariable("BADGE_TITLE", $badge["title"]);
374  $tmpl->setVariable("BADGE_DESC", $badge["description"]);
375  $tmpl->setVariable("BADGE_IMAGE", $badge["image_url"]);
376  $tmpl->setVariable("BADGE_CRITERIA", $badge["criteria_url"]);
377  $tmpl->setVariable("BADGE_ISSUER", $badge["issuer_name"]);
378  $tmpl->setVariable("BADGE_ISSUER_URL", $badge["issuer_url"]);
379  $tmpl->setVariable("BADGE_DATE", ilDatePresentation::formatDate($badge["issued_on"]));
380  $tmpl->parseCurrentBlock();
381  }
382  }
383 
384  $tmpl->setCurrentBlock("group_bl");
385  $tmpl->setVariable("GROUP_TITLE", $group["title"]);
386  $tmpl->parseCurrentBlock();
387  }
388 
389  $tpl->setContent($tmpl->get());
390  }
391 
392  //
393  // settings
394  //
395 
396  protected function getBackpackMail(): string
397  {
399 
400  $mail = $ilUser->getPref(self::BACKPACK_EMAIL);
401  if (!$mail) {
402  $mail = $ilUser->getEmail();
403  }
404  return $mail;
405  }
406 
407  protected function initSettingsForm(): ilPropertyFormGUI
408  {
409  $lng = $this->lng;
410  $ilCtrl = $this->ctrl;
411 
412  $form = new ilPropertyFormGUI();
413  $form->setFormAction($ilCtrl->getFormAction($this, "saveSettings"));
414  $form->setTitle($lng->txt("settings"));
415 
416  $email = new ilEMailInputGUI($lng->txt("badge_backpack_email"), "email");
417  // $email->setRequired(true);
418  $email->setInfo($lng->txt("badge_backpack_email_info"));
419  $email->setValue($this->getBackpackMail());
420  $form->addItem($email);
421 
422  $form->addCommandButton("saveSettings", $lng->txt("save"));
423 
424  return $form;
425  }
426 
427  protected function editSettings(ilPropertyFormGUI $a_form = null): void
428  {
429  $tpl = $this->tpl;
430  $ilCtrl = $this->ctrl;
431  $ilTabs = $this->tabs;
432 
433  $ilCtrl->redirect($this, "listBadges");
434  }
435 
436  protected function saveSettings(): void
437  {
439  $lng = $this->lng;
440  $ilCtrl = $this->ctrl;
441 
442  $form = $this->initSettingsForm();
443  if ($form->checkInput()) {
444  $new_email = $form->getInput("email");
445  $old_email = $this->getBackpackMail();
446 
447  ilObjUser::_writePref($ilUser->getId(), self::BACKPACK_EMAIL, $new_email);
448 
449  // if email was changed: delete badge files
450  if ($new_email != $old_email) {
452  }
453 
454  $this->tpl->setOnScreenMessage('success', $lng->txt("settings_saved"), true);
455  $ilCtrl->redirect($this, "editSettings");
456  }
457 
458  $form->setValuesByPost();
459  $this->editSettings($form);
460  }
461 }
$res
Definition: ltiservices.php:69
ILIAS UI Renderer $renderer
static _getIcon(int $obj_id=0, string $size="big", string $type="", bool $offline=false)
Get icon for repository item.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
txt(string $a_topic, string $a_default_lang_fallback_mod="")
gets the text for a given topic if the topic is not in the list, the topic itself with "-" will be re...
redirect(object $a_gui_obj, string $a_cmd=null, string $a_anchor=null, bool $is_async=false)
BadgeNotificationPrefRepository $noti_repo
static getInstancesByUserId(int $a_user_id)
getSubTabs(string $a_active)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static _getAllReferences(int $id)
get all reference ids for object ID
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static formatDate(ilDateTime $date, bool $a_skip_day=false, bool $a_include_wd=false, bool $include_seconds=false)
loadLanguageModule(string $a_module)
Load language module.
Badge notification repository (using user preferences.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
global $DIC
Definition: feed.php:28
editSettings(ilPropertyFormGUI $a_form=null)
setContent(string $a_html)
Sets content for standard template.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
ilGlobalTemplateInterface $tpl
Class ilBadgeProfileGUI.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
if($orgName !==null) if($spconfig->hasValue('contacts')) $email
Definition: metadata.php:302
static clearBadgeCache(int $a_user_id)
$ilUser
Definition: imgupload.php:34
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
Definition: plugin.php:23
static signFile(string $path_to_file)
static _writePref(int $a_usr_id, string $a_keyword, string $a_value)
ilBadgeGUIRequest $request
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
$url
static setUseRelativeDates(bool $a_status)
set use relative dates
static sortArray(array $array, string $a_array_sortby_key, string $a_array_sortorder="asc", bool $a_numeric=false, bool $a_keep_keys=false)