forked from spen/seminar
first commit for seminar
This commit is contained in:
commit
52d3581130
121 files changed
+6015
No files matched your search
@@ -0,0 +1,7 @@
|
||||
class SeminarAgreement
|
||||
include Mongoid::Document
|
||||
include Mongoid::Timestamps
|
||||
|
||||
field :content, localize: true
|
||||
|
||||
end
|
||||
@@ -0,0 +1,14 @@
|
||||
# encoding: utf-8
|
||||
class SeminarFile
|
||||
|
||||
include Mongoid::Document
|
||||
include Mongoid::Timestamps
|
||||
|
||||
mount_uploader :file, AssetUploader
|
||||
|
||||
field :description, localize: true
|
||||
field :title, localize: true
|
||||
|
||||
belongs_to :seminar_main
|
||||
|
||||
end
|
||||
@@ -0,0 +1,12 @@
|
||||
class SeminarItem
|
||||
include Mongoid::Document
|
||||
include Mongoid::Timestamps
|
||||
|
||||
field :title, localize: true
|
||||
|
||||
belongs_to :seminar_main
|
||||
|
||||
has_many :seminar_item_contents, :autosave => true, :dependent => :destroy
|
||||
accepts_nested_attributes_for :seminar_item_contents, :allow_destroy => true
|
||||
|
||||
end
|
||||
@@ -0,0 +1,15 @@
|
||||
# encoding: utf-8
|
||||
class SeminarItemContent
|
||||
|
||||
include Mongoid::Document
|
||||
include Mongoid::Timestamps
|
||||
|
||||
field :content, localize: true
|
||||
|
||||
field :create_user_id
|
||||
field :update_user_id
|
||||
|
||||
belongs_to :seminar_item
|
||||
belongs_to :seminar_main
|
||||
|
||||
end
|
||||
@@ -0,0 +1,25 @@
|
||||
# encoding: utf-8
|
||||
require 'uri'
|
||||
|
||||
class SeminarLink
|
||||
include Mongoid::Document
|
||||
include Mongoid::Timestamps
|
||||
|
||||
field :url
|
||||
field :title, localize: true
|
||||
|
||||
belongs_to :seminar_main
|
||||
|
||||
before_validation :add_http
|
||||
|
||||
validates :url, :presence => true, :format => /\A(http|https):\/\/(([a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5})|((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))(:[0-9]{1,5})?(\/.*)?\Z/i
|
||||
|
||||
protected
|
||||
|
||||
def add_http
|
||||
unless self.url[/^http:\/\//] || self.url[/^https:\/\//]
|
||||
self.url = 'http://' + self.url
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
@@ -0,0 +1,79 @@
|
||||
class SeminarMain
|
||||
include Mongoid::Document
|
||||
include Mongoid::Timestamps
|
||||
|
||||
include OrbitModel::Impression
|
||||
# encoding: utf-8
|
||||
include OrbitCategory::Categorizable
|
||||
include Slug
|
||||
|
||||
field :title, as: :slug_title, type: String, localize: true
|
||||
field :speaker, localize: true
|
||||
field :content, localize: true
|
||||
field :act_place, localize: true
|
||||
|
||||
field :seminar_start_date, :type => Date, :default => Time.now
|
||||
field :seminar_end_date, :type => Date, :default => Time.now
|
||||
|
||||
field :signup_start_date, :type => Date, :default => Time.now
|
||||
field :signup_end_date, :type => Date, :default => Time.now
|
||||
|
||||
field :contribute_start_date, :type => Date
|
||||
field :contribute_end_date, :type => Date
|
||||
|
||||
field :contribute_file_count, type: String
|
||||
|
||||
field :registration_status , :type => Array #C: 投稿者 G:一般
|
||||
|
||||
field :create_user_id
|
||||
field :update_user_id
|
||||
|
||||
belongs_to :seminar_item
|
||||
|
||||
has_many :seminar_links, :autosave => true, :dependent => :destroy
|
||||
has_many :seminar_files, :autosave => true, :dependent => :destroy
|
||||
has_many :seminar_item_contents, :autosave => true, :dependent => :destroy
|
||||
has_many :seminar_signups, :autosave => true, :dependent => :destroy
|
||||
has_many :seminar_signup_fields, :autosave => true, :dependent => :destroy
|
||||
|
||||
accepts_nested_attributes_for :seminar_links, :allow_destroy => true
|
||||
accepts_nested_attributes_for :seminar_files, :allow_destroy => true
|
||||
accepts_nested_attributes_for :seminar_item_contents, :allow_destroy => true
|
||||
accepts_nested_attributes_for :seminar_signups, :allow_destroy => true
|
||||
accepts_nested_attributes_for :seminar_signup_fields, :allow_destroy => true
|
||||
|
||||
|
||||
|
||||
def self.time_range(date1 = null, date2 = null)
|
||||
|
||||
if !date1.blank?
|
||||
|
||||
r = "#{date1.strftime('%Y-%m-%d')}"
|
||||
|
||||
if date2
|
||||
r += " - #{date2.strftime('%Y-%m-%d')}"
|
||||
else
|
||||
r += " - #{I18n.t(:no_deadline)}"
|
||||
end
|
||||
|
||||
r
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
def get_attribute_value(attribute_field, signup_id)
|
||||
SeminarSignupValue.find_by(seminar_signup_field_id: attribute_field.id, seminar_signup_id: signup_id)
|
||||
end
|
||||
|
||||
def get_attribute_values(attribute_type=nil)
|
||||
@attribute_values = attribute_type.seminar_signup_values rescue nil
|
||||
end
|
||||
|
||||
def get_value_from_field_id(field_id,attribute_type=nil)
|
||||
values = get_attribute_values(attribute_type)
|
||||
value = values.detect {|value| value.seminar_signup_field_id == field_id} rescue nil
|
||||
value ? value : nil
|
||||
end
|
||||
|
||||
end
|
||||
@@ -0,0 +1,27 @@
|
||||
# encoding: utf-8
|
||||
class SeminarSignup
|
||||
|
||||
include Mongoid::Document
|
||||
include Mongoid::Timestamps
|
||||
|
||||
field :status
|
||||
field :name
|
||||
field :unit, localize: true
|
||||
field :tel, type: String
|
||||
field :phone, type: String
|
||||
field :fax, type: String
|
||||
field :email, type: String
|
||||
field :address, localize: true
|
||||
field :password
|
||||
field :note, localize: true
|
||||
|
||||
belongs_to :seminar_main
|
||||
|
||||
has_many :seminar_signup_values
|
||||
has_many :seminar_signup_contributes
|
||||
|
||||
accepts_nested_attributes_for :seminar_signup_values, allow_destroy: true
|
||||
accepts_nested_attributes_for :seminar_signup_contributes, allow_destroy: true
|
||||
|
||||
|
||||
end
|
||||
@@ -0,0 +1,14 @@
|
||||
class SeminarSignupContribute
|
||||
|
||||
include Mongoid::Document
|
||||
include Mongoid::Timestamps
|
||||
|
||||
mount_uploader :file, AssetUploader
|
||||
|
||||
field :description
|
||||
field :title
|
||||
|
||||
|
||||
belongs_to :seminar_signup
|
||||
|
||||
end
|
||||
@@ -0,0 +1,160 @@
|
||||
class SeminarSignupField
|
||||
include Mongoid::Document
|
||||
include Mongoid::Timestamps
|
||||
include Mongoid::Attributes::Dynamic
|
||||
include ::AttributeFieldsHelper
|
||||
include ::Admin::SeminarsFieldHelper
|
||||
|
||||
field :key, type: String
|
||||
field :af_count
|
||||
field :title, type: String, localize: true
|
||||
field :markup, default: "text_field"
|
||||
field :option_list, type: Hash,default: {}
|
||||
field :markup_options, type: Hash
|
||||
field :built_in, type: Boolean, default: false
|
||||
field :disabled, type: Boolean, default: false
|
||||
field :to_delete, type: Boolean, default: false
|
||||
|
||||
field :to_require,type: Boolean, default: true
|
||||
|
||||
field :typeA, type: Hash, default: {cross_lang: false}
|
||||
field :typeB, type: Hash, default: {}
|
||||
field :typeC, type: Hash, default: {calendar: "west_calendar", format: "format3"}
|
||||
field :typeD, type: Hash, default: {cross_lang: false}
|
||||
field :typeE, type: Hash, default: {}
|
||||
|
||||
belongs_to :seminar_main
|
||||
has_many :seminar_signup_values, autosave: true, dependent: :destroy
|
||||
before_save :check_option_list
|
||||
|
||||
def markup_value
|
||||
get_data["option_list"]
|
||||
end
|
||||
|
||||
def add_more
|
||||
(get_data["add_more"] == "true" ? true : false) rescue false
|
||||
end
|
||||
|
||||
def locale
|
||||
get_data["cross_lang"] == "true" ? false : true
|
||||
end
|
||||
|
||||
def self_defined_markup_options?
|
||||
(self.seminar.method(self[:key].pluralize.to_sym) && self.seminar.method(self[:key].pluralize+"_for_"+markup)) rescue false
|
||||
end
|
||||
|
||||
def option_list
|
||||
if self_defined_markup_options?
|
||||
#Class need to have corresponding field and value agent
|
||||
# Ex: For "status" the class must have field called "statuses" for the relation and "statuses_for_select" for the select function
|
||||
method = self.seminar.method(self[:key].pluralize+"_for_"+markup)
|
||||
return (method.call rescue {})
|
||||
elsif self[:option_list].nil? || (self[:option_list].empty?)
|
||||
return {}
|
||||
else
|
||||
return self[:option_list]
|
||||
end
|
||||
end
|
||||
|
||||
def markup_options=(var)
|
||||
self[:markup_options] = (eval(var) rescue {})
|
||||
end
|
||||
|
||||
def markup_options
|
||||
if self[:markup_options].nil?
|
||||
return {}
|
||||
else
|
||||
Hash[self[:markup_options].map{|key,val|[key.to_sym,val]}] rescue {}
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
def panel
|
||||
panel = LIST[:markups][self[:markup]]["panel"]
|
||||
end
|
||||
|
||||
def get_data
|
||||
self[panel]
|
||||
end
|
||||
|
||||
def typeA=(var)
|
||||
check_add_more_convert(var)
|
||||
check_cross_lang_convert(var,"typeA")
|
||||
self["typeA"] = var
|
||||
end
|
||||
|
||||
def typeD=(var)
|
||||
check_cross_lang_convert(var,"typeD")
|
||||
self["typeD"] = var
|
||||
end
|
||||
|
||||
def is_built_in?
|
||||
self.built_in
|
||||
end
|
||||
|
||||
def is_disabled?
|
||||
self.disabled
|
||||
end
|
||||
|
||||
def self.add_seminar_signup_field(seminar,seminar_param, seminar_signup_field_id=nil,field_status)
|
||||
@field_name = 'seminar'
|
||||
if field_status.eql?(true)
|
||||
@seminar_signup_field_counter = seminar.seminar_signup_fields.count rescue nil
|
||||
@seminar_signup_field = self.find(seminar_signup_field_id) rescue nil
|
||||
old_key = @seminar_signup_field.key
|
||||
@seminar_signup_field.update(seminar_param)
|
||||
@seminar_signup_field.save
|
||||
attribute_values = @seminar_signup_field.seminar_signup_values
|
||||
if attribute_values.count > 0
|
||||
attribute_values.each do |av|
|
||||
av.key = seminar_param["key"]
|
||||
av.save
|
||||
end
|
||||
end
|
||||
@seminar_signup_field[:af_count] = @seminar_signup_field_counter
|
||||
else
|
||||
@seminar_signup_field_counter = seminar.seminar_signup_fields.count rescue nil
|
||||
@seminar_signup_field = seminar.seminar_signup_fields.build(seminar_param) rescue nil
|
||||
@seminar_signup_field.save
|
||||
@seminar_signup_field[:af_count] = @seminar_signup_field_counter
|
||||
end
|
||||
return @seminar_signup_field
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def check_cross_lang_convert(var,field)
|
||||
if self[field]["cross_lang"] != var["cross_lang"]
|
||||
case var["cross_lang"]
|
||||
when "true" #from no-add_more to add_more
|
||||
cross_lang_convert(:to_cross_lang)
|
||||
else #from add_more to no-add_more
|
||||
cross_lang_convert(:to_no_cross_lang)
|
||||
end # of case
|
||||
end # of if
|
||||
end
|
||||
|
||||
def check_add_more_convert(var)
|
||||
if self["typeA"]["add_more"] != var["add_more"]
|
||||
case var["add_more"]
|
||||
when "true" #from no-add_more to add_more
|
||||
add_more_convert(:to_add_more)
|
||||
else #from add_more to no-add_more
|
||||
add_more_convert(:to_no_add_more)
|
||||
end # of case
|
||||
end # of if
|
||||
end
|
||||
|
||||
def cross_lang_convert(opt)
|
||||
|
||||
end
|
||||
|
||||
def check_option_list
|
||||
self[:option_list] = self[panel]["option_list"] rescue nil
|
||||
end
|
||||
|
||||
def add_more_convert(opt)
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
@@ -0,0 +1,213 @@
|
||||
class SeminarSignupValue
|
||||
include Mongoid::Document
|
||||
include Mongoid::Timestamps
|
||||
include Mongoid::Attributes::Dynamic
|
||||
include ::AttributeValuesHelper
|
||||
include ::Admin::SeminarsValuesHelper
|
||||
|
||||
field :key, type: String
|
||||
|
||||
belongs_to :seminar_signup_field
|
||||
belongs_to :seminar_signup
|
||||
|
||||
before_save :check_key
|
||||
before_save :data_proc
|
||||
|
||||
def add_more_counter
|
||||
index_max = self["val"].count rescue 0
|
||||
index_max == 0 ? 1 : index_max
|
||||
end
|
||||
|
||||
def value(index = nil)
|
||||
site = Site.first
|
||||
result = case self.seminar_signup_field.markup
|
||||
when 'text_field','text_area'
|
||||
if self.seminar_signup_field.add_more and (self.seminar_signup_field.markup == "text_field")
|
||||
index.nil? ? self["val"] : self["val"][index]
|
||||
else
|
||||
self.seminar_signup_field.get_data["cross_lang"] =="true" ? self["val"] : Hash[site.valid_locales.collect{|lang| [lang,self[lang.to_sym]]}]
|
||||
end
|
||||
when 'select','radio_button','address'
|
||||
self["val"]
|
||||
when 'date'
|
||||
if !self["val"].blank? and !self["val"]['(1i)'].blank?
|
||||
"#{self["val"]['(1i)']}/#{self["val"]['(2i)']}/#{self["val"]['(3i)']}"
|
||||
else
|
||||
self["val"]
|
||||
end
|
||||
when 'checkbox'
|
||||
self["val"]
|
||||
end #end of case self.seminar_signup_field.markup
|
||||
end
|
||||
|
||||
def value=(value)
|
||||
#save everything to temp_data waiting for futher process
|
||||
self[:temp_data] = value
|
||||
end
|
||||
|
||||
def get_field_value
|
||||
if (self.seminar_signup_field.markup.eql?("text_field") || self.seminar_signup_field.markup.eql?("text_area"))
|
||||
field_value = self.value[I18n.locale]
|
||||
elsif (self.seminar_signup_field.markup.eql?("select") || self.seminar_signup_field.markup.eql?("radio_button"))
|
||||
field_value = self.seminar_signup_field.markup_value["#{self.value}"][I18n.locale] rescue nil
|
||||
elsif self.seminar_signup_field.markup.eql?("address")
|
||||
field_value = rf[:address_key][I18n.locale].map{|k,v| v}.delete_if(&:blank?).join(', ')
|
||||
elsif self.seminar_signup_field.markup.eql?("date")
|
||||
case self.seminar_signup_field.typeC['format']
|
||||
when 'format1'
|
||||
field_value = self.value.to_date.strftime("%Y/%m/%d")
|
||||
when 'format2'
|
||||
field_value = self.value.to_date.strftime("%Y/%m/%d")
|
||||
when 'format3'
|
||||
field_value = self.value.to_date.strftime("%Y/%m")
|
||||
when 'format4'
|
||||
field_value = self.value.to_date.strftime("%Y")
|
||||
end
|
||||
elsif self.seminar_signup_field.markup.eql?("checkbox")
|
||||
field_value = self.value.map {|v| self.seminar_signup_field.markup_value["#{v}"][I18n.locale]}.join(', ') rescue nil
|
||||
end
|
||||
|
||||
field_value = (field_value =~ /\A#{URI::regexp(['http', 'https'])}\z/) ? "<a href='#{field_value}' target='blank'>#{field_value}</a>" : field_value
|
||||
field_value = (field_value =~ /\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i) ? "<a href='mailto:#{field_value}'>#{field_value}</a>" : field_value
|
||||
|
||||
if !field_value.blank?
|
||||
{
|
||||
"key" => self.seminar_signup_field.key,
|
||||
"title" => self.seminar_signup_field.title,
|
||||
"value" => field_value,
|
||||
"val" => field_value = self.value
|
||||
}
|
||||
else
|
||||
{
|
||||
"key" => self.seminar_signup_field.key,
|
||||
"title" => self.seminar_signup_field.title,
|
||||
"value" => "",
|
||||
"val" => field_value = self.value
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
def get_value_by_locale(locale,add_more_index=nil)
|
||||
case self.seminar_signup_field.markup
|
||||
when "text_field"
|
||||
case self.seminar_signup_field.add_more
|
||||
when true
|
||||
if self.seminar_signup_field.locale
|
||||
add_more_index.nil? ? self.value.collect{|t| t[locale.to_s]}.join(",") : self.value(add_more_index)[locale]
|
||||
else
|
||||
add_more_index.nil? ? self.value.join(",") : self.value(add_more_index)
|
||||
end
|
||||
|
||||
when false
|
||||
self.seminar_signup_field.locale ? self[locale.to_s] : self.value
|
||||
end
|
||||
|
||||
when "select"
|
||||
markup_values = self.seminar_signup_field.self_defined_markup_options? ? self.seminar_signup_field.markup_value : self.seminar_signup_field.markup_value
|
||||
markup_values[self.value][locale.to_s] rescue 'NoData'
|
||||
|
||||
when "text_area"
|
||||
self.seminar_signup_field.locale ? self[locale.to_s] : self.value
|
||||
|
||||
when "date"
|
||||
if self.seminar_signup_field.date_is_range?
|
||||
get_date_by_format(:from) + ' ~ ' + get_date_by_format(:to)
|
||||
# self.value["from"] + ' ~ ' + self.value["to"]
|
||||
else
|
||||
get_date_by_format
|
||||
# self.value
|
||||
end
|
||||
|
||||
when "address"
|
||||
self.value[locale.to_s]
|
||||
|
||||
when "radio_button"
|
||||
markup_values = self.seminar_signup_field.markup_value
|
||||
markup_values[self.value][locale.to_s]
|
||||
|
||||
when "checkbox"
|
||||
markup_values = self.seminar_signup_field.markup_value
|
||||
self.value.collect{|key| markup_values["#{key}"][I18n.locale]}.join(",")
|
||||
when "date_durnation"
|
||||
self.value
|
||||
|
||||
else
|
||||
self.seminar_signup_field.locale ? self[locale.to_s] : self.value
|
||||
end
|
||||
end
|
||||
|
||||
def get_date(item = nil)
|
||||
case item
|
||||
when :from
|
||||
# data = self[:val]["from"]
|
||||
data = self.value["from"]
|
||||
when :to
|
||||
# data = self[:val]["to"]
|
||||
data = self.value["to"]
|
||||
when nil
|
||||
# data = self[:val]
|
||||
data = self.value
|
||||
end
|
||||
|
||||
# Date.new(data["(1i)"].to_i,data["(2i)"].to_i,data["(3i)"].to_i) rescue nil
|
||||
end
|
||||
|
||||
def self.put_field_values(member, field_value_param, field_value_id=nil,field_value_status)
|
||||
if field_value_status.eql?(true)
|
||||
@seminar_signup_field_value = self.find(field_value_id) rescue nil
|
||||
@seminar_signup_field_value.update(field_value_param) rescue nil
|
||||
@seminar_signup_field_value.save rescue nil
|
||||
else
|
||||
@seminar_signup_field_value = member.seminar_signup_values.build(field_value_param) rescue nil
|
||||
@seminar_signup_field_value.save
|
||||
end
|
||||
return @seminar_signup_field_value
|
||||
end
|
||||
|
||||
|
||||
protected
|
||||
|
||||
def unset_all_lang_values
|
||||
VALID_LOCALES.each{|t| self.unset t}
|
||||
end
|
||||
|
||||
def data_proc
|
||||
unless self[:temp_data].nil?
|
||||
case self.seminar_signup_field.markup
|
||||
when "address"
|
||||
self["val"] = self["temp_data"]
|
||||
when 'text_field','text_area'
|
||||
if self.seminar_signup_field.add_more
|
||||
self["val"] = self["temp_data"]
|
||||
else # if not add_more
|
||||
if self.seminar_signup_field.can_muti_lang_input?
|
||||
self[:temp_data].each do |key,val|
|
||||
self[key] = val
|
||||
end if(!self.seminar_signup_field.get_data[:cross_lang])
|
||||
else
|
||||
self["val"] = self[:temp_data]
|
||||
end
|
||||
end # of self.seminar_signup_field.add_more
|
||||
|
||||
when 'select','date','radio_button'
|
||||
self["val"] = self[:temp_data]
|
||||
when 'checkbox'
|
||||
self["val"] = self[:temp_data].keys
|
||||
end #end of case self.seminar_signup_field.markup
|
||||
end # of self[:temp_data].nil?
|
||||
self.unset('temp_data')
|
||||
self.unset('temp')
|
||||
end #of data_proc
|
||||
|
||||
def check_key
|
||||
self.key = self.seminar_signup_field.key
|
||||
end
|
||||
|
||||
def method_missing(*field)
|
||||
if field.size < 1
|
||||
self[field[0]]
|
||||
else
|
||||
self[(field[0].to_s.delete "=")] = field[1]
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in new issue
Block a user