Class: Redmine::Helpers::Calendar

Inherits:
Object
  • Object
show all
Includes:
I18n
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 I18n

#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.



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

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.



26
27
28
# File 'lib/redmine/helpers/calendar.rb', line 26

def enddt
  @enddt
end

#startdtObject (readonly)

Returns the value of attribute startdt.



26
27
28
# File 'lib/redmine/helpers/calendar.rb', line 26

def startdt
  @startdt
end

Instance Method Details

#events=(events) ⇒ Object

Sets calendar events



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

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



58
59
60
# File 'lib/redmine/helpers/calendar.rb', line 58

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



69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/redmine/helpers/calendar.rb', line 69

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

#last_wdayObject



82
83
84
# File 'lib/redmine/helpers/calendar.rb', line 82

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

#monthObject

Calendar current month



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

def month
  @date.month
end