ILIAS  release_8 Revision v8.19
All Data Structures Namespaces Files Functions Variables Modules Pages
class.ilAssQuestionHintsTableGUI.php
Go to the documentation of this file.
1 <?php
2 
28 {
33  public const INDEX_TO_POSITION_FACTOR = 10;
34 
38  public const TBL_MODE_TESTOUTPUT = '1';
39  public const TBL_MODE_ADMINISTRATION = '2';
40 
47  private $questionOBJ = null;
48 
55  private $tableMode = null;
56 
57  private $hintOrderingClipboard = null;
58 
70  public function __construct(
72  ilAssQuestionHintList $questionHintList,
74  $parentCmd,
75  $tableMode = self::TBL_MODE_TESTOUTPUT,
77  ) {
78  global $DIC;
79  $ilCtrl = $DIC['ilCtrl'];
80  $lng = $DIC['lng'];
81 
82  $this->questionOBJ = $questionOBJ;
83  $this->tableMode = $tableMode;
84  $this->hintOrderingClipboard = $hintOrderingClipboard;
85 
86  $this->setPrefix('tsthints' . $tableMode);
87  $this->setId('tsthints' . $tableMode);
88 
89  parent::__construct($parentGUI, $parentCmd);
90 
91  $this->setTitle(sprintf($lng->txt('tst_question_hints_table_header'), $questionOBJ->getTitleForHTMLOutput()));
92  $this->setNoEntriesText($lng->txt('tst_question_hints_table_no_items'));
93 
94  // we don't take care about offset/limit values, so this avoids segmentation in general
95  // --> required for ordering via clipboard feature
96  $this->setExternalSegmentation(true);
97 
98  $tableData = $questionHintList->getTableData();
99 
100  if ($this->questionOBJ->isAdditionalContentEditingModePageObject()) {
101  require_once 'Modules/TestQuestionPool/classes/class.ilAssHintPageGUI.php';
102 
103  foreach ($tableData as $key => $data) {
104  $this->questionOBJ->ensureHintPageObjectExists($data['hint_id']);
105  $pageObjectGUI = new ilAssHintPageGUI($data['hint_id']);
106  $pageObjectGUI->setOutputMode("presentation");
107  $tableData[$key]['hint_text'] = $pageObjectGUI->presentation();
108  }
109  }
110 
111  $this->setData($tableData);
112 
113  if ($this->tableMode == self::TBL_MODE_ADMINISTRATION) {
114  $this->setRowTemplate('tpl.tst_question_hints_administration_table_row.html', 'Modules/TestQuestionPool');
115 
116  $this->setSelectAllCheckbox('hint_ids[]');
117 
118  $rowCount = count($tableData);
119  $this->initAdministrationColumns($rowCount);
120  $this->initAdministrationCommands($rowCount);
121  } else {
122  $this->setRowTemplate('tpl.tst_question_hints_testoutput_table_row.html', 'Modules/TestQuestionPool');
123 
124  $this->initTestoutputColumns();
125  $this->initTestoutputCommands();
126  }
127  }
128 
138  private function initAdministrationCommands($rowCount): void
139  {
140  global $DIC;
141  $ilCtrl = $DIC['ilCtrl'];
142  $lng = $DIC['lng'];
143 
144  $this->setFormAction($ilCtrl->getFormAction($this->parent_obj));
145 
146  if ($this->hintOrderingClipboard->hasStored()) {
147  $this->addMultiCommand(
149  $lng->txt('tst_questions_hints_table_multicmd_paste_hint_before')
150  );
151 
152  $this->addMultiCommand(
154  $lng->txt('tst_questions_hints_table_multicmd_paste_hint_after')
155  );
156  } elseif ($rowCount > 0) {
157  $this->addMultiCommand(
159  $lng->txt('tst_questions_hints_table_multicmd_delete_hint')
160  );
161 
162  if ($rowCount > 1) {
163  $this->addMultiCommand(
165  $lng->txt('tst_questions_hints_table_multicmd_cut_hint')
166  );
167  }
168 
169  $this->addCommandButton(
171  $lng->txt('tst_questions_hints_table_cmd_save_order')
172  );
173  }
174  }
175 
184  private function initTestoutputCommands(): void
185  {
186  if ($this->parent_obj instanceof ilAssQuestionHintsGUI) {
187  return;
188  }
189 
190  global $DIC;
191  $ilCtrl = $DIC['ilCtrl'];
192  $lng = $DIC['lng'];
193 
194  $this->setFormAction($ilCtrl->getFormAction($this->parent_obj));
195 
196  $this->addCommandButton(
198  $lng->txt('tst_question_hints_back_to_question')
199  );
200  }
201 
210  private function initAdministrationColumns($rowCount): void
211  {
212  global $DIC;
213  $lng = $DIC['lng'];
214 
215  $this->addColumn('', '', '30', true);
216 
217  $this->addColumn($lng->txt('tst_question_hints_table_column_hint_order'), 'hint_index', '60');
218  $this->addColumn($lng->txt('tst_question_hints_table_column_hint_text'), 'hint_text');
219  $this->addColumn($lng->txt('tst_question_hints_table_column_hint_points'), 'hint_points', '250');
220 
221  $this->addColumn('', '', '100');
222 
223  $this->setDefaultOrderField("hint_index");
224  $this->setDefaultOrderDirection("asc");
225 
226  if ($rowCount < 1) {
227  $this->disable('header');
228  }
229  }
230 
238  private function initTestoutputColumns(): void
239  {
240  global $DIC;
241  $lng = $DIC['lng'];
242 
243  $this->addColumn($lng->txt('tst_question_hints_table_column_hint_index'), 'hint_index', '200');
244  $this->addColumn($lng->txt('tst_question_hints_table_column_hint_text'), 'hint_text');
245  $this->addColumn($lng->txt('tst_question_hints_table_column_hint_points'), 'hint_points', '200');
246 
247  $this->setDefaultOrderField("hint_index");
248  $this->setDefaultOrderDirection("asc");
249  }
250 
258  public function numericOrdering(string $a_field): bool
259  {
260  switch ($a_field) {
261  case 'hint_index':
262  case 'hint_points':
263 
264  return true;
265  }
266 
267  return false;
268  }
269 
277  public function fillRow(array $a_set): void
278  {
279  global $DIC;
280  $ilCtrl = $DIC['ilCtrl'];
281  $lng = $DIC['lng'];
282 
283  if ($this->tableMode == self::TBL_MODE_ADMINISTRATION) {
284  $list = new ilAdvancedSelectionListGUI();
285  $list->setListTitle($lng->txt('actions'));
286  $list->setId("advsl_hint_{$a_set['hint_id']}_actions");
287 
288  if ($this->questionOBJ->isAdditionalContentEditingModePageObject()) {
289  $editPointsHref = $ilCtrl->getLinkTargetByClass('ilAssQuestionHintGUI', ilAssQuestionHintGUI::CMD_SHOW_FORM);
290  $editPointsHref = ilUtil::appendUrlParameterString($editPointsHref, "hint_id={$a_set['hint_id']}", true);
291  $list->addItem($lng->txt('tst_question_hints_table_link_edit_hint_points'), '', $editPointsHref);
292 
293  $editPageHref = $ilCtrl->getLinkTargetByClass('ilasshintpagegui', 'edit');
294  $editPageHref = ilUtil::appendUrlParameterString($editPageHref, "hint_id={$a_set['hint_id']}", true);
295  $list->addItem($lng->txt('tst_question_hints_table_link_edit_hint_page'), '', $editPageHref);
296  } else {
297  $editHref = $ilCtrl->getLinkTargetByClass('ilAssQuestionHintGUI', ilAssQuestionHintGUI::CMD_SHOW_FORM);
298  $editHref = ilUtil::appendUrlParameterString($editHref, "hint_id={$a_set['hint_id']}", true);
299  $list->addItem($lng->txt('tst_question_hints_table_link_edit_hint'), '', $editHref);
300  }
301 
302  $deleteHref = $ilCtrl->getLinkTarget($this->parent_obj, ilAssQuestionHintsGUI::CMD_CONFIRM_DELETE);
303  $deleteHref = ilUtil::appendUrlParameterString($deleteHref, "hint_id={$a_set['hint_id']}", true);
304  $list->addItem($lng->txt('tst_question_hints_table_link_delete_hint'), '', $deleteHref);
305 
306  $this->tpl->setVariable('ACTIONS', $list->getHTML());
307 
308  $this->tpl->setVariable('HINT_ID', $a_set['hint_id']);
309 
310  $hintIndex = $a_set['hint_index'] * self::INDEX_TO_POSITION_FACTOR;
311  } else {
312  $showHref = $this->parent_obj->getHintPresentationLinkTarget($a_set['hint_id']);
313 
314  $this->tpl->setVariable('HINT_HREF', $showHref);
315 
316  $hintIndex = ilAssQuestionHint::getHintIndexLabel($lng, $a_set['hint_index']);
317  }
318 
319  $this->tpl->setVariable('HINT_INDEX', $hintIndex);
320  $txt = ilLegacyFormElementsUtil::prepareTextareaOutput($a_set['hint_text'], true);
321  $this->tpl->setVariable('HINT_TEXT', $txt);
322  $this->tpl->setVariable('HINT_POINTS', $a_set['hint_points']);
323  }
324 }
const INDEX_TO_POSITION_FACTOR
the factor the ordering position value is multiplicated with (so the user gets non decimal gaps for r...
setNoEntriesText(string $a_text)
setData(array $a_data)
static appendUrlParameterString(string $a_url, string $a_par, bool $xml_style=false)
txt(string $a_topic, string $a_default_lang_fallback_mod="")
gets the text for a given topic if the topic is not in the list, the topic itself with "-" will be re...
setFormAction(string $a_form_action, bool $a_multipart=false)
Abstract basic class which is to be extended by the concrete assessment question type classes...
addCommandButton(string $a_cmd, string $a_text, string $a_onclick='', string $a_id="", string $a_class="")
__construct(assQuestion $questionOBJ, ilAssQuestionHintList $questionHintList, ilAssQuestionHintAbstractGUI $parentGUI, $parentCmd, $tableMode=self::TBL_MODE_TESTOUTPUT, ilAssQuestionHintsOrderingClipboard $hintOrderingClipboard=null)
Constructor.
setSelectAllCheckbox(string $a_select_all_checkbox, bool $a_select_all_on_top=false)
initAdministrationColumns($rowCount)
inits the required columns for administration table mode
ilLanguage $lng
setId(string $a_val)
global $DIC
Definition: feed.php:28
static getHintIndexLabel(ilLanguage $lng, $hintIndex)
const TBL_MODE_TESTOUTPUT
the available table modes controlling the tables behaviour
setDefaultOrderField(string $a_defaultorderfield)
initTestoutputColumns()
inits the required columns for testoutput table mode
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
setRowTemplate(string $a_template, string $a_template_dir="")
Set row template.
string $key
Consumer key/client ID value.
Definition: System.php:193
setDefaultOrderDirection(string $a_defaultorderdirection)
fillRow(array $a_set)
renders a table row by filling wor data to table row template public
$txt
Definition: error.php:13
setTitle(string $a_title, string $a_icon="", string $a_icon_alt="")
const CMD_SHOW_FORM
command constants
__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)
initAdministrationCommands($rowCount)
inits the required command buttons / multi selection commands for administration table mode ...
disable(string $a_module_name)
numericOrdering(string $a_field)
returns the fact wether the passed field is to be ordered numerically or not public ...
static prepareTextareaOutput(string $txt_output, bool $prepare_for_latex_output=false, bool $omitNl2BrWhenTextArea=false)
Prepares a string for a text area output where latex code may be in it If the text is HTML-free...
addMultiCommand(string $a_cmd, string $a_text)
initTestoutputCommands()
inits the required command buttons / multi selection commands for testoutput table mode ...
getTableData()
returns an array with data of the hints in this list that is adopted to be used as table gui data ...
setExternalSegmentation(bool $a_val)
setPrefix(string $a_prefix)