FEATURE: add copying of templates

This commit is contained in:
Michal Kváček
2016-03-07 16:27:00 +01:00
parent fa97ccc032
commit 6e6be7f790
4 changed files with 111 additions and 10 deletions
+95 -4
View File
@@ -2,14 +2,105 @@
namespace App\Http\Controllers\Admin;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\Http\Requests;
use App\Http\Requests\CopyTemplateRequest;
use App\Models\Template;
use Illuminate\Http\Request;
class CopyTemplate extends Controller
{
public function createCopy(Requests\CopyTemplateRequest $request) {
/**
* Method for copying given template.
*
* This method is supposed to be called by POST method.
*
* @param CopyTemplateRequest $request
*
* @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
*/
public function createCopy(CopyTemplateRequest $request)
{
// get variables from request
$newName = preg_replace('/[^a-z0-9_]/i', '', $request->newName);
$oldTemplateId = $request->templateId;
// get template path
$template = Template::findOrFail($oldTemplateId);
// get template absolute paths
$realTemplatePath = $template->getPathToTemplate();
$customTemplatePath = $template->getPathToTemplate(Template::CUSTOM_EDIT_DIRECTORY);
$path = dirname($customTemplatePath);
// create file copy
$data = file_get_contents($realTemplatePath);
$written = file_put_contents($path . DIRECTORY_SEPARATOR . $newName . Template::TEMPLATE_SUFFIX, $data);
// were data written?
if ($written === false) {
return $this->copyFailed($request, $template);
}
// insert record into database (**custom paths are not crawled)
$newTemplate = Template::create([
'template_name' => $newName,
'name' => $newName,
'path' => $template->path,
'description' => $template->description,
'editable' => 1
]);
// inform user about successfull copying
return $this->copySuccessfull($request, $newTemplate);
}
/**
* Handle failed template copying
*
* @param CopyTemplateRequest $request
* @param Template $template
*
* @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
*
*/
private function copyFailed(CopyTemplateRequest $request, Template $template)
{
$message = trans('admin/templates.copyFailed', ['name' => $template->name]);
if ($request->ajax()) {
return response()->json([
'status' => 'fail',
'redirectUrl' => route('templates.overview', ['path' => $template->path]),
'message' => $message
]);
} else {
return redirect()
->route('templates.overview', ['path' => $template->path])
->with('error', $message);
}
}
/**
* Handle (redirect/send response) successfully copied template
*
* @param CopyTemplateRequest $request
* @param Template $newTemplate
*
* @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
*/
private function copySuccessfull(CopyTemplateRequest $request, Template $newTemplate)
{
if ($request->ajax()) {
return response()->json([
'status' => 'success',
'redirectUrl' => route('templates.overview', ['path' => $newTemplate->path]),
'message' => trans('admin/templates.copySuccessfull', ['name' => $newTemplate->name])
]);
} else {
return redirect()
->route(route('templates.overview', ['path' => $newTemplate->path]))
->with('success', trans('admin/templates.copySuccessfull', ['name' => $newTemplate->name]));
}
}
}
+1 -1
View File
@@ -13,7 +13,7 @@ class CopyTemplateRequest extends Request
{
return [
'templateId' => 'required|exists:templates,id',
'newTemplateName' => 'required'
'newName' => 'required'
];
}
}