Commit a482d2bc23b13713075ac410aa400e4da4d05376

Authored by Arthur Esposte
1 parent 8791c34e

Refactoring view_page method of content_viewer_controller

app/controllers/public/content_viewer_controller.rb
@@ -8,49 +8,31 @@ class ContentViewerController < ApplicationController @@ -8,49 +8,31 @@ class ContentViewerController < ApplicationController
8 helper TagsHelper 8 helper TagsHelper
9 9
10 def view_page 10 def view_page
11 - path = params[:page]  
12 - path = path.join('/') if path.kind_of?(Array)  
13 - path = "#{path}.#{params[:format]}" if params[:format] 11 + path = get_path(params[:page], params[:format])
  12 +
14 @version = params[:version].to_i 13 @version = params[:version].to_i
15 14
16 if path.blank? 15 if path.blank?
17 - @page = profile.home_page  
18 - if @page.nil?  
19 - redirect_to :controller => 'profile', :action => 'index', :profile => profile.identifier  
20 - return  
21 - end 16 + @page = profile.home_page
  17 + return if redirected_to_profile_index
22 else 18 else
23 @page = profile.articles.find_by_path(path) 19 @page = profile.articles.find_by_path(path)
24 - unless @page  
25 - page_from_old_path = profile.articles.find_by_old_path(path)  
26 - if page_from_old_path  
27 - redirect_to profile.url.merge(:page => page_from_old_path.explode_path)  
28 - return  
29 - end  
30 - end 20 + return if redirecetd_page_from_old_path(path)
31 end 21 end
32 22
33 return unless allow_access_to_page(path) 23 return unless allow_access_to_page(path)
34 24
35 if @version > 0 25 if @version > 0
36 return render_access_denied unless @page.display_versions? 26 return render_access_denied unless @page.display_versions?
37 - @versioned_article = @page.versions.find_by_version(@version)  
38 - if @versioned_article && @page.versions.latest.version != @versioned_article.version  
39 - render :template => 'content_viewer/versioned_article.html.erb'  
40 - return  
41 - end 27 + return if rendered_versioned_article
42 end 28 end
43 29
44 redirect_to_translation and return if @page.profile.redirect_l10n 30 redirect_to_translation and return if @page.profile.redirect_l10n
45 31
46 - if request.post?  
47 - if @page.forum? && @page.has_terms_of_use && params[:terms_accepted] == "true"  
48 - @page.add_agreed_user(user)  
49 - end  
50 - elsif !@page.parent.nil? && @page.parent.forum?  
51 - unless @page.parent.agrees_with_terms?(user)  
52 - redirect_to @page.parent.url  
53 - end 32 + if request.post? && @page.forum?
  33 + process_forum_terms_of_use(user, params[:terms_accepted])
  34 + elsif is_a_forum_topic?(@page)
  35 + redirect_to @page.parent.url unless @page.parent.agrees_with_terms?(user)
