diff --git a/app/Http/Controllers/Admin/EditTemplate.php b/app/Http/Controllers/Admin/EditTemplate.php new file mode 100644 index 00000000..bd2505c9 --- /dev/null +++ b/app/Http/Controllers/Admin/EditTemplate.php @@ -0,0 +1,179 @@ +getPath(); + + // load template content + $absolutePath = $template->getPathToTemplate(); + $content = file_get_contents($absolutePath); + + return view('admin.templates.edit', [ + 'template' => $template, + 'templateContent' => $content, + 'isWritable' => is_writable(dirname($absolutePath)), + 'path' => $path, + ]); + } + + /** + * Save meta information about template and edited content + * + * @param EditTemplateRequest $request + * @param $templateId + * + * @return \Illuminate\Http\RedirectResponse + */ + public function postEdit(EditTemplateRequest $request, $templateId) + { + // find template + $template = Template::findOrFail($templateId); + + // setup meta information + $template->name = $request->name; + + if ($request->description) { + $template->description = $request->description; + } + + // save meta information into database + $template->save(); + + // try to save content + return $this->saveContent($template, $request); + } + + /** + * Save physical content of given template + * + * @param Template $template + * @param EditTemplateRequest $request + * + * @return \Illuminate\Http\RedirectResponse + */ + private function saveContent(Template $template, EditTemplateRequest $request) + { + // get templates with paths + $originalTemplate = $template->getPathToTemplate(Template::ORIGINAL_DIRECTORY); + $customTemplate = $template->getPathToTemplate(Template::CUSTOM_EDIT_DIRECTORY); + + // get paths + $originalDir = dirname($originalTemplate); + $customDir = dirname($customTemplate); + + // try to save content + if (!is_writable($customDir) && !is_writable($originalDir)) { + return redirect() + ->route('templates.edit', ['id' => $request->id]) + ->withInput() + ->with('error', trans('admin/templates.cannotWriteContent')); + } + + // save new content only if something was changed + if ($this->isContentDifferent($originalTemplate, $customTemplate, $request->templateContent)) { + + // create directory for custom updates + if (!is_dir($customDir)) { + File::makeDirectory($customDir); + } + + // make copy of existing template (if exists) + $this->backupTemplates($customTemplate); + + // save content + File::put($customTemplate, $request->templateContent); + } + + return redirect() + ->route('templates.overview', ['id' => $template->path]) + ->with('success', trans('admin/templates.editSuccessfull')); + } + + /** + * Get last "revision" of edited template. + * + * Template changes are not discarded, however new file is created. Last template is renamed to + *