/**
  * Returns an array of CakeRequest objects. Performs various transformations on the request passed to the constructor,
  * so that the requests match the format expected by CakePHP.
  *
  * @return array Array with CakeRequest objects.
  */
 public function getRequests()
 {
     $requests = array();
     // If the request comes from $HTTP_RAW_POST_DATA it could be a batch request.
     if (strlen($this->rawPostData)) {
         $data = json_decode($this->rawPostData, true);
         // TODO: improve detection (not perfect, but should it should be correct in most cases.)
         if (isset($data['action']) || isset($data['method']) || isset($data['data'])) {
             $data = array($data);
         }
         $data = Set::sort($data, '{n}.tid', 'asc');
     } else {
         if (!empty($this->postData)) {
             // Form requests only contain one request.
             $data = array($this->postData);
         } else {
             // no data passed
             throw new BanchaException('Missing POST Data: The Bancha Dispatcher expected to get all requests in the Ext.Direct format as POST ' . 'parameter, but there is no data in this request. You can not access this site directly!');
         }
     }
     if (count($data) > 0) {
         for ($i = 0; $i < count($data); $i++) {
             $transformer = new BanchaRequestTransformer($data[$i]);
             // CakePHP should think that every Bancha request is a POST request.
             $_SERVER['REQUEST_METHOD'] = 'POST';
             // Create CakeRequest and fill it with values from the transformer.
             $requests[$i] = new CakeRequest($transformer->getUrl());
             // the CakeRequest uses the envirement variable $_POST in his
             // during the startup called _processPost() (currently line 153).
             // This is unclean and adds false data in our case. So delete this data.
             $requests[$i]->data = array();
             // now set params for the request
             $requests[$i]['controller'] = $transformer->getController();
             $requests[$i]['action'] = $transformer->getAction();
             $requests[$i]['named'] = $transformer->getPaging();
             $requests[$i]['plugin'] = null;
             // bancha-specific
             $requests[$i]['tid'] = $transformer->getTid();
             $requests[$i]['extUpload'] = $transformer->getExtUpload();
             $requests[$i]['client_id'] = $transformer->getClientId();
             $requests[$i]['isFormRequest'] = $transformer->isFormRequest();
             $requests[$i]['pass'] = $transformer->getPassParams();
             // additional property for cleaner controller syntax
             $requests[$i]['isBancha'] = true;
             // Handle all other parameters as POST parameters.
             foreach ($transformer->getCleanedDataArray() as $key => $value) {
                 $requests[$i]->data($key, $value);
             }
         }
     }
     return $requests;
 }
 public function testGetCleanedDataArrayForm()
 {
     $data = array('extAction' => 'Test', 'extMethod' => 'submit', 'id' => 42, 'foo' => 'bar', 'extTID' => 1, 'extUpload' => '1');
     $transformer = new BanchaRequestTransformer($data);
     $data = $transformer->getCleanedDataArray();
     $this->assertFalse(isset($data['action']));
     $this->assertFalse(isset($data['method']));
     $this->assertFalse(isset($data['id']));
     $this->assertEquals('bar', $data['Test']['foo']);
     $this->assertFalse(isset($data['extTID']));
     $this->assertFalse(isset($data['extUpload']));
 }