diff --git a/app/controllers/admin/seminar_signups_controller.rb b/app/controllers/admin/seminar_signups_controller.rb index 5f1e989..c6a2e14 100644 --- a/app/controllers/admin/seminar_signups_controller.rb +++ b/app/controllers/admin/seminar_signups_controller.rb @@ -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" diff --git a/app/controllers/admin/seminars_controller.rb b/app/controllers/admin/seminars_controller.rb index ad7f4c9..dbc4732 100644 --- a/app/controllers/admin/seminars_controller.rb +++ b/app/controllers/admin/seminars_controller.rb @@ -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 diff --git a/app/controllers/seminars_controller.rb b/app/controllers/seminars_controller.rb index 968a28d..e875a62 100644 --- a/app/controllers/seminars_controller.rb +++ b/app/controllers/seminars_controller.rb @@ -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 diff --git a/app/helpers/admin/seminars_helper.rb b/app/helpers/admin/seminars_helper.rb index 3aeed66..bf3c72e 100644 --- a/app/helpers/admin/seminars_helper.rb +++ b/app/helpers/admin/seminars_helper.rb @@ -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 "/" diff --git a/app/models/seminar_main.rb b/app/models/seminar_main.rb index 7626c28..a20e242 100644 --- a/app/models/seminar_main.rb +++ b/app/models/seminar_main.rb @@ -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? diff --git a/app/models/seminar_review.rb b/app/models/seminar_review.rb index 8ed7aee..fb407d6 100644 --- a/app/models/seminar_review.rb +++ b/app/models/seminar_review.rb @@ -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 diff --git a/app/models/seminar_signup.rb b/app/models/seminar_signup.rb index 9f40877..cd08c32 100644 --- a/app/models/seminar_signup.rb +++ b/app/models/seminar_signup.rb @@ -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 diff --git a/app/models/seminar_signup_admin_setting.rb b/app/models/seminar_signup_admin_setting.rb new file mode 100644 index 0000000..94b0864 --- /dev/null +++ b/app/models/seminar_signup_admin_setting.rb @@ -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 \ No newline at end of file diff --git a/app/models/seminar_signup_value.rb b/app/models/seminar_signup_value.rb index f477f67..85b9da3 100644 --- a/app/models/seminar_signup_value.rb +++ b/app/models/seminar_signup_value.rb @@ -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/) ? "#{field_value}" : 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 diff --git a/app/models/seminar_submission_value.rb b/app/models/seminar_submission_value.rb index b04aea8..73accec 100644 --- a/app/models/seminar_submission_value.rb +++ b/app/models/seminar_submission_value.rb @@ -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/) ? "#{field_value}" : 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 diff --git a/app/models/seminar_user.rb b/app/models/seminar_user.rb new file mode 100644 index 0000000..d130630 --- /dev/null +++ b/app/models/seminar_user.rb @@ -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 \ No newline at end of file diff --git a/app/views/admin/seminars/_form.html.erb b/app/views/admin/seminars/_form.html.erb index 378188f..27d3a1c 100644 --- a/app/views/admin/seminars/_form.html.erb +++ b/app/views/admin/seminars/_form.html.erb @@ -64,7 +64,12 @@ <%= f.datetime_picker :seminar_end_date, :no_label => true, :format=>"yyyy/MM/dd", :new_record => @seminar.new_record? %> - +
<%= t('seminar.title') %> | + <% end %> + <% if @drag%> ++ <% end %> + <% @field_name_translations.each_with_index do |trans,i|%> + <% next unless @display_field.include?(@field_names[i]) %> + | <%= trans %> | + <% end %> +
---|---|---|
> | + <% 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 += "+ <% 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 %> + | + <% else %> +><%= val.to_s.html_safe %> | + <% end %> + <% end %> + <% (0...count).each do |i|%> +
+ <% 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 %> + | + <% end %> +||
+ <% end %> + <% (0...@display_field.count).each do |f| %> + | + <% end %> + |
<%= field_set.name[I18n.locale] %> | - <% end %> - <% end %> - <% else %> -<%= t('seminar_signup.name')%> | -<%= t('seminar_signup.tel')%> | -<%= t('seminar.registration_status')%> | - <% end %> - <% if @seminar.seminar_signup_field_customs.count != 0 %> - <% @seminar.seminar_signup_field_customs.each do |field_set| %> - <% if !(field_set.hidden) %> -<%= SeminarSignupField.where(id:field_set.seminar_signup_field_id).first.title rescue '' %> | - <% 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 %> -<%= t('seminar_signup.title')%> | - <% end %> - <% if show2 %> -<%= t('seminar_signup.file')%> | - <% end %> - <% if show3 %> -<%= t('seminar_signup.description')%> | - <% end %> - <% @seminar.seminar_submission_fields.asc(:_id).each do |submission_field| %> -<%= submission_field.title %> | - <% end %> -
---|---|---|---|---|---|---|---|---|
- <% if field_set.field_name== 'name' %>
- <%= seminar_signup.name %>
-
-
- <% 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 %>
-
- |
- <% end %>
- <% end %>
- <% else %>
-
- <%= seminar_signup.name %>
-
-
-
- |
- <%= seminar_signup.tel %> | -<%= t("seminar.registration_status_#{seminar_signup.status}") if !seminar_signup.status.blank? %> - | - <% end %> - <% if @seminar.seminar_signup_field_customs.count != 0 %> - <% @seminar.seminar_signup_field_customs.each do |field_set| %> - <% if !(field_set.hidden) %> -
- <% 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)}" %>
- - <% end %> - <% end %> - <% end %> - <% end %> - |
- <% 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
- %>
- - | - <% end %> -
- |
- <% end %>
- <% if show2 %>
-
- |
- <% end %>
- <% if show3 %>
-
- |
- <% 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| %>
-
-
- <% 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)}" %>
- - <% end %> - <% end %> - - |
- <% end %>
- <% else %>
- <% for i in 1..(count_field-count_value) %>
- - | - <% end %> - <% end %> - -
<%= trans %> | + <% end %> +|
---|---|
+ <% 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 %> + | + <% else %> +><%= val.to_s.html_safe %> | + <% end %> + <% end %> + <% (0...count).each do |i|%> +
+ <% 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 %> + | + <% end %> +