class tripal_views_handler_filter_select_string
- 2.x tripal_views/views/handlers/tripal_views_handler_filter_select_string.inc tripal_views_handler_filter_select_string
- 3.x tripal_chado_views/views/handlers/tripal_views_handler_filter_select_string.inc tripal_views_handler_filter_select_string
- 1.x tripal_views/views/handlers/tripal_views_handler_filter_select_string.inc tripal_views_handler_filter_select_string
@file Purpose: This Handler provides a generic select list for any chado field that is a string The select list includes all distinct values for that field.
Hierarchy
- class \views_object
- class \views_handler
Expanded class hierarchy of tripal_views_handler_filter_select_string
Related topics
1 string reference to 'tripal_views_handler_filter_select_string'
- tripal_views_views_handlers in tripal_views/
tripal_views.views.inc - Implements hook_views_handlers()
File
- tripal_views/
views/ handlers/ tripal_views_handler_filter_select_string.inc, line 11 - Purpose: This Handler provides a generic select list for any chado field that is a string The select list includes all distinct values for that field.
View source
class tripal_views_handler_filter_select_string extends chado_views_handler_filter_string {
function options_form(&$form, &$form_state) {
parent::options_form($form, $form_state);
$form['values_form_type'] = array(
'#type' => 'radios',
'#title' => t('Filter Type'),
'#options' => array(
'textfield' => 'Text Field',
'select' => 'Drop-Down Box',
),
'#default_value' => ($this->options['values_form_type']) ? $this->options['values_form_type'] : 'select',
);
$form['multiple'] = array(
'#type' => 'checkbox',
'#title' => t('Select Multiple'),
'#description' => t('Allows more then one option to be selected.'),
'#default_value' => (isset($this->options['multiple'])) ? $this->options['multiple'] : FALSE,
);
$form['optional'] = array(
'#type' => 'checkbox',
'#title' => t('Optional'),
'#description' => t('Adds --Any-- to the available options.'),
'#default_value' => (isset($this->options['optional'])) ? $this->options['optional'] : TRUE,
);
$form['max_length'] = array(
'#type' => 'textfield',
'#title' => t('Max Width'),
'#description' => t('Specify the maximum width of the select box'),
'#default_value' => (isset($this->options['max_length'])) ? $this->options['max_length'] : 40,
);
$form['note'] = array(
'#type' => 'markup',
'#value' => t('<strong><font color="red">Note:</font></strong> If another filter exists for the same table then ' .
'the values shown in the drop box will only include those from rows that are not filtered.'),
);
}
/**
* Defines the value field in both the views filter options form
* and the exposed form
*/
function value_form(&$form, &$form_state) {
parent::value_form($form, $form_state);
if (preg_match('/textfield/', $this->options['values_form_type'])) {
$form['value'] = array(
'#type' => 'textfield',
'#title' => t('%label', array('%label' => $this->options['label'])),
'#default_value' => $this->value,
);
}
else {
// 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.
$where = '';
$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) {
// we only want to filter on the table we're getting the list from
if (strcmp($details->table, $this->table) == 0) {
$where .= "$details->field $details->operator " . $details->value['value'];
$where .= ' AND ';
}
}
}
if ($where) {
$where = "WHERE $where";
$where = substr($where, 0, -5); # remove the final ' AND '
}
// get the values from the table
$sql = "SELECT $this->real_field FROM {$this->table} $where ORDER BY $this->field ASC";
$results = chado_query($sql);
// Build the select box options
$max_length = $this->options['max_length'];
if (!$max_length) {
$max_length = 40;
}
$options = array();
if ($this->options['optional']) {
//$options['<select '.$this->table.'>'] = '--None--';
$options['All'] = '--Any--';
}
while ($r = db_fetch_object($results)) {
if (drupal_strlen($r->{$this->field}) > $max_length) {
$options[$r->{$this->field}] = drupal_substr($r->{$this->field}, 0, $max_length) . '...';
}
else {
$options[$r->{$this->field}] = $r->{$this->field};
}
}
//Select List
$form['value'] = array(
'#type' => 'select',
'#title' => t('%label', array('%label' => $this->options['label'])),
'#options' => $options,
'#default_value' => $this->value,
);
if ($this->options['multiple']) {
$form['value']['#multiple'] = TRUE;
}
}
}
/**
* Ensures the select list gets rendered when the filter is exposed
*/
function exposed_form(&$form, &$form_state) {
if (empty($this->options['exposed'])) {
return;
}
$value = $this->options['expose']['identifier'];
$this->value_form($form, $form_state);
$form[$value] = $form['value'];
if (isset($form[$value]['#title']) && !empty($form[$value]['#type']) && $form[$value]['#type'] != 'checkbox') {
unset($form[$value]['#title']);
}
$this->exposed_translate($form[$value], 'value');
if (!empty($form['#type']) && ($form['#type'] == 'checkboxes' || ($form['#type'] == 'select' && !empty($form['#multiple'])))) {
unset($form[$value]['#default_value']);
}
if (!empty($form['#type']) && $form['#type'] == 'select' && empty($form['#multiple'])) {
$form[$value]['#default_value'] = 'All';
}
if ($value != 'value') {
unset($form['value']);
}
}
/**
* Adds this filter to the where clause of the views query
*/
function query() {
// make optional
// if it is not set or empty then don't restrict the query
if (!$this->value) {
return;
}
$this->ensure_my_table();
$table = $this->query->get_table_info($this->table);
if (preg_match('/aggregator/', $table['join']->definition['handler'])) {
$this->aggregated = TRUE;
}
else {
$this->aggregated = FALSE;
}
// filter the aggregates
if ($this->options['agg']['aggregates_with']) {
$this->query_restrict_curr_table_records();
}
// filter the base table
if ($this->options['agg']['records_with']) {
$this->query_restrict_base_records();
}
}
/**
* This function alters the query by adding the appropriate WHERE
* to filter the base table to only those with the value in the aggregate array.
*
* Note: this function is called only from query()
*/
function query_restrict_base_records() {
if (!$this->aggregated) {
// Not Aggregated ---------------
$this->ensure_my_table();
$field = "$this->table_alias.$this->real_field";
$upper = $this->case_transform();
if ($this->options['multiple'] AND is_array($this->value)) {
// Remove any if it's there
unset($this->value['All']);
if (sizeof($this->value)) {
$holders = array();
foreach ($this->value as $v) {
if (preg_match('/^[\d\.]+$/', $v)) {
$holders[] = '%f';
}
else {
$holders[] = "'%s'";
}
}
$where = "$field IN (" . implode(", ", $holders) . ")";
$this->query->add_where($this->options['group'], $where, $this->value);
}
}
else {
// Deal with All/Any as value
if (preg_match('/All/', $this->value)) {
// Don't do anything
}
else {
$info = $this->operators();
if (!empty($info[$this->operator]['method'])) {
$this->{$info[$this->operator]['method']}($field, $upper);
}
}
}
}
else {
// Is Aggregated ----------------
$this->ensure_my_table();
$field = "$this->table_alias.$this->real_field";
$upper = $this->case_transform();
if ($this->options['multiple'] AND is_array($this->value)) {
// Remove any if it's there
unset($this->value['All']);
if (sizeof($this->value) > 1) {
$holders = array();
foreach ($this->value as $v) {
$holders[] = "'%s'";
}
$where = $field . ' && ARRAY[' . implode(", ", $holders) . ']';
$this->query->add_where($this->options['group'], $where, $this->value);
}
elseif (sizeof($this->value) == 1) {
$where = "'%s' = ANY($field)";
$this->query->add_where($this->options['group'], $where, array_pop($this->value));
}
}
else {
// Deal with All/Any as value
if (preg_match('/All/', $this->value)) {
// Don't do anything
}
else {
$where = "'%s' = ANY($field)";
$this->query->add_where($this->options['group'], $where, $this->value);
}
}
}
}
/**
* This function alters the query by adding the appropriate WHERE
* to filter the aggregates shown based on the value. Doesn't affect
* the number of base table records.
*
* Note: this function is called only from query()
*/
function query_restrict_curr_table_records() {
if (!$this->aggregated) {
// Not Aggregated ---------------
// Warn the admin/user that they have selected that the aggregates should be filtered
// on a field that isn't aggregated...
watchdog(
'tripal_views',
'You have chosen to filter the aggregates shown for %table %field
in %view; however, that field is not aggregated (ie: it is part of the base table
or is a 1:1 relationship to the base table)',
array(
'%field' => $this->field,
'%table' => $this->table,
'%view' => $this->view->name
),
WATCHDOG_WARNING
);
// Do nothing!
}
else {
// Is Aggregated ----------------
$this->ensure_my_table();
$field = "$this->table_alias.$this->real_field";
$upper = $this->case_transform();
if ($this->options['multiple'] AND is_array($this->value)) {
// Remove any if it's there
unset($this->value['All']);
if (sizeof($this->value) > 1) {
$holders = array();
foreach ($this->value as $v) {
$holders[] = "'%s'";
}
$where = $field . ' IN (' . implode(", ", $holders) . ')';
$where = vsprintf($where, $this->value);
// Add the where to the chado aggregated join object for this table
// then the views_handler_join_chado_aggregator will add this to the WHERE
// clause of the sub-query generating the aggregated listing
$this->query->table_queue[$this->table]['join']->filter[] = $where;
}
elseif (sizeof($this->value) == 1) {
$where = "$field = '%s'";
$where = vsprintf($where, $this->value);
// Add the where to the chado aggregated join object for this table
// then the views_handler_join_chado_aggregator will add this to the WHERE
// clause of the sub-query generating the aggregated listing
$this->query->table_queue[$this->table]['join']->filter[] = $where;
}
}
else {
// Deal with All/Any as value
if (preg_match('/All/', $this->value)) {
// Don't do anything
}
else {
$where = "'%s' = ANY($field)";
$this->query->add_where($this->options['group'], $where, $this->value);
}
}
}
}
}
Members
Name | Modifiers | Type | Description |
---|---|---|---|
chado_views_handler_filter_string:: |
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. Overrides views_handler_filter_string:: |
|
tripal_views_handler_filter_select_string:: |
function |
Ensures the select list gets rendered when the filter is exposed Overrides views_handler_filter:: |
|
tripal_views_handler_filter_select_string:: |
function |
Defines the options form (form available to admin when they add a field to a view) Overrides chado_views_handler_filter_string:: |
|
tripal_views_handler_filter_select_string:: |
function |
Adds this filter to the where clause of the views query Overrides chado_views_handler_filter_string:: |
|
tripal_views_handler_filter_select_string:: |
function | This function alters the query by adding the appropriate WHERE to filter the base table to only those with the value in the aggregate array. | |
tripal_views_handler_filter_select_string:: |
function | This function alters the query by adding the appropriate WHERE to filter the aggregates shown based on the value. Doesn't affect the number of base table records. | |
tripal_views_handler_filter_select_string:: |
function |
Defines the value field in both the views filter options form
and the exposed form Overrides views_handler_filter_string:: |
|
views_handler:: |
function | Check whether current user has access to this handler. | |
views_handler:: |
function | Determine if the handler is considered 'broken', meaning it's a a placeholder used when a handler can't be found. | |
views_handler:: |
function | Ensure the main table for this handler is in the query. This is used a lot. | |
views_handler:: |
function | Submit the exposed filter form | |
views_handler:: |
function | Validate the exposed filter form | |
views_handler:: |
function | Provide defaults for the handler. | |
views_handler:: |
function | Provide a form for setting options. | |
views_handler:: |
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:: |
function | Validate the options form. | |
views_handler:: |
function | Get the join object that should be used for this handler. | |
views_handler:: |
function | If a handler has 'extra options' it will get a little settings widget and another form called extra_options. | |
views_handler:: |
function | Determine if this item is 'exposed', meaning it provides form elements to let users modify the view. | |
views_handler:: |
function | Determine if the argument needs a style plugin. | |
views_handler:: |
function | Run before the view is built. | |
views_handler:: |
function | Called just prior to query(), this lets a handler set up any relationship it needs. | |
views_handler:: |
function | Return a string representing this handler's name in the UI. | |
views_handler:: |
function | Validates the handler against the complete View. | |
views_handler_filter:: |
function |
Check to see if input from the exposed filters should change
the behavior of this filter. Overrides views_handler:: |
|
views_handler_filter:: |
function |
Determine if a filter can be exposed. Overrides views_handler:: |
|
views_handler_filter:: |
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:: |
|
views_handler_filter:: |
function | Make some translations to a form item to make it more suitable to exposing. | |
views_handler_filter:: |
function | Overridable form for exposed filter options. | |
views_handler_filter:: |
function | Handle the 'left' side fo the exposed options form. | |
views_handler_filter:: |
function | Handle the 'right' side fo the exposed options form. | |
views_handler_filter:: |
function |
Provide default options for exposed filters. Overrides views_handler:: |
|
views_handler_filter:: |
function | Perform any necessary changes to the form exposes prior to storage. There is no need for this function to actually store the data. | |
views_handler_filter:: |
function | Validate the options form. | |
views_handler_filter:: |
function |
Provide some extra help to get the operator/value easier to use. Overrides views_handler:: |
|
views_handler_filter:: |
function | Provide a form for setting the operator. | |
views_handler_filter:: |
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:: |
function | Validate the operator form. | |
views_handler_filter:: |
function |
Simple submit handler Overrides views_handler:: |
|
views_handler_filter:: |
function |
Simple validate handler Overrides views_handler:: |
|
views_handler_filter:: |
function | Shortcut to display the expose/hide button. | |
views_handler_filter:: |
function | Shortcut to display the exposed options form. | |
views_handler_filter:: |
function | Shortcut to display the operator form. | |
views_handler_filter:: |
function | Shortcut to display the value form. | |
views_handler_filter:: |
function |
If set to remember exposed input in the session, store it there. Overrides views_handler:: |
|
views_handler_filter:: |
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:: |
function | Validate the options form. | |
views_handler_filter_string:: |
function |
Display the filter on the administrative summary Overrides views_handler_filter:: |
|
views_handler_filter_string:: |
function | ||
views_handler_filter_string:: |
function |
Build strings from the operators() for 'select' options Overrides views_handler_filter:: |
|
views_handler_filter_string:: |
function | ||
views_handler_filter_string:: |
function |
Information about options for all kinds of purposes will be held here. Overrides views_handler_filter:: |
|
views_handler_filter_string:: |
function | ||
views_handler_filter_string:: |
function | ||
views_handler_filter_string:: |
function | ||
views_handler_filter_string:: |
function | ||
views_handler_filter_string:: |
function | ||
views_handler_filter_string:: |
function | ||
views_handler_filter_string:: |
function | ||
views_handler_filter_string:: |
function | ||
views_handler_filter_string:: |
function | ||
views_object:: |
function | Views handlers use a special construct function so that we can more easily construct them with variable arguments. | |
views_object:: |
function | ||
views_object:: |
function | Set default options on this object. Called by the constructor in a complex chain to deal with backward compatibility. | |
views_object:: |
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:: |
function | Let the handler know what its full definition is. | |
views_object:: |
function | Unpack options over our existing defaults, drilling down into arrays so that defaults don't get totally blown away. | |
views_object:: |
function |