Modified: branches/packs/app/controllers/research_objects_controller.rb (3713 => 3714)
--- branches/packs/app/controllers/research_objects_controller.rb 2013-09-24 09:06:17 UTC (rev 3713)
+++ branches/packs/app/controllers/research_objects_controller.rb 2013-09-25 01:06:05 UTC (rev 3714)
@@ -27,11 +27,23 @@
ro = ResearchObject.find_by_slug_and_version(slug, nil)
- if (ro)
- redirect_to research_object_url(slug) + "/" + ResearchObject::MANIFEST_PATH, :status => 303
- else
+ unless ro
render :text => "Research Object not found", :status => 404
+ return
end
+
+ respond_to do |format|
+ format.html {
+ redirect_to polymorphic_path(ro.context)
+ }
+ format.rdf {
+ redirect_to research_object_url(slug) + "/" + ResearchObject::MANIFEST_PATH, :status => 303
+ }
+ format.zip {
+ zip_file_name = ro.generate_zip!
+ send_file zip_file_name, :type => "application/zip", :disposition => 'attachment', :filename => "#{ro.slug}.zip"
+ }
+ end
end
# POST /rodl
Modified: branches/packs/app/models/research_object.rb (3713 => 3714)
--- branches/packs/app/models/research_object.rb 2013-09-24 09:06:17 UTC (rev 3713)
+++ branches/packs/app/models/research_object.rb 2013-09-25 01:06:05 UTC (rev 3714)
@@ -776,6 +776,37 @@
nil
end
+ def generate_zip!
+
+ zip_file_name = "tmp/zipped_ro.#{$$}.zip"
+
+ FileUtils.rm_rf(zip_file_name)
+
+ zip_file = Zip::ZipFile.open(zip_file_name, Zip::ZipFile::CREATE)
+
+ resources.each do |resource|
+
+ if resource.content_blob.nil?
+ resource.generate_graph!
+ resource.reload
+ end
+
+ next unless resource.content_blob
+
+ next if resource.is_folder
+
+ zip_file.get_output_stream(resource.path) do |stream|
+ data = ""
+ data.force_encoding(Encoding::ASCII_8BIT)
+ stream.write(data)
+ end
+ end
+
+ zip_file.close
+
+ zip_file_name
+ end
+
private
def create_manifest #:nodoc: