管理者新增指定類別功能,新增審核者紀錄功能,修復錯誤

This commit is contained in:
邱博亞 2023-05-20 23:25:00 +08:00
parent 8eaa74ec9c
commit 102a4f49cc
16 changed files with 181 additions and 89 deletions

View File

@ -389,7 +389,7 @@ class Admin::AsksController < OrbitAdminController
temp_params['custom_values'][to_save[0]] = [temp_params['custom_values'][to_save[0]].original_filename ,to_save[1].file.url]
end
end
temp_params = temp_params.merge({reviewer: current_user.member_profile, review_time: DateTime.now})
@ask_question.update_attributes(temp_params)
if @ask_question.send_email
build_email(@ask_question)

View File

@ -255,7 +255,6 @@ class AsksController < ApplicationController
end
end
end
puts "flag", flag
flag = !ask_setting.default_setting['recaptcha'] || gotcha_valid?
if flag
all_to_save.each do |to_save|
@ -291,7 +290,8 @@ class AsksController < ApplicationController
email_er.email_id = email.id
email_er.save
@group_mail = email_er.email_address
@group_mail = email_er.mail
@manager_emails = email_er.reviewer_emails
@mail_sentdate = DateTime.now
site = current_site rescue Site.first
@ -300,13 +300,14 @@ class AsksController < ApplicationController
if host_url == "http://"
host_url = request.protocol + request.host_with_port
end
mail_subject = mail_from+" #{t('ask.new_question')}"
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_from+" #{t('ask.new_question')}",
:mail_subject=>mail_subject,
:template=>'asks/email',
:template_data=>{
# "title" => email_er.title,
@ -321,8 +322,35 @@ class AsksController < ApplicationController
"ask_question_id" => email_er.id.to_s,
"site_host" => host_url,
"usage_rule" => @usage_rule
}
},
:mail_reply_to => (@manager_emails.empty? ? nil : @manager_emails)
)
if !@manager_emails.empty?
Email.new(
: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+" #{@group_mail}",
:template=>'asks/email',
:template_data=>{
# "title" => email_er.title,
"name" => email_er.name,
"identity" => email_er[:identity],
"mail" => email_er.mail,
"phone" => email_er.phone,
# "fax" => email_er.fax,
# "content" => email_er.content
"appointment" => email_er.appointment,
"disp_fields_infos" => @disp_fields_infos,
"ask_question_id" => email_er.id.to_s,
"site_host" => host_url,
"usage_rule" => @usage_rule,
"edit_url" => "#{host_url}/#{site.default_locale}/admin/asks/#{email_er.id}/edit"
}
).save
end
# email_er.email.deliver
end
@ -357,7 +385,7 @@ class AsksController < ApplicationController
has_ask_category_id = false
disp_fields_infos.each do |field, info|
if field.start_with?("default@")
k = field[8..-1]
k = is_cat_record ? field : field[8..-1]
v = ask_setting.custom_fields[k]
if v
field_name = info['trans']

View File

@ -3,4 +3,5 @@ class AskAdmin
include Mongoid::Timestamps
field :email, type: String
has_and_belongs_to_many :categories
end

View File

@ -136,10 +136,10 @@ class AskCategorySetting
end
def get_email_regex(frontend=false)
tmp = self.email_regex
if tmp
if tmp && frontend
tmp = tmp.gsub("\\A","^").gsub("\\z","$").gsub("\\","\\\\\\\\")
end
tmp = nil if !(self.email_regex_enable) || (self.application_form_signup_field_sets.where(:field_name=>'email').pluck(:disabled)[0] rescue false)
tmp = nil if !(self.email_regex_enable) || ((self.default_setting[:mail] == false) rescue false)
tmp
end
field :tmp_sort_number, type: Hash, default: {} # For Frontend

View File

@ -1,15 +1,17 @@
class AskListSetting
include Mongoid::Document
include Mongoid::Timestamps
DefaultFields = ['serial_number','situation','ask_category_id','title','name','sex','mail','phone','appointment','created_at','ip']
DefaultEnabled = ['serial_number','situation','ask_category_id','title','name','phone','appointment','created_at','ip']
DefaultFields = ['serial_number','situation','ask_category_id','title','name','sex','mail','phone','appointment','created_at','ip','reviewer','review_time']
DefaultEnabled = ['serial_number','situation','ask_category_id','title','name','phone','appointment','created_at','ip','reviewer','review_time']
field :default_fields, type: Array, default: []
field :custom_fields, type: Array, default: []
field :category_id
def default_fields
tmp = super()
return tmp if tmp.length>0
self.class::DefaultEnabled
if tmp.empty?
tmp = self.class::DefaultEnabled
end
return tmp
end
def custom_fields_list
locale = I18n.locale

View File

