ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
class.ilTable2GUI.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3
4require_once("Services/Table/classes/class.ilTableGUI.php");
5
16{
17 protected $close_command = "";
18 private $unique_id;
19 private $headerHTML;
20 protected $top_anchor = "il_table_top";
21 protected $filters = array();
22 protected $optional_filters = array();
23 protected $filter_cmd = 'applyFilter';
24 protected $reset_cmd = 'resetFilter';
25 protected $filter_cols = 5;
26 protected $ext_sort = false;
27 protected $ext_seg = false;
28 protected $context = "";
29
30 protected $mi_sel_buttons = null;
31 protected $disable_filter_hiding = false;
32 protected $selected_filter = false;
33 protected $top_commands = true;
34 protected $selectable_columns = array();
35 protected $selected_column = array();
36 protected $show_templates = false;
37 protected $show_rows_selector = true; // JF, 2014-10-27
38 protected $rows_selector_off = false;
39
40 protected $nav_determined= false;
41 protected $limit_determined = false;
42 protected $filters_determined = false;
43 protected $columns_determined = false;
44 protected $open_form_tag = true;
45 protected $close_form_tag = true;
46
47 protected $export_formats;
48 protected $export_mode;
49 protected $print_mode;
50
52 protected $restore_filter; // [bool]
53 protected $restore_filter_values; // [bool]
54
55 protected $sortable_fields = array();
60
65
66 const FILTER_TEXT = 1;
67 const FILTER_SELECT = 2;
68 const FILTER_DATE = 3;
69 const FILTER_LANGUAGE = 4;
74
75 const EXPORT_EXCEL = 1;
76 const EXPORT_CSV = 2;
77
78 const ACTION_ALL_LIMIT = 1000;
79
84 public function __construct($a_parent_obj, $a_parent_cmd = "", $a_template_context = "")
85 {
86 global $lng;
87
88 parent::__construct(0, false);
89 $this->unique_id = md5(uniqid());
90 $this->parent_obj = $a_parent_obj;
91 $this->parent_cmd = $a_parent_cmd;
92 $this->buttons = array();
93 $this->header_commands = array();
94 $this->multi = array();
95 $this->hidden_inputs = array();
96 $this->formname = "table_" . $this->unique_id;
97 $this->tpl = new ilTemplate("tpl.table2.html", true, true, "Services/Table");
98
99 $lng->loadLanguageModule('tbl');
100
101 if(!$a_template_context)
102 {
103 $a_template_context = $this->getId();
104 }
105 $this->setContext($a_template_context);
106
107 // activate export mode
108 if(isset($_GET[$this->prefix."_xpt"]))
109 {
110 $this->export_mode = (int)$_GET[$this->prefix."_xpt"];
111 }
112
113 // template handling
114 if(isset($_GET[$this->prefix."_tpl"]))
115 {
116 $this->restoreTemplate($_GET[$this->prefix."_tpl"]);
117 }
118
119 $this->determineLimit();
120 $this->setIsDataTable(true);
121 $this->setEnableNumInfo(true);
123 }
124
130 function setOpenFormTag($a_val)
131 {
132 $this->open_form_tag = $a_val;
133 }
134
140 function getOpenFormTag()
141 {
143 }
144
150 function setCloseFormTag($a_val)
151 {
152 $this->close_form_tag = $a_val;
153 }
154
161 {
163 }
164
168 function determineLimit()
169 {
170 global $ilUser;
171
172 if ($this->limit_determined)
173 {
174 return;
175 }
176
177 $limit = 0;
178 if (isset($_GET[$this->prefix."_trows"]))
179 {
180 $this->storeProperty("rows", $_GET[$this->prefix."_trows"]);
181 $limit = $_GET[$this->prefix."_trows"];
182 $this->resetOffset();
183 }
184
185 if ($limit == 0)
186 {
187 $rows = $this->loadProperty("rows");
188 if ($rows > 0)
189 {
190 $limit = $rows;
191 }
192 else
193 {
194 if (is_object($ilUser))
195 {
196 $limit = $ilUser->getPref("hits_per_page");
197 }
198 else
199 {
200 $limit = 40;
201 }
202 }
203 }
204
205 $this->setLimit($limit);
206 $this->limit_determined = true;
207 }
208
215 {
216 return array();
217 }
218
223 {
224 if ($this->columns_determined)
225 {
226 return;
227 }
228
229 $old_sel = $this->loadProperty("selfields");
230
231 $stored = false;
232 if ($old_sel != "")
233 {
234 $sel_fields =
235 @unserialize($old_sel);
236 $stored = true;
237 }
238 if(!is_array($sel_fields))
239 {
240 $stored = false;
241 $sel_fields = array();
242 }
243
244 $this->selected_columns = array();
245 $set = false;
246 foreach ($this->getSelectableColumns() as $k => $c)
247 {
248 $this->selected_column[$k] = false;
249
250 $new_column = ($sel_fields[$k] === NULL);
251
252 if ($_POST["tblfsh".$this->getId()])
253 {
254 $set = true;
255 if (is_array($_POST["tblfs".$this->getId()]) && in_array($k, $_POST["tblfs".$this->getId()]))
256 {
257 $this->selected_column[$k] = true;
258 }
259 }
260 else if ($stored && !$new_column) // take stored values
261 {
262 $this->selected_column[$k] = $sel_fields[$k];
263 }
264 else // take default values
265 {
266 if ($new_column)
267 {
268 $set = true;
269 }
270 if ($c["default"])
271 {
272 $this->selected_column[$k] = true;
273 }
274 }
275 }
276
277 if ($old_sel != serialize($this->selected_column) && $set)
278 {
279 $this->storeProperty("selfields", serialize($this->selected_column));
280 }
281
282 $this->columns_determined = true;
283 }
284
291 function isColumnSelected($a_col)
292 {
293 return $this->selected_column[$a_col];
294 }
295
303 {
304 $scol = array();
305 foreach ($this->selected_column as $k => $v)
306 {
307 if ($v)
308 {
309 $scol[$k] = $k;
310 }
311 }
312 return $scol;
313 }
314
318 function &executeCommand()
319 {
320 global $ilCtrl;
321
322 $next_class = $ilCtrl->getNextClass($this);
323 $cmd = $ilCtrl->getCmd();
324
325 switch($next_class)
326 {
327 case 'ilformpropertydispatchgui':
328 include_once './Services/Form/classes/class.ilFormPropertyDispatchGUI.php';
329 $form_prop_dispatch = new ilFormPropertyDispatchGUI();
330 $this->initFilter();
331 $item = $this->getFilterItemByPostVar($_GET["postvar"]);
332 $form_prop_dispatch->setItem($item);
333 return $ilCtrl->forwardCommand($form_prop_dispatch);
334 break;
335
336 }
337 return false;
338 }
339
343 function resetOffset($a_in_determination = false)
344 {
345 if (!$this->nav_determined && !$a_in_determination)
346 {
348 }
349 $this->nav_value = $this->getOrderField().":".$this->getOrderDirection().":0";
350 $_GET[$this->getNavParameter()] =
351 $_POST[$this->getNavParameter()."1"] =
352 $this->nav_value;
353//echo $this->nav_value;
354 $this->setOffset(0);
355 }
356
361 function initFilter()
362 {
363 }
364
370 public function getParentObject()
371 {
372 return $this->parent_obj;
373 }
374
380 public function getParentCmd()
381 {
382 return $this->parent_cmd;
383 }
384
390 function setTopAnchor($a_val)
391 {
392 $this->top_anchor = $a_val;
393 }
394
400 function getTopAnchor()
401 {
402 return $this->top_anchor;
403 }
404
410 function setNoEntriesText($a_text)
411 {
412 $this->noentriestext = $a_text;
413 }
414
421 {
422 return $this->noentriestext;
423 }
424
430 function setIsDataTable($a_val)
431 {
432 $this->datatable = $a_val;
433 }
434
440 function getIsDataTable()
441 {
442 return $this->datatable;
443 }
444
450 function setEnableTitle($a_enabletitle)
451 {
452 $this->enabled["title"] = $a_enabletitle;
453 }
454
460 function getEnableTitle()
461 {
462 return $this->enabled["title"];
463 }
464
470 function setEnableHeader($a_enableheader)
471 {
472 $this->enabled["header"] = $a_enableheader;
473 }
474
481 {
482 return $this->enabled["header"];
483 }
484
490 function setEnableNumInfo($a_val)
491 {
492 $this->num_info = $a_val;
493 }
494
501 {
502 return $this->num_info;
503 }
504
508 final public function setTitle($a_title, $a_icon = 0, $a_icon_alt = 0)
509 {
510 parent::setTitle($a_title, $a_icon, $a_icon_alt);
511 }
512
518 function setDescription($a_val)
519 {
520 $this->description = $a_val;
521 }
522
528 function getDescription()
529 {
530 return $this->description;
531 }
532
538 function setOrderField($a_order_field)
539 {
540 $this->order_field = $a_order_field;
541 }
542
543 function getOrderField()
544 {
545 return $this->order_field;
546 }
547
548 final public function setData($a_data)
549 {
550 // check column names against given data (to ensure proper sorting)
551 if(DEVMODE &&
552 $this->enabled["header"] && $this->enabled["sort"] &&
553 $this->columns_determined && is_array($this->column) &&
554 is_array($a_data) && sizeof($a_data) && !$this->getExternalSorting())
555 {
556 $check = $a_data;
557 $check = array_keys(array_shift($check));
558 foreach($this->column as $col)
559 {
560 if($col["sort_field"] && !in_array($col["sort_field"], $check))
561 {
562 $invalid[] = $col["sort_field"];
563 }
564 }
565
566 // this triggers an error, if some columns are not set for some rows
567 // which may just be a representation of "null" values, e.g.
568 // ilAdvancedMDValues:queryForRecords works that way.
569/* if(sizeof($invalid))
570 {
571 trigger_error("The following columns are defined as sortable but".
572 " cannot be found in the given data: ".implode(", ", $invalid).
573 ". Sorting will not work properly.", E_USER_WARNING);
574 }*/
575 }
576
577 $this->row_data = $a_data;
578 }
579
580 final public function getData()
581 {
582 return $this->row_data;
583 }
584
585 final public function dataExists()
586 {
587 if (is_array($this->row_data))
588 {
589 if (count($this->row_data) > 0)
590 {
591 return true;
592 }
593 }
594 return false;
595 }
596
597 final public function setPrefix($a_prefix)
598 {
599 $this->prefix = $a_prefix;
600 }
601
602 final public function getPrefix()
603 {
604 return $this->prefix;
605 }
606
611 final function addFilterItem($a_input_item, $a_optional = false)
612 {
613 $a_input_item->setParent($this);
614 if (!$a_optional)
615 {
616 $this->filters[] = $a_input_item;
617 }
618 else
619 {
620 $this->optional_filters[] = $a_input_item;
621 }
622
623 // restore filter values (from stored view)
624 if($this->restore_filter)
625 {
626 if(array_key_exists($a_input_item->getFieldId(), $this->restore_filter_values))
627 {
628 $this->setFilterValue($a_input_item, $this->restore_filter_values[$a_input_item->getFieldId()]);
629 }
630 else
631 {
632 $this->setFilterValue($a_input_item, null); // #14949
633 }
634 }
635 }
636
646 function addFilterItemByMetaType($id, $type = self::FILTER_TEXT, $a_optional = false, $caption = NULL)
647 {
648 global $lng;
649
650 if(!$caption)
651 {
652 $caption = $lng->txt($id);
653 }
654
655 include_once("./Services/Form/classes/class.ilPropertyFormGUI.php");
656
657 switch($type)
658 {
660 include_once("./Services/Form/classes/class.ilSelectInputGUI.php");
661 $item = new ilSelectInputGUI($caption, $id);
662 break;
663
665 include_once("./Services/Form/classes/class.ilDateTimeInputGUI.php");
666 $item = new ilDateTimeInputGUI($caption, $id);
667 $item->setMode(ilDateTimeInputGUI::MODE_INPUT);
668 break;
669
671 include_once("./Services/Form/classes/class.ilTextInputGUI.php");
672 $item = new ilTextInputGUI($caption, $id);
673 $item->setMaxLength(64);
674 $item->setSize(20);
675 // $item->setSubmitFormOnEnter(true);
676 break;
677
679 $lng->loadLanguageModule("meta");
680 include_once("./Services/Form/classes/class.ilSelectInputGUI.php");
681 $item = new ilSelectInputGUI($caption, $id);
682 $options = array("" => $lng->txt("trac_all"));
683 foreach ($lng->getInstalledLanguages() as $lang_key)
684 {
685 $options[$lang_key] = $lng->txt("meta_l_".$lang_key);
686 }
687 $item->setOptions($options);
688 break;
689
691 include_once("./Services/Form/classes/class.ilCombinationInputGUI.php");
692 include_once("./Services/Form/classes/class.ilNumberInputGUI.php");
693 $item = new ilCombinationInputGUI($caption, $id);
694 $combi_item = new ilNumberInputGUI("", $id."_from");
695 $item->addCombinationItem("from", $combi_item, $lng->txt("from"));
696 $combi_item = new ilNumberInputGUI("", $id."_to");
697 $item->addCombinationItem("to", $combi_item, $lng->txt("to"));
698 $item->setComparisonMode(ilCombinationInputGUI::COMPARISON_ASCENDING);
699 $item->setMaxLength(7);
700 $item->setSize(20);
701 break;
702
704 include_once("./Services/Form/classes/class.ilCombinationInputGUI.php");
705 include_once("./Services/Form/classes/class.ilDateTimeInputGUI.php");
706 $item = new ilCombinationInputGUI($caption, $id);
707 $combi_item = new ilDateTimeInputGUI("", $id."_from");
708 $item->addCombinationItem("from", $combi_item, $lng->txt("from"));
709 $combi_item = new ilDateTimeInputGUI("", $id."_to");
710 $item->addCombinationItem("to", $combi_item, $lng->txt("to"));
711 $item->setComparisonMode(ilCombinationInputGUI::COMPARISON_ASCENDING);
712 $item->setMode(ilDateTimeInputGUI::MODE_INPUT);
713 break;
714
716 include_once("./Services/Form/classes/class.ilCombinationInputGUI.php");
717 include_once("./Services/Form/classes/class.ilDateTimeInputGUI.php");
718 $item = new ilCombinationInputGUI($caption, $id);
719 $combi_item = new ilDateTimeInputGUI("", $id."_from");
720 $combi_item->setShowTime(true);
721 $item->addCombinationItem("from", $combi_item, $lng->txt("from"));
722 $combi_item = new ilDateTimeInputGUI("", $id."_to");
723 $combi_item->setShowTime(true);
724 $item->addCombinationItem("to", $combi_item, $lng->txt("to"));
725 $item->setComparisonMode(ilCombinationInputGUI::COMPARISON_ASCENDING);
726 $item->setMode(ilDateTimeInputGUI::MODE_INPUT);
727 break;
728
730 $lng->loadLanguageModule("form");
731 include_once("./Services/Form/classes/class.ilCombinationInputGUI.php");
732 include_once("./Services/Form/classes/class.ilDurationInputGUI.php");
733 $item = new ilCombinationInputGUI($caption, $id);
734 $combi_item = new ilDurationInputGUI("", $id."_from");
735 $combi_item->setShowMonths(false);
736 $combi_item->setShowDays(true);
737 $combi_item->setShowSeconds(true);
738 $item->addCombinationItem("from", $combi_item, $lng->txt("from"));
739 $combi_item = new ilDurationInputGUI("", $id."_to");
740 $combi_item->setShowMonths(false);
741 $combi_item->setShowDays(true);
742 $combi_item->setShowSeconds(true);
743 $item->addCombinationItem("to", $combi_item, $lng->txt("to"));
744 $item->setComparisonMode(ilCombinationInputGUI::COMPARISON_ASCENDING);
745 break;
746
747 default:
748 return false;
749 }
750
751 $this->addFilterItem($item, $a_optional);
752 $item->readFromSession();
753 return $item;
754 }
755
759 final function getFilterItems($a_optionals = false)
760 {
761 if (!$a_optionals)
762 {
763 return $this->filters;
764 }
766 }
767
768 final function getFilterItemByPostVar($a_post_var)
769 {
770 foreach ($this->getFilterItems() as $item)
771 {
772 if ($item->getPostVar() == $a_post_var)
773 {
774 return $item;
775 }
776 }
777 foreach ($this->getFilterItems(true) as $item)
778 {
779 if ($item->getPostVar() == $a_post_var)
780 {
781 return $item;
782 }
783 }
784 return false;
785 }
786
792 function setFilterCols($a_val)
793 {
794 $this->filter_cols = $a_val;
795 }
796
802 function getFilterCols()
803 {
804 return $this->filter_cols;
805 }
806
812 function setDisableFilterHiding($a_val = true)
813 {
814 $this->disable_filter_hiding = $a_val;
815 }
816
823 {
825 }
826
833 function isFilterSelected($a_col)
834 {
835 return $this->selected_filter[$a_col];
836 }
837
845 {
846 $sfil = array();
847 foreach ($this->selected_filter as $k => $v)
848 {
849 if ($v)
850 {
851 $sfil[$k] = $k;
852 }
853 }
854 return $sfil;
855 }
856
864 {
865 if ($this->filters_determined)
866 {
867 return;
868 }
869
870 $old_sel = $this->loadProperty("selfilters");
871 $stored = false;
872 if ($old_sel != "")
873 {
874 $sel_filters =
875 @unserialize($old_sel);
876 $stored = true;
877 }
878 if(!is_array($sel_filters))
879 {
880 $stored = false;
881 $sel_filters = array();
882 }
883
884 $this->selected_filter = array();
885 $set = false;
886 foreach ($this->getFilterItems(true) as $item)
887 {
888 $k = $item->getPostVar();
889
890 $this->selected_filter[$k] = false;
891
892 if ($_POST["tblfsf".$this->getId()])
893 {
894 $set = true;
895 if (is_array($_POST["tblff".$this->getId()]) && in_array($k, $_POST["tblff".$this->getId()]))
896 {
897 $this->selected_filter[$k] = true;
898 }
899 else
900 {
901 $item->setValue(NULL);
902 $item->writeToSession();
903 }
904 }
905 else if ($stored) // take stored values
906 {
907 $this->selected_filter[$k] = $sel_filters[$k];
908 }
909 }
910
911 if ($old_sel != serialize($this->selected_filter) && $set)
912 {
913 $this->storeProperty("selfilters", serialize($this->selected_filter));
914 }
915
916 $this->filters_determined = true;
917 }
918
922 function setCustomPreviousNext($a_prev_link, $a_next_link)
923 {
924 $this->custom_prev_next = true;
925 $this->custom_prev = $a_prev_link;
926 $this->custom_next = $a_next_link;
927 }
928
935 final public function setFormAction($a_form_action, $a_multipart = false)
936 {
937 $this->form_action = $a_form_action;
938 $this->form_multipart = (bool)$a_multipart;
939 }
940
946 final public function getFormAction()
947 {
948 return $this->form_action;
949 }
950
956 function setFormName($a_formname)
957 {
958 $this->formname = $a_formname;
959 }
960
966 function getFormName()
967 {
968 return $this->formname;
969 }
970
976 function setId($a_val)
977 {
978 $this->id = $a_val;
979 if ($this->getPrefix() == "")
980 {
981 $this->setPrefix($a_val);
982 }
983 }
984
990 function getId()
991 {
992 return $this->id;
993 }
994
1000 function setDisplayAsBlock($a_val)
1001 {
1002 $this->display_as_block = $a_val;
1003 }
1004
1011 {
1012 return $this->display_as_block;
1013 }
1014
1021 {
1023 }
1024
1030 function setSelectAllCheckbox($a_select_all_checkbox)
1031 {
1032 $this->select_all_checkbox = $a_select_all_checkbox;
1033 }
1034
1040 function setExternalSorting($a_val)
1041 {
1042 $this->ext_sort = $a_val;
1043 }
1044
1051 {
1052 return $this->ext_sort;
1053 }
1054
1061 function setFilterCommand($a_val, $a_caption = null)
1062 {
1063 $this->filter_cmd = $a_val;
1064 $this->filter_cmd_txt = $a_caption;
1065 }
1066
1073 {
1074 return $this->filter_cmd;
1075 }
1076
1083 function setResetCommand($a_val, $a_caption = null)
1084 {
1085 $this->reset_cmd = $a_val;
1086 $this->reset_cmd_txt = $a_caption;
1087 }
1088
1095 {
1096 return $this->reset_cmd;
1097 }
1098
1105 {
1106 $this->ext_seg = $a_val;
1107 }
1108
1115 {
1116 return $this->ext_seg;
1117 }
1118
1125 final public function setRowTemplate($a_template, $a_template_dir = "")
1126 {
1127 $this->row_template = $a_template;
1128 $this->row_template_dir = $a_template_dir;
1129 }
1130
1136 function setDefaultOrderField($a_defaultorderfield)
1137 {
1138 $this->defaultorderfield = $a_defaultorderfield;
1139 }
1140
1147 {
1148 return $this->defaultorderfield;
1149 }
1150
1156 function setDefaultOrderDirection($a_defaultorderdirection)
1157 {
1158 $this->defaultorderdirection = $a_defaultorderdirection;
1159 }
1160
1167 {
1168 return $this->defaultorderdirection;
1169 }
1170
1171 /*
1172 * Removes all command buttons from the table
1173 *
1174 * @access public
1175 */
1176 public function clearCommandButtons()
1177 {
1178 $this->buttons = array();
1179 }
1180
1187 function addCommandButton($a_cmd, $a_text, $a_onclick = '', $a_id = "", $a_class = null)
1188 {
1189 $this->buttons[] = array("cmd" => $a_cmd, "text" => $a_text, 'onclick' => $a_onclick,
1190 "id" => $a_id, "class" => $a_class);
1191 }
1192
1199 {
1200 $this->buttons[] = $a_button;
1201 }
1202
1213 function addSelectionButton($a_sel_var, $a_options, $a_cmd, $a_text, $a_default_selection = '')
1214 {
1215echo "ilTabl2GUI->addSelectionButton() has been deprecated with 4.2. Please try to move the drop-down to ilToolbarGUI.";
1216// $this->sel_buttons[] = array("sel_var" => $a_sel_var, "options" => $a_options, "selected" => $a_default_selection, "cmd" => $a_cmd, "text" => $a_text);
1217 }
1218
1228 public function addMultiItemSelectionButton($a_sel_var, $a_options, $a_cmd, $a_text, $a_default_selection = '')
1229 {
1230 $this->mi_sel_buttons[] = array("sel_var" => $a_sel_var, "options" => $a_options, "selected" => $a_default_selection, "cmd" => $a_cmd, "text" => $a_text);
1231 $this->addHiddenInput("cmd_sv[".$a_cmd."]", $a_sel_var);
1232 }
1233
1234
1235
1242 function setCloseCommand($a_link)
1243 {
1244 $this->close_command = $a_link;
1245 }
1246
1253 function addMultiCommand($a_cmd, $a_text)
1254 {
1255 $this->multi[] = array("cmd" => $a_cmd, "text" => $a_text);
1256 }
1257
1264 public function addHiddenInput($a_name, $a_value)
1265 {
1266 $this->hidden_inputs[] = array("name" => $a_name, "value" => $a_value);
1267 }
1268
1275 function addHeaderCommand($a_href, $a_text, $a_target = "", $a_img = "")
1276 {
1277 $this->header_commands[] = array("href" => $a_href, "text" => $a_text,
1278 "target" => $a_target, "img" => $a_img);
1279 }
1280
1286 function setTopCommands($a_val)
1287 {
1288 $this->top_commands = $a_val;
1289 }
1290
1297 {
1298 return $this->top_commands;
1299 }
1300
1308 final public function addColumn($a_text, $a_sort_field = "", $a_width = "",
1309 $a_is_checkbox_action_column = false, $a_class = "", $a_tooltip = "", $a_tooltip_with_html = false)
1310 {
1311 $this->column[] = array(
1312 "text" => $a_text,
1313 "sort_field" => $a_sort_field,
1314 "width" => $a_width,
1315 "is_checkbox_action_column" => $a_is_checkbox_action_column,
1316 "class" => $a_class,
1317 "tooltip" => $a_tooltip,
1318 "tooltip_html" => (bool)$a_tooltip_with_html
1319 );
1320 if ($a_sort_field != "")
1321 {
1322 $this->sortable_fields[] = $a_sort_field;
1323 }
1324 $this->column_count = count($this->column);
1325 }
1326
1327
1328 final public function getNavParameter()
1329 {
1330 return $this->prefix."_table_nav";
1331 }
1332
1333 function setOrderLink($sort_field, $order_dir)
1334 {
1335 global $ilCtrl, $ilUser;
1336
1337 $hash = "";
1338 if (is_object($ilUser) && $ilUser->getPref("screen_reader_optimization"))
1339 {
1340 $hash = "#".$this->getTopAnchor();
1341 }
1342
1343 $old = $_GET[$this->getNavParameter()];
1344
1345 // set order link
1346 $ilCtrl->setParameter($this->parent_obj,
1347 $this->getNavParameter(),
1348 $sort_field.":".$order_dir.":".$this->offset);
1349 $this->tpl->setVariable("TBL_ORDER_LINK",
1350 $ilCtrl->getLinkTarget($this->parent_obj, $this->parent_cmd).$hash);
1351
1352 // set old value of nav variable
1353 $ilCtrl->setParameter($this->parent_obj,
1354 $this->getNavParameter(), $old);
1355 }
1356
1357 function fillHeader()
1358 {
1359 global $lng;
1360
1361 $allcolumnswithwidth = true;
1362 foreach ((array) $this->column as $idx => $column)
1363 {
1364 if (!strlen($column["width"]))
1365 {
1366 $allcolumnswithwidth = false;
1367 }
1368 else if($column["width"] == "1")
1369 {
1370 // IE does not like 1 but seems to work with 1%
1371 $this->column[$idx]["width"] = "1%";
1372 }
1373 }
1374 if ($allcolumnswithwidth)
1375 {
1376 foreach ((array) $this->column as $column)
1377 {
1378 $this->tpl->setCurrentBlock("tbl_colgroup_column");
1379 $this->tpl->setVariable("COLGROUP_COLUMN_WIDTH", $column["width"]);
1380 $this->tpl->parseCurrentBlock();
1381 }
1382 }
1383 $ccnt = 0;
1384 foreach ((array) $this->column as $column)
1385 {
1386 $ccnt++;
1387 //tooltip
1388 if ($column["tooltip"] != "")
1389 {
1390 include_once("./Services/UIComponent/Tooltip/classes/class.ilTooltipGUI.php");
1391 ilTooltipGUI::addTooltip("thc_".$this->getId()."_".$ccnt, $column["tooltip"],
1392 "", "bottom center", "top center", !$column["tooltip_html"]);
1393 }
1394 if (!$this->enabled["sort"] || $column["sort_field"] == "" || $column["is_checkbox_action_column"])
1395 {
1396 $this->tpl->setCurrentBlock("tbl_header_no_link");
1397 if ($column["width"] != "")
1398 {
1399 $this->tpl->setVariable("TBL_COLUMN_WIDTH_NO_LINK"," width=\"".$column["width"]."\"");
1400 }
1401 if ($column["class"] != "")
1402 {
1403 $this->tpl->setVariable("TBL_COLUMN_CLASS_NO_LINK"," class=\"".$column["class"]."\"");
1404 }
1405 if (!$column["is_checkbox_action_column"])
1406 {
1407 $this->tpl->setVariable("TBL_HEADER_CELL_NO_LINK",
1408 $column["text"]);
1409 }
1410 else
1411 {
1412 $this->tpl->setVariable("TBL_HEADER_CELL_NO_LINK",
1413 ilUtil::img(ilUtil::getImagePath("spacer.png"), $lng->txt("action")));
1414 }
1415 $this->tpl->setVariable("HEAD_CELL_NL_ID", "thc_".$this->getId()."_".$ccnt);
1416 if ($column["class"] != "")
1417 {
1418 $this->tpl->setVariable("TBL_HEADER_CLASS"," " . $column["class"]);
1419 }
1420 $this->tpl->parseCurrentBlock();
1421 $this->tpl->touchBlock("tbl_header_th");
1422 continue;
1423 }
1424 if (($column["sort_field"] == $this->order_field) && ($this->order_direction != ""))
1425 {
1426 $this->tpl->setCurrentBlock("tbl_order_image");
1427 if ($this->order_direction == "asc")
1428 {
1429 $this->tpl->setVariable("ORDER_CLASS", "glyphicon glyphicon-arrow-up");
1430 }
1431 else
1432 {
1433 $this->tpl->setVariable("ORDER_CLASS", "glyphicon glyphicon-arrow-down");
1434 }
1435 $this->tpl->setVariable("IMG_ORDER_ALT", $this->lng->txt("change_sort_direction"));
1436 $this->tpl->parseCurrentBlock();
1437 }
1438
1439 $this->tpl->setCurrentBlock("tbl_header_cell");
1440 $this->tpl->setVariable("TBL_HEADER_CELL", $column["text"]);
1441 $this->tpl->setVariable("HEAD_CELL_ID", "thc_".$this->getId()."_".$ccnt);
1442
1443 // only set width if a value is given for that column
1444 if ($column["width"] != "")
1445 {
1446 $this->tpl->setVariable("TBL_COLUMN_WIDTH"," width=\"".$column["width"]."\"");
1447 }
1448 if ($column["class"] != "")
1449 {
1450 $this->tpl->setVariable("TBL_COLUMN_CLASS"," class=\"".$column["class"]."\"");
1451 }
1452
1453 $lng_sort_column = $this->lng->txt("sort_by_this_column");
1454 $this->tpl->setVariable("TBL_ORDER_ALT",$lng_sort_column);
1455
1456 $order_dir = "asc";
1457
1458 if ($column["sort_field"] == $this->order_field)
1459 {
1460 $order_dir = $this->sort_order;
1461
1462 $lng_change_sort = $this->lng->txt("change_sort_direction");
1463 $this->tpl->setVariable("TBL_ORDER_ALT",$lng_change_sort);
1464 }
1465
1466 if ($column["class"] != "")
1467 {
1468 $this->tpl->setVariable("TBL_HEADER_CLASS"," " . $column["class"]);
1469 }
1470 $this->setOrderLink($column["sort_field"], $order_dir);
1471 $this->tpl->parseCurrentBlock();
1472 $this->tpl->touchBlock("tbl_header_th");
1473 }
1474
1475 $this->tpl->setCurrentBlock("tbl_header");
1476 $this->tpl->parseCurrentBlock();
1477 }
1478
1482 protected function prepareOutput()
1483 {
1484 }
1485
1486
1490 function determineOffsetAndOrder($a_omit_offset = false)
1491 {
1492 global $ilUser;
1493
1494 if ($this->nav_determined)
1495 {
1496 return true;
1497 }
1498
1499 if ($_POST[$this->getNavParameter()."1"] != "")
1500 {
1501 if ($_POST[$this->getNavParameter()."1"] != $_POST[$this->getNavParameter()])
1502 {
1503 $this->nav_value = $_POST[$this->getNavParameter()."1"];
1504 }
1505 else if ($_POST[$this->getNavParameter()."2"] != $_POST[$this->getNavParameter()])
1506 {
1507 $this->nav_value = $_POST[$this->getNavParameter()."2"];
1508 }
1509 }
1510 elseif($_GET[$this->getNavParameter()])
1511 {
1512 $this->nav_value = $_GET[$this->getNavParameter()];
1513 }
1514 elseif($_SESSION[$this->getNavParameter()] != "")
1515 {
1516 $this->nav_value = $_SESSION[$this->getNavParameter()];
1517 }
1518
1519 if ($this->nav_value == "" && $this->getId() != "" && $ilUser->getId() != ANONYMOUS_USER_ID)
1520 {
1521 $order = $this->loadProperty("order");
1522 if (in_array($order, $this->sortable_fields))
1523 {
1524 $direction = $this->loadProperty("direction");
1525 }
1526 else
1527 {
1528 $direction = $this->getDefaultOrderDirection();
1529 }
1530 // get order and direction from db
1531 $this->nav_value =
1532 $order.":".
1533 $direction.":".
1534 $this->loadProperty("offset");
1535 }
1536 $nav = explode(":", $this->nav_value);
1537
1538 // $nav[0] is order by
1539 $this->setOrderField(($nav[0] != "") ? $nav[0] : $this->getDefaultOrderField());
1540 $this->setOrderDirection(($nav[1] != "") ? $nav[1] : $this->getDefaultOrderDirection());
1541
1542 if (!$a_omit_offset)
1543 {
1544 // #8904: offset must be discarded when no limit is given
1545 if(!$this->getExternalSegmentation() && $this->limit_determined && $this->limit == 9999)
1546 {
1547 $this->resetOffset(true);
1548 }
1549 else if (!$this->getExternalSegmentation() && $nav[2] >= $this->max_count)
1550 {
1551 $this->resetOffset(true);
1552 }
1553 else
1554 {
1555 $this->setOffset($nav[2]);
1556 }
1557 }
1558
1559 if (!$a_omit_offset)
1560 {
1561 $this->nav_determined = true;
1562 }
1563 }
1564
1566 {
1567 if ($this->getOrderField() != "")
1568 {
1569 $this->storeProperty("order", $this->getOrderField());
1570 }
1571 if ($this->getOrderDirection() != "")
1572 {
1573 $this->storeProperty("direction", $this->getOrderDirection());
1574 }
1575//echo "-".$this->getOffset()."-";
1576 if ($this->getOffset() !== "")
1577 {
1578 $this->storeProperty("offset", $this->getOffset());
1579 }
1580 }
1581
1582
1586 public function getHTML()
1587 {
1588 global $lng, $ilCtrl, $ilUser;
1589
1590 if($this->getExportMode())
1591 {
1592 $this->exportData($this->getExportMode(), true);
1593 }
1594
1595 $this->prepareOutput();
1596
1597 if (is_object($ilCtrl) && $this->getId() == "")
1598 {
1599 $ilCtrl->saveParameter($this->getParentObject(), $this->getNavParameter());
1600 }
1601
1602 if(!$this->getPrintMode())
1603 {
1604 // set form action
1605 if ($this->form_action != "" && $this->getOpenFormTag())
1606 {
1607 $hash = "";
1608 if (is_object($ilUser) && $ilUser->getPref("screen_reader_optimization"))
1609 {
1610 $hash = "#".$this->getTopAnchor();
1611 }
1612
1613 if((bool)$this->form_multipart)
1614 {
1615 $this->tpl->touchBlock("form_multipart_bl");
1616 }
1617
1618 if($this->getPreventDoubleSubmission())
1619 {
1620 $this->tpl->touchBlock("pdfs");
1621 }
1622
1623 $this->tpl->setCurrentBlock("tbl_form_header");
1624 $this->tpl->setVariable("FORMACTION", $this->getFormAction().$hash);
1625 $this->tpl->setVariable("FORMNAME", $this->getFormName());
1626 $this->tpl->parseCurrentBlock();
1627 }
1628
1629 if ($this->form_action != "" && $this->getCloseFormTag())
1630 {
1631 $this->tpl->touchBlock("tbl_form_footer");
1632 }
1633 }
1634
1635 if(!$this->enabled['content'])
1636 {
1637 return $this->render();
1638 }
1639
1640 if (!$this->getExternalSegmentation())
1641 {
1642 $this->setMaxCount(count($this->row_data));
1643 }
1644
1645 $this->determineOffsetAndOrder();
1646
1647 $this->setFooter("tblfooter",$this->lng->txt("previous"),$this->lng->txt("next"));
1648
1649 $data = $this->getData();
1650 if($this->dataExists())
1651 {
1652 // sort
1653 if (!$this->getExternalSorting() && $this->enabled["sort"])
1654 {
1656 $this->getOrderDirection(), $this->numericOrdering($this->getOrderField()));
1657 }
1658
1659 // slice
1660 if (!$this->getExternalSegmentation())
1661 {
1662 $data = array_slice($data, $this->getOffset(), $this->getLimit());
1663 }
1664 }
1665
1666 // fill rows
1667 if($this->dataExists())
1668 {
1669 if($this->getPrintMode())
1670 {
1672 }
1673
1674 $this->tpl->addBlockFile("TBL_CONTENT", "tbl_content", $this->row_template,
1675 $this->row_template_dir);
1676
1677 foreach($data as $set)
1678 {
1679 $this->tpl->setCurrentBlock("tbl_content");
1680 $this->css_row = ($this->css_row != "tblrow1")
1681 ? "tblrow1"
1682 : "tblrow2";
1683 $this->tpl->setVariable("CSS_ROW", $this->css_row);
1684
1685 $this->fillRow($set);
1686 $this->tpl->setCurrentBlock("tbl_content");
1687 $this->tpl->parseCurrentBlock();
1688 }
1689 }
1690 else
1691 {
1692 // add standard no items text (please tell me, if it messes something up, alex, 29.8.2008)
1693 $no_items_text = (trim($this->getNoEntriesText()) != '')
1694 ? $this->getNoEntriesText()
1695 : $lng->txt("no_items");
1696
1697 $this->css_row = ($this->css_row != "tblrow1")
1698 ? "tblrow1"
1699 : "tblrow2";
1700
1701 $this->tpl->setCurrentBlock("tbl_no_entries");
1702 $this->tpl->setVariable('TBL_NO_ENTRY_CSS_ROW', $this->css_row);
1703 $this->tpl->setVariable('TBL_NO_ENTRY_COLUMN_COUNT', $this->column_count);
1704 $this->tpl->setVariable('TBL_NO_ENTRY_TEXT', trim($no_items_text));
1705 $this->tpl->parseCurrentBlock();
1706 }
1707
1708
1709 if(!$this->getPrintMode())
1710 {
1711 $this->fillFooter();
1712
1713 $this->fillHiddenRow();
1714
1715 $this->fillActionRow();
1716
1717 $this->storeNavParameter();
1718 }
1719
1720 return $this->render();
1721 }
1722
1728 function numericOrdering($a_field)
1729 {
1730 return false;
1731 }
1732
1737 function render()
1738 {
1739 global $lng, $ilCtrl;
1740
1741 $this->tpl->setVariable("CSS_TABLE",$this->getStyle("table"));
1742 $this->tpl->setVariable("DATA_TABLE", (int) $this->getIsDataTable());
1743 if ($this->getId() != "")
1744 {
1745 $this->tpl->setVariable("ID", 'id="'.$this->getId().'"');
1746 }
1747
1748 // description
1749 if ($this->getDescription() != "")
1750 {
1751 $this->tpl->setCurrentBlock("tbl_header_description");
1752 $this->tpl->setVariable("TBL_DESCRIPTION", $this->getDescription());
1753 $this->tpl->parseCurrentBlock();
1754 }
1755
1756 if(!$this->getPrintMode())
1757 {
1758 $this->renderFilter();
1759 }
1760
1761 if ($this->getDisplayAsBlock())
1762 {
1763 $this->tpl->touchBlock("outer_start_1");
1764 $this->tpl->touchBlock("outer_end_1");
1765 }
1766 else
1767 {
1768 $this->tpl->touchBlock("outer_start_2");
1769 $this->tpl->touchBlock("outer_end_2");
1770 }
1771
1772 // table title and icon
1773 if ($this->enabled["title"] && ($this->title != ""
1774 || $this->icon != "" || count($this->header_commands) > 0 ||
1775 $this->headerHTML != "" || $this->close_command != ""))
1776 {
1777 if ($this->enabled["icon"])
1778 {
1779 $this->tpl->setCurrentBlock("tbl_header_title_icon");
1780 $this->tpl->setVariable("TBL_TITLE_IMG",ilUtil::getImagePath($this->icon));
1781 $this->tpl->setVariable("TBL_TITLE_IMG_ALT",$this->icon_alt);
1782 $this->tpl->parseCurrentBlock();
1783 }
1784
1785 if(!$this->getPrintMode())
1786 {
1787 foreach($this->header_commands as $command)
1788 {
1789 if ($command["img"] != "")
1790 {
1791 $this->tpl->setCurrentBlock("tbl_header_img_link");
1792 if ($command["target"] != "")
1793 {
1794 $this->tpl->setVariable("TARGET_IMG_LINK",
1795 'target="'.$command["target"].'"');
1796 }
1797 $this->tpl->setVariable("ALT_IMG_LINK", $command["text"]);
1798 $this->tpl->setVariable("HREF_IMG_LINK", $command["href"]);
1799 $this->tpl->setVariable("SRC_IMG_LINK",
1800 $command["img"]);
1801 $this->tpl->parseCurrentBlock();
1802 }
1803 else
1804 {
1805 $this->tpl->setCurrentBlock("head_cmd");
1806 $this->tpl->setVariable("TXT_HEAD_CMD", $command["text"]);
1807 $this->tpl->setVariable("HREF_HEAD_CMD", $command["href"]);
1808 $this->tpl->parseCurrentBlock();
1809 }
1810 }
1811 }
1812
1813 if (isset ($this->headerHTML)) {
1814 $this->tpl->setCurrentBlock("tbl_header_html");
1815 $this->tpl->setVariable ("HEADER_HTML", $this->headerHTML);
1816 $this->tpl->parseCurrentBlock();
1817 }
1818
1819 // close command
1820 if ($this->close_command != "")
1821 {
1822 $this->tpl->setCurrentBlock("tbl_header_img_link");
1823 $this->tpl->setVariable("ALT_IMG_LINK",$lng->txt("close"));
1824 $this->tpl->setVariable("HREF_IMG_LINK",$this->close_command);
1825 $this->tpl->parseCurrentBlock();
1826 }
1827
1828 $this->tpl->setCurrentBlock("tbl_header_title");
1829 $this->tpl->setVariable("TBL_TITLE",$this->title);
1830 $this->tpl->setVariable("TOP_ANCHOR",$this->getTopAnchor());
1831 if ($this->getDisplayAsBlock())
1832 {
1833 $this->tpl->setVariable("BLK_CLASS", "Block");
1834 }
1835 $this->tpl->parseCurrentBlock();
1836 }
1837
1838 // table header
1839 if ($this->enabled["header"])
1840 {
1841 $this->fillHeader();
1842 }
1843
1844 $this->tpl->touchBlock("tbl_table_end");
1845
1846 return $this->tpl->get();
1847 }
1848
1852 private function renderFilter()
1853 {
1854 global $lng, $tpl;
1855
1856 $filter = $this->getFilterItems();
1857 $opt_filter = $this->getFilterItems(true);
1858
1859 $tpl->addJavascript("./Services/Table/js/ServiceTable.js");
1860
1861 if (count($filter) == 0 && count($opt_filter) == 0)
1862 {
1863 return;
1864 }
1865
1866 include_once("./Services/YUI/classes/class.ilYuiUtil.php");
1868
1869 $ccnt = 0;
1870
1871 // render standard filter
1872 if (count($filter) > 0)
1873 {
1874 foreach ($filter as $item)
1875 {
1876 if ($ccnt >= $this->getFilterCols())
1877 {
1878 $this->tpl->setCurrentBlock("filter_row");
1879 $this->tpl->parseCurrentBlock();
1880 $ccnt = 0;
1881 }
1882 $this->tpl->setCurrentBlock("filter_item");
1883 $this->tpl->setVariable("OPTION_NAME",
1884 $item->getTitle());
1885 $this->tpl->setVariable("F_INPUT_ID",
1886 $item->getFieldId());
1887 $this->tpl->setVariable("INPUT_HTML",
1888 $item->getTableFilterHTML());
1889 $this->tpl->parseCurrentBlock();
1890 $ccnt++;
1891 }
1892 }
1893
1894 // render optional filter
1895 if (count($opt_filter) > 0)
1896 {
1897 $this->determineSelectedFilters();
1898
1899 foreach ($opt_filter as $item)
1900 {
1901 if($this->isFilterSelected($item->getPostVar()))
1902 {
1903 if ($ccnt >= $this->getFilterCols())
1904 {
1905 $this->tpl->setCurrentBlock("filter_row");
1906 $this->tpl->parseCurrentBlock();
1907 $ccnt = 0;
1908 }
1909 $this->tpl->setCurrentBlock("filter_item");
1910 $this->tpl->setVariable("OPTION_NAME",
1911 $item->getTitle());
1912 $this->tpl->setVariable("F_INPUT_ID",
1913 $item->getFieldId());
1914 $this->tpl->setVariable("INPUT_HTML",
1915 $item->getTableFilterHTML());
1916 $this->tpl->parseCurrentBlock();
1917 $ccnt++;
1918 }
1919 }
1920
1921 // filter selection
1922 $items = array();
1923 foreach ($opt_filter as $item)
1924 {
1925 $k = $item->getPostVar();
1926 $items[$k] = array("txt" => $item->getTitle(),
1927 "selected" => $this->isFilterSelected($k));
1928 }
1929
1930 include_once("./Services/UIComponent/CheckboxListOverlay/classes/class.ilCheckboxListOverlayGUI.php");
1931 $cb_over = new ilCheckboxListOverlayGUI("tbl_filters_".$this->getId());
1932 $cb_over->setLinkTitle($lng->txt("optional_filters"));
1933 $cb_over->setItems($items);
1934
1935 $cb_over->setFormCmd($this->getParentCmd());
1936 $cb_over->setFieldVar("tblff".$this->getId());
1937 $cb_over->setHiddenVar("tblfsf".$this->getId());
1938
1939 $cb_over->setSelectionHeaderClass("ilTableMenuItem");
1940 $this->tpl->setCurrentBlock("filter_select");
1941
1942 // apply should be the first submit because of enter/return, inserting hidden submit
1943 $this->tpl->setVariable("HIDDEN_CMD_APPLY", $this->filter_cmd);
1944
1945 $this->tpl->setVariable("FILTER_SELECTOR", $cb_over->getHTML());
1946 $this->tpl->parseCurrentBlock();
1947 }
1948
1949 // if any filter
1950 if($ccnt > 0 || count($opt_filter) > 0)
1951 {
1952 $this->tpl->setVariable("TXT_FILTER", $lng->txt("filter"));
1953
1954 if($ccnt > 0)
1955 {
1956 if ($ccnt < $this->getFilterCols())
1957 {
1958 for($i = $ccnt; $i<=$this->getFilterCols(); $i++)
1959 {
1960 $this->tpl->touchBlock("filter_empty_cell");
1961 }
1962 }
1963 $this->tpl->setCurrentBlock("filter_row");
1964 $this->tpl->parseCurrentBlock();
1965
1966 $this->tpl->setCurrentBlock("filter_buttons");
1967 $this->tpl->setVariable("CMD_APPLY", $this->filter_cmd);
1968 $this->tpl->setVariable("TXT_APPLY", $this->filter_cmd_txt
1969 ? $this->filter_cmd_txt
1970 : $lng->txt("apply_filter"));
1971 $this->tpl->setVariable("CMD_RESET", $this->reset_cmd);
1972 $this->tpl->setVariable("TXT_RESET", $this->reset_cmd_txt
1973 ? $this->reset_cmd_txt
1974 : $lng->txt("reset_filter"));
1975 }
1976 else if(count($opt_filter) > 0)
1977 {
1978 $this->tpl->setCurrentBlock("optional_filter_hint");
1979 $this->tpl->setVariable('TXT_OPT_HINT', $lng->txt('optional_filter_hint'));
1980 $this->tpl->parseCurrentBlock();
1981 }
1982
1983 $this->tpl->setCurrentBlock("filter_section");
1984 $this->tpl->setVariable("FIL_ID", $this->getId());
1985 $this->tpl->parseCurrentBlock();
1986
1987 // (keep) filter hidden?
1988 if ($this->loadProperty("filter") != 1)
1989 {
1990 if (!$this->getDisableFilterHiding())
1991 {
1992 $this->tpl->setCurrentBlock("filter_hidden");
1993 $this->tpl->setVariable("FI_ID", $this->getId());
1994 $this->tpl->parseCurrentBlock();
1995 }
1996 }
1997 }
1998 }
1999
2007 protected function isAdvMDFilter(ilAdvancedMDRecordGUI $a_gui, $a_element)
2008 {
2009 foreach($a_gui->getFilterElements(false) as $item)
2010 {
2011 if($item === $a_element)
2012 {
2013 return true;
2014 }
2015 }
2016 return false;
2017 }
2018
2022 public function writeFilterToSession()
2023 {
2024 $advmd_record_gui = null;
2025 if(method_exists($this, "getAdvMDRecordGUI"))
2026 {
2027 $advmd_record_gui = $this->getAdvMDRecordGUI();
2028 }
2029
2030 foreach ($this->getFilterItems() as $item)
2031 {
2032 if($advmd_record_gui &&
2033 $this->isAdvMDFilter($advmd_record_gui, $item))
2034 {
2035 continue;
2036 }
2037
2038 if ($item->checkInput())
2039 {
2040 $item->setValueByArray($_POST);
2041 $item->writeToSession();
2042 }
2043 }
2044 foreach ($this->getFilterItems(true) as $item)
2045 {
2046 if($advmd_record_gui &&
2047 $this->isAdvMDFilter($advmd_record_gui, $item))
2048 {
2049 continue;
2050 }
2051
2052 if ($item->checkInput())
2053 {
2054 $item->setValueByArray($_POST);
2055 $item->writeToSession();
2056 }
2057 }
2058
2059 if($advmd_record_gui)
2060 {
2061 $advmd_record_gui->importFilter();
2062 }
2063
2064 // #13209
2065 unset($_REQUEST["tbltplcrt"]);
2066 unset($_REQUEST["tbltpldel"]);
2067 }
2068
2072 public function resetFilter()
2073 {
2074 global $lng;
2075
2076 $filter = $this->getFilterItems();
2077 $opt_filter = $this->getFilterItems(true);
2078
2079 foreach ($filter as $item)
2080 {
2081 if ($item->checkInput())
2082 {
2083 $item->setValueByArray($_POST);
2084 $item->clearFromSession();
2085 }
2086 }
2087 foreach ($opt_filter as $item)
2088 {
2089 if ($item->checkInput())
2090 {
2091 $item->setValueByArray($_POST);
2092 $item->clearFromSession();
2093 }
2094 }
2095
2096 // #13209
2097 unset($_REQUEST["tbltplcrt"]);
2098 unset($_REQUEST["tbltpldel"]);
2099 }
2100
2107 protected function fillRow($a_set)
2108 {
2109 foreach ($a_set as $key => $value)
2110 {
2111 $this->tpl->setVariable("VAL_".strtoupper($key), $value);
2112 }
2113 }
2114
2118 function fillFooter()
2119 {
2120 global $lng, $ilCtrl, $ilUser;
2121
2122 $footer = false;
2123
2124 // select all checkbox
2125 if ((strlen($this->getFormName())) && (strlen($this->getSelectAllCheckbox())) && $this->dataExists())
2126 {
2127 $this->tpl->setCurrentBlock("select_all_checkbox");
2128 $this->tpl->setVariable("SELECT_ALL_TXT_SELECT_ALL", $lng->txt("select_all"));
2129 $this->tpl->setVariable("SELECT_ALL_CHECKBOX_NAME", $this->getSelectAllCheckbox());
2130 $this->tpl->setVariable("SELECT_ALL_FORM_NAME", $this->getFormName());
2131 $this->tpl->setVariable("CHECKBOXNAME", "chb_select_all_" . $this->unique_id);
2132 $this->tpl->parseCurrentBlock();
2133 }
2134
2135 // table footer numinfo
2136 if ($this->enabled["numinfo"] && $this->enabled["footer"])
2137 {
2138 $start = $this->offset + 1; // compute num info
2139 if (!$this->dataExists())
2140 {
2141 $start = 0;
2142 }
2143 $end = $this->offset + $this->limit;
2144
2145 if ($end > $this->max_count or $this->limit == 0)
2146 {
2147 $end = $this->max_count;
2148 }
2149
2150 if ($this->max_count > 0)
2151 {
2152 if ($this->lang_support)
2153 {
2154 $numinfo = "(".$start." - ".$end." ".strtolower($this->lng->txt("of"))." ".$this->max_count.")";
2155 }
2156 else
2157 {
2158 $numinfo = "(".$start." - ".$end." of ".$this->max_count.")";
2159 }
2160 }
2161 if ($this->max_count > 0)
2162 {
2163 if ($this->getEnableNumInfo())
2164 {
2165 $this->tpl->setCurrentBlock("tbl_footer_numinfo");
2166 $this->tpl->setVariable("NUMINFO", $numinfo);
2167 $this->tpl->parseCurrentBlock();
2168 }
2169 }
2170 $footer = true;
2171 }
2172
2173 // table footer linkbar
2174 if ($this->enabled["linkbar"] && $this->enabled["footer"] && $this->limit != 0
2175 && $this->max_count > 0)
2176 {
2177 $layout = array(
2178 "link" => $this->footer_style,
2179 "prev" => $this->footer_previous,
2180 "next" => $this->footer_next,
2181 );
2182 //if (!$this->getDisplayAsBlock())
2183 //{
2184 $linkbar = $this->getLinkbar("1");
2185 $this->tpl->setCurrentBlock("tbl_footer_linkbar");
2186 $this->tpl->setVariable("LINKBAR", $linkbar);
2187 $this->tpl->parseCurrentBlock();
2188 $linkbar = true;
2189 //}
2190 $footer = true;
2191 }
2192
2193 // column selector
2194 if (count($this->getSelectableColumns()) > 0)
2195 {
2196 $items = array();
2197 foreach ($this->getSelectableColumns() as $k => $c)
2198 {
2199 $items[$k] = array("txt" => $c["txt"],
2200 "selected" => $this->isColumnSelected($k));
2201 }
2202 include_once("./Services/UIComponent/CheckboxListOverlay/classes/class.ilCheckboxListOverlayGUI.php");
2203 $cb_over = new ilCheckboxListOverlayGUI("tbl_".$this->getId());
2204 $cb_over->setLinkTitle($lng->txt("columns"));
2205 $cb_over->setItems($items);
2206 //$cb_over->setUrl("./ilias.php?baseClass=ilTablePropertiesStorage&table_id=".
2207 // $this->getId()."&cmd=saveSelectedFields&user_id=".$ilUser->getId());
2208 $cb_over->setFormCmd($this->getParentCmd());
2209 $cb_over->setFieldVar("tblfs".$this->getId());
2210 $cb_over->setHiddenVar("tblfsh".$this->getId());
2211 $cb_over->setSelectionHeaderClass("ilTableMenuItem");
2212 $column_selector = $cb_over->getHTML();
2213 $footer = true;
2214 }
2215
2216 if($this->getShowTemplates() && is_object($ilUser))
2217 {
2218 // template handling
2219 if(isset($_REQUEST["tbltplcrt"]) && $_REQUEST["tbltplcrt"])
2220 {
2221 if($this->saveTemplate($_REQUEST["tbltplcrt"]))
2222 {
2223 ilUtil::sendSuccess($lng->txt("tbl_template_created"));
2224 }
2225 }
2226 else if(isset($_REQUEST["tbltpldel"]) && $_REQUEST["tbltpldel"])
2227 {
2228 if($this->deleteTemplate($_REQUEST["tbltpldel"]))
2229 {
2230 ilUtil::sendSuccess($lng->txt("tbl_template_deleted"));
2231 }
2232 }
2233
2234 $create_id = "template_create_overlay_".$this->getId();
2235 $delete_id = "template_delete_overlay_".$this->getId();
2236 $list_id = "template_stg_".$this->getId();
2237
2238 include_once("./Services/Table/classes/class.ilTableTemplatesStorage.php");
2239 $storage = new ilTableTemplatesStorage();
2240 $templates = $storage->getNames($this->getContext(), $ilUser->getId());
2241
2242 include_once("./Services/UIComponent/Overlay/classes/class.ilOverlayGUI.php");
2243
2244 // form to delete template
2245 if(sizeof($templates))
2246 {
2247 $overlay = new ilOverlayGUI($delete_id);
2248 $overlay->setTrigger($list_id."_delete");
2249 $overlay->setAnchor("ilAdvSelListAnchorElement_".$list_id);
2250 $overlay->setAutoHide(false);
2251 $overlay->add();
2252
2253 $lng->loadLanguageModule("form");
2254 $this->tpl->setCurrentBlock("template_editor_delete_item");
2255 $this->tpl->setVariable("TEMPLATE_DELETE_OPTION_VALUE", "");
2256 $this->tpl->setVariable("TEMPLATE_DELETE_OPTION", "- ".$lng->txt("form_please_select")." -");
2257 $this->tpl->parseCurrentBlock();
2258 foreach($templates as $name)
2259 {
2260 $this->tpl->setVariable("TEMPLATE_DELETE_OPTION_VALUE", $name);
2261 $this->tpl->setVariable("TEMPLATE_DELETE_OPTION", $name);
2262 $this->tpl->parseCurrentBlock();
2263 }
2264
2265 $this->tpl->setCurrentBlock("template_editor_delete");
2266 $this->tpl->setVariable("TEMPLATE_DELETE_ID", $delete_id);
2267 $this->tpl->setVariable("TXT_TEMPLATE_DELETE", $lng->txt("tbl_template_delete"));
2268 $this->tpl->setVariable("TXT_TEMPLATE_DELETE_SUBMIT", $lng->txt("delete"));
2269 $this->tpl->setVariable("TEMPLATE_DELETE_CMD", $this->parent_cmd);
2270 $this->tpl->parseCurrentBlock();
2271 }
2272
2273
2274 // form to save new template
2275 $overlay = new ilOverlayGUI($create_id);
2276 $overlay->setTrigger($list_id."_create");
2277 $overlay->setAnchor("ilAdvSelListAnchorElement_".$list_id);
2278 $overlay->setAutoHide(false);
2279 $overlay->add();
2280
2281 $this->tpl->setCurrentBlock("template_editor");
2282 $this->tpl->setVariable("TEMPLATE_CREATE_ID", $create_id);
2283 $this->tpl->setVariable("TXT_TEMPLATE_CREATE", $lng->txt("tbl_template_create"));
2284 $this->tpl->setVariable("TXT_TEMPLATE_CREATE_SUBMIT", $lng->txt("save"));
2285 $this->tpl->setVariable("TEMPLATE_CREATE_CMD", $this->parent_cmd);
2286 $this->tpl->parseCurrentBlock();
2287
2288 // load saved template
2289 include_once("./Services/UIComponent/AdvancedSelectionList/classes/class.ilAdvancedSelectionListGUI.php");
2290 $alist = new ilAdvancedSelectionListGUI();
2291 $alist->setId($list_id);
2292 $alist->addItem($lng->txt("tbl_template_create"), "create", "#");
2293 if(sizeof($templates))
2294 {
2295 $alist->addItem($lng->txt("tbl_template_delete"), "delete", "#");
2296 foreach($templates as $name)
2297 {
2298 $ilCtrl->setParameter($this->parent_obj, $this->prefix."_tpl", urlencode($name));
2299 $alist->addItem($name, $name, $ilCtrl->getLinkTarget($this->parent_obj, $this->parent_cmd));
2300 $ilCtrl->setParameter($this->parent_obj, $this->prefix."_tpl", "");
2301 }
2302 }
2303 $alist->setListTitle($lng->txt("tbl_templates"));
2305 $this->tpl->setVariable("TEMPLATE_SELECTOR", "&nbsp;".$alist->getHTML());
2306 }
2307
2308 if ($footer)
2309 {
2310 $this->tpl->setCurrentBlock("tbl_footer");
2311 $this->tpl->setVariable("COLUMN_COUNT", $this->getColumnCount());
2312 if ($this->getDisplayAsBlock())
2313 {
2314 $this->tpl->setVariable("BLK_CLASS", "Block");
2315 }
2316 $this->tpl->parseCurrentBlock();
2317
2318 // top navigation, if number info or linkbar given
2319 if ($numinfo != "" || $linkbar != "" || $column_selector != "" ||
2320 count($this->filters) > 0 || count($this->optional_filters) > 0)
2321 {
2322 if (is_object($ilUser) && (count($this->filters) || count($this->optional_filters)))
2323 {
2324 $this->tpl->setCurrentBlock("filter_activation");
2325 $this->tpl->setVariable("TXT_ACTIVATE_FILTER", $lng->txt("show_filter"));
2326 $this->tpl->setVariable("FILA_ID", $this->getId());
2327 if ($this->getId() != "")
2328 {
2329 $this->tpl->setVariable("SAVE_URLA", "./ilias.php?baseClass=ilTablePropertiesStorage&table_id=".
2330 $this->getId()."&cmd=showFilter&user_id=".$ilUser->getId());
2331 }
2332 $this->tpl->parseCurrentBlock();
2333
2334
2335 if (!$this->getDisableFilterHiding())
2336 {
2337 $this->tpl->setCurrentBlock("filter_deactivation");
2338 $this->tpl->setVariable("TXT_HIDE", $lng->txt("hide_filter"));
2339 if ($this->getId() != "")
2340 {
2341 $this->tpl->setVariable("SAVE_URL", "./ilias.php?baseClass=ilTablePropertiesStorage&table_id=".
2342 $this->getId()."&cmd=hideFilter&user_id=".$ilUser->getId());
2343 $this->tpl->setVariable("FILD_ID", $this->getId());
2344 }
2345 $this->tpl->parseCurrentBlock();
2346 }
2347
2348 }
2349
2350 if ($numinfo != "" && $this->getEnableNumInfo())
2351 {
2352 $this->tpl->setCurrentBlock("top_numinfo");
2353 $this->tpl->setVariable("NUMINFO", $numinfo);
2354 $this->tpl->parseCurrentBlock();
2355 }
2356 if ($linkbar != "" && !$this->getDisplayAsBlock())
2357 {
2358 $linkbar = $this->getLinkbar("2");
2359 $this->tpl->setCurrentBlock("top_linkbar");
2360 $this->tpl->setVariable("LINKBAR", $linkbar);
2361 $this->tpl->parseCurrentBlock();
2362 }
2363
2364 // column selector
2365 $this->tpl->setVariable("COLUMN_SELECTOR", $column_selector);
2366
2367 // row selector
2368 if ($this->getShowRowsSelector() &&
2369 is_object($ilUser) &&
2370 $this->getId() &&
2371 !$this->rows_selector_off) // JF, 2014-10-27
2372 {
2373 include_once("./Services/UIComponent/AdvancedSelectionList/classes/class.ilAdvancedSelectionListGUI.php");
2374 $alist = new ilAdvancedSelectionListGUI();
2376 $alist->setId("sellst_rows_".$this->getId());
2377 $hpp = ($ilUser->getPref("hits_per_page") != 9999)
2378 ? $ilUser->getPref("hits_per_page")
2379 : $lng->txt("unlimited");
2380
2381 $options = array(0 => $lng->txt("default")." (".$hpp.")",5 => 5, 10 => 10, 15 => 15, 20 => 20,
2382 30 => 30, 40 => 40, 50 => 50,
2383 100 => 100, 200 => 200, 400 => 400, 800 => 800);
2384 foreach ($options as $k => $v)
2385 {
2386 $ilCtrl->setParameter($this->parent_obj, $this->prefix."_trows", $k);
2387 $alist->addItem($v, $k, $ilCtrl->getLinkTarget($this->parent_obj, $this->parent_cmd));
2388 $ilCtrl->setParameter($this->parent_obj, $this->prefix."_trows", "");
2389 }
2390 $alist->setListTitle($this->getRowSelectorLabel() ? $this->getRowSelectorLabel() : $lng->txt("rows"));
2391 $this->tpl->setVariable("ROW_SELECTOR", $alist->getHTML());
2392 }
2393
2394 // export
2395 if(sizeof($this->export_formats) && $this->dataExists())
2396 {
2397 include_once("./Services/UIComponent/AdvancedSelectionList/classes/class.ilAdvancedSelectionListGUI.php");
2398 $alist = new ilAdvancedSelectionListGUI();
2400 $alist->setId("sellst_xpt");
2401 foreach($this->export_formats as $format => $caption_lng_id)
2402 {
2403 $ilCtrl->setParameter($this->parent_obj, $this->prefix."_xpt", $format);
2404 $url = $ilCtrl->getLinkTarget($this->parent_obj, $this->parent_cmd);
2405 $ilCtrl->setParameter($this->parent_obj, $this->prefix."_xpt", "");
2406 $alist->addItem($lng->txt($caption_lng_id), $format, $url);
2407 }
2408 $alist->setListTitle($lng->txt("export"));
2409 $this->tpl->setVariable("EXPORT_SELECTOR", "&nbsp;".$alist->getHTML());
2410 }
2411
2412 $this->tpl->setCurrentBlock("top_navigation");
2413 $this->tpl->setVariable("COLUMN_COUNT", $this->getColumnCount());
2414 if ($this->getDisplayAsBlock())
2415 {
2416 $this->tpl->setVariable("BLK_CLASS", "Block");
2417 }
2418 $this->tpl->parseCurrentBlock();
2419 }
2420 }
2421 }
2422
2430 function getLinkbar($a_num)
2431 {
2432 global $ilCtrl, $lng, $ilUser;
2433
2434 $hash = "";
2435 if (is_object($ilUser) && $ilUser->getPref("screen_reader_optimization"))
2436 {
2437 $hash = "#".$this->getTopAnchor();
2438 }
2439
2440 $link = $ilCtrl->getLinkTargetByClass(get_class($this->parent_obj), $this->parent_cmd).
2441 "&".$this->getNavParameter()."=".
2442 $this->getOrderField().":".$this->getOrderDirection().":";
2443
2444 $LinkBar = "";
2445 $layout_prev = $lng->txt("previous");
2446 $layout_next = $lng->txt("next");
2447
2448 // if more entries then entries per page -> show link bar
2449 if ($this->max_count > $this->getLimit() || $this->custom_prev_next)
2450 {
2451 $sep = "<span>&nbsp;&nbsp;|&nbsp;&nbsp;</span>";
2452
2453 // calculate number of pages
2454 $pages = intval($this->max_count / $this->getLimit());
2455
2456 // add a page if a rest remains
2457 if (($this->max_count % $this->getLimit()))
2458 $pages++;
2459
2460 // links to other pages
2461 $offset_arr = array();
2462 for ($i = 1 ;$i <= $pages ; $i++)
2463 {
2464 $newoffset = $this->getLimit() * ($i-1);
2465
2466 $nav_value = $this->getOrderField().":".$this->getOrderDirection().":".$newoffset;
2467 $offset_arr[$nav_value] = $i;
2468 }
2469
2470 $sep = "<span>&nbsp;&nbsp;&nbsp;&nbsp;</span>";
2471
2472 // previous link
2473 if ($this->custom_prev_next && $this->custom_prev != "")
2474 {
2475 if ($LinkBar != "")
2476 $LinkBar .= $sep;
2477 $LinkBar .= "<a href=\"".$this->custom_prev.$hash."\">".$layout_prev."</a>";
2478 }
2479 else if ($this->getOffset() >= 1 && !$this->custom_prev_next)
2480 {
2481 if ($LinkBar != "")
2482 $LinkBar .= $sep;
2483 $prevoffset = $this->getOffset() - $this->getLimit();
2484 $LinkBar .= "<a href=\"".$link.$prevoffset.$hash."\">".$layout_prev."</a>";
2485 }
2486 else
2487 {
2488 if ($LinkBar != "")
2489 $LinkBar .= $sep;
2490 $LinkBar .= '<span class="ilTableFootLight">'.$layout_prev."</span>";
2491 }
2492
2493 // current value
2494 if ($a_num == "1")
2495 {
2496 $LinkBar .= '<input type="hidden" name="'.$this->getNavParameter().
2497 '" value="'.$this->getOrderField().":".$this->getOrderDirection().":".$this->getOffset().'" />';
2498 }
2499
2500 $sep = "<span>&nbsp;&nbsp;|&nbsp;&nbsp;</span>";
2501
2502 // show next link (if not last page)
2503 if ($this->custom_prev_next && $this->custom_next != "")
2504 {
2505 if ($LinkBar != "")
2506 $LinkBar .= $sep;
2507 $LinkBar .= "<a href=\"".$this->custom_next.$hash."\">".$layout_next."</a>";
2508 }
2509 else if (! ( ($this->getOffset() / $this->getLimit())==($pages-1) ) && ($pages!=1) &&
2510 !$this->custom_prev_next)
2511 {
2512 if ($LinkBar != "")
2513 $LinkBar .= $sep;
2514 $newoffset = $this->getOffset() + $this->getLimit();
2515 $LinkBar .= "<a href=\"".$link.$newoffset.$hash."\">".$layout_next."</a>";
2516 }
2517 else
2518 {
2519 if ($LinkBar != "")
2520 $LinkBar .= $sep;
2521 $LinkBar .= '<span class="ilTableFootLight">'.$layout_next."</span>";
2522 }
2523
2524 $sep = "<span>&nbsp;&nbsp;&nbsp;&nbsp;</span>";
2525
2526 if (count($offset_arr) && !$this->getDisplayAsBlock() && !$this->custom_prev_next)
2527 {
2528 if ($LinkBar != "")
2529 $LinkBar .= $sep;
2530 $LinkBar .= "".
2531 '<label for="tab_page_sel_'.$a_num.'">'.$lng->txt("page").'</label> '.
2532 ilUtil::formSelect($this->nav_value,
2533 $this->getNavParameter().$a_num, $offset_arr, false, true, 0, "small",
2534 array("id" => "tab_page_sel_".$a_num,
2535 "onchange" => "ilTablePageSelection(this, 'cmd[".$this->parent_cmd."]')"));
2536 //' <input class="submit" type="submit" name="cmd['.$this->parent_cmd.']" value="'.
2537 //$lng->txt("ok").'" />';
2538 }
2539
2540 return $LinkBar;
2541 }
2542 else
2543 {
2544 return false;
2545 }
2546 }
2547
2548 function fillHiddenRow()
2549 {
2550 $hidden_row = false;
2551 if(count($this->hidden_inputs))
2552 {
2553 foreach ($this->hidden_inputs as $hidden_input)
2554 {
2555 $this->tpl->setCurrentBlock("tbl_hidden_field");
2556 $this->tpl->setVariable("FIELD_NAME", $hidden_input["name"]);
2557 $this->tpl->setVariable("FIELD_VALUE", $hidden_input["value"]);
2558 $this->tpl->parseCurrentBlock();
2559 }
2560
2561 $this->tpl->setCurrentBlock("tbl_hidden_row");
2562 $this->tpl->parseCurrentBlock();
2563 }
2564 }
2565
2569 function fillActionRow()
2570 {
2571 global $lng;
2572
2573 // action row
2574 $action_row = false;
2575 $arrow = false;
2576
2577 // add selection buttons
2578 if (count($this->sel_buttons) > 0)
2579 {
2580 foreach ($this->sel_buttons as $button)
2581 {
2582 $this->tpl->setCurrentBlock("sel_button");
2583 $this->tpl->setVariable("SBUTTON_SELECT",
2584 ilUtil::formSelect($button["selected"], $button["sel_var"],
2585 $button["options"], false, true));
2586 $this->tpl->setVariable("SBTN_NAME", $button["cmd"]);
2587 $this->tpl->setVariable("SBTN_VALUE", $button["text"]);
2588 $this->tpl->parseCurrentBlock();
2589
2590 if ($this->getTopCommands())
2591 {
2592 $this->tpl->setCurrentBlock("sel_top_button");
2593 $this->tpl->setVariable("SBUTTON_SELECT",
2594 ilUtil::formSelect($button["selected"], $button["sel_var"],
2595 $button["options"], false, true));
2596 $this->tpl->setVariable("SBTN_NAME", $button["cmd"]);
2597 $this->tpl->setVariable("SBTN_VALUE", $button["text"]);
2598 $this->tpl->parseCurrentBlock();
2599 }
2600 }
2601 $buttons = true;
2602 $action_row = true;
2603 }
2604 $this->sel_buttons[] = array("options" => $a_options, "cmd" => $a_cmd, "text" => $a_text);
2605
2606 // add buttons
2607 if (count($this->buttons) > 0)
2608 {
2609 foreach ($this->buttons as $button)
2610 {
2611 if(!is_array($button))
2612 {
2613 if($button instanceof ilButtonBase)
2614 {
2615 $this->tpl->setVariable('BUTTON_OBJ', $button->render());
2616
2617 // this will remove id - should be unique
2618 $button = clone $button;
2619
2620 $this->tpl->setVariable('BUTTON_TOP_OBJ', $button->render());
2621 }
2622 continue;
2623 }
2624
2625 if (strlen($button['onclick']))
2626 {
2627 $this->tpl->setCurrentBlock('cmdonclick');
2628 $this->tpl->setVariable('CMD_ONCLICK', $button['onclick']);
2629 $this->tpl->parseCurrentBlock();
2630 }
2631 $this->tpl->setCurrentBlock("plain_button");
2632 if ($button["id"] != "")
2633 {
2634 $this->tpl->setVariable("PBID", ' id="'.$button["id"].'" ');
2635 }
2636 if ($button["class"] != "")
2637 {
2638 $this->tpl->setVariable("PBBT_CLASS", ' '.$button["class"]);
2639 }
2640 $this->tpl->setVariable("PBTN_NAME", $button["cmd"]);
2641 $this->tpl->setVariable("PBTN_VALUE", $button["text"]);
2642 $this->tpl->parseCurrentBlock();
2643
2644 if ($this->getTopCommands())
2645 {
2646 if (strlen($button['onclick']))
2647 {
2648 $this->tpl->setCurrentBlock('top_cmdonclick');
2649 $this->tpl->setVariable('CMD_ONCLICK', $button['onclick']);
2650 $this->tpl->parseCurrentBlock();
2651 }
2652 $this->tpl->setCurrentBlock("plain_top_button");
2653 $this->tpl->setVariable("PBTN_NAME", $button["cmd"]);
2654 $this->tpl->setVariable("PBTN_VALUE", $button["text"]);
2655 if ($button["class"] != "")
2656 {
2657 $this->tpl->setVariable("PBBT_CLASS", ' '.$button["class"]);
2658 }
2659 $this->tpl->parseCurrentBlock();
2660 }
2661 }
2662
2663 $buttons = true;
2664 $action_row = true;
2665 }
2666
2667 // multi selection
2668 if(count($this->mi_sel_buttons))
2669 {
2670 foreach ($this->mi_sel_buttons as $button)
2671 {
2672 $this->tpl->setCurrentBlock("mi_sel_button");
2673 $this->tpl->setVariable("MI_BUTTON_SELECT",
2674 ilUtil::formSelect($button["selected"], $button["sel_var"],
2675 $button["options"], false, true));
2676 $this->tpl->setVariable("MI_BTN_NAME", $button["cmd"]);
2677 $this->tpl->setVariable("MI_BTN_VALUE", $button["text"]);
2678 $this->tpl->parseCurrentBlock();
2679
2680 if ($this->getTopCommands())
2681 {
2682 $this->tpl->setCurrentBlock("mi_top_sel_button");
2683 $this->tpl->setVariable("MI_BUTTON_SELECT",
2684 ilUtil::formSelect($button["selected"], $button["sel_var"]."_2",
2685 $button["options"], false, true));
2686 $this->tpl->setVariable("MI_BTN_NAME", $button["cmd"]);
2687 $this->tpl->setVariable("MI_BTN_VALUE", $button["text"]);
2688 $this->tpl->parseCurrentBlock();
2689 }
2690
2691 }
2692 $arrow = true;
2693 $action_row = true;
2694 }
2695
2696
2697 if (count($this->multi) > 1 && $this->dataExists())
2698 {
2699 if($this->enable_command_for_all && $this->max_count <= self::getAllCommandLimit())
2700 {
2701 $this->tpl->setCurrentBlock("tbl_cmd_select_all");
2702 $this->tpl->setVariable("TXT_SELECT_CMD_ALL", $lng->txt("all_objects"));
2703 $this->tpl->parseCurrentBlock();
2704 }
2705
2706 $this->tpl->setCurrentBlock("tbl_cmd_select");
2707 $sel = array();
2708 foreach ($this->multi as $mc)
2709 {
2710 $sel[$mc["cmd"]] = $mc["text"];
2711 }
2712 $this->tpl->setVariable("SELECT_CMDS",
2713 ilUtil::formSelect("", "selected_cmd", $sel, false, true));
2714 $this->tpl->setVariable("TXT_EXECUTE", $lng->txt("execute"));
2715 $this->tpl->parseCurrentBlock();
2716 $arrow = true;
2717 $action_row = true;
2718
2719 if ($this->getTopCommands())
2720 {
2721 if($this->enable_command_for_all && $this->max_count <= self::getAllCommandLimit())
2722 {
2723 $this->tpl->setCurrentBlock("tbl_top_cmd_select_all");
2724 $this->tpl->setVariable("TXT_SELECT_CMD_ALL", $lng->txt("all_objects"));
2725 $this->tpl->parseCurrentBlock();
2726 }
2727
2728 $this->tpl->setCurrentBlock("tbl_top_cmd_select");
2729 $sel = array();
2730 foreach ($this->multi as $mc)
2731 {
2732 $sel[$mc["cmd"]] = $mc["text"];
2733 }
2734 $this->tpl->setVariable("SELECT_CMDS",
2735 ilUtil::formSelect("", "selected_cmd2", $sel, false, true));
2736 $this->tpl->setVariable("TXT_EXECUTE", $lng->txt("execute"));
2737 $this->tpl->parseCurrentBlock();
2738 }
2739 }
2740 elseif(count($this->multi) == 1 && $this->dataExists())
2741 {
2742 $this->tpl->setCurrentBlock("tbl_single_cmd");
2743 $sel = array();
2744 foreach ($this->multi as $mc)
2745 {
2746 $cmd = $mc['cmd'];
2747 $txt = $mc['text'];
2748 }
2749 $this->tpl->setVariable("TXT_SINGLE_CMD",$txt);
2750 $this->tpl->setVariable("SINGLE_CMD",$cmd);
2751 $this->tpl->parseCurrentBlock();
2752 $arrow = true;
2753 $action_row = true;
2754
2755 if ($this->getTopCommands())
2756 {
2757 $this->tpl->setCurrentBlock("tbl_top_single_cmd");
2758 $sel = array();
2759 foreach ($this->multi as $mc)
2760 {
2761 $cmd = $mc['cmd'];
2762 $txt = $mc['text'];
2763 }
2764 $this->tpl->setVariable("TXT_SINGLE_CMD",$txt);
2765 $this->tpl->setVariable("SINGLE_CMD",$cmd);
2766 $this->tpl->parseCurrentBlock();
2767 }
2768 }
2769
2770 if ($arrow)
2771 {
2772 $this->tpl->setCurrentBlock("tbl_action_img_arrow");
2773 $this->tpl->setVariable("IMG_ARROW", ilUtil::getImagePath("arrow_downright.svg"));
2774 $this->tpl->setVariable("ALT_ARROW", $lng->txt("action"));
2775 $this->tpl->parseCurrentBlock();
2776
2777 if ($this->getTopCommands())
2778 {
2779 $this->tpl->setCurrentBlock("tbl_top_action_img_arrow");
2780 $this->tpl->setVariable("IMG_ARROW", ilUtil::getImagePath("arrow_upright.svg"));
2781 $this->tpl->setVariable("ALT_ARROW", $lng->txt("action"));
2782 $this->tpl->parseCurrentBlock();
2783 }
2784 }
2785
2786 if ($action_row)
2787 {
2788 $this->tpl->setCurrentBlock("tbl_action_row");
2789 $this->tpl->parseCurrentBlock();
2790 if ($this->getTopCommands())
2791 {
2792 $this->tpl->setCurrentBlock("tbl_top_action_row");
2793 $this->tpl->parseCurrentBlock();
2794 }
2795 }
2796 }
2797
2803 public function setHeaderHTML($html)
2804 {
2805 $this->headerHTML = $html;
2806 }
2807
2814 function storeProperty($type, $value)
2815 {
2816 global $ilUser;
2817
2818 if(is_object($ilUser) && $this->getId() != "")
2819 {
2820 include_once("./Services/Table/classes/class.ilTablePropertiesStorage.php");
2821 $tab_prop = new ilTablePropertiesStorage();
2822
2823 $tab_prop->storeProperty($this->getId(), $ilUser->getId(), $type, $value);
2824 }
2825 }
2826
2833 function loadProperty($type)
2834 {
2835 global $ilUser;
2836
2837 if(is_object($ilUser) && $this->getId() != "")
2838 {
2839 include_once("./Services/Table/classes/class.ilTablePropertiesStorage.php");
2840 $tab_prop = new ilTablePropertiesStorage();
2841
2842 return $tab_prop->getProperty($this->getId(), $ilUser->getId(), $type);
2843 }
2844 }
2845
2851 public function getCurrentState()
2852 {
2853 $this->determineOffsetAndOrder();
2854 $this->determineLimit();
2855 $this->determineSelectedColumns();
2856 $this->determineSelectedFilters();
2857
2858 // "filter" show/hide is not saved
2859
2860 $result = array();
2861 $result["order"] = $this->getOrderField();
2862 $result["direction"] = $this->getOrderDirection();
2863 $result["offset"] = $this->getOffset();
2864 $result["rows"] = $this->getLimit();
2865 $result["selfilters"] = $this->getSelectedFilters();
2866
2867 // #9514 - $this->getSelectedColumns() will omit deselected, leading to
2868 // confusion on restoring template
2869 $result["selfields"] = $this->selected_column;
2870
2871 // gather filter values
2872 if($this->filters)
2873 {
2874 foreach($this->filters as $item)
2875 {
2876 $result["filter_values"][$item->getFieldId()] = $this->getFilterValue($item);
2877 }
2878 }
2879 if($this->optional_filters && $result["selfilters"])
2880 {
2881 foreach($this->optional_filters as $item)
2882 {
2883 if(in_array($item->getFieldId(), $result["selfilters"]))
2884 {
2885 $result["filter_values"][$item->getFieldId()] = $this->getFilterValue($item);
2886 }
2887 }
2888 }
2889
2890 return $result;
2891 }
2892
2899 protected function getFilterValue(ilFormPropertyGUI $a_item)
2900 {
2901 if(method_exists($a_item, "getChecked"))
2902 {
2903 return $a_item->getChecked();
2904 }
2905 else if(method_exists($a_item, "getValue"))
2906 {
2907 return $a_item->getValue();
2908 }
2909 else if(method_exists($a_item, "getDate"))
2910 {
2911 return $a_item->getDate()->get(IL_CAL_DATE);
2912 }
2913 }
2914
2921 protected function SetFilterValue(ilFormPropertyGUI $a_item, $a_value)
2922 {
2923 if(method_exists($a_item, "setChecked"))
2924 {
2925 $a_item->setChecked($a_value);
2926 }
2927 else if(method_exists($a_item, "setValue"))
2928 {
2929 $a_item->setValue($a_value);
2930 }
2931 else if(method_exists($a_item, "setDate"))
2932 {
2933 $a_item->setDate(new ilDate($a_value, IL_CAL_DATE));
2934 }
2935 $a_item->writeToSession();
2936 }
2937
2943 public function setContext($id)
2944 {
2945 if(trim($id))
2946 {
2947 $this->context = $id;
2948 }
2949 }
2950
2956 public function getContext()
2957 {
2958 return $this->context;
2959 }
2960
2966 public function setShowRowsSelector($a_value)
2967 {
2968 $this->show_rows_selector = (bool)$a_value;
2969 }
2970
2976 public function getShowRowsSelector()
2977 {
2979 }
2980
2986 public function setShowTemplates($a_value)
2987 {
2988 $this->show_templates = (bool)$a_value;
2989 }
2990
2996 public function getShowTemplates()
2997 {
2998 return $this->show_templates;
2999 }
3000
3007 public function restoreTemplate($a_name)
3008 {
3009 global $ilUser;
3010
3011 $a_name = ilUtil::stripSlashes($a_name);
3012
3013 if(trim($a_name) && $this->getContext() != "" && is_object($ilUser) && $ilUser->getId() != ANONYMOUS_USER_ID)
3014 {
3015 include_once("./Services/Table/classes/class.ilTableTemplatesStorage.php");
3016 $storage = new ilTableTemplatesStorage();
3017
3018 $data = $storage->load($this->getContext(), $ilUser->getId(), $a_name);
3019 if(is_array($data))
3020 {
3021 foreach($data as $property => $value)
3022 {
3023 $this->storeProperty($property, $value);
3024 }
3025 }
3026
3027 $data["filter_values"] = unserialize($data["filter_values"]);
3028 if($data["filter_values"])
3029 {
3030 $this->restore_filter_values = $data["filter_values"];
3031 }
3032
3033 $this->restore_filter = true;
3034
3035 return true;
3036 }
3037 return false;
3038 }
3039
3046 public function saveTemplate($a_name)
3047 {
3048 global $ilUser;
3049
3050 $a_name = ilUtil::prepareFormOutput($a_name, true);
3051
3052 if(trim($a_name) && $this->getContext() != "" && is_object($ilUser) && $ilUser->getId() != ANONYMOUS_USER_ID)
3053 {
3054 include_once("./Services/Table/classes/class.ilTableTemplatesStorage.php");
3055 $storage = new ilTableTemplatesStorage();
3056
3057 $state = $this->getCurrentState();
3058 $state["filter_values"] = serialize($state["filter_values"]);
3059 $state["selfields"] = serialize($state["selfields"]);
3060 $state["selfilters"] = serialize($state["selfilters"]);
3061
3062 $storage->store($this->getContext(), $ilUser->getId(), $a_name, $state);
3063 return true;
3064 }
3065 return false;
3066 }
3067
3074 public function deleteTemplate($a_name)
3075 {
3076 global $ilUser;
3077
3078 $a_name = ilUtil::prepareFormOutput($a_name, true);
3079
3080 if(trim($a_name) && $this->getContext() != "" && is_object($ilUser) && $ilUser->getId() != ANONYMOUS_USER_ID)
3081 {
3082 include_once("./Services/Table/classes/class.ilTableTemplatesStorage.php");
3083 $storage = new ilTableTemplatesStorage();
3084 $storage->delete($this->getContext(), $ilUser->getId(), $a_name);
3085 return true;
3086 }
3087 return false;
3088 }
3089
3093 function getLimit()
3094 {
3095 if($this->getExportMode() || $this->getPrintMode())
3096 {
3097 return 9999;
3098 }
3099 return parent::getLimit();
3100 }
3101
3105 function getOffset()
3106 {
3107 if($this->getExportMode() || $this->getPrintMode())
3108 {
3109 return 0;
3110 }
3111 return parent::getOffset();
3112 }
3113
3119 public function setExportFormats(array $formats)
3120 {
3121 $this->export_formats = array();
3122
3123 // #11339
3124 $valid = array(self::EXPORT_EXCEL => "tbl_export_excel",
3125 self::EXPORT_CSV => "tbl_export_csv");
3126
3127 foreach($formats as $format)
3128 {
3129 if(array_key_exists($format, $valid))
3130 {
3131 $this->export_formats[$format] = $valid[$format];
3132 }
3133 }
3134 }
3135
3140 public function setPrintMode($a_value = false)
3141 {
3142 $this->print_mode = (bool)$a_value;
3143 }
3144
3149 public function getPrintMode()
3150 {
3151 return $this->print_mode;
3152 }
3153
3159 public function getExportMode()
3160 {
3161 return $this->export_mode;
3162 }
3163
3169 public function exportData($format, $send = false)
3170 {
3171 if($this->dataExists())
3172 {
3173 // #9640: sort
3174 if (!$this->getExternalSorting() && $this->enabled["sort"])
3175 {
3176 $this->determineOffsetAndOrder(true);
3177
3178 $this->row_data = ilUtil::sortArray($this->row_data, $this->getOrderField(),
3179 $this->getOrderDirection(), $this->numericOrdering($this->getOrderField()));
3180 }
3181
3182 $filename = "export";
3183
3184 switch($format)
3185 {
3186 case self::EXPORT_EXCEL:
3187 include_once "./Services/Excel/classes/class.ilExcelUtils.php";
3188 include_once "./Services/Excel/classes/class.ilExcelWriterAdapter.php";
3189 $adapter = new ilExcelWriterAdapter($filename.".xls", $send);
3190 $workbook = $adapter->getWorkbook();
3191 $worksheet = $workbook->addWorksheet();
3192 $row = 0;
3193
3194 ob_start();
3195 $this->fillMetaExcel($worksheet, $row); // row must be increment in fillMetaExcel()! (optional method)
3196
3197 // #14813
3198 $pre = $row;
3199 $this->fillHeaderExcel($worksheet, $row); // row should NOT be incremented in fillHeaderExcel()! (required method)
3200 if($pre == $row)
3201 {
3202 $row++;
3203 }
3204
3205 foreach($this->row_data as $set)
3206 {
3207 $this->fillRowExcel($worksheet, $row, $set);
3208 $row++; // #14760
3209 }
3210 ob_end_clean();
3211
3212 $workbook->close();
3213 break;
3214
3215 case self::EXPORT_CSV:
3216 include_once "./Services/Utilities/classes/class.ilCSVWriter.php";
3217 $csv = new ilCSVWriter();
3218 $csv->setSeparator(";");
3219
3220 ob_start();
3221 $this->fillMetaCSV($csv);
3222 $this->fillHeaderCSV($csv);
3223 foreach($this->row_data as $set)
3224 {
3225 $this->fillRowCSV($csv, $set);
3226 }
3227 ob_end_clean();
3228
3229 if($send)
3230 {
3231 $filename .= ".csv";
3232 header("Content-type: text/comma-separated-values");
3233 header("Content-Disposition: attachment; filename=\"".$filename."\"");
3234 header("Expires: 0");
3235 header("Cache-Control: must-revalidate, post-check=0,pre-check=0");
3236 header("Pragma: public");
3237 echo $csv->getCSVString();
3238
3239 }
3240 else
3241 {
3242 file_put_contents($filename, $csv->getCSVString());
3243 }
3244 break;
3245 }
3246
3247 if($send)
3248 {
3249 exit();
3250 }
3251 }
3252 }
3253
3261 protected function fillMetaExcel($worksheet, &$a_row)
3262 {
3263
3264 }
3265
3273 protected function fillHeaderExcel($worksheet, &$a_row)
3274 {
3275 $col = 0;
3276 foreach ($this->column as $column)
3277 {
3278 $title = strip_tags($column["text"]);
3279 if($title)
3280 {
3281 $worksheet->write($a_row, $col, $title);
3282 $col++;
3283 }
3284 }
3285 }
3286
3295 protected function fillRowExcel($a_worksheet, &$a_row, $a_set)
3296 {
3297 $col = 0;
3298 foreach ($a_set as $key => $value)
3299 {
3300 if(is_array($value))
3301 {
3302 $value = implode(', ', $value);
3303 }
3304 $a_worksheet->write($a_row, $col, strip_tags($value));
3305 $col++;
3306 }
3307 }
3308
3315 protected function fillMetaCSV($a_csv)
3316 {
3317
3318 }
3319
3326 protected function fillHeaderCSV($a_csv)
3327 {
3328 foreach ($this->column as $column)
3329 {
3330 $title = strip_tags($column["text"]);
3331 if($title)
3332 {
3333 $a_csv->addColumn($title);
3334 }
3335 }
3336 $a_csv->addRow();
3337 }
3338
3346 protected function fillRowCSV($a_csv, $a_set)
3347 {
3348 foreach ($a_set as $key => $value)
3349 {
3350 if(is_array($value))
3351 {
3352 $value = implode(', ', $value);
3353 }
3354 $a_csv->addColumn(strip_tags($value));
3355 }
3356 $a_csv->addRow();
3357 }
3358
3364 public function setEnableAllCommand($a_value)
3365 {
3366 $this->enable_command_for_all = (bool)$a_value;
3367 }
3368
3374 public static function getAllCommandLimit()
3375 {
3376 global $ilClientIniFile;
3377
3378 $limit = $ilClientIniFile->readVariable("system", "TABLE_ACTION_ALL_LIMIT");
3379 if(!$limit)
3380 {
3382 }
3383
3384 return $limit;
3385 }
3386
3391 {
3392 $this->row_selector_label = $row_selector_label;
3393 return $this;
3394 }
3395
3399 public function getRowSelectorLabel()
3400 {
3402 }
3403
3409 public function setPreventDoubleSubmission($a_val)
3410 {
3411 $this->prevent_double_submission = $a_val;
3412 }
3413
3420 {
3422 }
3423
3424 function setLimit($a_limit = 0, $a_default_limit = 0)
3425 {
3426 parent::setLimit($a_limit, $a_default_limit);
3427
3428 // #17077 - if limit is set "manually" to 9999, force rows selector off
3429 if($a_limit == 9999 &&
3430 $this->limit_determined)
3431 {
3432 $this->rows_selector_off = true;
3433 }
3434 }
3435}
3436
3437?>
$result
global $tpl
Definition: ilias.php:8
$filename
Definition: buildRTE.php:89
$_GET["client_id"]
$_SESSION["AccountId"]
const IL_CAL_DATE
getFilterElements($a_only_non_empty=true)
Get SQL conditions for current filter value(s)
User interface class for advanced drop-down selection lists.
Helper class to generate CSV files.
User interface class for a checkbox list overlay.
This class represents a number property in a property form.
static setUseRelativeDates($a_status)
set use relative dates
This class represents a date/time property in a property form.
Class for single dates.
This class represents a duration (typical hh:mm:ss) property in a property form.
Class ilExcelWriterAdapter.
This class represents a property in a property form.
writeToSession()
Write to session.
This class represents a number property in a property form.
This is a utility class for the yui overlays.
This class represents a selection list property in a property form.
Class ilTable2GUI.
getParentCmd()
Get parent command.
getExportMode()
Was export activated?
fillRowExcel($a_worksheet, &$a_row, $a_set)
Excel Version of Fill Row.
addHiddenInput($a_name, $a_value)
Add Hidden Input field.
getDescription()
Get description.
getSelectedColumns()
Get selected columns.
getOpenFormTag()
Get open form tag.
fillHeaderCSV($a_csv)
CSV Version of Fill Header.
setTopCommands($a_val)
Set top commands (display command buttons on top of table, too)
getFormName()
Get Form name.
prepareOutput()
Anything that must be done before HTML is generated.
getEnableHeader()
Get Enable Header.
saveTemplate($a_name)
Save current state as template.
restoreTemplate($a_name)
Restore state from template.
addSelectionButton($a_sel_var, $a_options, $a_cmd, $a_text, $a_default_selection='')
Add Selection List + Command button.
setEnableHeader($a_enableheader)
Set Enable Header.
determineSelectedColumns()
Determine selected columns.
getHTML()
Get HTML.
fillMetaCSV($a_csv)
Add meta information to csv export.
getFilterValue(ilFormPropertyGUI $a_item)
Get current filter value.
setDisableFilterHiding($a_val=true)
Set disable filter hiding.
getLinkbar($a_num)
Get previous/next linkbar.
setExternalSorting($a_val)
Set external sorting.
isAdvMDFilter(ilAdvancedMDRecordGUI $a_gui, $a_element)
Check if filter element is based on adv md.
getShowTemplates()
Get template state.
setDisplayAsBlock($a_val)
Set display as block.
getNoEntriesText()
Get text for an empty table.
addColumn($a_text, $a_sort_field="", $a_width="", $a_is_checkbox_action_column=false, $a_class="", $a_tooltip="", $a_tooltip_with_html=false)
Add a column to the header.
setCloseFormTag($a_val)
Set close form tag.
getEnableTitle()
Get Enable Title.
setShowRowsSelector($a_value)
Toggle rows-per-page selector.
setExportFormats(array $formats)
Set available export formats.
getParentObject()
Get parent object.
setPrintMode($a_value=false)
Toogle print mode.
setPrefix($a_prefix)
set prefix for sort and offset fields (if you have two or more tables on a page that you want to sort...
setTitle($a_title, $a_icon=0, $a_icon_alt=0)
Set title and title icon.
fillRow($a_set)
Standard Version of Fill Row.
setNoEntriesText($a_text)
Set text for an empty table.
getFormAction()
Get Form action parameter.
initFilter()
Init filter.
SetFilterValue(ilFormPropertyGUI $a_item, $a_value)
Set current filter value.
exportData($format, $send=false)
Export and optionally send current table data.
& executeCommand()
Execute command.
getFilterItems($a_optionals=false)
Get filter items.
setIsDataTable($a_val)
Set is data table.
render()
render table @access public
determineOffsetAndOrder($a_omit_offset=false)
Determine offset and order.
getFilterCols()
Get filter columns.
getShowRowsSelector()
Get rows-per-page selector state.
fillRowCSV($a_csv, $a_set)
CSV Version of Fill Row.
fillHeaderExcel($worksheet, &$a_row)
Excel Version of Fill Header.
getId()
Get element id.
setRowSelectorLabel($row_selector_label)
getContext()
Get context.
setEnableAllCommand($a_value)
Enable actions for all entries in current result.
setData($a_data)
set table data @access public
setHeaderHTML($html)
set header html
setResetCommand($a_val, $a_caption=null)
Set reset filter command.
__construct($a_parent_obj, $a_parent_cmd="", $a_template_context="")
Constructor.
getExternalSorting()
Get external sorting.
setEnableTitle($a_enabletitle)
Set Enable Title.
setEnableNumInfo($a_val)
Set enable num info.
getDefaultOrderDirection()
Get Default order direction.
getDisableFilterHiding()
Get disable filter hiding
renderFilter()
Render Filter section.
getDisplayAsBlock()
Get display as block.
getLimit()
Get limit.
setPreventDoubleSubmission($a_val)
Set prevent double submission.
addCommandButtonInstance(ilButtonBase $a_button)
Add Command button instance.
storeProperty($type, $value)
Store table property.
setRowTemplate($a_template, $a_template_dir="")
Set row template.
setTopAnchor($a_val)
Set top anchor.
resetOffset($a_in_determination=false)
Reset offset.
loadProperty($type)
Load table property.
setLimit($a_limit=0, $a_default_limit=0)
set max.
getFilterItemByPostVar($a_post_var)
fillMetaExcel($worksheet, &$a_row)
Add meta information to excel export.
addMultiCommand($a_cmd, $a_text)
Add Command button.
setFormName($a_formname)
Set Form name.
getCurrentState()
get current settings for order, limit, columns and filter
getSelectableColumns()
Get selectable columns.
addFilterItem($a_input_item, $a_optional=false)
Add filter item.
getEnableNumInfo()
Get enable num info.
setDefaultOrderField($a_defaultorderfield)
Set Default order field.
setSelectAllCheckbox($a_select_all_checkbox)
Set the name of the checkbox that should be toggled with a select all button.
fillFooter()
Fill footer row.
static getAllCommandLimit()
Get maximum number of entries to enable actions for all.
getExternalSegmentation()
Get external segmentation.
setCustomPreviousNext($a_prev_link, $a_next_link)
Set custom previous/next links.
setContext($id)
Set context.
getPrintMode()
Get print mode.
getSelectedFilters()
Get selected filters.
getCloseFormTag()
Get close form tag.
getTopAnchor()
Get top anchor.
getFilterCommand()
Get filter command.
getOffset()
Get offset.
const FILTER_DURATION_RANGE
setExternalSegmentation($a_val)
Set external segmentation.
resetFilter()
Reset filter.
setId($a_val)
Set id.
getTopCommands()
Get top commands (display command buttons on top of table, too)
writeFilterToSession()
Write filter values to session.
setDescription($a_val)
Set description.
setOrderField($a_order_field)
set order column
setFilterCols($a_val)
Set filter columns.
setFormAction($a_form_action, $a_multipart=false)
Set Form action parameter.
addFilterItemByMetaType($id, $type=self::FILTER_TEXT, $a_optional=false, $caption=NULL)
Add filter by standard type.
getIsDataTable()
Get is data table.
const FILTER_NUMBER_RANGE
addMultiItemSelectionButton($a_sel_var, $a_options, $a_cmd, $a_text, $a_default_selection='')
Add Selection List + Command button for selected items.
determineLimit()
Determine the limit.
isFilterSelected($a_col)
Is given filter selected?
deleteTemplate($a_name)
Delete template.
fillActionRow()
Fill Action Row.
setDefaultOrderDirection($a_defaultorderdirection)
Set Default order direction.
setOrderLink($sort_field, $order_dir)
getResetCommand()
Get reset filter command.
setFilterCommand($a_val, $a_caption=null)
Set filter command.
getDefaultOrderField()
Get Default order field.
setCloseCommand($a_link)
Add command for closing table.
setOpenFormTag($a_val)
Set open form tag.
isColumnSelected($a_col)
Is given column selected?
numericOrdering($a_field)
Should this field be sorted numeric?
getSelectAllCheckbox()
Get the name of the checkbox that should be toggled with a select all button.
getPreventDoubleSubmission()
Get prevent double submission.
addHeaderCommand($a_href, $a_text, $a_target="", $a_img="")
Add Header Command (Link) (Image needed for now)
setShowTemplates($a_value)
Toggle templates.
const FILTER_DATETIME_RANGE
determineSelectedFilters()
Determine selected filters.
addCommandButton($a_cmd, $a_text, $a_onclick='', $a_id="", $a_class=null)
Add Command button.
Class ilTableGUI.
getOrderDirection()
Get order direction.
setMaxCount($a_max_count)
set max.
getStyle($a_element)
setOrderDirection($a_order_direction)
set order direction @access public
getColumnCount()
Returns the column count based on the number of the header row columns @access public.
setFooter($a_style, $a_previous=0, $a_next=0)
set order direction @access public
setOffset($a_offset)
set dataset offset @access public
Saves (mostly asynchronously) user properties of tables (e.g.
Saves (mostly asynchronously) user properties of tables (e.g.
special template class to simplify handling of ITX/PEAR
This class represents a text property in a property form.
static addTooltip($a_el_id, $a_text, $a_container="", $a_my="bottom center", $a_at="top center", $a_use_htmlspecialchars=true)
Adds a tooltip to an HTML element.
static sortArray($array, $a_array_sortby, $a_array_sortorder=0, $a_numeric=false, $a_keep_keys=false)
sortArray
static sendSuccess($a_info="", $a_keep=false)
Send Success Message to Screen.
static img($a_src, $a_alt="", $a_width="", $a_height="", $a_border=0, $a_id="", $a_class="")
Build img tag.
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
static formSelect($selected, $varname, $options, $multiple=false, $direct_text=false, $size="0", $style_class="", $attribs="", $disabled=false)
Builds a select form field with options and shows the selected option first.
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
static prepareFormOutput($a_str, $a_strip=false)
prepares string output for html forms @access public
static initConnection()
Init YUI Connection module.
$_POST['username']
Definition: cron.php:12
$valid
$txt
Definition: error.php:12
$html
Definition: example_001.php:87
global $ilCtrl
Definition: ilias.php:18
exit
Definition: login.php:54
global $lng
Definition: privfeed.php:40
$cmd
Definition: sahs_server.php:35
$url
Definition: shib_logout.php:72
if($_REQUEST['ilias_path']) define('ILIAS_HTTP_PATH' $_REQUEST['ilias_path']
Definition: index.php:7
if(!is_array($argv)) $options
global $ilUser
Definition: imgupload.php:15