ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
class.ilBadgeUserTableGUI.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
4 include_once("Services/Table/classes/class.ilTable2GUI.php");
5 
15 {
16  protected $award_badge; // [ilBadge]
17  protected $do_parent; // [bool]
18 
19  function __construct($a_parent_obj, $a_parent_cmd = "", $a_parent_ref_id, ilBadge $a_award_bagde = null, $a_parent_obj_id = null, $a_restrict_badge_id = null)
20  {
21  global $ilCtrl, $lng;
22 
23  $this->setId("bdgusr");
24  $this->award_badge = $a_award_bagde;
25  $this->do_parent = false;
26 
27  $parent_type = ilObject::_lookupType($a_parent_ref_id, true);
28  if(in_array($parent_type, array("grp", "crs")))
29  {
30  $this->do_parent = (!$a_parent_obj_id && !$this->award_badge);
31  }
32 
33  parent::__construct($a_parent_obj, $a_parent_cmd);
34 
35  $this->setLimit(9999);
36 
37  if($this->award_badge)
38  {
39  $this->setTitle($lng->txt("badge_award_badge").": ".$a_award_bagde->getTitle());
40  $this->setDescription($a_award_bagde->getDescription());
41 
42  $this->addColumn("", "", 1);
43 
44  $this->setFormAction($ilCtrl->getFormAction($a_parent_obj));
45  $this->addMultiCommand("assignBadge", $lng->txt("badge_award_badge"));
46  $this->addMultiCommand("confirmDeassignBadge", $lng->txt("badge_remove_badge"));
47  }
48  else
49  {
50  $parent = "";
51  if($a_parent_obj_id)
52  {
53  $title = ilObject::_lookupTitle($a_parent_obj_id);
54  if(!$title)
55  {
56  include_once "Services/Object/classes/class.ilObjectDataDeletionLog.php";
57  $title = ilObjectDataDeletionLog::get($a_parent_obj_id);
58  if($title)
59  {
60  $title = $title["title"];
61  }
62  }
63  if($a_restrict_badge_id)
64  {
65  include_once("Services/Badge/classes/class.ilBadge.php");
66  $badge = new ilBadge($a_restrict_badge_id);
67  $title .= " - ".$badge->getTitle();
68  }
69  $parent = $title.": ";
70  }
71  $this->setTitle($parent.$lng->txt("users"));
72  }
73 
74  $this->addColumn($lng->txt("name"), "name");
75  $this->addColumn($lng->txt("login"), "login");
76  $this->addColumn($lng->txt("type"), "type");
77  $this->addColumn($lng->txt("title"), "title");
78  $this->addColumn($lng->txt("badge_issued_on"), "issued");
79 
80  if($this->do_parent)
81  {
82  $this->addColumn($lng->txt("object"), "parent_id");
83  }
84 
85  $this->setDefaultOrderField("name");
86 
87  $this->setRowTemplate("tpl.user_row.html", "Services/Badge");
88 
89  $this->setFormAction($ilCtrl->getFormAction($a_parent_obj));
90  $this->setFilterCommand("apply".ucfirst($this->getParentCmd()));
91  $this->setResetCommand("reset".ucfirst($this->getParentCmd()));
92 
93  $this->initFilter();
94 
95  $this->getItems($a_parent_ref_id, $this->award_badge, $a_parent_obj_id, $a_restrict_badge_id);
96  }
97 
98  public function initFilter()
99  {
100  global $lng;
101 
102  $name = $this->addFilterItemByMetaType("name", self::FILTER_TEXT, false, $lng->txt("name"));
103  $this->filter["name"] = $name->getValue();
104  }
105 
106  function getItems($a_parent_ref_id, ilBadge $a_award_bagde = null, $a_parent_obj_id = null, $a_restrict_badge_id = null)
107  {
108  global $tree;
109 
110  $data = array();
111 
112  if(!$a_parent_obj_id)
113  {
114  $a_parent_obj_id = ilObject::_lookupObjId($a_parent_ref_id);
115  }
116 
117  // repository context: walk tree for available users
118  if($a_parent_ref_id)
119  {
120  $user_ids = ilBadgeHandler::getInstance()->getUserIds($a_parent_ref_id, $a_parent_obj_id);
121  }
122 
123  $obj_ids = array($a_parent_obj_id);
124 
125  // add sub-items
126  if($this->do_parent)
127  {
128  foreach($tree->getSubTree($tree->getNodeData($a_parent_ref_id)) as $node)
129  {
130  $obj_ids[] = $node["obj_id"];
131  }
132  }
133 
134  include_once "Services/Badge/classes/class.ilBadge.php";
135  include_once "Services/Badge/classes/class.ilBadgeAssignment.php";
136  $badges = $assignments = array();
137  foreach($obj_ids as $obj_id)
138  {
139  foreach(ilBadge::getInstancesByParentId($obj_id) as $badge)
140  {
141  $badges[$badge->getId()] = $badge;
142  }
143 
144  foreach(ilBadgeAssignment::getInstancesByParentId($obj_id) as $ass)
145  {
146  if($a_restrict_badge_id &&
147  $a_restrict_badge_id != $ass->getBadgeId())
148  {
149  continue;
150  }
151 
152  // when awarding we only want to see the current badge
153  if($this->award_badge &&
154  $ass->getBadgeId() != $this->award_badge->getId())
155  {
156  continue;
157  }
158 
159  $assignments[$ass->getUserId()][] = $ass;
160  }
161  }
162 
163  // administration context: show only existing assignments
164  if(!$user_ids)
165  {
166  $user_ids = array_keys($assignments);
167  }
168 
169  include_once "Services/Badge/classes/class.ilBadgeRenderer.php";
170  include_once "Services/User/classes/class.ilUserQuery.php";
171  $tmp["set"] = array();
172  if (count($user_ids) > 0)
173  {
174  $uquery = new ilUserQuery();
175  $uquery->setLimit(9999);
176  $uquery->setUserFilter($user_ids);
177 
178  if ($this->filter["name"])
179  {
180  $uquery->setTextFilter($this->filter["name"]);
181  }
182 
183  $tmp = $uquery->query();
184  }
185  foreach($tmp["set"] as $user)
186  {
187  // add 1 entry for each badge
188  if(array_key_exists($user["usr_id"], $assignments))
189  {
190  foreach($assignments[$user["usr_id"]] as $user_ass)
191  {
192  $idx = $user_ass->getBadgeId()."-".$user["usr_id"];
193 
194  $badge = $badges[$user_ass->getBadgeId()];
195 
196  if($this->do_parent)
197  {
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"],
209  "parent_meta" => $parent
210  );
211  }
212  }
213  // no badge yet, add dummy entry (for manual awarding)
214  else if($this->award_badge)
215  {
216  $idx = "0-".$user["usr_id"];
217 
218  $data[$idx] = array(
219  "user_id" => $user["usr_id"],
220  "name" => $user["lastname"].", ".$user["firstname"],
221  "login" => $user["login"],
222  "type" => "",
223  "title" => "",
224  "issued" => "",
225  "parent_id" => ""
226  );
227  }
228  }
229 
230  $this->setData($data);
231  }
232 
233  protected function fillRow($a_set)
234  {
235  global $lng;
236 
237  if($this->award_badge)
238  {
239  $this->tpl->setVariable("VAL_ID", $a_set["user_id"]);
240  }
241 
242  $this->tpl->setVariable("TXT_NAME", $a_set["name"]);
243  $this->tpl->setVariable("TXT_LOGIN", $a_set["login"]);
244  $this->tpl->setVariable("TXT_TYPE", $a_set["type"]);
245  $this->tpl->setVariable("TXT_TITLE", $a_set["title"]);
246  $this->tpl->setVariable("TXT_ISSUED", $a_set["issued"]
247  ? ilDatePresentation::formatDate(new ilDateTime($a_set["issued"], IL_CAL_UNIX))
248  : "");
249 
250  if($a_set["parent_id"])
251  {
252  $parent = $a_set["parent_meta"];
253  $this->tpl->setVariable("PARENT", $parent["title"]);
254  $this->tpl->setVariable("PARENT_TYPE", $lng->txt("obj_".$parent["type"]));
255  $this->tpl->setVariable("PARENT_ICON",
256  ilObject::_getIcon($parent["id"], "big", $parent["type"]));
257  }
258  }
259 }
setDescription($a_val)
Set description.
static _getIcon($a_obj_id="", $a_size="big", $a_type="", $a_offline=false)
Get icon for repository item.
setDefaultOrderField($a_defaultorderfield)
Set Default order field.
User query class.
addFilterItemByMetaType($id, $type=self::FILTER_TEXT, $a_optional=false, $caption=NULL)
Add filter by standard type.
static _lookupTitle($a_id)
lookup object title
const IL_CAL_UNIX
getParentCmd()
Get parent command.
setId($a_val)
Set id.
getItems($a_parent_ref_id, ilBadge $a_award_bagde=null, $a_parent_obj_id=null, $a_restrict_badge_id=null)
global $ilCtrl
Definition: ilias.php:18
setTitle($a_title, $a_icon=0, $a_icon_alt=0)
Set title and title icon.
Class ilTable2GUI.
static getInstancesByParentId($a_parent_id, array $a_filter=null)
setResetCommand($a_val, $a_caption=null)
Set reset filter command.
static getExtendedTypeCaption(ilBadgeType $a_type)
static _lookupObjId($a_id)
addMultiCommand($a_cmd, $a_text)
Add Command button.
static formatDate(ilDateTime $date)
Format a date public.
Date and time handling
setRowTemplate($a_template, $a_template_dir="")
Set row template.
Create styles array
The data for the language used.
static _lookupType($a_id, $a_reference=false)
lookup object type
setFormAction($a_form_action, $a_multipart=false)
Set Form action parameter.
__construct($a_parent_obj, $a_parent_cmd="", $a_parent_ref_id, ilBadge $a_award_bagde=null, $a_parent_obj_id=null, $a_restrict_badge_id=null)
global $lng
Definition: privfeed.php:17
addColumn($a_text, $a_sort_field="", $a_width="", $a_is_checkbox_action_column=false, $a_class="", $a_tooltip="", $a_tooltip_with_html=false)
Add a column to the header.
TableGUI class for badge user listing.
setLimit($a_limit=0, $a_default_limit=0)
static getInstance()
Constructor.
static getInstancesByParentId($a_parent_obj_id)
setFilterCommand($a_val, $a_caption=null)
Set filter command.