diff options
-rw-r--r-- | app/controllers/activities_controller.rb | 2 | ||||
-rw-r--r-- | app/controllers/calendars_controller.rb | 4 | ||||
-rw-r--r-- | app/controllers/issues_controller.rb | 2 | ||||
-rw-r--r-- | app/controllers/repositories_controller.rb | 5 | ||||
-rw-r--r-- | app/helpers/application_helper.rb | 2 | ||||
-rw-r--r-- | app/helpers/my_helper.rb | 2 | ||||
-rw-r--r-- | app/helpers/settings_helper.rb | 2 | ||||
-rw-r--r-- | app/models/issue.rb | 4 | ||||
-rw-r--r-- | app/models/mail_handler.rb | 2 | ||||
-rw-r--r-- | app/models/project.rb | 2 | ||||
-rw-r--r-- | app/models/query.rb | 14 | ||||
-rw-r--r-- | app/models/user.rb | 1 | ||||
-rw-r--r-- | app/models/version.rb | 6 | ||||
-rw-r--r-- | app/views/activities/index.html.erb | 2 | ||||
-rw-r--r-- | app/views/common/_calendar.html.erb | 2 | ||||
-rw-r--r-- | app/views/gantts/show.html.erb | 4 | ||||
-rw-r--r-- | app/views/my/blocks/_calendar.html.erb | 2 | ||||
-rw-r--r-- | app/views/my/blocks/_timelog.html.erb | 2 | ||||
-rw-r--r-- | lib/redmine/export/pdf/issues_pdf_helper.rb | 4 | ||||
-rw-r--r-- | lib/redmine/export/pdf/wiki_pdf_helper.rb | 4 | ||||
-rw-r--r-- | lib/redmine/helpers/gantt.rb | 14 | ||||
-rw-r--r-- | lib/redmine/helpers/time_report.rb | 4 | ||||
-rw-r--r-- | test/unit/issue_test.rb | 26 |
23 files changed, 70 insertions, 42 deletions
diff --git a/app/controllers/activities_controller.rb b/app/controllers/activities_controller.rb index ce3f600ae..32df00f97 100644 --- a/app/controllers/activities_controller.rb +++ b/app/controllers/activities_controller.rb @@ -27,7 +27,7 @@ class ActivitiesController < ApplicationController begin; @date_to = params[:from].to_date + 1; rescue; end end - @date_to ||= Date.today + 1 + @date_to ||= User.current.today + 1 @date_from = @date_to - @days @with_subprojects = params[:with_subprojects].nil? ? Setting.display_subprojects_issues? : (params[:with_subprojects] == '1') if params[:user_id].present? diff --git a/app/controllers/calendars_controller.rb b/app/controllers/calendars_controller.rb index 756d62b44..276d7988d 100644 --- a/app/controllers/calendars_controller.rb +++ b/app/controllers/calendars_controller.rb @@ -35,8 +35,8 @@ class CalendarsController < ApplicationController @month = params[:month].to_i end end - @year ||= Date.today.year - @month ||= Date.today.month + @year ||= User.current.today.year + @month ||= User.current.today.month @calendar = Redmine::Helpers::Calendar.new(Date.civil(@year, @month, 1), current_language, :month) retrieve_query diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 21b810c8c..7c10769aa 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -441,7 +441,7 @@ class IssuesController < ApplicationController @issue.project ||= @issue.allowed_target_projects.first end @issue.author ||= User.current - @issue.start_date ||= Date.today if Setting.default_issue_start_date_to_creation_date? + @issue.start_date ||= User.current.today if Setting.default_issue_start_date_to_creation_date? attrs = (params[:issue] || {}).deep_dup if action_name == 'new' && params[:was_default_status] == attrs[:status_id] diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 734b43983..8f34c0034 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -352,7 +352,7 @@ class RepositoriesController < ApplicationController end def graph_commits_per_month(repository) - @date_to = Date.today + @date_to = User.current.today @date_from = @date_to << 11 @date_from = Date.civil(@date_from.year, @date_from.month, 1) commits_by_day = Changeset. @@ -371,7 +371,8 @@ class RepositoriesController < ApplicationController changes_by_day.each {|c| changes_by_month[(@date_to.month - c.first.to_date.month) % 12] += c.last } fields = [] - 12.times {|m| fields << month_name(((Date.today.month - 1 - m) % 12) + 1)} + today = User.current.today + 12.times {|m| fields << month_name(((today.month - 1 - m) % 12) + 1)} graph = SVG::Graph::Bar.new( :height => 300, diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index a145a72ac..3e857e3d9 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -252,7 +252,7 @@ module ApplicationHelper def due_date_distance_in_words(date) if date - l((date < Date.today ? :label_roadmap_overdue : :label_roadmap_due_in), distance_of_date_in_words(Date.today, date)) + l((date < User.current.today ? :label_roadmap_overdue : :label_roadmap_due_in), distance_of_date_in_words(User.current.today, date)) end end diff --git a/app/helpers/my_helper.rb b/app/helpers/my_helper.rb index 6a0542234..83cc1e305 100644 --- a/app/helpers/my_helper.rb +++ b/app/helpers/my_helper.rb @@ -65,7 +65,7 @@ module MyHelper def timelog_items TimeEntry. - where("#{TimeEntry.table_name}.user_id = ? AND #{TimeEntry.table_name}.spent_on BETWEEN ? AND ?", User.current.id, Date.today - 6, Date.today). + where("#{TimeEntry.table_name}.user_id = ? AND #{TimeEntry.table_name}.spent_on BETWEEN ? AND ?", User.current.id, User.current.today - 6, User.current.today). joins(:activity, :project). references(:issue => [:tracker, :status]). includes(:issue => [:tracker, :status]). diff --git a/app/helpers/settings_helper.rb b/app/helpers/settings_helper.rb index 43b2c70b0..2c657f0df 100644 --- a/app/helpers/settings_helper.rb +++ b/app/helpers/settings_helper.rb @@ -182,7 +182,7 @@ module SettingsHelper # Returns the options for the date_format setting def date_format_setting_options(locale) Setting::DATE_FORMATS.map do |f| - today = ::I18n.l(Date.today, :locale => locale, :format => f) + today = ::I18n.l(User.current.today, :locale => locale, :format => f) format = f.gsub('%', '').gsub(/[dmY]/) do {'d' => 'dd', 'm' => 'mm', 'Y' => 'yyyy'}[$&] end diff --git a/app/models/issue.rb b/app/models/issue.rb index 7d7db13e1..0ee8ff3d3 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -807,14 +807,14 @@ class Issue < ActiveRecord::Base # Returns true if the issue is overdue def overdue? - due_date.present? && (due_date < Date.today) && !closed? + due_date.present? && (due_date < User.current.today) && !closed? end # Is the amount of work done less than it should for the due date def behind_schedule? return false if start_date.nil? || due_date.nil? done_date = start_date + ((due_date - start_date + 1) * done_ratio / 100).floor - return done_date <= Date.today + return done_date <= User.current.today end # Does this issue have children? diff --git a/app/models/mail_handler.rb b/app/models/mail_handler.rb index d5332e2e6..40bd02a07 100644 --- a/app/models/mail_handler.rb +++ b/app/models/mail_handler.rb @@ -206,7 +206,7 @@ class MailHandler < ActionMailer::Base issue.subject = '(no subject)' end issue.description = cleaned_up_text_body - issue.start_date ||= Date.today if Setting.default_issue_start_date_to_creation_date? + issue.start_date ||= User.current.today if Setting.default_issue_start_date_to_creation_date? issue.is_private = (handler_options[:issue][:is_private] == '1') # add To and Cc as watchers before saving so the watchers can reply to Redmine diff --git a/app/models/project.rb b/app/models/project.rb index 2e3a106f7..dee2e6dfd 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -594,7 +594,7 @@ class Project < ActiveRecord::Base end def overdue? - active? && !due_date.nil? && (due_date < Date.today) + active? && !due_date.nil? && (due_date < User.current.today) end # Returns the percent completed for this project, based on the diff --git a/app/models/query.rb b/app/models/query.rb index 68beb3c97..02e3f6cab 100644 --- a/app/models/query.rb +++ b/app/models/query.rb @@ -874,32 +874,32 @@ class Query < ActiveRecord::Base when "w" # = this week first_day_of_week = l(:general_first_day_of_week).to_i - day_of_week = Date.today.cwday + day_of_week = User.current.today.cwday days_ago = (day_of_week >= first_day_of_week ? day_of_week - first_day_of_week : day_of_week + 7 - first_day_of_week) sql = relative_date_clause(db_table, db_field, - days_ago, - days_ago + 6, is_custom_filter) when "lw" # = last week first_day_of_week = l(:general_first_day_of_week).to_i - day_of_week = Date.today.cwday + day_of_week = User.current.today.cwday days_ago = (day_of_week >= first_day_of_week ? day_of_week - first_day_of_week : day_of_week + 7 - first_day_of_week) sql = relative_date_clause(db_table, db_field, - days_ago - 7, - days_ago - 1, is_custom_filter) when "l2w" # = last 2 weeks first_day_of_week = l(:general_first_day_of_week).to_i - day_of_week = Date.today.cwday + day_of_week = User.current.today.cwday days_ago = (day_of_week >= first_day_of_week ? day_of_week - first_day_of_week : day_of_week + 7 - first_day_of_week) sql = relative_date_clause(db_table, db_field, - days_ago - 14, - days_ago - 1, is_custom_filter) when "m" # = this month - date = Date.today + date = User.current.today sql = date_clause(db_table, db_field, date.beginning_of_month, date.end_of_month, is_custom_filter) when "lm" # = last month - date = Date.today.prev_month + date = User.current.today.prev_month sql = date_clause(db_table, db_field, date.beginning_of_month, date.end_of_month, is_custom_filter) when "y" # = this year - date = Date.today + date = User.current.today sql = date_clause(db_table, db_field, date.beginning_of_year, date.end_of_year, is_custom_filter) when "~" sql = sql_contains("#{db_table}.#{db_field}", value.first) @@ -999,7 +999,7 @@ class Query < ActiveRecord::Base # Returns a SQL clause for a date or datetime field using relative dates. def relative_date_clause(table, field, days_from, days_to, is_custom_filter) - date_clause(table, field, (days_from ? Date.today + days_from : nil), (days_to ? Date.today + days_to : nil), is_custom_filter) + date_clause(table, field, (days_from ? User.current.today + days_from : nil), (days_to ? User.current.today + days_to : nil), is_custom_filter) end # Returns a Date or Time from the given filter value diff --git a/app/models/user.rb b/app/models/user.rb index b999361f1..d97b38bc1 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -512,6 +512,7 @@ class User < Principal if time_zone.nil? Date.today else + # TODO replace with time_zone.today Time.now.in_time_zone(time_zone).to_date end end diff --git a/app/models/version.rb b/app/models/version.rb index ad3d816fb..bc71b72e9 100644 --- a/app/models/version.rb +++ b/app/models/version.rb @@ -104,7 +104,7 @@ class Version < ActiveRecord::Base # Returns true if the version is completed: closed or due date reached and no open issues def completed? - closed? || (effective_date && (effective_date < Date.today) && (open_issues_count == 0)) + closed? || (effective_date && (effective_date < User.current.today) && (open_issues_count == 0)) end def behind_schedule? @@ -112,7 +112,7 @@ class Version < ActiveRecord::Base return false elsif due_date && start_date done_date = start_date + ((due_date - start_date+1)* completed_percent/100).floor - return done_date <= Date.today + return done_date <= User.current.today else false # No issues so it's not late end @@ -141,7 +141,7 @@ class Version < ActiveRecord::Base # Returns true if the version is overdue: due date reached and some open issues def overdue? - effective_date && (effective_date < Date.today) && (open_issues_count > 0) + effective_date && (effective_date < User.current.today) && (open_issues_count > 0) end # Returns assigned issues count diff --git a/app/views/activities/index.html.erb b/app/views/activities/index.html.erb index 830f408d3..58664d1cf 100644 --- a/app/views/activities/index.html.erb +++ b/app/views/activities/index.html.erb @@ -31,7 +31,7 @@ <%= link_to_content_update(l(:label_next) + " \xc2\xbb", params.merge(:from => @date_to + @days - 1), :title => l(:label_date_from_to, :start => format_date(@date_to), :end => format_date(@date_to + @days - 1)), - :accesskey => accesskey(:next)) unless @date_to >= Date.today %> + :accesskey => accesskey(:next)) unless @date_to >= User.current.today %> </div> <% other_formats_links do |f| %> diff --git a/app/views/common/_calendar.html.erb b/app/views/common/_calendar.html.erb index d950749aa..eb830b641 100644 --- a/app/views/common/_calendar.html.erb +++ b/app/views/common/_calendar.html.erb @@ -7,7 +7,7 @@ <% day = calendar.startdt while day <= calendar.enddt %> <%= ("<td class='week-number' title='#{ l(:label_week) }'>#{(day+(11-day.cwday)%7).cweek}</td>".html_safe) if day.cwday == calendar.first_wday %> -<td class="<%= day.month==calendar.month ? 'even' : 'odd' %><%= ' today' if Date.today == day %>"> +<td class="<%= day.month==calendar.month ? 'even' : 'odd' %><%= ' today' if User.current.today == day %>"> <p class="day-num"><%= day.day %></p> <% calendar.events_on(day).each do |i| %> <% if i.is_a? Issue %> diff --git a/app/views/gantts/show.html.erb b/app/views/gantts/show.html.erb index 070a0def6..34ee14c5a 100644 --- a/app/views/gantts/show.html.erb +++ b/app/views/gantts/show.html.erb @@ -302,9 +302,9 @@ <%= @gantt.lines.html_safe %> <% ###### Today red line (excluded from cache) ###### %> -<% if Date.today >= @gantt.date_from and Date.today <= @gantt.date_to %> +<% if User.current.today >= @gantt.date_from and User.current.today <= @gantt.date_to %> <% - today_left = (((Date.today - @gantt.date_from + 1) * zoom).floor() - 1).to_i + today_left = (((User.current.today - @gantt.date_from + 1) * zoom).floor() - 1).to_i style = "" style += "position: absolute;" style += "height: #{g_height}px;" diff --git a/app/views/my/blocks/_calendar.html.erb b/app/views/my/blocks/_calendar.html.erb index 41ca18a10..89dde0e01 100644 --- a/app/views/my/blocks/_calendar.html.erb +++ b/app/views/my/blocks/_calendar.html.erb @@ -1,6 +1,6 @@ <h3><%= l(:label_calendar) %></h3> -<% calendar = Redmine::Helpers::Calendar.new(Date.today, current_language, :week) +<% calendar = Redmine::Helpers::Calendar.new(User.current.today, current_language, :week) calendar.events = calendar_items(calendar.startdt, calendar.enddt) %> <%= render :partial => 'common/calendar', :locals => {:calendar => calendar } %> diff --git a/app/views/my/blocks/_timelog.html.erb b/app/views/my/blocks/_timelog.html.erb index 7fcac4aa4..14a0711e9 100644 --- a/app/views/my/blocks/_timelog.html.erb +++ b/app/views/my/blocks/_timelog.html.erb @@ -29,7 +29,7 @@ entries_by_day = entries.group_by(&:spent_on) <tbody> <% entries_by_day.keys.sort.reverse.each do |day| %> <tr class="odd"> - <td><strong><%= day == Date.today ? l(:label_today).titleize : format_date(day) %></strong></td> + <td><strong><%= day == User.current.today ? l(:label_today).titleize : format_date(day) %></strong></td> <td colspan="2"></td> <td class="hours"><em><%= html_hours("%.2f" % entries_by_day[day].sum(&:hours).to_f) %></em></td> <td></td> diff --git a/lib/redmine/export/pdf/issues_pdf_helper.rb b/lib/redmine/export/pdf/issues_pdf_helper.rb index a9ee2300d..75f63d272 100644 --- a/lib/redmine/export/pdf/issues_pdf_helper.rb +++ b/lib/redmine/export/pdf/issues_pdf_helper.rb @@ -26,7 +26,7 @@ module Redmine pdf = ITCPDF.new(current_language) pdf.set_title("#{issue.project} - #{issue.tracker} ##{issue.id}") pdf.alias_nb_pages - pdf.footer_date = format_date(Date.today) + pdf.footer_date = format_date(User.current.today) pdf.add_page pdf.SetFontStyle('B',11) buf = "#{issue.project} - #{issue.tracker} ##{issue.id}" @@ -246,7 +246,7 @@ module Redmine title = "#{project} - #{title}" if project pdf.set_title(title) pdf.alias_nb_pages - pdf.footer_date = format_date(Date.today) + pdf.footer_date = format_date(User.current.today) pdf.set_auto_page_break(false) pdf.add_page("L") diff --git a/lib/redmine/export/pdf/wiki_pdf_helper.rb b/lib/redmine/export/pdf/wiki_pdf_helper.rb index 37dbc1d03..aea7b7e44 100644 --- a/lib/redmine/export/pdf/wiki_pdf_helper.rb +++ b/lib/redmine/export/pdf/wiki_pdf_helper.rb @@ -26,7 +26,7 @@ module Redmine pdf = Redmine::Export::PDF::ITCPDF.new(current_language) pdf.set_title(project.name) pdf.alias_nb_pages - pdf.footer_date = format_date(Date.today) + pdf.footer_date = format_date(User.current.today) pdf.add_page pdf.SetFontStyle('B',11) pdf.RDMMultiCell(190,5, project.name) @@ -43,7 +43,7 @@ module Redmine pdf = ITCPDF.new(current_language) pdf.set_title("#{project} - #{page.title}") pdf.alias_nb_pages - pdf.footer_date = format_date(Date.today) + pdf.footer_date = format_date(User.current.today) pdf.add_page pdf.SetFontStyle('B',11) pdf.RDMMultiCell(190,5, diff --git a/lib/redmine/helpers/gantt.rb b/lib/redmine/helpers/gantt.rb index af78d9e60..683d201a5 100644 --- a/lib/redmine/helpers/gantt.rb +++ b/lib/redmine/helpers/gantt.rb @@ -59,8 +59,8 @@ module Redmine @month_from = 1 end else - @month_from ||= Date.today.month - @year_from ||= Date.today.year + @month_from ||= User.current.today.month + @year_from ||= User.current.today.year end zoom = (options[:zoom] || User.current.pref[:gantt_zoom]).to_i @zoom = (zoom > 0 && zoom < 5) ? zoom : 2 @@ -428,9 +428,9 @@ module Redmine lines(:image => gc, :top => top, :zoom => zoom, :subject_width => subject_width, :format => :image) # today red line - if Date.today >= @date_from and Date.today <= date_to + if User.current.today >= @date_from and User.current.today <= date_to gc.stroke('red') - x = (Date.today - @date_from + 1) * zoom + subject_width + x = (User.current.today - @date_from + 1) * zoom + subject_width gc.line(x, headers_height, x, headers_height + g_height - 1) end gc.draw(imgl) @@ -442,7 +442,7 @@ module Redmine pdf = ::Redmine::Export::PDF::ITCPDF.new(current_language) pdf.SetTitle("#{l(:label_gantt)} #{project}") pdf.alias_nb_pages - pdf.footer_date = format_date(Date.today) + pdf.footer_date = format_date(User.current.today) pdf.AddPage("L") pdf.SetFontStyle('B', 12) pdf.SetX(15) @@ -592,8 +592,8 @@ module Redmine coords[:bar_progress_end] = self.date_to - self.date_from + 1 end end - if progress_date < Date.today - late_date = [Date.today, end_date].min + if progress_date < User.current.today + late_date = [User.current.today, end_date].min if late_date > self.date_from && late_date > start_date if late_date < self.date_to coords[:bar_late_end] = late_date - self.date_from + 1 diff --git a/lib/redmine/helpers/time_report.rb b/lib/redmine/helpers/time_report.rb index 884d00c68..c9ce70ebe 100644 --- a/lib/redmine/helpers/time_report.rb +++ b/lib/redmine/helpers/time_report.rb @@ -70,10 +70,10 @@ module Redmine end min = @hours.collect {|row| row['spent_on']}.min - @from = min ? min.to_date : Date.today + @from = min ? min.to_date : User.current.today max = @hours.collect {|row| row['spent_on']}.max - @to = max ? max.to_date : Date.today + @to = max ? max.to_date : User.current.today @total_hours = @hours.inject(0) {|s,k| s = s + k['hours'].to_f} diff --git a/test/unit/issue_test.rb b/test/unit/issue_test.rb index 03dd57229..d7c7d231b 100644 --- a/test/unit/issue_test.rb +++ b/test/unit/issue_test.rb @@ -2756,4 +2756,30 @@ class IssueTest < ActiveSupport::TestCase issue.reload.assigned_to = nil assert_equal group, issue.assigned_to_was end + + def test_issue_overdue_should_respect_user_timezone + user_in_europe = users(:users_001) + user_in_europe.pref.update_attribute :time_zone, 'UTC' + + user_in_asia = users(:users_002) + user_in_asia.pref.update_attribute :time_zone, 'Hongkong' + + issue = Issue.generate! :due_date => Date.parse('2016-03-20') + + # server time is UTC + time = Time.parse '2016-03-20 20:00 UTC' + Time.stubs(:now).returns(time) + Date.stubs(:today).returns(time.to_date) + + # for a user in the same time zone as the server the issue is not overdue + # yet + User.current = user_in_europe + assert !issue.overdue? + + # at the same time, a user in East Asia looks at the issue - it's already + # March 21st and the issue should be marked overdue + User.current = user_in_asia + assert issue.overdue? + + end end |