ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
All Data Structures Namespaces Files Functions Variables Typedefs Modules Pages
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  $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 
169  abstract public function completeSpecificFormProperties(ilPropertyFormGUI $form);
170 
179  final public function initGenericFormProperties(ilPropertyFormGUI $form)
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 
217  abstract public function initSpecificFormProperties(ilPropertyFormGUI $form);
218 
227  final public function saveGenericFormProperties(ilPropertyFormGUI $form)
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 
243  abstract public function saveSpecificFormProperties(ilPropertyFormGUI $form);
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  {
662  return self::TABLE_NAME_GENERIC_FEEDBACK;
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  {
904  return self::PAGE_OBJECT_TYPE_GENERIC_FEEDBACK;
905  }
906 
915  final protected function getSpecificAnswerFeedbackPageObjectType()
916  {
917  return self::PAGE_OBJECT_TYPE_SPECIFIC_FEEDBACK;
918  }
919 
930  final public static function isValidFeedbackPageObjectType($feedbackPageObjectType)
931  {
932  switch ($feedbackPageObjectType) {
933  case self::PAGE_OBJECT_TYPE_GENERIC_FEEDBACK:
934  case self::PAGE_OBJECT_TYPE_SPECIFIC_FEEDBACK:
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 }
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:92
foreach($_POST as $key=> $value) $res
if(isset($_POST['submit'])) $form
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 ...