/** * Issue a batch request * * @param array $requests Array of requests in batch op * @param string $sessionToken Session token of a User * @param array $headers Optional headers * @param bool $useMasterkey Use master key or not, optional * @return array JSON decoded associated array * @see self::request() */ public static function batch($requests, $sessionToken = null, $headers = array(), $useMasterKey = null) { $response = Client::post("/batch", array("requests" => $requests), $sessionToken, $headers, $useMasterKey); $batchRequestError = new BatchRequestError(); foreach ($requests as $i => $req) { if (isset($response[$i]["error"])) { $batchRequestError->add($req, $response[$i]["error"]); } } if (!$batchRequestError->isEmpty()) { throw $batchRequestError; } return $response; }
/** * Fetch objects from server * * @param array $objects Objects to fetch. * @throws RuntimeException, CloudException */ public function fetchAll($objects) { $batch = array(); foreach ($objects as $obj) { if (!$obj->getObjectId()) { throw new \RuntimeException("Cannot fetch object without ID."); } // remove duplicate objects by id $batch[$obj->getObjectId()] = $obj; } if (empty($batch)) { return; } $requests = array(); $objects = array(); foreach ($batch as $obj) { $requests[] = array("path" => "/1.1/classes/{$obj->getClassName()}" . "/{$obj->getObjectId()}", "method" => "GET"); $objects[] = $obj; } $sessionToken = User::getCurrentSessionToken(); $response = Client::batch($requests, $sessionToken); $batchRequestError = new BatchRequestError(); foreach ($objects as $i => $obj) { if (isset($response[$i]["success"])) { if (!empty($response[$i]["success"])) { $obj->mergeAfterFetch($response[$i]["success"]); } else { $batchRequestError->add($requests[$i], array("error" => "Object not found.")); } } } if (!$batchRequestError->isEmpty()) { throw $batchRequestError; } }