ILIAS  trunk Revision v11.0_alpha-2638-g80c1d007f79
class.ilDclFieldListTableGUI.php
Go to the documentation of this file.
1 <?php
2 
19 declare(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 
132  $this->determineOffsetAndOrder();
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"]) {
140  $data = ilArrayUtil::sortArray(
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 }
setData(array $a_data)
numericOrdering(string $a_field)
Should this field be sorted numeric?
static array static setUseRelativeDates(bool $a_status)
set use relative dates
prepareOutput()
Anything that must be done before HTML is generated.
setTopCommands(bool $a_val)
getStyle(string $a_element)
setFormAction(string $a_form_action, bool $a_multipart=false)
setEnableTitle(bool $a_enabletitle)
addCommandButton(string $a_cmd, string $a_text, string $a_onclick='', string $a_id="", string $a_class="")
setSelectAllCheckbox(string $a_select_all_checkbox, bool $a_select_all_on_top=false)
renderer()
setFormName(string $a_name="")
setId(string $a_val)
exportData(int $format, bool $send=false)
Export and optionally send current table data.
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
fillRowFromObject(ilDclBaseFieldModel $a_set)
setStyle(string $a_element, string $a_style)
static hasAccessToFields(int $ref_id, int $table_id)
setExternalSorting(bool $a_val)
setShowRowsSelector(bool $a_value)
Toggle rows-per-page selector.
static getAllDatatype(bool $force=false)
Get all possible Datatypes.
setRowTemplate(string $a_template, string $a_template_dir="")
Set row template.
global $DIC
Definition: shib_login.php:26
setDefaultOrderDirection(string $a_defaultorderdirection)
static getTableCache(?int $table_id=null)
getDescription()
Get description.
setTitle(string $a_title, string $a_icon="", string $a_icon_alt="")
setFooter(string $a_style, string $a_previous="", string $a_next="")
__construct(Container $dic, ilPlugin $plugin)
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)
addMultiCommand(string $a_cmd, string $a_text)
__construct(ilDclFieldListGUI $a_parent_obj, string $a_parent_cmd, int $table_id)
determineOffsetAndOrder(bool $a_omit_offset=false)
setEnableHeader(bool $a_enableheader)
setMaxCount(int $a_max_count)
set max.
getDatatypeId()
Get datatype_id.
setExternalSegmentation(bool $a_val)
static sortArray(array $array, string $a_array_sortby_key, string $a_array_sortorder="asc", bool $a_numeric=false, bool $a_keep_keys=false)