@ -26,6 +26,10 @@ class AskQuestion
field :custom_values, type: Hash,default: {}
field :agree_show,type: Boolean,default: false
field :agree_usage,type: Boolean,default: false
field :review_time, type: DateTime
belongs_to :reviewer , :class_name=>"MemberProfile", :foreign_key => :reviewer_id
# validates_presence_of :name, :identity, :mail, :title, :content
before_create do
last_serial_number = AskSetting.update_last_serial_number
@ -34,8 +38,8 @@ class AskQuestion
def email
mail = Email.find(self.email_id) rescue nil
end
def email_address
email_address = AskAdmin.pluck(:email).select{|s| s.present?}.uniq rescue []
def reviewer_emails
email_address = AskAdmin.or(:category_ids.in => [self.category_id, [], nil]).pluck(:email).select{|s| s.present?}.uniq rescue []
authorizes = Authorization.where(:module_app_id=>ModuleApp.where(:key=>'ask').first.id).to_a rescue []
authorizes.each do |a|
if a.category_id
@ -50,7 +54,6 @@ class AskQuestion
a.destroy
end
end
email_address = email_address +[self.mail] if !self.mail.blank?
email_address = email_address.flatten
email_address.uniq
end

View File

@ -192,7 +192,11 @@ class AskSetting
tmp_locales = I18n.available_locales.map{|l| l.to_s}
tmp_locales = [locale] + (tmp_locales - [locale])
ask_setting.custom_fields.each do |k,v|
tmp_k = (k.start_with?('default@') ? k : "default@#{k}")
tmp_k = k
if !k.start_with?('default@')
prefix = is_cat_record ? "custom@#{cat.id}@" : 'default@'
tmp_k = "#{prefix}#{k}"
end
disp_fields_infos[tmp_k] = sort_number[tmp_k]
end
ask_category_settings = []
@ -202,15 +206,15 @@ class AskSetting
ask_category_settings = AskCategorySetting.enabled.to_a
end
ask_category_settings.each do |c|
cat = Category.find(c.category_id) rescue nil
if cat.nil?
category = Category.find(c.category_id) rescue nil
if category.nil?
c.destroy
next
end
c.custom_fields.each do |k,v|
next if k.start_with?('default@')
tmp_k = "custom@#{c.id}@#{k}"
cat_title = cat.title rescue ""
cat_title = category.title rescue ""
disp_fields_infos[tmp_k] = sort_number[tmp_k]
end
end
@ -296,7 +300,11 @@ class AskSetting
end
end
next if trans.class != String
tmp_k = (k.start_with?('default@') ? k : "default@#{k}")
tmp_k = k
if !k.start_with?('default@')
prefix = is_cat_record ? "custom@#{cat.id}@" : 'default@'
tmp_k = "#{prefix}#{k}"
end
disp_fields_infos[tmp_k] = {"trans"=>trans,"sort_number"=>sort_number[tmp_k],"key"=>k,"type"=>v["type"],"options"=>v["options"],"instructions"=>v["instructions"]}
end
ask_category_settings = []
@ -306,8 +314,8 @@ class AskSetting
ask_category_settings = AskCategorySetting.enabled.to_a
end
ask_category_settings.each do |c|
cat = Category.find(c.category_id) rescue nil
if cat.nil?
category = Category.find(c.category_id) rescue nil
if category.nil?
c.destroy
next
end
@ -322,7 +330,7 @@ class AskSetting
next if trans.class != String
next if k.start_with?('default@')
tmp_k = "custom@#{c.id}@#{k}"
cat_title = cat.title rescue ""
cat_title = category.title rescue ""
disp_fields_infos[tmp_k] = {"trans"=>"#{cat_title}-#{trans}","sort_number"=>sort_number[tmp_k],"key"=>k,"type"=>v["type"],"options"=>v["options"],"instructions"=>v["instructions"]}
end
end
@ -349,10 +357,10 @@ class AskSetting
end
def get_email_regex(frontend=false)
tmp = self.email_regex
if tmp
if tmp && frontend
tmp = tmp.gsub("\\A","^").gsub("\\z","$").gsub("\\","\\\\\\\\")
end
tmp = nil if !(self.email_regex_enable) || (self.application_form_signup_field_sets.where(:field_name=>'email').pluck(:disabled)[0] rescue false)
tmp = nil if !(self.email_regex_enable) || ((self.default_setting[:mail] == false) rescue false)
tmp
end
end

View File

@ -0,0 +1,42 @@
<h2><%= @ask_admin.new_record? ? t(:add) : t(:edit) %></h2>
<div id="widget-title">
<div class="control-group">
<%= f.label :email, class: 'control-label' %>
<div class="controls">
<%= f.text_field :email, class: 'input-xxlarge', data: {"fv-validation" => "required;check_email;", "fv-messages" => "必填欄位;Email不正確;"} %>
</div>
</div>
<div class="control-group">
<%= f.label :category, class: 'control-label' %>
<div class="controls">
<label>
<%= check_box f.object_name,"category_ids", {checked: f.object.category_ids.empty?, multiple: true}, "", nil %>
<%= t(:all) %>
</label>
<% @module_app.categories.each do |category| %>
<label>
<%= check_box f.object_name,"category_ids", {checked: f.object.category_ids.include?(category.id), multiple: true}, category.id, nil %>
<%= category.title %>
</label>
<% end %>
</div>
</div>
</div>
<div class="form-actions">
<%= f.submit t(:submit), class: 'btn btn-primary' %>
</div>
<script type='text/javascript'>
$(function(){
var fv = new FormValidator($("#ask_admin_email"));
fv.validate_functions.check_email = function(value){
reg = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9])+$/;
if (reg.test(value)) {
return true;
}else{
return false;
}
}
})
</script>

