+ def tmb_opt_img_tag
+ tw, th = PettanImager.thumbnail_size(self.width, self.height)
+ {:src => self.url, :width => tw, :height => th}
+ end
+
+ def opt_img_tag
+ {:src => self.url('full'), :width => self.width, :height => self.height}
+ end
+
+ def symbol_option
+ self.tmb_opt_img_tag
+ end
+
+ def self.default_page_size
+ 25
+ end
+
+ def self.max_page_size
+ 100
+ end
+
+ def self.page prm = nil
+ page = prm.to_i
+ page = 1 if page < 1
+ page
+ end
+
+ def self.page_size prm = self.default_page_size
+ page_size = prm.to_i
+ page_size = self.max_page_size if page_size > self.max_page_size
+ page_size = self.default_page_size if page_size < 1
+ page_size
+ end
+
+ def self.mylist_where ar
+ ['resource_pictures.artist_id = ?', ar.id]
+ end
+
+ def self.himlist_where ar
+ ['resource_pictures.artist_id = ?', ar.id]
+ end
+
+ def self.list page = 1, page_size = self.default_page_size
+ ResourcePicture.includes(ResourcePicture.list_opt).order('resource_pictures.updated_at desc').offset((page -1) * page_size).limit(page_size)
+ end
+
+ def self.mylist ar, page = 1, page_size = Author.default_resource_picture_page_size
+ ResourcePicture.where(self.mylist_where(ar)).includes(ResourcePicture.list_opt).order('resource_pictures.updated_at desc').offset((page -1) * page_size).limit(page_size)
+ end
+
+ def self.himlist ar, page = 1, page_size = Author.default_resource_picture_page_size
+ ResourcePicture.where(self.himlist_where(ar)).includes(ResourcePicture.list_opt).order('resource_pictures.updated_at desc').offset((page -1) * page_size).limit(page_size)
+ end
+
+ def self.list_paginate page = 1, page_size = self.default_page_size
+ Kaminari.paginate_array(Array.new(ResourcePicture.count, nil)).page(page).per(page_size)
+ end
+
+ def self.mylist_paginate ar, page = 1, page_size = Author.default_resource_picture_page_size
+ Kaminari.paginate_array(Array.new(ResourcePicture.where(self.mylist_where(ar)).count, nil)).page(page).per(page_size)
+ end
+
+ def self.himlist_paginate ar, page = 1, page_size = Author.default_resource_picture_page_size
+ Kaminari.paginate_array(Array.new(ResourcePicture.where(self.himlist_where(ar)).count, nil)).page(page).per(page_size)
+ end
+
+ def self.list_by_original_picture_where original_picture_id
+ ['resource_pictures.original_picture_id = ?', original_picture_id]
+ end
+
+ def self.list_by_original_picture original_picture_id, roles, page = 1, page_size = self.default_page_size
+ self.where(self.list_by_original_picture_where(original_picture_id)).includes(self.list_opt).order('resource_pictures.updated_at desc').offset((page -1) * page_size).limit(page_size)
+ end
+
+ def self.list_by_license_where license_id
+ ['resource_pictures.license_id = ?', license_id]
+ end
+
+ def self.list_by_license license_id, roles, page = 1, page_size = self.default_page_size
+ self.where(self.list_by_license_where(license_id)).includes(self.list_opt).order('resource_pictures.updated_at desc').offset((page -1) * page_size).limit(page_size)
+ end
+
+ def self.list_by_artist_where artist_id
+ ['resource_pictures.artist_id = ?', artist_id]
+ end
+
+ def self.list_by_artist artist_id, roles, page = 1, page_size = self.default_page_size
+ self.where(self.list_by_artist_where(artist_id)).includes(self.list_opt).order('resource_pictures.updated_at desc').offset((page -1) * page_size).limit(page_size)
+ end
+
+ def self.list_opt
+ {:license => {}, :artist => {}, :picture => {} }
+ end
+
+ def self.list_json_opt
+ {:include => {:license => {}, :artist => {}, :picture => {}} }
+ end
+
+ def self.show rid, roles
+ opt = {}
+ opt.merge!(self.show_opt)
+ r = ResourcePicture.find(rid, opt)
+ raise ActiveRecord::Forbidden unless r.visible?(roles)
+ r
+ end
+
+ def self.show_opt
+ {:include => {:license => {}, :artist => {}, :picture => {}} }
+ end
+
+ def self.show_json_opt
+ {:include => {:license => {}, :artist => {}, :picture => {}} }
+ end
+
+ def self.edit rid, ar
+ opt = {}
+ opt.merge!(self.show_opt)
+ r = ResourcePicture.find(rid, opt)
+ raise ActiveRecord::Forbidden unless r.own?(ar)
+ r
+ end
+
+ def new_picture imager
+ pc = Picture.new
+ pc.supply_default
+ pc.overwrite self
+ r = pc.store imager
+ return pc if r
+ self.errors.add :base, Picture.model_name.human + I18n.t('errors.not_create')
+ false
+ end
+
+ def store imager
+ return false unless imager
+ res = false
+ self.overwrite self.original_picture
+ ResourcePicture.transaction do
+ self.original_picture.published_at = Time.now
+ self.original_picture.stopped_at = nil
+ raise ActiveRecord::Rollback unless self.original_picture.save
+ pc = self.new_picture imager
+ if pc
+ self.picture_id = pc.id
+ if res = self.save
+ res = self.store_picture_with_gif(imager)
+ end