class date_handler_field_multiple in Date 7
Same name and namespace in other branches
- 6.2 date/date_handler_field_multiple.inc \date_handler_field_multiple
@file An extended subclass for field handling that adds multiple field grouping.
Fields that want multiple value grouping options in addition to basic field and formatter handling can extend this class.
Hierarchy
- class \views_object
- class \views_handler
- class \views_handler_field
- class \views_handler_field_field
- class \date_handler_field_multiple
- class \views_handler_field_field
- class \views_handler_field
- class \views_handler
Expanded class hierarchy of date_handler_field_multiple
1 string reference to 'date_handler_field_multiple'
- date_handler_fields in date_views/
date_views.module - Identify all fields in this view that use the CCK Date handler.
File
- date_views/
includes/ date_handler_field_multiple.inc, line 10 - An extended subclass for field handling that adds multiple field grouping.
View source
class date_handler_field_multiple extends views_handler_field_field {
function option_definition() {
$options = parent::option_definition();
$options['repeat'] = array(
'contains' => array(
'show_repeat_rule' => array(
'default' => '',
),
),
);
$options['multiple'] = array(
'contains' => array(
'multiple_to' => array(
'default' => '',
),
),
);
$options['fromto'] = array(
'contains' => array(
'fromto' => array(
'default' => 'both',
),
),
);
return $options;
}
/**
* Provide 'group multiple values' option,
* adapted to the needs of the Date module.
*/
function options_form(&$form, &$form_state) {
parent::options_form($form, $form_state);
unset($form['multiple']);
$field_name = $this->content_field_name;
$field = field_info_field($field_name);
$options = $this->options;
//$form += date_formatter_settings($form_state, $field, $options, TRUE);
$form['multiple']['#weight'] = 1;
$form['multiple']['group'] = array(
'#title' => t('Group multiple values'),
'#type' => 'checkbox',
'#default_value' => $options['multiple']['group'],
'#description' => t('If unchecked, each item in the field will create a new row, which may appear to cause duplicates. This setting is not compatible with click-sorting in table displays.'),
);
}
function pre_render($values) {
// If there are no values to render (displaying a summary, or query returned no results),
// or if this is not a grouped field, do nothing specific.
if (isset($this->view->build_info['summary']) || empty($values) || !$this->defer_query) {
return parent::pre_render($values);
}
$field_name = $this->content_field_name;
$field = field_info_field($field_name);
$db_info = date_api_database_info($field);
$options = $this->options;
$this->view->date_info->date_handler_fields = date_handler_fields($this->view);
// Build the list of vids to retrieve.
// TODO: try fetching from cache_content first ??
$vids = array();
$this->field_values = array();
foreach ($values as $result) {
if (isset($result->{$this->field_alias})) {
$vids[] = $result->{$this->field_alias};
}
}
// List columns to retrieve.
$alias = content_views_tablename($field);
// Prefix aliases with '_' to avoid clashing with field columns names.
$query_columns = array(
'node.vid AS _vid',
"{$alias}.delta as _delta",
// nid is needed to generate the links for 'link to node' option.
'node.nid AS _nid',
);
// The actual field columns.
foreach ($db_info['columns'] as $column => $attributes) {
$query_columns[] = "{$alias}.{$attributes['column']} AS {$column}";
$query_fields[] = "{$alias}.{$attributes['column']}";
}
// Retrieve all values, we limit them in date_prepare_node(),
// a function that is used both by the handler and by the
// node theme to take advantage of formatter settings.
$where = array(
'1',
);
$query = 'SELECT ' . implode(', ', $query_columns) . ' FROM {' . $db_info['table'] . "} {$alias}" . " LEFT JOIN {node} node ON node.vid = {$alias}.vid" . " WHERE node.vid IN (" . implode(',', $vids) . ') AND ' . implode(' OR ', $where) . " ORDER BY node.nid ASC, {$alias}.delta ASC";
$result = db_query($query);
while ($item = db_fetch_array($result)) {
// Clean up the $item from vid and delta. We keep nid for now.
$vid = $item['_vid'];
unset($item['_vid']);
$delta = !empty($item['_delta']) ? $item['_delta'] : 0;
$item['#delta'] = $item['_delta'];
unset($item['_delta']);
$this->field_values[$vid][$delta] = $item;
}
}
function render($values) {
// By this time $values is a pseudo node that will be passed
// to the theme. Add view information to it.
$values->date_info = !empty($this->view->date_info) ? $this->view->date_info : new stdClass();
$values->date_info->date_handler_fields = date_handler_fields($this->view);
// Add the formatter settings to the pseudo node.
$values->date_info->formatter_settings = $this->options;
$values->date_info->aliases = $this->aliases;
// If this is not a grouped field, use content_handler_field::render().
if (!$this->defer_query) {
return parent::render($values);
}
$field_name = $this->content_field_name;
$field = field_info_field($field_name);
$options = $this->options;
$vid = $values->{$this->field_alias};
if (isset($this->field_values[$vid])) {
// Build a pseudo-node from the retrieved values.
$node = clone $values;
// content_format and formatters will need a 'type' .
$node->type = $values->{$this->aliases['type']};
$node->nid = $values->{$this->aliases['nid']};
$node->vid = $values->{$this->aliases['vid']};
$items = $this->field_values[$vid];
$node->{$field_name} = $items;
// Some formatters need to behave differently depending on the build_mode
// (for instance: preview), so we provide one.
// TODO This has changed in D7.
$node->build_mode = NODE_BUILD_NORMAL;
// Render items.
$formatter_name = $options['format'];
if ($items && ($formatter = _content_get_formatter($formatter_name, $field['type']))) {
$rendered = array();
// Multiple values formatter.
$output = content_format($field, $items, $formatter_name, $values);
if (!empty($output)) {
$rendered[] = $this
->render_link($output, (object) array(
'nid' => $this->aliases['nid'],
));
}
}
if (count($rendered) > 1) {
// TODO: could we use generic field display ?
return theme('field_view_multiple_field', $rendered, $field, $values);
}
elseif ($rendered) {
return $rendered[0];
}
}
return '';
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
date_handler_field_multiple:: |
function |
Provide 'group multiple values' option,
adapted to the needs of the Date module. Overrides views_handler_field_field:: |
||
date_handler_field_multiple:: |
function |
Information about options for all kinds of purposes will be held here. Overrides views_handler_field_field:: |
||
date_handler_field_multiple:: |
function |
Run before any fields are rendered. Overrides views_handler_field:: |
||
date_handler_field_multiple:: |
function |
Render the field. Overrides views_handler_field:: |
||
views_handler:: |
public | property | The type of the handler, for example filter/footer/field. | |
views_handler:: |
public | property | Where the $query object will reside:. | 1 |
views_handler:: |
public | property | The actual field in the database table, maybe different on other kind of query plugins/special handlers. | |
views_handler:: |
public | property | The relationship used for this field. | |
views_handler:: |
public | property | The alias of the table of this handler which is used in the query. | |
views_handler:: |
public | property |
The top object of a view. Overrides views_object:: |
|
views_handler:: |
public | function | Take input from exposed handlers and assign to this handler, if necessary. | 1 |
views_handler:: |
public | function | Determine if the handler is considered 'broken'. | 6 |
views_handler:: |
public | function | Determine if a handler can be exposed. | 2 |
views_handler:: |
public | function | Transform a string by a certain method. | |
views_handler:: |
public | function | Ensure the main table for this handler is in the query. This is used a lot. | 8 |
views_handler:: |
public | function | Render our chunk of the exposed handler form when selecting. | 1 |
views_handler:: |
public | function | Get information about the exposed form for the form renderer. | 1 |
views_handler:: |
public | function | Submit the exposed handler form. | |
views_handler:: |
public | function | Validate the exposed handler form. | 4 |
views_handler:: |
public | function | Form for exposed handler options. | 2 |
views_handler:: |
public | function | Set new exposed option defaults when exposed setting is flipped on. | 2 |
views_handler:: |
public | 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:: |
public | function | Validate the options form. | 1 |
views_handler:: |
public | function | Provide defaults for the handler. | |
views_handler:: |
public | function | Provide a form for setting options. | 1 |
views_handler:: |
public | 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:: |
public | function | Validate the options form. | |
views_handler:: |
public | function | Shortcut to get a handler's raw field value. | |
views_handler:: |
public | function | Get the join object that should be used for this handler. | |
views_handler:: |
public | function | If a handler has 'extra options' it will get a little settings widget and another form called extra_options. | 1 |
views_handler:: |
public | function | Returns TRUE if the exposed filter works like a grouped filter. | 1 |
views_handler:: |
public | function | Determine if this item is 'exposed', meaning it provides form elements to let users modify the view. | |
views_handler:: |
public | function | Define if the exposed input has to be submitted multiple times. This is TRUE when exposed filters grouped are using checkboxes as widgets. | 1 |
views_handler:: |
public | function | Determine if the argument needs a style plugin. | 1 |
views_handler:: |
public | function | Validate the options form. | 4 |
views_handler:: |
public | function | Provides a unique placeholders for handlers. | |
views_handler:: |
public | function | Run before the view is built. | 1 |
views_handler:: |
public | function | Sanitize the value for output. | |
views_handler:: |
public | function | Called just prior to query(), this lets a handler set up any relationship it needs. | |
views_handler:: |
public | function | Shortcut to display the expose/hide button. | 2 |
views_handler:: |
public | function | Shortcut to display the exposed options form. | |
views_handler:: |
public | function | If set to remember exposed input in the session, store it there. | 1 |
views_handler:: |
public | function | Provides the handler some groupby. | 2 |
views_handler:: |
public | function | Validates the handler against the complete View. | 1 |
views_handler_field:: |
public | property | Stores additional fields which get added to the query. The generated aliases are stored in $aliases. | |
views_handler_field:: |
public | property | ||
views_handler_field:: |
public | property | ||
views_handler_field:: |
protected | property | Keeps track of the last render index. | |
views_handler_field:: |
public | property | The field value prior to any rewriting. | |
views_handler_field:: |
public | function | Add 'additional' fields to the query. | |
views_handler_field:: |
public | function |
Provide extra data to the administration form Overrides views_handler:: |
|
views_handler_field:: |
public | function | Render a field using advanced settings. | |
views_handler_field:: |
public | function | Determine if this field can allow advanced rendering. | 1 |
views_handler_field:: |
public | function |
Construct a new field handler. Overrides views_object:: |
17 |
views_handler_field:: |
public | function | Return the class of the field. | |
views_handler_field:: |
public | function | Return the class of the field's label. | |
views_handler_field:: |
public | function | Return an HTML element for the label based upon the field's element type. | |
views_handler_field:: |
public | function | Return an HTML element based upon the field's element type. | 2 |
views_handler_field:: |
public | function | Return the class of the field's wrapper. | |
views_handler_field:: |
public | function | Return an HTML element for the wrapper based upon the field's element type. | |
views_handler_field:: |
public | function | Provide a list of elements valid for field HTML. | |
views_handler_field:: |
public | function | Get the 'render' tokens to use for advanced rendering. | |
views_handler_field:: |
public | function | Recursive function to add replacements for nested query string parameters. | |
views_handler_field:: |
public | function | Checks if a field value is empty. | |
views_handler_field:: |
public | function | Get this field's label. | |
views_handler_field:: |
public | function |
Performs some cleanup tasks on the options array before saving it. Overrides views_handler:: |
1 |
views_handler_field:: |
public | function | Render this field as altered text, from a fieldset set by the user. | |
views_handler_field:: |
public | function | Render this field as a link, with info from a fieldset set by the user. | |
views_handler_field:: |
public | function | Perform an advanced text render for the item. | |
views_handler_field:: |
public | function | Trim the field down to the specified length. | |
views_handler_field:: |
public | function | Call out to the theme() function. | |
views_handler_field:: |
public | function | Build a list of suitable theme functions for this view. | |
views_handler_field:: |
public | function | Replace a value with tokens from the last field. | |
views_handler_field:: |
public | function |
Return a string representing this handler's name in the UI. Overrides views_handler:: |
1 |
views_handler_field:: |
public | function | Determines if this field will be available as an option to group the result by in the style settings. | |
views_handler_field_field:: |
public | property | A shortcut for $view->base_table. | |
views_handler_field_field:: |
public | property | Store the field information. | |
views_handler_field_field:: |
public | property | Store the field instance. | |
views_handler_field_field:: |
public | property | An array to store field renderable arrays for use by render_items. | |
views_handler_field_field:: |
public | property | Does the rendered fields get limited. | |
views_handler_field_field:: |
public | property | Does the field supports multiple field values. | |
views_handler_field_field:: |
public | function |
Check whether current user has access to this handler. Overrides views_handler:: |
|
views_handler_field_field:: |
public | function | Determine if the field table should be added to the query. | |
views_handler_field_field:: |
public | function |
Add any special tokens this field might use for itself. Overrides views_handler_field:: |
|
views_handler_field_field:: |
public | function |
Called to determine what to tell the clicksorter. Overrides views_handler_field:: |
|
views_handler_field_field:: |
public | function |
Determine if this field is click sortable. Overrides views_handler_field:: |
|
views_handler_field_field:: |
public | function |
Document any special tokens this field might use for itself. Overrides views_handler_field:: |
|
views_handler_field_field:: |
public | function | Return the language code of the language the field should be displayed in, according to the settings. | |
views_handler_field_field:: |
public | function | Set the base_table and base_table_alias. | |
views_handler_field_field:: |
public | function | ||
views_handler_field_field:: |
public | function |
Get the value that's supposed to be rendered. Overrides views_handler_field:: |
|
views_handler_field_field:: |
public | function |
Extend the groupby form with group columns. Overrides views_handler:: |
|
views_handler_field_field:: |
public | 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:: |
|
views_handler_field_field:: |
public | function |
Init the handler with necessary data. Overrides views_handler_field:: |
|
views_handler_field_field:: |
public | function | Provide options for multiple value fields. | |
views_handler_field_field:: |
public | function |
Load the entities for all fields that are about to be displayed. Overrides views_handler:: |
|
views_handler_field_field:: |
public | function |
Called to add the field to a query. Overrides views_handler_field:: |
|
views_handler_field_field:: |
public | function | ||
views_handler_field_field:: |
public | function | Render all items in this field together. | |
views_handler_field_field:: |
public | function | Return an array of items for the field. | |
views_object:: |
public | property | Handler's definition. | |
views_object:: |
public | property | Except for displays, options for the object will be held here. | 1 |
views_object:: |
function | Collect this handler's option definition and alter them, ready for use. | ||
views_object:: |
public | function | Destructor. | 2 |
views_object:: |
public | function | 1 | |
views_object:: |
public | function | ||
views_object:: |
public | function | Always exports the option, regardless of the default value. | |
views_object:: |
public | function | Set default options on this object. | 1 |
views_object:: |
public | function | Set default options. | |
views_object:: |
public | function | Let the handler know what its full definition is. | |
views_object:: |
public | function | Unpack options over our existing defaults, drilling down into arrays so that defaults don't get totally blown away. | |
views_object:: |
public | function | Unpack a single option definition. | |
views_object:: |
public | function | Unpacks each handler to store translatable texts. | |
views_object:: |
public | function |