107 lines
4.0 KiB
PHP
107 lines
4.0 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Admin;
|
|
|
|
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
|
|
{
|
|
/**
|
|
* 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]));
|
|
}
|
|
}
|
|
}
|