File: D:/HostingSpaces/SBogers10/ijzerenman.komma.pro/app/Custom/Forms/FormController.php
<?php
namespace Komma\Forms;
use Komma\Mailer\FormMailer;
use Komma\Pages\DynamicPage;
use Komma\Pages\PageController;
use Komma\Pages\PageRepository;
class FormController extends PageController
{
/**
* @var FormService
*/
protected $formService;
/**
* @var FormMailer
*/
protected $formMailer;
/**
* @var string
*/
protected $formName = 'contact';
/**
* @param FormService $formService
* @param FormMailer $formMailer
* @param PageRepository $pageRepository
* @param DynamicPage $dynamicPage
*/
public function __construct(
FormService $formService,
FormMailer $formMailer,
PageRepository $pageRepository,
DynamicPage $dynamicPage
)
{
parent::__construct($dynamicPage, $pageRepository);
$this->formService = $formService;
$this->formMailer = $formMailer;
}
/**
* Show form
*/
public function show()
{
// Make sure user cannot access success status without submitting form
if(\Request::has('status') && ! \Session::has('success'))
return \Redirect::to(\Route::getCurrentRoute()->uri());
\Session::forget('success');
// Get current page entity
$this->formService->setFormName($this->formName);
// Get global
$entity = \Current::pageEntity();
list($parent) = $this->pageRepository->getParents(
$entity->page['lft'],
$entity->page['rgt']
);
// Create dynamic page
$formPage = $this->dynamicPage->createFormFromEntity($entity);
$blocks = $this->dynamicPage->createFromEntity($entity,[
'page-link-block',
'file-block',
'google-maps-block'
]);
// Render view
$view = \View::make('layouts.pages.' . $this->formName)
->with([
'entity' => $entity,
'global' => $parent,
'formPage' => $formPage,
'blocks' => $blocks,
'data' => $this->formService->fromSession(),
'bodyClass' => $entity->codeName(),
'successRoute' => $entity->route . '?status=success'
])->render();
return $this->renderView($view, $entity);
}
/**
* Process form
*/
public function process()
{
$request = \Request::all();
$request = $this->modifyRequest($request);
// Set form name
$this->formService->setFormName($this->formName);
// Save request in session
$this->formService->saveInSession($request);
// Validate request
if( ! $data = $this->formService->isValid($request))
return \Redirect::back()->withErrors($this->formService->errors());
// Send mail
$data = $this->formService->data($request);
$config = $this->formService->config();
// $this->formMailer->reservationToClient($data,$config);
$this->formMailer->reservationToAdmin($data,$config);
\Session::put('success',1);
$this->formService->forgetSession();
// Redirect to thank you page
return \Redirect::to('/' . $request['success_route']);
}
/**
* Some forms may have custom data they want to modify
* Overwrite this method in a custom controller
*/
protected function modifyRequest($request)
{
return $request;
}
}