ILIAS  release_8 Revision v8.24
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("", "");
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", "Modules/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 {
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 {
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 $class = strtolower(SurveyQuestionGUI::_getGUIClassNameForId($a_set["question_id"]));
197 $guiclass = $class . "GUI";
198 $this->ctrl->setParameterByClass(strtolower($guiclass), "q_id", $a_set["question_id"]);
199 $url_edit = "";
200 $obligatory = "";
201 if ($this->getEditable()) {
202 $url_edit = $this->ctrl->getLinkTargetByClass(strtolower($guiclass), "editQuestion");
203
204 $this->tpl->setCurrentBlock("title_link_bl");
205 $this->tpl->setVariable("QUESTION_TITLE_LINK", $a_set["title"]);
206 $this->tpl->setVariable("URL_TITLE", $url_edit);
207 } else {
208 $this->tpl->setCurrentBlock("title_nolink_bl");
209 $this->tpl->setVariable("QUESTION_TITLE", $a_set["title"]);
210 }
211 $this->tpl->parseCurrentBlock();
212
213 if ((int) $a_set["complete"] === 0) {
214 $icon = $this->ui_factory->symbol()->icon()->custom(ilUtil::getImagePath("icon_alert.svg"), $this->lng->txt("warning_question_not_complete"));
215 $this->tpl->setCurrentBlock("qpl_warning");
216 $this->tpl->setVariable("ICON_WARNING", $this->renderer->render($icon));
217 $this->tpl->parseCurrentBlock();
218 }
219
220 foreach ($this->getSelectedColumns() as $c) {
221 if (strcmp($c, 'description') === 0) {
222 $this->tpl->setCurrentBlock('description');
223 $this->tpl->setVariable("QUESTION_COMMENT", ($a_set["description"] ?? '') !== '' ? $a_set["description"] : "&nbsp;");
224 $this->tpl->parseCurrentBlock();
225 }
226 if (strcmp($c, 'type') === 0) {
227 $this->tpl->setCurrentBlock('type');
228 $this->tpl->setVariable("QUESTION_TYPE", SurveyQuestion::_getQuestionTypeName($a_set["type_tag"]));
229 $this->tpl->parseCurrentBlock();
230 }
231 if (strcmp($c, 'author') === 0) {
232 $this->tpl->setCurrentBlock('author');
233 $this->tpl->setVariable("QUESTION_AUTHOR", $a_set["author"]);
234 $this->tpl->parseCurrentBlock();
235 }
236 if (strcmp($c, 'created') === 0) {
237 $this->tpl->setCurrentBlock('created');
238 $this->tpl->setVariable("QUESTION_CREATED", ilDatePresentation::formatDate(new ilDate($a_set['created'], IL_CAL_UNIX)));
239 $this->tpl->parseCurrentBlock();
240 }
241 if (strcmp($c, 'updated') === 0) {
242 $this->tpl->setCurrentBlock('updated');
243 $this->tpl->setVariable("QUESTION_UPDATED", ilDatePresentation::formatDate(new ilDate($a_set["tstamp"], IL_CAL_UNIX)));
244 $this->tpl->parseCurrentBlock();
245 }
246 }
247
248 // actions
249 $list = new ilAdvancedSelectionListGUI();
250 $list->setId($a_set["question_id"]);
251 $list->setListTitle($this->lng->txt("actions"));
252 if ($url_edit) {
253 $list->addItem($this->lng->txt("edit"), "", $url_edit);
254 }
255 $list->addItem($this->lng->txt("preview"), "", $this->ctrl->getLinkTargetByClass(strtolower($guiclass), "preview"));
256 $this->tpl->setVariable("ACTION", $list->getHTML());
257 $this->tpl->parseCurrentBlock();
258
259 // obligatory
260 if ($this->getEditable()) {
261 $checked = $a_set["obligatory"] ? " checked=\"checked\"" : "";
262 $obligatory = "<input type=\"checkbox\" name=\"obligatory[" .
263 $a_set["question_id"] . "]\" value=\"1\"" . $checked . " />";
264 } elseif ($a_set["obligatory"]) {
265 $obligatory = $this->ui->renderer()->render(
266 $this->ui->factory()->symbol()->icon()->custom(ilUtil::getImagePath("icon_checked.svg"), $this->lng->txt("question_obligatory"))
267 );
268 }
269 $this->tpl->setVariable("OBLIGATORY", $obligatory);
270
271 if ($this->getWriteAccess()) {
272 $this->tpl->setVariable('CBOX_ID', $a_set["question_id"]);
273 }
274 $this->tpl->setVariable('QUESTION_ID', $a_set["question_id"]);
275 }
276
277 public function setEditable(bool $value): void
278 {
279 $this->editable = $value;
280 }
281
282 public function getEditable(): bool
283 {
284 return $this->editable;
285 }
286
287 public function setWriteAccess(bool $value): void
288 {
289 $this->writeAccess = $value;
290 }
291
292 public function getWriteAccess(): bool
293 {
294 return $this->writeAccess;
295 }
296}
static _getGUIClassNameForId(int $a_q_id)
static _getQuestionTypeName(string $type_tag)
Return the translation for a given question type.
const IL_CAL_UNIX
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static formatDate(ilDateTime $date, bool $a_skip_day=false, bool $a_include_wd=false, bool $include_seconds=false)
Class for single dates.
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...
static _getQuestiontypes()
Get all available question types.
User class.
class ilRbacReview Contains Review functions of core Rbac.
This class represents a selection list property in a property form.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
getSelectableColumns()
Get selectable columns.
__construct(object $a_parent_obj, string $a_parent_cmd, bool $a_write_access=false)
fillRow(array $a_set)
Standard Version of Fill Row.
ILIAS SurveyQuestionPool Editing EditManager $edit_manager
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
setShowRowsSelector(bool $a_value)
Toggle rows-per-page selector.
setFilterCommand(string $a_val, string $a_caption="")
addCommandButton(string $a_cmd, string $a_text, string $a_onclick='', string $a_id="", string $a_class="")
addFilterItem(ilTableFilterItem $a_input_item, bool $a_optional=false)
addMultiCommand(string $a_cmd, string $a_text)
setPrefix(string $a_prefix)
set prefix for sort and offset fields (if you have two or more tables on a page that you want to sort...
setFormAction(string $a_form_action, bool $a_multipart=false)
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)
setDefaultOrderField(string $a_defaultorderfield)
setSelectAllCheckbox(string $a_select_all_checkbox, bool $a_select_all_on_top=false)
setRowTemplate(string $a_template, string $a_template_dir="")
Set row template.
setId(string $a_val)
setDefaultOrderDirection(string $a_defaultorderdirection)
setResetCommand(string $a_val, string $a_caption="")
ilLanguage $lng
This class represents a text property in a property form.
static getImagePath(string $img, string $module_path="", string $mode="output", bool $offline=false)
get image path (for images located in a template directory)
$c
Definition: cli.php:38
global $DIC
Definition: feed.php:28
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
$cols
Definition: xhr_table.php:11