<?php
/**
* @copyright 2020 Crehler Sp. z o. o. <https://crehler.com>
*
* @author Jakub MedyĆski <jme@crehler.com>
* @support Crehler <support@crehler.com>
* @created 13 maj 2020
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Crehler\ShoppingList\Storefront\Page\ShoppingList;
use Crehler\ShoppingList\CrehlerShoppingList;
use Shopware\Core\Checkout\Customer\CustomerEntity;
use Shopware\Core\System\SalesChannel\SalesChannelContext;
use Shopware\Storefront\Page\GenericPageLoader;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Contracts\Translation\TranslatorInterface;
class ShoppingListPageLoader
{
private GenericPageLoader $genericLoader;
private ShoppingListLoader $shoppingListLoader;
private TranslatorInterface $translator;
public function __construct(
GenericPageLoader $genericLoader,
ShoppingListLoader $shoppingListLoader,
TranslatorInterface $translator
) {
$this->genericLoader = $genericLoader;
$this->shoppingListLoader = $shoppingListLoader;
$this->translator = $translator;
}
public function load(Request $request, SalesChannelContext $salesChannelContext): ShoppingListingPage
{
$page = $this->genericLoader->load($request, $salesChannelContext);
$page = ShoppingListingPage::createFrom($page);
$customer = $salesChannelContext->getCustomer();
$customerId = $customer instanceof CustomerEntity ? $customer->getId() : null;
$token = $request->cookies->get(CrehlerShoppingList::SHOPPING_LIST_COOKIE_TOKEN_NAME);
$sort = $request->get('o', 'date-desc');
$p = $request->get('p', 1);
$filter = [
'order' => $sort,
'page' => $p
];
$result = $this->shoppingListLoader->load($customerId, $token, $filter, $salesChannelContext);
$result = ShoppingListingResult::createFrom($result);
// sorting
$result->setAvailableSortings($this->getSoring());
$result->setSorting($sort);
//pagination
$result->setPage($p);
$result->setLimit(ShoppingListLoader::LIMIT);
$page->setShoppingListsSearchResult($result);
// TODO: Change metainformation
// dd($page->getMetaInformation());
return $page;
}
public function loadDetail(string $listId, Request $request, SalesChannelContext $salesChannelContext): ?ShoppingListDetailPage
{
$page = $this->genericLoader->load($request, $salesChannelContext);
$page = ShoppingListDetailPage::createFrom($page);
$shoppingList = $this->shoppingListLoader->loadDetail($listId, $salesChannelContext);
if (null === $shoppingList) {
return null;
}
$page->setShoppingList($shoppingList);
// TODO: Change metainformation
// dd($page->getMetaInformation());
return $page;
}
private function getSoring(): array
{
return [
[
'key' => 'name-asc',
'label' => $this->trans('shoppingList.sorting.a-z')
],
[
'key' => 'date-desc',
'label' => $this->trans('shoppingList.sorting.date-desc')
],
[
'key' => 'date-asc',
'label' => $this->trans('shoppingList.sorting.date-asc')
],
[
'key' => 'price-desc',
'label' => $this->trans('shoppingList.sorting.price-desc')
],
[
'key' => 'price-asc',
'label' => $this->trans('shoppingList.sorting.price-asc')
],
];
}
private function trans(string $snippet, array $parameters = []): string
{
return $this->translator
->trans($snippet, $parameters);
}
}