/** * Gets all floorplans. * * @return type return of $this->ilDB->query */ public function getAllFloorplans() { $set = $this->ilDB->query('SELECT * FROM ' . dbc::FLOORPLANS_TABLE . ' WHERE pool_id = ' . $this->ilDB->quote($this->pool_id, 'integer') . ' order by file_id DESC'); $floorplans = array(); $row = $this->ilDB->fetchAssoc($set); while ($row) { $mobj = new ilObjMediaObject($row['file_id']); $row["title"] = $mobj->getTitle(); $floorplans[] = $row; $row = $this->ilDB->fetchAssoc($set); } return $floorplans; }
/** * Creates a question from a QTI file * * Receives parameters from a QTI parser and creates a valid ILIAS question object * * @param object $item The QTI item object * @param integer $questionpool_id The id of the parent questionpool * @param integer $tst_id The id of the parent test if the question is part of a test * @param object $tst_object A reference to the parent test object * @param integer $question_counter A reference to a question counter to count the questions of an imported question pool * @param array $import_mapping An array containing references to included ILIAS objects * @access public */ function fromXML(&$item, $questionpool_id, &$tst_id, &$tst_object, &$question_counter, &$import_mapping) { global $ilUser; // empty session variable for imported xhtml mobs unset($_SESSION["import_mob_xhtml"]); $presentation = $item->getPresentation(); $duration = $item->getDuration(); $now = getdate(); $created = sprintf("%04d%02d%02d%02d%02d%02d", $now['year'], $now['mon'], $now['mday'], $now['hours'], $now['minutes'], $now['seconds']); $feedbacksgeneric = array(); $this->addGeneralMetadata($item); $this->object->setTitle($item->getTitle()); $this->object->setNrOfTries($item->getMaxattempts()); $this->object->setComment($item->getComment()); $this->object->setAuthor($item->getAuthor()); $this->object->setOwner($ilUser->getId()); $this->object->setQuestion($this->object->QTIMaterialToString($item->getQuestiontext())); $this->object->setObjId($questionpool_id); $this->object->setEstimatedWorkingTime($duration["h"], $duration["m"], $duration["s"]); $this->object->setPoints($item->getMetadataEntry("points")); $this->object->setOrderText($item->getMetadataEntry("ordertext")); $this->object->setTextSize($item->getMetadataEntry("textsize")); $this->object->setSeparator($item->getMetadataEntry("separator")); // additional content editing mode information $this->object->setAdditionalContentEditingMode($this->fetchAdditionalContentEditingModeInformation($item)); $this->object->saveToDb(); // handle the import of media objects in XHTML code $questiontext = $this->object->getQuestion(); if (is_array($_SESSION["import_mob_xhtml"])) { include_once "./Services/MediaObjects/classes/class.ilObjMediaObject.php"; include_once "./Services/RTE/classes/class.ilRTE.php"; foreach ($_SESSION["import_mob_xhtml"] as $mob) { if ($tst_id > 0) { $importfile = $this->getTstImportArchivDirectory() . '/' . $mob["uri"]; } else { $importfile = $this->getQplImportArchivDirectory() . '/' . $mob["uri"]; } $GLOBALS['ilLog']->write(__METHOD__ . ': import mob from dir: ' . $importfile); $media_object =& ilObjMediaObject::_saveTempFileAsMediaObject(basename($importfile), $importfile, FALSE); ilObjMediaObject::_saveUsage($media_object->getId(), "qpl:html", $this->object->getId()); $questiontext = str_replace("src=\"" . $mob["mob"] . "\"", "src=\"" . "il_" . IL_INST_ID . "_mob_" . $media_object->getId() . "\"", $questiontext); } } $this->object->setQuestion(ilRTE::_replaceMediaObjectImageSrc($questiontext, 1)); $this->object->saveToDb(); if (count($item->suggested_solutions)) { foreach ($item->suggested_solutions as $suggested_solution) { $this->object->setSuggestedSolution($suggested_solution["solution"]->getContent(), $suggested_solution["gap_index"], true); } $this->object->saveToDb(); } if ($tst_id > 0) { $q_1_id = $this->object->getId(); $question_id = $this->object->duplicate(true, null, null, null, $tst_id); $tst_object->questions[$question_counter++] = $question_id; $import_mapping[$item->getIdent()] = array("pool" => $q_1_id, "test" => $question_id); } else { $import_mapping[$item->getIdent()] = array("pool" => $this->object->getId(), "test" => 0); } }
/** * Get head dependencies * * @param string entity * @param string target release * @param array ids * @return array array of array with keys "component", entity", "ids" */ function getXmlExportHeadDependencies($a_entity, $a_target_release, $a_ids) { if ($a_entity == "pg") { // get all media objects and files of the page include_once "./Services/MediaObjects/classes/class.ilObjMediaObject.php"; include_once "./Modules/File/classes/class.ilObjFile.php"; $mob_ids = array(); $file_ids = array(); foreach ($a_ids as $pg_id) { $pg_id = explode(":", $pg_id); // get media objects $mids = ilObjMediaObject::_getMobsOfObject($pg_id[0] . ":pg", $pg_id[1]); foreach ($mids as $mid) { if (ilObject::_lookupType($mid) == "mob") { $mob_ids[] = $mid; } } // get files $files = ilObjFile::_getFilesOfObject($pg_id[0] . ":pg", $pg_id[1]); foreach ($files as $file) { if (ilObject::_lookupType($file) == "file") { $file_ids[] = $file; } } } return array(array("component" => "Services/MediaObjects", "entity" => "mob", "ids" => $mob_ids), array("component" => "Modules/File", "entity" => "file", "ids" => $file_ids)); } return array(); }
/** * Standard Version of Fill Row. Most likely to * be overwritten by derived class. */ protected function fillRow($a_set) { global $lng, $ilCtrl, $ilAccess; if ($a_set["type"] == "mob") { // output thumbnail $mob = new ilObjMediaObject($a_set["id"]); $med = $mob->getMediaItem("Standard"); $target = $med->getThumbnailTarget(); if ($target != "") { $this->tpl->setCurrentBlock("thumbnail"); $this->tpl->setVariable("IMG_THUMB", $target); $this->tpl->parseCurrentBlock(); } } else { if ($a_set["type"] == "incl") { $this->tpl->setCurrentBlock("thumbnail"); $this->tpl->setVariable("IMG_THUMB", ilUtil::getImagePath("icon_pg.svg")); $this->tpl->parseCurrentBlock(); } } // allow editing of media objects if ($this->parent_obj->mode != "getObject" && $a_set["type"] == "mob") { // output edit link $this->tpl->setCurrentBlock("edit"); $ilCtrl->setParameter($this->parent_obj, "clip_item_id", $a_set["id"]); $ilCtrl->setParameterByClass("ilObjMediaObjectGUI", "clip_item_id", $a_set["id"]); $this->tpl->setVariable("EDIT_LINK", $ilCtrl->getLinkTargetByClass("ilObjMediaObjectGUI", "edit", array("ilEditClipboardGUI"))); $this->tpl->setVariable("TEXT_OBJECT", $a_set["title"] . " [" . $a_set["id"] . "]"); $this->tpl->parseCurrentBlock(); } else { $this->tpl->setCurrentBlock("show"); $this->tpl->setVariable("TEXT_OBJECT2", $a_set["title"] . " [" . $a_set["id"] . "]"); $this->tpl->parseCurrentBlock(); } include_once "./Services/MediaObjects/classes/class.ilObjMediaObjectGUI.php"; if ($a_set["type"] == "mob") { $this->tpl->setVariable("MEDIA_INFO", ilObjMediaObjectGUI::_getMediaInfoHTML($mob)); } $this->tpl->setVariable("CHECKBOX_ID", $a_set["type"] . ":" . $a_set["id"]); }
/** * Fill table row */ protected function fillRow($a_set) { global $lng; $this->tpl->setVariable("FILENAME", $a_set["filename"]); $piname = pathinfo($a_set["filename"]); $th_path = ilObjMediaObject::getThumbnailPath($this->mob->getId(), basename($a_set["filename"], "." . $piname['extension']) . ".png"); if (!is_file($th_path)) { $this->mob->makeThumbnail("overlays/" . $a_set["filename"], basename($a_set["filename"], "." . $piname['extension']) . ".png"); } if (is_file($th_path)) { $this->tpl->setVariable("THUMB", ilUtil::img($th_path)); } }
public function getPageDiskSize() { $quota_sum = 0; $this->buildDom(); $dom = $this->getDom(); if ($dom instanceof php4DOMDocument) { $dom = $dom->myDOMDocument; } $xpath_temp = new DOMXPath($dom); // mobs include_once "Services/MediaObjects/classes/class.ilObjMediaObject.php"; $nodes = $xpath_temp->query("//PageContent/MediaObject/MediaAlias"); foreach ($nodes as $node) { $mob_id = array_pop(explode("_", $node->getAttribute("OriginId"))); $mob_dir = ilObjMediaObject::_getDirectory($mob_id); $quota_sum += ilUtil::dirSize($mob_dir); } return $quota_sum; }
/** * Import XML * * @param * @return */ function importXmlRepresentation($a_entity, $a_id, $a_xml, $a_mapping) { // Container import => test object already created if ($new_id = $a_mapping->getMapping('Services/Container', 'objs', $a_id)) { $newObj = ilObjectFactory::getInstanceByObjId($new_id, false); #$newObj->setImportDirectory(dirname(rtrim($this->getImportDirectory(),'/'))); } else { // Shouldn't happen $GLOBALS['ilLog']->write(__METHOD__ . ': Called in non container mode'); return false; } include_once "./Services/Survey/classes/class.SurveyImportParser.php"; list($xml_file) = $this->parseXmlFileNames(); if (!@file_exists($xml_file)) { $GLOBALS['ilLog']->write(__METHOD__ . ': Cannot find xml definition: ' . $xml_file); return false; } $import = new SurveyImportParser(-1, $xml_file, TRUE); $import->setSurveyObject($newObj); $import->startParsing(); if (is_array($_SESSION["import_mob_xhtml"])) { include_once "./Services/MediaObjects/classes/class.ilObjMediaObject.php"; include_once "./Services/RTE/classes/class.ilRTE.php"; include_once "./Modules/TestQuestionPool/classes/class.ilObjQuestionPool.php"; foreach ($_SESSION["import_mob_xhtml"] as $mob) { $importfile = dirname($xml_file) . "/" . $mob["uri"]; if (file_exists($importfile)) { $media_object =& ilObjMediaObject::_saveTempFileAsMediaObject(basename($importfile), $importfile, FALSE); ilObjMediaObject::_saveUsage($media_object->getId(), "svy:html", $newObj->getId()); $newObj->setIntroduction(str_replace("src=\"" . $mob["mob"] . "\"", "src=\"" . "il_" . IL_INST_ID . "_mob_" . $media_object->getId() . "\"", $newObj->getIntroduction())); $newObj->setOutro(str_replace("src=\"" . $mob["mob"] . "\"", "src=\"" . "il_" . IL_INST_ID . "_mob_" . $media_object->getId() . "\"", $newObj->getOutro())); } else { global $ilLog; $ilLog->write("Error: Could not open XHTML mob file for test introduction during test import. File {$importfile} does not exist!"); } } $newObj->setIntroduction(ilRTE::_replaceMediaObjectImageSrc($newObj->getIntroduction(), 1)); $newObj->setOutro(ilRTE::_replaceMediaObjectImageSrc($newObj->getOutro(), 1)); $newObj->saveToDb(); } $a_mapping->addMapping("Modules/Survey", "svy", $a_id, $newObj->getId()); return true; }
/** * Creates link for an room agreement file if such exists. * * @return string link */ private function getRoomAgreementLink() { $linkPresentation = ""; $fileId = $this->object->getRoomsAgreementFileId(); if (!empty($fileId) && $fileId != "0") { $agreementFile = new ilObjMediaObject($fileId); $media = $agreementFile->getMediaItem("Standard"); $source = $agreementFile->getDataDirectory() . "/" . $media->getLocation(); $linkPresentation = "<p> <a target=\"_blank\" href=\"" . $source . "\">" . $this->lng->txt('rep_robj_xrs_current_rooms_user_agreement') . "</a></p>"; } return $linkPresentation; }
/** * Returns a JSON representation of the question */ public function toJSON() { include_once "./Services/RTE/classes/class.ilRTE.php"; $result = array(); $result['id'] = (int) $this->getId(); $result['type'] = (string) $this->getQuestionType(); $result['title'] = (string) $this->getTitle(); $result['question'] = $this->formatSAQuestion($this->getQuestion()); $result['text'] = (string) ilRTE::_replaceMediaObjectImageSrc($this->getErrorText(), 0); $result['nr_of_tries'] = (int) $this->getNrOfTries(); $result['shuffle'] = (bool) $this->getShuffle(); $result['feedback'] = array('onenotcorrect' => $this->formatSAQuestion($this->feedbackOBJ->getGenericFeedbackTestPresentation($this->getId(), false)), 'allcorrect' => $this->formatSAQuestion($this->feedbackOBJ->getGenericFeedbackTestPresentation($this->getId(), true))); $answers = array(); foreach ($this->getErrorData() as $idx => $answer_obj) { array_push($answers, array("answertext_wrong" => (string) $answer_obj->text_wrong, "answertext_correct" => (string) $answer_obj->text_correct, "points" => (double) $answer_obj->points, "order" => (int) $idx + 1)); } $result['correct_answers'] = $answers; $answers = array(); $textarray = preg_split("/[\n\r]+/", $this->getErrorText()); foreach ($textarray as $textidx => $text) { $items = preg_split("/\\s+/", trim($text)); foreach ($items as $idx => $item) { if (substr($item, 0, 1) == "#") { $item = substr($item, 1); // #14115 - add position to correct answer foreach ($result["correct_answers"] as $aidx => $answer) { if ($answer["answertext_wrong"] == $item && !$answer["pos"]) { $result["correct_answers"][$aidx]["pos"] = $this->getId() . "_" . $textidx . "_" . ($idx + 1); break; } } } array_push($answers, array("answertext" => (string) ilUtil::prepareFormOutput($item), "order" => $this->getId() . "_" . $textidx . "_" . ($idx + 1))); } if ($textidx != sizeof($textarray) - 1) { array_push($answers, array("answertext" => "###", "order" => $this->getId() . "_" . $textidx . "_" . ($idx + 2))); } } $result['answers'] = $answers; $mobs = ilObjMediaObject::_getMobsOfObject("qpl:html", $this->getId()); $result['mobs'] = $mobs; return json_encode($result); }
/** * Returns a JSON representation of the question */ public function toJSON() { include_once "./Services/RTE/classes/class.ilRTE.php"; $result = array(); $result['id'] = (int) $this->getId(); $result['type'] = (string) $this->getQuestionType(); $result['title'] = (string) $this->getTitle(); $result['question'] = $this->formatSAQuestion($this->getQuestion()); $result['nr_of_tries'] = (int) $this->getNrOfTries(); $result['shuffle'] = (bool) $this->getShuffle(); $result['feedback'] = array("onenotcorrect" => $this->feedbackOBJ->getGenericFeedbackTestPresentation($this->getId(), false), "allcorrect" => $this->feedbackOBJ->getGenericFeedbackTestPresentation($this->getId(), true)); $answers = array(); $has_image = false; foreach ($this->getAnswers() as $key => $answer_obj) { if ((string) $answer_obj->getImage()) { $has_image = true; } array_push($answers, array("answertext" => (string) $answer_obj->getAnswertext(), "points" => (double) $answer_obj->getPoints(), "order" => (int) $answer_obj->getOrder(), "image" => (string) $answer_obj->getImage(), "feedback" => ilRTE::_replaceMediaObjectImageSrc($this->feedbackOBJ->getSpecificAnswerFeedbackExportPresentation($this->getId(), $key), 0))); } $result['answers'] = $answers; if ($has_image) { $result['path'] = $this->getImagePathWeb(); $result['thumb'] = $this->getThumbSize(); } $mobs = ilObjMediaObject::_getMobsOfObject("qpl:html", $this->getId()); $result['mobs'] = $mobs; return json_encode($result); }
function exportXHTMLMediaObjects($a_export_dir) { include_once "./Services/MediaObjects/classes/class.ilObjMediaObject.php"; $mobs = ilObjMediaObject::_getMobsOfObject("tst:html", $this->test_obj->getId()); foreach ($mobs as $mob) { if (ilObjMediaObject::_exists($mob)) { $mob_obj =& new ilObjMediaObject($mob); $mob_obj->exportFiles($a_export_dir); unset($mob_obj); } } foreach ($this->test_obj->questions as $question_id) { $mobs = ilObjMediaObject::_getMobsOfObject("qpl:html", $question_id); foreach ($mobs as $mob) { if (ilObjMediaObject::_exists($mob)) { $mob_obj =& new ilObjMediaObject($mob); $mob_obj->exportFiles($a_export_dir); unset($mob_obj); } } } }
public function saveStatutoryRegulationsObject() { require_once 'Services/RTE/classes/class.ilRTE.php'; if (isset($_POST['statutory_regulations']) && $_POST['statutory_regulations'] != NULL) { $this->genSetData->set('statutory_regulations', ilRTE::_replaceMediaObjectImageSrc($_POST['statutory_regulations'], 0), 'regulations'); // copy temporary media objects (frm~) include_once 'Services/MediaObjects/classes/class.ilObjMediaObject.php'; $mediaObjects = ilRTE::_getMediaObjects($_POST['statutory_regulations'], 0); $myMediaObjects = ilObjMediaObject::_getMobsOfObject('pays~:html', ilObject::_lookupObjId($this->ref_id)); foreach ($mediaObjects as $mob) { foreach ($myMediaObjects as $myMob) { if ($mob == $myMob) { // change usage ilObjMediaObject::_removeUsage($mob, 'pays~:html', ilObject::_lookupObjId($this->ref_id)); break; } } ilObjMediaObject::_saveUsage($mob, 'pays~:html', ilObject::_lookupObjId($this->ref_id)); } } else { $this->genSetData->set('statutory_regulations', NULL, 'regulations'); } // remove usage of deleted media objects include_once 'Services/MediaObjects/classes/class.ilObjMediaObject.php'; $oldMediaObjects = ilObjMediaObject::_getMobsOfObject('pays~:html', ilObject::_lookupObjId($this->ref_id)); $curMediaObjects = ilRTE::_getMediaObjects($_POST['statutory_regulations'], 0); foreach ($oldMediaObjects as $oldMob) { $found = false; foreach ($curMediaObjects as $curMob) { if ($oldMob == $curMob) { $found = true; break; } } if (!$found) { if (ilObjMediaObject::_exists($oldMob)) { ilObjMediaObject::_removeUsage($oldMob, 'pays~:html', ilObject::_lookupObjId($this->ref_id)); $mob_obj = new ilObjMediaObject($oldMob); $mob_obj->delete(); } } } $this->genSetData->set('show_sr_shoppingcart', isset($_POST['show_sr_shoppingcart']) ? 1 : 0, 'regulations'); $this->genSetData->set('attach_sr_invoice', isset($_POST['attach_sr_invoice']) ? 1 : 0, 'regulations'); $this->StatutoryRegulationsObject(); ilUtil::sendSuccess($this->lng->txt('pays_updated_general_settings')); return true; }
/** * export media objects to xml (see ilias_co.dtd) * * @param object $a_xml_writer ilXmlWriter object that receives the * xml data */ function exportXMLMediaObjects(&$a_xml_writer, $a_inst, $a_target_dir, &$expLog) { include_once "./Services/MediaObjects/classes/class.ilObjMediaObject.php"; foreach ($this->mob_ids as $mob_id) { $expLog->write(date("[y-m-d H:i:s] ") . "Media Object " . $mob_id); if (ilObjMediaObject::_exists($mob_id)) { $media_obj = new ilObjMediaObject($mob_id); $media_obj->exportXML($a_xml_writer, $a_inst); $media_obj->exportFiles($a_target_dir); unset($media_obj); } } }
/** * Generate the link to the room agreement. * * @param integer $a_file_id * * @return string */ private function getFileLinkForUserAgreementId($a_file_id) { $agreement_file = new ilObjMediaObject($a_file_id); $media = $agreement_file->getMediaItem("Standard"); $source = $agreement_file->getDataDirectory() . "/" . $media->getLocation(); $link = "<p> <a target=\"_blank\" href=\"" . $source . "\">" . $this->lng->txt('rep_robj_xrs_current_rooms_user_agreement') . "</a></p>"; return $link; }
/** * show news */ function showNews() { global $lng, $ilCtrl, $ilUser; // workaround for dynamic mode (if cache is disabled, showNews has no data) if (empty(self::$st_data)) { $this->setData($this->getNewsData()); } $news_set = new ilSetting("news"); $enable_internal_rss = $news_set->get("enable_rss_for_internal"); include_once "./Services/News/classes/class.ilNewsItem.php"; $news = new ilNewsItem($_GET["news_id"]); $tpl = new ilTemplate("tpl.show_news.html", true, true, "Services/News"); // get current item in data set $previous = $next = ""; reset($this->data); $c = current($this->data); $curr_cnt = 1; while ($c["id"] > 0 && $c["id"] != $_GET["news_id"]) { $previous = $c; $c = next($this->data); $curr_cnt++; } // collect news items to show $news_list = array(); if (is_array($c["aggregation"])) { //$agg_obj_id = ilObject::_lookupObjId($c["agg_ref_id"]); //$agg_obj_type = ilObject::_lookupType($agg_obj_id); //$agg_obj_title = ilObject::_lookupObjId($agg_obj_id); $news_list[] = array("ref_id" => $c["agg_ref_id"], "agg_ref_id" => $c["agg_ref_id"], "aggregation" => $c["aggregation"], "user_id" => "", "content_type" => "text", "mob_id" => 0, "visibility" => "", "content" => "", "content_long" => "", "update_date" => $news->getUpdateDate(), "creation_date" => "", "content_is_lang_var" => false, "loc_context" => $_GET["news_context"], "context_obj_type" => $news->getContextObjType(), "title" => ""); foreach ($c["aggregation"] as $c_item) { ilNewsItem::_setRead($ilUser->getId(), $c_item["id"]); $c_item["loc_context"] = $c_item["ref_id"]; $c_item["loc_stop"] = $_GET["news_context"]; $news_list[] = $c_item; } } else { $news_list[] = array("ref_id" => $_GET["news_context"], "user_id" => $news->getUserId(), "content_type" => $news->getContentType(), "mob_id" => $news->getMobId(), "visibility" => $news->getVisibility(), "priority" => $news->getPriority(), "content" => $news->getContent(), "content_long" => $news->getContentLong(), "update_date" => $news->getUpdateDate(), "creation_date" => $news->getCreationDate(), "context_sub_obj_type" => $news->getContextSubObjType(), "context_obj_type" => $news->getContextObjType(), "context_sub_obj_id" => $news->getContextSubObjId(), "content_is_lang_var" => $news->getContentIsLangVar(), "content_text_is_lang_var" => $news->getContentTextIsLangVar(), "loc_context" => $_GET["news_context"], "title" => $news->getTitle()); ilNewsItem::_setRead($ilUser->getId(), $_GET["news_id"]); } foreach ($news_list as $item) { // user if ($item["user_id"] > 0 && ilObject::_exists($item["user_id"])) { // get login if (ilObjUser::_exists($item["user_id"])) { $user = new ilObjUser($item["user_id"]); $displayname = $user->getLogin(); } else { // this should actually not happen, since news entries // should be deleted when the user is going to be removed $displayname = "<" . strtolower($lng->txt("deleted")) . ">"; } $tpl->setCurrentBlock("user_info"); $tpl->setVariable("VAL_AUTHOR", $displayname); $tpl->setVariable("TXT_AUTHOR", $lng->txt("author")); $tpl->parseCurrentBlock(); } // media player if ($item["content_type"] == NEWS_AUDIO && $item["mob_id"] > 0 && ilObject::_exists($item["mob_id"])) { include_once "./Services/MediaObjects/classes/class.ilObjMediaObject.php"; include_once "./Services/MediaObjects/classes/class.ilMediaPlayerGUI.php"; $mob = new ilObjMediaObject($item["mob_id"]); $med = $mob->getMediaItem("Standard"); $mpl = new ilMediaPlayerGUI(); if (strcasecmp("Reference", $med->getLocationType()) == 0) { $mpl->setFile($med->getLocation()); } else { $mpl->setFile(ilObjMediaObject::_getURL($mob->getId()) . "/" . $med->getLocation()); } $mpl->setDisplayHeight($med->getHeight()); $tpl->setCurrentBlock("player"); $tpl->setVariable("PLAYER", $mpl->getMp3PlayerHtml()); $tpl->parseCurrentBlock(); } // access if ($enable_internal_rss && $item["visibility"] != "") { $obj_id = ilObject::_lookupObjId($item["ref_id"]); $tpl->setCurrentBlock("access"); $tpl->setVariable("TXT_ACCESS", $lng->txt("news_news_item_visibility")); if ($item["visibility"] == NEWS_PUBLIC || $item["priority"] == 0 && ilBlockSetting::_lookup("news", "public_notifications", 0, $obj_id)) { $tpl->setVariable("VAL_ACCESS", $lng->txt("news_visibility_public")); } else { $tpl->setVariable("VAL_ACCESS", $lng->txt("news_visibility_users")); } $tpl->parseCurrentBlock(); } // content if (trim($item["content"]) != "") { $tpl->setCurrentBlock("content"); $tpl->setVariable("VAL_CONTENT", nl2br($this->makeClickable(ilNewsItem::determineNewsContent($item["context_obj_type"], $item["content"], $item["content_text_is_lang_var"])))); //$tpl->setVariable("VAL_CONTENT", nl2br($item["content"])); $tpl->parseCurrentBlock(); } if (trim($item["content_long"]) != "") { $tpl->setCurrentBlock("long"); $tpl->setVariable("VAL_LONG_CONTENT", $this->makeClickable($item["content_long"])); $tpl->parseCurrentBlock(); } if ($item["update_date"] != $item["creation_date"]) { $tpl->setCurrentBlock("ni_update"); $tpl->setVariable("TXT_LAST_UPDATE", $lng->txt("last_update")); $tpl->setVariable("VAL_LAST_UPDATE", ilDatePresentation::formatDate(new ilDateTime($item["update_date"], IL_CAL_DATETIME))); $tpl->parseCurrentBlock(); } // creation date if ($item["creation_date"] != "") { $tpl->setCurrentBlock("ni_update"); $tpl->setVariable("VAL_CREATION_DATE", ilDatePresentation::formatDate(new ilDateTime($item["creation_date"], IL_CAL_DATETIME))); $tpl->setVariable("TXT_CREATED", $lng->txt("created")); $tpl->parseCurrentBlock(); } // context / title if ($_GET["news_context"] > 0) { //$obj_id = ilObject::_lookupObjId($_GET["news_context"]); $obj_id = ilObject::_lookupObjId($item["ref_id"]); $obj_type = ilObject::_lookupType($obj_id); $obj_title = ilObject::_lookupTitle($obj_id); // file hack, not nice if ($obj_type == "file") { $tpl->setCurrentBlock("download"); $tpl->setVariable("TXT_DOWNLOAD", $lng->txt("download")); $ilCtrl->setParameterByClass("ilrepositorygui", "ref_id", $item["ref_id"]); $tpl->setVariable("HREF_DOWNLOAD", $ilCtrl->getLinkTargetByClass("ilrepositorygui", "sendfile")); $ilCtrl->setParameterByClass("ilrepositorygui", "ref_id", $_GET["ref_id"]); $tpl->parseCurrentBlock(); } // forum hack, not nice $add = ""; if ($obj_type == "frm" && $item["context_sub_obj_type"] == "pos" && $item["context_sub_obj_id"] > 0) { include_once "./Modules/Forum/classes/class.ilObjForumAccess.php"; $pos = $item["context_sub_obj_id"]; $thread = ilObjForumAccess::_getThreadForPosting($pos); if ($thread > 0) { $add = "_" . $thread . "_" . $pos; } } // wiki hack, not nice if ($obj_type == "wiki" && $item["context_sub_obj_type"] == "wpg" && $item["context_sub_obj_id"] > 0) { include_once "./Modules/Wiki/classes/class.ilWikiPage.php"; $wptitle = ilWikiPage::lookupTitle($item["context_sub_obj_id"]); if ($wptitle != "") { $add = "_" . ilWikiUtil::makeUrlTitle($wptitle); } } $url_target = "./goto.php?client_id=" . rawurlencode(CLIENT_ID) . "&target=" . $obj_type . "_" . $item["ref_id"] . $add; // lm page hack, not nice if (in_array($obj_type, array("dbk", "lm")) && $item["context_sub_obj_type"] == "pg" && $item["context_sub_obj_id"] > 0) { $url_target = "./goto.php?client_id=" . rawurlencode(CLIENT_ID) . "&target=" . "pg_" . $item["context_sub_obj_id"] . "_" . $item["ref_id"]; } $context_opened = false; if ($item["loc_context"] != null && $item["loc_context"] != $item["loc_stop"]) { $tpl->setCurrentBlock("context"); $context_opened = true; $cont_loc = new ilLocatorGUI(); $cont_loc->addContextItems($item["loc_context"], true, $item["loc_stop"]); $tpl->setVariable("CONTEXT_LOCATOR", $cont_loc->getHTML()); } //var_dump($item); if ($item["no_context_title"] !== true) { if (!$context_opened) { $tpl->setCurrentBlock("context"); } $tpl->setVariable("HREF_CONTEXT_TITLE", $url_target); $tpl->setVariable("CONTEXT_TITLE", $obj_title); $tpl->setVariable("IMG_CONTEXT_TITLE", ilObject::_getIcon($obj_id, "big", $obj_type)); } if ($context_opened) { $tpl->parseCurrentBlock(); } $tpl->setVariable("HREF_TITLE", $url_target); } // title $tpl->setVariable("VAL_TITLE", ilNewsItem::determineNewsTitle($item["context_obj_type"], $item["title"], $item["content_is_lang_var"], $item["agg_ref_id"], $item["aggregation"])); $row_css = $row_css != "tblrow1" ? "tblrow1" : "tblrow2"; $tpl->setCurrentBlock("item"); $tpl->setVariable("ITEM_ROW_CSS", $row_css); $tpl->parseCurrentBlock(); } include_once "./Services/PersonalDesktop/classes/class.ilPDContentBlockGUI.php"; $content_block = new ilPDContentBlockGUI(); $content_block->setContent($tpl->get()); if ($this->getProperty("title") != "") { $content_block->setTitle($this->getProperty("title")); } else { $content_block->setTitle($lng->txt("news_internal_news")); } //$content_block->setColSpan(2); $content_block->setImage(ilUtil::getImagePath("icon_news.png")); $this->addCloseCommand($content_block); // previous if ($previous != "") { if ($previous["ref_id"] > 0) { $ilCtrl->setParameter($this, "news_context", $previous["ref_id"]); } $ilCtrl->setParameter($this, "news_id", $previous["id"]); $content_block->addFooterLink($lng->txt("previous"), $ilCtrl->getLinkTarget($this, "showNews"), "", "", true); $ilCtrl->setParameter($this, "news_context", ""); } // next if ($c = next($this->data)) { if ($c["ref_id"] > 0) { $ilCtrl->setParameter($this, "news_context", $c["ref_id"]); } $ilCtrl->setParameter($this, "news_id", $c["id"]); $content_block->addFooterLink($lng->txt("next"), $ilCtrl->getLinkTarget($this, "showNews"), "", "", true); } $ilCtrl->setParameter($this, "news_context", ""); $ilCtrl->setParameter($this, "news_id", ""); $content_block->setCurrentItemNumber($curr_cnt); $content_block->setEnableNumInfo(true); $content_block->setData($this->getData()); return $content_block->getHTML(); }
/** * Export media object to html */ function exportHTMLMOB($a_mob_id, &$a_linked_mobs) { global $tpl; $source_dir = ilUtil::getWebspaceDir() . "/mobs/mm_" . $a_mob_id; if (@is_dir($source_dir)) { ilUtil::makeDir($this->mobs_dir . "/mm_" . $a_mob_id); ilUtil::rCopy($source_dir, $this->mobs_dir . "/mm_" . $a_mob_id); } // fullscreen include_once "./Services/MediaObjects/classes/class.ilObjMediaObject.php"; $mob_obj = new ilObjMediaObject($a_mob_id); if ($mob_obj->hasFullscreenItem()) { $tpl = new ilTemplate("tpl.main.html", true, true); $tpl->addBlockFile("CONTENT", "content", "tpl.adm_content.html"); $file = $this->exp_dir . "/fullscreen_" . $a_mob_id . ".html"; // open file if (!($fp = @fopen($file, "w+"))) { die("<b>Error</b>: Could not open \"" . $file . "\" for writing" . " in <b>" . __FILE__ . "</b> on line <b>" . __LINE__ . "</b><br />"); } chmod($file, 0770); fwrite($fp, $content); fclose($fp); } $linked_mobs = $mob_obj->getLinkedMediaObjects(); $a_linked_mobs = array_merge($a_linked_mobs, $linked_mobs); }
/** * Returns a JSON representation of the question */ public function toJSON() { include_once "./Services/RTE/classes/class.ilRTE.php"; $result = array(); $result['id'] = (int) $this->getId(); $result['type'] = (string) $this->getQuestionType(); $result['title'] = (string) $this->getTitle(); $result['question'] = $this->formatSAQuestion($this->getQuestion()); $result['nr_of_tries'] = (int) $this->getNrOfTries(); $result['matching_method'] = (string) $this->getTextRating(); $result['feedback'] = array("onenotcorrect" => $this->feedbackOBJ->getGenericFeedbackTestPresentation($this->getId(), false), "allcorrect" => $this->feedbackOBJ->getGenericFeedbackTestPresentation($this->getId(), true)); $answers = array(); foreach ($this->getAnswers() as $key => $answer_obj) { array_push($answers, array("answertext" => (string) $answer_obj->getAnswertext(), "points" => (double) $answer_obj->getPoints(), "order" => (int) $answer_obj->getOrder())); } $result['correct_answers'] = $answers; $answers = array(); for ($loop = 1; $loop <= (int) $this->getCorrectAnswers(); $loop++) { array_push($answers, array("answernr" => $loop)); } $result['answers'] = $answers; $mobs = ilObjMediaObject::_getMobsOfObject("qpl:html", $this->getId()); $result['mobs'] = $mobs; return json_encode($result); }
/** * get Values * */ public function getValues() { //Get Record-Values $record_obj = ilDataCollectionCache::getRecordCache($this->record_id); //Get Table Field Definitions $allFields = $this->table->getFields(); $values = array(); foreach ($allFields as $field) { $value = $record_obj->getRecordFieldFormInput($field->getId()); $values['field_' . $field->getId()] = $value; if ($field->getDatatypeId() == ilDataCollectionDatatype::INPUTFORMAT_MOB) { $img = ilObjMediaObject::_lookupItemPath($value); if ($value) { $this->form->getItemByPostVar('field_' . $field->getId())->setImage($img); } } } $this->form->setValuesByArray($values); return true; }
function getLastUpdateOfIncludedElements() { include_once "./Services/MediaObjects/classes/class.ilObjMediaObject.php"; include_once "./Modules/File/classes/class.ilObjFile.php"; $mobs = ilObjMediaObject::_getMobsOfObject($this->getParentType() . ":pg", $this->getId()); $files = ilObjFile::_getFilesOfObject($this->getParentType() . ":pg", $this->getId()); $objs = array_merge($mobs, $files); return ilObject::_getLastUpdateOfObjects($objs); }
/** * Creates a question from a QTI file * * Receives parameters from a QTI parser and creates a valid ILIAS question object * * @param object $item The QTI item object * @param integer $questionpool_id The id of the parent questionpool * @param integer $tst_id The id of the parent test if the question is part of a test * @param object $tst_object A reference to the parent test object * @param integer $question_counter A reference to a question counter to count the questions of an imported question pool * @param array $import_mapping An array containing references to included ILIAS objects * @access public */ function fromXML(&$item, $questionpool_id, &$tst_id, &$tst_object, &$question_counter, &$import_mapping) { global $ilUser; // empty session variable for imported xhtml mobs unset($_SESSION["import_mob_xhtml"]); $presentation = $item->getPresentation(); $duration = $item->getDuration(); $now = getdate(); $created = sprintf("%04d%02d%02d%02d%02d%02d", $now['year'], $now['mon'], $now['mday'], $now['hours'], $now['minutes'], $now['seconds']); $feedbacksgeneric = array(); $this->object->setTitle($item->getTitle()); $this->object->setNrOfTries($item->getMaxattempts()); $this->object->setComment($item->getComment()); $this->object->setAuthor($item->getAuthor()); $this->object->setOwner($ilUser->getId()); $this->object->setQuestion($this->object->QTIMaterialToString($item->getQuestiontext())); $this->object->setObjId($questionpool_id); $this->object->setEstimatedWorkingTime($duration["h"], $duration["m"], $duration["s"]); $this->object->setWidth($item->getMetadataEntry("width")); $this->object->setHeight($item->getMetadataEntry("height")); $this->object->setApplet($item->getMetadataEntry("applet")); $this->object->setParameters(unserialize($item->getMetadataEntry("params"))); $this->object->setPoints($item->getMetadataEntry("points")); $this->object->saveToDb(); $flashapplet =& base64_decode($item->getMetadataEntry("swf")); if (!file_exists($this->object->getFlashPath())) { include_once "./Services/Utilities/classes/class.ilUtil.php"; ilUtil::makeDirParents($this->object->getFlashPath()); } $filename = $this->object->getFlashPath() . $this->object->getApplet(); $fh = fopen($filename, "wb"); if ($fh == false) { // global $ilErr; // $ilErr->raiseError($this->object->lng->txt("error_save_image_file") . ": $php_errormsg", $ilErr->MESSAGE); // return; } else { fwrite($fh, $flashapplet); fclose($fh); } $feedbacksgeneric = $this->getFeedbackGeneric($item); // handle the import of media objects in XHTML code $questiontext = $this->object->getQuestion(); if (is_array($_SESSION["import_mob_xhtml"])) { include_once "./Services/MediaObjects/classes/class.ilObjMediaObject.php"; include_once "./Services/RTE/classes/class.ilRTE.php"; foreach ($_SESSION["import_mob_xhtml"] as $mob) { if ($tst_id > 0) { $importfile = $this->getTstImportArchivDirectory() . '/' . $mob["uri"]; } else { $importfile = $this->getQplImportArchivDirectory() . '/' . $mob["uri"]; } $GLOBALS['ilLog']->write(__METHOD__ . ': import mob from dir: ' . $importfile); $media_object =& ilObjMediaObject::_saveTempFileAsMediaObject(basename($importfile), $importfile, FALSE); ilObjMediaObject::_saveUsage($media_object->getId(), "qpl:html", $this->object->getId()); $questiontext = str_replace("src=\"" . $mob["mob"] . "\"", "src=\"" . "il_" . IL_INST_ID . "_mob_" . $media_object->getId() . "\"", $questiontext); foreach ($feedbacksgeneric as $correctness => $material) { $feedbacksgeneric[$correctness] = str_replace("src=\"" . $mob["mob"] . "\"", "src=\"" . "il_" . IL_INST_ID . "_mob_" . $media_object->getId() . "\"", $material); } } } $this->object->setQuestion(ilRTE::_replaceMediaObjectImageSrc($questiontext, 1)); foreach ($feedbacksgeneric as $correctness => $material) { $this->object->saveFeedbackGeneric($correctness, ilRTE::_replaceMediaObjectImageSrc($material, 1)); } $this->object->saveToDb(); if (count($item->suggested_solutions)) { foreach ($item->suggested_solutions as $suggested_solution) { $this->object->setSuggestedSolution($suggested_solution["solution"]->getContent(), $suggested_solution["gap_index"], true); } $this->object->saveToDb(); } if ($tst_id > 0) { $q_1_id = $this->object->getId(); $question_id = $this->object->duplicate(true, null, null, null, $tst_id); $tst_object->questions[$question_counter++] = $question_id; $import_mapping[$item->getIdent()] = array("pool" => $q_1_id, "test" => $question_id); } else { $import_mapping[$item->getIdent()] = array("pool" => $this->object->getId(), "test" => 0); } }
/** * Creates a question from a QTI file * * Receives parameters from a QTI parser and creates a valid ILIAS question object * * @param object $item The QTI item object * @param integer $questionpool_id The id of the parent questionpool * @param integer $tst_id The id of the parent test if the question is part of a test * @param object $tst_object A reference to the parent test object * @param integer $question_counter A reference to a question counter to count the questions of an imported question pool * @param array $import_mapping An array containing references to included ILIAS objects * @access public */ function fromXML(&$item, $questionpool_id, &$tst_id, &$tst_object, &$question_counter, &$import_mapping) { global $ilUser; // empty session variable for imported xhtml mobs unset($_SESSION["import_mob_xhtml"]); $presentation = $item->getPresentation(); $duration = $item->getDuration(); $shuffle = 0; $idents = array(); $now = getdate(); $created = sprintf("%04d%02d%02d%02d%02d%02d", $now['year'], $now['mon'], $now['mday'], $now['hours'], $now['minutes'], $now['seconds']); $gaps = array(); foreach ($presentation->order as $entry) { switch ($entry["type"]) { case "response": $response = $presentation->response[$entry["index"]]; if ($response->getResponseType() == RT_RESPONSE_STR) { array_push($idents, $response->getIdent()); } break; } } $responses = array(); $feedbacksgeneric = array(); foreach ($item->resprocessing as $resprocessing) { foreach ($resprocessing->respcondition as $respcondition) { $ident = ""; $correctness = 1; $conditionvar = $respcondition->getConditionvar(); foreach ($conditionvar->order as $order) { switch ($order["field"]) { case "varsubset": $respident = $conditionvar->varsubset[$order["index"]]->getRespident(); $content = $conditionvar->varsubset[$order["index"]]->getContent(); if (!is_array($responses[$respident])) { $responses[$respident] = array(); } $vars = split(",", $content); foreach ($vars as $var) { array_push($responses[$respident], array("solution" => $var, "points" => "")); } break; } } foreach ($respcondition->setvar as $setvar) { if (strcmp($setvar->getVarname(), "matches") == 0 && $setvar->getAction() == ACTION_ADD) { foreach ($responses[$respident] as $idx => $solutionarray) { if (strlen($solutionarray["points"] == 0)) { $responses[$respident][$idx]["points"] = $setvar->getContent(); } } } } foreach ($resprocessing->respcondition as $respcondition) { foreach ($respcondition->displayfeedback as $feedbackpointer) { if (strlen($feedbackpointer->getLinkrefid())) { foreach ($item->itemfeedback as $ifb) { if (strcmp($ifb->getIdent(), "response_allcorrect") == 0) { // found a feedback for the identifier if (count($ifb->material)) { foreach ($ifb->material as $material) { $feedbacksgeneric[1] = $material; } } if (count($ifb->flow_mat) > 0) { foreach ($ifb->flow_mat as $fmat) { if (count($fmat->material)) { foreach ($fmat->material as $material) { $feedbacksgeneric[1] = $material; } } } } } else { if (strcmp($ifb->getIdent(), "response_onenotcorrect") == 0) { // found a feedback for the identifier if (count($ifb->material)) { foreach ($ifb->material as $material) { $feedbacksgeneric[0] = $material; } } if (count($ifb->flow_mat) > 0) { foreach ($ifb->flow_mat as $fmat) { if (count($fmat->material)) { foreach ($fmat->material as $material) { $feedbacksgeneric[0] = $material; } } } } } } } } } } } } $this->object->setTitle($item->getTitle()); $this->object->setNrOfTries($item->getMaxattempts()); $this->object->setComment($item->getComment()); $this->object->setAuthor($item->getAuthor()); $this->object->setOwner($ilUser->getId()); $this->object->setQuestion($this->object->QTIMaterialToString($item->getQuestiontext())); $this->object->setObjId($questionpool_id); $this->object->setEstimatedWorkingTime($duration["h"], $duration["m"], $duration["s"]); $textrating = $item->getMetadataEntry("textrating"); if (strlen($textrating) == 0) { $textrating = "ci"; } $this->object->setTextRating($textgap_rating); $this->object->setCorrectAnswers($item->getMetadataEntry("correctanswers")); $response = current($responses); $counter = 0; if (is_array($response)) { foreach ($response as $answer) { $this->object->addAnswer($answer["solution"], $answer["points"], $counter); $counter++; } } $this->object->saveToDb(); if (count($item->suggested_solutions)) { foreach ($item->suggested_solutions as $suggested_solution) { $this->object->setSuggestedSolution($suggested_solution["solution"]->getContent(), $suggested_solution["gap_index"], true); } $this->object->saveToDb(); } foreach ($feedbacksgeneric as $correctness => $material) { $m = $this->object->QTIMaterialToString($material); $feedbacksgeneric[$correctness] = $m; } // handle the import of media objects in XHTML code $questiontext = $this->object->getQuestion(); if (is_array($_SESSION["import_mob_xhtml"])) { include_once "./Services/MediaObjects/classes/class.ilObjMediaObject.php"; include_once "./Services/RTE/classes/class.ilRTE.php"; foreach ($_SESSION["import_mob_xhtml"] as $mob) { if ($tst_id > 0) { $importfile = $this->getTstImportArchivDirectory() . '/' . $mob["uri"]; } else { $importfile = $this->getQplImportArchivDirectory() . '/' . $mob["uri"]; } $GLOBALS['ilLog']->write(__METHOD__ . ': import mob from dir: ' . $importfile); $media_object =& ilObjMediaObject::_saveTempFileAsMediaObject(basename($importfile), $importfile, FALSE); ilObjMediaObject::_saveUsage($media_object->getId(), "qpl:html", $this->object->getId()); $questiontext = str_replace("src=\"" . $mob["mob"] . "\"", "src=\"" . "il_" . IL_INST_ID . "_mob_" . $media_object->getId() . "\"", $questiontext); foreach ($feedbacksgeneric as $correctness => $material) { $feedbacksgeneric[$correctness] = str_replace("src=\"" . $mob["mob"] . "\"", "src=\"" . "il_" . IL_INST_ID . "_mob_" . $media_object->getId() . "\"", $material); } } } $this->object->setQuestion(ilRTE::_replaceMediaObjectImageSrc($questiontext, 1)); foreach ($feedbacksgeneric as $correctness => $material) { $this->object->saveFeedbackGeneric($correctness, ilRTE::_replaceMediaObjectImageSrc($material, 1)); } $this->object->saveToDb(); if ($tst_id > 0) { $q_1_id = $this->object->getId(); $question_id = $this->object->duplicate(true, null, null, null, $tst_id); $tst_object->questions[$question_counter++] = $question_id; $import_mapping[$item->getIdent()] = array("pool" => $q_1_id, "test" => $question_id); } else { $import_mapping[$item->getIdent()] = array("pool" => $this->object->getId(), "test" => 0); } }
/** * Returns a JSON representation of the question */ public function toJSON() { $this->lng->loadLanguageModule('assessment'); require_once './Services/RTE/classes/class.ilRTE.php'; $result = array(); $result['id'] = (int) $this->getId(); $result['type'] = (string) $this->getQuestionType(); $result['title'] = (string) $this->getTitle(); $result['question'] = $this->formatSAQuestion($this->getQuestion()); $result['instruction'] = $this->getInstructionTextTranslation($this->lng, $this->getOptionLabel()); $result['nr_of_tries'] = (int) $this->getNrOfTries(); $result['shuffle'] = (bool) $this->isShuffleAnswersEnabled(); $result['feedback'] = array('onenotcorrect' => $this->formatSAQuestion($this->feedbackOBJ->getGenericFeedbackTestPresentation($this->getId(), false)), 'allcorrect' => $this->formatSAQuestion($this->feedbackOBJ->getGenericFeedbackTestPresentation($this->getId(), true))); $result['trueOptionLabel'] = $this->getTrueOptionLabelTranslation($this->lng, $this->getOptionLabel()); $result['falseOptionLabel'] = $this->getFalseOptionLabelTranslation($this->lng, $this->getOptionLabel()); $result['num_allowed_failures'] = $this->getNumAllowedFailures(); $answers = array(); $has_image = false; foreach ($this->getAnswers() as $key => $answer) { if (strlen((string) $answer->getImageFile())) { $has_image = true; } $answers[] = array('answertext' => (string) $this->formatSAQuestion($answer->getAnswertext()), 'correctness' => (bool) $answer->getCorrectness(), 'order' => (int) $answer->getPosition(), 'image' => (string) $answer->getImageFile(), 'feedback' => ilRTE::_replaceMediaObjectImageSrc($this->feedbackOBJ->getSpecificAnswerFeedbackExportPresentation($this->getId(), $key), 0)); } $result['answers'] = $answers; if ($has_image) { $result['path'] = $this->getImagePathWeb(); $result['thumb'] = $this->getThumbSize(); } $mobs = ilObjMediaObject::_getMobsOfObject("qpl:html", $this->getId()); $result['mobs'] = $mobs; return json_encode($result); }
/** * Creates a question from a QTI file * * Receives parameters from a QTI parser and creates a valid ILIAS question object * * @param object $item The QTI item object * @param integer $questionpool_id The id of the parent questionpool * @param integer $tst_id The id of the parent test if the question is part of a test * @param object $tst_object A reference to the parent test object * @param integer $question_counter A reference to a question counter to count the questions of an imported question pool * @param array $import_mapping An array containing references to included ILIAS objects * @access public */ function fromXML(&$item, $questionpool_id, &$tst_id, &$tst_object, &$question_counter, &$import_mapping) { global $ilUser; // empty session variable for imported xhtml mobs unset($_SESSION["import_mob_xhtml"]); $presentation = $item->getPresentation(); $duration = $item->getDuration(); $now = getdate(); $maxchars = 0; $points = 0; $upperlimit = 0; $lowerlimit = 0; $feedbacksgeneric = array(); $created = sprintf("%04d%02d%02d%02d%02d%02d", $now['year'], $now['mon'], $now['mday'], $now['hours'], $now['minutes'], $now['seconds']); foreach ($presentation->order as $entry) { switch ($entry["type"]) { case "response": $response = $presentation->response[$entry["index"]]; $rendertype = $response->getRenderType(); switch (strtolower(get_class($rendertype))) { case "ilqtirenderfib": $maxchars = $rendertype->getMaxchars(); break; } break; } } foreach ($item->resprocessing as $resprocessing) { foreach ($resprocessing->respcondition as $respcondition) { $conditionvar = $respcondition->getConditionvar(); foreach ($conditionvar->order as $order) { switch ($order["field"]) { case "varlte": $upperlimit = $conditionvar->varlte[$order["index"]]->getContent(); break; case "vargte": $lowerlimit = $conditionvar->vargte[$order["index"]]->getContent(); break; } } foreach ($respcondition->setvar as $setvar) { $points = $setvar->getContent(); } if (count($respcondition->displayfeedback)) { foreach ($respcondition->displayfeedback as $feedbackpointer) { if (strlen($feedbackpointer->getLinkrefid())) { foreach ($item->itemfeedback as $ifb) { if (strcmp($ifb->getIdent(), "response_allcorrect") == 0) { // found a feedback for the identifier if (count($ifb->material)) { foreach ($ifb->material as $material) { $feedbacksgeneric[1] = $material; } } if (count($ifb->flow_mat) > 0) { foreach ($ifb->flow_mat as $fmat) { if (count($fmat->material)) { foreach ($fmat->material as $material) { $feedbacksgeneric[1] = $material; } } } } } else { if (strcmp($ifb->getIdent(), "response_onenotcorrect") == 0) { // found a feedback for the identifier if (count($ifb->material)) { foreach ($ifb->material as $material) { $feedbacksgeneric[0] = $material; } } if (count($ifb->flow_mat) > 0) { foreach ($ifb->flow_mat as $fmat) { if (count($fmat->material)) { foreach ($fmat->material as $material) { $feedbacksgeneric[0] = $material; } } } } } } } } } } } } $this->object->setTitle($item->getTitle()); $this->object->setNrOfTries($item->getMaxattempts()); $this->object->setComment($item->getComment()); $this->object->setAuthor($item->getAuthor()); $this->object->setOwner($ilUser->getId()); $this->object->setQuestion($this->object->QTIMaterialToString($item->getQuestiontext())); $this->object->setObjId($questionpool_id); $this->object->setEstimatedWorkingTime($duration["h"], $duration["m"], $duration["s"]); $this->object->setMaxChars($maxchars); $this->object->setPoints($points); $this->object->setLowerLimit($lowerlimit); $this->object->setUpperLimit($upperlimit); $this->object->saveToDb(); if (count($item->suggested_solutions)) { foreach ($item->suggested_solutions as $suggested_solution) { $this->object->setSuggestedSolution($suggested_solution["solution"]->getContent(), $suggested_solution["gap_index"], true); } $this->object->saveToDb(); } foreach ($feedbacksgeneric as $correctness => $material) { $m = $this->object->QTIMaterialToString($material); $feedbacksgeneric[$correctness] = $m; } // handle the import of media objects in XHTML code $questiontext = $this->object->getQuestion(); if (is_array($_SESSION["import_mob_xhtml"])) { include_once "./Services/MediaObjects/classes/class.ilObjMediaObject.php"; include_once "./Services/RTE/classes/class.ilRTE.php"; foreach ($_SESSION["import_mob_xhtml"] as $mob) { if ($tst_id > 0) { $importfile = $this->getTstImportArchivDirectory() . '/' . $mob["uri"]; } else { $importfile = $this->getQplImportArchivDirectory() . '/' . $mob["uri"]; } $GLOBALS['ilLog']->write(__METHOD__ . ': import mob from dir: ' . $importfile); $media_object =& ilObjMediaObject::_saveTempFileAsMediaObject(basename($importfile), $importfile, FALSE); ilObjMediaObject::_saveUsage($media_object->getId(), "qpl:html", $this->object->getId()); $questiontext = str_replace("src=\"" . $mob["mob"] . "\"", "src=\"" . "il_" . IL_INST_ID . "_mob_" . $media_object->getId() . "\"", $questiontext); foreach ($feedbacksgeneric as $correctness => $material) { $feedbacksgeneric[$correctness] = str_replace("src=\"" . $mob["mob"] . "\"", "src=\"" . "il_" . IL_INST_ID . "_mob_" . $media_object->getId() . "\"", $material); } } } $this->object->setQuestion(ilRTE::_replaceMediaObjectImageSrc($questiontext, 1)); foreach ($feedbacksgeneric as $correctness => $material) { $this->object->saveFeedbackGeneric($correctness, ilRTE::_replaceMediaObjectImageSrc($material, 1)); } $this->object->saveToDb(); if ($tst_id > 0) { $q_1_id = $this->object->getId(); $question_id = $this->object->duplicate(true, null, null, null, $tst_id); $tst_object->questions[$question_counter++] = $question_id; $import_mapping[$item->getIdent()] = array("pool" => $q_1_id, "test" => $question_id); } else { $import_mapping[$item->getIdent()] = array("pool" => $this->object->getId(), "test" => 0); } }
/** * Returns a JSON representation of the question */ public function toJSON() { include_once "./Services/RTE/classes/class.ilRTE.php"; $result = array(); $result['id'] = (int) $this->getId(); $result['type'] = (string) $this->getQuestionType(); $result['title'] = (string) $this->getTitle(); $result['question'] = $this->formatSAQuestion($this->getQuestion()); $result['nr_of_tries'] = (int) $this->getNrOfTries(); $result['shuffle'] = (bool) $this->getShuffle(); $result['feedback'] = array("onenotcorrect" => nl2br(ilRTE::_replaceMediaObjectImageSrc($this->getFeedbackGeneric(0), 0)), "allcorrect" => nl2br(ilRTE::_replaceMediaObjectImageSrc($this->getFeedbackGeneric(1), 0))); $gaps = array(); foreach ($this->getGaps() as $key => $gap) { $items = array(); foreach ($gap->getItems() as $item) { $jitem = array(); $jitem['points'] = $item->getPoints(); $jitem['value'] = $item->getAnswertext(); $jitem['order'] = $item->getOrder(); if ($gap->getType() == CLOZE_NUMERIC) { $jitem['lowerbound'] = $item->getLowerBound(); $jitem['upperbound'] = $item->getUpperBound(); } array_push($items, $jitem); } $jgap['shuffle'] = $gap->getShuffle(); $jgap['type'] = $gap->getType(); $jgap['item'] = $items; array_push($gaps, $jgap); } $result['gaps'] = $gaps; $mobs = ilObjMediaObject::_getMobsOfObject("qpl:html", $this->getId()); $result['mobs'] = $mobs; return json_encode($result); }
function updateAssignmentTextObject($a_return = false) { global $ilCtrl, $ilUser; $times_up = $this->ass->getDeadline() && $this->ass->getDeadline() - time() < 0; if (!$this->ass || $this->ass->getType() != ilExAssignment::TYPE_TEXT || $times_up) { if ($times_up) { ilUtil::sendFailure($this->lng->txt("exercise_time_over"), true); } $ilCtrl->redirect($this, "showOverview"); } $this->checkPermission("read"); $form = $this->initAssignmentTextForm($this->ass); // we are not using a purifier, so we have to set the valid RTE tags // :TODO: include_once "./Services/AdvancedEditing/classes/class.ilObjAdvancedEditing.php"; $rte = $form->getItemByPostVar("atxt"); $rte->setRteTags(ilObjAdvancedEditing::_getUsedHTMLTags("exc_ass")); if ($form->checkInput()) { $text = trim($form->getInput("atxt")); $existing = (bool) ilExAssignment::getDeliveredFiles($this->ass->getExerciseId(), $this->ass->getId(), $ilUser->getId()); $returned_id = $this->object->updateTextSubmission($this->ass->getExerciseId(), $this->ass->getId(), $ilUser->getId(), ilRTE::_replaceMediaObjectImageSrc($text, 0)); // no empty text if ($returned_id) { if (!$existing) { // #14332 - new text $this->sendNotifications($this->ass->getId()); $this->object->handleSubmission($this->ass->getId()); } // mob usage include_once "Services/MediaObjects/classes/class.ilObjMediaObject.php"; $mobs = ilRTE::_getMediaObjects($text, 0); foreach ($mobs as $mob) { if (ilObjMediaObject::_exists($mob)) { ilObjMediaObject::_removeUsage($mob, 'exca~:html', $ilUser->getId()); ilObjMediaObject::_saveUsage($mob, 'exca:html', $returned_id); } } } ilUtil::sendSuccess($this->lng->txt("settings_saved"), true); if ($a_return) { $ilCtrl->redirect($this, "showOverview"); } else { $ilCtrl->redirect($this, "editAssignmentText"); } } $form->setValuesByPost(); $this->editAssignmentTextObject($form); }
function exportXHTMLMediaObjects($a_export_dir) { global $ilBench; $ilBench->start("SurveyExport", "exportXHTMLMediaObjects"); include_once "./Services/MediaObjects/classes/class.ilObjMediaObject.php"; $mobs = ilObjMediaObject::_getMobsOfObject("svy:html", $this->survey_obj->getId()); foreach ($mobs as $mob) { $mob_obj =& new ilObjMediaObject($mob); $mob_obj->exportFiles($a_export_dir); unset($mob_obj); } // #14850 foreach ($this->survey_obj->questions as $question_id) { $mobs = ilObjMediaObject::_getMobsOfObject("spl:html", $question_id); foreach ($mobs as $mob) { $mob_obj =& new ilObjMediaObject($mob); $mob_obj->exportFiles($a_export_dir); unset($mob_obj); } } $ilBench->stop("SurveyExport", "exportXHTMLMediaObjects"); }
/** * Returns a JSON representation of the question */ public function toJSON() { include_once "./Services/RTE/classes/class.ilRTE.php"; $result = array(); $result['id'] = (int) $this->getId(); $result['type'] = (string) $this->getQuestionType(); $result['title'] = (string) $this->getTitle(); $result['question'] = $this->formatSAQuestion($this->getQuestion()); $result['nr_of_tries'] = (int) $this->getNrOfTries(); $result['shuffle'] = (bool) $this->getShuffle(); $result['is_multiple'] = (bool) $this->getIsMultipleChoice(); $result['feedback'] = array('onenotcorrect' => $this->formatSAQuestion($this->feedbackOBJ->getGenericFeedbackTestPresentation($this->getId(), false)), 'allcorrect' => $this->formatSAQuestion($this->feedbackOBJ->getGenericFeedbackTestPresentation($this->getId(), true))); $result['image'] = (string) $this->getImagePathWeb() . $this->getImageFilename(); $answers = array(); $order = 0; foreach ($this->getAnswers() as $key => $answer_obj) { array_push($answers, array("answertext" => (string) $answer_obj->getAnswertext(), "points" => (double) $answer_obj->getPoints(), "points_unchecked" => (double) $answer_obj->getPointsUnchecked(), "order" => (int) $order, "coords" => $answer_obj->getCoords(), "state" => $answer_obj->getState(), "area" => $answer_obj->getArea(), "feedback" => ilRTE::_replaceMediaObjectImageSrc($this->feedbackOBJ->getSpecificAnswerFeedbackExportPresentation($this->getId(), $key), 0))); $order++; } $result['answers'] = $answers; $mobs = ilObjMediaObject::_getMobsOfObject("qpl:html", $this->getId()); $result['mobs'] = $mobs; return json_encode($result); }
/** * Creates a QTI material tag from a plain text or xhtml text * * @param object $a_xml_writer Reference to the ILIAS XML writer * @param string $a_material plain text or html text containing the material * @return string QTI material tag * @access public */ function addQTIMaterial(&$a_xml_writer, $a_material) { include_once "./Services/RTE/classes/class.ilRTE.php"; include_once "./Services/MediaObjects/classes/class.ilObjMediaObject.php"; $a_xml_writer->xmlStartTag("material"); $attrs = array("texttype" => "text/plain"); if ($this->isHTML($a_material)) { $attrs["texttype"] = "text/xhtml"; } $a_xml_writer->xmlElement("mattext", $attrs, ilRTE::_replaceMediaObjectImageSrc($a_material, 0)); $mobs = ilObjMediaObject::_getMobsOfObject("tst:html", $this->getId()); foreach ($mobs as $mob) { $moblabel = "il_" . IL_INST_ID . "_mob_" . $mob; if (strpos($a_material, "mm_{$mob}") !== FALSE) { if (ilObjMediaObject::_exists($mob)) { $mob_obj =& new ilObjMediaObject($mob); $imgattrs = array("label" => $moblabel, "uri" => "objects/" . "il_" . IL_INST_ID . "_mob_" . $mob . "/" . $mob_obj->getTitle()); } $a_xml_writer->xmlElement("matimage", $imgattrs, NULL); } } $a_xml_writer->xmlEndTag("material"); }
/** * Update internal links, after multiple pages have been copied */ static function updateInternalLinks($a_copied_nodes, $a_parent_type = "lm") { $all_fixes = array(); foreach ($a_copied_nodes as $original_id => $copied_id) { $copied_type = ilLMObject::_lookupType($copied_id); $copy_lm = ilLMObject::_lookupContObjID($copied_id); if ($copied_type == "pg") { // // 1. Outgoing links from the copied page. // //$targets = ilInternalLink::_getTargetsOfSource($a_parent_type.":pg", $copied_id); include_once "./Modules/LearningModule/classes/class.ilLMPage.php"; $tpg = new ilLMPage($copied_id); $tpg->buildDom(); $il = $tpg->getInternalLinks(); $targets = array(); foreach ($il as $l) { $targets[] = array("type" => ilInternalLink::_extractTypeOfTarget($l["Target"]), "id" => (int) ilInternalLink::_extractObjIdOfTarget($l["Target"]), "inst" => (int) ilInternalLink::_extractInstOfTarget($l["Target"])); } $fix = array(); foreach ($targets as $target) { if (($target["inst"] == 0 || ($target["inst"] = IL_INST_ID)) && ($target["type"] == "pg" || $target["type"] == "st")) { // first check, whether target is also within the copied set if ($a_copied_nodes[$target["id"]] > 0) { $fix[$target["id"]] = $a_copied_nodes[$target["id"]]; } else { // now check, if a copy if the target is already in the same lm // only if target is not already in the same lm! $trg_lm = ilLMObject::_lookupContObjID($target["id"]); if ($trg_lm != $copy_lm) { $lm_data = ilLMObject::_getAllObjectsForImportId("il__" . $target["type"] . "_" . $target["id"]); $found = false; foreach ($lm_data as $item) { if (!$found && $item["lm_id"] == $copy_lm) { $fix[$target["id"]] = $item["obj_id"]; $found = true; } } } } } } // outgoing links to be fixed if (count($fix) > 0) { //echo "<br>--".$copied_id; //var_dump($fix); $t = ilObject::_lookupType($copy_lm); if (is_array($all_fixes[$t . ":" . $copied_id])) { $all_fixes[$t . ":" . $copied_id] += $fix; } else { $all_fixes[$t . ":" . $copied_id] = $fix; } } } if ($copied_type == "pg" || $copied_type == "st") { // // 2. Incoming links to the original pages // // A->B A2 (A+B currently copied) // A->C B2 // B->A // C->A C2->A (C already copied) $original_lm = ilLMObject::_lookupContObjID($original_id); $original_type = ilObject::_lookupType($original_lm); if ($original_lm != $copy_lm) { // This gets sources that link to A+B (so we have C here) // (this also does already the trick when instance map areas are given in C) // int_link, where target_type, target_id, target_inst -> ok $sources = ilInternalLink::_getSourcesOfTarget($copied_type, $original_id, 0); // mobs linking to $original_id // map_area, where link_type, target -> ok $mobs = ilMapArea::_getMobsForTarget("int", "il__" . $copied_type . "_" . $original_id); // pages using these mobs include_once "./Services/MediaObjects/classes/class.ilObjMediaObject.php"; foreach ($mobs as $mob) { // mob_usage, where id -> ok // mep_item, where foreign_id, type -> ok // mep_tree, where child -> already existed // il_news_item, where mob_id -> ok // map_area, where link_type, target -> aready existed // media_item, where id -> already existed // personal_clipboard, where item_id, type -> ok $usages = ilObjMediaObject::lookupUsages($mob); foreach ($usages as $usage) { if ($usage["type"] == "lm:pg" | $usage["type"] == "lm:st") { $sources[] = $usage; } } } $fix = array(); foreach ($sources as $source) { $stype = explode(":", $source["type"]); $source_type = $stype[1]; if ($source_type == "pg" || $source_type == "st") { // first of all: source must be in original lm $src_lm = ilLMObject::_lookupContObjID($source["id"]); if ($src_lm == $original_lm) { // check, if a copy if the source is already in the same lm // now we look for the latest copy of C in LM2 $lm_data = ilLMObject::_getAllObjectsForImportId("il__" . $source_type . "_" . $source["id"], $copy_lm); $found = false; foreach ($lm_data as $item) { if (!$found) { $fix[$item["obj_id"]][$original_id] = $copied_id; $found = true; } } } } } // outgoing links to be fixed if (count($fix) > 0) { foreach ($fix as $page_id => $fix_array) { $t = ilObject::_lookupType($copy_lm); if (is_array($all_fixes[$t . ":" . $page_id])) { $all_fixes[$t . ":" . $page_id] += $fix_array; } else { $all_fixes[$t . ":" . $page_id] = $fix_array; } } } } } } foreach ($all_fixes as $pg => $fixes) { $pg = explode(":", $pg); include_once "./Services/COPage/classes/class.ilPageObjectFactory.php"; $page = ilPageObjectFactory::getInstance($pg[0], $pg[1]); if ($page->moveIntLinks($fixes)) { $page->update(true, true); } } }
public function checkValidity($value, $record_id = null) { //Don't check empty values if ($value == NULL) { return true; } if (!ilDataCollectionDatatype::checkValidity($this->getDatatypeId(), $value)) { throw new ilDataCollectionInputException(ilDataCollectionInputException::TYPE_EXCEPTION); } $properties = $this->getPropertyvalues(); $length = ilDataCollectionField::PROPERTYID_LENGTH; $regex_id = ilDataCollectionField::PROPERTYID_REGEX; $url = ilDataCollectionField::PROPERTYID_URL; if ($this->getDatatypeId() == ilDataCollectionDatatype::INPUTFORMAT_TEXT) { $regex = $properties[$regex_id]; if (substr($regex, 0, 1) != "/") { $regex = "/" . $regex; } if (substr($regex, -1) != "/") { $regex .= "/"; } if ($properties[$length] < strlen($value) && is_numeric($properties[$length])) { throw new ilDataCollectionInputException(ilDataCollectionInputException::LENGTH_EXCEPTION); } if (!($properties[$regex_id] == NULL || @preg_match($regex, $value))) { throw new ilDataCollectionInputException(ilDataCollectionInputException::REGEX_EXCEPTION); } //email or url if ($properties[$url] && !(preg_match('~(^(news|(ht|f)tp(s?)\\://){1}\\S+)~i', $value) || preg_match("/^[a-z0-9!#\$%&'*+=?^_`{|}~-]+(?:\\.[a-z0-9!#\$%&'*+=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\$/i", $value))) { throw new ilDataCollectionInputException(ilDataCollectionInputException::NOT_URL); } } if ($this->getDatatypeId() == ilDataCollectionDatatype::INPUTFORMAT_MOB and $value['name']) { $arrMimeType = explode('/', ilObjMediaObject::getMimeType($value['name'])); if ($arrMimeType[0] != "image") { throw new ilDataCollectionInputException(ilDataCollectionInputException::NOT_IMAGE); } } if ($this->isUnique() && $record_id === null) { $table = ilDataCollectionCache::getTableCache($this->getTableId()); foreach ($table->getRecords() as $record) { if ($record->getRecordFieldValue($this->getId()) == $value && ($record->getId() != $record_id || $record_id == 0)) { throw new ilDataCollectionInputException(ilDataCollectionInputException::UNIQUE_EXCEPTION); } //for text it has to be case insensitive. if ($this->getDatatypeId() == ilDataCollectionDatatype::INPUTFORMAT_TEXT) { if (strtolower($record->getRecordFieldValue($this->getId())) == strtolower($value) && ($record->getId() != $record_id || $record_id == 0)) { throw new ilDataCollectionInputException(ilDataCollectionInputException::UNIQUE_EXCEPTION); } } if ($this->getDatatypeId() == ilDataCollectionDatatype::INPUTFORMAT_DATETIME) { $datestring = $value["date"] . " " . $value["time"]; //["y"]."-".$value["date"]['m']."-".$value["date"]['d']." 00:00:00"; if ($record->getRecordFieldValue($this->getId()) == $datestring && ($record->getId() != $record_id || $record_id == 0)) { throw new ilDataCollectionInputException(ilDataCollectionInputException::UNIQUE_EXCEPTION); } } } } return true; }