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 pc = 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_picture pid, attr
57 pc = Picture.head attr['original_picture_id'].to_i
58 return false unless pc
59 attr['picture_id'] = pc.id
62 def self.replace_original_picture pid, attr
63 pop = ProviderOriginalPicture.get_one pid, attr['original_picture_id'].to_i
64 if pop.original_picture
65 attr['original_picture_id'] = pop.original_picture.id
72 def self.unpublish_resource_picture provider_original_picture, providers_original_picture_attr
74 resource_picture = if provider_original_picture.original_picture and provider_original_picture.original_picture.resource_picture
75 provider_original_picture.original_picture.resource_picture
79 if providers_original_picture_attr['stopped_at'] and resource_picture
80 res = resource_picture.unpublish
85 def self.import_original_picture pid, providers_original_picture_attr
86 return providers_original_picture_attr unless ProviderOriginalPicture.replace_artist(pid, providers_original_picture_attr)
87 provider_original_picture = ProviderOriginalPicture.get_one(pid, providers_original_picture_attr['id'])
88 popid = providers_original_picture_attr['id']
89 providers_original_picture_attr.delete 'id'
90 # resource_picture = providers_original_picture_attr['resource_picture']
91 providers_original_picture_attr.delete 'resource_picture'
92 return providers_original_picture_attr unless ProviderOriginalPicture.unpublish_resource_picture provider_original_picture, providers_original_picture_attr
93 demander_original_picture = provider_original_picture.modify_original_picture providers_original_picture_attr
94 # providers_original_picture_attr['resource_picture'] = resource_picture
95 return providers_original_picture_attr unless demander_original_picture.valid?
96 provider_original_picture.attributes = {:provider_id => pid, :providers_original_picture_id => popid, :demanders_original_picture_id => demander_original_picture.id}
97 return providers_original_picture_attr unless provider_original_picture.save
101 def self.import_original_pictures pid, providers_original_pictures
103 providers_original_pictures.each do |providers_original_picture_attr|
104 tmp_attr = providers_original_picture_attr.dup
105 if r = ProviderOriginalPicture.import_original_picture(pid, tmp_attr)
106 res << providers_original_picture_attr
112 def self.import_picture pid, providers_picture_attr
113 return providers_picture_attr unless ProviderOriginalPicture.replace_original_picture(pid, providers_picture_attr)
114 return providers_picture_attr unless ProviderOriginalPicture.replace_artist(pid, providers_picture_attr)
115 return providers_picture_attr unless ProviderOriginalPicture.replace_license(pid, providers_picture_attr)
116 ppid = providers_picture_attr['id']
117 providers_picture_attr.delete 'id'
118 picture_data = Base64.decode64 providers_picture_attr['picture_data']
119 providers_picture_attr.delete 'picture_data'
120 imager = PettanImager.load(picture_data)
121 return providers_picture_attr unless imager
122 picture = ProviderOriginalPicture.modify_picture providers_picture_attr
123 return providers_picture_attr unless picture.store(imager)
127 def self.import_pictures pid, providers_pictures
129 providers_pictures.each do |providers_picture_attr|
130 tmp_attr = providers_picture_attr.dup
131 if r = ProviderOriginalPicture.import_picture(pid, tmp_attr)
132 res << providers_picture_attr
138 def self.import_resource_picture pid, providers_resource_picture_attr
139 return providers_resource_picture_attr unless ProviderOriginalPicture.replace_original_picture(pid, providers_resource_picture_attr)
140 return providers_resource_picture_attr unless ProviderOriginalPicture.replace_artist(pid, providers_resource_picture_attr)
141 return providers_resource_picture_attr unless ProviderOriginalPicture.replace_license(pid, providers_resource_picture_attr)
142 return providers_resource_picture_attr unless ProviderOriginalPicture.replace_picture(pid, providers_resource_picture_attr)
143 prpid = providers_resource_picture_attr['id']
144 providers_resource_picture_attr.delete 'id'
145 picture_data = Base64.decode64 providers_resource_picture_attr['picture_data']
146 providers_resource_picture_attr.delete 'picture_data'
147 imager = PettanImager.load(picture_data)
148 return providers_resource_picture_attr unless imager
149 resource_picture = ProviderOriginalPicture.modify_resource_picture providers_resource_picture_attr
150 return providers_resource_picture_attr unless resource_picture.save
151 return providers_resource_picture_attr unless resource_picture.store_picture_with_gif(imager)
155 def self.import_resource_pictures pid, providers_original_pictures
157 providers_original_pictures.each do |providers_original_picture_attr|
158 providers_resource_picture_attr = providers_original_picture_attr['resource_picture']
159 next nil unless providers_resource_picture_attr
160 tmp_attr = providers_resource_picture_attr.dup
161 if r = ProviderOriginalPicture.import_resource_picture(pid, tmp_attr)
162 res << providers_resource_picture_attr
168 def self.import pid, original_pictures, pictures
170 ProviderOriginalPicture.transaction do
171 r = ProviderOriginalPicture.import_original_pictures(pid, original_pictures)
173 res = OriginalPictureImportResult.new r
174 raise ActiveRecord::Rollback
176 r = ProviderOriginalPicture.import_pictures(pid, pictures)
178 res = PictureImportResult.new r
179 raise ActiveRecord::Rollback
181 r = ProviderOriginalPicture.import_resource_pictures(pid, original_pictures)
183 res = ResourcePictureImportResult.new r
184 raise ActiveRecord::Rollback
186 res = OriginalPictureImportResult.new []