public function tripal_views_query::add_orderby

3.x tripal_views_query.inc public tripal_views_query::add_orderby($table, $field_name = NULL, $order = 'ASC', $alias = '', $params = array())

Overrides add_orderby().

File

tripal/tripal_views_query.inc, line 139

Class

tripal_views_query

Code

public function add_orderby($table, $field_name = NULL, $order = 'ASC', $alias = '', $params = array()) {
  if ($field_name) {
    // If we already have an orderBy for this field then remove it so
    // we can reset it.
    foreach ($this->order as $index => $order_details) {
      if ($order_details['field'] == $field_name) {
        $this->order[$index]['direction'] = $order;
        unset($this->order[$index]);
      }
    }
    $this->order[] = array(
      'field' => $field_name,
      'direction' => strtoupper($order)
    );

    // If the field_name comes to us with a period in it then it means that
    // we need to separate the field name from sub-element names.
    $matches = array();
    if (preg_match('/^(.+?)\.(.*)$/', $field_name, $matches)) {
      $field_name = $matches[1];
      $element_name = $matches[2];
      $field = field_info_field($field_name);
      $instance = field_info_instance('TripalEntity', $field_name, $this->query->entityConditions['bundle']['value']);
      $element_name = $instance['settings']['term_vocabulary'] . ':' . $instance['settings']['term_accession'] . ',' . $element_name;
      $this->query->fieldOrderBy($field_name, $element_name, $order);

    }
    else {
      $instance = field_info_instance('TripalEntity', $field_name, $this->query->entityConditions['bundle']['value']);
      $field_term = $instance['settings']['term_vocabulary'] . ':' . $instance['settings']['term_accession'];
      $this->query->fieldOrderBy($field_name, $field_term, $order);
    }
  }
}