FEATURE: add copying of templates
This commit is contained in:
@@ -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]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ class CopyTemplateRequest extends Request
|
||||
{
|
||||
return [
|
||||
'templateId' => 'required|exists:templates,id',
|
||||
'newTemplateName' => 'required'
|
||||
'newName' => 'required'
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,5 +15,7 @@ return [
|
||||
'notWritable' => 'Cannot write to :file. Any submited changes in this file will <strong>not</strong> be saved!',
|
||||
'cannotWriteContent' => 'Cannot save template content, directory has unsufficient permissions. Meta information were saved.',
|
||||
'newTemplateName' => 'Template name used in Blade templates',
|
||||
'newTemplateNameSuffix' => 'copy'
|
||||
'newTemplateNameSuffix' => 'copy',
|
||||
'copySuccessfull' => 'Template :name successfully created by copying from other template.',
|
||||
'copyFailed' => 'Cannot copy template into :name. Check write permissions to proper template path.'
|
||||
];
|
||||
@@ -40,12 +40,20 @@
|
||||
var templateId = link.data ('template-id');
|
||||
var templateName = link.data ('template-name');
|
||||
|
||||
var newTemplateName = prompt ("@lang('admin/templates.newTemplateName')", templateName + "_"+"@lang('admin/templates.newTemplateNameSuffix')");
|
||||
var newTemplateName = prompt ("@lang('admin/templates.newTemplateName')", templateName + "_" + "@lang('admin/templates.newTemplateNameSuffix')");
|
||||
|
||||
// no name given - give up
|
||||
if (newTemplateName == null) return;
|
||||
|
||||
$.ajax({
|
||||
'url': '{{route('templates.copy')}}}'
|
||||
// copy given template
|
||||
$.post ('{{route('templates.postCopy')}}', {
|
||||
templateId: templateId,
|
||||
newName: newTemplateName,
|
||||
_token: "{{csrf_token()}}"
|
||||
}, function (data) {
|
||||
if (data.status == 'success') {
|
||||
location.reload ();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user