class Site include Mongoid::Document include Mongoid::Timestamps include Slug DEBUG = false has_many :page_sets, :autosave => true, :dependent => :destroy accepts_nested_attributes_for :page_sets, :allow_destroy => true field :title, as: :slug_title, type: String, localize: true field :school, type: String field :department, type: String field :address, type: String field :footer, localize: true field :social_share, type: String field :sub_menu, localize: true field :site_type field :site_map_link, type: String, :default => "/sitemap" field :terms_of_use_link, type: String field :google_analytics, type: String field :in_use_locales, :type => Array field :valid_locales, :type => Array field :site_active, :type => Boolean field :frontend_open, :type => Boolean, :default => true field :backend_openness_on, :type => Boolean, :default => false field :mobile_api_openness_on, :type => Boolean, :default => false field :desktop_closed, :type => Boolean, :default => false field :enable_language_detection, :type => Boolean, :default => false field :enable_redirect_index, :type => Boolean, :default => true field :enable_zh_cn, :type => Boolean, :default => true field :enable_language_options, :type => Boolean, :default => true field :default_locale, :default => "zh_tw" field :mobile_on, :type => Boolean, :default => false field :announcement_category, :type => Array, :default=>[] field :mobile_bar_color, :type => Array, :default=>[] field :phone_number, :type => Array,:default=>[] field :title_always_on, :type => Boolean, :default => false field :display_title_in_frontend, :type => Boolean, :default => true field :sitemap_menu_in_header, :type => Boolean, :default => false field :enable_terms_of_use, :type => Boolean, :default => false field :search,:type => Hash field :site_settings field :template, type: String field :store_token field :enable_last_update, type: Boolean, :default => false field :personal_plugins_sort, type: Array, :default => [] field :sign_up_roles, type: Array, :default => [] field :mobile_orbit_bar_title, localize: true field :google_oauth_enabled, :type => Boolean, :default => false field :google_client_id field :google_client_secret field :meta_tags field :every_page_sharer, type: Array, :default => ["facebook","twitter","google","printer"] field :sync_enabled, type: Boolean, :default => false field :sync_rake_task field :month_traffic_cache field :home_link, :type => String, :default=>"/" field :home_link_1, :type => String, :default=>"/" field :site_title, :type => Hash, :default=>{:zh_tw=>"主頁",:en=>"home_page"} field :site_title_1, :type => Hash, :default=>{:zh_tw=>"主頁",:en=>"home_page"} field :is_hidden_orbit_bar , type: Boolean, :default => false field :orbit_bar_background_color , type: String, :default => "" field :orbit_bar_text_color , type: String, :default => "" field :orbit_bar_submenu_background_color , type: String, :default => "" field :orbit_bar_submenu_text_color , type: String, :default => "" field :orbit_bar_animation_time , type: String, :default => "0.3s" mount_uploader :default_image, ImageUploader mount_uploader :site_logo, ImageUploader mount_uploader :site_logo_1, ImageUploader mount_uploader :favicon, ImageUploader mount_uploader :mobile_icon, ImageUploader Impression.class_eval{ def self.create_date_for_group(date) {'_id'=>{'year'=>date.year,'month'=>date.month,'day'=>date.day},'count'=>0} end def self.group_by(field,day_limit,start_day=Date.today,format = 'day') limit_ele = self.desc(:id).where({ created_at: { "$lt" => start_day-(day_limit-2).days }}).first || self.first key_op = [['year','$year'],['month', '$month'], ['day', '$dayOfMonth']] key_op = key_op.take(1 + key_op.find_index { |key, op| format == key }) project_date_fields = Hash[*key_op.collect { |key, op| [key, {op => "$#{field}"}] }.flatten] group_id_fields = Hash[*key_op.collect { |key, op| [key, "$#{key}"] }.flatten] pipeline = [ {"$match"=> {"_id" => {"$gte" => (limit_ele['_id'] rescue '')}}}, {"$project" => {field => 1}.merge(project_date_fields)}, {"$group" => {"_id" => group_id_fields,"count" => {"$sum" => 1}}}, {"$sort" => {"_id"=>-1}} ] tmp = collection.aggregate(pipeline) if tmp.count < day_limit tmp.concat(Array.new(day_limit-tmp.count).map.with_index.map{|v,i| create_date_for_group(start_day+i.days)}) end tmp end } after_initialize do if !self.new_record? if self.is_hidden_orbit_bar.nil? self.is_hidden_orbit_bar = false self.save end if self.orbit_bar_background_color.nil? self.orbit_bar_background_color = "" self.save end if self.orbit_bar_text_color.nil? self.orbit_bar_text_color = "" self.save end if self.orbit_bar_submenu_background_color.nil? self.orbit_bar_submenu_background_color = "" self.save end if self.orbit_bar_submenu_text_color.nil? self.orbit_bar_submenu_text_color = "" self.save end if self.orbit_bar_animation_time.nil? self.orbit_bar_animation_time = "0.3s" self.save end end end def register_site(url,university,department,email,country) api_key = STORE_CONFIG[:store_settings]["api_key"] self.generate_site_token store = Store.new(self.id.to_s,self.site_token,api_key) store.post_client(self.id.to_s,self.site_token,self.title,url,university,department,email,country) end end