00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00038 include_once 'Services/Search/classes/class.ilSearchResult.php';
00039 include_once 'Services/Search/classes/class.ilSearchSettings.php';
00040
00041 class ilAdminUserSearchGUI
00042 {
00043 var $search_type = 'usr';
00044
00049 function ilAdminUserSearchGUI()
00050 {
00051 global $ilCtrl,$tpl,$lng;
00052
00053 $this->ctrl =& $ilCtrl;
00054 $this->tpl =& $tpl;
00055 $this->lng =& $lng;
00056 $this->lng->loadLanguageModule('search');
00057 $this->lng->loadLanguageModule('crs');
00058
00059 $this->__setSearchType();
00060 $this->__loadQueries();
00061
00062 $this->result_obj = new ilSearchResult();
00063 $this->result_obj->setMaxHits(1000000);
00064 $this->settings =& new ilSearchSettings();
00065
00066 }
00067
00068
00073 function setString($a_str)
00074 {
00075 $_SESSION['search']['string'] = $this->string = $a_str;
00076 }
00077 function getString()
00078 {
00079 return $this->string;
00080 }
00081
00086 function &executeCommand()
00087 {
00088 global $rbacsystem;
00089
00090 $next_class = $this->ctrl->getNextClass($this);
00091 $cmd = $this->ctrl->getCmd();
00092
00093 switch($next_class)
00094 {
00095 case "ilobjusergui":
00096 include_once('./Services/User/classes/class.ilObjUserGUI.php');
00097 $this->gui_obj = new ilObjUserGUI("",(int) $_GET["obj_id"], false, false);
00098 $this->gui_obj->setBackTarget($this->lng->txt("search_results"),
00099 $this->ctrl->getLinkTarget($this, "show"));
00100 $ret =& $this->ctrl->forwardCommand($this->gui_obj);
00101 break;
00102
00103 default:
00104 if(!$cmd)
00105 {
00106 $cmd = "show";
00107 }
00108 $this->$cmd();
00109 break;
00110 }
00111 return true;
00112 }
00113
00114 function __clearSession()
00115 {
00116 unset($_SESSION['rep_search']);
00117 unset($_SESSION['append_results']);
00118 unset($_SESSION['rep_query']);
00119 unset($_SESSION['rep_search_type']);
00120 unset($_SESSION['usr_query_active']);
00121 }
00122
00123 function start()
00124 {
00125
00126
00127 $this->showExtended();
00128
00129 return true;
00130 }
00131
00132 function startSimple()
00133 {
00134
00135 $this->__clearSession();
00136 $_SESSION["usr_search_mode"] = "simple";
00137 $this->performSearchSimple();
00138
00139 return true;
00140 }
00141
00142 function startExtended()
00143 {
00144
00145 $this->__clearSession();
00146 $_SESSION["usr_search_mode"] = "extended";
00147 $this->showExtended();
00148
00149 return true;
00150 }
00151
00152 function showExtended()
00153 {
00154 $_SESSION["usr_search_mode"] = "extended";
00155
00156
00157 $this->tpl->addBlockfile("BUTTONS", "buttons", "tpl.buttons.html");
00158
00159
00160 $this->tpl->setCurrentBlock("btn_cell");
00161 $this->tpl->setVariable("BTN_LINK",$this->ctrl->getLinkTarget($this,'show'));
00162 $this->tpl->setVariable("BTN_TXT",$this->lng->txt("search_user_simple"));
00163 $this->tpl->parseCurrentBlock();
00164
00165 $this->tpl->setCurrentBlock("btn_cell");
00166 $this->tpl->setVariable("BTN_LINK",$this->callback_class->ctrl->getLinkTarget($this->callback_class, "importUserForm"));
00167 $this->tpl->setVariable("BTN_TXT", $this->lng->txt("import_users"));
00168 $this->tpl->parseCurrentBlock();
00169 $this->__showSearch();
00170 $this->__showSearchResults();
00171 }
00172
00173 function show()
00174 {
00175 $_SESSION["usr_search_mode"] = "simple";
00176
00177
00178 $this->tpl->addBlockfile("BUTTONS", "buttons", "tpl.buttons.html");
00179
00180
00181 $this->tpl->setCurrentBlock("btn_cell");
00182 $this->tpl->setVariable("BTN_LINK",$this->ctrl->getLinkTarget($this,'showExtended'));
00183 $this->tpl->setVariable("BTN_TXT",$this->lng->txt("search_user_extended"));
00184 $this->tpl->parseCurrentBlock();
00185
00186 $this->tpl->setCurrentBlock("btn_cell");
00187 $this->tpl->setVariable("BTN_LINK",$this->callback_class->ctrl->getLinkTarget($this->callback_class, "importUserForm"));
00188 $this->tpl->setVariable("BTN_TXT", $this->lng->txt("import_users"));
00189 $this->tpl->parseCurrentBlock();
00190 $this->__showSearchSimple();
00191 $this->__showSearchResults();
00192 }
00193
00194 function __showSearchSimple()
00195 {
00196 $this->tpl->addBlockFile('ADM_CONTENT','adm_content','tpl.usr_search_simple.html','Services/Search');
00197
00198 $this->ctrl->setParameter($this,'search','1');
00199
00200 $this->tpl->setVariable("FORMACTION",$this->ctrl->getFormAction($this,'startSimple'));
00201 $this->tpl->setVariable("TXT_SEARCH",$this->lng->txt("search"));
00202 if(count($_SESSION['rep_search']['usr']))
00203 $this->tpl->setVariable("BTN2_VALUE",$this->lng->txt('append_results'));
00204
00205 $this->tpl->setVariable("BTN1_VALUE",$this->lng->txt("search_user"));
00206 }
00207
00208 function __showSearch()
00209 {
00210 $this->tpl->addBlockFile('ADM_CONTENT','adm_content','tpl.rep_search.html','Services/Search');
00211 $this->tpl->setVariable("FORMACTION",$this->ctrl->getFormAction($this,'startExtended'));
00212 $this->tpl->setVariable("TYPE_IMG",ilUtil::getImagePath('icon_usr.gif'));
00213 $this->tpl->setVariable("ALT_IMG",$this->lng->txt('obj_usr'));
00214 $this->tpl->setVariable("SEARCH_MEMBERS_HEADER",$this->lng->txt("search_user_extended"));
00215
00216
00217
00218 $this->tpl->setVariable("SEARCH_ASSIGN_USR",$this->lng->txt("search_for_users"));
00219 $this->tpl->setVariable("SEARCH_ROW_CHECK_USER",ilUtil::formRadioButton($this->search_type == 'usr',"search_for","usr"));
00220 $this->__fillUserSearch();
00221
00222
00223
00224 $this->tpl->setVariable("SEARCH_ROW_TXT_GROUP",$this->lng->txt("search_for_grp_members"));
00225 $this->tpl->setVariable("GROUP_TERM",$this->lng->txt('search_grp_title'));
00226 $this->tpl->setVariable("SEARCH_ROW_CHECK_GROUP",ilUtil::formRadioButton($this->search_type == 'grp',"search_for","grp"));
00227 $this->tpl->setVariable("GRP_VALUE",$_SESSION['rep_query']['grp']['title']);
00228
00229
00230
00231 $this->tpl->setVariable("SEARCH_ROW_TXT_ROLE",$this->lng->txt("search_for_role_members"));
00232 $this->tpl->setVariable("ROLE_TERM",$this->lng->txt('search_role_title'));
00233 $this->tpl->setVariable("SEARCH_ROW_CHECK_ROLE",ilUtil::formRadioButton($this->search_type == 'role',"search_for","role"));
00234 $this->tpl->setVariable("ROLE_VALUE",$_SESSION['rep_query']['role']['title']);
00235
00236
00237 $this->tpl->setVariable("BTN2_VALUE",$this->lng->txt("cancel"));
00238 if(count($_SESSION['rep_search']['usr']))
00239 {
00240 $this->tpl->setVariable("BTN3_VALUE",$this->lng->txt('append_results'));
00241 }
00242 $this->tpl->setVariable("BTN1_VALUE",$this->lng->txt("search"));
00243 }
00244
00245 function appendSearch()
00246 {
00247 $_SESSION['search_append'] = true;
00248 $this->performSearch();
00249 }
00250
00251 function appendSearchSimple()
00252 {
00253 $_SESSION['search_append'] = true;
00254 $this->performSearchSimple();
00255 }
00256
00257 function performSearchSimple()
00258 {
00259 $_SESSION["usr_search_mode"] = "simple";
00260
00261
00262 if($_POST['cmd']['performSearchSimple'])
00263 {
00264 unset($_SESSION['search_append']);
00265 }
00266
00267
00268 $_POST["search_fields"] = array ("username","firstname","lastname","email");
00269
00270
00271 $_POST['active'] = 1;
00272
00273 $_POST["search_string"] = trim($_POST["search_string"]) ? trim($_POST["search_string"]) : trim(urldecode($_GET["search_string"]));
00274 $_SESSION['us_active'] = isset($_POST['active']) ? $_POST['active'] : $_SESSION['us_active'];
00275 $_SESSION['us_active'] = $_SESSION["user_filter"];
00276
00277 if (empty($_POST["search_string"]))
00278 {
00279 $_POST["search_string"] = "%";
00280 }
00281
00282
00283 if (count($search_result = ilObjUser::searchUsers($_POST["search_string"],$_SESSION['us_active'],true, $_GET["user_filter"])) == 0)
00284 {
00285 if ($_POST["search_string"] == "%")
00286 {
00287 $_POST["search_string"] = "";
00288 }
00289
00290 $msg = $this->lng->txt("msg_no_search_result");
00291
00292 if ($_POST["search_string"] != "")
00293 {
00294 $msg .= " ".$this->lng->txt("with")." '".htmlspecialchars($_POST["search_string"])."'";
00295 }
00296
00297 if ($_GET['search'])
00298 {
00299 global $ilErr;
00300 $ilErr->raiseError($msg,$ilErr->MESSAGE);
00301 }
00302 else
00303 {
00304 ilUtil::sendInfo($msg, true);
00305 $this->ctrl->setParameterByClass("ilobjuserfoldergui", "user_filter", $_GET["user_filter"]);
00306 $this->ctrl->redirectByClass("ilobjuserfoldergui", "view");
00307 }
00308 }
00309
00310 if(!$_SESSION['search_append'])
00311 {
00312 $_SESSION['rep_search']['usr'] = array();
00313 }
00314
00315 foreach($search_result as $result)
00316 {
00317 $_SESSION['rep_search']['usr'][] = $result;
00318 }
00319
00320 if(!$_SESSION['rep_search'][$this->search_type])
00321 {
00322 $_SESSION['rep_search'][$this->search_type] = array();
00323 }
00324 else
00325 {
00326
00327 $_SESSION['rep_search'][$this->search_type] = array_unique($_SESSION['rep_search'][$this->search_type]);
00328 }
00329
00330 $this->show();
00331 }
00332
00333 function performSearch()
00334 {
00335
00336 if($_POST['cmd']['performSearch'])
00337 {
00338 unset($_SESSION['search_append']);
00339 }
00340
00341 switch($this->search_type)
00342 {
00343 case 'usr':
00344 $this->__performUserSearch();
00345 break;
00346
00347 case 'grp':
00348 $this->__performGroupSearch();
00349 break;
00350
00351 case 'role':
00352 $this->__performRoleSearch();
00353 break;
00354
00355 default:
00356 echo 'not defined';
00357 }
00358 $this->result_obj->filter(ROOT_FOLDER_ID,QP_COMBINATION_OR);
00359
00360 if(!count($this->result_obj->getResults()))
00361 {
00362 ilUtil::sendInfo($this->lng->txt('search_no_match'));
00363 #global $ilErr;
00364 #$ilErr->raiseError($this->lng->txt('search_no_match'),$ilErr->MESSAGE);
00365 }
00366 $this->__updateResults();
00367 if($this->result_obj->isLimitReached())
00368 {
00369 $message = sprintf($this->lng->txt('search_limit_reached'),$this->settings->getMaxHits());
00370 ilUtil::sendInfo($message);
00371 }
00372
00373 if ($_SESSION["usr_search_mode"] == "extended")
00374 $this->showExtended();
00375 else
00376 $this->show();
00377 }
00378
00379 function __performUserSearch()
00380 {
00381 include_once 'Services/Search/classes/class.ilUserSearchOptions.php';
00382 include_once 'Services/Search/classes/class.ilObjectSearchFactory.php';
00383
00384 foreach(ilUserSearchOptions::_getSearchableFieldsInfo(true) as $info)
00385 {
00386 $name = $info['db'];
00387 $query_string = $_SESSION['rep_query']['usr'][$name];
00388 $active_status = $_SESSION['usr_query_active'];
00389
00390
00391 if(!$query_string)
00392 {
00393 continue;
00394 }
00395
00396 if(!is_object($query_parser = $this->__parseQueryString($query_string)))
00397 {
00398 ilUtil::sendInfo($query_parser);
00399 return false;
00400 }
00401 switch($info['type'])
00402 {
00403 case FIELD_TYPE_UDF_SELECT:
00404 case FIELD_TYPE_UDF_TEXT:
00405 $udf_search = ilObjectSearchFactory::_getUserDefinedFieldSearchInstance($query_parser);
00406 $udf_search->setFields(array($name));
00407 $result_obj = $udf_search->performSearch();
00408
00409
00410 $this->__storeEntries($result_obj);
00411 break;
00412
00413 case FIELD_TYPE_SELECT:
00414 case FIELD_TYPE_TEXT:
00415 $user_search =& ilObjectSearchFactory::_getUserSearchInstance($query_parser);
00416 $user_search->setFields(array($name));
00417
00418 if ($active_status == 1)
00419 $user_search->enableActiveCheck(true);
00420 elseif ($active_status == 2)
00421 $user_search->enableInactiveCheck(true);
00422
00423 $result_obj = $user_search->performSearch();
00424
00425
00426 $this->__storeEntries($result_obj);
00427 break;
00428 }
00429 }
00430 }
00431
00432 function __performGroupSearch()
00433 {
00434 include_once 'Services/Search/classes/class.ilObjectSearchFactory.php';
00435
00436 $query_string = $_SESSION['rep_query']['grp']['title'];
00437 if(!is_object($query_parser = $this->__parseQueryString($query_string)))
00438 {
00439 ilUtil::sendInfo($query_parser,true);
00440 return false;
00441 }
00442
00443 include_once 'Services/Search/classes/Like/class.ilLikeObjectSearch.php';
00444 $object_search = new ilLikeObjectSearch($query_parser);
00445 $object_search->setFilter(array('grp'));
00446 $this->__storeEntries($object_search->performSearch());
00447
00448 return true;
00449 }
00450
00451 function __performRoleSearch()
00452 {
00453 include_once 'Services/Search/classes/class.ilObjectSearchFactory.php';
00454
00455 $query_string = $_SESSION['rep_query']['role']['title'];
00456 if(!is_object($query_parser = $this->__parseQueryString($query_string)))
00457 {
00458 ilUtil::sendInfo($query_parser,true);
00459 return false;
00460 }
00461
00462
00463 include_once 'Services/Search/classes/Like/class.ilLikeObjectSearch.php';
00464 $object_search = new ilLikeObjectSearch($query_parser);
00465 $object_search->setFilter(array('role'));
00466 $this->__storeEntries($object_search->performSearch());
00467
00468 return true;
00469 }
00470
00476 function &__parseQueryString($a_string)
00477 {
00478 include_once 'Services/Search/classes/class.ilQueryParser.php';
00479
00480 $query_parser = new ilQueryParser(ilUtil::stripSlashes($a_string));
00481 $query_parser->setCombination(QP_COMBINATION_OR);
00482 $query_parser->setMinWordLength(1);
00483 $query_parser->parse();
00484
00485 if(!$query_parser->validate())
00486 {
00487 return $query_parser->getMessage();
00488 }
00489 return $query_parser;
00490 }
00491
00492
00493 function __loadQueries()
00494 {
00495
00496 if(is_array($_POST['rep_query']))
00497 {
00498 $_SESSION['usr_query_active'] = ($_POST['usr_query_active']) ? $_POST['usr_query_active'] : 0;
00499 $_SESSION['rep_query'] = $_POST['rep_query'];
00500 }
00501 }
00502
00503
00504 function __setSearchType()
00505 {
00506
00507 if($_POST['search_for'])
00508 {
00509 #echo 1;
00510 $_SESSION['rep_search_type'] = $_POST['search_for'];
00511 }
00512 if(!$_POST['search_for'] and !$_SESSION['rep_search_type'])
00513 {
00514 #echo 2;
00515 $_SESSION['rep_search_type'] = 'usr';
00516 }
00517
00518 $this->search_type = $_SESSION['rep_search_type'];
00519 #echo $this->search_type;
00520
00521 return true;
00522 }
00523
00524 function __fillUserSearch()
00525 {
00526 global $lng;
00527
00528 include_once 'Services/Search/classes/class.ilUserSearchOptions.php';
00529
00530
00531 $values = array('0' => $lng->txt('please_choose'),
00532 '1' => $lng->txt('active'),
00533 '2' => $lng->txt('inactive'));
00534
00535 $this->tpl->setCurrentBlock("select_field");
00536 $this->tpl->setVariable("SELECT_NAME",$lng->txt('active'));
00537
00538 $this->tpl->setVariable("SELECT_BOX",ilUtil::formSelect($_SESSION['usr_query_active'],
00539 "usr_query_active",
00540 $values,
00541 false,
00542 true));
00543 $this->tpl->parseCurrentBlock();
00544
00545 foreach(ilUserSearchOptions::_getSearchableFieldsInfo(true) as $info)
00546 {
00547 switch($info['type'])
00548 {
00549 case FIELD_TYPE_UDF_SELECT:
00550 case FIELD_TYPE_SELECT:
00551 $this->tpl->setCurrentBlock("select_field");
00552 $this->tpl->setVariable("SELECT_NAME",$info['lang']);
00553
00554 $name = $info['db'];
00555 $this->tpl->setVariable("SELECT_BOX",ilUtil::formSelect($_SESSION['rep_query']['usr'][$name],
00556 "rep_query[usr][$name]",
00557 $info['values'],
00558 false,
00559 true));
00560 $this->tpl->parseCurrentBlock();
00561 break;
00562
00563 case FIELD_TYPE_UDF_TEXT:
00564 case FIELD_TYPE_TEXT:
00565 $this->tpl->setCurrentBlock("text_field");
00566 $this->tpl->setVariable("TEXT_NAME",$info['lang']);
00567
00568 $name = $info['db'];
00569 $this->tpl->setVariable("USR_NAME","rep_query[usr][$name]");
00570 $this->tpl->setVariable("USR_VALUE",$_SESSION['rep_query']['usr'][$name]);
00571 $this->tpl->parseCurrentBlock();
00572 break;
00573 }
00574 $this->tpl->setCurrentBlock("usr_rows");
00575 $this->tpl->parseCurrentBlock();
00576 }
00577
00578 }
00579
00580 function __updateResults()
00581 {
00582 if(!$_SESSION['search_append'])
00583 {
00584 $_SESSION['rep_search'] = array();
00585 }
00586 foreach($this->result_obj->getResults() as $result)
00587 {
00588 $_SESSION['rep_search'][$this->search_type][] = $result['obj_id'];
00589 }
00590 if(!$_SESSION['rep_search'][$this->search_type])
00591 {
00592 $_SESSION['rep_search'][$this->search_type] = array();
00593 }
00594 else
00595 {
00596
00597 $_SESSION['rep_search'][$this->search_type] = array_unique($_SESSION['rep_search'][$this->search_type]);
00598 }
00599 return true;
00600 }
00601
00602 function __appendToStoredResults($a_usr_ids)
00603 {
00604 if(!$_SESSION['search_append'])
00605 {
00606 return $_SESSION['rep_search']['usr'] = $a_usr_ids;
00607 }
00608 foreach($a_usr_ids as $usr_id)
00609 {
00610 $_SESSION['rep_search']['usr'][] = $usr_id;
00611 }
00612 return $_SESSION['rep_search']['usr'] ? array_unique($_SESSION['rep_search']['usr']) : array();
00613 }
00614
00615 function __storeEntries(&$new_res)
00616 {
00617 if($this->stored == false)
00618 {
00619 $this->result_obj->mergeEntries($new_res);
00620 $this->stored = true;
00621 return true;
00622 }
00623 else
00624 {
00625 $this->result_obj->intersectEntries($new_res);
00626 return true;
00627 }
00628 }
00629
00630 function __fillUserTable($user_ids)
00631 {
00632 $user_ids = $user_ids ? $user_ids : array();
00633
00634 $counter = 0;
00635 foreach($user_ids as $usr_id)
00636 {
00637 if(!is_object($tmp_obj = ilObjectFactory::getInstanceByObjId($usr_id,false)))
00638 {
00639 continue;
00640 }
00641
00642 $user_ids[$counter] = $usr_id;
00643
00644
00645 if ($tmp_obj->getTimeLimitUnlimited())
00646 {
00647 $txt_access = $this->lng->txt("access_unlimited");
00648 }
00649 elseif ($tmp_obj->getTimeLimitUntil() < time())
00650 {
00651 $txt_access = $this->lng->txt("access_expired");
00652 }
00653 else
00654 {
00655 $txt_access = ilFormat::formatUnixTime($tmp_obj->getTimeLimitUntil());
00656 }
00657
00658 $f_result[$counter][] = ilUtil::formCheckbox(0,"id[]",$usr_id);
00659 $f_result[$counter][] = $tmp_obj->getLogin();
00660 $f_result[$counter][] = $tmp_obj->getFirstname();
00661 $f_result[$counter][] = $tmp_obj->getLastname();
00662 $f_result[$counter][] = $tmp_obj->getEmail();
00663 $f_result[$counter][] = $txt_access;
00664 $f_result[$counter][] = $tmp_obj->getLastLogin();
00665 $f_result[$counter][] = $usr_id;
00666
00667 unset($tmp_obj);
00668 ++$counter;
00669 }
00670 return $f_result ? $f_result : array();
00671 }
00672
00673 function __fillGroupTable($group_ids)
00674 {
00675 $group_ids = $group_ids ? $group_ids : array();
00676
00677 $counter = 0;
00678 foreach($group_ids as $group_id)
00679 {
00680 if(!$tmp_obj = ilObjectFactory::getInstanceByRefId($ref_id = end(
00681 $ref_ids = ilObject::_getAllReferences($group_id)),false))
00682 {
00683 continue;
00684 }
00685 $grp_ids[$counter] = $group_id;
00686
00687 $f_result[$counter][] = ilUtil::formCheckbox(0,"group[]",$ref_id);
00688 $f_result[$counter][] = array($tmp_obj->getTitle(),$tmp_obj->getDescription());
00689 $f_result[$counter][] = $tmp_obj->getCountMembers();
00690
00691 unset($tmp_obj);
00692 ++$counter;
00693 }
00694 return $f_result ? $f_result : array();
00695 }
00696
00697 function __fillRoleTable($role_ids)
00698 {
00699 $role_ids = $role_ids ? $role_ids : array();
00700
00701 $counter = 0;
00702 foreach($role_ids as $role_id)
00703 {
00704
00705 if ($role_id == ANONYMOUS_ROLE_ID)
00706 {
00707 continue;
00708 }
00709 if(!$tmp_obj = ilObjectFactory::getInstanceByObjId($role_id,false))
00710 {
00711 continue;
00712 }
00713
00714 if ($tmp_obj->getCountMembers() == 0)
00715 {
00716 continue;
00717 }
00718 $role_ids[$counter] = $role_id;
00719
00720 $f_result[$counter][] = ilUtil::formCheckbox(0,"role[]",$role_id);
00721 $f_result[$counter][] = array($tmp_obj->getTitle(),$tmp_obj->getDescription());
00722 $f_result[$counter][] = $tmp_obj->getCountMembers();
00723
00724 unset($tmp_obj);
00725 ++$counter;
00726 }
00727 return $f_result ? $f_result : array();
00728 }
00729
00730
00731 function __showSearchResults()
00732 {
00733 $counter = 0;
00734 $f_result = array();
00735 switch($this->search_type)
00736 {
00737 case "usr":
00738 $result = $this->__fillUserTable($_SESSION['rep_search']['usr']);
00739 $this->__showSearchUserTable($result,$_SESSION['rep_search']['usr']);
00740 break;
00741
00742 case 'grp':
00743 $result = $this->__fillGroupTable($_SESSION['rep_search']['grp']);
00744 $this->__showSearchGroupTable($result,$_SESSION['rep_search']['grp']);
00745 break;
00746
00747 case 'role':
00748 $result = $this->__fillRoleTable($_SESSION['rep_search']['role']);
00749 $this->__showSearchRoleTable($result,$_SESSION['rep_search']['role']);
00750 break;
00751 }
00752
00753
00754 if($_SESSION['search_append'] and $this->search_type != 'usr')
00755 {
00756 $result = $this->__fillUserTable($_SESSION['rep_search']['usr']);
00757 $this->__showSearchUserTable($result,$_SESSION['rep_search']['usr'],'search','APPEND_TABLE');
00758
00759 }
00760 }
00761 function __showSearchUserTable($a_result_set,$a_user_ids = NULL,$a_cmd = "performSearch",$tpl_var = 'RES_TABLE')
00762 {
00763 if(!$a_result_set)
00764 {
00765 return false;
00766 }
00767
00768 $tbl =& $this->__initTableGUI();
00769 $tpl =& $tbl->getTemplateObject();
00770
00771
00772 $tpl->setCurrentBlock("tbl_form_header");
00773 $tpl->setVariable("FORMACTION",$this->ctrl->getFormAction($this));
00774 $tpl->parseCurrentBlock();
00775
00776 $operations = array(
00777 array("name" => "delete", "lng" => "delete"),
00778 array("name" => "activate", "lng" => "activate"),
00779 array("name" => "deactivate", "lng" => "deactivate"),
00780 array("name" => "accessRestrict", "lng" => "accessRestrict"),
00781 array("name" => "accessFree", "lng" => "accessFree"),
00782 array("name" => "export", "lng" => "export")
00783 );
00784
00785 if (count($operations) > 0)
00786 {
00787 $select = "<select name=\"selectedAction\">\n";
00788 foreach ($operations as $val)
00789 {
00790 $select .= "<option value=\"" . $val["name"] . "\"";
00791 if (strcmp($_POST["selectedAction"], $val["name"]) == 0)
00792 {
00793 $select .= " selected=\"selected\"";
00794 }
00795 $select .= ">";
00796 $select .= $this->lng->txt($val["lng"]);
00797 $select .= "</option>";
00798 }
00799 $select .= "</select>";
00800 $tpl->setCurrentBlock("tbl_action_select");
00801 $tpl->setVariable("SELECT_ACTION", $select);
00802 $tpl->setVariable("BTN_NAME", "userAction");
00803 $tpl->setVariable("BTN_VALUE", $this->lng->txt("submit"));
00804 $tpl->parseCurrentBlock();
00805 }
00806
00807 $tpl->setCurrentBlock("tbl_action_row");
00808 $tpl->setVariable("COLUMN_COUNTS",7);
00809 $tpl->setVariable("IMG_ARROW",ilUtil::getImagePath("arrow_downright.gif"));
00810 $tpl->parseCurrentBlock();
00811
00812 $tbl->setTitle($this->lng->txt("search_results"),"icon_usr.gif",$this->lng->txt("search_results"));
00813 $tbl->setHeaderNames(array("",
00814 $this->lng->txt("username"),
00815 $this->lng->txt("firstname"),
00816 $this->lng->txt("lastname"),
00817 $this->lng->txt("email"),
00818 $this->lng->txt("access_until"),
00819 $this->lng->txt("last_login")));
00820 $tbl->setHeaderVars(array("",
00821 "login",
00822 "firstname",
00823 "lastname",
00824 "email",
00825 "access_until",
00826 "last_login"),
00827 array("ref_id" => $_GET['ref_id'],
00828 "cmd" => ($_SESSION['usr_search_mode'] == 'extended') ? 'showExtended' : 'show',
00829 "cmdClass" => "iladminusersearchgui",
00830 "cmdNode" => $_GET["cmdNode"],
00831 "baseClass" => "ilAdministrationGUI"));
00832
00833 $tbl->setColumnWidth(array("","15%","15%","15%","20%","15%","20%"));
00834
00835 $this->__setTableGUIUserData($tbl,$a_result_set);
00836 $tbl->render();
00837
00838 $this->tpl->setVariable($tpl_var,$tbl->tpl->get());
00839
00840 return true;
00841 }
00842
00843 function __showSearchGroupTable($a_result_set,$a_grp_ids = NULL)
00844 {
00845 if(!$a_result_set)
00846 {
00847 return false;
00848 }
00849
00850 $tbl =& $this->__initTableGUI();
00851 $tpl =& $tbl->getTemplateObject();
00852
00853 $tpl->setCurrentBlock("tbl_form_header");
00854 $tpl->setVariable("FORMACTION",$this->ctrl->getFormAction($this));
00855 $tpl->parseCurrentBlock();
00856
00857 $tpl->setCurrentBlock("tbl_action_btn");
00858 $tpl->setVariable("BTN_NAME","listUsersGroup");
00859 $tpl->setVariable("BTN_VALUE",$this->lng->txt("crs_list_users"));
00860 $tpl->parseCurrentBlock();
00861
00862 if (!empty($a_grp_ids))
00863 {
00864 $tpl->setCurrentBlock("tbl_select_all");
00865 $tpl->setVariable("COLUMN_COUNTS",4);
00866 $tpl->setVariable("TXT_SELECT_ALL", $this->lng->txt("select_all"));
00867 $tpl->parseCurrentBlock();
00868 }
00869
00870 $tpl->setCurrentBlock("tbl_action_row");
00871 $tpl->setVariable("COLUMN_COUNTS",5);
00872 $tpl->setVariable("IMG_ARROW",ilUtil::getImagePath("arrow_downright.gif"));
00873 $tpl->parseCurrentBlock();
00874
00875 $tbl->setTitle($this->lng->txt("crs_header_edit_members"),"icon_grp.gif",$this->lng->txt("crs_header_edit_members"));
00876 $tbl->setHeaderNames(array("",
00877 $this->lng->txt("obj_grp"),
00878 $this->lng->txt("crs_count_members")));
00879 $tbl->setHeaderVars(array("",
00880 "title",
00881 "nr_members"),
00882 array("ref_id" => $_GET['ref_id'],
00883 "cmd" => "show",
00884 "cmdClass" => "ilsearchgui",
00885 "cmdNode" => $_GET["cmdNode"]));
00886
00887 $tbl->setColumnWidth(array("","80%","19%"));
00888
00889
00890 $this->__setTableGUIBasicData($tbl,$a_result_set,"group");
00891 $tbl->render();
00892
00893 $this->tpl->setVariable("RES_TABLE",$tbl->tpl->get());
00894
00895 return true;
00896 }
00897 function __showSearchRoleTable($a_result_set,$a_role_ids)
00898 {
00899 if(!$a_result_set)
00900 {
00901 return false;
00902 }
00903
00904 $tbl =& $this->__initTableGUI();
00905 $tpl =& $tbl->getTemplateObject();
00906
00907 $tpl->setCurrentBlock("tbl_form_header");
00908 $tpl->setVariable("FORMACTION",$this->ctrl->getFormAction($this));
00909 $tpl->parseCurrentBlock();
00910
00911 $tpl->setCurrentBlock("tbl_action_btn");
00912 $tpl->setVariable("BTN_NAME","listUsersRole");
00913 $tpl->setVariable("BTN_VALUE",$this->lng->txt("crs_list_users"));
00914 $tpl->parseCurrentBlock();
00915
00916 if (!empty($a_role_ids))
00917 {
00918 $tpl->setCurrentBlock("tbl_select_all");
00919 $tpl->setVariable("COLUMN_COUNTS",4);
00920 $tpl->setVariable("TXT_SELECT_ALL", $this->lng->txt("select_all"));
00921 $tpl->parseCurrentBlock();
00922 }
00923
00924 $tpl->setCurrentBlock("tbl_action_row");
00925 $tpl->setVariable("COLUMN_COUNTS",5);
00926 $tpl->setVariable("IMG_ARROW",ilUtil::getImagePath("arrow_downright.gif"));
00927 $tpl->parseCurrentBlock();
00928
00929 $tbl->setTitle($this->lng->txt("crs_header_edit_members"),"icon_role.gif",$this->lng->txt("crs_header_edit_members"));
00930 $tbl->setHeaderNames(array("",
00931 $this->lng->txt("objs_role"),
00932 $this->lng->txt("crs_count_members")));
00933 $tbl->setHeaderVars(array("",
00934 "title",
00935 "nr_members"),
00936 array("ref_id" => $_GET['ref_id'],
00937 "cmd" => "show",
00938 "cmdClass" => "iladminusersearchgui",
00939 "cmdNode" => $_GET["cmdNode"]));
00940
00941 $tbl->setColumnWidth(array("","80%","19%"));
00942
00943
00944 $this->__setTableGUIBasicData($tbl,$a_result_set,"role");
00945 $tbl->render();
00946
00947 $this->tpl->setVariable("RES_TABLE",$tbl->tpl->get());
00948
00949 return true;
00950 }
00951
00952
00953 function listUsersGroup()
00954 {
00955 global $rbacsystem,$tree;
00956
00957 $_SESSION["crs_group"] = $_POST["group"] = $_POST["group"] ? $_POST["group"] : $_SESSION["crs_group"];
00958
00959 if(!is_array($_POST["group"]))
00960 {
00961 ilUtil::sendInfo($this->lng->txt("crs_no_groups_selected"));
00962 $this->show();
00963
00964 return false;
00965 }
00966
00967 $this->__showSearch();
00968
00969
00970 $members = array();
00971 foreach($_POST["group"] as $group_id)
00972 {
00973 if(!$tmp_obj = ilObjectFactory::getInstanceByRefId($group_id))
00974 {
00975 continue;
00976 }
00977 $members = array_merge($tmp_obj->getGroupMemberIds(),$members);
00978
00979 unset($tmp_obj);
00980 }
00981 $this->__appendToStoredResults($members);
00982
00983 $result = $this->__fillUserTable($_SESSION['rep_search']['usr']);
00984 $this->__showSearchUserTable($result,$_SESSION['rep_search']['usr'],"listUsersGroup");
00985
00986 return true;
00987 }
00988 function listUsersRole()
00989 {
00990 global $rbacsystem,$rbacreview,$tree;
00991
00992 $_SESSION["crs_role"] = $_POST["role"] = $_POST["role"] ? $_POST["role"] : $_SESSION["crs_role"];
00993
00994 if(!is_array($_POST["role"]))
00995 {
00996 ilUtil::sendInfo($this->lng->txt("crs_no_roles_selected"));
00997 $this->show();
00998
00999 return false;
01000 }
01001
01002 $this->__showSearch();
01003
01004
01005 $members = array();
01006 foreach($_POST["role"] as $role_id)
01007 {
01008 $members = array_merge($rbacreview->assignedUsers($role_id),$members);
01009 }
01010 $members = $this->__appendToStoredResults($members);
01011
01012 $result = $this->__fillUserTable($_SESSION['rep_search']['usr']);
01013 $this->__showSearchUserTable($result,$user_ids,"listUsersRole");
01014
01015 return true;
01016 }
01017
01018
01019
01020 function __setTableGUIBasicData(&$tbl,&$result_set,$from = "")
01021 {
01022 global $ilUser;
01023
01024 switch($from)
01025 {
01026 case "group":
01027 $offset = $_GET["offset"];
01028 $order = $_GET["sort_by"] ? $_GET["sort_by"] : "title";
01029 $direction = $_GET["sort_order"];
01030 $tbl->setLimit(1000000);
01031 break;
01032
01033 case "role":
01034 $offset = $_GET["offset"];
01035 $order = $_GET["sort_by"] ? $_GET["sort_by"] : "title";
01036 $direction = $_GET["sort_order"];
01037 $tbl->setLimit(1000000);
01038 break;
01039
01040 default:
01041 $offset = $_GET["offset"];
01042
01043 if ($_GET["sort_by"] == "title" or empty($_GET["sort_by"]))
01044 {
01045 $_GET["sort_by"] = "login";
01046 }
01047 $order = $_GET["sort_by"];
01048 $direction = $_GET["sort_order"];
01049 $tbl->setLimit($ilUser->getPref('hits_per_page'));
01050 break;
01051 }
01052
01053 $tbl->setOrderColumn($order);
01054 $tbl->setOrderDirection($direction);
01055 $tbl->setOffset($offset);
01056 $tbl->setMaxCount(count($result_set));
01057 $tbl->setFooter("tblfooter",$this->lng->txt("previous"),$this->lng->txt("next"));
01058 $tbl->setData($result_set);
01059 }
01060
01061 function &__initTableGUI()
01062 {
01063 include_once "./Services/Table/classes/class.ilTableGUI.php";
01064
01065 return new ilTableGUI(0,false);
01066 }
01067
01068 function __setTableGUIUserData(&$tbl,&$result_set,$from = "")
01069 {
01070 global $ilUser;
01071
01072
01073 $_SESSION["usr_search_link"] = $this->ctrl->getLinkTarget($this,'show');
01074
01075 $tbl->disable("auto_sort");
01076 $tbl->enable("select_all");
01077 $tbl->setFormName("cmd");
01078 $tbl->setSelectAllCheckbox("id");
01079
01080 $offset = $_GET["offset"];
01081
01082 if ($_GET["sort_by"] == "title" or empty($_GET["sort_by"]))
01083 {
01084 $_GET["sort_by"] = "login";
01085 }
01086 $order = $_GET["sort_by"];
01087 $direction = $_GET["sort_order"];
01088 $tbl->setLimit($ilUser->getPref('hits_per_page'));
01089
01090 $tbl->setOrderColumn($order);
01091 $tbl->setOrderDirection($direction);
01092 $tbl->setOffset($offset);
01093 $tbl->setMaxCount(count($result_set));
01094 $tbl->setFooter("tblfooter",$this->lng->txt("previous"),$this->lng->txt("next"));
01095
01096 $order_key = 1;
01097
01098 foreach ($tbl->header_vars as $key => $val)
01099 {
01100 if ($order == $val)
01101 {
01102 $order_key = $key;
01103 break;
01104 }
01105 }
01106
01107
01108 $result_set = ilUtil::sortArray($result_set,$order_key,$direction);
01109 $result_set = array_slice($result_set,$offset,$ilUser->getPref('hits_per_page'));
01110
01111
01112 foreach ($result_set as $i => $row)
01113 {
01114 foreach ($row as $key => $cell)
01115 {
01116 if ($key == 1)
01117 {
01118
01119 $link = "ilias.php?ref_id=7&admin_mode=settings&obj_id=".$row[7]."&search=1&cmd=view&cmdClass=ilobjusergui&cmdNode=".$_SESSION["usergui_cmd_node"]."&baseClass=ilAdministrationGUI";
01120
01121
01122
01123 $result_set[$i][$key] = "<a href=\"".$link."\">".$cell."</a>";
01124 }
01125
01126 if ($key == "5")
01127 {
01128 if ($cell == $this->lng->txt("access_unlimited"))
01129 {
01130 $result_set[$i][$key] = "<span class=\"smallgreen\">".$cell."</span>";
01131 }
01132 elseif ($cell == $this->lng->txt("access_expired"))
01133 {
01134 $result_set[$i][$key] = "<span class=\"smallred\">".$cell."</span>";
01135 }
01136 else
01137 {
01138 $result_set[$i][$key] = "<span class=\"small\">".$cell."</span>";
01139 }
01140 }
01141
01142 unset($result_set[$i][7]);
01143 }
01144 }
01145
01146 $tbl->setData($result_set);
01147 }
01148
01149 function setCallbackClass(&$class)
01150 {
01151 $this->callback_class = $class;
01152 }
01153
01159 function cancelDelete()
01160 {
01161 session_unregister("saved_post");
01162 $class =& $this->callback_class;
01163
01164 $script = $class->ctrl->getLinkTargetByClass('ilAdminUserSearchGUI','show');
01165 ilUtil::sendInfo($this->lng->txt("msg_cancel"),true);
01166 ilUtil::redirect($script);
01167 }
01168
01169 function userAction()
01170 {
01171 $method = $_POST["selectedAction"];
01172 $_SESSION['user_" . $method . "_search'] = true;
01173 $class =& $this->callback_class;
01174 $class->showActionConfirmation($method);
01175 }
01176
01177 function delete()
01178 {
01179 $_SESSION['user_delete_search'] = true;
01180
01181
01182 $class =& $this->callback_class;
01183
01184 $class->deleteObject();
01185 }
01186
01187 function cancel()
01188 {
01189 ilUtil::sendInfo($this->lng->txt("msg_cancel"),true);
01190
01191 $this->ctrl->returnToParent($this);
01192 }
01193 }
01194 ?>