module Ask class Engine < ::Rails::Engine initializer "ask" do Rails.application.config.to_prepare do locales = Site.first.in_use_locales rescue [:en,:zh_tw] begin t_data0 = locales.collect{|l| Dir["#{ENV['PWD']}/config/locales/#{l.to_s}.yml"]}.flatten.map{|yaml_file| YAML.load(File.read(yaml_file))} t_data1 = Dir["#{Ask::Engine.root}/config/locales/*.yml"].map{|yaml_file| YAML.load(File.read(yaml_file))} data_item = {} key_item1 = {} value_item1 = {} value_item2 = {} t_data0.each do |t_data| v = t_data.values k = t_data.keys[0] key_item1[k] = v[0]['theme'] end t_data1.each do |t_data| v = t_data.values k = t_data.keys[0] value_item1[k] = v[0]['ask']['widget']['index'] value_item2[k] = v[0]['ask']['is_published'] end data_item[key_item1] = [value_item1,value_item2] rescue => e puts ['error in ask',e] end begin require File.join(Ask::Engine.root, 'app/models/ask_setting') require File.join(Ask::Engine.root, 'app/models/ask_list_setting') require File.join(Ask::Engine.root, 'app/models/ask_category_setting') require File.join(Ask::Engine.root, 'app/models/ask_setting_index') if defined?(AskSetting) ask_setting = AskSetting.first if ask_setting.nil? ask_setting = AskSetting.create() elsif AskSetting.count > 1 AskSetting.all[1..-1].each do |a| a.destroy end end if ask_setting.email_regex_enable AskCategorySetting.all.update_all(email_regex_enable: ask_setting.email_regex_enable,email_regex: ask_setting.email_regex) end AskCategorySetting.all.each do |ask_category_setting| sort_number = ask_category_setting.sort_number have_custom_key = false sort_number.keys.each do |sort_number_key| have_default_key ||= sort_number_key.include?("default@default@") have_custom_key ||= sort_number_key.include?("custom@") end if !have_custom_key new_sort_number = {} sort_number.keys.each do |sort_number_key| new_sort_number_key = sort_number_key if sort_number_key.include?("default@default@") new_sort_number_key = sort_number_key.sub(/default@/, '') else new_sort_number_key = sort_number_key.sub(/default@/, "custom@#{ask_category_setting.id}@") end new_sort_number[new_sort_number_key] = sort_number[sort_number_key] end ask_category_setting.sort_number = new_sort_number ask_category_setting.save end end end if defined?(AskListSetting) ask_list_setting = AskListSetting.first if ask_list_setting.nil? ask_list_setting = AskListSetting.create() elsif AskListSetting.count > 1 AskListSetting.where(:category_id=>nil)[1..-1].each do |a| a.destroy end end end if defined?(AskSettingIndex) if AskSettingIndex.first.nil? AskSettingIndex.create() elsif AskSettingIndex.count > 1 AskSettingIndex.all[1..-1].each do |ask_setting_index| ask_setting_index.destroy end end end rescue => e puts ['AskSetting not found',e] end require File.join(Ask::Engine.root, 'app/models/ask_question') require File.expand_path('app/models/user_action', Rails.root) def fix_reviewer ask_question_no_reviewer_len = AskQuestion.where(:id.in => UserAction.where(controller: 'admin/asks', action: 'update').pluck(:request_path).map{|v| v.split('/')[-1]}, :reviewer_id => nil).count if ask_question_no_reviewer_len==0 return end UserAction.where(controller: 'admin/asks', action: 'update').each do |user_action| user = user_action.user askquestion_id = user_action.request_path.split('/')[-1] askquestion = AskQuestion.where(id: askquestion_id).first if askquestion && user.member_profile_id askquestion.update_attributes(reviewer_id: user.member_profile_id, review_time: user_action.created_at) end end if defined?(AskListSetting) AskListSetting.each do |ask_list_setting| if ask_list_setting.default_fields.length != AskListSetting::DefaultEnabled.length ask_list_setting.default_fields += ['reviewer', 'review_time'] ask_list_setting.save end end end end fix_reviewer AskQuestion.where(send_email: false).update_all(send_email: 0) AskQuestion.where(send_email: true).update_all(send_email: 1) OrbitApp.registration "Ask", :type => "ModuleApp" do module_label "ask.ask" base_url File.expand_path File.dirname(__FILE__) begin set_keyword_contstraints ['/asks'] rescue => e puts ['the site is too old'] end widget_methods ["widget"] widget_settings [{"data_count"=>10}] taggable "AskQuestion" begin show_option_items data_item rescue => e puts ['there_was_no_show_option_method',e] end categorizable authorizable frontend_enabled # data_count 1..10 side_bar do head_label_i18n 'ask.ask', icon_class: "icon-lightbulb" available_for "users" active_for_controllers (['admin/asks']) head_link_path "admin_asks_path" context_link 'ask.all_tickets', :link_path=>"admin_asks_path" , :priority=>1, :active_for_action=>{'admin/asks'=>'index'}, :available_for => 'users' context_link 'ask.setting', :link_path=>"setting_admin_asks_path" , :priority=>2, :active_for_action=>{'admin/asks'=>'setting'}, :available_for => 'managers' context_link 'ask.category_setting', :link_path=>"category_setting_admin_asks_path" , :priority=>3, :active_for_action=>{'admin/asks'=>'category_setting'}, :available_for => 'sub_managers' context_link 'ask.order_fields', :link_path=>"order_fields_admin_asks_path" , :priority=>4, :active_for_action=>{'admin/asks'=>'order_fields'}, :available_for => 'sub_managers' context_link 'ask.print_setting', :link_path=>"print_setting_admin_asks_path" , :priority=>5, :active_for_action=>{'admin/asks'=>'print_setting'}, :available_for => 'sub_managers' context_link 'ask.ticket_status', :link_path=>"ticket_status_admin_asks_path" , :priority=>6, :active_for_action=>{'admin/asks'=>'ticket_status'}, :available_for => 'managers' context_link 'categories', :link_path=>"admin_module_app_categories_path" , :link_arg=>"{:module_app_id=>ModuleApp.find_by(:key=>'ask').id}", :priority=>7, :active_for_action=>{'admin/asks'=>'categories'}, :active_for_category => 'Ask', :available_for => 'managers' context_link 'tags', :link_path=>"admin_module_app_tags_path" , :link_arg=>"{:module_app_id=>ModuleApp.find_by(:key=>'ask').id}", :priority=>7, :active_for_action=>{'admin/ask'=>'tags'}, :active_for_tag => 'Ask', :available_for => 'managers' context_link 'ask.acknowledgements', :link_path=>"admin_ask_acknowledgements_path" , :priority=>8, :active_for_action=>{'admin/asks'=>'acknowledgements'}, :available_for => 'managers' context_link 'ask.admins', :link_path=>"admin_ask_admins_path" , :priority=>9, :active_for_action=>{'admin/asks'=>'admins'}, :available_for => 'managers' context_link 'ask.exports', :link_path=>"export_admin_asks_path" , :priority=>10, :active_for_action=>{'admin/asks'=>'exports'}, :available_for => 'managers' # context_link 'new_', # :link_path=>"new_admin_ask_path" , # :priority=>2, # :active_for_action=>{'admin/asks'=>'new'}, # :available_for => 'sub_managers' # context_link 'tags', # :link_path=>"admin_module_app_tags_path" , # :link_arg=>"{:module_app_id=>ModuleApp.find_by(:key=>'ask').id}", # :priority=>4, # :active_for_action=>{'admin/asks'=>'tags'}, # :active_for_tag => 'Ask', # :available_for => 'managers' end end end end end end