Ejemplo n.º 1
0
    public function modifyElementsQuery(DbCommand $query, ElementCriteriaModel $criteria)
    {
        $query->addSelect('
				neoblocks.fieldId,
				neoblocks.ownerId,
				neoblocks.ownerLocale,
				neoblocks.typeId,
				neoblocks.collapsed
			')->join('neoblocks neoblocks', 'neoblocks.id = elements.id')->leftJoin('neoblockstructures neoblockstructures', ['and', 'neoblockstructures.ownerId = neoblocks.ownerId', 'neoblockstructures.fieldId = neoblocks.fieldId', ['or', 'neoblockstructures.ownerLocale = neoblocks.ownerLocale', ['and', 'neoblockstructures.ownerLocale is null', 'neoblocks.ownerLocale is null']]])->leftJoin('structureelements structureelements', ['and', 'structureelements.structureId = neoblockstructures.structureId', 'structureelements.elementId = neoblocks.id']);
        if ($criteria->fieldId) {
            $query->andWhere(DbHelper::parseParam('neoblocks.fieldId', $criteria->fieldId, $query->params));
        }
        if ($criteria->ownerId) {
            $query->andWhere(DbHelper::parseParam('neoblocks.ownerId', $criteria->ownerId, $query->params));
        }
        if ($criteria->ownerLocale) {
            $query->andWhere(DbHelper::parseParam('neoblocks.ownerLocale', $criteria->ownerLocale, $query->params));
        }
        if ($criteria->typeId) {
            $query->andWhere(DbHelper::parseParam('neoblocks.typeId', $criteria->typeId, $query->params));
        } else {
            if ($criteria->type) {
                $query->join('neoblocktypes neoblocktypes', 'neoblocktypes.id = neoblocks.typeId');
                $query->andWhere(DbHelper::parseParam('neoblocktypes.handle', $criteria->type, $query->params));
            }
        }
    }
 public function modifyElementsQuery(DbCommand $query, ElementCriteriaModel $criteria)
 {
     $query->addSelect('formbuilder_entries.formId, formbuilder_entries.title, formbuilder_entries.data')->join('formbuilder_entries formbuilder_entries', 'formbuilder_entries.id = elements.id');
     if ($criteria->formId) {
         $query->andWhere(DbHelper::parseParam('formbuilder_entries.formId', $criteria->formId, $query->params));
     }
 }
 /**
  * @inheritDoc IElementType::modifyElementsQuery()
  *
  * @param DbCommand $query
  * @param ElementCriteriaModel $criteria
  *
  * @return mixed
  */
 public function modifyElementsQuery(DbCommand $query, ElementCriteriaModel $criteria)
 {
     $query->addSelect('globalsets.name, globalsets.handle, globalsets.fieldLayoutId')->join('globalsets globalsets', 'globalsets.id = elements.id');
     if ($criteria->handle) {
         $query->andWhere(DbHelper::parseParam('globalsets.handle', $criteria->handle, $query->params));
     }
 }
 public function modifyElementsQuery(DbCommand $query, ElementCriteriaModel $criteria)
 {
     $query->addSelect('submissions.formId')->join('formerly_submissions submissions', 'submissions.id = elements.id');
     if ($criteria->formId) {
         $query->andWhere(DbHelper::parseParam('submissions.formId', $criteria->formId, $query->params));
     }
     if ($criteria->form) {
         $query->join('formerly_forms forms', 'forms.id = submissions.formId');
         $query->andWhere(DbHelper::parseParam('formerly_forms.handle', $criteria->form, $query->params));
     }
 }
 public function modifyElementsQuery(DbCommand $query, ElementCriteriaModel $criteria)
 {
     $query->addSelect('supertableblocks.fieldId, supertableblocks.ownerId, supertableblocks.ownerLocale, supertableblocks.typeId, supertableblocks.sortOrder')->join('supertableblocks supertableblocks', 'supertableblocks.id = elements.id');
     if ($criteria->fieldId) {
         $query->andWhere(DbHelper::parseParam('supertableblocks.fieldId', $criteria->fieldId, $query->params));
     }
     if ($criteria->ownerId) {
         $query->andWhere(DbHelper::parseParam('supertableblocks.ownerId', $criteria->ownerId, $query->params));
     }
     if ($criteria->ownerLocale) {
         $query->andWhere(DbHelper::parseParam('supertableblocks.ownerLocale', $criteria->ownerLocale, $query->params));
     }
     if ($criteria->type) {
         $query->join('supertableblocktypes supertableblocktypes', 'supertableblocktypes.id = supertableblocks.typeId');
         $query->andWhere(DbHelper::parseParam('supertableblocktypes.handle', $criteria->type, $query->params));
     }
 }
Ejemplo n.º 6
0
 /**
  * Applies WHERE conditions to a DbCommand query for folders.
  *
  * @param DbCommand           $query
  * @param FolderCriteriaModel $criteria
  *
  * @return null
  */
 private function _applyFolderConditions($query, FolderCriteriaModel $criteria)
 {
     $whereConditions = array();
     $whereParams = array();
     if ($criteria->id) {
         $whereConditions[] = DbHelper::parseParam('f.id', $criteria->id, $whereParams);
     }
     if ($criteria->sourceId) {
         $whereConditions[] = DbHelper::parseParam('f.sourceId', $criteria->sourceId, $whereParams);
     }
     if ($criteria->parentId) {
         $whereConditions[] = DbHelper::parseParam('f.parentId', $criteria->parentId, $whereParams);
     }
     if ($criteria->name) {
         $whereConditions[] = DbHelper::parseParam('f.name', $criteria->name, $whereParams);
     }
     if (!is_null($criteria->path)) {
         // This folder has a comma in it.
         if (strpos($criteria->path, ',') !== false) {
             // Escape the comma.
             $condition = DbHelper::parseParam('f.path', str_replace(',', '\\,', $criteria->path), $whereParams);
             $lastKey = key(array_slice($whereParams, -1, 1, true));
             // Now un-escape it.
             $whereParams[$lastKey] = str_replace('\\,', ',', $whereParams[$lastKey]);
         } else {
             $condition = DbHelper::parseParam('f.path', $criteria->path, $whereParams);
         }
         $whereConditions[] = $condition;
     }
     if (count($whereConditions) == 1) {
         $query->where($whereConditions[0], $whereParams);
     } else {
         array_unshift($whereConditions, 'and');
         $query->where($whereConditions, $whereParams);
     }
 }
Ejemplo n.º 7
0
 /**
  * @inheritDoc IElementType::modifyElementsQuery()
  *
  * @param DbCommand            $query
  * @param ElementCriteriaModel $criteria
  *
  * @return mixed
  */
 public function modifyElementsQuery(DbCommand $query, ElementCriteriaModel $criteria)
 {
     $query->addSelect('assetfiles.sourceId, assetfiles.folderId, assetfiles.filename, assetfiles.kind, assetfiles.width, assetfiles.height, assetfiles.size, assetfiles.dateModified')->join('assetfiles assetfiles', 'assetfiles.id = elements.id');
     if ($criteria->sourceId) {
         $query->andWhere(DbHelper::parseParam('assetfiles.sourceId', $criteria->sourceId, $query->params));
     }
     if ($criteria->folderId) {
         $query->andWhere(DbHelper::parseParam('assetfiles.folderId', $criteria->folderId, $query->params));
     }
     if ($criteria->filename) {
         $query->andWhere(DbHelper::parseParam('assetfiles.filename', $criteria->filename, $query->params));
     }
     if ($criteria->kind) {
         if (is_array($criteria->kind)) {
             $query->andWhere(DbHelper::parseParam('assetfiles.kind', array_merge(array('or'), $criteria->kind), $query->params));
         } else {
             $query->andWhere(DbHelper::parseParam('assetfiles.kind', $criteria->kind, $query->params));
         }
     }
     if ($criteria->width) {
         $query->andWhere(DbHelper::parseParam('assetfiles.width', $criteria->width, $query->params));
     }
     if ($criteria->height) {
         $query->andWhere(DbHelper::parseParam('assetfiles.height', $criteria->height, $query->params));
     }
     if ($criteria->size) {
         $query->andWhere(DbHelper::parseParam('assetfiles.size', $criteria->size, $query->params));
     }
 }
 /**
  * Modifies an element query targeting elements of this type.
  *
  * @param DbCommand $query
  * @param ElementCriteriaModel $criteria
  * @return mixed
  */
 public function modifyElementsQuery(DbCommand $query, ElementCriteriaModel $criteria)
 {
     // you must add the columns here when adding a new field
     $query->addSelect('applications.formId, applications.firstName,
         applications.lastName, applications.email, applications.status,
         applications.phone, applications.dateCreated,')->join('applications applications', 'applications.id = elements.id');
     if ($criteria->formId) {
         $query->andWhere(DbHelper::parseParam('applications.formId', $criteria->formId, $query->params));
     }
     if ($criteria->form) {
         $query->join('applications_forms applications_forms', 'applications_forms.id = applications.formId');
         $query->andWhere(DbHelper::parseParam('applications_forms.handle', $criteria->form, $query->params));
     }
     if ($criteria->dateCreated) {
         $query->andWhere(DbHelper::parseDateParam('entries.dateCreated', $criteria->dateCreated, $query->params));
     }
 }
Ejemplo n.º 9
0
 /**
  * Modifies an element query targeting elements of this type.
  *
  * @param DbCommand $query
  * @param ElementCriteriaModel $criteria
  * @return mixed
  */
 public function modifyElementsQuery(DbCommand $query, ElementCriteriaModel $criteria)
 {
     $query->addSelect('events.calendarId, events.startDate, events.endDate')->join('events events', 'events.id = elements.id');
     if ($criteria->calendarId) {
         $query->andWhere(DbHelper::parseParam('events.calendarId', $criteria->calendarId, $query->params));
     }
     if ($criteria->calendar) {
         $query->join('events_calendars events_calendars', 'events_calendars.id = events.calendarId');
         $query->andWhere(DbHelper::parseParam('events_calendars.handle', $criteria->calendar, $query->params));
     }
     if ($criteria->startDate) {
         $query->andWhere(DbHelper::parseDateParam('events.startDate', $criteria->startDate, $query->params));
     }
     if ($criteria->endDate) {
         $query->andWhere(DbHelper::parseDateParam('events.endDate', $criteria->endDate, $query->params));
     }
 }
Ejemplo n.º 10
0
 /**
  * @inheritDoc IFieldType::modifyElementsQuery()
  *
  * @param DbCommand $query
  * @param mixed     $value
  *
  * @return null|false
  */
 public function modifyElementsQuery(DbCommand $query, $value)
 {
     if ($value !== null) {
         if ($this->defineContentAttribute()) {
             $handle = $this->model->handle;
             $query->andWhere(DbHelper::parseParam('content.' . craft()->content->fieldColumnPrefix . $handle, $value, $query->params));
         } else {
             return false;
         }
     }
 }
Ejemplo n.º 11
0
 /**
  * @param $groupIds
  *
  * @return array
  */
 private function _getUserIdsByGroupIds($groupIds)
 {
     $query = craft()->db->createCommand()->select('userId')->from('usergroups_users');
     $query->where(DbHelper::parseParam('groupId', $groupIds, $query->params));
     return $query->queryColumn();
 }
Ejemplo n.º 12
0
 /**
  * Preps a {@link DbCommand} object for querying for elements, based on a given element criteria.
  *
  * @param ElementCriteriaModel &$criteria     The element criteria model
  * @param string               &$contentTable The content table that should be joined in. (This variable will
  *                                            actually get defined by buildElementsQuery(), and is passed by
  *                                            reference so whatever’s calling the method will have access to its
  *                                            value.)
  * @param array                &$fieldColumns Info about the content field columns being selected. (This variable
  *                                            will actually get defined by buildElementsQuery(), and is passed by
  *                                            reference so whatever’s calling the method will have access to its
  *                                            value.)
  *
  * @return DbCommand|false The DbCommand object, or `false` if the method was able to determine ahead of time that
  *                         there’s no chance any elements are going to be found with the given parameters.
  */
 public function buildElementsQuery(&$criteria = null, &$contentTable = null, &$fieldColumns = null)
 {
     if (!$criteria instanceof ElementCriteriaModel) {
         $criteria = $this->getCriteria('Entry', $criteria);
     }
     $elementType = $criteria->getElementType();
     if (!$elementType->isLocalized()) {
         // The criteria *must* be set to the primary locale
         $criteria->locale = craft()->i18n->getPrimarySiteLocaleId();
     } else {
         if (!$criteria->locale) {
             // Default to the current app locale
             $criteria->locale = craft()->language;
         }
     }
     // Set up the query
     // ---------------------------------------------------------------------
     $query = craft()->db->createCommand()->select('elements.id, elements.type, elements.enabled, elements.archived, elements.dateCreated, elements.dateUpdated, elements_i18n.slug, elements_i18n.uri, elements_i18n.enabled AS localeEnabled')->from('elements elements')->join('elements_i18n elements_i18n', 'elements_i18n.elementId = elements.id')->where('elements_i18n.locale = :locale', array(':locale' => $criteria->locale))->group('elements.id');
     if ($elementType->hasContent()) {
         $contentTable = $elementType->getContentTableForElementsQuery($criteria);
         if ($contentTable) {
             $contentCols = 'content.id AS contentId';
             if ($elementType->hasTitles()) {
                 $contentCols .= ', content.title';
             }
             // TODO: Replace this with a call to getFieldsForElementsQuery() in 3.0
             $fieldColumns = $elementType->getContentFieldColumnsForElementsQuery($criteria);
             foreach ($fieldColumns as $column) {
                 $contentCols .= ', content.' . $column['column'];
             }
             $query->addSelect($contentCols);
             $query->join($contentTable . ' content', 'content.elementId = elements.id');
             $query->andWhere('content.locale = :locale');
         }
     }
     // Basic element params
     // ---------------------------------------------------------------------
     // If the 'id' parameter is set to any empty value besides `null`, don't return anything
     if ($criteria->id !== null && empty($criteria->id)) {
         return false;
     }
     if ($criteria->id) {
         $query->andWhere(DbHelper::parseParam('elements.id', $criteria->id, $query->params));
     }
     if ($criteria->archived) {
         $query->andWhere('elements.archived = 1');
     } else {
         $query->andWhere('elements.archived = 0');
         if ($criteria->status) {
             $statusConditions = array();
             $statuses = ArrayHelper::stringToArray($criteria->status);
             foreach ($statuses as $status) {
                 $status = StringHelper::toLowerCase($status);
                 // Is this a supported status?
                 if (in_array($status, array_keys($elementType->getStatuses()))) {
                     if ($status == BaseElementModel::ENABLED) {
                         $statusConditions[] = 'elements.enabled = 1';
                     } else {
                         if ($status == BaseElementModel::DISABLED) {
                             $statusConditions[] = 'elements.enabled = 0';
                         } else {
                             $elementStatusCondition = $elementType->getElementQueryStatusCondition($query, $status);
                             if ($elementStatusCondition) {
                                 $statusConditions[] = $elementStatusCondition;
                             } else {
                                 if ($elementStatusCondition === false) {
                                     return false;
                                 }
                             }
                         }
                     }
                 }
             }
             if ($statusConditions) {
                 if (count($statusConditions) == 1) {
                     $statusCondition = $statusConditions[0];
                 } else {
                     array_unshift($statusConditions, 'or');
                     $statusCondition = $statusConditions;
                 }
                 $query->andWhere($statusCondition);
             }
         }
     }
     if ($criteria->dateCreated) {
         $query->andWhere(DbHelper::parseDateParam('elements.dateCreated', $criteria->dateCreated, $query->params));
     }
     if ($criteria->dateUpdated) {
         $query->andWhere(DbHelper::parseDateParam('elements.dateUpdated', $criteria->dateUpdated, $query->params));
     }
     if ($elementType->hasTitles() && $criteria->title) {
         $query->andWhere(DbHelper::parseParam('content.title', $criteria->title, $query->params));
     }
     // i18n params
     // ---------------------------------------------------------------------
     if ($criteria->slug) {
         $query->andWhere(DbHelper::parseParam('elements_i18n.slug', $criteria->slug, $query->params));
     }
     if ($criteria->uri) {
         $query->andWhere(DbHelper::parseParam('elements_i18n.uri', $criteria->uri, $query->params));
     }
     if ($criteria->localeEnabled) {
         $query->andWhere('elements_i18n.enabled = 1');
     }
     // Relational params
     // ---------------------------------------------------------------------
     // Convert the old childOf and parentOf params to the relatedTo param
     // childOf(element)  => relatedTo({ source: element })
     // parentOf(element) => relatedTo({ target: element })
     if (!$criteria->relatedTo && ($criteria->childOf || $criteria->parentOf)) {
         $relatedTo = array('and');
         if ($criteria->childOf) {
             $relatedTo[] = array('sourceElement' => $criteria->childOf, 'field' => $criteria->childField);
         }
         if ($criteria->parentOf) {
             $relatedTo[] = array('targetElement' => $criteria->parentOf, 'field' => $criteria->parentField);
         }
         $criteria->relatedTo = $relatedTo;
     }
     if ($criteria->relatedTo) {
         $relationParamParser = new ElementRelationParamParser();
         $relConditions = $relationParamParser->parseRelationParam($criteria->relatedTo, $query);
         if ($relConditions === false) {
             return false;
         }
         $query->andWhere($relConditions);
         // If there's only one relation criteria and it's specifically for grabbing target elements, allow the query
         // to order by the relation sort order
         if ($relationParamParser->isRelationFieldQuery()) {
             $query->addSelect('sources1.sortOrder');
         }
     }
     // Give field types a chance to make changes
     // ---------------------------------------------------------------------
     if ($elementType->hasContent() && $contentTable) {
         $contentService = craft()->content;
         $originalFieldColumnPrefix = $contentService->fieldColumnPrefix;
         // TODO: $fields should already be defined by now in Craft 3.0
         $fields = $elementType->getFieldsForElementsQuery($criteria);
         $extraCriteriaAttributes = $criteria->getExtraAttributeNames();
         foreach ($fields as $field) {
             $fieldType = $field->getFieldType();
             if ($fieldType) {
                 // Was this field's parameter set on the criteria model?
                 if (in_array($field->handle, $extraCriteriaAttributes)) {
                     $fieldCriteria = $criteria->{$field->handle};
                 } else {
                     $fieldCriteria = null;
                 }
                 // Set the field's column prefix on ContentService
                 if ($field->columnPrefix) {
                     $contentService->fieldColumnPrefix = $field->columnPrefix;
                 }
                 $fieldTypeResponse = $fieldType->modifyElementsQuery($query, $fieldCriteria);
                 // Set it back
                 $contentService->fieldColumnPrefix = $originalFieldColumnPrefix;
                 // Need to bail early?
                 if ($fieldTypeResponse === false) {
                     return false;
                 }
             }
         }
     }
     // Give the element type a chance to make changes
     // ---------------------------------------------------------------------
     if ($elementType->modifyElementsQuery($query, $criteria) === false) {
         return false;
     }
     // Structure params
     // ---------------------------------------------------------------------
     if ($query->isJoined('structureelements')) {
         $query->addSelect('structureelements.root, structureelements.lft, structureelements.rgt, structureelements.level');
         if ($criteria->ancestorOf) {
             if (!$criteria->ancestorOf instanceof BaseElementModel) {
                 $criteria->ancestorOf = craft()->elements->getElementById($criteria->ancestorOf, $elementType->getClassHandle(), $criteria->locale);
                 if (!$criteria->ancestorOf) {
                     return false;
                 }
             }
             if ($criteria->ancestorOf) {
                 $query->andWhere(array('and', 'structureelements.lft < :ancestorOf_lft', 'structureelements.rgt > :ancestorOf_rgt', 'structureelements.root = :ancestorOf_root'), array(':ancestorOf_lft' => $criteria->ancestorOf->lft, ':ancestorOf_rgt' => $criteria->ancestorOf->rgt, ':ancestorOf_root' => $criteria->ancestorOf->root));
                 if ($criteria->ancestorDist) {
                     $query->andWhere('structureelements.level >= :ancestorOf_level', array(':ancestorOf_level' => $criteria->ancestorOf->level - $criteria->ancestorDist));
                 }
             }
         }
         if ($criteria->descendantOf) {
             if (!$criteria->descendantOf instanceof BaseElementModel) {
                 $criteria->descendantOf = craft()->elements->getElementById($criteria->descendantOf, $elementType->getClassHandle(), $criteria->locale);
                 if (!$criteria->descendantOf) {
                     return false;
                 }
             }
             if ($criteria->descendantOf) {
                 $query->andWhere(array('and', 'structureelements.lft > :descendantOf_lft', 'structureelements.rgt < :descendantOf_rgt', 'structureelements.root = :descendantOf_root'), array(':descendantOf_lft' => $criteria->descendantOf->lft, ':descendantOf_rgt' => $criteria->descendantOf->rgt, ':descendantOf_root' => $criteria->descendantOf->root));
                 if ($criteria->descendantDist) {
                     $query->andWhere('structureelements.level <= :descendantOf_level', array(':descendantOf_level' => $criteria->descendantOf->level + $criteria->descendantDist));
                 }
             }
         }
         if ($criteria->siblingOf) {
             if (!$criteria->siblingOf instanceof BaseElementModel) {
                 $criteria->siblingOf = craft()->elements->getElementById($criteria->siblingOf, $elementType->getClassHandle(), $criteria->locale);
                 if (!$criteria->siblingOf) {
                     return false;
                 }
             }
             if ($criteria->siblingOf) {
                 $query->andWhere(array('and', 'structureelements.level = :siblingOf_level', 'structureelements.root = :siblingOf_root', 'structureelements.elementId != :siblingOf_elementId'), array(':siblingOf_level' => $criteria->siblingOf->level, ':siblingOf_root' => $criteria->siblingOf->root, ':siblingOf_elementId' => $criteria->siblingOf->id));
                 if ($criteria->siblingOf->level != 1) {
                     $parent = $criteria->siblingOf->getParent();
                     if ($parent) {
                         $query->andWhere(array('and', 'structureelements.lft > :siblingOf_lft', 'structureelements.rgt < :siblingOf_rgt'), array(':siblingOf_lft' => $parent->lft, ':siblingOf_rgt' => $parent->rgt));
                     } else {
                         return false;
                     }
                 }
             }
         }
         if ($criteria->prevSiblingOf) {
             if (!$criteria->prevSiblingOf instanceof BaseElementModel) {
                 $criteria->prevSiblingOf = craft()->elements->getElementById($criteria->prevSiblingOf, $elementType->getClassHandle(), $criteria->locale);
                 if (!$criteria->prevSiblingOf) {
                     return false;
                 }
             }
             if ($criteria->prevSiblingOf) {
                 $query->andWhere(array('and', 'structureelements.level = :prevSiblingOf_level', 'structureelements.rgt = :prevSiblingOf_rgt', 'structureelements.root = :prevSiblingOf_root'), array(':prevSiblingOf_level' => $criteria->prevSiblingOf->level, ':prevSiblingOf_rgt' => $criteria->prevSiblingOf->lft - 1, ':prevSiblingOf_root' => $criteria->prevSiblingOf->root));
             }
         }
         if ($criteria->nextSiblingOf) {
             if (!$criteria->nextSiblingOf instanceof BaseElementModel) {
                 $criteria->nextSiblingOf = craft()->elements->getElementById($criteria->nextSiblingOf, $elementType->getClassHandle(), $criteria->locale);
                 if (!$criteria->nextSiblingOf) {
                     return false;
                 }
             }
             if ($criteria->nextSiblingOf) {
                 $query->andWhere(array('and', 'structureelements.level = :nextSiblingOf_level', 'structureelements.lft = :nextSiblingOf_lft', 'structureelements.root = :nextSiblingOf_root'), array(':nextSiblingOf_level' => $criteria->nextSiblingOf->level, ':nextSiblingOf_lft' => $criteria->nextSiblingOf->rgt + 1, ':nextSiblingOf_root' => $criteria->nextSiblingOf->root));
             }
         }
         if ($criteria->positionedBefore) {
             if (!$criteria->positionedBefore instanceof BaseElementModel) {
                 $criteria->positionedBefore = craft()->elements->getElementById($criteria->positionedBefore, $elementType->getClassHandle(), $criteria->locale);
                 if (!$criteria->positionedBefore) {
                     return false;
                 }
             }
             if ($criteria->positionedBefore) {
                 $query->andWhere(array('and', 'structureelements.rgt < :positionedBefore_rgt', 'structureelements.root = :positionedBefore_root'), array(':positionedBefore_rgt' => $criteria->positionedBefore->lft, ':positionedBefore_root' => $criteria->positionedBefore->root));
             }
         }
         if ($criteria->positionedAfter) {
             if (!$criteria->positionedAfter instanceof BaseElementModel) {
                 $criteria->positionedAfter = craft()->elements->getElementById($criteria->positionedAfter, $elementType->getClassHandle(), $criteria->locale);
                 if (!$criteria->positionedAfter) {
                     return false;
                 }
             }
             if ($criteria->positionedAfter) {
                 $query->andWhere(array('and', 'structureelements.lft > :positionedAfter_lft', 'structureelements.root = :positionedAfter_root'), array(':positionedAfter_lft' => $criteria->positionedAfter->rgt, ':positionedAfter_root' => $criteria->positionedAfter->root));
             }
         }
         if ($criteria->level || $criteria->depth) {
             // TODO: 'depth' is deprecated; use 'level' instead.
             $level = $criteria->level ? $criteria->level : $criteria->depth;
             $query->andWhere(DbHelper::parseParam('structureelements.level', $level, $query->params));
         }
     }
     // Search
     // ---------------------------------------------------------------------
     if ($criteria->search) {
         $elementIds = $this->_getElementIdsFromQuery($query);
         $scoredSearchResults = $criteria->order == 'score';
         $filteredElementIds = craft()->search->filterElementIdsByQuery($elementIds, $criteria->search, $scoredSearchResults);
         // No results?
         if (!$filteredElementIds) {
             return array();
         }
         $query->andWhere(array('in', 'elements.id', $filteredElementIds));
         if ($scoredSearchResults) {
             // Order the elements in the exact order that SearchService returned them in
             $query->order(craft()->db->getSchema()->orderByColumnValues('elements.id', $filteredElementIds));
         }
     }
     return $query;
 }
 /**
  * Modifies an element query targeting elements of this type.
  *
  * @param DbCommand $query
  * @param ElementCriteriaModel $criteria
  * @return mixed
  */
 public function modifyElementsQuery(DbCommand $query, ElementCriteriaModel $criteria)
 {
     $query->addSelect('shortlist_list.default, shortlist_list.userSlug, shortlist_list.public, shortlist_list.type, shortlist_list.ownerId, shortlist_list.ownerType')->join('shortlist_list shortlist_list', 'shortlist_list.id = elements.id');
     if ($criteria->default) {
         $query->andWhere(DbHelper::parseParam('shortlist_list.default', $criteria->default, $query->params));
     }
     if ($criteria->userSlug) {
         $query->andWhere(DbHelper::parseParam('shortlist_list.userSlug', $criteria->userSlug, $query->params));
     }
     if ($criteria->public) {
         $query->andWhere(DbHelper::parseParam('shortlist_list.public', $criteria->public, $query->params));
     }
     if ($criteria->ownerId) {
         $query->andWhere(DbHelper::parseParam('shortlist_list.ownerId', $criteria->ownerId, $query->params));
     }
     if ($criteria->ownerType) {
         $query->andWhere(DbHelper::parseParam('shortlist_list.ownerType', $criteria->ownerType, $query->params));
     }
 }
 /**
  * @inheritDoc IElementType::modifyElementsQuery()
  *
  * @param DbCommand            $query
  * @param ElementCriteriaModel $criteria
  *
  * @return mixed
  */
 public function modifyElementsQuery(DbCommand $query, ElementCriteriaModel $criteria)
 {
     $query->addSelect('assetfiles.sourceId, assetfiles.folderId, assetfiles.filename, assetfiles.kind, assetfiles.width, assetfiles.height, assetfiles.size, assetfiles.dateModified')->join('assetfiles assetfiles', 'assetfiles.id = elements.id');
     if (!empty($criteria->source)) {
         $query->join('assetsources assetsources', 'assetfiles.sourceId = assetsources.id');
     }
     if ($criteria->sourceId) {
         $query->andWhere(DbHelper::parseParam('assetfiles.sourceId', $criteria->sourceId, $query->params));
     }
     if ($criteria->source) {
         $query->andWhere(DbHelper::parseParam('assetsources.handle', $criteria->source, $query->params));
     }
     if ($criteria->folderId) {
         if ($criteria->includeSubfolders) {
             $folders = craft()->assets->getAllDescendantFolders(craft()->assets->getFolderById($criteria->folderId));
             $query->andWhere(DbHelper::parseParam('assetfiles.folderId', array_keys($folders), $query->params));
         } else {
             $query->andWhere(DbHelper::parseParam('assetfiles.folderId', $criteria->folderId, $query->params));
         }
     }
     if ($criteria->filename) {
         $query->andWhere(DbHelper::parseParam('assetfiles.filename', $criteria->filename, $query->params));
     }
     if ($criteria->kind) {
         if (is_array($criteria->kind)) {
             $query->andWhere(DbHelper::parseParam('assetfiles.kind', array_merge(array('or'), $criteria->kind), $query->params));
         } else {
             $query->andWhere(DbHelper::parseParam('assetfiles.kind', $criteria->kind, $query->params));
         }
     }
     if ($criteria->width) {
         $query->andWhere(DbHelper::parseParam('assetfiles.width', $criteria->width, $query->params));
     }
     if ($criteria->height) {
         $query->andWhere(DbHelper::parseParam('assetfiles.height', $criteria->height, $query->params));
     }
     if ($criteria->size) {
         $query->andWhere(DbHelper::parseParam('assetfiles.size', $criteria->size, $query->params));
     }
 }
 /**
  * Parses a part of a relatedTo criteria param and returns the condition or 'false' if there's an issue.
  *
  * @param mixed     $relCriteria
  * @param DbCommand $query
  *
  * @return mixed
  */
 private function _subparseRelationParam($relCriteria, DbCommand $query)
 {
     if (!is_array($relCriteria)) {
         $relCriteria = array('element' => $relCriteria);
     }
     // Get the element IDs, wherever they are
     $relElementIds = array();
     $glue = 'or';
     foreach (array('element', 'sourceElement', 'targetElement') as $elementParam) {
         if (isset($relCriteria[$elementParam])) {
             $elements = ArrayHelper::stringToArray($relCriteria[$elementParam]);
             if (isset($elements[0]) && ($elements[0] == 'and' || $elements[0] == 'or')) {
                 $glue = array_shift($elements);
             }
             foreach ($elements as $element) {
                 if (is_numeric($element)) {
                     $relElementIds[] = $element;
                 } else {
                     if ($element instanceof BaseElementModel) {
                         $relElementIds[] = $element->id;
                     } else {
                         if ($element instanceof ElementCriteriaModel) {
                             $relElementIds = array_merge($relElementIds, $element->ids());
                         }
                     }
                 }
             }
             break;
         }
     }
     if (!$relElementIds) {
         return false;
     }
     // Going both ways?
     if (isset($relCriteria['element'])) {
         if (!isset($relCriteria['field'])) {
             $relCriteria['field'] = null;
         }
         array_unshift($relElementIds, $glue);
         return $this->parseRelationParam(array('or', array('sourceElement' => $relElementIds, 'field' => $relCriteria['field']), array('targetElement' => $relElementIds, 'field' => $relCriteria['field'])), $query);
     } else {
         if ($glue == 'and') {
             // Srpead it across multiple relation sub-params
             $newRelatedToParam = array('and');
             foreach ($relElementIds as $elementId) {
                 $newRelatedToParam[] = array($elementParam => array($elementId));
             }
             return $this->parseRelationParam($newRelatedToParam, $query);
         }
     }
     $conditions = array();
     $normalFieldIds = array();
     if (!empty($relCriteria['field'])) {
         // Loop through all of the fields in this rel criteria, create the Matrix-specific conditions right away
         // and save the normal field IDs for later
         $fields = ArrayHelper::stringToArray($relCriteria['field']);
         foreach ($fields as $field) {
             $fieldModel = null;
             if (is_numeric($field)) {
                 $fieldHandleParts = null;
                 $fieldModel = craft()->fields->getFieldById($field);
             } else {
                 $fieldHandleParts = explode('.', $field);
                 $fieldModel = craft()->fields->getFieldByHandle($fieldHandleParts[0]);
             }
             if (!$fieldModel) {
                 continue;
             }
             // Is this a Matrix field?
             if ($fieldModel->type == 'Matrix') {
                 $blockTypeFieldIds = array();
                 // Searching by a specific block type field?
                 if (isset($fieldHandleParts[1])) {
                     // There could be more than one block type field with this handle, so we must loop through all
                     // of the block types on this Matrix field
                     $blockTypes = craft()->matrix->getBlockTypesByFieldId($fieldModel->id);
                     foreach ($blockTypes as $blockType) {
                         foreach ($blockType->getFields() as $blockTypeField) {
                             if ($blockTypeField->handle == $fieldHandleParts[1]) {
                                 $blockTypeFieldIds[] = $blockTypeField->id;
                                 break;
                             }
                         }
                     }
                     if (!$blockTypeFieldIds) {
                         continue;
                     }
                 }
                 if (isset($relCriteria['sourceElement'])) {
                     $this->_joinSourcesCount++;
                     $this->_joinTargetMatrixBlocksCount++;
                     $sourcesAlias = 'sources' . $this->_joinSourcesCount;
                     $targetMatrixBlocksAlias = 'target_matrixblocks' . $this->_joinTargetMatrixBlocksCount;
                     $relationsJoinConditions = array('and', $sourcesAlias . '.targetId = elements.id');
                     $relationsJoinParams = array();
                     if (!empty($relCriteria['sourceLocale'])) {
                         $this->_sourceLocaleParamCount++;
                         $sourceLocaleParam = ':sourceLocale' . $this->_sourceLocaleParamCount;
                         $relationsJoinConditions[] = array('or', $sourcesAlias . '.sourceLocale is null', $sourcesAlias . '.sourceLocale = ' . $sourceLocaleParam);
                         $relationsJoinParams[$sourceLocaleParam] = $relCriteria['sourceLocale'];
                     }
                     $query->leftJoin('relations ' . $sourcesAlias, $relationsJoinConditions, $relationsJoinParams);
                     $query->leftJoin('matrixblocks ' . $targetMatrixBlocksAlias, $targetMatrixBlocksAlias . '.id = ' . $sourcesAlias . '.sourceId');
                     $condition = array('and', DbHelper::parseParam($targetMatrixBlocksAlias . '.ownerId', $relElementIds, $query->params), $targetMatrixBlocksAlias . '.fieldId = ' . $fieldModel->id);
                     if ($blockTypeFieldIds) {
                         $condition[] = DbHelper::parseParam($sourcesAlias . '.fieldId', $blockTypeFieldIds, $query->params);
                     }
                 } else {
                     $this->_joinSourceMatrixBlocksCount++;
                     $sourceMatrixBlocksAlias = 'source_matrixblocks' . $this->_joinSourceMatrixBlocksCount;
                     $matrixBlockTargetsAlias = 'matrixblock_targets' . $this->_joinSourceMatrixBlocksCount;
                     $relationsJoinConditions = array('and', $matrixBlockTargetsAlias . '.sourceId = ' . $sourceMatrixBlocksAlias . '.id');
                     $relationsJoinParams = array();
                     if (!empty($relCriteria['sourceLocale'])) {
                         $this->_sourceLocaleParamCount++;
                         $sourceLocaleParam = ':sourceLocale' . $this->_sourceLocaleParamCount;
                         $relationsJoinConditions[] = array('or', $matrixBlockTargetsAlias . '.sourceLocale is null', $matrixBlockTargetsAlias . '.sourceLocale = ' . $sourceLocaleParam);
                         $relationsJoinParams[$sourceLocaleParam] = $relCriteria['sourceLocale'];
                     }
                     $query->leftJoin('matrixblocks ' . $sourceMatrixBlocksAlias, $sourceMatrixBlocksAlias . '.ownerId = elements.id');
                     $query->leftJoin('relations ' . $matrixBlockTargetsAlias, $relationsJoinConditions, $relationsJoinParams);
                     $condition = array('and', DbHelper::parseParam($matrixBlockTargetsAlias . '.targetId', $relElementIds, $query->params), $sourceMatrixBlocksAlias . '.fieldId = ' . $fieldModel->id);
                     if ($blockTypeFieldIds) {
                         $condition[] = DbHelper::parseParam($matrixBlockTargetsAlias . '.fieldId', $blockTypeFieldIds, $query->params);
                     }
                 }
                 $conditions[] = $condition;
             } else {
                 $normalFieldIds[] = $fieldModel->id;
             }
         }
     }
     // If there were no fields, or there are some non-Matrix fields, add the normal relation condition. (Basically,
     // run this code if the rel criteria wasn't exclusively for Matrix.)
     if (empty($relCriteria['field']) || $normalFieldIds) {
         if (isset($relCriteria['sourceElement'])) {
             $this->_joinSourcesCount++;
             $relTableAlias = 'sources' . $this->_joinSourcesCount;
             $relConditionColumn = 'sourceId';
             $relElementColumn = 'targetId';
         } else {
             if (isset($relCriteria['targetElement'])) {
                 $this->_joinTargetsCount++;
                 $relTableAlias = 'targets' . $this->_joinTargetsCount;
                 $relConditionColumn = 'targetId';
                 $relElementColumn = 'sourceId';
             }
         }
         $relationsJoinConditions = array('and', $relTableAlias . '.' . $relElementColumn . ' = elements.id');
         $relationsJoinParams = array();
         if (!empty($relCriteria['sourceLocale'])) {
             $this->_sourceLocaleParamCount++;
             $sourceLocaleParam = ':sourceLocale' . $this->_sourceLocaleParamCount;
             $relationsJoinConditions[] = array('or', $relTableAlias . '.sourceLocale is null', $relTableAlias . '.sourceLocale = ' . $sourceLocaleParam);
             $relationsJoinParams[$sourceLocaleParam] = $relCriteria['sourceLocale'];
         }
         $query->leftJoin('relations ' . $relTableAlias, $relationsJoinConditions, $relationsJoinParams);
         $condition = DbHelper::parseParam($relTableAlias . '.' . $relConditionColumn, $relElementIds, $query->params);
         if ($normalFieldIds) {
             $condition = array('and', $condition, DbHelper::parseParam($relTableAlias . '.fieldId', $normalFieldIds, $query->params));
         }
         $conditions[] = $condition;
     }
     if ($conditions) {
         if (count($conditions) == 1) {
             return $conditions[0];
         } else {
             array_unshift($conditions, 'or');
             return $conditions;
         }
     } else {
         return false;
     }
 }
 /**
  * @inheritDoc IElementType::modifyElementsQuery()
  *
  * @param DbCommand            $query
  * @param ElementCriteriaModel $criteria
  *
  * @return mixed
  */
 public function modifyElementsQuery(DbCommand $query, ElementCriteriaModel $criteria)
 {
     $query->addSelect('categories.groupId')->join('categories categories', 'categories.id = elements.id')->join('categorygroups categorygroups', 'categorygroups.id = categories.groupId')->leftJoin('structures structures', 'structures.id = categorygroups.structureId')->leftJoin('structureelements structureelements', array('and', 'structureelements.structureId = structures.id', 'structureelements.elementId = categories.id'));
     if ($criteria->groupId) {
         $query->andWhere(DbHelper::parseParam('categories.groupId', $criteria->groupId, $query->params));
     }
     if ($criteria->group) {
         $query->andWhere(DbHelper::parseParam('categorygroups.handle', $criteria->group, $query->params));
     }
 }
 /**
  * Modifies an element query targeting elements of this type.
  *
  * @param DbCommand            $query
  * @param ElementCriteriaModel $criteria
  *
  * @return mixed
  */
 public function modifyElementsQuery(DbCommand $query, ElementCriteriaModel $criteria)
 {
     $query->addSelect('pushnotifications_devices.appId, pushnotifications_devices.platform, pushnotifications_devices.token')->join('pushnotifications_devices pushnotifications_devices', 'pushnotifications_devices.id = elements.id');
     if ($criteria->appId) {
         $query->andWhere(DbHelper::parseParam('pushnotifications_devices.appId', $criteria->appId, $query->params));
     }
     if ($criteria->app) {
         $query->join('pushnotifications_apps pushnotifications_apps', 'pushnotifications_apps.id = pushnotifications_devices.appId');
         $query->andWhere(DbHelper::parseParam('pushnotifications_apps.handle', $criteria->app, $query->params));
     }
     if ($criteria->platform) {
         $query->andWhere(DbHelper::parseParam('pushnotifications_devices.platform', $criteria->platform, $query->params));
     }
     if ($criteria->token) {
         $query->andWhere(DbHelper::parseParam('pushnotifications_devices.token', $criteria->token, $query->params));
     }
 }
    /**
     * Modifies an element query targeting elements of this type.
     *
     * @param DbCommand $query
     * @param ElementCriteriaModel $criteria
     * @return mixed
     */
    public function modifyElementsQuery(DbCommand $query, ElementCriteriaModel $criteria)
    {
        $query->addSelect('forms.id,
									 forms.fieldLayoutId,
									 forms.groupId,
									 forms.name,
									 forms.handle,
									 forms.titleFormat,
									 forms.displaySectionTitles,
									 forms.redirectUri,
									 forms.submitAction,
									 forms.submitButtonText,
									 forms.notificationEnabled,
									 forms.notificationRecipients,
									 forms.notificationSubject,
									 forms.notificationSenderName,
									 forms.notificationSenderEmail,
									 forms.notificationReplyToEmail
			')->join('sproutforms_forms forms', 'forms.id = elements.id');
        if ($criteria->totalEntries) {
            $query->addSelect('COUNT(entries.id) totalEntries');
            $query->leftJoin('sproutforms_entries entries', 'entries.formId = forms.id');
        }
        if ($criteria->numberOfFields) {
            $query->addSelect('COUNT(fields.id) numberOfFields');
            $query->leftJoin('fieldlayoutfields fields', 'fields.layoutId = forms.fieldLayoutId');
        }
        if ($criteria->handle) {
            $query->andWhere(DbHelper::parseParam('forms.handle', $criteria->handle, $query->params));
        }
        if ($criteria->groupId) {
            $query->join('sproutforms_formgroups formgroups', 'formgroups.id = forms.groupId');
            $query->andWhere(DbHelper::parseParam('forms.groupId', $criteria->groupId, $query->params));
        }
    }
Ejemplo n.º 19
0
 /**
  * Modifies an entries query targeting entries of this type.
  *
  * @param DbCommand $query
  * @param ElementCriteriaModel $criteria
  * @return mixed
  */
 public function modifyElementsQuery(DbCommand $query, ElementCriteriaModel $criteria)
 {
     $query->addSelect('entries.sectionId, entries.authorId, entries.postDate, entries.expiryDate, entries_i18n.slug')->join('entries entries', 'entries.id = elements.id')->join('entries_i18n entries_i18n', 'entries_i18n.entryId = elements.id')->andWhere('entries_i18n.locale = elements_i18n.locale');
     if ($criteria->slug) {
         $query->andWhere(DbHelper::parseParam('entries_i18n.slug', $criteria->slug, $query->params));
     }
     if ($criteria->postDate) {
         $query->andWhere(DbHelper::parseDateParam('entries.postDate', '=', $criteria->postDate, $query->params));
     } else {
         if ($criteria->after) {
             $query->andWhere(DbHelper::parseDateParam('entries.postDate', '>=', $criteria->after, $query->params));
         }
         if ($criteria->before) {
             $query->andWhere(DbHelper::parseDateParam('entries.postDate', '<', $criteria->before, $query->params));
         }
     }
     if ($criteria->editable) {
         $user = craft()->userSession->getUser();
         if (!$user) {
             return false;
         }
         $editableSectionIds = craft()->sections->getEditableSectionIds();
         $query->andWhere(array('in', 'entries.sectionId', $editableSectionIds));
         $noPeerConditions = array();
         foreach ($editableSectionIds as $sectionId) {
             if (!$user->can('editPeerEntries:' . $sectionId)) {
                 $noPeerConditions[] = array('or', 'entries.sectionId != ' . $sectionId, 'entries.authorId = ' . $user->id);
             }
         }
         if ($noPeerConditions) {
             array_unshift($noPeerConditions, 'and');
             $query->andWhere($noPeerConditions);
         }
     }
     if (Craft::hasPackage(CraftPackage::PublishPro)) {
         if ($criteria->sectionId) {
             $query->andWhere(DbHelper::parseParam('entries.sectionId', $criteria->sectionId, $query->params));
         }
         if ($criteria->section) {
             $query->join('sections sections', 'entries.sectionId = sections.id');
             $query->andWhere(DbHelper::parseParam('sections.handle', $criteria->section, $query->params));
         }
     }
     if (Craft::hasPackage(CraftPackage::Users)) {
         if ($criteria->authorId) {
             $query->andWhere(DbHelper::parseParam('entries.authorId', $criteria->authorId, $query->params));
         }
         if ($criteria->authorGroupId || $criteria->authorGroup) {
             $query->join('usergroups_users usergroups_users', 'usergroups_users.userId = entries.authorId');
             if ($criteria->authorGroupId) {
                 $query->andWhere(DbHelper::parseParam('usergroups_users.groupId', $criteria->authorGroupId, $query->params));
             }
             if ($criteria->authorGroup) {
                 $query->join('usergroups usergroups', 'usergroups.id = usergroups_users.groupId');
                 $query->andWhere(DbHelper::parseParam('usergroups.handle', $criteria->authorGroup, $query->params));
             }
         }
     }
 }
 /**
  * @param DbCommand $query
  * @param ElementCriteriaModel $criteria
  *
  * @return void
  */
 public function modifyElementsQuery(DbCommand $query, ElementCriteriaModel $criteria)
 {
     $query->addSelect('orders.id,
     orders.number,
     orders.couponCode,
     orders.itemTotal,
     orders.baseDiscount,
     orders.baseShippingCost,
     orders.totalPrice,
     orders.totalPaid,
     orders.orderStatusId,
     orders.dateOrdered,
     orders.email,
     orders.dateOrdered,
     orders.datePaid,
     orders.currency,
     orders.lastIp,
     orders.message,
     orders.returnUrl,
     orders.cancelUrl,
     orders.orderStatusId,
     orders.billingAddressId,
     orders.billingAddressData,
     orders.shippingAddressId,
     orders.shippingAddressData,
     orders.shippingMethodId,
     orders.paymentMethodId,
     orders.customerId,
     orders.dateUpdated')->join('market_orders orders', 'orders.id = elements.id');
     if ($criteria->completed) {
         if ($criteria->completed == true) {
             $query->andWhere('orders.dateOrdered is not null');
             $criteria->completed = null;
         }
     }
     if ($criteria->dateOrdered) {
         $query->andWhere(DbHelper::parseParam('orders.dateOrdered', $criteria->dateOrdered, $query->params));
     }
     if ($criteria->number) {
         $query->andWhere(DbHelper::parseParam('orders.number', $criteria->number, $query->params));
     }
     if ($criteria->orderStatus) {
         if ($criteria->orderStatus instanceof Market_OrderStatusModel) {
             $criteria->orderStatusId = $criteria->orderStatus->id;
             $criteria->orderStatus = NULL;
         } else {
             $query->andWhere(DbHelper::parseParam('orders.orderStatusId', $criteria->orderStatus, $query->params));
         }
     }
     if ($criteria->orderStatusId) {
         $query->andWhere(DbHelper::parseParam('orders.orderStatusId', $criteria->orderStatusId, $query->params));
     }
     if ($criteria->customer) {
         if ($criteria->customer instanceof Market_CustomerModel) {
             if ($criteria->customer->id) {
                 $criteria->customerId = $criteria->customer->id;
                 $criteria->customer = null;
             } else {
                 $query->andWhere(DbHelper::parseParam('orders.customerId', 'IS NULL', $query->params));
             }
         }
     }
     if ($criteria->customerId) {
         $query->andWhere(DbHelper::parseParam('orders.customerId', $criteria->customerId, $query->params));
     }
     if ($criteria->updatedOn) {
         $query->andWhere(DbHelper::parseDateParam('orders.dateUpdated', $criteria->updatedOn, $query->params));
     } else {
         if ($criteria->updatedAfter) {
             $query->andWhere(DbHelper::parseDateParam('orders.dateUpdated', '>=' . $criteria->updatedAfter, $query->params));
         }
         if ($criteria->updatedBefore) {
             $query->andWhere(DbHelper::parseDateParam('orders.dateUpdated', '<' . $criteria->updatedBefore, $query->params));
         }
     }
 }
 /**
  * Modifies an element query targeting elements of this type.
  *
  * @param DbCommand $query
  * @param ElementCriteriaModel $criteria
  * @return mixed
  */
 public function modifyElementsQuery(DbCommand $query, ElementCriteriaModel $criteria)
 {
     $query->addSelect('venti.startDate, venti.endDate, venti.allDay, venti.isrepeat, venti.eid, venti.eventid, venti.repeat, venti.rRule, venti.summary, venti.locale, entries.postDate, entries.expiryDate')->leftJoin('venti_events venti', 'venti.eventid = elements.id')->leftJoin('entries entries', 'entries.id = eventid')->group('venti.startDate');
     if ($criteria->locale) {
         $query->andWhere(DbHelper::parseParam('venti.locale', $criteria->locale, $query->params));
     }
     if ($criteria->startDate) {
         $query->andWhere(DbHelper::parseDateParam('venti.startDate', $criteria->startDate, $query->params));
     }
     if ($criteria->id) {
         $query->andWhere(DbHelper::parseParam('venti.eventid', $criteria->eventid, $query->params));
     }
     if ($criteria->eventid) {
         $query->andWhere(DbHelper::parseParam('venti.eventid', $criteria->eventid, $query->params));
     }
     if ($criteria->endDate) {
         $query->andWhere(DbHelper::parseDateParam('venti.endDate', $criteria->endDate, $query->params));
     }
     if ($criteria->summary) {
         $query->andWhere(DbHelper::parseParam('venti.summary', $criteria->summary, $query->params));
     }
     if ($criteria->isrepeat) {
         $query->andWhere(DbHelper::parseParam('venti.isrepeat', $criteria->isrepeat, $query->params));
     }
     if ($criteria->rRule) {
         $query->andWhere(DbHelper::parseParam('venti.rRule', $criteria->rRule, $query->params));
     }
     if ($criteria->eid) {
         $query->andWhere(DbHelper::parseParam('venti.eid', $criteria->eid, $query->params));
     }
     if ($criteria->repeat) {
         $query->andWhere(DbHelper::parseParam('venti.repeat', $criteria->repeat, $query->params));
     }
     if ($criteria->allDay) {
         $query->andWhere(DbHelper::parseDateParam('venti.allDay', $criteria->allDay, $query->params));
     }
     if ($criteria->between) {
         $dates = array();
         $interval = array();
         if (!is_array($criteria->between)) {
             $criteria->between = ArrayHelper::stringToArray($criteria->between);
         }
         if (count($criteria->between) == 2) {
             foreach ($criteria->between as $ref) {
                 if (!$ref instanceof \DateTime) {
                     $dates[] = DateTime::createFromString($ref, craft()->getTimeZone());
                 } else {
                     $dates[] = $ref;
                 }
             }
             if ($dates[0] > $dates[1]) {
                 $interval[0] = $dates[1];
                 $interval[1] = $dates[0];
             } else {
                 $interval = $dates;
             }
             $query->andWhere('(venti.startDate BETWEEN :betweenStartDate AND :betweenEndDate) OR (:betweenStartDate BETWEEN venti.startDate AND venti.endDate)', array(':betweenStartDate' => DateTimeHelper::formatTimeForDb($interval[0]->getTimestamp()), ':betweenEndDate' => DateTimeHelper::formatTimeForDb($interval[1]->getTimestamp())));
         }
     }
 }
    /**
     * Modifies an element query targeting elements of this type.
     *
     * @param DbCommand            $query
     * @param ElementCriteriaModel $criteria
     *
     * @return mixed
     */
    public function modifyElementsQuery(DbCommand $query, ElementCriteriaModel $criteria)
    {
        $query->addSelect('entries.id
				, entries.subjectLine as subjectLine
				, entries.campaignId as campaignId
				, entries.recipients as recipients
				, entries.fromName as fromName
				, entries.fromEmail as fromEmail
				, entries.replyTo as replyTo
				, entries.sent as sent
				, campaigns.type as type')->join('sproutemail_campaigns_entries entries', 'entries.id = elements.id')->join('sproutemail_campaigns campaigns', 'campaigns.id = entries.campaignId');
        if ($criteria->campaignId) {
            $query->andWhere(DbHelper::parseParam('entries.campaignId', $criteria->campaignId, $query->params));
        }
        if ($criteria->campaignHandle) {
            $query->andWhere(DbHelper::parseParam('campaigns.handle', $criteria->campaignHandle, $query->params));
        }
    }
Ejemplo n.º 23
0
 /**
  * Returns a DbCommand instance ready to search for elements based on a given element criteria.
  *
  * @param mixed &$criteria
  * @return DbCommand|false
  */
 public function buildElementsQuery(&$criteria = null)
 {
     if (!$criteria instanceof ElementCriteriaModel) {
         $criteria = $this->getCriteria('Entry', $criteria);
     }
     $elementType = $criteria->getElementType();
     $query = craft()->db->createCommand()->select('elements.id, elements.type, elements.enabled, elements.archived, elements.dateCreated, elements.dateUpdated, elements_i18n.locale, elements_i18n.uri')->from('elements elements');
     if ($elementType->hasTitles() && $criteria) {
         $query->addSelect('content.title');
         $query->join('content content', 'content.elementId = elements.id');
     }
     $query->leftJoin('elements_i18n elements_i18n', 'elements_i18n.elementId = elements.id');
     if ($elementType->isTranslatable()) {
         // Locale conditions
         if (!$criteria->locale) {
             $criteria->locale = craft()->language;
         }
         $localeIds = array_unique(array_merge(array($criteria->locale), craft()->i18n->getSiteLocaleIds()));
         $quotedLocaleColumn = craft()->db->quoteColumnName('elements_i18n.locale');
         if (count($localeIds) == 1) {
             $query->andWhere('elements_i18n.locale = :locale');
             $query->params[':locale'] = $localeIds[0];
         } else {
             $quotedLocales = array();
             $localeOrder = array();
             foreach ($localeIds as $localeId) {
                 $quotedLocale = craft()->db->quoteValue($localeId);
                 $quotedLocales[] = $quotedLocale;
                 $localeOrder[] = "({$quotedLocaleColumn} = {$quotedLocale}) DESC";
             }
             $query->andWhere("{$quotedLocaleColumn} IN (" . implode(', ', $quotedLocales) . ')');
             $query->order($localeOrder);
         }
     }
     // The rest
     if ($criteria->id) {
         $query->andWhere(DbHelper::parseParam('elements.id', $criteria->id, $query->params));
     }
     if ($criteria->uri !== null) {
         $query->andWhere(DbHelper::parseParam('elements_i18n.uri', $criteria->uri, $query->params));
     }
     if ($criteria->archived) {
         $query->andWhere('elements.archived = 1');
     } else {
         $query->andWhere('elements.archived = 0');
         if ($criteria->status) {
             $statusConditions = array();
             $statuses = ArrayHelper::stringToArray($criteria->status);
             foreach ($statuses as $status) {
                 $status = strtolower($status);
                 switch ($status) {
                     case BaseElementModel::ENABLED:
                         $statusConditions[] = 'elements.enabled = 1';
                         break;
                     case BaseElementModel::DISABLED:
                         $statusConditions[] = 'elements.enabled = 0';
                     default:
                         // Maybe the element type supports another status?
                         $elementStatusCondition = $elementType->getElementQueryStatusCondition($query, $status);
                         if ($elementStatusCondition) {
                             $statusConditions[] = $elementStatusCondition;
                         } else {
                             if ($elementStatusCondition === false) {
                                 return false;
                             }
                         }
                 }
             }
             if ($statusConditions) {
                 if (count($statusConditions) == 1) {
                     $statusCondition = $statusConditions[0];
                 } else {
                     array_unshift($statusConditions, 'or');
                     $statusCondition = $statusConditions;
                 }
                 $query->andWhere($statusCondition);
             }
         }
     }
     if ($criteria->dateCreated) {
         $query->andWhere(DbHelper::parseDateParam('elements.dateCreated', '=', $criteria->dateCreated, $query->params));
     }
     if ($criteria->dateUpdated) {
         $query->andWhere(DbHelper::parseDateParam('elements.dateUpdated', '=', $criteria->dateUpdated, $query->params));
     }
     if ($criteria->parentOf) {
         list($childIds, $fieldIds) = $this->_normalizeRelationParams($criteria->parentOf, $criteria->parentField);
         $query->join('relations parents', 'parents.parentId = elements.id');
         $query->andWhere(DbHelper::parseParam('parents.childId', $childIds, $query->params));
         if ($fieldIds) {
             $query->andWhere(DbHelper::parseParam('parents.fieldId', $fieldIds, $query->params));
         }
     }
     if ($criteria->childOf) {
         list($parentIds, $fieldIds) = $this->_normalizeRelationParams($criteria->childOf, $criteria->childField);
         $query->join('relations children', 'children.childId = elements.id');
         $query->andWhere(DbHelper::parseParam('children.parentId', $parentIds, $query->params));
     }
     if ($elementType->modifyElementsQuery($query, $criteria) !== false) {
         return $query;
     } else {
         return false;
     }
 }
 /**
  * Preps a {@link DbCommand} object for querying for elements, based on a given element criteria.
  *
  * @param Venti_CriteriaModel &$criteria     The events criteria model
  *
  * @return DbCommand|false The DbCommand object, or `false` if the method was able to determine ahead of time that
  *                         there’s no chance any elements are going to be found with the given parameters.
  */
 public function buildEventsQuery(Venti_CriteriaModel $criteria)
 {
     $elementType = $criteria->getElementType();
     if (!$elementType->isLocalized()) {
         // The criteria *must* be set to the primary locale
         $criteria->locale = craft()->i18n->getPrimarySiteLocaleId();
     } else {
         if (!$criteria->locale) {
             // Default to the current app locale
             $criteria->locale = craft()->language;
         }
     }
     $query = craft()->db->createCommand()->select('venti.startDate, venti.endDate, venti.allDay, venti.isrepeat, venti.eid, venti.eventid, venti.repeat, venti.rRule, venti.summary, elements.id, elements.type, elements.enabled, elements.archived, elements.dateCreated, elements.dateUpdated, elements_i18n.slug, elements_i18n.uri, elements_i18n.enabled AS localeEnabled')->from('venti_events venti')->join('elements elements', 'elements.id = venti.eventid')->join('elements_i18n elements_i18n', 'elements_i18n.elementId = venti.eventid')->where('elements_i18n.locale = :locale', array(':locale' => $criteria->locale))->limit($criteria->limit)->offset($criteria->offset)->order($criteria->order);
     if ($elementType->hasContent()) {
         $contentTable = 'content';
         if ($contentTable) {
             $contentCols = 'content.id AS contentId';
             if ($elementType->hasTitles()) {
                 $contentCols .= ', content.title';
             }
             $fieldColumns = $this->getContentFieldColumnsForElementsQuery($criteria);
             foreach ($fieldColumns as $column) {
                 $contentCols .= ', content.' . $column['column'];
             }
             $query->addSelect($contentCols);
             $query->join($contentTable . ' content', 'content.elementId = elements.id');
             $query->andWhere('content.locale = :locale');
         }
     }
     if ($elementType->hasTitles() && $criteria->title) {
         $query->andWhere(DbHelper::parseParam('content.title', $criteria->title, $query->params));
     }
     if ($criteria->id) {
         $query->andWhere(DbHelper::parseParam('venti.eventid', $criteria->id, $query->params));
     }
     if ($criteria->eid) {
         $query->andWhere(DbHelper::parseParam('venti.eid', $criteria->eid, $query->params));
     }
     if ($criteria->isrepeat) {
         $query->andWhere(DbHelper::parseParam('venti.isrepeat', $criteria->isrepeat, $query->params));
     }
     if ($criteria->startDate) {
         $query->andWhere(DbHelper::parseDateParam('venti.startDate', $criteria->startDate, $query->params));
     }
     if ($criteria->endDate) {
         $query->andWhere(DbHelper::parseDateParam('venti.endDate', $criteria->endDate, $query->params));
     }
     if ($criteria->summary) {
         $query->andWhere(DbHelper::parseParam('venti.summary', $criteria->summary, $query->params));
     }
     if ($criteria->slug) {
         $query->andWhere(DbHelper::parseParam('elements_i18n.slug', $criteria->slug, $query->params));
     }
     if ($criteria->uri) {
         $query->andWhere(DbHelper::parseParam('elements_i18n.uri', $criteria->uri, $query->params));
     }
     if ($criteria->localeEnabled) {
         $query->andWhere('elements_i18n.enabled = 1');
     }
     if ($criteria->dateCreated) {
         $query->andWhere(DbHelper::parseDateParam('elements.dateCreated', $criteria->dateCreated, $query->params));
     }
     if ($criteria->dateUpdated) {
         $query->andWhere(DbHelper::parseDateParam('elements.dateUpdated', $criteria->dateUpdated, $query->params));
     }
     if ($criteria->archived) {
         $query->andWhere('elements.archived = 1');
     } else {
         $query->andWhere('elements.archived = 0');
         if ($criteria->status) {
             $statusConditions = array();
             $statuses = ArrayHelper::stringToArray($criteria->status);
             foreach ($statuses as $status) {
                 $status = StringHelper::toLowerCase($status);
                 // Is this a supported status?
                 if (in_array($status, array_keys($this->getStatuses()))) {
                     if ($status == BaseElementModel::ENABLED) {
                         $statusConditions[] = 'elements.enabled = 1';
                     } else {
                         if ($status == BaseElementModel::DISABLED) {
                             $statusConditions[] = 'elements.enabled = 0';
                         } else {
                             $elementStatusCondition = $this->getElementQueryStatusCondition($query, $status);
                             if ($elementStatusCondition) {
                                 $statusConditions[] = $elementStatusCondition;
                             } else {
                                 if ($elementStatusCondition === false) {
                                     return false;
                                 }
                             }
                         }
                     }
                 }
             }
             if ($statusConditions) {
                 if (count($statusConditions) == 1) {
                     $statusCondition = $statusConditions[0];
                 } else {
                     array_unshift($statusConditions, 'or');
                     $statusCondition = $statusConditions;
                 }
                 $query->andWhere($statusCondition);
             }
         }
     }
     // Relational params
     // ---------------------------------------------------------------------
     if ($criteria->relatedTo) {
         $relationParamParser = new ElementRelationParamParser();
         $relConditions = $relationParamParser->parseRelationParam($criteria->relatedTo, $query);
         if ($relConditions === false) {
             return false;
         }
         $query->andWhere($relConditions);
         // If there's only one relation criteria and it's specifically for grabbing target elements, allow the query
         // to order by the relation sort order
         if ($relationParamParser->isRelationFieldQuery()) {
             $query->addSelect('sources1.sortOrder');
         }
     }
     // Search
     // ---------------------------------------------------------------------
     if ($criteria->search) {
         $elementIds = $this->_getElementIdsFromQuery($query);
         $scoredSearchResults = $criteria->order == 'score';
         $filteredElementIds = craft()->search->filterElementIdsByQuery($elementIds, $criteria->search, $scoredSearchResults);
         // No results?
         if (!$filteredElementIds) {
             return array();
         }
         $query->andWhere(array('in', 'venti.eventid', $filteredElementIds));
         if ($scoredSearchResults) {
             // Order the elements in the exact order that SearchService returned them in
             $query->order(craft()->db->getSchema()->orderByColumnValues('venti.eventid', $filteredElementIds));
         }
     }
     return $query;
 }
Ejemplo n.º 25
0
 /**
  * Modifies an element query targeting elements of this type.
  *
  * @param DbCommand $query
  * @param ElementCriteriaModel $criteria
  * @return mixed
  */
 public function modifyElementsQuery(DbCommand $query, ElementCriteriaModel $criteria)
 {
     $query->addSelect('forms.id,
                        forms.fieldLayoutId,
                        forms.redirectEntryId,
                        forms.name,
                        forms.handle,
                        forms.titleFormat,
                        forms.submitAction,
                        forms.submitButton,
                        forms.afterSubmit,
                        forms.afterSubmitText,
                        forms.submissionEnabled,
                        forms.displayTabTitles,
                        forms.redirectUrl,
                        forms.sendCopy,
                        forms.sendCopyTo,
                        forms.notificationEnabled,
                        forms.notificationFilesEnabled,
                        forms.notificationRecipients,
                        forms.notificationSubject,
                        forms.confirmationSubject,
                        forms.notificationSenderName,
                        forms.confirmationSenderName,
                        forms.notificationSenderEmail,
                        forms.confirmationSenderEmail,
                        forms.notificationReplyToEmail,
                        forms.formTemplate,
                        forms.tabTemplate,
                        forms.fieldTemplate,
                        forms.notificationTemplate,
                        forms.confirmationTemplate');
     $query->join('amforms_forms forms', 'forms.id = elements.id');
     if ($criteria->handle) {
         $query->andWhere(DbHelper::parseParam('forms.handle', $criteria->handle, $query->params));
     }
 }
 /**
  * Modifies an element query targeting elements of this type.
  *
  * @param DbCommand $query
  * @param ElementCriteriaModel $criteria
  * @return mixed
  */
 public function modifyElementsQuery(DbCommand $query, ElementCriteriaModel $criteria)
 {
     $query->addSelect('nodes.menuId, nodes.linkedEntryId, nodes.customUrl, i18n.uri linkedEntryUrl')->join('menus_nodes nodes', 'nodes.id = elements.id')->join('menus menus', 'menus.id = nodes.menuId')->leftJoin('elements_i18n i18n', 'i18n.elementId = nodes.linkedEntryId')->leftJoin('structures structures', 'structures.id = menus.structureId')->leftJoin('structureelements structureelements', array('and', 'structureelements.structureId = structures.id', 'structureelements.elementId = nodes.id'));
     if ($criteria->menuId) {
         $query->andWhere(DbHelper::parseParam('nodes.menuId', $criteria->menuId, $query->params));
     }
     if ($criteria->menu) {
         $query->andWhere(DbHelper::parseParam('menus.handle', $criteria->menu, $query->params));
     }
     // if ($criteria->startDate)
     // {
     //   $query->andWhere(DbHelper::parseDateParam('entries.startDate', $criteria->startDate, $query->params));
     // }
     //
     // if ($criteria->endDate)
     // {
     //   $query->andWhere(DbHelper::parseDateParam('entries.endDate', $criteria->endDate, $query->params));
     // }
 }
 /**
  * @inheritDoc IElementType::modifyElementsQuery()
  *
  * @param DbCommand            $query
  * @param ElementCriteriaModel $criteria
  *
  * @return bool|false|null|void
  */
 public function modifyElementsQuery(DbCommand $query, ElementCriteriaModel $criteria)
 {
     $query->addSelect('entries.sectionId, entries.typeId, entries.authorId, entries.postDate, entries.expiryDate')->join('entries entries', 'entries.id = elements.id')->join('sections sections', 'sections.id = entries.sectionId')->leftJoin('structures structures', 'structures.id = sections.structureId')->leftJoin('structureelements structureelements', array('and', 'structureelements.structureId = structures.id', 'structureelements.elementId = entries.id'));
     if ($criteria->ref) {
         $refs = ArrayHelper::stringToArray($criteria->ref);
         $conditionals = array();
         foreach ($refs as $ref) {
             $parts = array_filter(explode('/', $ref));
             if ($parts) {
                 if (count($parts) == 1) {
                     $conditionals[] = DbHelper::parseParam('elements_i18n.slug', $parts[0], $query->params);
                 } else {
                     $conditionals[] = array('and', DbHelper::parseParam('sections.handle', $parts[0], $query->params), DbHelper::parseParam('elements_i18n.slug', $parts[1], $query->params));
                 }
             }
         }
         if ($conditionals) {
             if (count($conditionals) == 1) {
                 $query->andWhere($conditionals[0]);
             } else {
                 array_unshift($conditionals, 'or');
                 $query->andWhere($conditionals);
             }
         }
     }
     if ($criteria->type) {
         $typeIds = array();
         if (!is_array($criteria->type)) {
             $criteria->type = array($criteria->type);
         }
         foreach ($criteria->type as $type) {
             if (is_numeric($type)) {
                 $typeIds[] = $type;
             } else {
                 if (is_string($type)) {
                     $types = craft()->sections->getEntryTypesByHandle($type);
                     if ($types) {
                         foreach ($types as $type) {
                             $typeIds[] = $type->id;
                         }
                     } else {
                         return false;
                     }
                 } else {
                     if ($type instanceof EntryTypeModel) {
                         $typeIds[] = $type->id;
                     } else {
                         return false;
                     }
                 }
             }
         }
         $query->andWhere(DbHelper::parseParam('entries.typeId', $typeIds, $query->params));
     }
     if ($criteria->postDate) {
         $query->andWhere(DbHelper::parseDateParam('entries.postDate', $criteria->postDate, $query->params));
     } else {
         if ($criteria->after) {
             $query->andWhere(DbHelper::parseDateParam('entries.postDate', '>=' . $criteria->after, $query->params));
         }
         if ($criteria->before) {
             $query->andWhere(DbHelper::parseDateParam('entries.postDate', '<' . $criteria->before, $query->params));
         }
     }
     if ($criteria->expiryDate) {
         $query->andWhere(DbHelper::parseDateParam('entries.expiryDate', $criteria->expiryDate, $query->params));
     }
     if ($criteria->editable) {
         $user = craft()->userSession->getUser();
         if (!$user) {
             return false;
         }
         // Limit the query to only the sections the user has permission to edit
         $editableSectionIds = craft()->sections->getEditableSectionIds();
         $query->andWhere(array('in', 'entries.sectionId', $editableSectionIds));
         // Enforce the editPeerEntries permissions for non-Single sections
         $noPeerConditions = array();
         foreach (craft()->sections->getEditableSections() as $section) {
             if ($section->type != SectionType::Single && !$user->can('editPeerEntries:' . $section->id)) {
                 $noPeerConditions[] = array('or', 'entries.sectionId != ' . $section->id, 'entries.authorId = ' . $user->id);
             }
         }
         if ($noPeerConditions) {
             array_unshift($noPeerConditions, 'and');
             $query->andWhere($noPeerConditions);
         }
     }
     if ($criteria->section) {
         if ($criteria->section instanceof SectionModel) {
             $criteria->sectionId = $criteria->section->id;
             $criteria->section = null;
         } else {
             $query->andWhere(DbHelper::parseParam('sections.handle', $criteria->section, $query->params));
         }
     }
     if ($criteria->sectionId) {
         $query->andWhere(DbHelper::parseParam('entries.sectionId', $criteria->sectionId, $query->params));
     }
     if (craft()->getEdition() >= Craft::Client) {
         if ($criteria->authorId) {
             $query->andWhere(DbHelper::parseParam('entries.authorId', $criteria->authorId, $query->params));
         }
         if ($criteria->authorGroupId || $criteria->authorGroup) {
             $query->join('usergroups_users usergroups_users', 'usergroups_users.userId = entries.authorId');
             if ($criteria->authorGroupId) {
                 $query->andWhere(DbHelper::parseParam('usergroups_users.groupId', $criteria->authorGroupId, $query->params));
             }
             if ($criteria->authorGroup) {
                 $query->join('usergroups usergroups', 'usergroups.id = usergroups_users.groupId');
                 $query->andWhere(DbHelper::parseParam('usergroups.handle', $criteria->authorGroup, $query->params));
             }
         }
     }
 }
 public function modifyElementsQuery(DbCommand $query, ElementCriteriaModel $criteria)
 {
     $query->addSelect("variants.id,variants.productId,variants.isImplicit,variants.sku,variants.price,variants.width,variants.height,variants.length,variants.weight,variants.stock,variants.unlimitedStock,variants.minQty,variants.maxQty")->join('market_variants variants', 'variants.id = elements.id');
     if ($criteria->sku) {
         $query->andWhere(DbHelper::parseParam('variants.sku', $criteria->sku, $query->params));
     }
     if ($criteria->product) {
         if ($criteria->product instanceof Market_ProductModel) {
             $criteria->productId = $criteria->product->id;
             $criteria->product = NULL;
         } else {
             $query->andWhere(DbHelper::parseParam('variants.productId', $criteria->product, $query->params));
         }
     }
     if ($criteria->productId) {
         $query->andWhere(DbHelper::parseParam('variants.productId', $criteria->productId, $query->params));
     }
     if ($criteria->isImplicit) {
         $query->andWhere(DbHelper::parseParam('variants.isImplicit', $criteria->isImplicit, $query->params));
     }
 }
Ejemplo n.º 29
0
 /**
  * Modifies an entries query targeting entries of this type.
  *
  * @param DbCommand $query
  * @param ElementCriteriaModel $criteria
  * @return mixed
  */
 public function modifyElementsQuery(DbCommand $query, ElementCriteriaModel $criteria)
 {
     $query->addSelect('tags.setId, tags.name')->join('tags tags', 'tags.id = elements.id');
     if ($criteria->name) {
         $query->andWhere(DbHelper::parseParam('tags.name', $criteria->name, $query->params));
     }
     if ($criteria->setId) {
         $query->andWhere(DbHelper::parseParam('tags.setId', $criteria->setId, $query->params));
     }
     if ($criteria->set) {
         $query->join('tagsets tagsets', 'tagsets.id = tags.setId');
         $query->andWhere(DbHelper::parseParam('tagsets.handle', $criteria->set, $query->params));
     }
 }
Ejemplo n.º 30
0
 /**
  * @inheritDoc IElementType::modifyElementsQuery()
  *
  * @param DbCommand            $query
  * @param ElementCriteriaModel $criteria
  *
  * @return mixed
  */
 public function modifyElementsQuery(DbCommand $query, ElementCriteriaModel $criteria)
 {
     $query->addSelect('assetfiles.sourceId, assetfiles.folderId, assetfiles.filename, assetfiles.kind, assetfiles.width, assetfiles.height, assetfiles.size, assetfiles.dateModified, assetfolders.path as folderPath')->join('assetfiles assetfiles', 'assetfiles.id = elements.id')->join('assetfolders assetfolders', 'assetfolders.id = assetfiles.folderId');
     if (!empty($criteria->source)) {
         $query->join('assetsources assetsources', 'assetfiles.sourceId = assetsources.id');
     }
     if ($criteria->sourceId) {
         $query->andWhere(DbHelper::parseParam('assetfiles.sourceId', $criteria->sourceId, $query->params));
     }
     if ($criteria->source) {
         $query->andWhere(DbHelper::parseParam('assetsources.handle', $criteria->source, $query->params));
     }
     if ($criteria->folderId) {
         if ($criteria->includeSubfolders) {
             $folders = craft()->assets->getAllDescendantFolders(craft()->assets->getFolderById($criteria->folderId));
             $query->andWhere(DbHelper::parseParam('assetfiles.folderId', array_keys($folders), $query->params));
         } else {
             $query->andWhere(DbHelper::parseParam('assetfiles.folderId', $criteria->folderId, $query->params));
         }
     }
     if ($criteria->filename) {
         $query->andWhere(DbHelper::parseParam('assetfiles.filename', $criteria->filename, $query->params));
     }
     if ($criteria->kind) {
         if (is_array($criteria->kind)) {
             $query->andWhere(DbHelper::parseParam('assetfiles.kind', array_merge(array('or'), $criteria->kind), $query->params));
         } else {
             $query->andWhere(DbHelper::parseParam('assetfiles.kind', $criteria->kind, $query->params));
         }
     }
     if ($criteria->width) {
         $query->andWhere(DbHelper::parseParam('assetfiles.width', $criteria->width, $query->params));
     }
     if ($criteria->height) {
         $query->andWhere(DbHelper::parseParam('assetfiles.height', $criteria->height, $query->params));
     }
     if ($criteria->size) {
         $query->andWhere(DbHelper::parseParam('assetfiles.size', $criteria->size, $query->params));
     }
     // Clear out existing onPopulateElements handlers
     $criteria->detachEventHandler('onPopulateElements', array($this, 'eagerLoadTransforms'));
     // Are we eager-loading any transforms?
     if ($criteria->withTransforms) {
         $criteria->attachEventHandler('onPopulateElements', array($this, 'eagerLoadTransforms'));
     }
 }