annotate sites/all/modules/views/handlers/views_handler_field_date.inc @ 13:134d4b2e75f6

updated quicktabs and google analytics modules
author danieleb <danielebarchiesi@me.com>
date Tue, 29 Oct 2013 13:48:59 +0000
parents ff03f76ab3fe
children
rev   line source
danielebarchiesi@0 1 <?php
danielebarchiesi@0 2
danielebarchiesi@0 3 /**
danielebarchiesi@0 4 * @file
danielebarchiesi@0 5 * Definition of views_handler_field_date.
danielebarchiesi@0 6 */
danielebarchiesi@0 7
danielebarchiesi@0 8 /**
danielebarchiesi@0 9 * A handler to provide proper displays for dates.
danielebarchiesi@0 10 *
danielebarchiesi@0 11 * @ingroup views_field_handlers
danielebarchiesi@0 12 */
danielebarchiesi@0 13 class views_handler_field_date extends views_handler_field {
danielebarchiesi@0 14 function option_definition() {
danielebarchiesi@0 15 $options = parent::option_definition();
danielebarchiesi@0 16
danielebarchiesi@0 17 $options['date_format'] = array('default' => 'small');
danielebarchiesi@0 18 $options['custom_date_format'] = array('default' => '');
danielebarchiesi@0 19 $options['timezone'] = array('default' => '');
danielebarchiesi@0 20
danielebarchiesi@0 21 return $options;
danielebarchiesi@0 22 }
danielebarchiesi@0 23
danielebarchiesi@0 24 function options_form(&$form, &$form_state) {
danielebarchiesi@0 25
danielebarchiesi@0 26 $date_formats = array();
danielebarchiesi@0 27 $date_types = system_get_date_types();
danielebarchiesi@0 28 foreach ($date_types as $key => $value) {
danielebarchiesi@0 29 $date_formats[$value['type']] = t('@date_format format', array('@date_format' => $value['title'])) . ': ' . format_date(REQUEST_TIME, $value['type']);
danielebarchiesi@0 30 }
danielebarchiesi@0 31
danielebarchiesi@0 32 $form['date_format'] = array(
danielebarchiesi@0 33 '#type' => 'select',
danielebarchiesi@0 34 '#title' => t('Date format'),
danielebarchiesi@0 35 '#options' => $date_formats + array(
danielebarchiesi@0 36 'custom' => t('Custom'),
danielebarchiesi@0 37 'raw time ago' => t('Time ago'),
danielebarchiesi@0 38 'time ago' => t('Time ago (with "ago" appended)'),
danielebarchiesi@0 39 'raw time hence' => t('Time hence'),
danielebarchiesi@0 40 'time hence' => t('Time hence (with "hence" appended)'),
danielebarchiesi@0 41 'raw time span' => t('Time span (future dates have "-" prepended)'),
danielebarchiesi@0 42 'inverse time span' => t('Time span (past dates have "-" prepended)'),
danielebarchiesi@0 43 'time span' => t('Time span (with "ago/hence" appended)'),
danielebarchiesi@0 44 ),
danielebarchiesi@0 45 '#default_value' => isset($this->options['date_format']) ? $this->options['date_format'] : 'small',
danielebarchiesi@0 46 );
danielebarchiesi@0 47 $form['custom_date_format'] = array(
danielebarchiesi@0 48 '#type' => 'textfield',
danielebarchiesi@0 49 '#title' => t('Custom date format'),
danielebarchiesi@0 50 '#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')),
danielebarchiesi@0 51 '#default_value' => isset($this->options['custom_date_format']) ? $this->options['custom_date_format'] : '',
danielebarchiesi@0 52 '#dependency' => array('edit-options-date-format' => array('custom', 'raw time ago', 'time ago', 'raw time hence', 'time hence', 'raw time span', 'time span', 'raw time span', 'inverse time span', 'time span')),
danielebarchiesi@0 53 );
danielebarchiesi@0 54 $form['timezone'] = array(
danielebarchiesi@0 55 '#type' => 'select',
danielebarchiesi@0 56 '#title' => t('Timezone'),
danielebarchiesi@0 57 '#description' => t('Timezone to be used for date output.'),
danielebarchiesi@0 58 '#options' => array('' => t('- Default site/user timezone -')) + system_time_zones(FALSE),
danielebarchiesi@0 59 '#default_value' => $this->options['timezone'],
danielebarchiesi@0 60 '#dependency' => array('edit-options-date-format' => array_merge(array('custom'), array_keys($date_formats))),
danielebarchiesi@0 61 );
danielebarchiesi@0 62
danielebarchiesi@0 63 parent::options_form($form, $form_state);
danielebarchiesi@0 64 }
danielebarchiesi@0 65
danielebarchiesi@0 66 function render($values) {
danielebarchiesi@0 67 $value = $this->get_value($values);
danielebarchiesi@0 68 $format = $this->options['date_format'];
danielebarchiesi@0 69 if (in_array($format, array('custom', 'raw time ago', 'time ago', 'raw time hence', 'time hence', 'raw time span', 'time span', 'raw time span', 'inverse time span', 'time span'))) {
danielebarchiesi@0 70 $custom_format = $this->options['custom_date_format'];
danielebarchiesi@0 71 }
danielebarchiesi@0 72
danielebarchiesi@0 73 if ($value) {
danielebarchiesi@0 74 $timezone = !empty($this->options['timezone']) ? $this->options['timezone'] : NULL;
danielebarchiesi@0 75 $time_diff = REQUEST_TIME - $value; // will be positive for a datetime in the past (ago), and negative for a datetime in the future (hence)
danielebarchiesi@0 76 switch ($format) {
danielebarchiesi@0 77 case 'raw time ago':
danielebarchiesi@0 78 return format_interval($time_diff, is_numeric($custom_format) ? $custom_format : 2);
danielebarchiesi@0 79 case 'time ago':
danielebarchiesi@0 80 return t('%time ago', array('%time' => format_interval($time_diff, is_numeric($custom_format) ? $custom_format : 2)));
danielebarchiesi@0 81 case 'raw time hence':
danielebarchiesi@0 82 return format_interval(-$time_diff, is_numeric($custom_format) ? $custom_format : 2);
danielebarchiesi@0 83 case 'time hence':
danielebarchiesi@0 84 return t('%time hence', array('%time' => format_interval(-$time_diff, is_numeric($custom_format) ? $custom_format : 2)));
danielebarchiesi@0 85 case 'raw time span':
danielebarchiesi@0 86 return ($time_diff < 0 ? '-' : '') . format_interval(abs($time_diff), is_numeric($custom_format) ? $custom_format : 2);
danielebarchiesi@0 87 case 'inverse time span':
danielebarchiesi@0 88 return ($time_diff > 0 ? '-' : '') . format_interval(abs($time_diff), is_numeric($custom_format) ? $custom_format : 2);
danielebarchiesi@0 89 case 'time span':
danielebarchiesi@0 90 return t(($time_diff < 0 ? '%time hence' : '%time ago'), array('%time' => format_interval(abs($time_diff), is_numeric($custom_format) ? $custom_format : 2)));
danielebarchiesi@0 91 case 'custom':
danielebarchiesi@0 92 if ($custom_format == 'r') {
danielebarchiesi@0 93 return format_date($value, $format, $custom_format, $timezone, 'en');
danielebarchiesi@0 94 }
danielebarchiesi@0 95 return format_date($value, $format, $custom_format, $timezone);
danielebarchiesi@0 96 default:
danielebarchiesi@0 97 return format_date($value, $format, '', $timezone);
danielebarchiesi@0 98 }
danielebarchiesi@0 99 }
danielebarchiesi@0 100 }
danielebarchiesi@0 101 }