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, #normalize_float, #set_language_if_valid, #valid_languages

Constructor Details

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

Returns a new instance of Calendar.



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

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.



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

def enddt
  @enddt
end

#startdtObject (readonly)

Returns the value of attribute startdt.



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

def startdt
  @startdt
end

Instance Method Details

#day_css_classes(day) ⇒ Object



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

def day_css_classes(day)
  css = day.month==month ? +'this-month' : +'other-month'
  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



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

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



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

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



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

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

#format_monthObject



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

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

#last_wdayObject



97
98
99
# File 'lib/redmine/helpers/calendar.rb', line 97

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

#monthObject

Calendar current month



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

def month
  @date.month
end

#week_number(day) ⇒ Object



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

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