class tripal_views_handler_filter_select_cvterm

  1. 2.x tripal_views/views/handlers/tripal_views_handler_filter_select_cvterm.inc tripal_views_handler_filter_select_cvterm
  2. 3.x tripal_chado_views/views/handlers/tripal_views_handler_filter_select_cvterm.inc tripal_views_handler_filter_select_cvterm
  3. 1.x tripal_views/views/handlers/tripal_views_handler_filter_select_cvterm.inc tripal_views_handler_filter_select_cvterm

This Handler provides a select list for the type field

NOTE: This handler only works when applied to the type_id field in the base_table of the view.

Hierarchy

Expanded class hierarchy of tripal_views_handler_filter_select_cvterm

Related topics

1 string reference to 'tripal_views_handler_filter_select_cvterm'
tripal_views_get_integration_array_for_chado_table in tripal_views/includes/tripal_views_integration.inc
Returns the array needed to integrate a given chado table with views

File

tripal_views/views/handlers/tripal_views_handler_filter_select_cvterm.inc, line 15
Contains tripal_views_handler_filter_select_cvterm

View source
class tripal_views_handler_filter_select_cvterm extends tripal_views_handler_filter_select_string {
  /**
   * {@inheritdoc}
   */

  /**
   * Provide the options used in the select list.
   * Override this function in extended handlers to easily change option list.
   *
   * @return
   *   An array of options where the key is the value of this field in the
   *   database
   */
  function get_select_options() {

    // If the admin has set the "Show All" option then we want to show all the
    // cvterms regardless of whether they are used in the base table or not.
    if (isset($this->options['show_all']) AND $this->options['show_all'] == TRUE) {

      // Get a list of cvs currently used.

      // If the filter is for a field in the cvterm table (weird, I know but
      // we can't assume that tripal admin won't do this) then we only need
      // to make one-hop to the cv table.
      if ($this->table == 'cvterm') {

        $return = $this->get_select_option_where($this->table);
        $where_clauses = $return['where_clauses'];
        $arguments = $return['arguments'];
        $base_where = '';
        if (!empty($where_clauses)) {
          $base_where = implode(' AND ', $where_clauses);
        }

        // Using a "Loose Index Scan" to get a list of all the cvs used
        // in the cvterm table (ie: all the cv's with at least one term).
        // See https://wiki.postgresql.org/wiki/Loose_indexscan
        $sql = "
          WITH RECURSIVE t AS (
            SELECT MIN(cv_id) AS col FROM {!table}
              " . ($base_where == '' ? '' : "WHERE " . $base_where) . "
            UNION ALL
            SELECT (SELECT MIN(cv_id) FROM {!table} WHERE cv_id > col " . ($base_where == '' ? '' : " AND " . $base_where) . ")
              FROM t WHERE col IS NOT NULL
          )
          SELECT cv_id, name
            FROM {cv}
            WHERE cv_id IN (SELECT col FROM t where col IS NOT NULL)
            ORDER BY cv.name ASC";
        $sql = format_string($sql, array('!table' => $this->table));
      }
      // Otherwise, (most often the case) we need to make two-hops
      // to the cv table through the cvterm table.
      else {

        // There are actually two sets of conditions we care about and of course
        // they are placed in different places in the query :p.
        // 1. Restrictions on the cvterm table. This lets users specify: only
        // show these exact types.
        $return = $this->get_select_option_where('cvterm');
        $where_clauses = $return['where_clauses'];
        $cvterm_args = $return['arguments'];
        $cvterm_where = '';
        if (!empty($where_clauses)) {
          $cvterm_where = implode(' AND ', $where_clauses);
        }
        // 2. Restrictions on the filter table Since those affect which types
        // have been used.
        $return = $this->get_select_option_where($this->table);
        $where_clauses = $return['where_clauses'];
        $base_args = $return['arguments'];
        $base_where = '';
        if (!empty($where_clauses)) {
          $base_where = implode(' AND ', $where_clauses);
        }
        // We only supply one set or arguments those so merge the two.
        $arguments = array_merge($cvterm_args, $base_args);

        // Using a "Loose Index Scan" to get a list of all the cvs used
        // in the table the drop-down filter is from.
        // See https://wiki.postgresql.org/wiki/Loose_indexscan
        $sql = "
          WITH RECURSIVE t AS (
            SELECT MIN(cvterm.cv_id) AS col
              FROM {!table} filter_table
              LEFT JOIN {cvterm} ON filter_table.!field=cvterm.cvterm_id
              " . ($base_where == '' ? '' : "WHERE " . $base_where) . "
            UNION ALL
            SELECT (
                SELECT MIN(cv_id)
                FROM {!table} filter_table
                LEFT JOIN {cvterm} ON filter_table.!field=cvterm.cvterm_id
                WHERE cv_id > col " . ($base_where == '' ? '' : " AND " . $base_where) . "
              )
              FROM t WHERE col IS NOT NULL
          )
          SELECT cvterm_id, name
            FROM {cvterm}
            WHERE cv_id IN (SELECT col FROM t where col IS NOT NULL) " . ($cvterm_where == '' ? '' : " AND " . $cvterm_where) . "
            ORDER BY cvterm.name ASC";
        $sql = format_string($sql, array('!table' => $this->table, '!field' => $this->field));
      }
      $resource = chado_query($sql, $arguments);

      // Now actually gerenate the select list
      // based on the results from the above query.
      $cvterms = array();
      foreach ($resource as $r) {
        $cvterms[$r->cvterm_id] = $r->name;
      }

    }
    // Otherwise, show the user the much smaller list of all cvterms used in
    // the base table.
    else {

      // There are actually two sets of conditions we care about and of course
      // they are placed in different places in the query :p.
      // 1. Restrictions on the cvterm table. This lets users specify: only
      // show these exact types.
      $return = $this->get_select_option_where('cvterm');
      $where_clauses = $return['where_clauses'];
      $cvterm_args = $return['arguments'];
      $cvterm_where = '';
      if (!empty($where_clauses)) {
        $cvterm_where = implode(' AND ', $where_clauses);
      }
      // 2. Restrictions on the filter table Since those affect which types
      // have been used.
      $return = $this->get_select_option_where($this->table);
      $where_clauses = $return['where_clauses'];
      $base_args = $return['arguments'];
      $base_where = '';
      if (!empty($where_clauses)) {
        $base_where = implode(' AND ', $where_clauses);
      }
      // We only supply one set or arguments those so merge the two.
      $arguments = array_merge($cvterm_args, $base_args);

      // Using a "Loose Index Scan" to get a list of all the cvterms used
      // in the base table. See https://wiki.postgresql.org/wiki/Loose_indexscan
      $sql = "
        WITH RECURSIVE t AS (
          SELECT MIN(!field) AS col FROM {!table}
            " . ($base_where == '' ? '' : "WHERE " . $base_where) . "
          UNION ALL
          SELECT (
            SELECT MIN(!field)
            FROM {!table}
            WHERE !field > col " . ($base_where == '' ? '' : " AND " . $base_where) . "
          )
          FROM t WHERE col IS NOT NULL
        )
        SELECT cvterm_id, name
          FROM {cvterm}
          WHERE cvterm_id IN (SELECT col FROM t where col IS NOT NULL) " . ($cvterm_where == '' ? '' : " AND " . $cvterm_where) . "
          ORDER BY cvterm.name ASC";
      $sql = format_string($sql, array('!table' => $this->table, '!field' => $this->field));

      $resource = chado_query($sql, $arguments);
      $cvterms = array();

      // Add an "- Any - " option to allow a type to not be set by default.
      if ($this->options['select_optional']) {
        $cvterms['All'] = '- Any -';
      }

      // Now actually gerenate the select list
      // based on the results from the above query.
      foreach ($resource as $r) {
        $cvterms[$r->cvterm_id] = $r->name;
      }
    }

    return $cvterms;

  }

