114 if ($this->questionOBJ->isAdditionalContentEditingModePageObject()) {
123 return $genericFeedbackTestPresentationHTML;
149 $this->lng->txt(
'feedback_complete_solution'),
151 $this->questionOBJ->isAdditionalContentEditingModePageObject()
155 $this->lng->txt(
'feedback_incomplete_solution'),
156 'feedback_incomplete',
157 $this->questionOBJ->isAdditionalContentEditingModePageObject()
181 if ($this->questionOBJ->isAdditionalContentEditingModePageObject()) {
195 $this->questionOBJ->getId(),
200 $this->questionOBJ->getId(),
205 $form->getItemByPostVar(
'feedback_complete')->setValue($valueFeedbackSolutionComplete);
206 $form->getItemByPostVar(
'feedback_incomplete')->setValue($valueFeedbackSolutionIncomplete);
229 if (!$this->questionOBJ->isAdditionalContentEditingModePageObject()) {
274 if ($asNonEditable) {
275 require_once
'Services/Form/classes/class.ilNonEditableValueGUI.php';
279 require_once
'Services/Form/classes/class.ilTextAreaInputGUI.php';
280 require_once
'Services/AdvancedEditing/classes/class.ilObjAdvancedEditing.php';
283 $property->setRequired(
false);
284 $property->setRows(10);
285 $property->setCols(80);
287 if (!$this->questionOBJ->getPreventRteUsage()) {
288 $property->setUseRte(
true);
289 $property->addPlugin(
"latex");
290 $property->addButton(
"latex");
291 $property->addButton(
"pastelatex");
293 require_once
'Services/AdvancedEditing/classes/class.ilObjAdvancedEditing.php';
295 $property->setRTESupport($this->questionOBJ->getId(),
"qpl",
"assessment");
297 require_once
'Modules/TestQuestionPool/classes/questions/class.ilAssSelfAssessmentQuestionFormatter.php';
299 $property->setUseTagsForRteOnly(
false);
302 $property->setRTESupport($this->questionOBJ->getId(),
"qpl",
"assessment");
321 require_once
'Services/RTE/classes/class.ilRTE.php';
323 $correctness = $solutionCompleted ? 1 : 0;
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)
331 $feedbackContent =
null;
333 while (
$row = $this->db->fetchAssoc(
$res)) {
338 return $feedbackContent;
376 require_once
'Services/RTE/classes/class.ilRTE.php';
378 $correctness = $solutionCompleted ? 1 : 0;
382 if (strlen($feedbackContent)) {
390 'feedback' => array(
'clob', $feedbackContent),
391 'tstamp' => array(
'integer', time())
394 'feedback_id' => array(
'integer', $feedbackId)
401 'feedback_id' => array(
'integer', $feedbackId),
402 'question_fi' => array(
'integer', $questionId),
403 'correctness' => array(
'text', $correctness),
404 'feedback' => array(
'clob', $feedbackContent),
405 'tstamp' => array(
'integer', time())
435 if ($isAdditionalContentEditingModePageObject) {
447 $this->db->manipulateF(
448 "DELETE FROM {$this->getGenericFeedbackTableName()} WHERE question_fi = %s",
490 $res = $this->db->queryF(
491 "SELECT * FROM {$this->getGenericFeedbackTableName()} WHERE question_fi = %s",
493 array($originalQuestionId)
496 while (
$row = $this->db->fetchAssoc(
$res)) {
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())
507 if ($this->questionOBJ->isAdditionalContentEditingModePageObject()) {
533 final public function syncFeedback($originalQuestionId, $duplicateQuestionId)
550 $this->db->manipulateF(
551 "DELETE FROM {$this->getGenericFeedbackTableName()} WHERE question_fi = %s",
553 array($originalQuestionId)
558 "SELECT * FROM {$this->getGenericFeedbackTableName()} WHERE question_fi = %s",
560 array($duplicateQuestionId)
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())
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)
596 while (
$row = $this->db->fetchAssoc(
$res)) {
597 $feedbackId =
$row[
'feedback_id'];
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)
680 return "$link<br /><br />$content";
694 include_once(
"./Modules/TestQuestionPool/classes/feedback/class.ilAssQuestionFeedback.php");
696 return "ilAssGenFeedbackPage" . $gui;
699 return "ilAssSpecFeedbackPage" . $gui;
717 $this->ctrl->setParameterByClass($cl,
'feedback_type', $pageObjectType);
718 $this->ctrl->setParameterByClass($cl,
'feedback_id', $pageObjectId);
720 $linkHREF = $this->ctrl->getLinkTargetByClass($cl,
'edit');
721 $linkTEXT = $this->lng->txt(
'tst_question_feedback_edit_page');
723 return "<a href='$linkHREF'>$linkTEXT</a>";
733 $this->page_obj_output_mode = $a_val;
760 require_once
'Modules/TestQuestionPool/classes/feedback/class.' . $cl .
'.php';
768 $pageObjectGUI =
new $cl($pageObjectId);
769 $pageObjectGUI->setOutputMode($mode);
771 return $pageObjectGUI->presentation($mode);
786 require_once
'Modules/TestQuestionPool/classes/feedback/class.' . $cl .
'.php';
790 $pageObject =
new $cl($pageObjectId);
791 return $pageObject->getXMLContent();
805 include_once(
"./Modules/TestQuestionPool/classes/feedback/class.ilAssGenFeedbackPage.php");
808 $pageObject->setParentId($this->questionOBJ->getId());
809 $pageObject->setId($pageObjectId);
810 $pageObject->createFromXML();
814 include_once(
"./Modules/TestQuestionPool/classes/feedback/class.ilAssSpecFeedbackPage.php");
817 $pageObject->setParentId($this->questionOBJ->getId());
818 $pageObject->setId($pageObjectId);
819 $pageObject->createFromXML();
834 final protected function createPageObject($pageObjectType, $pageObjectId, $pageObjectContent)
837 require_once
'Modules/TestQuestionPool/classes/feedback/class.' . $cl .
'.php';
839 $pageObject =
new $cl();
840 $pageObject->setParentId($this->questionOBJ->getId());
841 $pageObject->setId($pageObjectId);
842 $pageObject->setXMLContent($pageObjectContent);
843 $pageObject->createFromXML();
857 final protected function duplicatePageObject($pageObjectType, $originalPageObjectId, $duplicatePageObjectId, $duplicatePageObjectParentId)
860 require_once
'Modules/TestQuestionPool/classes/feedback/class.' . $cl .
'.php';
862 $pageObject =
new $cl($originalPageObjectId);
863 $pageObject->setParentId($duplicatePageObjectParentId);
864 $pageObject->setId($duplicatePageObjectId);
865 $pageObject->createFromXML();
879 include_once(
"./Modules/TestQuestionPool/classes/feedback/class.ilAssGenFeedbackPage.php");
882 $pageObject->delete();
886 include_once(
"./Modules/TestQuestionPool/classes/feedback/class.ilAssSpecFeedbackPage.php");
889 $pageObject->delete();
932 switch ($feedbackPageObjectType) {
957 if (!$pageObjectId) {
961 return $pageObjectId;
975 if ($this->questionOBJ->isAdditionalContentEditingModePageObject()) {
984 return $genericFeedbackExportPresentation;
1010 if ($this->questionOBJ->isAdditionalContentEditingModePageObject()) {
1039 $this->getGenericFeedbackContent($questionId,
true)
1043 $this->getGenericFeedbackContent($questionId,
false)
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.
checkFeedbackParent($feedbackId)
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.
const CSS_CLASS_FEEDBACK_WRONG
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.
isGenericFeedbackId($feedbackId)
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.
const CSS_CLASS_FEEDBACK_CORRECT
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 ...
Specific feedback page object.
This class provides processing control methods.
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.
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.
migrateToLmContent($content)
if(isset($_POST['submit'])) $form
foreach($_POST as $key=> $value) $res