From b303ef0b50799bc3b50a6ff30f44fe4b8e32f4a3 Mon Sep 17 00:00:00 2001 From: Michael Strelan Date: Mon, 28 Mar 2011 16:36:12 +1000 Subject: [PATCH] Date - Exposed Date filter format (in Views) --- date_api_sql.inc | 14 +++++++------- date_popup/date_popup.module | 1 + includes/date_api_filter_handler.inc | 11 ++++++++++- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/date_api_sql.inc b/date_api_sql.inc index 36a58cb..b0001b5 100644 --- a/date_api_sql.inc +++ b/date_api_sql.inc @@ -653,33 +653,33 @@ class date_sql_handler { return true; } - function views_formats($granularity, $type = 'sql') { + function views_formats($granularity, $type = 'sql', $custom_format = NULL) { $formats = array('display', 'sql'); // Start with the site long date format and add seconds to it - $long = str_replace(':i', ':i:s', variable_get('date_format_long', 'l, F j, Y - H:i')); + $format = isset($custom_format) ? $custom_format : str_replace(':i', ':i:s', variable_get('date_format_long', 'l, F j, Y - H:i')); switch ($granularity) { case ('year'): $formats['display'] = 'Y'; $formats['sql'] = 'Y'; break; case ('month'): - $formats['display'] = date_limit_format($long, array('year', 'month')); + $formats['display'] = date_limit_format($format, array('year', 'month')); $formats['sql'] = 'Y-m'; break; case ('day'): - $formats['display'] = date_limit_format($long, array('year', 'month', 'day')); + $formats['display'] = date_limit_format($format, array('year', 'month', 'day')); $formats['sql'] = 'Y-m-d'; break; case ('hour'): - $formats['display'] = date_limit_format($long, array('year', 'month', 'day', 'hour')); + $formats['display'] = date_limit_format($format, array('year', 'month', 'day', 'hour')); $formats['sql'] = 'Y-m-d\TH'; break; case ('minute'): - $formats['display'] = date_limit_format($long, array('year', 'month', 'day', 'hour', 'minute')); + $formats['display'] = date_limit_format($format, array('year', 'month', 'day', 'hour', 'minute')); $formats['sql'] = 'Y-m-d\TH:i'; break; case ('second'): - $formats['display'] = date_limit_format($long, array('year', 'month', 'day', 'hour', 'minute', 'second')); + $formats['display'] = date_limit_format($format, array('year', 'month', 'day', 'hour', 'minute', 'second')); $formats['sql'] = 'Y-m-d\TH:i:s'; break; case ('week'): diff --git a/date_popup/date_popup.module b/date_popup/date_popup.module index f219a72..0fd29be 100644 --- a/date_popup/date_popup.module +++ b/date_popup/date_popup.module @@ -396,6 +396,7 @@ function date_popup_validate($element, &$form_state) { require_once('./'. drupal_get_path('module', 'date_api') .'/date_api_elements.inc'); date_popup_load(); + $element['#date_format'] = $form_state['display']->handler->handlers['filter'][$element['#parents'][0]]->options['date_format']; $value = date_popup_input_value($element); // If the created date is valid, set it. diff --git a/includes/date_api_filter_handler.inc b/includes/date_api_filter_handler.inc index 6e2700e..40d11a7 100644 --- a/includes/date_api_filter_handler.inc +++ b/includes/date_api_filter_handler.inc @@ -122,6 +122,13 @@ class date_api_filter_handler extends views_handler_filter_numeric { '#description' => t('Choose the form element to use for date selection.'), ); + $form['date_format'] = array( + '#type' => 'textfield', + '#title' => t('Date format'), + '#default_value' => $this->options['date_format'], + '#description' => t('Choose the input format to use for date selection.'), + ); + $form['granularity'] = $this->date_handler->granularity_form($this->options['granularity']); $form['granularity']['#description'] = '

'. t("Select a granularity for the date filter. For instance, selecting 'day' will create a filter where users can select the year, month, and day.") .'

'; @@ -289,7 +296,9 @@ class date_api_filter_handler extends views_handler_filter_numeric { if ($type == 'date_popup' && !module_exists('date_popup')) { $type = 'date_text'; } - $format = $this->date_handler->views_formats($this->options['granularity'], 'sql'); + $format = !empty($this->options['date_format']) ? + $this->date_handler->views_formats($this->options['granularity'], 'display', $this->options['date_format']) : + $this->date_handler->views_formats($this->options['granularity'], 'sql'); $granularity = array_keys($this->date_handler->date_parts($this->options['granularity'])); // Don't set a default date in the UI, only in the exposed form. -- 1.7.4