<?php
namespace App\Controller;
use App\DTO\AppDTO;
use App\Service\Auth\Auth;
use App\Model\Cart as ModelCart;
use App\Model\Prod as ModelProd;
use App\Repository\OrderRepository;
use App\Model\Wishlist as ModelWishlist;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\RequestStack;
class WishlistController extends AbstractASController
{
public function __construct(
private AppDTO $app,
private ModelWishlist $Wishlist,
private ModelProd $ModelProd,
private ModelCart $ModelCart,
private OrderRepository $Orders,
private Auth $Auth,
RequestStack $requestStack,
)
{
$this->requestStack = $requestStack;
}
#[Route(path: '/wishlist', name: 'wishlist_no_locale', priority: 100, defaults: ['_locale' => '%app.default_lang%'])]
#[Route(path: '/{_locale}/wishlist', name: 'wishlist', priority: 100, requirements: ['_locale' => '%app.langs%'])]
public function index(Request $request): Response
{
/** @var \App\Entity\User $user */
$user = $this->getUser();
$wishlist = $this->Wishlist->getProds($user->getId());
return $this->render('wishlist/index.html.twig', [
'wishlist' => $wishlist,
'ocount' => $this->_ocount(),
'cart_items' => $this->ModelCart->getCart(),
]);
}
#[Route(path: '/wishlist/add/{prod}', name: 'wishlist_add_no_locale', priority: 100, defaults: ['_locale' => '%app.default_lang%'])]
#[Route(path: '/{_locale}/wishlist/add/{prod}', name: 'wishlist_add', priority: 100, requirements: ['_locale' => '%app.langs%'])]
public function add(int $prod = 0): Response
{
/** @var \App\Entity\User $user */
$user = $this->getUser();
$this->Wishlist->addProd($user->getId(), $prod);
return $this->redirectToRoute('wishlist');
}
#[Route('/wishlist/delete/{id}', name: 'wishlist_delete_no_locale', priority: 100, defaults: ['_locale' => '%app.default_lang%'])]
#[Route('/{_locale}/wishlist/delete/{id}', name: 'wishlist_delete', priority: 100, requirements: ['_locale' => '%app.langs%'])]
public function delete(int $id = 0): Response
{
$this->Wishlist->removeWish($id);
return $this->redirectToRoute('wishlist');
}
private function _ocount(): array
{
/** @var \App\Entity\Order[] $orders */
$orders = $this->Orders->findBy(['user' => $this->Auth->getUserId()]);
//Order->getall(array("where" => "user = '".Db::nq(Auth::getUserId())."'", "order" => "tstamp desc"));
$ocount = array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
foreach ($orders as $order) {
$ocount[$order->getStatus()]++;
}
return $ocount;
}
}