tableName = $tableName; $this->workspaceId = $workspaceId; } /** * @param int[] $ids */ public function update(array $ids): self { $ids = array_map(intval(...), $ids); $candidateIds = array_diff( $ids, array_keys($this->map), array_values($this->map) ); if (empty($candidateIds)) { return $this; } $candidateIdMap = array_combine($candidateIds, $candidateIds); $schemaFactory = GeneralUtility::makeInstance(TcaSchemaFactory::class); if ( !$schemaFactory->has($this->tableName) || $this->workspaceId === 0 || !$schemaFactory->get($this->tableName)->isWorkspaceAware() ) { $this->map += $candidateIdMap; return $this; } $plainDataResolver = GeneralUtility::makeInstance( PlainDataResolver::class, $this->tableName, [] ); $plainDataResolver->setWorkspaceId($this->workspaceId); $plainDataResolver->setKeepLiveIds(true); $versionLiveIdMap = $plainDataResolver->applyLiveIds($candidateIdMap); $this->map += $versionLiveIdMap; return $this; } public function getVersionId(int $liveId): int { $versionId = array_search($liveId, $this->map, true); return $versionId ?: $liveId; } public function getLiveId(int $versionId): string|int { return $this->map[$versionId] ?? $versionId; } /** * @param int[] $versionIds * @return int[] */ public function getLiveIds(array $versionIds): array { return array_map( function (int $versionId) { return $this->getLiveId($versionId); }, $versionIds ); } }