Project

General

Profile

Feature #1077 » ICS_Support__4.patch

Frank Schwarz, 2009-11-23 21:55

View differences:

app/controllers/issues_controller.rb (working copy)
24 24
  before_filter :find_project, :only => [:new, :update_form, :preview]
25 25
  before_filter :authorize, :except => [:index, :changes, :gantt, :calendar, :preview, :update_form, :context_menu]
26 26
  before_filter :find_optional_project, :only => [:index, :changes, :gantt, :calendar]
27
  accept_key_auth :index, :show, :changes
27
  accept_key_auth :index, :show, :changes, :calendar
28 28

  
29 29
  helper :journals
30 30
  helper :projects
......
401 401
    retrieve_query
402 402
    if @query.valid?
403 403
      events = []
404
      if (request.format == Mime::ICS)
405
        @calendar.startdt = @project.created_on.to_s(:db)
406
      end
404 407
      events += Issue.find(:all, 
405 408
                           :include => [:tracker, :status, :assigned_to, :priority, :project], 
406 409
                           :conditions => ["(#{@query.statement}) AND ((start_date BETWEEN ? AND ?) OR (due_date BETWEEN ? AND ?))", @calendar.startdt, @calendar.enddt, @calendar.startdt, @calendar.enddt]
......
410 413
                                     
411 414
      @calendar.events = events
412 415
    end
413
    
414
    render :layout => false if request.xhr?
416
    respond_to do |format|
417
        format.html { render :layout => false if request.xhr? }
418
        format.ics  { render_ics(events) }
419
    end
420
#    render :layout => false if request.xhr?
415 421
  end
416 422
  
417 423
  def context_menu
app/controllers/application_controller.rb (working copy)
17 17

  
18 18
require 'uri'
19 19
require 'cgi'
20
require 'icalendar'
20 21

  
21 22
class ApplicationController < ActionController::Base
22 23
  include Redmine::I18n
......
53 54
      user = User.try_to_autologin(cookies[:autologin])
54 55
      session[:user_id] = user.id if user
55 56
      user
56
    elsif params[:format] == 'atom' && params[:key] && accept_key_auth_actions.include?(params[:action])
57
    elsif ['atom', 'ics'].include?(params[:format]) && params[:key] && accept_key_auth_actions.include?(params[:action])
57 58
      # RSS key authentication does not start a session
58 59
      User.find_by_rss_key(params[:key])
59 60
    end
......
186 187
    render :template => "common/feed.atom.rxml", :layout => false, :content_type => 'application/atom+xml'
187 188
  end
188 189
  
190
  def render_ics(items, options={})
191
    cal = Icalendar::Calendar.new
192
    items.each { |i| 
193
      event = Icalendar::Event.new
194
      event.dtstart     =  i.start_date
195
      event.dtend       =  i.due_date
196
      if i.is_a? Issue
197
        event.summary     =  i.subject
198
      else
199
        event.summary     =  "V. " + i.name
200
      end
201
      if !i.description.nil?
202
        event.description = i.description
203
      end
204
      cal.add_event(event)
205
    }
206
    @cal_string = cal.to_ical 
207
    render :template => "common/calendar.ics.erb", :layout => false , :content_type => Mime::ICS
208
  end
209
  
189 210
  def self.accept_key_auth(*actions)
190 211
    actions = actions.flatten.map(&:to_s)
191 212
    write_inheritable_attribute('accept_key_auth_actions', actions)
app/views/issues/_sidebar.rhtml (working copy)
3 3
<% if @project %>
4 4
<%= link_to l(:field_summary), :controller => 'reports', :action => 'issue_report', :id => @project %><br />
5 5
<%= link_to l(:label_change_log), :controller => 'projects', :action => 'changelog', :id => @project %><br />
6
<%= link_to 'ICS with open issues', :controller => 'issues', :action => 'calendar', :format => 'ics', :key => User.current.rss_key, :project_id => @project %><br />
7
<%= link_to 'ICS with all issues', :controller => 'issues', :action => 'calendar', :format => 'ics', :status_id => '*', :key => User.current.rss_key, :project_id => @project %>
6 8
<% end %>
7 9
<%= call_hook(:view_issues_sidebar_issues_bottom) %>
8 10

  
lib/redmine/helpers/calendar.rb (working copy)
44 44
          raise 'Invalid period'
45 45
        end
46 46
      end
47

  
48
      def startdt=(dt)
49
        @startdt = dt
50
      end
47 51
      
48 52
      # Sets calendar events
49 53
      def events=(events)
(4-4/12)