protected function processUploadReuse($itemTreeBounds, $itemTreeBoundsReused, $reusedGroupId) { $groupId = $this->groupId; $userId = $this->userId; $clearingDecisions = $this->clearingDao->getFileClearingsFolder($itemTreeBoundsReused, $reusedGroupId); $currenlyVisibleClearingDecisions = $this->clearingDao->getFileClearingsFolder($itemTreeBounds, $groupId); $currenlyVisibleClearingDecisionsById = $this->mapByClearingId($currenlyVisibleClearingDecisions); $clearingDecisionsById = $this->mapByClearingId($clearingDecisions); $clearingDecisionsToImport = array_diff_key($clearingDecisionsById, $currenlyVisibleClearingDecisionsById); $clearingDecisionToImportByFileId = $this->mapByFileId($clearingDecisionsToImport); $uploadDao = $this->uploadDao; /** @var Item[] $containedItems */ $containedItems = ArrayOperation::callChunked(function ($fileIds) use($itemTreeBounds, $uploadDao) { return $uploadDao->getContainedItems($itemTreeBounds, "pfile_fk = ANY(\$1)", array('{' . implode(', ', $fileIds) . '}')); }, array_keys($clearingDecisionToImportByFileId), 100); foreach ($containedItems as $item) { $fileId = $item->getFileId(); if (array_key_exists($fileId, $clearingDecisionToImportByFileId)) { $this->createCopyOfClearingDecision($item->getId(), $userId, $groupId, $clearingDecisionToImportByFileId[$fileId]); } else { throw new \Exception("bad internal state"); } $this->heartbeat(1); } return true; }