Files
wyczarujprezent.pl/modules/jxsearch/classes/JxSearchProvider.php
2024-10-28 22:14:22 +01:00

111 lines
3.9 KiB
PHP

<?php
/**
* 2017-2019 Zemez
*
* JX Search
*
* NOTICE OF LICENSE
*
* This source file is subject to the General Public License (GPL 2.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/GPL-2.0
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade the module to newer
* versions in the future.
*
* @author Zemez (Alexander Grosul)
* @copyright 2017-2019 Zemez
* @license http://opensource.org/licenses/GPL-2.0 General Public License (GPL 2.0)
*/
use PrestaShop\PrestaShop\Core\Product\Search\ProductSearchProviderInterface;
use PrestaShop\PrestaShop\Core\Product\Search\ProductSearchContext;
use PrestaShop\PrestaShop\Core\Product\Search\ProductSearchQuery;
use PrestaShop\PrestaShop\Core\Product\Search\ProductSearchResult;
use PrestaShop\PrestaShop\Core\Product\Search\SortOrderFactory;
use PrestaShop\PrestaShop\Core\Product\Search\SortOrder;
use Symfony\Component\Translation\TranslatorInterface;
class JxSearchProvider implements ProductSearchProviderInterface
{
private $translator;
private $sortOrderFactory;
public function __construct(
TranslatorInterface $translator
) {
$this->translator = $translator;
$this->sortOrderFactory = new SortOrderFactory($this->translator);
}
private function getProductsOrCount(
ProductSearchContext $context,
ProductSearchQuery $query,
$type = 'products'
) {
$jxsearchclass = new JxSearchSearch();
$category_id = Tools::getValue('search_categories');
if (($q = Tools::getValue('search_query')) && !is_array($q)) {
$q = Tools::replaceAccentedChars(urldecode($q));
$search = $jxsearchclass->jxfind(
$context->getIdLang(),
$q,
$category_id,
$query->getPage(),
$query->getResultsPerPage(),
$query->getSortOrder()->toLegacyOrderBy(),
$query->getSortOrder()->toLegacyOrderWay()
);
if ($type == 'products') {
return $search['result'];
} else {
return $search['total'];
}
}
return false;
}
public function runQuery(
ProductSearchContext $context,
ProductSearchQuery $query
) {
if (!$products = $this->getProductsOrCount($context, $query, 'products')) {
$products = array();
}
$count = $this->getProductsOrCount($context, $query, 'count');
$result = new ProductSearchResult();
$result
->setProducts($products)
->setTotalProductsCount($count);
$result->setAvailableSortOrders(
array(
(new SortOrder('product', 'date_add', 'desc'))->setLabel(
$this->translator->trans('Date added, newest to oldest', array(), 'Shop.Theme.Catalog')
),
(new SortOrder('product', 'date_add', 'asc'))->setLabel(
$this->translator->trans('Date added, oldest to newest', array(), 'Shop.Theme.Catalog')
),
(new SortOrder('product', 'name', 'asc'))->setLabel(
$this->translator->trans('Name, A to Z', array(), 'Shop.Theme.Catalog')
),
(new SortOrder('product', 'name', 'desc'))->setLabel(
$this->translator->trans('Name, Z to A', array(), 'Shop.Theme.Catalog')
),
(new SortOrder('product', 'price', 'asc'))->setLabel(
$this->translator->trans('Price, low to high', array(), 'Shop.Theme.Catalog')
),
(new SortOrder('product', 'price', 'desc'))->setLabel(
$this->translator->trans('Price, high to low', array(), 'Shop.Theme.Catalog')
),
)
);
return $result;
}
}