aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_controller
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2005-06-28 17:42:51 +0000
committerDavid Heinemeier Hansson <david@loudthinking.com>2005-06-28 17:42:51 +0000
commit62ed6950c9119c12e6b17a68c79c45c77a7b1ca4 (patch)
treec00beda4e2f4ea5e88f39882dc421cb8b7e68a0d /actionpack/lib/action_controller
parent96e590ca3c25e63d03c9ae5d74a40538cbe88f58 (diff)
downloadrails-62ed6950c9119c12e6b17a68c79c45c77a7b1ca4.tar.gz
rails-62ed6950c9119c12e6b17a68c79c45c77a7b1ca4.tar.bz2
rails-62ed6950c9119c12e6b17a68c79c45c77a7b1ca4.zip
Added support for upload progress indicators in Apache and lighttpd 1.4.x (won't work in WEBrick or lighttpd 1.3.x) #1475 [Sean Treadway]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@1552 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'actionpack/lib/action_controller')
-rwxr-xr-xactionpack/lib/action_controller/base.rb14
-rw-r--r--actionpack/lib/action_controller/cgi_ext/raw_post_data_fix.rb28
2 files changed, 35 insertions, 7 deletions
diff --git a/actionpack/lib/action_controller/base.rb b/actionpack/lib/action_controller/base.rb
index bd0e78719d..2e0d554a55 100755
--- a/actionpack/lib/action_controller/base.rb
+++ b/actionpack/lib/action_controller/base.rb
@@ -508,12 +508,24 @@ module ActionController #:nodoc:
return result
end
- # Clears the rendered results, allowing for another render or redirect to be performed.
+ # Clears the rendered results, allowing for another render to be performed.
def erase_render_results #:nodoc:
@response.body = nil
@performed_render = false
end
+ # Clears the redirected results from the headers, resetting the status to 200 and returns
+ # the URL that was used to redirect or nil if there was no redirected URL
+ # Note that +redirect_to+ will change the body of the response to indicate a redirection.
+ # The response body is not reset here, see +erase_render_results+
+ def erase_redirect_results #:nodoc:
+ @performed_redirect = false
+ response.redirected_to = nil
+ response.redirected_to_method_params = nil
+ response.headers['Status'] = DEFAULT_RENDER_STATUS_CODE
+ response.headers.delete('location')
+ end
+
def rewrite_options(options)
if defaults = default_url_options(options)
defaults.merge(options)
diff --git a/actionpack/lib/action_controller/cgi_ext/raw_post_data_fix.rb b/actionpack/lib/action_controller/cgi_ext/raw_post_data_fix.rb
index 5cb13c2456..b2194eb07b 100644
--- a/actionpack/lib/action_controller/cgi_ext/raw_post_data_fix.rb
+++ b/actionpack/lib/action_controller/cgi_ext/raw_post_data_fix.rb
@@ -6,6 +6,8 @@ class CGI #:nodoc:
# Handles multipart forms (in particular, forms that involve file uploads).
# Reads query parameters in the @params field, and cookies into @cookies.
def initialize_query()
+ @cookies = CGI::Cookie::parse((env_table['HTTP_COOKIE'] || env_table['COOKIE']))
+
if boundary = multipart_form_boundary
@multipart = true
@params = read_multipart(boundary, Integer(env_table['CONTENT_LENGTH']))
@@ -13,8 +15,6 @@ class CGI #:nodoc:
@multipart = false
@params = CGI::parse(read_query_params || "")
end
-
- @cookies = CGI::Cookie::parse((env_table['HTTP_COOKIE'] || env_table['COOKIE']))
end
private
@@ -28,16 +28,32 @@ class CGI #:nodoc:
end
end
+ def read_params_from_query
+ if defined? MOD_RUBY
+ Apache::request.args || ''
+ else
+ # fixes CGI querystring parsing for POSTs
+ if env_table['QUERY_STRING'].blank? && !env_table['REQUEST_URI'].blank?
+ env_table['QUERY_STRING'] = env_table['REQUEST_URI'].split('?', 2)[1] || ''
+ end
+ env_table['QUERY_STRING']
+ end
+ end
+
+ def read_params_from_post
+ stdinput.binmode if stdinput.respond_to?(:binmode)
+ content = stdinput.read(Integer(env_table['CONTENT_LENGTH'])) || ''
+ env_table['RAW_POST_DATA'] = content.split("&_").first.to_s.freeze # &_ is a fix for Safari Ajax postings that always append \000
+ end
+
def read_query_params
case env_table['REQUEST_METHOD'].to_s.upcase
when 'CMD'
read_from_cmdline
when 'POST', 'PUT'
- stdinput.binmode if stdinput.respond_to?(:binmode)
- content = stdinput.read(Integer(env_table['CONTENT_LENGTH'])) || ''
- env_table['RAW_POST_DATA'] = content.split("&_").first.to_s.freeze # &_ is a fix for Safari Ajax postings that always append \000
+ read_params_from_post
else # when 'GET', 'HEAD', 'DELETE', 'OPTIONS'
- (defined?(MOD_RUBY) ? Apache::request.args : env_table['QUERY_STRING']) || ''
+ read_params_from_query
end
end
end # module QueryExtension