/**
  * forwards the command to page object gui for author presentation
  * 
  * @access private
  * @return page object gui object
  */
 private function buildAuthorPresentationPageObjectGUI()
 {
     $this->tabs->setBackTarget($this->lng->txt('tst_question_hints_back_to_hint_list'), $this->ctrl->getLinkTargetByClass('ilAssQuestionHintsGUI', ilAssQuestionHintsGUI::CMD_SHOW_LIST));
     $this->ensurePageObjectExists($this->questionHint->getPageObjectType(), $this->questionHint->getId());
     $pageObjectGUI = $this->getPageObjectGUI($this->questionHint->getPageObjectType(), $this->questionHint->getId());
     $pageObjectGUI->setEnabledTabs(true);
     return $pageObjectGUI;
 }
 /**
  * builds the questions hints form
  * 
  * @access	private
  * @global	ilCtrl				$ilCtrl
  * @global	ilLanguage			$lng
  * @return	ilPropertyFormGUI	$form
  */
 private function buildForm(ilAssQuestionHint $questionHint = null)
 {
     global $ilCtrl, $lng;
     require_once 'Services/Form/classes/class.ilPropertyFormGUI.php';
     require_once 'Services/Form/classes/class.ilTextAreaInputGUI.php';
     require_once 'Services/Form/classes/class.ilNumberInputGUI.php';
     require_once 'Services/Form/classes/class.ilHiddenInputGUI.php';
     $form = new ilPropertyFormGUI();
     $form->setTableWidth('100%');
     if (!$this->questionOBJ->isAdditionalContentEditingModePageObject()) {
         // form input: hint text
         $areaInp = new ilTextAreaInputGUI($lng->txt('tst_question_hints_form_label_hint_text'), 'hint_text');
         $areaInp->setRequired(true);
         $areaInp->setRows(10);
         $areaInp->setCols(80);
         if (!$this->questionOBJ->getPreventRteUsage()) {
             $areaInp->setUseRte(true);
         }
         include_once "./Services/AdvancedEditing/classes/class.ilObjAdvancedEditing.php";
         $areaInp->setRteTags(ilObjAdvancedEditing::_getUsedHTMLTags("assessment"));
         $areaInp->setRTESupport($this->questionOBJ->getId(), 'qpl', 'assessment');
         $areaInp->addPlugin("latex");
         $areaInp->addButton("latex");
         $areaInp->addButton("pastelatex");
         $form->addItem($areaInp);
     }
     // form input: hint points
     $numInp = new ilNumberInputGUI($lng->txt('tst_question_hints_form_label_hint_points'), 'hint_points');
     $numInp->allowDecimals(true);
     $numInp->setRequired(true);
     $numInp->setSize(3);
     $form->addItem($numInp);
     if ($questionHint instanceof ilAssQuestionHint) {
         // build form title for an existing hint
         $form->setTitle(sprintf($lng->txt('tst_question_hints_form_header_edit'), $questionHint->getIndex(), $this->questionOBJ->getTitle()));
         // hidden input: hint id
         $hiddenInp = new ilHiddenInputGUI('hint_id');
         $form->addItem($hiddenInp);
         // init values
         require_once 'Services/Utilities/classes/class.ilUtil.php';
         if (!$this->questionOBJ->isAdditionalContentEditingModePageObject()) {
             $areaInp->setValue(ilUtil::prepareTextareaOutput($questionHint->getText(), true));
         }
         $numInp->setValue($questionHint->getPoints());
         $hiddenInp->setValue($questionHint->getId());
     } else {
         // build form title for a new hint
         $form->setTitle(sprintf($lng->txt('tst_question_hints_form_header_create'), $this->questionOBJ->getTitle()));
     }
     if ($this->questionOBJ->isAdditionalContentEditingModePageObject()) {
         if ($questionHint instanceof ilAssQuestionHint) {
             $saveCmdLabel = $lng->txt('tst_question_hints_form_cmd_save_points');
         } else {
             $saveCmdLabel = $lng->txt('tst_question_hints_form_cmd_save_points_and_edit_page');
         }
     } else {
         $saveCmdLabel = $lng->txt('tst_question_hints_form_cmd_save');
     }
     $form->setFormAction($ilCtrl->getFormAction($this));
     $form->addCommandButton(self::CMD_CANCEL_FORM, $lng->txt('cancel'));
     $form->addCommandButton(self::CMD_SAVE_FORM, $saveCmdLabel);
     return $form;
 }
 /**
  * renders a table row by filling wor data to table row template
  * 
  * @access	public
  * @global	ilCtrl		$ilCtrl
  * @global	ilLanguage	$lng
  * @param	array		$rowData
  */
 public function fillRow($rowData)
 {
     global $ilCtrl, $lng;
     if ($this->tableMode == self::TBL_MODE_ADMINISTRATION) {
         $list = new ilAdvancedSelectionListGUI();
         $list->setListTitle($lng->txt('actions'));
         $list->setId("advsl_hint_{$rowData['hint_id']}_actions");
         if ($this->questionOBJ->isAdditionalContentEditingModePageObject()) {
             $editPointsHref = $ilCtrl->getLinkTargetByClass('ilAssQuestionHintGUI', ilAssQuestionHintGUI::CMD_SHOW_FORM);
             $editPointsHref = ilUtil::appendUrlParameterString($editPointsHref, "hint_id={$rowData['hint_id']}", true);
             $list->addItem($lng->txt('tst_question_hints_table_link_edit_hint_points'), '', $editPointsHref);
             $editPageHref = $ilCtrl->getLinkTargetByClass('ilasshintpagegui', 'edit');
             $editPageHref = ilUtil::appendUrlParameterString($editPageHref, "hint_id={$rowData['hint_id']}", true);
             $list->addItem($lng->txt('tst_question_hints_table_link_edit_hint_page'), '', $editPageHref);
         } else {
             $editHref = $ilCtrl->getLinkTargetByClass('ilAssQuestionHintGUI', ilAssQuestionHintGUI::CMD_SHOW_FORM);
             $editHref = ilUtil::appendUrlParameterString($editHref, "hint_id={$rowData['hint_id']}", true);
             $list->addItem($lng->txt('tst_question_hints_table_link_edit_hint'), '', $editHref);
         }
         $deleteHref = $ilCtrl->getLinkTarget($this->parent_obj, ilAssQuestionHintsGUI::CMD_CONFIRM_DELETE);
         $deleteHref = ilUtil::appendUrlParameterString($deleteHref, "hint_id={$rowData['hint_id']}", true);
         $list->addItem($lng->txt('tst_question_hints_table_link_delete_hint'), '', $deleteHref);
         $this->tpl->setVariable('ACTIONS', $list->getHTML());
         $this->tpl->setVariable('HINT_ID', $rowData['hint_id']);
         $hintIndex = $rowData['hint_index'] * self::INDEX_TO_POSITION_FACTOR;
     } else {
         $showHref = $this->parent_obj->getHintPresentationLinkTarget($rowData['hint_id']);
         $this->tpl->setVariable('HINT_HREF', $showHref);
         $hintIndex = ilAssQuestionHint::getHintIndexLabel($lng, $rowData['hint_index']);
     }
     $this->tpl->setVariable('HINT_INDEX', $hintIndex);
     $this->tpl->setVariable('HINT_TEXT', $rowData['hint_text']);
     $this->tpl->setVariable('HINT_POINTS', $rowData['hint_points']);
 }
 public function storeRequest(ilAssQuestionHint $questionHint)
 {
     $this->previewSession->addRequestedHint($questionHint->getId());
 }
 /**
  * Tracks the given hint as requested for the given
  * question, testactive and testpass
  *
  * @access	public
  * @global	ilDB				$ilDB
  * @param	ilAssQuestionHint	$questionHint
  */
 public function storeRequest(ilAssQuestionHint $questionHint)
 {
     global $ilDB;
     $trackId = $ilDB->nextId('qpl_hint_tracking');
     $ilDB->insert('qpl_hint_tracking', array('qhtr_track_id' => array('integer', $trackId), 'qhtr_active_fi' => array('integer', $this->getActiveId()), 'qhtr_pass' => array('integer', $this->getPass()), 'qhtr_question_fi' => array('integer', $this->getQuestionId()), 'qhtr_hint_fi' => array('integer', $questionHint->getId())));
 }
 /**
  * inits the notification telling the user,
  * that a hint is stored to hint ordering clipboard
  * 
  * @access	private
  * @global	ilLanguage	$lng
  */
 private function initHintOrderingClipboardNotification()
 {
     global $lng;
     if (!$this->hintOrderingClipboard->hasStored()) {
         return;
     }
     $questionHint = ilAssQuestionHint::getInstanceById($this->hintOrderingClipboard->getStored());
     ilUtil::sendInfo(sprintf($lng->txt('tst_question_hints_item_stored_in_ordering_clipboard'), $questionHint->getIndex()));
 }
 /**
  * shows an allready requested hint
  * 
  * @access	private
  * @global	ilCtrl $ilCtrl
  * @global	ilTemplate $tpl
  * @global	ilLanguage $lng
  */
 private function showHintCmd()
 {
     global $ilCtrl, $tpl, $lng;
     if (!isset($_GET['hintId']) || !(int) $_GET['hintId']) {
         throw new ilTestException('no hint id given');
     }
     $isRequested = $this->questionHintTracking->isRequested((int) $_GET['hintId']);
     if (!$isRequested) {
         throw new ilTestException('hint with given id is not yet requested for given testactive and testpass');
     }
     $questionHint = ilAssQuestionHint::getInstanceById((int) $_GET['hintId']);
     require_once 'Services/Utilities/classes/class.ilUtil.php';
     require_once 'Services/Form/classes/class.ilPropertyFormGUI.php';
     require_once 'Services/Form/classes/class.ilNonEditableValueGUI.php';
     // build form
     $form = new ilPropertyFormGUI();
     $form->setFormAction($ilCtrl->getFormAction($this));
     $form->setTableWidth('100%');
     $form->setTitle(sprintf($lng->txt('tst_question_hints_form_header_edit'), $questionHint->getIndex(), $this->questionOBJ->getTitle()));
     $form->addCommandButton(self::CMD_BACK_TO_QUESTION, $lng->txt('tst_question_hints_back_to_question'));
     $numExistingRequests = $this->questionHintTracking->getNumExistingRequests();
     if ($numExistingRequests > 1) {
         $form->addCommandButton(self::CMD_SHOW_LIST, $lng->txt('button_show_requested_question_hints'));
     }
     // form input: hint text
     $nonEditableHintText = new ilNonEditableValueGUI($lng->txt('tst_question_hints_form_label_hint_text'), 'hint_text', true);
     $nonEditableHintText->setValue(ilUtil::prepareTextareaOutput($questionHint->getText(), true));
     $form->addItem($nonEditableHintText);
     // form input: hint points
     $nonEditableHintPoints = new ilNonEditableValueGUI($lng->txt('tst_question_hints_form_label_hint_points'), 'hint_points');
     $nonEditableHintPoints->setValue($questionHint->getPoints());
     $form->addItem($nonEditableHintPoints);
     $this->populateContent($ilCtrl->getHtml($form));
 }
 /**
  * instantiates a question hint list for the passed hint ids
  * 
  * @access	public
  * @static
  * @global	ilDB	$ilDB
  * @param	array	$hintIds
  * @return	self	$questionHintList
  */
 public static function getListByHintIds($hintIds)
 {
     global $ilDB;
     $qht_hint_id__IN__hintIds = $ilDB->in('qht_hint_id', $hintIds, false, 'integer');
     $query = "\n\t\t\tSELECT\t\tqht_hint_id,\n\t\t\t\t\t\tqht_question_fi,\n\t\t\t\t\t\tqht_hint_index,\n\t\t\t\t\t\tqht_hint_points,\n\t\t\t\t\t\tqht_hint_text\n\t\t\t\t\t\n\t\t\tFROM\t\tqpl_hints\n\t\t\t\n\t\t\tWHERE\t\t{$qht_hint_id__IN__hintIds}\n\t\t\t\n\t\t\tORDER BY\tqht_hint_index ASC\n\t\t";
     $res = $ilDB->query($query);
     $questionHintList = new self();
     while ($row = $ilDB->fetchAssoc($res)) {
         $questionHint = new ilAssQuestionHint();
         ilAssQuestionHint::assignDbRow($questionHint, $row);
         $questionHintList->addHint($questionHint);
     }
     return $questionHintList;
 }
 /**
  * assigns the field elements of passed hint db row array to the
  * corresponding hint object properties of passed hint object instance
  *
  * @access	public
  * @static
  * @param	self	$questionHint
  * @param	array	$hintDbRow
  */
 public static function assignDbRow(self $questionHint, $hintDbRow)
 {
     foreach ($hintDbRow as $field => $value) {
         switch ($field) {
             case 'qht_hint_id':
                 $questionHint->setId($value);
                 break;
             case 'qht_question_fi':
                 $questionHint->setQuestionId($value);
                 break;
             case 'qht_hint_index':
                 $questionHint->setIndex($value);
                 break;
             case 'qht_hint_points':
                 $questionHint->setPoints($value);
                 break;
             case 'qht_hint_text':
                 $questionHint->setText($value);
                 break;
             default:
                 throw new ilTestQuestionPoolException("invalid db field identifier ({$field}) given!");
         }
     }
 }