Class: Redmine::Helpers::Calendar

Inherits:
Object
  • Object
show all
Includes:
I18n, Utils::DateCalculation
Defined in:
lib/redmine/helpers/calendar.rb

Overview

Simple class to compute the start and end dates of a calendar

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Utils::DateCalculation

#add_working_days, #next_working_date, #non_working_week_days, #working_days

Methods included from I18n

#abbr_day_name, #current_language, #day_letter, #day_name, #find_language, #format_date, #format_hours, #format_time, included, #l, #l_hours, #l_hours_short, #l_or_humanize, #languages_options, #ll, #lu, #month_name, #set_language_if_valid, #valid_languages

Constructor Details

#initialize(date, lang = current_language, period = :month) ⇒ Calendar

Returns a new instance of Calendar.



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/redmine/helpers/calendar.rb', line 30

def initialize(date, lang = current_language, period = :month)
  @date = date
  @events = []
  @ending_events_by_days = {}
  @starting_events_by_days = {}
  set_language_if_valid lang
  case period
  when :month
    @startdt = Date.civil(date.year, date.month, 1)
    @enddt = (@startdt >> 1)-1
    # starts from the first day of the week
    @startdt = @startdt - (@startdt.cwday - first_wday)%7
    # ends on the last day of the week
    @enddt = @enddt + (last_wday - @enddt.cwday)%7
  when :week
    @startdt = date - (date.cwday - first_wday)%7
    @enddt = date + (last_wday - date.cwday)%7
  else
    raise 'Invalid period'
  end
end

Instance Attribute Details

#enddtObject (readonly)

Returns the value of attribute enddt.



28
29
30
# File 'lib/redmine/helpers/calendar.rb', line 28

def enddt
  @enddt
end

#startdtObject (readonly)

Returns the value of attribute startdt.



28
29
30
# File 'lib/redmine/helpers/calendar.rb', line 28

def startdt
  @startdt
end

Instance Method Details

#day_css_classes(day) ⇒ Object



60
61
62
63
64
65
# File 'lib/redmine/helpers/calendar.rb', line 60

def day_css_classes(day)
  css = day.month==month ? +'even' : +'odd'
  css << " today" if User.current.today == day
  css << " nwday" if non_working_week_days.include?(day.cwday)
  css
end

#events=(events) ⇒ Object

Sets calendar events



68
69
70
71
72
# File 'lib/redmine/helpers/calendar.rb', line 68

def events=(events)
  @events = events
  @ending_events_by_days = @events.group_by {|event| event.due_date}
  @starting_events_by_days = @events.group_by {|event| event.start_date}
end

#events_on(day) ⇒ Object

Returns events for the given day



75
76
77
# File 'lib/redmine/helpers/calendar.rb', line 75

def events_on(day)
  ((@ending_events_by_days[day] || []) + (@starting_events_by_days[day] || [])).uniq
end

#first_wdayObject

Return the first day of week 1 = Monday … 7 = Sunday



86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/redmine/helpers/calendar.rb', line 86

def first_wday
  case Setting.start_of_week.to_i
  when 1
    @first_dow ||= (1 - 1)%7 + 1
  when 6
    @first_dow ||= (6 - 1)%7 + 1
  when 7
    @first_dow ||= (7 - 1)%7 + 1
  else
    @first_dow ||= (l(:general_first_day_of_week).to_i - 1)%7 + 1
  end
end

#format_monthObject



52
53
54
# File 'lib/redmine/helpers/calendar.rb', line 52

def format_month
  (@startdt..@enddt).to_a
end

#last_wdayObject



99
100
101
# File 'lib/redmine/helpers/calendar.rb', line 99

def last_wday
  @last_dow ||= (first_wday + 5)%7 + 1
end

#monthObject

Calendar current month



80
81
82
# File 'lib/redmine/helpers/calendar.rb', line 80

def month
  @date.month
end

#week_number(day) ⇒ Object



56
57
58
# File 'lib/redmine/helpers/calendar.rb', line 56

def week_number(day)
  (day + (11 - day.cwday) % 7).cweek
end