/home/sharedstore/public_html/prestashop.sharedstore.ma/src/Core/Grid/Query
NameSizeModeActions
Filter/-0755rm
Monitoring/-0755rm
Security/-0755rm
AbstractDoctrineQueryBuilder.php20450644editdlrm
AddressQueryBuilder.php56020644editdlrm
AttachmentQueryBuilder.php55730644editdlrm
AttributeGroupQueryBuilder.php67560644editdlrm
AttributeQueryBuilder.php65640644editdlrm
AuthorizedApplicationQueryBuilder.php43150644editdlrm
CarrierQueryBuilder.php55430644editdlrm
CartRuleQueryBuilder.php54830644editdlrm
CatalogPriceRuleQueryBuilder.php80390644editdlrm
CategoryQueryBuilder.php81580644editdlrm
CmsPageCategoryQueryBuilder.php68810644editdlrm
CmsPageQueryBuilder.php63670644editdlrm
ContactQueryBuilder.php44800644editdlrm
CountryQueryBuilder.php57100644editdlrm
CreditSlipQueryBuilder.php50880644editdlrm
CurrencyQueryBuilder.php51990644editdlrm
CustomerAddressQueryBuilder.php57250644editdlrm
CustomerQueryBuilder.php92850644editdlrm
CustomerThreadQueryBuilder.php78100644editdlrm
DoctrineQueryBuilderInterface.php18780644editdlrm
DoctrineQueryParser.php33430644editdlrm
DoctrineSearchCriteriaApplicator.php23120644editdlrm
DoctrineSearchCriteriaApplicatorInterface.php19830644editdlrm
EmailLogsQueryBuilder.php39700644editdlrm
EmployeeQueryBuilder.php60920644editdlrm
LanguageQueryBuilder.php40420644editdlrm
LogQueryBuilder.php74230644editdlrm
ManufacturerAddressQueryBuilder.php52220644editdlrm
ManufacturerQueryBuilder.php50110644editdlrm
MerchandiseReturnQueryBuilder.php61170644editdlrm
MetaQueryBuilder.php46630644editdlrm
OrderMessageQueryBuilder.php45600644editdlrm
OrderQueryBuilder.php98170644editdlrm
OrderReturnStatesQueryBuilder.php56320644editdlrm
OrderStatesQueryBuilder.php59290644editdlrm
OutstandingQueryBuilder.php73400644editdlrm
ProductCombinationQueryBuilder.php92360644editdlrm
ProductLightQueryBuilder.php31770644editdlrm
ProductQueryBuilder.php143490644editdlrm
ProductShopsQueryBuilder.php36730644editdlrm
ProfileQueryBuilder.php39330644editdlrm
QueryParserInterface.php14330644editdlrm
RequestSqlQueryBuilder.php35380644editdlrm
SearchEngineQueryBuilder.php45610644editdlrm
StateQueryBuilder.php52580644editdlrm
SupplierQueryBuilder.php73710644editdlrm
TaxQueryBuilder.php45350644editdlrm
TaxRulesGroupQueryBuilder.php48510644editdlrm
TitleQueryBuilder.php44400644editdlrm
WebserviceKeyQueryBuilder.php51430644editdlrm
ZoneQueryBuilder.php44680644editdlrm
Edit: /home/sharedstore/public_html/prestashop.sharedstore.ma/src/Core/Grid/Query/CmsPageQueryBuilder.php (6367B)
* @copyright Since 2007 PrestaShop SA and Contributors * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) */ namespace PrestaShop\PrestaShop\Core\Grid\Query; use Doctrine\DBAL\Connection; use PrestaShop\PrestaShop\Core\Grid\Search\SearchCriteriaInterface; /** * Class responsible for providing sql which is needed to render cms page list. */ final class CmsPageQueryBuilder extends AbstractDoctrineQueryBuilder { /** * @var DoctrineSearchCriteriaApplicatorInterface */ private $searchCriteriaApplicator; /** * @var array */ private $contextShopIds; /** * @var int */ private $contextIdLang; /** * @param Connection $connection * @param string $dbPrefix * @param DoctrineSearchCriteriaApplicatorInterface $searchCriteriaApplicator * @param array $contextShopIds * @param int $contextIdLang */ public function __construct( Connection $connection, $dbPrefix, DoctrineSearchCriteriaApplicatorInterface $searchCriteriaApplicator, array $contextShopIds, $contextIdLang ) { parent::__construct($connection, $dbPrefix); $this->searchCriteriaApplicator = $searchCriteriaApplicator; $this->contextShopIds = $contextShopIds; $this->contextIdLang = $contextIdLang; } /** * {@inheritdoc} */ public function getSearchQueryBuilder(SearchCriteriaInterface $searchCriteria) { $qb = $this->getQueryBuilder($searchCriteria->getFilters()); $qb ->select('c.`id_cms`, cl.`link_rewrite`, c.`active`, c.`position`, cl.`meta_title`, cl.`head_seo_title`') ->addSelect('c.`id_cms_category`') ->groupBy('c.`id_cms`') ; $this->searchCriteriaApplicator ->applyPagination($searchCriteria, $qb) ->applySorting($searchCriteria, $qb) ; return $qb; } /** * {@inheritdoc} */ public function getCountQueryBuilder(SearchCriteriaInterface $searchCriteria) { $qb = $this->getQueryBuilder($searchCriteria->getFilters()) ->select('COUNT(DISTINCT c.`id_cms`)') ; return $qb; } /** * Gets query builder with the common sql for cms page listing. * * @param array $filters * * @return \Doctrine\DBAL\Query\QueryBuilder */ private function getQueryBuilder(array $filters) { $availableFilters = [ 'id_cms_category_parent', 'id_cms', 'link_rewrite', 'meta_title', 'head_seo_title', 'position', 'active', ]; $qb = $this->connection ->createQueryBuilder() ->from($this->dbPrefix . 'cms', 'c') ->leftJoin( 'c', $this->dbPrefix . 'cms_lang', 'cl', 'cl.`id_cms` = c.`id_cms`' ) ->innerJoin( 'c', $this->dbPrefix . 'cms_shop', 'cs', 'cs.`id_cms` = c.`id_cms`' ) ; $qb->andWhere('cl.`id_lang` = :contextLangId'); $qb->andWhere('cl.`id_shop` IN (:contextShopIds)'); $qb->andWhere('cs.`id_shop` IN (:contextShopIds)'); $qb->setParameter('contextLangId', $this->contextIdLang); $qb->setParameter('contextShopIds', $this->contextShopIds, Connection::PARAM_INT_ARRAY); foreach ($filters as $filterName => $value) { if (!in_array($filterName, $availableFilters, true)) { continue; } if ('id_cms_category_parent' === $filterName) { $qb->andWhere('c.`id_cms_category` = :id_cms_category_parent'); $qb->setParameter('id_cms_category_parent', $value); continue; } if (in_array($filterName, ['id_cms', 'active'], true)) { $qb->andWhere('c.`' . $filterName . '` = :' . $filterName); $qb->setParameter($filterName, $value); continue; } if ('position' === $filterName) { $modifiedPositionFilter = $this->getModifiedPositionFilter($value); $qb->andWhere('c.`' . $filterName . '` = :' . $filterName); $qb->setParameter($filterName, $modifiedPositionFilter); continue; } $qb->andWhere('cl.`' . $filterName . '` LIKE :' . $filterName); $qb->setParameter($filterName, '%' . $value . '%'); } return $qb; } /** * Gets modified position filter value. This is required due to in database position filter index starts from 0 and * for the customer which wants to filter results the value starts from 1 instead. * * @param string|int $positionFilterValue * * @return int|null - if null is returned then no results are found since position field does not hold null values */ private function getModifiedPositionFilter($positionFilterValue) { if (!is_numeric($positionFilterValue)) { return null; } $reducedByOneFilterValue = $positionFilterValue - 1; if (0 > $reducedByOneFilterValue) { return null; } return $reducedByOneFilterValue; } }