newName); $oldTemplateId = $request->templateId; // get template path $template = Template::findOrFail($oldTemplateId); $namespace = null; if (strpos($template->template_name, '::')) { list($namespace) = explode('::', $template->template_name); $namespace .= '::'; } $repository = app(TemplateRepository::class); $repository->setModel($template); // get template absolute paths $realTemplatePath = $repository->getPathToTemplate(); $customTemplatePath = $repository->getPathToTemplate(TemplateRepository::CUSTOM_EDIT_DIRECTORY); $path = dirname($customTemplatePath); // create file copy $data = file_get_contents($realTemplatePath); if (!is_dir($path)) { mkdir($path, 0777, true); } $written = file_put_contents($path . DIRECTORY_SEPARATOR . $newName . TemplateRepository::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' => $namespace . $newName, 'name' => $newName, 'path' => $template->path, 'module_id' => $template->module_id, '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])); } } }