gmarche/src/Auth/Action/PasswordForgetAction.php

98 lines
3.0 KiB
PHP

<?php
namespace App\Auth\Action;
use App\Auth\Mailer\PasswordResetMailer;
use App\Auth\UserTable;
use Framework\Actions\RouterAwareAction;
use Framework\Database\NoRecordException;
use Framework\Renderer\RendererInterface;
use Framework\Response\RedirectResponse;
use Framework\Router;
use Framework\Session\FlashService;
use Framework\Validator;
use Psr\Http\Message\ServerRequestInterface;
use Zend\Expressive\Router\RouterInterface;
class PasswordForgetAction
{
/**
* @var RendererInterface
*/
private $renderer;
/**
* @var RouterInterface
*/
private $router;
/**
* @var UserTable
*/
private $userTable;
/**
* @var PasswordResetMailer
*/
private $mailer;
/**
* @var FlashService
*/
private $flashService;
use RouterAwareAction;
public function __construct(
RendererInterface $renderer,
Router $router,
UserTable $userTable,
PasswordResetMailer $mailer,
FlashService $flashService
) {
$this->renderer = $renderer;
$this->router = $router;
$this->userTable = $userTable;
$this->mailer = $mailer;
$this->flashService = $flashService;
}
public function __invoke(ServerRequestInterface $request)
{
if ($request->getMethod() === 'GET') {
$affichage_div = true;
return $this->renderer->render('@auth/password',compact('affichage_div'));
}
$params = $request->getParsedBody();
$url_part = explode('/',$_SERVER['HTTP_REFERER']);
$chemin = $url_part[3].'/'.$url_part[4];
$validator = (new Validator($params))
->notEmpty('email')
->email('email');
if ($validator->isValid()) {
// try {
if ($user = $this->userTable->findBy('email', $params['email'])) {
$token = $this->userTable->resetPassword($user->id);
$this->mailer->send($user->email, [
'id' => $user->id,
'token' => $token
]);
$this->flashService->success("Un email a été envoyé à l'utilisateur");
$affichage_div = false;
return new RedirectResponse($chemin);
//return $this->renderer->render('@auth/password', compact('affichage_div'));
} else {
$this->flashService->error('Aucun utilisateur ne correspond à cet email');
}
/* } catch (NoRecordException $e) {
//$errors = ['email' => 'Aucun utilisateur ne correspond à cet email'];
$this->flashService->error('Aucun utilisateur ne correspond à cet email');
}*/
} else {
$errors = $validator->getErrors();
}
$affichage_div = true;
$email = $params['email'];
return $this->renderer->render('@auth/password', compact('email','errors','affichage_div'));
}
}