ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
class.ilDclFieldListTableGUI.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
22{
23 private ?int $order = null;
24
25 protected ilDclTable $table;
26
27 protected \ILIAS\UI\Renderer $renderer;
28 protected \ILIAS\UI\Factory $ui_factory;
29
30
31 public function __construct(ilDclFieldListGUI $a_parent_obj, string $a_parent_cmd, int $table_id)
32 {
33 global $DIC;
34
35 $this->ui_factory = $DIC->ui()->factory();
36 $this->renderer = $DIC->ui()->renderer();
37
38 parent::__construct($a_parent_obj, $a_parent_cmd);
39
40 $this->parent_obj = $a_parent_obj;
41 $this->table = ilDclCache::getTableCache($table_id);
42 $this->table->showInvalidFields(true);
43
44 $this->setId('dcl_field_list');
45 $this->addColumn('', '', '1', true);
46 $this->addColumn($this->lng->txt('dcl_order'), '', '30px');
47 $this->addColumn($this->lng->txt('dcl_fieldtitle'), '', 'auto');
48 $this->addColumn($this->lng->txt('dcl_in_export'), '', '30px');
49 $this->addColumn($this->lng->txt('dcl_description'), '', 'auto');
50 $this->addColumn($this->lng->txt('dcl_field_datatype'), '', 'auto');
51 $this->addColumn($this->lng->txt('actions'), '', '');
52 // Only add mutli command for custom fields
53 if (count($this->table->getRecordFields())) {
54 $this->setSelectAllCheckbox('dcl_field_ids[]');
55 $this->addMultiCommand('confirmDeleteFields', $this->lng->txt('dcl_delete_fields'));
56 }
57
58 $this->ctrl->setParameterByClass('ildclfieldeditgui', 'table_id', $this->parent_obj->getTableId());
59 $this->ctrl->setParameterByClass('ildclfieldlistgui', 'table_id', $this->parent_obj->getTableId());
60
61 $this->setFormAction($this->ctrl->getFormActionByClass('ildclfieldlistgui'));
62 $this->addCommandButton('save', $this->lng->txt('save'));
63
64 $this->setFormAction($this->ctrl->getFormAction($a_parent_obj));
65 $this->setFormName('field_list');
66
67 //those two are important as we get our data as objects not as arrays.
68 $this->setExternalSegmentation(true);
69 $this->setExternalSorting(true);
70
71 $this->setTopCommands(true);
72 $this->setEnableHeader(true);
73 $this->setShowRowsSelector(false);
74 $this->setEnableHeader(true);
75 $this->setEnableTitle(true);
76 $this->setDefaultOrderDirection('asc');
77
78 $this->setTitle($this->table->getTitle());
79 $this->setRowTemplate('tpl.field_list_row.html', 'components/ILIAS/DataCollection');
80 $this->setStyle('table', $this->getStyle('table') . ' ' . 'dcl_record_list');
81
82 $this->setData($this->table->getFields());
83 }
84
88 public function getHTML(): string
89 {
90 if ($this->getExportMode()) {
91 $this->exportData($this->getExportMode(), true);
92 }
93
94 $this->prepareOutput();
95
96 if (is_object($this->getParentObject()) && $this->getId() == "") {
97 $this->ctrl->saveParameter($this->getParentObject(), $this->getNavParameter());
98 }
99
100 if (!$this->getPrintMode()) {
101 // set form action
102 if ($this->form_action != "" && $this->getOpenFormTag()) {
103 $hash = "";
104
105 if ($this->form_multipart) {
106 $this->tpl->touchBlock("form_multipart_bl");
107 }
108
109 if ($this->getPreventDoubleSubmission()) {
110 $this->tpl->touchBlock("pdfs");
111 }
112
113 $this->tpl->setCurrentBlock("tbl_form_header");
114 $this->tpl->setVariable("FORMACTION", $this->getFormAction() . $hash);
115 $this->tpl->setVariable("FORMNAME", $this->getFormName());
116 $this->tpl->parseCurrentBlock();
117 }
118
119 if ($this->form_action != "" && $this->getCloseFormTag()) {
120 $this->tpl->touchBlock("tbl_form_footer");
121 }
122 }
123
124 if (!$this->enabled['content']) {
125 return $this->render();
126 }
127
128 if (!$this->getExternalSegmentation()) {
129 $this->setMaxCount(count($this->row_data));
130 }
131
133
134 $this->setFooter("tblfooter", $this->lng->txt("previous"), $this->lng->txt("next"));
135
136 $data = $this->getData();
137 if ($this->dataExists()) {
138 // sort
139 if (!$this->getExternalSorting() && $this->enabled["sort"]) {
141 $data,
142 $this->getOrderField(),
143 $this->getOrderDirection(),
144 $this->numericOrdering($this->getOrderField())
145 );
146 }
147
148 // slice
149 if (!$this->getExternalSegmentation()) {
150 $data = array_slice($data, $this->getOffset(), $this->getLimit());
151 }
152 }
153
154 // fill rows
155 if ($this->dataExists()) {
156 if ($this->getPrintMode()) {
158 }
159
160 $this->tpl->addBlockFile(
161 "TBL_CONTENT",
162 "tbl_content",
163 $this->row_template,
164 $this->row_template_dir
165 );
166
167 foreach ($data as $set) {
168 $this->tpl->setCurrentBlock("tbl_content");
169 $this->css_row = ($this->css_row !== "tblrow1")
170 ? "tblrow1"
171 : "tblrow2";
172 $this->tpl->setVariable("CSS_ROW", $this->css_row);
173
174 $this->fillRowFromObject($set);
175 $this->tpl->setCurrentBlock("tbl_content");
176 $this->tpl->parseCurrentBlock();
177 }
178 } else {
179 // add standard no items text (please tell me, if it messes something up, alex, 29.8.2008)
180 $no_items_text = (trim($this->getNoEntriesText()) != '')
181 ? $this->getNoEntriesText()
182 : $this->lng->txt("no_items");
183
184 $this->css_row = ($this->css_row !== "tblrow1")
185 ? "tblrow1"
186 : "tblrow2";
187
188 $this->tpl->setCurrentBlock("tbl_no_entries");
189 $this->tpl->setVariable('TBL_NO_ENTRY_CSS_ROW', $this->css_row);
190 $this->tpl->setVariable('TBL_NO_ENTRY_COLUMN_COUNT', $this->column_count);
191 $this->tpl->setVariable('TBL_NO_ENTRY_TEXT', trim($no_items_text));
192 $this->tpl->parseCurrentBlock();
193 }
194
195 if (!$this->getPrintMode()) {
196 $this->fillFooter();
197
198 $this->fillHiddenRow();
199
200 $this->fillActionRow();
201
202 $this->storeNavParameter();
203 }
204
205 return $this->render();
206 }
207
208 public function fillRowFromObject(ilDclBaseFieldModel $a_set): void
209 {
210 if (!$a_set->isStandardField()) {
211 $this->tpl->setVariable('FIELD_ID', $a_set->getId());
212 }
213
214 $this->tpl->setVariable('NAME', 'order[' . $a_set->getId() . ']');
215 $this->tpl->setVariable('VALUE', $this->order);
216
217 /* Don't enable setting filter for MOB fields or reference fields that reference a MOB field */
218 $show_exportable = true;
219
220 if ($a_set->getId() == 'comments') {
221 $show_exportable = false;
222 }
223
224 if ($show_exportable) {
225 $this->tpl->setVariable('CHECKBOX_EXPORTABLE', 'exportable[' . $a_set->getId() . ']');
226 if ($a_set->getExportable()) {
227 $this->tpl->setVariable('CHECKBOX_EXPORTABLE_CHECKED', 'checked');
228 }
229 } else {
230 $this->tpl->setVariable('NO_FILTER_EXPORTABLE');
231 }
232
233 $this->order = $this->order + 10;
234 $this->tpl->setVariable('ORDER_NAME', 'order[' . $a_set->getId() . ']');
235 $this->tpl->setVariable('ORDER_VALUE', $this->order);
236
237 $this->tpl->setVariable('TITLE', $a_set->getTitle());
238 $this->tpl->setVariable('DESCRIPTION', $a_set->getDescription());
239 $this->tpl->setVariable('DATATYPE', $a_set->getPresentationTitle());
240
241 $this->ctrl->setParameterByClass('ildclfieldeditgui', 'field_id', $a_set->getId());
242
243 if (!$a_set->isStandardField()) {
245 $this->parent_obj->getDataCollectionObject()->getRefId(),
246 $this->table->getId()
247 )) {
248 $dropdown_items = [];
249 if (in_array($a_set->getDatatypeId(), array_keys(ilDclDatatype::getAllDatatype()))) {
250 $dropdown_items[] = $this->ui_factory->link()->standard(
251 $this->lng->txt('edit'),
252 $this->ctrl->getLinkTargetByClass(ilDclFieldEditGUI::class, 'edit')
253 );
254 }
255 $dropdown_items[] = $this->ui_factory->link()->standard(
256 $this->lng->txt('delete'),
257 $this->ctrl->getLinkTargetByClass(ilDclFieldEditGUI::class, 'confirmDelete')
258 );
259 $dropdown = $this->ui_factory->dropdown()->standard($dropdown_items)->withLabel($this->lng->txt('actions'));
260
261 $this->tpl->setVariable('ACTIONS', $this->renderer->render($dropdown));
262 } else {
263 $this->tpl->setVariable('ACTIONS');
264 }
265 }
266 }
267}
renderer()
static sortArray(array $array, string $a_array_sortby_key, string $a_array_sortorder="asc", bool $a_numeric=false, bool $a_keep_keys=false)
static setUseRelativeDates(bool $a_status)
set use relative dates
static getTableCache(?int $table_id=null)
static getAllDatatype(bool $force=false)
Get all possible Datatypes.
__construct(ilDclFieldListGUI $a_parent_obj, string $a_parent_cmd, int $table_id)
fillRowFromObject(ilDclBaseFieldModel $a_set)
static hasAccessToFields(int $ref_id, int $table_id)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
setShowRowsSelector(bool $a_value)
Toggle rows-per-page selector.
getFormName()
get the name of the parent form
prepareOutput()
Anything that must be done before HTML is generated.
determineOffsetAndOrder(bool $a_omit_offset=false)
setTitle(string $a_title, string $a_icon="", string $a_icon_alt="")
setExternalSegmentation(bool $a_val)
addCommandButton(string $a_cmd, string $a_text, string $a_onclick='', string $a_id="", string $a_class="")
setEnableTitle(bool $a_enabletitle)
setFormName(string $a_name="")
addMultiCommand(string $a_cmd, string $a_text)
setFormAction(string $a_form_action, bool $a_multipart=false)
addColumn(string $a_text, string $a_sort_field="", string $a_width="", bool $a_is_checkbox_action_column=false, string $a_class="", string $a_tooltip="", bool $a_tooltip_with_html=false)
setEnableHeader(bool $a_enableheader)
setSelectAllCheckbox(string $a_select_all_checkbox, bool $a_select_all_on_top=false)
numericOrdering(string $a_field)
Should this field be sorted numeric?
setTopCommands(bool $a_val)
setExternalSorting(bool $a_val)
setRowTemplate(string $a_template, string $a_template_dir="")
Set row template.
setId(string $a_val)
setDefaultOrderDirection(string $a_defaultorderdirection)
setData(array $a_data)
Set table data.
exportData(int $format, bool $send=false)
Export and optionally send current table data.
setStyle(string $a_element, string $a_style)
getStyle(string $a_element)
setMaxCount(int $a_max_count)
set max.
setFooter(string $a_style, string $a_previous="", string $a_next="")
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
global $DIC
Definition: shib_login.php:26