protected function TMGMTGoogleTranslatorPluginController::doRequest in TMGMT Translator Google 7
Local method to do request to Google Translate service.
Parameters
TMGMTTranslator $translator: The translator entity to get the settings from.
string $action: Action to be performed [translate, languages, detect]
array $query: (Optional) Additional query params to be passed into the request.
array $options: (Optional) Additional options that will be passed into drupal_http_request().
Return value
array object Unserialized JSON response from Google.
Throws
- Invalid action provided
 - Unable to connect to the Google Service
 - Error returned by the Google Service
 
2 calls to TMGMTGoogleTranslatorPluginController::doRequest()
- TMGMTGoogleTranslatorPluginController::getSupportedRemoteLanguages in ./
tmgmt_google.plugin.inc  - Overrides TMGMTDefaultTranslatorPluginController::getSupportedRemoteLanguages().
 - TMGMTGoogleTranslatorPluginController::googleRequestTranslation in ./
tmgmt_google.plugin.inc  - Helper method to do translation request.
 
File
- ./
tmgmt_google.plugin.inc, line 218  - Provides Google Translator plugin controller.
 
Class
- TMGMTGoogleTranslatorPluginController
 - Google translator plugin controller.
 
Code
protected function doRequest(TMGMTTranslator $translator, $action, array $query = array(), array $options = array()) {
  if (!in_array($action, $this->availableActions)) {
    throw new TMGMTGoogleException('Invalid action requested: @action', array(
      '@action' => $action,
    ));
  }
  // Translate action is requested without this argument.
  if ($action == 'translate') {
    $action = '';
  }
  $query['key'] = $translator
    ->getSetting('api_key');
  $q = NULL;
  // If we have q param for translation as an array, we have to process it
  // in different way as does url() as Google does not accept typical
  // q[0] & q[1] ... syntax.
  if (isset($query[$this->qParamName]) && is_array($query[$this->qParamName])) {
    $q = $query[$this->qParamName];
    unset($query[$this->qParamName]);
  }
  $url = url($this->translatorUrl . '/' . $action, array(
    'query' => $query,
  ));
  // Append q params to the url.
  if (!empty($q)) {
    foreach ($q as $source_text) {
      $url .= "&{$this->qParamName}=" . str_replace('%2F', '/', rawurlencode($source_text));
    }
  }
  $response = drupal_http_request($url, $options);
  if ($response->code != 200) {
    throw new TMGMTGoogleException('Unable to connect to Google Translate service due to following error: @error at @url', array(
      '@error' => $response->error,
      '@url' => $url,
    ));
  }
  // Process the JSON result into array.
  $response = drupal_json_decode($response->data);
  // If we do not have data - we got error.
  if (!isset($response['data'])) {
    throw new TMGMTGoogleException('Google Translate service returned following error: @error', array(
      '@error' => $response['error']['message'],
    ));
  }
  return $response;
}