gmarche/src/Antenne/Actions/AntenneCrudAction.php

161 lines
5.1 KiB
PHP

<?php
namespace App\Antenne\Actions;
if (!isset($_SESSION)) {
session_start();
}
use App\Gmarche\Entity\Antenne;
use App\Gmarche\Table\AntenneTable;
use App\Gmarche\Table\RegionTable;
use Framework\Actions\CrudAction;
use Framework\Actions\RouterAwareAction;
use Framework\Renderer\RendererInterface;
use Framework\Response\RedirectResponse;
use Framework\Router;
use Framework\Session\FlashService;
use Framework\Validator;
use Psr\Http\Message\ServerRequestInterface as Request;
class AntenneCrudAction extends CrudAction
{
protected $viewPath = "@antenne";
protected $routePrefix = "antenne";
/**
* @var RendererInterface
*/
private $renderer;
/**
* @var RegionTable
*/
protected $regionTable;
/**
* @var AntenneTable
*/
protected $antenneTable;
/**
* @var FlashService
*/
private $flashService;
use RouterAwareAction;
public function __construct(
RendererInterface $renderer,
Router $router,
AntenneTable $antenneTable,
RegionTable $regionTable,
FlashService $flash
) {
parent::__construct($renderer, $router, $antenneTable, $regionTable, $flash);
$this->renderer = $renderer;
$this->regionTable = $regionTable;
$this->antenneTable = $antenneTable;
$this->flashService = $flash;
}
public function delete(Request $request)
{
$antenne = $this->antenneTable->find($request->getAttribute('id'));
// $this->postUpload->delete($post->image);
return parent::delete($request);
}
protected function formParams(array $params): array
{
return $params;
}
protected function getNewEntity()
{
$antenne = new Antenne();
$antenne->created_at = new \DateTime();
return $antenne;
}
/**
* @param Request $request
* @param Antenne $antenne
* @return array
*/
protected function prePersist(Request $request, $antenne): array
{
$params = $request->getParsedBody();
$params = array_filter($params, function ($key) {
return in_array($key, ['region_id', 'name', 'slug', 'created_at', 'listeRegions']);
}, ARRAY_FILTER_USE_KEY);
return array_merge($params, ['test' => $test, 'updated_at' => date('Y-m-d H:i:s')]);
}
protected function getValidator(Request $request)
{
$validator = parent::getValidator($request)
->required('region_id', 'name', 'slug', 'created_at')
->length('name', 2, 250)
->dateTime('created_at')
->slug('slug');
/*if (is_null($request->getAttribute('id'))) {
$validator->uploaded('image');
}*/
return $validator;
}
public function __invoke(Request $request)
{
if ($request->getMethod() === 'POST') {
$params = $request->getParsedBody();
$date = $params['datepicker'];
$time = '00:00:00';
$date_us = substr($date,6,4).'-'.substr($date,3,2).'-'.substr($date,0,2);
$date_us .= ' '.$time;
$madate = date("Y-m-d H:i:s", strtotime($date_us));
$text = $params['antenne'];
// replace non letter or digits by -
$text = preg_replace('~[^\pL\d]+~u', '-', $text);
// transliterate
$text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);
// remove unwanted characters
$text = preg_replace('~[^-\w]+~', '', $text);
// trim
$text = trim($text, '-');
// remove duplicate -
$text = preg_replace('~-+~', '-', $text);
// lowercase
$slug = strtolower($text);
$admin = '';
$content = '';
$image = '';
$created_at = date("Y-m-d H:i:s");
$validator = (new Validator($params))
->required('antenne', 'region');
if ($validator->isValid()) {
$antenneParams = [
'id' => $antenne_id,
'name' => $params['antenne'],
'slug' => $slug,
'admin' => $admin,
'content' => $content,
'image' => $image,
'created_at' => $created_at,
'region_id' => $params['region'],
'gmarcheAt' => $madate,
'edito1' => $params['contenu1'],
'edito2' => $params['contenu2'],
'edito3' => $params['contenu3'],
'edito4' => $params['contenu4']
];
$this->antenneTable->insert($antenneParams);
$this->flashService->success("L'antenne ".$params['antenne']." a bien été créée.");
return new RedirectResponse($request->getUri()->getPath());
}
}
//$errors = $validator->getErrors();
$listeRegions = $this->regionTable->findAll();
$role = $_SESSION['role'];
return $this->renderer->render('@antenne/create', compact('listeRegions','role'));
}
}