software_communities_plugin_profile_controller.rb
1.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
class SoftwareCommunitiesPluginProfileController < ProfileController
append_view_path File.join(File.dirname(__FILE__) + '/../views')
before_filter :validate_download_params, only: [:download_file]
ERROR_MESSAGES = {
:not_found => _("Could not find the download file"),
:invalid_params => _("Invalid download params")
}
def download_file
download_block = DownloadBlock.find_by_id params[:block]
index = params[:download_index].to_i
if download_block and (index < download_block.downloads.size)
download = Download.new(download_block.downloads[index])
download.total_downloads += 1
download_block.downloads[index] = download.to_hash
download_block.save
redirect_to download.link
else
session[:notice] = ERROR_MESSAGES[:not_found]
render_not_found
end
end
private
def validate_download_params
valid_block = (!params[:block].nil?) and (params[:block].to_i > 0)
valid_index = params[:download_index].to_i >= 0
if !valid_block or !valid_index
session[:notice] = ERROR_MESSAGES[:invalid_params]
safe_redirect_back
end
end
def safe_redirect_back
begin
redirect_to :back
rescue ActionController::RedirectBackError
# There is no :back if it is a copied url
render_not_found
end
end
end