Login   Register  
PHP Classes
elePHPant
Icontem

File: example/GoogleClient/service/Google_BatchRequest.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Vivek Muthal  >  Viv OAuth IMAP  >  example/GoogleClient/service/Google_BatchRequest.php  >  Download  
File: example/GoogleClient/service/Google_BatchRequest.php
Role: Example script
Content type: text/plain
Description: Example script
Class: Viv OAuth IMAP
Access messages in IMAP server using OAuth token
Author: By
Last change:
Date: 11 months ago
Size: 3,371 bytes
 

Contents

Class file image Download
<?php
/*
 * Copyright 2012 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 * @author Chirag Shah <chirags@google.com>
 */
class Google_BatchRequest {
  
/** @var string Multipart Boundary. */
  
private $boundary;

  
/** @var array service requests to be executed. */
  
private $requests = array();

  public function 
__construct($boundary false) {
    
$boundary = (false == $boundary) ? mt_rand() : $boundary;
    
$this->boundary str_replace('"'''$boundary);
  }

  public function 
add(Google_HttpRequest $request$key false) {
    if (
false == $key) {
      
$key mt_rand();
    }

    
$this->requests[$key] = $request;
  }

  public function 
execute() {
    
$body '';

    
/** @var Google_HttpRequest $req */
    
foreach($this->requests as $key => $req) {
      
$body .= "--{$this->boundary}\n";
      
$body .= $req->toBatchString($key) . "\n";
    }

    
$body rtrim($body);
    
$body .= "\n--{$this->boundary}--";

    global 
$apiConfig;
    
$url $apiConfig['basePath'] . '/batch';
    
$httpRequest = new Google_HttpRequest($url'POST');
    
$httpRequest->setRequestHeaders(array(
        
'Content-Type' => 'multipart/mixed; boundary=' $this->boundary));

    
$httpRequest->setPostBody($body);
    
$response Google_Client::$io->makeRequest($httpRequest);

    
$response $this->parseResponse($response);
    return 
$response;
  }

  public function 
parseResponse(Google_HttpRequest $response) {
    
$contentType $response->getResponseHeader('content-type');
    
$contentType explode(';'$contentType);
    
$boundary false;
    foreach(
$contentType as $part) {
      
$part = (explode('='$part2));
      if (isset(
$part[0]) && 'boundary' == trim($part[0])) {
        
$boundary $part[1];
      }
    }

    
$body $response->getResponseBody();
    if (
$body) {
      
$body str_replace("--$boundary--""--$boundary"$body);
      
$parts explode("--$boundary"$body);
      
$responses = array();

      foreach(
$parts as $part) {
        
$part trim($part);
        if (!empty(
$part)) {
          list(
$metaHeaders$part) = explode("\r\n\r\n"$part2);
          
$metaHeaders Google_CurlIO::parseResponseHeaders($metaHeaders);

          
$status substr($part0strpos($part"\n"));
          
$status explode(" "$status);
          
$status $status[1];

          list(
$partHeaders$partBody) = Google_CurlIO::parseHttpResponse($partfalse);
          
$response = new Google_HttpRequest("");
          
$response->setResponseHttpCode($status);
          
$response->setResponseHeaders($partHeaders);
          
$response->setResponseBody($partBody);
          
$response Google_REST::decodeHttpResponse($response);

          
// Need content id.
          
$responses[$metaHeaders['content-id']] = $response;
        }
      }

      return 
$responses;
    }

    return 
null;
  }
}