ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
class.ilRepositorySearchGUI.php
Go to the documentation of this file.
1 <?php
2 /*
3  +-----------------------------------------------------------------------------+
4  | ILIAS open source |
5  +-----------------------------------------------------------------------------+
6  | Copyright (c) 1998-2001 ILIAS open source, University of Cologne |
7  | |
8  | This program is free software; you can redistribute it and/or |
9  | modify it under the terms of the GNU General Public License |
10  | as published by the Free Software Foundation; either version 2 |
11  | of the License, or (at your option) any later version. |
12  | |
13  | This program is distributed in the hope that it will be useful, |
14  | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16  | GNU General Public License for more details. |
17  | |
18  | You should have received a copy of the GNU General Public License |
19  | along with this program; if not, write to the Free Software |
20  | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
21  +-----------------------------------------------------------------------------+
22 */
23 
35 include_once 'Services/Search/classes/class.ilSearchResult.php';
36 include_once 'Services/Search/classes/class.ilSearchSettings.php';
37 include_once './Services/User/classes/class.ilUserAccountSettings.php';
38 include_once 'Services/Search/classes/class.ilQueryParser.php';
39 
40 
42 {
43  private $search_results = array();
44 
45  protected $add_options = array();
46  protected $object_selection = false;
47 
48  protected $searchable_check = true;
49  protected $search_title = '';
50 
51  var $search_type = 'usr';
52  protected $user_limitations = true;
53 
59  {
60  global $ilCtrl,$tpl,$lng;
61 
62  $this->ctrl =& $ilCtrl;
63  $this->tpl =& $tpl;
64  $this->lng =& $lng;
65  $this->lng->loadLanguageModule('search');
66  $this->lng->loadLanguageModule('crs');
67 
68  $this->setTitle($this->lng->txt('add_members_header'));
69 
70  $this->__setSearchType();
71  $this->__loadQueries();
72 
73  $this->result_obj = new ilSearchResult();
74  $this->result_obj->setMaxHits(1000000);
75  $this->settings =& new ilSearchSettings();
76 
77  }
78 
83  public function setTitle($a_title)
84  {
85  $this->search_title = $a_title;
86  }
87 
92  public function getTitle()
93  {
94  return $this->search_title;
95  }
96 
101  public function enableSearchableCheck($a_status)
102  {
103  $this->searchable_check = $a_status;
104  }
105 
110  public function isSearchableCheckEnabled()
111  {
113  }
114 
115 
129  public static function fillAutoCompleteToolbar($parent_object, ilToolbarGUI $toolbar = null, $a_options = array(), $a_sticky = false)
130  {
131  global $ilToolbar, $lng, $ilCtrl, $tree;
132 
133  if(!$toolbar instanceof ilToolbarGUI)
134  {
135  $toolbar = $ilToolbar;
136  }
137 
138  // Fill default options
139  if(!isset($a_options['auto_complete_name']))
140  {
141  $a_options['auto_complete_name'] = $lng->txt('obj_user');
142  }
143  if(!isset($a_options['auto_complete_size']))
144  {
145  $a_options['auto_complete_size'] = 15;
146  }
147  if(!isset($a_options['submit_name']))
148  {
149  $a_options['submit_name'] = $lng->txt('btn_add');
150  }
151 
152  $ajax_url = $ilCtrl->getLinkTargetByClass(array(get_class($parent_object),'ilRepositorySearchGUI'),
153  'doUserAutoComplete', '', true,false);
154 
155  include_once("./Services/Form/classes/class.ilTextInputGUI.php");
156  $ul = new ilTextInputGUI($a_options['auto_complete_name'], 'user_login');
157  $ul->setDataSource($ajax_url);
158  $ul->setSize($a_options['auto_complete_size']);
159  if(!$a_sticky)
160  {
161  $toolbar->addInputItem($ul, true);
162  }
163  else
164  {
165  $toolbar->addStickyItem($ul, true);
166  }
167 
168  if(count((array) $a_options['user_type']))
169  {
170  include_once './Services/Form/classes/class.ilSelectInputGUI.php';
171  $si = new ilSelectInputGUI("", "user_type");
172  $si->setOptions($a_options['user_type']);
173  if(!$a_sticky)
174  {
175  $toolbar->addInputItem($si);
176  }
177  else
178  {
179  $toolbar->addStickyItem($si);
180  }
181  }
182 
183  include_once "Services/UIComponent/Button/classes/class.ilSubmitButton.php";
184  $button = ilSubmitButton::getInstance();
185  $button->setCaption($a_options['submit_name'], false);
186  $button->setCommand('addUserFromAutoComplete');
187  if(!$a_sticky)
188  {
189  $toolbar->addButtonInstance($button);
190  }
191  else
192  {
193  $toolbar->addStickyItem($button);
194  }
195 
196  if((bool)$a_options['add_search'] ||
197  is_numeric($a_options['add_from_container']))
198  {
199  $lng->loadLanguageModule("search");
200 
201  $toolbar->addSeparator();
202 
203  if((bool)$a_options['add_search'])
204  {
205  include_once "Services/UIComponent/Button/classes/class.ilLinkButton.php";
206  $button = ilLinkButton::getInstance();
207  $button->setCaption("search_users");
208  $button->setUrl($ilCtrl->getLinkTargetByClass('ilRepositorySearchGUI',''));
209  $toolbar->addButtonInstance($button);
210  }
211 
212  if(is_numeric($a_options['add_from_container']))
213  {
214  $parent_ref_id = (int)$a_options['add_from_container'];
215  $parent_container_ref_id = $tree->checkForParentType($parent_ref_id, "grp");
216  $parent_container_type = "grp";
217  if(!$parent_container_ref_id)
218  {
219  $parent_container_ref_id = $tree->checkForParentType($parent_ref_id, "crs");
220  $parent_container_type = "crs";
221  }
222  if($parent_container_ref_id)
223  {
224  if((bool)$a_options['add_search'])
225  {
226  $toolbar->addSpacer();
227  }
228 
229  $ilCtrl->setParameterByClass('ilRepositorySearchGUI', "list_obj", ilObject::_lookupObjId($parent_container_ref_id));
230 
231  include_once "Services/UIComponent/Button/classes/class.ilLinkButton.php";
232  $button = ilLinkButton::getInstance();
233  $button->setCaption("search_add_members_from_container_".$parent_container_type);
234  $button->setUrl($ilCtrl->getLinkTargetByClass(array(get_class($parent_object),'ilRepositorySearchGUI'), 'listUsers'));
235  $toolbar->addButtonInstance($button);
236  }
237  }
238  }
239 
240  $toolbar->setFormAction(
241  $ilCtrl->getFormActionByClass(
242  array(
243  get_class($parent_object),
244  'ilRepositorySearchGUI')
245  )
246  );
247  return $toolbar;
248  }
249 
254  protected function doUserAutoComplete()
255  {
256  // hide anonymout request
257  if($GLOBALS['ilUser']->getId() == ANONYMOUS_USER_ID)
258  {
259  include_once './Services/JSON/classes/class.ilJsonUtil.php';
260  return ilJsonUtil::encode(new stdClass());
261  exit;
262  }
263 
264 
265  if(!isset($_GET['autoCompleteField']))
266  {
267  $a_fields = array('login','firstname','lastname','email');
268  $result_field = 'login';
269  }
270  else
271  {
272  $a_fields = array((string) $_GET['autoCompleteField']);
273  $result_field = (string) $_GET['autoCompleteField'];
274  }
275 
276  include_once './Services/User/classes/class.ilUserAutoComplete.php';
277  $auto = new ilUserAutoComplete();
278 
279  if(($_REQUEST['fetchall']))
280  {
281  $auto->setLimit(ilUserAutoComplete::MAX_ENTRIES);
282  }
283 
284  $auto->setMoreLinkAvailable(true);
285  $auto->setSearchFields($a_fields);
286  $auto->setResultField($result_field);
287  $auto->enableFieldSearchableCheck(true);
288  $auto->setUserLimitations($this->getUserLimitations());
289 
290  echo $auto->getList($_REQUEST['term']);
291  exit();
292  }
293 
294 
299  function setString($a_str)
300  {
301  $_SESSION['search']['string'] = $this->string = $a_str;
302  }
303  function getString()
304  {
305  return $this->string;
306  }
307 
312  function &executeCommand()
313  {
314  global $rbacsystem;
315 
316  $next_class = $this->ctrl->getNextClass($this);
317  $cmd = $this->ctrl->getCmd();
318 
319  $this->ctrl->setReturn($this,'');
320 
321  switch($next_class)
322  {
323  default:
324  if(!$cmd)
325  {
326  $cmd = "showSearch";
327  }
328  $this->$cmd();
329  break;
330  }
331  return true;
332  }
333 
334  function __clearSession()
335  {
336 
337  unset($_SESSION['rep_search']);
338  unset($_SESSION['append_results']);
339  unset($_SESSION['rep_query']);
340  unset($_SESSION['rep_search_type']);
341  }
342 
343  function cancel()
344  {
345  $this->ctrl->returnToParent($this);
346  }
347 
348  function start()
349  {
350  // delete all session info
351  $this->__clearSession();
352  $this->showSearch();
353 
354  return true;
355  }
356 
357 
358  public function addUser()
359  {
360  $class = $this->callback['class'];
361  $method = $this->callback['method'];
362 
363  // call callback if that function does give a return value => show error message
364  // listener redirects if everything is ok.
365  $class->$method($_POST['user']);
366 
367  $this->showSearchResults();
368  }
369 
373  protected function addUserFromAutoComplete()
374  {
375  $class = $this->callback['class'];
376  $method = $this->callback['method'];
377 
378  $users = explode(',', $_POST['user_login']);
379  $user_ids = array();
380  foreach($users as $user)
381  {
382  $user_id = ilObjUser::_lookupId($user);
383  if($user_id)
384  {
385  $user_ids[] = $user_id;
386  }
387  }
388 
389  $user_type = isset($_POST['user_type']) ? $_POST['user_type'] : 0;
390 
391  if(!$class->$method($user_ids,$user_type))
392  {
393  $GLOBALS['ilCtrl']->returnToParent($this);
394  }
395  }
396 
400  protected function handleMultiCommand()
401  {
402  $class = $this->callback['class'];
403  $method = $this->callback['method'];
404 
405  // Redirects if everything is ok
406  if(!$class->$method((array) $_POST['user'],$_POST['selectedCommand']))
407  {
408  $this->showSearchResults();
409  }
410  }
411 
412  public function setCallback(&$class,$method,$a_add_options = array())
413  {
414  $this->callback = array('class' => $class,'method' => $method);
415  $this->add_options = $a_add_options ? $a_add_options : array();
416  }
417 
418  public function showSearch()
419  {
420  $this->initFormSearch();
421  $this->tpl->setContent($this->form->getHTML());
422  }
423 
427  public function showSearchSelected()
428  {
429  $selected = (int) $_REQUEST['selected_id'];
430 
431  #include_once './Services/Object/classes/class.ilObjectFactory.php';
432  #$factory = new ilObjectFactory();
433  #$user = $factory->getInstanceByObjId($selected);
434 
435  #$this->initFormSearch($user);
436  #$this->tpl->setContent($this->form->getHTML());
437 
438  $this->tpl->addBlockFile('ADM_CONTENT','adm_content','tpl.rep_search_result.html','Services/Search');
439  $this->addNewSearchButton();
440  $this->showSearchUserTable(array($selected),'showSearchResults');
441  }
442 
443  public function initFormSearch(ilObjUser $user = NULL)
444  {
445  global $ilCtrl;
446 
447  include_once './Services/Form/classes/class.ilPropertyFormGUI.php';
448 
449  $this->form = new ilPropertyFormGUI();
450  $this->form->setFormAction($this->ctrl->getFormAction($this,'search'));
451  $this->form->setTitle($this->getTitle());
452  $this->form->addCommandButton('performSearch', $this->lng->txt('search'));
453  $this->form->addCommandButton('cancel', $this->lng->txt('cancel'));
454 
455 
456  $kind = new ilRadioGroupInputGUI($this->lng->txt('search_type'),'search_for');
457  $kind->setValue($this->search_type);
458  $this->form->addItem($kind);
459 
460  // Users
461  $users = new ilRadioOption($this->lng->txt('search_for_users'),'usr');
462 
463  // UDF
464  include_once 'Services/Search/classes/class.ilUserSearchOptions.php';
466  {
467  switch($info['type'])
468  {
470  case FIELD_TYPE_SELECT:
471 
472  $sel = new ilSelectInputGUI($info['lang'],"rep_query[usr][".$info['db']."]");
473  $sel->setOptions($info['values']);
474  $users->addSubItem($sel);
475  break;
476 
477  case FIELD_TYPE_MULTI:
478  case FIELD_TYPE_UDF_TEXT:
479  case FIELD_TYPE_TEXT:
480 
481  if(isset($info['autoComplete']) and $info['autoComplete'])
482  {
483  $ilCtrl->setParameterByClass(get_class($this),'autoCompleteField',$info['db']);
484  $ul = new ilTextInputGUI($info['lang'], "rep_query[usr][".$info['db']."]");
485  $ul->setDataSourceSubmitOnSelection(TRUE);
486  $ul->setDataSourceSubmitUrl(
487  $this->ctrl->getLinkTarget(
488  $this,
489  'showSearchSelected',
490  '',
491  FALSE,
492  FALSE
493  )
494  );
495  $ul->setDataSource($ilCtrl->getLinkTarget($this,
496  "doUserAutoComplete", "", true));
497  $ul->setSize(30);
498  $ul->setMaxLength(120);
499 
500  if($user instanceof ilObjUser)
501  {
502  switch($info['db'])
503  {
504  case 'firstname':
505  $ul->setValue($user->getFirstname());
506  break;
507  case 'lastname':
508  $ul->setValue($user->getLastname());
509  break;
510  case 'login':
511  $ul->setValue($user->getLogin());
512  break;
513  }
514  }
515 
516 
517 
518  $users->addSubItem($ul);
519  }
520  else
521  {
522  $txt = new ilTextInputGUI($info['lang'],"rep_query[usr][".$info['db']."]");
523  $txt->setSize(30);
524  $txt->setMaxLength(120);
525  $users->addSubItem($txt);
526  }
527  break;
528  }
529  }
530  $kind->addOption($users);
531 
532 
533 
534  // Role
535  $roles = new ilRadioOption($this->lng->txt('search_for_role_members'),'role');
536  $role = new ilTextInputGUI($this->lng->txt('search_role_title'),'rep_query[role][title]');
537  $role->setSize(30);
538  $role->setMaxLength(120);
539  $roles->addSubItem($role);
540  $kind->addOption($roles);
541 
542  // Course
543  $groups = new ilRadioOption($this->lng->txt('search_for_crs_members'),'crs');
544  $group = new ilTextInputGUI($this->lng->txt('search_crs_title'),'rep_query[crs][title]');
545  $group->setSize(30);
546  $group->setMaxLength(120);
547  $groups->addSubItem($group);
548  $kind->addOption($groups);
549 
550  // Group
551  $groups = new ilRadioOption($this->lng->txt('search_for_grp_members'),'grp');
552  $group = new ilTextInputGUI($this->lng->txt('search_grp_title'),'rep_query[grp][title]');
553  $group->setSize(30);
554  $group->setMaxLength(120);
555  $groups->addSubItem($group);
556  $kind->addOption($groups);
557  }
558 
559 
560  function show()
561  {
562  $this->showSearchResults();
563  }
564 
565  function appendSearch()
566  {
567  $_SESSION['search_append'] = true;
568  $this->performSearch();
569  }
570 
575  function performSearch()
576  {
577  $found_query = false;
578  foreach((array) $_POST['rep_query'][$_POST['search_for']] as $field => $value)
579  {
580  if(trim(ilUtil::stripSlashes($value)))
581  {
582  $found_query = true;
583  break;
584  }
585  }
586  if(!$found_query)
587  {
588  ilUtil::sendFailure($this->lng->txt('msg_no_search_string'));
589  $this->start();
590  return false;
591  }
592 
593  // unset search_append if called directly
594  if($_POST['cmd']['performSearch'])
595  {
596  unset($_SESSION['search_append']);
597  }
598 
599  switch($this->search_type)
600  {
601  case 'usr':
602  $this->__performUserSearch();
603  break;
604 
605  case 'grp':
606  $this->__performGroupSearch();
607  break;
608 
609  case 'crs':
610  $this->__performCourseSearch();
611  break;
612 
613  case 'role':
614  $this->__performRoleSearch();
615  break;
616 
617  default:
618  echo 'not defined';
619  }
620  $this->result_obj->setRequiredPermission('read');
621  $this->result_obj->addObserver($this, 'searchResultFilterListener');
622  $this->result_obj->filter(ROOT_FOLDER_ID,QP_COMBINATION_OR);
623 
624  // User access filter
625  if($this->search_type == 'usr')
626  {
627  include_once './Services/User/classes/class.ilUserFilter.php';
628  $this->search_results = array_intersect(
629  $this->result_obj->getResultIds(),
630  ilUserFilter::getInstance()->filter($this->result_obj->getResultIds())
631  );
632  }
633  else
634  {
635  $this->search_results = array();
636  foreach((array) $this->result_obj->getResults() as $res)
637  {
638  $this->search_results[] = $res['obj_id'];
639  }
640  }
641 
642  if(!count($this->search_results))
643  {
644  ilUtil::sendFailure($this->lng->txt('search_no_match'));
645  $this->showSearch();
646  return true;
647  }
648  $this->__updateResults();
649  if($this->result_obj->isLimitReached())
650  {
651  $message = sprintf($this->lng->txt('search_limit_reached'),$this->settings->getMaxHits());
652  ilUtil::sendInfo($message);
653  return true;
654  }
655  // show results
656  $this->show();
657  return true;
658  }
659 
661  {
662  include_once 'Services/Search/classes/class.ilUserSearchOptions.php';
663  include_once 'Services/Search/classes/class.ilObjectSearchFactory.php';
664 
666  {
667  $name = $info['db'];
668  $query_string = $_SESSION['rep_query']['usr'][$name];
669 
670  // continue if no query string is given
671  if(!$query_string)
672  {
673  continue;
674  }
675 
676  if(!is_object($query_parser = $this->__parseQueryString($query_string, true, ($info['type'] == FIELD_TYPE_SELECT))))
677  {
678  ilUtil::sendInfo($query_parser);
679  return false;
680  }
681  switch($info['type'])
682  {
684  // Do a phrase query for select fields
685  $query_parser = $this->__parseQueryString('"'.$query_string.'"');
686 
687  case FIELD_TYPE_UDF_TEXT:
689  $udf_search->setFields(array($name));
690  $result_obj = $udf_search->performSearch();
691 
692  // Store entries
693  $this->__storeEntries($result_obj);
694  break;
695 
696  case FIELD_TYPE_SELECT:
697  // Do a phrase query for select fields
698  $query_parser = $this->__parseQueryString('"'.$query_string.'"', true, true);
699 
700  case FIELD_TYPE_TEXT:
701  $user_search =& ilObjectSearchFactory::_getUserSearchInstance($query_parser);
702  $user_search->setFields(array($name));
703  $result_obj = $user_search->performSearch();
704 
705  // store entries
706  $this->__storeEntries($result_obj);
707  break;
708 
709  case FIELD_TYPE_MULTI:
710  $multi_search = ilObjectSearchFactory::getUserMultiFieldSearchInstance($query_parser);
711  $multi_search->setFields(array($name));
712  $result_obj = $multi_search->performSearch();
713  $this->__storeEntries($result_obj);
714  break;
715  }
716  }
717  }
718 
724  {
725  include_once 'Services/Search/classes/class.ilObjectSearchFactory.php';
726 
727  $query_string = $_SESSION['rep_query']['grp']['title'];
728  if(!is_object($query_parser = $this->__parseQueryString($query_string)))
729  {
730  ilUtil::sendInfo($query_parser,true);
731  return false;
732  }
733 
734  include_once 'Services/Search/classes/Like/class.ilLikeObjectSearch.php';
735  $object_search = new ilLikeObjectSearch($query_parser);
736  $object_search->setFilter(array('grp'));
737  $this->__storeEntries($object_search->performSearch());
738 
739  return true;
740  }
741 
746  protected function __performCourseSearch()
747  {
748  include_once 'Services/Search/classes/class.ilObjectSearchFactory.php';
749 
750  $query_string = $_SESSION['rep_query']['crs']['title'];
751  if(!is_object($query_parser = $this->__parseQueryString($query_string)))
752  {
753  ilUtil::sendInfo($query_parser,true);
754  return false;
755  }
756 
757  include_once 'Services/Search/classes/Like/class.ilLikeObjectSearch.php';
758  $object_search = new ilLikeObjectSearch($query_parser);
759  $object_search->setFilter(array('crs'));
760  $this->__storeEntries($object_search->performSearch());
761 
762  return true;
763  }
764 
770  {
771  include_once 'Services/Search/classes/class.ilObjectSearchFactory.php';
772 
773  $query_string = $_SESSION['rep_query']['role']['title'];
774  if(!is_object($query_parser = $this->__parseQueryString($query_string)))
775  {
776  ilUtil::sendInfo($query_parser,true);
777  return false;
778  }
779 
780  // Perform like search
781  include_once 'Services/Search/classes/Like/class.ilLikeObjectSearch.php';
782  $object_search = new ilLikeObjectSearch($query_parser);
783  $object_search->setFilter(array('role'));
784  $this->__storeEntries($object_search->performSearch());
785 
786  return true;
787  }
788 
794  function &__parseQueryString($a_string,$a_combination_or = true,$a_ignore_length = false)
795  {
796  $query_parser = new ilQueryParser(ilUtil::stripSlashes($a_string));
797  $query_parser->setCombination($a_combination_or ? QP_COMBINATION_OR : QP_COMBINATION_AND);
798  $query_parser->setMinWordLength(1);
799 
800  // #17502
801  if(!(bool)$a_ignore_length)
802  {
803  $query_parser->setGlobalMinLength(3); // #14768
804  }
805 
806  $query_parser->parse();
807 
808  if(!$query_parser->validate())
809  {
810  return $query_parser->getMessage();
811  }
812  return $query_parser;
813  }
814 
815  // Private
816  function __loadQueries()
817  {
818  if(is_array($_POST['rep_query']))
819  {
820  $_SESSION['rep_query'] = $_POST['rep_query'];
821  }
822  }
823 
824 
825  function __setSearchType()
826  {
827  // Update search type. Default to user search
828  if($_POST['search_for'])
829  {
830  #echo 1;
831  $_SESSION['rep_search_type'] = $_POST['search_for'];
832  }
833  if(!$_POST['search_for'] and !$_SESSION['rep_search_type'])
834  {
835  #echo 2;
836  $_SESSION['rep_search_type'] = 'usr';
837  }
838 
839  $this->search_type = $_SESSION['rep_search_type'];
840  #echo $this->search_type;
841 
842  return true;
843  }
844 
845 
846  function __updateResults()
847  {
848  if(!$_SESSION['search_append'])
849  {
850  $_SESSION['rep_search'] = array();
851  }
852  foreach($this->search_results as $result)
853  {
854  $_SESSION['rep_search'][$this->search_type][] = $result;
855  }
856  if(!$_SESSION['rep_search'][$this->search_type])
857  {
858  $_SESSION['rep_search'][$this->search_type] = array();
859  }
860  else
861  {
862  // remove duplicate entries
863  $_SESSION['rep_search'][$this->search_type] = array_unique($_SESSION['rep_search'][$this->search_type]);
864  }
865  return true;
866  }
867 
868  function __appendToStoredResults($a_usr_ids)
869  {
870  if(!$_SESSION['search_append'])
871  {
872  return $_SESSION['rep_search']['usr'] = $a_usr_ids;
873  }
874  $_SESSION['rep_search']['usr'] = array();
875  foreach($a_usr_ids as $usr_id)
876  {
877  $_SESSION['rep_search']['usr'][] = $usr_id;
878  }
879  return $_SESSION['rep_search']['usr'] ? array_unique($_SESSION['rep_search']['usr']) : array();
880  }
881 
882  function __storeEntries(&$new_res)
883  {
884  if($this->stored == false)
885  {
886  $this->result_obj->mergeEntries($new_res);
887  $this->stored = true;
888  return true;
889  }
890  else
891  {
892  $this->result_obj->intersectEntries($new_res);
893  return true;
894  }
895  }
896 
901  protected function addNewSearchButton()
902  {
903  include_once './Services/UIComponent/Toolbar/classes/class.ilToolbarGUI.php';
904  $toolbar = new ilToolbarGUI();
905  $toolbar->addButton(
906  $this->lng->txt('search_new'),
907  $this->ctrl->getLinkTarget($this,'showSearch')
908  );
909  $this->tpl->setVariable('ACTION_BUTTONS',$toolbar->getHTML());
910  }
911 
912  public function showSearchResults()
913  {
914  $counter = 0;
915  $f_result = array();
916 
917  $this->tpl->addBlockFile('ADM_CONTENT','adm_content','tpl.rep_search_result.html','Services/Search');
918  $this->addNewSearchButton();
919 
920  switch($this->search_type)
921  {
922  case "usr":
923  $this->showSearchUserTable($_SESSION['rep_search']['usr'],'showSearchResults');
924  break;
925 
926  case 'grp':
927  $this->showSearchGroupTable($_SESSION['rep_search']['grp']);
928  break;
929 
930  case 'crs':
931  $this->showSearchCourseTable($_SESSION['rep_search']['crs']);
932  break;
933 
934  case 'role':
935  $this->showSearchRoleTable($_SESSION['rep_search']['role']);
936  break;
937  }
938  }
939 
945  protected function showSearchUserTable($a_usr_ids,$a_parent_cmd)
946  {
947  $is_in_admin = ($_REQUEST['baseClass'] == 'ilAdministrationGUI');
948  if($is_in_admin)
949  {
950  // remember link target to admin search gui (this)
951  $_SESSION["usr_search_link"] = $this->ctrl->getLinkTarget($this,'show');
952  }
953 
954  include_once './Services/Search/classes/class.ilRepositoryUserResultTableGUI.php';
955 
956  $table = new ilRepositoryUserResultTableGUI($this,$a_parent_cmd,$is_in_admin);
957  if(count($this->add_options))
958  {
959  $table->addMultiItemSelectionButton(
960  'selectedCommand',
961  $this->add_options,
962  'handleMultiCommand',
963  $this->lng->txt('execute')
964  );
965  }
966  else
967  {
968  $table->addMultiCommand('addUser', $this->lng->txt('btn_add'));
969  }
970  $table->setUserLimitations($this->getUserLimitations());
971  $table->parseUserIds($a_usr_ids);
972 
973  $this->tpl->setVariable('RES_TABLE',$table->getHTML());
974  }
975 
981  protected function showSearchRoleTable($a_obj_ids)
982  {
983  include_once './Services/Search/classes/class.ilRepositoryObjectResultTableGUI.php';
984 
985  $table = new ilRepositoryObjectResultTableGUI($this,'showSearchResults',$this->object_selection);
986  $table->parseObjectIds($a_obj_ids);
987 
988  $this->tpl->setVariable('RES_TABLE',$table->getHTML());
989  }
990 
996  protected function showSearchGroupTable($a_obj_ids)
997  {
998  include_once './Services/Search/classes/class.ilRepositoryObjectResultTableGUI.php';
999 
1000  $table = new ilRepositoryObjectResultTableGUI($this,'showSearchResults',$this->object_selection);
1001  $table->parseObjectIds($a_obj_ids);
1002 
1003  $this->tpl->setVariable('RES_TABLE',$table->getHTML());
1004  }
1005 
1011  protected function showSearchCourseTable($a_obj_ids)
1012  {
1013  include_once './Services/Search/classes/class.ilRepositoryObjectResultTableGUI.php';
1014 
1015  $table = new ilRepositoryObjectResultTableGUI($this,'showSearchResults',$this->object_selection);
1016  $table->parseObjectIds($a_obj_ids);
1017 
1018  $this->tpl->setVariable('RES_TABLE',$table->getHTML());
1019  }
1020 
1025  protected function listUsers()
1026  {
1027  // get parameter is used e.g. in exercises to provide
1028  // "add members of course" link
1029  if ($_GET["list_obj"] != "" && !is_array($_POST['obj']))
1030  {
1031  $_POST['obj'][0] = $_GET["list_obj"];
1032  }
1033  if(!is_array($_POST['obj']) or !$_POST['obj'])
1034  {
1035  ilUtil::sendFailure($this->lng->txt('select_one'));
1036  $this->showSearchResults();
1037  return false;
1038  }
1039 
1040  $_SESSION['rep_search']['objs'] = $_POST['obj'];
1041 
1042  // Get all members
1043  $members = array();
1044  foreach($_POST['obj'] as $obj_id)
1045  {
1046  $type = ilObject::_lookupType($obj_id);
1047  switch($type)
1048  {
1049  case 'crs':
1050  case 'grp':
1051 
1052  include_once './Services/Membership/classes/class.ilParticipants.php';
1054  {
1055  $members = array_merge((array) $members, ilParticipants::getInstanceByObjId($obj_id)->getParticipants());
1056  }
1057  break;
1058 
1059  case 'role':
1060  global $rbacreview;
1061 
1062  include_once './Services/User/classes/class.ilUserFilter.php';
1063  $members = array_merge($members, ilUserFilter::getInstance()->filter($rbacreview->assignedUsers($obj_id)));
1064  break;
1065  }
1066  }
1067  $members = array_unique((array) $members);
1068  $this->__appendToStoredResults($members);
1069 
1070  $this->tpl->addBlockFile('ADM_CONTENT','adm_content','tpl.rep_search_result.html','Services/Search');
1071 
1072  $this->addNewSearchButton();
1073  $this->showSearchUserTable($_SESSION['rep_search']['usr'],'storedUserList');
1074  return true;
1075  }
1076 
1081  protected function storedUserList()
1082  {
1083  $_POST['obj'] = $_SESSION['rep_search']['objs'];
1084  $this->listUsers();
1085  return true;
1086  }
1087 
1096  public function searchResultFilterListener($a_ref_id,$a_data)
1097  {
1098  if($a_data['type'] == 'usr')
1099  {
1100  if($a_data['obj_id'] == ANONYMOUS_USER_ID)
1101  {
1102  return false;
1103  }
1104  }
1105  return true;
1106  }
1107 
1113  public function allowObjectSelection($a_value = false)
1114  {
1115  $this->object_selection = (bool)$a_value;
1116  }
1117 
1121  protected function selectObject()
1122  {
1123  // get parameter is used e.g. in exercises to provide
1124  // "add members of course" link
1125  if ($_GET["list_obj"] != "" && !is_array($_POST['obj']))
1126  {
1127  $_POST['obj'][0] = $_GET["list_obj"];
1128  }
1129  if(!is_array($_POST['obj']) or !$_POST['obj'])
1130  {
1131  ilUtil::sendFailure($this->lng->txt('select_one'));
1132  $this->showSearchResults();
1133  return false;
1134  }
1135 
1136  $this->ctrl->setParameter($this->callback["class"], "obj", implode(";", $_POST["obj"]));
1137  $this->ctrl->redirect($this->callback["class"], $this->callback["method"]);
1138  }
1139 
1145  public function setUserLimitations($a_limitations)
1146  {
1147  $this->user_limitations = (bool) $a_limitations;
1148  }
1149 
1154  public function getUserLimitations()
1155  {
1156  return $this->user_limitations;
1157  }
1158 }
1159 ?>
setCallback(&$class, $method, $a_add_options=array())
setTitle($a_title)
Set form title.
selectObject()
Return selection of course/group/roles to calling script.
This class represents an option in a radio group.
exit
Definition: login.php:54
$_POST['username']
Definition: cron.php:12
enableSearchableCheck($a_status)
En/disable the validation of the searchable flag.
addUserFromAutoComplete()
Add user from auto complete input.
$_SESSION["AccountId"]
This class represents a selection list property in a property form.
$result
This class represents a property form user interface.
showSearchSelected()
submit from autocomplete
$_GET["client_id"]
addNewSearchButton()
Add new search button.
$cmd
Definition: sahs_server.php:35
showSearchRoleTable($a_obj_ids)
Show usr table.
const FIELD_TYPE_MULTI
static _lookupId($a_user_str)
Lookup id by login.
const FIELD_TYPE_UDF_TEXT
const FIELD_TYPE_SELECT
static getInstance()
Singelton get instance.
static getUserMultiFieldSearchInstance($query_parser)
setUserLimitations($a_limitations)
allow user limitations like inactive and access limitations
static hasParticipantListAccess($a_obj_id, $a_usr_id=null)
Check if (current) user has access to the participant list.
searchResultFilterListener($a_ref_id, $a_data)
Listener called from ilSearchResult Id is obj_id for role, usr Id is ref_id for crs grp...
const QP_COMBINATION_OR
Auto completion class for user lists.
global $tpl
Definition: ilias.php:8
global $ilCtrl
Definition: ilias.php:18
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
$info
Definition: example_052.php:80
static _getUserSearchInstance($query_parser)
get reference of ilLikeUserSearch
This class represents a property in a property form.
static encode($mixed, $suppress_native=false)
doUserAutoComplete()
Do auto completion.
addSubItem($a_item)
Add Subitem.
getUserLimitations()
allow user limitations like inactive and access limitations
static _lookupObjId($a_id)
This class represents a text property in a property form.
initFormSearch(ilObjUser $user=NULL)
getTitle()
Get search form title.
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
const FIELD_TYPE_UDF_SELECT
Class ilUserSearchOptions.
listUsers()
List users of course/group/roles.
$txt
Definition: error.php:12
static _lookupType($a_id, $a_reference=false)
lookup object type
allowObjectSelection($a_value=false)
Toggle object selection status.
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
storedUserList()
Called from table sort.
TableGUI class object (course,group and role) search results Used in member search.
ilRepositorySearchGUI()
Constructor public.
setString($a_str)
Set/get search string public.
handleMultiCommand()
Handle multi command.
global $lng
Definition: privfeed.php:40
& __parseQueryString($a_string, $a_combination_or=true, $a_ignore_length=false)
parse query string, using query parser instance
const QP_COMBINATION_AND
if($_REQUEST['ilias_path']) define('ILIAS_HTTP_PATH' $_REQUEST['ilias_path']
Definition: index.php:7
static fillAutoCompleteToolbar($parent_object, ilToolbarGUI $toolbar=null, $a_options=array(), $a_sticky=false)
fill toolbar with
$GLOBALS['PHPCAS_CLIENT']
This global variable is used by the interface class phpCAS.
Definition: CAS.php:276
const FIELD_TYPE_TEXT
showSearchUserTable($a_usr_ids, $a_parent_cmd)
Show usr table.
static getInstanceByObjId($a_obj_id)
Get instance by obj type.
static _getUserDefinedFieldSearchInstance($query_parser)
get reference of ilLikeUserDefinedFieldSearch
static _getSearchableFieldsInfo($a_admin=false)