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 
14 abstract class ilAssQuestionFeedback
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  {
671  return self::TABLE_NAME_GENERIC_FEEDBACK;
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  {
923  return self::PAGE_OBJECT_TYPE_GENERIC_FEEDBACK;
924  }
925 
934  final protected function getSpecificAnswerFeedbackPageObjectType()
935  {
936  return self::PAGE_OBJECT_TYPE_SPECIFIC_FEEDBACK;
937  }
938 
949  final public static function isValidFeedbackPageObjectType($feedbackPageObjectType)
950  {
951  switch( $feedbackPageObjectType )
952  {
953  case self::PAGE_OBJECT_TYPE_GENERIC_FEEDBACK:
954  case self::PAGE_OBJECT_TYPE_SPECIFIC_FEEDBACK:
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 }
static _exists($a_parent_type, $a_id, $a_lang="", $a_no_cache=false)
Checks whether page exists.
static getSelfAssessmentTags()
Get tags allowed in question tags in self assessment mode.
initSpecificFormProperties(ilPropertyFormGUI $form)
initialises a given form object&#39;s SPECIFIC form properties relating to this question type ...
This class provides processing control methods.
createPageObject($pageObjectType, $pageObjectId, $pageObjectContent)
creates a new page object with given page object id and page object type and passed page object conte...
getItemByPostVar($a_post_var)
Get Item by POST variable.
$result
getPageObjectNonEditableValueHTML($pageObjectType, $pageObjectId)
returns html content to be used as value for non editable value form properties in feedback editing f...
This class represents a property form user interface.
ensurePageObjectExists($pageObjectType, $pageObjectId)
ensures an existing page object with given type and id
getPageObjectOutputMode()
Get page object output mode.
getGenericFeedbackTestPresentation($questionId, $solutionCompleted)
returns the html of GENERIC feedback for the given question id for test presentation (either for the ...
getSpecificAnswerFeedbackPageObjectType()
returns the type for specific feedback page objects defined in local constant
Abstract basic class which is to be extended by the concrete assessment question type classes...
getGenericFeedbackTableName()
returns the table name for specific feedback
static _getUsedHTMLTags($a_module="")
Returns an array of all allowed HTML tags for text editing.
__construct(assQuestion $questionOBJ, ilCtrl $ctrl, ilDBInterface $db, ilLanguage $lng)
constructor
static isValidFeedbackPageObjectType($feedbackPageObjectType)
returns the fact wether the given page object type relates to generic or specific feedback page objec...
migrateContentForLearningModule(ilAssSelfAssessmentMigrator $migrator, $questionId)
addItem($a_item)
Add Item (Property, SectionHeader).
saveSpecificFormProperties(ilPropertyFormGUI $form)
saves a given form object&#39;s SPECIFIC form properties relating to this question type ...
getSpecificAnswerFeedbackTestPresentation($questionId, $answerIndex)
returns the html of SPECIFIC feedback for the given question id and answer index for test presentatio...
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...
deleteGenericFeedbacks($questionId, $isAdditionalContentEditingModePageObject)
deletes all GENERIC feedback contents (and page objects if required) for the given question id ...
getGenericFeedbackContent($questionId, $solutionCompleted)
returns the GENERIC feedback content for a given question state.
getClassNameByType($a_type, $a_gui=false)
Get class name by type.
global $ilCtrl
Definition: ilias.php:18
Generic feedback page object.
getSpecificAnswerFeedbackContent($questionId, $answerIndex)
returns the SPECIFIC feedback content for a given question id and answer index.
getGenericFeedbackPageObjectId($questionId, $solutionCompleted)
returns a useable page object id for generic feedback page objects for the given question id for eith...
getPageObjectContent($pageObjectType, $pageObjectId)
returns the content of page object with given type and id
Interface ilDBInterface.
$a_type
Definition: workflow.php:93
syncSpecificFeedback($originalQuestionId, $duplicateQuestionId)
syncs the SPECIFIC feedback from a duplicated question back to the original question ...
const TABLE_NAME_GENERIC_FEEDBACK
table name for specific feedback
duplicateGenericFeedback($originalQuestionId, $duplicateQuestionId)
duplicates the GENERIC feedback relating to the given original question id and saves it for the given...
importSpecificAnswerFeedback($questionId, $answerIndex, $feedbackContent)
imports the given feedback content as specific feedback for the given question id and answer index ...
saveSpecificAnswerFeedbackContent($questionId, $answerIndex, $feedbackContent)
saves SPECIFIC feedback content for the given question id and answer index to the database...
const PAGE_OBJECT_TYPE_GENERIC_FEEDBACK
type for generic feedback page objects
duplicatePageObject($pageObjectType, $originalPageObjectId, $duplicatePageObjectId, $duplicatePageObjectParentId)
duplicates the page object with given type and original id to new page object with same type and give...
duplicateSpecificFeedback($originalQuestionId, $duplicateQuestionId)
duplicates the SPECIFIC feedback relating to the given original question id and saves it for the give...
getInput($a_post_var, $ensureValidation=true)
Returns the value of a HTTP-POST variable, identified by the passed id.
syncFeedback($originalQuestionId, $duplicateQuestionId)
syncs the feedback from a duplicated question back to the original question
importGenericFeedback($questionId, $solutionCompleted, $feedbackContent)
imports the given feedback content as generic feedback for the given question id for either the compl...
Create styles array
The data for the language used.
const FEEDBACK_SOLUTION_INCOMPLETE_PAGE_OBJECT_ID
id for page object relating to generic incomplete solution feedback
deleteSpecificAnswerFeedbacks($questionId, $isAdditionalContentEditingModePageObject)
deletes all SPECIFIC feedback contents for the given question id
Specific feedback page object.
isSaveableInPageObjectEditingMode()
returns the fact wether the feedback editing form is saveable in page object editing or not...
getGenericFeedbackExportPresentation($questionId, $solutionCompleted)
returns the generic feedback export presentation for given question id either for solution completed ...
saveGenericFormProperties(ilPropertyFormGUI $form)
saves a given form object&#39;s GENERIC form properties relating to all question types ...
isSpecificAnswerFeedbackId($feedbackId)
getPageObjectXML($pageObjectType, $pageObjectId)
returns the xml of page object with given type and id
const FEEDBACK_SOLUTION_COMPLETE_PAGE_OBJECT_ID
id for page object relating to generic complete solution feedback
getGenericFeedbackId($questionId, $solutionCompleted)
returns the SPECIFIC answer feedback ID for a given question id and answer index. ...
ensurePageObjectDeleted($pageObjectType, $pageObjectId)
ensures a no more existing page object for given type and id
This class represents a non editable value in a property form.
This class represents a text area property in a property form.
duplicateFeedback($originalQuestionId, $duplicateQuestionId)
duplicates the feedback relating to the given original question id and saves it for the given duplica...
completeGenericFormProperties(ilPropertyFormGUI $form)
completes a given form object with the GENERIC form properties required by all question types ...
completeSpecificFormProperties(ilPropertyFormGUI $form)
completes a given form object with the SPECIFIC form properties required by this question type ...
initGenericFormProperties(ilPropertyFormGUI $form)
initialises a given form object&#39;s GENERIC form properties relating to all question types ...
getGenericFeedbackPageObjectType()
returns the type for generic feedback page objects defined in local constant
saveGenericFeedbackContent($questionId, $solutionCompleted, $feedbackContent)
saves GENERIC feedback content for the given question id to the database.
language handling
Add data(end) time
Method that wraps PHPs time in order to allow simulations with the workflow.
buildFeedbackContentFormProperty($label, $postVar, $asNonEditable)
builds and returns a form property gui object with the given label and postvar that is addable to pro...
setPageObjectOutputMode($a_val)
Set page object output mode.
getAllSpecificAnswerFeedbackContents($questionId)
returns the SPECIFIC feedback content for a given question id and answer index.
getSpecificAnswerFeedbackExportPresentation($questionId, $answerIndex)
returns the generic feedback export presentation for given question id either for solution completed ...
getPageObjectEditingLink($pageObjectType, $pageObjectId)
returns a link to page object editor for page object with given type and id
const PAGE_OBJECT_TYPE_SPECIFIC_FEEDBACK
type for specific feedback page objects
syncGenericFeedback($originalQuestionId, $duplicateQuestionId)
syncs the GENERIC feedback from a duplicated question back to the original question ...