protected function getRootEntityID($matchHash) { $query = new Main\Entity\Query(Entity\DuplicateIndexTable::getEntity()); $query->addSelect('ROOT_ENTITY_ID'); $query->addFilter('=USER_ID', $this->getUserID()); $query->addFilter('=ENTITY_TYPE_ID', $this->getEntityTypeID()); $query->addFilter('=TYPE_ID', $this->typeID); $query->addFilter('=MATCH_HASH', $matchHash); $fields = $query->exec()->fetch(); return is_array($fields) ? (int) $fields['ROOT_ENTITY_ID'] : 0; }
/** * @return Main\Entity\Query */ private 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('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->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 ($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); } } return $query; }