ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
class.ilSearchGUI.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3
4include_once 'Services/Search/classes/class.ilSearchBaseGUI.php';
5
6
7
23{
24 protected $search_cache = null;
25
26 public $root_node;
28 public $string;
29 public $type;
30
31
36 public function __construct()
37 {
38 global $ilUser, $lng;
39
40 $lng->loadLanguageModule("search");
41
42 // put form values into "old" post variables
44 $this->form->checkInput();
45
46 $new_search = isset($_POST['cmd']['performSearch']) ? true : false;
47
48 $enabled_types = ilSearchSettings::getInstance()->getEnabledLuceneItemFilterDefinitions();
49 foreach ($enabled_types as $type => $pval) {
50 if ($_POST['filter_type'][$type] == 1) {
51 $_POST["search"]["details"][$type] = $_POST['filter_type'][$type];
52 }
53 }
54
55 $_POST["search"]["string"] = $_POST["term"];
56 $_POST["search"]["combination"] = $_POST["combination"];
57 $_POST["search"]["type"] = $_POST["type"];
58 $_SESSION['search_root'] = $_POST["area"];
59
60 $this->root_node = $_SESSION['search_root'] ? $_SESSION['search_root'] : ROOT_FOLDER_ID;
61 $this->setType($_POST['search']['type'] ? $_POST['search']['type'] : $_SESSION['search']['type']);
62 $this->setCombination($_POST['search']['combination'] ? $_POST['search']['combination'] : $_SESSION['search']['combination']);
63 $this->setString($_POST['search']['string'] ? $_POST['search']['string'] : $_SESSION['search']['string']);
64 #$this->setDetails($_POST['search']['details'] ? $_POST['search']['details'] : $_SESSION['search']['details']);
65 $this->setDetails($new_search ? $_POST['search']['details'] : $_SESSION['search']['details']);
66 parent::__construct();
67 }
68
69
74 public function executeCommand()
75 {
76 global $rbacsystem, $ilCtrl;
77
78
79
80 $next_class = $this->ctrl->getNextClass($this);
81 $cmd = $this->ctrl->getCmd();
82
83 switch ($next_class) {
84 case "ilpropertyformgui":
85 //$this->initStandardSearchForm(ilSearchBaseGUI::SEARCH_FORM_STANDARD);
86 $form = $this->getSearchAreaForm();
87 $this->prepareOutput();
88 $ilCtrl->setReturn($this, 'storeRoot');
89 return $ilCtrl->forwardCommand($form);
90
91 case 'ilobjectcopygui':
92 $this->prepareOutput();
93 $this->ctrl->setReturn($this, '');
94 include_once './Services/Object/classes/class.ilObjectCopyGUI.php';
95 $cp = new ilObjectCopyGUI($this);
96 $this->ctrl->forwardCommand($cp);
97 break;
98
99 default:
100 $this->initUserSearchCache();
101 if (!$cmd) {
102 $cmd = "showSavedResults";
103 }
104 $this->prepareOutput();
105 $this->handleCommand($cmd);
106 break;
107 }
108 return true;
109 }
110
115 public function setType($a_type)
116 {
117 $_SESSION['search']['type'] = $this->type = $a_type;
118 }
119 public function getType()
120 {
121 return $this->type ? $this->type : ilSearchBaseGUI::SEARCH_FAST;
122 }
127 public function setCombination($a_combination)
128 {
129 $_SESSION['search']['combination'] = $this->combination = $a_combination;
130 }
131 public function getCombination()
132 {
133 return $this->combination ? $this->combination : ilSearchBaseGUI::SEARCH_OR;
134 }
139 public function setString($a_str)
140 {
141 $_SESSION['search']['string'] = $this->string = $a_str;
142 }
143 public function getString()
144 {
145 return $this->string;
146 }
151 public function setDetails($a_details)
152 {
153 $_SESSION['search']['details'] = $this->details = $a_details;
154 }
155 public function getDetails()
156 {
157 return $this->details ? $this->details : array();
158 }
159
160
161 public function getRootNode()
162 {
163 return $this->root_node ? $this->root_node : ROOT_FOLDER_ID;
164 }
165 public function setRootNode($a_node_id)
166 {
167 $_SESSION['search_root'] = $this->root_node = $a_node_id;
168 }
169
170
171 public function remoteSearch()
172 {
173 $this->setString(ilUtil::stripSlashes($_POST['queryString']));
174 $this->setRootNode((int) $_POST['root_id']);
175 $this->performSearch();
176 }
177
181 protected function storeRoot()
182 {
183 $form = $this->getSearchAreaForm();
184
185 $this->root_node = $form->getItemByPostVar('area')->getValue();
186 $this->search_cache->setRoot($this->root_node);
187 $this->search_cache->save();
188 $this->search_cache->deleteCachedEntries();
189
190 include_once './Services/Object/classes/class.ilSubItemListGUI.php';
192
193 $this->performSearch();
194 }
195
199 public function autoComplete()
200 {
201 if ((int) $_REQUEST['search_type'] == -1) {
202 $a_fields = array('login','firstname','lastname','email');
203 $result_field = 'login';
204
205 // Starting user autocomplete search
206 include_once './Services/User/classes/class.ilUserAutoComplete.php';
207 $auto = new ilUserAutoComplete();
208
209
210 $auto->setMoreLinkAvailable(true);
211 $auto->setSearchFields($a_fields);
212 $auto->setResultField($result_field);
213 $auto->enableFieldSearchableCheck(true);
214 $auto->setUserLimitations(true);
215
216 $res = $auto->getList($_REQUEST['term']);
217
218 $res_obj = json_decode($res);
219
220 ilLoggerFactory::getLogger('sea')->debug($res);
221
222
223 ilLoggerFactory::getLogger('sea')->dump($res_obj->items, ilLogLevel::DEBUG);
224 if (is_array($res_obj->items)) {
225 echo json_encode($res_obj->items);
226 exit;
227 }
228 } else {
229 $q = $_REQUEST["term"];
230 include_once("./Services/Search/classes/class.ilSearchAutoComplete.php");
232 ilLoggerFactory::getLogger('sea')->dump(json_decode($list));
233 echo $list;
234 exit;
235 }
236 }
237
238 public function showSearch()
239 {
240 global $ilLocator, $ilCtrl, $lng;
241
242 // include js needed
243 include_once("./Services/UIComponent/Overlay/classes/class.ilOverlayGUI.php");
245 $this->tpl->addJavascript("./Services/Search/js/Search.js");
246
247 include_once("./Services/UIComponent/Glyph/classes/class.ilGlyphGUI.php");
248
249 $this->tpl->addBlockFile('ADM_CONTENT', 'adm_content', 'tpl.search.html', 'Services/Search');
250 $this->tpl->setVariable("FORM_ACTION", $ilCtrl->getFormAction($this, 'performSearch'));
251 $this->tpl->setVariable("TERM", ilUtil::prepareFormOutput($this->getString()));
252 include_once("./Services/UIComponent/Button/classes/class.ilSubmitButton.php");
254 $btn->setCommand("performSearch");
255 $btn->setCaption("search");
256 $this->tpl->setVariable("SUBMIT_BTN", $btn->render());
257 $this->tpl->setVariable("TXT_OPTIONS", $lng->txt("options"));
258 $this->tpl->setVariable("ARR_IMG", ilGlyphGUI::get(ilGlyphGUI::CARET));
259 $this->tpl->setVariable("TXT_COMBINATION", $lng->txt("search_term_combination"));
260 $this->tpl->setVariable('TXT_COMBINATION_DEFAULT', ilSearchSettings::getInstance()->getDefaultOperator() == ilSearchSettings::OPERATOR_AND ? $lng->txt('search_all_words') : $lng->txt('search_any_word'));
261
262 if (ilSearchSettings::getInstance()->isLuceneItemFilterEnabled()) {
263 $this->tpl->setCurrentBlock("type_sel");
264 $this->tpl->setVariable('TXT_TYPE_DEFAULT', $lng->txt("search_fast_info"));
265 $this->tpl->setVariable("TXT_TYPE", $lng->txt("search_type"));
267 $this->tpl->setVariable("ARR_IMGT", ilGlyphGUI::get(ilGlyphGUI::CARET));
268 $this->tpl->setVariable("FORM", $this->form->getHTML());
269 $this->tpl->parseCurrentBlock();
270 }
271
272 if (ilSearchSettings::getInstance()->isDateFilterEnabled()) {
273 // begin-patch creation_date
274 $this->tpl->setVariable('TXT_FILTER_BY_CDATE', $this->lng->txt('search_filter_cd'));
275 $this->tpl->setVariable('TXT_CD_OFF', $this->lng->txt('search_off'));
276 $this->tpl->setVariable('FORM_CD', $this->getCreationDateForm()->getHTML());
277 $this->tpl->setVariable("ARR_IMG_CD", ilGlyphGUI::get(ilGlyphGUI::CARET));
278 // end-patch creation_date
279 }
280
281
282 $this->tpl->setVariable("TXT_AREA", $lng->txt("search_area"));
283
284 // search area form
285 $this->tpl->setVariable('SEARCH_AREA_FORM', $this->getSearchAreaForm()->getHTML());
286
287 return true;
288 }
289
290 public function showSavedResults()
291 {
292 global $ilUser;
293
294 // Read old result sets
295 include_once 'Services/Search/classes/class.ilSearchResult.php';
296
297 $result_obj = new ilSearchResult($ilUser->getId());
298 $result_obj->read();
299 $result_obj->filterResults($this->getRootNode());
300
301 $this->showSearch();
302
303 // Show them
304 if (count($result_obj->getResults())) {
305 $this->addPager($result_obj, 'max_page');
306
307 include_once './Services/Search/classes/class.ilSearchResultPresentation.php';
309 $presentation->setResults($result_obj->getResultsForPresentation());
310 $presentation->setSubitemIds($result_obj->getSubitemIds());
311 $presentation->setPreviousNext($this->prev_link, $this->next_link);
312 #$presentation->setSearcher($searcher);
313
314 if ($presentation->render()) {
315 // $this->tpl->setVariable('SEARCH_RESULTS',$presentation->getHTML());
316 $this->tpl->setVariable('RESULTS_TABLE', $presentation->getHTML(true));
317 }
318 }
319
320 return true;
321 }
322
323
327 public function performSearch()
328 {
329 global $ilUser;
330
331 if (!isset($_GET['page_number']) and $this->search_mode != 'in_results') {
332 unset($_SESSION['max_page']);
333 $this->search_cache->deleteCachedEntries();
334 }
335
336 if ($this->getType() == ilSearchBaseGUI::SEARCH_DETAILS and !$this->getDetails()) {
337 ilUtil::sendInfo($this->lng->txt('search_choose_object_type'));
338 $this->showSearch();
339 return false;
340 }
341
342 // Step 1: parse query string
343 if (!is_object($query_parser =&$this->__parseQueryString())) {
344 ilUtil::sendInfo($query_parser);
345 $this->showSearch();
346
347 return false;
348 }
349 // Step 2: perform object search. Get an ObjectSearch object via factory. Depends on fulltext or like search type.
350 $result =&$this->__searchObjects($query_parser);
351
352 // Step 3: perform meta keyword search. Get an MetaDataSearch object.
353 $result_meta =&$this->__searchMeta($query_parser, 'keyword');
354 $result->mergeEntries($result_meta);
355
356 $result_meta =&$this->__searchMeta($query_parser, 'contribute');
357 $result->mergeEntries($result_meta);
358
359 $result_meta =&$this->__searchMeta($query_parser, 'title');
360 $result->mergeEntries($result_meta);
361
362 $result_meta =&$this->__searchMeta($query_parser, 'description');
363 $result->mergeEntries($result_meta);
364
365 // Perform details search in object specific tables
367 $result = $this->__performDetailsSearch($query_parser, $result);
368 }
369 // Step 5: Search in results
370 if ($this->search_mode == 'in_results') {
371 include_once 'Services/Search/classes/class.ilSearchResult.php';
372
373 $old_result_obj = new ilSearchResult($ilUser->getId());
374 $old_result_obj->read();
375
376 $result->diffEntriesFromResult($old_result_obj);
377 }
378
379
380 // Step 4: merge and validate results
381 $result->filter($this->getRootNode(), $query_parser->getCombination() == 'and');
382 $result->save();
383 $this->showSearch();
384
385 if (!count($result->getResults())) {
386 ilUtil::sendInfo($this->lng->txt('search_no_match'));
387 }
388
389 if ($result->isLimitReached()) {
390 #$message = sprintf($this->lng->txt('search_limit_reached'),$this->settings->getMaxHits());
391 #ilUtil::sendInfo($message);
392 }
393
394 // Step 6: show results
395 $this->addPager($result, 'max_page');
396
397 include_once './Services/Search/classes/class.ilSearchResultPresentation.php';
399 $presentation->setResults($result->getResultsForPresentation());
400 $presentation->setSubitemIds($result->getSubitemIds());
401 $presentation->setPreviousNext($this->prev_link, $this->next_link);
402
403 if ($presentation->render()) {
404 // $this->tpl->setVariable('SEARCH_RESULTS',$presentation->getHTML());
405 $this->tpl->setVariable('RESULTS_TABLE', $presentation->getHTML(true));
406 }
407
408 return true;
409 }
410
411
412
413 public function prepareOutput()
414 {
415 global $ilTabs, $ilHelp;
416
417 parent::prepareOutput();
418
419 $ilHelp->setScreenIdComponent("src");
420
421 $ilTabs->addTab(
422 "search",
423 $this->lng->txt("search"),
424 $this->ctrl->getLinkTarget($this)
425 );
426
427 if (!$this->settings->getHideAdvancedSearch()) {
428 $ilTabs->addTab(
429 "adv_search",
430 $this->lng->txt("search_advanced"),
431 $this->ctrl->getLinkTargetByClass('iladvancedsearchgui')
432 );
433 }
434
435 $ilTabs->activateTab("search");
436 }
437
438 // PRIVATE
439 public function &__performDetailsSearch(&$query_parser, &$result)
440 {
441 foreach ($this->getDetails() as $type => $enabled) {
442 if (!$enabled) {
443 continue;
444 }
445
446 switch ($type) {
447 case 'crs':
448 $crs_search = ilObjectSearchFactory::_getObjectSearchInstance($query_parser);
449 $crs_search->setFilter(array('crs'));
450 $result->mergeEntries($crs_search->performSearch());
451 break;
452
453 case 'grp':
454 $grp_search = ilObjectSearchFactory::_getObjectSearchInstance($query_parser);
455 $grp_search->setFilter(array('grp'));
456 $result->mergeEntries($grp_search->performSearch());
457 break;
458
459 case 'lms':
460 $content_search =&ilObjectSearchFactory::_getLMContentSearchInstance($query_parser);
461 $content_search->setFilter($this->__getFilter());
462 $result->mergeEntries($content_search->performSearch());
463 break;
464
465 case 'frm':
466 $forum_search =&ilObjectSearchFactory::_getForumSearchInstance($query_parser);
467 $forum_search->setFilter($this->__getFilter());
468 $result->mergeEntries($forum_search->performSearch());
469 break;
470
471 case 'glo':
472 // Glossary term definition pages
473 $gdf_search =&ilObjectSearchFactory::_getLMContentSearchInstance($query_parser);
474 $gdf_search->setFilter(array('gdf'));
475 $result->mergeEntries($gdf_search->performSearch());
476 // Glossary terms
477 $gdf_term_search =&ilObjectSearchFactory::_getGlossaryDefinitionSearchInstance($query_parser);
478 $result->mergeEntries($gdf_term_search->performSearch());
479 break;
480
481 case 'exc':
482 $exc_search =&ilObjectSearchFactory::_getExerciseSearchInstance($query_parser);
483 $exc_search->setFilter($this->__getFilter());
484 $result->mergeEntries($exc_search->performSearch());
485 break;
486
487 case 'mcst':
488 $mcst_search =&ilObjectSearchFactory::_getMediaCastSearchInstance($query_parser);
489 $result->mergeEntries($mcst_search->performSearch());
490 break;
491
492 case 'tst':
493 $tst_search =&ilObjectSearchFactory::_getTestSearchInstance($query_parser);
494 $tst_search->setFilter($this->__getFilter());
495 $result->mergeEntries($tst_search->performSearch());
496 break;
497
498 case 'mep':
499 $mep_search =&ilObjectSearchFactory::_getMediaPoolSearchInstance($query_parser);
500 $mep_search->setFilter($this->__getFilter());
501 $result->mergeEntries($mep_search->performSearch());
502
503 // Mob keyword search
504 $mob_search = ilObjectSearchFactory::_getMediaPoolSearchInstance($query_parser);
505 $mob_search->setFilter($this->__getFilter());
506 $result->mergeEntries($mob_search->performKeywordSearch());
507
508 break;
509
510 case 'wiki':
511 $wiki_search =&ilObjectSearchFactory::_getWikiContentSearchInstance($query_parser);
512 $wiki_search->setFilter($this->__getFilter());
513 $result->mergeEntries($wiki_search->performSearch());
514
515 /*$result_meta =& $this->__searchMeta($query_parser,'title');
516 $result->mergeEntries($result_meta);
517 $result_meta =& $this->__searchMeta($query_parser,'description');
518 $result->mergeEntries($result_meta);*/
519 break;
520
521 }
522 }
523 return $result;
524 }
525
531 public function &__parseQueryString()
532 {
533 include_once 'Services/Search/classes/class.ilQueryParser.php';
534
535 $query_parser = new ilQueryParser(ilUtil::stripSlashes($this->getString()));
536 $query_parser->setCombination($this->getCombination());
537 $query_parser->parse();
538
539 if (!$query_parser->validate()) {
540 return $query_parser->getMessage();
541 }
542 return $query_parser;
543 }
549 public function &__searchObjects(&$query_parser)
550 {
551 include_once 'Services/Search/classes/class.ilObjectSearchFactory.php';
552
553 $obj_search =&ilObjectSearchFactory::_getObjectSearchInstance($query_parser);
555 $obj_search->setFilter($this->__getFilter());
556 }
557
558 $this->parseCreationFilter($obj_search);
559 return $obj_search->performSearch();
560 }
561
562 public function parseCreationFilter(ilObjectSearch $search)
563 {
564 $options = $this->getSearchCache()->getCreationFilter();
565
566 if (!$options['enabled']) {
567 return true;
568 }
569 $limit = new ilDate($options['date'], IL_CAL_UNIX);
570 $search->setCreationDateFilterDate($limit);
571
572 switch ($options['ontype']) {
573 case 1:
575 break;
576
577 case 2:
579 break;
580
581 case 3:
583 break;
584 }
585
586 return true;
587 }
588
589
595 public function &__searchMeta(&$query_parser, $a_type)
596 {
597 include_once 'Services/Search/classes/class.ilObjectSearchFactory.php';
598
599 $meta_search =&ilObjectSearchFactory::_getMetaDataSearchInstance($query_parser);
601 $meta_search->setFilter($this->__getFilter());
602 }
603 switch ($a_type) {
604 case 'keyword':
605 $meta_search->setMode('keyword');
606 break;
607
608 case 'contribute':
609 $meta_search->setMode('contribute');
610 break;
611
612 case 'title':
613 $meta_search->setMode('title');
614 break;
615
616 case 'description':
617 $meta_search->setMode('description');
618 break;
619 }
620 return $meta_search->performSearch();
621 }
627 public function __getFilter()
628 {
630 return false;
631 }
632
633 foreach ($this->getDetails() as $key => $detail_type) {
634 if (!$detail_type) {
635 continue;
636 }
637
638 switch ($key) {
639 case 'lms':
640 $filter[] = 'lm';
641 $filter[] = 'dbk';
642 $filter[] = 'pg';
643 $filter[] = 'st';
644 $filter[] = 'sahs';
645 $filter[] = 'htlm';
646 break;
647
648 case 'frm':
649 $filter[] = 'frm';
650 break;
651
652 case 'glo':
653 $filter[] = 'glo';
654 break;
655
656 case 'exc':
657 $filter[] = 'exc';
658 break;
659
660 case 'mcst':
661 $filter[] = 'mcst';
662 break;
663
664 case 'tst':
665 $filter[] = 'tst';
666 $filter[] = 'svy';
667 $filter[] = 'qpl';
668 $filter[] = 'spl';
669 break;
670
671 case 'mep':
672 $filter[] = 'mep';
673 $filter[] = 'mob';
674 break;
675
676 case 'fil':
677 $filter[] = 'file';
678 break;
679
680 case 'wiki':
681 $filter[] = 'wpg';
682 break;
683
684 default:
685 $filter[] = $key;
686 }
687 }
688 return $filter ? $filter : array();
689 }
690
697 protected function initUserSearchCache()
698 {
699 global $ilUser;
700
701 include_once('Services/Search/classes/class.ilUserSearchCache.php');
702 $this->search_cache = ilUserSearchCache::_getInstance($ilUser->getId());
703 $this->search_cache->switchSearchType(ilUserSearchCache::DEFAULT_SEARCH);
704
705 if ($_GET['page_number']) {
706 $this->search_cache->setResultPageNumber((int) $_GET['page_number']);
707 }
708 if (isset($_POST['cmd']['performSearch'])) {
709 $this->search_cache->setQuery(ilUtil::stripSlashes($_POST['term']));
710 $this->search_cache->setCreationFilter($this->loadCreationFilter());
711 $this->search_cache->save();
712 }
713 }
714}
$result
if(!isset( $_REQUEST[ 'ReturnTo'])) if(!isset($_REQUEST['AuthId'])) $options
Definition: as_login.php:20
$_GET["client_id"]
$_POST["username"]
$_SESSION["AccountId"]
An exception for terminatinating execution or to throw for unit testing.
const IL_CAL_UNIX
Class for single dates.
static get($a_glyph, $a_text="")
Get glyph html.
static getLogger($a_component_id)
Get component logger.
GUI class for the workflow of copying objects.
static _getMetaDataSearchInstance($query_parser)
get reference of ilFulltext/LikeMetaDataSearch.
static _getMediaPoolSearchInstance($query_parser)
get reference of ilFulltextMediapoolSearch
static _getLMContentSearchInstance($query_parser)
get reference of ilFulltextLMContentSearch
static _getTestSearchInstance($query_parser)
get reference of ilFulltextTestSearch
static _getGlossaryDefinitionSearchInstance($query_parser)
get reference of ilFulltextGlossaryDefinitionSearch
static _getObjectSearchInstance($query_parser)
get reference of ilFulltext/LikeObjectSearch.
static _getExerciseSearchInstance($query_parser)
get reference of ilFulltextExerciseSearch
static _getForumSearchInstance($query_parser)
get reference of ilFulltextForumSearch
static _getWikiContentSearchInstance($query_parser)
get reference of ilFulltextWikiContentSearch
setCreationDateFilterDate(ilDate $day)
Set creation date filter.
setCreationDateFilterOperator($a_operator)
static initJavascript()
Init javascript.
static getList($a_str)
Get completion list.
initStandardSearchForm($a_mode)
Init standard search form.
addPager($result, $a_session_key)
Add Pager.
getSearchCache()
Get user search cache.
getSearchAreaForm()
Init standard search form.
loadCreationFilter()
Load creation date filter.
handleCommand($a_cmd)
Handle command.
Class ilSearchGUI.
setString($a_str)
Set/get search string @access public.
performSearch()
Perform search.
& __searchObjects(&$query_parser)
Search in obect title,desctiption.
__construct()
Constructor @access public.
setCombination($a_combination)
Set/get combination of search ('and' or 'or') @access public.
executeCommand()
Control @access public.
setDetails($a_details)
Set/get details (object types for details search) @access public.
setType($a_type)
Set/get type of search (detail or 'fast' search) @access public.
setRootNode($a_node_id)
parseCreationFilter(ilObjectSearch $search)
storeRoot()
Store new root node.
& __searchMeta(&$query_parser, $a_type)
Search in object meta data (keyword)
autoComplete()
Data resource for autoComplete.
__getFilter()
Get object type for filter (If detail search is enabled)
& __performDetailsSearch(&$query_parser, &$result)
initUserSearchCache()
Init user search cache.
& __parseQueryString()
parse query string, using query parser instance
Presentation of search results using object list gui.
static resetDetails()
reset details As long as static::resetDetails is not possible this method is final
static getInstance()
Factory.
Auto completion class for user lists.
static _getInstance($a_usr_id)
Get singleton instance.
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
static prepareFormOutput($a_str, $a_strip=false)
prepares string output for html forms @access public
$key
Definition: croninfo.php:18
global $ilCtrl
Definition: ilias.php:18
if(isset($_POST['submit'])) $form
if(isset($_REQUEST['delete'])) $list
Definition: registry.php:41
foreach($_POST as $key=> $value) $res
settings()
Definition: settings.php:2
$ilUser
Definition: imgupload.php:18
$a_type
Definition: workflow.php:92