Commit 374888e82e32962f25d6223de2a9abc6f931ff52

Authored by Antonio Terceiro
1 parent 0920b07f

ActionItem305: importing attachments

Showing 1 changed file with 37 additions and 0 deletions   Show diff stats
script/import-cooperation.net
... ... @@ -22,7 +22,19 @@ TinyMceArticle # forces loading the Noosfero class before adding stuff to it
22 22 class TinyMceArticle
23 23 attr_accessor :is_homepage
24 24 end
  25 +UploadedFile # force loading Noosfero class before addinf stuff to it
  26 +class UploadedFile
  27 + attr_accessor :is_homepage, :filesystem_location
  28 +end
25 29  
  30 +class FileData < StringIO
  31 + attr_reader :original_filename, :content_type
  32 + def initialize(actual_filename, name, content_type)
  33 + @original_filename = name
  34 + @content_type = content_type
  35 + super(File.read(actual_filename))
  36 + end
  37 +end
26 38  
27 39 def import_environment(name)
28 40 environment = Environment.find_by_name(name)
... ... @@ -64,6 +76,7 @@ for username in ARGV
64 76 puts "I: #{username}'s article #{article.name.inspect} imported"
65 77 else
66 78 $stderr.puts "W: #{username}'s article #{article.name.inspect} cannot be saved. Errors: #{article.errors.full_messages.join(', ')}"
  79 + next
67 80 end
68 81  
69 82 if article.is_homepage
... ... @@ -72,12 +85,36 @@ for username in ARGV
72 85 puts "I: Article #{article.name.inspect} is #{username}'s homepage!"
73 86 end
74 87  
  88 + # import attachments
  89 + attachments_dir = xml.gsub(/\.xml$/, '')
  90 + Dir.glob(File.join(attachments_dir, 'attachments', '*.xml')).each do |attachment_xml|
  91 + file = UploadedFile.new
  92 + file.from_xml(File.read(attachment_xml))
  93 + puts "I: about to read data from #{file.filesystem_location} (xml: #{attachment_xml})"
  94 + file.uploaded_data = FileData.new(file.filesystem_location, file.filename, file.content_type)
  95 + file.parent = article
  96 + file.profile = person
  97 + file.save!
  98 + puts "I: attachment added to article #{article.id}"
  99 +
  100 + file.reload
  101 + if file.image?
  102 + file.parent.body = "<img align='left' style='margin-right: 5px; margin-bottom: 5px;' src='/#{login}/#{file.path}'/> " + file.parent.body
  103 + else
  104 + if file.parent.body
  105 + file.parent.body += "<hr/><div><a href='/#{login}/#{file.path}'>#{file.abstract}</a></div>"
  106 + end
  107 + end
  108 + file.parent.save
  109 +
  110 + end
75 111 end
76 112 end
77 113 rescue Exception => e
78 114 $stderr.puts "=================================="
79 115 $stderr.puts "E: importing <#{username}> failed."
80 116 $stderr.puts e
  117 + $stderr.puts e.backtrace
81 118 $stderr.puts "=================================="
82 119 $stderr.puts "E: Note that ALL operations above relative to <#{username}> were CANCELLED due to these errors."
83 120 end
... ...