/**
  * Creates a new request, sends and receives the data, uses caching if defined by the user.
  * @param string $uri The uri this request is sent to.
  * @param string $method The method (GET,PUT,POST,DELETE)
  * @param array $customHeader A customHeader to be sent
  * @param array $data The data to be sent as array
  * @return EActiveResourceResponse The response object
  */
 public function sendRequest($uri, $method, $data = null, $customHeader = null, $contentType = 'application/json', $acceptType = 'application/json')
 {
     ///LOOK FOR CACHED RESPONSES FIRST
     if ($this->queryCachingCount > 0 && $this->queryCachingDuration > 0 && $this->queryCacheID !== false && ($cache = Yii::app()->getComponent($this->queryCacheID)) !== null) {
         $this->queryCachingCount--;
         $cacheKey = 'yii:eactiveresourcerequest:' . $uri . ':' . $method . ':' . $this->recursiveImplode('-', $customHeader);
         $cacheKey .= ':' . $this->recursiveImplode('#', $data);
         if (($result = $cache->get($cacheKey)) !== false) {
             Yii::trace('Respone found in cache', 'ext.EActiveResource.EActiveResourceConnection');
             return $result;
         }
     }
     $request = new EActiveResourceRequest();
     $request->setUri($uri);
     $request->setMethod($method);
     $request->setData($data);
     $request->setContentType($contentType);
     $request->setAcceptType($acceptType);
     $request->setCustomHeader($customHeader);
     $response = $request->run();
     //CACHE RESULT IF CACHE IS SET
     if (isset($cache, $cacheKey)) {
         $cache->set($cacheKey, $response, $this->queryCachingDuration, $this->queryCachingDependency);
     }
     return $response;
 }
 /**
  * Manipulate data with a request. execute requests like DELETE, PUT, POST requests can't be cached.
  * @param EActiveResourceRequest $request The request object
  * @return EActiveResourceResponse The response object
  */
 public function execute(EActiveResourceRequest $request)
 {
     //set connection component specific options
     $request->setCurlHandle($this->_ch);
     $request->setContentType($this->contentType);
     $request->setAcceptType($this->acceptType);
     //AUTH STUFF
     if (isset($this->auth)) {
         $request->setHttpLogin($this->auth['username'], $this->auth['password'], $this->auth['type']);
     }
     //API KEY STUFF
     if (isset($this->apiKey)) {
         $request->setApiKey($this->apiKey['value'], $this->apiKey['name']);
     }
     //SSL STUFF
     if (isset($this->ssl)) {
         $request->setSSL($this->ssl['verifyPeer'], $this->ssl['verifyHost'], $this->ssl['pathToCert']);
     }
     $response = $request->run();
     if ($response->hasErrors()) {
         $response->throwError();
     }
     return $response;
 }
 /**
  * Perform a query (mainly used by the finder methods). Only queries allow caching and fire a beforeFind
  * event
  * @param string $route The route to be sued by the query
  * @param string $method The method to be used (defaults to GET)
  * @param array $params Additional params for the query
  * @param array $data Optional data to be sent
  * @return EActiveResourceResponse The response 
  */
 public function query($route, $method = 'GET', $params = array(), $data = null)
 {
     $this->beforeFind();
     $uri = $this->buildUri($route);
     if (!empty($params)) {
         $uri = $uri . '?' . http_build_query($params);
     }
     $request = new EActiveResourceRequest();
     $request->setUri($uri);
     $request->setMethod($method);
     $request->setData($data);
     return $this->getConnection()->query($request);
 }
 /**
  * Creates a new request, sends and receives the data.
  * @param string $uri The uri this request is sent to.
  * @param string $method The method (GET,PUT,POST,DELETE)
  * @param array $data The data to be sent as array
  * @return array The parsed response as PHP array
  */
 protected function sendRequest($uri, $method = EActiveResourceRequest::METHOD_GET, $data = null)
 {
     $request = new EActiveResourceRequest();
     /*
             if($data)
                 switch($this->getContentType())
                     {
                         case EActiveResourceRequest::APPLICATION_JSON:
     
                             $data= EActiveResourceParser::arrayToJSON($data);
                             $headers=array(
                             'Content-Length: '  .strlen($data),
                             'Content-Type: '    .$this->getContentType(),
                             'Accept: '          .$this->getAcceptType(),
                             );
                             break;
                         case EActiveResourceRequest::APPLICATION_XML:
                             $data=  EActiveResourceParser::arrayToXML($data);
                             $headers=array(
                             'Content-Length: '  .strlen($data),
                             'Content-Type: '    .$this->getContentType(),
                             'Accept: '          .$this->getAcceptType(),
                         );
                             break;
                         case EActiveResourceRequest::APPLICATION_FORM_URL_ENCODED:
                             $data=EActiveResourceParser::arrayToFormData($data);
                             $headers=array(
                             'Content-Length: '  .strlen($data),
                             'Content-Type: '    .$this->getContentType(),
                             'Accept: '          .$this->getAcceptType(),
                         );
                             break;
                     }
             else
                 $headers=array(
                             'Accept: '          .$this->getAcceptType(),
             );
     
     
             if($data)
                 Yii::trace('Sending '.$method.' request to '.$uri.' with content-type:'.$this->getContentType().', accept: '.$this->getAcceptType().' and data: '.$data.' with '.$headers[0],'ext.EActiveResource');
             else
                 Yii::trace('Sending '.$method.' request to '.$uri.' without data, accepting: '.$this->getAcceptType(),'ext.EActiveResource');
     */
     $headers = array('X-mediav-auth:' . $this->getMetaData()->mediavAuth, 'X-mediav-entity:' . $this->getMetaData()->mediavEnity, 'Host:' . $this->getMetaData()->mediavHost);
     $response = $request->run($uri, $method, $data, $headers);
     Yii::trace('The service responded with: ' . $response, 'ext.EActiveResource');
     //now build an array out of the response
     switch ($this->getAcceptType()) {
         case EActiveResourceRequest::APPLICATION_JSON:
             $parsedResponse = EActiveResourceParser::JSONToArray($response);
             return $parsedResponse;
             break;
         case EActiveResourceRequest::APPLICATION_XML:
             $parsedResponse = EActiveResourceParser::XMLToArray($response);
             return $parsedResponse;
             break;
     }
 }