ILIAS  Release_5_0_x_branch Revision 61816
 All Data Structures Namespaces Files Functions Variables Groups Pages
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  function __construct($a_parent_obj, $a_parent_cmd, ilObjSurvey $a_survey_obj, $a_read_only = false)
26  {
27  global $ilCtrl, $lng;
28 
29  $this->object = $a_survey_obj;
30  $this->read_only = (bool)$a_read_only;
31 
32  parent::__construct($a_parent_obj, $a_parent_cmd);
33 
34  $this->setId("il_svy_qst");
35  $this->setLimit(9999);
36 
37  // $this->setTitle($lng->txt("survey_questions"));
38 
39  if(!$this->read_only)
40  {
41  // command dropdown
42  if(!array_key_exists("move_questions", $_SESSION))
43  {
44  $this->addMultiCommand("createQuestionblock", $lng->txt("define_questionblock"));
45  $this->addMultiCommand("unfoldQuestionblock", $lng->txt("unfold"));
46  $this->addMultiCommand("removeQuestions", $lng->txt("remove_question"));
47  $this->addMultiCommand("moveQuestions", $lng->txt("move"));
48  $this->addMultiCommand("copyQuestionsToPool", $lng->txt("survey_copy_questions_to_pool"));
49  }
50  else
51  {
52  $this->addMultiCommand("insertQuestionsBefore", $lng->txt("insert_before"));
53  $this->addMultiCommand("insertQuestionsAfter", $lng->txt("insert_after"));
54  }
55 
56  // right side
57  $this->addCommandButton("saveObligatory", $lng->txt("save_obligatory_state"));
58 
59  $this->setSelectAllCheckbox("id[]");
60  $this->addColumn("", "");
61  $this->addColumn($lng->txt("survey_order"), "");
62  }
63 
64  $this->addColumn($lng->txt("title"), "");
65  $this->addColumn($lng->txt("obligatory"), "");
66  $this->addColumn($lng->txt("description"), "");
67  $this->addColumn($lng->txt("type"), "");
68  $this->addColumn($lng->txt("author"), "");
69  $this->addColumn($lng->txt("survey_question_pool"), "");
70 
71  if(!$this->read_only)
72  {
73  $this->addColumn("", "");
74  }
75 
76  $this->setDefaultOrderField("order");
77  $this->setDefaultOrderDirection("asc");
78 
79  $this->setFormAction($ilCtrl->getFormAction($a_parent_obj));
80  $this->setRowTemplate("tpl.il_svy_svy_question_table.html", "Modules/Survey");
81 
82  $this->setShowRowsSelector(true);
83 
84  $this->importData();
85  }
86 
90  protected function importData()
91  {
92  global $ilCtrl, $lng;
93 
94  $survey_questions = $this->object->getSurveyQuestions();
95  if (count($survey_questions) > 0)
96  {
97  include_once "./Modules/SurveyQuestionPool/classes/class.ilObjSurveyQuestionPool.php";
99 
100  $questionpools = $this->object->getQuestionpoolTitles(true);
101 
102  $table_data = array();
103  $last_questionblock_id = $position = $block_position = 0;
104  foreach ($survey_questions as $question_id => $data)
105  {
106  // question block
107  if ($data["questionblock_id"] > 0 &&
108  $data["questionblock_id"] != $last_questionblock_id)
109  {
110  $id = "qb_" . $data["questionblock_id"];
111 
112  $table_data[$id] = array("id" => $id,
113  "type" => "block",
114  "title" => $data["questionblock_title"]);
115 
116  if (!$this->read_only)
117  {
118  // order
119  if(sizeof($survey_questions) > 1)
120  {
121  $position += 10;
122  $table_data[$id]["position"] = $position;
123  }
124 
125  $ilCtrl->setParameter($this->parent_obj, "bl_id", $data["questionblock_id"]);
126  $table_data[$id]["url"] = $ilCtrl->getLinkTarget($this->parent_obj, "editQuestionblock");
127  $ilCtrl->setParameter($this->parent_obj, "bl_id", "");
128  }
129 
130  $block_position = 0;
131  }
132 
133  // question
134 
135  $id = $data["question_id"];
136 
137  $table_data[$id] = array("id" => $id,
138  "type" => "question",
139  "heading" => $data["heading"],
140  "title" => $data["title"],
141  "description" => $data["description"],
142  "author" => $data["author"],
143  "block_id" => $data["questionblock_id"],
144  "obligatory" => (bool)$data["obligatory"]);
145 
146  // question type
147  foreach ($questiontypes as $trans => $typedata)
148  {
149  if (strcmp($typedata["type_tag"], $data["type_tag"]) == 0)
150  {
151  $table_data[$id]["question_type"] = $trans;
152  }
153  }
154 
155  // pool title
156  if($data["original_id"])
157  {
158  if(isset($questionpools[$data["obj_fi"]]))
159  {
160  $table_data[$id]["pool"] = $questionpools[$data["obj_fi"]];
161  }
162  else
163  {
164  // #11186
165  $table_data[$id]["pool"] = $this->lng->txt("status_no_permission");
166  }
167  }
168 
169  if (!$this->read_only)
170  {
171  if ($data["obj_fi"] > 0)
172  {
173  // edit url
174  $q_gui = $data["type_tag"]."GUI";
175  $ilCtrl->setParameterByClass($q_gui, "q_id", $id);
176  $table_data[$id]["url"] = $ilCtrl->getLinkTargetByClass($q_gui, "editQuestion") .
177  $ilCtrl->setParameterByClass($q_gui, "q_id", "");
178  }
179 
180  // order
181  if(sizeof($survey_questions) > 1)
182  {
183  if (!$data["questionblock_id"])
184  {
185  $position += 10;
186  $table_data[$id]["position"] = $position;
187  }
188  else
189  {
190  $block_position += 10;
191  $table_data[$id]["position"] = $block_position;
192  }
193  }
194  }
195 
196  $last_questionblock_id = $data["questionblock_id"];
197  }
198  }
199 
200  $this->setData($table_data);
201  }
202 
208  protected function fillRow($a_set)
209  {
210  global $lng, $ilCtrl;
211 
212  switch($a_set["type"])
213  {
214  case "block":
215  if(!$this->read_only)
216  {
217  // checkbox
218  $this->tpl->setCurrentBlock("checkable");
219  $this->tpl->setVariable("QUESTION_ID", $a_set["id"]);
220  $this->tpl->parseCurrentBlock();
221 
222  // order
223  if($a_set["position"])
224  {
225  $this->tpl->setCurrentBlock("order");
226  $this->tpl->setVariable("ORDER_NAME", "order[".$a_set["id"]."]");
227  $this->tpl->setVariable("ORDER_VALUE", $a_set["position"]);
228  $this->tpl->parseCurrentBlock();
229  }
230  }
231 
232  $this->tpl->setVariable("TYPE", $lng->txt("questionblock"));
233  break;
234 
235  case "question":
236  $this->tpl->setVariable("DESCRIPTION", $a_set["description"]);
237  $this->tpl->setVariable("TYPE", $a_set["question_type"]);
238  $this->tpl->setVariable("AUTHOR", $a_set["author"]);
239  $this->tpl->setVariable("POOL", $a_set["pool"]);
240 
241  if($a_set["heading"])
242  {
243  $this->tpl->setCurrentBlock("heading");
244  $this->tpl->setVariable("TXT_HEADING", $a_set["heading"]);
245  $this->tpl->parseCurrentBlock();
246  }
247 
248  if($a_set["block_id"])
249  {
250  $this->tpl->setVariable("TITLE_INDENT", " style=\"padding-left:30px\"");
251  }
252 
253  if(!$this->read_only)
254  {
255  // checkbox
256  $this->tpl->setCurrentBlock("checkable");
257  $this->tpl->setVariable("QUESTION_ID", $a_set["id"]);
258  $this->tpl->parseCurrentBlock();
259 
260  if($a_set["block_id"])
261  {
262  $this->tpl->setVariable("CHECKABLE_INDENT", " style=\"padding-left:30px\"");
263  }
264 
265  // order
266  if($a_set["position"])
267  {
268  $this->tpl->setCurrentBlock("order");
269  if(!$a_set["block_id"])
270  {
271  $this->tpl->setVariable("ORDER_NAME", "order[q_".$a_set["id"]."]");
272  }
273  else
274  {
275  $this->tpl->setVariable("ORDER_NAME", "block_order[".$a_set["block_id"]."][".$a_set["id"]."]");
276  }
277  $this->tpl->setVariable("ORDER_VALUE", $a_set["position"]);
278  $this->tpl->parseCurrentBlock();
279  if($a_set["block_id"])
280  {
281  $this->tpl->setVariable("ORDER_INDENT", " style=\"padding-left:30px\"");
282  }
283  }
284 
285  // obligatory
286  $checked = $a_set["obligatory"] ? " checked=\"checked\"" : "";
287  $obligatory = "<input type=\"checkbox\" name=\"obligatory_".
288  $a_set["id"] . "\" value=\"1\"".$checked." />";
289  }
290  else if($a_set["obligatory"])
291  {
292  $obligatory = "<img src=\"".ilUtil::getImagePath("obligatory.png", "Modules/Survey").
293  "\" alt=\"".$lng->txt("question_obligatory").
294  "\" title=\"".$lng->txt("question_obligatory")."\" />";
295  }
296  $this->tpl->setVariable("OBLIGATORY", $obligatory);
297  break;
298 
299  case "heading":
300  if(!$this->read_only)
301  {
302  // checkbox
303  $this->tpl->setCurrentBlock("checkable");
304  $this->tpl->setVariable("QUESTION_ID", $a_set["id"]);
305  $this->tpl->parseCurrentBlock();
306  if($a_set["in_block"])
307  {
308  $this->tpl->setVariable("CHECKABLE_INDENT", " style=\"padding-left:30px\"");
309  $this->tpl->setVariable("TITLE_INDENT", " style=\"padding-left:30px\"");
310  }
311  }
312 
313  $this->tpl->setVariable("TYPE", $lng->txt("heading"));
314  break;
315  }
316 
317  if(!$this->read_only)
318  {
319  $this->tpl->setCurrentBlock("actions");
320 
321  $ilCtrl->setParameter($this->parent_obj, "q_id", $a_set["id"]);
322 
323  include_once "Services/UIComponent/AdvancedSelectionList/classes/class.ilAdvancedSelectionListGUI.php";
324  $list = new ilAdvancedSelectionListGUI();
325  $list->setId($a_set["id"]);
326  $list->setListTitle($lng->txt("actions"));
327  if($a_set["url"])
328  {
329  $list->addItem($lng->txt("edit"), "", $a_set["url"]);
330  }
331 
332  if($a_set["heading"])
333  {
334  $list->addItem($lng->txt("survey_edit_heading"), "",
335  $ilCtrl->getLinkTarget($this->parent_obj, "editheading"));
336 
337  $list->addItem($lng->txt("survey_delete_heading"), "",
338  $ilCtrl->getLinkTarget($this->parent_obj, "removeheading"));
339  }
340  else if($a_set["type"] == "question")
341  {
342  $list->addItem($lng->txt("add_heading"), "",
343  $ilCtrl->getLinkTarget($this->parent_obj, "addHeading"));
344  }
345 
346  $this->tpl->setVariable("ACTION", $list->getHTML());
347 
348  $ilCtrl->setParameter($this->parent_obj, "q_id", "");
349 
350  $this->tpl->parseCurrentBlock();
351 
352  // #11186
353  if($a_set["url"])
354  {
355  $this->tpl->setCurrentBlock("title_edit");
356  $this->tpl->setVariable("TITLE", $a_set["title"]);
357  $this->tpl->setVariable("URL_TITLE", $a_set["url"]);
358  $this->tpl->parseCurrentBlock();
359  }
360  else
361  {
362  $this->tpl->setCurrentBlock("title_static");
363  $this->tpl->setVariable("TITLE", $a_set["title"]);
364  $this->tpl->parseCurrentBlock();
365  }
366  }
367  else
368  {
369  $this->tpl->setCurrentBlock("title_static");
370  $this->tpl->setVariable("TITLE", $a_set["title"]);
371  $this->tpl->parseCurrentBlock();
372  }
373  }
374 }
375 
376 ?>