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