public static function prepareQueryField(DuplicateCriterion $criterion, $entityTypeID, $entityID, $userID) { $typeID = $criterion->getIndexTypeID(); $matchHash = $criterion->getMatchHash(); $sql = array(); $query = new Main\Entity\Query(Entity\DuplicateIndexMismatchTable::getEntity()); $query->addSelect('R_ENTITY_ID', 'ENTITY_ID'); $query->addFilter('=USER_ID', $userID); $query->addFilter('=ENTITY_TYPE_ID', $entityTypeID); $query->addFilter('=TYPE_ID', $typeID); $query->addFilter('=MATCH_HASH', $matchHash); $query->addFilter('=L_ENTITY_ID', $entityID); $sql[] = $query->getQuery(); $query = new Main\Entity\Query(Entity\DuplicateIndexMismatchTable::getEntity()); $query->addSelect('L_ENTITY_ID', 'ENTITY_ID'); $query->addFilter('=USER_ID', $userID); $query->addFilter('=ENTITY_TYPE_ID', $entityTypeID); $query->addFilter('=TYPE_ID', $typeID); $query->addFilter('=MATCH_HASH', $matchHash); $query->addFilter('=R_ENTITY_ID', $entityID); $sql[] = $query->getQuery(); return new Main\DB\SqlExpression(implode(' UNION ALL ', $sql)); }
public function registerCriterionMismatch(Integrity\DuplicateCriterion $criterion, $leftEntityID, $rightEntityID) { $entityTypeID = $this->entityTypeID; $userID = $this->userID; $typeID = $criterion->getIndexTypeID(); $matchHash = $criterion->getMatchHash(); if ($matchHash === '') { throw new Main\ArgumentException('Match hash is empty', 'criterion'); } Integrity\DuplicateIndexMismatch::register($entityTypeID, $leftEntityID, $rightEntityID, $typeID, $matchHash, $userID); }
public function processEntityDeletion(DuplicateCriterion $criterion, $entityID) { if (!is_int($entityID)) { $entityID = (int) $entityID; } if ($entityID <= 0) { return; } $matchHash = $criterion->getMatchHash(); $rootEntityID = $this->getRootEntityID($matchHash); if ($rootEntityID <= 0) { return; } $entityTypeID = $this->getEntityTypeID(); $userID = $this->getUserID(); $enablePermissionCheck = $this->isPermissionCheckEnabled(); $quantity = $criterion->getActualCount($entityTypeID, $rootEntityID, $userID, $enablePermissionCheck, 100); if ($quantity === 0) { Entity\DuplicateIndexTable::delete($this->getPrimaryKey($matchHash)); return; } if ($entityID !== $rootEntityID) { return; } $dataSource = $this->getDataSource(); $result = $dataSource->getList(0, 100); $item = $result->getItem($matchHash); if (!$item) { return; } $rankings = $item->getAllRankings(); DuplicateEntityRanking::initializeBulk($rankings, array('CHECK_PERMISSIONS' => $enablePermissionCheck, 'USER_ID' => $userID)); $rootEntityInfo = array(); if (!$this->tryResolveRootEntity($item, $matchHash, $rootEntityInfo)) { Entity\DuplicateIndexTable::delete($this->getPrimaryKey($matchHash)); return; } $rootEntityID = $rootEntityInfo['ENTITY_ID']; $item->setRootEntityID($rootEntityID); $sortParams = $this->prepareSortParams(array($rootEntityID)); $data = $this->prepareTableData($matchHash, $item, $sortParams, true); Entity\DuplicateIndexTable::upsert($data); }