class CustomAlbum include Mongoid::Document include Mongoid::Timestamps include OrbitCategory::Categorizable include OrbitTag::Taggable include Slug field :custom_module field :bind_uid field :name, as: :slug_title, localize: true field :description, localize: true field :cover, default: "default" field :cover_path #can refact field :tag_names field :uid, type: String field :rss2_id, type: String field :order, type: Integer, default: -1 field :resize_gravity # has_and_belongs_to_many :tags, :class_name => "CustomGalleryTag" has_many :custom_album_images, :autosave => true, :dependent => :destroy has_many :custom_album_colors, :autosave => true, :dependent => :destroy accepts_nested_attributes_for :custom_album_images, :allow_destroy => true accepts_nested_attributes_for :custom_album_colors, :allow_destroy => true before_save do |record| if record.order.nil? || record.order == -1 topest_order = CustomAlbum.all.pluck(:order).sort{|a,b| a.to_i<=>b.to_i}.first if topest_order.nil? || topest_order == 0 record.order = -2 else record.order = topest_order - 1 end end end after_create do custom_record_callback(1) end after_destroy do custom_record_callback(-1) end def custom_record_callback(num) if self.custom_module && self.bind_uid.present? custom_album_config = CustomAlbumConfig.where(:module=>self.custom_module).first if custom_album_config && custom_album_config.custom_record_callback.present? && custom_album_config.bind_model.present? target_model = custom_album_config.bind_model.constantize rescue nil if target_model target_record = target_model.where(custom_album_config.uid_field=>self.bind_uid).first target_record.send(custom_album_config.custom_record_callback,num) end end end end def resize_gravity """ NorthWestGravity Position object at top-left of region NorthGravity Position object at top-center of region NorthEastGravity Position object at top-right of region WestGravity Position object at left-center of region CenterGravity Position object at center of region EastGravity Position object at right-center of region SouthWestGravity Position object at left-bottom of region SouthGravity Position object at bottom-center of region SouthEastGravity Position object at bottom-right of region """ tmp = self[:resize_gravity] (tmp.blank? ? (CustomAlbumSetting.first.resize_gravity.blank? ? "Center" : CustomAlbumSetting.first.resize_gravity) : tmp) rescue 'Center' end def self.find_by_param(input) self.find_by(uid: input) end def self.filter_by_tags(tags=[]) tags = OrbitHelper.page_tags if tags.blank? tags = [tags].flatten.uniq if !(tags.include?("all")) tag_temp = Tag.all.select{|value| tags.include? value.id.to_s} tag_temp_length = 0 tag_temp.each do |value| if value.name==I18n.t('custom_gallery.show_desc') || value.name==I18n.t('custom_gallery.not_show_desc') tag_temp_length+=1 end end if tag_temp_length!=0 if (tags.length - tag_temp_length) == 0 tags = ['all'] end end end if tags.blank? || (tags.include?("all") rescue false) self.all else tags taggings = Tagging.where(:tag_id.in=>tags).map{|item| item.taggable_id} self.where(:id.in=>taggings) end end def cover tmp = self['cover'] if tmp=='default' tmp = (self.custom_album_images.first.id.to_s rescue 'default') end tmp end def cover_path tmp = self['cover_path'] if tmp.nil? tmp = (self.custom_album_images.first.file.thumb.url rescue nil) end tmp end end