mirror of
https://github.com/TracksApp/tracks.git
synced 2025-12-16 23:30:12 +01:00
Move the calendar to its own controller
This commit is contained in:
parent
70fc1848c2
commit
d1ff0daf6f
6 changed files with 97 additions and 26 deletions
21
app/controllers/calendar_controller.rb
Normal file
21
app/controllers/calendar_controller.rb
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
class CalendarController < ApplicationController
|
||||
def show
|
||||
@source_view = 'calendar'
|
||||
@page_title = t('todos.calendar_page_title')
|
||||
|
||||
@calendar = Todos::Calendar.new(current_user)
|
||||
@projects = @calendar.projects
|
||||
@count = current_user.todos.not_completed.are_due.count
|
||||
@due_all = current_user.todos.not_completed.are_due.reorder("due")
|
||||
|
||||
respond_to do |format|
|
||||
format.html
|
||||
format.ics {
|
||||
render :action => 'calendar', :layout => false, :content_type => Mime::ICS
|
||||
}
|
||||
format.xml {
|
||||
render :xml => @due_all.to_xml( *to_xml_params )
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
13
app/views/calendar/show.html.erb
Normal file
13
app/views/calendar/show.html.erb
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
<div id="display_box">
|
||||
|
||||
<%= todos_calendar_container(:due_today, @calendar.due_today ) %>
|
||||
<%= todos_calendar_container(:due_this_week, @calendar.due_this_week ) %>
|
||||
<%= todos_calendar_container(:due_next_week, @calendar.due_next_week ) %>
|
||||
<%= todos_calendar_container(:due_this_month, @calendar.due_this_month ) %>
|
||||
<%= todos_calendar_container(:due_after_this_month, @calendar.due_after_this_month) %>
|
||||
|
||||
</div><!-- End of display_box -->
|
||||
<div class="input_box" id="input_box">
|
||||
<p><%= link_to('<span class="feed">iCal</span>'.html_safe, {:format => 'ics', :token => current_user.token}, :title => "iCal feed" ) %>
|
||||
- <%= t('todos.calendar.get_in_ical_format') %></p>
|
||||
</div>
|
||||
32
app/views/calendar/show.ics.erb
Normal file
32
app/views/calendar/show.ics.erb
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
BEGIN:VCALENDAR
|
||||
PRODID:-//TRACKS//<%= TRACKS_VERSION %>//EN
|
||||
VERSION:2.0
|
||||
CALSCALE:GREGORIAN
|
||||
METHOD:PUBLISH
|
||||
X-WR-CALNAME:Tracks
|
||||
<% for todo in @due_all
|
||||
due_date = todo.due
|
||||
overdue_text = ""
|
||||
if due_date.at_midnight < Time.zone.now.at_midnight
|
||||
due_date = Time.zone.now
|
||||
overdue_text = t('todos.overdue') +": "
|
||||
end
|
||||
modified = todo.updated_at || todo.created_at
|
||||
%>BEGIN:VEVENT
|
||||
DTSTART;VALUE=DATE:<%= due_date.strftime("%Y%m%d") %>
|
||||
DTEND;VALUE=DATE:<%= (due_date+1.day).strftime("%Y%m%d") %>
|
||||
DTSTAMP:<%= due_date.strftime("%Y%m%dT%H%M%SZ") %>
|
||||
UID:<%= todo_url(todo) %>
|
||||
CLASS:PUBLIC
|
||||
CATEGORIES:Tracks
|
||||
CREATED:<%= todo.created_at.strftime("%Y%m%dT%H%M%SZ") %>
|
||||
DESCRIPTION:<%= format_ical_notes(todo.notes) %>
|
||||
LAST-MODIFIED:<%= modified.strftime("%Y%m%dT%H%M%SZ") %>
|
||||
LOCATION:
|
||||
SEQUENCE:0
|
||||
STATUS:CONFIRMED
|
||||
SUMMARY:<%= overdue_text + todo.description %>
|
||||
TRANSP:TRANSPARENT
|
||||
END:VEVENT
|
||||
<% end
|
||||
%>END:VCALENDAR
|
||||
|
|
@ -10,7 +10,7 @@ Tracksapp::Application.routes.draw do
|
|||
|
||||
match "tickler" => "todos#list_deferred"
|
||||
match 'review' => "projects#review"
|
||||
match 'calendar' => "todos#calendar"
|
||||
match 'calendar' => "calendar#show"
|
||||
match 'done' => "stats#done", :as => 'done_overview'
|
||||
|
||||
match 'search' => 'search#index'
|
||||
|
|
|
|||
30
test/functional/calendar_controller_test.rb
Normal file
30
test/functional/calendar_controller_test.rb
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
require_relative '../test_helper'
|
||||
|
||||
class CalendarControllerTest < ActionController::TestCase
|
||||
def test_show
|
||||
login_as(:admin_user)
|
||||
|
||||
get :show
|
||||
|
||||
projects = [projects(:timemachine),
|
||||
projects(:moremoney),
|
||||
projects(:gardenclean)]
|
||||
due_today = [todos(:phone_grandfather),
|
||||
todos(:call_bill_gates_every_day),
|
||||
todos(:due_today)]
|
||||
due_next_week = [todos(:buy_shares),
|
||||
todos(:buy_stego_bait),
|
||||
todos(:new_action_in_context)]
|
||||
due_this_month = [todos(:call_bill),
|
||||
todos(:call_dino_ext)]
|
||||
|
||||
assert_equal "calendar", assigns['source_view']
|
||||
assert_equal projects, assigns['projects']
|
||||
assert_equal due_today, assigns['calendar'].due_today
|
||||
assert_equal [], assigns['calendar'].due_this_week
|
||||
assert_equal due_next_week, assigns['calendar'].due_next_week
|
||||
assert_equal due_this_month, assigns['calendar'].due_this_month
|
||||
assert_equal [], assigns['calendar'].due_after_this_month
|
||||
assert_equal 8, assigns['count']
|
||||
end
|
||||
end
|
||||
|
|
@ -898,29 +898,4 @@ class TodosControllerTest < ActionController::TestCase
|
|||
assert t4.pending?, "t4 should remain pending"
|
||||
assert t4.predecessors.map(&:id).include?(t3.id)
|
||||
end
|
||||
|
||||
|
||||
def test_calendar
|
||||
login_as(:admin_user)
|
||||
|
||||
get :calendar
|
||||
|
||||
projects = [projects(:timemachine),
|
||||
projects(:moremoney),
|
||||
projects(:gardenclean)]
|
||||
due_today = [todos(:phone_grandfather),
|
||||
todos(:call_bill_gates_every_day),
|
||||
todos(:due_today)]
|
||||
due_next_week = [todos(:buy_shares),
|
||||
todos(:buy_stego_bait),
|
||||
todos(:new_action_in_context)]
|
||||
|
||||
assert_equal "calendar", assigns['source_view']
|
||||
assert_equal projects, assigns['projects']
|
||||
assert_equal due_today, assigns['calendar'].due_today
|
||||
assert_equal [], assigns['calendar'].due_this_week
|
||||
assert_equal due_next_week, assigns['calendar'].due_next_week
|
||||
assert_equal [], assigns['calendar'].due_this_month
|
||||
assert_equal 8, assigns['count']
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue