diff --git a/lib/ask/engine.rb b/lib/ask/engine.rb index 84a0ba0..c5bb1a0 100644 --- a/lib/ask/engine.rb +++ b/lib/ask/engine.rb @@ -1,218 +1,220 @@ module Ask class Engine < ::Rails::Engine initializer "ask" 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.expand_path('../../../app/models/ask_setting', __FILE__) - require File.expand_path('../../../app/models/ask_list_setting', __FILE__) - require File.expand_path('../../../app/models/ask_category_setting', __FILE__) - require File.expand_path('../../../app/models/ask_setting_index', __FILE__) - 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 + 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 - if ask_setting.email_regex_enable - AskCategorySetting.all.update_all(email_regex_enable: ask_setting.email_regex_enable,email_regex: ask_setting.email_regex) + 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 - 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] + 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 - 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 + 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 - 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 + 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 - end - rescue => e - puts ['AskSetting not found',e] - end - require File.expand_path('../../../app/models/ask_question', __FILE__) - 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 - 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'] + puts ['AskSetting not found',e] 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] + 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 - categorizable - authorizable - frontend_enabled - # data_count 1..10 + fix_reviewer + 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" + 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 '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/ask'=>'tags'}, - # :active_for_tag => 'Ask', - # :available_for => 'managers' - 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 '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 'ask.all_tickets', + :link_path=>"admin_asks_path" , + :priority=>1, + :active_for_action=>{'admin/asks'=>'index'}, + :available_for => 'users' + # 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/ask'=>'tags'}, + # :active_for_tag => 'Ask', + # :available_for => 'managers' + 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 '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 - # 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