<?php
use App\Application\Service\Taxonomy\TaxonomyBreadcrumbService;
use App\Application\Service\Taxonomy\TaxonomyService;
use App\Application\Service\Taxonomy\TaxonomyTreeService;
use App\Entity\System\Tag;
use App\ViewManager\Landing\ViewService;
use Twig\Environment;
use Twig\Error\LoaderError;
use Twig\Error\RuntimeError;
use Twig\Error\SyntaxError;
use function Sentry\captureException;
class manufacturerController extends Controller
{
/** @var TaxonomyTreeService */
private $taxonomyTreeService;
/** @var TaxonomyService */
private $taxonomyService;
/** @var ViewService */
private $viewService;
/** @var TaxonomyBreadcrumbService */
private $taxonomyBreadcrumbService;
/** @var Environment */
private $twig;
public function __construct()
{
$this->taxonomyTreeService = Tools::getSfService(TaxonomyTreeService::class);
$this->taxonomyService = Tools::getSfService(TaxonomyService::class);
$this->viewService = Tools::getSfService(ViewService::class);
$this->taxonomyBreadcrumbService = Tools::getSfService(TaxonomyBreadcrumbService::class);
$this->twig = Tools::getSfService('twig');
parent::__construct();
}
/**
* @deprecated moved to new architecture
*
* @param $manufacturerId
* @return void
* @throws \Psr\Cache\InvalidArgumentException
* @throws LoaderError
* @throws RuntimeError
* @throws SyntaxError
*/
public function view($manufacturerId): void
{
if (!Tools::getSfParameter('is_staging')) {
captureException(new \Exception('Using legacy brand controller'));
}
$this->setUrl('manufacturer');
if (!$manufacturerId) {
return;
}
$manufacturer = new Manufacturer($manufacturerId);
$language = \Session::get('lang');
$languageId = (int)Session::get('id_lang');
$isoCode = \Language::getIsoById($languageId);
$this->setMetaTitle($manufacturer->meta_title[Session::get('id_lang')]." | BigBuy");
$categoryChilds = [];
$breadCrumb = $this->taxonomyBreadcrumbService->getLegacyBreadCrumb(null, $languageId);
$allTaxonomiesForLanguageID = $this->taxonomyService->getAllCachedTaxonomiesForLanguage(
Session::get('id_lang')
);
$categoryTree = $this->taxonomyTreeService->getLegacyTree($allTaxonomiesForLanguageID, $language, []);
$sections = $breadCrumb;
$hasChilds = !empty($categoryChilds);
$numReferences = 0;
$viewFilters = $this->viewService->getFiltersByElasticSearchResults(
$manufacturerId,
$this->model,
ViewService::VIEW_TYPE_BRAND
);
$hrefLink = Tools::getSfService(\App\Application\Service\Helper\LinkGenerator::class)->getManufacturerLink();
$url = \parse_url($hrefLink);
$method = \ltrim($url['path'], '/');
$paginatorData = $this->viewService->getPaginatorDataEncoded($hrefLink, $method, $viewFilters);
$href = Tools::getSfService(\App\Application\Service\Helper\LinkGenerator::class)->getManufacturerLink();
$jsParameters = $this->viewService->getParameters(
ViewService::VIEW_JS_TYPE_BRAND,
$manufacturerId,
$viewFilters,
$href
);
$codeJs = Tools::createCategoryFilters($jsParameters);
$this->addJs(
$this->viewService->addJs($paginatorData, $codeJs, $manufacturerId, ViewService::VIEW_JS_TYPE_BRAND)
);
$categoryProducts = $viewFilters->getCategoryProducts();
if ($viewFilters->getAjax()) {
$this->setDisplayFooter(false);
$this->setDisplayHeadAndHeader(false);
$this->setJsonArgs($this->viewService->setJsonArguments($viewFilters));
$this->setJsonResponse(true);
if (empty($categoryProducts)) {
$viewVars['_partials0'] = 'not_display';
} else {
$viewVars['_partials0'] = $categoryProducts;
}
$this->setView('ajax-product-list', $viewVars);
} else {
$viewVars = $this->viewService->generateViewVars
(
$sections,
$categoryTree,
$manufacturer->name,
$manufacturer->description[Session::get('id_lang')] ?? null,
$manufacturerId,
$categoryChilds,
$hasChilds,
$numReferences,
true,
$viewFilters,
null
);
$viewVars['_layout2']['id_manufacturer'] = $manufacturerId;
if (Tools::isMobile()) {
$viewVars['redirect'] = BASE_URL.'manufacturer/filterMobile/'.$manufacturerId;
$viewVars['_partials0'][0]['name'] = $manufacturer->name;
}
$viewVars['domain'] = 'messages';
$viewVars['languageIsoCode'] = $isoCode;
$viewVars['tag_data'] = [
'blackfriday_id' => Tag::BLACK_FRIDAY_TAG_ID,
'blackfriday_text' => Tag::TAG_BLACK_FRIDAY_TEXT,
'hotdeals_id' => Tag::HOTDEAL_TAG_ID,
'hotdeals_text' => Tag::TAG_HOTDEALS_TEXT,
];
$viewVars['rendered_twig_template'] = $this->twig->render($this->viewService->getTwigName(), $viewVars);
$this->setView('taxonomyList', $viewVars);
}
}
/**
* @param int $id
* @return void
* @throws LoaderError
* @throws RuntimeError
* @throws SyntaxError
*/
public function filterMobile(int $id): void
{
$languageId = (int)Session::get('id_lang');
$isoCode = \Language::getIsoById($languageId);
Session::set('id_model', $id);
$viewFilters = $this->viewService->getFiltersByElasticSearchResults(
$id,
$this->model,
ViewService::VIEW_TYPE_BRAND
);
$linkRewrite = Tools::getSfService(\App\Application\Service\Helper\LinkGenerator::class)->getManufacturerLink(
$id
);
$href = BASE_URL.'manufacturer/ajax_show_products/'.$id;
$jsParameters = $this->viewService->getParametersToFilterMobile($id, $viewFilters, $linkRewrite, $href);
$codeJs = Tools::createCategoryFilters($jsParameters);
$this->addJs($this->viewService->addFilterMobileJs($codeJs));
$viewVars = $this->viewService->generateVarsMobileFilter($viewFilters);
$this->headerClass = 'fullContent';
$viewVars['redirect'] = $linkRewrite;
$viewVars['domain'] = 'messages';
$viewVars['languageIsoCode'] = $isoCode;
$viewVars['rendered_twig_template'] = $this->twig->render(
'front/shop_b2b/mobile/filter_mobile.html.twig',
$viewVars
);
$this->setView('filterMobile', $viewVars);
}
public function ajax_show_products()
{
$init = Tools::getValue('init');
$limit = Tools::getValue('limit');
$filters = Tools::getValue('filters', []);
$entityId = Tools::getValue('idEntity', []);
$type = Tools::getValue('type');
$isMobile = Tools::getValue('mobile');
if (empty($filters['brands'])) {
$filters['brands'] = [Tools::getValue('args')];
}
Session::set('filters', $filters);
$results = Tools::getResultsElasticSearch(
Session::get('lang'),
$init,
$limit,
$this->ajax,
$filters,
Session::get('is_wholesaler')
);
$numberProducts = $results['total_results'];
$resultProds = $results['result'];
if ($numberProducts === false) {
$numberProducts = 0;
}
$nextInit = $init + $limit;
$nextCallNum = $limit;
if ($numberProducts - $nextInit < $limit) {
$nextCallNum = $numberProducts - $nextInit;
}
$show = true;
if ($numberProducts <= $nextInit) {
$show = false;
}
$this->setDisplayFooter(false);
$this->setDisplayHeadAndHeader(false);
$numProductsPaginator = ($numberProducts > tools::MAX_LIST_PRODUCTS) ? tools::MAX_LIST_PRODUCTS : $numberProducts;
if ($isMobile) {
$this->setJsonArgs(['num_products' => $numberProducts]);
$this->setJsonResponse(true);
} else {
$this->setJsonArgs([
'init' => $nextInit,
'show' => $show,
'next_call_num' => $nextCallNum,
'num_products' => $numberProducts,
'num_products_paginator' => $numProductsPaginator,
'ga_productlist' => [],
]);
$this->setJsonResponse(true);
if (empty($resultProds)) {
$resultProds = 'not_display';
}
if ($type === 1) {
$vars = [
'_partials0' => $resultProds,
];
$this->setView('ajax-product-list', $vars);
} else {
$vars = [
'_layout0' => [
'_partials0' => $resultProds,
],
];
$this->setView('ajax-product-list-sliders', $vars, 'ajax-product-list-full');
}
}
}
}