Add signup search feature.

Add assign organizer to seminar events and assign signups to reviewers feature.
This commit is contained in:
BoHung Chiu 2021-03-17 15:33:31 +08:00
parent a605fc0df7
commit 2f076ab2cf
29 changed files with 1474 additions and 349 deletions

View File

@ -2,12 +2,21 @@
class Admin::SeminarSignupsController < OrbitAdminController
include Admin::SeminarsHelper
before_action ->(module_app = @app_title) { set_variables module_app }
before_action :check_manager_for_seminar
def initialize
super
@app_title = "seminar"
end
def check_manager_for_seminar
OrbitHelper.set_params(params,current_user)
access_level = OrbitHelper.user_access_level?
if (access_level.nil? || access_level == "user")
@seminar = SeminarSignup.find(params[:id]).seminar_main rescue nil
if (@seminar.organizer_id != current_user.member_profile_id rescue true)
render_401
end
end
end
def edit
OrbitHelper.set_params(params,current_user)
params[:controller] = "admin/seminars"
@ -29,6 +38,15 @@ class Admin::SeminarSignupsController < OrbitAdminController
field_value = r.last[:id].present?
@custom_field_value = SeminarSignupValue.put_field_values(@seminar_signup, r.last, r.last[:id], field_value)
end
seminar_reviews = SeminarReview.where(:seminar_main_id=>@seminar_signup.seminar_main_id).to_a
seminar_reviews.each{|sr| sr.save}
@seminar = @seminar_signup.seminar_main
unassigned_seminar_signup_ids = @seminar.seminar_signup_ids.map{|s| s.to_s}
@seminar.seminar_reviews.each do |sr|
unassigned_seminar_signup_ids = unassigned_seminar_signup_ids - sr.all_seminar_signup_ids
end
@seminar.unassigned_seminar_signup_ids = unassigned_seminar_signup_ids
@seminar.save
end
redirect_to "/admin/seminars/#{@seminar_signup.seminar_main_id}/seminar_signup"

View File

