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 
4 require_once("Services/Table/classes/class.ilTableGUI.php");
5 
15 class ilTable2GUI extends ilTableGUI
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();
85  protected $prevent_double_submission = true;
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;
103  const FILTER_LANGUAGE = 4;
105  const FILTER_DATE_RANGE = 6;
108  const FILTER_CHECKBOX = 9;
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);
162  $this->determineSelectedColumns();
163  }
164 
170  public function setOpenFormTag($a_val)
171  {
172  $this->open_form_tag = $a_val;
173  }
174 
180  public function getOpenFormTag()
181  {
182  return $this->open_form_tag;
183  }
184 
190  public function setCloseFormTag($a_val)
191  {
192  $this->close_form_tag = $a_val;
193  }
194 
200  public function getCloseFormTag()
201  {
202  return $this->close_form_tag;
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) {
375  $this->determineOffsetAndOrder();
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) {
678  case self::FILTER_CHECKBOX:
679  $item = new ilCheckboxInputGUI($caption, $id);
680  break;
681 
682  case self::FILTER_SELECT:
683  include_once("./Services/Form/classes/class.ilSelectInputGUI.php");
684  $item = new ilSelectInputGUI($caption, $id);
685  break;
686 
687  case self::FILTER_DATE:
688  include_once("./Services/Form/classes/class.ilDateTimeInputGUI.php");
689  $item = new ilDateTimeInputGUI($caption, $id);
690  break;
691 
692  case self::FILTER_TEXT:
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 
700  case self::FILTER_LANGUAGE:
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 
711  case self::FILTER_NUMBER_RANGE:
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 
724  case self::FILTER_DATE_RANGE:
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 
735  case self::FILTER_DATETIME_RANGE:
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 
748  case self::FILTER_DURATION_RANGE:
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 
1168  public function getDefaultOrderDirection()
1169  {
1170  return $this->defaultorderdirection;
1171  }
1172 
1177  public function setDefaultFilterVisiblity($a_status)
1178  {
1179  $this->default_filter_visibility = $a_status;
1180  }
1181 
1186  public function getDefaultFilterVisibility()
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 
1364  $ilCtrl = $this->ctrl;
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;
1623  $ilCtrl = $this->ctrl;
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"]) {
1679  $data = ilUtil::sortArray(
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;
1765  $ilCtrl = $this->ctrl;
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;
2139  $ilCtrl = $this->ctrl;
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 
2417  $ilCtrl = $this->ctrl;
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) {
3339  $limit = self::ACTION_ALL_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 
3377  public function getPreventDoubleSubmission()
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 }
addCommandButton($a_cmd, $a_text, $a_onclick='', $a_id="", $a_class=null)
Add Command button.
static sortArray( $array, $a_array_sortby, $a_array_sortorder=0, $a_numeric=false, $a_keep_keys=false)
sortArray
setRowSelectorLabel($row_selector_label)
initFilter()
Init filter.
static prepareFormOutput($a_str, $a_strip=false)
prepares string output for html forms public
This class represents a duration (typical hh:mm:ss) property in a property form.
setDescription($a_val)
Set description.
getExternalSorting()
Get external sorting.
fillHeaderExcel(ilExcel $a_excel, &$a_row)
Excel Version of Fill Header.
prepareOutput()
Anything that must be done before HTML is generated.
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.
getContext()
Get context.
setExternalSorting($a_val)
Set external sorting.
__construct($a_parent_obj, $a_parent_cmd="", $a_template_context="")
ilTable2GUI constructor.
getDefaultOrderField()
Get Default order field.
setDefaultOrderField($a_defaultorderfield)
Set Default order field.
exit
Definition: login.php:29
setExportFormats(array $formats)
Set available export formats.
addHiddenInput($a_name, $a_value)
Add Hidden Input field.
getTopAnchor()
Get top anchor.
getTopCommands()
Get top commands (display command buttons on top of table, too)
addCommandButtonInstance(ilButtonBase $a_button)
Add Command button instance.
$_SESSION["AccountId"]
$result
getColumnCount()
Returns the column count based on the number of the header row columns public.
setDisplayAsBlock($a_val)
Set display as block.
getSelectAllCheckbox()
Get the name of the checkbox that should be toggled with a select all button.
getFilterCommand()
Get filter command.
$type
getSelectableColumns()
Get selectable columns.
setOffset($a_offset)
set dataset offset public
setPrintMode($a_value=false)
Toogle print mode.
renderFilter()
Render Filter section.
fillRowExcel(ilExcel $a_excel, &$a_row, $a_set)
Excel Version of Fill Row.
$_GET["client_id"]
setShowTemplates($a_value)
Toggle templates.
storeProperty($type, $value)
Store table property.
getIsDataTable()
Get is data table.
setEnableNumInfo($a_val)
Set enable num info.
getFilterValue(ilFormPropertyGUI $a_item)
Get current filter value.
setFilterCols($a_val)
Set filter columns.
$valid
setExternalSegmentation($a_val)
Set external segmentation.
determineSelectedColumns()
Determine selected columns.
exportData($format, $send=false)
Export and optionally send current table data.
resetOffset($a_in_determination=false)
Reset offset.
getFilterItemByPostVar($a_post_var)
addFilterItemByMetaType($id, $type=self::FILTER_TEXT, $a_optional=false, $caption=null)
Add filter by standard type.
static initConnection(ilGlobalTemplateInterface $a_main_tpl=null)
Init YUI Connection module.
This class represents a checkbox property in a property form.
addFilterItem($a_input_item, $a_optional=false)
Add filter item.
static setUseRelativeDates($a_status)
set use relative dates
setIsDataTable($a_val)
Set is data table.
getFormName()
Get Form name.
Saves (mostly asynchronously) user properties of tables (e.g.
setFooter($a_style, $a_previous=0, $a_next=0)
set order direction public
determineLimit()
Determine the limit.
Class ilTableGUI.
getOpenFormTag()
Get open form tag.
setDefaultFilterVisiblity($a_status)
Set default filter visiblity.
deleteTemplate($a_name)
Delete template.
getParentCmd()
Get parent command.
getOrderDirection()
Get order direction.
getLinkbar($a_num)
Get previous/next linkbar.
setNoEntriesText($a_text)
Set text for an empty table.
fillFooter()
Fill footer row.
getParentObject()
Get parent object.
setId($a_val)
Set id.
getDescription()
Get description.
saveTemplate($a_name)
Save current state as template.
getDisplayAsBlock()
Get display as block.
addHeaderCommand($a_href, $a_text, $a_target="", $a_img="")
Add Header Command (Link) (Image needed for now)
Saves (mostly asynchronously) user properties of tables (e.g.
This class represents a date/time property in a property form.
global $ilCtrl
Definition: ilias.php:18
fillActionRow()
Fill Action Row.
setDefaultOrderDirection($a_defaultorderdirection)
Set Default order direction.
setTitle($a_title, $a_icon=0, $a_icon_alt=0)
Set title and title icon.
getShowRowsSelector()
Get rows-per-page selector state.
if($format !==null) $name
Definition: metadata.php:230
getHTML()
Get HTML.
getDefaultOrderDirection()
Get Default order direction.
setOrderLink($sort_field, $order_dir)
getFilterElements($a_only_non_empty=true)
Get SQL conditions for current filter value(s)
getShowTemplates()
Get template state.
setOrderDirection($a_order_direction)
set order direction public
setOrderField($a_order_field)
set order column
setTopCommands($a_val)
Set top commands (display command buttons on top of table, too)
const FILTER_DATETIME_RANGE
isFilterVisible()
Check if filter is visible: manually shown (session, db) or default value set.
Class for single dates.
setResetCommand($a_val, $a_caption=null)
Set reset filter command.
getColumnCoord($a_col)
Get column "name" from number.
setBold($a_coords)
Set cell(s) to bold.
fillMetaCSV($a_csv)
Add meta information to csv export.
getDisableFilterHiding()
Get disable filter hiding.
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.
restoreTemplate($a_name)
Restore state from template.
getOffset()
Get offset.
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
This class represents a number property in a property form.
setDisableFilterHiding($a_val=true)
Set disable filter hiding.
const FILTER_DURATION_RANGE
numericOrdering($a_field)
Should this field be sorted numeric?
getExternalSegmentation()
Get external segmentation.
addMultiCommand($a_cmd, $a_text)
Add Command button.
static getAllCommandLimit()
Get maximum number of entries to enable actions for all.
This is a utility class for the yui overlays.
setCustomPreviousNext($a_prev_link, $a_next_link)
Set custom previous/next links.
setHeaderHTML($html)
set header html
$format
Definition: metadata.php:218
setPrefix($a_prefix)
$ilUser
Definition: imgupload.php:18
User interface class for a checkbox list overlay.
getSelectedColumns()
Get selected columns.
setCell($a_row, $a_col, $a_value, $a_datatype=null)
Set cell value.
getFormAction()
Get Form action parameter.
isAdvMDFilter(ilAdvancedMDRecordGUI $a_gui, $a_element)
Check if filter element is based on adv md.
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
getPreventDoubleSubmission()
Get prevent double submission.
getEnableHeader()
Get Enable Header.
$txt
Definition: error.php:13
SetFilterValue(ilFormPropertyGUI $a_item, $a_value)
Set current filter value.
setEnableAllCommand($a_value)
Enable actions for all entries in current result.
addSelectionButton($a_sel_var, $a_options, $a_cmd, $a_text, $a_default_selection='')
Add Selection List + Command button.
getEnableTitle()
Get Enable Title.
static img($a_src, $a_alt=null, $a_width="", $a_height="", $a_border=0, $a_id="", $a_class="")
Build img tag.
setRowTemplate($a_template, $a_template_dir="")
Set row template.
$filename
Definition: buildRTE.php:89
getNoEntriesText()
Get text for an empty table.
writeFilterToSession()
Write filter values to session.
executeCommand()
Execute command.
$rows
Definition: xhr_table.php:10
isColumnSelected($a_col)
Is given column selected?
isFilterSelected($a_col)
Is given filter selected?
render()
render table public
addMultiItemSelectionButton($a_sel_var, $a_options, $a_cmd, $a_text, $a_default_selection='')
Add Selection List + Command button for selected items.
getResetCommand()
Get reset filter command.
setContext($id)
Set context.
determineOffsetAndOrder($a_omit_offset=false)
Determine offset and order.
determineSelectedFilters()
Determine selected filters.
This class represents a number property in a property form.
setFormAction($a_form_action, $a_multipart=false)
Set Form action parameter.
const IL_CAL_DATE
getEnableNumInfo()
Get enable num info.
getSelectedFilters()
Get selected filters.
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.
getFilterCols()
Get filter columns.
This class represents a property in a property form.
setFormName($a_formname="")
Set Form name.
__construct(Container $dic, ilPlugin $plugin)
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.
$DIC
Definition: xapitoken.php:46
setShowRowsSelector($a_value)
Toggle rows-per-page selector.
getPrintMode()
Get print mode.
getCurrentState()
get current settings for order, limit, columns and filter
setOpenFormTag($a_val)
Set open form tag.
setEnableHeader($a_enableheader)
Set Enable Header.
loadProperty($type)
Load table property.
fillRow($a_set)
Standard Version of Fill Row.
setCloseCommand($a_link)
Add command for closing table.
$url
getLimit()
Get limit.
fillHeaderCSV($a_csv)
CSV Version of Fill Header.
setMaxCount($a_max_count)
set max.
getCloseFormTag()
Get close form tag.
getId()
Get element id.
fillMetaExcel(ilExcel $a_excel, &$a_row)
Add meta information to excel export.
getExportMode()
Was export activated?
getFilterItems($a_optionals=false)
Get filter items.
setEnableTitle($a_enabletitle)
Set Enable Title.
getDefaultFilterVisibility()
Get default filter visibility.
getStyle($a_element)
writeToSession()
Write to session.
$_POST["username"]
resetFilter()
Reset filter.
setPreventDoubleSubmission($a_val)
Set prevent double submission.
setTopAnchor($a_val)
Set top anchor.
setCloseFormTag($a_val)
Set close form tag.
setLimit($a_limit=0, $a_default_limit=0)
$formats
Definition: date.php:77
fillRowCSV($a_csv, $a_set)
CSV Version of Fill Row.
$i
Definition: metadata.php:24
setFilterCommand($a_val, $a_caption=null)
Set filter command.