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