- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/integrity/duplicatelist.php
- Класс: Bitrix\Crm\Integrity\DuplicateList
- Вызов: DuplicateList::createQuery
protected function createQuery($offset = 0, $limit = 0) { if (!is_int($offset)) { $offset = intval($offset); } if (!is_int($limit)) { $limit = intval($limit); } $typeIDs = $this->getTypeIDs(); if (empty($typeIDs)) { throw new Main\NotSupportedException("Criterion types are required."); } $query = new Main\Entity\Query(Entity\DuplicateIndexTable::getEntity()); $query->addSelect('ROOT_ENTITY_ID'); $query->addSelect('ROOT_ENTITY_NAME'); $query->addSelect('ROOT_ENTITY_TITLE'); $query->addSelect('QUANTITY'); $query->addSelect('TYPE_ID'); $query->addSelect('SCOPE'); $query->addSelect('MATCHES'); $query->addSelect('IS_JUNK'); $permissionSql = ''; if ($this->enablePermissionCheck) { $permissions = \CCrmPerms::GetUserPermissions($this->userID); $permissionSql = \CCrmPerms::BuildSql( \CCrmOwnerType::ResolveName($this->entityTypeID), '', 'READ', array('RAW_QUERY' => true, 'PERMS' => $permissions) ); if ($permissionSql === false) { //Access denied; return null; } } $query->addFilter('=USER_ID', $this->userID); $query->addFilter('=ENTITY_TYPE_ID', $this->entityTypeID); $query->addFilter('@TYPE_ID', $typeIDs); if ($this->matchHash != '') { $query->addFilter('=MATCH_HASH', $this->matchHash); } $query->addFilter('=SCOPE', $this->scope); if (!empty($this->statusIDs)) { $query->addFilter('@STATUS_ID', $this->statusIDs); } if ($this->enablePermissionCheck && $permissionSql !== '') { $query->addFilter('@ROOT_ENTITY_ID', new Main\DB\SqlExpression($permissionSql)); } if ($offset > 0) { $query->setOffset($offset); } if ($limit > 0) { $query->setLimit($limit); } $enableSorting = $this->sortTypeID !== DuplicateIndexType::UNDEFINED; if ($enableSorting) { $order = $this->sortOrder === SORT_DESC ? 'DESC' : 'ASC'; if (!empty($this->statusIDs)) { $query->addOrder('STATUS_ID', $order); } if ($this->sortTypeID === DuplicateIndexType::COMMUNICATION_EMAIL) { $query->addOrder('ROOT_ENTITY_EMAIL_FLAG', $order); $query->addOrder('ROOT_ENTITY_EMAIL', $order); } elseif ($this->sortTypeID === DuplicateIndexType::COMMUNICATION_PHONE) { $query->addOrder('ROOT_ENTITY_PHONE_FLAG', $order); $query->addOrder('ROOT_ENTITY_PHONE', $order); } elseif ($this->sortTypeID === DuplicateIndexType::PERSON) { $query->addOrder('ROOT_ENTITY_NAME_FLAG', $order); $query->addOrder('ROOT_ENTITY_NAME', $order); } elseif ($this->sortTypeID === DuplicateIndexType::ORGANIZATION) { $query->addOrder('ROOT_ENTITY_TITLE_FLAG', $order); $query->addOrder('ROOT_ENTITY_TITLE', $order); } else { $isSortingTypeFound = false; $sortingTypeID = DuplicateIndexType::UNDEFINED; foreach (DuplicateRequisiteCriterion::getSupportedDedupeTypes() as $typeID) { if ($this->sortTypeID === $typeID) { $sortingTypeID = $typeID; $isSortingTypeFound = true; break; } } if (!$isSortingTypeFound) { foreach (DuplicateBankDetailCriterion::getSupportedDedupeTypes() as $typeID) { if ($this->sortTypeID === $typeID) { $sortingTypeID = $typeID; $isSortingTypeFound = true; break; } } } if ($isSortingTypeFound) { $typeName = DuplicateIndexType::resolveName($sortingTypeID); $query->addOrder("ROOT_ENTITY_{$typeName}_FLAG", $order); $query->addOrder("ROOT_ENTITY_{$typeName}", $order); } } } elseif ($this->isNaturalSortEnabled()) { $order = $this->sortOrder === SORT_DESC ? 'DESC' : 'ASC'; $query->addOrder('STATUS_ID', $order); $query->addOrder('USER_ID', $order); $query->addOrder('ENTITY_TYPE_ID', $order); $query->addOrder('TYPE_ID', $order); $query->addOrder('MATCH_HASH', $order); $query->addOrder('SCOPE', $order); } return $query; }