/** * Creates the preview of the specified preview object. * * @param ilPreview $preview The preview object. * @param ilObject $obj The object to create a preview for. * @param bool $async true, if the rendering should be done asynchronously; otherwise, false. * @return bool true, if the preview was successfully rendered; otherwise, false. */ public final function render($preview, $obj, $async) { $preview->setRenderDate(ilUtil::now()); $preview->setRenderStatus(ilPreview::RENDER_STATUS_PENDING); $preview->save(); // TODO: this should be done in background if $async is true // the deriving renderer should deliver images require_once "./Services/Preview/classes/class.ilRenderedImage.php"; $images = $this->renderImages($obj); // process each image if (is_array($images) && count($images) > 0) { $success = false; foreach ($images as $idx => $image) { // create the ending preview image $success |= $this->createPreviewImage($image->getImagePath(), sprintf($preview->getFilePathFormat(), $idx + 1)); // if the image is temporary we can delete it if ($image->isTemporary()) { $image->delete(); } } $preview->setRenderDate(ilUtil::now()); $preview->setRenderStatus($success ? ilPreview::RENDER_STATUS_CREATED : ilPreview::RENDER_STATUS_FAILED); return $success; } else { $preview->setRenderDate(ilUtil::now()); $preview->setRenderStatus(ilPreview::RENDER_STATUS_FAILED); return false; } }
/** * Gets the render status for the object with the specified id. * * @param int $a_obj_id The id of the object to get the status for. * @return string The status of the rendering process. */ public static function lookupRenderStatus($a_obj_id) { $preview = new ilPreview($a_obj_id); return $preview->getRenderStatus(); }
/** * show information screen */ function infoScreenForward() { global $ilTabs, $ilErr, $ilToolbar; $ilTabs->activateTab("id_info"); if (!$this->checkPermissionBool("visible")) { $ilErr->raiseError($this->lng->txt("msg_no_perm_read")); } include_once "./Services/InfoScreen/classes/class.ilInfoScreenGUI.php"; $info = new ilInfoScreenGUI($this); if ($this->checkPermissionBool("read", "sendfile")) { // #9876 $this->lng->loadLanguageModule("file"); // #14378 include_once "Services/UIComponent/Button/classes/class.ilLinkButton.php"; $button = ilLinkButton::getInstance(); $button->setCaption("file_download"); $button->setPrimary(true); // get permanent download link for repository if ($this->id_type == self::REPOSITORY_NODE_ID) { $button->setUrl(ilObjFileAccess::_getPermanentDownloadLink($this->node_id)); } else { $button->setUrl($this->ctrl->getLinkTarget($this, "sendfile")); } $ilToolbar->addButtonInstance($button); } $info->enablePrivateNotes(); if ($this->checkPermissionBool("read")) { $info->enableNews(); } // no news editing for files, just notifications $info->enableNewsEditing(false); if ($this->checkPermissionBool("write")) { $news_set = new ilSetting("news"); $enable_internal_rss = $news_set->get("enable_rss_for_internal"); if ($enable_internal_rss) { $info->setBlockProperty("news", "settings", true); $info->setBlockProperty("news", "public_notifications_option", true); } } // standard meta data $info->addMetaDataSections($this->object->getId(), 0, $this->object->getType()); $info->addSection($this->lng->txt("file_info")); $info->addProperty($this->lng->txt("filename"), $this->object->getFileName()); // BEGIN WebDAV Guess file type. $info->addProperty($this->lng->txt("type"), $this->object->guessFileType()); // END WebDAV Guess file type. $info->addProperty($this->lng->txt("size"), ilFormat::formatSize(ilObjFile::_lookupFileSize($this->object->getId()), 'long')); $info->addProperty($this->lng->txt("version"), $this->object->getVersion()); // using getVersions function instead of ilHistory direct $uploader = $this->object->getVersions(); $uploader = array_shift($uploader); $uploader = $uploader["user_id"]; $this->lng->loadLanguageModule("file"); include_once "Services/User/classes/class.ilUserUtil.php"; $info->addProperty($this->lng->txt("file_uploaded_by"), ilUserUtil::getNamePresentation($uploader)); // download link added in repository if ($this->id_type == self::REPOSITORY_NODE_ID && $this->checkPermissionBool("read", "sendfile")) { $tpl = new ilTemplate("tpl.download_link.html", true, true, "Modules/File"); $tpl->setVariable("LINK", ilObjFileAccess::_getPermanentDownloadLink($this->node_id)); $info->addProperty($this->lng->txt("download_link"), $tpl->get()); } if ($this->id_type == self::WORKSPACE_NODE_ID) { $info->addProperty($this->lng->txt("perma_link"), $this->getPermanentLinkWidget()); } // display previews include_once "./Services/Preview/classes/class.ilPreview.php"; if (!$this->ctrl->isAsynch() && ilPreview::hasPreview($this->object->getId(), $this->object->getType()) && $this->checkPermissionBool("read")) { include_once "./Services/Preview/classes/class.ilPreviewGUI.php"; // get context for access checks later on $context; switch ($this->id_type) { case self::WORKSPACE_NODE_ID: case self::WORKSPACE_OBJECT_ID: $context = ilPreviewGUI::CONTEXT_WORKSPACE; break; default: $context = ilPreviewGUI::CONTEXT_REPOSITORY; break; } $preview = new ilPreviewGUI($this->node_id, $context, $this->object->getId(), $this->access_handler); $info->addProperty($this->lng->txt("preview"), $preview->getInlineHTML()); } // forward the command // $this->ctrl->setCmd("showSummary"); // $this->ctrl->setCmdClass("ilinfoscreengui"); $this->ctrl->forwardCommand($info); }
/** * insert item title * * @access private * @param object $a_tpl template object * @param string $a_title item title */ public function insertTitle() { if ($this->restrict_to_goto) { $this->default_command = array("frame" => "", "link" => $this->buildGotoLink()); } // begin-patch lok if (!$this->default_command || !$this->getCommandsStatus() && !$this->restrict_to_goto || $this->title_link_disabled) { $this->tpl->setCurrentBlock("item_title"); $this->tpl->setVariable("TXT_TITLE", $this->getTitle()); $this->tpl->parseCurrentBlock(); } else { $this->default_command['link'] = $this->modifyTitleLink($this->default_command['link']); $this->default_command["link"] = $this->modifySAHSlaunch($this->default_command["link"], $this->default_command["frame"]); if ($this->default_command["frame"] != "") { $this->tpl->setCurrentBlock("title_linked_frame"); $this->tpl->setVariable("TARGET_TITLE_LINKED", $this->default_command["frame"]); $this->tpl->parseCurrentBlock(); } // workaround for repository frameset #var_dump("<pre>",$this->default_command['link'],"</pre>"); $this->default_command["link"] = $this->appendRepositoryFrameParameter($this->default_command["link"]); #var_dump("<pre>",$this->default_command['link'],"</pre>"); // the default command is linked with the title $this->tpl->setCurrentBlock("item_title_linked"); $this->tpl->setVariable("TXT_TITLE_LINKED", $this->getTitle()); $this->tpl->setVariable("HREF_TITLE_LINKED", $this->default_command["link"]); // has preview? include_once "./Services/Preview/classes/class.ilPreview.php"; if (ilPreview::hasPreview($this->obj_id, $this->type)) { include_once "./Services/Preview/classes/class.ilPreviewGUI.php"; // get context for access checks later on $access_handler = null; $context; switch ($this->context) { case self::CONTEXT_WORKSPACE: case self::CONTEXT_WORKSPACE_SHARING: $context = ilPreviewGUI::CONTEXT_WORKSPACE; include_once "./Services/PersonalWorkspace/classes/class.ilWorkspaceAccessHandler.php"; $access_handler = new ilWorkspaceAccessHandler(); break; default: global $ilAccess; $context = ilPreviewGUI::CONTEXT_REPOSITORY; $access_handler = $ilAccess; break; } $preview = new ilPreviewGUI($this->ref_id, $context, $this->obj_id, $access_handler); $preview_status = ilPreview::lookupRenderStatus($this->obj_id); $preview_status_class = ""; $preview_text_topic = "preview_show"; if ($preview_status == ilPreview::RENDER_STATUS_NONE) { $preview_status_class = "ilPreviewStatusNone"; $preview_text_topic = "preview_none"; } $this->tpl->setCurrentBlock("item_title_linked"); $this->tpl->setVariable("PREVIEW_STATUS_CLASS", $preview_status_class); $this->tpl->setVariable("SRC_PREVIEW_ICON", ilUtil::getImagePath("preview.png", "Services/Preview")); $this->tpl->setVariable("TXT_PREVIEW", $this->lng->txt($preview_text_topic)); $this->tpl->setVariable("SCRIPT_PREVIEW_CLICK", $preview->getJSCall($this->getUniqueItemId(true))); $this->tpl->parseCurrentBlock(); } $this->tpl->parseCurrentBlock(); } if ($this->bold_title == true) { $this->tpl->touchBlock('bold_title_start'); $this->tpl->touchBlock('bold_title_end'); } }
/** * Deletes the preview of the file object. */ protected function deletePreview() { // only normal files are supported if ($this->getMode() != "object") { return; } require_once "./Services/Preview/classes/class.ilPreview.php"; ilPreview::deletePreview($this->getId()); }
/** * function parses stored value in database to a html output for eg. the record list gui. * * @param $value * @param ilDataCollectionRecordField $record_field * * @return mixed */ public function parseHTML($value, ilDataCollectionRecordField $record_field, $link = true) { global $ilAccess, $ilCtrl, $lng; switch ($this->id) { case self::INPUTFORMAT_DATETIME: $html = ilDatePresentation::formatDate(new ilDate($value, IL_CAL_DATETIME)); break; case self::INPUTFORMAT_FILE: if (!ilObject2::_exists($value) || ilObject2::_lookupType($value, false) != "file") { $html = ""; break; } $file_obj = new ilObjFile($value, false); $ilCtrl->setParameterByClass("ildatacollectionrecordlistgui", "record_id", $record_field->getRecord()->getId()); $ilCtrl->setParameterByClass("ildatacollectionrecordlistgui", "field_id", $record_field->getField()->getId()); $html = '<a href="' . $ilCtrl->getLinkTargetByClass("ildatacollectionrecordlistgui", "sendFile") . '">' . $file_obj->getFileName() . '</a>'; if (ilPreview::hasPreview($file_obj->getId())) { ilPreview::createPreview($file_obj); // Create preview if not already existing $preview = new ilPreviewGUI((int) $_GET['ref_id'], ilPreviewGUI::CONTEXT_REPOSITORY, $file_obj->getId(), $ilAccess); $preview_status = ilPreview::lookupRenderStatus($file_obj->getId()); $preview_status_class = ""; $preview_text_topic = "preview_show"; if ($preview_status == ilPreview::RENDER_STATUS_NONE) { $preview_status_class = "ilPreviewStatusNone"; $preview_text_topic = "preview_none"; } $wrapper_html_id = 'record_field_' . $record_field->getId(); $script_preview_click = $preview->getJSCall($wrapper_html_id); $preview_title = $lng->txt($preview_text_topic); $preview_icon = ilUtil::getImagePath("preview.png", "Services/Preview"); $html = '<div id="' . $wrapper_html_id . '">' . $html; $html .= '<span class="il_ContainerItemPreview ' . $preview_status_class . '"><a href="javascript:void(0);" onclick="' . $script_preview_click . '" title="' . $preview_title . '"><img src="' . $preview_icon . '" height="16" width="16"></a></span></div>'; } break; case self::INPUTFORMAT_MOB: $mob = new ilObjMediaObject($value, false); $med = $mob->getMediaItem('Standard'); if (!$med->location) { $html = ""; break; } $arr_properties = $record_field->getField()->getProperties(); $is_linked_field = $arr_properties[ilDataCollectionField::PROPERTYID_LINK_DETAIL_PAGE_MOB]; $has_view = ilDataCollectionRecordViewViewdefinition::getIdByTableId($record_field->getRecord()->getTableId()); if (in_array($med->getSuffix(), array('jpg', 'jpeg', 'png', 'gif'))) { // Image $dir = ilObjMediaObject::_getDirectory($mob->getId()); $width = (int) $arr_properties[ilDataCollectionField::PROPERTYID_WIDTH]; $height = (int) $arr_properties[ilDataCollectionField::PROPERTYID_HEIGHT]; $html = ilUtil::img($dir . "/" . $med->location, '', $width, $height); if ($is_linked_field and $has_view and $link) { $ilCtrl->setParameterByClass('ildatacollectionrecordviewgui', 'record_id', $record_field->getRecord()->getId()); $html = '<a href="' . $ilCtrl->getLinkTargetByClass("ildatacollectionrecordviewgui", 'renderRecord') . '">' . $html . '</a>'; } } else { // Video/Audio $mpl = new ilMediaPlayerGUI($med->getId(), ''); $mpl->setFile(ilObjMediaObject::_getURL($mob->getId()) . "/" . $med->getLocation()); $mpl->setMimeType($med->getFormat()); $mpl->setDisplayWidth((int) $arr_properties[ilDataCollectionField::PROPERTYID_WIDTH] . 'px'); $mpl->setDisplayHeight((int) $arr_properties[ilDataCollectionField::PROPERTYID_HEIGHT] . 'px'); $mpl->setVideoPreviewPic($mob->getVideoPreviewPic()); $html = $mpl->getPreviewHtml(); if ($is_linked_field and $has_view) { global $lng; $ilCtrl->setParameterByClass('ildatacollectionrecordviewgui', 'record_id', $record_field->getRecord()->getId()); $html = $html . '<a href="' . $ilCtrl->getLinkTargetByClass("ildatacollectionrecordviewgui", 'renderRecord') . '">' . $lng->txt('details') . '</a>'; } } break; case self::INPUTFORMAT_BOOLEAN: switch ($value) { case 0: $im = ilUtil::getImagePath('icon_not_ok.svg'); break; case 1: $im = ilUtil::getImagePath('icon_ok.svg'); break; } $html = "<img src='" . $im . "'>"; break; case ilDataCollectionDatatype::INPUTFORMAT_TEXT: //Property URL $arr_properties = $record_field->getField()->getProperties(); if ($arr_properties[ilDataCollectionField::PROPERTYID_URL]) { $link = $value; if (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)) { $value = "mailto:" . $value; } elseif (!preg_match('~(^(news|(ht|f)tp(s?)\\://){1}\\S+)~i', $value)) { return $link; } $link = $this->shortenLink($link); $html = "<a target='_blank' href='" . $value . "'>" . $link . "</a>"; } elseif ($arr_properties[ilDataCollectionField::PROPERTYID_LINK_DETAIL_PAGE_TEXT] and $link and ilDataCollectionRecordViewViewdefinition::getIdByTableId($record_field->getRecord()->getTableId())) { $ilCtrl->setParameterByClass('ildatacollectionrecordviewgui', 'record_id', $record_field->getRecord()->getId()); $html = '<a href="' . $ilCtrl->getLinkTargetByClass("ildatacollectionrecordviewgui", 'renderRecord') . '">' . $value . '</a>'; } else { $html = $value; } break; default: $html = $value; break; } return $html; }