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_name, #find_language, #format_date, #format_time, included, #l, #l_hours, #l_or_humanize, #ll, #month_name, #set_language_if_valid, #valid_languages

Constructor Details

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

Returns a new instance of Calendar



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/redmine/helpers/calendar.rb', line 23

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

- (Object) enddt (readonly)

Returns the value of attribute enddt



21
22
23
# File 'lib/redmine/helpers/calendar.rb', line 21

def enddt
  @enddt
end

- (Object) startdt (readonly)

Returns the value of attribute startdt



21
22
23
# File 'lib/redmine/helpers/calendar.rb', line 21

def startdt
  @startdt
end

Instance Method Details

- (Object) events=(events)

Sets calendar events



46
47
48
49
50
# File 'lib/redmine/helpers/calendar.rb', line 46

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

- (Object) events_on(day)

Returns events for the given day



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

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

- (Object) first_wday

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



64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/redmine/helpers/calendar.rb', line 64

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

- (Object) last_wday



77
78
79
# File 'lib/redmine/helpers/calendar.rb', line 77

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

- (Object) month

Calendar current month



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

def month
  @date.month
end