trans = $trans; $this->logger = $logger; $this->preview = $preview; $this->mimeIconProvider = $mimeIconProvider; } /** * Get templates * * @return array */ #[NoAdminRequired] public function getTemplates() { $templatesList = TemplateManager::getGlobalTemplates(); $templates = []; foreach ($templatesList as $templatesItem) { $template = [ "id" => $templatesItem->getId(), "name" => $templatesItem->getName(), "type" => TemplateManager::getTypeTemplate($templatesItem->getMimeType()), "icon" => $this->mimeIconProvider->getMimeIconUrl($templatesItem->getMimeType()) ]; array_push($templates, $template); } return $templates; } /** * Add global template * * @return array */ public function addTemplate() { $file = $this->request->getUploadedFile("file"); if (!is_null($file)) { if (is_uploaded_file($file["tmp_name"]) && $file["error"] === 0) { if (!TemplateManager::isTemplateType($file["name"])) { return [ "error" => $this->trans->t("Template must be in OOXML format") ]; } $templateDir = TemplateManager::getGlobalTemplateDir(); if ($templateDir->nodeExists($file["name"])) { return [ "error" => $this->trans->t("Template already exists") ]; } $templateContent = file_get_contents($file["tmp_name"]); $template = $templateDir->newFile($file["name"]); $template->putContent($templateContent); $fileInfo = $template->getFileInfo(); $result = [ "id" => $fileInfo->getId(), "name" => $fileInfo->getName(), "type" => TemplateManager::getTypeTemplate($fileInfo->getMimeType()), "icon" => $this->mimeIconProvider->getMimeIconUrl($fileInfo->getMimeType()) ]; return $result; } } return [ "error" => $this->trans->t("Invalid file provided") ]; } /** * Delete template * * @param string $templateId - file identifier * * @return array */ public function deleteTemplate($templateId) { $templateDir = TemplateManager::getGlobalTemplateDir(); try { $templates = $templateDir->getById($templateId); } catch (\Exception $e) { $this->logger->error("deleteTemplate: $templateId", ["exception" => $e]); return [ "error" => $this->trans->t("Failed to delete template") ]; } if (empty($templates)) { $this->logger->info("Template not found: $templateId"); return [ "error" => $this->trans->t("Failed to delete template") ]; } $templates[0]->delete(); $this->logger->debug("Template: deleted " . $templates[0]->getName()); return []; } /** * Returns the origin document key for editor * * @param string $fileId - file identifier * @param int $x - x * @param int $y - y * @param bool $crop - crop * @param string $mode - mode * * @return DataResponse|FileDisplayResponse */ #[NoAdminRequired] #[NoCSRFRequired] public function preview($fileId, $x = 256, $y = 256, $crop = false, $mode = IPreview::MODE_FILL) { if (empty($fileId) || $x === 0 || $y === 0) { return new DataResponse([], Http::STATUS_BAD_REQUEST); } $template = TemplateManager::getTemplate($fileId); if (empty($template)) { $this->logger->error("Template not found: $fileId"); return new DataResponse([], Http::STATUS_NOT_FOUND); } try { $f = $this->preview->getPreview($template, $x, $y, $crop, $mode); $response = new FileDisplayResponse($f, Http::STATUS_OK, ["Content-Type" => $f->getMimeType()]); $response->cacheFor(3600 * 24); return $response; } catch (NotFoundException $e) { return new DataResponse([], Http::STATUS_NOT_FOUND); } catch (\InvalidArgumentException $e) { return new DataResponse([], Http::STATUS_BAD_REQUEST); } } }