ILIAS  release_7 Revision v7.30-3-g800a261c036
class.ilAssQuestionPreviewGUI.php
Go to the documentation of this file.
1<?php
19
34{
35 const CMD_SHOW = 'show';
36 const CMD_RESET = 'reset';
37 const CMD_STATISTICS = 'assessment';
38 const CMD_INSTANT_RESPONSE = 'instantResponse';
39 const CMD_HANDLE_QUESTION_ACTION = 'handleQuestionAction';
40 const CMD_GATEWAY_CONFIRM_HINT_REQUEST = 'gatewayConfirmHintRequest';
41 const CMD_GATEWAY_SHOW_HINT_LIST = 'gatewayShowHintList';
42
43 const TAB_ID_QUESTION = 'question';
44
45 const FEEDBACK_FOCUS_ANCHOR = 'focus';
46
51
55 protected $ctrl;
56
60 protected $tabs;
61
65 protected $tpl;
66
70 protected $lng;
71
75 protected $db;
76
80 protected $user;
81
85 protected $questionGUI;
86
90 protected $questionOBJ;
91
96
101
105 protected $hintTracking;
106
107 public function __construct(
115 ) {
116 $this->ctrl = $ctrl;
117 $this->tabs = $tabs;
118 $this->tpl = $tpl;
119 $this->lng = $lng;
120 $this->db = $db;
121 $this->user = $user;
122 $this->rbac_services = $rbac_services;
123
124 $this->tpl->addCss(ilObjStyleSheet::getContentStylePath(0));
125 $this->tpl->addCss(ilObjStyleSheet::getSyntaxStylePath());
126 }
127
128 public function initQuestion($questionId, $parentObjId)
129 {
130 require_once 'Modules/TestQuestionPool/classes/class.assQuestion.php';
131
132 $this->questionGUI = assQuestion::instantiateQuestionGUI($questionId);
133 $this->questionOBJ = $this->questionGUI->object;
134
135 $this->questionOBJ->setObjId($parentObjId);
136
137 if ($this->ctrl->getCmd() == 'editQuestion') {
138 $this->questionGUI->setQuestionTabs();
139 } else {
140 if ($_GET["q_id"]) {
141 $this->tabs->clearTargets();
142 $this->tabs->addTarget(
144 $this->ctrl->getLinkTargetByClass('ilAssQuestionPreviewGUI', ilAssQuestionPreviewGUI::CMD_SHOW),
145 array(),
146 array('ilAssQuestionPreviewGUI')
147 );
148 // Assessment of questions sub menu entry
149 $q_type = $this->questionOBJ->getQuestionType();
150 $classname = $q_type . "GUI";
151 $this->tabs->addTarget(
152 "statistics",
153 $this->ctrl->getLinkTargetByClass('ilAssQuestionPreviewGUI', "assessment"),
154 array("assessment"),
155 $classname,
156 ""
157 );
158 if (($_GET["calling_test"] > 0) || ($_GET["test_ref_id"] > 0)) {
159 $ref_id = $_GET["calling_test"];
160 if (strlen($ref_id) == 0) {
161 $ref_id = $_GET["test_ref_id"];
162 }
163
164 if (!$_GET['test_express_mode'] && !$GLOBALS['___test_express_mode']) {
165 $this->tabs->setBackTarget(
166 $this->lng->txt("backtocallingtest"),
167 "ilias.php?baseClass=ilObjTestGUI&cmd=questions&ref_id=$ref_id"
168 );
169 //BACK FROM Question Page to Test
170 } else {
172 //$this->tabs->setBackTarget($this->lng->txt("backtocallingtest"), $link);
173 $this->tabs->setBackTarget(
174 $this->lng->txt("backtocallingtest"),
175 "ilias.php?baseClass=ilObjTestGUI&cmd=questions&ref_id=$ref_id"
176 );
177 }
178 } elseif (isset($_GET['calling_consumer']) && (int) $_GET['calling_consumer']) {
179 $ref_id = (int) $_GET['calling_consumer'];
180 $consumer = ilObjectFactory::getInstanceByRefId($ref_id);
181 if ($consumer instanceof ilQuestionEditingFormConsumer) {
182 $this->tabs->setBackTarget(
183 $consumer->getQuestionEditingFormBackTargetLabel(),
184 $consumer->getQuestionEditingFormBackTarget($_GET['consumer_context'])
185 );
186 } else {
187 require_once 'Services/Link/classes/class.ilLink.php';
188 $this->tabs->setBackTarget($this->lng->txt("qpl"), ilLink::_getLink($ref_id));
189 }
190 //} elseif (true) {
191 // We're in the underworld and want to go back to the question page
192 } else {
193 $this->tabs->setBackTarget($this->lng->txt("backtocallingpool"), $this->ctrl->getLinkTargetByClass("ilobjquestionpoolgui", "questions"));
194 //BACK FROM Question Page to Pool
195 }
196 }
197 }
198 $this->questionGUI->outAdditionalOutput();
199
200 $this->questionGUI->populateJavascriptFilesRequiredForWorkForm($this->tpl);
201 $this->questionOBJ->setOutputType(OUTPUT_JAVASCRIPT); // TODO: remove including depending stuff
202
203 $this->questionGUI->setTargetGui($this);
204 $this->questionGUI->setQuestionActionCmd(self::CMD_HANDLE_QUESTION_ACTION);
205
206 $this->questionGUI->setRenderPurpose(assQuestionGUI::RENDER_PURPOSE_DEMOPLAY);
207 }
208
209 public function initPreviewSettings($parentRefId)
210 {
211 require_once 'Modules/TestQuestionPool/classes/class.ilAssQuestionPreviewSettings.php';
212 $this->previewSettings = new ilAssQuestionPreviewSettings($parentRefId);
213
214 $this->previewSettings->init();
215 }
216
217 public function initPreviewSession($userId, $questionId)
218 {
219 require_once 'Modules/TestQuestionPool/classes/class.ilAssQuestionPreviewSession.php';
220 $this->previewSession = new ilAssQuestionPreviewSession($userId, $questionId);
221
222 $this->previewSession->init();
223 }
224
225 public function initHintTracking()
226 {
227 require_once 'Modules/TestQuestionPool/classes/class.ilAssQuestionPreviewHintTracking.php';
228 $this->hintTracking = new ilAssQuestionPreviewHintTracking($this->db, $this->previewSession);
229 }
230
231 public function initStyleSheets()
232 {
233 include_once("./Services/Style/Content/classes/class.ilObjStyleSheet.php");
234
235 $this->tpl->setCurrentBlock("ContentStyle");
236 $this->tpl->setVariable("LOCATION_CONTENT_STYLESHEET", ilObjStyleSheet::getContentStylePath(0));
237 $this->tpl->parseCurrentBlock();
238
239 $this->tpl->setCurrentBlock("SyntaxStyle");
240 $this->tpl->setVariable("LOCATION_SYNTAX_STYLESHEET", ilObjStyleSheet::getSyntaxStylePath());
241 $this->tpl->parseCurrentBlock();
242 }
243
244 public function executeCommand()
245 {
246 global $DIC; /* @var \ILIAS\DI\Container $DIC */
247 $ilHelp = $DIC['ilHelp']; /* @var ilHelpGUI $ilHelp */
248 $ilHelp->setScreenIdComponent('qpl');
249
250 $this->tabs->setTabActive(self::TAB_ID_QUESTION);
251
252 $this->lng->loadLanguageModule('content');
253
254 $nextClass = $this->ctrl->getNextClass($this);
255
256 switch ($nextClass) {
257 case 'ilassquestionhintrequestgui':
258 require_once 'Modules/TestQuestionPool/classes/class.ilAssQuestionHintRequestGUI.php';
259 $gui = new ilAssQuestionHintRequestGUI($this, self::CMD_SHOW, $this->questionGUI, $this->hintTracking);
260
261 $this->ctrl->forwardCommand($gui);
262
263 break;
264
265 case 'ilassspecfeedbackpagegui':
266 case 'ilassgenfeedbackpagegui':
267 require_once 'Modules/TestQuestionPool/classes/class.ilAssQuestionFeedbackPageObjectCommandForwarder.php';
268 $forwarder = new ilAssQuestionFeedbackPageObjectCommandForwarder($this->questionOBJ, $this->ctrl, $this->tabs, $this->lng);
269 $forwarder->forward();
270 break;
271
272 case 'ilnotegui':
273 $notesGUI = new ilNoteGUI(
274 $this->questionOBJ->getObjId(),
275 $this->questionOBJ->getId(),
276 'quest',
277 false,
278 0,
279 false
280 );
281 $notesGUI->enablePublicNotes(true);
282 $notesGUI->enablePublicNotesDeletion(true);
283 $notesPanelHTML = $this->ctrl->forwardCommand($notesGUI);
284 $this->showCmd($notesPanelHTML);
285 break;
286
287
288 default:
289
290 $cmd = $this->ctrl->getCmd(self::CMD_SHOW) . 'Cmd';
291
292 $this->$cmd();
293 }
294 }
295
299 protected function buildPreviewFormAction()
300 {
301 return $this->ctrl->getFormAction($this, self::CMD_SHOW) . '#' . self::FEEDBACK_FOCUS_ANCHOR;
302 }
303
304 protected function isCommentingRequired()
305 {
306 if ($this->previewSettings->isTestRefId()) {
307 return false;
308 }
309 return (bool) $this->rbac_services->system()->checkAccess('write', (int) $_GET['ref_id']);
310 }
311
312 private function showCmd($notesPanelHTML = '')
313 {
314 $tpl = new ilTemplate('tpl.qpl_question_preview.html', true, true, 'Modules/TestQuestionPool');
315
316 $tpl->setVariable('PREVIEW_FORMACTION', $this->buildPreviewFormAction());
317
319
321
323
324 if ($this->isCommentingRequired()) {
325 $this->populateNotesPanel($tpl, $notesPanelHTML);
326 }
327
328 $this->tpl->setContent($tpl->get());
329 }
330
331 private function assessmentCmd()
332 {
333 $this->tabs->activateTab('statistics');
334 $this->questionGUI->assessment();
335 }
336
341 {
342 $response_required = false;
343 $response_available = false;
344 $jump_to_response = false;
345
346 if ($this->isShowReachedPointsRequired()) {
347 $this->populateReachedPointsOutput($tpl);
348 $response_required = true;
349 $response_available = true;
350 $jump_to_response = true;
351 }
352
353 if ($this->isShowBestSolutionRequired()) {
354 $this->populateSolutionOutput($tpl);
355 $response_required = true;
356 $response_available = true;
357 $jump_to_response = true;
358 }
359
361 $response_required = true;
362 if ($this->populateGenericQuestionFeedback($tpl)) {
363 $response_available = true;
364 $jump_to_response = true;
365 }
366 }
367
369 $response_required = true;
370
371 if ($this->questionGUI->hasInlineFeedback()) {
372 // Don't jump to the feedback below the question if some feedback is shown within the question
373 $jump_to_response = false;
374 } else {
375 if ($this->populateSpecificQuestionFeedback($tpl)) {
376 $response_available = true;
377 $jump_to_response = true;
378 }
379 }
380 }
381
382 if ($response_required) {
383 $this->populateInstantResponseHeader($tpl, $jump_to_response);
384 if (!$response_available) {
385 if ($this->questionGUI->hasInlineFeedback()) {
387 $tpl,
388 $this->lng->txt('tst_feedback_is_given_inline')
389 );
390 } else {
392 $tpl,
393 $this->lng->txt('tst_feedback_not_available_for_answer')
394 );
395 }
396 }
397 }
398 }
399
400 private function resetCmd()
401 {
402 $this->previewSession->setRandomizerSeed(null);
403 $this->previewSession->setParticipantsSolution(null);
404 $this->previewSession->resetRequestedHints();
405 $this->previewSession->setInstantResponseActive(false);
406
407 ilUtil::sendInfo($this->lng->txt('qst_preview_reset_msg'), true);
408
409 $this->ctrl->redirect($this, self::CMD_SHOW);
410 }
411
412 private function instantResponseCmd()
413 {
414 if ($this->saveQuestionSolution()) {
415 $this->previewSession->setInstantResponseActive(true);
416 } else {
417 $this->previewSession->setInstantResponseActive(false);
418 }
419
420 $this->ctrl->redirect($this, self::CMD_SHOW);
421 }
422
423 private function handleQuestionActionCmd()
424 {
425 $this->questionOBJ->persistPreviewState($this->previewSession);
426 $this->ctrl->redirect($this, self::CMD_SHOW);
427 }
428
430 {
431 $toolbarGUI = new ilAssQuestionPreviewToolbarGUI($this->lng);
432
433 $toolbarGUI->setFormAction($this->ctrl->getFormAction($this, self::CMD_SHOW));
434 $toolbarGUI->setResetPreviewCmd(self::CMD_RESET);
435
436 // Check Permissions first, some Toolbar Actions are only available for write access
437 if ($this->rbac_services->system()->checkAccess('write', (int) $_GET['ref_id'])) {
438 $toolbarGUI->setEditPageCmd(
439 $this->ctrl->getLinkTargetByClass('ilAssQuestionPageGUI', 'edit')
440 );
441
442 $toolbarGUI->setEditQuestionCmd(
443 $this->ctrl->getLinkTargetByClass(
444 array('ilrepositorygui','ilobjquestionpoolgui', get_class($this->questionGUI)),
445 'editQuestion'
446 )
447 );
448 }
449 $toolbarGUI->build();
450
451 $tpl->setVariable('PREVIEW_TOOLBAR', $this->ctrl->getHTML($toolbarGUI));
452 }
453
455 {
456 // FOR WHAT EXACTLY IS THIS USEFUL?
457 $this->ctrl->setReturnByClass('ilAssQuestionPageGUI', 'view');
458 $this->ctrl->setReturnByClass('ilObjQuestionPoolGUI', 'questions');
459
460 include_once("./Modules/TestQuestionPool/classes/class.ilAssQuestionPageGUI.php");
461 $pageGUI = new ilAssQuestionPageGUI($this->questionOBJ->getId());
462 $pageGUI->setRenderPageContainer(false);
463 $pageGUI->setEditPreview(true);
464 $pageGUI->setEnabledTabs(false);
465
466 // FOR WHICH SITUATION IS THIS WORKAROUND NECCESSARY? (sure .. imagemaps, but where this can be done?)
467 if (strlen($this->ctrl->getCmd()) == 0 && !isset($_POST['editImagemapForward_x'])) { // workaround for page edit imagemaps, keep in mind
468 $this->ctrl->setCmdClass(get_class($pageGUI));
469 $this->ctrl->setCmd('preview');
470 }
471
472 $this->questionGUI->setPreviewSession($this->previewSession);
473 $this->questionGUI->object->setShuffler($this->getQuestionAnswerShuffler());
474
475 $questionHtml = $this->questionGUI->getPreview(true, $this->isShowSpecificQuestionFeedbackRequired());
476 $this->questionGUI->magicAfterTestOutput();
477
478 $questionHtml .= $this->getQuestionNavigationHtml();
479
480 $pageGUI->setQuestionHTML(array($this->questionOBJ->getId() => $questionHtml));
481
482 //$pageGUI->setHeader($this->questionOBJ->getTitle()); // NO ADDITIONAL HEADER
483 $pageGUI->setPresentationTitle($this->questionOBJ->getTitle());
484
485 //$pageGUI->setTemplateTargetVar("ADM_CONTENT"); // NOT REQUIRED, OR IS?
486
487 $tpl->setVariable('QUESTION_OUTPUT', $pageGUI->preview());
488 }
489
491 {
492 $reachedPoints = $this->questionOBJ->calculateReachedPointsFromPreviewSession($this->previewSession);
493 $maxPoints = $this->questionOBJ->getMaximumPoints();
494
495 $scoreInformation = sprintf(
496 $this->lng->txt("you_received_a_of_b_points"),
497 $reachedPoints,
498 $maxPoints
499 );
500
501 $tpl->setCurrentBlock("reached_points_feedback");
502 $tpl->setVariable("REACHED_POINTS_FEEDBACK", $scoreInformation);
503 $tpl->parseCurrentBlock();
504 }
505
507 {
508 // FOR WHAT EXACTLY IS THIS USEFUL?
509 $this->ctrl->setReturnByClass('ilAssQuestionPageGUI', 'view');
510 $this->ctrl->setReturnByClass('ilObjQuestionPoolGUI', 'questions');
511
512 include_once("./Modules/TestQuestionPool/classes/class.ilAssQuestionPageGUI.php");
513 $pageGUI = new ilAssQuestionPageGUI($this->questionOBJ->getId());
514
515 $pageGUI->setEditPreview(true);
516 $pageGUI->setEnabledTabs(false);
517
518 // FOR WHICH SITUATION IS THIS WORKAROUND NECCESSARY? (sure .. imagemaps, but where this can be done?)
519 if (strlen($this->ctrl->getCmd()) == 0 && !isset($_POST['editImagemapForward_x'])) { // workaround for page edit imagemaps, keep in mind
520 $this->ctrl->setCmdClass(get_class($pageGUI));
521 $this->ctrl->setCmd('preview');
522 }
523
524 $this->questionGUI->setPreviewSession($this->previewSession);
525
526 $pageGUI->setQuestionHTML(array($this->questionOBJ->getId() => $this->questionGUI->getSolutionOutput(0, null, false, false, true, false, true, false, false)));
527
528 //$pageGUI->setHeader($this->questionOBJ->getTitle()); // NO ADDITIONAL HEADER
529 //$pageGUI->setPresentationTitle($this->questionOBJ->getTitle());
530
531 //$pageGUI->setTemplateTargetVar("ADM_CONTENT"); // NOT REQUIRED, OR IS?
532
533 $output = $this->questionGUI->getSolutionOutput(0, null, false, false, true, false, true, false, false);
534 //$output = $pageGUI->preview();
535 //$output = str_replace('<h1 class="ilc_page_title_PageTitle"></h1>', '', $output);
536
537 $tpl->setCurrentBlock('solution_output');
538 $tpl->setVariable('TXT_CORRECT_SOLUTION', $this->lng->txt('tst_best_solution_is'));
539 $tpl->setVariable('SOLUTION_OUTPUT', $output);
540 $tpl->parseCurrentBlock();
541 }
542
543 private function getQuestionNavigationHtml()
544 {
545 require_once 'Modules/TestQuestionPool/classes/class.ilAssQuestionRelatedNavigationBarGUI.php';
546 $navGUI = new ilAssQuestionRelatedNavigationBarGUI($this->ctrl, $this->lng);
547
548 $navGUI->setInstantResponseCmd(self::CMD_INSTANT_RESPONSE);
549 $navGUI->setHintRequestCmd(self::CMD_GATEWAY_CONFIRM_HINT_REQUEST);
550 $navGUI->setHintListCmd(self::CMD_GATEWAY_SHOW_HINT_LIST);
551
552 $navGUI->setInstantResponseEnabled($this->previewSettings->isInstantFeedbackNavigationRequired());
553 $navGUI->setHintProvidingEnabled($this->previewSettings->isHintProvidingEnabled());
554
555 $navGUI->setHintRequestsPossible($this->hintTracking->requestsPossible());
556 $navGUI->setHintRequestsExist($this->hintTracking->requestsExist());
557
558 return $this->ctrl->getHTML($navGUI);
559 }
560
566 {
567 if ($this->questionOBJ->isPreviewSolutionCorrect($this->previewSession)) {
568 $feedback = $this->questionGUI->getGenericFeedbackOutputForCorrectSolution();
570 } else {
571 $feedback = $this->questionGUI->getGenericFeedbackOutputForIncorrectSolution();
573 }
574
575 if (strlen($feedback)) {
576 $tpl->setCurrentBlock('instant_feedback_generic');
577 $tpl->setVariable('GENERIC_FEEDBACK', $feedback);
578 $tpl->setVariable('ILC_FB_CSS_CLASS', $cssClass);
579 $tpl->parseCurrentBlock();
580 return true;
581 }
582 return false;
583 }
584
590 {
591 $fb = $this->questionGUI->getSpecificFeedbackOutput(
592 (array) $this->previewSession->getParticipantsSolution()
593 );
594
595 if (!empty($fb)) {
596 $tpl->setCurrentBlock('instant_feedback_specific');
597 $tpl->setVariable('ANSWER_FEEDBACK', $fb);
598 $tpl->parseCurrentBlock();
599 return true;
600 }
601 return false;
602 }
603
604 protected function populateInstantResponseHeader(ilTemplate $tpl, $withFocusAnchor)
605 {
606 if ($withFocusAnchor) {
607 $tpl->setCurrentBlock('inst_resp_id');
608 $tpl->setVariable('INSTANT_RESPONSE_FOCUS_ID', self::FEEDBACK_FOCUS_ANCHOR);
609 $tpl->parseCurrentBlock();
610 }
611
612 $tpl->setCurrentBlock('instant_response_header');
613 $tpl->setVariable('INSTANT_RESPONSE_HEADER', $this->lng->txt('tst_feedback'));
614 $tpl->parseCurrentBlock();
615 }
616
617 protected function populateInstantResponseMessage(ilTemplate $tpl, string $a_message)
618 {
619 $tpl->setCurrentBlock('instant_response_message');
620 $tpl->setVariable('INSTANT_RESPONSE_MESSAGE', $a_message);
621 $tpl->parseCurrentBlock();
622 }
623
624 private function isShowBestSolutionRequired()
625 {
626 if (!$this->previewSettings->isBestSolutionEnabled()) {
627 return false;
628 }
629
630 return $this->previewSession->isInstantResponseActive();
631 }
632
634 {
635 if (!$this->previewSettings->isGenericFeedbackEnabled()) {
636 return false;
637 }
638
639 return $this->previewSession->isInstantResponseActive();
640 }
641
643 {
644 if (!$this->previewSettings->isSpecificFeedbackEnabled()) {
645 return false;
646 }
647
648 return $this->previewSession->isInstantResponseActive();
649 }
650
652 {
653 if (!$this->previewSettings->isReachedPointsEnabled()) {
654 return false;
655 }
656
657 return $this->previewSession->isInstantResponseActive();
658 }
659
660 public function saveQuestionSolution()
661 {
662 return $this->questionOBJ->persistPreviewState($this->previewSession);
663 }
664
666 {
667 if (!$this->saveQuestionSolution()) {
668 $this->previewSession->setInstantResponseActive(false);
669 $this->showCmd();
670 return;
671 }
672
673 require_once 'Modules/TestQuestionPool/classes/class.ilAssQuestionHintRequestGUI.php';
674
675 $this->ctrl->redirectByClass(
676 'ilAssQuestionHintRequestGUI',
678 );
679 }
680
681 public function gatewayShowHintListCmd()
682 {
683 if (!$this->saveQuestionSolution()) {
684 $this->previewSession->setInstantResponseActive(false);
685 $this->showCmd();
686 return;
687 }
688
689 require_once 'Modules/TestQuestionPool/classes/class.ilAssQuestionHintRequestGUI.php';
690
691 $this->ctrl->redirectByClass(
692 'ilAssQuestionHintRequestGUI',
694 );
695 }
696
700 private function getQuestionAnswerShuffler()
701 {
702 require_once 'Services/Randomization/classes/class.ilArrayElementShuffler.php';
703 $shuffler = new ilArrayElementShuffler();
704
705 if (!$this->previewSession->randomizerSeedExists()) {
706 $this->previewSession->setRandomizerSeed($shuffler->buildRandomSeed());
707 }
708
709 $shuffler->setSeed($this->previewSession->getRandomizerSeed());
710
711 return $shuffler;
712 }
713
714 protected function populateNotesPanel(ilTemplate $tpl, $notesPanelHTML)
715 {
716 if (!strlen($notesPanelHTML)) {
717 $notesPanelHTML = $this->questionGUI->getNotesHTML();
718 }
719
720 $tpl->setCurrentBlock('notes_panel');
721 $tpl->setVariable('NOTES_PANEL', $notesPanelHTML);
722 $tpl->parseCurrentBlock();
723 }
724}
user()
Definition: user.php:4
if(!defined('PATH_SEPARATOR')) $GLOBALS['_PEAR_default_error_mode']
Definition: PEAR.php:64
$_GET["client_id"]
$_POST["username"]
An exception for terminatinating execution or to throw for unit testing.
Provides fluid interface to RBAC services.
static instantiateQuestionGUI($a_question_id)
Creates an instance of a question gui with a given question id.
Question page GUI class.
populateInstantResponseHeader(ilTemplate $tpl, $withFocusAnchor)
populateSpecificQuestionFeedback(ilTemplate $tpl)
Populate the block for an instant specific feedback.
populateInstantResponseMessage(ilTemplate $tpl, string $a_message)
populateGenericQuestionFeedback(ilTemplate $tpl)
Populate the block for an instant generic feedback.
initQuestion($questionId, $parentObjId)
__construct(ilCtrl $ctrl, ilTabsGUI $tabs, ilGlobalTemplateInterface $tpl, ilLanguage $lng, ilDBInterface $db, ilObjUser $user, RBACServices $rbac_services)
populateNotesPanel(ilTemplate $tpl, $notesPanelHTML)
This class provides processing control methods.
language handling
Notes GUI class.
static getSyntaxStylePath()
get syntax style path
static getContentStylePath($a_style_id, $add_random=true, $add_token=true)
get content style path
static getInstanceByRefId($a_ref_id, $stop_on_error=true)
get an instance of an Ilias object by reference id
Tabs GUI.
special template class to simplify handling of ITX/PEAR
static getReturnToPageLink($q_id=null)
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
global $DIC
Definition: goto.php:24
const OUTPUT_JAVASCRIPT
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...