54 end 36 end
55 37
56 # At this point the page will be showed 38 # At this point the page will be showed
@@ -58,64 +40,22 @@ class ContentViewerController < ApplicationController @@ -58,64 +40,22 @@ class ContentViewerController < ApplicationController
58 40
59 @page = FilePresenter.for @page 41 @page = FilePresenter.for @page
60 42
61 - if @page.download? params[:view]  
62 - headers['Content-Type'] = @page.mime_type  
63 - headers.merge! @page.download_headers  
64 - data = @page.data  
65 -  
66 - # TODO test the condition  
67 - if data.nil?  
68 - raise "No data for file"  
69 - end  
70 -  
71 - render :text => data, :layout => false  
72 - return  
73 - end 43 + return if rendered_file_download(params[:view])
74 44
75 @form_div = params[:form] 45 @form_div = params[:form]
76 46
77 #FIXME see a better way to do this. It's not need to pass this variable anymore 47 #FIXME see a better way to do this. It's not need to pass this variable anymore
78 @comment = Comment.new 48 @comment = Comment.new
79 49
80 - if @page.has_posts?  
81 - posts = if params[:year] and params[:month]  
82 - filter_date = DateTime.parse("#{params[:year]}-#{params[:month]}-01")  
83 - @page.posts.by_range(filter_date..filter_date.at_end_of_month)  
84 - else  
85 - @page.posts  
86 - end  
87 -  
88 - #FIXME Need to run this before the pagination because this version of  
89 - # will_paginate returns a will_paginate collection instead of a  
90 - # relation.  
91 - blog_with_translation = @page.blog? && @page.display_posts_in_current_language?  
92 - posts = posts.native_translations if blog_with_translation  
93 -  
94 - @posts = posts.paginate({ :page => params[:npage], :per_page => @page.posts_per_page }.merge(Article.display_filter(user, profile))).to_a  
95 -  
96 - if blog_with_translation  
97 - @posts.replace @posts.map{ |p| p.get_translation_to(FastGettext.locale) }.compact  
98 - end  
99 - end 50 + process_page_posts(params)
100 51
101 if @page.folder? && @page.gallery? 52 if @page.folder? && @page.gallery?
102 - @images = @page.images.select{ |a| a.display_to? user }  
103 - @images = @images.paginate(:per_page => per_page, :page => params[:npage]) unless params[:slideshow] 53 + @images = get_images(@page, params[:npage], params[:slideshow])
104 end 54 end
105 55
106 - @unfollow_form = params[:unfollow] && params[:unfollow] == 'true'  
107 - if params[:unfollow] && params[:unfollow] == 'commit' && request.post?  
108 - @page.followers -= [params[:email]]  
109 - if @page.save  
110 - session[:notice] = _("Notification of new comments to '%s' was successfully canceled") % params[:email]  
111 - end  
112 - end 56 + process_page_followers(params)
113 57
114 - @comments = @page.comments.without_spam  
115 - @comments = @plugins.filter(:unavailable_comments, @comments)  
116 - @comments_count = @comments.count  
117 - @comments = @comments.without_reply.paginate(:per_page => per_page, :page => params[:comment_page] )  
118 - @comment_order = params[:comment_order].nil? ? 'oldest' : params[:comment_order] 58 + process_comments(params)
119 59
120 if request.xhr? and params[:comment_order] 60 if request.xhr? and params[:comment_order]
121 if @comment_order == 'newest' 61 if @comment_order == 'newest'
@@ -203,4 +143,127 @@ class ContentViewerController < ApplicationController @@ -203,4 +143,127 @@ class ContentViewerController < ApplicationController
203 user_agent.match(/crawler/) || 143 user_agent.match(/crawler/) ||
204 user_agent.match(/\(.*https?:\/\/.*\)/) 144 user_agent.match(/\(.*https?:\/\/.*\)/)
205 end 145 end
  146 +
  147 + def get_path(page, format = nil)
  148 + path = page
  149 + path = path.join('/') if path.kind_of?(Array)
  150 + path = "#{path}.#{format}" if format
  151 +
  152 + return path
  153 + end
  154 +
  155 + def redirected_to_profile_index
  156 + if @page.nil?
  157 + redirect_to :controller => 'profile', :action => 'index', :profile => profile.identifier
  158 + return true
  159 + end
  160 +
  161 + return false
  162 + end
  163 +
  164 + def redirecetd_page_from_old_path(path)
  165 + unless @page
  166 + page_from_old_path = profile.articles.find_by_old_path(path)
  167 + if page_from_old_path
  168 + redirect_to profile.url.merge(:page => page_from_old_path.explode_path)
  169 + return true
  170 + end
  171 + end
  172 +
  173 + return false
  174 + end
  175 +
  176 + def process_forum_terms_of_use(user, terms_accepted = nil)
  177 + if @page.forum? && @page.has_terms_of_use && terms_accepted == "true"
  178 + @page.add_agreed_user(user)
  179 + end
  180 + end
  181 +
  182 + def is_a_forum_topic? (page)
  183 + return (!@page.parent.nil? && @page.parent.forum?)
  184 + end
  185 +
  186 + def rendered_versioned_article
  187 + @versioned_article = @page.versions.find_by_version(@version)
  188 + if @versioned_article && @page.versions.latest.version != @versioned_article.version
  189 + render :template => 'content_viewer/versioned_article.html.erb'
  190 + return true
  191 + end
  192 +
  193 + return false
  194 + end
  195 +
  196 + def rendered_file_download(view = nil)
  197 + if @page.download? view
  198 + headers['Content-Type'] = @page.mime_type
  199 + headers.merge! @page.download_headers
  200 + data = @page.data
  201 +
  202 + # TODO test the condition
  203 + if data.nil?
  204 + raise "No data for file"
  205 + end
  206 +
  207 + render :text => data, :layout => false
  208 + return true
  209 + end
  210 +
  211 + return false
  212 + end
  213 +
  214 + def process_page_posts(params)
  215 + if @page.has_posts?
  216 + posts = get_posts(params[:year], params[:month])
  217 +
  218 + #FIXME Need to run this before the pagination because this version of
  219 + # will_paginate returns a will_paginate collection instead of a
  220 + # relation.
  221 + posts = posts.native_translations if blog_with_translation?(@page)
  222 +
  223 + @posts = posts.paginate({ :page => params[:npage], :per_page => @page.posts_per_page }.merge(Article.display_filter(user, profile))).to_a
  224 +
  225 + if blog_with_translation?(@page)
  226 + @posts.replace @posts.map{ |p| p.get_translation_to(FastGettext.locale) }.compact
  227 + end
  228 + end
  229 + end
  230 +
  231 + def get_posts(year = nil, month = nil)
  232 + if year && month
  233 + filter_date = DateTime.parse("#{year}-#{month}-01")
  234 + return @page.posts.by_range(filter_date..filter_date.at_end_of_month)
  235 + else
  236 + return @page.posts
  237 + end
  238 + end
  239 +
  240 + def blog_with_translation?(page)
  241 + return (page.blog? && page.display_posts_in_current_language?)
  242 + end
  243 +
  244 + def get_images(page, npage, slideshow)
  245 + images = page.images.select{ |a| a.display_to? user }
  246 + images = images.paginate(:per_page => per_page, :page => npage) unless slideshow
  247 +
  248 + return images
  249 + end
  250 +
  251 + def process_page_followers(params)
  252 + @unfollow_form = params[:unfollow] == 'true'
  253 + if params[:unfollow] == 'commit' && request.post?
  254 + @page.followers -= [params[:email]]
  255 + if @page.save
  256 + session[:notice] = _("Notification of new comments to '%s' was successfully canceled") % params[:email]
  257 + end
  258 + end
  259 + end
  260 +
  261 + def process_comments(params)
  262 + @comments = @page.comments.without_spam
  263 + @comments = @plugins.filter(:unavailable_comments, @comments)
  264 + @comments_count = @comments.count
  265 + @comments = @comments.without_reply.paginate(:per_page => per_page, :page => params[:comment_page] )
  266 + @comment_order = params[:comment_order].nil? ? 'oldest' : params[:comment_order]
  267 + end
  268 +
206 end 269 end