|
@@ -349,13 +349,45 @@ function tripal_ws_services_v0_1_get_content_type($api_url, &$response, $ws_path
|
|
|
}
|
|
|
// Convert the filters to their field names
|
|
|
$new_params = array();
|
|
|
+ $order = array();
|
|
|
+ $order_dir = array();
|
|
|
+ $URL_add = array();
|
|
|
foreach ($params as $param => $value) {
|
|
|
+ $URL_add[] = "$param=$value";
|
|
|
|
|
|
// Ignore non filter parameters
|
|
|
if ($param == 'page' or $param == 'limit') {
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
+ // Handle order separately
|
|
|
+ if ($param == 'order') {
|
|
|
+ $temp = explode(',', $value);
|
|
|
+ foreach ($temp as $key) {
|
|
|
+ $matches = array();
|
|
|
+ $dir = 'ASC';
|
|
|
+ // The user can provide a direction by separating the field key and the
|
|
|
+ // direction with a '|' character.
|
|
|
+ if (preg_match('/^(.*)\|(.*)$/', $key, $matches)) {
|
|
|
+ $key = $matches[1];
|
|
|
+ if ($matches[2] == 'ASC' or $matches[2] == 'DESC') {
|
|
|
+ $dir = $matches[2];
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ // TODO: handle error of providing an incorrect direction.
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (array_key_exists($key, $field_mapping)) {
|
|
|
+ $order[$field_mapping[$key]] = $key;
|
|
|
+ $order_dir[] = $dir;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ // TODO: handle error of providing a non existing field name.
|
|
|
+ }
|
|
|
+ }
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
// Break apart any operators
|
|
|
$key = $param;
|
|
|
$op = '=';
|
|
@@ -442,41 +474,49 @@ function tripal_ws_services_v0_1_get_content_type($api_url, &$response, $ws_path
|
|
|
$page = array_key_exists('page', $params) ? $params['page'] : 1;
|
|
|
if ($num_records > 0) {
|
|
|
$response['view'] = array(
|
|
|
- '@id' => $URL . "?page=$page&limit=$limit",
|
|
|
+ '@id' => $URL . '?' . implode('&', array_merge($URL_add, array("page=$page", "limit=$limit"))),
|
|
|
'@type' => 'PartialCollectionView',
|
|
|
- 'first' => $URL . "?page=1&limit=$limit",
|
|
|
- 'last' => $URL . "?page=$total_pages&limit=$limit",
|
|
|
+ 'first' => $URL . '?' . implode('&', array_merge($URL_add, array("page=1", "limit=$limit"))),
|
|
|
+ 'last' => $URL . '?' . implode('&', array_merge($URL_add, array("page=$total_pages", "limit=$limit"))),
|
|
|
);
|
|
|
$prev = $page - 1;
|
|
|
$next = $page + 1;
|
|
|
if ($prev > 0) {
|
|
|
- $response['view']['previous'] = $URL . "?page=$prev&limit=$limit";
|
|
|
+ $response['view']['previous'] = $URL . '?' . implode('&', array_merge($URL_add, array("page=$prev", "limit=$limit")));
|
|
|
}
|
|
|
if ($next < $total_pages) {
|
|
|
- $response['view']['next'] = $URL . "?page=$next&limit=$limit";
|
|
|
+ $response['view']['next'] = $URL . '?' . implode('&', array_merge($URL_add, array("page=$next", "limit=$limit")));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // Now perform the query.
|
|
|
+ // Set the query order
|
|
|
+ $order_keys = array_keys($order);
|
|
|
+ for($i = 0; $i < count($order_keys); $i++) {
|
|
|
+ $query->fieldOrderBy($order_keys[$i], $order[$order_keys[$i]], $order_dir[$i]);
|
|
|
+ }
|
|
|
+
|
|
|
+ // Set the query range
|
|
|
$start = ($page - 1) * $limit;
|
|
|
$query->range($start, $limit);
|
|
|
+
|
|
|
+ // Now perform the query.
|
|
|
$results = $query->execute();
|
|
|
|
|
|
// Iterate through the entities and add them to the list.
|
|
|
$i = 0;
|
|
|
foreach ($results['TripalEntity'] as $entity_id => $stub) {
|
|
|
- $vocabulary = '';
|
|
|
- $term_name = '';
|
|
|
-
|
|
|
- // We don't need all of the attached fields for an entity so, we'll
|
|
|
- // not use the entity_load() function. Instead just pull it from the
|
|
|
- // database table.
|
|
|
- $query = db_select('tripal_entity', 'TE');
|
|
|
- $query->join('tripal_term', 'TT', 'TE.term_id = TT.id');
|
|
|
- $query->fields('TE');
|
|
|
- $query->fields('TT', array('name'));
|
|
|
- $query->condition('TE.id', $entity_id);
|
|
|
- $entity = $query->execute()->fetchObject();
|
|
|
+ $vocabulary = '';
|
|
|
+ $term_name = '';
|
|
|
+
|
|
|
+ // We don't need all of the attached fields for an entity so, we'll
|
|
|
+ // not use the entity_load() function. Instead just pull it from the
|
|
|
+ // database table.
|
|
|
+ $query = db_select('tripal_entity', 'TE');
|
|
|
+ $query->join('tripal_term', 'TT', 'TE.term_id = TT.id');
|
|
|
+ $query->fields('TE');
|
|
|
+ $query->fields('TT', array('name'));
|
|
|
+ $query->condition('TE.id', $entity_id);
|
|
|
+ $entity = $query->execute()->fetchObject();
|
|
|
|
|
|
//$entity = tripal_load_entity('TripalEntity', array($entity->id));
|
|
|
$response['member'][] = array(
|