ILIAS  release_9 Revision v9.13-25-g2c18ec4c24f
class.ilBadgeUserTableGUI.php
Go to the documentation of this file.
1 <?php
2 
25 {
26  protected ilTree $tree;
27  protected bool $do_parent = false;
28  protected array $filter = [];
29  private \ILIAS\UI\Factory $ui_factory;
30  private \ILIAS\UI\Renderer $ui_renderer;
31 
32  public function __construct(
33  object $a_parent_obj,
34  string $a_parent_cmd,
35  int $a_parent_ref_id,
36  protected ?\ilBadge $award_badge = null,
37  int $a_parent_obj_id = null,
38  int $a_restrict_badge_id = 0
39  ) {
40  global $DIC;
41 
42  $this->ctrl = $DIC->ctrl();
43  $this->lng = $DIC->language();
44  $this->tree = $DIC->repositoryTree();
45  $ilCtrl = $DIC->ctrl();
46  $lng = $DIC->language();
47  $this->ui_factory = $DIC->ui()->factory();
48  $this->ui_renderer = $DIC->ui()->renderer();
49 
50  $this->setId("bdgusr");
51  $this->do_parent = false;
52 
53  $parent_type = ilObject::_lookupType($a_parent_ref_id, true);
54  if (in_array($parent_type, array("grp", "crs"))) {
55  $this->do_parent = (!$a_parent_obj_id && !$this->award_badge);
56  }
57 
58  parent::__construct($a_parent_obj, $a_parent_cmd);
59 
60  $this->setLimit(9999);
61 
62  if ($this->award_badge) {
63  $this->setTitle($lng->txt("badge_award_badge") . ": " . $award_badge->getTitle());
64  $this->setDescription($award_badge->getDescription());
65 
66  $this->addColumn("", "", 1);
67 
68  $this->setFormAction($ilCtrl->getFormAction($a_parent_obj));
69  $this->addMultiCommand("assignBadge", $lng->txt("badge_award_badge"));
70  $this->addMultiCommand("confirmDeassignBadge", $lng->txt("badge_remove_badge"));
71  } else {
72  $parent = "";
73  if ($a_parent_obj_id) {
74  $title = ilObject::_lookupTitle($a_parent_obj_id);
75  if (!$title) {
76  $title = ilObjectDataDeletionLog::get($a_parent_obj_id);
77  if ($title) {
78  $title = $title["title"];
79  }
80  }
81  if ($a_restrict_badge_id) {
82  $badge = new ilBadge($a_restrict_badge_id);
83  $title .= " - " . $badge->getTitle();
84  }
85  $parent = $title . ": ";
86  }
87  $this->setTitle($parent . $lng->txt("users"));
88  }
89 
90  $this->addColumn($lng->txt("name"), "name");
91  $this->addColumn($lng->txt("login"), "login");
92  $this->addColumn($lng->txt("type"), "type");
93  $this->addColumn($lng->txt("title"), "title");
94  $this->addColumn($lng->txt("badge_issued_on"), "issued");
95 
96  if ($this->do_parent) {
97  $this->addColumn($lng->txt("object"), "parent_id");
98  }
99 
100  $this->setDefaultOrderField("name");
101 
102  $this->setRowTemplate("tpl.user_row.html", "Services/Badge");
103 
104  $this->setFormAction($ilCtrl->getFormAction($a_parent_obj));
105  $this->setFilterCommand("apply" . ucfirst($this->getParentCmd()));
106  $this->setResetCommand("reset" . ucfirst($this->getParentCmd()));
107 
108  $this->initFilter();
109 
110  $this->getItems($a_parent_ref_id, $this->award_badge, $a_parent_obj_id, $a_restrict_badge_id);
111  }
112 
113  public function initFilter(): void
114  {
115  $lng = $this->lng;
116 
117  $name = $this->addFilterItemByMetaType("name", self::FILTER_TEXT, false, $lng->txt("name"));
118  $this->filter["name"] = $name->getValue();
119  }
120 
121  public function getItems(
122  int $a_parent_ref_id,
123  ilBadge $a_award_bagde = null,
124  int $a_parent_obj_id = null,
125  int $a_restrict_badge_id = null
126  ): void {
127  $tree = $this->tree;
128  $user_ids = null;
129 
130  $data = array();
131 
132  if (!$a_parent_obj_id) {
133  $a_parent_obj_id = ilObject::_lookupObjId($a_parent_ref_id);
134  }
135 
136  // repository context: walk tree for available users
137  if ($a_parent_ref_id) {
138  $user_ids = ilBadgeHandler::getInstance()->getUserIds($a_parent_ref_id, $a_parent_obj_id);
139  }
140 
141  $obj_ids = array($a_parent_obj_id);
142 
143  // add sub-items
144  if ($this->do_parent) {
145  foreach ($tree->getSubTree($tree->getNodeData($a_parent_ref_id)) as $node) {
146  $obj_ids[] = $node["obj_id"];
147  }
148  }
149 
150  $badges = $assignments = array();
151  foreach ($obj_ids as $obj_id) {
152  foreach (ilBadge::getInstancesByParentId($obj_id) as $badge) {
153  $badges[$badge->getId()] = $badge;
154  }
155 
156  foreach (ilBadgeAssignment::getInstancesByParentId($obj_id) as $ass) {
157  if ($a_restrict_badge_id &&
158  $a_restrict_badge_id !== $ass->getBadgeId()) {
159  continue;
160  }
161 
162  // when awarding we only want to see the current badge
163  if ($this->award_badge &&
164  $ass->getBadgeId() !== $this->award_badge->getId()) {
165  continue;
166  }
167 
168  $assignments[$ass->getUserId()][] = $ass;
169  }
170  }
171 
172  // administration context: show only existing assignments
173  if (!$user_ids) {
174  $user_ids = array_keys($assignments);
175  }
176 
177  $tmp["set"] = array();
178  if (count($user_ids) > 0) {
179  $uquery = new ilUserQuery();
180  $uquery->setLimit(9999);
181  $uquery->setUserFilter($user_ids);
182 
183  if ($this->filter["name"]) {
184  $uquery->setTextFilter($this->filter["name"]);
185  }
186 
187  $tmp = $uquery->query();
188  }
189  foreach ($tmp["set"] as $user) {
190  // add 1 entry for each badge
191  if (array_key_exists($user["usr_id"], $assignments)) {
192  foreach ($assignments[$user["usr_id"]] as $user_ass) {
193  $idx = $user_ass->getBadgeId() . "-" . $user["usr_id"];
194 
195  $badge = $badges[$user_ass->getBadgeId()];
196  $parent = [];
197  if ($this->do_parent) {
198  $parent = $badge->getParentMeta();
199  }
200 
201  $data[$idx] = array(
202  "user_id" => $user["usr_id"],
203  "name" => $user["lastname"] . ", " . $user["firstname"],
204  "login" => $user["login"],
205  "type" => ilBadge::getExtendedTypeCaption($badge->getTypeInstance()),
206  "title" => $badge->getTitle(),
207  "issued" => $user_ass->getTimestamp(),
208  "parent_id" => $parent["id"] ?? 0,
209  "parent_meta" => $parent
210  );
211  }
212  }
213  // no badge yet, add dummy entry (for manual awarding)
214  elseif ($this->award_badge) {
215  $idx = "0-" . $user["usr_id"];
216 
217  $data[$idx] = array(
218  "user_id" => $user["usr_id"],
219  "name" => $user["lastname"] . ", " . $user["firstname"],
220  "login" => $user["login"],
221  "type" => "",
222  "title" => "",
223  "issued" => "",
224  "parent_id" => ""
225  );
226  }
227  }
228 
229  $this->setData($data);
230  }
231 
232  protected function fillRow(array $a_set): void
233  {
234  $lng = $this->lng;
235 
236  if ($this->award_badge) {
237  $this->tpl->setVariable('VAL_ID', $a_set['user_id']);
238  }
239 
240  $this->tpl->setVariable('TXT_NAME', $a_set['name']);
241  $this->tpl->setVariable('TXT_LOGIN', $a_set['login']);
242  $this->tpl->setVariable('TXT_TYPE', $a_set['type']);
243  $this->tpl->setVariable('TXT_TITLE', $a_set['title']);
244  $this->tpl->setVariable('TXT_ISSUED', $a_set['issued']
245  ? ilDatePresentation::formatDate(new ilDateTime($a_set['issued'], IL_CAL_UNIX))
246  : '');
247 
248  if ($a_set['parent_id']) {
249  $parent = $a_set['parent_meta'];
250  $this->tpl->setVariable('PARENT_TITLE', $parent['title']);
251 
252  $icon = $this->ui_factory->symbol()->icon()->custom(
253  ilObject::_getIcon((int) $parent['id'], 'big', $parent['type']),
254  $lng->txt('obj_' . $parent['type'])
255  );
256 
257  $this->tpl->setVariable(
258  'PARENT_ICON',
259  $this->ui_renderer->render($icon)
260  );
261  }
262  }
263 }
setData(array $a_data)
getNodeData(int $a_node_id, ?int $a_tree_pk=null)
get all information of a node.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static _getIcon(int $obj_id=0, string $size="big", string $type="", bool $offline=false)
Get icon for repository item.
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...
setFormAction(string $a_form_action, bool $a_multipart=false)
setResetCommand(string $a_val, string $a_caption="")
static formatDate(ilDateTime $date, bool $a_skip_day=false, bool $a_include_wd=false, bool $include_seconds=false)
setDescription(string $a_val)
getItems(int $a_parent_ref_id, ilBadge $a_award_bagde=null, int $a_parent_obj_id=null, int $a_restrict_badge_id=null)
const IL_CAL_UNIX
ilLanguage $lng
setId(string $a_val)
static _lookupObjId(int $ref_id)
global $DIC
Definition: feed.php:28
addFilterItemByMetaType(string $id, int $type=self::FILTER_TEXT, bool $a_optional=false, string $caption="")
Add filter by standard type.
__construct(VocabulariesInterface $vocabularies)
static _lookupTitle(int $obj_id)
static getExtendedTypeCaption(ilBadgeType $a_type)
setDefaultOrderField(string $a_defaultorderfield)
setRowTemplate(string $a_template, string $a_template_dir="")
Set row template.
setFilterCommand(string $a_val, string $a_caption="")
static getInstancesByParentId(int $a_parent_id, array $a_filter=null)
static getInstancesByParentId(int $a_parent_obj_id)
setTitle(string $a_title, string $a_icon="", string $a_icon_alt="")
setLimit(int $a_limit=0, int $a_default_limit=0)
__construct(object $a_parent_obj, string $a_parent_cmd, int $a_parent_ref_id, protected ?\ilBadge $award_badge=null, int $a_parent_obj_id=null, int $a_restrict_badge_id=0)
addColumn(string $a_text, string $a_sort_field="", string $a_width="", bool $a_is_checkbox_action_column=false, string $a_class="", string $a_tooltip="", bool $a_tooltip_with_html=false)
filter(string $filter_id, $class_path, string $cmd, bool $activated=true, bool $expanded=true)
getSubTree(array $a_node, bool $a_with_data=true, array $a_type=[])
get all nodes in the subtree under specified node
static _lookupType(int $id, bool $reference=false)
addMultiCommand(string $a_cmd, string $a_text)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...