ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
class.ilAssQuestionFeedback.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2013 ILIAS open source, Extended GPL, see docs/LICENSE */
3
15{
16 const CSS_CLASS_FEEDBACK_CORRECT = 'ilc_qfeedr_FeedbackRight';
17 const CSS_CLASS_FEEDBACK_WRONG = 'ilc_qfeedw_FeedbackWrong';
18
23
28
33
38
42 const TABLE_NAME_GENERIC_FEEDBACK = 'qpl_fb_generic';
43
50 protected $questionOBJ = null;
51
58 protected $ctrl = null;
59
66 protected $db = null;
67
74 protected $lng = null;
75
82 protected $page_obj_output_mode = "presentation";
83
95 {
96 $this->questionOBJ = $questionOBJ;
97
98 $this->ctrl = $ctrl;
99 $this->lng = $lng;
100 $this->db = $db;
101 }
102
112 public function getGenericFeedbackTestPresentation($questionId, $solutionCompleted)
113 {
114 if ($this->questionOBJ->isAdditionalContentEditingModePageObject()) {
115 $genericFeedbackTestPresentationHTML = $this->getPageObjectContent(
117 $this->getGenericFeedbackPageObjectId($questionId, $solutionCompleted)
118 );
119 } else {
120 $genericFeedbackTestPresentationHTML = $this->getGenericFeedbackContent($questionId, $solutionCompleted);
121 }
122
123 return $genericFeedbackTestPresentationHTML;
124 }
125
136 abstract public function getSpecificAnswerFeedbackTestPresentation($questionId, $answerIndex);
137
147 {
149 $this->lng->txt('feedback_complete_solution'),
150 'feedback_complete',
151 $this->questionOBJ->isAdditionalContentEditingModePageObject()
152 ));
153
155 $this->lng->txt('feedback_incomplete_solution'),
156 'feedback_incomplete',
157 $this->questionOBJ->isAdditionalContentEditingModePageObject()
158 ));
159 }
160
170
180 {
181 if ($this->questionOBJ->isAdditionalContentEditingModePageObject()) {
182 $pageObjectType = $this->getGenericFeedbackPageObjectType();
183
184 $valueFeedbackSolutionComplete = $this->getPageObjectNonEditableValueHTML(
185 $pageObjectType,
186 $this->getGenericFeedbackPageObjectId($this->questionOBJ->getId(), true)
187 );
188
189 $valueFeedbackSolutionIncomplete = $this->getPageObjectNonEditableValueHTML(
190 $pageObjectType,
191 $this->getGenericFeedbackPageObjectId($this->questionOBJ->getId(), false)
192 );
193 } else {
194 $valueFeedbackSolutionComplete = $this->getGenericFeedbackContent(
195 $this->questionOBJ->getId(),
196 true
197 );
198
199 $valueFeedbackSolutionIncomplete = $this->getGenericFeedbackContent(
200 $this->questionOBJ->getId(),
201 false
202 );
203 }
204
205 $form->getItemByPostVar('feedback_complete')->setValue($valueFeedbackSolutionComplete);
206 $form->getItemByPostVar('feedback_incomplete')->setValue($valueFeedbackSolutionIncomplete);
207 }
208
218
228 {
229 if (!$this->questionOBJ->isAdditionalContentEditingModePageObject()) {
230 $this->saveGenericFeedbackContent($this->questionOBJ->getId(), false, $form->getInput('feedback_incomplete'));
231 $this->saveGenericFeedbackContent($this->questionOBJ->getId(), true, $form->getInput('feedback_complete'));
232 }
233 }
234
244
254 {
255 return false;
256 }
257
272 final protected function buildFeedbackContentFormProperty($label, $postVar, $asNonEditable)
273 {
274 if ($asNonEditable) {
275 require_once 'Services/Form/classes/class.ilNonEditableValueGUI.php';
276
277 $property = new ilNonEditableValueGUI($label, $postVar, true);
278 } else {
279 require_once 'Services/Form/classes/class.ilTextAreaInputGUI.php';
280 require_once 'Services/AdvancedEditing/classes/class.ilObjAdvancedEditing.php';
281
282 $property = new ilTextAreaInputGUI($label, $postVar);
283 $property->setRequired(false);
284 $property->setRows(10);
285 $property->setCols(80);
286
287 if (!$this->questionOBJ->getPreventRteUsage()) {
288 $property->setUseRte(true);
289 $property->addPlugin("latex");
290 $property->addButton("latex");
291 $property->addButton("pastelatex");
292
293 require_once 'Services/AdvancedEditing/classes/class.ilObjAdvancedEditing.php';
294 $property->setRteTags(ilObjAdvancedEditing::_getUsedHTMLTags("assessment"));
295 $property->setRTESupport($this->questionOBJ->getId(), "qpl", "assessment");
296 } else {
297 require_once 'Modules/TestQuestionPool/classes/questions/class.ilAssSelfAssessmentQuestionFormatter.php';
299 $property->setUseTagsForRteOnly(false);
300 }
301
302 $property->setRTESupport($this->questionOBJ->getId(), "qpl", "assessment");
303 }
304
305 return $property;
306 }
307
319 final public function getGenericFeedbackContent($questionId, $solutionCompleted)
320 {
321 require_once 'Services/RTE/classes/class.ilRTE.php';
322
323 $correctness = $solutionCompleted ? 1 : 0;
324
325 $res = $this->db->queryF(
326 "SELECT * FROM {$this->getGenericFeedbackTableName()} WHERE question_fi = %s AND correctness = %s",
327 array('integer', 'text'),
328 array($questionId, $correctness)
329 );
330
331 $feedbackContent = null;
332
333 while ($row = $this->db->fetchAssoc($res)) {
334 $feedbackContent = ilRTE::_replaceMediaObjectImageSrc($row['feedback'], 1);
335 break;
336 }
337
338 return $feedbackContent;
339 }
340
350 abstract public function getSpecificAnswerFeedbackContent($questionId, $answerIndex);
351
360 abstract public function getAllSpecificAnswerFeedbackContents($questionId);
361
374 final public function saveGenericFeedbackContent($questionId, $solutionCompleted, $feedbackContent)
375 {
376 require_once 'Services/RTE/classes/class.ilRTE.php';
377
378 $correctness = $solutionCompleted ? 1 : 0;
379
380 $feedbackId = $this->getGenericFeedbackId($questionId, $solutionCompleted);
381
382 if (strlen($feedbackContent)) {
383 $feedbackContent = ilRTE::_replaceMediaObjectImageSrc($feedbackContent, 0);
384 }
385
386 if ($feedbackId) {
387 $this->db->update(
389 array(
390 'feedback' => array('clob', $feedbackContent),
391 'tstamp' => array('integer', time())
392 ),
393 array(
394 'feedback_id' => array('integer', $feedbackId)
395 )
396 );
397 } else {
398 $feedbackId = $this->db->nextId($this->getGenericFeedbackTableName());
399
400 $this->db->insert($this->getGenericFeedbackTableName(), array(
401 'feedback_id' => array('integer', $feedbackId),
402 'question_fi' => array('integer', $questionId),
403 'correctness' => array('text', $correctness), // text ?
404 'feedback' => array('clob', $feedbackContent),
405 'tstamp' => array('integer', time())
406 ));
407 }
408
409 return $feedbackId;
410 }
411
422 abstract public function saveSpecificAnswerFeedbackContent($questionId, $answerIndex, $feedbackContent);
423
433 final public function deleteGenericFeedbacks($questionId, $isAdditionalContentEditingModePageObject)
434 {
435 if ($isAdditionalContentEditingModePageObject) {
438 $this->getGenericFeedbackPageObjectId($questionId, true)
439 );
440
443 $this->getGenericFeedbackPageObjectId($questionId, false)
444 );
445 }
446
447 $this->db->manipulateF(
448 "DELETE FROM {$this->getGenericFeedbackTableName()} WHERE question_fi = %s",
449 array('integer'),
450 array($questionId)
451 );
452 }
453
462 abstract public function deleteSpecificAnswerFeedbacks($questionId, $isAdditionalContentEditingModePageObject);
463
473 final public function duplicateFeedback($originalQuestionId, $duplicateQuestionId)
474 {
475 $this->duplicateGenericFeedback($originalQuestionId, $duplicateQuestionId);
476 $this->duplicateSpecificFeedback($originalQuestionId, $duplicateQuestionId);
477 }
478
488 final private function duplicateGenericFeedback($originalQuestionId, $duplicateQuestionId)
489 {
490 $res = $this->db->queryF(
491 "SELECT * FROM {$this->getGenericFeedbackTableName()} WHERE question_fi = %s",
492 array('integer'),
493 array($originalQuestionId)
494 );
495
496 while ($row = $this->db->fetchAssoc($res)) {
497 $feedbackId = $this->db->nextId($this->getGenericFeedbackTableName());
498
499 $this->db->insert($this->getGenericFeedbackTableName(), array(
500 'feedback_id' => array('integer', $feedbackId),
501 'question_fi' => array('integer', $duplicateQuestionId),
502 'correctness' => array('text', $row['correctness']),
503 'feedback' => array('clob', $row['feedback']),
504 'tstamp' => array('integer', time())
505 ));
506
507 if ($this->questionOBJ->isAdditionalContentEditingModePageObject()) {
508 $pageObjectType = $this->getGenericFeedbackPageObjectType();
509 $this->duplicatePageObject($pageObjectType, $row['feedback_id'], $feedbackId, $duplicateQuestionId);
510 }
511 }
512 }
513
523 abstract protected function duplicateSpecificFeedback($originalQuestionId, $duplicateQuestionId);
524
533 final public function syncFeedback($originalQuestionId, $duplicateQuestionId)
534 {
535 $this->syncGenericFeedback($originalQuestionId, $duplicateQuestionId);
536 $this->syncSpecificFeedback($originalQuestionId, $duplicateQuestionId);
537 }
538
547 final private function syncGenericFeedback($originalQuestionId, $duplicateQuestionId)
548 {
549 // delete generic feedback of the original question
550 $this->db->manipulateF(
551 "DELETE FROM {$this->getGenericFeedbackTableName()} WHERE question_fi = %s",
552 array('integer'),
553 array($originalQuestionId)
554 );
555
556 // get generic feedback of the actual (duplicated) question
557 $result = $this->db->queryF(
558 "SELECT * FROM {$this->getGenericFeedbackTableName()} WHERE question_fi = %s",
559 array('integer'),
560 array($duplicateQuestionId)
561 );
562
563 // save generic feedback to the original question
564 while ($row = $this->db->fetchAssoc($result)) {
565 $nextId = $this->db->nextId($this->getGenericFeedbackTableName());
566
567 $this->db->insert($this->getGenericFeedbackTableName(), array(
568 'feedback_id' => array('integer', $nextId),
569 'question_fi' => array('integer', $originalQuestionId),
570 'correctness' => array('text', $row['correctness']),
571 'feedback' => array('clob', $row['feedback']),
572 'tstamp' => array('integer', time())
573 ));
574 }
575 }
576
586 final protected function getGenericFeedbackId($questionId, $solutionCompleted)
587 {
588 $res = $this->db->queryF(
589 "SELECT feedback_id FROM {$this->getGenericFeedbackTableName()} WHERE question_fi = %s AND correctness = %s",
590 array('integer','text'),
591 array($questionId, (int) $solutionCompleted)
592 );
593
594 $feedbackId = null;
595
596 while ($row = $this->db->fetchAssoc($res)) {
597 $feedbackId = $row['feedback_id'];
598 break;
599 }
600
601 return $feedbackId;
602 }
603
608 protected function isGenericFeedbackId($feedbackId)
609 {
610 $row = $this->db->fetchAssoc($this->db->queryF(
611 "SELECT COUNT(feedback_id) cnt FROM {$this->getGenericFeedbackTableName()}
612 WHERE question_fi = %s AND feedback_id = %s",
613 array('integer','integer'),
614 array($this->questionOBJ->getId(), $feedbackId)
615 ));
616
617
618 return $row['cnt'];
619 }
620
625 abstract protected function isSpecificAnswerFeedbackId($feedbackId);
626
631 final public function checkFeedbackParent($feedbackId)
632 {
633 if ($this->isGenericFeedbackId($feedbackId)) {
634 return true;
635 }
636
637 if ($this->isSpecificAnswerFeedbackId($feedbackId)) {
638 return true;
639 }
640
641 return false;
642 }
643
652 abstract protected function syncSpecificFeedback($originalQuestionId, $duplicateQuestionId);
653
660 final protected function getGenericFeedbackTableName()
661 {
663 }
664
675 final protected function getPageObjectNonEditableValueHTML($pageObjectType, $pageObjectId)
676 {
677 $link = $this->getPageObjectEditingLink($pageObjectType, $pageObjectId);
678 $content = $this->getPageObjectContent($pageObjectType, $pageObjectId);
679
680 return "$link<br /><br />$content";
681 }
682
689 public function getClassNameByType($a_type, $a_gui = false)
690 {
691 $gui = ($a_gui)
692 ? "GUI"
693 : "";
694 include_once("./Modules/TestQuestionPool/classes/feedback/class.ilAssQuestionFeedback.php");
696 return "ilAssGenFeedbackPage" . $gui;
697 }
699 return "ilAssSpecFeedbackPage" . $gui;
700 }
701 }
702
703
714 final private function getPageObjectEditingLink($pageObjectType, $pageObjectId)
715 {
716 $cl = $this->getClassNameByType($pageObjectType, true);
717 $this->ctrl->setParameterByClass($cl, 'feedback_type', $pageObjectType);
718 $this->ctrl->setParameterByClass($cl, 'feedback_id', $pageObjectId);
719
720 $linkHREF = $this->ctrl->getLinkTargetByClass($cl, 'edit');
721 $linkTEXT = $this->lng->txt('tst_question_feedback_edit_page');
722
723 return "<a href='$linkHREF'>$linkTEXT</a>";
724 }
725
731 final public function setPageObjectOutputMode($a_val)
732 {
733 $this->page_obj_output_mode = $a_val;
734 }
735
741 final public function getPageObjectOutputMode()
742 {
744 }
745
755 final protected function getPageObjectContent($pageObjectType, $pageObjectId)
756 {
757 global $ilCtrl;
758
759 $cl = $this->getClassNameByType($pageObjectType, true);
760 require_once 'Modules/TestQuestionPool/classes/feedback/class.' . $cl . '.php';
761
762 $this->ensurePageObjectExists($pageObjectType, $pageObjectId);
763
764 $mode = ($ilCtrl->isAsynch())
765 ? "presentation"
766 : $this->getPageObjectOutputMode();
767
768 $pageObjectGUI = new $cl($pageObjectId);
769 $pageObjectGUI->setOutputMode($mode);
770
771 return $pageObjectGUI->presentation($mode);
772 }
773
783 final protected function getPageObjectXML($pageObjectType, $pageObjectId)
784 {
785 $cl = $this->getClassNameByType($pageObjectType);
786 require_once 'Modules/TestQuestionPool/classes/feedback/class.' . $cl . '.php';
787
788 $this->ensurePageObjectExists($pageObjectType, $pageObjectId);
789
790 $pageObject = new $cl($pageObjectId);
791 return $pageObject->getXMLContent();
792 }
793
802 final private function ensurePageObjectExists($pageObjectType, $pageObjectId)
803 {
805 include_once("./Modules/TestQuestionPool/classes/feedback/class.ilAssGenFeedbackPage.php");
806 if (!ilAssGenFeedbackPage::_exists($pageObjectType, $pageObjectId)) {
807 $pageObject = new ilAssGenFeedbackPage();
808 $pageObject->setParentId($this->questionOBJ->getId());
809 $pageObject->setId($pageObjectId);
810 $pageObject->createFromXML();
811 }
812 }
814 include_once("./Modules/TestQuestionPool/classes/feedback/class.ilAssSpecFeedbackPage.php");
815 if (!ilAssSpecFeedbackPage::_exists($pageObjectType, $pageObjectId)) {
816 $pageObject = new ilAssSpecFeedbackPage();
817 $pageObject->setParentId($this->questionOBJ->getId());
818 $pageObject->setId($pageObjectId);
819 $pageObject->createFromXML();
820 }
821 }
822 }
823
834 final protected function createPageObject($pageObjectType, $pageObjectId, $pageObjectContent)
835 {
836 $cl = $this->getClassNameByType($pageObjectType);
837 require_once 'Modules/TestQuestionPool/classes/feedback/class.' . $cl . '.php';
838
839 $pageObject = new $cl();
840 $pageObject->setParentId($this->questionOBJ->getId());
841 $pageObject->setId($pageObjectId);
842 $pageObject->setXMLContent($pageObjectContent);
843 $pageObject->createFromXML();
844 }
845
857 final protected function duplicatePageObject($pageObjectType, $originalPageObjectId, $duplicatePageObjectId, $duplicatePageObjectParentId)
858 {
859 $cl = $this->getClassNameByType($pageObjectType);
860 require_once 'Modules/TestQuestionPool/classes/feedback/class.' . $cl . '.php';
861
862 $pageObject = new $cl($originalPageObjectId);
863 $pageObject->setParentId($duplicatePageObjectParentId);
864 $pageObject->setId($duplicatePageObjectId);
865 $pageObject->createFromXML();
866 }
867
876 final protected function ensurePageObjectDeleted($pageObjectType, $pageObjectId)
877 {
879 include_once("./Modules/TestQuestionPool/classes/feedback/class.ilAssGenFeedbackPage.php");
880 if (ilAssGenFeedbackPage::_exists($pageObjectType, $pageObjectId)) {
881 $pageObject = new ilAssGenFeedbackPage($pageObjectId);
882 $pageObject->delete();
883 }
884 }
886 include_once("./Modules/TestQuestionPool/classes/feedback/class.ilAssSpecFeedbackPage.php");
887 if (ilAssSpecFeedbackPage::_exists($pageObjectType, $pageObjectId)) {
888 $pageObject = new ilAssSpecFeedbackPage($pageObjectId);
889 $pageObject->delete();
890 }
891 }
892 }
893
902 final protected function getGenericFeedbackPageObjectType()
903 {
905 }
906
916 {
918 }
919
930 final public static function isValidFeedbackPageObjectType($feedbackPageObjectType)
931 {
932 switch ($feedbackPageObjectType) {
935
936 return true;
937 }
938
939 return false;
940 }
941
953 final protected function getGenericFeedbackPageObjectId($questionId, $solutionCompleted)
954 {
955 $pageObjectId = $this->getGenericFeedbackId($questionId, $solutionCompleted);
956
957 if (!$pageObjectId) {
958 $pageObjectId = $this->saveGenericFeedbackContent($questionId, $solutionCompleted, null);
959 }
960
961 return $pageObjectId;
962 }
963
973 public function getGenericFeedbackExportPresentation($questionId, $solutionCompleted)
974 {
975 if ($this->questionOBJ->isAdditionalContentEditingModePageObject()) {
976 $genericFeedbackExportPresentation = $this->getPageObjectXML(
978 $this->getGenericFeedbackPageObjectId($questionId, $solutionCompleted)
979 );
980 } else {
981 $genericFeedbackExportPresentation = $this->getGenericFeedbackContent($questionId, $solutionCompleted);
982 }
983
984 return $genericFeedbackExportPresentation;
985 }
986
997 abstract public function getSpecificAnswerFeedbackExportPresentation($questionId, $answerIndex);
998
1008 public function importGenericFeedback($questionId, $solutionCompleted, $feedbackContent)
1009 {
1010 if ($this->questionOBJ->isAdditionalContentEditingModePageObject()) {
1011 $pageObjectId = $this->getGenericFeedbackPageObjectId($questionId, $solutionCompleted);
1012 $pageObjectType = $this->getGenericFeedbackPageObjectType();
1013
1014 $this->createPageObject($pageObjectType, $pageObjectId, $feedbackContent);
1015 } else {
1016 $this->saveGenericFeedbackContent($questionId, $solutionCompleted, $feedbackContent);
1017 }
1018 }
1019
1030 abstract public function importSpecificAnswerFeedback($questionId, $answerIndex, $feedbackContent);
1031
1036 public function migrateContentForLearningModule(ilAssSelfAssessmentMigrator $migrator, $questionId)
1037 {
1038 $this->saveGenericFeedbackContent($questionId, true, $migrator->migrateToLmContent(
1039 $this->getGenericFeedbackContent($questionId, true)
1040 ));
1041
1042 $this->saveGenericFeedbackContent($questionId, false, $migrator->migrateToLmContent(
1043 $this->getGenericFeedbackContent($questionId, false)
1044 ));
1045 }
1046}
$result
An exception for terminatinating execution or to throw for unit testing.
Abstract basic class which is to be extended by the concrete assessment question type classes.
Generic feedback page object.
const FEEDBACK_SOLUTION_COMPLETE_PAGE_OBJECT_ID
id for page object relating to generic complete solution feedback
saveGenericFormProperties(ilPropertyFormGUI $form)
saves a given form object's GENERIC form properties relating to all question types
const PAGE_OBJECT_TYPE_GENERIC_FEEDBACK
type for generic feedback page objects
completeGenericFormProperties(ilPropertyFormGUI $form)
completes a given form object with the GENERIC form properties required by all question types
initGenericFormProperties(ilPropertyFormGUI $form)
initialises a given form object's GENERIC form properties relating to all question types
static isValidFeedbackPageObjectType($feedbackPageObjectType)
returns the fact wether the given page object type relates to generic or specific feedback page objec...
getGenericFeedbackTestPresentation($questionId, $solutionCompleted)
returns the html of GENERIC feedback for the given question id for test presentation (either for the ...
getPageObjectXML($pageObjectType, $pageObjectId)
returns the xml of page object with given type and id
getPageObjectNonEditableValueHTML($pageObjectType, $pageObjectId)
returns html content to be used as value for non editable value form properties in feedback editing f...
getPageObjectOutputMode()
Get page object output mode.
getGenericFeedbackPageObjectId($questionId, $solutionCompleted)
returns a useable page object id for generic feedback page objects for the given question id for eith...
getGenericFeedbackId($questionId, $solutionCompleted)
returns the SPECIFIC answer feedback ID for a given question id and answer index.
const TABLE_NAME_GENERIC_FEEDBACK
table name for specific feedback
__construct(assQuestion $questionOBJ, ilCtrl $ctrl, ilDBInterface $db, ilLanguage $lng)
constructor
getGenericFeedbackPageObjectType()
returns the type for generic feedback page objects defined in local constant
createPageObject($pageObjectType, $pageObjectId, $pageObjectContent)
creates a new page object with given page object id and page object type and passed page object conte...
syncGenericFeedback($originalQuestionId, $duplicateQuestionId)
syncs the GENERIC feedback from a duplicated question back to the original question
duplicatePageObject($pageObjectType, $originalPageObjectId, $duplicatePageObjectId, $duplicatePageObjectParentId)
duplicates the page object with given type and original id to new page object with same type and give...
deleteSpecificAnswerFeedbacks($questionId, $isAdditionalContentEditingModePageObject)
deletes all SPECIFIC feedback contents for the given question id
getAllSpecificAnswerFeedbackContents($questionId)
returns the SPECIFIC feedback content for a given question id and answer index.
getGenericFeedbackContent($questionId, $solutionCompleted)
returns the GENERIC feedback content for a given question state.
getPageObjectEditingLink($pageObjectType, $pageObjectId)
returns a link to page object editor for page object with given type and id
setPageObjectOutputMode($a_val)
Set page object output mode.
isSpecificAnswerFeedbackId($feedbackId)
duplicateSpecificFeedback($originalQuestionId, $duplicateQuestionId)
duplicates the SPECIFIC feedback relating to the given original question id and saves it for the give...
const PAGE_OBJECT_TYPE_SPECIFIC_FEEDBACK
type for specific feedback page objects
getSpecificAnswerFeedbackPageObjectType()
returns the type for specific feedback page objects defined in local constant
syncSpecificFeedback($originalQuestionId, $duplicateQuestionId)
syncs the SPECIFIC feedback from a duplicated question back to the original question
completeSpecificFormProperties(ilPropertyFormGUI $form)
completes a given form object with the SPECIFIC form properties required by this question type
ensurePageObjectExists($pageObjectType, $pageObjectId)
ensures an existing page object with given type and id
getSpecificAnswerFeedbackContent($questionId, $answerIndex)
returns the SPECIFIC feedback content for a given question id and answer index.
getGenericFeedbackExportPresentation($questionId, $solutionCompleted)
returns the generic feedback export presentation for given question id either for solution completed ...
ensurePageObjectDeleted($pageObjectType, $pageObjectId)
ensures a no more existing page object for given type and id
const FEEDBACK_SOLUTION_INCOMPLETE_PAGE_OBJECT_ID
id for page object relating to generic incomplete solution feedback
isSaveableInPageObjectEditingMode()
returns the fact wether the feedback editing form is saveable in page object editing or not.
saveSpecificAnswerFeedbackContent($questionId, $answerIndex, $feedbackContent)
saves SPECIFIC feedback content for the given question id and answer index to the database.
getClassNameByType($a_type, $a_gui=false)
Get class name by type.
syncFeedback($originalQuestionId, $duplicateQuestionId)
syncs the feedback from a duplicated question back to the original question
deleteGenericFeedbacks($questionId, $isAdditionalContentEditingModePageObject)
deletes all GENERIC feedback contents (and page objects if required) for the given question id
importSpecificAnswerFeedback($questionId, $answerIndex, $feedbackContent)
imports the given feedback content as specific feedback for the given question id and answer index
duplicateGenericFeedback($originalQuestionId, $duplicateQuestionId)
duplicates the GENERIC feedback relating to the given original question id and saves it for the given...
getPageObjectContent($pageObjectType, $pageObjectId)
returns the content of page object with given type and id
importGenericFeedback($questionId, $solutionCompleted, $feedbackContent)
imports the given feedback content as generic feedback for the given question id for either the compl...
buildFeedbackContentFormProperty($label, $postVar, $asNonEditable)
builds and returns a form property gui object with the given label and postvar that is addable to pro...
getGenericFeedbackTableName()
returns the table name for specific feedback
duplicateFeedback($originalQuestionId, $duplicateQuestionId)
duplicates the feedback relating to the given original question id and saves it for the given duplica...
migrateContentForLearningModule(ilAssSelfAssessmentMigrator $migrator, $questionId)
initSpecificFormProperties(ilPropertyFormGUI $form)
initialises a given form object's SPECIFIC form properties relating to this question type
saveGenericFeedbackContent($questionId, $solutionCompleted, $feedbackContent)
saves GENERIC feedback content for the given question id to the database.
getSpecificAnswerFeedbackTestPresentation($questionId, $answerIndex)
returns the html of SPECIFIC feedback for the given question id and answer index for test presentatio...
saveSpecificFormProperties(ilPropertyFormGUI $form)
saves a given form object's SPECIFIC form properties relating to this question type
getSpecificAnswerFeedbackExportPresentation($questionId, $answerIndex)
returns the generic feedback export presentation for given question id either for solution completed ...
static getSelfAssessmentTags()
Get tags allowed in question tags in self assessment mode.
Specific feedback page object.
This class provides processing control methods.
language handling
This class represents a non editable value in a property form.
static _getUsedHTMLTags($a_module="")
Returns an array of all allowed HTML tags for text editing.
static _exists($a_parent_type, $a_id, $a_lang="", $a_no_cache=false)
Checks whether page exists.
This class represents a property form user interface.
static _replaceMediaObjectImageSrc($a_text, $a_direction=0, $nic=IL_INST_ID)
Replaces image source from mob image urls with the mob id or replaces mob id with the correct image s...
This class represents a text area property in a property form.
global $ilCtrl
Definition: ilias.php:18
Interface ilDBInterface.
if(isset($_POST['submit'])) $form
foreach($_POST as $key=> $value) $res
$a_type
Definition: workflow.php:92