ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
class.ilCourseContentGUI.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2010 ILIAS open source, Extended GPL, see docs/LICENSE */
3
16{
20
21 var $tpl;
22 var $ctrl;
23 var $lng;
25
31 public function __construct($container_gui_obj)
32 {
33 global $tpl,$ilCtrl,$lng,$ilObjDataCache,$ilTabs;
34
35 $this->tpl = $tpl;
36 $this->ctrl = $ilCtrl;
37 $this->lng = $lng;
38 $this->lng->loadLanguageModule('crs');
39 $this->tabs_gui = $ilTabs;
40
41 $this->container_gui =& $container_gui_obj;
42 $this->container_obj =& $this->container_gui->object;
43
44 $this->__initCourseObject();
45 }
46
47 function executeCommand()
48 {
49 global $ilAccess, $ilErr, $ilTabs, $ilCtrl;
50
51 if(!$ilAccess->checkAccess('read','',$this->container_obj->getRefId()))
52 {
53 $ilErr->raiseError($this->lng->txt('msg_no_perm_read'),$ilErr->WARNING);
54 }
55
56 // Handle timings view
57 $_SESSION['crs_timings'] = true;
58
59 $this->__setSubTabs();
60 $this->tabs_gui->setTabActive('view_content');
61 $cmd = $this->ctrl->getCmd();
62
63 switch($this->ctrl->getNextClass($this))
64 {
65 case 'ilcoursearchivesgui':
66 $this->__forwardToArchivesGUI();
67 break;
68
69 case "ilcolumngui":
70 $ilCtrl->saveParameterByClass("ilcolumngui", "col_return");
71 $ilTabs->setSubTabActive("crs_content");
72 $this->view();
73 break;
74
75 default:
76 if(!$this->__checkStartObjects())
77 {
78 $this->showStartObjects();
79 break;
80 }
81
82 // forward to objective presentation
83 if((!$this->is_tutor and
84 $this->container_obj->getType() == 'crs' and
85 $this->container_obj->enabledObjectiveView()) ||
86 $_GET["col_return"] == "objectives")
87 {
88 $this->use_objective_presentation = true;
89 $this->view();
90 //$this->__forwardToObjectivePresentation();
91 break;
92 }
93
94
95 if(!$cmd)
96 {
97 $cmd = $this->__getDefaultCommand();
98 }
99 $this->$cmd();
100 break;
101 }
102 }
103
105 {
106 global $ilAccess;
107
108 // edit timings if panel is on
109 if($_SESSION['crs_timings_panel'][$this->course_obj->getId()])
110 {
111 return 'editTimings';
112 }
113 if($ilAccess->checkAccess('write','',$this->container_obj->getRefId()))
114 {
115 return 'view';
116 }
117 if($this->container_obj->getType() == 'crs' and
118 $this->course_obj->getViewMode() == IL_CRS_VIEW_TIMING)
119 {
120 return 'editUserTimings';
121 }
122 return 'view';
123 }
124
126 {
127 include_once './Modules/Course/classes/class.ilCourseStart.php';
128
129 global $ilAccess,$ilUser;
130
131 if($ilAccess->checkAccess('write','',$this->course_obj->getRefId()))
132 {
133 return true;
134 }
135 $this->start_obj = new ilCourseStart($this->course_obj->getRefId(),$this->course_obj->getId());
136 if(count($this->start_obj->getStartObjects()) and !$this->start_obj->allFullfilled($ilUser->getId()))
137 {
138 return false;
139 }
140 return true;
141 }
142
144 {
145 include_once './Modules/Course/classes/class.ilCourseLMHistory.php';
146 include_once './Services/Repository/classes/class.ilRepositoryExplorer.php';
147 include_once './Services/Link/classes/class.ilLink.php';
148
149 global $rbacsystem,$ilias,$ilUser,$ilAccess,$ilObjDataCache;
150
151 $this->tabs_gui->setSubTabActive('crs_content');
152
153 $this->tpl->addBlockFile("ADM_CONTENT", "adm_content", "tpl.crs_start_view.html",'Modules/Course');
154 $this->tpl->setVariable("INFO_STRING",$this->lng->txt('crs_info_start'));
155 $this->tpl->setVariable("TBL_TITLE_START",$this->lng->txt('crs_table_start_objects'));
156 $this->tpl->setVariable("HEADER_NR",$this->lng->txt('crs_nr'));
157 $this->tpl->setVariable("HEADER_DESC",$this->lng->txt('description'));
158 $this->tpl->setVariable("HEADER_EDITED",$this->lng->txt('crs_objective_accomplished'));
159
160
161 $lm_continue = new ilCourseLMHistory($this->course_obj->getRefId(),$ilUser->getId());
162 $continue_data = $lm_continue->getLMHistory();
163
164 $counter = 0;
165 foreach($this->start_obj->getStartObjects() as $start)
166 {
167 $obj_id = $ilObjDataCache->lookupObjId($start['item_ref_id']);
168 $ref_id = $start['item_ref_id'];
169 $type = $ilObjDataCache->lookupType($obj_id);
170
172
173 $obj_link = ilLink::_getLink($ref_id,$type);
175 $obj_frame = $obj_frame ? $obj_frame : '';
176
177 // Tmp fix for tests
178 $obj_frame = $type == 'tst' ? '' : $obj_frame;
179
180 $contentObj = false;
181
182 if($ilAccess->checkAccess('read','',$ref_id))
183 {
184 $this->tpl->setCurrentBlock("start_read");
185 $this->tpl->setVariable("READ_TITLE_START",$ilObjDataCache->lookupTitle($obj_id));
186 $this->tpl->setVariable("READ_TARGET_START",$obj_frame);
187 $this->tpl->setVariable("READ_LINK_START", $obj_link.'&crs_show_result='.$this->course_obj->getRefId());
188 $this->tpl->parseCurrentBlock();
189 }
190 else
191 {
192 $this->tpl->setCurrentBlock("start_visible");
193 $this->tpl->setVariable("VISIBLE_LINK_START",$ilObjDataCache->lookupTitle($obj_id));
194 $this->tpl->parseCurrentBlock();
195 }
196
197 // CONTINUE LINK
198 if(isset($continue_data[$ref_id]))
199 {
200 $this->tpl->setCurrentBlock("link");
201 $this->tpl->setVariable("LINK_HREF",ilLink::_getLink($ref_id,'',array('obj_id',
202 $continue_data[$ref_id]['lm_page_id'])));
203 #$this->tpl->setVariable("CONTINUE_LINK_TARGET",$target);
204 $this->tpl->setVariable("LINK_NAME",$this->lng->txt('continue_work'));
205 $this->tpl->parseCurrentBlock();
206 }
207
208 // add to desktop link
209 if(!$ilUser->isDesktopItem($ref_id,$type) and
210 $this->course_obj->getAboStatus())
211 {
212 if ($ilAccess->checkAccess('read','',$ref_id))
213 {
214 $this->tpl->setCurrentBlock("link");
215 $this->ctrl->setParameterByClass(get_class($this->container_gui),'item_ref_id',$ref_id);
216 $this->ctrl->setParameterByClass(get_class($this->container_gui),'item_id',$ref_id);
217 $this->ctrl->setParameterByClass(get_class($this->container_gui),'type',$type);
218
219 $this->tpl->setVariable("LINK_HREF",$this->ctrl->getLinkTarget($this->container_gui,'addToDesk'));
220 $this->tpl->setVariable("LINK_NAME", $this->lng->txt("to_desktop"));
221 $this->tpl->parseCurrentBlock();
222 }
223 }
224 elseif($this->course_obj->getAboStatus())
225 {
226 $this->tpl->setCurrentBlock("link");
227 $this->ctrl->setParameterByClass(get_class($this->container_gui),'item_ref_id',$ref_id);
228 $this->ctrl->setParameterByClass(get_class($this->container_gui),'item_id',$ref_id);
229 $this->ctrl->setParameterByClass(get_class($this->container_gui),'type',$type);
230
231 $this->tpl->setVariable("LINK_HREF",$this->ctrl->getLinkTarget($this->container_gui,'removeFromDesk'));
232 $this->tpl->setVariable("LINK_NAME", $this->lng->txt("unsubscribe"));
233 $this->tpl->parseCurrentBlock();
234 }
235
236
237 // Description
238 if(strlen($ilObjDataCache->lookupDescription($obj_id)))
239 {
240 $this->tpl->setCurrentBlock("start_description");
241 $this->tpl->setVariable("DESCRIPTION_START",$ilObjDataCache->lookupDescription($obj_id));
242 $this->tpl->parseCurrentBlock();
243 }
244
245
246 if($this->start_obj->isFullfilled($ilUser->getId(),$ref_id))
247 {
248 $accomplished = 'accomplished';
249 $icon = ilUtil::getImagePath("icon_ok.svg");
250 }
251 else
252 {
253 $accomplished = 'not_accomplished';
254 $icon = ilUtil::getImagePath("icon_not_ok.svg");
255 }
256 $this->tpl->setCurrentBlock("start_row");
257 $this->tpl->setVariable("EDITED_IMG", $icon);
258 $this->tpl->setVariable("EDITED_ALT",$this->lng->txt('crs_objective_'.$accomplished));
259 $this->tpl->setVariable("ROW_CLASS",'option_value');
260 $this->tpl->setVariable("ROW_CLASS_CENTER",'option_value_center');
261 $this->tpl->setVariable("OBJ_NR_START",++$counter.'.');
262 $this->tpl->parseCurrentBlock();
263 }
264 return true;
265 }
266
270 function view()
271 {
272 // BEGIN ChangeEvent: record read event.
273 require_once('Services/Tracking/classes/class.ilChangeEvent.php');
274 global $ilUser;
275 $obj_id = ilObject::_lookupObjId($this->container_obj->getRefId());
277 $this->container_obj->getType(), $this->container_obj->getRefId(),
278 $obj_id, $ilUser->getId());
279 // END ChangeEvent: record read event.
280
281 $this->getCenterColumnHTML();
282
283 if (!$this->no_right_column)
284 {
285 $this->tpl->setRightContent($this->getRightColumnHTML());
286 }
287 }
288
293 {
294 global $ilUser, $lng, $ilCtrl, $ilAccess;
295
296 $ilCtrl->saveParameterByClass("ilcolumngui", "col_return");
297
298 $obj_id = ilObject::_lookupObjId($this->container_obj->getRefId());
299 $obj_type = ilObject::_lookupType($obj_id);
300
301 include_once("Services/Block/classes/class.ilColumnGUI.php");
302 $column_gui = new ilColumnGUI($obj_type, IL_COL_RIGHT);
303
304 if ($column_gui->getScreenMode() == IL_SCREEN_FULL)
305 {
306 return "";
307 }
308
309 $this->setColumnSettings($column_gui);
310
311 if ($ilCtrl->getNextClass() == "ilcolumngui" &&
312 $column_gui->getCmdSide() == IL_COL_RIGHT &&
313 $column_gui->getScreenMode() == IL_SCREEN_SIDE)
314 {
315
316 $html = $ilCtrl->forwardCommand($column_gui);
317 }
318 else
319 {
320 if (!$ilCtrl->isAsynch())
321 {
322 $html = $ilCtrl->getHTML($column_gui);
323 }
324 }
325
326 return $html;
327 }
328
329 function setColumnSettings($column_gui)
330 {
331 global $ilAccess, $lng;
332
333 $column_gui->setRepositoryMode(true);
334 $column_gui->setEnableEdit(false);
335 $column_gui->setBlockProperty("news", "title",
336 $lng->txt("crs_news"));
337
338 include_once "Services/Object/classes/class.ilObjectActivation.php";
339 $grouped_items = array();
340 foreach(ilObjectActivation::getItems($this->container_obj->getRefId()) as $item)
341 {
342 $grouped_items[$item["type"]][] = $item;
343 }
344
345 $column_gui->setRepositoryItems($grouped_items);
346 if ($ilAccess->checkAccess("write", "", $this->container_obj->getRefId()))
347 {
348 $column_gui->setEnableEdit(true);
349 }
350
351 // Allow movement of blocks for tutors
352 if ($this->is_tutor &&
353 $this->container_gui->isActiveAdministrationPanel())
354 {
355 $column_gui->setEnableMovement(true);
356 }
357
358 // Configure Settings, if administration panel is on
359 if ($this->is_tutor)
360 {
361 $column_gui->setBlockProperty("news", "settings", true);
362 //$column_gui->setBlockProperty("news", "public_notifications_option", true);
363 $column_gui->setBlockProperty("news", "default_visibility_option", true);
364 $column_gui->setBlockProperty("news", "hide_news_block_option", true);
365 }
366
367 if ($this->container_gui->isActiveAdministrationPanel())
368 {
369 $column_gui->setAdminCommands(true);
370 }
371 }
372
373
378 {
379 global $ilCtrl, $ilAccess;
380
381 include_once("Services/Block/classes/class.ilColumnGUI.php");
382
383 $obj_id = ilObject::_lookupObjId($this->container_obj->getRefId());
384 $obj_type = ilObject::_lookupType($obj_id);
385
386 if (!$ilCtrl->isAsynch())
387 {
388 //if ($column_gui->getScreenMode() != IL_SCREEN_SIDE)
390 {
391 // right column wants center
393 {
394 $column_gui = new ilColumnGUI($obj_type, IL_COL_RIGHT);
395 $this->setColumnSettings($column_gui);
396 $html = $ilCtrl->forwardCommand($column_gui);
397 }
398 // left column wants center
400 {
401 $column_gui = new ilColumnGUI($obj_type, IL_COL_LEFT);
402 $this->setColumnSettings($column_gui);
403 $html = $ilCtrl->forwardCommand($column_gui);
404 }
405 }
406 else
407 {
408 {
409 $this->getDefaultView();
410 }
411 }
412 }
413
414 return $html;
415 }
416
417 function editTimings()
418 {
419 global $ilAccess,$ilErr;
420
421 include_once 'Services/MetaData/classes/class.ilMDEducational.php';
422 include_once './Services/Link/classes/class.ilLink.php';
423
424 $this->lng->loadLanguageModule('meta');
425
426 if(!$ilAccess->checkAccess('write','',$this->container_obj->getRefId()))
427 {
428 $ilErr->raiseError($this->lng->txt('msg_no_perm_write'),$ilErr->WARNING);
429 }
430 $this->__showTimingsPanel();
431 $this->tabs_gui->setSubTabActive('timings_timings');
432
433 include_once 'Services/Object/classes/class.ilObjectActivation.php';
434 $this->cont_arr = ilObjectActivation::getTimingsAdministrationItems($this->container_obj->getRefId());
435
436 $this->tpl->addBlockfile('ADM_CONTENT','adm_content','tpl.crs_edit_items.html','Modules/Course');
437 $this->tpl->setVariable("FORMACTION",$this->ctrl->getFormAction($this));
438 $this->tpl->setVariable("HEADER_IMG",ilUtil::getImagePath('icon_crs.svg'));
439 $this->tpl->setVariable("HEADER_ALT",$this->lng->txt('crs_materials'));
440 $this->tpl->setVariable("BLOCK_HEADER_CONTENT",$this->lng->txt('edit_timings_list'));
441 $this->tpl->setVariable("TXT_TITLE",$this->lng->txt('title'));
442
443
444 $this->tpl->setVariable("TXT_DURATION",$this->lng->txt('crs_timings_time_frame'));
445 $this->tpl->setVariable("TXT_INFO_DURATION",$this->lng->txt('crs_timings_in_days'));
446
447 $this->tpl->setVariable("TXT_START_END",$this->lng->txt('crs_timings_short_start_end'));
448 $this->tpl->setVariable("TXT_INFO_START_END",$this->lng->txt('crs_timings_start_end_info'));
449
450 $this->tpl->setVariable("TXT_CHANGEABLE",$this->lng->txt('crs_timings_short_changeable'));
451
452 $this->tpl->setVariable("TXT_INFO_LIMIT",$this->lng->txt('crs_timings_from_until'));
453 $this->tpl->setVariable("TXT_LIMIT",$this->lng->txt('crs_timings_short_limit_start_end'));
454 $this->tpl->setVariable("TXT_ACTIVE",$this->lng->txt('crs_timings_short_active'));
455 $this->tpl->setVariable("TXT_INFO_ACTIVE",$this->lng->txt('crs_timings_info_active'));
456
457 $counter = 0;
458 foreach($this->cont_arr as $item)
459 {
460 if($item['type'] == 'itgr')
461 {
462 continue;
463 }
464 $item = $this->__loadFromPost($item);
465 $item_prefix = "item[$item[ref_id]]";
466 $item_change_prefix = "item_change[$item[ref_id]]";
467 $item_active_prefix = "item_active[$item[ref_id]]";
468
469 if($item['type'] == 'grp' or
470 $item['type'] == 'fold')
471 {
472 $this->tpl->setVariable("TITLE_LINK",ilLink::_getLink($item['ref_id'],$item['type']));
473 $this->tpl->setVariable("TITLE_FRAME",ilFrameTargetInfo::_getFrame('MainContent',$item['type']));
474 $this->tpl->setVariable("TITLE_LINK_NAME",$item['title']);
475 }
476 else
477 {
478 if(!$item['title'] &&
479 $item['type'] == 'sess')
480 {
481 include_once('./Modules/Session/classes/class.ilSessionAppointment.php');
483 $item['title'] = ilSessionAppointment::_appointmentToString($app_info['start'], $app_info['end'],$app_info['fullday']);
484 }
485
486 $this->tpl->setVariable("TITLE",$item['title']);
487 }
488
489 if(strlen($item['description']))
490 {
491 $this->tpl->setCurrentBlock("item_description");
492 $this->tpl->setVariable("DESC",$item['description']);
493 $this->tpl->parseCurrentBlock();
494 }
495
496 if($tlt = ilMDEducational::_getTypicalLearningTimeSeconds($item['obj_id']))
497 {
498 $this->tpl->setCurrentBlock("tlt");
499 $this->tpl->setVariable("TXT_TLT",$this->lng->txt('meta_typical_learning_time'));
500 $this->tpl->setVariable("TLT_VAL",ilDatePresentation::secondsToString($tlt));
501 $this->tpl->parseCurrentBlock();
502 }
503
504 $this->tpl->setCurrentBlock("container_standard_row");
505
506 // Suggested
507 if(is_array($_POST['item']["$item[ref_id]"]['sug_start']))
508 {
509 $start = $this->__toUnix($_POST['item']["$item[ref_id]"]['sug_start']);
510 }
511 else
512 {
513 $start = $item['suggestion_start'];
514 }
515 $end = $item['suggestion_end'];
516 $date = $this->__prepareDateSelect($start);
517 $this->tpl->setVariable("SUG_START",
518 ilUtil::makeDateSelect($item_prefix."[sug_start]",
519 $date['y'],$date['m'],$date['d'],date('Y',time()),false));
520
521 $this->tpl->setVariable("NAME_DURATION_A",$item_prefix."[duration_a]");
522 if(isset($_POST['item']["$item[ref_id]"]['duration_a']))
523 {
524 $this->tpl->setVariable("VAL_DURATION_A",abs($_POST['item']["$item[ref_id]"]['duration_a']));
525 }
526 else
527 {
528 $this->tpl->setVariable("VAL_DURATION_A",intval(($end-$start)/(60*60*24)));
529 }
530
531 $this->tpl->setVariable('SUG_END',ilDatePresentation::formatDate(new ilDate($item['suggestion_end'],IL_CAL_UNIX)));
532
533 // Limit
534 if(is_array($_POST['item']["$item[ref_id]"]['lim_end']))
535 {
536 $end = $this->__toUnix($_POST['item']["$item[ref_id]"]['lim_end']);
537 }
538 else
539 {
540 $end = $item['latest_end'];
541 }
542
543 $date = $this->__prepareDateSelect($end);
544 $this->tpl->setVariable("LIM_END",
545 ilUtil::makeDateSelect($item_prefix."[lim_end]",
546 $date['y'],$date['m'],$date['d'],date('Y',time()),false));
547
548 $this->tpl->setVariable("NAME_CHANGE",$item_change_prefix."[change]");
549 $this->tpl->setVariable("NAME_ACTIVE",$item_active_prefix."[active]");
550
551 if(isset($_POST['item']))
552 {
553 $change = $_POST['item_change']["$item[ref_id]"]['change'];
554 $active = $_POST['item_active']["$item[ref_id]"]['active'];
555 }
556 else
557 {
558 $change = $item['changeable'];
559 $active = ($item['timing_type'] == ilObjectActivation::TIMINGS_PRESETTING);
560 }
561
562 $this->tpl->setVariable("CHECKED_ACTIVE",$active ? 'checked="checked"' : '');
563 $this->tpl->setVariable("CHECKED_CHANGE",$change ? 'checked="checked"' : '');
564
565 if(isset($this->failed["$item[ref_id]"]))
566 {
567 $this->tpl->setVariable("ROWCLASS",'tblrowmarked');
568 }
569 else
570 {
571 $this->tpl->setVariable("ROWCLASS",ilUtil::switchColor($counter++,'tblrow1','tblrow2'));
572 }
573 $this->tpl->parseCurrentBlock();
574 }
575
576 // Select all
577 $this->tpl->setVariable("CHECKCLASS",ilUtil::switchColor($counter++,'tblrow1','tblrow2'));
578 $this->tpl->setVariable("SELECT_ALL",$this->lng->txt('select_all'));
579
580 $this->tpl->setVariable("BTN_SAVE",$this->lng->txt('save'));
581 $this->tpl->setVariable("BTN_CANCEL",$this->lng->txt('cancel'));
582
583 }
584
586 {
587 global $ilUser;
588
589 include_once 'Modules/Course/classes/Timings/class.ilTimingAccepted.php';
590 $accept_obj = new ilTimingAccepted($this->course_obj->getId(),$ilUser->getId());
591
592 include_once('Services/Form/classes/class.ilPropertyFormGUI.php');
593 $form = new ilPropertyFormGUI();
594 $form->setFormAction($this->ctrl->getFormAction($this, 'saveAcceptance'));
595 $form->setTitle($this->lng->txt('timing_accept_table'));
596
597 $accept = new ilCheckboxInputGUI($this->lng->txt('timing_user_accept'), "accepted");
598 $accept->setChecked($accept_obj->isAccepted());
599 $form->addItem($accept);
600
601 $remark = new ilTextAreaInputGUI($this->lng->txt('timing_remark'), "remark");
602 $remark->setValue($accept_obj->getRemark());
603 $form->addItem($remark);
604
605 $tutor = new ilCheckboxInputGUI($this->lng->txt('timing_tutor_visible'), "tutor");
606 $tutor->setChecked($accept_obj->isVisible());
607 $form->addItem($tutor);
608
609 $form->addCommandButton('saveAcceptance', $this->lng->txt('save'));
610 $this->tpl->setVariable("FORM", $form->getHTML());
611 }
612
613 function saveAcceptance()
614 {
615 global $ilUser;
616
617 include_once 'Modules/Course/classes/Timings/class.ilTimingAccepted.php';
618 $accept_obj = new ilTimingAccepted($this->course_obj->getId(),$ilUser->getId());
619
620 $accept_obj->setRemark(ilUtil::stripSlashes($_POST['remark']));
621 $accept_obj->accept($_POST['accepted']);
622 $accept_obj->setVisible($_POST['tutor']);
623 $accept_obj->update();
624 ilUtil::sendSuccess($this->lng->txt('settings_saved'));
625 $this->editUserTimings();
626 }
627
629 {
630 if($_SESSION['crs_timings_panel'][$this->course_obj->getId()])
631 {
632 return $this->editTimings();
633 }
634 global $ilAccess,$ilErr;
635
636 if(!$ilAccess->checkAccess('read','',$this->container_obj->getRefId()))
637 {
638 $ilErr->raiseError($this->lng->txt('msg_no_perm_read'),$ilErr->WARNING);
639 }
640 $this->tabs_gui->setSubTabActive('timings_timings');
641
642 $_SESSION['crs_timings_user_hidden'] = isset($_GET['show_details']) ? $_GET['show_details'] : $_SESSION['crs_timings_user_hidden'];
643
644 include_once 'Services/Object/classes/class.ilObjectActivation.php';
645 if(ilObjectActivation::hasChangeableTimings($this->course_obj->getRefId()))
646 {
648 }
649 else
650 {
651 $this->__editUserTimings();
652 }
653 }
654
656 {
657 $this->ctrl->returnToParent($this);
658 }
659
661 {
662 $this->tpl->addBlockfile('ADM_CONTENT','adm_content','tpl.crs_user_timings.html','Modules/Course');
663 $this->tabs_gui->clearSubTabs();
664 $this->tabs_gui->setTabActive('members');
665
666 if(!$_GET['member_id'])
667 {
668 ilUtil::sendFailure($this->lng->txt('no_checkbox'),true);
669 $this->ctrl->returnToParent($this);
670 }
671
672
673 // Back button
674 $this->tpl->addBlockfile("BUTTONS", "buttons", "tpl.buttons.html");
675 $this->tpl->setCurrentBlock("btn_cell");
676 $this->tpl->setVariable("BTN_LINK",$this->ctrl->getLinkTarget($this,'returnToMembers'));
677 $this->tpl->setVariable("BTN_TXT",$this->lng->txt("back"));
678 $this->tpl->parseCurrentBlock();
679
680 include_once 'Modules/Course/classes/Timings/class.ilTimingAccepted.php';
681 $usr_accepted = new ilTimingAccepted($this->course_obj->getId(),(int) $_GET['member_id']);
682
683 if($usr_accepted->isAccepted())
684 {
685 $this->tpl->setVariable("ACC_IMG",ilUtil::getImagePath('icon_ok.svg'));
686 $this->tpl->setVariable("ACC_ALT",$this->lng->txt('timing_accepted'));
687 }
688 else
689 {
690 $this->tpl->setVariable("ACC_IMG",ilUtil::getImagePath('icon_not_ok.svg'));
691 $this->tpl->setVariable("ACC_ALT",$this->lng->txt('timing_not_accepted'));
692 }
693 if($usr_accepted->isVisible() and strlen($usr_accepted->getRemark()))
694 {
695 $this->tpl->setVariable("REMARK",nl2br($usr_accepted->getRemark()));
696 }
697 else
698 {
699 $this->tpl->setVariable("REMARK",$this->lng->txt('not_available'));
700 }
701
702 $this->tpl->setVariable("TIMING_ACCEPT",$this->lng->txt('timing_accept_table'));
703 $this->tpl->setVariable("TXT_ACCEPTED",$this->lng->txt('timing_user_accepted'));
704 $this->tpl->setVariable("TXT_REMARK",$this->lng->txt('timing_remark'));
705
706 $this->tpl->setVariable("HEADER_IMG",ilUtil::getImagePath('icon_usr.svg'));
707 $this->tpl->setVariable("HEADER_ALT",$this->lng->txt('obj_usr'));
708 $this->tpl->setVariable("TABLE_HEADER",$this->lng->txt('timings_of'));
709 $name = ilObjUser::_lookupName($_GET['member_id']);
710 $this->tpl->setVariable("USER_NAME",$name['lastname'].', '.$name['firstname']);
711
712 $this->tpl->setVariable("TXT_TITLE",$this->lng->txt('title'));
713 $this->tpl->setVariable("TXT_START_END",$this->lng->txt('crs_timings_short_start_end'));
714 $this->tpl->setVariable("TXT_INFO_START_END",$this->lng->txt('crs_timings_start_end_info'));
715 $this->tpl->setVariable("TXT_CHANGED",$this->lng->txt('crs_timings_changed'));
716 $this->tpl->setVariable("TXT_OWN_PRESETTING",$this->lng->txt('crs_timings_planed_start'));
717 $this->tpl->setVariable("TXT_INFO_OWN_PRESETTING",$this->lng->txt('crs_timings_from_until'));
718
719 include_once 'Services/Object/classes/class.ilObjectActivation.php';
720 $items = ilObjectActivation::getTimingsAdministrationItems($this->course_obj->getRefId());
721 foreach($items as $item)
722 {
723 if(($item['timing_type'] == ilObjectActivation::TIMINGS_PRESETTING) or
725 {
726 $this->__renderUserItem($item,0);
727 }
728 }
729 }
730
731 function __renderUserItem($item,$level)
732 {
733 include_once 'Modules/Course/classes/Timings/class.ilTimingPlaned.php';
734 include_once './Services/MetaData/classes/class.ilMDEducational.php';
735
736 $this->lng->loadLanguageModule('meta');
737
738 $usr_planed = new ilTimingPlaned($item['ref_id'],$_GET['member_id']);
739 for($i = 0;$i < $level;$i++)
740 {
741 $this->tpl->touchBlock('start_indent');
742 $this->tpl->touchBlock('end_indent');
743 }
744 if(strlen($item['description']))
745 {
746 $this->tpl->setCurrentBlock("item_description");
747 $this->tpl->setVariable("DESC",$item['description']);
748 $this->tpl->parseCurrentBlock();
749 }
750 if($tlt = ilMDEducational::_getTypicalLearningTimeSeconds($item['obj_id']))
751 {
752 $this->tpl->setCurrentBlock("tlt");
753 $this->tpl->setVariable("TXT_TLT",$this->lng->txt('meta_typical_learning_time'));
754 $this->tpl->setVariable("TLT_VAL",ilDatePresentation::secondsToString($tlt));
755 $this->tpl->parseCurrentBlock();
756 }
757
758 if(!$item['title'] &&
759 $item['type'] == 'sess')
760 {
761 include_once('./Modules/Session/classes/class.ilSessionAppointment.php');
763 $item['title'] = ilSessionAppointment::_appointmentToString($app_info['start'], $app_info['end'],$app_info['fullday']);
764 }
765
766 $this->tpl->setCurrentBlock("title_plain");
767 $this->tpl->setVariable("TITLE",$item['title']);
768 $this->tpl->parseCurrentBlock();
769
770 $this->tpl->setCurrentBlock("container_standard_row");
771
772 $this->tpl->setVariable("ROWCLASS",ilUtil::switchColor($this->counter++,'tblrow1','tblrow2'));
773 #$this->tpl->setVariable("TYPE_IMG",ilUtil::getImagePath('icon_'.$item['type'].'.svg'));
774 $this->tpl->setVariable('TYPE_IMG',ilUtil::getTypeIconPath($item['type'],$item['obj_id'],'tiny'));
775 $this->tpl->setVariable("TYPE_ALT_IMG",$this->lng->txt('obj_'.$item['type']));
776
777 if($item['timing_type'] == ilObjectActivation::TIMINGS_PRESETTING)
778 {
779 $this->tpl->setVariable('SUG_START',ilDatePresentation::formatDate(new ilDate($item['suggestion_start'],IL_CAL_UNIX)));
780 $this->tpl->setVariable('SUG_END',ilDatePresentation::formatDate(new ilDate($item['suggestion_end'],IL_CAL_UNIX)));
781 }
782
783 if($item['changeable'] and $item['timing_type'] == ilObjectActivation::TIMINGS_PRESETTING)
784 {
785 if($usr_planed->getPlanedStartingTime())
786 {
787 $start = $usr_planed->getPlanedStartingTime();
788 }
789 else
790 {
791 $start = $item['suggestion_start'];
792 }
793 $this->tpl->setVariable('OWN_START',ilDatePresentation::formatDate(new ilDate($start,IL_CAL_UNIX)));
794
795 if($usr_planed->getPlanedEndingTime())
796 {
797 $end = $usr_planed->getPlanedEndingTime();
798 }
799 else
800 {
801 $end = $item['suggestion_end'];
802 }
803 if($start != $item['suggestion_start'] or $end != $item['suggestion_end'])
804 {
805 $this->tpl->setVariable("OK_IMG",ilUtil::getImagePath('icon_ok.svg'));
806 $this->tpl->setVariable("OK_ALT",$this->lng->txt('crs_timings_changed'));
807 }
808 else
809 {
810 $this->tpl->setVariable("OK_IMG",ilUtil::getImagePath('icon_not_ok.svg'));
811 $this->tpl->setVariable("OK_ALT",$this->lng->txt('crs_timings_not_changed'));
812 }
813 $this->tpl->setVariable('OWN_END',ilDatePresentation::formatDate(new ilDate($end,IL_CAL_UNIX)));
814 }
815
816 $this->tpl->parseCurrentBlock();
817
818 foreach(ilObjectActivation::getTimingsAdministrationItems($item['ref_id']) as $item_data)
819 {
820 if(($item_data['timing_type'] == ilObjectActivation::TIMINGS_PRESETTING) or
821 ilObjectActivation::hasChangeableTimings($item_data['ref_id']))
822 {
823 $this->__renderUserItem($item_data,$level+1);
824 }
825 }
826 }
827
828
829
831 {
832 $this->tpl->addBlockfile('ADM_CONTENT','adm_content','tpl.crs_usr_edit_timings_adv.html','Modules/Course');
833 $this->__showTimingsPanel();
835
836 $this->tpl->setVariable("FORMACTION",$this->ctrl->getFormAction($this));
837 $this->tpl->setVariable("HEADER_IMG",ilUtil::getImagePath('icon_crs.svg'));
838 $this->tpl->setVariable("HEADER_ALT",$this->lng->txt('obj_crs'));
839 $this->tpl->setVariable("BLOCK_HEADER_CONTENT",$this->lng->txt('timings_usr_edit'));
840
841 if(!$_SESSION['crs_timings_user_hidden'])
842 {
843 $this->tpl->setVariable("SHOW_HIDE_TEXT",$this->lng->txt('show_details'));
844 $this->ctrl->setParameter($this,'show_details',1);
845 $this->tpl->setVariable("SHOW_HIDE_LINK",$this->ctrl->getLinkTarget($this,'editUserTimings'));
846 }
847 else
848 {
849 $this->tpl->setVariable("SHOW_HIDE_TEXT",$this->lng->txt('hide_details'));
850 $this->ctrl->setParameter($this,'show_details',0);
851 $this->tpl->setVariable("SHOW_HIDE_LINK",$this->ctrl->getLinkTarget($this,'editUserTimings'));
852 }
853 $this->ctrl->clearParameters($this);
854 $this->tpl->setVariable("TXT_TITLE",$this->lng->txt('title'));
855 $this->tpl->setVariable("TXT_START_END",$this->lng->txt('crs_timings_short_start_end'));
856 $this->tpl->setVariable("TXT_INFO_START_END",$this->lng->txt('crs_timings_start_end_info'));
857
858 $this->tpl->setVariable("TXT_LIMIT",$this->lng->txt('crs_timings_short_limit_start_end'));
859 $this->tpl->setVariable("TXT_INFO_LIMIT",$this->lng->txt('crs_timings_from_until'));
860
861 $this->tpl->setVariable("TXT_OWN_PRESETTING",$this->lng->txt('crs_timings_planed_start'));
862 $this->tpl->setVariable("TXT_INFO_OWN_PRESETTING",$this->lng->txt('crs_timings_start_end_info'));
863
864 $this->tpl->setVariable("TXT_DURATION",$this->lng->txt('crs_timings_time_frame'));
865 $this->tpl->setVariable("TXT_INFO_DURATION",$this->lng->txt('crs_timings_in_days'));
866
867 $this->tpl->setVariable("TXT_BTN_UPDATE",$this->lng->txt('save'));
868 $this->tpl->setVariable("TXT_CANCEL",$this->lng->txt('cancel'));
869
870 include_once 'Services/Object/classes/class.ilObjectActivation.php';
871 $sorted_items = ilObjectActivation::getTimingsItems($this->course_obj->getRefId());
872
873 $this->counter = 0;
874 foreach($sorted_items as $item)
875 {
876 switch($item['type'])
877 {
878 case 'itgr':
879 break;
880
881 default:
882 $this->__renderItem($item,0);
883 break;
884 }
885 }
886 }
887
889 {
890 $this->tpl->addBlockfile('ADM_CONTENT','adm_content','tpl.crs_usr_edit_timings.html','Modules/Course');
891
892 $this->__showTimingsPanel();
894
895 $this->tpl->setVariable("FORMACTION",$this->ctrl->getFormAction($this));
896 $this->tpl->setVariable("HEADER_IMG",ilUtil::getImagePath('icon_crs.svg'));
897 $this->tpl->setVariable("HEADER_ALT",$this->lng->txt('obj_crs'));
898
899 if(!$_SESSION['crs_timings_user_hidden'])
900 {
901 $this->tpl->setVariable("SHOW_HIDE_TEXT",$this->lng->txt('show_details'));
902 $this->ctrl->setParameter($this,'show_details',1);
903 $this->tpl->setVariable("SHOW_HIDE_LINK",$this->ctrl->getLinkTarget($this,'editUserTimings'));
904 }
905 else
906 {
907 $this->tpl->setVariable("SHOW_HIDE_TEXT",$this->lng->txt('hide_details'));
908 $this->ctrl->setParameter($this,'show_details',0);
909 $this->tpl->setVariable("SHOW_HIDE_LINK",$this->ctrl->getLinkTarget($this,'editUserTimings'));
910 }
911 $this->ctrl->clearParameters($this);
912
913 $this->tpl->setVariable("BLOCK_HEADER_CONTENT",$this->lng->txt('timings_timings'));
914 $this->tpl->setVariable("TXT_TITLE",$this->lng->txt('title'));
915 $this->tpl->setVariable("TXT_START",$this->lng->txt('crs_timings_sug_begin'));
916 $this->tpl->setVariable("TXT_END",$this->lng->txt('crs_timings_sug_end'));
917
918 include_once 'Services/Object/classes/class.ilObjectActivation.php';
919 $sorted_items = ilObjectActivation::getTimingsItems($this->course_obj->getRefId());
920
921 $this->counter = 0;
922 foreach($sorted_items as $item)
923 {
924 switch($item['type'])
925 {
926 case 'itgr':
927 break;
928
929 default:
930 $this->__renderItem($item,0);
931 break;
932 }
933 }
934 }
935
936 function __renderItem($item,$level)
937 {
938 global $ilUser,$ilAccess;
939
940 include_once 'Modules/Course/classes/Timings/class.ilTimingPlaned.php';
941 include_once './Services/Link/classes/class.ilLink.php';
942 include_once './Services/MetaData/classes/class.ilMDEducational.php';
943
944 if(!$ilAccess->checkAccess('visible','',$item['ref_id']))
945 {
946 return false;
947 }
948
949 $this->lng->loadLanguageModule('meta');
950
951 $usr_planed = new ilTimingPlaned($item['ref_id'],$ilUser->getId());
952
953 for($i = 0;$i < $level;$i++)
954 {
955 $this->tpl->touchBlock('start_indent');
956 $this->tpl->touchBlock('end_indent');
957 }
958 if(strlen($item['description']))
959 {
960 $this->tpl->setCurrentBlock("item_description");
961 $this->tpl->setVariable("DESC",$item['description']);
962 $this->tpl->parseCurrentBlock();
963 }
964 if($tlt = ilMDEducational::_getTypicalLearningTimeSeconds($item['obj_id']))
965 {
966 $this->tpl->setCurrentBlock("tlt");
967 $this->tpl->setVariable("TXT_TLT",$this->lng->txt('meta_typical_learning_time'));
968 $this->tpl->setVariable("TLT_VAL",ilDatePresentation::secondsToString($tlt));
969 $this->tpl->parseCurrentBlock();
970 }
971
972 if(!$item['title'] &&
973 $item['type'] == 'sess')
974 {
975 include_once('./Modules/Session/classes/class.ilSessionAppointment.php');
977 $item['title'] = ilSessionAppointment::_appointmentToString($app_info['start'], $app_info['end'],$app_info['fullday']);
978 }
979
980 if($ilAccess->checkAccess('read','',$item['ref_id']))
981 {
982 $this->tpl->setCurrentBlock("title_as_link");
983 $this->tpl->setVariable("TITLE_LINK",ilLink::_getLink($item['ref_id'],$item['type']));
984 $this->tpl->setVariable("TITLE_NAME",$item['title']);
985 $this->tpl->parseCurrentBlock();
986 }
987 else
988 {
989 $this->tpl->setCurrentBlock("title_plain");
990 $this->tpl->setVariable("TITLE",$item['title']);
991 $this->tpl->parseCurrentBlock();
992 }
993 $this->tpl->setCurrentBlock("container_standard_row");
994
995 if(isset($this->invalid["$item[ref_id]"]))
996 {
997 $this->tpl->setVariable("ROWCLASS",'tblrowmarked');
998 }
999 else
1000 {
1001 $this->tpl->setVariable("ROWCLASS",ilUtil::switchColor($this->counter++,'tblrow1','tblrow2'));
1002 }
1003 #$this->tpl->setVariable("TYPE_IMG",ilUtil::getImagePath('icon_'.$item['type'].'.svg'));
1004 $this->tpl->setVariable('TYPE_IMG',ilUtil::getTypeIconPath($item['type'],$item['obj_id'],'small'));
1005 $this->tpl->setVariable("TYPE_ALT_IMG",$this->lng->txt('obj_'.$item['type']));
1006
1007
1008 if($item['timing_type'] == ilObjectActivation::TIMINGS_PRESETTING)
1009 {
1010 $this->tpl->setVariable('SUG_START',ilDatePresentation::formatDate(new ilDate($item['suggestion_start'],IL_CAL_UNIX)));
1011 $this->tpl->setVariable('SUG_END',ilDatePresentation::formatDate(new ilDate($item['suggestion_end'],IL_CAL_UNIX)));
1012 }
1013
1014 if($item['changeable'])
1015 {
1016 $item_prefix = "item[".$item['ref_id'].']';
1017
1018 if(is_array($_POST['item']["$item[ref_id]"]['own_start']))
1019 {
1020 #echo "Start post<br>";
1021 $start = $this->__toUnix($_POST['item']["$item[ref_id]"]['own_start']);
1022 }
1023 elseif($usr_planed->getPlanedStartingTime())
1024 {
1025 #echo "Own start<br>";
1026 $start = $usr_planed->getPlanedStartingTime();
1027 }
1028 else
1029 {
1030 #echo "Empfehlung start<br>";
1031 $start = $item['suggestion_start'];
1032 }
1033
1034 $date = $this->__prepareDateSelect($start);
1035 $this->tpl->setVariable("OWN_START",
1036 ilUtil::makeDateSelect($item_prefix."[own_start]",
1037 $date['y'],$date['m'],$date['d'],date('Y',time()),false));
1038
1039 if($usr_planed->getPlanedEndingTime())
1040 {
1041 #echo "Own End<br>";
1042 $end = $usr_planed->getPlanedEndingTime();
1043 }
1044 else
1045 {
1046 #echo "Empfehlung end<br>";
1047 $end = $item['suggestion_end'];
1048 }
1049 $this->tpl->setVariable('OWN_END',ilDatePresentation::formatDate(new ilDate($end,IL_CAL_UNIX)));
1050 $this->tpl->setVariable("NAME_DURATION",$item_prefix."[duration]");
1051
1052 // Duration
1053 if(isset($_POST['item']["$item[ref_id]"]['duration']))
1054 {
1055 $this->tpl->setVariable("VAL_DURATION",$_POST['item']["$item[ref_id]"]['duration']);
1056 }
1057 else
1058 {
1059 $this->tpl->setVariable("VAL_DURATION",intval(($end - $start) / (60 * 60 * 24)));
1060 }
1061 $this->tpl->setVariable('LIM_START',ilDatePresentation::formatDate(new ilDate($item['earliest_start'],IL_CAL_UNIX)));
1062 $this->tpl->setVariable('LIM_END',ilDatePresentation::formatDate(new ilDate($item['latest_end'],IL_CAL_UNIX)));
1063 }
1064
1065 $this->tpl->parseCurrentBlock();
1066
1067 if(!$_SESSION['crs_timings_user_hidden'])
1068 {
1069 return true;
1070 }
1071
1072 foreach(ilObjectActivation::getTimingsItems($item['ref_id']) as $item_data)
1073 {
1074 $this->__renderItem($item_data,$level+1);
1075 }
1076 }
1077
1079 {
1080 global $ilAccess, $ilToolbar;
1081
1082 if(!$ilAccess->checkAccess('write','',$this->container_obj->getRefId()))
1083 {
1084 return true;
1085 }
1086
1087 include_once "Services/UIComponent/Button/classes/class.ilLinkButton.php";
1089
1090 if(!$_SESSION['crs_timings_panel'][$this->course_obj->getId()])
1091 {
1092 $btn->setCaption("timings_timings_on");
1093 $btn->setUrl($this->ctrl->getLinkTarget($this,'timingsOn'));
1094 }
1095 else
1096 {
1097 $btn->setCaption("timings_timings_off");
1098 $btn->setUrl($this->ctrl->getLinkTarget($this,'timingsOff'));
1099 }
1100
1101 $ilToolbar->addButtonInstance($btn);
1102 }
1103
1104 function timingsOn()
1105 {
1106 global $ilTabs;
1107 $_SESSION['crs_timings_panel'][$this->course_obj->getId()] = 1;
1108
1109 $ilTabs->clearSubTabs();
1110 $this->__setSubTabs();
1111 $this->editTimings();
1112 }
1113
1114 function timingsOff()
1115 {
1116 global $ilTabs;
1117 $_SESSION['crs_timings_panel'][$this->course_obj->getId()] = 0;
1118
1119 $ilTabs->clearSubTabs();
1120 $this->__setSubTabs();
1121 $this->editUserTimings();
1122 }
1123
1124
1126 {
1127 global $ilUser,$ilObjDataCache;
1128 include_once 'Modules/Course/classes/Timings/class.ilTimingPlaned.php';
1129
1130 // Validate
1131 $this->invalid = array();
1132 foreach($_POST['item'] as $ref_id => $data)
1133 {
1134 $tmp_planed = new ilTimingPlaned($ref_id,$ilUser->getId());
1135
1136 $tmp_planed->setPlanedStartingTime($this->__toUnix($data['own_start']));
1137 if(isset($data['duration']))
1138 {
1139 $data['own_start']['d'] += $data['duration'];
1140 $tmp_planed->setPlanedEndingTime($this->__toUnix($data['own_start'],array('h' => 23,'m' => 55)));
1141 }
1142 else
1143 {
1144 $tmp_planed->setPlanedEndingTime($this->__toUnix($data['own_start']),array('h' => 23,'m' => 55));
1145 }
1146 if(!$tmp_planed->validate())
1147 {
1148 $this->invalid[$ref_id] = $ilObjDataCache->lookupTitle($ilObjDataCache->lookupObjId($ref_id));
1149 }
1150 $all_items[] = $tmp_planed;
1151 }
1152 if(count($this->invalid))
1153 {
1154 $message = $this->lng->txt('crs_timings_update_error');
1155 $message .= ("<br />".$this->lng->txt('crs_materials').': ');
1156 $message .= (implode(',',$this->invalid));
1157 ilUtil::sendFailure($message);
1158 $this->editUserTimings();
1159 return false;
1160 }
1161 foreach($all_items as $new_item_obj)
1162 {
1163 $new_item_obj->update();
1164 }
1165 ilUtil::sendSuccess($this->lng->txt('settings_saved'));
1166 $this->editUserTimings();
1167 return true;
1168
1169 }
1170
1171
1172 function &__loadFromPost(&$item)
1173 {
1174 $obj_id = $item['obj_id'];
1175
1176 if(!isset($_POST['item'][$obj_id]))
1177 {
1178 return $item;
1179 }
1180 $item['suggestion_start'] = $this->__toUnix($_POST['item'][$obj_id]['sug_start']);
1181 if(isset($_POST['item'][$obj_id]['sug_end']))
1182 {
1183 // #9325
1184 $item['suggestion_end'] = $this->__toUnix($_POST['item'][$obj_id]['sug_end']);
1185 }
1186 $item['earliest_start'] = $this->__toUnix($_POST['item'][$obj_id]['lim_start']);
1187 $item['latest_end'] = $this->__toUnix($_POST['item'][$obj_id]['lim_end']);
1188 $item['changeable'] = $_POST['item'][$obj_id]['change'];
1189 $item['timing_type'] = $_POST['item'][$obj_id]['active'] ? ilObjectActivation::TIMINGS_PRESETTING : $item['timing_type'];
1190 $item['duration_a'] = $_POST['item'][$obj_id]['duration_a'];
1191 $item['duration_b'] = $_POST['item'][$obj_id]['duration_b'];
1192
1193 return $item;
1194 }
1195
1196 function updateTimings()
1197 {
1198 include_once 'Services/Object/classes/class.ilObjectActivation.php';
1199
1200 global $ilAccess,$ilErr;
1201
1202 if(!$ilAccess->checkAccess('write','',$this->container_obj->getRefId()))
1203 {
1204 $ilErr->raiseError($this->lng->txt('msg_no_perm_write'),$ilErr->WARNING);
1205 }
1206 $this->failed = array();
1207 // Validate
1208
1209 $_POST['item'] = is_array($_POST['item']) ? $_POST['item'] : array();
1210 $all_items = array();
1211
1212 foreach($_POST['item'] as $ref_id => $data)
1213 {
1214 $item_obj = new ilObjectActivation();
1216
1217 $item_obj->setTimingType($_POST['item_active'][$ref_id]['active'] ?
1220 $item_obj->setTimingStart($old_data['timing_start']);
1221 $item_obj->setTimingEnd($old_data['timing_end']);
1222 $item_obj->setSuggestionStart($this->__toUnix($data["sug_start"]));
1223
1224 // add duration
1225 $data['sug_start']['d'] += abs($data['duration_a']);
1226 $item_obj->setSuggestionEnd($this->__toUnix($data['sug_start'],array('h' => 23,'m' => 55)));
1227
1228 $item_obj->setEarliestStart(time());
1229 $item_obj->setLatestEnd($this->__toUnix($data['lim_end'],array('h' => 23,'m' => 55)));
1230
1231 $item_obj->toggleVisible($old_data['visible']);
1232 $item_obj->toggleChangeable($_POST['item_change'][$ref_id]['change']);
1233
1234 if(!$item_obj->validateActivation())
1235 {
1236 $this->failed[$ref_id] = $old_data['title'];
1237 }
1238 $all_items[$ref_id] =& $item_obj;
1239 unset($item_obj);
1240 }
1241
1242 if(count($this->failed))
1243 {
1244 $message = $this->lng->txt('crs_timings_update_error');
1245 $message .= ("<br />".$this->lng->txt('crs_materials').': ');
1246 $message .= (implode(',',$this->failed));
1247 ilUtil::sendFailure($message);
1248 $this->editTimings();
1249 return false;
1250 }
1251
1252 // No do update
1253 foreach($all_items as $ref_id => $item_obj_new)
1254 {
1255 $item_obj_new->update($ref_id);
1256 }
1257 ilUtil::sendSuccess($this->lng->txt('settings_saved'));
1258 $this->editTimings();
1259 return false;
1260 }
1261
1262 function __setSubTabs()
1263 {
1264 if($this->container_obj->getType() == 'crs')
1265 {
1266 $this->container_gui->setContentSubTabs();
1267 }
1268 }
1269
1271 {
1272 global $tree;
1273
1274 if($this->container_obj->getType() == 'crs')
1275 {
1276 // Container is course
1277 $this->course_obj =& $this->container_obj;
1278 }
1279 else
1280 {
1281
1282 $course_ref_id = $tree->checkForParentType($this->container_obj->getRefId(),'crs');
1283 $this->course_obj =& ilObjectFactory::getInstanceByRefId($course_ref_id);
1284 }
1285 return true;
1286 }
1287
1288 function __toUnix($date,$time = array())
1289 {
1290 return gmmktime($time['h'],$time['m'],0,$date['m'],$date['d'],$date['y']);
1291 }
1292
1293 function __prepareDateSelect($a_unix_time)
1294 {
1295 return array('y' => date('Y',$a_unix_time),
1296 'm' => date('m',$a_unix_time),
1297 'd' => date('d',$a_unix_time));
1298 }
1299
1300 function __prepareTimeSelect($a_unix_time)
1301 {
1302 return array('h' => date('G',$a_unix_time),
1303 'm' => date('i',$a_unix_time),
1304 's' => date('s',$a_unix_time));
1305 }
1306
1307
1308 function __buildPath($a_ref_id)
1309 {
1310 global $tree;
1311
1312 $path_arr = $tree->getPathFull($a_ref_id,$this->course_obj->getRefId());
1313 $counter = 0;
1314 foreach($path_arr as $data)
1315 {
1316 if($counter++)
1317 {
1318 $path .= " -> ";
1319 }
1320 $path .= $data['title'];
1321 }
1322
1323 return $path;
1324 }
1325
1326
1327} // END class.ilCourseContentGUI
1328?>
date( 'd-M-Y', $objPHPExcel->getProperties() ->getCreated())
$path
Definition: aliased.php:25
$_GET["client_id"]
$_POST["username"]
$_SESSION["AccountId"]
An exception for terminatinating execution or to throw for unit testing.
const IL_SCREEN_SIDE
const IL_COL_RIGHT
const IL_SCREEN_FULL
const IL_COL_LEFT
const IL_CRS_VIEW_TIMING
const IL_CAL_UNIX
static _recordReadEvent($a_type, $a_ref_id, $obj_id, $usr_id, $isCatchupWriteEvents=true, $a_ext_rc=false, $a_ext_time=false)
Records a read event and catches up with write events.
This class represents a checkbox property in a property form.
Column user interface class.
static getScreenMode()
Get Screen Mode for current command.
static getCmdSide()
Get Column Side of Current Command.
static _checkAllConditionsOfTarget($a_target_ref_id, $a_target_id, $a_target_type="", $a_usr_id=0)
checks wether all conditions of a target object are fulfilled
Class ilCourseContentGUI.
__construct($container_gui_obj)
Constructor @access public.
__toUnix($date, $time=array())
view()
Output course content.
__forwardToColumnGUI()
Get columngui output.
getRightColumnHTML()
Display right column.
executeCommand()
execute command
class ilCourseLMHistory
Class ilObj<module_name>
static secondsToString($seconds, $force_with_seconds=false, $a_lng=null)
converts seconds to string: Long: 7 days 4 hour(s) ...
static formatDate(ilDateTime $date)
Format a date @access public.
Class for single dates.
static _getFrame($a_class, $a_type='')
Get content frame name.
static getInstance()
Factory.
static _getTypicalLearningTimeSeconds($a_rbac_id, $a_obj_id=0)
static _lookupName($a_user_id)
lookup user name
Class ilObjectActivation.
static getTimingsAdministrationItems($a_parent_id)
Get (sub) item data for timings administration view (active/inactive)
static hasChangeableTimings($a_ref_id)
Check if there is any active changeable timing (in subtree)
static getTimingsItems($a_container_ref_id)
Get (sub) item data for timings view (no session material, no side blocks)
static getItem($a_ref_id)
Get item data.
static getItems($a_parent_id, $a_with_list_data=true)
Get sub item data.
static getInstanceByRefId($a_ref_id, $stop_on_error=true)
get an instance of an Ilias object by reference id
getCenterColumnHTML()
Get center column.
static _lookupObjId($a_id)
static _lookupType($a_id, $a_reference=false)
lookup object type
This class represents a property form user interface.
buildFrameTarget($a_type, $a_child=0, $a_obj_id=0)
STATIC, do not use $this inside!
static _lookupAppointment($a_obj_id)
lookup appointment
static _appointmentToString($start, $end, $fulltime)
This class represents a text area property in a property form.
class ilTimingAccepted
class ilTimingPlaned
static sendSuccess($a_info="", $a_keep=false)
Send Success Message to Screen.
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
static switchColor($a_num, $a_css1, $a_css2)
switches style sheets for each even $a_num (used for changing colors of different result rows)
static makeDateSelect($prefix, $year="", $month="", $day="", $startyear="", $a_long_month=true, $a_further_options=array(), $emptyoption=false)
Creates a combination of HTML selects for date inputs.
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
static getTypeIconPath($a_type, $a_obj_id, $a_size='small')
Get type icon path path Return image path for icon_xxx.pngs Or (if enabled) path to custom icon Depre...
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
$counter
$html
Definition: example_001.php:87
global $ilCtrl
Definition: ilias.php:18
global $ilErr
Definition: raiseError.php:16
$cmd
Definition: sahs_server.php:35
$ilUser
Definition: imgupload.php:18