summaryrefslogtreecommitdiffstats
path: root/lib/redmine
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2007-10-07 20:07:11 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2007-10-07 20:07:11 +0000
commitec51cdd0f9926d0fe42e9563e0f5bf1a3db18196 (patch)
tree9a6c7a92e250707b8fbd5ac9e9758a6ac56d3d9d /lib/redmine
parentcdb2781b48f2a3ee2ba7d04574671ee195f7006f (diff)
downloadredmine-ec51cdd0f9926d0fe42e9563e0f5bf1a3db18196.tar.gz
redmine-ec51cdd0f9926d0fe42e9563e0f5bf1a3db18196.zip
Calendar:
* added an helper and moved the rendering code to a shared partial (used by project calendar and my calendar) * first day of week can now be set in lang files (general_first_day_of_week) git-svn-id: http://redmine.rubyforge.org/svn/trunk@815 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'lib/redmine')
-rw-r--r--lib/redmine/helpers/calendar.rb76
1 files changed, 76 insertions, 0 deletions
diff --git a/lib/redmine/helpers/calendar.rb b/lib/redmine/helpers/calendar.rb
new file mode 100644
index 000000000..347f1c5b5
--- /dev/null
+++ b/lib/redmine/helpers/calendar.rb
@@ -0,0 +1,76 @@
+# redMine - project management software
+# Copyright (C) 2006-2007 Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+module Redmine
+ module Helpers
+
+ # Simple class to compute the start and end dates of a calendar
+ class Calendar
+ include GLoc
+ attr_reader :startdt, :enddt
+
+ def initialize(date, lang = current_language, period = :month)
+ @date = date
+ @events = []
+ @ending_events_by_days = {}
+ @starting_events_by_days = {}
+ set_language 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
+
+ # Sets calendar events
+ 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
+
+ # Returns events for the given day
+ def events_on(day)
+ ((@ending_events_by_days[day] || []) + (@starting_events_by_days[day] || [])).uniq
+ end
+
+ # Calendar current month
+ def month
+ @date.month
+ end
+
+ # Return the first day of week
+ # 1 = Monday ... 7 = Sunday
+ def first_wday
+ @first_dow ||= (l(:general_first_day_of_week).to_i - 1)%7 + 1
+ end
+
+ def last_wday
+ @last_dow ||= (first_wday + 5)%7 + 1
+ end
+ end
+ end
+end