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));
 }
예제 #2
0
 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);
 }
예제 #3
0
 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);
 }