class SeminarsController < ApplicationController helper MemberHelper include MemberHelper include ActionView::Context #vary important (only add this can access @@session from view) include Admin::SeminarsHelper FrontendMethods = ["show_privacy", "show_data", "check_email", "check_availability", "signup_ok", "add_file", "edit_file", "con_login", "con_upload", "con_logout"] # include SimpleCaptcha::ControllerHelpers def index time_now = Time.now seminars = SeminarMain.all.desc(:seminar_start_date).filter_by_categories { "seminars" => seminars, 'time_now' => time_now, "total_pages" => seminars.total_pages } end def widget cats = OrbitHelper.widget_categories || [] widget_data_count = OrbitHelper.widget_data_count seminars = SeminarMain.all.desc(:seminar_start_date).filter_by_categories(cats) time_now = DateTime.now session = OrbitHelper.request.session seminars = seminars.map do |seminar| registration_is_open = seminar.registration_status.present? sign_up_not_yet = seminar.signup_start_date && time_now && seminar.signup_start_date > time_now sign_up_overdue = seminar.signup_end_date && time_now && (seminar.signup_end_date + 1.day <= time_now) signup_is_full = seminar.signup_is_full? seminar_url = (@prefix_url ? @prefix_url : OrbitHelper.url_to_plugin_show(seminar.to_param, 'seminar')) if !registration_is_open sign_up = t('seminar.sign_up_not_open') elsif sign_up_not_yet sign_up = t('seminar.sign_up_not_yet') elsif sign_up_overdue sign_up = t('seminar.sign_up_overdue') elsif signup_is_full sign_up = t('seminar.sign_up_is_full') else sign_up_text = t('seminar.signup') sign_up = link_to(sign_up_text, seminar.get_frontend_url(seminar_url), :target=>'_blank', :title=>sign_up_text) end if !seminar.registration_status.blank? && seminar.registration_status.include?('C') && (seminar.contribute_start_date <= time_now rescue false) && ( seminar.contribute_end_date.nil? || (seminar.contribute_end_date+1 >= time_now rescue false) ) sign_up += content_tag :span, :style=> "margin-left: 1em;" do if session[:seminar_signup_id].present? && session[:seminar_main_id] == seminar.id button_text = t('seminar_signup.uploads') link_to(button_text, seminar.get_frontend_url(seminar_url, :con_upload), {:title=>button_text}) else button_text = t('seminar_signup.con_login') link_to(button_text, seminar.get_frontend_url(seminar_url, :con_login), {:title=>button_text}) end end end files = seminar.seminar_files.map{|file| { "file_url" => file.file.url, "file_title" => (file.title.blank? ? File.basename(file.file.path) : file.title rescue '') } } rescue [] links = seminar.seminar_links.map{|link| { "link_url" => link.url, "link_title" => (link.title.blank? ? link.url : link.title rescue '') } } rescue [] {"title" => seminar.title, "subtitle" => sign_up, "category" => (seminar.category.title rescue ""), "link_to_show" => (OrbitHelper.instance_variable_get(:@url_to_plugin_show_blank) ? 'javascript:void(0)' : seminar.get_frontend_url(seminar_url, :show_data)), "postdate" => seminar.seminar_start_date, "statuses" => {}, "bulletin_links" => links, "bulletin_files" => files } end { "seminars" => seminars, "extras" => { "date-head" => I18n.t("seminar.seminar_start_date"), "category-head" => I18n.t(:category), "title-head" => I18n.t("seminar.title") } } end def custom_frontend_data params = OrbitHelper.params seminar = SeminarMain.find_by(:uid=>params[:uid]) @seminar = seminar @site_in_use_locales = Site.first.in_use_locales rescue I18n.available_locales seminar_template_setting = seminar.seminar_template_setting @seminar_template_setting = seminar_template_setting home_page = Page.where(:parent_page_id=>seminar.id).first OrbitHelper.set_page(home_page) rescue nil prefix_url = OrbitHelper.request.path.split("-").first + "-#{params[:uid]}" @prefix_url = prefix_url @registration_postfix = "/home/registration" header_data = "Home | " + "Main Site" content_style = seminar_template_setting.content_style background_style = seminar_template_setting.background_style background_style_info = SeminarTemplateSetting.background_style_infos[background_style].to_h content_style_info = SeminarTemplateSetting.content_style_infos[content_style].to_h extra_css = content_style_info["css"].to_a + background_style_info["css"].to_a extra_js = content_style_info["js"].to_a + background_style_info["js"].to_a template_path = content_style_info["template"] template_info = content_style_info["info"] custom_footer = seminar_template_setting.footer_info if seminar_template_setting.seminar_banner_images.count != 0 || background_style_info["default_logo"] banner_title = seminar.title external_link = prefix_url + "/home" images = [] if seminar_template_setting.seminar_banner_images.count == 0 images = [{ "image_link" => background_style_info["default_logo"], "image_alt" => banner_title, "title" => "", "alt_title" => banner_title, "class" => "active", "height" => 0, "width" => 0, "caption" => '
', "context" => "", "link" => external_link, "target" => "" }] else images = seminar_template_setting.seminar_banner_images.map.with_index do |image,i| caption = (i == 0 ? '' : "") klass = (i == 0 ? "active" : "") alt_title = image.description context = "" image_link = image.file.url { "image_link" => image_link, "image_alt" => alt_title, "title" => "", "alt_title" => alt_title, "class" => klass, "height" => 0, "width" => 0, "caption" => caption, "context" => context, "link" => external_link, "target" => "" } end end custom_banner = { "extras" => { "ad_fx" => "fade", "speed" => 500, "title" => banner_title, "banner-height" => 0, "banner-width" => 0, "base_image" => 0, "timeout" => (5 * 1000), "more" => "More" }, "images" => images } else custom_banner = nil end @@session = OrbitHelper.request.session @@session[:seminar_main_id] = @seminar.id if params[:method].present? main_content = render_other_method elsif params[:current_page_module] == "seminars_home" seminar = SeminarMain.where(uid: params[:uid]).first time_now = Time.now data = { "seminar" => seminar, "time_now" => time_now } @_request = OrbitHelper.request @registration_postfix = "" if template_info["main_content"] main_content = render_other_method("show_data",template_info["main_content"]) else main_content = render_to_string("seminars/custom_home",:locals=>{:seminar=>seminar, :params=>params,:session=>OrbitHelper.request.session},:layout=>false) end elsif params[:current_page_module] == "seminars_page" time_now = Time.now params = OrbitHelper.params seminar = SeminarMain.find_by(uid: params[:uid]) registration_url = prefix_url + @registration_postfix submission_url = prefix_url + '/home/submission' if !seminar.registration_status.blank? && seminar.signup_start_date <= time_now && ( seminar.signup_end_date.nil? || seminar.signup_end_date+1 >= time_now ) sign_up = ('' + t('seminar.signup') + '').html_safe elsif seminar.registration_status.blank? sign_up = t('seminar.sign_up_not_open') elsif seminar.signup_start_date > time_now sign_up = t('seminar.sign_up_not_yet') else sign_up = t('seminar.sign_up_overdue') end if !seminar.registration_status.blank? && seminar.registration_status.include?('C') && seminar.contribute_start_date <= time_now && ( seminar.contribute_end_date.nil? || seminar.contribute_end_date+1 >= time_now ) if @@session[:seminar_signup_id].present? && @@session[:seminar_main_id] == seminar.id button_text = t('seminar_signup.uploads') contribute_action = link_to(button_text, submission_url + '?method=con_upload', :title=>button_text) else button_text = t('seminar_signup.con_login') contribute_action = link_to(button_text, submission_url + '?method=con_login', :title=>button_text) end end data = { 'seminar' => seminar, 'sign_up' => sign_up, 'contribute_action' => contribute_action, 'time_now' => time_now, 'contribute_time_range' => SeminarMain.time_range(seminar.contribute_start_date, seminar.contribute_end_date), 'sign_up_time_range' => SeminarMain.time_range(seminar.signup_start_date, seminar.signup_end_date), 'seminar_time_range' => SeminarMain.time_range(seminar.seminar_start_date, seminar.seminar_end_date) } @_request = OrbitHelper.request main_content = render_to_string("seminars/show_data",:locals=>{:action_data=>data, :request=>OrbitHelper.request,:flash=>OrbitHelper.request.flash, :params=>params,:session=>OrbitHelper.request.session},:layout=>false) else main_content = render_other_method("render_"+params[:current_page_module]) rescue nil end custom_datapp_data = {} if custom_banner custom_banner["custom_widget_type"] = "module_widget" custom_banner["custom_widget_module"] = "ad_banner" if custom_banner["images"].count > 1 custom_banner["custom_widget_file"] = "ad_banner_widget1" else custom_banner["custom_widget_file"] = "ad_banner_widget4" end custom_datapp_data["300"] = [custom_banner] end return { "extra_body_class" => "seminar_custom_page background_style_#{background_style} content_style_#{content_style}", "main_content"=>main_content, "extra_css"=>extra_css, "extra_js"=>extra_js, "header_data" => header_data, "prefix_url" => prefix_url, "template_path" => template_path, "custom_datapp_data" => custom_datapp_data, "custom_footer" => (custom_footer.blank? ? nil : custom_footer) } end def render_seminar_registration action_data = show @_request = OrbitHelper.request action_data["prefix_url"] = @prefix_url render_to_string("seminars/show",:locals=>{:action_data=>action_data, :request=>OrbitHelper.request,:flash=>OrbitHelper.request.flash, :params=>params,:session=>OrbitHelper.request.session},:layout=>false) end def render_seminar_registered_participants action_data = {"seminar"=>@seminar, "seminar_template_setting"=>@seminar_template_setting} @_request = OrbitHelper.request action_data["prefix_url"] = @prefix_url render_to_string("seminars/registered_participants",:locals=>{:action_data=>action_data, :request=>OrbitHelper.request,:flash=>OrbitHelper.request.flash, :params=>params,:session=>OrbitHelper.request.session},:layout=>false) end def render_other_method(render_method=nil,render_template=nil) params = OrbitHelper.params if render_method && render_template.nil? return self.send(render_method) end render_method = render_method || params[:method] render_template = render_template || render_method params = OrbitHelper.params action_data = self.send(render_method) @seminar_main_url = @prefix_url + '/home/introduction' if action_data if render_method == "con_upload" || render_method == "signup_ok" action_data["prefix_url"] = @prefix_url + '/home/submission' else action_data["prefix_url"] = @prefix_url end end @_request = OrbitHelper.request render_to_string("seminars/#{render_template}",:locals=>{:action_data=>action_data, :request=>OrbitHelper.request,:flash=>OrbitHelper.request.flash, :params=>params,:session=>OrbitHelper.request.session},:layout=>false).html_safe end def render_seminar_submission if @@session[:seminar_signup_id] action_data = con_upload action_data["prefix_url"] = @prefix_url + '/home/submission' @_request = OrbitHelper.request render_to_string("seminars/con_upload",:locals=>{:action_data=>action_data, :request=>OrbitHelper.request,:flash=>OrbitHelper.request.flash, :params=>params,:session=>@@session},:layout=>false).html_safe else action_data = con_login @_request = OrbitHelper.request render_to_string("seminars/con_login",:locals=>{:action_data=>action_data, :request=>OrbitHelper.request,:flash=>OrbitHelper.request.flash, :params=>params,:session=>@@session},:layout=>false).html_safe end end def get_referer_url_for_notice(notice_words) referer_url = params[:referer_url].to_s split_path = referer_url.split("/") last_path = split_path.last if last_path.include?("?") referer_url = split_path[0...-1].join('/') + '/' + last_path.split('?')[0] uri_query = last_path.split("?")[1..-1].join('?') uri_query.gsub!(/notice=[^&]*/,'').gsub!(/&+$/,'') if uri_query.blank? referer_url = referer_url + "?notice=#{notice_words}" else referer_url = referer_url + "?#{uri_query}¬ice=#{notice_words}" end else referer_url = referer_url + "?notice=#{notice_words}" end end def show_privacy params = OrbitHelper.params seminar = SeminarMain.where(uid: params[:uid]).first seminar_agreement = SeminarAgreement.first { 'seminar' => seminar, "seminar_agreement" => seminar_agreement } end def show_data time_now = Time.now params = OrbitHelper.params seminar = SeminarMain.find_by(uid: params[:uid]) registration_is_open = seminar.registration_status.present? sign_up_not_yet = seminar.signup_start_date && time_now && seminar.signup_start_date > time_now sign_up_overdue = seminar.signup_end_date && time_now && (seminar.signup_end_date + 1.day <= time_now) signup_is_full = seminar.signup_is_full? seminar_url = (@prefix_url ? @prefix_url : OrbitHelper.url_to_show(seminar.to_param)) if !registration_is_open sign_up = t('seminar.sign_up_not_open') sign_up_not_yet = true elsif sign_up_not_yet sign_up = t('seminar.sign_up_not_yet') elsif sign_up_overdue sign_up = t('seminar.sign_up_overdue') elsif signup_is_full sign_up = t('seminar.sign_up_is_full') else sign_up_text = t('seminar.signup') sign_up = link_to(sign_up_text, seminar.get_frontend_url(seminar_url), :target=>'_blank', :title=>sign_up_text) end if !seminar.registration_status.blank? && seminar.registration_status.include?('C') && (seminar.contribute_start_date.nil? || seminar.contribute_start_date <= time_now) && ( seminar.contribute_end_date.nil? || seminar.contribute_end_date+1 >= time_now ) if @@session[:seminar_signup_id].present? && @@session[:seminar_main_id] == seminar.id button_text = t('seminar_signup.uploads') contribute_action = link_to(button_text, seminar.get_frontend_url(seminar_url, :con_upload), :title=>button_text) else button_text = t('seminar_signup.con_login') contribute_action = link_to(button_text, seminar.get_frontend_url(seminar_url, :con_login), :title=>button_text) end end { 'seminar' => seminar, 'sign_up' => sign_up, 'contribute_action' => contribute_action, 'time_now' => time_now, 'sign_up_not_yet' => sign_up_not_yet, 'contribute_time_range' => SeminarMain.time_range(seminar.contribute_start_date, seminar.contribute_end_date), 'sign_up_time_range' => SeminarMain.time_range(seminar.signup_start_date, seminar.signup_end_date), 'seminar_time_range' => SeminarMain.time_range(seminar.seminar_start_date, seminar.seminar_end_date) } end def show params = OrbitHelper.params module_app = ModuleApp.where(:key => "seminar").first categories = module_app.categories seminar = SeminarMain.where(uid: params[:uid]).first seminar_signup = SeminarSignup.new time_now = Time.now { "seminar" => seminar, "seminar_signup" => seminar_signup, "time_now" => time_now } end def check_email params = OrbitHelper.params if !params[:email].blank? count = SeminarSignup.where(:email => params[:email], :seminar_main_id => params[:no]).count result = count > 0 ? t('seminar.already_used') : t('seminar.available') else result = t('seminar.please_enter_email') end { "result" => result } end def check_availability params = OrbitHelper.params response = {} case params[:type] when "seminar_signup_email" response["success"] = SeminarSignup.where(:email => params[:value], :seminar_main_id => params[:no]).count > 0 ? false : true end render :json => response.to_json end def create seminar_id = params[:seminar_signup][:seminar_main_id] @seminar = SeminarMain.where(id: seminar_id).first if @seminar.enable_recaptcha && (!gotcha_valid?) notice_words = t('recaptcha.errors.verification_failed') referer_url = get_referer_url_for_notice(notice_words) redirect_to referer_url, :notice => notice_words return end signup_limit = @seminar.signup_limit has_counter = false if signup_limit if defined?(OrbitHelper::SharedMutex) OrbitHelper::SharedMutex.synchronize do signup_count = OrbitHelper::SharedHash['seminar'][:counter][seminar_id] if signup_count.nil? signup_count = SeminarSignup.where(:seminar_main_id=>@seminar.id).count OrbitHelper::SharedHash['seminar'][:counter][seminar_id] = signup_count end if signup_limit > signup_count OrbitHelper::SharedHash['seminar'][:counter][seminar_id] = signup_count + 1 has_counter = true else notice_words = t('seminar.sign_up_is_full') referer_url = get_referer_url_for_notice(notice_words) redirect_to referer_url, :notice => notice_words return end end else signup_count = SeminarSignup.where(:seminar_main_id=>@seminar.id).count if signup_limit <= signup_count notice_words = t('seminar.sign_up_is_full') referer_url = get_referer_url_for_notice(notice_words) redirect_to referer_url, :notice => notice_words return end end end @signup = SeminarSignup.where(email: params[:seminar_signup][:email], seminar_main_id: seminar_id ).first @seminar_signup = SeminarSignup.new(seminar_signup_params) not_signup_yet = @signup.blank? if not_signup_yet && @seminar_signup.save if !params[:seminar_signup_values].nil? seminar_signup_values_params.each_with_index do |r,i| 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} @seminar = @seminar_signup.seminar_main unassigned_seminar_signup_ids = @seminar.seminar_signup_ids.map{|s| s.to_s} unassigned_seminar_signup_ids.push(@seminar_signup.id.to_s) seminar_reviews = SeminarReview.where(:seminar_main_id=>@seminar.id).to_a seminar_reviews.each do |sr| unassigned_seminar_signup_ids = unassigned_seminar_signup_ids - sr.all_seminar_signup_ids end @seminar.unassigned_seminar_signup_ids << @seminar_signup.id.to_s @seminar.unassigned_mode_1_seminar_signup_ids << @seminar_signup.id.to_s @seminar.save else @seminar.unassigned_seminar_signup_ids << @seminar_signup.id.to_s @seminar.unassigned_mode_1_seminar_signup_ids << @seminar_signup.id.to_s @seminar.save end extra_text = "