  /**
   * For the SQL generating the options, determine the WHERE clauses
   *
   * @return
   *   An array of full qualified where clauses (ie: table.myfield = 'fred')
   */
  function get_select_option_where($table = NULL, $generic_placeholder = TRUE) {
    return parent::get_select_option_where($table, $generic_placeholder);
  }
  /*
    // build a where clause that will filter the list in the drop box
    // using fields that are not exposed and that are for the table
    // from whcih the values in the drop box will be slected and
    // we only want to use non-exposed fields because these are not
    // available to the user to edit--they're fixed.
    $filters = (is_array($this->view->filter)) ? $this->view->filter : array();
    foreach ($filters as $filter_name => $details) {
       // we only want to inclue non-exposed filters
       if ($details->options['exposed'] == FALSE) {
          $value = $details->value;
          if (is_array($details->value) AND isset($details->value['value'])) {
            $value = $details->value['value'];
          }

          $field = $details->field;
          if (($this->table == $this->view->base_table) AND ($details->field == 'type_id')) {
            $field = 'cvterm_id';
          }

          if (is_array($value)) {
            // we only want to filter on the table we're getting the list from
            if (strcmp($details->table, $this->table)==0 AND !empty($value)) {
              $where[] = "$field IN (" . implode(', ', $value) . ')';
            }
          }
          else {
            // we only want to filter on the table we're getting the list from
            if (strcmp($details->table, 'cvterm')==0 AND !empty($value)) {
              $where[] = "$field $details->operator " . $value;
            }
          }
       }
    }

    return $where;
  }
*/
  /**
   * {@inheritdoc}
   */
  function option_definition() {
    return parent::option_definition();
  }

