diff --git a/date_views/includes/date_views_argument_handler.inc b/date_views/includes/date_views_argument_handler.inc index 20eedff..7b7a25f 100644 --- a/date_views/includes/date_views_argument_handler.inc +++ b/date_views/includes/date_views_argument_handler.inc @@ -192,7 +192,15 @@ class date_views_argument_handler extends date_views_argument_handler_simple { $date_handler = new date_sql_handler($field['sql_type'], date_default_timezone()); $date_handler->granularity = $this->options['granularity']; $date_handler->db_timezone = date_get_timezone_db($field['tz_handling']); - $date_handler->local_timezone = date_get_timezone($field['tz_handling']); + if (empty($this->options['timezone']) || $this->options['timezone'] == 'date') { + $date_handler->local_timezone = date_get_timezone($field['tz_handling']); + } + else if ($this->options['timezone'] == 'user') { + $date_handler->local_timezone = date_default_timezone(); + } + else { + $date_handler->local_timezone = $this->options['timezone']; + } date_views_set_timezone($date_handler, $this, $field); $this->query_fields[] = array('field' => $field, 'date_handler' => $date_handler); } diff --git a/date_views/includes/date_views_argument_handler_simple.inc b/date_views/includes/date_views_argument_handler_simple.inc index 9268bdd..263e33c 100644 --- a/date_views/includes/date_views_argument_handler_simple.inc +++ b/date_views/includes/date_views_argument_handler_simple.inc @@ -28,7 +28,15 @@ class date_views_argument_handler_simple extends views_handler_argument_date { $this->original_table = $this->definition['table']; } $this->date_handler->db_timezone = date_get_timezone_db($field['settings']['tz_handling']); - $this->date_handler->local_timezone = date_get_timezone($field['settings']['tz_handling']); + if (empty($options['timezone']) || $options['timezone'] == 'date') { + $this->date_handler->local_timezone = date_get_timezone($field['settings']['tz_handling']); + } + else if ($options['timezone'] == 'user') { + $this->date_handler->local_timezone = date_default_timezone(); + } + else { + $this->date_handler->local_timezone = $options['timezone']; + } } $this->date_handler->granularity = $this->options['granularity']; // This value needs to be initialized so @@ -96,6 +104,7 @@ class date_views_argument_handler_simple extends views_handler_argument_date { $options['granularity_reset'] = array('default' => FALSE); $options['default_argument_type']['default'] = 'date'; $options['add_delta'] = array('default' => ''); + $options['timezone'] = array('default' => 'date'); $options['use_fromto'] = array('default' => ''); $options['title_format'] = array('default' => ''); $options['title_format_custom'] = array('default' => ''); @@ -200,6 +209,16 @@ class date_views_argument_handler_simple extends views_handler_argument_date { // Only let mere mortals tweak this setting for multi-value fields. '#access' => $access, ); + + $form['timezone'] = array( + '#type' => 'select', + '#title' => t('Timezone'), + '#default_value' => $this->options['timezone'], + '#options' => array( + 'date' => t("Date field's default timezone"), + 'user' => t("Current user's timezone"), + ) + system_time_zones(), + ); } /** diff --git a/date_views/includes/date_views_filter_handler.inc b/date_views/includes/date_views_filter_handler.inc index ff588ec..18b6d25 100644 --- a/date_views/includes/date_views_filter_handler.inc +++ b/date_views/includes/date_views_filter_handler.inc @@ -175,7 +175,15 @@ class date_views_filter_handler extends date_views_filter_handler_simple { $date_handler = new date_sql_handler($field['sql_type'], date_default_timezone()); $date_handler->granularity = $this->options['granularity']; $date_handler->db_timezone = date_get_timezone_db($field['tz_handling']); - $date_handler->local_timezone = date_get_timezone($field['tz_handling']); + if (empty($this->options['timezone']) || $this->options['timezone'] == 'date') { + $date_handler->local_timezone = date_get_timezone($field['tz_handling']); + } + else if ($this->options['timezone'] == 'user') { + $date_handler->local_timezone = date_default_timezone(); + } + else { + $date_handler->local_timezone = $this->options['timezone']; + } $this->query_fields[] = array('field' => $field, 'date_handler' => $date_handler); } } diff --git a/date_views/includes/date_views_filter_handler_simple.inc b/date_views/includes/date_views_filter_handler_simple.inc index cfb297e..b868291 100644 --- a/date_views/includes/date_views_filter_handler_simple.inc +++ b/date_views/includes/date_views_filter_handler_simple.inc @@ -20,7 +20,15 @@ class date_views_filter_handler_simple extends views_handler_filter_date { $this->date_handler->date_type = $field['type']; } $this->date_handler->db_timezone = date_get_timezone_db($field['settings']['tz_handling']); - $this->date_handler->local_timezone = date_get_timezone($field['settings']['tz_handling']); + if (empty($options['timezone']) || $options['timezone'] == 'date') { + $this->date_handler->local_timezone = date_get_timezone($field['settings']['tz_handling']); + } + else if ($options['timezone'] == 'user') { + $this->date_handler->local_timezone = date_default_timezone(); + } + else { + $this->date_handler->local_timezone = $options['timezone']; + } } $this->form_submitted = FALSE; $this->date_handler->granularity = isset($options['granularity']) ? $options['granularity'] : 'day'; @@ -39,6 +47,7 @@ class date_views_filter_handler_simple extends views_handler_filter_date { $options['form_type'] = array('default' => 'date_select'); $options['default_date'] = array('default' => ''); $options['default_to_date'] = array('default' => ''); + $options['timezone'] = array('default' => 'date'); $options['year_range'] = array('default' => '-3:+3'); $options['add_delta'] = array('default' => ''); return $options; @@ -233,6 +242,19 @@ class date_views_filter_handler_simple extends views_handler_filter_date { return $year_range; } + function options_form(&$form, &$form_state) { + parent::options_form($form, $form_state); + $form['timezone'] = array( + '#type' => 'select', + '#title' => t('Timezone'), + '#default_value' => $this->options['timezone'], + '#options' => array( + 'date' => t("Date field's default timezone"), + 'user' => t("Current user's timezone"), + ) + system_time_zones(), + ); + } + function extra_options_form(&$form, &$form_state) { parent::extra_options_form($form, $form_state); $form['form_type'] = array(