ILIAS  release_8 Revision v8.19
All Data Structures Namespaces Files Functions Variables Modules Pages
class.PageRenderer.php
Go to the documentation of this file.
1 <?php
2 
20 
26 {
27  protected int $question_title_mode;
28  protected \ilCtrl $ctrl;
29  protected \ilLanguage $lng;
30  protected array $page_data;
31  protected array $working_data = [];
32  protected array $errors = [];
33  protected \ilObjSurvey $survey;
34 
39  public function __construct(
40  \ilObjSurvey $survey,
41  array $page_data,
42  array $working_data = [],
43  array $errors = [],
44  int $question_title_mode = 1
45  ) {
46  global $DIC;
47 
48  $this->ctrl = $DIC->ctrl();
49  $this->lng = $DIC->language();
50  $this->survey = $survey;
51  $this->page_data = $page_data;
52  $this->working_data = $working_data;
53  $this->errors = $errors;
54  $this->question_title_mode = $question_title_mode;
55  }
56 
57  public function render(): string
58  {
59  $page = $this->page_data;
60 
61  $required = false;
62  $stpl = new \ilTemplate("tpl.page.html", true, true, "Modules/Survey/Page");
63 
64  // question block title
65  if (count($page) > 1 && $page[0]["questionblock_show_blocktitle"]) {
66  $stpl->setCurrentBlock("questionblock_title");
67  $stpl->setVariable("TEXT_QUESTIONBLOCK_TITLE", $page[0]["questionblock_title"]);
68  $stpl->parseCurrentBlock();
69  }
70 
71  // dealing with compressed view
72  $compress_view = false;
73  if (count($page) > 1) {
74  $compress_view = $page[0]["questionblock_compress_view"];
75  }
76  $previous_page = null;
77  $previous_key = null;
78  foreach ($page as $k => $data) {
79  $page[$k]["compressed"] = false;
80  $page[$k]["compressed_first"] = false;
81  if ($compress_view && $this->compressQuestion($previous_page, $data)) {
82  $page[$k]["compressed"] = true;
83  if ($previous_key !== null && $page[$previous_key]["compressed"] == false) {
84  $page[$previous_key]["compressed_first"] = true;
85  }
86  }
87  $previous_key = $k;
88  $previous_page = $data;
89  }
90 
91  // questions
92  foreach ($page as $data) {
93 
94  // question heading
95  if ($data["heading"]) {
96  $stpl->setCurrentBlock("heading");
97  $stpl->setVariable("QUESTION_HEADING", $data["heading"]);
98  $stpl->parseCurrentBlock();
99  }
100  $stpl->setCurrentBlock("survey_content");
101  // get question gui
102  $question_gui = $this->survey->getQuestionGUI($data["type_tag"], $data["question_id"]);
103 
104  // set obligatory flag
105  $question_gui->object->setObligatory($data["obligatory"]);
106 
107  // get show questiontext flag
108  $show_questiontext = ($data["questionblock_show_questiontext"]) ? 1 : 0;
109 
110  // question title mode
111  $question_title_mode = $this->question_title_mode;
112  if (!$this->survey->getShowQuestionTitles() || $data["compressed_first"]) {
113  $question_title_mode = 0;
114  }
115  $working_data = $this->working_data[$data["question_id"]] ?? null;
116  $error = $this->errors[$data["question_id"]] ?? "";
117 
118  // get question output
119  // getWorkingData($qid)
120  // showQuestionTitle()
121  $question_output = $question_gui->getWorkingForm(
122  $working_data,
123  $question_title_mode,
124  $show_questiontext,
125  $error,
126  $this->survey->getSurveyId(),
127  $compress_view
128  );
129 
130  // tweak compressed view
131  if ($data["compressed"]) {
132  //$question_output = '<div class="il-svy-qst-compressed">' . $question_output . '</div>';
133 
134  $stpl->setVariable("CMPR_CLASS", "il-svy-qst-compressed");
135  }
136  $stpl->setVariable("QUESTION_OUTPUT", $question_output);
137 
138  // update qid ctrl parameter
139  $this->ctrl->setParameter($this, "qid", $data["question_id"]);
140 
141  if ($data["obligatory"]) {
142  $required = true;
143  }
144  $stpl->parseCurrentBlock();
145  }
146 
147  // required text action
148  if ($required) {
149  $stpl->setCurrentBlock("required");
150  $stpl->setVariable("TEXT_REQUIRED", $this->lng->txt("required_field"));
151  $stpl->parseCurrentBlock();
152  }
153 
154  return $stpl->get();
155  }
156 
157  protected function compressQuestion(
158  ?array $previous_page,
159  array $page
160  ): bool {
161  if (is_null($previous_page)) {
162  return false;
163  }
164 
165  if ($previous_page["type_tag"] === $page["type_tag"] &&
166  $page["type_tag"] === "SurveySingleChoiceQuestion") {
167  if (\SurveySingleChoiceQuestion::compressable($previous_page["question_id"], $page["question_id"])) {
168  return true;
169  }
170  }
171 
172  return false;
173  }
174 }
global $DIC
Definition: feed.php:28
__construct(\ilObjSurvey $survey, array $page_data, array $working_data=[], array $errors=[], int $question_title_mode=1)
ilErrorHandling $error
Definition: class.ilias.php:55
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
compressQuestion(?array $previous_page, array $page)