function _oauthconnector_fetch_field in OAuth Connector 7
Same name and namespace in other branches
- 6 oauthconnector.module \_oauthconnector_fetch_field()
2 calls to _oauthconnector_fetch_field()
- oauthconnector_oauth_common_authorized in ./
oauthconnector.module - Implements hook_oauth_common_authorized().
- _oauthconnector_info in ./
oauthconnector.module - Information callback
File
- ./
oauthconnector.module, line 663 - OAuth Connector module
Code
function _oauthconnector_fetch_field($field, $provider, $access_token) {
static $external_field_cache = array();
$field = $provider->mapping['fields'][$field];
if (!isset($access_token->key)) {
return FALSE;
}
if (isset($external_field_cache[$access_token->key][$field['method post']][$field['resource']][$field['field']])) {
return $external_field_cache[$access_token->key][$field['method post']][$field['resource']][$field['field']];
}
if (!isset($external_field_cache[$access_token->key])) {
$external_field_cache[$access_token->key] = array();
}
if (!isset($external_field_cache[$access_token->key][$field['method post']])) {
$external_field_cache[$access_token->key][$field['method post']] = array();
}
$context = array(
'field' => $field,
'provider' => $provider,
'access_token' => $access_token,
);
if (!isset($external_field_cache[$access_token->key][$field['method post']][$field['resource']])) {
$info = array();
$skip_normal_call = FALSE;
/**
* Give other modules a change to do their own call.
*/
drupal_alter('oauthconnector_fetch_field_endpoint_call', $info, $skip_normal_call, $context);
if (!$skip_normal_call) {
$request_method = empty($field['method post']) ? 'GET' : 'POST';
$org_info = (array) oauthconnector_endpoint_call($field['resource'], array(), $provider, $access_token, $request_method, $provider->mapping['format']);
$info = $info + $org_info;
// merge without overwrite.
}
$external_field_cache[$access_token->key][$field['method post']][$field['resource']] = $info;
}
else {
$info = $external_field_cache[$access_token->key][$field['method post']][$field['resource']];
}
$response = FALSE;
if (!empty($info)) {
if (!empty($field['querypath']) && module_exists('querypath')) {
//TODO: Perhaps cache this QueryPath object as well?
$response = _oauthconnector_object_to_qp(qp('<?xml version="1.0"?><reponse/>'), $info)
->find($field['field'])
->eq(0)
->text();
}
elseif (!empty($info[$field['field']])) {
$response = $info[$field['field']];
}
elseif (strstr($field['field'], '.') !== FALSE) {
$parts = explode('.', $field['field']);
$temp_info = $info;
foreach ($parts as $part) {
if (isset($temp_info[$part])) {
$temp_info = $temp_info[$part];
}
else {
break;
}
}
if (!empty($temp_info) && is_string($temp_info)) {
$response = $temp_info;
}
}
}
// Give other modules a change to sanatize or change a value.
drupal_alter('oauthconnector_fetch_field_value', $response, $info, $context);
$external_field_cache[$access_token->key][$field['method post']][$field['resource']][$field['field']] = $response;
return $response;
}