00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 require_once "./classes/class.ilSearch.php";
00025 require_once "./classes/class.ilTableGUI.php";
00026 require_once "./classes/class.ilSearchGUIExplorer.php";
00027 require_once "./classes/class.ilSearchFolder.php";
00028
00037 class ilSearchGUI
00038 {
00044 var $ilias;
00045
00051 var $search;
00052 var $tpl;
00053 var $lng;
00054 var $tree;
00055
00056
00057 var $res_type;
00058 var $offset;
00059 var $sort_by;
00060 var $sort_order;
00061
00062 var $user_id;
00063 var $folder_id;
00064 var $folder_obj;
00065 var $viewmode;
00066
00067 var $message;
00068
00073 function ilSearchGUI($a_user_id = 0)
00074 {
00075 global $ilias,$tpl,$lng;
00076
00077
00078 #define("RESULT_LIMIT",$ilias->account->getPref("hits_per_page") ? $ilias->account->getPref("hits_per_page") : 3);
00079 define("RESULT_LIMIT",10);
00080
00081 $this->ilias =& $ilias;
00082 $this->tpl =& $tpl;
00083 $this->lng =& $lng;
00084 $this->lng->loadLanguageModule("search");
00085
00086
00087 $this->folder_id = $_GET["folder_id"];
00088 $this->res_type = $_GET["res_type"];
00089 $this->offset = $_GET["offset"];
00090 $this->sort_by = $_GET["sort_by"];
00091 $this->sort_order = $_GET["sort_order"];
00092
00093 $this->setFolderId($_GET["folder_id"]);
00094 $this->setViewmode($_GET["viewmode"]);
00095
00096 $this->setUserId($a_user_id);
00097
00098
00099 $this->search =& new ilSearch($a_user_id,true);
00100 $this->tree = new ilTree(1);
00101
00102
00103 $this->folder_obj =& new ilSearchFolder($a_user_id);
00104
00105 $this->performAction();
00106 }
00107
00108 function performAction()
00109 {
00110 if(isset($_POST["cmd"]["search"]))
00111 {
00112 $this->search();
00113 return true;
00114 }
00115 if(isset($_POST["cmd"]["search_res"]))
00116 {
00117 $this->searchInResult();
00118 return true;
00119 }
00120 if(!isset($_POST["cmd"]))
00121 {
00122 $this->__show();
00123 return true;
00124 }
00125
00126
00127 $this->__saveResult();
00128 $this->__show();
00129
00130 return true;
00131 }
00132
00133
00134 function setUserId($a_user_id)
00135 {
00136 $this->user_id = $a_user_id;
00137 }
00138 function getUserId()
00139 {
00140 return $this->user_id;
00141 }
00142
00143 function setFolderId($a_folder_id)
00144 {
00145 $this->folder_id = $a_folder_id ? $a_folder_id : 1;
00146 }
00147 function getFolderId()
00148 {
00149 return $this->folder_id;
00150 }
00151 function setViewmode($a_viewmode)
00152 {
00153 switch($a_viewmode)
00154 {
00155 case "flat":
00156 $this->viewmode = "flat";
00157 $_SESSION["s_viewmode"] = "flat";
00158 break;
00159
00160 case "tree":
00161 $this->viewmode = "tree";
00162 $_SESSION["s_viewmode"] = "tree";
00163 break;
00164
00165 default:
00166 $this->viewmode = $_SESSION["s_viewmode"] ? $_SESSION["s_viewmode"] : "flat";
00167 break;
00168 }
00169 }
00170 function getViewmode()
00171 {
00172 return $this->viewmode;
00173 }
00174
00175 function search($a_search_type = 'new')
00176 {
00177 global $ilBench;
00178
00179 $ilBench->start("Search", "search");
00180 $this->search->setSearchString($_POST["search_str"]);
00181 $this->search->setCombination($_POST["combination"]);
00182 $this->search->setSearchFor($_POST["search_for"]);
00183 $this->search->setSearchIn($_POST["search_in"]);
00184 $this->search->setSearchType($a_search_type);
00185 if($this->search->validate($this->message))
00186 {
00187 $this->search->performSearch();
00188 }
00189
00190 $this->offset = 0;
00191 $this->__show();
00192 $ilBench->stop("Search", "search");
00193 }
00194
00195 function searchInResult()
00196 {
00197 $this->search("result");
00198 }
00199
00200
00201 function __getFolderSelect($a_type,$a_search_in_type = '')
00202 {
00203 $subtree = $this->folder_obj->getSubtree();
00204
00205 $options[0] = $this->lng->txt("search_select_one_folder_select");
00206 $options[$this->folder_obj->getRootId()] = $this->lng->txt("search_save_as_select")." ".$this->lng->txt("search_search_results");
00207
00208 foreach($subtree as $node)
00209 {
00210 if($node["obj_id"] == $this->folder_obj->getRootId())
00211 {
00212 continue;
00213 }
00214
00215 $prefix = $this->lng->txt("search_save_as_select");
00216 for($i = 1; $i < $node["depth"];++$i)
00217 {
00218 $prefix .= " ";
00219 }
00220 $options[$node["obj_id"]] = $prefix.$node["title"];
00221 }
00222 return $select_str = ilUtil::formSelect(0,$a_type."_".$a_search_in_type,$options,false,true);
00223 }
00224
00225 function __showResult()
00226 {
00227 global $ilBench;
00228
00229 $ilBench->start("Search", "showResult");
00230
00231 if(!$this->search->getNumberOfResults() && $this->search->getSearchFor())
00232 {
00233 $this->message .= $this->lng->txt("search_no_match")."<br />";
00234 return false;
00235 }
00236 if($this->search->getResultByType("usr") and ( !$this->res_type or $this->res_type == 'usr'))
00237 {
00238 $this->__showResultTable("usr");
00239 }
00240 if($this->search->getResultByType("grp") and ( !$this->res_type or $this->res_type == 'grp'))
00241 {
00242 $this->__showResultTable("grp");
00243 }
00244 if($res = $this->search->getResultByType("dbk") and ( !$this->res_type or $this->res_type == 'dbk'))
00245 {
00246 if(count($res["meta"]))
00247 {
00248 $this->__showResultTable("dbk","meta");
00249 }
00250 if(count($res["content"]))
00251 {
00252 $this->__showResultTable("dbk","content");
00253 }
00254 }
00255 if($res = $this->search->getResultByType("lm") and ( !$this->res_type or $this->res_type == 'lm'))
00256 {
00257 if(count($res["meta"]))
00258 {
00259 $this->__showResultTable("lm","meta");
00260 }
00261 if(count($res["content"]))
00262 {
00263 $ilBench->start("Search", "showResultTable_lm_content");
00264 $this->__showResultTable("lm","content");$ilBench->start("Search", "showResultTable_lm_content");
00265 $ilBench->stop("Search", "showResultTable_lm_content");
00266 }
00267 }
00268
00269 $ilBench->stop("Search", "showResult");
00270
00271 }
00272
00273 function __addAction(&$tpl,$a_type,$a_search_in_type = '')
00274 {
00275 $tpl->setCurrentBlock("tbl_form_header");
00276 $tpl->setVariable("FORMACTION","search.php");
00277 $tpl->parseCurrentBlock();
00278
00279 $tpl->setCurrentBlock("tbl_action_select");
00280 $tpl->setVariable("SELECT_ACTION",$this->__getFolderSelect($a_type,$a_search_in_type));
00281 $tpl->setVariable("BTN_NAME",$a_type."_".$a_search_in_type);
00282 $tpl->setVariable("BTN_VALUE",$this->lng->txt("ok"));
00283 $tpl->parseCurrentBlock();
00284
00285 $tpl->setCurrentBlock("tbl_action_row");
00286 $tpl->setVariable("IMG_ARROW", ilUtil::getImagePath("arrow_downright.gif"));
00287 $tpl->setVariable("COLUMN_COUNTS",5);
00288
00289 $tpl->parseCurrentBlock();
00290 }
00291
00292 function __showResultTable($a_type, $a_search_in_type = '')
00293 {
00294 global $ilBench;
00295
00296
00297 $tbl = new ilTableGUI(0,false);
00298
00299 #$tpl =& new ilTemplate ("tpl.table.html", true, true);
00300
00301 #$tpl->addBlockFile(strtoupper($a_type),$a_type,"tpl.table.html");
00302
00303 $this->__addAction($tbl->getTemplateObject(),$a_type,$a_search_in_type);
00304
00305
00306 switch($a_type)
00307 {
00308 case "usr":
00309 $ilBench->start("Search", "showResultTable_usr");
00310 $tbl->setTitle($this->lng->txt("search_user"),"icon_usr_b.gif",$this->lng->txt("search_user"));
00311 $tbl->setHeaderNames(array("",$this->lng->txt("login"),$this->lng->txt("firstname")
00312 ,$this->lng->txt("lastname"),$this->lng->txt("search_show_result")));
00313 $tbl->setHeaderVars(array("","login","firstname","lastname",""),array("res_type" => "usr"));
00314 $tbl->setColumnWidth(array("3%","25%","25%","25%","25%"));
00315 $tbl->setData(array_values($this->__formatUserResult($this->search->getResultByType("usr"))));
00316 $ilBench->stop("Search", "showResultTable_usr");
00317 break;
00318
00319 case "grp":
00320 $ilBench->start("Search", "showResultTable_grp");
00321 $tbl->setTitle($this->lng->txt("search_group"),"icon_grp_b.gif",$this->lng->txt("search_group"));
00322 $tbl->setHeaderNames(array("",$this->lng->txt("title"),$this->lng->txt("description"),
00323 $this->lng->txt("search_show_result")));
00324 $tbl->setHeaderVars(array("","title","description",""),array("res_type" => "grp"));
00325 $tbl->setColumnWidth(array("3%","25%","25%","22%"));
00326 $tbl->setData(array_values($this->__formatGroupResult($this->search->getResultByType("grp"))));
00327 $ilBench->stop("Search", "showResultTable_grp");
00328 break;
00329
00330
00331 case "dbk":
00332
00333 switch($a_search_in_type)
00334 {
00335 case "meta":
00336 $ilBench->start("Search", "showResultTable_dbk_meta");
00337 $tbl->setTitle($this->lng->txt("search_dbk_meta"),"icon_dbk_b.gif",$this->lng->txt("search_dbk_meta"));
00338 $tbl->setHeaderNames(array("",$this->lng->txt("title"),$this->lng->txt("context"),
00339 $this->lng->txt("search_show_result")));
00340 $tbl->setHeaderVars(array("","title","context",""),array("res_type" => "dbk"));
00341
00342 $tbl->setColumnWidth(array("3%","50%","30%","17%"));
00343
00344 $tmp_res = $this->search->getResultByType("dbk");
00345 $tbl->setData($this->__formatDigiLibResult($tmp_res["meta"],"meta"));
00346 $ilBench->stop("Search", "showResultTable_dbk_meta");
00347 break;
00348
00349 case "content":
00350 $ilBench->start("Search", "showResultTable_dbk_content");
00351 $tbl->setTitle($this->lng->txt("search_dbk_content"),"icon_dbk_b.gif",$this->lng->txt("search_dbk_content"));
00352 $tbl->setHeaderNames(array("",$this->lng->txt("title"),$this->lng->txt("page"),$this->lng->txt("context"),
00353 $this->lng->txt("search_show_result")));
00354 $tbl->setHeaderVars(array("","title","page","context",""),array("res_type" => "dbk"));
00355
00356 $tbl->setColumnWidth(array("3%","30%","20%","30%","17%"));
00357
00358 $tmp_res = $this->search->getResultByType("dbk");
00359 $tbl->setData($this->__formatDigiLibResult($tmp_res["content"],"content"));
00360 $ilBench->stop("Search", "showResultTable_dbk_content");
00361 break;
00362 }
00363 break;
00364
00365 case "lm":
00366
00367
00368 switch($a_search_in_type)
00369 {
00370 case "meta":
00371 $ilBench->start("Search", "showResultTable_lm_meta");
00372 $tbl->setTitle($this->lng->txt("search_lm_meta"),"icon_lm_b.gif",$this->lng->txt("search_lm_meta"));
00373 $tbl->setHeaderNames(array("",$this->lng->txt("title"),$this->lng->txt("context"),
00374 $this->lng->txt("search_show_result")));
00375 $tbl->setHeaderVars(array("","title","context",""),array("res_type" => "lm"));
00376
00377 $tbl->setColumnWidth(array("3%","50%","30%","17%"));
00378
00379 $tmp_res = $this->search->getResultByType("lm");
00380 $tbl->setData($this->__formatLearningModuleResult($tmp_res["meta"],"meta"));
00381 $ilBench->stop("Search", "showResultTable_lm_meta");
00382 break;
00383
00384 case "content":
00385 $ilBench->start("Search", "showResultTable_lm_content");
00386 $tbl->setTitle($this->lng->txt("search_lm_content"),"icon_lm_b.gif",$this->lng->txt("search_lm_content"));
00387 $tbl->setHeaderNames(array("",$this->lng->txt("title"),$this->lng->txt("page"),$this->lng->txt("context"),
00388 $this->lng->txt("search_show_result")));
00389 $tbl->setHeaderVars(array("","title","page","context",""),array("res_type" => "lm"));
00390
00391 $tbl->setColumnWidth(array("3%","30%","20%","30%","17%"));
00392
00393 $tmp_res = $this->search->getResultByType("lm");
00394 $tbl->setData($this->__formatLearningModuleResult($tmp_res["content"],"content"));
00395 $ilBench->stop("Search", "showResultTable_lm_content");
00396 break;
00397 }
00398 break;
00399 }
00400 $tbl->setOrderColumn($this->sort_by);
00401 $tbl->setOrderDirection($this->sort_order);
00402 $tbl->disable("sort");
00403 $tbl->setLimit(RESULT_LIMIT);
00404 $tbl->setOffset($this->offset);
00405 $tbl->setFooter("tblfooter",$this->lng->txt("previous"),$this->lng->txt("next"));
00406 #$tpl->setVariable(strtoupper($a_type),$tbl->render());
00407
00408 #$tbl->setTemplate($tpl);
00409 $tbl->render();
00410 $this->tpl->setVariable(strtoupper($a_type), $tbl->tpl->get());
00411 unset($tbl);
00412 }
00413
00414 function __show()
00415 {
00416
00417 $this->tpl->addBlockFile("CONTENT","content","tpl.search.html");
00418 $this->tpl->addBlockFile("STATUSLINE","statusline","tpl.statusline.html");
00419 infoPanel();
00420 $this->tpl->setVariable("SEARCH_ACTION","./search.php");
00421
00422 #$this->tpl->setVariable("TXT_SEARCH",$this->lng->txt("search"));
00423
00424 $this->__showHeader();
00425 $this->__showLocator();
00426 $this->__showTabs();
00427 $this->__showResult();
00428
00429 if($this->message)
00430 {
00431 sendInfo($this->message);
00432 }
00433
00434 $this->tpl->setVariable("FORM_SEARCH_STR",$this->search->getSearchString());
00435 $this->tpl->setVariable("OR_CHECKED",$this->search->getCombination() == "or" ? "checked=\"checked\"" : "");
00436 $this->tpl->setVariable("AND_CHECKED",$this->search->getCombination() == "and" ? "checked=\"checked\"" : "");
00437 $this->tpl->setVariable("TXT_AND",$this->lng->txt("search_and"));
00438 $this->tpl->setVariable("TXT_OR",$this->lng->txt("search_or"));
00439
00440 $search_for = $this->search->getSearchFor();
00441
00442 $this->tpl->setVariable("LM_CHECKED",in_array("lm",$search_for) ? "checked=\"checked\"" : "");
00443 $this->tpl->setVariable("DBK_CHECKED",in_array("dbk",$search_for) ? "checked=\"checked\"" : "");
00444
00445
00446 if ($this->ilias->account->getId() != ANONYMOUS_USER_ID)
00447 {
00448 $this->tpl->setVariable("USR_CHECKED",in_array("usr",$search_for) ? "checked=\"checked\"" : "");
00449 $this->tpl->setVariable("GRP_CHECKED",in_array("grp",$search_for) ? "checked=\"checked\"" : "");
00450 }
00451
00452 $search_in = array("meta" => $this->lng->txt("search_meta"),"content" => $this->lng->txt("search_content"));
00453
00454 $this->tpl->setVariable("LM_SELECT",ilUtil::formSelect($this->search->getSearchInByType("lm")
00455 ,"search_in[lm]",$search_in,false,true));
00456 $this->tpl->setVariable("DBK_SELECT",ilUtil::formSelect($this->search->getSearchInByType("dbk")
00457 ,"search_in[dbk]",$search_in,false,true));
00458
00459
00460 $this->tpl->setVariable("TXT_LM",$this->lng->txt("obj_lm"));
00461 $this->tpl->setVariable("TXT_DBK",$this->lng->txt("obj_dbk"));
00462
00463 if ($this->ilias->account->getId() != ANONYMOUS_USER_ID)
00464 {
00465 $this->tpl->setVariable("TXT_USER",$this->lng->txt("obj_usr"));
00466 $this->tpl->setVariable("TXT_GROUPS",$this->lng->txt("obj_grp"));
00467 }
00468
00469
00470 $this->tpl->setVariable("TXT_SEARCHTERM",$this->lng->txt("search_search_term"));
00471 $this->tpl->setVariable("TXT_CONCATENATION",$this->lng->txt("search_concatenation"));
00472 $this->tpl->setVariable("TXT_SEARCH_FOR",$this->lng->txt("search_search_for"));
00473
00474
00475 $this->tpl->setVariable("BTN_SEARCH",$this->lng->txt("search"));
00476 $this->tpl->setVariable("BTN_SEARCH_RESULT",$this->lng->txt("search_in_result"));
00477 }
00478
00479 function __showHeader()
00480 {
00481 if($this->getFolderId() == $this->folder_obj->getRootId())
00482 {
00483 $this->tpl->setVariable("TXT_HEADER",$this->lng->txt("search"));
00484 }
00485 else
00486 {
00487
00488 }
00489 }
00490
00491 function __showLocator()
00492 {
00493 $this->tpl->addBlockFile("LOCATOR","locator","tpl.locator.html");
00494
00495
00496 $this->tpl->setCurrentBlock("locator_item");
00497 $this->tpl->setVariable("LINK_ITEM","./search.php");
00498 $this->tpl->setVariable("LINK_TARGET", ilFrameTargetInfo::_getFrame("MainContent"));
00499 $this->tpl->setVariable("ITEM",$this->lng->txt("mail_search_word"));
00500 $this->tpl->parseCurrentBlock();
00501
00502 $this->tpl->setCurrentBlock("locator");
00503 $this->tpl->setVariable("TXT_LOCATOR",$this->lng->txt("locator"));
00504 $this->tpl->parseCurrentBlock();
00505
00506 }
00507
00508 function __showTabs()
00509 {
00510 $this->tpl->addBlockFile("TABS","tabs","tpl.tabs.html");
00511
00512
00513 $this->tpl->setCurrentBlock("tab");
00514 $this->tpl->setVariable("TAB_TYPE","tabinactive");
00515 $this->tpl->setVariable("TAB_LINK","search_administration.php");
00516 $this->tpl->setVariable("TAB_TEXT",$this->lng->txt("search_search_results"));
00517 $this->tpl->parseCurrentBlock();
00518
00519 if($this->res_type)
00520 {
00521 $this->tpl->setCurrentBlock("tab");
00522 $this->tpl->setVariable("TAB_TYPE","tabinactive");
00523 $this->tpl->setVariable("TAB_LINK","search.php");
00524 $this->tpl->setVariable("TAB_TEXT",$this->lng->txt("search_all_results"));
00525 $this->tpl->parseCurrentBlock();
00526 }
00527
00528 return true;
00529 }
00530 function __formatLink($a_link,$a_target)
00531 {
00532 return "<a href=\"".$a_link."\" target=\"".$a_target."\".>".$this->lng->txt("search_show_result");
00533 }
00534
00535 function __formatUserResult($a_res)
00536 {
00537 if(!is_array($a_res))
00538 {
00539 return array();
00540 }
00541 include_once "./classes/class.ilObjectFactory.php";
00542
00543 $counter = 0;
00544 foreach($a_res as $user)
00545 {
00546 if($counter < $this->offset or $counter >= $this->offset + RESULT_LIMIT)
00547 {
00548 ++$counter;
00549 $f_result[$counter] = array();
00550 continue;
00551 }
00552
00553 if(!ilObjectFactory::ObjectIdExists($user["id"]))
00554 {
00555 ++$counter;
00556 continue;
00557 }
00558 $tmp_obj = ilObjectFactory::getInstanceByObjId($user["id"]);
00559
00560 $f_result[$counter][] = ilUtil::formCheckbox(0,"usr[]",$counter);
00561 $f_result[$counter][] = $tmp_obj->getLogin();
00562 $f_result[$counter][] = $tmp_obj->getFirstname();
00563 $f_result[$counter][] = $tmp_obj->getLastname();
00564
00565 list($user["link"],$user["target"]) = ilObjUser::_getLinkToObject($user["id"]);
00566 $f_result[$counter][] = $this->__formatLink($user["link"],$user["target"]);
00567
00568 unset($tmp_obj);
00569 ++$counter;
00570 }
00571 return $f_result ? $f_result : array();
00572 }
00573
00574 function __formatGroupResult($a_res)
00575 {
00576 if(!is_array($a_res))
00577 {
00578 return array();
00579 }
00580 include_once "./classes/class.ilObjectFactory.php";
00581
00582 $counter = 0;
00583 foreach($a_res as $group)
00584 {
00585 if($counter < $this->offset or $counter >= $this->offset + RESULT_LIMIT)
00586 {
00587 ++$counter;
00588 $f_result[$counter] = array();
00589 continue;
00590 }
00591
00592 if(!$this->tree->isInTree($group["id"]))
00593 {
00594 ++$counter;
00595 continue;
00596 }
00597 $tmp_obj = ilObjectFactory::getInstanceByRefId($group["id"]);
00598
00599 $f_result[$counter][] = ilUtil::formCheckbox(0,"grp[]",$counter);
00600 $f_result[$counter][] = $tmp_obj->getTitle();
00601 $f_result[$counter][] = $tmp_obj->getDescription();
00602
00603 list($group["link"],$group["target"]) = ilObjGroup::_getLinkToObject($group["id"]);
00604 $f_result[$counter][] = $this->__formatLink($group["link"],$group["target"]);
00605
00606 unset($tmp_obj);
00607 ++$counter;
00608 }
00609 return $f_result ? $f_result : array();
00610 }
00611
00612 function __formatDigiLibResult($a_res,$a_search_in)
00613 {
00614 if(!is_array($a_res))
00615 {
00616 return array();
00617 }
00618 include_once "./classes/class.ilObjectFactory.php";
00619
00620 $counter = 0;
00621 foreach($a_res as $book)
00622 {
00623 if($counter < $this->offset or $counter >= $this->offset + RESULT_LIMIT)
00624 {
00625 ++$counter;
00626 $f_result[$counter] = array();
00627 continue;
00628 }
00629
00630 if(!$this->tree->isInTree($book["id"]))
00631 {
00632 ++$counter;
00633 continue;
00634 }
00635 $tmp_obj = ilObjectFactory::getInstanceByRefId($book["id"]);
00636 switch($a_search_in)
00637 {
00638 case "meta":
00639 $f_result[$counter][] = ilUtil::formCheckbox(0,"dbk[meta][]",$counter);
00640 $f_result[$counter][] = $tmp_obj->getTitle();
00641 $f_result[$counter][] = $this->__getContextPath($book["id"]);
00642
00643 include_once "./content/classes/class.ilObjDlBook.php";
00644 list($book["link"],$book["target"]) = ilObjDlBook::_getLinkToObject($book["id"],"meta");
00645 $f_result[$counter][] = $this->__formatLink($book["link"],$book["target"]);
00646
00647 break;
00648
00649 case "content":
00650
00651 include_once ("content/classes/class.ilLMObjectFactory.php");
00652
00653 $tmp_page_obj = ilLMObjectFactory::getInstance($tmp_obj, $book["page_id"]);
00654 if(!is_object($tmp_page_obj))
00655 {
00656 ++$counter;
00657 continue;
00658 }
00659 $tmp_page_obj->setLMId($book["id"]);
00660
00661 $f_result[$counter][] = ilUtil::formCheckbox(0,"dbk[content][]",$counter);
00662 $f_result[$counter][] = $tmp_obj->getTitle();
00663
00664 $f_result[$counter][] =
00665 ilLMPageObject::_getPresentationTitle($book["page_id"],$tmp_obj->getPageHeader());
00666 $f_result[$counter][] = $this->__getContextPath($book["id"]);
00667
00668 include_once "./content/classes/class.ilObjDlBook.php";
00669 list($book["link"],$book["target"]) = ilObjDlBook::_getLinkToObject($book["id"],"content",$book["page_id"]);
00670
00671 $f_result[$counter][] = $this->__formatLink($book["link"],$book["target"]);
00672
00673 unset($tmp_page_obj);
00674 break;
00675 }
00676 unset($tmp_obj);
00677 ++$counter;
00678 }
00679
00680 return $f_result ? $f_result : array();
00681 }
00682
00683 function __formatLearningModuleResult($a_res,$a_search_in)
00684 {
00685 if(!is_array($a_res))
00686 {
00687 return array();
00688 }
00689 include_once "./classes/class.ilObjectFactory.php";
00690
00691 $counter = 0;
00692 foreach($a_res as $book)
00693 {
00694 if($counter < $this->offset or $counter >= $this->offset + RESULT_LIMIT)
00695 {
00696 ++$counter;
00697 $f_result[$counter] = array();
00698 continue;
00699 }
00700
00701 if(!$this->tree->isInTree($book["id"]))
00702 {
00703 ++$counter;
00704 continue;
00705 }
00706 $tmp_obj = ilObjectFactory::getInstanceByRefId($book["id"]);
00707 switch($a_search_in)
00708 {
00709 case "meta":
00710 $f_result[$counter][] = ilUtil::formCheckbox(0,"lm[meta][]",$counter);
00711 $f_result[$counter][] = $tmp_obj->getTitle();
00712 $f_result[$counter][] = $this->__getContextPath($book["id"]);
00713
00714 include_once "./content/classes/class.ilObjContentObject.php";
00715
00716 list($book["link"],$book["target"]) = ilObjContentObject::_getLinkToObject($book["id"],"meta");
00717 $f_result[$counter][] = $this->__formatLink($book["link"],$book["target"]);
00718 break;
00719
00720 case "content":
00721
00722 include_once ("content/classes/class.ilLMObjectFactory.php");
00723
00724 $tmp_page_obj = ilLMObjectFactory::getInstance($tmp_obj, $book["page_id"]);
00725 if(!is_object($tmp_page_obj))
00726 {
00727 ++$counter;
00728 continue;
00729 }
00730 $tmp_page_obj->setLMId($book["id"]);
00731
00732 $f_result[$counter][] = ilUtil::formCheckbox(0,"lm[content][]",$counter);
00733 $f_result[$counter][] = $tmp_obj->getTitle();
00734
00735 $f_result[$counter][] =
00736 ilLMPageObject::_getPresentationTitle($book["page_id"],$tmp_obj->getPageHeader());
00737 $f_result[$counter][] = $this->__getContextPath($book["id"]);
00738
00739 include_once "./content/classes/class.ilObjContentObject.php";
00740
00741 list($book["link"],$book["target"]) = ilObjContentObject::_getLinkToObject($book["id"],"content",$book["page_id"]);
00742
00743 $f_result[$counter][] = $this->__formatLink($book["link"],$book["target"]);
00744
00745 unset($tmp_page_obj);
00746 break;
00747 }
00748
00749 unset($tmp_obj);
00750 ++$counter;
00751 }
00752 return $f_result ? $f_result : array();
00753 }
00754
00755 function __getContextPath($a_endnode_id, $a_startnode_id = 1)
00756 {
00757 $path = "";
00758
00759 if(!$this->tree->isInTree($a_startnode_id) or !$this->tree->isInTree($a_endnode_id))
00760 {
00761 return '';
00762 }
00763 $tmpPath = $this->tree->getPathFull($a_endnode_id, $a_startnode_id);
00764
00765
00766 for ($i = 1; $i < (count($tmpPath) - 1); $i++)
00767 {
00768 if ($path != "")
00769 {
00770 $path .= " > ";
00771 }
00772
00773 $path .= $tmpPath[$i]["title"];
00774 }
00775 return $path;
00776 }
00777
00778 function __saveResult()
00779 {
00780
00781 if(isset($_POST["cmd"]["dbk_content"]))
00782 {
00783 $type = "dbk";
00784 $subtype = "content";
00785
00786 if(!is_array($_POST["dbk"]["content"]))
00787 {
00788 $this->message = $this->lng->txt("search_select_one_result")."<br />";
00789 }
00790 }
00791 if(isset($_POST["cmd"]["dbk_meta"]))
00792 {
00793 $type = "dbk";
00794 $subtype = "meta";
00795 if(!is_array($_POST["dbk"]["meta"]))
00796 {
00797 $this->message = $this->lng->txt("search_select_one_result")."<br />";
00798 }
00799 }
00800 if(isset($_POST["cmd"]["lm_content"]))
00801 {
00802 $type = "lm";
00803 $subtype = "content";
00804 if(!is_array($_POST["lm"]["content"]))
00805 {
00806 $this->message = $this->lng->txt("search_select_one_result")."<br />";
00807 }
00808 }
00809 if(isset($_POST["cmd"]["lm_meta"]))
00810 {
00811 $type = "lm";
00812 $subtype = "meta";
00813 if(!is_array($_POST["lm"]["meta"]))
00814 {
00815 $this->message = $this->lng->txt("search_select_one_result")."<br />";
00816 }
00817 }
00818 if(isset($_POST["cmd"]["grp_"]))
00819 {
00820 $type = "grp";
00821 $subtype = "";
00822 if(!is_array($_POST["grp"]))
00823 {
00824 $this->message = $this->lng->txt("search_select_one_result")."<br />";
00825 }
00826 }
00827 if(isset($_POST["cmd"]["usr_"]))
00828 {
00829 $type = "usr";
00830 $subtype = "";
00831 if(!is_array($_POST["usr"]))
00832 {
00833 $this->message = $this->lng->txt("search_select_one_result")."<br />";
00834 }
00835 }
00836
00837 if(!$_POST[$type."_".$subtype])
00838 {
00839 $this->message .= $this->lng->txt("search_select_one")."<br />";
00840 }
00841
00842 if(!$this->message)
00843 {
00844 $this->__save($type,$subtype);
00845 }
00846 }
00847
00848 function __save($a_type,$a_subtype = '')
00849 {
00850 include_once "./classes/class.ilSearchResult.php";
00851
00852 $tmp_folder_obj =& new ilSearchFolder($this->getUserId(),$_POST[$a_type."_".$a_subtype]);
00853
00854 $tmp_result = $this->search->getResultByType($a_type);
00855
00856 switch($a_type)
00857 {
00858 case "lm":
00859 case "dbk":
00860 foreach($_POST[$a_type][$a_subtype] as $result_id)
00861 {
00862 if(!$this->tree->isInTree($tmp_result[$a_subtype][$result_id]["id"]))
00863 {
00864 continue;
00865 }
00866 $tmp_obj = ilObjectFactory::getInstanceByRefId($tmp_result[$a_subtype][$result_id]["id"]);
00867 $title = $tmp_obj->getTitle();
00868
00869 if($a_subtype == "meta")
00870 {
00871 $target = addslashes(serialize(array("type" => $a_type,
00872 "subtype" => $a_subtype,
00873 "id" => $tmp_result[$a_subtype][$result_id]["id"])));
00874 }
00875 else
00876 {
00877 include_once ("content/classes/class.ilLMObjectFactory.php");
00878
00879 $tmp_page_obj = ilLMObjectFactory::getInstance($tmp_obj,$tmp_result[$a_subtype][$result_id]["page_id"]);
00880 if(!is_object($tmp_page_obj))
00881 {
00882 continue;
00883 }
00884 $tmp_page_obj->setLMId($tmp_result[$a_subtype][$result_id]["id"]);
00885
00886
00887 $title .= " -> ".
00888 ilLMPageObject::_getPresentationTitle($tmp_result[$a_subtype][$result_id]["page_id"], $tmp_obj->getPageHeader());
00889
00890 $target = addslashes(serialize(array("type" => $a_type,
00891 "subtype" => $a_subtype,
00892 "id" => $tmp_result[$a_subtype][$result_id]["id"],
00893 "page_id" => $tmp_result[$a_subtype][$result_id]["page_id"])));
00894 }
00895 $search_res_obj =& new ilSearchResult($this->getUserId());
00896 $search_res_obj->setTitle($title);
00897 $search_res_obj->setTarget($target);
00898
00899 $tmp_folder_obj->assignResult($search_res_obj);
00900
00901 unset($search_res_obj);
00902 }
00903 break;
00904
00905 case "grp":
00906 foreach($_POST["grp"] as $result_id)
00907 {
00908 $tmp_obj = ilObjectFactory::getInstanceByRefId($tmp_result[$result_id]["id"]);
00909
00910 $title = $tmp_obj->getTitle();
00911 if($tmp_obj->getDescription())
00912 {
00913 $title .= " (".$tmp_obj->getDescription().")";
00914 }
00915 $target = addslashes(serialize(array("type" => $a_type,
00916 "id" => $tmp_result[$result_id]["id"])));
00917 $search_res_obj =& new ilSearchResult($this->getUserId());
00918 $search_res_obj->setTitle($title);
00919 $search_res_obj->setTarget($target);
00920
00921 $tmp_folder_obj->assignResult($search_res_obj);
00922
00923 unset($search_res_obj);
00924 }
00925 break;
00926 case "usr":
00927 foreach($_POST["usr"] as $result_id)
00928 {
00929
00930 $tmp_obj = ilObjectFactory::getInstanceByObjId($tmp_result[$result_id]["id"]);
00931
00932 $title = $tmp_obj->getFirstname();
00933 $title .= " ".$tmp_obj->getLastname();
00934 $title .= " (".$tmp_obj->getLogin().")";
00935
00936 $target = addslashes(serialize(array("type" => $a_type,
00937 "id" => $tmp_result[$result_id]["id"])));
00938
00939 $search_res_obj =& new ilSearchResult($this->getUserId());
00940 $search_res_obj->setTitle($title);
00941 $search_res_obj->setTarget($target);
00942
00943 $tmp_folder_obj->assignResult($search_res_obj);
00944
00945 unset($search_res_obj);
00946 }
00947 break;
00948 }
00949
00950 unset($tmp_folder_obj);
00951
00952 $this->message = $this->lng->txt("search_results_saved");
00953 }
00954 }
00955 ?>