Added localized language names with plugin from http://github.com/grosser/i18n_data...
[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         redirect_to :controller => 'diary_entry', :action => 'list', :display_name => @user.display_name 
19       else
20         render :action => 'edit'
21       end
22     else
23       @diary_entry = DiaryEntry.new(:language_code => @user.preferred_language)
24       render :action => 'edit'
25     end
26   end
27
28   def edit
29     @title= t 'diary_entry.edit.title'
30     @diary_entry = DiaryEntry.find(params[:id])
31
32     if @user != @diary_entry.user
33       redirect_to :controller => 'diary_entry', :action => 'view', :id => params[:id]
34     elsif params[:diary_entry]
35       if @diary_entry.update_attributes(params[:diary_entry])
36         redirect_to :controller => 'diary_entry', :action => 'view', :id => params[:id]
37       end
38     end
39   rescue ActiveRecord::RecordNotFound
40     render :action => "no_such_entry", :status => :not_found
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 => true})
58
59       if @this_user
60         @title = t 'diary_entry.list.user_title', :user => @this_user.display_name
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         @title = t'diary_entry.no_such_user.title'
67         @not_found_user = params[:display_name]
68
69         render :action => 'no_such_user', :status => :not_found
70       end
71     elsif params[:language]
72 #      @title = t 'diary_entry.list.in_language_title', :language => Language.find(params[:language]).english_name
73       @title = t 'diary_entry.list.in_language_title', :language => I18nData.languages(I18n.locale)[params[:language].upcase]
74       @entry_pages, @entries = paginate(:diary_entries, :include => :user,
75                                         :conditions => ["users.visible = ? AND diary_entries.language_code = ?", true, params[:language]],
76                                         :order => 'created_at DESC',
77                                         :per_page => 20)
78     else
79       @title = t 'diary_entry.list.title'
80       @entry_pages, @entries = paginate(:diary_entries, :include => :user,
81                                         :conditions => ["users.visible = ?", true],
82                                         :order => 'created_at DESC',
83                                         :per_page => 20)
84     end
85   end
86
87   def rss
88     request.format = :rss
89
90     if params[:display_name]
91       user = User.find_by_display_name(params[:display_name], :conditions => {:visible => true})
92
93       if user
94         @entries = DiaryEntry.find(:all, :conditions => ['user_id = ?', user.id], :order => 'created_at DESC', :limit => 20)
95         @title = "OpenStreetMap diary entries for #{user.display_name}"
96         @description = "Recent OpenStreetmap diary entries from #{user.display_name}"
97         @link = "http://#{SERVER_URL}/user/#{user.display_name}/diary"
98       else
99         render :nothing => true, :status => :not_found
100       end
101     elsif params[:language]
102       @entries = DiaryEntry.find(:all, :include => :user,
103         :conditions => ["users.visible = ? AND diary_entries.language_code = ?", true, params[:language]],
104         :order => 'created_at DESC', :limit => 20)
105       @title = "OpenStreetMap diary entries in #{Language.find(params[:language]).english_name}"
106       @description = "Recent diary entries from users of OpenStreetMap in #{Language.find(params[:language]).english_name}"
107       @link = "http://#{SERVER_URL}/diary/#{params[:language]}"
108     else
109       @entries = DiaryEntry.find(:all, :include => :user,
110                                  :conditions => ["users.visible = ?", true],
111                                  :order => 'created_at DESC', :limit => 20)
112       @title = "OpenStreetMap diary entries"
113       @description = "Recent diary entries from users of OpenStreetMap"
114       @link = "http://#{SERVER_URL}/diary"
115     end
116   end
117
118   def view
119     user = User.find_by_display_name(params[:display_name], :conditions => {:visible => true})
120
121     if user
122       @entry = DiaryEntry.find(:first, :conditions => ['user_id = ? AND id = ?', user.id, params[:id]])
123       if @entry
124         @title = t 'diary_entry.view.title', :user => params[:display_name]
125       else
126         render :action => 'no_such_entry', :status => :not_found
127       end
128     else
129       @not_found_user = params[:display_name]
130
131       render :action => 'no_such_user', :status => :not_found
132     end
133   end
134 end