File: /home/xedaptot/ai.naniguide.com/app/Http/Controllers/Admin/FormTemplateController.php
<?php
namespace App\Http\Controllers\Admin;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Model\FormTemplate;
class FormTemplateController extends Controller
{
public function index(Request $request)
{
if (!$request->user()->can('read', new \App\Model\FormTemplate())) {
return $this->notAuthorized();
}
return view('admin.form_templates.index');
}
public function list(Request $request)
{
if (!$request->user()->can('read', new \App\Model\FormTemplate())) {
return $this->notAuthorized();
}
// view
$view = $request->view ? $request->view : 'grid';
$formTemplates = FormTemplate::query();
if (!empty($request->category_uid)) {
$formTemplates = $formTemplates->categoryUid($request->category_uid);
}
$formTemplates = $formTemplates->search($request->keyword)
->orderBy($request->sort_order, $request->sort_direction)
->paginate($request->per_page ? $request->per_page : 12);
return view('admin.form_templates._list_' . $view, [
'formTemplates' => $formTemplates,
]);
}
public function add(Request $request)
{
$formTemplate = FormTemplate::newDefault();
$formTemplate->name = trans('messages.untitled_template');
// authorize
if (!$request->user()->can('create', FormTemplate::class)) {
return $this->notAuthorized();
}
// validate and save posted data
if ($request->isMethod('post')) {
$currentFormTemplate = FormTemplate::findByUid($request->template);
// add
$formTemplate->addFormTemplate($request->name, $currentFormTemplate->template);
return redirect()->action('Admin\FormTemplateController@builder', $formTemplate->uid);
}
return view('admin.form_templates.add', [
'formTemplate' => $formTemplate,
]);
}
public function templates(Request $request)
{
// authorize
if (!$request->user()->can('create', FormTemplate::class)) {
return $this->notAuthorized();
}
//
$formTemplates = FormTemplate::query();
// sort, pagination
$formTemplates = $formTemplates->search($request->keyword)
->orderBy($request->sort_order, $request->sort_direction)
->paginate($request->per_page);
return view('admin.form_templates.templates', [
'formTemplates' => $formTemplates,
]);
}
public function builder(Request $request, $uid)
{
// Generate info
$formTemplate = FormTemplate::findByUid($uid);
// authorize
if (!$request->user()->can('update', $formTemplate)) {
return $this->notAuthorized();
}
// validate and save posted data
if ($request->isMethod('post')) {
//
$validator = $formTemplate->updateContent($request->json, $request->content);
//
if ($validator->fails()) {
return response()->json($validator->errors(), 400);
}
//
return response()->json([
'status' => 'success',
]);
}
return view('admin.form_templates.builder', [
'formTemplate' => $formTemplate,
]);
}
public function changeName(Request $request)
{
$formTemplate = FormTemplate::findByUid($request->uid);
// authorize
if (!$request->user()->can('update', $formTemplate)) {
return $this->notAuthorized();
}
if ($request->isMethod('post')) {
// change name
$validator = $formTemplate->changeName($request->name);
if ($validator->fails()) {
return response()->view('admin.form_templates.changeName', [
'formTemplate' => $formTemplate,
'errors' => $validator->errors(),
], 400);
}
return response()->json([
'status' => 'success',
'message' => trans('messages.template.name.changed'),
], 201);
}
return view('admin.form_templates.changeName', [
'formTemplate' => $formTemplate,
]);
}
public function preview(Request $request, $uid)
{
$formTemplate = FormTemplate::findByUid($uid);
// authorize
if (!$request->user()->can('preview', $formTemplate)) {
return $this->notAuthorized();
}
return $formTemplate->template->getPreviewContent();
}
public function copy(Request $request)
{
$formTemplate = FormTemplate::findByUid($request->uid);
if ($request->isMethod('post')) {
// authorize
if (!$request->user()->can('copy', $formTemplate)) {
return $this->notAuthorized();
}
// copy
$formTemplate->copy($request->name);
echo trans('messages.template.copied');
return;
}
return view('admin.form_templates.copy', [
'formTemplate' => $formTemplate,
]);
}
}