1 class ProviderOriginalPicture < ActiveRecord::Base
3 belongs_to :original_picture, :foreign_key => :demanders_original_picture_id
5 validates :provider_id, :presence => true, :numericality => true, :existence => true
6 validates :providers_original_picture_id, :presence => true, :numericality => true
7 validates :demanders_original_picture_id, :presence => true, :numericality => true
9 def self.get_one pid, popid
10 ProviderOriginalPicture.find_by_provider_id_and_providers_original_picture_id(pid, popid) || ProviderOriginalPicture.new
13 def modify_original_picture attr
14 op = if self.original_picture
24 def self.modify_picture attr
25 p = Picture.find_by_original_picture_id_and_revision(attr['original_picture_id'], attr['revision']) || Picture.new
30 def self.modify_resource_picture attr
31 rp = ResourcePicture.find_by_original_picture_id(attr['original_picture_id']) || ResourcePicture.new
36 def self.replace_artist pid, attr
37 pa = ProviderArtist.get_one pid, attr['artist_id'].to_i
39 attr['artist_id'] = pa.artist.id
46 def self.replace_license pid, attr
47 pl = ProviderLicense.get_one pid, attr['license_id'].to_i
49 attr['license_id'] = pl.license.id
56 def self.replace_original_picture pid, attr
57 pop = ProviderOriginalPicture.get_one pid, attr['original_picture_id'].to_i
58 if pop.original_picture
59 attr['original_picture_id'] = pop.original_picture.id
66 def self.import_original_picture pid, providers_original_pictures
68 providers_original_pictures.each do |providers_original_picture_attr|
69 provider_original_picture = ProviderOriginalPicture.get_one(pid, providers_original_picture_attr['id'])
70 demander_original_picture = provider_original_picture.modify_original_picture providers_original_picture_attr
71 if demander_original_picture.valid?
72 provider_original_picture.attributes = {:provider_id => pid, :providers_original_picture_id => providers_original_picture_attr['id'], :demanders_original_picture_id => demander_original_picture.id}
73 unless provider_original_picture.save
74 res << providers_original_picture_attr
77 res << providers_original_picture_attr
83 def self.import_picture pid, providers_pictures
85 providers_pictures.each do |providers_picture_attr|
86 if ProviderOriginalPicture.replace_original_picture(pid, providers_picture_attr) and
87 ProviderOriginalPicture.replace_artist(pid, providers_picture_attr) and
88 ProviderOriginalPicture.replace_license(pid, providers_picture_attr)
89 picture_data = Base64.decode64 providers_picture_attr['picture_data']
90 providers_picture_attr.delete 'picture_data'
91 if imager = PettanImager.load(picture_data)
92 picture = ProviderOriginalPicture.modify_picture providers_picture_attr
93 if picture.store(imager)
95 res << providers_picture_attr
98 res << providers_picture_attr
101 res << providers_picture_attr
107 def self.import_resource_picture pid, providers_original_pictures
109 providers_original_pictures.each do |providers_original_picture_attr|
110 providers_resource_picture_attr = providers_original_picture_attr['resource_picture']
111 if ProviderOriginalPicture.replace_original_picture(pid, providers_resource_picture_attr) and
112 ProviderOriginalPicture.replace_artist(pid, providers_resource_picture_attr) and
113 ProviderOriginalPicture.replace_license(pid, providers_resource_picture_attr)
114 picture_data = Base64.decode64 providers_resource_picture_attr['picture_data']
115 providers_resource_picture_attr.delete 'picture_data'
116 if imager = PettanImager.load(picture_data)
117 resource_picture = ProviderOriginalPicture.modify_resource_picture providers_resource_picture_attr
118 if resource_picture.store(imager)
120 res << providers_resource_picture_attr
123 res << providers_resource_picture_attr
126 res << providers_resource_picture_attr
132 def self.import pid, original_pictures, pictures
133 res = {:original_pictures => [], :pictures => [], :resource_pictures => []}
134 ProviderOriginalPicture.transaction do
135 r = ProviderOriginalPicture.import_original_picture(pid, original_pictures)
136 res[:original_pictures] = r
137 raise ActiveRecord::Rollback if r.any?
138 r = ProviderOriginalPicture.import_picture(pid, pictures)
140 raise ActiveRecord::Rollback if r.any?
141 r = ProviderOriginalPicture.import_resource_picture(pid, original_pictures)
142 res[:resource_pictures] = r
143 raise ActiveRecord::Rollback if r.any?