add calendar to menu and implement ical

tested ical with outlook 2007
This commit is contained in:
Reinier Balt 2008-10-03 22:44:58 +02:00
parent fcaea3ce20
commit 541d6f5b69
7 changed files with 89 additions and 14 deletions

View file

@ -54,6 +54,7 @@ window.onload=function(){
<% if current_user.is_admin? -%>
<li><%= navigation_link("Admin", users_path, {:accesskey => "a", :title => "Add or delete users"} ) %></li>
<% end -%>
<li><%= navigation_link(image_tag("x-office-calendar.png", :size => "16X16", :border => 0), calendar_path, :title => "Calendar of due actions" ) %></li>
<li><%= navigation_link(image_tag("recurring_menu16x16.png", :size => "16X16", :border => 0), {:controller => "recurring_todos", :action => "index"}, :title => "Manage recurring actions" ) %></li>
<li><%= navigation_link(image_tag("feed-icon.png", :size => "16X16", :border => 0), {:controller => "feedlist", :action => "index"}, :title => "See a list of available feeds" ) %></li>
<li><%= navigation_link(image_tag("menustar.gif", :size => "16X16", :border => 0), tag_path("starred"), :title => "See your starred actions" ) %></li>

View file

@ -2,33 +2,50 @@
<div class="container">
<h2>Due today</h2>
<%= render :partial => "todos/todo", :collection => @due_today %>
<div id="due_today">
<%= render :partial => "todos/todo", :collection => @due_today %>
</div>
</div>
<div class="container">
<h2>Due this week</h2>
<%= render :partial => "todos/todo", :collection => @due_this_week %>
<h2>Due in rest of this week</h2>
<div id="due_this_week">
<%= render :partial => "todos/todo", :collection => @due_this_week %>
</div>
</div>
<div class="container">
<h2>Due next week</h2>
<%= render :partial => "todos/todo", :collection => @due_next_week %>
<div id="due_next_week">
<%= render :partial => "todos/todo", :collection => @due_next_week %>
</div>
</div>
<div class="container">
<h2>Due rest of this month</h2>
<%= render :partial => "todos/todo", :collection => @due_this_month %>
<h2>Due in rest of this month</h2>
<div id="due_this_month">
<%= render :partial => "todos/todo", :collection => @due_this_month %>
</div>
</div>
<div class="container">
<h2>Due next month and later</h2>
<%= render :partial => "todos/todo", :collection => @due_after_this_month %>
<div id="due_after_this_month">
<%= render :partial => "todos/todo", :collection => @due_after_this_month %>
</div>
</div>
</div><!-- End of display_box -->
<div id="input_box">
<input id="hide_tickler" type="checkbox" tabindex="5" name="hide_tickler" checked="true"/>
<div class="input_box" id="input_box">
<input class="hide_tickler" id="hide_tickler" type="checkbox" tabindex="5" name="hide_tickler" checked="true"/>
<label for="hide_tickler"> Show actions in tickler</label>
<br/><br/>
<p><span class="feed">iCal</span> - Get this calendar in iCal-format to add to your own calendar</p>
</div>
<p><%= link_to('<span class="feed">iCal</span>', {:format => 'ics', :token => current_user.token}, :title => "iCal feed" ) %>
- Get this calendar in iCal format</p>
</div>
<%
apply_behavior 'input.hide_tickler:click', :prevent_default => true do |page|
page << "alert('hiding action in tickler from calendar is not yet implemented');"
end
%>

View file

@ -0,0 +1,25 @@
BEGIN:VCALENDAR
PRODID:-//TRACKS//<%= TRACKS_VERSION %>//EN
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:PUBLISH
X-WR-CALNAME:Tracks
<% for todo in @due_all -%>
BEGIN:VEVENT
DTSTART;VALUE=DATE:<%= todo.due.strftime("%Y%m%d") %>
DTEND;VALUE=DATE:<%= (todo.due+1.day).strftime("%Y%m%d") %>
DTSTAMP:<%= todo.due.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:<%= todo.due.strftime("%Y%m%dT%H%M%SZ") %>
LOCATION:
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:<%= todo.description %>
TRANSP:TRANSPARENT
END:VEVENT
<% end -%>
END:VCALENDAR

View file

@ -101,6 +101,12 @@ if @saved
elsif source_view_is :stats
page.replace dom_id(@todo), :partial => 'todos/todo', :locals => { :parent_container_type => parent_container_type }
page.visual_effect :highlight, dom_id(@todo), :duration => 3
elsif source_view_is :calendar
if @due_date_changed
page[@todo].remove
page.insert_html :bottom, @new_due_id, :partial => 'todos/todo'
page.visual_effect :highlight, dom_id(@todo), :duration => 3
end
else
logger.error "unexpected source_view '#{params[:_source_view]}'"
end