class views_handler_field_date
- 3.x handlers/views_handler_field_date.inc views_handler_field_date
- 2.x handlers/views_handler_field_date.inc views_handler_field_date
A handler to provide proper displays for dates.
Hierarchy
- class \views_object
- class \views_handler
- class \views_handler_field
- class \views_handler_field_date
- class \views_handler_field
- class \views_handler
Expanded class hierarchy of views_handler_field_date
Related topics
10 string references to 'views_handler_field_date'
- aggregator_views_data in modules/
aggregator.views.inc - Implements hook_views_data().
- comment_views_data in modules/
comment.views.inc - hook_views_data in ./
views.api.php - Describes data tables (or the equivalent) to Views.
- node_views_data in modules/
node.views.inc - Implements hook_views_data().
- statistics_views_data in modules/
statistics.views.inc - Implements hook_views_data().
File
- handlers/
views_handler_field_date.inc, line 13 - Definition of views_handler_field_date.
View source
class views_handler_field_date extends views_handler_field {
function option_definition() {
$options = parent::option_definition();
$options['date_format'] = array('default' => 'small');
$options['custom_date_format'] = array('default' => '');
$options['second_date_format_custom'] = array('default' => '');
$options['second_date_format'] = array('default' => 'small');
$options['timezone'] = array('default' => '');
return $options;
}
function options_form(&$form, &$form_state) {
$date_formats = array();
$date_types = system_get_date_types();
foreach ($date_types as $key => $value) {
$date_formats[$value['type']] = t('@date_format format', array('@date_format' => $value['title'])) . ': ' . format_date(REQUEST_TIME, $value['type']);
}
$form['date_format'] = array(
'#type' => 'select',
'#title' => t('Date format'),
'#options' => $date_formats + array(
'custom' => t('Custom'),
'raw time ago' => t('Time ago'),
'time ago' => t('Time ago (with "ago" appended)'),
'today time ago' => t('Time ago (with "ago" appended) for today\'s date, but not for other dates'),
'raw time hence' => t('Time hence'),
'time hence' => t('Time hence (with "hence" appended)'),
'raw time span' => t('Time span (future dates have "-" prepended)'),
'inverse time span' => t('Time span (past dates have "-" prepended)'),
'time span' => t('Time span (with "ago/hence" appended)'),
),
'#default_value' => isset($this->options['date_format']) ? $this->options['date_format'] : 'small',
);
$form['custom_date_format'] = array(
'#type' => 'textfield',
'#title' => t('Custom date format'),
'#description' => t('If "Custom", see the <a href="@url" target="_blank">PHP manual</a> for date formats. Otherwise, enter the number of different time units to display, which defaults to 2.', array('@url' => 'http://php.net/manual/function.date.php')),
'#default_value' => isset($this->options['custom_date_format']) ? $this->options['custom_date_format'] : '',
'#dependency' => array('edit-options-date-format' => array('custom', 'raw time ago', 'time ago', 'today time ago', 'raw time hence', 'time hence', 'raw time span', 'time span', 'raw time span', 'inverse time span', 'time span')),
);
$form['second_date_format'] = array(
'#type' => 'select',
'#title' => t('Second date format'),
'#options' => $date_formats + array(
'custom' => t('Custom'),
),
'#description' => t('The date format which will be used for rendering dates other than today.'),
'#default_value' => isset($this->options['second_date_format']) ? $this->options['second_date_format'] : 'small',
'#dependency' => array('edit-options-date-format' => array('today time ago')),
);
$form['second_date_format_custom'] = array(
'#type' => 'textfield',
'#title' => t('Custom date format of second date'),
'#description' => t('If "Custom" is selected in "Second date format", see the <a href="@url" target="_blank">PHP manual</a> for date formats. Otherwise, enter the number of different time units to display, which defaults to 2.', array('@url' => 'http://php.net/manual/function.date.php')),
'#default_value' => isset($this->options['second_date_format_custom']) ? $this->options['second_date_format_custom'] : '',
// We have to use states instead of ctools dependency because dependency
// doesn't handle multiple conditions.
'#states' => array(
'visible' => array(
'#edit-options-date-format' => array('value' => 'today time ago'),
'#edit-options-second-date-format' => array('value' => 'custom'),
),
),
// We have to use ctools dependency too because states doesn't add the
// correct left margin to the element's wrapper.
'#dependency' => array(
// This condition is handled by form API's states.
// 'edit-options-date-format' => array('today time ago'),
'edit-options-second-date-format' => array('custom'),
),
);
$form['timezone'] = array(
'#type' => 'select',
'#title' => t('Timezone'),
'#description' => t('Timezone to be used for date output.'),
'#options' => array('' => t('- Default site/user timezone -')) + system_time_zones(FALSE),
'#default_value' => $this->options['timezone'],
'#dependency' => array('edit-options-date-format' => array_merge(array('custom'), array_keys($date_formats))),
);
parent::options_form($form, $form_state);
}
function render($values) {
$value = $this->get_value($values);
$format = $this->options['date_format'];
if (in_array($format, array('custom', 'raw time ago', 'time ago', 'today time ago', 'raw time hence', 'time hence', 'raw time span', 'time span', 'raw time span', 'inverse time span', 'time span'))) {
$custom_format = $this->options['custom_date_format'];
}
if ($value) {
$timezone = !empty($this->options['timezone']) ? $this->options['timezone'] : NULL;
$time_diff = REQUEST_TIME - $value; // will be positive for a datetime in the past (ago), and negative for a datetime in the future (hence)
switch ($format) {
case 'raw time ago':
return format_interval($time_diff, is_numeric($custom_format) ? $custom_format : 2);
case 'time ago':
return t('%time ago', array('%time' => format_interval($time_diff, is_numeric($custom_format) ? $custom_format : 2)));
case 'today time ago':
$second_format = $this->options['second_date_format'];
$second_custom_format = $this->options['second_date_format_custom'];
if (format_date(REQUEST_TIME, 'custom', 'Y-m-d', $timezone) == format_date($value, 'custom', 'Y-m-d', $timezone)) {
return t('%time ago', array('%time' => format_interval($time_diff, is_numeric($custom_format) ? $custom_format : 2)));
}
elseif ($second_format == 'custom') {
if ($second_custom_format == 'r') {
return format_date($value, $second_format, $second_custom_format, $timezone, 'en');
}
return format_date($value, $second_format, $second_custom_format, $timezone);
}
else {
return format_date($value, $this->options['second_date_format'], '', $timezone);
}
case 'raw time hence':
return format_interval(-$time_diff, is_numeric($custom_format) ? $custom_format : 2);
case 'time hence':
return t('%time hence', array('%time' => format_interval(-$time_diff, is_numeric($custom_format) ? $custom_format : 2)));
case 'raw time span':
return ($time_diff < 0 ? '-' : '') . format_interval(abs($time_diff), is_numeric($custom_format) ? $custom_format : 2);
case 'inverse time span':
return ($time_diff > 0 ? '-' : '') . format_interval(abs($time_diff), is_numeric($custom_format) ? $custom_format : 2);
case 'time span':
return t(($time_diff < 0 ? '%time hence' : '%time ago'), array('%time' => format_interval(abs($time_diff), is_numeric($custom_format) ? $custom_format : 2)));
case 'custom':
if ($custom_format == 'r') {
return format_date($value, $format, $custom_format, $timezone, 'en');
}
return format_date($value, $format, $custom_format, $timezone);
default:
return format_date($value, $format, '', $timezone);
}
}
}
}
Members
Name | Modifiers | Type | Description |
---|---|---|---|
views_handler_field_date:: |
function |
Information about options for all kinds of purposes will be held here.
@code
'option_name' => array( Overrides views_handler_field:: |
|
views_handler_field_date:: |
function |
Default options form that provides the label widget that all fields
should have. Overrides views_handler_field:: |
|
views_handler_field_date:: |
function |
Render the field. Overrides views_handler_field:: |
|
views_handler_field:: |
function |
Construct a new field handler. Overrides views_object:: |
|
views_handler_field:: |
function | Determine if this field can allow advanced rendering. | |
views_handler_field:: |
function |
init the handler with necessary data. Overrides views_handler:: |
|
views_handler_field:: |
function | Called to add the field to a query. | |
views_handler_field:: |
function | Add 'additional' fields to the query. | |
views_handler_field:: |
function | Called to determine what to tell the clicksorter. | |
views_handler_field:: |
function | Determine if this field is click sortable. | |
views_handler_field:: |
function | Get this field's label. | |
views_handler_field:: |
function | Return an HTML element based upon the field's element type. | |
views_handler_field:: |
function | Return an HTML element for the label based upon the field's element type. | |
views_handler_field:: |
function | Return an HTML element for the wrapper based upon the field's element type. | |
views_handler_field:: |
function | Provide a list of elements valid for field HTML. | |
views_handler_field:: |
function | Return the class of the field. | |
views_handler_field:: |
function | Replace a value with tokens from the last field. | |
views_handler_field:: |
function | Return the class of the field's label. | |
views_handler_field:: |
function | Return the class of the field's wrapper. | |
views_handler_field:: |
function | Get the value that's supposed to be rendered. | |
views_handler_field:: |
function | Determines if this field will be available as an option to group the result by in the style settings. | |
views_handler_field:: |
function |
Performs some cleanup tasks on the options array before saving it. Overrides views_handler:: |
|
views_handler_field:: |
function |
Provide extra data to the administration form Overrides views_handler:: |
|
views_handler_field:: |
function | Run before any fields are rendered. | |
views_handler_field:: |
function | Render a field using advanced settings. | |
views_handler_field:: |
function | Checks if a field value is empty. | |
views_handler_field:: |
function | Perform an advanced text render for the item. | |
views_handler_field:: |
function | Render this field as altered text, from a fieldset set by the user. | |
views_handler_field:: |
function | Trim the field down to the specified length. | |
views_handler_field:: |
function | Render this field as a link, with the info from a fieldset set by the user. | |
views_handler_field:: |
function | Get the 'render' tokens to use for advanced rendering. | |
views_handler_field:: |
function | Recursive function to add replacements for nested query string parameters. | |
views_handler_field:: |
function | Add any special tokens this field might use for itself. | |
views_handler_field:: |
function | Document any special tokens this field might use for itself. | |
views_handler_field:: |
function | Call out to the theme() function, which probably just calls render() but allows sites to override output fairly easily. | |
views_handler_field:: |
function | ||
views_handler_field:: |
function |
Return a string representing this handler's name in the UI. Overrides views_handler:: |
|
views_handler:: |
function | Shortcut to get a handler's raw field value. | |
views_handler:: |
function | Sanitize the value for output. | |
views_handler:: |
function | Transform a string by a certain method. | |
views_handler:: |
function | Validate the options form. | |
views_handler:: |
function | Provides the handler some groupby. | |
views_handler:: |
function | Provide a form for aggregation settings. | |
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 | If a handler has 'extra options' it will get a little settings widget and another form called extra_options. | |
views_handler:: |
function | Provide defaults for the handler. | |
views_handler:: |
function | Provide a form for setting options. | |
views_handler:: |
function | Validate the options form. | |
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 | Determine if a handler can be exposed. | |
views_handler:: |
function | Set new exposed option defaults when exposed setting is flipped on. | |
views_handler:: |
function | Get information about the exposed form for the form renderer. | |
views_handler:: |
function | Render our chunk of the exposed handler form when selecting | |
views_handler:: |
function | Validate the exposed handler form | |
views_handler:: |
function | Submit the exposed handler form | |
views_handler:: |
function | Form for exposed handler options. | |
views_handler:: |
function | Validate the options form. | |
views_handler:: |
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:: |
function | Shortcut to display the expose/hide button. | |
views_handler:: |
function | Shortcut to display the exposed options form. | |
views_handler:: |
function | Check whether current user has access to this handler. | |
views_handler:: |
function | Run before the view is built. | |
views_handler:: |
function | Run after the view is executed, before the result is cached. | |
views_handler:: |
function | Provides a unique placeholders for handlers. | |
views_handler:: |
function | Called just prior to query(), this lets a handler set up any relationship it needs. | |
views_handler:: |
function | Ensure the main table for this handler is in the query. This is used a lot. | |
views_handler:: |
function | Determine if the argument needs a style plugin. | |
views_handler:: |
function | Determine if this item is 'exposed', meaning it provides form elements to let users modify the view. | |
views_handler:: |
function | Returns TRUE if the exposed filter works like a grouped filter. | |
views_handler:: |
function | Define if the exposed input has to be submitted multiple times. This is TRUE when exposed filters grouped are using checkboxes as widgets. | |
views_handler:: |
function | Take input from exposed handlers and assign to this handler, if necessary. | |
views_handler:: |
function | If set to remember exposed input in the session, store it there. | |
views_handler:: |
function | Get the join object that should be used for this handler. | |
views_handler:: |
function | Validates the handler against the complete View. | |
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_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 | ||
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 | Let the handler know what its full definition is. | |
views_object:: |
function | ||
views_object:: |
function | ||
views_object:: |
function | ||
views_object:: |
function | Always exports the option, regardless of the default value. | |
views_object:: |
function | Unpacks each handler to store translatable texts. | |
views_object:: |
function | Unpack a single option definition. | |
views_handler_field:: |
public | property | The field value prior to any rewriting. |
views_handler:: |
public | property | The alias of the table of this handler which is used in the query. |