]> git.openstreetmap.org Git - rails.git/blob - app/controllers/diary_entry_controller.rb
Merge 17067 from trunk.
[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 :set_locale
6   before_filter :require_user, :only => [:new, :edit]
7   before_filter :check_database_readable
8   before_filter :check_database_writable, :only => [:new, :edit]
9
10   def new
11     @title = t 'diary_entry.new.title'
12
13     if params[:diary_entry]
14       @diary_entry = DiaryEntry.new(params[:diary_entry])
15       @diary_entry.user = @user
16
17       if @diary_entry.save
18         default_lang = @user.preferences.find(:first, :conditions => {:k => "diary.default_language"})
19         if default_lang
20           default_lang.v = @diary_entry.language_code
21           default_lang.save!
22         else
23           @user.preferences.create(:k => "diary.default_language", :v => @diary_entry.language_code)
24         end
25         redirect_to :controller => 'diary_entry', :action => 'list', :display_name => @user.display_name 
26       else
27         render :action => 'edit'
28       end
29     else
30       default_lang = @user.preferences.find(:first, :conditions => {:k => "diary.default_language"})
31       lang_code = default_lang ? default_lang.v : @user.preferred_language
32       @diary_entry = DiaryEntry.new(:language_code => lang_code)
33       render :action => 'edit'
34     end
35   end
36
37   def edit
38     @title= t 'diary_entry.edit.title'
39     @diary_entry = DiaryEntry.find(params[:id])
40
41     if @user != @diary_entry.user
42       redirect_to :controller => 'diary_entry', :action => 'view', :id => params[:id]
43     elsif params[:diary_entry]
44       if @diary_entry.update_attributes(params[:diary_entry])
45         redirect_to :controller => 'diary_entry', :action => 'view', :id => params[:id]
46       end
47     end
48   rescue ActiveRecord::RecordNotFound
49     render :action => "no_such_entry", :status => :not_found
50   end
51
52   def comment
53     @entry = DiaryEntry.find(params[:id])
54     @diary_comment = @entry.diary_comments.build(params[:diary_comment])
55     @diary_comment.user = @user
56     if @diary_comment.save
57       if @diary_comment.user != @entry.user
58         Notifier::deliver_diary_comment_notification(@diary_comment)
59       end
60
61       redirect_to :controller => 'diary_entry', :action => 'view', :display_name => @entry.user.display_name, :id => @entry.id
62     else
63       render :action => 'view'
64     end
65   end
66
67   def list
68     if params[:display_name]
69       @this_user = User.find_by_display_name(params[:display_name], :conditions => {:visible => true})
70
71       if @this_user
72         @title = t 'diary_entry.list.user_title', :user => @this_user.display_name
73         @entry_pages, @entries = paginate(:diary_entries,
74                                           :conditions => ['user_id = ?', @this_user.id],
75                                           :order => 'created_at DESC',
76                                           :per_page => 20)
77       else
78         @title = t'diary_entry.no_such_user.title'
79         @not_found_user = params[:display_name]
80
81         render :action => 'no_such_user', :status => :not_found
82       end
83     elsif params[:language]
84       @title = t 'diary_entry.list.in_language_title', :language => Language.find(params[:language]).english_name
85       @entry_pages, @entries = paginate(:diary_entries, :include => :user,
86                                         :conditions => ["users.visible = ? AND diary_entries.language_code = ?", true, params[:language]],
87                                         :order => 'created_at DESC',
88                                         :per_page => 20)
89     else
90       @title = t 'diary_entry.list.title'
91       @entry_pages, @entries = paginate(:diary_entries, :include => :user,
92                                         :conditions => ["users.visible = ?", true],
93                                         :order => 'created_at DESC',
94                                         :per_page => 20)
95     end
96   end
97
98   def rss
99     request.format = :rss
100
101     if params[:display_name]
102       user = User.find_by_display_name(params[:display_name], :conditions => {:visible => true})
103
104       if user
105         @entries = DiaryEntry.find(:all, :conditions => ['user_id = ?', user.id], :order => 'created_at DESC', :limit => 20)
106         @title = I18n.t('diary_entry.feed.user.title', :user => user.display_name)
107         @description = I18n.t('diary_entry.feed.user.description', :user => user.display_name)
108         @link = "http://#{SERVER_URL}/user/#{user.display_name}/diary"
109       else
110         render :nothing => true, :status => :not_found
111       end
112     elsif params[:language]
113       @entries = DiaryEntry.find(:all, :include => :user,
114         :conditions => ["users.visible = ? AND diary_entries.language_code = ?", true, params[:language]],
115         :order => 'created_at DESC', :limit => 20)
116       @title = I18n.t('diary_entry.feed.language.title', :language_name => Language.find(params[:language]).english_name)
117       @description = I18n.t('diary_entry.feed.language.description', :language_name => Language.find(params[:language]).english_name)
118       @link = "http://#{SERVER_URL}/diary/#{params[:language]}"
119     else
120       @entries = DiaryEntry.find(:all, :include => :user,
121                                  :conditions => ["users.visible = ?", true],
122                                  :order => 'created_at DESC', :limit => 20)
123       @title = I18n.t('diary_entry.feed.all.title')
124       @description = I18n.t('diary_entry.feed.all.description')
125       @link = "http://#{SERVER_URL}/diary"
126     end
127   end
128
129   def view
130     user = User.find_by_display_name(params[:display_name], :conditions => {:visible => true})
131
132     if user
133       @entry = DiaryEntry.find(:first, :conditions => ['user_id = ? AND id = ?', user.id, params[:id]])
134       if @entry
135         @title = t 'diary_entry.view.title', :user => params[:display_name]
136       else
137         @title = t 'diary_entry.no_such_entry.title', :id => params[:id]
138         render :action => 'no_such_entry', :status => :not_found
139       end
140     else
141       @not_found_user = params[:display_name]
142
143       render :action => 'no_such_user', :status => :not_found
144     end
145   end
146 end