ILIAS  release_6 Revision v6.24-5-g0c8bfefb3b8
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
21 protected $ctrl;
22
26 protected $tpl;
27
31 protected $parent_obj;
32
36 protected $parent_cmd;
37
38 protected $close_command = "";
39 private $unique_id;
40 private $headerHTML;
41 protected $top_anchor = "il_table_top";
42 protected $filters = array();
43 protected $optional_filters = array();
44 protected $filter_cmd = 'applyFilter';
45 protected $reset_cmd = 'resetFilter';
46 protected $filter_cols = 5;
47 protected $ext_sort = false;
48 protected $ext_seg = false;
49 protected $context = "";
50
51 protected $mi_sel_buttons = [];
52 protected $disable_filter_hiding = false;
53 protected $selected_filter = false;
54 protected $top_commands = true;
55 protected $selectable_columns = array();
56 protected $selected_column = array();
57 protected $show_templates = false;
58 protected $show_rows_selector = true; // JF, 2014-10-27
59 protected $rows_selector_off = false;
60
61 protected $nav_determined = false;
62 protected $limit_determined = false;
63 protected $filters_determined = false;
64 protected $columns_determined = false;
65 protected $open_form_tag = true;
66 protected $close_form_tag = true;
67
68 protected $export_formats = [];
69 protected $export_mode;
70 protected $print_mode;
71
73 protected $restore_filter; // [bool]
74 protected $restore_filter_values; // [bool]
75
79 protected $default_filter_visibility = false;
80
81 protected $sortable_fields = array();
86
91
95 protected $select_all_on_top = false;
96
97 protected $sel_buttons = [];
98
99
100 const FILTER_TEXT = 1;
101 const FILTER_SELECT = 2;
102 const FILTER_DATE = 3;
109
110 const EXPORT_EXCEL = 1;
111 const EXPORT_CSV = 2;
112
113 const ACTION_ALL_LIMIT = 1000;
114
115
123 public function __construct($a_parent_obj, $a_parent_cmd = "", $a_template_context = "")
124 {
125 global $DIC;
126
127 $this->lng = $DIC->language();
128 $this->ctrl = $DIC->ctrl();
129 $lng = $DIC->language();
130
131 parent::__construct(0, false);
132 $this->unique_id = md5(uniqid());
133 $this->parent_obj = $a_parent_obj;
134 $this->parent_cmd = $a_parent_cmd;
135 $this->buttons = array();
136 $this->header_commands = array();
137 $this->multi = array();
138 $this->hidden_inputs = array();
139 $this->formname = "table_" . $this->unique_id;
140 $this->tpl = new ilTemplate("tpl.table2.html", true, true, "Services/Table");
141
142 $lng->loadLanguageModule('tbl');
143
144 if (!$a_template_context) {
145 $a_template_context = $this->getId();
146 }
147 $this->setContext($a_template_context);
148
149 // activate export mode
150 if (isset($_GET[$this->prefix . "_xpt"])) {
151 $this->export_mode = (int) $_GET[$this->prefix . "_xpt"];
152 }
153
154 // template handling
155 if (isset($_GET[$this->prefix . "_tpl"])) {
156 $this->restoreTemplate($_GET[$this->prefix . "_tpl"]);
157 }
158
159 $this->determineLimit();
160 $this->setIsDataTable(true);
161 $this->setEnableNumInfo(true);
163 }
164
170 public function setOpenFormTag($a_val)
171 {
172 $this->open_form_tag = $a_val;
173 }
174
180 public function getOpenFormTag()
181 {
183 }
184
190 public function setCloseFormTag($a_val)
191 {
192 $this->close_form_tag = $a_val;
193 }
194
200 public function getCloseFormTag()
201 {
203 }
204
208 public function determineLimit()
209 {
210 global $DIC;
211
212 $ilUser = null;
213 if (isset($DIC["ilUser"])) {
214 $ilUser = $DIC["ilUser"];
215 }
216
217 if ($this->limit_determined) {
218 return;
219 }
220
221 $limit = 0;
222 if (isset($_GET[$this->prefix . "_trows"])) {
223 $this->storeProperty("rows", $_GET[$this->prefix . "_trows"]);
224 $limit = $_GET[$this->prefix . "_trows"];
225 $this->resetOffset();
226 }
227
228 if ($limit == 0) {
229 $rows = $this->loadProperty("rows");
230 if ($rows > 0) {
231 $limit = $rows;
232 } else {
233 if (is_object($ilUser)) {
234 $limit = $ilUser->getPref("hits_per_page");
235 } else {
236 $limit = 40;
237 }
238 }
239 }
240
241 $this->setLimit($limit);
242 $this->limit_determined = true;
243 }
244
250 public function getSelectableColumns()
251 {
252 return array();
253 }
254
258 public function determineSelectedColumns()
259 {
260 if ($this->columns_determined) {
261 return;
262 }
263
264 $old_sel = $this->loadProperty("selfields");
265
266 $stored = false;
267 if ($old_sel != "") {
268 $sel_fields =
269 @unserialize($old_sel);
270 $stored = true;
271 }
272 if (!is_array($sel_fields)) {
273 $stored = false;
274 $sel_fields = array();
275 }
276
277 $this->selected_columns = array();
278 $set = false;
279 foreach ($this->getSelectableColumns() as $k => $c) {
280 $this->selected_column[$k] = false;
281
282 $new_column = ($sel_fields[$k] === null);
283
284 if (isset($_POST["tblfsh" . $this->getId()]) && $_POST["tblfsh" . $this->getId()]) {
285 $set = true;
286 if (is_array($_POST["tblfs" . $this->getId()]) && in_array($k, $_POST["tblfs" . $this->getId()])) {
287 $this->selected_column[$k] = true;
288 }
289 } elseif ($stored && !$new_column) { // take stored values
290 $this->selected_column[$k] = $sel_fields[$k];
291 } else { // take default values
292 if ($new_column) {
293 $set = true;
294 }
295 if (isset($c["default"]) && $c["default"]) {
296 $this->selected_column[$k] = true;
297 }
298 }
299
300 // Optional filters
301 if (isset($_POST["tblff" . $this->getId()]) && $_POST["tblff" . $this->getId()]) {
302 $set = true;
303 if (is_array($_POST["tblff" . $this->getId()]) && in_array($k, $_POST["tblff" . $this->getId()])) {
304 $this->selected_column[$k] = true;
305 }
306 }
307
308 }
309
310 if ($old_sel != serialize($this->selected_column) && $set) {
311 $this->storeProperty("selfields", serialize($this->selected_column));
312 }
313
314 $this->columns_determined = true;
315 }
316
323 public function isColumnSelected($a_col)
324 {
325 return $this->selected_column[$a_col];
326 }
327
334 public function getSelectedColumns()
335 {
336 $scol = array();
337 foreach ($this->selected_column as $k => $v) {
338 if ($v) {
339 $scol[$k] = $k;
340 }
341 }
342 return $scol;
343 }
344
348 public function executeCommand()
349 {
351
352 $next_class = $ilCtrl->getNextClass($this);
353 $cmd = $ilCtrl->getCmd();
354
355 switch ($next_class) {
356 case 'ilformpropertydispatchgui':
357 include_once './Services/Form/classes/class.ilFormPropertyDispatchGUI.php';
358 $form_prop_dispatch = new ilFormPropertyDispatchGUI();
359 $this->initFilter();
360 $item = $this->getFilterItemByPostVar($_GET["postvar"]);
361 $form_prop_dispatch->setItem($item);
362 return $ilCtrl->forwardCommand($form_prop_dispatch);
363 break;
364
365 }
366 return false;
367 }
368
372 public function resetOffset($a_in_determination = false)
373 {
374 if (!$this->nav_determined && !$a_in_determination) {
376 }
377 $this->nav_value = $this->getOrderField() . ":" . $this->getOrderDirection() . ":0";
378 $_GET[$this->getNavParameter()] =
379 $_POST[$this->getNavParameter() . "1"] =
380 $this->nav_value;
381 //echo $this->nav_value;
382 $this->setOffset(0);
383 }
384
389 public function initFilter()
390 {
391 }
392
398 public function getParentObject()
399 {
400 return $this->parent_obj;
401 }
402
408 public function getParentCmd()
409 {
410 return $this->parent_cmd;
411 }
412
418 public function setTopAnchor($a_val)
419 {
420 $this->top_anchor = $a_val;
421 }
422
428 public function getTopAnchor()
429 {
430 return $this->top_anchor;
431 }
432
438 public function setNoEntriesText($a_text)
439 {
440 $this->noentriestext = $a_text;
441 }
442
448 public function getNoEntriesText()
449 {
450 return $this->noentriestext;
451 }
452
458 public function setIsDataTable($a_val)
459 {
460 $this->datatable = $a_val;
461 }
462
468 public function getIsDataTable()
469 {
470 return $this->datatable;
471 }
472
478 public function setEnableTitle($a_enabletitle)
479 {
480 $this->enabled["title"] = $a_enabletitle;
481 }
482
488 public function getEnableTitle()
489 {
490 return $this->enabled["title"];
491 }
492
498 public function setEnableHeader($a_enableheader)
499 {
500 $this->enabled["header"] = $a_enableheader;
501 }
502
508 public function getEnableHeader()
509 {
510 return $this->enabled["header"];
511 }
512
518 public function setEnableNumInfo($a_val)
519 {
520 $this->num_info = $a_val;
521 }
522
528 public function getEnableNumInfo()
529 {
530 return $this->num_info;
531 }
532
536 final public function setTitle($a_title, $a_icon = 0, $a_icon_alt = 0)
537 {
538 parent::setTitle($a_title, $a_icon, $a_icon_alt);
539 }
540
546 public function setDescription($a_val)
547 {
548 $this->description = $a_val;
549 }
550
556 public function getDescription()
557 {
558 return $this->description;
559 }
560
566 public function setOrderField($a_order_field)
567 {
568 $this->order_field = $a_order_field;
569 }
570
571 public function getOrderField()
572 {
573 return $this->order_field;
574 }
575
576 final public function setData($a_data)
577 {
578 // check column names against given data (to ensure proper sorting)
579 if (defined('DEVMODE') && DEVMODE &&
580 $this->enabled["header"] && $this->enabled["sort"] &&
581 $this->columns_determined && is_array($this->column) &&
582 is_array($a_data) && sizeof($a_data) && !$this->getExternalSorting()) {
583 $check = $a_data;
584 $check = array_keys(array_shift($check));
585 foreach ($this->column as $col) {
586 if ($col["sort_field"] && !in_array($col["sort_field"], $check)) {
587 $invalid[] = $col["sort_field"];
588 }
589 }
590
591 // this triggers an error, if some columns are not set for some rows
592 // which may just be a representation of "null" values, e.g.
593 // ilAdvancedMDValues:queryForRecords works that way.
594/* if(sizeof($invalid))
595 {
596 trigger_error("The following columns are defined as sortable but".
597 " cannot be found in the given data: ".implode(", ", $invalid).
598 ". Sorting will not work properly.", E_USER_WARNING);
599 }*/
600 }
601
602 $this->row_data = $a_data;
603 if (!is_array($this->row_data)) {
604 $this->row_data = [];
605 }
606 }
607
608 final public function getData()
609 {
610 return $this->row_data;
611 }
612
613 final public function dataExists()
614 {
615 if (is_array($this->row_data)) {
616 if (count($this->row_data) > 0) {
617 return true;
618 }
619 }
620 return false;
621 }
622
623 final public function setPrefix($a_prefix)
624 {
625 $this->prefix = $a_prefix;
626 }
627
628 final public function getPrefix()
629 {
630 return $this->prefix;
631 }
632
637 final public function addFilterItem($a_input_item, $a_optional = false)
638 {
639 $a_input_item->setParent($this);
640 if (!$a_optional) {
641 $this->filters[] = $a_input_item;
642 } else {
643 $this->optional_filters[] = $a_input_item;
644 }
645
646 // restore filter values (from stored view)
647 if ($this->restore_filter) {
648 if (array_key_exists($a_input_item->getFieldId(), $this->restore_filter_values)) {
649 $this->setFilterValue($a_input_item, $this->restore_filter_values[$a_input_item->getFieldId()]);
650 } else {
651 $this->setFilterValue($a_input_item, null); // #14949
652 }
653 }
654 }
655
665 public function addFilterItemByMetaType($id, $type = self::FILTER_TEXT, $a_optional = false, $caption = null)
666 {
667 global $DIC;
668
669 $lng = $DIC->language(); // constructor may not be called here, if initFilter is being called in subclasses before parent::__construct
670
671 if (!$caption) {
672 $caption = $lng->txt($id);
673 }
674
675 include_once("./Services/Form/classes/class.ilPropertyFormGUI.php");
676
677 switch ($type) {
679 $item = new ilCheckboxInputGUI($caption, $id);
680 break;
681
683 include_once("./Services/Form/classes/class.ilSelectInputGUI.php");
684 $item = new ilSelectInputGUI($caption, $id);
685 break;
686
688 include_once("./Services/Form/classes/class.ilDateTimeInputGUI.php");
689 $item = new ilDateTimeInputGUI($caption, $id);
690 break;
691
693 include_once("./Services/Form/classes/class.ilTextInputGUI.php");
694 $item = new ilTextInputGUI($caption, $id);
695 $item->setMaxLength(64);
696 $item->setSize(20);
697 // $item->setSubmitFormOnEnter(true);
698 break;
699
701 $lng->loadLanguageModule("meta");
702 include_once("./Services/Form/classes/class.ilSelectInputGUI.php");
703 $item = new ilSelectInputGUI($caption, $id);
704 $options = array("" => $lng->txt("trac_all"));
705 foreach ($lng->getInstalledLanguages() as $lang_key) {
706 $options[$lang_key] = $lng->txt("meta_l_" . $lang_key);
707 }
708 $item->setOptions($options);
709 break;
710
712 include_once("./Services/Form/classes/class.ilCombinationInputGUI.php");
713 include_once("./Services/Form/classes/class.ilNumberInputGUI.php");
714 $item = new ilCombinationInputGUI($caption, $id);
715 $combi_item = new ilNumberInputGUI("", $id . "_from");
716 $item->addCombinationItem("from", $combi_item, $lng->txt("from"));
717 $combi_item = new ilNumberInputGUI("", $id . "_to");
718 $item->addCombinationItem("to", $combi_item, $lng->txt("to"));
719 $item->setComparisonMode(ilCombinationInputGUI::COMPARISON_ASCENDING);
720 $item->setMaxLength(7);
721 $item->setSize(20);
722 break;
723
725 include_once("./Services/Form/classes/class.ilCombinationInputGUI.php");
726 include_once("./Services/Form/classes/class.ilDateTimeInputGUI.php");
727 $item = new ilCombinationInputGUI($caption, $id);
728 $combi_item = new ilDateTimeInputGUI("", $id . "_from");
729 $item->addCombinationItem("from", $combi_item, $lng->txt("from"));
730 $combi_item = new ilDateTimeInputGUI("", $id . "_to");
731 $item->addCombinationItem("to", $combi_item, $lng->txt("to"));
732 $item->setComparisonMode(ilCombinationInputGUI::COMPARISON_ASCENDING);
733 break;
734
736 include_once("./Services/Form/classes/class.ilCombinationInputGUI.php");
737 include_once("./Services/Form/classes/class.ilDateTimeInputGUI.php");
738 $item = new ilCombinationInputGUI($caption, $id);
739 $combi_item = new ilDateTimeInputGUI("", $id . "_from");
740 $combi_item->setShowTime(true);
741 $item->addCombinationItem("from", $combi_item, $lng->txt("from"));
742 $combi_item = new ilDateTimeInputGUI("", $id . "_to");
743 $combi_item->setShowTime(true);
744 $item->addCombinationItem("to", $combi_item, $lng->txt("to"));
745 $item->setComparisonMode(ilCombinationInputGUI::COMPARISON_ASCENDING);
746 break;
747
749 $lng->loadLanguageModule("form");
750 include_once("./Services/Form/classes/class.ilCombinationInputGUI.php");
751 include_once("./Services/Form/classes/class.ilDurationInputGUI.php");
752 $item = new ilCombinationInputGUI($caption, $id);
753 $combi_item = new ilDurationInputGUI("", $id . "_from");
754 $combi_item->setShowMonths(false);
755 $combi_item->setShowDays(true);
756 $combi_item->setShowSeconds(true);
757 $item->addCombinationItem("from", $combi_item, $lng->txt("from"));
758 $combi_item = new ilDurationInputGUI("", $id . "_to");
759 $combi_item->setShowMonths(false);
760 $combi_item->setShowDays(true);
761 $combi_item->setShowSeconds(true);
762 $item->addCombinationItem("to", $combi_item, $lng->txt("to"));
763 $item->setComparisonMode(ilCombinationInputGUI::COMPARISON_ASCENDING);
764 break;
765
766 default:
767 return false;
768 }
769
770 $this->addFilterItem($item, $a_optional);
771 $item->readFromSession();
772 return $item;
773 }
774
778 final public function getFilterItems($a_optionals = false)
779 {
780 if (!$a_optionals) {
781 return $this->filters;
782 }
784 }
785
786 final public function getFilterItemByPostVar($a_post_var)
787 {
788 foreach ($this->getFilterItems() as $item) {
789 if ($item->getPostVar() == $a_post_var) {
790 return $item;
791 }
792 }
793 foreach ($this->getFilterItems(true) as $item) {
794 if ($item->getPostVar() == $a_post_var) {
795 return $item;
796 }
797 }
798 return false;
799 }
800
806 public function setFilterCols($a_val)
807 {
808 $this->filter_cols = $a_val;
809 }
810
816 public function getFilterCols()
817 {
818 return $this->filter_cols;
819 }
820
826 public function setDisableFilterHiding($a_val = true)
827 {
828 $this->disable_filter_hiding = $a_val;
829 }
830
836 public function getDisableFilterHiding()
837 {
839 }
840
847 public function isFilterSelected($a_col)
848 {
849 return $this->selected_filter[$a_col];
850 }
851
858 public function getSelectedFilters()
859 {
860 $sfil = array();
861 foreach ($this->selected_filter as $k => $v) {
862 if ($v) {
863 $sfil[$k] = $k;
864 }
865 }
866 return $sfil;
867 }
868
875 public function determineSelectedFilters()
876 {
877 if ($this->filters_determined) {
878 return;
879 }
880
881 $old_sel = $this->loadProperty("selfilters");
882 $stored = false;
883 if ($old_sel != "") {
884 $sel_filters =
885 @unserialize($old_sel);
886 $stored = true;
887 }
888 if (!is_array($sel_filters)) {
889 $stored = false;
890 $sel_filters = array();
891 }
892
893 $this->selected_filter = array();
894 $set = false;
895 foreach ($this->getFilterItems(true) as $item) {
896 $k = $item->getPostVar();
897
898 $this->selected_filter[$k] = false;
899
900 if ($_POST["tblfsf" . $this->getId()]) {
901 $set = true;
902 if (is_array($_POST["tblff" . $this->getId()]) && in_array($k, $_POST["tblff" . $this->getId()])) {
903 $this->selected_filter[$k] = true;
904 } else {
905 $item->setValue(null);
906 $item->writeToSession();
907 }
908 } elseif ($stored) { // take stored values
909 $this->selected_filter[$k] = $sel_filters[$k];
910 }
911 }
912
913 if ($old_sel != serialize($this->selected_filter) && $set) {
914 $this->storeProperty("selfilters", serialize($this->selected_filter));
915 }
916
917 $this->filters_determined = true;
918 }
919
923 public function setCustomPreviousNext($a_prev_link, $a_next_link)
924 {
925 $this->custom_prev_next = true;
926 $this->custom_prev = $a_prev_link;
927 $this->custom_next = $a_next_link;
928 }
929
936 final public function setFormAction($a_form_action, $a_multipart = false)
937 {
938 $this->form_action = $a_form_action;
939 $this->form_multipart = (bool) $a_multipart;
940 }
941
947 final public function getFormAction()
948 {
949 return $this->form_action;
950 }
951
957 public function setFormName($a_formname = "")
958 {
959 $this->formname = $a_formname;
960 }
961
967 public function getFormName()
968 {
969 return $this->formname;
970 }
971
977 public function setId($a_val)
978 {
979 $this->id = $a_val;
980 if ($this->getPrefix() == "") {
981 $this->setPrefix($a_val);
982 }
983 }
984
990 public function getId()
991 {
992 return $this->id;
993 }
994
1000 public function setDisplayAsBlock($a_val)
1001 {
1002 $this->display_as_block = $a_val;
1003 }
1004
1010 public function getDisplayAsBlock()
1011 {
1012 return $this->display_as_block;
1013 }
1014
1020 public function getSelectAllCheckbox()
1021 {
1023 }
1024
1031 public function setSelectAllCheckbox($a_select_all_checkbox, $a_select_all_on_top = false)
1032 {
1033 $this->select_all_checkbox = $a_select_all_checkbox;
1034 $this->select_all_on_top = $a_select_all_on_top;
1035 }
1036
1042 public function setExternalSorting($a_val)
1043 {
1044 $this->ext_sort = $a_val;
1045 }
1046
1052 public function getExternalSorting()
1053 {
1054 return $this->ext_sort;
1055 }
1056
1063 public function setFilterCommand($a_val, $a_caption = null)
1064 {
1065 $this->filter_cmd = $a_val;
1066 $this->filter_cmd_txt = $a_caption;
1067 }
1068
1074 public function getFilterCommand()
1075 {
1076 return $this->filter_cmd;
1077 }
1078
1085 public function setResetCommand($a_val, $a_caption = null)
1086 {
1087 $this->reset_cmd = $a_val;
1088 $this->reset_cmd_txt = $a_caption;
1089 }
1090
1096 public function getResetCommand()
1097 {
1098 return $this->reset_cmd;
1099 }
1100
1106 public function setExternalSegmentation($a_val)
1107 {
1108 $this->ext_seg = $a_val;
1109 }
1110
1116 public function getExternalSegmentation()
1117 {
1118 return $this->ext_seg;
1119 }
1120
1127 final public function setRowTemplate($a_template, $a_template_dir = "")
1128 {
1129 $this->row_template = $a_template;
1130 $this->row_template_dir = $a_template_dir;
1131 }
1132
1138 public function setDefaultOrderField($a_defaultorderfield)
1139 {
1140 $this->defaultorderfield = $a_defaultorderfield;
1141 }
1142
1148 public function getDefaultOrderField()
1149 {
1150 return $this->defaultorderfield;
1151 }
1152
1158 public function setDefaultOrderDirection($a_defaultorderdirection)
1159 {
1160 $this->defaultorderdirection = $a_defaultorderdirection;
1161 }
1162
1169 {
1170 return $this->defaultorderdirection;
1171 }
1172
1177 public function setDefaultFilterVisiblity($a_status)
1178 {
1179 $this->default_filter_visibility = $a_status;
1180 }
1181
1187 {
1189 }
1190
1191 /*
1192 * Removes all command buttons from the table
1193 *
1194 * @access public
1195 */
1196 public function clearCommandButtons()
1197 {
1198 $this->buttons = array();
1199 }
1200
1207 public function addCommandButton($a_cmd, $a_text, $a_onclick = '', $a_id = "", $a_class = null)
1208 {
1209 $this->buttons[] = array("cmd" => $a_cmd, "text" => $a_text, 'onclick' => $a_onclick,
1210 "id" => $a_id, "class" => $a_class);
1211 }
1212
1218 public function addCommandButtonInstance(ilButtonBase $a_button)
1219 {
1220 $this->buttons[] = $a_button;
1221 }
1222
1233 public function addSelectionButton($a_sel_var, $a_options, $a_cmd, $a_text, $a_default_selection = '')
1234 {
1235 echo "ilTabl2GUI->addSelectionButton() has been deprecated with 4.2. Please try to move the drop-down to ilToolbarGUI.";
1236 // $this->sel_buttons[] = array("sel_var" => $a_sel_var, "options" => $a_options, "selected" => $a_default_selection, "cmd" => $a_cmd, "text" => $a_text);
1237 }
1238
1248 public function addMultiItemSelectionButton($a_sel_var, $a_options, $a_cmd, $a_text, $a_default_selection = '')
1249 {
1250 $this->mi_sel_buttons[] = array("sel_var" => $a_sel_var, "options" => $a_options, "selected" => $a_default_selection, "cmd" => $a_cmd, "text" => $a_text);
1251 $this->addHiddenInput("cmd_sv[" . $a_cmd . "]", $a_sel_var);
1252 }
1253
1254
1255
1262 public function setCloseCommand($a_link)
1263 {
1264 $this->close_command = $a_link;
1265 }
1266
1273 public function addMultiCommand($a_cmd, $a_text)
1274 {
1275 $this->multi[] = array("cmd" => $a_cmd, "text" => $a_text);
1276 }
1277
1284 public function addHiddenInput($a_name, $a_value)
1285 {
1286 $this->hidden_inputs[] = array("name" => $a_name, "value" => $a_value);
1287 }
1288
1295 public function addHeaderCommand($a_href, $a_text, $a_target = "", $a_img = "")
1296 {
1297 $this->header_commands[] = array("href" => $a_href, "text" => $a_text,
1298 "target" => $a_target, "img" => $a_img);
1299 }
1300
1306 public function setTopCommands($a_val)
1307 {
1308 $this->top_commands = $a_val;
1309 }
1310
1316 public function getTopCommands()
1317 {
1318 return $this->top_commands;
1319 }
1320
1328 final public function addColumn(
1329 $a_text,
1330 $a_sort_field = "",
1331 $a_width = "",
1332 $a_is_checkbox_action_column = false,
1333 $a_class = "",
1334 $a_tooltip = "",
1335 $a_tooltip_with_html = false
1336 ) {
1337 $this->column[] = array(
1338 "text" => $a_text,
1339 "sort_field" => $a_sort_field,
1340 "width" => $a_width,
1341 "is_checkbox_action_column" => $a_is_checkbox_action_column,
1342 "class" => $a_class,
1343 "tooltip" => $a_tooltip,
1344 "tooltip_html" => (bool) $a_tooltip_with_html
1345 );
1346 if ($a_sort_field != "") {
1347 $this->sortable_fields[] = $a_sort_field;
1348 }
1349 $this->column_count = count($this->column);
1350 }
1351
1352
1353 final public function getNavParameter()
1354 {
1355 return $this->prefix . "_table_nav";
1356 }
1357
1358 public function setOrderLink($sort_field, $order_dir)
1359 {
1360 global $DIC;
1361
1362 $ilUser = $DIC->user();
1363
1365
1366 $hash = "";
1367 if (is_object($ilUser) && $ilUser->getPref("screen_reader_optimization")) {
1368 $hash = "#" . $this->getTopAnchor();
1369 }
1370
1371 $old = $_GET[$this->getNavParameter()];
1372
1373 // set order link
1374 $ilCtrl->setParameter(
1375 $this->parent_obj,
1376 $this->getNavParameter(),
1377 $sort_field . ":" . $order_dir . ":" . $this->offset
1378 );
1379 $this->tpl->setVariable(
1380 "TBL_ORDER_LINK",
1381 $ilCtrl->getLinkTarget($this->parent_obj, $this->parent_cmd) . $hash
1382 );
1383
1384 // set old value of nav variable
1385 $ilCtrl->setParameter(
1386 $this->parent_obj,
1387 $this->getNavParameter(),
1388 $old
1389 );
1390 }
1391
1392 public function fillHeader()
1393 {
1394 $lng = $this->lng;
1395
1396 $allcolumnswithwidth = true;
1397 foreach ((array) $this->column as $idx => $column) {
1398 if (!strlen($column["width"])) {
1399 $allcolumnswithwidth = false;
1400 } elseif ($column["width"] == "1") {
1401 // IE does not like 1 but seems to work with 1%
1402 $this->column[$idx]["width"] = "1%";
1403 }
1404 }
1405 if ($allcolumnswithwidth) {
1406 foreach ((array) $this->column as $column) {
1407 $this->tpl->setCurrentBlock("tbl_colgroup_column");
1408 $width = (is_numeric($column["width"]))
1409 ? $column["width"]."px"
1410 : $column["width"];
1411 $this->tpl->setVariable("COLGROUP_COLUMN_WIDTH", " style=\"width:" . $width . "\"");
1412 $this->tpl->parseCurrentBlock();
1413 }
1414 }
1415 $ccnt = 0;
1416 foreach ((array) $this->column as $column) {
1417 $ccnt++;
1418 //tooltip
1419 if ($column["tooltip"] != "") {
1420 include_once("./Services/UIComponent/Tooltip/classes/class.ilTooltipGUI.php");
1422 "thc_" . $this->getId() . "_" . $ccnt,
1423 $column["tooltip"],
1424 "",
1425 "bottom center",
1426 "top center",
1427 !$column["tooltip_html"]
1428 );
1429 }
1430
1431 if ($column['is_checkbox_action_column'] && $this->select_all_on_top) {
1432 $this->tpl->setCurrentBlock('tbl_header_top_select_all');
1433 $this->tpl->setVariable("HEAD_SELECT_ALL_TXT_SELECT_ALL", $lng->txt("select_all"));
1434 $this->tpl->setVariable("HEAD_SELECT_ALL_CHECKBOX_NAME", $this->getSelectAllCheckbox());
1435 $this->tpl->setVariable("HEAD_SELECT_ALL_FORM_NAME", $this->getFormName());
1436 $this->tpl->setVariable("HEAD_CHECKBOXNAME", "chb_select_all_" . $this->unique_id . '_top');
1437 $this->tpl->parseCurrentBlock();
1438 continue;
1439 }
1440 if (
1441 !$this->enabled["sort"] ||
1442 $column["sort_field"] == "" &&
1443 !($column["is_checkbox_action_column"] && $this->select_all_on_top)
1444 ) {
1445 $this->tpl->setCurrentBlock("tbl_header_no_link");
1446 if ($column["width"] != "") {
1447 $width = (is_numeric($column["width"]))
1448 ? $column["width"]."px"
1449 : $column["width"];
1450 $this->tpl->setVariable("TBL_COLUMN_WIDTH_NO_LINK", " style=\"width:" . $width . "\"");
1451 }
1452 if ($column["class"] != "") {
1453 $this->tpl->setVariable("TBL_COLUMN_CLASS_NO_LINK", " class=\"" . $column["class"] . "\"");
1454 }
1455 if (!$column["is_checkbox_action_column"]) {
1456 $this->tpl->setVariable(
1457 "TBL_HEADER_CELL_NO_LINK",
1458 $column["text"]
1459 );
1460 } else {
1461 $this->tpl->setVariable(
1462 "TBL_HEADER_CELL_NO_LINK",
1463 ilUtil::img(ilUtil::getImagePath("spacer.png"), $lng->txt("action"))
1464 );
1465 }
1466 $this->tpl->setVariable("HEAD_CELL_NL_ID", "thc_" . $this->getId() . "_" . $ccnt);
1467 if ($column["class"] != "") {
1468 $this->tpl->setVariable("TBL_HEADER_CLASS", " " . $column["class"]);
1469 }
1470 $this->tpl->parseCurrentBlock();
1471 $this->tpl->touchBlock("tbl_header_th");
1472 continue;
1473 }
1474 if (($column["sort_field"] == $this->order_field) && ($this->order_direction != "")) {
1475 $this->tpl->setCurrentBlock("tbl_order_image");
1476 if ($this->order_direction == "asc") {
1477 $this->tpl->setVariable("ORDER_CLASS", "glyphicon glyphicon-arrow-up");
1478 } else {
1479 $this->tpl->setVariable("ORDER_CLASS", "glyphicon glyphicon-arrow-down");
1480 }
1481 $this->tpl->setVariable("IMG_ORDER_ALT", $this->lng->txt("change_sort_direction"));
1482 $this->tpl->parseCurrentBlock();
1483 }
1484
1485 $this->tpl->setCurrentBlock("tbl_header_cell");
1486 $this->tpl->setVariable("TBL_HEADER_CELL", $column["text"]);
1487 $this->tpl->setVariable("HEAD_CELL_ID", "thc_" . $this->getId() . "_" . $ccnt);
1488
1489 // only set width if a value is given for that column
1490 if ($column["width"] != "") {
1491 $width = (is_numeric($column["width"]))
1492 ? $column["width"]."px"
1493 : $column["width"];
1494 $this->tpl->setVariable("TBL_COLUMN_WIDTH", " style=\"width:" . $width . "\"");
1495 }
1496 if ($column["class"] != "") {
1497 $this->tpl->setVariable("TBL_COLUMN_CLASS", " class=\"" . $column["class"] . "\"");
1498 }
1499
1500 $lng_sort_column = $this->lng->txt("sort_by_this_column");
1501 $this->tpl->setVariable("TBL_ORDER_ALT", $lng_sort_column);
1502
1503 $order_dir = "asc";
1504
1505 if ($column["sort_field"] == $this->order_field) {
1506 $order_dir = $this->sort_order;
1507
1508 $lng_change_sort = $this->lng->txt("change_sort_direction");
1509 $this->tpl->setVariable("TBL_ORDER_ALT", $lng_change_sort);
1510 }
1511
1512 if ($column["class"] != "") {
1513 $this->tpl->setVariable("TBL_HEADER_CLASS", " " . $column["class"]);
1514 }
1515 $this->setOrderLink($column["sort_field"], $order_dir);
1516 $this->tpl->parseCurrentBlock();
1517 $this->tpl->touchBlock("tbl_header_th");
1518 }
1519
1520 $this->tpl->setCurrentBlock("tbl_header");
1521 $this->tpl->parseCurrentBlock();
1522 }
1523
1527 protected function prepareOutput()
1528 {
1529 }
1530
1531
1535 public function determineOffsetAndOrder($a_omit_offset = false)
1536 {
1537 global $DIC;
1538
1539 $ilUser = null;
1540 if (isset($DIC["ilUser"])) {
1541 $ilUser = $DIC["ilUser"];
1542 }
1543
1544 if ($this->nav_determined) {
1545 return true;
1546 }
1547
1548 if ($_POST[$this->getNavParameter() . "1"] != "") {
1549 if ($_POST[$this->getNavParameter() . "1"] != $_POST[$this->getNavParameter()]) {
1550 $this->nav_value = $_POST[$this->getNavParameter() . "1"];
1551 } elseif ($_POST[$this->getNavParameter() . "2"] != $_POST[$this->getNavParameter()]) {
1552 $this->nav_value = $_POST[$this->getNavParameter() . "2"];
1553 }
1554 } elseif ($_GET[$this->getNavParameter()]) {
1555 $this->nav_value = $_GET[$this->getNavParameter()];
1556 } elseif ($_SESSION[$this->getNavParameter()] != "") {
1557 $this->nav_value = $_SESSION[$this->getNavParameter()];
1558 }
1559
1560 if ($this->nav_value == "" && $this->getId() != "" && $ilUser->getId() != ANONYMOUS_USER_ID) {
1561 $order = $this->loadProperty("order");
1562 if (in_array($order, $this->sortable_fields)) {
1563 $direction = $this->loadProperty("direction");
1564 } else {
1565 $direction = $this->getDefaultOrderDirection();
1566 }
1567 // get order and direction from db
1568 $this->nav_value =
1569 $order . ":" .
1570 $direction . ":" .
1571 $this->loadProperty("offset");
1572 }
1573 $nav = explode(":", $this->nav_value);
1574
1575 // $nav[0] is order by
1576 $this->setOrderField(($nav[0] != "") ? $nav[0] : $this->getDefaultOrderField());
1577 $this->setOrderDirection(($nav[1] != "") ? $nav[1] : $this->getDefaultOrderDirection());
1578
1579 if (!$a_omit_offset) {
1580 // #8904: offset must be discarded when no limit is given
1581 if (!$this->getExternalSegmentation() && $this->limit_determined && $this->limit == 9999) {
1582 $this->resetOffset(true);
1583 } elseif (!$this->getExternalSegmentation() && $nav[2] >= $this->max_count) {
1584 $this->resetOffset(true);
1585 } else {
1586 $this->setOffset($nav[2]);
1587 }
1588 }
1589
1590 if (!$a_omit_offset) {
1591 $this->nav_determined = true;
1592 }
1593 }
1594
1595 public function storeNavParameter()
1596 {
1597 if ($this->getOrderField() != "") {
1598 $this->storeProperty("order", $this->getOrderField());
1599 }
1600 if ($this->getOrderDirection() != "") {
1601 $this->storeProperty("direction", $this->getOrderDirection());
1602 }
1603 //echo "-".$this->getOffset()."-";
1604 if ($this->getOffset() !== "") {
1605 $this->storeProperty("offset", $this->getOffset());
1606 }
1607 }
1608
1609
1613 public function getHTML()
1614 {
1615 global $DIC;
1616
1617 $ilUser = null;
1618 if (isset($DIC["ilUser"])) {
1619 $ilUser = $DIC["ilUser"];
1620 }
1621
1622 $lng = $this->lng;
1624
1625
1626 if ($this->getExportMode()) {
1627 $this->exportData($this->getExportMode(), true);
1628 }
1629
1630 $this->prepareOutput();
1631
1632 if (is_object($ilCtrl) && $this->getId() == "") {
1633 $ilCtrl->saveParameter($this->getParentObject(), $this->getNavParameter());
1634 }
1635
1636 if (!$this->getPrintMode()) {
1637 // set form action
1638 if ($this->form_action != "" && $this->getOpenFormTag()) {
1639 $hash = "";
1640 if (is_object($ilUser) && $ilUser->getPref("screen_reader_optimization")) {
1641 $hash = "#" . $this->getTopAnchor();
1642 }
1643
1644 if ((bool) $this->form_multipart) {
1645 $this->tpl->touchBlock("form_multipart_bl");
1646 }
1647
1648 if ($this->getPreventDoubleSubmission()) {
1649 $this->tpl->touchBlock("pdfs");
1650 }
1651
1652 $this->tpl->setCurrentBlock("tbl_form_header");
1653 $this->tpl->setVariable("FORMACTION", $this->getFormAction() . $hash);
1654 $this->tpl->setVariable("FORMNAME", $this->getFormName());
1655 $this->tpl->parseCurrentBlock();
1656 }
1657
1658 if ($this->form_action != "" && $this->getCloseFormTag()) {
1659 $this->tpl->touchBlock("tbl_form_footer");
1660 }
1661 }
1662
1663 if (!$this->enabled['content']) {
1664 return $this->render();
1665 }
1666
1667 if (!$this->getExternalSegmentation()) {
1668 $this->setMaxCount(count($this->row_data));
1669 }
1670
1671 $this->determineOffsetAndOrder();
1672
1673 $this->setFooter("tblfooter", $this->lng->txt("previous"), $this->lng->txt("next"));
1674
1675 $data = $this->getData();
1676 if ($this->dataExists()) {
1677 // sort
1678 if (!$this->getExternalSorting() && $this->enabled["sort"]) {
1680 $data,
1681 $this->getOrderField(),
1682 $this->getOrderDirection(),
1683 $this->numericOrdering($this->getOrderField())
1684 );
1685 }
1686
1687 // slice
1688 if (!$this->getExternalSegmentation()) {
1689 $data = array_slice($data, $this->getOffset(), $this->getLimit());
1690 }
1691 }
1692
1693 // fill rows
1694 if ($this->dataExists()) {
1695 if ($this->getPrintMode()) {
1697 }
1698
1699 $this->tpl->addBlockFile(
1700 "TBL_CONTENT",
1701 "tbl_content",
1702 $this->row_template,
1703 $this->row_template_dir
1704 );
1705
1706 foreach ($data as $set) {
1707 $this->tpl->setCurrentBlock("tbl_content");
1708 $this->css_row = ($this->css_row != "tblrow1")
1709 ? "tblrow1"
1710 : "tblrow2";
1711 $this->tpl->setVariable("CSS_ROW", $this->css_row);
1712
1713 $this->fillRow($set);
1714 $this->tpl->setCurrentBlock("tbl_content");
1715 $this->tpl->parseCurrentBlock();
1716 }
1717 } else {
1718 // add standard no items text (please tell me, if it messes something up, alex, 29.8.2008)
1719 $no_items_text = (trim($this->getNoEntriesText()) != '')
1720 ? $this->getNoEntriesText()
1721 : $lng->txt("no_items");
1722
1723 $this->css_row = ($this->css_row != "tblrow1")
1724 ? "tblrow1"
1725 : "tblrow2";
1726
1727 $this->tpl->setCurrentBlock("tbl_no_entries");
1728 $this->tpl->setVariable('TBL_NO_ENTRY_CSS_ROW', $this->css_row);
1729 $this->tpl->setVariable('TBL_NO_ENTRY_COLUMN_COUNT', $this->column_count);
1730 $this->tpl->setVariable('TBL_NO_ENTRY_TEXT', trim($no_items_text));
1731 $this->tpl->parseCurrentBlock();
1732 }
1733
1734
1735 if (!$this->getPrintMode()) {
1736 $this->fillFooter();
1737
1738 $this->fillHiddenRow();
1739
1740 $this->fillActionRow();
1741
1742 $this->storeNavParameter();
1743 }
1744
1745 return $this->render();
1746 }
1747
1753 public function numericOrdering($a_field)
1754 {
1755 return false;
1756 }
1757
1762 public function render()
1763 {
1764 $lng = $this->lng;
1766
1767 $this->tpl->setVariable("CSS_TABLE", $this->getStyle("table"));
1768 //$this->tpl->setVariable("DATA_TABLE", (int) $this->getIsDataTable());
1769 if ($this->getId() != "") {
1770 $this->tpl->setVariable("ID", 'id="' . $this->getId() . '"');
1771 }
1772
1773 // description
1774 if ($this->getDescription() != "") {
1775 $this->tpl->setCurrentBlock("tbl_header_description");
1776 $this->tpl->setVariable("TBL_DESCRIPTION", $this->getDescription());
1777 $this->tpl->parseCurrentBlock();
1778 }
1779
1780 if (!$this->getPrintMode()) {
1781 $this->renderFilter();
1782 }
1783
1784 if ($this->getDisplayAsBlock()) {
1785 $this->tpl->touchBlock("outer_start_1");
1786 $this->tpl->touchBlock("outer_end_1");
1787 } else {
1788 $this->tpl->touchBlock("outer_start_2");
1789 $this->tpl->touchBlock("outer_end_2");
1790 }
1791
1792 // table title and icon
1793 if ($this->enabled["title"] && ($this->title != ""
1794 || $this->icon != "" || count($this->header_commands) > 0 ||
1795 $this->headerHTML != "" || $this->close_command != "")) {
1796 if ($this->enabled["icon"]) {
1797 $this->tpl->setCurrentBlock("tbl_header_title_icon");
1798 $this->tpl->setVariable("TBL_TITLE_IMG", ilUtil::getImagePath($this->icon));
1799 $this->tpl->setVariable("TBL_TITLE_IMG_ALT", $this->icon_alt);
1800 $this->tpl->parseCurrentBlock();
1801 }
1802
1803 if (!$this->getPrintMode()) {
1804 foreach ($this->header_commands as $command) {
1805 if ($command["img"] != "") {
1806 $this->tpl->setCurrentBlock("tbl_header_img_link");
1807 if ($command["target"] != "") {
1808 $this->tpl->setVariable(
1809 "TARGET_IMG_LINK",
1810 'target="' . $command["target"] . '"'
1811 );
1812 }
1813 $this->tpl->setVariable("ALT_IMG_LINK", $command["text"]);
1814 $this->tpl->setVariable("HREF_IMG_LINK", $command["href"]);
1815 $this->tpl->setVariable(
1816 "SRC_IMG_LINK",
1817 $command["img"]
1818 );
1819 $this->tpl->parseCurrentBlock();
1820 } else {
1821 $this->tpl->setCurrentBlock("head_cmd");
1822 $this->tpl->setVariable("TXT_HEAD_CMD", $command["text"]);
1823 $this->tpl->setVariable("HREF_HEAD_CMD", $command["href"]);
1824 $this->tpl->parseCurrentBlock();
1825 }
1826 }
1827 }
1828
1829 if (isset($this->headerHTML)) {
1830 $this->tpl->setCurrentBlock("tbl_header_html");
1831 $this->tpl->setVariable("HEADER_HTML", $this->headerHTML);
1832 $this->tpl->parseCurrentBlock();
1833 }
1834
1835 // close command
1836 if ($this->close_command != "") {
1837 $this->tpl->setCurrentBlock("tbl_header_img_link");
1838 $this->tpl->setVariable("ALT_IMG_LINK", $lng->txt("close"));
1839 $this->tpl->setVariable("HREF_IMG_LINK", $this->close_command);
1840 $this->tpl->parseCurrentBlock();
1841 }
1842
1843 $this->tpl->setCurrentBlock("tbl_header_title");
1844 $this->tpl->setVariable("TBL_TITLE", $this->title);
1845 $this->tpl->setVariable("TOP_ANCHOR", $this->getTopAnchor());
1846 if ($this->getDisplayAsBlock()) {
1847 $this->tpl->setVariable("BLK_CLASS", "Block");
1848 }
1849 $this->tpl->parseCurrentBlock();
1850 }
1851
1852 // table header
1853 if ($this->enabled["header"]) {
1854 $this->fillHeader();
1855 }
1856
1857 $this->tpl->touchBlock("tbl_table_end");
1858
1859 return $this->tpl->get();
1860 }
1861
1865 private function renderFilter()
1866 {
1867 global $DIC;
1868
1869 $lng = $this->lng;
1870 $main_tpl = $DIC["tpl"];
1871
1872 $filter = $this->getFilterItems();
1873 $opt_filter = $this->getFilterItems(true);
1874
1875 $main_tpl->addJavascript("./Services/Table/js/ServiceTable.js");
1876
1877 if (count($filter) == 0 && count($opt_filter) == 0) {
1878 return;
1879 }
1880
1881 include_once("./Services/YUI/classes/class.ilYuiUtil.php");
1883
1884 $ccnt = 0;
1885
1886 // render standard filter
1887 if (count($filter) > 0) {
1888 foreach ($filter as $item) {
1889 if ($ccnt >= $this->getFilterCols()) {
1890 $this->tpl->setCurrentBlock("filter_row");
1891 $this->tpl->parseCurrentBlock();
1892 $ccnt = 0;
1893 }
1894 $this->tpl->setCurrentBlock("filter_item");
1895 $this->tpl->setVariable(
1896 "OPTION_NAME",
1897 $item->getTitle()
1898 );
1899 $this->tpl->setVariable(
1900 "F_INPUT_ID",
1901 $item->getTableFilterLabelFor()
1902 );
1903 $this->tpl->setVariable(
1904 "INPUT_HTML",
1905 $item->getTableFilterHTML()
1906 );
1907 $this->tpl->parseCurrentBlock();
1908 $ccnt++;
1909 }
1910 }
1911
1912 // render optional filter
1913 if (count($opt_filter) > 0) {
1914 $this->determineSelectedFilters();
1915
1916 foreach ($opt_filter as $item) {
1917 if ($this->isFilterSelected($item->getPostVar())) {
1918 if ($ccnt >= $this->getFilterCols()) {
1919 $this->tpl->setCurrentBlock("filter_row");
1920 $this->tpl->parseCurrentBlock();
1921 $ccnt = 0;
1922 }
1923 $this->tpl->setCurrentBlock("filter_item");
1924 $this->tpl->setVariable(
1925 "OPTION_NAME",
1926 $item->getTitle()
1927 );
1928 $this->tpl->setVariable(
1929 "F_INPUT_ID",
1930 $item->getFieldId()
1931 );
1932 $this->tpl->setVariable(
1933 "INPUT_HTML",
1934 $item->getTableFilterHTML()
1935 );
1936 $this->tpl->parseCurrentBlock();
1937 $ccnt++;
1938 }
1939 }
1940
1941 // filter selection
1942 $items = array();
1943 foreach ($opt_filter as $item) {
1944 $k = $item->getPostVar();
1945 $items[$k] = array("txt" => $item->getTitle(),
1946 "selected" => $this->isFilterSelected($k));
1947 }
1948
1949 include_once("./Services/UIComponent/CheckboxListOverlay/classes/class.ilCheckboxListOverlayGUI.php");
1950 $cb_over = new ilCheckboxListOverlayGUI("tbl_filters_" . $this->getId());
1951 $cb_over->setLinkTitle($lng->txt("optional_filters"));
1952 $cb_over->setItems($items);
1953
1954 $cb_over->setFormCmd($this->getParentCmd());
1955 $cb_over->setFieldVar("tblff" . $this->getId());
1956 $cb_over->setHiddenVar("tblfsf" . $this->getId());
1957
1958 $cb_over->setSelectionHeaderClass("ilTableMenuItem");
1959 $this->tpl->setCurrentBlock("filter_select");
1960
1961 // apply should be the first submit because of enter/return, inserting hidden submit
1962 $this->tpl->setVariable("HIDDEN_CMD_APPLY", $this->filter_cmd);
1963
1964 $this->tpl->setVariable("FILTER_SELECTOR", $cb_over->getHTML(false));
1965 $this->tpl->parseCurrentBlock();
1966 }
1967
1968 // if any filter
1969 if ($ccnt > 0 || count($opt_filter) > 0) {
1970 $this->tpl->setVariable("TXT_FILTER", $lng->txt("filter"));
1971
1972 if ($ccnt > 0) {
1973 if ($ccnt < $this->getFilterCols()) {
1974 for ($i = $ccnt; $i <= $this->getFilterCols(); $i++) {
1975 $this->tpl->touchBlock("filter_empty_cell");
1976 }
1977 }
1978 $this->tpl->setCurrentBlock("filter_row");
1979 $this->tpl->parseCurrentBlock();
1980
1981 $this->tpl->setCurrentBlock("filter_buttons");
1982 $this->tpl->setVariable("CMD_APPLY", $this->filter_cmd);
1983 $this->tpl->setVariable("TXT_APPLY", $this->filter_cmd_txt
1984 ? $this->filter_cmd_txt
1985 : $lng->txt("apply_filter"));
1986 $this->tpl->setVariable("CMD_RESET", $this->reset_cmd);
1987 $this->tpl->setVariable("TXT_RESET", $this->reset_cmd_txt
1988 ? $this->reset_cmd_txt
1989 : $lng->txt("reset_filter"));
1990 } elseif (count($opt_filter) > 0) {
1991 $this->tpl->setCurrentBlock("optional_filter_hint");
1992 $this->tpl->setVariable('TXT_OPT_HINT', $lng->txt('optional_filter_hint'));
1993 $this->tpl->parseCurrentBlock();
1994 }
1995
1996 $this->tpl->setCurrentBlock("filter_section");
1997 $this->tpl->setVariable("FIL_ID", $this->getId());
1998 $this->tpl->parseCurrentBlock();
1999
2000 // (keep) filter hidden?
2001 if (!$this->isFilterVisible()) {
2002 if (!$this->getDisableFilterHiding()) {
2003 $this->tpl->setCurrentBlock("filter_hidden");
2004 $this->tpl->setVariable("FI_ID", $this->getId());
2005 $this->tpl->parseCurrentBlock();
2006 }
2007 }
2008 }
2009 }
2010
2015 protected function isFilterVisible()
2016 {
2017 $prop = $this->loadProperty('filter');
2018 if ($prop === '0' || $prop === '1') {
2019 return (bool) $prop;
2020 }
2021 return $this->getDefaultFilterVisibility();
2022 }
2023
2031 protected function isAdvMDFilter(ilAdvancedMDRecordGUI $a_gui, $a_element)
2032 {
2033 foreach ($a_gui->getFilterElements(false) as $item) {
2034 if ($item === $a_element) {
2035 return true;
2036 }
2037 }
2038 return false;
2039 }
2040
2044 public function writeFilterToSession()
2045 {
2046 $advmd_record_gui = null;
2047 if (method_exists($this, "getAdvMDRecordGUI")) {
2048 $advmd_record_gui = $this->getAdvMDRecordGUI();
2049 }
2050
2051 foreach ($this->getFilterItems() as $item) {
2052 if ($advmd_record_gui &&
2053 $this->isAdvMDFilter($advmd_record_gui, $item)) {
2054 continue;
2055 }
2056
2057 if ($item->checkInput()) {
2058 $item->setValueByArray($_POST);
2059 $item->writeToSession();
2060 }
2061 }
2062 foreach ($this->getFilterItems(true) as $item) {
2063 if ($advmd_record_gui &&
2064 $this->isAdvMDFilter($advmd_record_gui, $item)) {
2065 continue;
2066 }
2067
2068 if ($item->checkInput()) {
2069 $item->setValueByArray($_POST);
2070 $item->writeToSession();
2071 }
2072 }
2073
2074 if ($advmd_record_gui) {
2075 $advmd_record_gui->importFilter();
2076 }
2077
2078 // #13209
2079 unset($_REQUEST["tbltplcrt"]);
2080 unset($_REQUEST["tbltpldel"]);
2081 }
2082
2086 public function resetFilter()
2087 {
2088 $lng = $this->lng;
2089
2090 $filter = $this->getFilterItems();
2091 $opt_filter = $this->getFilterItems(true);
2092
2093 foreach ($filter as $item) {
2094 if ($item->checkInput()) {
2095 // see #26490
2096 $item->setValueByArray([]);
2097 $item->clearFromSession();
2098 }
2099 }
2100 foreach ($opt_filter as $item) {
2101 if ($item->checkInput()) {
2102 // see #26490
2103 $item->setValueByArray([]);
2104 $item->clearFromSession();
2105 }
2106 }
2107
2108 // #13209
2109 unset($_REQUEST["tbltplcrt"]);
2110 unset($_REQUEST["tbltpldel"]);
2111 }
2112
2119 protected function fillRow($a_set)
2120 {
2121 foreach ($a_set as $key => $value) {
2122 $this->tpl->setVariable("VAL_" . strtoupper($key), $value);
2123 }
2124 }
2125
2129 public function fillFooter()
2130 {
2131 global $DIC;
2132
2133 $ilUser = null;
2134 if (isset($DIC["ilUser"])) {
2135 $ilUser = $DIC["ilUser"];
2136 }
2137
2138 $lng = $this->lng;
2140
2141 $footer = false;
2142
2143 // select all checkbox
2144 if ((strlen($this->getFormName())) && (strlen($this->getSelectAllCheckbox())) && $this->dataExists()) {
2145 $this->tpl->setCurrentBlock("select_all_checkbox");
2146 $this->tpl->setVariable("SELECT_ALL_TXT_SELECT_ALL", $lng->txt("select_all"));
2147 $this->tpl->setVariable("SELECT_ALL_CHECKBOX_NAME", $this->getSelectAllCheckbox());
2148 $this->tpl->setVariable("SELECT_ALL_FORM_NAME", $this->getFormName());
2149 $this->tpl->setVariable("CHECKBOXNAME", "chb_select_all_" . $this->unique_id);
2150 $this->tpl->parseCurrentBlock();
2151 }
2152
2153 // table footer numinfo
2154 if ($this->enabled["numinfo"] && $this->enabled["footer"]) {
2155 $start = $this->offset + 1; // compute num info
2156 if (!$this->dataExists()) {
2157 $start = 0;
2158 }
2159 $end = $this->offset + $this->limit;
2160
2161 if ($end > $this->max_count or $this->limit == 0) {
2162 $end = $this->max_count;
2163 }
2164
2165 if ($this->max_count > 0) {
2166 if ($this->lang_support) {
2167 $numinfo = "(" . $start . " - " . $end . " " . strtolower($this->lng->txt("of")) . " " . $this->max_count . ")";
2168 } else {
2169 $numinfo = "(" . $start . " - " . $end . " of " . $this->max_count . ")";
2170 }
2171 }
2172 if ($this->max_count > 0) {
2173 if ($this->getEnableNumInfo()) {
2174 $this->tpl->setCurrentBlock("tbl_footer_numinfo");
2175 $this->tpl->setVariable("NUMINFO", $numinfo);
2176 $this->tpl->parseCurrentBlock();
2177 }
2178 }
2179 $footer = true;
2180 }
2181
2182 // table footer linkbar
2183 if ($this->enabled["linkbar"] && $this->enabled["footer"] && $this->limit != 0
2184 && $this->max_count > 0) {
2185 $layout = array(
2186 "link" => $this->footer_style,
2187 "prev" => $this->footer_previous,
2188 "next" => $this->footer_next,
2189 );
2190 //if (!$this->getDisplayAsBlock())
2191 //{
2192 $linkbar = $this->getLinkbar("1");
2193 $this->tpl->setCurrentBlock("tbl_footer_linkbar");
2194 $this->tpl->setVariable("LINKBAR", $linkbar);
2195 $this->tpl->parseCurrentBlock();
2196 $linkbar = true;
2197 //}
2198 $footer = true;
2199 }
2200
2201 // column selector
2202 if (is_array($this->getSelectableColumns()) && count($this->getSelectableColumns()) > 0) {
2203 $items = array();
2204 foreach ($this->getSelectableColumns() as $k => $c) {
2205 $items[$k] = array("txt" => $c["txt"],
2206 "selected" => $this->isColumnSelected($k));
2207 }
2208 include_once("./Services/UIComponent/CheckboxListOverlay/classes/class.ilCheckboxListOverlayGUI.php");
2209 $cb_over = new ilCheckboxListOverlayGUI("tbl_" . $this->getId());
2210 $cb_over->setLinkTitle($lng->txt("columns"));
2211 $cb_over->setItems($items);
2212 //$cb_over->setUrl("./ilias.php?baseClass=ilTablePropertiesStorage&table_id=".
2213 // $this->getId()."&cmd=saveSelectedFields&user_id=".$ilUser->getId());
2214 $cb_over->setFormCmd($this->getParentCmd());
2215 $cb_over->setFieldVar("tblfs" . $this->getId());
2216 $cb_over->setHiddenVar("tblfsh" . $this->getId());
2217 $cb_over->setSelectionHeaderClass("ilTableMenuItem");
2218 $column_selector = $cb_over->getHTML();
2219 $footer = true;
2220 }
2221
2222 if ($this->getShowTemplates() && is_object($ilUser)) {
2223 // template handling
2224 if (isset($_REQUEST["tbltplcrt"]) && $_REQUEST["tbltplcrt"]) {
2225 if ($this->saveTemplate($_REQUEST["tbltplcrt"])) {
2226 ilUtil::sendSuccess($lng->txt("tbl_template_created"));
2227 }
2228 } elseif (isset($_REQUEST["tbltpldel"]) && $_REQUEST["tbltpldel"]) {
2229 if ($this->deleteTemplate($_REQUEST["tbltpldel"])) {
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 $overlay = new ilOverlayGUI($delete_id);
2247 $overlay->setTrigger($list_id . "_delete");
2248 $overlay->setAnchor("ilAdvSelListAnchorElement_" . $list_id);
2249 $overlay->setAutoHide(false);
2250 $overlay->add();
2251
2252 $lng->loadLanguageModule("form");
2253 $this->tpl->setCurrentBlock("template_editor_delete_item");
2254 $this->tpl->setVariable("TEMPLATE_DELETE_OPTION_VALUE", "");
2255 $this->tpl->setVariable("TEMPLATE_DELETE_OPTION", "- " . $lng->txt("form_please_select") . " -");
2256 $this->tpl->parseCurrentBlock();
2257 foreach ($templates as $name) {
2258 $this->tpl->setVariable("TEMPLATE_DELETE_OPTION_VALUE", $name);
2259 $this->tpl->setVariable("TEMPLATE_DELETE_OPTION", $name);
2260 $this->tpl->parseCurrentBlock();
2261 }
2262
2263 $this->tpl->setCurrentBlock("template_editor_delete");
2264 $this->tpl->setVariable("TEMPLATE_DELETE_ID", $delete_id);
2265 $this->tpl->setVariable("TXT_TEMPLATE_DELETE", $lng->txt("tbl_template_delete"));
2266 $this->tpl->setVariable("TXT_TEMPLATE_DELETE_SUBMIT", $lng->txt("delete"));
2267 $this->tpl->setVariable("TEMPLATE_DELETE_CMD", $this->parent_cmd);
2268 $this->tpl->parseCurrentBlock();
2269 }
2270
2271
2272 // form to save new template
2273 $overlay = new ilOverlayGUI($create_id);
2274 $overlay->setTrigger($list_id . "_create");
2275 $overlay->setAnchor("ilAdvSelListAnchorElement_" . $list_id);
2276 $overlay->setAutoHide(false);
2277 $overlay->add();
2278
2279 $this->tpl->setCurrentBlock("template_editor");
2280 $this->tpl->setVariable("TEMPLATE_CREATE_ID", $create_id);
2281 $this->tpl->setVariable("TXT_TEMPLATE_CREATE", $lng->txt("tbl_template_create"));
2282 $this->tpl->setVariable("TXT_TEMPLATE_CREATE_SUBMIT", $lng->txt("save"));
2283 $this->tpl->setVariable("TEMPLATE_CREATE_CMD", $this->parent_cmd);
2284 $this->tpl->parseCurrentBlock();
2285
2286 // load saved template
2287 include_once("./Services/UIComponent/AdvancedSelectionList/classes/class.ilAdvancedSelectionListGUI.php");
2288 $alist = new ilAdvancedSelectionListGUI();
2289 $alist->setId($list_id);
2290 $alist->addItem($lng->txt("tbl_template_create"), "create", "#");
2291 if (sizeof($templates)) {
2292 $alist->addItem($lng->txt("tbl_template_delete"), "delete", "#");
2293 foreach ($templates as $name) {
2294 $ilCtrl->setParameter($this->parent_obj, $this->prefix . "_tpl", urlencode($name));
2295 $alist->addItem($name, $name, $ilCtrl->getLinkTarget($this->parent_obj, $this->parent_cmd));
2296 $ilCtrl->setParameter($this->parent_obj, $this->prefix . "_tpl", "");
2297 }
2298 }
2299 $alist->setListTitle($lng->txt("tbl_templates"));
2301 $this->tpl->setVariable("TEMPLATE_SELECTOR", "&nbsp;" . $alist->getHTML());
2302 }
2303
2304 if ($footer) {
2305 $this->tpl->setCurrentBlock("tbl_footer");
2306 $this->tpl->setVariable("COLUMN_COUNT", $this->getColumnCount());
2307 if ($this->getDisplayAsBlock()) {
2308 $this->tpl->setVariable("BLK_CLASS", "Block");
2309 }
2310 $this->tpl->parseCurrentBlock();
2311
2312 // top navigation, if number info or linkbar given
2313 if ($numinfo != "" || $linkbar != "" || $column_selector != "" ||
2314 count($this->filters) > 0 || count($this->optional_filters) > 0) {
2315 if (is_object($ilUser) && (count($this->filters) || count($this->optional_filters))) {
2316 $this->tpl->setCurrentBlock("filter_activation");
2317 $this->tpl->setVariable("TXT_ACTIVATE_FILTER", $lng->txt("show_filter"));
2318 $this->tpl->setVariable("FILA_ID", $this->getId());
2319 if ($this->getId() != "") {
2320 $this->tpl->setVariable("SAVE_URLA", "./ilias.php?baseClass=ilTablePropertiesStorage&table_id=" .
2321 $this->getId() . "&cmd=showFilter&user_id=" . $ilUser->getId());
2322 }
2323 $this->tpl->parseCurrentBlock();
2324
2325
2326 if (!$this->getDisableFilterHiding()) {
2327 $this->tpl->setCurrentBlock("filter_deactivation");
2328 $this->tpl->setVariable("TXT_HIDE", $lng->txt("hide_filter"));
2329 if ($this->getId() != "") {
2330 $this->tpl->setVariable("SAVE_URL", "./ilias.php?baseClass=ilTablePropertiesStorage&table_id=" .
2331 $this->getId() . "&cmd=hideFilter&user_id=" . $ilUser->getId());
2332 $this->tpl->setVariable("FILD_ID", $this->getId());
2333 }
2334 $this->tpl->parseCurrentBlock();
2335 }
2336 }
2337
2338 if ($numinfo != "" && $this->getEnableNumInfo()) {
2339 $this->tpl->setCurrentBlock("top_numinfo");
2340 $this->tpl->setVariable("NUMINFO", $numinfo);
2341 $this->tpl->parseCurrentBlock();
2342 }
2343 if ($linkbar != "" && !$this->getDisplayAsBlock()) {
2344 $linkbar = $this->getLinkbar("2");
2345 $this->tpl->setCurrentBlock("top_linkbar");
2346 $this->tpl->setVariable("LINKBAR", $linkbar);
2347 $this->tpl->parseCurrentBlock();
2348 }
2349
2350 // column selector
2351 $this->tpl->setVariable("COLUMN_SELECTOR", $column_selector);
2352
2353 // row selector
2354 if ($this->getShowRowsSelector() &&
2355 is_object($ilUser) &&
2356 $this->getId() &&
2357 !$this->rows_selector_off) { // JF, 2014-10-27
2358 include_once("./Services/UIComponent/AdvancedSelectionList/classes/class.ilAdvancedSelectionListGUI.php");
2359 $alist = new ilAdvancedSelectionListGUI();
2361 $alist->setId("sellst_rows_" . $this->getId());
2362 $hpp = ($ilUser->getPref("hits_per_page") != 9999)
2363 ? $ilUser->getPref("hits_per_page")
2364 : $lng->txt("no_limit");
2365
2366 $options = array(0 => $lng->txt("default") . " (" . $hpp . ")",5 => 5, 10 => 10, 15 => 15, 20 => 20,
2367 30 => 30, 40 => 40, 50 => 50,
2368 100 => 100, 200 => 200, 400 => 400, 800 => 800);
2369 foreach ($options as $k => $v) {
2370 $ilCtrl->setParameter($this->parent_obj, $this->prefix . "_trows", $k);
2371 $alist->addItem($v, $k, $ilCtrl->getLinkTarget($this->parent_obj, $this->parent_cmd));
2372 $ilCtrl->setParameter($this->parent_obj, $this->prefix . "_trows", "");
2373 }
2374 $alist->setListTitle($this->getRowSelectorLabel() ? $this->getRowSelectorLabel() : $lng->txt("rows"));
2375 $this->tpl->setVariable("ROW_SELECTOR", $alist->getHTML());
2376 }
2377
2378 // export
2379 if (sizeof($this->export_formats) && $this->dataExists()) {
2380 include_once("./Services/UIComponent/AdvancedSelectionList/classes/class.ilAdvancedSelectionListGUI.php");
2381 $alist = new ilAdvancedSelectionListGUI();
2383 $alist->setId("sellst_xpt");
2384 foreach ($this->export_formats as $format => $caption_lng_id) {
2385 $ilCtrl->setParameter($this->parent_obj, $this->prefix . "_xpt", $format);
2386 $url = $ilCtrl->getLinkTarget($this->parent_obj, $this->parent_cmd);
2387 $ilCtrl->setParameter($this->parent_obj, $this->prefix . "_xpt", "");
2388 $alist->addItem($lng->txt($caption_lng_id), $format, $url);
2389 }
2390 $alist->setListTitle($lng->txt("export"));
2391 $this->tpl->setVariable("EXPORT_SELECTOR", "&nbsp;" . $alist->getHTML());
2392 }
2393
2394 $this->tpl->setCurrentBlock("top_navigation");
2395 $this->tpl->setVariable("COLUMN_COUNT", $this->getColumnCount());
2396 if ($this->getDisplayAsBlock()) {
2397 $this->tpl->setVariable("BLK_CLASS", "Block");
2398 }
2399 $this->tpl->parseCurrentBlock();
2400 }
2401 }
2402 }
2403
2411 public function getLinkbar($a_num)
2412 {
2413 global $DIC;
2414
2415 $ilUser = $DIC->user();
2416
2418 $lng = $this->lng;
2419
2420 $hash = "";
2421 if (is_object($ilUser) && $ilUser->getPref("screen_reader_optimization")) {
2422 $hash = "#" . $this->getTopAnchor();
2423 }
2424
2425 $link = $ilCtrl->getLinkTargetByClass(get_class($this->parent_obj), $this->parent_cmd) .
2426 "&" . $this->getNavParameter() . "=" .
2427 $this->getOrderField() . ":" . $this->getOrderDirection() . ":";
2428
2429 $LinkBar = "";
2430 $layout_prev = $lng->txt("previous");
2431 $layout_next = $lng->txt("next");
2432
2433 // if more entries then entries per page -> show link bar
2434 if ($this->max_count > $this->getLimit() || $this->custom_prev_next) {
2435 $sep = "<span>&nbsp;&nbsp;|&nbsp;&nbsp;</span>";
2436
2437 // calculate number of pages
2438 $pages = intval($this->max_count / $this->getLimit());
2439
2440 // add a page if a rest remains
2441 if (($this->max_count % $this->getLimit())) {
2442 $pages++;
2443 }
2444
2445 // links to other pages
2446 $offset_arr = array();
2447 for ($i = 1 ;$i <= $pages ; $i++) {
2448 $newoffset = $this->getLimit() * ($i - 1);
2449
2450 $nav_value = $this->getOrderField() . ":" . $this->getOrderDirection() . ":" . $newoffset;
2451 $offset_arr[$nav_value] = $i;
2452 }
2453
2454 $sep = "<span>&nbsp;&nbsp;&nbsp;&nbsp;</span>";
2455
2456 // previous link
2457 if ($this->custom_prev_next && $this->custom_prev != "") {
2458 if ($LinkBar != "") {
2459 $LinkBar .= $sep;
2460 }
2461 $LinkBar .= "<a href=\"" . $this->custom_prev . $hash . "\">" . $layout_prev . "</a>";
2462 } elseif ($this->getOffset() >= 1 && !$this->custom_prev_next) {
2463 if ($LinkBar != "") {
2464 $LinkBar .= $sep;
2465 }
2466 $prevoffset = $this->getOffset() - $this->getLimit();
2467 $LinkBar .= "<a href=\"" . $link . $prevoffset . $hash . "\">" . $layout_prev . "</a>";
2468 } else {
2469 if ($LinkBar != "") {
2470 $LinkBar .= $sep;
2471 }
2472 $LinkBar .= '<span class="ilTableFootLight">' . $layout_prev . "</span>";
2473 }
2474
2475 // current value
2476 if ($a_num == "1") {
2477 $LinkBar .= '<input type="hidden" name="' . $this->getNavParameter() .
2478 '" value="' . $this->getOrderField() . ":" . $this->getOrderDirection() . ":" . $this->getOffset() . '" />';
2479 }
2480
2481 $sep = "<span>&nbsp;&nbsp;|&nbsp;&nbsp;</span>";
2482
2483 // show next link (if not last page)
2484 if ($this->custom_prev_next && $this->custom_next != "") {
2485 if ($LinkBar != "") {
2486 $LinkBar .= $sep;
2487 }
2488 $LinkBar .= "<a href=\"" . $this->custom_next . $hash . "\">" . $layout_next . "</a>";
2489 } elseif (!(($this->getOffset() / $this->getLimit()) == ($pages - 1)) && ($pages != 1) &&
2490 !$this->custom_prev_next) {
2491 if ($LinkBar != "") {
2492 $LinkBar .= $sep;
2493 }
2494 $newoffset = $this->getOffset() + $this->getLimit();
2495 $LinkBar .= "<a href=\"" . $link . $newoffset . $hash . "\">" . $layout_next . "</a>";
2496 } else {
2497 if ($LinkBar != "") {
2498 $LinkBar .= $sep;
2499 }
2500 $LinkBar .= '<span class="ilTableFootLight">' . $layout_next . "</span>";
2501 }
2502
2503 $sep = "<span>&nbsp;&nbsp;&nbsp;&nbsp;</span>";
2504
2505 if (count($offset_arr) && !$this->getDisplayAsBlock() && !$this->custom_prev_next) {
2506 if ($LinkBar != "") {
2507 $LinkBar .= $sep;
2508 }
2509 $LinkBar .= "" .
2510 '<label for="tab_page_sel_' . $a_num . '">' . $lng->txt("page") . '</label> ' .
2512 $this->nav_value,
2513 $this->getNavParameter() . $a_num,
2514 $offset_arr,
2515 false,
2516 true,
2517 0,
2518 "small",
2519 array("id" => "tab_page_sel_" . $a_num,
2520 "onchange" => "ilTablePageSelection(this, 'cmd[" . $this->parent_cmd . "]')")
2521 );
2522 //' <input class="submit" type="submit" name="cmd['.$this->parent_cmd.']" value="'.
2523 //$lng->txt("ok").'" />';
2524 }
2525
2526 return $LinkBar;
2527 } else {
2528 return false;
2529 }
2530 }
2531
2532 public function fillHiddenRow()
2533 {
2534 $hidden_row = false;
2535 if (count($this->hidden_inputs)) {
2536 foreach ($this->hidden_inputs as $hidden_input) {
2537 $this->tpl->setCurrentBlock("tbl_hidden_field");
2538 $this->tpl->setVariable("FIELD_NAME", $hidden_input["name"]);
2539 $this->tpl->setVariable("FIELD_VALUE", $hidden_input["value"]);
2540 $this->tpl->parseCurrentBlock();
2541 }
2542
2543 $this->tpl->setCurrentBlock("tbl_hidden_row");
2544 $this->tpl->parseCurrentBlock();
2545 }
2546 }
2547
2551 public function fillActionRow()
2552 {
2553 $lng = $this->lng;
2554
2555 // action row
2556 $action_row = false;
2557 $arrow = false;
2558
2559 // add selection buttons
2560 if (count($this->sel_buttons) > 0) {
2561 foreach ($this->sel_buttons as $button) {
2562 $this->tpl->setCurrentBlock("sel_button");
2563 $this->tpl->setVariable(
2564 "SBUTTON_SELECT",
2566 $button["selected"],
2567 $button["sel_var"],
2568 $button["options"],
2569 false,
2570 true
2571 )
2572 );
2573 $this->tpl->setVariable("SBTN_NAME", $button["cmd"]);
2574 $this->tpl->setVariable("SBTN_VALUE", $button["text"]);
2575 $this->tpl->parseCurrentBlock();
2576
2577 if ($this->getTopCommands()) {
2578 $this->tpl->setCurrentBlock("sel_top_button");
2579 $this->tpl->setVariable(
2580 "SBUTTON_SELECT",
2582 $button["selected"],
2583 $button["sel_var"],
2584 $button["options"],
2585 false,
2586 true
2587 )
2588 );
2589 $this->tpl->setVariable("SBTN_NAME", $button["cmd"]);
2590 $this->tpl->setVariable("SBTN_VALUE", $button["text"]);
2591 $this->tpl->parseCurrentBlock();
2592 }
2593 }
2594 $buttons = true;
2595 $action_row = true;
2596 }
2597 $this->sel_buttons[] = array("options" => $a_options, "cmd" => $a_cmd, "text" => $a_text);
2598
2599 // add buttons
2600 if (count($this->buttons) > 0) {
2601 foreach ($this->buttons as $button) {
2602 if (!is_array($button)) {
2603 if ($button instanceof ilButtonBase) {
2604 $this->tpl->setVariable('BUTTON_OBJ', $button->render());
2605
2606 // this will remove id - should be unique
2607 $button = clone $button;
2608
2609 $this->tpl->setVariable('BUTTON_TOP_OBJ', $button->render());
2610 }
2611 continue;
2612 }
2613
2614 if (strlen($button['onclick'])) {
2615 $this->tpl->setCurrentBlock('cmdonclick');
2616 $this->tpl->setVariable('CMD_ONCLICK', $button['onclick']);
2617 $this->tpl->parseCurrentBlock();
2618 }
2619 $this->tpl->setCurrentBlock("plain_button");
2620 if ($button["id"] != "") {
2621 $this->tpl->setVariable("PBID", ' id="' . $button["id"] . '" ');
2622 }
2623 if ($button["class"] != "") {
2624 $this->tpl->setVariable("PBBT_CLASS", ' ' . $button["class"]);
2625 }
2626 $this->tpl->setVariable("PBTN_NAME", $button["cmd"]);
2627 $this->tpl->setVariable("PBTN_VALUE", $button["text"]);
2628 $this->tpl->parseCurrentBlock();
2629
2630 if ($this->getTopCommands()) {
2631 if (strlen($button['onclick'])) {
2632 $this->tpl->setCurrentBlock('top_cmdonclick');
2633 $this->tpl->setVariable('CMD_ONCLICK', $button['onclick']);
2634 $this->tpl->parseCurrentBlock();
2635 }
2636 $this->tpl->setCurrentBlock("plain_top_button");
2637 $this->tpl->setVariable("PBTN_NAME", $button["cmd"]);
2638 $this->tpl->setVariable("PBTN_VALUE", $button["text"]);
2639 if ($button["class"] != "") {
2640 $this->tpl->setVariable("PBBT_CLASS", ' ' . $button["class"]);
2641 }
2642 $this->tpl->parseCurrentBlock();
2643 }
2644 }
2645
2646 $buttons = true;
2647 $action_row = true;
2648 }
2649
2650 // multi selection
2651 if (count($this->mi_sel_buttons)) {
2652 foreach ($this->mi_sel_buttons as $button) {
2653 $this->tpl->setCurrentBlock("mi_sel_button");
2654 $this->tpl->setVariable(
2655 "MI_BUTTON_SELECT",
2657 $button["selected"],
2658 $button["sel_var"],
2659 $button["options"],
2660 false,
2661 true
2662 )
2663 );
2664 $this->tpl->setVariable("MI_BTN_NAME", $button["cmd"]);
2665 $this->tpl->setVariable("MI_BTN_VALUE", $button["text"]);
2666 $this->tpl->parseCurrentBlock();
2667
2668 if ($this->getTopCommands()) {
2669 $this->tpl->setCurrentBlock("mi_top_sel_button");
2670 $this->tpl->setVariable(
2671 "MI_BUTTON_SELECT",
2673 $button["selected"],
2674 $button["sel_var"] . "_2",
2675 $button["options"],
2676 false,
2677 true
2678 )
2679 );
2680 $this->tpl->setVariable("MI_BTN_NAME", $button["cmd"]);
2681 $this->tpl->setVariable("MI_BTN_VALUE", $button["text"]);
2682 $this->tpl->parseCurrentBlock();
2683 }
2684 }
2685 $arrow = true;
2686 $action_row = true;
2687 }
2688
2689
2690 if (count($this->multi) > 1 && $this->dataExists()) {
2691 if ($this->enable_command_for_all && $this->max_count <= self::getAllCommandLimit()) {
2692 $this->tpl->setCurrentBlock("tbl_cmd_select_all");
2693 $this->tpl->setVariable("TXT_SELECT_CMD_ALL", $lng->txt("all_objects"));
2694 $this->tpl->parseCurrentBlock();
2695 }
2696
2697 $this->tpl->setCurrentBlock("tbl_cmd_select");
2698 $sel = array();
2699 foreach ($this->multi as $mc) {
2700 $sel[$mc["cmd"]] = $mc["text"];
2701 }
2702 $this->tpl->setVariable(
2703 "SELECT_CMDS",
2704 ilUtil::formSelect("", "selected_cmd", $sel, false, true)
2705 );
2706 $this->tpl->setVariable("TXT_EXECUTE", $lng->txt("execute"));
2707 $this->tpl->parseCurrentBlock();
2708 $arrow = true;
2709 $action_row = true;
2710
2711 if ($this->getTopCommands()) {
2712 if ($this->enable_command_for_all && $this->max_count <= self::getAllCommandLimit()) {
2713 $this->tpl->setCurrentBlock("tbl_top_cmd_select_all");
2714 $this->tpl->setVariable("TXT_SELECT_CMD_ALL", $lng->txt("all_objects"));
2715 $this->tpl->parseCurrentBlock();
2716 }
2717
2718 $this->tpl->setCurrentBlock("tbl_top_cmd_select");
2719 $sel = array();
2720 foreach ($this->multi as $mc) {
2721 $sel[$mc["cmd"]] = $mc["text"];
2722 }
2723 $this->tpl->setVariable(
2724 "SELECT_CMDS",
2725 ilUtil::formSelect("", "selected_cmd2", $sel, false, true)
2726 );
2727 $this->tpl->setVariable("TXT_EXECUTE", $lng->txt("execute"));
2728 $this->tpl->parseCurrentBlock();
2729 }
2730 } elseif (count($this->multi) == 1 && $this->dataExists()) {
2731 $this->tpl->setCurrentBlock("tbl_single_cmd");
2732 $sel = array();
2733 foreach ($this->multi as $mc) {
2734 $cmd = $mc['cmd'];
2735 $txt = $mc['text'];
2736 }
2737 $this->tpl->setVariable("TXT_SINGLE_CMD", $txt);
2738 $this->tpl->setVariable("SINGLE_CMD", $cmd);
2739 $this->tpl->parseCurrentBlock();
2740 $arrow = true;
2741 $action_row = true;
2742
2743 if ($this->getTopCommands()) {
2744 $this->tpl->setCurrentBlock("tbl_top_single_cmd");
2745 $sel = array();
2746 foreach ($this->multi as $mc) {
2747 $cmd = $mc['cmd'];
2748 $txt = $mc['text'];
2749 }
2750 $this->tpl->setVariable("TXT_SINGLE_CMD", $txt);
2751 $this->tpl->setVariable("SINGLE_CMD", $cmd);
2752 $this->tpl->parseCurrentBlock();
2753 }
2754 }
2755
2756 if ($arrow) {
2757 $this->tpl->setCurrentBlock("tbl_action_img_arrow");
2758 $this->tpl->setVariable("IMG_ARROW", ilUtil::getImagePath("arrow_downright.svg"));
2759 $this->tpl->setVariable("ALT_ARROW", $lng->txt("action"));
2760 $this->tpl->parseCurrentBlock();
2761
2762 if ($this->getTopCommands()) {
2763 $this->tpl->setCurrentBlock("tbl_top_action_img_arrow");
2764 $this->tpl->setVariable("IMG_ARROW", ilUtil::getImagePath("arrow_upright.svg"));
2765 $this->tpl->setVariable("ALT_ARROW", $lng->txt("action"));
2766 $this->tpl->parseCurrentBlock();
2767 }
2768 }
2769
2770 if ($action_row) {
2771 $this->tpl->setCurrentBlock("tbl_action_row");
2772 $this->tpl->parseCurrentBlock();
2773 if ($this->getTopCommands()) {
2774 $this->tpl->setCurrentBlock("tbl_top_action_row");
2775 $this->tpl->parseCurrentBlock();
2776 }
2777 }
2778 }
2779
2785 public function setHeaderHTML($html)
2786 {
2787 $this->headerHTML = $html;
2788 }
2789
2796 public function storeProperty($type, $value)
2797 {
2798 global $DIC;
2799
2800 $ilUser = null;
2801 if (isset($DIC["ilUser"])) {
2802 $ilUser = $DIC["ilUser"];
2803 }
2804
2805 if (is_object($ilUser) && $this->getId() != "") {
2806 include_once("./Services/Table/classes/class.ilTablePropertiesStorage.php");
2807 $tab_prop = new ilTablePropertiesStorage();
2808
2809 $tab_prop->storeProperty($this->getId(), $ilUser->getId(), $type, $value);
2810 }
2811 }
2812
2819 public function loadProperty($type)
2820 {
2821 global $DIC;
2822
2823 $ilUser = null;
2824 if (isset($DIC["ilUser"])) {
2825 $ilUser = $DIC["ilUser"];
2826 }
2827
2828 if (is_object($ilUser) && $this->getId() != "") {
2829 include_once("./Services/Table/classes/class.ilTablePropertiesStorage.php");
2830 $tab_prop = new ilTablePropertiesStorage();
2831
2832 return $tab_prop->getProperty($this->getId(), $ilUser->getId(), $type);
2833 }
2834 return null;
2835 }
2836
2842 public function getCurrentState()
2843 {
2844 $this->determineOffsetAndOrder();
2845 $this->determineLimit();
2846 $this->determineSelectedColumns();
2847 $this->determineSelectedFilters();
2848
2849 // "filter" show/hide is not saved
2850
2851 $result = array();
2852 $result["order"] = $this->getOrderField();
2853 $result["direction"] = $this->getOrderDirection();
2854 $result["offset"] = $this->getOffset();
2855 $result["rows"] = $this->getLimit();
2856 $result["selfilters"] = $this->getSelectedFilters();
2857
2858 // #9514 - $this->getSelectedColumns() will omit deselected, leading to
2859 // confusion on restoring template
2860 $result["selfields"] = $this->selected_column;
2861
2862 // gather filter values
2863 if ($this->filters) {
2864 foreach ($this->filters as $item) {
2865 $result["filter_values"][$item->getFieldId()] = $this->getFilterValue($item);
2866 }
2867 }
2868 if ($this->optional_filters && $result["selfilters"]) {
2869 foreach ($this->optional_filters as $item) {
2870 if (in_array($item->getFieldId(), $result["selfilters"])) {
2871 $result["filter_values"][$item->getFieldId()] = $this->getFilterValue($item);
2872 }
2873 }
2874 }
2875
2876 return $result;
2877 }
2878
2885 protected function getFilterValue(ilFormPropertyGUI $a_item)
2886 {
2887 if (method_exists($a_item, "getChecked")) {
2888 return $a_item->getChecked();
2889 } elseif (method_exists($a_item, "getValue")) {
2890 return $a_item->getValue();
2891 } elseif (method_exists($a_item, "getDate")) {
2892 return $a_item->getDate()->get(IL_CAL_DATE);
2893 }
2894 }
2895
2902 protected function SetFilterValue(ilFormPropertyGUI $a_item, $a_value)
2903 {
2904 if (method_exists($a_item, "setChecked")) {
2905 $a_item->setChecked($a_value);
2906 } elseif (method_exists($a_item, "setValue")) {
2907 $a_item->setValue($a_value);
2908 } elseif (method_exists($a_item, "setDate")) {
2909 $a_item->setDate(new ilDate($a_value, IL_CAL_DATE));
2910 }
2911 $a_item->writeToSession();
2912 }
2913
2919 public function setContext($id)
2920 {
2921 if (trim($id)) {
2922 $this->context = $id;
2923 }
2924 }
2925
2931 public function getContext()
2932 {
2933 return $this->context;
2934 }
2935
2941 public function setShowRowsSelector($a_value)
2942 {
2943 $this->show_rows_selector = (bool) $a_value;
2944 }
2945
2951 public function getShowRowsSelector()
2952 {
2954 }
2955
2961 public function setShowTemplates($a_value)
2962 {
2963 $this->show_templates = (bool) $a_value;
2964 }
2965
2971 public function getShowTemplates()
2972 {
2973 return $this->show_templates;
2974 }
2975
2982 public function restoreTemplate($a_name)
2983 {
2984 global $DIC;
2985
2986 $ilUser = $DIC->user();
2987
2988 $a_name = ilUtil::stripSlashes($a_name);
2989
2990 if (trim($a_name) && $this->getContext() != "" && is_object($ilUser) && $ilUser->getId() != ANONYMOUS_USER_ID) {
2991 include_once("./Services/Table/classes/class.ilTableTemplatesStorage.php");
2992 $storage = new ilTableTemplatesStorage();
2993
2994 $data = $storage->load($this->getContext(), $ilUser->getId(), $a_name);
2995 if (is_array($data)) {
2996 foreach ($data as $property => $value) {
2997 $this->storeProperty($property, $value);
2998 }
2999 }
3000
3001 $data["filter_values"] = unserialize($data["filter_values"]);
3002 if ($data["filter_values"]) {
3003 $this->restore_filter_values = $data["filter_values"];
3004 }
3005
3006 $this->restore_filter = true;
3007
3008 return true;
3009 }
3010 return false;
3011 }
3012
3019 public function saveTemplate($a_name)
3020 {
3021 global $DIC;
3022
3023 $ilUser = $DIC->user();
3024
3025 $a_name = ilUtil::prepareFormOutput($a_name, true);
3026
3027 if (trim($a_name) && $this->getContext() != "" && is_object($ilUser) && $ilUser->getId() != ANONYMOUS_USER_ID) {
3028 include_once("./Services/Table/classes/class.ilTableTemplatesStorage.php");
3029 $storage = new ilTableTemplatesStorage();
3030
3031 $state = $this->getCurrentState();
3032 $state["filter_values"] = serialize($state["filter_values"]);
3033 $state["selfields"] = serialize($state["selfields"]);
3034 $state["selfilters"] = serialize($state["selfilters"]);
3035
3036 $storage->store($this->getContext(), $ilUser->getId(), $a_name, $state);
3037 return true;
3038 }
3039 return false;
3040 }
3041
3048 public function deleteTemplate($a_name)
3049 {
3050 global $DIC;
3051
3052 $ilUser = $DIC->user();
3053
3054 $a_name = ilUtil::prepareFormOutput($a_name, true);
3055
3056 if (trim($a_name) && $this->getContext() != "" && is_object($ilUser) && $ilUser->getId() != ANONYMOUS_USER_ID) {
3057 include_once("./Services/Table/classes/class.ilTableTemplatesStorage.php");
3058 $storage = new ilTableTemplatesStorage();
3059 $storage->delete($this->getContext(), $ilUser->getId(), $a_name);
3060 return true;
3061 }
3062 return false;
3063 }
3064
3068 public function getLimit()
3069 {
3070 if ($this->getExportMode() || $this->getPrintMode()) {
3071 return 9999;
3072 }
3073 return parent::getLimit();
3074 }
3075
3079 public function getOffset()
3080 {
3081 if ($this->getExportMode() || $this->getPrintMode()) {
3082 return 0;
3083 }
3084 return parent::getOffset();
3085 }
3086
3092 public function setExportFormats(array $formats)
3093 {
3094 $this->export_formats = array();
3095
3096 // #11339
3097 $valid = array(self::EXPORT_EXCEL => "tbl_export_excel",
3098 self::EXPORT_CSV => "tbl_export_csv");
3099
3100 foreach ($formats as $format) {
3101 if (array_key_exists($format, $valid)) {
3102 $this->export_formats[$format] = $valid[$format];
3103 }
3104 }
3105 }
3106
3111 public function setPrintMode($a_value = false)
3112 {
3113 $this->print_mode = (bool) $a_value;
3114 }
3115
3120 public function getPrintMode()
3121 {
3122 return $this->print_mode;
3123 }
3124
3130 public function getExportMode()
3131 {
3132 return $this->export_mode;
3133 }
3134
3140 public function exportData($format, $send = false)
3141 {
3142 if ($this->dataExists()) {
3143 // #9640: sort
3144 if (!$this->getExternalSorting() && $this->enabled["sort"]) {
3145 $this->determineOffsetAndOrder(true);
3146
3147 $this->row_data = ilUtil::sortArray(
3148 $this->row_data,
3149 $this->getOrderField(),
3150 $this->getOrderDirection(),
3151 $this->numericOrdering($this->getOrderField())
3152 );
3153 }
3154
3155 $filename = "export";
3156
3157 switch ($format) {
3158 case self::EXPORT_EXCEL:
3159 include_once "./Services/Excel/classes/class.ilExcel.php";
3160 $excel = new ilExcel();
3161 $excel->addSheet($this->title
3162 ? $this->title
3163 : $this->lng->txt("export"));
3164 $row = 1;
3165
3166 ob_start();
3167 $this->fillMetaExcel($excel, $row); // row must be increment in fillMetaExcel()! (optional method)
3168
3169 // #14813
3170 $pre = $row;
3171 $this->fillHeaderExcel($excel, $row); // row should NOT be incremented in fillHeaderExcel()! (required method)
3172 if ($pre == $row) {
3173 $row++;
3174 }
3175
3176 foreach ($this->row_data as $set) {
3177 $this->fillRowExcel($excel, $row, $set);
3178 $row++; // #14760
3179 }
3180 ob_end_clean();
3181
3182 if ($send) {
3183 $excel->sendToClient($filename);
3184 } else {
3185 $excel->writeToFile($filename);
3186 }
3187 break;
3188
3189 case self::EXPORT_CSV:
3190 include_once "./Services/Utilities/classes/class.ilCSVWriter.php";
3191 $csv = new ilCSVWriter();
3192 $csv->setSeparator(";");
3193
3194 ob_start();
3195 $this->fillMetaCSV($csv);
3196 $this->fillHeaderCSV($csv);
3197 foreach ($this->row_data as $set) {
3198 $this->fillRowCSV($csv, $set);
3199 }
3200 ob_end_clean();
3201
3202 if ($send) {
3203 $filename .= ".csv";
3204 header("Content-type: text/comma-separated-values");
3205 header("Content-Disposition: attachment; filename=\"" . $filename . "\"");
3206 header("Expires: 0");
3207 header("Cache-Control: must-revalidate, post-check=0,pre-check=0");
3208 header("Pragma: public");
3209 echo $csv->getCSVString();
3210 } else {
3211 file_put_contents($filename, $csv->getCSVString());
3212 }
3213 break;
3214 }
3215
3216 if ($send) {
3217 exit();
3218 }
3219 }
3220 }
3221
3229 protected function fillMetaExcel(ilExcel $a_excel, &$a_row)
3230 {
3231 }
3232
3240 protected function fillHeaderExcel(ilExcel $a_excel, &$a_row)
3241 {
3242 $col = 0;
3243 foreach ($this->column as $column) {
3244 $title = strip_tags($column["text"]);
3245 if ($title) {
3246 $a_excel->setCell($a_row, $col++, $title);
3247 }
3248 }
3249 $a_excel->setBold("A" . $a_row . ":" . $a_excel->getColumnCoord($col - 1) . $a_row);
3250 }
3251
3260 protected function fillRowExcel(ilExcel $a_excel, &$a_row, $a_set)
3261 {
3262 $col = 0;
3263 foreach ($a_set as $value) {
3264 if (is_array($value)) {
3265 $value = implode(', ', $value);
3266 }
3267 $a_excel->setCell($a_row, $col++, $value);
3268 }
3269 }
3270
3277 protected function fillMetaCSV($a_csv)
3278 {
3279 }
3280
3287 protected function fillHeaderCSV($a_csv)
3288 {
3289 foreach ($this->column as $column) {
3290 $title = strip_tags($column["text"]);
3291 if ($title) {
3292 $a_csv->addColumn($title);
3293 }
3294 }
3295 $a_csv->addRow();
3296 }
3297
3305 protected function fillRowCSV($a_csv, $a_set)
3306 {
3307 foreach ($a_set as $key => $value) {
3308 if (is_array($value)) {
3309 $value = implode(', ', $value);
3310 }
3311 $a_csv->addColumn(strip_tags($value));
3312 }
3313 $a_csv->addRow();
3314 }
3315
3321 public function setEnableAllCommand($a_value)
3322 {
3323 $this->enable_command_for_all = (bool) $a_value;
3324 }
3325
3331 public static function getAllCommandLimit()
3332 {
3333 global $DIC;
3334
3335 $ilClientIniFile = $DIC["ilClientIniFile"];
3336
3337 $limit = $ilClientIniFile->readVariable("system", "TABLE_ACTION_ALL_LIMIT");
3338 if (!$limit) {
3340 }
3341
3342 return $limit;
3343 }
3344
3349 {
3350 $this->row_selector_label = $row_selector_label;
3351 return $this;
3352 }
3353
3357 public function getRowSelectorLabel()
3358 {
3360 }
3361
3367 public function setPreventDoubleSubmission($a_val)
3368 {
3369 $this->prevent_double_submission = $a_val;
3370 }
3371
3378 {
3380 }
3381
3382 public function setLimit($a_limit = 0, $a_default_limit = 0)
3383 {
3384 parent::setLimit($a_limit, $a_default_limit);
3385
3386 // #17077 - if limit is set "manually" to 9999, force rows selector off
3387 if ($a_limit == 9999 &&
3388 $this->limit_determined) {
3389 $this->rows_selector_off = true;
3390 }
3391 }
3392}
$result
$filename
Definition: buildRTE.php:89
$_GET["client_id"]
$_POST["username"]
$_SESSION["AccountId"]
An exception for terminatinating execution or to throw for unit testing.
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.
This class represents a checkbox property in a property form.
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.
setCell($a_row, $a_col, $a_value, $a_datatype=null)
Set cell value.
setBold($a_coords)
Set cell(s) to bold.
getColumnCoord($a_col)
Get column "name" from number.
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?
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.
fillHeaderExcel(ilExcel $a_excel, &$a_row)
Excel Version of Fill Header.
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.
getDefaultFilterVisibility()
Get default filter visibility.
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.
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.
setDefaultFilterVisiblity($a_status)
Set default filter visiblity.
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.
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.
setSelectAllCheckbox($a_select_all_checkbox, $a_select_all_on_top=false)
Set the name of the checkbox that should be toggled with a select all button.
getFilterCols()
Get filter columns.
getShowRowsSelector()
Get rows-per-page selector state.
fillRowCSV($a_csv, $a_set)
CSV Version of Fill Row.
getId()
Get element id.
setRowSelectorLabel($row_selector_label)
fillRowExcel(ilExcel $a_excel, &$a_row, $a_set)
Excel Version of Fill Row.
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="")
ilTable2GUI 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.
isFilterVisible()
Check if filter is visible: manually shown (session, db) or default value set.
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)
addMultiCommand($a_cmd, $a_text)
Add Command button.
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.
fillFooter()
Fill footer row.
static getAllCommandLimit()
Get maximum number of entries to enable actions for all.
getExternalSegmentation()
Get external segmentation.
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.
setCustomPreviousNext($a_prev_link, $a_next_link)
Set custom previous/next links.
setContext($id)
Set context.
addFilterItemByMetaType($id, $type=self::FILTER_TEXT, $a_optional=false, $caption=null)
Add filter by standard type.
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
setFormName($a_formname="")
Set Form name.
setFilterCols($a_val)
Set filter columns.
setFormAction($a_form_action, $a_multipart=false)
Set Form action parameter.
getIsDataTable()
Get is data table.
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.
fillMetaExcel(ilExcel $a_excel, &$a_row)
Add meta information to excel export.
fillActionRow()
Fill Action Row.
setDefaultOrderDirection($a_defaultorderdirection)
Set Default order direction.
executeCommand()
Execute command.
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 img($a_src, $a_alt=null, $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(ilGlobalTemplateInterface $a_main_tpl=null)
Init YUI Connection module.
$formats
Definition: date.php:77
$valid
$txt
Definition: error.php:13
global $ilCtrl
Definition: ilias.php:18
exit
Definition: login.php:29
if($format !==null) $name
Definition: metadata.php:230
$format
Definition: metadata.php:218
$i
Definition: metadata.php:24
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
$type
$url
$ilUser
Definition: imgupload.php:18
$DIC
Definition: xapitoken.php:46
$rows
Definition: xhr_table.php:10