config = $config; $this->metadata = $metadata; $this->fileManager = $fileManager; } /** * @throws Error */ public function getTemplate( string $type, string $name, ?string $entityType = null, ?string $defaultModuleName = null ): string { $fileName = $this->getTemplateFileName($type, $name, $entityType, $defaultModuleName); if (!$this->fileManager->isFile($fileName)) { throw new Error("Template file not found."); } $contents = file_get_contents($fileName); if ($contents === false) { throw new Error("Could not read template file."); } return $contents; } public function saveTemplate( string $type, string $name, string $contents, ?string $entityType = null ): void { $language = $this->config->get('language'); if ($entityType) { $fileName = "custom/Espo/Custom/Resources/templates/{$type}/{$language}/{$entityType}/{$name}.tpl"; } else { $fileName = "custom/Espo/Custom/Resources/templates/{$type}/{$language}/{$name}.tpl"; } $this->fileManager->putContents($fileName, $contents); } public function resetTemplate(string $type, string $name, ?string $entityType = null): void { $language = $this->config->get('language'); if ($entityType) { $fileName = "custom/Espo/Custom/Resources/templates/{$type}/{$language}/{$entityType}/{$name}.tpl"; } else { $fileName = "custom/Espo/Custom/Resources/templates/{$type}/{$language}/{$name}.tpl"; } $this->fileManager->removeFile($fileName); } private function getTemplateFileName( string $type, string $name, ?string $entityType = null, ?string $defaultModuleName = null ): ?string { $language = $this->config->get('language'); if ($entityType) { $moduleName = $this->metadata->getScopeModuleName($entityType); $fileName = "custom/Espo/Custom/Resources/templates/{$type}/{$language}/{$entityType}/{$name}.tpl"; if ($this->fileManager->isFile($fileName)) { return $fileName; } if ($moduleName) { $fileName = "application/Espo/Modules/{$moduleName}/Resources/" . "templates/{$type}/{$language}/{$entityType}/{$name}.tpl"; if ($this->fileManager->isFile($fileName)) { return $fileName; } } $fileName = "application/Espo/Resources/templates/{$type}/{$language}/{$entityType}/{$name}.tpl"; if ($this->fileManager->isFile($fileName)) { return $fileName; } } $fileName = "custom/Espo/Custom/Resources/templates/{$type}/{$language}/{$name}.tpl"; if ($this->fileManager->isFile($fileName)) { return $fileName; } if ($defaultModuleName) { $fileName = "application/Espo/Modules/{$defaultModuleName}/" . "Resources/templates/{$type}/{$language}/{$name}.tpl"; } else { $fileName = "application/Espo/Resources/templates/{$type}/{$language}/{$name}.tpl"; } if ($this->fileManager->isFile($fileName)) { return $fileName; } $language = 'en_US'; if ($entityType) { $fileName = "custom/Espo/Custom/Resources/templates/{$type}/{$language}/{$entityType}/{$name}.tpl"; if ($this->fileManager->isFile($fileName)) { return $fileName; } if ($moduleName) { $fileName = "application/Espo/Modules/{$moduleName}/" . "Resources/templates/{$type}/{$language}/{$entityType}/{$name}.tpl"; if ($this->fileManager->isFile($fileName)) { return $fileName; } } $fileName = "application/Espo/Resources/templates/{$type}/{$language}/{$entityType}/{$name}.tpl"; if ($this->fileManager->isFile($fileName)) { return $fileName; } } $fileName = "custom/Espo/Custom/Resources/templates/{$type}/{$language}/{$name}.tpl"; if ($this->fileManager->isFile($fileName)) { return $fileName; } if ($defaultModuleName) { $fileName = "application/Espo/Modules/{$defaultModuleName}/" . "Resources/templates/{$type}/{$language}/{$name}.tpl"; } else { $fileName = "application/Espo/Resources/templates/{$type}/{$language}/{$name}.tpl"; } return $fileName; } }