View File

@ -27,20 +27,6 @@
</table>
<%= form_for @ask_admin, url: @url, html: { class: 'form-horizontal' } do |f| %>
<h2><%= @ask_admin.new_record? ? t(:add) : t(:edit) %></h2>
<div id="widget-title">
<div class="control-group">
<%= f.label :email, class: 'control-label' %>
<div class="controls">
<%= f.text_field :email, class: 'input-xxlarge' %>
</div>
</div>
</div>
<div class="form-actions">
<%= f.submit t(:submit), class: 'btn btn-primary' %>
</div>
<%= render :partial => 'ask_admin_form', locals: {f: f} %>
<% end %>

View File

@ -29,34 +29,5 @@
<%= javascript_include_tag 'validator' %>
<%= form_for @ask_admin, url: admin_ask_admins_path, html: {class: "form-horizontal main-forms previewable"} do |f| %>
<h2><%= @ask_admin.new_record? ? t(:add) : t(:edit) %></h2>
<div id="widget-title">
<div class="control-group">
<%= f.label :email, class: 'control-label' %>
<div class="controls">
<%= f.text_field :email, class: 'input-xxlarge', data: {"fv-validation" => "required;check_email;", "fv-messages" => "必填欄位;Email不正確;"} %>
</div>
</div>
</div>
<div class="form-actions">
<%= f.submit t(:submit), class: 'btn btn-primary' %>
</div>
<% end %>
<script type='text/javascript'>
$(function(){
var fv = new FormValidator($("#new_ask_admin"));
fv.validate_functions.check_email = function(value){
reg = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9])+$/;
if (reg.test(value)) {
return true;
}else{
return false;
}
}
})
</script>
<%= render :partial => 'ask_admin_form', locals: {f: f} %>
<% end %>

View File

@ -226,6 +226,10 @@
<%= b.created_at.strftime("%Y-%m-%d %H:%M") rescue nil %>
<% when 'ip' %>
<%= b.ip %>
<% when 'reviewer' %>
<%= b.reviewer.name rescue "" %>
<% when 'review_time' %>
<%= b.review_time.strftime("%Y-%m-%d %H:%M") rescue nil %>
<% end %>
<% if edit_box_display_index == i %>
<%= render partial: 'edit_box_for_index', :locals => {is_editable: is_editable, b: b} %>
@ -256,4 +260,4 @@
$(this)[0].form.submit();
})
})
</script>
</script>

View File

@ -5,6 +5,9 @@
</head>
<body>
<!-- <h1><%= @data['title'] %></h1> -->
<% if @data['edit_url'] %>
<%= link_to t("edit"), @data['edit_url'] %>
<% end %>
<table>
<% question = AskQuestion.find(@data['ask_question_id']) rescue nil %>
<% if question %>

View File

@ -146,21 +146,6 @@
// return false;
// });
// });
$(function(){
var fv = new FormValidator($("#new_ask_question"));
fv.validate_functions.check_email = function(value){
reg = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9])+$/;
if (reg.test(value)) {
return true;
}else{
return false;
}
}
// fv.validate_functions.test_function = function(value, element){
// }
})
$(document).ready(function(){
function scrollIntoView(selector, offset = 0) {
window.scroll(0, document.querySelector(selector).offsetTop - offset);
@ -168,6 +153,14 @@ $(document).ready(function(){
var email_regex = "<%=email_regex%>";
if(email_regex.length != 0){
email_regex = new RegExp(email_regex);
var fv = new FormValidator($("#new_ask_question"));
fv.validate_functions.check_email = function(value){
if (email_regex.test(value)) {
return true;
}else{
return false;
}
}
var submit_flag = false;
$(".ask-question-form").each(function(i, form){
var $form = $(form);

View File

@ -147,4 +147,6 @@ en:
status: Status
send_email: Whether to reply email
agree_show: Do you agree on displaying your request and our reply on the webpage without your personal information?
agree_show_explain: Whether to agree on displaying your request and our reply on the webpage without your personal information?
agree_show_explain: Whether to agree on displaying your request and our reply on the webpage without your personal information?
reviewer: Reviewer
review_time: Review Time

View File

@ -157,4 +157,6 @@ zh_tw:
status: 狀態
send_email: 是否回信
agree_show: 是否同意您提出之需求及回覆內容以不呈現發問者資訊方式刊載於網站供他人參考?
agree_show_explain: 是否同意刊載於網站給他人參考
agree_show_explain: 是否同意刊載於網站給他人參考
reviewer: 審核者
review_time: 審核時間

View File

@ -41,6 +41,28 @@ module Ask
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
@ -64,6 +86,31 @@ module Ask
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__)