app/controllers/file_controller.rb in instiki-0.10.0 vs app/controllers/file_controller.rb in instiki-0.10.1
- old
+ new
@@ -1,129 +1,129 @@
-require 'fileutils'
-require 'application'
-require 'instiki_errors'
-
-# Controller that is responsible for serving files and pictures.
-# Disabled in version 0.10
-
-class FileController < ApplicationController
-
- layout 'default'
-
- before_filter :check_allow_uploads
-
- def file
- check_path
- if @params['file']
- # form supplied
- file_yard.upload_file(@file_name, @params['file'])
- flash[:info] = "File '#{@file_name}' successfully uploaded"
- @web.refresh_pages_with_references(@file_name)
- return_to_last_remembered
- elsif file_yard.has_file?(@file_name)
- send_file(file_yard.file_path(@file_name))
- else
- logger.debug("File not found: #{file_yard.files_path}/#{@file_name}")
- # go to the template, which is a file upload form
- end
- end
-
- def cancel_upload
- return_to_last_remembered
- end
-
- def pic
- check_path
- if @params['file']
- # form supplied
- file_yard.upload_file(@file_name, @params['file'])
- flash[:info] = "Image '#{@file_name}' successfully uploaded"
- @web.refresh_pages_with_references(@file_name)
- return_to_last_remembered
- elsif file_yard.has_file?(@file_name)
- send_file(file_yard.file_path(@file_name))
- else
- logger.debug("Image not found: #{file_yard.files_path}/#{@file_name}")
- render_action 'file'
- end
- end
-
- def import
- return if file_uploads_disabled?
-
- check_authorization
- if @params['file']
- @problems = []
- import_file_name = "#{@web.address}-import-#{Time.now.strftime('%Y-%m-%d-%H-%M-%S')}.zip"
- file_yard.upload_file(import_file_name, @params['file'])
- import_from_archive(file_yard.file_path(import_file_name))
- if @problems.empty?
- flash[:info] = 'Import successfully finished'
- else
- flash[:info] = "Import finished, but some pages were not imported:<li>" +
- @problems.join('</li><li>') + '</li>'
- end
- return_to_last_remembered
- else
- # to template
- end
- end
-
- protected
-
- def check_allow_uploads
-
- # TODO enable file uploads again after 0.10 release
- unless RAILS_ENV == 'test'
- render_text 'File uploads are not ready for general use in Instiki 0.10', '403 Forbidden'
- return false
- end
-
- unless @web.allow_uploads
- render_text 'File uploads are blocked by the webmaster', '403 Forbidden'
- return false
- end
- end
-
-
- private
-
- def check_path
- raise Instiki::ValidationError.new("Invalid path: no file name") unless @file_name
- raise Instiki::ValidationError.new("Invalid path: no web name") unless @web_name
- raise Instiki::ValidationError.new("Invalid path: unknown web name") unless @web
- end
-
- def file_yard
- @wiki.file_yard(@web)
- end
-
- def import_from_archive(archive)
- logger.info "Importing pages from #{archive}"
- zip = Zip::ZipInputStream.open(archive)
- while (entry = zip.get_next_entry) do
- ext_length = File.extname(entry.name).length
- page_name = entry.name[0..-(ext_length + 1)]
- page_content = entry.get_input_stream.read
- logger.info "Processing page '#{page_name}'"
- begin
- existing_page = @wiki.read_page(@web.address, page_name)
- if existing_page
- if existing_page.content == page_content
- logger.info "Page '#{page_name}' with the same content already exists. Skipping."
- next
- else
- logger.info "Page '#{page_name}' already exists. Adding a new revision to it."
- wiki.revise_page(@web.address, page_name, page_content, Time.now, @author)
- end
- else
- wiki.write_page(@web.address, page_name, page_content, Time.now, @author)
- end
- rescue => e
- logger.error(e)
- @problems << "#{page_name} : #{e.message}"
- end
- end
- logger.info "Import from #{archive} finished"
- end
-
-end
+require 'fileutils'
+require 'application'
+require 'instiki_errors'
+
+# Controller that is responsible for serving files and pictures.
+# Disabled in version 0.10
+
+class FileController < ApplicationController
+
+ layout 'default'
+
+ before_filter :check_allow_uploads
+
+ def file
+ check_path
+ if @params['file']
+ # form supplied
+ file_yard.upload_file(@file_name, @params['file'])
+ flash[:info] = "File '#{@file_name}' successfully uploaded"
+ @web.refresh_pages_with_references(@file_name)
+ return_to_last_remembered
+ elsif file_yard.has_file?(@file_name)
+ send_file(file_yard.file_path(@file_name))
+ else
+ logger.debug("File not found: #{file_yard.files_path}/#{@file_name}")
+ # go to the template, which is a file upload form
+ end
+ end
+
+ def cancel_upload
+ return_to_last_remembered
+ end
+
+ def pic
+ check_path
+ if @params['file']
+ # form supplied
+ file_yard.upload_file(@file_name, @params['file'])
+ flash[:info] = "Image '#{@file_name}' successfully uploaded"
+ @web.refresh_pages_with_references(@file_name)
+ return_to_last_remembered
+ elsif file_yard.has_file?(@file_name)
+ send_file(file_yard.file_path(@file_name))
+ else
+ logger.debug("Image not found: #{file_yard.files_path}/#{@file_name}")
+ render_action 'file'
+ end
+ end
+
+ def import
+ return if file_uploads_disabled?
+
+ check_authorization
+ if @params['file']
+ @problems = []
+ import_file_name = "#{@web.address}-import-#{Time.now.strftime('%Y-%m-%d-%H-%M-%S')}.zip"
+ file_yard.upload_file(import_file_name, @params['file'])
+ import_from_archive(file_yard.file_path(import_file_name))
+ if @problems.empty?
+ flash[:info] = 'Import successfully finished'
+ else
+ flash[:info] = "Import finished, but some pages were not imported:<li>" +
+ @problems.join('</li><li>') + '</li>'
+ end
+ return_to_last_remembered
+ else
+ # to template
+ end
+ end
+
+ protected
+
+ def check_allow_uploads
+
+ # TODO enable file uploads again after 0.10 release
+ unless RAILS_ENV == 'test'
+ render_text 'File uploads are not ready for general use in Instiki 0.10', '403 Forbidden'
+ return false
+ end
+
+ unless @web.allow_uploads
+ render_text 'File uploads are blocked by the webmaster', '403 Forbidden'
+ return false
+ end
+ end
+
+
+ private
+
+ def check_path
+ raise Instiki::ValidationError.new("Invalid path: no file name") unless @file_name
+ raise Instiki::ValidationError.new("Invalid path: no web name") unless @web_name
+ raise Instiki::ValidationError.new("Invalid path: unknown web name") unless @web
+ end
+
+ def file_yard
+ @wiki.file_yard(@web)
+ end
+
+ def import_from_archive(archive)
+ logger.info "Importing pages from #{archive}"
+ zip = Zip::ZipInputStream.open(archive)
+ while (entry = zip.get_next_entry) do
+ ext_length = File.extname(entry.name).length
+ page_name = entry.name[0..-(ext_length + 1)]
+ page_content = entry.get_input_stream.read
+ logger.info "Processing page '#{page_name}'"
+ begin
+ existing_page = @wiki.read_page(@web.address, page_name)
+ if existing_page
+ if existing_page.content == page_content
+ logger.info "Page '#{page_name}' with the same content already exists. Skipping."
+ next
+ else
+ logger.info "Page '#{page_name}' already exists. Adding a new revision to it."
+ wiki.revise_page(@web.address, page_name, page_content, Time.now, @author)
+ end
+ else
+ wiki.write_page(@web.address, page_name, page_content, Time.now, @author)
+ end
+ rescue => e
+ logger.error(e)
+ @problems << "#{page_name} : #{e.message}"
+ end
+ end
+ logger.info "Import from #{archive} finished"
+ end
+
+end