@ -2,10 +2,13 @@
class Admin::SeminarsController < OrbitAdminController
require 'axlsx'
include Admin::SeminarsHelper
helper Admin::SeminarsFieldHelper
before_action ->(module_app = @app_title) { set_variables module_app }
before_action :set_seminar, only: [:edit, :set_write_off, :seminar_signup, :destroy]
before_action :set_seminar, only: [:edit, :set_write_off, :seminar_signup, :destroy,:seminar_signup_admin_setting,:update_seminar_signup_admin_setting,:get_reviewer_block,:update_seminar_review,:reviewer_setting,:update_reviewer_setting]
before_action :set_seminar_signup_admin_setting, only: [:seminar_signup,:seminar_signup_admin_setting,:update_seminar_signup_admin_setting,:get_reviewer_block]
before_action :check_permission_for_seminar, only: [:seminar_signup,:get_reviewer_block]
before_action :check_manager_for_seminar, only: [:seminar_signup_admin_setting,:update_seminar_signup_admin_setting,:update_seminar_review]
def initialize
super
@app_title = "seminar"
@ -16,7 +19,152 @@ class Admin::SeminarsController < OrbitAdminController
:category=>categories.map{|c| {:title=>(c.title.blank? ? " " : c.title), :id=>c.id}}
}
end
def check_manager_for_seminar
OrbitHelper.set_params(params,current_user)
access_level = OrbitHelper.user_access_level?
if (access_level.nil? || access_level == "user") && (@seminar.organizer_id != current_user.member_profile_id rescue true)
render_401
end
end
def check_permission_for_seminar
OrbitHelper.set_params(params,current_user)
access_level = OrbitHelper.user_access_level?
if (access_level.nil? || access_level == "user")
unless (@seminar.reviewer_ids.include?(current_user.member_profile_id.to_s) rescue false) || (@seminar.organizer_id == current_user.member_profile_id rescue false)
render_401
else
@user_authenticated_categories = ['all']
end
end
end
def reviewer_setting
@seminar_reviews = @seminar.seminar_reviews
@fields = []
@fields_translations = []
access_markup = ["select","radio_button","checkbox"]
@fields_values = []
@seminar.seminar_signup_fields.each do |f|
next if f.disabled
if access_markup.include?(f.markup)
@fields << "seminar_signup_fields.#{f.id}"
@fields_translations << f.title
@fields_values << f.option_list
end
end
@seminar.seminar_submission_fields.each do |f|
next if f.disabled
if access_markup.include?(f.markup)
@fields << "seminar_submission_fields.#{f.id}"
@fields_translations << f.title
@fields_values << f.option_list
end
end
@fields_values = @fields_values.collect.with_index{|fields_values,i| [i, fields_values.values.map{|v| v[I18n.locale]} ] }.to_h
end
def update_reviewer_setting
seminar_params[:seminar_reviews_attributes].keys.each do |i|
if seminar_params[:seminar_reviews_attributes][i][:default_topics].present?
seminar_params[:seminar_reviews_attributes][i][:default_topics] = [] if seminar_params[:seminar_reviews_attributes][i][:default_topics].nil?
default_topics_values = []
(0...seminar_params[:seminar_reviews_attributes][i][:default_topics].count).each do |ii|
default_topics_values << (Array(seminar_params[:seminar_reviews_attributes][i][:default_topics_values][ii.to_s]) rescue [])
end
seminar_params[:seminar_reviews_attributes][i][:default_topics_values] = default_topics_values
else
seminar_params[:seminar_reviews_attributes][i][:default_topics] = []
seminar_params[:seminar_reviews_attributes][i][:default_topics_values] = []
end
end
#render :html => seminar_params and return
@seminar.update_attributes(seminar_params)
unassigned_seminar_signup_ids = @seminar.seminar_signup_ids.map{|s| s.to_s}
@seminar.seminar_reviews.each do |sr|
unassigned_seminar_signup_ids = unassigned_seminar_signup_ids - sr.all_seminar_signup_ids
end
@seminar.unassigned_seminar_signup_ids = unassigned_seminar_signup_ids
@seminar.save
redirect_to admin_seminars_path
end
def enquiry_for_applicants
OrbitHelper.set_params(params,current_user)
@access_level = OrbitHelper.user_access_level?
@can_edit = true
if @access_level == "user" || @access_level.nil?
@can_edit = false
end
reviewer_id = current_user.member_profile_id.to_s
if !@can_edit && SeminarMain.where(:reviewer_ids=>reviewer_id).count == 0 && SeminarMain.where(:organizer_id=>reviewer_id).count == 0
render_401 and return
end
@seminar_signup_admin_setting = SeminarSignupAdminSetting.where(:seminar_main_id=>"enquiry_for_applicants").first
if @seminar_signup_admin_setting.nil?
@seminar_signup_admin_setting = SeminarSignupAdminSetting.create(:seminar_main_id=>"enquiry_for_applicants")
end
if params[:name].present?
@seminar_signups = SeminarSignup.where(:name => /#{params[:name]}/).page(params[:page]).per(10)
else
@seminar_signups = []
end
unless @can_edit
if @seminar_signups.class != Array
seminar_signup_ids = SeminarReview.where(:reviewer_id=>reviewer_id).pluck(:seminar_signup_ids).flatten
remove_seminar_signup_ids = SeminarReview.where(:reviewer_id=>reviewer_id).pluck(:remove_seminar_signup_ids).flatten
default_seminar_signup_ids = SeminarReview.where(:reviewer_id=>reviewer_id).pluck(:default_seminar_signup_ids).flatten
all_seminar_signup_ids = seminar_signup_ids - remove_seminar_signup_ids + default_seminar_signup_ids
ids2 = SeminarSignup.where(:seminar_main_id.in=> SeminarMain.where(:organizer_id=>current_user.member_profile_id).pluck(:id)).pluck(:id)
@seminar_signups = @seminar_signups.where(:id.in=>all_seminar_signup_ids + ids2).page(params[:page]).per(10)
end
end
end
def get_hide_reviewer
seminar_main = SeminarMain.find(params[:id]) rescue nil
if seminar_main.nil?
render :nothing => true
else
@hide_reviewer_ids = Array(seminar_main.reviewer_ids) - Array(seminar_main.reviewer_show_ids)
@hide_reviewers = MemberProfile.where(:id.in=>@hide_reviewer_ids)
render :layout => false
end
end
def get_reviewer_block
@reviewer_id = params[:reviewer_id]
unless (@seminar.reviewer_show_ids.include?(@reviewer_id) rescue false)
@seminar.reviewer_show_ids << @reviewer_id
@seminar.save
end
render :layout => false
end
def update_seminar_review
if @seminar_review.nil?
render :json => {:success => false}
else
seminar_main = @seminar_review.seminar_main
if params[:mode] == "append"
@seminar_review.seminar_signup_ids << params[:signup_id]
@seminar_review.remove_seminar_signup_ids.delete(params[:signup_id])
seminar_main.unassigned_seminar_signup_ids.delete(params[:signup_id])
elsif params[:mode] == "remove"
@seminar_review.seminar_signup_ids.delete(params[:signup_id])
@seminar_review.remove_seminar_signup_ids << params[:signup_id]
seminar_main.unassigned_seminar_signup_ids << params[:signup_id]
elsif params[:mode] == "hide"
if seminar_main.reviewer_show_ids.nil?
seminar_main.reviewer_show_ids = seminar_main.reviewer_ids[0..1]
end
seminar_main.reviewer_show_ids = seminar_main.reviewer_show_ids - Array(@seminar_review.reviewer_id).flatten
elsif params[:mode] == "show"
seminar_main.reviewer_show_ids = seminar_main.reviewer_show_ids.to_a + Array(@seminar_review.reviewer_id).flatten
else
render :json => {:success => false} and return
end
seminar_main.save
@seminar_review.save
render :json => {:success => true}
end
end
def index
@categories = @module_app.categories.enabled
@filter_fields = filter_fields(@categories)
@ -37,7 +185,18 @@ class Admin::SeminarsController < OrbitAdminController
@seminars = SeminarMain.all.order_by(sort).with_categories(filters("category"))
@seminars = search_data(@seminars,[:title]).page(params[:page]).per(10)
OrbitHelper.set_params(params,current_user)
@access_level = OrbitHelper.user_access_level?
@can_edit = true
if @access_level == "user" || @access_level.nil?
@can_edit = false
end
unless @can_edit
reviewer_id = current_user.member_profile_id.to_s
ids1 = @seminars.where(:reviewer_ids=>reviewer_id).pluck(:id)
ids2 = @seminars.where(:organizer_id=>current_user.member_profile_id).pluck(:id)
@seminars = @seminars.where(:id.in=>ids1+ids2)
end
if request.xhr?
render :partial => "index"
end
@ -49,12 +208,19 @@ class Admin::SeminarsController < OrbitAdminController
@seminar = SeminarMain.find(params[:id])
@seminar_signups = SeminarSignup.where(:seminar_main_id => params[:id])
filename = @seminar.title.parameterize.underscore + "_export.xlsx"
respond_to do |format|
format.xlsx {
response.headers['Content-Disposition'] = 'attachment; filename="' + filename + '"'
}
if can_see_seminar_signup(@seminar)
if !admin_for_seminar(@seminar)
@seminar_review = @seminar.seminar_reviews.where(:reviewer_id => current_user.member_profile_id.to_s).first
@seminar_signups = @seminar_signups.where(:id.in=>@seminar_review.all_seminar_signup_ids) rescue []
end
respond_to do |format|
format.xlsx {
response.headers['Content-Disposition'] = 'attachment; filename="' + filename + '"'
}
end
else
render :nothing => true
end
end
def new
@ -121,22 +287,22 @@ class Admin::SeminarsController < OrbitAdminController
@signup_sets = @seminar.seminar_signup_field_sets
@submission_set = @seminar.seminar_submission_field_sets
@custom_set = @seminar.seminar_signup_field_customs
if @seminar.seminar_reviews.first.nil?
@review = @seminar.seminar_reviews.new()
@member = MemberProfile.where(:id.in=>@seminar.reviewer_ids).to_a rescue []
if (@seminar.organizer_id == current_user.member_profile_id rescue false)
@user_authorized_categories = @module_app.categories.enabled.to_a
else
@review = @seminar.seminar_reviews.first
@user_authorized_categories = nil
end
@member = MemberProfile.find(@review.reviewer_id) rescue nil
end
def update
params[:seminar_main][:registration_status] = (params[:seminar_main][:registration_status] ? params[:seminar_main][:registration_status] : [])
uid = params[:id].split('-').last
@seminar = SeminarMain.find_by(:uid=>uid)
seminar_params["reviewer_ids"] = [] if seminar_params["reviewer_ids"].nil?
seminar_params["organizer_id"] = nil if seminar_params["organizer_id"].nil?
if params[:seminar_main][:seminar_signup_fields]
seminar_params[:seminar_signup_fields].each do |a|
@field_name = 'seminar_main'
@ -209,15 +375,49 @@ class Admin::SeminarsController < OrbitAdminController
end
def seminar_signup
if !params[:search].blank?
@seminar_signups = SeminarSignup.where(:seminar_main_id => @seminar.id, :name=>params[:search]).page(params[:page]).per(10)
@seminar_signups = []
if params[:type] == "table"
@seminar_signups = @seminar.seminar_signups.where(:name=>/#{params[:search]}/)
else
@seminar_signups = SeminarSignup.where(:seminar_main_id => @seminar.id).page(params[:page]).per(10)
@seminar_signups = SeminarSignup.where(:id.in => @seminar.unassigned_seminar_signup_ids, :name=>/#{params[:search]}/)
end
OrbitHelper.set_params(params,current_user)
@access_level = OrbitHelper.user_access_level?
@can_edit = true
if @access_level == "user" || @access_level.nil?
@can_edit = false
end
unless @can_edit
@can_edit = (@seminar.organizer_id == current_user.member_profile_id rescue false)
end
unless @can_edit
@seminar_review = @seminar.seminar_reviews.where(:reviewer_id => current_user.member_profile_id.to_s).first
@seminar_signups = @seminar.seminar_signups.where(:id.in=>@seminar_review.all_seminar_signup_ids)
end
@seminar_signups = @seminar_signups.page(params[:page]).per(10)
if request.xhr?
render :layout => false
end
end
def seminar_signup_admin_setting
if @seminar.nil? && params[:id] != "enquiry_for_applicants"
redirect_to admin_seminars_path
end
end
def update_seminar_signup_admin_setting
@seminar_signup_admin_setting.update_attributes(params.require(:seminar_signup_admin_setting).permit!)
if params[:id] != "enquiry_for_applicants"
redirect_to seminar_signup_admin_seminar_path(params[:id])
else
redirect_to admin_seminar_enquiry_for_applicants_path
end
end
def set_seminar_signup_admin_setting
@seminar_signup_admin_setting = SeminarSignupAdminSetting.where(:seminar_main_id=>params[:id]).first
if @seminar_signup_admin_setting.nil?
@seminar_signup_admin_setting = SeminarSignupAdminSetting.create(:seminar_main_id=>params[:id])
end
end
def edit_seminar_signup
@seminar_signup = SeminarSignup.find(params[:id])
@seminar = SeminarMain.find(@seminar_signup.seminar_main_id)
@ -237,7 +437,11 @@ class Admin::SeminarsController < OrbitAdminController
private
def set_seminar
@seminar = SeminarMain.find(params[:id])
@seminar = SeminarMain.find(params[:id]) rescue nil
if params[:action] == "update_seminar_review"
@seminar_review = SeminarReview.find(params[:id]) rescue nil
@seminar = @seminar_review.seminar_main
end
end
def seminar_params

View File

@ -148,6 +148,11 @@ class SeminarsController < ApplicationController
field_value = r.last[:id].present?
@custom_field_value = SeminarSignupValue.put_field_values(@seminar_signup, r.last, r.last[:seminar_signup_field_id], field_value)
end
seminar_reviews = SeminarReview.where(:seminar_main_id=>@seminar.id).to_a
seminar_reviews.each{|sr| sr.save}
else
@seminar.unassigned_seminar_signup_ids << @seminar_signup.id.to_s
@seminar.save
end
if params['seminar_signup']['status']=='C'
status_param = '&status='
@ -203,6 +208,15 @@ class SeminarsController < ApplicationController
seminar_id = signup.seminar_main_id
@seminar = SeminarMain.where(id:seminar_id).first
send_mail('add_file',signup.email,seminar_id)
seminar_reviews = SeminarReview.where(:seminar_main_id=>signup.seminar_main_id).to_a
seminar_reviews.each{|sr| sr.save}
@seminar = signup.seminar_main
unassigned_seminar_signup_ids = @seminar.seminar_signup_ids.map{|s| s.to_s}
@seminar.seminar_reviews.each do |sr|
unassigned_seminar_signup_ids = unassigned_seminar_signup_ids - sr.all_seminar_signup_ids
end
@seminar.unassigned_seminar_signup_ids = unassigned_seminar_signup_ids
@seminar.save
redirect_to "#{params[:referer_url]}/?method=con_upload"
else
redirect_to "#{params[:referer_url]}", :notice => t('recaptcha.errors.verification_failed')
@ -237,6 +251,15 @@ class SeminarsController < ApplicationController
seminar_id = signup.seminar_main_id
@seminar = SeminarMain.where(id:seminar_id).first
send_mail('edit_file',signup.email,seminar_id)
seminar_reviews = SeminarReview.where(:seminar_main_id=>signup.seminar_main_id).to_a
seminar_reviews.each{|sr| sr.save}
@seminar = signup.seminar_main
unassigned_seminar_signup_ids = @seminar.seminar_signup_ids.map{|s| s.to_s}
@seminar.seminar_reviews.each do |sr|
unassigned_seminar_signup_ids = unassigned_seminar_signup_ids - sr.all_seminar_signup_ids
end
@seminar.unassigned_seminar_signup_ids = unassigned_seminar_signup_ids
@seminar.save
redirect_to "#{params[:referer_url]}/?method=con_upload"
else
redirect_to "#{params[:referer_url]}", :notice => t('recaptcha.errors.verification_failed')
@ -250,9 +273,18 @@ class SeminarsController < ApplicationController
# seminar_signup = SeminarSignup.find_by(_id: con.seminar_signup_id )
# seminar = SeminarMain.find_by(_id: seminar_signup.seminar_main_id )
signup = con.seminar_signup
con.destroy
seminar_reviews = SeminarReview.where(:seminar_main_id=>signup.seminar_main_id).to_a
seminar_reviews.each{|sr| sr.save}
@seminar = SeminarMain.find(signup.seminar_main_id)
unassigned_seminar_signup_ids = @seminar.seminar_signup_ids.map{|s| s.to_s}
@seminar.seminar_reviews.each do |sr|
unassigned_seminar_signup_ids = unassigned_seminar_signup_ids - sr.all_seminar_signup_ids
end
@seminar.unassigned_seminar_signup_ids = unassigned_seminar_signup_ids
@seminar.save
redirect_to "#{params[:referer_url]}/?method=con_upload"
end

View File

@ -24,7 +24,18 @@ module Admin::SeminarsHelper
ann_page = pages.first if ann_page.nil?
request.protocol+(request.host_with_port+ann_page.url+'/'+seminar.to_param).gsub('//','/') rescue "/"
end
def can_see_seminar_signup(seminar)
if can_edit_or_delete?(seminar)
return true
elsif (seminar.organizer_id == current_user.member_profile_id rescue false)
return true
else
return seminar.reviewer_ids.to_a.include?(current_user.member_profile_id.to_s)
end
end
def admin_for_seminar(seminar)
return can_edit_or_delete?(seminar) || (seminar.organizer_id == current_user.member_profile_id rescue false)
end
def page_for_seminar_url
page = Pag.where(:module => 'seminar').first
return request.protocol+(request.host_with_port+"/#{I18n.locale}#{page.url}").gsub('//','/') rescue "/"

View File

@ -28,9 +28,13 @@ class SeminarMain
field :create_user_id
field :update_user_id
field :reviewer_ids
field :reviewer_show_ids
field :unassigned_seminar_signup_ids
field :review_start_date, :type => Date
field :review_end_date, :type => Date
belongs_to :seminar_item
belongs_to :organizer , :class_name=>"MemberProfile", :foreign_key => :organizer_id
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
@ -53,6 +57,85 @@ class SeminarMain
accepts_nested_attributes_for :seminar_submission_field_sets, :allow_destroy => true
accepts_nested_attributes_for :seminar_email_sets, :allow_destroy => true
accepts_nested_attributes_for :seminar_signup_field_customs, :allow_destroy => true
before_save do
module_app_key = "seminar"
add_module_app_member_ids = []
remove_module_app_member_ids = []
if self.reviewer_ids_changed?
new_reviewer_ids = self.reviewer_ids.to_a - self.reviewer_ids_was.to_a
remove_reviewer_ids = self.reviewer_ids_was.to_a - self.reviewer_ids.to_a
new_reviewer_ids.each do |reviewer_id|
SeminarReview.create(:reviewer_id=>reviewer_id,:seminar_main=>self)
add_module_app_member_ids << reviewer_id
end
remove_reviewer_ids.each do |reviewer_id|
SeminarReview.where(:reviewer_id=>reviewer_id,:seminar_main=>self).destroy
remove_module_app_member_ids << reviewer_id
end
unassigned_seminar_signup_ids = self.seminar_signup_ids.map{|s| s.to_s}
seminar_reviews = self.seminar_reviews
seminar_reviews.each do |sr|
unassigned_seminar_signup_ids = unassigned_seminar_signup_ids - sr.all_seminar_signup_ids
end
self.unassigned_seminar_signup_ids = unassigned_seminar_signup_ids
end
if self.organizer_id_changed?
if self.organizer_id_was.present?
remove_module_app_member_ids << self.organizer_id_was
end
if self.organizer_id.present?
add_module_app_member_ids << self.organizer_id
end
end
remove_module_app_member_ids.delete(self.organizer_id)
self.reviewer_ids.each{|r| remove_module_app_member_ids.delete(r)}
remove_module_app_member_ids.each do |m_id|
user = User.where(:member_profile_id=>m_id).first
begin
user.extra_link_module_app_keys.delete(module_app_key)
user.save
rescue
next
end
end
add_module_app_member_ids.each do |m_id|
user = User.where(:member_profile_id=>m_id).first
begin
user.extra_link_module_app_keys << module_app_key
user.save
rescue
next
end
end
end
before_create do
self.unassigned_seminar_signup_ids = []
end
after_initialize do
unless self.new_record?
save_flag = false
seminar_reviews = self.seminar_reviews
if seminar_reviews.present?
if self["reviewer_ids"].nil?
self["reviewer_ids"] = seminar_reviews.pluck(:reviewer_id).flatten.select{|s| !s.nil?}.to_a
save_flag = true
end
if seminar_reviews.count != 0 && self.review_start_date.nil? && self.review_end_date.nil?
seminar_review = seminar_reviews.first
self.review_start_date = seminar_review.review_start_date rescue nil
self.review_end_date = seminar_review.review_end_date rescue nil
unless (self.review_start_date.nil? && self.review_end_date.nil?)
save_flag = true
end
end
end
if self.unassigned_seminar_signup_ids.nil?
self.unassigned_seminar_signup_ids = self.seminar_signup_ids.map{|s| s.to_s}
save_flag = true
end
self.save if save_flag
end
end
def self.time_range(date1 = null, date2 = null)
if !date1.blank?

View File

@ -5,8 +5,53 @@ class SeminarReview
include Mongoid::Document
include Mongoid::Timestamps
field :review_start_date, :type => Date, :default => Time.now
field :review_end_date, :type => Date, :default => Time.now
field :review_start_date, :type => Date, :default => Time.now #Already move to seminar_main
field :review_end_date, :type => Date, :default => Time.now #Already move to seminar_main
field :reviewer_id
field :seminar_signup_ids, :type => Array, :default => []
field :remove_seminar_signup_ids, :type => Array, :default => []
field :default_seminar_signup_ids, :type => Array, :default => []
field :default_topics, :type => Array, :default => []
field :default_topics_values, :type => Array, :default => []
belongs_to :seminar_main
after_initialize do
unless self.new_record?
if (self.reviewer_id.class == Array rescue false)
reviewer_ids = self.reviewer_id[1..-1]
reviewer_ids.each do |reviewer_id|
self.class.create(:reviewer_id=>reviewer_id,:seminar_main=>self.seminar_main)
end
self.reviewer_id = self.reviewer_id.first
self.save
end
end
end
before_save do
default_seminar_signup_ids = []
self.default_topics.each_with_index do |topic,i|
fn,id = (topic.split(".") rescue [])
next if fn.nil?
if fn == "seminar_signup_fields"
default_seminar_signup_ids += SeminarSignupValue.where(:seminar_signup_field_id=>id,:val.in=>self.default_topics_values[i].to_a).pluck(:seminar_signup_id)
elsif "seminar_submission_fields"
seminar_signup_contribute_ids = SeminarSubmissionValue.where(:seminar_submission_field_id=>id,:val.in=>self.default_topics_values[i].to_a).pluck(:seminar_signup_contribute)
default_seminar_signup_ids += SeminarSignupContribute.where(:id.in=>seminar_signup_contribute_ids).pluck(:seminar_signup_id)
end
end
default_seminar_signup_ids.uniq!
default_seminar_signup_ids = default_seminar_signup_ids.map{|s| s.to_s}
self.default_seminar_signup_ids = default_seminar_signup_ids
end
def review
MemberProfile.find(self.reviewer_id) rescue nil
end
def all_seminar_signup_ids
seminar_signup_ids - remove_seminar_signup_ids + default_seminar_signup_ids
end
def append_default_signup_id(signup_id)
sid = signup_id.to_s
unless self.default_seminar_signup_ids.include?(sid)
self.default_seminar_signup_ids << sid
end
end
end

View File

@ -22,6 +22,21 @@ class SeminarSignup
accepts_nested_attributes_for :seminar_signup_values, allow_destroy: true
accepts_nested_attributes_for :seminar_signup_contributes, allow_destroy: true
after_destroy do
seminar_main = self.seminar_main
seminar_reviews = seminar_main.seminar_reviews
id = self.id.to_s
seminar_reviews.each do |sr|
if sr.all_seminar_signup_ids.include?(id)
sr.seminar_signup_ids.delete(id)
sr.remove_seminar_signup_ids.delete(id)
sr.default_seminar_signup_ids.delete(id)
sr.save
end
end
if seminar_main.unassigned_seminar_signup_ids.delete(id)
seminar_main.save
end
end
end

View File

@ -0,0 +1,7 @@
# encoding: utf-8
class SeminarSignupAdminSetting
include Mongoid::Document
include Mongoid::Timestamps
field :display_field , type: Array , default: []
field :seminar_main_id
end

View File

@ -46,25 +46,30 @@ class SeminarSignupValue
end
def get_field_value
if (self.seminar_signup_field.markup.eql?("text_field") || self.seminar_signup_field.markup.eql?("text_area"))
seminar_signup_field = self.seminar_signup_field
if (seminar_signup_field.markup.eql?("text_field") || seminar_signup_field.markup.eql?("text_area"))
if self.value.class == String
field_value = self.value
else
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
elsif (seminar_signup_field.markup.eql?("select") || seminar_signup_field.markup.eql?("radio_button"))
field_value = seminar_signup_field.markup_value["#{self.value}"][I18n.locale] rescue nil
elsif seminar_signup_field.markup.eql?("address")
field_value = rf[:address_key][I18n.locale].map{|k,v| v}.delete_if(&:blank?).join(', ')
elsif seminar_signup_field.markup.eql?("date")
case 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 seminar_signup_field.markup.eql?("checkbox")
field_value = self.value.map {|v| 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
@ -72,15 +77,15 @@ class SeminarSignupValue
if !field_value.blank?
{
"key" => self.seminar_signup_field.key,
"title" => self.seminar_signup_field.title,
"key" => seminar_signup_field.key,
"title" => 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,
"key" => seminar_signup_field.key,
"title" => seminar_signup_field.title,
"value" => "",
"val" => field_value = self.value
}
@ -88,29 +93,30 @@ class SeminarSignupValue
end
def get_value_by_locale(locale,add_more_index=nil)
case self.seminar_signup_field.markup
seminar_signup_field = self.seminar_signup_field
case 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
case seminar_signup_field.add_more
when true
if 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
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 = seminar_signup_field.self_defined_markup_options? ? 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
seminar_signup_field.locale ? self[locale.to_s] : self.value
when "date"
if self.seminar_signup_field.date_is_range?
if seminar_signup_field.date_is_range?
get_date_by_format(:from) + ' ~ ' + get_date_by_format(:to)
# self.value["from"] + ' ~ ' + self.value["to"]
else
@ -122,17 +128,17 @@ class SeminarSignupValue
self.value[locale.to_s]
when "radio_button"
markup_values = self.seminar_signup_field.markup_value
markup_values = seminar_signup_field.markup_value
markup_values[self.value][locale.to_s]
when "checkbox"
markup_values = self.seminar_signup_field.markup_value
markup_values = 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
seminar_signup_field.locale ? self[locale.to_s] : self.value
end
end
@ -174,18 +180,19 @@ def unset_all_lang_values
end
def data_proc
seminar_signup_field = self.seminar_signup_field
unless self[:temp_data].nil?
case self.seminar_signup_field.markup
case seminar_signup_field.markup
when "address"
self["val"] = self["temp_data"]
when 'text_field','text_area'
if self.seminar_signup_field.add_more
if seminar_signup_field.add_more
self["val"] = self["temp_data"]
else # if not add_more
if self.seminar_signup_field.can_muti_lang_input?
if 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])
end if(!seminar_signup_field.get_data[:cross_lang])
else
self["val"] = self[:temp_data]
end

View File

@ -45,25 +45,30 @@ class SeminarSubmissionValue
end
def get_field_value
if (self.seminar_submission_field.markup.eql?("text_field") || self.seminar_submission_field.markup.eql?("text_area"))
seminar_submission_field = self.seminar_submission_field
if (seminar_submission_field.markup.eql?("text_field") || seminar_submission_field.markup.eql?("text_area"))
if self.value.class == String
field_value = self.value
else
field_value = self.value[I18n.locale]
elsif (self.seminar_submission_field.markup.eql?("select") || self.seminar_submission_field.markup.eql?("radio_button"))
field_value = self.seminar_submission_field.markup_value["#{self.value}"][I18n.locale] rescue nil
elsif self.seminar_submission_field.markup.eql?("address")
field_value = rf[:address_key][I18n.locale].map{|k,v| v}.delete_if(&:blank?).join(', ')
elsif self.seminar_submission_field.markup.eql?("date")
case self.seminar_submission_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_submission_field.markup.eql?("checkbox")
field_value = self.value.map {|v| self.seminar_submission_field.markup_value["#{v}"][I18n.locale]}.join(', ') rescue nil
end
elsif (seminar_submission_field.markup.eql?("select") || seminar_submission_field.markup.eql?("radio_button"))
field_value = seminar_submission_field.markup_value["#{self.value}"][I18n.locale] rescue nil
elsif seminar_submission_field.markup.eql?("address")
field_value = rf[:address_key][I18n.locale].map{|k,v| v}.delete_if(&:blank?).join(', ')
elsif seminar_submission_field.markup.eql?("date")
case seminar_submission_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 seminar_submission_field.markup.eql?("checkbox")
field_value = self.value.map {|v| seminar_submission_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
@ -71,15 +76,15 @@ class SeminarSubmissionValue
if !field_value.blank?
{
"key" => self.seminar_submission_field.key,
"title" => self.seminar_submission_field.title,
"key" => seminar_submission_field.key,
"title" => seminar_submission_field.title,
"value" => field_value,
"val" => field_value = self.value
}
else
{
"key" => self.seminar_submission_field.key,
"title" => self.seminar_submission_field.title,
"key" => seminar_submission_field.key,
"title" => seminar_submission_field.title,
"value" => "",
"val" => field_value = self.value
}
@ -87,29 +92,30 @@ class SeminarSubmissionValue
end
def get_value_by_locale(locale,add_more_index=nil)
case self.seminar_submission_field.markup
seminar_submission_field = self.seminar_submission_field
case seminar_submission_field.markup
when "text_field"
case self.seminar_submission_field.add_more
when true
if self.seminar_submission_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_submission_field.locale ? self[locale.to_s] : self.value
case seminar_submission_field.add_more
when true
if seminar_submission_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
seminar_submission_field.locale ? self[locale.to_s] : self.value
end
when "select"
markup_values = self.seminar_submission_field.self_defined_markup_options? ? self.seminar_submission_field.markup_value : self.seminar_submission_field.markup_value
markup_values = seminar_submission_field.self_defined_markup_options? ? seminar_submission_field.markup_value : self.seminar_submission_field.markup_value
markup_values[self.value][locale.to_s] rescue 'NoData'
when "text_area"
self.seminar_submission_field.locale ? self[locale.to_s] : self.value
seminar_submission_field.locale ? self[locale.to_s] : self.value
when "date"
if self.seminar_submission_field.date_is_range?
if seminar_submission_field.date_is_range?
get_date_by_format(:from) + ' ~ ' + get_date_by_format(:to)
# self.value["from"] + ' ~ ' + self.value["to"]
else
@ -121,17 +127,17 @@ class SeminarSubmissionValue
self.value[locale.to_s]
when "radio_button"
markup_values = self.seminar_submission_field.markup_value
markup_values = seminar_submission_field.markup_value
markup_values[self.value][locale.to_s]
when "checkbox"
markup_values = self.seminar_submission_field.markup_value
markup_values = seminar_submission_field.markup_value
self.value.collect{|key| markup_values["#{key}"][I18n.locale]}.join(",")
when "date_durnation"
self.value
else
self.seminar_submission_field.locale ? self[locale.to_s] : self.value
seminar_submission_field.locale ? self[locale.to_s] : self.value
end
end
@ -167,22 +173,23 @@ class SeminarSubmissionValue
protected
def unset_all_lang_values
VALID_LOCALES.each{|t| self.unset t}
end
VALID_LOCALES.each{|t| self.unset t}
end
def data_proc
seminar_submission_field = self.seminar_submission_field
unless self[:temp_data].nil?
case self.seminar_submission_field.markup
case seminar_submission_field.markup
when "address"
self["val"] = self["temp_data"]
when 'text_field','text_area'
if self.seminar_submission_field.add_more
if seminar_submission_field.add_more
self["val"] = self["temp_data"]
else # if not add_more
if self.seminar_submission_field.can_muti_lang_input?
if seminar_submission_field.can_muti_lang_input?
self[:temp_data].each do |key,val|
self[key] = val
end if(!self.seminar_submission_field.get_data[:cross_lang])
end if(!seminar_submission_field.get_data[:cross_lang])
else
self["val"] = self[:temp_data]
end

View File

@ -0,0 +1,13 @@
class SeminarUser
include Mongoid::Document
include Mongoid::Timestamps
field :user_name
field :password
belongs_to :seminar_main
# belongs_to :user
# before_save do
# if self.new_record?
# self.user = User.find()
# end
# end
end

View File

@ -64,7 +64,12 @@
<%= f.datetime_picker :seminar_end_date, :no_label => true, :format=>"yyyy/MM/dd", :new_record => @seminar.new_record? %>
</div>
</div>
<div class="control-group">
<label class="control-label muted"><%= t('seminar.organizer') %></label>
<div class="controls">
<%= render partial: 'admin/member_selects/email_selection_box', locals: {field: 'seminar_main[organizer_id]', email_members:Array(f.object.organizer), index: "1", select_name: 'organizer_id'} %>
</div>
</div>
</div>
@ -131,30 +136,28 @@
</div>
<!-- Review Module -->
<div class="tab-pane fade in " id="review">
<%= f.fields_for :seminar_reviews,@review do |seminar_reviews_form| %>
<div class="control-group big-group">
<label class="control-label muted"><%= t("seminar.reviewer") %></label>
<div class="controls">
<% if !@member.nil? %>
<%= render partial: 'admin/member_selects/email_selection_box', locals: {field: 'seminar_main[seminar_reviews_attributes][0][reviewer_id][]', email_members:@member} %>
<%= render partial: 'admin/member_selects/email_selection_box', locals: {field: 'seminar_main[reviewer_ids][]', email_members:@member, index: "2", select_name: 'reviewer_ids'} %>
<% else %>
<%= render partial: 'admin/member_selects/email_selection_box', locals: {field: 'seminar_main[seminar_reviews_attributes][0][reviewer_id][]', email_members:[]} %>
<%= render partial: 'admin/member_selects/email_selection_box', locals: {field: 'seminar_main[reviewer_ids][]', email_members:[], index: "2", select_name: 'reviewer_ids'} %>
<% end %>
</div>
</div>
</div>
<div class="control-group">
<label class="control-label muted"><%= t('seminar.review_start_date') %></label>
<div class="controls">
<%= seminar_reviews_form.datetime_picker :review_start_date, :no_label => true, :format=>"yyyy/MM/dd", :new_record => @seminar.new_record? %>
<%= f.datetime_picker :review_start_date, :no_label => true, :format=>"yyyy/MM/dd", :new_record => @seminar.new_record? %>
</div>
</div>
<div class="control-group">
<label class="control-label muted"><%= t('seminar.review_end_date') %></label>
<div class="controls">
<%= seminar_reviews_form.datetime_picker :review_end_date, :no_label => true, :format=>"yyyy/MM/dd", :new_record => @seminar.new_record? %>
</div>
</div>
<% end %>
<div class="control-group">
<label class="control-label muted"><%= t('seminar.review_end_date') %></label>
<div class="controls">
<%= f.datetime_picker :review_end_date, :no_label => true, :format=>"yyyy/MM/dd", :new_record => @seminar.new_record? %>
</div>
</div>
</div>
<!-- Signup Set Module -->
<div class="tab-pane fade in " id="signup_set" style="padding: 1.2em;">

View File

@ -0,0 +1,119 @@
<% @field_names = [] %>
<% @field_name_translations = [] %>
<% default_hidden = [] %>
<% if @seminar.present? %>
<% if @seminar.seminar_signup_field_sets.count != 0 %>
<% @seminar.seminar_signup_field_sets.each do |field_set| %>
<% default_hidden << "seminar_signup_field_set.#{field_set.field_name}" if (field_set.hidden) %>
<% @field_names << "seminar_signup_field_set.#{field_set.field_name}" %>
<% @field_name_translations << field_set.name[I18n.locale] %>
<% end %>
<% else %>
<% ['seminar_signup.name','seminar_signup.tel','seminar.registration_status'].each do |th| %>
<% @field_names << "default.#{th}" %>
<% @field_name_translations << t(th) %>
<% end %>
<% end %>
<% if @seminar.seminar_signup_field_customs.count != 0 %>
<% @seminar.seminar_signup_field_customs.each do |field_set| %>
<% s = SeminarSignupField.where(id:field_set.seminar_signup_field_id).first %>
<% title = s.title rescue '' %>
<% next if title.blank? %>
<% next if s.key.blank? %>
<% default_hidden << "seminar_signup_field_custom.#{s.key}" if (field_set.hidden) %>
<% @field_names << "seminar_signup_field_custom.#{s.key}" %>
<% @field_name_translations << (title)%>
<% end %>
<% end %>
<% @seminar.seminar_signup_fields.each do |s| %>
<% default_hidden << "seminar_signup_fields.#{s.key}" %>
<% @field_names << "seminar_signup_fields.#{s.key}" %>
<% @field_name_translations << s.title %>
<% end %>
<% if @seminar.seminar_submission_field_sets.count != 0 %>
<% show1 = !(@seminar.seminar_submission_field_sets.select{|v| v.field_name=='title'}[0].hidden)
show2 = !(@seminar.seminar_submission_field_sets.select{|v| v.field_name=='file'}[0].hidden)
show3 = !(@seminar.seminar_submission_field_sets.select{|v| v.field_name=='description'}[0].hidden)
%>
<% else %>
<% show1 = true
show2 = true
show3 = true
%>
<% end %>
<% default_hidden << "seminar_signup_contributes.title" if !show1 %>
<% @field_names << 'seminar_signup_contributes.title' %>
<% @field_name_translations << t('seminar_signup.title') %>
<% default_hidden << "seminar_signup_contributes.file" if !show2 %>
<% @field_names << 'seminar_signup_contributes.file' %>
<% @field_name_translations << t('seminar_signup.file') %>
<% default_hidden << "seminar_signup_contributes.description" if !show3 %>
<% @field_names << 'seminar_signup_contributes.description' %>
<% @field_name_translations << t('seminar_signup.description') %>
<% @seminar.seminar_submission_fields.each do |s| %>
<% @field_names << "seminar_submission_fields.#{s.key}" %>
<% @field_name_translations << s.title %>
<% end %>
<% @display_field = @seminar_signup_admin_setting.display_field %>
<% if @display_field.blank?
@display_field = @field_names - default_hidden
end %>
<% else %>
<% @field_names = [] %>
<% @field_name_translations = [] %>
<% default_show = [] %>
<% seminar_signup_field_sets = SeminarSignupFieldSet.all.uniq{|s| s.field_name} %>
<% if seminar_signup_field_sets.count != 0 %>
<% seminar_signup_field_sets.each do |field_set| %>
<% default_show << "seminar_signup_field_set.#{field_set.field_name}" if !(field_set.hidden) %>
<% @field_names << "seminar_signup_field_set.#{field_set.field_name}" %>
<% @field_name_translations << field_set.name[I18n.locale] %>
<% end %>
<% else %>
<% ['seminar_signup.name','seminar_signup.tel','seminar.registration_status'].each do |th| %>
<% @field_names << "default.#{th}" %>
<% @field_name_translations << t(th) %>
<% end %>
<% end %>
<% seminar_signup_field_customs = SeminarSignupFieldCustom.all.map{|field_set| SeminarSignupField.where(id: field_set.seminar_signup_field_id).first}.select{|s| !s.nil?}.uniq{|s| s.key } %>
<% if seminar_signup_field_customs.count != 0 %>
<% seminar_signup_field_customs.each do |s| %>
<% title = s.title rescue '' %>
<% next if title.blank? %>
<% next if s.key.blank? %>
<% @field_names << "seminar_signup_field_custom.#{s.key}" %>
<% @field_name_translations << (title)%>
<% end %>
<% end %>
<% seminar_signup_fields = SeminarSignupField.all.uniq{|s| s.key} %>
<% seminar_signup_fields.each do |s| %>
<% @field_names << "seminar_signup_fields.#{s.key}" %>
<% @field_name_translations << s.title %>
<% end %>
<% show1 = true
show2 = true
show3 = true
%>
<% default_show << "seminar_signup_contributes.title" if show1 %>
<% @field_names << 'seminar_signup_contributes.title' %>
<% @field_name_translations << t('seminar_signup.title') %>
<% default_show << "seminar_signup_contributes.file" if show2 %>
<% @field_names << 'seminar_signup_contributes.file' %>
<% @field_name_translations << t('seminar_signup.file') %>
<% default_show << "seminar_signup_contributes.description" if show3 %>
<% @field_names << 'seminar_signup_contributes.description' %>
<% @field_name_translations << t('seminar_signup.description') %>
<% seminar_submission_fields = SeminarSignupField.all.uniq{|s| s.key} %>
<% seminar_submission_fields.each do |s| %>
<% @field_names << "seminar_submission_fields.#{s.key}" %>
<% @field_name_translations << s.title %>
<% end %>
<% @display_field = @seminar_signup_admin_setting.display_field %>
<% if @display_field.blank?
@display_field = default_show
end %>
<% end %>

View File

@ -22,11 +22,12 @@
<a href="<%= page_for_seminar(seminar) %>?method=show_data" target="_blank"><%= seminar.title %></a>
<div class="quick-edit">
<ul class="nav nav-pills">
<% if can_edit_or_delete?(seminar) %>
<% if admin_for_seminar(seminar) %>
<li><a href="/admin/seminars/<%=seminar.id.to_s%>/edit"><%= t(:edit) %></a></li>
<li><a href="<%= admin_seminar_item_contents_path(:seminar_main_id=>seminar.id.to_s) %>"><%= t('seminar.set_seminar_item_content') %></a></li>
<li><a href="/admin/seminars/<%=seminar.id.to_s%>/seminar_signup_field"><%= t('seminar.set_seminar_signup_field') %></a></li>
<li><a href="/admin/seminars/<%=seminar.id.to_s%>/seminar_submission_field"><%= t('seminar.set_seminar_submission_field') %></a></li>
<li><a href="<%=reviewer_setting_admin_seminar_path(seminar.id)%>"><%= t('seminar.reviewer_setting') %></a></li>
<li><a href="#" class="delete text-error" rel="/admin/seminars/<%=seminar.id.to_s%>"><%= t(:delete_) %></a></li>
<% end %>
</ul>
@ -34,8 +35,19 @@
</td>
<td><%= SeminarMain.time_range(seminar.seminar_start_date, seminar.seminar_end_date) %></td>
<td><%= SeminarMain.time_range(seminar.signup_start_date, seminar.signup_end_date) %></td>
<td><a href="/admin/seminars/<%=seminar.id.to_s%>/seminar_signup"><%= seminar.seminar_signups.count %></a></td>
<td><a href="/admin/seminars/<%=seminar.id.to_s%>/export?format=xlsx" target="_blank"><%= t('seminar.export') %></a></td>
<td><a href="/admin/seminars/<%=seminar.id.to_s%>/seminar_signup">
<% @seminar_review = seminar.seminar_reviews.where(:reviewer_id => current_user.member_profile_id.to_s).first %>
<% if @seminar_review.present? && !@can_edit %>
<%= @seminar_review.all_seminar_signup_ids.count %>
<% else %>
<%= seminar.seminar_signups.count %>
<% end %>
</a></td>
<td>
<% if can_see_seminar_signup(seminar) %>
<a href="/admin/seminars/<%=seminar.id.to_s%>/export?format=xlsx" target="_blank"><%= t('seminar.export') %></a>
<% end %>
</td>
</tr>
<% end %>
</tbody>

View File

@ -0,0 +1,225 @@
<h3 class="pull-left"><%= @seminar.title %></h3>
<div style="clear: both;"></div>
<% org_seminar_signups = @seminar_signups %>
<div style="float: left;width: 50%;">
<h4><%= t("seminar.reviewer") %></h4>
<% reviewer_show_ids = @seminar.reviewer_show_ids %>
<% if reviewer_show_ids.nil?
reviewer_show_ids = @seminar.reviewer_ids[0..1]
@seminar.update(:reviewer_show_ids=>reviewer_show_ids)
end
%>
<% count = 0 %>
<% reviewer_show_ids.each do |reviewer_id| %>
<% seminar_review = @seminar.seminar_reviews.where(:reviewer_id => reviewer_id.to_s).first %>
<% next if seminar_review.nil? %>
<% count += 1 %>
<div class="reviewer_block" data-id="<%=seminar_review.id.to_s%>" data-count="<%=count%>">
<h5><%= MemberProfile.find(reviewer_id).name rescue "" %></h5>
<span class="zoom_out_btn">-</span>
<% @seminar_signups = SeminarSignup.where(:id.in=>seminar_review.all_seminar_signup_ids) %>
<% @seminar_signups = @seminar_signups.page(params["page_no#{count}"]).per(5) %>
<% @seminar_signups = @seminar_signups.page(0) if @seminar_signups.to_a.count == 0 %>
<%= render :partial => "seminar_signup_render_table",:locals=>{:@seminar_signups=>@seminar_signups,:@drag => true,:@include_blank=>true,:@reviewer_id=>seminar_review.id.to_s} %>
<%
pagination_html = content_tag :div, class: "bottomnav clearfix", style: "position: static;" do
content_tag :div, paginate(@seminar_signups), class: "pagination pagination-centered"
end
%>
<%= pagination_html.gsub(/page_no#{count}=\d*/,"").gsub('&&','&').gsub(/page=(\d*)/m){|ff| ff.gsub("page=#{$1}","page=#{params[:page]}&page_no#{count}=#{$1}")}.html_safe %>
</div>
<% end %>
<% if count != 2 && @seminar.seminar_reviews.count >= 2 %>
<% (0...(2-count)).each do |i| %>
<div class="blank_block reviewer_block">
<i class="fa fa-plus-circle add_btn"></i>
</div>
<% end %>
<% end %>
</div>
<% @seminar_signups = org_seminar_signups
@include_blank = false
@reviewer_id = nil
%>
<div style="float: right;width: 50%;" data-count="<%=count+=1%>">
<div id="main-table" style="overflow: scroll;">
<%= render :partial => "seminar_signup_render_table" %>
</div>
<%=
content_tag :div, class: "bottomnav clearfix", style: "position: static;" do
content_tag :div, paginate(@seminar_signups), class: "pagination pagination-centered"
end
%>
</div>
<% unless request.xhr? %>
<div id='dialog-confirm' title="<%= t("seminar.select_reviewer") %>" style="display: none;">
<div style="clear:both;"></div>
<div id="info_texts">
</div>
</div>
<div class="bottomnav clearfix">
<div class="action pull-right">
<%= link_to content_tag(:i, nil, :class => 'icon-cog icon-white') + t("seminar.field_display_setting"), seminar_signup_admin_setting_admin_seminar_path(params[:id]), :class => 'btn btn-primary' %>
</div>
</div>
<script type="text/javascript">
function generate_pagination(reviewer_id,index=1,start=1,end=1,active=1){
var pagination = $('<div class="pagination pagination-centered">');
pagination.append('<div class="pagination"><ul></ul></div>');
var href = "<%=get_reviewer_block_admin_seminar_path(@seminar.id)%>?reviewer_id="+reviewer_id+"&page_no"+index+"=new_page_no";
if(active != start){
pagination.find("ul").append("<li class=\"first\"><a href=\""+href.replace('new_page_no',1)+"\">« First</a></li>");
pagination.find("ul").append("<li class=\"prev\"><a href=\""+href.replace('new_page_no',active-1)+"\"> Prev</a></li>");
}
for(var i=start;i<end;i++){
if(i == active){
pagination.find("ul").append("<li class=\"page active\"><a href=\""+href.replace('new_page_no',i)+"\">"+i+"</a></li>");
}else{
pagination.find("ul").append("<li class=\"page\"><a href=\""+href.replace('new_page_no',i)+"\">"+i+"</a></li>");
}
}
if(active != end && end != 1){
pagination.find("ul").append("<li class=\"next\"><a href=\""+href.replace('new_page_no',active+1)+"\">Next </a></li>");
pagination.find("ul").append("<li class=\"last\"><a href=\""+href.replace('new_page_no',end)+"\">Last »</a></li>");
}
return pagination.prop("outerHTML");
}
function adjust_height(){
var bottom_offset = $(".bottomnav").eq(1).offset().top;
var top_offset = [$('ul.pull-right').offset().top,$('h3.pull-left').offset().top];
var top_height = [$('ul.pull-right').height(),$("h3.pull-left").height()];
var top_all_offset_bottom = top_offset.map(function(d,i){return d+top_height[i]});
top_all_offset_bottom = Math.max.apply(null, top_all_offset_bottom);
var bottom_height = $(".bottomnav")[0].offsetHeight;
var block_height;// = bottom_offset - top_all_offset_bottom - bottom_height - 100;
block_height = $(window).height() - top_all_offset_bottom - bottom_height - 100;
$("#main-table").height(block_height);
$(".reviewer_block").height(block_height / 2);
}
function a_tag_xhr_request(ele){
var href = $(ele).attr("href");
var div_block = $(ele).parents(".bottomnav").parent();
var index = div_block.data("count");
$.get(href).done(function(data){
var $d = $(data);
div_block.html($d.find('[data-count='+index+']').html());
$(".pagination a").attr("onclick","a_tag_xhr_request(this);return false;");
adjust_height();
window.history.pushState(data,null,href);
})
}
function init_func(){
adjust_height();
$(".zoom_out_btn").off("click").on("click",function(){
var parent = $(this).parent();
var id = parent.data("id");
$.post("<%=admin_seminar_update_seminar_review_path%>",{id: id,mode: "hide"}).done(function(data){
console.log(data);
parent.css("display","none");
parent.before('<div class="blank_block reviewer_block">'+
'<i class="fa fa-plus-circle add_btn"></i>'+
'</div>');
init_func();
})
})
$(".blank_block .add_btn").off("click").on("click",function(){
var ele = $(this).parent();
$.get("<%=get_hide_reviewer_admin_seminar_path(@seminar.id)%>").done(function(data){
$("#info_texts").html(data);
$( "#dialog-confirm" ).dialog({
resizable: true,
minHeight: 300,
maxHeight: 400,
modal: true,
width: '80%',
close: function(){$( this ).dialog( "close" );},
open: function(){
$(".selected_item").click(function(){
var reviewer_id = $(this).data("id");
$.get("<%=get_reviewer_block_admin_seminar_path(@seminar.id)%>",{reviewer_id: reviewer_id}).done(function(data){
ele.prop("outerHTML",data);
init_func();
$( "#dialog-confirm" ).dialog( "close" );
})
})
}
})
})
})
$(".pagination a").attr("onclick","a_tag_xhr_request(this);return false;")
$( ".table tbody" ).sortable({
revert: true,
handle: ".brand",
connectWith: ".table tbody",
update: function(event, ui) {
var target = $(event.target);
var mode = "";
var id = target.data("id");
var signup_id = ui.item.data("id");
if(ui.item.parent().data("id") == id){
mode = "append";
}else{
mode = "remove";
}
if(target.find("tr").not(".blank_tr").length == 0){
target.find(".blank_tr").css("display","");
}else{
target.find(".blank_tr").css("display","none");
}
if(id != undefined){
$.post("<%=admin_seminar_update_seminar_review_path%>",{id: id,mode: mode,signup_id: signup_id}).done(function(data){
console.log(data);
})
}
}
});
}
$(document).ready(function(){
init_func();
})
$(window).resize(function(){
adjust_height();
})
</script>
<style type="text/css">
.icons-list-2 {
cursor: all-scroll;
}
.reviewer_block{
overflow: scroll;
border: 0.2em solid black;
position: relative;
}
.zoom_out_btn{
width: 1em;
height: 1em;
position: absolute;
top: 0;
right: 0;
background: #454545;
color: #FFFFFF;
font-size: 2em;
text-align: center;
cursor: pointer;
}
.blank_block .add_btn {
position: absolute;
top: 50%;
left: 50%;
font-size: 3em;
width: 20px;
height: 20px;
margin: -10px 0 0 -10px;
display: inline-block;
font-family: FontAwesome;
font-style: normal;
font-weight: normal;
line-height: 1;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
cursor: pointer;
}
</style>
<% end %>

View File

@ -0,0 +1,122 @@
<table class="table main-list">
<thead>
<tr>
<% render :partial => "get_display_fields" %>
<% if @seminar.nil? %>
<th><%= t('seminar.title') %></th>
<% end %>
<% if @drag%>
<th></th>
<% end %>
<% @field_name_translations.each_with_index do |trans,i|%>
<% next unless @display_field.include?(@field_names[i]) %>
<th class="span2" id="<%=@field_names[i]%>"><%= trans %></th>
<% end %>
</tr>
</thead>
<tbody class="sort-holder" <%=@reviewer_id.nil? ? "" : "data-id=#{@reviewer_id}" %>>
<% @seminar_signups.each do |seminar_signup| %>
<% len = seminar_signup.seminar_signup_contributes.count %>
<% rowspan = "rowspan=#{len==0? 1 : len}" %>
<% vals = [] %>
<tr data-id="<%=seminar_signup.id.to_s%>">
<% if @drag%>
<td <%=rowspan%>><span class="brand"><i class="icons-list-2"></i></span></td>
<% end %>
<% vals << seminar_signup.seminar_main.title if @seminar.nil? %>
<% @display_field.each_with_index do |fn,i|%>
<% names = fn.split(".") %>
<% val = "" %>
<% if names[0] == "seminar_signup_field_set" %>
<% if names[1] == "name" %>
<% val = seminar_signup.name
val += "<div class=\"quick-edit\">
<ul class=\"nav nav-pills\">"
if can_edit_or_delete?(seminar_signup)
val += "<li><a href=\"/admin/seminar_signups/#{seminar_signup.id}/edit\">#{t(:edit)}</a></li>
<li><a href=\"#{admin_seminar_signup_path(seminar_signup.id)}\" class=\"delete text-error\" rel=\"nofollow\" data-method=\"delete\" data-confirm=\"Are you sure?\">#{t(:delete_)}</a></li>"
end
val += "</ul>
</div>"
%>
<% elsif names[1] == 'status' %>
<% val = t("seminar.registration_status_#{seminar_signup.status}") if !seminar_signup.status.blank? %>
<% elsif names[1] != 'recaptcha' %>
<% val = seminar_signup.send("#{names[1]}") %>
<% end %>
<% elsif names[0] == "default" %>
<% if names[2] == "name" %>
<% val = seminar_signup.name
val += "<div class=\"quick-edit\">
<ul class=\"nav nav-pills\">"
if can_edit_or_delete?(seminar_signup)
val += "<li><a href=\"/admin/seminar_signups/#{seminar_signup.id}/edit\">#{t(:edit)}</a></li>
<li><a href=\"#{admin_seminar_signup_path(seminar_signup.id)}\" class=\"delete text-error\" rel=\"nofollow\" data-method=\"delete\" data-confirm=\"Are you sure?\">#{t(:delete_)}</a></li>"
end
val += "</ul>
</div>"
%>
<% elsif names[2] == "tel" %>
<% val = seminar_signup.tel %>
<% elsif names[2] == "registration_status" %>
<% val = t("seminar.registration_status_#{seminar_signup.status}") if !seminar_signup.status.blank? %>
<% end %>
<% elsif names[0] == "seminar_signup_field_custom" || names[0] == "seminar_signup_fields" %>
<% val = seminar_signup.seminar_signup_values.where(:key=>names[1]).first.get_value_by_locale(I18n.locale) rescue "" %>
<% elsif names[0] == "seminar_signup_contributes" %>
<% if names[1] == "file" %>
<% val = seminar_signup.seminar_signup_contributes.to_a %>
<% else %>
<% val = seminar_signup.seminar_signup_contributes.collect{|s| s.send(names[1])} %>
<% end %>
<% elsif names[0] == "seminar_submission_fields" %>
<% val = seminar_signup.seminar_signup_contributes.collect{|s| (s.seminar_submission_values.where(:key=>names[1]).first.get_value_by_locale(I18n.locale) rescue "")} %>
<% end %>
<% vals << val %>
<% end %>
<% count = 0 %>
<% indices = [] %>
<% vals.each_with_index do |val,i| %>
<% if val.class == Array %>
<% count = val.count - 1 %>
<% indices << i%>
<td>
<% if val[0].class == SeminarSignupContribute #File %>
<% seminar_signup_contribute = val[0] %>
<%= link_to (seminar_signup_contribute.title.blank? ? File.basename(seminar_signup_contribute.file.path) : seminar_signup_contribute.title) , seminar_signup_contribute.file.url, {:target => '_blank', :title => Nokogiri::HTML(seminar_signup_contribute.description).text} if seminar_signup_contribute.file.file %>
<% else %>
<%= val[0].html_safe.to_s rescue "" %>
<% end %>
</td>
<% else %>
<td <%= rowspan %>><%= val.to_s.html_safe %></td>
<% end %>
<% end %>
<% (0...count).each do |i|%>
<tr>
<% indices.each do |index| %>
<td>
<% if vals[index][i].class == SeminarSignupContribute #File %>
<% seminar_signup_contribute = vals[index][i] %>
<%= link_to (seminar_signup_contribute.title.blank? ? File.basename(seminar_signup_contribute.file.path) : seminar_signup_contribute.title) , seminar_signup_contribute.file.url, {:target => '_blank', :title => Nokogiri::HTML(seminar_signup_contribute.description).text} if seminar_signup_contribute.file.file %>
<% else %>
<%= vals[index][i].html_safe.to_s rescue "" %>
<% end %>
</td>
<% end %>
</tr>
<% end %>
</tr>
<% end %>
<% if @include_blank && @seminar_signups.count == 0 %>
<tr class="blank_tr">
<% if @drag %>
<td rowspan="3"></td>
<% end %>
<% (0...@display_field.count).each do |f| %>
<td rowspan="3"></td>
<% end %>
</tr>
<% end %>
</tbody>
</table>

View File

@ -0,0 +1,22 @@
<form id="module-search-form">
<div class="sc-field">
<input name="type" value="<%=params[:type]%>" type="hidden">
<input id="filter-input" class="search-query input-medium" type="text" name="search" value="<%= params[:search] %>" placeholder="搜尋">
</div>
</form>
<h4><%= @seminar.title %></h4>
<%= render :partial => "seminar_signup_render_table" %>
<div class="bottomnav clearfix">
<div class="pagination pagination-centered"><%= (paginate(@seminar_signups) rescue nil) %></div>
<% if @can_edit %>
<div class="action pull-right">
<%= link_to content_tag(:i, nil, :class => 'icon-cog icon-white') + t("seminar.field_display_setting"), seminar_signup_admin_setting_admin_seminar_path(params[:id]), :class => 'btn btn-primary' %>
</div>
<% end %>
</div>
<%= render 'layouts/delete_modal', delete_options: @delete_options %>

View File

@ -0,0 +1,33 @@
<% content_for :page_specific_css do %>
<%= stylesheet_link_tag "lib/main-forms" %>
<%= stylesheet_link_tag "lib/fileupload" %>
<%= stylesheet_link_tag "lib/main-list" %>
<% end %>
<% content_for :page_specific_javascript do %>
<%= javascript_include_tag "lib/bootstrap-fileupload" %>
<%= javascript_include_tag "lib/bootstrap-datetimepicker" %>
<%= javascript_include_tag "lib/datetimepicker/datetimepicker.js" %>
<%= javascript_include_tag "lib/file-type" %>
<%= javascript_include_tag "lib/module-area" %>
<% end %>
<fieldset>
<legend>查詢報名人</legend>
<form method="get" id="searchform" class="form-horizontal">
<div class="control-group">
<label for="name" class="control-label">報名人姓名</label>
<div class="controls">
<input name="name" type="text" id="name" value="<%=params[:name]%>" size="30">
<input type="submit" id="searchsubmit" value="<%=t(:search_)%>">
</div>
</div>
</form>
</fieldset>
<%= render :partial => "seminar_signup_render_table" %>
<% if @can_edit %>
<div class="bottomnav clearfix">
<div class="pagination pagination-centered"><%= (paginate(@seminar_signups) rescue nil) %></div>
<div class="action pull-right">
<%= link_to content_tag(:i, nil, :class => 'icon-cog icon-white') + t("seminar.field_display_setting"), seminar_signup_admin_setting_admin_seminar_path("enquiry_for_applicants"), :class => 'btn btn-primary' %>
</div>
</div>
<% end %>

View File

@ -34,7 +34,7 @@ wb.add_worksheet(name: (@seminar.title.to_s[0..27]+'...')) do |sheet|
sheet.add_row row
@seminar.seminar_signups.each do |signup|
@seminar_signups.each do |signup|
row2 = []

View File

@ -0,0 +1,25 @@
<ul class="checkbox-card">
<% @hide_reviewers.each do |member|%>
<% member_name = member.name %>
<% member_id = member.id.to_s %>
<% member_pic_url = ((member.avatar.file.present? rescue false) ? member.avatar.url : "/assets/member-pic.png") %>
<li class="filter-item selected_item selected_member check-item" data-id="<%=member_id%>" style="margin: 0 10px 10px 0;">
<label style="height: 100%;padding: 0;">
<img style="max-height: 100%;" alt="Member pic" class="member-pic" src="<%=member_pic_url%>">
<span class="user-name" style="float: right;width: 95px;padding-top: 8px;font-size: 1em;position: absolute;padding-left: 0.5em;"><%=member_name%></span>
</label>
<input name="member_ids[]" type="hidden" value="<%=member_id%>">
</li>
<% end %>
</ul>
<style type="text/css">
.checkbox-card li:hover label span, .checkbox-card li:hover label span.user-name{
color: #363636;
}
.checkbox-card li:hover{
background-color: #cccccc;
}
.selected_item{
cursor: pointer;
}
</style>

View File

@ -0,0 +1,14 @@
<% seminar_review = @seminar.seminar_reviews.where(:reviewer_id => @reviewer_id.to_s).first %>
<% unless seminar_review.nil? %>
<div class="reviewer_block" data-id="<%=seminar_review.id.to_s%>">
<h5><%= MemberProfile.find(@reviewer_id).name rescue "" %></h5>
<span class="zoom_out_btn">-</span>
<% @seminar_signups = SeminarSignup.where(:id.in=>seminar_review.all_seminar_signup_ids) %>
<%= render :partial => "seminar_signup_render_table",:locals=>{:@seminar_signups=>@seminar_signups.page(params[:page]).per(5),:@drag => true,:@include_blank=>true,:@reviewer_id=>seminar_review.id.to_s} %>
<%=
content_tag :div, class: "bottomnav clearfix", style: "position: static;" do
content_tag :div, paginate(@seminar_signups), class: "pagination pagination-centered"
end
%>
</div>
<% end %>

View File

@ -0,0 +1,99 @@
<% select_keys = [] %>
<% fields_values = @fields_values.map{|i,fields_values|
"<div class=\"fields_value_block\">" + fields_values.map.with_index{|v,ii| "<label class=\"checkbox-inline\">" + check_box_tag("seminar_main[seminar_reviews_attributes][new_index][default_topics_values][new_value_index][]",ii,false,{:id=>nil}) + "#{v}</label>" }.join("") +
"</div>"
} %>
<%= form_for @seminar, url: update_reviewer_setting_admin_seminar_path(@seminar.id), html: {class: "form-horizontal main-forms"} do |f| %>
<fieldset>
<% count = 0 %>
<% @seminar_reviews.each_with_index do |seminar_review,i| %>
<% next if seminar_review.review.nil? %>
<%= f.fields_for :seminar_reviews,seminar_review do |f| %>
<h4><%= seminar_review.review.name rescue "" %></h4>
<div class="control-group">
<label class="control-label muted"><%= t('seminar.assign_fields') %></label>
<div class="controls">
<% seminar_review.default_topics.each_with_index do |v,ii| %>
<div class="border-block">
<span class="remove_btn">X</span>
<%= select_tag("seminar_main[seminar_reviews_attributes][#{count}][default_topics][]" , options_for_select(@fields_translations.zip(@fields),v),{:class=>"select_field_types","data-index"=>count}) %>
<% select_index = @fields.index(v) %>
<% checked_values = seminar_review.default_topics_values[ii] %>
<div class="fields_value_block">
<% @fields_values[select_index].each_with_index do |v,iii| %>
<% checked = checked_values.include?(iii.to_s) rescue false %>
<label class="checkbox-inline">
<%= check_box_tag("seminar_main[seminar_reviews_attributes][#{count}][default_topics_values][#{ii}][]",iii,checked,{:id=>nil}) + v %>
</label>
<% end if select_index.present? %>
</div>
</div>
<% end %>
<% select_keys << select_tag("seminar_main[seminar_reviews_attributes][#{count}][default_topics][]" , options_for_select(@fields_translations.zip(@fields)),{:class=>"select_field_types","data-index"=>count}) %>
<button class="btn btn-primary add_assign_fields" type="button" data-index=<%=count%>><%=t('seminar.add_assign_fields')%></button>
</div>
</div>
<% end %>
<% count += 1 %>
<% end %>
<div class="form-actions">
<%= f.submit t('submit'), class: 'btn btn-primary' %>
<input type="hidden" name="referer_url" value="<%= get_referer_url %>">
<%= link_to t('cancel'), admin_seminars_path, :class=>"btn" %>
</div>
</fieldset>
<% end %>
<script type="text/javascript">
function init_reviews(){
$(".select_field_types").off("change").on("change",function(){
var selectedIndex = $(this).prop("selectedIndex");
var index = $(this).data("index");
var length = $(this).parent().parent().find(".border-block").length;
$(this).siblings(".fields_value_block").html(fields_values[selectedIndex].replaceAll("new_index",index).replaceAll("new_value_index",length))
})
$(".remove_btn").off("click").on("click",function(){
if(window.confirm("<%=t('seminar.are_you_want_to_remove')%>"))
$(this).parent().remove();
})
}
$(document).ready(function(){
select_keys = <%= select_keys.to_s.html_safe %>;
fields_values = <%= fields_values.to_s.html_safe %>;
$(".add_assign_fields").click(function(){
var index = $(this).data("index");
var div_block = $("<div class=\"border-block\"><span class=\"remove_btn\">X</span></div>");
div_block.append(select_keys[index]);
var length = $(this).siblings(".border-block").length;
div_block.append(fields_values[0].replaceAll("new_index",index).replaceAll("new_value_index",length));
$(this).before(div_block);
init_reviews();
})
init_reviews();
})
</script>
<style type="text/css">
.checkbox-inline{
display: inline-block;
position: relative;
padding-top: 0.4375em;
margin-top: 0;
margin-bottom: 0;
padding-left: 1.25em;
}
.border-block{
position: relative;
border: 0.2em solid;
padding: 1.3em 0 1.3em 1.3em;
}
.remove_btn{
position: absolute;
top: 0;
left: 0;
color: red;
background-color: #333333;
width: 1.3em;
text-align: center;
font-weight: bold;
cursor: pointer;
}
</style>

View File

@ -1,215 +1,21 @@
<span id="index_table">
<span id="index_table" style="display: inline-block;">
<script>
if(document.querySelectorAll("#orbit-bar").length==0) location.reload();
</script>
<form id="module-search-form">
<div class="sc-field">
<input id="filter-input" class="search-query input-medium" type="text" name="search" value="<%= params[:search] %>" placeholder="搜尋">
</div>
</form>
<h4><%= @seminar.title %></h4>
<table class="table main-list">
<thead>
<tr class="sort-header">
<% if @seminar.seminar_signup_field_sets.count != 0 %>
<% @seminar.seminar_signup_field_sets.each do |field_set| %>
<% if !(field_set.hidden) %>
<th class='span2'><%= field_set.name[I18n.locale] %></th>
<% end %>
<% end %>
<% else %>
<th class='span2'><%= t('seminar_signup.name')%></th>
<th class='span2'><%= t('seminar_signup.tel')%></th>
<th class='span2'><%= t('seminar.registration_status')%></th>
<% end %>
<% if @seminar.seminar_signup_field_customs.count != 0 %>
<% @seminar.seminar_signup_field_customs.each do |field_set| %>
<% if !(field_set.hidden) %>
<th class='span2'><%= SeminarSignupField.where(id:field_set.seminar_signup_field_id).first.title rescue '' %></th>
<% end %>
<% end %>
<% end %>
<% if @seminar.seminar_submission_field_sets.count != 0 %>
<% show1 = !(@seminar.seminar_submission_field_sets.select{|v| v.field_name=='title'}[0].hidden)
show2 = !(@seminar.seminar_submission_field_sets.select{|v| v.field_name=='file'}[0].hidden)
show3 = !(@seminar.seminar_submission_field_sets.select{|v| v.field_name=='description'}[0].hidden)
%>
<% else %>
<% show1 = true
show2 = true
show3 = true
%>
<% end %>
<% if show1 %>
<th class='span2'><%= t('seminar_signup.title')%></th>
<% end %>
<% if show2 %>
<th class='span2'><%= t('seminar_signup.file')%></th>
<% end %>
<% if show3 %>
<th class='span2'><%= t('seminar_signup.description')%></th>
<% end %>
<% @seminar.seminar_submission_fields.asc(:_id).each do |submission_field| %>
<th class='span2'><%= submission_field.title %></th>
<% end %>
</tr>
</thead>
<tbody>
<% @seminar_signups.each do |seminar_signup| %>
<% len = seminar_signup.seminar_signup_contributes.count %>
<tr>
<% if @seminar.seminar_signup_field_sets.count != 0 %>
<% @seminar.seminar_signup_field_sets.each do |field_set| %>
<% if !(field_set.hidden) %>
<td rowspan="<%= len==0? 1 : len %>">
<% if field_set.field_name== 'name' %>
<%= seminar_signup.name %>
<div class="quick-edit">
<ul class="nav nav-pills">
<% if can_edit_or_delete?(seminar_signup) %>
<li><a href="/admin/seminar_signups/<%=seminar_signup.id.to_s%>/edit"><%= t(:edit) %></a></li>
<li><a href="#" class="delete text-error" rel="/admin/seminar_signups/<%=seminar_signup.id.to_s%>"><%= t(:delete_) %></a></li>
<% end %>
</ul>
</div>
<% elsif field_set.field_name== 'status' %>
<%= t("seminar.registration_status_#{seminar_signup.status}") if !seminar_signup.status.blank? %>
<% elsif field_set.field_name != 'recaptcha' %>
<%= seminar_signup.send("#{field_set.field_name}") %>
<% end %>
</td>
<% end %>
<% end %>
<% else %>
<td rowspan="<%= len==0? 1 : len %>">
<%= seminar_signup.name %>
<div class="quick-edit">
<ul class="nav nav-pills">
<% if can_edit_or_delete?(seminar_signup) %>
<li><a href="/admin/seminar_signups/<%=seminar_signup.id.to_s%>/edit"><%= t(:edit) %></a></li>
<li><a href="#" class="delete text-error" rel="/admin/seminar_signups/<%=seminar_signup.id.to_s%>"><%= t(:delete_) %></a></li>
<% end %>
</ul>
</div>
</td>
<td rowspan="<%= len==0? 1 : len %>"><%= seminar_signup.tel %></td>
<td rowspan="<%= len==0? 1 : len %>"><%= t("seminar.registration_status_#{seminar_signup.status}") if !seminar_signup.status.blank? %>
</td>
<% end %>
<% if @seminar.seminar_signup_field_customs.count != 0 %>
<% @seminar.seminar_signup_field_customs.each do |field_set| %>
<% if !(field_set.hidden) %>
<td rowspan="<%= len==0? 1 : len %>">
<% seminar_signup.seminar_signup_values.each do |seminar_signup_values| %>
<% if seminar_signup_values.seminar_signup_field_id == field_set.seminar_signup_field_id %>
<% if seminar_signup_values.value.class == String || seminar_signup_values.value.nil? %>
<%= seminar_signup_values.get_value_by_locale(I18n.locale,seminar_signup_values) %>
<% else %>
<% seminar_signup_values.value.each do |key,v| %>
<%= "#{I18n.t(key)}:#{seminar_signup_values.get_value_by_locale(key,seminar_signup_values)}" %>
<br>
<% end %>
<% end %>
<% end %>
<% end %>
</td>
<% end %>
<% end %>
<% end %>
<% count_set = 0 %>
<% if @seminar.seminar_submission_field_sets.count != 0 %>
<% show1 = !(@seminar.seminar_submission_field_sets.select{|v| v.field_name=='title'}[0].hidden)
show2 = !(@seminar.seminar_submission_field_sets.select{|v| v.field_name=='file'}[0].hidden)
show3 = !(@seminar.seminar_submission_field_sets.select{|v| v.field_name=='description'}[0].hidden)
%>
<% @seminar.seminar_submission_field_sets.each do |field_set| %>
<% if !(field_set.hidden) %>
<% count_set+=1 %>
<% end %>
<% end %>
<% else %>
<% show1 = true
show2 = true
show3 = true
%>
<% count_set = 2 %>
<% end %>
<% if len==0 %>
<%
count_field = @seminar.seminar_submission_fields.count
%>
<ul>
<% for i in 1..count_field+count_set %>
<td rowspan="1">
</td>
<% end %>
</ul>
</tr>
<% end %>
<ul>
<% seminar_signup.seminar_signup_contributes.collect do |seminar_signup_contribute| %>
<% if show1 %>
<td>
<li><%= seminar_signup_contribute.title.to_s %></li>
</td>
<% end %>
<% if show2 %>
<td>
<li>
<%= link_to (seminar_signup_contribute.title.blank? ? File.basename(seminar_signup_contribute.file.path) : seminar_signup_contribute.title) , seminar_signup_contribute.file.url, {:target => '_blank', :title => Nokogiri::HTML(seminar_signup_contribute.description).text} if seminar_signup_contribute.file.file %>
</li>
</td>
<% end %>
<% if show3 %>
<td>
<li><%= seminar_signup_contribute.description.to_s.html_safe %></li>
</td>
<% end %>
<%
count_value = seminar_signup_contribute.seminar_submission_values.count
count_field = @seminar.seminar_submission_fields.count
%>
<% if count_value == count_field %>
<% seminar_signup_contribute.seminar_submission_values.asc(:seminar_submission_field_id).each do |value| %>
<td>
<span style="display: list-item;">
<% if value.value.class == String || value.value.nil? %>
<%= value.get_value_by_locale(I18n.locale,value) %>
<% else %>
<% value.value.each do |key,v| %>
<%= "#{I18n.t(key)}:#{value.get_value_by_locale(key,value)}" %>
<br>
<% end %>
<% end %>
</span>
</td>
<% end %>
<% else %>
<% for i in 1..(count_field-count_value) %>
<td>
</td>
<% end %>
<% end %>
</tr>
<tr>
<% end %>
</ul>
</tr>
<% end %>
</tbody>
</table>
<%=
content_tag :div, class: "bottomnav clearfix" do
content_tag :div, paginate(@seminar_signups), class: "pagination pagination-centered"
end
%>
</span>
<%= render 'layouts/delete_modal', delete_options: @delete_options %>
<% if @can_edit %>
<ul class="pull-right"><li><a href="?type=" class="btn"><%= t('seminar.dashboard') %></a></li><li><a href="?type=table" class="btn"><%= t('seminar.table') %></a></li></ul>
<% end %>
<% if params[:type] == "table" || (!@can_edit) %>
<div style="clear: both;"></div>
<%= render :partial => 'seminar_signup_table' %>
<% else %>
<%= render :partial => 'seminar_signup_dashboard' %>
<% end %>
<style type="text/css">
.pull-right li{
float: left;
}
li{
list-style: none;
}
</style>

View File

@ -0,0 +1,57 @@
<% content_for :page_specific_css do %>
<%= stylesheet_link_tag "lib/main-forms" %>
<%= stylesheet_link_tag "lib/fileupload" %>
<%= stylesheet_link_tag "lib/main-list" %>
<% end %>
<% content_for :page_specific_javascript do %>
<%= javascript_include_tag "lib/bootstrap-fileupload" %>
<%= javascript_include_tag "lib/bootstrap-datetimepicker" %>
<%= javascript_include_tag "lib/datetimepicker/datetimepicker.js" %>
<%= javascript_include_tag "lib/file-type" %>
<%= javascript_include_tag "lib/module-area" %>
<% end %>
<%= form_for @seminar_signup_admin_setting, url: update_seminar_signup_admin_setting_admin_seminar_path, html: {class: "form-horizontal main-forms"} do |f| %>
<h3>
<% if @seminar %>
<%= @seminar.title %>
<% else %>
<%= t("seminar.enquiry_for_applicants_display_fields_setting") %>
<% end %>
</h3>
<fieldset>
<!-- Input Area -->
<div class="input-area">
<h4><%= t('seminar.display_field') %></h4>
<% render :partial => "get_display_fields" %>
<% max_length = 10 %>
<% @field_name_translations.each_with_index do |trans,i|%>
<% if i % max_length == 0 %>
<table class="table table-bordered">
<thead>
<tr>
<th class="span2"><%= trans %></th>
<% else %>
<th class="span2"><%= trans %></th>
<% end %>
<% if ((i % max_length) == (max_length - 1) || i == (@field_name_translations.count - 1)) %>
</tr>
</thead>
<tbody>
<% @field_names[((i/max_length) *max_length) ..i].each do |fn|%>
<td><%= check_box_tag "#{f.object_name}[display_field][]",fn , @display_field.include?(fn) %></td>
<% end %>
</tbody>
</table>
<% end %>
<% end %>
<%= hidden_field_tag :id, params[:id] %>
</div>
<!-- Form Actions -->
<div class="form-actions">
<%= f.submit t('submit'), class: 'btn btn-primary' %>
<input type="hidden" name="referer_url" value="<%= get_referer_url %>">
<%= link_to t('cancel'), seminar_signup_admin_seminar_path(params[:id]), :class=>"btn" %>
</div>
</fieldset>
<% end %>

View File

@ -0,0 +1,103 @@
<table class="table main-list">
<thead>
<tr>
<% render :partial => "get_display_fields" %>
<% @field_name_translations.each_with_index do |trans,i|%>
<% next unless @display_field.include?(@field_names[i]) %>
<th class="span2" id="<%=@field_names[i]%>"><%= trans %></th>
<% end %>
</tr>
</thead>
<tbody class="sort-holder">
<% @seminar_signups.each do |seminar_signup| %>
<% len = seminar_signup.seminar_signup_contributes.count %>
<% rowspan = "rowspan=#{len==0? 1 : len}" %>
<% vals = [] %>
<tr>
<% @field_names.each_with_index do |fn,i|%>
<% next unless @display_field.include?(fn) %>
<% names = fn.split(".") %>
<% val = "" %>
<% if names[0] == "seminar_signup_field_set" %>
<% if names[1] == "name" %>
<% val = seminar_signup.name
val += "<div class=\"quick-edit\">
<ul class=\"nav nav-pills\">"
if can_edit_or_delete?(seminar_signup)
val += "<li><a href=\"/admin/seminar_signups/#{seminar_signup.id}/edit\">#{t(:edit)}</a></li>
<li><a href=\"#{admin_seminar_signup_path(seminar_signup.id)}\" class=\"delete text-error\" rel=\"nofollow\" data-method=\"delete\" data-confirm=\"Are you sure?\">#{t(:delete_)}</a></li>"
end
val += "</ul>
</div>"
%>
<% elsif names[1] == 'status' %>
<% val = t("seminar.registration_status_#{seminar_signup.status}") if !seminar_signup.status.blank? %>
<% elsif names[1] != 'recaptcha' %>
<% val = seminar_signup.send("#{names[1]}") %>
<% end %>
<% elsif names[0] == "default" %>
<% if names[2] == "name" %>
<% val = seminar_signup.name
val += "<div class=\"quick-edit\">
<ul class=\"nav nav-pills\">"
if can_edit_or_delete?(seminar_signup)
val += "<li><a href=\"/admin/seminar_signups/#{seminar_signup.id}/edit\">#{t(:edit)}</a></li>
<li><a href=\"#{admin_seminar_signup_path(seminar_signup.id)}\" class=\"delete text-error\" rel=\"nofollow\" data-method=\"delete\" data-confirm=\"Are you sure?\">#{t(:delete_)}</a></li>"
end
val += "</ul>
</div>"
%>
<% elsif names[2] == "tel" %>
<% val = seminar_signup.tel %>
<% elsif names[2] == "registration_status" %>
<% val = t("seminar.registration_status_#{seminar_signup.status}") if !seminar_signup.status.blank? %>
<% end %>
<% elsif names[0] == "seminar_signup_field_custom" || names[0] == "seminar_signup_fields" %>
<% val = seminar_signup.seminar_signup_values.where(:key=>names[1]).first.get_value_by_locale(I18n.locale) rescue "" %>
<% elsif names[0] == "seminar_signup_contributes" %>
<% if names[1] == "file" %>
<% val = seminar_signup.seminar_signup_contributes.to_a %>
<% else %>
<% val = seminar_signup.seminar_signup_contributes.collect{|s| s.send(names[1])} %>
<% end %>
<% elsif names[0] == "seminar_submission_fields" %>
<% val = seminar_signup.seminar_signup_contributes.collect{|s| (s.seminar_submission_values.where(:key=>names[1]).first.get_value_by_locale(I18n.locale) rescue "")} %>
<% end %>
<% vals << val %>
<% end %>
<% count = 0 %>
<% indices = [] %>
<% vals.each_with_index do |val,i| %>
<% if val.class == Array %>
<% count = val.count - 1 %>
<% indices << i%>
<td>
<% if val[0].class == SeminarSignupContribute #File %>
<% seminar_signup_contribute = val[0] %>
<%= link_to (seminar_signup_contribute.title.blank? ? File.basename(seminar_signup_contribute.file.path) : seminar_signup_contribute.title) , seminar_signup_contribute.file.url, {:target => '_blank', :title => Nokogiri::HTML(seminar_signup_contribute.description).text} if seminar_signup_contribute.file.file %>
<% else %>
<%= val[0].html_safe.to_s rescue "" %>
<% end %>
</td>
<% else %>
<td <%= rowspan %>><%= val.to_s.html_safe %></td>
<% end %>
<% end %>
<% (0...count).each do |i|%>
<tr>
<% indices.each do |index| %>
<td>
<% if vals[index][i].class == SeminarSignupContribute #File %>
<% seminar_signup_contribute = vals[index][i] %>
<%= link_to (seminar_signup_contribute.title.blank? ? File.basename(seminar_signup_contribute.file.path) : seminar_signup_contribute.title) , seminar_signup_contribute.file.url, {:target => '_blank', :title => Nokogiri::HTML(seminar_signup_contribute.description).text} if seminar_signup_contribute.file.file %>
<% else %>
<%= vals[index][i].html_safe.to_s rescue "" %>
<% end %>
</td>
<% end %>
</tr>
<% end %>
</tr>
<% end %>
</tbody>
</table>

View File

@ -9,6 +9,8 @@ en:
seminar_submission_field: Seminar Submission Field
seminar_signup_field: Seminar Signup Field
seminar_signup: Signup Analyze
enquiry_for_applicants: Enquiry for applicants
reviewer_setting: Reviewer setting
module_name:
seminar: Seminar #研討會
@ -17,6 +19,18 @@ en:
verification_failed: Verification Failed #驗證碼錯誤
seminar:
are_you_want_to_remove: "Are you really want to remove?"
add_assign_fields: Add assign fields
assign_fields: Assign fields
organizer: Organizer
reviewer_setting: Reviewer setting
select_reviewer: Select reviewer
enquiry_for_applicants_display_fields_setting: Enquiry for applicants display fields setting
enquiry_for_applicants: Enquiry for applicants
field_display_setting: Field display setting
table: Table
dashboard: Dashboard
display_field: Display field
note: Note
email_signup_success: Signup success
email_submission_success: Submission registration success

View File

@ -9,6 +9,8 @@ zh_tw:
seminar_submission_field: 上傳介面欄位
seminar_signup_field: 報名欄位
seminar_signup: 報名統計
enquiry_for_applicants: 查詢報名人
reviewer_setting: 審查委員設定
module_name:
seminar: 研討會
@ -17,6 +19,18 @@ zh_tw:
verification_failed: 驗證碼錯誤
seminar:
are_you_want_to_remove: 你確定要刪除?
add_assign_fields: 新增分派欄位
assign_fields: 分派欄位
organizer: 主辦人
reviewer_setting: 審查委員設定
select_reviewer: 選擇審查委員
enquiry_for_applicants_display_fields_setting: 查詢報名人顯示欄位設定
enquiry_for_applicants: 查詢報名人
field_display_setting: 欄位顯示設定
table: 列表
dashboard: 儀錶板
display_field: 顯示的欄位
note: 附註
email_signup_success: 報名成功
email_submission_success: 投稿註冊成功

View File

@ -12,8 +12,18 @@ Rails.application.routes.draw do
get 'seminar_item_content'
get 'seminar_signup_field'
get 'seminar_submission_field'
get 'seminar_signup_admin_setting'
post 'update_seminar_signup_admin_setting'
patch 'update_seminar_signup_admin_setting'
get 'get_hide_reviewer'
get 'get_reviewer_block'
get 'reviewer_setting'
post 'update_reviewer_setting'
patch 'update_reviewer_setting'
end
end
get 'seminar/enquiry_for_applicants' => "seminars#enquiry_for_applicants"
post 'seminar/update_seminar_review' => "seminars#update_seminar_review"
resources :seminar_items do
collection do
post 'delete_items'

View File

@ -11,7 +11,7 @@ module Seminar
side_bar do
head_label_i18n 'seminar.seminar', icon_class: "icon-globe"
available_for "managers"
available_for "users"
active_for_controllers (['admin/seminars'])
head_link_path "admin_seminars_path"
@ -19,7 +19,7 @@ module Seminar
:link_path=>"admin_seminars_path" ,
:priority=>1,
:active_for_action=>{'admin/seminars'=>'index'},
:available_for => 'managers'
:available_for => 'users'
context_link 'new_',
:link_path=>"new_admin_seminar_path" ,
:priority=>2,
@ -42,6 +42,11 @@ module Seminar
:priority=>3,
:active_for_action=>{'admin/seminars'=>'seminar_agreements'},
:available_for => 'managers'
context_link 'seminar.enquiry_for_applicants',
:link_path=>"admin_seminar_enquiry_for_applicants_path" ,
:priority=>3,
:active_for_action=>{'admin/seminars'=>'enquiry_for_applicants'},
:available_for => 'users'
end
end