|
@@ -70,7 +70,8 @@ class remote__data extends WebServicesField {
|
|
|
'data_info' => array(
|
|
|
'query' => '',
|
|
|
'remote_site' => '',
|
|
|
- 'description' => '',
|
|
|
+ 'description' => '',
|
|
|
+ 'rd_field_name' => '',
|
|
|
),
|
|
|
);
|
|
|
// A boolean specifying that users should not be allowed to create
|
|
@@ -90,8 +91,9 @@ class remote__data extends WebServicesField {
|
|
|
public function load($entity) {
|
|
|
$site_id_ws = $this->instance['settings']['data_info']['remote_site'];
|
|
|
$query = $this->instance['settings']['data_info']['query'];
|
|
|
+ $rd_field_name = $this->instance['settings']['data_info']['rd_field_name'];
|
|
|
$options = array();
|
|
|
-
|
|
|
+ $field_name = $this->field['field_name'];
|
|
|
// Check for tripal tokens and replace if present.
|
|
|
$bundle_entity = tripal_load_bundle_entity(array('name' => $entity->bundle));
|
|
|
$query = tripal_replace_entity_tokens($query, $entity, $bundle_entity);
|
|
@@ -111,6 +113,11 @@ class remote__data extends WebServicesField {
|
|
|
//Make the call and pull the data down.
|
|
|
$data = drupal_http_request($full_url, $options);
|
|
|
|
|
|
+ //Check the returned data is not an error.
|
|
|
+ if(property_exists($data, 'error')){
|
|
|
+ watchdog('Tripal WS', '<pre>Web Services data unavailable because site is returning error: '. print_r($data->error, TRUE) .'</pre>');
|
|
|
+ $data = '';
|
|
|
+ }
|
|
|
if($data){
|
|
|
$data = drupal_json_decode($data->data);
|
|
|
//Check the returned data is not an error.
|
|
@@ -118,39 +125,99 @@ class remote__data extends WebServicesField {
|
|
|
watchdog('Tripal WS', '<pre>Web Services data unavailable because site is returning error: '. print_r($data['error'], TRUE) .'</pre>');
|
|
|
$data = '';
|
|
|
}
|
|
|
- //Check the returned data isn't empty.
|
|
|
- if(count($data['members']) >= 1){
|
|
|
- //If multiple records, if single follow @id and pull down data
|
|
|
- if(array_key_exists('value', $data)){
|
|
|
- $members = $data['value'][0]['members'];
|
|
|
- if($members){
|
|
|
- if(count($members) > 1){
|
|
|
- $field_name = $this->field['field_name'];
|
|
|
- $entity->{$field_name}['und'][0]['value'] = $data;
|
|
|
+
|
|
|
+ // Check if the returned results are paged, if so iterate through all pages.
|
|
|
+ //$paged_data = array();
|
|
|
+ if(array_key_exists('next', $data['view'])){
|
|
|
+ //First page of results.
|
|
|
+ foreach($data['members'] as $member){
|
|
|
+ $value = tripal_ws_remote_data_single_field_pull($rd_field_name, $member['@id']);
|
|
|
+ $entity->{$field_name}['und'][$member['label']]['value'] = $value;
|
|
|
+ $entity->{$field_name}['und'][$member['label']]['remote_entity'] = $member;
|
|
|
+ //array_push($paged_data, $member);
|
|
|
+ }
|
|
|
+ //'next' pages.
|
|
|
+ $next_page = $data['view']['next'];
|
|
|
+ while(!empty($next_page)){
|
|
|
+ $data = drupal_http_request($next_page, $options);
|
|
|
+ if(!empty($data)){
|
|
|
+ $data = drupal_json_decode($data->data);
|
|
|
+ foreach($data['members'] as $member){
|
|
|
+ $value = tripal_ws_remote_data_single_field_pull($rd_field_name, $member['@id']);
|
|
|
+ $entity->{$field_name}['und'][$member['label']]['value'] = $value;
|
|
|
+ $entity->{$field_name}['und'][$member['label']]['remote_entity'] = $member;
|
|
|
+ //array_push($paged_data, $member);
|
|
|
+ }
|
|
|
+ if(array_key_exists('next', $data['view'])){
|
|
|
+ $next_page = $data['view']['next'];
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ $next_page = NULL;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //'last' page.
|
|
|
+ $last_page = $data['view']['last'];
|
|
|
+ $data = drupal_http_request($last_page, $options);
|
|
|
+ if(!empty($data)){
|
|
|
+ $data = drupal_json_decode($data->data);
|
|
|
+ foreach($data['members'] as $member){
|
|
|
+ $value = tripal_ws_remote_data_single_field_pull($rd_field_name, $member['@id']);
|
|
|
+ $entity->{$field_name}['und'][$member['label']]['value'] = $value;
|
|
|
+ $entity->{$field_name}['und'][$member['label']]['remote_entity'] = $member;
|
|
|
+ //array_push($paged_data, $member);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ //Check the returned data isn't empty.
|
|
|
+ if(!empty($data['members'])){
|
|
|
+ //If multiple records, if single follow @id and pull down data
|
|
|
+ /*if(array_key_exists('value', $data)){
|
|
|
+ $members = $data['value'][0]['members'];
|
|
|
+ if($members){
|
|
|
+ if(count($members) > 1){
|
|
|
+ $data = $data;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ $single_record_url = $data['members'][0]['@id'];
|
|
|
+ $data = drupal_http_request($single_record_url, $options);
|
|
|
+ if(!empty($data)){
|
|
|
+ $data = drupal_json_decode($data->data);
|
|
|
+ if(array_key_exists('error', $data)){
|
|
|
+ watchdog('Tripal WS', '<pre>Web Services data unavailable because site is returning error: '. print_r($data['error'], TRUE) .'</pre>');
|
|
|
+ $data = '';
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
- else {
|
|
|
- $single_record_url = $data['members'][0]['@id'];
|
|
|
- $data = drupal_http_request($single_record_url, $options);
|
|
|
- $data = drupal_json_decode($data->data);
|
|
|
- if(array_key_exists('error', $data)){
|
|
|
- watchdog('Tripal WS', '<pre>Web Services data unavailable because site is returning error: '. print_r($data['error'], TRUE) .'</pre>');
|
|
|
- $data = '';
|
|
|
- }
|
|
|
+ }
|
|
|
+ else */
|
|
|
+ if(count($data['members']) > 1) {
|
|
|
+ foreach($data['members'] as $member){
|
|
|
+ $value = tripal_ws_remote_data_single_field_pull($rd_field_name, $member['@id']);
|
|
|
+ $entity->{$field_name}['und'][$member['label']]['value'] = $value;
|
|
|
+ $entity->{$field_name}['und'][$member['label']]['remote_entity'] = $member;
|
|
|
+ //array_push($paged_data, $member);
|
|
|
}
|
|
|
}
|
|
|
+ else {
|
|
|
+ $member = $data['members'][0];
|
|
|
+ $single_record_url = $member['@id'];
|
|
|
+ $value = tripal_ws_remote_data_single_field_pull($rd_field_name, $single_record_url);
|
|
|
+ if(!empty($data)){
|
|
|
+ $entity->{$field_name}['und'][$member['label']]['value'] = $value;
|
|
|
+ $entity->{$field_name}['und'][$member['label']]['remote_entity'] = $member;
|
|
|
+ if(array_key_exists('error', $data)){
|
|
|
+ watchdog('Tripal WS', '<pre>Web Services data unavailable because site is returning error: '. print_r($data['error'], TRUE) .'</pre>');
|
|
|
+ $data = '';
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
- else {
|
|
|
- $single_record_url = $data['members'][0]['@id'];
|
|
|
- $data = drupal_http_request($single_record_url, $options);
|
|
|
- $data = drupal_json_decode($data->data);
|
|
|
- if(array_key_exists('error', $data)){
|
|
|
- watchdog('Tripal WS', '<pre>Web Services data unavailable because site is returning error: '. print_r($data['error'], TRUE) .'</pre>');
|
|
|
- $data = '';
|
|
|
- }
|
|
|
- }
|
|
|
- $field_name = $this->field['field_name'];
|
|
|
- $entity->{$field_name}['und'][0]['value'] = $data;
|
|
|
}
|
|
|
+ $field_name = $this->field['field_name'];
|
|
|
+ $entity->{$field_name}['und'][0]['value'] = $data;
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
@@ -202,9 +269,16 @@ class remote__data extends WebServicesField {
|
|
|
'#description' => 'Build the query string that should be appended after the url. The tokens
|
|
|
listed below may be used in your query build.',
|
|
|
'#default_value' => $this->instance['settings']['data_info']['query'],
|
|
|
- '#rows' => 5
|
|
|
+ '#rows' => 5,
|
|
|
+ '#required' => TRUE
|
|
|
+ );
|
|
|
+ $element['data_info']['rd_field_name'] = array(
|
|
|
+ '#type' => 'textfield',
|
|
|
+ '#title' => 'Field',
|
|
|
+ '#description' => 'Name of the field you would like to display.',
|
|
|
+ '#default_value' => $this->instance['settings']['data_info']['rd_field_name'],
|
|
|
+ '#required' => TRUE
|
|
|
);
|
|
|
-
|
|
|
$element['data_info']['token_display']['tokens'] = array(
|
|
|
'#type' => 'hidden',
|
|
|
'#value' => serialize($tokens)
|
|
@@ -250,13 +324,6 @@ class remote__data extends WebServicesField {
|
|
|
return $element;
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * Ajax callback.
|
|
|
- */
|
|
|
- function tripal_ws_url_query_test_ajax($form, $form_state) {
|
|
|
- load();
|
|
|
- return $element['test_button']['data'];
|
|
|
- }
|
|
|
/**
|
|
|
*
|
|
|
* @param unknown $form
|