class GreetingCardsController < ApplicationController helper Admin::GreetingCardsHelper include Admin::GreetingCardsHelper include ActionView::Helpers::FormHelper include ActionView::Helpers::FormOptionsHelper helper ActionView::Helpers::UrlHelper include ActionController::RequestForgeryProtection include RuCaptcha::ViewHelpers FrontendMethods = ["thank", "sorry", "see_email"] def widget subpart = OrbitHelper.get_current_widget case subpart.widget_type when /.*_form/ read_more_page = Page.where(id: subpart.read_more_page_id).first || Page.where(:module => 'greeting_card').first referer_url = read_more_page ? "/#{I18n.locale}#{read_more_page.url}" : "/#{I18n.locale}/greeting_cards" module_app = ModuleApp.where(:key => "greeting_card").first if OrbitHelper.widget_categories.include?('all') categories = module_app.categories.enabled else categories = Category.where(:id.in=>OrbitHelper.widget_categories).enabled end unless Category.respond_to?(:sorted) if (module_app.asc rescue true) categories = categories.sort_by{|category| (category.sort_number.to_i rescue category.id)} else categories = categories.sort_by{|category| (-category.sort_number.to_i rescue category.id)} end end tags = module_app.tags greeting_card_record = GreetingCardRecord.new locale = I18n.locale category_ids = categories.collect{|v| v.id.to_s} default_setting = GreetingCardSetting.first default_setting = GreetingCardSetting.create() if default_setting.nil? greeting_card_settings_map = GreetingCardCategorySetting.where(:category_id.in=> category_ids).map{|s| [s.category_id.to_s, s]}.to_h greeting_card_settings = category_ids.map do |category_id| if greeting_card_settings_map.has_key?(category_id) greeting_card_settings_map[category_id] else default_setting end end tmp_ first_category_id = category_ids.first greeting_card_setting = greeting_card_settings[0] @default_greeting_card_setting = default_setting all_fields = cal_form_from_setting(greeting_card_setting,categories) request = OrbitHelper.request csrf_value = OrbitHelper.request.session[:_csrf_token] || SecureRandom.base64(32) token_tag = hidden_field_tag('authenticity_token',csrf_value) switch_form = cal_switch_form(greeting_card_settings,categories,token_tag,referer_url, OrbitHelper.params[:id]) email_regex = @default_greeting_card_setting.get_email_regex(true) { 'fields' => all_fields, 'extras'=>{ 'switch_form' => switch_form, 'email_regex' => email_regex } } else data_count = OrbitHelper.widget_data_count.to_i if data_count != 0 greeting_card_records = GreetingCardRecord.where(situation: 'is_published').page(1).per(data_count) else greeting_card_records = GreetingCardRecord.where(situation: 'is_published') end greeting_card_index_page = OrbitHelper.widget_more_url rescue nil greeting_card_records = greeting_card_records.collect do |v| url = ((greeting_card_index_page+"?item=#{v.id}") rescue "javascript:alert('#{t('greeting_card.no_index_page')}')") {'td'=> [ {'content' =>v.category.title}, {'content' => link_to(v.title,"#{url}",title: v.title)} ] } end { 'greeting_card_records' => greeting_card_records, 'th' => [{'td'=>t('categories')},{'td'=>t('title')}], 'extras' => {'more_title'=>I18n.t('greeting_card.more_title'), 'more_href'=>greeting_card_index_page} } end end def get_layout_type @params = OrbitHelper.params page = Page.where(url:@params['url']).first @layout_type = 'index' if page.methods.include? 'select_option_items'.to_sym ModuleApp.all.select{|tmp| tmp.key.to_s=='greeting_card'}.each do |modile_app| @show_option_items = modile_app.show_option_items rescue nil end page.select_option_items.each do |select_option_item| if !(@show_option_items.nil?) && select_option_item.field_name == @show_option_items.keys.first.to_s value = YAML.load(select_option_item.value) I18n.with_locale(:en) do if value[locale] == t('greeting_card.widget.index') @layout_type = 'index' elsif value[locale] == t('greeting_card.is_published') @layout_type = 'published_index' end end end end end end def initialize super @app_title = 'greeting_card' self.request = OrbitHelper.request end def show greeting_card_record = GreetingCardRecord.where(id: @params['item']).first greeting_card_setting = GreetingCardCategorySetting.enabled.where(category_id: greeting_card_record.category_id.to_s).first greeting_card_setting = GreetingCardSetting.first if greeting_card_setting.nil? {'greeting_card_record' => greeting_card_record,'layout_type'=>'show','greeting_card_setting'=>greeting_card_setting} end def index @params = OrbitHelper.params referer_url = OrbitHelper.request.path if @params['item'].to_s.empty? get_layout_type else @layout_type = 'show' end if @layout_type == 'index' module_app = ModuleApp.where(:key => "greeting_card").first if OrbitHelper.page_categories.include? 'all' categories = module_app.categories.enabled else categories = Category.where(:id.in=>OrbitHelper.page_categories).enabled end unless Category.respond_to?(:sorted) if (module_app.asc rescue true) categories = categories.sort_by{|category| (category.sort_number.to_i rescue category.id)} else categories = categories.sort_by{|category| (-category.sort_number.to_i rescue category.id)} end end category_ids = categories.collect{|v| v.id.to_s} default_setting = GreetingCardSetting.first default_setting = GreetingCardSetting.create() if default_setting.nil? greeting_card_settings_map = GreetingCardCategorySetting.where(:category_id.in=> category_ids).map{|s| [s.category_id.to_s, s]}.to_h greeting_card_settings = category_ids.map do |category_id| if greeting_card_settings_map.has_key?(category_id) greeting_card_settings_map[category_id] else default_setting end end first_category_id = category_ids.first greeting_card_setting = greeting_card_settings[0] @default_greeting_card_setting = default_setting csrf_value = OrbitHelper.request.session[:_csrf_token] || SecureRandom.base64(32) token_tag = hidden_field_tag('authenticity_token',csrf_value) switch_form = cal_switch_form(greeting_card_settings,categories,token_tag,referer_url, @params[:id]) tags = module_app.tags greeting_card_record = GreetingCardRecord.new(id: nil) email_regex = @default_greeting_card_setting.get_email_regex(true) { 'layout_type' => 'index', 'greeting_card_record' => greeting_card_record, 'categories' => categories, 'tags' => tags, 'module_app' => module_app, 'switch_form' => switch_form, 'greeting_card_setting' => greeting_card_setting, 'default_greeting_card_setting' => @default_greeting_card_setting, 'email_regex' => email_regex } elsif @layout_type == 'published_index' page_number = OrbitHelper.page_number.to_i page_number = 1 if page_number == 0 page_data_count = OrbitHelper.page_data_count.to_i if page_data_count != 0 greeting_card_records = GreetingCardRecord.where(situation: 'is_published').page(page_number).per(page_data_count) else greeting_card_records = GreetingCardRecord.where(situation: 'is_published') end { 'layout_type' => 'published_index', 'greeting_card_records' => greeting_card_records, 'url' => @params['url'] } else show end end def create if !params[:referer_url].blank? && !params[:referer_url].to_s.start_with?("/") render :file => "#{Rails.root}/app/views/errors/403.html", :layout => false, :status => 403 and return end temp_params = create_params if temp_params[:id].present? @greeting_card_record = GreetingCardRecord.where(id: temp_params[:id]).first if @greeting_card_record.nil? render_404 and return end else @greeting_card_record = GreetingCardRecord.new(:ip=>request.remote_ip) end new_record = @greeting_card_record.new_record? all_to_save = [] greeting_card_setting = GreetingCardCategorySetting.enabled.where(category_id: params['greeting_card_record']['category_id']).first override_sort_number = nil if greeting_card_setting && greeting_card_setting.use_default override_sort_number = greeting_card_setting.default_sort_number greeting_card_setting = nil end if greeting_card_setting.nil? greeting_card_setting = GreetingCardSetting.first greeting_card_setting = GreetingCardSetting.create() if greeting_card_setting.nil? end @greeting_card_setting = greeting_card_setting @must_verify_email = greeting_card_setting.must_verify_email && new_record if @must_verify_email only_email = true @greeting_card_record.is_hidden = true else only_email = false check_fields = greeting_card_setting.default_setting.select{|k,v| v}.keys & greeting_card_setting.default_setting_required.select{|k,v| v}.keys - GreetingCardSetting::No_required unless new_record @greeting_card_record.is_hidden = false check_fields.delete('mail') end flag = true check_fields.each do |f| next if f == 'greeting_card_category_id' || f == 'recaptcha' if temp_params[f].blank? puts "field = #{f} is empty" flag = false break end end end custom_values = temp_params[:custom_values] custom_values = {} if custom_values.nil? if flag check_custom_fields = greeting_card_setting.custom_fields.select{|k,v| v["required"] == 'true' } if check_custom_fields.count != 0 check_custom_fields.each do |k,v| next if v['type'] == 'instructions' tmp = custom_values[k] v_type = v['type'] is_date = false if v_type == "checkbox" tmp = tmp.values rescue [] elsif v_type == 'date' is_date = true tmp = tmp["datetime"].values[0].values rescue [] end if tmp.present? if is_date && v["range_flag"] == 'true' if (tmp.class != Array) || (tmp.select{|v| v.blank?}.count != 0) flag = false break end end else flag = false break end end end end if !flag && !only_email redirect_to "#{params[:referer_url]}?method=sorry" and return end email_regex = greeting_card_setting.get_email_regex unless only_email greeting_card_setting.custom_fields.select{|k,v| v['type']=='file' || v['type']=='image'}.each do |k,v| file = custom_values[k] if !file.blank? if v['type']=='image' all_to_save += [[k,GreetingCardImage.new(file: file,greeting_card_record_id: @greeting_card_record.id)]] else all_to_save += [[k,GreetingCardFile.new(file: file,greeting_card_record_id: @greeting_card_record.id)]] end end end end flag = !greeting_card_setting.default_setting['recaptcha'] || gotcha_valid? if flag && !only_email all_to_save.each do |to_save| flag = flag && to_save[1].save custom_values[to_save[0]] = [custom_values[to_save[0]].original_filename ,to_save[1].file.url] end end if (email_regex ? ::Regexp.new(email_regex).match(temp_params["mail"].to_s) : true) && flag @disp_fields_infos = GreetingCardSetting.get_disp_fields_infos(true, greeting_card_setting, true, override_sort_number, true) @usage_rule = greeting_card_setting.usage_rule if temp_params['mail'].blank? temp_params = temp_params.merge({ situation: GreetingCardTicketStatus::DefaultKeys[1] }) end @greeting_card_record.update_attributes(temp_params) if @must_verify_email referer_url = "#{params[:referer_url]}?id=#{@greeting_card_record.id}" else referer_url = nil end if (greeting_card_setting.validate_enable || @must_verify_email) && GreetingCardSafeEmail.where(:email=> @greeting_card_record.sender_mail).count == 0 build_verification_email(@greeting_card_record, referer_url) elsif @must_verify_email redirect_to referer_url and return else @greeting_card_record.update(:situation => GreetingCardTicketStatus::DefaultKeys[1]) build_email(@greeting_card_record) end if @must_verify_email redirect_to "#{params[:referer_url]}?method=see_email" else redirect_to "#{params[:referer_url]}?method=thank" end else redirect_to "#{params[:referer_url]}?method=sorry" end end def thank acknowledgement = GreetingCardAcknowledgement.last { "acknowledgement" => acknowledgement } end def sorry {} end def see_email end def render_404 render :file => "#{Rails.root}/app/views/errors/404", :layout => false, :status => :not_found, :formats => [:html] end def verify_email @greeting_card_record = GreetingCardRecord.where(:id=>params[:id]).first if @greeting_card_record.nil? render_404 and return elsif @greeting_card_record.situation != GreetingCardTicketStatus::DefaultKeys[0] @already_verify = true else @already_verify = false @greeting_card_record.update(:situation => GreetingCardTicketStatus::DefaultKeys[1]) GreetingCardSafeEmail.create(:email=> @greeting_card_record.sender_mail) build_email(@greeting_card_record) end end def build_verification_email(email_er, referer_url) email = Email.new email.save email_er.email_id = email.id email_er.save group_mail = email_er.sender_mail manager_emails = email_er.reviewer_emails mail_sentdate = DateTime.now site = current_site rescue Site.first mail_from = site.title_translations[site.default_locale] host_url = Site.first.root_url rescue "http://" if host_url == "http://" host_url = request.protocol + request.host_with_port end verify_url = "#{host_url}/#{I18n.locale}/xhr/greeting_cards/verify_email/#{email_er.id}" verify_link = "#{verify_url}" if referer_url referer_url = host_url + referer_url referer_link = "#{referer_url}" else referer_link = nil end mail_subject = mail_from+": #{t('greeting_card.email_verification_notification')}" email_er.email.update_attributes( :mail_lang=> site.default_locale, :create_user=>(current_user rescue nil), :mail_sentdate=>mail_sentdate, :module_app=>@module_app, :mail_to=>group_mail, :mail_subject=>mail_subject, :template=>'greeting_cards/email_verification', :template_data=>{ "validation_email_content" => @greeting_card_setting.validation_email_content, "verify_link" => verify_link, "referer_link" => referer_link, "site_host" => host_url }, :mail_reply_to => (manager_emails.empty? ? nil : manager_emails) ) # email_er.email.deliver end def build_email(email_er) site = current_site rescue Site.first host_url = Site.first.root_url rescue "http://" if host_url == "http://" host_url = request.protocol + request.host_with_port end locale = site.default_locale email_er.build_email(site, host_url, current_user, @module_app, locale) end def create_params params.require(:greeting_card_record).permit! end private def cal_card_html(greeting_card_images) field_name = "greeting_card_record[card]" greeting_card_images_html = "