253 lines
7.5 KiB
PHP
253 lines
7.5 KiB
PHP
<?php
|
|
|
|
namespace KupShop\WatchdogBundle\Controller;
|
|
|
|
use KupShop\ContentBundle\Util\Captcha;
|
|
use KupShop\ContentBundle\View\Exception\ValidationException;
|
|
use KupShop\KupShopBundle\Routing\SimpleTranslatedRoute;
|
|
use KupShop\KupShopBundle\Routing\TranslatedRoute;
|
|
use KupShop\KupShopBundle\Util\Mail\EmailCheck;
|
|
use KupShop\KupShopBundle\Views\Traits\MessagesTrait;
|
|
use KupShop\WatchdogBundle\Util\Watchdog;
|
|
use KupShop\WatchdogBundle\View\WatchdogView;
|
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
|
use Symfony\Component\HttpFoundation\JsonResponse;
|
|
use Symfony\Component\HttpFoundation\RedirectResponse;
|
|
use Symfony\Component\HttpFoundation\Request;
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
|
|
|
class WatchdogController extends AbstractController
|
|
{
|
|
use MessagesTrait;
|
|
|
|
private Watchdog $watchdog;
|
|
private EmailCheck $emailCheck;
|
|
|
|
public function __construct(Watchdog $watchdog, EmailCheck $emailCheck)
|
|
{
|
|
$this->watchdog = $watchdog;
|
|
$this->emailCheck = $emailCheck;
|
|
}
|
|
|
|
/**
|
|
* @SimpleTranslatedRoute("watchdog-list")
|
|
*/
|
|
public function watchdogAction(Request $request, WatchdogView $view): Response
|
|
{
|
|
$view->setFilterData($request->get('dynamic_filter', []));
|
|
|
|
return $view->getResponse($request);
|
|
}
|
|
|
|
/**
|
|
* @TranslatedRoute("/#watchdog-list#/pridat/")
|
|
*/
|
|
public function addAction(Request $request): Response
|
|
{
|
|
return $this->getResponse($request, 'add');
|
|
}
|
|
|
|
/**
|
|
* @TranslatedRoute("/#watchdog-list#/odebrat/")
|
|
*/
|
|
public function removeAction(Request $request): Response
|
|
{
|
|
return $this->getResponse($request, 'remove');
|
|
}
|
|
|
|
/**
|
|
* @TranslatedRoute("/#watchdog-list#/odebrat-podle-uzivatele/")
|
|
*/
|
|
public function userRemoveAction(Request $request): Response
|
|
{
|
|
$userId = $request->get('id_user');
|
|
$productId = $request->get('id_product');
|
|
$variationId = $request->get('id_variation');
|
|
$hash = $request->get('hash');
|
|
|
|
if (empty($userId) || $hash != $this->watchdog->getWatchdogHash($userId, $productId, $variationId)) {
|
|
throw new NotFoundHttpException();
|
|
}
|
|
|
|
$this->watchdog->dropWatchdog($userId, $productId, $variationId);
|
|
|
|
if (isAjax()) {
|
|
return new JsonResponse([
|
|
'success' => true,
|
|
'error' => null,
|
|
]);
|
|
}
|
|
|
|
$this->addSuccessMessage(translate('watchdogUserRemoveSuccess', 'watchdog'));
|
|
|
|
return new RedirectResponse(
|
|
path('kupshop_content_usermessage_usermessage')
|
|
);
|
|
}
|
|
|
|
private function getResponse(Request $request, $type): Response
|
|
{
|
|
$email = $request->get('email');
|
|
|
|
if ($response = $this->doCheck($request, $email)) {
|
|
return $response;
|
|
}
|
|
|
|
$user = \User::getCurrentUser();
|
|
// if user is not logged
|
|
if (!$user) {
|
|
$fields = ['figure' => 'N'];
|
|
$get_news = $request->get('news');
|
|
if ($get_news) {
|
|
$fields['get_news'] = $get_news;
|
|
}
|
|
$userId = addUserEmail($email, ['Hlídací pes'], $fields);
|
|
} else {
|
|
$userId = $user->id;
|
|
}
|
|
|
|
$productId = $this->getProductId($request);
|
|
$variationId = $this->getVariationId($request);
|
|
$price = $this->getPrice($request);
|
|
$availability = $this->getAvailability($request);
|
|
|
|
if ($productId) {
|
|
switch ($type) {
|
|
case 'add':
|
|
$this->watchdog->addWatchdog((int) $userId, $productId, $variationId, $availability, $price);
|
|
break;
|
|
case 'remove':
|
|
// If no parameter is set, remove both - used when removing watchdog from product page
|
|
if ($request->get('price') === null && $request->get('availability') === null) {
|
|
$availability = true;
|
|
$price = true;
|
|
}
|
|
$this->watchdog->dropWatchdog((int) $userId, $productId, $variationId, $availability, (bool) $price);
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (isAjax()) {
|
|
return new JsonResponse(
|
|
[
|
|
'success' => true,
|
|
'error' => null,
|
|
]
|
|
);
|
|
}
|
|
|
|
return new RedirectResponse($this->getNextUrl($request));
|
|
}
|
|
|
|
private function getPrice(Request $request): ?float
|
|
{
|
|
if ($price = $request->get('price')) {
|
|
$price = (float) $price;
|
|
if ($price > 0) {
|
|
return $price;
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
private function getAvailability(Request $request): bool
|
|
{
|
|
$availability = (int) $request->get('availability', 1);
|
|
if ($availability === 0) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
private function getProductId(Request $request): ?int
|
|
{
|
|
if (!($productId = $request->get('id_product'))) {
|
|
// backward compatibility
|
|
if (!($productId = $request->get('IDp'))) {
|
|
if (!($productId = $request->get('id'))) {
|
|
return null;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (int) $productId;
|
|
}
|
|
|
|
private function getVariationId(Request $request): ?int
|
|
{
|
|
if (!($variationId = $request->get('id_variation'))) {
|
|
// backward compatibility
|
|
if (!($variationId = $request->get('IDv'))) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
return (int) $variationId;
|
|
}
|
|
|
|
private function doCheck(Request $request, $email): ?Response
|
|
{
|
|
if (!findModule(\Modules::WATCHDOG)) {
|
|
throw new NotFoundHttpException('Module not found');
|
|
}
|
|
|
|
if (!\User::getCurrentUser()) {
|
|
if (empty($email)) {
|
|
return new RedirectResponse(
|
|
createScriptURL(
|
|
[
|
|
'URL' => 'launch.php',
|
|
's' => 'login',
|
|
'msg' => '1',
|
|
'url' => urlencode($GLOBALS['ctrl']['currUrl']['Abs']),
|
|
'ESCAPE' => 'NO',
|
|
]
|
|
)
|
|
);
|
|
}
|
|
|
|
if (!$this->emailCheck->isEmailDomainValid($email)) {
|
|
if (isAjax()) {
|
|
return new JsonResponse([
|
|
'success' => false,
|
|
'error' => translate('invalidEmail', 'watchdog'),
|
|
]);
|
|
}
|
|
|
|
$this->addErrorMessage(translate('invalidEmail', 'watchdog'));
|
|
|
|
return new RedirectResponse($this->getNextUrl($request));
|
|
}
|
|
|
|
try {
|
|
Captcha::checkCaptcha(null, 'shared');
|
|
} catch (ValidationException $e) {
|
|
if (isAjax()) {
|
|
return new JsonResponse([
|
|
'success' => false,
|
|
'error' => $e->getMessage(),
|
|
]);
|
|
}
|
|
|
|
$this->addErrorMessage($e->getMessage());
|
|
|
|
return new RedirectResponse($this->getNextUrl($request));
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
private function getNextUrl(Request $request)
|
|
{
|
|
if ($next = $request->query->get('NEXT')) {
|
|
return $next;
|
|
}
|
|
|
|
return $request->headers->get('referer', '/');
|
|
}
|
|
}
|