ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
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 {
116 $genericFeedbackTestPresentationHTML = $this->getPageObjectContent(
118 $this->getGenericFeedbackPageObjectId($questionId, $solutionCompleted)
119 );
120 }
121 else
122 {
123 $genericFeedbackTestPresentationHTML = $this->getGenericFeedbackContent($questionId, $solutionCompleted);
124 }
125
126 return $genericFeedbackTestPresentationHTML;
127 }
128
139 abstract public function getSpecificAnswerFeedbackTestPresentation($questionId, $answerIndex);
140
150 {
152 $this->lng->txt('feedback_complete_solution'), 'feedback_complete',
153 $this->questionOBJ->isAdditionalContentEditingModePageObject()
154 ));
155
157 $this->lng->txt('feedback_incomplete_solution'), 'feedback_incomplete',
158 $this->questionOBJ->isAdditionalContentEditingModePageObject()
159 ));
160 }
161
170 abstract public function completeSpecificFormProperties(ilPropertyFormGUI $form);
171
180 final public function initGenericFormProperties(ilPropertyFormGUI $form)
181 {
182 if( $this->questionOBJ->isAdditionalContentEditingModePageObject() )
183 {
184 $pageObjectType = $this->getGenericFeedbackPageObjectType();
185
186 $valueFeedbackSolutionComplete = $this->getPageObjectNonEditableValueHTML(
187 $pageObjectType, $this->getGenericFeedbackPageObjectId($this->questionOBJ->getId(), true)
188 );
189
190 $valueFeedbackSolutionIncomplete = $this->getPageObjectNonEditableValueHTML(
191 $pageObjectType, $this->getGenericFeedbackPageObjectId($this->questionOBJ->getId(), false)
192 );
193 }
194 else
195 {
196 $valueFeedbackSolutionComplete = $this->getGenericFeedbackContent(
197 $this->questionOBJ->getId(), true
198 );
199
200 $valueFeedbackSolutionIncomplete = $this->getGenericFeedbackContent(
201 $this->questionOBJ->getId(), false
202 );
203 }
204
205 $form->getItemByPostVar('feedback_complete')->setValue($valueFeedbackSolutionComplete);
206 $form->getItemByPostVar('feedback_incomplete')->setValue($valueFeedbackSolutionIncomplete);
207 }
208
217 abstract public function initSpecificFormProperties(ilPropertyFormGUI $form);
218
227 final public function saveGenericFormProperties(ilPropertyFormGUI $form)
228 {
229 if( !$this->questionOBJ->isAdditionalContentEditingModePageObject() )
230 {
231 $this->saveGenericFeedbackContent($this->questionOBJ->getId(), false, $form->getInput('feedback_incomplete'));
232 $this->saveGenericFeedbackContent($this->questionOBJ->getId(), true, $form->getInput('feedback_complete'));
233 }
234 }
235
244 abstract public function saveSpecificFormProperties(ilPropertyFormGUI $form);
245
255 {
256 return false;
257 }
258
273 final protected function buildFeedbackContentFormProperty($label, $postVar, $asNonEditable)
274 {
275 if($asNonEditable)
276 {
277 require_once 'Services/Form/classes/class.ilNonEditableValueGUI.php';
278
279 $property = new ilNonEditableValueGUI($label, $postVar, true);
280 }
281 else
282 {
283 require_once 'Services/Form/classes/class.ilTextAreaInputGUI.php';
284 require_once 'Services/AdvancedEditing/classes/class.ilObjAdvancedEditing.php';
285
286 $property = new ilTextAreaInputGUI($label, $postVar);
287 $property->setRequired(false);
288 $property->setRows(10);
289 $property->setCols(80);
290
291 if( !$this->questionOBJ->getPreventRteUsage() )
292 {
293 $property->setUseRte(true);
294 $property->addPlugin("latex");
295 $property->addButton("latex");
296 $property->addButton("pastelatex");
297
298 require_once 'Services/AdvancedEditing/classes/class.ilObjAdvancedEditing.php';
299 $property->setRteTags(ilObjAdvancedEditing::_getUsedHTMLTags("assessment"));
300 $property->setRTESupport($this->questionOBJ->getId(), "qpl", "assessment");
301 }
302 else
303 {
304 require_once 'Modules/TestQuestionPool/classes/questions/class.ilAssSelfAssessmentQuestionFormatter.php';
306 $property->setUseTagsForRteOnly(false);
307 }
308
309 $property->setRTESupport($this->questionOBJ->getId(), "qpl", "assessment");
310 }
311
312 return $property;
313 }
314
326 final public function getGenericFeedbackContent($questionId, $solutionCompleted)
327 {
328 require_once 'Services/RTE/classes/class.ilRTE.php';
329
330 $correctness = $solutionCompleted ? 1 : 0;
331
332 $res = $this->db->queryF(
333 "SELECT * FROM {$this->getGenericFeedbackTableName()} WHERE question_fi = %s AND correctness = %s",
334 array('integer', 'text'), array($questionId, $correctness)
335 );
336
337 $feedbackContent = null;
338
339 while( $row = $this->db->fetchAssoc($res) )
340 {
341 $feedbackContent = ilRTE::_replaceMediaObjectImageSrc($row['feedback'], 1);
342 break;
343 }
344
345 return $feedbackContent;
346 }
347
357 abstract public function getSpecificAnswerFeedbackContent($questionId, $answerIndex);
358
367 abstract public function getAllSpecificAnswerFeedbackContents($questionId);
368
381 final public function saveGenericFeedbackContent($questionId, $solutionCompleted, $feedbackContent)
382 {
383 require_once 'Services/RTE/classes/class.ilRTE.php';
384
385 $correctness = $solutionCompleted ? 1 : 0;
386
387 $feedbackId = $this->getGenericFeedbackId($questionId, $solutionCompleted);
388
389 if( strlen($feedbackContent) )
390 {
391 $feedbackContent = ilRTE::_replaceMediaObjectImageSrc($feedbackContent, 0);
392 }
393
394 if( $feedbackId )
395 {
396 $this->db->update(
398 array(
399 'feedback' => array('clob', $feedbackContent),
400 'tstamp' => array('integer', time())
401 ),
402 array(
403 'feedback_id' => array('integer', $feedbackId)
404 )
405 );
406 }
407 else
408 {
409 $feedbackId = $this->db->nextId($this->getGenericFeedbackTableName());
410
411 $this->db->insert($this->getGenericFeedbackTableName(), array(
412 'feedback_id' => array('integer', $feedbackId),
413 'question_fi' => array('integer', $questionId),
414 'correctness' => array('text', $correctness), // text ?
415 'feedback' => array('clob', $feedbackContent),
416 'tstamp' => array('integer', time())
417 ));
418 }
419
420 return $feedbackId;
421 }
422
433 abstract public function saveSpecificAnswerFeedbackContent($questionId, $answerIndex, $feedbackContent);
434
444 final public function deleteGenericFeedbacks($questionId, $isAdditionalContentEditingModePageObject)
445 {
446 if( $isAdditionalContentEditingModePageObject )
447 {
450 $this->getGenericFeedbackPageObjectId($questionId, true)
451 );
452
455 $this->getGenericFeedbackPageObjectId($questionId, false)
456 );
457 }
458
459 $this->db->manipulateF(
460 "DELETE FROM {$this->getGenericFeedbackTableName()} WHERE question_fi = %s", array('integer'), array($questionId)
461 );
462 }
463
472 abstract public function deleteSpecificAnswerFeedbacks($questionId, $isAdditionalContentEditingModePageObject);
473
483 final public function duplicateFeedback($originalQuestionId, $duplicateQuestionId)
484 {
485 $this->duplicateGenericFeedback($originalQuestionId, $duplicateQuestionId);
486 $this->duplicateSpecificFeedback($originalQuestionId, $duplicateQuestionId);
487 }
488
498 final private function duplicateGenericFeedback($originalQuestionId, $duplicateQuestionId)
499 {
500 $res = $this->db->queryF(
501 "SELECT * FROM {$this->getGenericFeedbackTableName()} WHERE question_fi = %s",
502 array('integer'), array($originalQuestionId)
503 );
504
505 while( $row = $this->db->fetchAssoc($res) )
506 {
507 $feedbackId = $this->db->nextId($this->getGenericFeedbackTableName());
508
509 $this->db->insert($this->getGenericFeedbackTableName(), array(
510 'feedback_id' => array('integer', $feedbackId),
511 'question_fi' => array('integer', $duplicateQuestionId),
512 'correctness' => array('text', $row['correctness']),
513 'feedback' => array('clob', $row['feedback']),
514 'tstamp' => array('integer', time())
515 ));
516
517 if( $this->questionOBJ->isAdditionalContentEditingModePageObject() )
518 {
519 $pageObjectType = $this->getGenericFeedbackPageObjectType();
520 $this->duplicatePageObject($pageObjectType, $row['feedback_id'], $feedbackId, $duplicateQuestionId);
521 }
522 }
523 }
524
534 abstract protected function duplicateSpecificFeedback($originalQuestionId, $duplicateQuestionId);
535
544 final public function syncFeedback($originalQuestionId, $duplicateQuestionId)
545 {
546 $this->syncGenericFeedback($originalQuestionId, $duplicateQuestionId);
547 $this->syncSpecificFeedback($originalQuestionId, $duplicateQuestionId);
548 }
549
558 final private function syncGenericFeedback($originalQuestionId, $duplicateQuestionId)
559 {
560 // delete generic feedback of the original question
561 $this->db->manipulateF(
562 "DELETE FROM {$this->getGenericFeedbackTableName()} WHERE question_fi = %s", array('integer'), array($originalQuestionId)
563 );
564
565 // get generic feedback of the actual (duplicated) question
566 $result = $this->db->queryF(
567 "SELECT * FROM {$this->getGenericFeedbackTableName()} WHERE question_fi = %s", array('integer'), array($duplicateQuestionId)
568 );
569
570 // save generic feedback to the original question
571 while( $row = $this->db->fetchAssoc($result) )
572 {
573 $nextId = $this->db->nextId($this->getGenericFeedbackTableName());
574
575 $this->db->insert($this->getGenericFeedbackTableName(), array(
576 'feedback_id' => array('integer', $nextId),
577 'question_fi' => array('integer', $originalQuestionId),
578 'correctness' => array('text', $row['correctness']),
579 'feedback' => array('clob', $row['feedback']),
580 'tstamp' => array('integer', time())
581 ));
582 }
583 }
584
594 final protected function getGenericFeedbackId($questionId, $solutionCompleted)
595 {
596 $res = $this->db->queryF(
597 "SELECT feedback_id FROM {$this->getGenericFeedbackTableName()} WHERE question_fi = %s AND correctness = %s",
598 array('integer','text'), array($questionId, (int)$solutionCompleted)
599 );
600
601 $feedbackId = null;
602
603 while( $row = $this->db->fetchAssoc($res) )
604 {
605 $feedbackId = $row['feedback_id'];
606 break;
607 }
608
609 return $feedbackId;
610 }
611
616 protected function isGenericFeedbackId($feedbackId)
617 {
618 $row = $this->db->fetchAssoc($this->db->queryF(
619 "SELECT COUNT(feedback_id) cnt FROM {$this->getGenericFeedbackTableName()}
620 WHERE question_fi = %s AND feedback_id = %s",
621 array('integer','integer'), array($this->questionOBJ->getId(), $feedbackId)
622 ));
623
624
625 return $row['cnt'];
626 }
627
632 abstract protected function isSpecificAnswerFeedbackId($feedbackId);
633
638 final public function checkFeedbackParent($feedbackId)
639 {
640 if( $this->isGenericFeedbackId($feedbackId) )
641 {
642 return true;
643 }
644
645 if( $this->isSpecificAnswerFeedbackId($feedbackId) )
646 {
647 return true;
648 }
649
650 return false;
651 }
652
661 abstract protected function syncSpecificFeedback($originalQuestionId, $duplicateQuestionId);
662
669 final protected function getGenericFeedbackTableName()
670 {
672 }
673
684 final protected function getPageObjectNonEditableValueHTML($pageObjectType, $pageObjectId)
685 {
686 $link = $this->getPageObjectEditingLink($pageObjectType, $pageObjectId);
687 $content = $this->getPageObjectContent($pageObjectType, $pageObjectId);
688
689 return "$link<br /><br />$content";
690 }
691
698 function getClassNameByType($a_type, $a_gui = false)
699 {
700 $gui = ($a_gui)
701 ? "GUI"
702 : "";
703 include_once("./Modules/TestQuestionPool/classes/feedback/class.ilAssQuestionFeedback.php");
705 {
706 return "ilAssGenFeedbackPage".$gui;
707 }
709 {
710 return "ilAssSpecFeedbackPage".$gui;
711 }
712 }
713
714
725 final private function getPageObjectEditingLink($pageObjectType, $pageObjectId)
726 {
727 $cl = $this->getClassNameByType($pageObjectType, true);
728 $this->ctrl->setParameterByClass($cl, 'feedback_type', $pageObjectType);
729 $this->ctrl->setParameterByClass($cl, 'feedback_id', $pageObjectId);
730
731 $linkHREF = $this->ctrl->getLinkTargetByClass($cl, 'edit');
732 $linkTEXT = $this->lng->txt('tst_question_feedback_edit_page');
733
734 return "<a href='$linkHREF'>$linkTEXT</a>";
735 }
736
742 final public function setPageObjectOutputMode($a_val)
743 {
744 $this->page_obj_output_mode = $a_val;
745 }
746
752 final public function getPageObjectOutputMode()
753 {
755 }
756
766 final protected function getPageObjectContent($pageObjectType, $pageObjectId)
767 {
768 global $ilCtrl;
769
770 $cl = $this->getClassNameByType($pageObjectType, true);
771 require_once 'Modules/TestQuestionPool/classes/feedback/class.'.$cl.'.php';
772
773 $this->ensurePageObjectExists($pageObjectType, $pageObjectId);
774
775 $mode = ($ilCtrl->isAsynch())
776 ? "presentation"
777 : $this->getPageObjectOutputMode();
778
779 $pageObjectGUI = new $cl($pageObjectId);
780 $pageObjectGUI->setOutputMode($mode);
781
782 return $pageObjectGUI->presentation($mode);
783 }
784
794 final protected function getPageObjectXML($pageObjectType, $pageObjectId)
795 {
796 $cl = $this->getClassNameByType($pageObjectType);
797 require_once 'Modules/TestQuestionPool/classes/feedback/class.'.$cl.'.php';
798
799 $this->ensurePageObjectExists($pageObjectType, $pageObjectId);
800
801 $pageObject = new $cl($pageObjectId);
802 return $pageObject->getXMLContent();
803 }
804
813 final private function ensurePageObjectExists($pageObjectType, $pageObjectId)
814 {
816 {
817 include_once("./Modules/TestQuestionPool/classes/feedback/class.ilAssGenFeedbackPage.php");
818 if( !ilAssGenFeedbackPage::_exists($pageObjectType, $pageObjectId) )
819 {
820 $pageObject = new ilAssGenFeedbackPage();
821 $pageObject->setParentId($this->questionOBJ->getId());
822 $pageObject->setId($pageObjectId);
823 $pageObject->createFromXML();
824 }
825 }
827 {
828 include_once("./Modules/TestQuestionPool/classes/feedback/class.ilAssSpecFeedbackPage.php");
829 if( !ilAssSpecFeedbackPage::_exists($pageObjectType, $pageObjectId) )
830 {
831 $pageObject = new ilAssSpecFeedbackPage();
832 $pageObject->setParentId($this->questionOBJ->getId());
833 $pageObject->setId($pageObjectId);
834 $pageObject->createFromXML();
835 }
836 }
837 }
838
849 final protected function createPageObject($pageObjectType, $pageObjectId, $pageObjectContent)
850 {
851 $cl = $this->getClassNameByType($pageObjectType);
852 require_once 'Modules/TestQuestionPool/classes/feedback/class.'.$cl.'.php';
853
854 $pageObject = new $cl();
855 $pageObject->setParentId($this->questionOBJ->getId());
856 $pageObject->setId($pageObjectId);
857 $pageObject->setXMLContent($pageObjectContent);
858 $pageObject->createFromXML();
859 }
860
872 final protected function duplicatePageObject($pageObjectType, $originalPageObjectId, $duplicatePageObjectId, $duplicatePageObjectParentId)
873 {
874 $cl = $this->getClassNameByType($pageObjectType);
875 require_once 'Modules/TestQuestionPool/classes/feedback/class.'.$cl.'.php';
876
877 $pageObject = new $cl($originalPageObjectId);
878 $pageObject->setParentId($duplicatePageObjectParentId);
879 $pageObject->setId($duplicatePageObjectId);
880 $pageObject->createFromXML();
881 }
882
891 final protected function ensurePageObjectDeleted($pageObjectType, $pageObjectId)
892 {
894 {
895 include_once("./Modules/TestQuestionPool/classes/feedback/class.ilAssGenFeedbackPage.php");
896 if( ilAssGenFeedbackPage::_exists($pageObjectType, $pageObjectId) )
897 {
898 $pageObject = new ilAssGenFeedbackPage($pageObjectId);
899 $pageObject->delete();
900 }
901 }
903 {
904 include_once("./Modules/TestQuestionPool/classes/feedback/class.ilAssSpecFeedbackPage.php");
905 if( ilAssSpecFeedbackPage::_exists($pageObjectType, $pageObjectId) )
906 {
907 $pageObject = new ilAssSpecFeedbackPage($pageObjectId);
908 $pageObject->delete();
909 }
910 }
911 }
912
921 final protected function getGenericFeedbackPageObjectType()
922 {
924 }
925
935 {
937 }
938
949 final public static function isValidFeedbackPageObjectType($feedbackPageObjectType)
950 {
951 switch( $feedbackPageObjectType )
952 {
955
956 return true;
957 }
958
959 return false;
960 }
961
973 final protected function getGenericFeedbackPageObjectId($questionId, $solutionCompleted)
974 {
975 $pageObjectId = $this->getGenericFeedbackId($questionId, $solutionCompleted);
976
977 if( !$pageObjectId )
978 {
979 $pageObjectId = $this->saveGenericFeedbackContent($questionId, $solutionCompleted, null);
980 }
981
982 return $pageObjectId;
983 }
984
994 public function getGenericFeedbackExportPresentation($questionId, $solutionCompleted)
995 {
996 if( $this->questionOBJ->isAdditionalContentEditingModePageObject() )
997 {
998 $genericFeedbackExportPresentation = $this->getPageObjectXML(
1000 $this->getGenericFeedbackPageObjectId($questionId, $solutionCompleted)
1001 );
1002 }
1003 else
1004 {
1005 $genericFeedbackExportPresentation = $this->getGenericFeedbackContent($questionId, $solutionCompleted);
1006 }
1007
1008 return $genericFeedbackExportPresentation;
1009 }
1010
1021 abstract public function getSpecificAnswerFeedbackExportPresentation($questionId, $answerIndex);
1022
1032 public function importGenericFeedback($questionId, $solutionCompleted, $feedbackContent)
1033 {
1034 if( $this->questionOBJ->isAdditionalContentEditingModePageObject() )
1035 {
1036 $pageObjectId = $this->getGenericFeedbackPageObjectId($questionId, $solutionCompleted);
1037 $pageObjectType = $this->getGenericFeedbackPageObjectType();
1038
1039 $this->createPageObject($pageObjectType, $pageObjectId, $feedbackContent);
1040 }
1041 else
1042 {
1043 $this->saveGenericFeedbackContent($questionId, $solutionCompleted, $feedbackContent);
1044 }
1045 }
1046
1057 abstract public function importSpecificAnswerFeedback($questionId, $answerIndex, $feedbackContent);
1058
1063 public function migrateContentForLearningModule(ilAssSelfAssessmentMigrator $migrator, $questionId)
1064 {
1065 $this->saveGenericFeedbackContent($questionId, true, $migrator->migrateToLmContent(
1066 $this->getGenericFeedbackContent($questionId, true)
1067 ));
1068
1069 $this->saveGenericFeedbackContent($questionId, false, $migrator->migrateToLmContent(
1070 $this->getGenericFeedbackContent($questionId, false)
1071 ));
1072 }
1073}
$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.
addItem($a_item)
Add Item (Property, SectionHeader).
getInput($a_post_var, $ensureValidation=true)
Returns the value of a HTTP-POST variable, identified by the passed id.
getItemByPostVar($a_post_var)
Get Item by POST variable.
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.
$a_type
Definition: workflow.php:93