private function processQueryParams(Schema $schema, $mainEntity) { // Get rid of any 'PHPSESSION' and cookie params. RestUrlParams::extractValue($this->params, session_name()); // Create/restore the temporaryIdMap. $storedTemporaryIds = NULL; if (isset($_SESSION[$this->sessionId])) { $storedTemporaryIds = TemporaryIdMap::deserializeTemporaryIds($schema, $_SESSION[$this->sessionId]); } $this->temporaryIdMap = new TemporaryIdMap($storedTemporaryIds); // Validate that prefixed parameters refer to existing entities. foreach ($this->params as $paramName => &$paramValue) { if (RestUrlParams::isFetchParam($paramName)) { continue; } $paramNameParts = explode(RestUrlParams::ENTITY_SEPARATOR, $paramName); $entity = NULL; $queryParam = NULL; if (count($paramNameParts) == 1) { if ($mainEntity == NULL) { // error_log("Ignoring unknown query parameter: '$paramName=$paramValue'."); unset($this->params[$paramName]); continue; } $entity = $mainEntity; $queryParam = $paramNameParts[0]; } else { // Check if the specified entity exists. $entity = $schema->getObjectEntity($paramNameParts[0], false); if ($entity == NULL) { throw new Exception("Unknown entity '{$paramNameParts['0']}' in query parameters.", RestResponse::CLIENT_ERROR); } $queryParam = $paramNameParts[1]; } // If one or more ID's are specified... if (strcasecmp($queryParam, RestUrlParams::ID) == 0) { // ...then substitute any temporary ID with its persisted counterpart. $persistedIds = array(); foreach (explode(RestUrlParams::ID_SEPARATOR, $paramValue) as $id) { $persistedIds[] = $this->temporaryIdMap->getPersistedId($entity, $id); } $paramValue = implode(RestUrlParams::ID_SEPARATOR, $persistedIds); } } }