27 use IteratorAggregate;
57 public function __construct(
FacebookApp $app =
null, array $requests = [], $accessToken =
null, $graphVersion =
null)
59 parent::__construct($app, $accessToken,
'POST',
'', [],
null, $graphVersion);
61 $this->add($requests);
75 public function add($request, $options =
null)
77 if (is_array($request)) {
78 foreach ($request
as $key => $req) {
79 $this->add($req, $key);
86 throw new \InvalidArgumentException(
'Argument for add() must be of type array or FacebookRequest.');
89 if (
null === $options) {
91 } elseif (!is_array($options)) {
92 $options = [
'name' => $options];
95 $this->addFallbackDefaults($request);
98 $attachedFiles = $this->extractFileAttachments($request);
100 $name = isset($options[
'name']) ? $options[
'name'] :
null;
102 unset($options[
'name']);
106 'request' => $request,
107 'options' => $options,
108 'attached_files' => $attachedFiles,
111 $this->requests[] = $requestToAdd;
125 if (!$request->
getApp()) {
126 $app = $this->getApp();
128 throw new FacebookSDKException(
'Missing FacebookApp on FacebookRequest and no fallback detected on FacebookBatchRequest.');
134 $accessToken = $this->getAccessToken();
136 throw new FacebookSDKException(
'Missing access token on FacebookRequest and no fallback detected on FacebookBatchRequest.');
159 foreach ($files
as $file) {
160 $fileName = uniqid();
161 $this->addFile($fileName, $file);
162 $fileNames[] = $fileName;
168 return implode(
',', $fileNames);
178 return $this->requests;
186 $this->validateBatchRequestCount();
189 'batch' => $this->convertRequestsToJson(),
190 'include_headers' =>
true,
192 $this->setParams($params);
203 foreach ($this->requests
as $request) {
206 if (
null !== $request[
'name']) {
207 $options[
'name'] = $request[
'name'];
210 $options += $request[
'options'];
212 $requests[] = $this->requestEntityToBatchArray($request[
'request'], $options, $request[
'attached_files']);
215 return json_encode($requests);
225 $batchCount = count($this->requests);
226 if ($batchCount === 0) {
228 } elseif ($batchCount > 50) {
247 if (
null === $options) {
249 } elseif (!is_array($options)) {
250 $options = [
'name' => $options];
253 $compiledHeaders = [];
255 foreach ($headers
as $name => $value) {
256 $compiledHeaders[] = $name .
': ' . $value;
260 'headers' => $compiledHeaders,
262 'relative_url' => $request->
getUrl(),
269 $batch[
'body'] = $body;
274 if (
null !== $attachedFiles) {
275 $batch[
'attached_files'] = $attachedFiles;
288 return new ArrayIterator($this->requests);
296 $this->add($value, $offset);
304 return isset($this->requests[$offset]);
312 unset($this->requests[$offset]);
320 return isset($this->requests[$offset]) ? $this->requests[$offset] :
null;