示例#1
0
 /**
  * Add inventory condition to search in-stock products
  *
  * @param \Doctrine\ORM\QueryBuilder $queryBuilder Query builder to prepare
  *
  * @return void
  */
 protected function prepareCndInventoryIn(\Doctrine\ORM\QueryBuilder $queryBuilder)
 {
     $queryBuilder->linkLeft('p.variants', 'pv');
     $orCnd = new \Doctrine\ORM\Query\Expr\Orx();
     $orCnd->add('i.enabled = :disabled');
     $orCnd->add('i.amount > :zero');
     $orCnd->add('pv.amount > :zero');
     $queryBuilder->andWhere($orCnd)->setParameter('disabled', false)->setParameter('zero', 0);
 }
示例#2
0
 /**
  * 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)
 {
     list($sort, $order) = $this->getSortOrderValue($value);
     if ('r.bought' == $sort) {
         if (!$countOnly) {
             $queryBuilder->linkLeft('p.order_items')->linkLeft('order_items.order')->linkLeft('order.paymentStatus')->andWhere('(paymentStatus.id IS NULL OR ' . $queryBuilder->expr()->in('paymentStatus.code', \XLite\Model\Order\Status\Payment::getPaidStatuses()) . ')')->addSelect('sum(order_items.amount) as product_amount')->addOrderBy('product_amount', $order);
         }
         $value = array('translations.name', $order);
     }
     parent::prepareCndOrderBy($queryBuilder, $value, $countOnly);
 }
示例#3
0
 /**
  * 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);
         if ('r.rating' == $sort) {
             $queryBuilder->linkLeft('p.reviews', 'r');
             $queryBuilder->addSelect('SUM(r.rating) as rsm');
             $sort = 'rsm';
             $queryBuilder->addOrderBy($sort, $order);
         } else {
             parent::prepareCndOrderBy($queryBuilder, $value, $countOnly);
         }
     }
 }
示例#4
0
 /**
  * Prepare fields for fullname value (for 'order by')
  *
  * @param \Doctrine\ORM\QueryBuilder $queryBuilder Query builder object
  * @param string                     $fieldName    Field name
  *
  * @return void
  */
 protected function prepareOrderByAddressField(\Doctrine\ORM\QueryBuilder $queryBuilder, $fieldName)
 {
     $addressFieldName = 'address_field_value_' . $fieldName;
     $addressField = \XLite\Core\Database::getRepo('XLite\\Model\\AddressField')->findOneBy(array('serviceName' => $fieldName));
     $queryBuilder->linkLeft('addresses.addressFields', $addressFieldName, \Doctrine\ORM\Query\Expr\Join::WITH, $addressFieldName . '.addressField = :' . $fieldName)->setParameter($fieldName, $addressField);
 }
示例#5
0
 /**
  * Adds additional condition to the query for checking if product has available membership
  *
  * @param \Doctrine\ORM\QueryBuilder $queryBuilder Query builder object
  * @param string                     $alias        Entity alias OPTIONAL
  *
  * @return void
  */
 protected function addMembershipCondition(\Doctrine\ORM\QueryBuilder $queryBuilder, $alias = null)
 {
     if (!\XLite::isAdminZone()) {
         $alias = $alias ?: $queryBuilder->getRootAlias();
         $membership = \XLite\Core\Auth::getInstance()->getMembershipId();
         $queryBuilder->linkLeft($alias . '.memberships', 'membership');
         if ($membership) {
             $queryBuilder->andWhere('membership.membership_id = :membershipId OR membership.membership_id IS NULL')->setParameter('membershipId', \XLite\Core\Auth::getInstance()->getMembershipId());
         } else {
             $queryBuilder->andWhere('membership.membership_id IS NULL');
         }
     }
 }
示例#6
0
 /**
  * Prepare certain search condition
  *
  * @param \Doctrine\ORM\QueryBuilder $queryBuilder Query builder to prepare
  * @param array|string               $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 prepareCndZone(\Doctrine\ORM\QueryBuilder $queryBuilder, $value, $countOnly)
 {
     $values = array_values($value);
     if (isset($values[0]) && $values[0] == self::SEARCH_ZONE_CUSTOMER && \XLite\Core\Config::getInstance()->XC->Reviews->disablePendingReviews == true) {
         $statusCondition = 'r.status = ' . \XLite\Module\XC\Reviews\Model\Review::STATUS_APPROVED;
         if ($values[1] instanceof \XLite\Model\Profile) {
             $queryBuilder->linkLeft('r.profile', 'u');
             $queryBuilder->andWhere($statusCondition . ' OR u.profile_id = :profileId')->setParameter('profileId', $values[1]->getProfileId());
         } else {
             $reviewIds = \XLite\Core\Session::getInstance()->reviewIds;
             if (is_array($reviewIds) && !empty($reviewIds)) {
                 $queryBuilder->andWhere($statusCondition . ' OR r.id IN (' . implode(', ', $reviewIds) . ')');
             } else {
                 $queryBuilder->andWhere($statusCondition);
             }
         }
     }
 }
示例#7
0
 /**
  * prepareCndUserType
  *
  * @param \Doctrine\ORM\QueryBuilder $queryBuilder QueryBuilder instance
  * @param mixed                      $value        Searchable value
  *
  * @return void
  */
 protected function prepareCndUserType(\Doctrine\ORM\QueryBuilder $queryBuilder, $value)
 {
     $roles = array();
     if (!is_array($value)) {
         $value = array($value);
     }
     $condition = $queryBuilder->expr()->orX();
     foreach ($value as $selectedType) {
         if (is_numeric($selectedType)) {
             $roles[] = $selectedType;
         } elseif ('C' == $selectedType) {
             $condition->add($queryBuilder->expr()->andX($queryBuilder->getRegisteredCondition(), $queryBuilder->getCustomerCondition()));
             $queryBuilder->setParameter('anonymous', true)->setParameter('adminAccessLevel', \XLite\Core\Auth::getInstance()->getAdminAccessLevel());
         } elseif ('N' == $selectedType) {
             $condition->add($queryBuilder->expr()->andX($queryBuilder->getAnonymousCondition(), $queryBuilder->getCustomerCondition()));
             $queryBuilder->setParameter('anonymous', true)->setParameter('adminAccessLevel', \XLite\Core\Auth::getInstance()->getAdminAccessLevel());
         }
     }
     if ($roles) {
         $condition->add($queryBuilder->expr()->andX($queryBuilder->getRegisteredCondition(), $queryBuilder->getAdminCondition(), $queryBuilder->getRolesCondition($roles)));
         $queryBuilder->linkLeft('p.roles')->setParameter('anonymous', true)->setParameter('adminAccessLevel', \XLite\Core\Auth::getInstance()->getAdminAccessLevel());
     }
     if ($condition->count()) {
         $queryBuilder->andWhere($condition);
     }
 }