/** * Prepare certain search condition * * @param \Doctrine\ORM\QueryBuilder $queryBuilder Query builder to prepare * @param array $value Condition data * @param boolean $countOnly "Count only" flag. Do not need to add "order by" * clauses if only count is needed. * * @return void */ protected function prepareCndOrderBy(\Doctrine\ORM\QueryBuilder $queryBuilder, array $value, $countOnly) { if (!$countOnly) { list($sort, $order) = $this->getSortOrderValue($value); // FIXME - add aliases for sort modes if ('i.amount' === $sort) { $queryBuilder->innerJoinInventory(); } elseif ('p.price' == $sort && !\XLite::isAdminZone()) { $this->assignCalculatedField($queryBuilder, 'price'); $sort = 'calculatedPrice'; } elseif ('translations.name' == $sort && !$countOnly) { $this->addSortByTranslation($queryBuilder, $sort, $order); $sort = 'calculatedName'; } $queryBuilder->addOrderBy($sort, $order); } }
/** * Prepare certain search condition * * @param \Doctrine\ORM\QueryBuilder $queryBuilder Query builder to prepare * @param string $value Condition data * * @return void */ protected function prepareCndInStock(\Doctrine\ORM\QueryBuilder $queryBuilder, $value) { if ($value) { $queryBuilder->innerJoinInventory()->andWhere('i.amount > :zero OR i.enabled = 0')->setParameter('zero', 0)->andWhere('p.arrivalDate < :now')->setParameter('now', \XLite\Core\Converter::getDayEnd(\XLite\Base\SuperClass::getUserTime())); } }