Example #1
0
 /**
  * Calls a Lingotek API method.
  *
  * @return mixed
  *   On success, a stdClass object of the returned response data, FALSE on error.
  */
 public function request($method, $parameters = array(), $request_method = 'POST', $credentials = NULL)
 {
     global $user;
     LingotekLog::trace('<h2>@method</h2> (trace)', array('@method' => $method));
     $response_data = FALSE;
     // Every v4 API request needs to have the externalID parameter present.
     // Defaults the externalId to the lingotek_login_id, unless externalId is passed as a parameter
     if (!isset($parameters['externalId'])) {
         $parameters['externalId'] = variable_get('lingotek_login_id', '');
     }
     module_load_include('php', 'lingotek', 'lib/oauth-php/library/OAuthStore');
     module_load_include('php', 'lingotek', 'lib/oauth-php/library/LingotekOAuthRequester');
     $credentials = is_null($credentials) ? array('consumer_key' => variable_get('lingotek_oauth_consumer_id', ''), 'consumer_secret' => variable_get('lingotek_oauth_consumer_secret', '')) : $credentials;
     $timer_name = $method . '-' . microtime(TRUE);
     timer_start($timer_name);
     $result = NULL;
     $response = NULL;
     $api_url = $this->api_url . '/' . $method;
     try {
         OAuthStore::instance('2Leg', $credentials);
         $request = @new LingotekOAuthRequester($api_url, $request_method, $parameters);
         // There is an error right here.  The new LingotekOAuthRequester throws it, because it barfs on $parameters
         // The error:  Warning: rawurlencode() expects parameter 1 to be string, array given in LingotekOAuthRequest->urlencode() (line 619 of .../modules/lingotek/lib/oauth-php/library/LingotekOAuthRequest.php).
         // The thing is, if you encode the params, they just get translated back to an array by the object.  They have some type of error internal to the object code that is handling things wrong.
         // I couldn't find a way to get around this without changing the library.  For now, I am just supressing the warning w/ and @ sign.
         $result = $request->doRequest(0, array(CURLOPT_SSL_VERIFYPEER => FALSE));
         $response = json_decode($result['body']);
     } catch (OAuthException2 $e) {
         LingotekLog::error('Failed OAuth request. <br />Method: @method <br />Message: @message 
   <br />API URL: @url
   <br />Parameters: !params.
   <br />Response: !response', array('@method' => $method, '@message' => $e->getMessage(), '@url' => $api_url, '!params' => $parameters, '!response' => $response), 'api');
     }
     $timer_results = timer_stop($timer_name);
     // cleanup parameters so that the logs aren't too long
     if (isset($parameters['fprmFileContents'])) {
         $parameters['fprmFileContents'] = 'removed for brevity';
     }
     if (isset($parameters['secondaryFprmFileContents'])) {
         $parameters['secondaryFprmFileContents'] = 'removed for brevity';
     }
     $message_params = array('@url' => $api_url, '@method' => $method, '!params' => $parameters, '!request' => $request, '!response' => $method == 'downloadDocument' && !isset($response->results) ? "Zipped document" : $response, '@response_time' => number_format($timer_results['time']) . ' ms');
     /*
      Exceptions:
      downloadDocument - Returns misc data (no $response->results), and should always be sent back.
      assignProjectManager - Returns fails/falses if the person is already a community manager (which should be ignored)
     */
     if ($method == 'downloadDocument') {
         // Exception downloadDocument
         LingotekLog::api('<h1>@method</h1> <strong>API URL:</strong> @url
     <br /><strong>Response Time:</strong> @response_time<br /><strong>Request Params</strong>: !params<br /><strong>Response:</strong> !response<br/><strong>Full Request:</strong> !request', $message_params);
         $response_data = !empty($result) ? $result['body'] : "";
     } elseif (!is_null($response) && $response->results == self::RESPONSE_STATUS_SUCCESS || $method == 'assignProjectManager') {
         // SUCCESS
         LingotekLog::api('<h1>@method</h1> <strong>API URL:</strong> @url
     <br /><strong>Response Time:</strong> @response_time<br /><strong>Request Params</strong>: !params<br /><strong>Response:</strong> !response<br/><strong>Full Request:</strong> !request', $message_params);
         $response_data = $response;
     } else {
         // ERROR
         LingotekLog::error('<h1>@method (Failed)</h1> <strong>API URL:</strong> @url
     <br /><strong>Response Time:</strong> @response_time<br /><strong>Request Params</strong>: !params<br /><strong>Response:</strong> !response<br/><strong>Full Request:</strong> !request', $message_params, 'api');
         $response_data = $response;
     }
     return $response_data;
 }
Example #2
0
 /**
  * Get Account Status
  * NOTE:  You shouldnt need to call this directly.  Its called in the constructor.
  * Request:  https://LINGOTEK_BILLING_SERVER/billing/account.json?community=B2MMD3X5&external_id=community_admin&oauth_key=28c279fa-28dc-452e-93af-68d194a2c366&oauth_secret=0e999486-3b4d-47e4-ba9a-d0f3f0bbda73
  * Response:  {"state":"active","plan":{"trial_ends_at":0,"state":"active","activated_at":1355267936,"type":"cosmopolitan_monthly","languages_allowed":2,"language_cost_per_period_in_cents":14900}}
  * Will return FALSE or a json decoded object.
  */
 function getAccountStatus()
 {
     $result = FALSE;
     $parameters = array('community' => variable_get('lingotek_community_identifier', ''), 'external_id' => variable_get('lingotek_login_id', ''), 'oauth_key' => variable_get('lingotek_oauth_consumer_id', ''), 'oauth_secret' => variable_get('lingotek_oauth_consumer_secret', ''));
     if (!empty($parameters['community']) && !empty($parameters['external_id']) && !empty($parameters['oauth_key']) && !empty($parameters['oauth_secret'])) {
         $timer_name = 'GET -' . microtime(TRUE);
         timer_start($timer_name);
         $api_url = LINGOTEK_BILLING_SERVER;
         $ch = curl_init($api_url . '?' . http_build_query($parameters));
         curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
         //curl_setopt( $ch, CURLINFO_HEADER_OUT, TRUE );
         $response = curl_exec($ch);
         $info = curl_getinfo($ch);
         curl_close($ch);
         $response_json = json_decode($response);
         //debug( $response ); //debug( $info );
         $timer_results = timer_stop($timer_name);
         $message_params = array('@url' => $api_url, '@method' => 'GET account (billing API)', '!params' => $parameters, '!response' => $response_json, '@response_time' => number_format($timer_results['time']) . ' ms');
         if (isset($response_json) && $info['http_code'] == 200) {
             // Did we get valid json data back?  If not, $json is NULL.
             //debug ( $json );
             LingotekLog::api('<h1>@method</h1>
     <strong>API URL:</strong> @url
     <br /><strong>Response Time:</strong> @response_time<br /><strong>Request Params</strong>: !params<br /><strong>Response:</strong> !response', $message_params);
             $response_data = $response;
             $result = TRUE;
             // Not Found - {"state":"not_found"} - Account isn't setup yet.  The state after autoprovisioning a community, but before setting up your billing account.
             if ($response_json->state == self::NOT_FOUND) {
                 $this->setStatus(self::NOT_FOUND);
                 $this->setPlan(self::NONE);
             } elseif ($response_json->state == self::ACTIVE) {
                 $this->setStatus(self::ACTIVE);
                 variable_set('lingotek_account_status', self::ACTIVE);
                 if (is_object($response_json->plan)) {
                     $this->setPlan($response_json->plan);
                 }
                 // END:  Plan
                 menu_rebuild();
             }
             // END  Active
         } else {
             LingotekLog::error('<h1>@method (Failed)</h1>
     <strong>API URL:</strong> @url
     <br /><strong>Response Time:</strong> @response_time<br /><strong>Request Params</strong>: !params<br /><strong>Response:</strong> !response<br/><strong>Full Request:</strong> !request', $message_params, 'api');
         }
     }
     // END:  has credentials
     return $result;
 }