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
35include_once 'Services/Search/classes/class.ilSearchResult.php';
36include_once 'Services/Search/classes/class.ilSearchSettings.php';
37include_once './Services/User/classes/class.ilUserAccountSettings.php';
38include_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 {
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 {
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:
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
689 $udf_search->setFields(array($name));
690 $result_obj = $udf_search->performSearch();
691
692 // Store entries
693 $this->__storeEntries($result_obj);
694 break;
695
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
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
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 {
1157 }
1158}
1159?>
$result
global $tpl
Definition: ilias.php:8
$_GET["client_id"]
$_SESSION["AccountId"]
const QP_COMBINATION_OR
const QP_COMBINATION_AND
const FIELD_TYPE_TEXT
const FIELD_TYPE_MULTI
const FIELD_TYPE_SELECT
const FIELD_TYPE_UDF_SELECT
Class ilUserSearchOptions.
const FIELD_TYPE_UDF_TEXT
static encode($mixed, $suppress_native=false)
static getInstance()
Factory.
static _lookupId($a_user_str)
Lookup id by login.
static _getUserDefinedFieldSearchInstance($query_parser)
get reference of ilLikeUserDefinedFieldSearch
static getUserMultiFieldSearchInstance($query_parser)
static _getUserSearchInstance($query_parser)
get reference of ilLikeUserSearch
static _lookupObjId($a_id)
static _lookupType($a_id, $a_reference=false)
lookup object type
static hasParticipantListAccess($a_obj_id, $a_usr_id=null)
Check if (current) user has access to the participant list.
static getInstanceByObjId($a_obj_id)
Get instance by obj type.
This class represents a property form user interface.
This class represents a property in a property form.
This class represents an option in a radio group.
TableGUI class object (course,group and role) search results Used in member search.
selectObject()
Return selection of course/group/roles to calling script.
static fillAutoCompleteToolbar($parent_object, ilToolbarGUI $toolbar=null, $a_options=array(), $a_sticky=false)
fill toolbar with
showSearchRoleTable($a_obj_ids)
Show usr table.
setTitle($a_title)
Set form title.
enableSearchableCheck($a_status)
En/disable the validation of the searchable flag.
storedUserList()
Called from table sort.
showSearchSelected()
submit from autocomplete
initFormSearch(ilObjUser $user=NULL)
doUserAutoComplete()
Do auto completion.
getTitle()
Get search form title.
setUserLimitations($a_limitations)
allow user limitations like inactive and access limitations
showSearchUserTable($a_usr_ids, $a_parent_cmd)
Show usr table.
searchResultFilterListener($a_ref_id, $a_data)
Listener called from ilSearchResult Id is obj_id for role, usr Id is ref_id for crs grp.
listUsers()
List users of course/group/roles.
ilRepositorySearchGUI()
Constructor @access public.
addNewSearchButton()
Add new search button.
getUserLimitations()
allow user limitations like inactive and access limitations
& executeCommand()
Control @access public.
setString($a_str)
Set/get search string @access public.
addUserFromAutoComplete()
Add user from auto complete input.
handleMultiCommand()
Handle multi command.
allowObjectSelection($a_value=false)
Toggle object selection status.
setCallback(&$class, $method, $a_add_options=array())
& __parseQueryString($a_string, $a_combination_or=true, $a_ignore_length=false)
parse query string, using query parser instance
This class represents a selection list property in a property form.
static getInstance()
Factory.
This class represents a text property in a property form.
Auto completion class for user lists.
static getInstance()
Singelton get instance.
static _getSearchableFieldsInfo($a_admin=false)
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
$_POST['username']
Definition: cron.php:12
$txt
Definition: error.php:12
$info
Definition: example_052.php:80
$GLOBALS['PHPCAS_CLIENT']
This global variable is used by the interface class phpCAS.
Definition: CAS.php:276
global $ilCtrl
Definition: ilias.php:18
exit
Definition: login.php:54
global $lng
Definition: privfeed.php:40
$cmd
Definition: sahs_server.php:35
if($_REQUEST['ilias_path']) define('ILIAS_HTTP_PATH' $_REQUEST['ilias_path']
Definition: index.php:7