ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
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 {
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 {
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}
renderer()
static _getGUIClassNameForId(int $a_q_id)
static _getQuestionTypeName(string $type_tag)
Return the translation for a given question type.
const IL_CAL_UNIX
static formatDate(ilDateTime $date, bool $a_skip_day=false, bool $a_include_wd=false, bool $include_seconds=false, ?ilObjUser $user=null,)
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 $image_name, string $module_path="", string $mode="output", bool $offline=false)
get image path (for images located in a template directory)
$c
Definition: deliver.php:25
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
filter(string $filter_id, $class_path, string $cmd, bool $activated=true, bool $expanded=true)
global $DIC
Definition: shib_login.php:26