From 57e08b76a840e9920d85cddb3b1791b86ad0c1f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Fri, 19 Feb 2016 15:10:39 +0100 Subject: [PATCH] FEATURE #1431: add template edit --- app/Http/Controllers/Admin/EditTemplate.php | 179 ++++++++++++++++++ app/Http/Requests/EditTemplateRequest.php | 19 ++ app/Http/routes.php | 4 +- app/Models/Template.php | 68 ++++++- resources/lang/en/admin/templates.php | 22 ++- .../views/admin/templates/edit.blade.php | 14 ++ .../views/admin/templates/editForm.blade.php | 54 ++++++ .../views/admin/templates/list.blade.php | 12 ++ .../views/visitor/default_theme/.gitkeep | 0 .../default_theme/errorLayout.blade.php | 55 ++++++ .../default_theme/homepage/list.blade.php | 0 .../visitor/default_theme/layout.blade.php | 0 12 files changed, 413 insertions(+), 14 deletions(-) create mode 100644 app/Http/Controllers/Admin/EditTemplate.php create mode 100644 app/Http/Requests/EditTemplateRequest.php create mode 100644 resources/views/admin/templates/edit.blade.php create mode 100644 resources/views/admin/templates/editForm.blade.php mode change 100644 => 100755 resources/views/visitor/default_theme/.gitkeep create mode 100644 resources/views/visitor/default_theme/errorLayout.blade.php delete mode 100644 resources/views/visitor/default_theme/homepage/list.blade.php mode change 100644 => 100755 resources/views/visitor/default_theme/layout.blade.php 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 + *