OSDN Git Service

fic picture publishing
[pettanr/pettanr.git] / app / models / provider_original_picture.rb
index 86e6df2..de173fb 100644 (file)
@@ -53,6 +53,12 @@ class ProviderOriginalPicture < ActiveRecord::Base
     end
   end
   
+  def self.replace_picture pid, attr
+    pc = Picture.head attr['original_picture_id'].to_i
+    return false unless pc
+    attr['picture_id'] = pc.id
+  end
+  
   def self.replace_original_picture pid, attr
     pop = ProviderOriginalPicture.get_one pid, attr['original_picture_id'].to_i
     if pop.original_picture
@@ -63,15 +69,29 @@ class ProviderOriginalPicture < ActiveRecord::Base
     end
   end
   
+  def self.unpublish_resource_picture provider_original_picture, providers_original_picture_attr
+    res = true
+    resource_picture = if provider_original_picture.original_picture and provider_original_picture.original_picture.resource_picture
+      provider_original_picture.original_picture.resource_picture
+    else
+      nil
+    end
+    if providers_original_picture_attr['stopped_at'] and resource_picture
+      res = resource_picture.unpublish
+    end
+    res
+  end
+  
   def self.import_original_picture pid, providers_original_picture_attr
     return providers_original_picture_attr unless ProviderOriginalPicture.replace_artist(pid, providers_original_picture_attr)
     provider_original_picture = ProviderOriginalPicture.get_one(pid, providers_original_picture_attr['id'])
     popid = providers_original_picture_attr['id']
     providers_original_picture_attr.delete 'id'
-    resource_picture = providers_original_picture_attr['resource_picture']
+#    resource_picture = providers_original_picture_attr['resource_picture']
     providers_original_picture_attr.delete 'resource_picture'
+    return providers_original_picture_attr unless ProviderOriginalPicture.unpublish_resource_picture provider_original_picture, providers_original_picture_attr
     demander_original_picture = provider_original_picture.modify_original_picture providers_original_picture_attr
-    providers_original_picture_attr['resource_picture'] = resource_picture
+#    providers_original_picture_attr['resource_picture'] = resource_picture
     return providers_original_picture_attr unless demander_original_picture.valid?
     provider_original_picture.attributes = {:provider_id => pid, :providers_original_picture_id => popid, :demanders_original_picture_id => demander_original_picture.id}
     return providers_original_picture_attr unless provider_original_picture.save
@@ -81,9 +101,9 @@ class ProviderOriginalPicture < ActiveRecord::Base
   def self.import_original_pictures pid, providers_original_pictures
     res = []
     providers_original_pictures.each do |providers_original_picture_attr|
-      org_attr = providers_original_picture_attr.dup
-      if r = ProviderOriginalPicture.import_original_picture(pid, providers_original_picture_attr)
-        res << org_attr
+      tmp_attr = providers_original_picture_attr.dup
+      if r = ProviderOriginalPicture.import_original_picture(pid, tmp_attr)
+        res << providers_original_picture_attr
       end
     end
     res
@@ -107,9 +127,9 @@ class ProviderOriginalPicture < ActiveRecord::Base
   def self.import_pictures pid, providers_pictures
     res = []
     providers_pictures.each do |providers_picture_attr|
-      org_attr = providers_picture_attr.dup
-      if r = ProviderOriginalPicture.import_picture(pid, providers_picture_attr)
-        res << org_attr
+      tmp_attr = providers_picture_attr.dup
+      if r = ProviderOriginalPicture.import_picture(pid, tmp_attr)
+        res << providers_picture_attr
       end
     end
     res
@@ -119,6 +139,7 @@ class ProviderOriginalPicture < ActiveRecord::Base
     return providers_resource_picture_attr unless ProviderOriginalPicture.replace_original_picture(pid, providers_resource_picture_attr)
     return providers_resource_picture_attr unless ProviderOriginalPicture.replace_artist(pid, providers_resource_picture_attr)
     return providers_resource_picture_attr unless ProviderOriginalPicture.replace_license(pid, providers_resource_picture_attr)
+    return providers_resource_picture_attr unless ProviderOriginalPicture.replace_picture(pid, providers_resource_picture_attr)
     prpid = providers_resource_picture_attr['id']
     providers_resource_picture_attr.delete 'id'
     picture_data = Base64.decode64 providers_resource_picture_attr['picture_data']
@@ -126,8 +147,8 @@ class ProviderOriginalPicture < ActiveRecord::Base
     imager = PettanImager.load(picture_data)
     return providers_resource_picture_attr unless imager
     resource_picture = ProviderOriginalPicture.modify_resource_picture providers_resource_picture_attr
-    return providers_resource_picture_attr unless resource_picture.store_picture_with_gif(imager)
     return providers_resource_picture_attr unless resource_picture.save
+    return providers_resource_picture_attr unless resource_picture.store_picture_with_gif(imager)
     nil
   end
   
@@ -135,26 +156,34 @@ class ProviderOriginalPicture < ActiveRecord::Base
     res = []
     providers_original_pictures.each do |providers_original_picture_attr|
       providers_resource_picture_attr = providers_original_picture_attr['resource_picture']
-      org_attr = providers_resource_picture_attr.dup
-      if r = ProviderOriginalPicture.import_resource_picture(pid, providers_resource_picture_attr)
-        res << org_attr
+      next nil unless providers_resource_picture_attr
+      tmp_attr = providers_resource_picture_attr.dup
+      if r = ProviderOriginalPicture.import_resource_picture(pid, tmp_attr)
+        res << providers_resource_picture_attr
       end
     end
     res
   end
   
   def self.import pid, original_pictures, pictures
-    res = {:original_pictures => [], :pictures => [], :resource_pictures => []}
+    res = nil
     ProviderOriginalPicture.transaction do
       r = ProviderOriginalPicture.import_original_pictures(pid, original_pictures)
-      res[:original_pictures] = r
-      raise ActiveRecord::Rollback if r.any?
+      if r.any?
+        res = OriginalPictureImportResult.new r
+        raise ActiveRecord::Rollback
+      end
       r = ProviderOriginalPicture.import_pictures(pid, pictures)
-      res[:pictures] = r
-      raise ActiveRecord::Rollback if r.any?
+      if r.any?
+        res = PictureImportResult.new r
+        raise ActiveRecord::Rollback
+      end
       r = ProviderOriginalPicture.import_resource_pictures(pid, original_pictures)
-      res[:resource_pictures] = r
-      raise ActiveRecord::Rollback if r.any?
+      if r.any?
+        res = ResourcePictureImportResult.new r
+        raise ActiveRecord::Rollback
+      end
+      res = OriginalPictureImportResult.new []
     end
     res
   end