ILIAS  release_8 Revision v8.23
class.ilTermListTableGUI.php
Go to the documentation of this file.
1 <?php
2 
25 {
26  protected array $selected_cols;
27  protected array $adv_cols_order;
28  protected array $selectable_cols;
29  protected array $adv_fields;
30  protected int $tax_node;
33  protected array $filter;
34 
35  public function __construct(
36  object $a_parent_obj,
37  string $a_parent_cmd,
38  int $a_tax_node
39  ) {
40  global $DIC;
41 
42  $this->glossary = $a_parent_obj->getObject();
43  $this->setId("glotl" . $this->glossary->getId());
44  $this->tax_node = $a_tax_node;
45 
46  $this->lng = $DIC->language();
47  $this->ctrl = $DIC->ctrl();
48 
49  $this->selectable_cols = array();
50 
51  $this->term_perm = ilGlossaryTermPermission::getInstance();
52 
53  $adv_ad = new ilGlossaryAdvMetaDataAdapter($this->glossary->getRefId());
54  $this->adv_fields = $adv_ad->getAllFields();
55  foreach ($this->adv_fields as $f) {
56  $this->selectable_cols["md_" . $f["id"]] = array(
57  "txt" => $f["title"],
58  "default" => false
59  );
60  }
61 
62  // selectable columns
63  $this->selectable_cols["language"] = array(
64  "txt" => $this->lng->txt("language"),
65  "default" => true);
66  $this->selectable_cols["usage"] = array(
67  "txt" => $this->lng->txt("cont_usage"),
68  "default" => true);
69 
70  // selectable columns of advanced metadata
71 
72  parent::__construct($a_parent_obj, $a_parent_cmd);
73  $this->setTitle($this->lng->txt("cont_terms"));
74 
75  $this->addColumn("", "", "1", true);
76  //$this->addColumn($this->lng->txt("cont_term"));
77 
78  $adv_ap = new ilGlossaryAdvMetaDataAdapter($this->glossary->getRefId());
79  $this->adv_cols_order = $adv_ap->getColumnOrder();
80  $this->selected_cols = $this->getSelectedColumns();
81  foreach ($this->adv_cols_order as $c) {
82  if ($c["id"] == 0) {
83  $this->addColumn($this->lng->txt("cont_term"), "term");
84  } elseif (in_array("md_" . $c["id"], $this->selected_cols)) {
85  $this->addColumn($c["text"], "md_" . $c["id"]);
86  }
87  }
88 
89  foreach (array("language", "usage") as $c) {
90  if (in_array($c, $this->selected_cols)) {
91  $this->addColumn($this->selectable_cols[$c]["txt"]);
92  }
93  }
94 
95  $this->setDefaultOrderDirection("asc");
96  $this->setDefaultOrderField("term");
97  $this->addColumn($this->lng->txt("cont_definitions"));
98 
99  if ($this->showGlossaryColumn()) {
100  $this->addColumn($this->lng->txt("obj_glo"));
101  }
102 
103  $this->addColumn($this->lng->txt("actions"));
104 
105  $this->setEnableHeader(true);
106  $this->setFormAction($this->ctrl->getFormAction($a_parent_obj));
107  $this->setRowTemplate("tpl.term_tbl_row.html", "Modules/Glossary");
108  $this->setEnableTitle(true);
109 
110  $this->addMultiCommand("copyTerms", $this->lng->txt("copy"));
111  $this->addMultiCommand("referenceTerms", $this->lng->txt("glo_reference"));
112  $this->addMultiCommand("confirmTermDeletion", $this->lng->txt("delete"));
113  //$this->addMultiCommand("addDefinition", $this->lng->txt("cont_add_definition"));
114 
115  $this->setShowRowsSelector(true);
116 
117  $this->initFilter();
118  $this->setData($this->glossary->getTermList(
119  $this->filter["term"],
120  "",
121  $this->filter["definition"],
122  $this->tax_node,
123  true,
124  true,
125  null,
126  false,
127  true
128  ));
129  }
130 
131  public function showGlossaryColumn(): bool
132  {
133  return (in_array(
134  $this->glossary->getVirtualMode(),
135  array("level", "subtree")
136  ) || ilGlossaryTermReferences::hasReferences($this->glossary->getId()));
137  }
138 
139 
140  public function getSelectableColumns(): array
141  {
142  return $this->selectable_cols;
143  }
144 
145  public function numericOrdering(string $a_field): bool
146  {
147  if (strpos($a_field, "md_") === 0) {
148  $md_id = (int) substr($a_field, 3);
149  if ($this->adv_fields[$md_id]["type"] == ilAdvancedMDFieldDefinition::TYPE_DATE) {
150  return true;
151  }
152  }
153  return false;
154  }
155 
156  public function initFilter(): void
157  {
158  // term
159  $ti = new ilTextInputGUI($this->lng->txt("cont_term"), "term");
160  $ti->setMaxLength(64);
161  $ti->setSize(20);
162  $ti->setSubmitFormOnEnter(true);
163  $this->addFilterItem($ti);
164  $ti->readFromSession();
165  $this->filter["term"] = $ti->getValue();
166 
167  // definition
168  if ($this->glossary->supportsLongTextQuery()) {
169  $ti = new ilTextInputGUI($this->lng->txt("cont_definition"), "defintion");
170  $ti->setMaxLength(64);
171  $ti->setSize(20);
172  $ti->setSubmitFormOnEnter(true);
173  $this->addFilterItem($ti);
174  $ti->readFromSession();
175  $this->filter["definition"] = $ti->getValue();
176  }
177  }
178 
179  protected function fillRow(array $a_set): void
180  {
181  $defs = ilGlossaryDefinition::getDefinitionList($a_set["id"]);
182  $this->ctrl->setParameterByClass("ilobjglossarygui", "term_id", $a_set["id"]);
183  $this->ctrl->setParameterByClass("ilglossarytermgui", "term_id", $a_set["id"]);
184  $this->ctrl->setParameterByClass("ilglossarydefpagegui", "term_id", $a_set["id"]);
185 
186  // actions drop down
187  //if ($this->glossary->getId() == $term["glo_id"])
188 
189  if ($this->term_perm->checkPermission("write", $a_set["id"]) ||
190  $this->term_perm->checkPermission("edit_content", $a_set["id"])) {
191  if (ilGlossaryTerm::_lookGlossaryID($a_set["id"]) == $this->glossary->getId() ||
192  ilGlossaryTermReferences::isReferenced([$this->glossary->getId()], $a_set["id"])) {
193  $list = new ilAdvancedSelectionListGUI();
194  $list->addItem($this->lng->txt("cont_edit_term"), "", $this->ctrl->getLinkTargetByClass("ilglossarytermgui", "editTerm"));
195  if (count($defs) > 1) {
196  $list->addItem($this->lng->txt("cont_edit_definitions"), "", $this->ctrl->getLinkTargetByClass("ilglossarytermgui", "listDefinitions"));
197  } elseif (count($defs) == 1) {
198  $this->ctrl->setParameterByClass("ilglossarydefpagegui", "def", $defs[0]["id"]);
199  $list->addItem($this->lng->txt("cont_edit_definition"), "", $this->ctrl->getLinkTargetByClass(array("ilglossarytermgui",
200  "iltermdefinitioneditorgui",
201  "ilglossarydefpagegui"), "edit"));
202  }
203  $list->addItem($this->lng->txt("cont_add_definition"), "", $this->ctrl->getLinkTargetByClass("ilobjglossarygui", "addDefinition"));
204  $this->ctrl->setParameterByClass("ilglossarydefpagegui", "def", "");
205 
206  $list->setId("act_term_" . $a_set["id"]);
207  $list->setListTitle("");
208  $this->tpl->setVariable("ACTIONS", $list->getHTML());
209  }
210  }
211 
212 
213  for ($j = 0, $jMax = count($defs); $j < $jMax; $j++) {
214  $def = $defs[$j];
215 
216 
217  // text
218  $this->tpl->setCurrentBlock("definition");
219  $short_str = $def["short_text"];
220 
221  if ($def["short_text_dirty"]) {
222  // #18022
223  $def_obj = new ilGlossaryDefinition($def["id"]);
224  $def_obj->updateShortText();
225  $short_str = $def_obj->getShortText();
226  }
227 
228  $page = new ilGlossaryDefPage($def["id"]);
229 
230  // replace tex
231  // if a tex end tag is missing a tex end tag
232  $ltexs = strrpos($short_str, "[tex]");
233  $ltexe = strrpos($short_str, "[/tex]");
234  if ($ltexs > $ltexe) {
235  $page->buildDom();
236  $short_str = $page->getFirstParagraphText();
237  $short_str = strip_tags($short_str, "<br>");
238  $ltexe = strpos($short_str, "[/tex]", $ltexs);
239  $short_str = ilStr::shortenTextExtended($short_str, $ltexe + 6, true);
240  }
241 
242  $short_str = ilMathJax::getInstance()->insertLatexImages($short_str);
243 
244  $short_str = ilPCParagraph::xml2output(
245  $short_str,
246  false,
247  true,
248  !$page->getPageConfig()->getPreventHTMLUnmasking()
249  );
250  $this->tpl->setVariable("DEF_SHORT", $short_str);
251  $this->tpl->parseCurrentBlock();
252 
253  $this->tpl->setCurrentBlock("definition_row");
254  $this->tpl->parseCurrentBlock();
255  }
256 
257  $this->tpl->setCurrentBlock("check_col");
258  $this->tpl->setVariable("CHECKBOX_ID", $a_set["id"]);
259  $this->tpl->parseCurrentBlock();
260 
261  $this->ctrl->setParameter($this->parent_obj, "term_id", $a_set["id"]);
262 
263 
264  // usage
265  if (in_array("usage", $this->getSelectedColumns())) {
266  $nr_usage = ilGlossaryTerm::getNumberOfUsages($a_set["id"]);
267  if ($nr_usage > 0 && $this->glossary->getId() == $a_set["glo_id"]) {
268  $this->tpl->setCurrentBlock("link_usage");
269  $this->ctrl->setParameterByClass("ilglossarytermgui", "term_id", $a_set["id"]);
270  $this->tpl->setVariable("LUSAGE", ilGlossaryTerm::getNumberOfUsages($a_set["id"]));
271  $this->tpl->setVariable(
272  "LINK_USAGE",
273  $this->ctrl->getLinkTargetByClass("ilglossarytermgui", "listUsages")
274  );
275  $this->ctrl->setParameterByClass("ilglossarytermgui", "term_id", "");
276  } else {
277  $this->tpl->setCurrentBlock("usage");
278  $this->tpl->setVariable("USAGE", ilGlossaryTerm::getNumberOfUsages($a_set["id"]));
279  }
280  $this->tpl->parseCurrentBlock();
281  $this->tpl->setCurrentBlock("td_usage");
282  $this->tpl->parseCurrentBlock();
283  }
284 
285  // glossary title
286  if ($this->showGlossaryColumn()) {
287  $this->tpl->setCurrentBlock("glossary");
288  $this->tpl->setVariable("GLO_TITLE", ilObject::_lookupTitle($a_set["glo_id"]));
289  $this->tpl->parseCurrentBlock();
290  }
291 
292  // output language
293  if (in_array("language", $this->getSelectedColumns())) {
294  $this->tpl->setCurrentBlock("td_lang");
295  $this->tpl->setVariable("TEXT_LANGUAGE", $this->lng->txt("meta_l_" . $a_set["language"]));
296  $this->tpl->parseCurrentBlock();
297  }
298 
299 
300  foreach ($this->adv_cols_order as $c) {
301  if ($c["id"] == 0) {
302  $this->tpl->setCurrentBlock("td");
303  $this->tpl->setVariable("TD_VAL", $a_set["term"]);
304  $this->tpl->parseCurrentBlock();
305  } elseif (in_array("md_" . $c["id"], $this->selected_cols)) {
306  $id = (int) $c["id"];
307 
308  $val = " ";
309  if (isset($a_set["md_" . $id . "_presentation"])) {
310  $pb = $a_set["md_" . $id . "_presentation"]->getHTML();
311  if ($pb) {
312  $val = $pb;
313  }
314  }
315 
316  $this->tpl->setCurrentBlock("td");
317  $this->tpl->setVariable("TD_VAL", $val);
318  $this->tpl->parseCurrentBlock();
319  }
320  }
321  }
322 }
setData(array $a_data)
$c
Definition: cli.php:38
setFormAction(string $a_form_action, bool $a_multipart=false)
addFilterItem(ilTableFilterItem $a_input_item, bool $a_optional=false)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
setEnableTitle(bool $a_enabletitle)
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)
static hasReferences(int $a_glossary_id)
Check if a glossary uses references.
static isReferenced(array $a_glo_id, int $a_term_id)
Is a term referenced by a set of glossaries.
global $DIC
Definition: feed.php:28
setShowRowsSelector(bool $a_value)
Toggle rows-per-page selector.
static _lookupTitle(int $obj_id)
setDefaultOrderField(string $a_defaultorderfield)
setRowTemplate(string $a_template, string $a_template_dir="")
Set row template.
setDefaultOrderDirection(string $a_defaultorderdirection)
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.
setTitle(string $a_title, string $a_icon="", string $a_icon_alt="")
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 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)
__construct(object $a_parent_obj, string $a_parent_cmd, int $a_tax_node)
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)
static getNumberOfUsages(int $a_term_id)
addMultiCommand(string $a_cmd, string $a_text)
ilGlossaryTermPermission $term_perm
setEnableHeader(bool $a_enableheader)
numericOrdering(string $a_field)
static _lookGlossaryID(int $term_id)
get glossary id form term id