  /**
   * {@inheritdoc}
   */
  function expose_form(&$form, &$form_state) {
    parent::expose_form($form, $form_state);
    return $form;
  }

  /**
   * {@inheritdoc}
   */
  function expose_submit($form, &$form_state) {
    parent::expose_submit($form, $form_state);
  }

  /**
   * {@inheritdoc}
   */
  function expose_options() {
    parent::expose_options();
  }

  /**
   * {@inheritdoc}
   */
  function value_form(&$form, &$form_state) {
    parent::value_form($form, $form_state);
  }

}

Members

Contains filters are case sensitive
Namesort descending Modifiers Type Description
tripal_views_handler_filter_select_cvterm::expose_form function Options form subform for exposed filter options. Overrides views_handler_filter::expose_form
tripal_views_handler_filter_select_cvterm::expose_options function Provide default options for exposed filters. Overrides views_handler_filter::expose_options
tripal_views_handler_filter_select_cvterm::expose_submit function Perform any necessary changes to the form exposes prior to storage. There is no need for this function to actually store the data. Overrides views_handler::expose_submit
tripal_views_handler_filter_select_cvterm::get_select_options function Provide the options used in the select list. Override this function in extended handlers to easily change option list. Overrides tripal_views_handler_filter_select_string::get_select_options
tripal_views_handler_filter_select_cvterm::get_select_option_where function For the SQL generating the options, determine the WHERE clauses Overrides tripal_views_handler_filter_select_string::get_select_option_where
tripal_views_handler_filter_select_cvterm::option_definition function Information about options for all kinds of purposes will be held here. @code 'option_name' => array( Overrides tripal_views_handler_filter_select_string::option_definition
tripal_views_handler_filter_select_cvterm::value_form function Provide a simple textfield for equality Overrides tripal_views_handler_filter_select_string::value_form
tripal_views_handler_filter_select_string::exposed_form function Render our chunk of the exposed filter form when selecting Overrides views_handler_filter::exposed_form
tripal_views_handler_filter_select_string::extra_options_form function Provide a form for setting options. Overrides views_handler::extra_options_form
tripal_views_handler_filter_select_string::extra_options_options function
tripal_views_handler_filter_select_string::extra_options_submit function Perform any necessary changes to the form values prior to storage. There is no need for this function to actually store the data. Overrides views_handler::extra_options_submit
tripal_views_handler_filter_select_string::has_extra_options function If a handler has 'extra options' it will get a little settings widget and another form called extra_options. Overrides views_handler::has_extra_options
tripal_views_handler_filter_select_string::init function Provide some extra help to get the operator/value easier to use. Overrides views_handler_filter::init
tripal_views_handler_filter_select_string::query function Add this filter to the query. Overrides views_handler_filter_string::query
views_handler::$table_alias public property The alias of the table of this handler which is used in the query.
views_handler::access function Check whether current user has access to this handler.
views_handler::broken function Determine if the handler is considered 'broken', meaning it's a a placeholder used when a handler can't be found.
views_handler::case_transform function Transform a string by a certain method.
views_handler::ensure_my_table function Ensure the main table for this handler is in the query. This is used a lot.
views_handler::exposed_submit function Submit the exposed handler form
views_handler::exposed_validate function Validate the exposed handler form
views_handler::extra_options function Provide defaults for the handler.
views_handler::extra_options_validate function Validate the options form.
views_handler::get_field function Shortcut to get a handler's raw field value.
views_handler::get_join function Get the join object that should be used for this handler.
views_handler::groupby_form function Provide a form for aggregation settings.
views_handler::groupby_form_submit function Perform any necessary changes to the form values prior to storage. There is no need for this function to actually store the data.
views_handler::is_exposed function Determine if this item is 'exposed', meaning it provides form elements to let users modify the view.
views_handler::needs_style_plugin function Determine if the argument needs a style plugin.
views_handler::placeholder function Provides a unique placeholders for handlers.
views_handler::post_execute function Run after the view is executed, before the result is cached.
views_handler::pre_query function Run before the view is built.
views_handler::sanitize_value function Sanitize the value for output.
views_handler::set_relationship function Called just prior to query(), this lets a handler set up any relationship it needs.
views_handler::show_expose_form function Shortcut to display the exposed options form.
views_handler::ui_name function Return a string representing this handler's name in the UI.
views_handler::use_group_by function Provides the handler some groupby.
views_handler::validate function Validates the handler against the complete View.
views_handler_filter::accept_exposed_input function Check to see if input from the exposed filters should change the behavior of this filter. Overrides views_handler::accept_exposed_input
views_handler_filter::build_group_form function Build the form to let users create the group of exposed filters. This form is displayed when users click on button 'Build group'
views_handler_filter::build_group_options function Provide default options for exposed filters.
views_handler_filter::build_group_submit function Save new group items, re-enumerates and remove groups marked to delete.
views_handler_filter::build_group_validate function Validate the build group options form.
views_handler_filter::can_build_group function Determine if a filter can be converted into a group. Only exposed filters with operators available can be converted into groups.
views_handler_filter::can_expose function Determine if a filter can be exposed. Overrides views_handler::can_expose
views_handler_filter::can_group function Can this filter be used in OR groups?
views_handler_filter::convert_exposed_input function
views_handler_filter::exposed_info function Tell the renderer about our exposed form. This only needs to be overridden for particularly complex forms. And maybe not even then. Overrides views_handler::exposed_info
views_handler_filter::exposed_translate function Make some translations to a form item to make it more suitable to exposing.
views_handler_filter::expose_validate function Validate the options form. Overrides views_handler::expose_validate
views_handler_filter::group_form function Build a form containing a group of operator | values to apply as a single filter.
views_handler_filter::group_multiple_exposed_input function Returns the options available for a grouped filter that users checkboxes as widget, and therefore has to be applied several times, one per item selected.
views_handler_filter::is_a_group function Returns TRUE if the exposed filter works like a grouped filter. Overrides views_handler::is_a_group
views_handler_filter::multiple_exposed_input function Returns TRUE if users can select multiple groups items of a grouped exposed filter. Overrides views_handler::multiple_exposed_input
views_handler_filter::operator_form function Options form subform for setting the operator.
views_handler_filter::operator_submit function Perform any necessary changes to the form values prior to storage. There is no need for this function to actually store the data.
views_handler_filter::operator_validate function Validate the operator form.
views_handler_filter::options_form function Provide the basic form which calls through to subforms. If overridden, it is best to call through to the parent, or to at least make sure all of the functions in this form are called. Overrides views_handler::options_form
views_handler_filter::options_submit function Simple submit handler Overrides views_handler::options_submit
views_handler_filter::options_validate function Simple validate handler Overrides views_handler::options_validate
views_handler_filter::prepare_filter_select_options function Sanitizes the HTML select element's options.
views_handler_filter::show_build_group_button function Shortcut to display the build_group/hide button.
views_handler_filter::show_build_group_form function Shortcut to display the exposed options form.
views_handler_filter::show_expose_button function Shortcut to display the expose/hide button. Overrides views_handler::show_expose_button
views_handler_filter::show_operator_form function Shortcut to display the operator form.
views_handler_filter::show_value_form function Shortcut to display the value form.
views_handler_filter::store_exposed_input function If set to remember exposed input in the session, store it there. Overrides views_handler::store_exposed_input
views_handler_filter::store_group_input function If set to remember exposed input in the session, store it there. This function is similar to store_exposed_input but modified to work properly when the filter is a group.
views_handler_filter::value_submit function Perform any necessary changes to the form values prior to storage. There is no need for this function to actually store the data.
views_handler_filter::value_validate function Validate the options form.
views_handler_filter_string::admin_summary function Display the filter on the administrative summary Overrides views_handler_filter::admin_summary
views_handler_filter_string::operator function
views_handler_filter_string::operators function This kind of construct makes it relatively easy for a child class to add or remove functionality by overriding this function and adding/removing items from this array.
views_handler_filter_string::operator_options function Build strings from the operators() for 'select' options Overrides views_handler_filter::operator_options
views_handler_filter_string::operator_values function
views_handler_filter_string::op_contains function
views_handler_filter_string::op_empty function
views_handler_filter_string::op_ends function
views_handler_filter_string::op_equal function
views_handler_filter_string::op_longer function
views_handler_filter_string::op_not function
views_handler_filter_string::op_not_ends function
views_handler_filter_string::op_not_starts function
views_handler_filter_string::op_regex function
views_handler_filter_string::op_shorter function
views_handler_filter_string::op_starts function
views_handler_filter_string::op_word function
views_object::construct function Views handlers use a special construct function so that we can more easily construct them with variable arguments.
views_object::destroy function
views_object::export_option function
views_object::export_options function
views_object::export_option_always function Always exports the option, regardless of the default value.
views_object::options Deprecated function Set default options on this object. Called by the constructor in a complex chain to deal with backward compatibility.
views_object::set_default_options function Set default options. For backward compatibility, it sends the options array; this is a feature that will likely disappear at some point.
views_object::set_definition function Let the handler know what its full definition is.
views_object::unpack_options function Unpack options over our existing defaults, drilling down into arrays so that defaults don't get totally blown away.
views_object::unpack_translatable function Unpack a single option definition.
views_object::unpack_translatables function Unpacks each handler to store translatable texts.
views_object::_set_option_defaults function