]> git.openstreetmap.org Git - rails.git/blob - app/controllers/diary_entry_controller.rb
Added custom validator for UTF-8 strings.
[rails.git] / app / controllers / diary_entry_controller.rb
1 class DiaryEntryController < ApplicationController
2   layout 'site', :except => :rss
3
4   before_filter :authorize_web
5   before_filter :require_user, :only => [:new, :edit]
6   before_filter :check_database_availability
7
8   def new
9     @title = 'New diary entry'
10
11     if params[:diary_entry]     
12       @diary_entry = DiaryEntry.new(params[:diary_entry])
13       @diary_entry.user = @user
14
15       if @diary_entry.save 
16         redirect_to :controller => 'diary_entry', :action => 'list', :display_name => @user.display_name 
17       else
18         render :action => 'edit'
19       end
20     else
21       render :action => 'edit'
22     end
23   end
24
25   def edit
26     @title= 'Edit diary entry'
27     @diary_entry = DiaryEntry.find(params[:id])
28
29     if @user != @diary_entry.user
30       redirect_to :controller => 'diary_entry', :action => 'view', :id => params[:id]
31     elsif params[:diary_entry]
32       @diary_entry.title = params[:diary_entry][:title]
33       @diary_entry.body = params[:diary_entry][:body]
34       @diary_entry.latitude = params[:diary_entry][:latitude]
35       @diary_entry.longitude = params[:diary_entry][:longitude]
36
37       if @diary_entry.save
38         redirect_to :controller => 'diary_entry', :action => 'view', :id => params[:id]
39       end
40     end
41   end
42
43   def comment
44     @entry = DiaryEntry.find(params[:id])
45     @diary_comment = @entry.diary_comments.build(params[:diary_comment])
46     @diary_comment.user = @user
47     if @diary_comment.save
48       Notifier::deliver_diary_comment_notification(@diary_comment)
49       redirect_to :controller => 'diary_entry', :action => 'view', :display_name => @entry.user.display_name, :id => @entry.id
50     else
51       render :action => 'view'
52     end
53   end
54
55   def list
56     if params[:display_name]
57       @this_user = User.find_by_display_name(params[:display_name], :conditions => "visible = 1")
58
59       if @this_user
60         @title = @this_user.display_name + "'s diary"
61         @entry_pages, @entries = paginate(:diary_entries,
62                                           :conditions => ['user_id = ?', @this_user.id],
63                                           :order => 'created_at DESC',
64                                           :per_page => 20)
65       else
66         @not_found_user = params[:display_name]
67
68         render :action => 'no_such_user', :status => :not_found
69       end
70     else
71       @title = "Users' diaries"
72       @entry_pages, @entries = paginate(:diary_entries,
73                                         :order => 'created_at DESC',
74                                         :per_page => 20)
75     end
76   end
77
78   def rss
79     if params[:display_name]
80       user = User.find_by_display_name(params[:display_name], :conditions => "visible = 1")
81
82       if user
83         @entries = DiaryEntry.find(:all, :conditions => ['user_id = ?', user.id], :order => 'created_at DESC', :limit => 20)
84         @title = "OpenStreetMap diary entries for #{user.display_name}"
85         @description = "Recent OpenStreetmap diary entries from #{user.display_name}"
86         @link = "http://www.openstreetmap.org/user/#{user.display_name}/diary"
87
88         render :content_type => Mime::RSS
89       else
90         render :nothing => true, :status => :not_found
91       end
92     else
93       @entries = DiaryEntry.find(:all, :order => 'created_at DESC', :limit => 20)
94       @title = "OpenStreetMap diary entries"
95       @description = "Recent diary entries from users of OpenStreetMap"
96       @link = "http://www.openstreetmap.org/diary"
97
98       render :content_type => Mime::RSS
99     end
100   end
101
102   def view
103     user = User.find_by_display_name(params[:display_name], :conditions => "visible = 1")
104
105     if user
106       @entry = DiaryEntry.find(:first, :conditions => ['user_id = ? AND id = ?', user.id, params[:id]])
107     else
108       @not_found_user = params[:display_name]
109
110       render :action => 'no_such_user', :status => :not_found
111     end
112   end
113 end