ILIAS  trunk Revision v11.0_alpha-1753-gb21ca8c4367
All Data Structures Namespaces Files Functions Variables Enumerations Enumerator Modules Pages
class.ilSurveyQuestionsTableGUI.php
Go to the documentation of this file.
1 <?php
2 
23 {
24  protected \ILIAS\DI\UIServices $ui;
25  protected \ILIAS\SurveyQuestionPool\Editing\EditManager $edit_manager;
27  protected ilObjUser $user;
28  protected \ILIAS\UI\Factory $ui_factory;
29  protected \ILIAS\UI\Renderer $renderer;
30  protected bool $editable = true;
31  protected bool $writeAccess = false;
32  protected array $filter = [];
33 
34  public function __construct(
35  object $a_parent_obj,
36  string $a_parent_cmd,
37  bool $a_write_access = false
38  ) {
39  global $DIC;
40 
41  $this->rbacreview = $DIC->rbac()->review();
42  $this->user = $DIC->user();
43  $this->setId("spl");
44  $this->setPrefix('q_id'); // #16982
45  $this->edit_manager = $DIC->surveyQuestionPool()
46  ->internal()
47  ->domain()
48  ->editing();
49 
50  parent::__construct($a_parent_obj, $a_parent_cmd);
51 
52  $lng = $DIC->language();
53  $ilCtrl = $DIC->ctrl();
54  $this->ui = $DIC->ui();
55 
56  $this->renderer = $DIC->ui()->renderer();
57  $this->ui_factory = $DIC->ui()->factory();
58 
59  $this->lng = $lng;
60  $this->ctrl = $ilCtrl;
61 
62  $this->setWriteAccess($a_write_access);
63 
64  if ($this->getWriteAccess()) {
65  $this->addColumn('', '', '1%');
66  }
67 
68  $this->addColumn($this->lng->txt("title"), 'title', '');
69  $this->addColumn($this->lng->txt("obligatory"), "");
70 
71  foreach ($this->getSelectedColumns() as $c) {
72  if (strcmp($c, 'description') === 0) {
73  $this->addColumn($this->lng->txt("description"), 'description', '');
74  }
75  if (strcmp($c, 'type') === 0) {
76  $this->addColumn($this->lng->txt("question_type"), 'type', '');
77  }
78  if (strcmp($c, 'author') === 0) {
79  $this->addColumn($this->lng->txt("author"), 'author', '');
80  }
81  if (strcmp($c, 'created') === 0) {
82  $this->addColumn($this->lng->txt("create_date"), 'created', '');
83  }
84  if (strcmp($c, 'updated') === 0) {
85  $this->addColumn($this->lng->txt("last_update"), 'tstamp', '');
86  }
87  }
88 
89  $this->addColumn($this->lng->txt("actions"), "");
90 
91  $clip_questions = $this->edit_manager->getQuestionsFromClipboard();
92  if ($this->getWriteAccess()) {
93  $this->setSelectAllCheckbox('q_id');
94 
95  $this->addMultiCommand('copy', $this->lng->txt('copy'));
96  $this->addMultiCommand('move', $this->lng->txt('move'));
97  #$this->addMultiCommand('exportQuestion', $this->lng->txt('export'));
98  $this->addMultiCommand('deleteQuestions', $this->lng->txt('delete'));
99 
100  if (count($clip_questions) > 0) {
101  $this->addCommandButton('paste', $this->lng->txt('paste'));
102  }
103 
104  $this->addCommandButton("saveObligatory", $this->lng->txt("spl_save_obligatory_state"));
105  }
106 
107 
108  $this->setRowTemplate("tpl.il_svy_qpl_questions_row.html", "components/ILIAS/SurveyQuestionPool");
109 
110  $this->setFormAction($this->ctrl->getFormAction($a_parent_obj, $a_parent_cmd));
111  $this->setDefaultOrderField("title");
112  $this->setDefaultOrderDirection("asc");
113 
114  $this->setShowRowsSelector(true);
115 
116  $this->setFilterCommand('filterQuestionBrowser');
117  $this->setResetCommand('resetfilterQuestionBrowser');
118 
119  $this->initFilter();
120  }
121 
122  public function initFilter(): void
123  {
124  $lng = $this->lng;
125 
126  // title
127  $ti = new ilTextInputGUI($lng->txt("title"), "title");
128  $ti->setMaxLength(64);
129  $ti->setSize(20);
130  $ti->setValidationRegexp('/^[^%]+$/is');
131  $this->addFilterItem($ti);
132  $ti->readFromSession();
133  $this->filter["title"] = $ti->getValue();
134 
135  // description
136  $ti = new ilTextInputGUI($lng->txt("description"), "description");
137  $ti->setMaxLength(64);
138  $ti->setSize(20);
139  $ti->setValidationRegexp('/^[^%]+$/is');
140  $this->addFilterItem($ti);
141  $ti->readFromSession();
142  $this->filter["description"] = $ti->getValue();
143 
144  // author
145  $ti = new ilTextInputGUI($lng->txt("author"), "author");
146  $ti->setMaxLength(64);
147  $ti->setSize(20);
148  $ti->setValidationRegexp('/^[^%]+$/is');
149  $this->addFilterItem($ti);
150  $ti->readFromSession();
151  $this->filter["author"] = $ti->getValue();
152 
153  // questiontype
155  $options = array();
156  $options[""] = $lng->txt('filter_all_question_types');
157  foreach ($types as $translation => $row) {
158  $options[$row['type_tag']] = $translation;
159  }
160 
161  $si = new ilSelectInputGUI($this->lng->txt("question_type"), "type");
162  $si->setOptions($options);
163  $this->addFilterItem($si);
164  $si->readFromSession();
165  $this->filter["type"] = $si->getValue();
166  }
167 
168  public function getSelectableColumns(): array
169  {
170  $lng = $this->lng;
171  $cols["description"] = array(
172  "txt" => $lng->txt("description"),
173  "default" => true
174  );
175  $cols["type"] = array(
176  "txt" => $lng->txt("question_type"),
177  "default" => true
178  );
179  $cols["author"] = array(
180  "txt" => $lng->txt("author"),
181  "default" => true
182  );
183  $cols["created"] = array(
184  "txt" => $lng->txt("create_date"),
185  "default" => true
186  );
187  $cols["updated"] = array(
188  "txt" => $lng->txt("last_update"),
189  "default" => true
190  );
191  return $cols;
192  }
193 
194  protected function fillRow(array $a_set): void
195  {
196  $ui_factory = $this->ui_factory;
197  $ui_renderer = $this->renderer;
198  $class = strtolower(SurveyQuestionGUI::_getGUIClassNameForId($a_set["question_id"]));
199  $guiclass = $class . "GUI";
200  $this->ctrl->setParameterByClass(strtolower($guiclass), "q_id", $a_set["question_id"]);
201  $url_edit = "";
202  $obligatory = "";
203  if ($this->getEditable()) {
204  $url_edit = $this->ctrl->getLinkTargetByClass(strtolower($guiclass), "editQuestion");
205 
206  $this->tpl->setCurrentBlock("title_link_bl");
207  $this->tpl->setVariable("QUESTION_TITLE_LINK", $a_set["title"]);
208  $this->tpl->setVariable("URL_TITLE", $url_edit);
209  } else {
210  $this->tpl->setCurrentBlock("title_nolink_bl");
211  $this->tpl->setVariable("QUESTION_TITLE", $a_set["title"]);
212  }
213  $this->tpl->parseCurrentBlock();
214 
215  if ((int) $a_set["complete"] === 0) {
216  $icon = $this->ui_factory->symbol()->icon()->custom(ilUtil::getImagePath("standard/icon_alert.svg"), $this->lng->txt("warning_question_not_complete"));
217  $this->tpl->setCurrentBlock("qpl_warning");
218  $this->tpl->setVariable("ICON_WARNING", $this->renderer->render($icon));
219  $this->tpl->parseCurrentBlock();
220  }
221 
222  foreach ($this->getSelectedColumns() as $c) {
223  if (strcmp($c, 'description') === 0) {
224  $this->tpl->setCurrentBlock('description');
225  $this->tpl->setVariable("QUESTION_COMMENT", ($a_set["description"] ?? '') !== '' ? $a_set["description"] : "&nbsp;");
226  $this->tpl->parseCurrentBlock();
227  }
228  if (strcmp($c, 'type') === 0) {
229  $this->tpl->setCurrentBlock('type');
230  $this->tpl->setVariable("QUESTION_TYPE", SurveyQuestion::_getQuestionTypeName($a_set["type_tag"]));
231  $this->tpl->parseCurrentBlock();
232  }
233  if (strcmp($c, 'author') === 0) {
234  $this->tpl->setCurrentBlock('author');
235  $this->tpl->setVariable("QUESTION_AUTHOR", $a_set["author"]);
236  $this->tpl->parseCurrentBlock();
237  }
238  if (strcmp($c, 'created') === 0) {
239  $this->tpl->setCurrentBlock('created');
240  $this->tpl->setVariable("QUESTION_CREATED", ilDatePresentation::formatDate(new ilDate($a_set['created'], IL_CAL_UNIX)));
241  $this->tpl->parseCurrentBlock();
242  }
243  if (strcmp($c, 'updated') === 0) {
244  $this->tpl->setCurrentBlock('updated');
245  $this->tpl->setVariable("QUESTION_UPDATED", ilDatePresentation::formatDate(new ilDate($a_set["tstamp"], IL_CAL_UNIX)));
246  $this->tpl->parseCurrentBlock();
247  }
248  }
249 
250  // actions
251  $actions = [];
252  if ($url_edit) {
253  $actions[] = $ui_factory->link()->standard(
254  $this->lng->txt("edit"),
255  $url_edit
256  );
257  }
258  $actions[] = $ui_factory->link()->standard(
259  $this->lng->txt("preview"),
260  $this->ctrl->getLinkTargetByClass(strtolower($guiclass), "preview")
261  );
262 
263  $dd = $ui_factory->dropdown()->standard($actions);
264 
265  $this->tpl->setVariable("ACTION", $ui_renderer->render($dd));
266  $this->tpl->parseCurrentBlock();
267 
268  // obligatory
269  if ($this->getEditable()) {
270  $checked = $a_set["obligatory"] ? " checked=\"checked\"" : "";
271  $obligatory = "<input type=\"checkbox\" name=\"obligatory[" .
272  $a_set["question_id"] . "]\" value=\"1\"" . $checked . " />";
273  } elseif ($a_set["obligatory"]) {
274  $obligatory = $this->ui->renderer()->render(
275  $this->ui->factory()->symbol()->icon()->custom(ilUtil::getImagePath("standard/icon_checked.svg"), $this->lng->txt("question_obligatory"))
276  );
277  }
278  $this->tpl->setVariable("OBLIGATORY", $obligatory);
279 
280  if ($this->getWriteAccess()) {
281  $this->tpl->setVariable('CBOX_ID', $a_set["question_id"]);
282  }
283  $this->tpl->setVariable('QUESTION_ID', $a_set["question_id"]);
284  }
285 
286  public function setEditable(bool $value): void
287  {
288  $this->editable = $value;
289  }
290 
291  public function getEditable(): bool
292  {
293  return $this->editable;
294  }
295 
296  public function setWriteAccess(bool $value): void
297  {
298  $this->writeAccess = $value;
299  }
300 
301  public function getWriteAccess(): bool
302  {
303  return $this->writeAccess;
304  }
305 }
This class represents a selection list property in a property form.
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)
addFilterItem(ilTableFilterItem $a_input_item, bool $a_optional=false)
__construct(object $a_parent_obj, string $a_parent_cmd, bool $a_write_access=false)
addCommandButton(string $a_cmd, string $a_text, string $a_onclick='', string $a_id="", string $a_class="")
setResetCommand(string $a_val, string $a_caption="")
setSelectAllCheckbox(string $a_select_all_checkbox, bool $a_select_all_on_top=false)
renderer()
static _getQuestionTypeName(string $type_tag)
Return the translation for a given question type.
setOptions(array $a_options)
const IL_CAL_UNIX
$c
Definition: deliver.php:25
ilLanguage $lng
setId(string $a_val)
ILIAS SurveyQuestionPool Editing EditManager $edit_manager
setShowRowsSelector(bool $a_value)
Toggle rows-per-page selector.
setDefaultOrderField(string $a_defaultorderfield)
setRowTemplate(string $a_template, string $a_template_dir="")
Set row template.
setFilterCommand(string $a_val, string $a_caption="")
global $DIC
Definition: shib_login.php:22
static getImagePath(string $image_name, string $module_path="", string $mode="output", bool $offline=false)
get image path (for images located in a template directory)
setDefaultOrderDirection(string $a_defaultorderdirection)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static _getGUIClassNameForId(int $a_q_id)
__construct(Container $dic, ilPlugin $plugin)
static _getQuestiontypes()
Get all available question types.
static formatDate(ilDateTime $date, bool $a_skip_day=false, bool $a_include_wd=false, bool $include_seconds=false, ?ilObjUser $user=null,)
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)
filter(string $filter_id, $class_path, string $cmd, bool $activated=true, bool $expanded=true)
addMultiCommand(string $a_cmd, string $a_text)
setPrefix(string $a_prefix)