ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
class.ilSurveyQuestionTableGUI.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 2010 Leifos, GPL, see docs/LICENSE */
3 
4 include_once("./Services/Table/classes/class.ilTable2GUI.php");
5 
15 {
16  protected $object;
17  protected $read_only;
18 
25  public function __construct($a_parent_obj, $a_parent_cmd, ilObjSurvey $a_survey_obj, $a_read_only = false)
26  {
27  global $DIC;
28 
29  $this->ctrl = $DIC->ctrl();
30  $this->lng = $DIC->language();
31  $ilCtrl = $DIC->ctrl();
32  $lng = $DIC->language();
33 
34  $this->object = $a_survey_obj;
35  $this->read_only = (bool) $a_read_only;
36 
37  parent::__construct($a_parent_obj, $a_parent_cmd);
38 
39  $this->setId("il_svy_qst");
40  $this->setLimit(9999);
41 
42  // $this->setTitle($lng->txt("survey_questions"));
43 
44  if (!$this->read_only) {
45  // command dropdown
46  if (!array_key_exists("move_questions", $_SESSION) ||
47  $_SESSION["move_questions_survey_id"] != $this->object->getId()) {
48  $this->addMultiCommand("createQuestionblock", $lng->txt("define_questionblock"));
49  $this->addMultiCommand("unfoldQuestionblock", $lng->txt("unfold"));
50  $this->addMultiCommand("removeQuestions", $lng->txt("remove_question"));
51  $this->addMultiCommand("moveQuestions", $lng->txt("move"));
52  $this->addMultiCommand("copyQuestionsToPool", $lng->txt("survey_copy_questions_to_pool"));
53  } else {
54  $this->addMultiCommand("insertQuestionsBefore", $lng->txt("insert_before"));
55  $this->addMultiCommand("insertQuestionsAfter", $lng->txt("insert_after"));
56  }
57 
58  // right side
59  $this->addCommandButton("saveObligatory", $lng->txt("save_obligatory_state"));
60 
61  $this->setSelectAllCheckbox("id[]");
62  $this->addColumn("", "");
63  $this->addColumn($lng->txt("survey_order"), "");
64  }
65 
66  $this->addColumn($lng->txt("title"), "");
67  $this->addColumn($lng->txt("obligatory"), "");
68  $this->addColumn($lng->txt("description"), "");
69  $this->addColumn($lng->txt("type"), "");
70  $this->addColumn($lng->txt("author"), "");
71  $this->addColumn($lng->txt("survey_question_pool"), "");
72 
73  if (!$this->read_only) {
74  $this->addColumn("", "");
75  }
76 
77  $this->setDefaultOrderField("order");
78  $this->setDefaultOrderDirection("asc");
79 
80  $this->setFormAction($ilCtrl->getFormAction($a_parent_obj));
81  $this->setRowTemplate("tpl.il_svy_svy_question_table.html", "Modules/Survey");
82 
83  $this->setShowRowsSelector(true);
84 
85  $this->importData();
86  }
87 
91  protected function importData()
92  {
94  $lng = $this->lng;
95 
96  $survey_questions = $this->object->getSurveyQuestions();
97  if (count($survey_questions) > 0) {
98  include_once "./Modules/SurveyQuestionPool/classes/class.ilObjSurveyQuestionPool.php";
100 
101  $questionpools = $this->object->getQuestionpoolTitles(true);
102 
103  $table_data = array();
104  $last_questionblock_id = $position = $block_position = 0;
105  foreach ($survey_questions as $question_id => $data) {
106  // question block
107  if ($data["questionblock_id"] > 0 &&
108  $data["questionblock_id"] != $last_questionblock_id) {
109  $id = "qb_" . $data["questionblock_id"];
110 
111  $table_data[$id] = array("id" => $id,
112  "type" => "block",
113  "title" => $data["questionblock_title"]);
114 
115  if (!$this->read_only) {
116  // order
117  if (sizeof($survey_questions) > 1) {
118  $position += 10;
119  $table_data[$id]["position"] = $position;
120  }
121 
122  $ilCtrl->setParameter($this->parent_obj, "bl_id", $data["questionblock_id"]);
123  $table_data[$id]["url"] = $ilCtrl->getLinkTarget($this->parent_obj, "editQuestionblock");
124  $ilCtrl->setParameter($this->parent_obj, "bl_id", "");
125  }
126 
127  $block_position = 0;
128  }
129 
130  // question
131 
132  $id = $data["question_id"];
133 
134  $table_data[$id] = array("id" => $id,
135  "type" => "question",
136  "heading" => $data["heading"],
137  "title" => $data["title"],
138  "description" => $data["description"],
139  "author" => $data["author"],
140  "block_id" => $data["questionblock_id"],
141  "obligatory" => (bool) $data["obligatory"]);
142 
143  // question type
144  foreach ($questiontypes as $trans => $typedata) {
145  if (strcmp($typedata["type_tag"], $data["type_tag"]) == 0) {
146  $table_data[$id]["question_type"] = $trans;
147  }
148  }
149 
150  // pool title
151  if ($data["original_id"]) {
152  $original_fi = SurveyQuestion::lookupObjFi($data["original_id"]);
153  if (isset($questionpools[$original_fi])) {
154  $table_data[$id]["pool"] = $questionpools[$original_fi];
155  } else {
156  // #11186
157  $table_data[$id]["pool"] = $this->lng->txt("status_no_permission");
158  }
159  }
160 
161  if (!$this->read_only) {
162  if ($data["obj_fi"] > 0) {
163  // edit url
164  $q_gui = $data["type_tag"] . "GUI";
165  $ilCtrl->setParameterByClass($q_gui, "q_id", $id);
166  $table_data[$id]["url"] = $ilCtrl->getLinkTargetByClass($q_gui, "editQuestion") .
167  $ilCtrl->setParameterByClass($q_gui, "q_id", "");
168  }
169 
170  // order
171  if (sizeof($survey_questions) > 1) {
172  if (!$data["questionblock_id"]) {
173  $position += 10;
174  $table_data[$id]["position"] = $position;
175  } else {
176  $block_position += 10;
177  $table_data[$id]["position"] = $block_position;
178  }
179  }
180  }
181 
182  $last_questionblock_id = $data["questionblock_id"];
183  }
184  }
185 
186  $this->setData($table_data);
187  }
188 
194  protected function fillRow($a_set)
195  {
196  $lng = $this->lng;
198 
199  switch ($a_set["type"]) {
200  case "block":
201  if (!$this->read_only) {
202  // checkbox
203  $this->tpl->setCurrentBlock("checkable");
204  $this->tpl->setVariable("QUESTION_ID", $a_set["id"]);
205  $this->tpl->parseCurrentBlock();
206 
207  // order
208  if ($a_set["position"]) {
209  $this->tpl->setCurrentBlock("order");
210  $this->tpl->setVariable("ORDER_NAME", "order[" . $a_set["id"] . "]");
211  $this->tpl->setVariable("ORDER_VALUE", $a_set["position"]);
212  $this->tpl->parseCurrentBlock();
213  }
214  }
215 
216  $this->tpl->setVariable("TYPE", $lng->txt("questionblock"));
217  break;
218 
219  case "question":
220  $this->tpl->setVariable("DESCRIPTION", $a_set["description"]);
221  $this->tpl->setVariable("TYPE", $a_set["question_type"]);
222  $this->tpl->setVariable("AUTHOR", $a_set["author"]);
223  $this->tpl->setVariable("POOL", $a_set["pool"]);
224 
225  if ($a_set["heading"]) {
226  $this->tpl->setCurrentBlock("heading");
227  $this->tpl->setVariable("TXT_HEADING", $a_set["heading"]);
228  $this->tpl->parseCurrentBlock();
229  }
230 
231  if ($a_set["block_id"]) {
232  $this->tpl->setVariable("TITLE_INDENT", " style=\"padding-left:30px\"");
233  }
234 
235  if (!$this->read_only) {
236  // checkbox
237  $this->tpl->setCurrentBlock("checkable");
238  $this->tpl->setVariable("QUESTION_ID", $a_set["id"]);
239  $this->tpl->parseCurrentBlock();
240 
241  if ($a_set["block_id"]) {
242  $this->tpl->setVariable("CHECKABLE_INDENT", " style=\"padding-left:30px\"");
243  }
244 
245  // order
246  if ($a_set["position"]) {
247  $this->tpl->setCurrentBlock("order");
248  if (!$a_set["block_id"]) {
249  $this->tpl->setVariable("ORDER_NAME", "order[q_" . $a_set["id"] . "]");
250  } else {
251  $this->tpl->setVariable("ORDER_NAME", "block_order[" . $a_set["block_id"] . "][" . $a_set["id"] . "]");
252  }
253  $this->tpl->setVariable("ORDER_VALUE", $a_set["position"]);
254  $this->tpl->parseCurrentBlock();
255  if ($a_set["block_id"]) {
256  $this->tpl->setVariable("ORDER_INDENT", " style=\"padding-left:30px\"");
257  }
258  }
259 
260  // obligatory
261  $checked = $a_set["obligatory"] ? " checked=\"checked\"" : "";
262  $obligatory = "<input type=\"checkbox\" name=\"obligatory_" .
263  $a_set["id"] . "\" value=\"1\"" . $checked . " />";
264  } elseif ($a_set["obligatory"]) {
265  $obligatory = "<img src=\"" . ilUtil::getImagePath("obligatory.png", "Modules/Survey") .
266  "\" alt=\"" . $lng->txt("question_obligatory") .
267  "\" title=\"" . $lng->txt("question_obligatory") . "\" />";
268  }
269  $this->tpl->setVariable("OBLIGATORY", $obligatory);
270  break;
271 
272  case "heading":
273  if (!$this->read_only) {
274  // checkbox
275  $this->tpl->setCurrentBlock("checkable");
276  $this->tpl->setVariable("QUESTION_ID", $a_set["id"]);
277  $this->tpl->parseCurrentBlock();
278  if ($a_set["in_block"]) {
279  $this->tpl->setVariable("CHECKABLE_INDENT", " style=\"padding-left:30px\"");
280  $this->tpl->setVariable("TITLE_INDENT", " style=\"padding-left:30px\"");
281  }
282  }
283 
284  $this->tpl->setVariable("TYPE", $lng->txt("heading"));
285  break;
286  }
287 
288  if (!$this->read_only) {
289  $this->tpl->setCurrentBlock("actions");
290 
291  $ilCtrl->setParameter($this->parent_obj, "q_id", $a_set["id"]);
292 
293  include_once "Services/UIComponent/AdvancedSelectionList/classes/class.ilAdvancedSelectionListGUI.php";
295  $list->setId($a_set["id"]);
296  $list->setListTitle($lng->txt("actions"));
297  if ($a_set["url"]) {
298  $list->addItem($lng->txt("edit"), "", $a_set["url"]);
299  }
300 
301  if ($a_set["heading"]) {
302  $list->addItem(
303  $lng->txt("survey_edit_heading"),
304  "",
305  $ilCtrl->getLinkTarget($this->parent_obj, "editheading")
306  );
307 
308  $list->addItem(
309  $lng->txt("survey_delete_heading"),
310  "",
311  $ilCtrl->getLinkTarget($this->parent_obj, "removeheading")
312  );
313  } elseif ($a_set["type"] == "question") {
314  $list->addItem(
315  $lng->txt("add_heading"),
316  "",
317  $ilCtrl->getLinkTarget($this->parent_obj, "addHeading")
318  );
319  }
320 
321  $this->tpl->setVariable("ACTION", $list->getHTML());
322 
323  $ilCtrl->setParameter($this->parent_obj, "q_id", "");
324 
325  $this->tpl->parseCurrentBlock();
326 
327  // #11186
328  if ($a_set["url"]) {
329  $this->tpl->setCurrentBlock("title_edit");
330  $this->tpl->setVariable("TITLE", $a_set["title"]);
331  $this->tpl->setVariable("URL_TITLE", $a_set["url"]);
332  $this->tpl->parseCurrentBlock();
333  } else {
334  $this->tpl->setCurrentBlock("title_static");
335  $this->tpl->setVariable("TITLE", $a_set["title"]);
336  $this->tpl->parseCurrentBlock();
337  }
338  } else {
339  $this->tpl->setCurrentBlock("title_static");
340  $this->tpl->setVariable("TITLE", $a_set["title"]);
341  $this->tpl->parseCurrentBlock();
342  }
343  }
344 }
addCommandButton($a_cmd, $a_text, $a_onclick='', $a_id="", $a_class=null)
Add Command button.
if(isset($_REQUEST['delete'])) $list
Definition: registry.php:41
setDefaultOrderField($a_defaultorderfield)
Set Default order field.
$_SESSION["AccountId"]
global $DIC
Definition: saml.php:7
if(!array_key_exists('StateId', $_REQUEST)) $id
static lookupObjFi($a_qid)
Lookip obj fi.
setId($a_val)
Set id.
global $ilCtrl
Definition: ilias.php:18
setDefaultOrderDirection($a_defaultorderdirection)
Set Default order direction.
Class ilTable2GUI.
setSelectAllCheckbox($a_select_all_checkbox, $a_select_all_on_top=false)
Set the name of the checkbox that should be toggled with a select all button.
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
addMultiCommand($a_cmd, $a_text)
Add Command button.
setRowTemplate($a_template, $a_template_dir="")
Set row template.
Survey question table GUI class.
__construct($a_parent_obj, $a_parent_cmd, ilObjSurvey $a_survey_obj, $a_read_only=false)
Constructor.
User interface class for advanced drop-down selection lists.
setFormAction($a_form_action, $a_multipart=false)
Set Form action parameter.
addColumn( $a_text, $a_sort_field="", $a_width="", $a_is_checkbox_action_column=false, $a_class="", $a_tooltip="", $a_tooltip_with_html=false)
Add a column to the header.
static _getQuestiontypes()
Creates a list of all available question types.
setShowRowsSelector($a_value)
Toggle rows-per-page selector.
setLimit($a_limit=0, $a_default_limit=0)