views_handler_filter_tag_font_tid.inc in @font-your-face 7
Same filename and directory in other branches
Views handler.
File
views/views_handler_filter_tag_font_tid.incView source
<?php
/**
* @file
* Views handler.
*/
/**
* Filter by tag id.
* Largely copied from views_handler_filter_term_node_tid.inc
*/
class views_handler_filter_tag_font_tid extends views_handler_filter_many_to_one {
function has_extra_options() {
return TRUE;
}
function get_value_options() {
}
function option_definition() {
$options = parent::option_definition();
$options['type'] = array(
'default' => 'textfield',
);
return $options;
}
// option_definition
function extra_options_form(&$form, &$form_state) {
$form['type'] = array(
'#type' => 'radios',
'#title' => t('Selection type'),
'#options' => array(
'select' => t('Dropdown'),
'textfield' => t('Autocomplete'),
),
'#default_value' => $this->options['type'],
);
}
// extra_options_form
function value_form(&$form, &$form_state) {
if ($this->options['type'] == 'textfield') {
$default = '';
if ($this->value) {
$result = db_select('fontyourface_tag', 't')
->condition('t.tid', $this->value, 'IN')
->execute();
foreach ($result as $tag) {
if ($default) {
$default .= ', ';
}
// if
$default .= $tag->name;
}
// foreach
}
// if
$form['value'] = array(
'#title' => t('Select tags'),
'#type' => 'textfield',
'#default_value' => $default,
);
}
else {
$options = array();
$result = db_query("SELECT t.* FROM {fontyourface_tag} t ORDER BY t.name");
while ($tag = $result
->fetchObject()) {
$options[$tag->tid] = $tag->name;
}
// while
$default_value = (array) $this->value;
if (!empty($form_state['exposed'])) {
$identifier = $this->options['expose']['identifier'];
if (!empty($this->options['expose']['reduce'])) {
$options = $this
->reduce_value_options($options);
if (empty($this->options['expose']['single']) && !empty($this->options['expose']['optional'])) {
$default_value = array();
}
// if
}
// if
if (!empty($this->options['expose']['single'])) {
if (!empty($this->options['expose']['optional']) && (empty($default_value) || !empty($this->options['expose']['reduce']))) {
$default_value = 'All';
}
elseif (empty($default_value)) {
$keys = array_keys($options);
$default_value = array_shift($keys);
}
else {
$copy = $default_value;
$default_value = array_shift($copy);
}
// else
}
// if
}
// if
$form['value'] = array(
'#type' => 'select',
'#title' => t('Select tags'),
'#multiple' => TRUE,
'#options' => $options,
'#size' => min(9, count($options)),
'#default_value' => $default_value,
);
if (!empty($form_state['exposed']) && !isset($form_state['input'][$identifier])) {
$form_state['input'][$identifier] = $default_value;
}
// if
}
// else
if (empty($form_state['exposed'])) {
$this->helper
->options_form($form, $form_state);
}
// if
}
// value_form
function value_validate($form, &$form_state) {
if ($this->options['type'] != 'textfield') {
return;
}
// if
$values = drupal_explode_tags($form_state['values']['options']['value']);
$tids = $this
->validate_tag_strings($form['value'], $values);
if ($tids) {
$form_state['values']['options']['value'] = $tids;
}
// if
}
// value_validate
function accept_exposed_input($input) {
if (empty($this->options['exposed'])) {
return TRUE;
}
// If it's optional and there's no value don't bother filtering.
if ($this->options['expose']['optional'] && empty($this->validated_exposed_input)) {
return FALSE;
}
$rc = parent::accept_exposed_input($input);
if ($rc) {
// If we have previously validated input, override.
if (isset($this->validated_exposed_input)) {
$this->value = $this->validated_exposed_input;
}
// if
}
// if
return $rc;
}
// value_validate
function exposed_validate(&$form, &$form_state) {
if (empty($this->options['exposed'])) {
return;
}
// if
$identifier = $this->options['expose']['identifier'];
if ($this->options['type'] != 'textfield') {
if ($form_state['values'][$identifier] != 'All') {
$this->validated_exposed_input = (array) $form_state['values'][$identifier];
}
// if
return;
}
// if
if (empty($this->options['expose']['identifier'])) {
return;
}
// if
$values = drupal_explode_tags($form_state['values'][$identifier]);
$tids = $this
->validate_tag_strings($form[$identifier], $values);
if ($tids) {
$this->validated_exposed_input = $tids;
}
// if
}
// exposed_validate
/**
* Validate the user string. Since this can come from either the form
* or the exposed filter, this is abstracted out a bit so it can
* handle the multiple input sources.
*/
function validate_tag_strings(&$form, $values) {
if (empty($values)) {
return array();
}
// if
$tids = array();
$args = array();
$results = array();
foreach ($values as $value) {
$missing[strtolower($value)] = TRUE;
$args[] = $value;
}
// foreach
if (!$args) {
return;
}
// if
$result = db_select('fontyourface_tag', 't')
->condition('t.name', $args, 'IN')
->execute();
foreach ($result as $tag) {
unset($missing[strtolower($tag->name)]);
$tids[] = $tag->tid;
}
// foreach
if ($missing) {
form_error($form, format_plural(count($missing), 'Unable to find tag: @tags', 'Unable to find tags: @tags', array(
'@tags' => implode(', ', array_keys($missing)),
)));
}
// if
return $tids;
}
// validate_tag_strings
function value_submit($form, &$form_state) {
}
function expose_form_right(&$form, &$form_state) {
parent::expose_form_right($form, $form_state);
if ($this->options['type'] != 'select') {
unset($form['expose']['reduce']);
}
// if
}
// expose_form_right
function admin_summary() {
$this->value_options = array();
if ($this->value) {
$result = db_select('fontyourface_tag', 't')
->condition('t.tid', $this->value, 'IN')
->execute();
foreach ($result as $tag) {
$this->value_options[$tag->tid] = $tag->name;
}
// foreach
}
// if
return parent::admin_summary();
}
}
// views_handler_filter_tag_font_tid
Classes
Name![]() |
Description |
---|---|
views_handler_filter_tag_font_tid | Filter by tag id. Largely copied from views_handler_filter_term_node_tid.inc |