Files
core/modules/ContactForm/Handlers/ContactForm.php
T
Michal Kváček f90f43fcd6 FEATURE: create module for contact form.
Currently contact form can be created, edit is not done yet. And also email sending neither work, now.
2016-04-01 17:04:10 +02:00

153 lines
4.7 KiB
PHP

<?php
namespace Modules\ContactForm\Handlers;
use App\Enumerations\ModulesHandlerToId;
use App\Handlers\Handler;
use App\Http\Controllers\Controller;
use App\Http\Requests\Request;
use App\Models\Content;
use App\Models\User;
class ContactForm extends Handler
{
/**
* Render given module into visitor area.
*
* @param Content $content DB model from table contents
* @param array $parameters parameters used for modifications/custom settings of given model
*
* @return mixed
*/
public function render(Content $content, $parameters)
{
$content->module_settings = json_decode($content->module_settings);
return Controller::VisitorsView($content->template, ['page' => $content]);
}
public static function getHistoryHandler()
{
return ContactFormHistory::class;
}
/**
* Save module-specific values into database
*
* @param Content $content
* @param Request $request
*
* @return mixed
* @internal param Widget $widget
*/
public static function createNew(Content &$content, Request $request)
{
$settings = [
'phone' => $request->phone,
'email' => $request->email,
'companyName' => $request->companyName,
'address' => $request->address,
'gpsLat' => $request->gpsLat,
'gpsLng' => $request->gpsLng,
];
// save settings
$content->module_settings = json_encode($settings);
}
/**
* Method used for editing existing content page.
*
* Reason why it is separated from createNew() method is simple - we need to save history of changes.
*
* @param Content $content
* @param Request $request
*
* @param $revisionID string ID of revision used
*
* @return int number of edited fields
*/
public static function edit(Content &$content, Request $request, $revisionID)
{
// TODO: Implement edit() method.
}
public static function getModuleId()
{
$handler = config('contactform.handler');
$allModules = ModulesHandlerToId::getWithTranslations();
$moduleId = isset($allModules[$handler]) ? $allModules[$handler] : null;
return $moduleId;
}
/**
* Getter for section names in creating/editing content resource
*
* @return mixed
*/
public static function getExtendedFormSections()
{
$sections = parent::getExtendedFormSections();
$sections['content'] = trans('contactform::admin/content.content');
return $sections;
}
/**
* Getter for views used in extended part of form for creating new content
*
* This method should return pairs <section, view-name>. View is returned only as name in plain text
*
* @return array of views/templates/html codes divided into section
*/
public static function getExtendedFormInputsCreate()
{
return [
'basicInfo' => 'contactform::admin.form.basicInfo',
'meta' => 'admin.content.formParts.metaInformation',
'appearance' => 'admin.content.formParts.appearance',
'publication' => 'admin.content.formParts.publicationSetup',
'content' => 'contactform::admin.form.content',
];
}
/**
* Register admin menu (or multiple ones)
*
* This cannot be in ServiceProvider because Session is started at middleware. And ServiceProvider is called before
* starting any middleware..
*
* @param User $user model of logged user
*/
public static function registerAdminMenu(User $user)
{
// register links in admin menu
$menu = \Menu::instance('mainMenu');
$menu->dropdown(trans('contactform::admin/adminMenu.contactForm'), function ($submenu) use ($user) {
$submenu->route('content.new', trans('contactform::admin/adminMenu.new'), ['moduleId' => self::getModuleId()], 10, ['icon' => 'fa fa-plus']);
$submenu->route('content.overview', trans('contactform::admin/adminMenu.overview'), ['moduleId' => self::getModuleId()], 20, ['icon' => 'fa fa-list']);
$submenu->route('emails.sent', trans('contactform::admin/adminMenu.sentMessages'), [], 30, ['icon' => 'fa fa-send']);
}, 25, ['icon' => 'fa fa-envelope-o']);
}
/**
* Does given module manage content? Or is it just module with widgets/something internal/something absolutely else?
*
* @return bool
*/
public static function managesContent()
{
return true;
}
/**
* Install module
*
* @return mixed
*/
public static function install()
{
// TODO: Implement install() method.
}
}