ILIAS  release_8 Revision v8.24
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 {
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 {
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"]
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}
const IL_CAL_UNIX
static getInstancesByParentId(int $a_parent_obj_id)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
fillRow(array $a_set)
Standard Version of Fill Row.
__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)
getItems(int $a_parent_ref_id, ilBadge $a_award_bagde=null, int $a_parent_obj_id=null, int $a_restrict_badge_id=null)
static getInstancesByParentId(int $a_parent_id, array $a_filter=null)
static getExtendedTypeCaption(ilBadgeType $a_type)
static formatDate(ilDateTime $date, bool $a_skip_day=false, bool $a_include_wd=false, bool $include_seconds=false)
@classDescription Date and time handling
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...
static _lookupType(int $id, bool $reference=false)
static _getIcon(int $obj_id=0, string $size="big", string $type="", bool $offline=false)
Get icon for repository item.
static _lookupObjId(int $ref_id)
static _lookupTitle(int $obj_id)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
setFilterCommand(string $a_val, string $a_caption="")
setLimit(int $a_limit=0, int $a_default_limit=0)
set max.
setTitle(string $a_title, string $a_icon="", string $a_icon_alt="")
setDescription(string $a_val)
addMultiCommand(string $a_cmd, string $a_text)
addFilterItemByMetaType(string $id, int $type=self::FILTER_TEXT, bool $a_optional=false, string $caption="")
Add filter by standard type.
setFormAction(string $a_form_action, bool $a_multipart=false)
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)
setDefaultOrderField(string $a_defaultorderfield)
setRowTemplate(string $a_template, string $a_template_dir="")
Set row template.
setId(string $a_val)
setResetCommand(string $a_val, string $a_caption="")
setData(array $a_data)
Set table data.
ilLanguage $lng
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
getNodeData(int $a_node_id, ?int $a_tree_pk=null)
get all information of a node.
getSubTree(array $a_node, bool $a_with_data=true, array $a_type=[])
get all nodes in the subtree under specified node
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
global $DIC
Definition: feed.php:28
if($format !==null) $name
Definition: metadata.php:247
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
$lng