mirror of
https://github.com/TracksApp/tracks.git
synced 2025-12-18 00:00: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 "tickler" => "todos#list_deferred"
|
||||||
match 'review' => "projects#review"
|
match 'review' => "projects#review"
|
||||||
match 'calendar' => "todos#calendar"
|
match 'calendar' => "calendar#show"
|
||||||
match 'done' => "stats#done", :as => 'done_overview'
|
match 'done' => "stats#done", :as => 'done_overview'
|
||||||
|
|
||||||
match 'search' => 'search#index'
|
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.pending?, "t4 should remain pending"
|
||||||
assert t4.predecessors.map(&:id).include?(t3.id)
|
assert t4.predecessors.map(&:id).include?(t3.id)
|
||||||
end
|
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
|
end
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue