• Main Page
  • Related Pages
  • Modules
  • Namespaces
  • Data Structures
  • Files
  • File List
  • Globals

Services/Search/classes/class.ilAdminUserSearchGUI.php

Go to the documentation of this file.
00001 <?php
00002 /*
00003         +-----------------------------------------------------------------------------+
00004         | ILIAS open source                                                           |
00005         +-----------------------------------------------------------------------------+
00006         | Copyright (c) 1998-2001 ILIAS open source, University of Cologne            |
00007         |                                                                             |
00008         | This program is free software; you can redistribute it and/or               |
00009         | modify it under the terms of the GNU General Public License                 |
00010         | as published by the Free Software Foundation; either version 2              |
00011         | of the License, or (at your option) any later version.                      |
00012         |                                                                             |
00013         | This program is distributed in the hope that it will be useful,             |
00014         | but WITHOUT ANY WARRANTY; without even the implied warranty of              |
00015         | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               |
00016         | GNU General Public License for more details.                                |
00017         |                                                                             |
00018         | You should have received a copy of the GNU General Public License           |
00019         | along with this program; if not, write to the Free Software                 |
00020         | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. |
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":    // never called, see workaround in objuserfoldergui
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                 // delete all session info
00126                 //$this->__clearSession();
00127                 $this->showExtended();
00128 
00129                 return true;
00130         }
00131         
00132         function startSimple()
00133         {
00134                 // delete all session info
00135                 $this->__clearSession();
00136                 $_SESSION["usr_search_mode"] = "simple";
00137                 $this->performSearchSimple();
00138 
00139                 return true;
00140         }
00141 
00142         function startExtended()
00143         {
00144                 // delete all session info
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                 //add template for buttons
00157                 $this->tpl->addBlockfile("BUTTONS", "buttons", "tpl.buttons.html");
00158                 
00159                 // search extended
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                 //add template for buttons
00178                 $this->tpl->addBlockfile("BUTTONS", "buttons", "tpl.buttons.html");
00179 
00180                 // search extended
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                 // user search
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                 // groups
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                 // roles
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                 // unset search_append if called directly
00262                 if($_POST['cmd']['performSearchSimple'])
00263                 {
00264                         unset($_SESSION['search_append']);
00265                 }
00266 
00267                 // fields to search in
00268                 $_POST["search_fields"] = array ("username","firstname","lastname","email");
00269                 
00270                 // search only for active users
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                 // return if no user found
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                         // remove duplicate entries
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                 // unset search_append if called directly
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                 // show results
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                         // continue if no query string is given
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                                         // Store entries
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                                         // store entries
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                 // Perform like search
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         // Private
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                 // Update search type. Default to user search
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                 // active flag
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                         // remove duplicate entries
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             // determine txt_access
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                         // exclude anonymous role
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                         // exclude roles with no users assigned to
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                 // Finally fill user table, if search type append
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                 // SET FORMACTION
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                 // GET ALL MEMBERS
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                 // GET ALL MEMBERS
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                                 // init sort_by (unfortunatly sort_by is preset with 'title'
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                 // remember link target to admin search gui (this)
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                 // init sort_by (unfortunatly sort_by is preset with 'title'
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                 // sorting array
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                 // add user link and access info color
01112                 foreach ($result_set as $i => $row)
01113                 {
01114                         foreach ($row as $key => $cell)
01115                         {
01116                                 if ($key == 1)
01117                                 {
01118                                         //build link
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                                         //$this->ctrl->setParameterByClass("ilobjusergui", "ref_id", "7");
01121                                         //$this->ctrl->setParameterByClass("ilobjusergui", "obj_id", $row[7]);
01122                                         //$link = $this->ctrl->getLinkTargetByClass("ilobjusergui", "view");
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                 // call callback if that function does give a return value => show error message
01182                 $class =& $this->callback_class;
01183                 // listener redirects if everything is ok.
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 ?>

Generated on Fri Dec 13 2013 17:57:00 for ILIAS Release_3_9_x_branch .rev 46835 by  doxygen 1.7.1