ILIAS  release_4-4 Revision
class.ilRepositoryUserResultTableGUI.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  const TYPE_STANDARD = 1;
17  const TYPE_GLOBAL_SEARCH = 2;
18 
19  protected $lucene_result = null;
20 
21 
22  protected static $all_selectable_cols = NULL;
23  protected $admin_mode;
24  protected $type;
25 
29  function __construct($a_parent_obj, $a_parent_cmd, $a_admin_mode = false, $a_type = self::TYPE_STANDARD)
30  {
31  global $ilCtrl, $lng, $ilAccess, $lng, $ilUser;
32 
33  $this->admin_mode = (bool)$a_admin_mode;
34  $this->type = $a_type;
35 
36  $this->setId("rep_search_".$ilUser->getId());
37  parent::__construct($a_parent_obj, $a_parent_cmd);
38 
39 
40  $this->setFormAction($ilCtrl->getFormAction($this->parent_obj));
41  $this->setTitle($this->lng->txt('search_results'));
42  $this->setEnableTitle(true);
43  $this->setShowRowsSelector(true);
44 
45 
46  if($this->getType() == self::TYPE_STANDARD)
47  {
48  $this->setRowTemplate("tpl.rep_search_usr_result_row.html", "Services/Search");
49  $this->addColumn("", "", "1", true);
50  $this->enable('select_all');
51  $this->setSelectAllCheckbox("user[]");
52  $this->setDefaultOrderField("login");
53  $this->setDefaultOrderDirection("asc");
54  }
55  else
56  {
57  $this->setRowTemplate("tpl.global_search_usr_result_row.html", "Services/Search");
58  $this->addColumn('', '', "110px");
59  }
60 
61  $all_cols = $this->getSelectableColumns();
62  foreach($this->getSelectedColumns() as $col)
63  {
64  $this->addColumn($all_cols[$col]['txt'], $col);
65  }
66 
67  if($this->getType() == self::TYPE_STANDARD)
68  {
69 
70  }
71  else
72  {
73  $this->addColumn($this->lng->txt('lucene_relevance_short'),'relevance');
74  $this->setDefaultOrderField("relevance");
75  $this->setDefaultOrderDirection("desc");
76  }
77 
78  }
79 
85  public function numericOrdering($a_field)
86  {
87  if($a_field == 'relevance')
88  {
89  return true;
90  }
91  return parent::numericOrdering($a_field);
92  }
93 
98  public function getType()
99  {
100  return $this->type;
101  }
102 
109  {
110  $this->lucene_result = $res;
111  }
112 
117  public function getLuceneResult()
118  {
119  return $this->lucene_result;
120  }
121 
129  public function getSelectableColumns()
130  {
131  global $rbacreview, $ilUser;
132 
133  if(!self::$all_selectable_cols)
134  {
135  include_once './Services/Search/classes/class.ilUserSearchOptions.php';
136  $columns = ilUserSearchOptions::getSelectableColumnInfo($rbacreview->isAssigned($ilUser->getId(), SYSTEM_ROLE_ID));
137 
138  if($this->admin_mode)
139  {
140  // #11293
141  $columns['access_until'] = array('txt' => $this->lng->txt('access_until'));
142  $columns['last_login'] = array('txt' => $this->lng->txt('last_login'));
143  }
144 
145  self::$all_selectable_cols = $columns;
146  }
147  return self::$all_selectable_cols;
148  }
149 
154  public function initMultiCommands($a_commands)
155  {
156  if(!count($a_commands))
157  {
158  $this->addMultiCommand('addUser', $this->lng->txt('btn_add'));
159  return true;
160  }
161  $this->addMultiItemSelectionButton('member_type', $a_commands, 'addUser', $this->lng->txt('btn_add'));
162  return true;
163  }
164 
168  protected function fillRow($a_set)
169  {
170  global $ilCtrl, $lng;
171 
172  $this->tpl->setVariable("VAL_ID", $a_set["usr_id"]);
173 
174  $link = '';
175  if($this->getType() == self::TYPE_GLOBAL_SEARCH)
176  {
177  include_once './Services/User/classes/class.ilUserUtil.php';
178  $link = ilUserUtil::getProfileLink($a_set['usr_id']);
179  if($link)
180  {
181  $this->tpl->setVariable('IMG_LINKED_TO_PROFILE',$link);
182  $this->tpl->setVariable(
183  'USR_IMG_SRC_LINKED',
184  ilObjUser::_getPersonalPicturePath($a_set['usr_id'],'xsmall')
185  );
186  }
187  else
188  {
189  $this->tpl->setVariable(
190  'USR_IMG_SRC',
191  ilObjUser::_getPersonalPicturePath($a_set['usr_id'],'xsmall')
192  );
193  }
194  }
195 
196 
197  foreach($this->getSelectedColumns() as $field)
198  {
199  switch($field)
200  {
201  case 'gender':
202  $a_set['gender'] = $a_set['gender'] ? $this->lng->txt('gender_' . $a_set['gender']) : '';
203  $this->tpl->setCurrentBlock('custom_fields');
204  $this->tpl->setVariable('VAL_CUST', $a_set[$field]);
205  $this->tpl->parseCurrentBlock();
206  break;
207 
208  case 'birthday':
209  $a_set['birthday'] = $a_set['birthday'] ? ilDatePresentation::formatDate(new ilDate($a_set['birthday'], IL_CAL_DATE)) : $this->lng->txt('no_date');
210  $this->tpl->setCurrentBlock('custom_fields');
211  $this->tpl->setVariable('VAL_CUST', $a_set[$field]);
212  $this->tpl->parseCurrentBlock();
213  break;
214 
215  case 'access_until':
216  $this->tpl->setCurrentBlock('custom_fields');
217  $this->tpl->setVariable('CUST_CLASS', ' '.$a_set['access_class']);
218  $this->tpl->setVariable('VAL_CUST', $a_set[$field]);
219  $this->tpl->parseCurrentBlock();
220  break;
221 
222  case 'last_login':
223  $a_set['last_login'] = $a_set['last_login'] ? ilDatePresentation::formatDate(new ilDateTime($a_set['last_login'], IL_CAL_DATETIME)) : $this->lng->txt('no_date');
224  $this->tpl->setCurrentBlock('custom_fields');
225  $this->tpl->setVariable('VAL_CUST', $a_set[$field]);
226  $this->tpl->parseCurrentBlock();
227  break;
228 
229  case 'login':
230  if($this->admin_mode)
231  {
232  $ilCtrl->setParameterByClass("ilobjusergui", "ref_id", "7");
233  $ilCtrl->setParameterByClass("ilobjusergui", "obj_id", $a_set["usr_id"]);
234  $ilCtrl->setParameterByClass("ilobjusergui", "search", "1");
235  $link = $ilCtrl->getLinkTargetByClass(array("iladministrationgui", "ilobjusergui"), "view");
236  $a_set[$field] = "<a href=\"".$link."\">".$a_set[$field]."</a>";
237  }
238  elseif($this->getType() == self::TYPE_GLOBAL_SEARCH)
239  {
240  if($link)
241  {
242  $this->tpl->setCurrentBlock('login_linked');
243  $this->tpl->setVariable('LOGIN_NAME',$a_set[$field] ? $a_set[$field] : '');
244  $this->tpl->setVariable('LOGIN_LINK',$link);
245  $this->tpl->parseCurrentBlock();
246  break;
247  }
248  }
249  // fallthrough
250 
251  default:
252  $this->tpl->setCurrentBlock('custom_fields');
253  $this->tpl->setVariable('VAL_CUST', (string) ($a_set[$field] ? $a_set[$field] : ''));
254  $this->tpl->parseCurrentBlock();
255  break;
256  }
257  }
258 
259  if($this->getType() == self::TYPE_GLOBAL_SEARCH)
260  {
261  $this->tpl->setVariable('SEARCH_RELEVANCE',$this->getRelevanceHTML($a_set['relevance']));
262  }
263 
264  }
265 
271  public function parseUserIds($a_user_ids)
272  {
273  if(!$a_user_ids)
274  {
275  $this->setData(array());
276  return true;
277  }
278 
279  $additional_fields = $this->getSelectedColumns();
280 
281  $parse_access = false;
282  if(isset($additional_fields['access_until']))
283  {
284  $parse_access = true;
285  unset($additional_fields['access_until']);
286  }
287 
288  $udf_ids = $usr_data_fields = $odf_ids = array();
289  foreach($additional_fields as $field)
290  {
291  if(substr($field, 0, 3) == 'udf')
292  {
293  $udf_ids[] = substr($field,4);
294  continue;
295  }
296  $usr_data_fields[] = $field;
297  }
298  include_once './Services/User/classes/class.ilUserQuery.php';
299  $usr_data = ilUserQuery::getUserListData(
300  'login',
301  'ASC',
302  0,
303  999999,
304  '',
305  '',
306  null,
307  false,
308  false,
309  0,
310  0,
311  null,
312  $usr_data_fields,
313  $a_user_ids
314  );
315 
316  if($this->admin_mode && $parse_access)
317  {
318  // see ilUserTableGUI
319  $current_time = time();
320  foreach($usr_data['set'] as $k => $user)
321  {
322  if ($user['active'])
323  {
324  if ($user["time_limit_unlimited"])
325  {
326  $txt_access = $this->lng->txt("access_unlimited");
327  $usr_data["set"][$k]["access_class"] = "smallgreen";
328  }
329  elseif ($user["time_limit_until"] < $current_time)
330  {
331  $txt_access = $this->lng->txt("access_expired");
332  $usr_data["set"][$k]["access_class"] = "smallred";
333  }
334  else
335  {
336  $txt_access = ilDatePresentation::formatDate(new ilDateTime($user["time_limit_until"],IL_CAL_UNIX));
337  $usr_data["set"][$k]["access_class"] = "small";
338  }
339  }
340  else
341  {
342  $txt_access = $this->lng->txt("inactive");
343  $usr_data["set"][$k]["access_class"] = "smallred";
344  }
345  $usr_data["set"][$k]["access_until"] = $txt_access;
346  }
347  }
348 
349  // Custom user data fields
350  if($udf_ids)
351  {
352  include_once './Services/User/classes/class.ilUserDefinedData.php';
353  $data = ilUserDefinedData::lookupData($a_user_ids, $udf_ids);
354 
355  $users = array();
356  $counter = 0;
357  foreach($usr_data['set'] as $set)
358  {
359  $users[$counter] = $set;
360  foreach($udf_ids as $udf_field)
361  {
362  $users[$counter]['udf_'.$udf_field] = $data[$set['usr_id']][$udf_field];
363  }
364  ++$counter;
365  }
366  }
367  else
368  {
369  $users = $usr_data['set'];
370  }
371 
372  if($this->getType() == self::TYPE_GLOBAL_SEARCH)
373  {
374  if($this->getLuceneResult() instanceof ilLuceneSearchResult)
375  {
376  foreach($users as $counter => $ud)
377  {
378  $users[$counter]['relevance'] = $this->getLuceneResult()->getRelevance($ud['usr_id']);
379  }
380  }
381  }
382 
383  $this->setData($users);
384  }
385 
386 
390  public function getRelevanceHTML($a_rel)
391  {
392  $tpl = new ilTemplate('tpl.lucene_relevance.html',true,true,'Services/Search');
393 
394  $width1 = (int) $a_rel;
395  $width2 = (int) (100 - $width1);
396 
397  $tpl->setCurrentBlock('relevance');
398  $tpl->setVariable('VAL_REL',sprintf("%d %%",$a_rel));
399  $tpl->setVariable('WIDTH_A',$width1);
400  $tpl->setVariable('WIDTH_B',$width2);
401  $tpl->setVariable('IMG_A',ilUtil::getImagePath("relevance_blue.png"));
402  $tpl->setVariable('IMG_B',ilUtil::getImagePath("relevance_dark.png"));
403  $tpl->parseCurrentBlock();
404  return $tpl->get();
405  }
406 }
407 ?>
numericOrdering($a_field)
enable numeric ordering for relevance
static getUserListData($a_order_field, $a_order_dir, $a_offset, $a_limit, $a_string_filter="", $a_activation_filter="", $a_last_login_filter=null, $a_limited_access_filter=false, $a_no_courses_filter=false, $a_course_group_filter=0, $a_role_filter=0, $a_user_folder_filter=null, $a_additional_fields='', $a_user_filter=null, $a_first_letter="")
Get data for user administration list.
setDefaultOrderField($a_defaultorderfield)
Set Default order field.
const IL_CAL_DATETIME
const IL_CAL_UNIX
setId($a_val)
Set id.
global $ilCtrl
Definition: ilias.php:18
__construct($a_parent_obj, $a_parent_cmd, $a_admin_mode=false, $a_type=self::TYPE_STANDARD)
Constructor.
setDefaultOrderDirection($a_defaultorderdirection)
Set Default order direction.
setTitle($a_title, $a_icon=0, $a_icon_alt=0)
Set title and title icon.
static lookupData($a_user_ids, $a_field_ids)
Lookup data.
Search result implementing iterator interface.
Class ilTable2GUI.
Class for single dates.
static getSelectableColumnInfo($a_admin=false)
Get info of searchable fields for selectable columns in table gui.
addColumn($a_text, $a_sort_field="", $a_width="", $a_is_checkbox_action_column=false, $a_class="", $a_tooltip="")
Add a column to the header.
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
special template class to simplify handling of ITX/PEAR
addMultiCommand($a_cmd, $a_text)
Add Command button.
enable($a_module_name)
enables particular modules of table
static formatDate(ilDateTime $date)
Format a date public.
Date and time handling
if(isset($_FILES['img_file']['size']) && $_FILES['img_file']['size'] > 0) $tpl
getSelectedColumns()
Get selected columns.
setRowTemplate($a_template, $a_template_dir="")
Set row template.
addMultiItemSelectionButton($a_sel_var, $a_options, $a_cmd, $a_text, $a_default_selection='')
Add Selection List + Command button for selected items.
const IL_CAL_DATE
setLuceneResult(ilLuceneSearchResult $res)
Set lucene result For parsing relevances.
global $ilUser
Definition: imgupload.php:15
global $lng
Definition: privfeed.php:40
static _getPersonalPicturePath($a_usr_id, $a_size="small", $a_force_pic=false, $a_prevent_no_photo_image=false)
Get path to personal picture.
initMultiCommands($a_commands)
Init multi commands.
setFormAction($a_form_action)
Set Form action parameter.
setShowRowsSelector($a_value)
Toggle rows-per-page selector.
setSelectAllCheckbox($a_select_all_checkbox)
Set the name of the checkbox that should be toggled with a select all button.
setEnableTitle($a_enabletitle)
Set Enable Title.
if(! $in) $columns
Definition: Utf8Test.php:46
static getProfileLink($a_usr_id)
Get link to personal profile Return empty string in case of not public profile.