ILIAS  release_8 Revision v8.19
All Data Structures Namespaces Files Functions Variables Modules Pages
class.ilPresentationListTableGUI.php
Go to the documentation of this file.
1 <?php
2 
26 {
28  protected array $adv_fields;
29  protected \ILIAS\Glossary\Presentation\PresentationGUIRequest $request;
30  protected int $tax_id;
31  protected int $tax_node;
33  protected array $adv_cols_order = array();
34  protected bool $offline;
36  protected array $filter = [];
37 
38  public function __construct(
39  object $a_parent_obj,
40  string $a_parent_cmd,
41  ilObjGlossary $a_glossary,
42  bool $a_offline,
43  int $a_tax_node,
44  int $a_tax_id = 0
45  ) {
46  global $DIC;
47 
48  $this->lng = $DIC->language();
49  $this->ctrl = $DIC->ctrl();
50 
51  $this->glossary = $a_glossary;
52  $this->offline = $a_offline;
53  $this->tax_node = $a_tax_node;
54  $this->tax_id = $a_tax_id;
55  $this->setId("glopr" . $this->glossary->getId());
56  $this->request = $DIC->glossary()
57  ->internal()
58  ->gui()
59  ->presentation()
60  ->request();
61 
62  $gdf = new ilGlossaryDefPage();
63  $this->page_config = $gdf->getPageConfig();
64 
65  $adv_ad = new ilGlossaryAdvMetaDataAdapter($this->glossary->getRefId());
66  $this->adv_fields = $adv_ad->getAllFields();
67 
68 
69  parent::__construct($a_parent_obj, $a_parent_cmd);
70  //$this->setTitle($this->lng->txt("cont_terms"));
71 
72  if ($this->glossary->getPresentationMode() == "full_def") {
73  $this->addColumn($this->lng->txt("cont_terms"));
74  } else {
75  $adv_ap = new ilGlossaryAdvMetaDataAdapter($this->glossary->getRefId());
76  $this->adv_cols_order = $adv_ap->getColumnOrder();
77  foreach ($this->adv_cols_order as $c) {
78  if ($c["id"] == 0) {
79  $this->addColumn($this->lng->txt("cont_term"), "term");
80  } else {
81  $this->addColumn($c["text"], "md_" . $c["id"]);
82  }
83  }
84 
85 
86  $this->addColumn($this->lng->txt("cont_definitions"));
87  if ($this->glossary->isVirtual()) {
88  $this->addColumn($this->lng->txt("obj_glo"));
89  }
90  }
91 
92  $this->setEnableHeader(true);
93  if (!$this->offline) {
94  $this->setFormAction($this->ctrl->getFormAction($this->parent_obj));
95  } else {
96  $this->disable("footer");
97  }
98  $this->setRowTemplate("tpl.term_tbl_pres_row.html", "Modules/Glossary");
99  $this->setEnableTitle(true);
100 
101  if (!$this->offline) {
102  $this->initFilter();
103  $this->setFilterCommand("applyFilter");
104 
105  $this->setShowRowsSelector(true);
106  }
107 
108  // advanced metadata
109  $this->record_gui = new ilAdvancedMDRecordGUI(
111  'glo',
112  $this->glossary->getId(),
113  'term'
114  );
115  $this->record_gui->setTableGUI($this);
116  $this->record_gui->parse();
117  //$this->setDefaultOrderField("login");
118  //$this->setDefaultOrderDirection("asc");
119  $this->setData($this->glossary->getTermList(
120  $this->filter["term"] ?? "",
121  $this->request->getLetter(),
122  $this->filter["definition"] ?? "",
124  false,
125  true,
126  $this->record_gui->getFilterElements(),
127  false,
128  true
129  ));
130  if ($this->offline) {
131  $this->setLimit(count($this->getData()));
132  $this->resetOffset();
133  }
134  // $this->setData(array());
135  }
136 
138  {
139  return $this->record_gui;
140  }
141 
142  public function initFilter(): void
143  {
144  // term
145  $ti = new ilTextInputGUI($this->lng->txt("cont_term"), "term");
146  $ti->setMaxLength(64);
147  $ti->setSize(20);
148  $ti->setSubmitFormOnEnter(true);
149  $this->addFilterItem($ti);
150  $ti->readFromSession();
151  $this->filter["term"] = $ti->getValue();
152 
153  // definition
154  if ($this->glossary->supportsLongTextQuery()) {
155  $ti = new ilTextInputGUI($this->lng->txt("cont_definition"), "defintion");
156  $ti->setMaxLength(64);
157  $ti->setSize(20);
158  $ti->setSubmitFormOnEnter(true);
159  $this->addFilterItem($ti);
160  $ti->readFromSession();
161  $this->filter["definition"] = $ti->getValue();
162  }
163  }
164 
165  public function numericOrdering(string $a_field): bool
166  {
167  if (strpos($a_field, "md_") === 0) {
168  $md_id = (int) substr($a_field, 3);
169  if ($this->adv_fields[$md_id]["type"] == ilAdvancedMDFieldDefinition::TYPE_DATE) {
170  return true;
171  }
172  }
173  return false;
174  }
175 
176  protected function fillRow(array $a_set): void
177  {
178  $defs = ilGlossaryDefinition::getDefinitionList($a_set["id"]);
179  $this->ctrl->setParameter($this->parent_obj, "term_id", $a_set["id"]);
180 
181  if ($this->glossary->getPresentationMode() == "full_def") {
182  $this->tpl->setCurrentBlock("fd_td");
183  $this->tpl->setVariable(
184  "FULL_DEF",
185  $this->parent_obj->listDefinitions(
186  $this->request->getRefId(),
187  $a_set["id"],
188  true
189  )
190  );
191  $this->tpl->parseCurrentBlock();
192  } else {
193  if (count($defs)) {
194  for ($j = 0, $jMax = count($defs); $j < $jMax; $j++) {
195  $def = $defs[$j];
196  if (count($defs) > 1) {
197  if (!$this->offline) {
198  $this->ctrl->setParameter($this->parent_obj, "term_id", $a_set["id"]);
199  $def_href = $this->ctrl->getLinkTarget($this->parent_obj, "listDefinitions");
200  $this->ctrl->clearParameters($this->parent_obj);
201  } else {
202  $def_href = "term_" . $a_set["id"] . ".html";
203  }
204  $this->tpl->parseCurrentBlock();
205 
206  $this->tpl->setCurrentBlock("definition");
207  $this->tpl->setVariable("DEF_TEXT", $this->lng->txt("cont_definition") . " " . ($j + 1));
208  $this->tpl->setVariable("HREF_DEF", $def_href . "#ilPageTocDef" . ($j + 1));
209  $this->tpl->parseCurrentBlock();
210  }
211 
212  // check dirty short texts
213  $this->tpl->setCurrentBlock("definition");
214  if ($def["short_text_dirty"]) {
215  // #18022
216  $def_obj = new ilGlossaryDefinition($def["id"]);
217  $def_obj->updateShortText();
218  $short_str = $def_obj->getShortText();
219  } else {
220  $short_str = $def["short_text"];
221  }
222 
223  if (!$this->page_config->getPreventHTMLUnmasking()) {
224  $short_str = str_replace(["&lt;", "&gt;"], ["<", ">"], $short_str);
225  }
226 
227  // replace tex
228  // if a tex end tag is missing a tex end tag
229  $ltexs = strrpos($short_str, "[tex]");
230  $ltexe = strrpos($short_str, "[/tex]");
231  if ($ltexs > $ltexe) {
232  $page = new ilGlossaryDefPage($def["id"]);
233  $page->buildDom();
234  $short_str = $page->getFirstParagraphText();
235  $short_str = strip_tags($short_str, "<br>");
236  $ltexe = strpos($short_str, "[/tex]", $ltexs);
237  $short_str = ilStr::shortenTextExtended($short_str, $ltexe + 6, true);
238  }
239 
240  if (!$this->offline) {
241  $short_str = ilMathJax::getInstance()->insertLatexImages($short_str);
242  } else {
243  $short_str = ilMathJax::getInstance()->insertLatexImages(
244  $short_str,
245  '[tex]',
246  '[/tex]'
247  );
248  }
249 
250  $short_str = ilPCParagraph::xml2output($short_str, false, true, false);
251 
252  $this->tpl->setVariable("DEF_SHORT", $short_str);
253  $this->tpl->parseCurrentBlock();
254 
255  $this->tpl->setCurrentBlock("definition_row");
256  $this->tpl->parseCurrentBlock();
257  }
258  } else {
259  $this->tpl->touchBlock("def_td");
260  }
261 
262  // display additional column 'glossary' for meta glossaries
263  if ($this->glossary->isVirtual()) {
264  $this->tpl->setCurrentBlock("glossary_row");
265  $glo_title = ilObject::_lookupTitle($a_set["glo_id"]);
266  $this->tpl->setVariable("GLO_TITLE", $glo_title);
267  $this->tpl->parseCurrentBlock();
268  }
269  }
270 
271  $this->ctrl->clearParameters($this->parent_obj);
272 
273  // advanced metadata
274  foreach ($this->adv_cols_order as $c) {
275  if ($c["id"] == 0) {
276  $this->tpl->setCurrentBlock("link_start");
277  if (!$this->offline) {
278  $this->ctrl->setParameter($this->parent_obj, "term_id", $a_set["id"]);
279  $this->tpl->setVariable(
280  "LINK_VIEW_TERM",
281  $this->ctrl->getLinkTarget($this->parent_obj, "listDefinitions")
282  );
283 
284  $this->ctrl->clearParameters($this->parent_obj);
285  } else {
286  $this->tpl->setVariable("LINK_VIEW_TERM", "term_" . $a_set["id"] . ".html");
287  }
288  $this->tpl->parseCurrentBlock();
289 
290  $this->tpl->setCurrentBlock("link_end");
291  $this->tpl->setVariable("ANCHOR_TERM", "term_" . $a_set["id"]);
292  $this->tpl->parseCurrentBlock();
293 
294  $this->tpl->setCurrentBlock("td");
295  $this->tpl->setVariable("TEXT", $a_set["term"]);
296  } else {
297  $id = $c["id"];
298 
299  $val = " ";
300  if (isset($a_set["md_" . $id . "_presentation"])) {
301  $pb = $a_set["md_" . $id . "_presentation"]->getList();
302  if ($pb) {
303  $val = $pb;
304  }
305  }
306 
307  $this->tpl->setCurrentBlock("td");
308  $this->tpl->setVariable("TEXT", $val);
309  }
310  $this->tpl->parseCurrentBlock();
311  }
312  }
313 }
setData(array $a_data)
__construct(object $a_parent_obj, string $a_parent_cmd, ilObjGlossary $a_glossary, bool $a_offline, int $a_tax_node, int $a_tax_id=0)
$c
Definition: cli.php:38
setFormAction(string $a_form_action, bool $a_multipart=false)
addFilterItem(ilTableFilterItem $a_input_item, bool $a_optional=false)
setEnableTitle(bool $a_enabletitle)
ILIAS Glossary Presentation PresentationGUIRequest $request
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static xml2output(string $a_text, bool $a_wysiwyg=false, bool $a_replace_lists=true, bool $unmask=true)
Converts xml from DB to output in edit textarea.
setId(string $a_val)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
global $DIC
Definition: feed.php:28
resetOffset(bool $a_in_determination=false)
setShowRowsSelector(bool $a_value)
Toggle rows-per-page selector.
static _lookupTitle(int $obj_id)
setRowTemplate(string $a_template, string $a_template_dir="")
Set row template.
setFilterCommand(string $a_val, string $a_caption="")
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static getDefinitionList(int $a_term_id)
getAllFields()
Get all advanced metadata fields.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static getInstance()
Singleton: get instance for use in ILIAS requests with a config loaded from the settings.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
__construct(Container $dic, ilPlugin $plugin)
static shortenTextExtended(string $a_str, int $a_len, bool $a_dots=false, bool $a_next_blank=false, bool $a_keep_extension=false)
setLimit(int $a_limit=0, int $a_default_limit=0)
setTableGUI(ilTable2GUI $a_val)
Set table for self::MODE_TABLE_FILTER.
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)
disable(string $a_module_name)
setEnableHeader(bool $a_enableheader)