ILIAS  release_6 Revision v6.24-5-g0c8bfefb3b8
class.ilObjStudyProgrammeIndividualPlanGUI.php
Go to the documentation of this file.
1<?php
2
3/* Copyright (c) 2015 Richard Klees <richard.klees@concepts-and-training.de> Extended GPL, see docs/LICENSE */
4
5
13{
17 public $ctrl;
18
22 public $tpl;
23
27 public $object;
28
32 public $lng;
33
34
38 public $user;
39
40 protected $parent_gui;
41
46
47 public function __construct(
52 \ilAccess $ilAccess,
54 ilStudyProgrammeUserAssignmentDB $sp_user_assignment_db
55 ) {
56 $this->tpl = $tpl;
57 $this->ctrl = $ilCtrl;
58 $this->lng = $lng;
59 $this->ilAccess = $ilAccess;
60 $this->user = $ilUser;
61
62 $this->assignment_object = null;
63
64 $this->sp_user_progress_db = $sp_user_progress_db;
65 $this->sp_user_assignment_db = $sp_user_assignment_db;
66
67 $this->object = null;
68
69 $lng->loadLanguageModule("prg");
70
71 $this->tpl->addCss("Modules/StudyProgramme/templates/css/ilStudyProgramme.css");
72 }
73
74 public function setParentGUI($a_parent_gui)
75 {
76 $this->parent_gui = $a_parent_gui;
77 }
78
79 public function setRefId($a_ref_id)
80 {
81 $this->ref_id = $a_ref_id;
82 }
83
84 public function executeCommand()
85 {
86 $cmd = $this->ctrl->getCmd();
87
88 if ($cmd == "") {
89 $cmd = "view";
90 }
91
92 switch ($cmd) {
93 case "view":
94 case "manage":
95 case "updateFromCurrentPlan":
96 case "updateFromInput":
97 $cont = $this->$cmd();
98 break;
99 default:
100 throw new ilException("ilObjStudyProgrammeMembersGUI: " .
101 "Command not supported: $cmd");
102 }
103
104 $this->tpl->setContent($cont);
105 }
106
107 protected function getAssignmentId()
108 {
109 if (!is_numeric($_GET["ass_id"])) {
110 throw new ilException("Expected integer 'ass_id'");
111 }
112 return (int) $_GET["ass_id"];
113 }
114
115 protected function getAssignmentObject()
116 {
117 if ($this->assignment_object === null) {
118 $id = $this->getAssignmentId();
119 $this->assignment_object = $this->sp_user_assignment_db->getInstanceById((int) $id);
120 }
121 return $this->assignment_object;
122 }
123
124 protected function view()
125 {
126 require_once("Modules/StudyProgramme/classes/class.ilStudyProgrammeIndividualPlanProgressListGUI.php");
127 $progress = $this->getAssignmentObject()->getRootProgress();
128 if (
129 $this->parent_gui->getStudyProgramme()->getAccessControlByOrguPositionsGlobal()
130 && !in_array($progress->getUserId(), $this->parent_gui->viewIndividualPlan())
131 ) {
133 "may not access individua plan of user"
134 );
135 }
137 $gui->setOnlyRelevant(true);
138 // Wrap a frame around the original gui element to correct rendering.
139 $tpl = new ilTemplate("tpl.individual_plan_tree_frame.html", false, false, "Modules/StudyProgramme");
140 $tpl->setVariable("CONTENT", $gui->getHTML());
141 return $this->buildFrame("view", $tpl->get());
142 }
143
144
145 protected function manage()
146 {
147 require_once("Modules/StudyProgramme/classes/class.ilStudyProgrammeIndividualPlanTableGUI.php");
148 $ass = $this->getAssignmentObject();
149 if (
150 $this->parent_gui->getStudyProgramme()->getAccessControlByOrguPositionsGlobal()
151 && !in_array($ass->getUserId(), $this->parent_gui->editIndividualPlan())
152 ) {
154 "may not access individua plan of user"
155 );
156 }
157 $this->ctrl->setParameter($this, "ass_id", $ass->getId());
158 $this->ctrl->setParameter($this, "cmd", "manage");
159 $table = new ilStudyProgrammeIndividualPlanTableGUI($this, $ass, $this->sp_user_progress_db);
160 $frame = $this->buildFrame("manage", $table->getHTML());
161 $this->ctrl->setParameter($this, "ass_id", null);
162 return $frame;
163 }
164
165 protected function updateFromCurrentPlan()
166 {
167 $ass = $this->getAssignmentObject();
168 if (
169 $this->parent_gui->getStudyProgramme()->getAccessControlByOrguPositionsGlobal()
170 && !in_array($ass->getUserId(), $this->parent_gui->editIndividualPlan())
171 ) {
173 "may not access individual plan of user"
174 );
175 }
176 $ass->updateFromProgram();
177 $ass->updateValidityFromProgram();
178 $ass->updateDeadlineFromProgram();
179
180 $this->ctrl->setParameter($this, "ass_id", $ass->getId());
181 $this->showSuccessMessage("update_from_plan_successful");
182 $this->ctrl->redirect($this, "manage");
183 }
184
185 protected function updateFromInput()
186 {
187 require_once("Modules/StudyProgramme/classes/class.ilStudyProgrammeUserProgress.php");
188
189 $changed = false;
190
191 $changed = $this->updateStatus();
192
193 $this->ctrl->setParameter($this, "ass_id", $this->getAssignmentId());
194 if ($changed) {
195 $this->showSuccessMessage("update_successful");
196 }
197 $this->ctrl->redirect($this, "manage");
198 }
199
200 protected function updateStatus()
201 {
202 $status_updates = $this->getManualStatusUpdates();
203 $changed = false;
204 foreach ($status_updates as $prgrs_id => $status) {
205 $prgrs = $this->sp_user_progress_db->getInstanceById($prgrs_id);
206 $cur_status = $prgrs->getStatus();
207 if (
208 $this->parent_gui->getStudyProgramme()->getAccessControlByOrguPositionsGlobal()
209 && !in_array($prgrs->getUserId(), $this->parent_gui->editIndividualPlan())
210 ) {
211 continue;
212 }
213 if ($status == self::MANUAL_STATUS_NONE && $cur_status == ilStudyProgrammeProgress::STATUS_ACCREDITED) {
214 $prgrs->unmarkAccredited($this->user->getId());
215 $changed = true;
216 } elseif ($status == self::MANUAL_STATUS_NONE && $cur_status == ilStudyProgrammeProgress::STATUS_NOT_RELEVANT) {
217 $prgrs->markRelevant($this->user->getId());
218 $changed = true;
219 } elseif ($status == self::MANUAL_STATUS_NOT_RELEVANT && $cur_status != ilStudyProgrammeProgress::STATUS_NOT_RELEVANT) {
220 $prgrs->markNotRelevant($this->user->getId());
221 $changed = true;
222 } elseif ($status == self::MANUAL_STATUS_ACCREDITED && $cur_status != ilStudyProgrammeProgress::STATUS_ACCREDITED) {
223 $prgrs->markAccredited($this->user->getId());
224 $changed = true;
225 }
226
227 $deadline = null;
228 if ($this->postContainDeadline()) {
229 $deadline = $this->updateDeadline($prgrs);
230 }
231
233 $changed = $this->updateRequiredPoints($prgrs_id) || $changed;
234
235 if ($deadline !== null && $deadline->format('Y-m-d') < date("Y-m-d")) {
236 $prgrs->markFailed($this->user->getId());
237 }
238 } elseif ($cur_status == ilStudyProgrammeProgress::STATUS_FAILED) {
239 if ($deadline === null || $deadline->format('Y-m-d') > date("Y-m-d")) {
240 $prgrs->markNotFailed((int) $this->user->getId());
241 }
242 }
243 }
244 return $changed;
245 }
246
255 {
256 $deadline = $this->getDeadlineFromForm($prgrs->getId());
257 $prgrs->setDeadline($deadline);
258 $prgrs->updateProgress($this->user->getId());
259
260 return $deadline;
261 }
262
263 protected function updateRequiredPoints($prgrs_id)
264 {
265 $required_points = $this->getRequiredPointsUpdates($prgrs_id);
266 $changed = false;
267
268 $prgrs = $this->sp_user_progress_db->getInstanceById($prgrs_id);
269 $cur_status = $prgrs->getStatus();
271 return false;
272 }
273
274 if ($required_points < 0) {
275 $required_points = 0;
276 }
277
278 if ($required_points == $prgrs->getAmountOfPoints()) {
279 return false;
280 }
281
282 $prgrs->setRequiredAmountOfPoints($required_points, $this->user->getId());
283 return true;
284 }
285
293 protected function getDeadlineFromForm($prgrs_id)
294 {
295 $post_var = $this->getDeadlinePostVarTitle();
296 if (!$this->postContainDeadline()) {
297 throw new ilException("Expected array $post_var in POST");
298 }
299
300 $post_value = $_POST[$post_var];
301 $deadline = $post_value[$prgrs_id];
302
303 if ($deadline == "") {
304 return null;
305 }
306 return DateTime::createFromFormat('d.m.Y', $deadline);
307 }
308
314 protected function postContainDeadline()
315 {
316 $post_var = $this->getDeadlinePostVarTitle();
317 if (array_key_exists($post_var, $_POST)) {
318 return true;
319 }
320 return false;
321 }
322
323 protected function showSuccessMessage($a_lng_var)
324 {
325 require_once("Services/Utilities/classes/class.ilUtil.php");
326 ilUtil::sendSuccess($this->lng->txt("prg_$a_lng_var"), true);
327 }
328
329 protected function getManualStatusUpdates()
330 {
331 $post_var = $this->getManualStatusPostVarTitle();
332 if (!array_key_exists($post_var, $_POST)) {
333 throw new ilException("Expected array $post_var in POST");
334 }
335 return $_POST[$post_var];
336 }
337
338 protected function getRequiredPointsUpdates($prgrs_id)
339 {
340 $post_var = $this->getRequiredPointsPostVarTitle();
341 if (!array_key_exists($post_var, $_POST)) {
342 throw new ilException("Expected array $post_var in POST");
343 }
344
345 $post_value = $_POST[$post_var];
346 return (int) $post_value[$prgrs_id];
347 }
348
349
350 protected function buildFrame($tab, $content)
351 {
352 $tpl = new ilTemplate("tpl.indivdual_plan_frame.html", true, true, "Modules/StudyProgramme");
353 $ass = $this->getAssignmentObject();
354 $ref_id = $ass->getStudyProgramme()->getRefId();
355 $user_id = $ass->getUserId();
356 $tpl->setVariable("USERNAME", ilObjUser::_lookupFullname($user_id));
357 $tabs = [];
358 if ($this->ilAccess->checkAccess("manage_members", "", $ref_id)) {
359 $tabs[] = 'view';
360 $tabs[] = 'manage';
361 }
362
363 if ($this->parent_gui->getStudyProgramme()->getAccessControlByOrguPositionsGlobal()) {
364 if (in_array($user_id, $this->parent_gui->viewIndividualPlan())) {
365 $tabs[] = 'view';
366 }
367 if (in_array($user_id, $this->parent_gui->editIndividualPlan())) {
368 $tabs[] = 'manage';
369 }
370 }
371
372 $tabs = array_unique($tabs);
373 foreach ($tabs as $_tab) {
374 $tpl->setCurrentBlock("sub_tab");
375 $tpl->setVariable("CLASS", $_tab == $tab ? "active" : "");
376 $tpl->setVariable("LINK", $this->getLinkTargetForSubTab($_tab, $ass->getId()));
377 $tpl->setVariable("TITLE", $this->lng->txt("prg_$_tab"));
378 $tpl->parseCurrentBlock();
379 }
380 $tpl->setVariable("CONTENT", $content);
381
382 return $tpl->get();
383 }
384
385 protected function getLinkTargetForSubTab($a_tab, $a_ass_id)
386 {
387 $this->ctrl->setParameter($this, "ass_id", $a_ass_id);
388 $lnk = $this->ctrl->getLinkTarget($this, $a_tab);
389 $this->ctrl->setParameter($this, "ass_id", null);
390 return $lnk;
391 }
392
393 public function appendIndividualPlanActions(ilTable2GUI $a_table)
394 {
395 $a_table->setFormAction($this->ctrl->getFormAction($this));
396 $a_table->addCommandButton("updateFromCurrentPlan", $this->lng->txt("prg_update_from_current_plan"));
397 $a_table->addCommandButton("updateFromInput", $this->lng->txt("save"));
398 }
399
400 const POST_VAR_STATUS = "status";
401 const POST_VAR_REQUIRED_POINTS = "required_points";
402 const POST_VAR_DEADLINE = "deadline";
406
408 {
410 }
411
413 {
415 }
416
417 public function getDeadlinePostVarTitle()
418 {
420 }
421
422 public function getManualStatusNone()
423 {
425 }
426
428 {
430 }
431
433 {
435 }
436
437 public function getLinkTargetView($a_ass_id)
438 {
439 $cl = "ilObjStudyProgrammeIndividualPlanGUI";
440 $this->ctrl->setParameterByClass($cl, "ass_id", $a_ass_id);
441 $link = $this->ctrl->getLinkTargetByClass($cl, "view");
442 $this->ctrl->setParameterByClass($cl, "ass_id", null);
443 return $link;
444 }
445}
user()
Definition: user.php:4
$_GET["client_id"]
$_POST["username"]
An exception for terminatinating execution or to throw for unit testing.
Class ilAccessHandler.
checkAccess($a_permission, $a_cmd, $a_ref_id, $a_type="", $a_obj_id="", $a_tree_id="")
check access for an object (provide $a_type and $a_obj_id if available for better performance)
This class provides processing control methods.
Base class for ILIAS Exception handling.
language handling
loadLanguageModule($a_module)
updateDeadline(ilStudyProgrammeUserProgress $prgrs)
Updates current deadline.
postContainDeadline()
Checks whether $_POST contains deadline.
__construct(\ilGlobalTemplateInterface $tpl, \ilCtrl $ilCtrl, \ilLanguage $lng, \ilObjUser $ilUser, \ilAccess $ilAccess, ilStudyProgrammeUserProgressDB $sp_user_progress_db, ilStudyProgrammeUserAssignmentDB $sp_user_assignment_db)
static _lookupFullname($a_user_id)
Lookup Full Name.
Storage implementation for ilStudyProgrammeUserProgress.
Represents the progress of a user at one node of a study programme.
updateProgress(int $user_id)
Updates current progress.
setDeadline(DateTime $deadline=null)
Set the deadline of this node.
Class ilTable2GUI.
setFormAction($a_form_action, $a_multipart=false)
Set Form action parameter.
addCommandButton($a_cmd, $a_text, $a_onclick='', $a_id="", $a_class=null)
Add Command button.
special template class to simplify handling of ITX/PEAR
global $ilCtrl
Definition: ilias.php:18
$ilUser
Definition: imgupload.php:18