ask module
This commit is contained in:
commit
6b0a6a1fc8
|
@ -0,0 +1,8 @@
|
||||||
|
.bundle/
|
||||||
|
log/*.log
|
||||||
|
pkg/
|
||||||
|
test/dummy/db/*.sqlite3
|
||||||
|
test/dummy/db/*.sqlite3-journal
|
||||||
|
test/dummy/log/*.log
|
||||||
|
test/dummy/tmp/
|
||||||
|
test/dummy/.sass-cache
|
|
@ -0,0 +1,14 @@
|
||||||
|
source "https://rubygems.org"
|
||||||
|
|
||||||
|
# Declare your gem's dependencies in ask.gemspec.
|
||||||
|
# Bundler will treat runtime dependencies like base dependencies, and
|
||||||
|
# development dependencies will be added by default to the :development group.
|
||||||
|
gemspec
|
||||||
|
|
||||||
|
# Declare any dependencies that are still in development here instead of in
|
||||||
|
# your gemspec. These might include edge Rails or gems from your path or
|
||||||
|
# Git. Remember to move these dependencies to your gemspec before releasing
|
||||||
|
# your gem to rubygems.org.
|
||||||
|
|
||||||
|
# To use debugger
|
||||||
|
# gem 'debugger'
|
|
@ -0,0 +1,20 @@
|
||||||
|
Copyright 2014 YOURNAME
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@ -0,0 +1,3 @@
|
||||||
|
= Ask
|
||||||
|
|
||||||
|
This project rocks and uses MIT-LICENSE.
|
|
@ -0,0 +1,32 @@
|
||||||
|
begin
|
||||||
|
require 'bundler/setup'
|
||||||
|
rescue LoadError
|
||||||
|
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
||||||
|
end
|
||||||
|
|
||||||
|
require 'rdoc/task'
|
||||||
|
|
||||||
|
RDoc::Task.new(:rdoc) do |rdoc|
|
||||||
|
rdoc.rdoc_dir = 'rdoc'
|
||||||
|
rdoc.title = 'Ask'
|
||||||
|
rdoc.options << '--line-numbers'
|
||||||
|
rdoc.rdoc_files.include('README.rdoc')
|
||||||
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Bundler::GemHelper.install_tasks
|
||||||
|
|
||||||
|
require 'rake/testtask'
|
||||||
|
|
||||||
|
Rake::TestTask.new(:test) do |t|
|
||||||
|
t.libs << 'lib'
|
||||||
|
t.libs << 'test'
|
||||||
|
t.pattern = 'test/**/*_test.rb'
|
||||||
|
t.verbose = false
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
task default: :test
|
|
@ -0,0 +1,2 @@
|
||||||
|
// Place all the behaviors and hooks related to the matching controller here.
|
||||||
|
// All this logic will automatically be available in application.js.
|
|
@ -0,0 +1,7 @@
|
||||||
|
/*
|
||||||
|
Place all the styles related to the matching controller here.
|
||||||
|
They will automatically be included in application.css.
|
||||||
|
*/
|
||||||
|
.table .expired{
|
||||||
|
color: #BE2E2E;
|
||||||
|
}
|
|
@ -0,0 +1,53 @@
|
||||||
|
|
||||||
|
.form-horizontal {
|
||||||
|
background-color: #fdfdfd;
|
||||||
|
padding: 2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-horizontal .control-group {
|
||||||
|
margin-bottom: 1em;
|
||||||
|
padding-bottom: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-horizontal .control-label {
|
||||||
|
font-size: 1em;
|
||||||
|
float: left;
|
||||||
|
width: 10em;
|
||||||
|
text-align: right;
|
||||||
|
line-height: 1em;
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-horizontal .control-group .controls {
|
||||||
|
margin-left: 13.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-horizontal input[type="text"],
|
||||||
|
.form-horizontal textarea,
|
||||||
|
.form-horizontal select {
|
||||||
|
height: 2.1em;
|
||||||
|
line-height: 2.1em;
|
||||||
|
width: 220px;
|
||||||
|
background-color: #FFF;
|
||||||
|
border: 1px solid #d7dadb;
|
||||||
|
border-radius: 0.3em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-horizontal textarea {
|
||||||
|
width: 97%;
|
||||||
|
height: 180px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*button*/
|
||||||
|
.form-horizontal .form-actions {
|
||||||
|
border-top: 1px solid #d7dadb;
|
||||||
|
padding: 1em 0 0 20em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*驗證碼*/
|
||||||
|
.text-error {
|
||||||
|
color: #b94a48;
|
||||||
|
font-size: 10px;
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
class Admin::AskAcknowledgementsController < OrbitAdminController
|
||||||
|
def initialize
|
||||||
|
super
|
||||||
|
@app_title = 'ask_acknowledgement'
|
||||||
|
end
|
||||||
|
|
||||||
|
def index
|
||||||
|
@ask_acknowledgements = AskAcknowledgement.first || AskAcknowledgement.create
|
||||||
|
@url = admin_ask_acknowledgement_path(@ask_acknowledgements)
|
||||||
|
end
|
||||||
|
|
||||||
|
def update
|
||||||
|
@ask_acknowledgements = AskAcknowledgement.first
|
||||||
|
@ask_acknowledgements.update_attributes(params.require(:ask_acknowledgement).permit!)
|
||||||
|
|
||||||
|
redirect_to admin_ask_acknowledgements_path, notice: t('ask.save_success')
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
|
@ -0,0 +1,45 @@
|
||||||
|
# encoding: utf-8
|
||||||
|
class Admin::AskAdminsController < OrbitAdminController
|
||||||
|
def initialize
|
||||||
|
super
|
||||||
|
@app_title = 'ask_admin'
|
||||||
|
end
|
||||||
|
|
||||||
|
def index
|
||||||
|
@ask_admin = AskAdmin.new
|
||||||
|
@table_fields = [:email]
|
||||||
|
@ask_admins = AskAdmin.order_by(sort)
|
||||||
|
end
|
||||||
|
|
||||||
|
def create
|
||||||
|
@ask_admins = AskAdmin.new(ask_admin_params)
|
||||||
|
@ask_admins.save
|
||||||
|
redirect_to admin_ask_admins_path
|
||||||
|
end
|
||||||
|
|
||||||
|
def edit
|
||||||
|
@ask_admin = AskAdmin.find(params[:id])
|
||||||
|
@table_fields = [:email]
|
||||||
|
@ask_admins = AskAdmin.order_by(sort)
|
||||||
|
|
||||||
|
@url = admin_ask_admin_path(@ask_admin)
|
||||||
|
end
|
||||||
|
|
||||||
|
def update
|
||||||
|
@ask_admin = AskAdmin.find(params[:id])
|
||||||
|
@ask_admin.update_attributes(ask_admin_params)
|
||||||
|
|
||||||
|
redirect_to admin_ask_admins_path
|
||||||
|
end
|
||||||
|
|
||||||
|
def destroy
|
||||||
|
@ask_admin = AskAdmin.find(params[:id])
|
||||||
|
@ask_admin.destroy
|
||||||
|
redirect_to admin_ask_admins_path
|
||||||
|
end
|
||||||
|
|
||||||
|
def ask_admin_params
|
||||||
|
params.require(:ask_admin).permit!
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
|
@ -0,0 +1,170 @@
|
||||||
|
# encoding: utf-8
|
||||||
|
class Admin::AsksController < OrbitAdminController
|
||||||
|
include Admin::AsksHelper
|
||||||
|
before_action ->(module_app = @app_title) { set_variables module_app }
|
||||||
|
before_action :set_askquestion, only: [:edit, :destroy]
|
||||||
|
|
||||||
|
def initialize
|
||||||
|
super
|
||||||
|
@app_title = "ask"
|
||||||
|
end
|
||||||
|
|
||||||
|
# 重新定義排序
|
||||||
|
def sort
|
||||||
|
unless params[:sort].blank?
|
||||||
|
case params[:sort]
|
||||||
|
when "status"
|
||||||
|
@sort = {:status=>params[:order]}
|
||||||
|
when "category"
|
||||||
|
@sort = {:category_id=>params[:order]}
|
||||||
|
when "start_date"
|
||||||
|
@sort = {:postdate=>params[:order]}
|
||||||
|
when "end_date"
|
||||||
|
@sort = {:deadline=>params[:order]}
|
||||||
|
when "last_modified"
|
||||||
|
@sort = {:update_user_id=>params[:order]}
|
||||||
|
when "banner"
|
||||||
|
@sort = {'banner_id'=>params[:order]}
|
||||||
|
when "banner_name"
|
||||||
|
@sort = {:title=>params[:order]}
|
||||||
|
when "effect"
|
||||||
|
@sort = {:ad_fx=>params[:order]}
|
||||||
|
when "transition_interval"
|
||||||
|
@sort = {:timeout=>params[:order]}
|
||||||
|
when "transition_speed"
|
||||||
|
@sort = {:speed=>params[:order]}
|
||||||
|
when "size"
|
||||||
|
@sort = {:height=>params[:order]}
|
||||||
|
when "link"
|
||||||
|
@sort = {:out_link=>params[:order]}
|
||||||
|
else
|
||||||
|
s = Sanitize.clean(params[:sort]).to_sym
|
||||||
|
@sort = {s=>params[:order]}
|
||||||
|
end
|
||||||
|
else
|
||||||
|
@sort = {:created_at=>'desc'}
|
||||||
|
end
|
||||||
|
@sort
|
||||||
|
end
|
||||||
|
|
||||||
|
# 重新定義分類搜尋
|
||||||
|
def filter_fields(categories)
|
||||||
|
{
|
||||||
|
:status=>[{:title=>"待處理",:id=>"is_hot"},{:title=>"已處理",:id=>"is_top"},{:title=>"轉介其他單位",:id=>"is_hidden"}],
|
||||||
|
:category=>categories.map{|c| {:title=>(c.title.blank? ? " " : c.title), :id=>c.id}}
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
# 抓取網址的狀態參數
|
||||||
|
def filter2(type)
|
||||||
|
case type
|
||||||
|
when "status"
|
||||||
|
params[:filters][:status].blank? ? [] : params[:filters][:status] rescue []
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def index
|
||||||
|
@categories = @module_app.categories
|
||||||
|
@filter_fields = filter_fields(@categories)
|
||||||
|
# 列表欄位
|
||||||
|
@table_fields = [:status, :category, :title, 'ask.name', 'ask.created_at']
|
||||||
|
# 列表排序
|
||||||
|
if filter2("status").blank?
|
||||||
|
@askquestions = AskQuestion.order_by(sort) .with_categories(filters("category"))
|
||||||
|
else
|
||||||
|
@askquestions = AskQuestion.order_by(sort) .with_categories(filters("category")) .where(:status.in => filter2("status"))
|
||||||
|
end
|
||||||
|
|
||||||
|
# 分頁
|
||||||
|
@askquestions = search_data(@askquestions,[:title]).page(params[:page]).per(10)
|
||||||
|
if request.xhr?
|
||||||
|
render :partial => "index"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def edit
|
||||||
|
@ask_question = AskQuestion.find(params[:id])
|
||||||
|
@url = admin_ask_path(@ask_question)
|
||||||
|
end
|
||||||
|
|
||||||
|
def destroy
|
||||||
|
@askquestions.destroy
|
||||||
|
redirect_to "/admin/asks"
|
||||||
|
end
|
||||||
|
|
||||||
|
def update
|
||||||
|
@ask_question = AskQuestion.find(params[:id])
|
||||||
|
@ask_question.update_attributes(params.require(:ask_question).permit!)
|
||||||
|
if @ask_question.send_email?
|
||||||
|
build_email(@ask_question)
|
||||||
|
end
|
||||||
|
|
||||||
|
redirect_to admin_asks_path, notice: t('ask.reply_success')
|
||||||
|
end
|
||||||
|
|
||||||
|
def build_email(email_er)
|
||||||
|
email = Email.new
|
||||||
|
email.save
|
||||||
|
email_er.email_id = email.id
|
||||||
|
email_er.save
|
||||||
|
|
||||||
|
@group_mail = email_er.mail
|
||||||
|
@mail_sentdate = DateTime.now
|
||||||
|
|
||||||
|
email_er.email.update_attributes(
|
||||||
|
:create_user=>current_user,
|
||||||
|
:mail_sentdate=>@mail_sentdate,
|
||||||
|
:module_app=>@module_app,
|
||||||
|
:mail_to=>@group_mail,
|
||||||
|
:mail_subject=>Site.first.title_translations["zh_tw"]+" #{t('ask.reply')}:"+email_er.title,
|
||||||
|
:template=>'admin/asks/email',
|
||||||
|
:template_data=>{
|
||||||
|
"reply" => email_er.reply
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
OrbitMailer.set_mail(email_er.email).deliver
|
||||||
|
end
|
||||||
|
|
||||||
|
def export
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
def do_export
|
||||||
|
|
||||||
|
Rails.application.config.mongoid.use_activesupport_time_zone = true
|
||||||
|
date_start = "#{params[:export]['start(1i)']}-#{params[:export]['start(2i)']}-#{params[:export]['start(3i)']}"
|
||||||
|
date_end = "#{params[:export]['end(1i)']}-#{params[:export]['end(2i)']}-#{params[:export]['end(3i)']}"
|
||||||
|
@ask_questions = AskQuestion.where(:created_at.gte => date_start.to_datetime, :created_at.lte => date_end.to_datetime+1)
|
||||||
|
|
||||||
|
csv = CSV.generate do |csv|
|
||||||
|
csv << [ t('category'),
|
||||||
|
AskQuestion.human_attribute_name(:name),
|
||||||
|
AskQuestion.human_attribute_name(:identity),
|
||||||
|
AskQuestion.human_attribute_name(:mail),
|
||||||
|
AskQuestion.human_attribute_name(:phone),
|
||||||
|
AskQuestion.human_attribute_name(:fax),
|
||||||
|
AskQuestion.human_attribute_name(:title),
|
||||||
|
AskQuestion.human_attribute_name(:content),
|
||||||
|
AskQuestion.human_attribute_name(:reply),
|
||||||
|
AskQuestion.human_attribute_name(:comment)]
|
||||||
|
@ask_questions.each do |ask_question|
|
||||||
|
csv << [ ask_question.category.title,
|
||||||
|
ask_question.name,
|
||||||
|
ask_question[:identity],
|
||||||
|
ask_question.mail,
|
||||||
|
ask_question.phone,
|
||||||
|
ask_question.fax,
|
||||||
|
ask_question.title,
|
||||||
|
ask_question.content,
|
||||||
|
ask_question.reply,
|
||||||
|
ask_question.comment ]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
send_data csv.encode('Big5'), type: 'text/csv', filename: "Questions-#{date_start}-#{date_end}.csv"
|
||||||
|
end
|
||||||
|
|
||||||
|
def set_askquestion
|
||||||
|
@askquestions = AskQuestion.find(params[:id])
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,73 @@
|
||||||
|
class AsksController < ApplicationController
|
||||||
|
def initialize
|
||||||
|
super
|
||||||
|
@app_title = 'ask'
|
||||||
|
end
|
||||||
|
|
||||||
|
def index
|
||||||
|
module_app = ModuleApp.where(:key => "ask").first
|
||||||
|
categories = module_app.categories
|
||||||
|
ask_question = AskQuestion.new
|
||||||
|
{
|
||||||
|
"ask_question" => ask_question,
|
||||||
|
"categories" => categories,
|
||||||
|
"module_app" => module_app
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
def create
|
||||||
|
@ask_question = AskQuestion.new(create_params)
|
||||||
|
if gotcha_valid? && @ask_question.save
|
||||||
|
build_email(@ask_question)
|
||||||
|
redirect_to "#{params[:referer_url]}/?method=thank"
|
||||||
|
else
|
||||||
|
redirect_to "#{params[:referer_url]}/?method=sorry"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def thank
|
||||||
|
acknowledgement = AskAcknowledgement.last
|
||||||
|
{
|
||||||
|
"acknowledgement" => acknowledgement
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
def sorry
|
||||||
|
{}
|
||||||
|
end
|
||||||
|
|
||||||
|
def build_email(email_er)
|
||||||
|
email = Email.new
|
||||||
|
email.save
|
||||||
|
email_er.email_id = email.id
|
||||||
|
email_er.save
|
||||||
|
|
||||||
|
@group_mail = email_er.email_address
|
||||||
|
@mail_sentdate = DateTime.now
|
||||||
|
|
||||||
|
email_er.email.update_attributes(
|
||||||
|
:create_user=>current_user,
|
||||||
|
:mail_sentdate=>@mail_sentdate,
|
||||||
|
:module_app=>@module_app,
|
||||||
|
:mail_to=>@group_mail,
|
||||||
|
:mail_subject=>Site.first.title_translations["zh_tw"]+" #{t('ask.new_question')}:"+email_er.title,
|
||||||
|
: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
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
OrbitMailer.set_mail(email_er.email).deliver
|
||||||
|
end
|
||||||
|
|
||||||
|
def create_params
|
||||||
|
params.require(:ask_question).permit!
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
|
@ -0,0 +1,27 @@
|
||||||
|
module Admin::AsksHelper
|
||||||
|
def page_for_askquestion(askquestion)
|
||||||
|
ann_page = nil
|
||||||
|
pages = Page.where(:module=>'ask')
|
||||||
|
|
||||||
|
pages.each do |page|
|
||||||
|
if page.categories.count ==1
|
||||||
|
if page.categories.include?(askquestion.category.id.to_s)
|
||||||
|
ann_page = page
|
||||||
|
end
|
||||||
|
end
|
||||||
|
break if !ann_page.nil?
|
||||||
|
end
|
||||||
|
|
||||||
|
if ann_page.nil?
|
||||||
|
pages.each do |page|
|
||||||
|
if page.categories.include?(askquestion.category.id.to_s)
|
||||||
|
ann_page = page
|
||||||
|
end
|
||||||
|
break if !ann_page.nil?
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
ann_page = pages.first if ann_page.nil?
|
||||||
|
request.protocol+(request.host_with_port+ann_page.url+'/'+askquestion.to_param).gsub('//','/') rescue "/"
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,6 @@
|
||||||
|
class AskAcknowledgement
|
||||||
|
include Mongoid::Document
|
||||||
|
include Mongoid::Timestamps
|
||||||
|
|
||||||
|
field :content, type: String
|
||||||
|
end
|
|
@ -0,0 +1,6 @@
|
||||||
|
class AskAdmin
|
||||||
|
include Mongoid::Document
|
||||||
|
include Mongoid::Timestamps
|
||||||
|
|
||||||
|
field :email, type: String
|
||||||
|
end
|
|
@ -0,0 +1,34 @@
|
||||||
|
class AskQuestion
|
||||||
|
include Mongoid::Document
|
||||||
|
include Mongoid::Timestamps
|
||||||
|
include ActiveModel::Validations
|
||||||
|
include OrbitCategory::Categorizable
|
||||||
|
|
||||||
|
# 欄位
|
||||||
|
field :name, type: String
|
||||||
|
field :identity, type: String
|
||||||
|
field :mail, type: String
|
||||||
|
field :phone, type: String
|
||||||
|
field :fax, type: String
|
||||||
|
field :title, type: String
|
||||||
|
field :content, type: String
|
||||||
|
|
||||||
|
field :reply, type: String
|
||||||
|
field :comment, type: String
|
||||||
|
field :status, type: String, default: "is_hot" #預設待處理
|
||||||
|
field :send_email, type: Boolean, default: false
|
||||||
|
field :email_id
|
||||||
|
|
||||||
|
validates_presence_of :name, :identity, :mail, :title, :content
|
||||||
|
|
||||||
|
def email
|
||||||
|
mail = Email.find(self.email_id) rescue nil
|
||||||
|
end
|
||||||
|
|
||||||
|
def email_address
|
||||||
|
email_address = AskAdmin.all.collect{|a| a.email} rescue []
|
||||||
|
# email_address = email_address +[self.mail] if !self.mail.blank?
|
||||||
|
email_address.flatten
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
|
@ -0,0 +1,14 @@
|
||||||
|
<div id="ask-acknowledgements">
|
||||||
|
<%= form_for @ask_acknowledgements, url: @url, html: { class: 'form-horizontal' } do |f| %>
|
||||||
|
<div class="control-group">
|
||||||
|
<%= f.label :content, t('ask.acknowledgements'), class: 'control-label' %>
|
||||||
|
<div class="controls">
|
||||||
|
<%= f.text_area :content, rows: 10 %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-actions">
|
||||||
|
<%= f.submit t('submit'), class: 'btn btn-primary' %>
|
||||||
|
<%= f.button t('cancel'), type: 'reset', class: 'btn' %>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
|
@ -0,0 +1,46 @@
|
||||||
|
<%= render 'layouts/delete_modal', delete_options: @delete_options %>
|
||||||
|
<table class="table main-list">
|
||||||
|
<thead>
|
||||||
|
<tr class="sort-header">
|
||||||
|
<% @table_fields.each do |f| %>
|
||||||
|
<%= thead(f) %>
|
||||||
|
<% end %>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<% @ask_admins.each do |a| %>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<%= a.email %>
|
||||||
|
<div class="quick-edit">
|
||||||
|
<ul class="nav nav-pills">
|
||||||
|
<% if can_edit_or_delete?(a) %>
|
||||||
|
<li><a href="/admin/ask_admins/<%=a.id.to_s%>/edit"><%= t(:edit) %></a></li>
|
||||||
|
<li><a href="#" class="delete text-error" rel="/admin/ask_admins/<%=a.id.to_s%>"><%= t(:delete_) %></a></li>
|
||||||
|
<% end %>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<% end %>
|
||||||
|
</tbody>
|
||||||
|
</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>
|
||||||
|
|
||||||
|
<% end %>
|
||||||
|
|
|
@ -0,0 +1,62 @@
|
||||||
|
<%= render 'layouts/delete_modal', delete_options: @delete_options %>
|
||||||
|
<table class="table main-list">
|
||||||
|
<thead>
|
||||||
|
<tr class="sort-header">
|
||||||
|
<% @table_fields.each do |f| %>
|
||||||
|
<%= thead(f) %>
|
||||||
|
<% end %>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<% @ask_admins.each do |a| %>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<%= a.email %>
|
||||||
|
<div class="quick-edit">
|
||||||
|
<ul class="nav nav-pills">
|
||||||
|
<% if can_edit_or_delete?(a) %>
|
||||||
|
<li><a href="/admin/ask_admins/<%=a.id.to_s%>/edit"><%= t(:edit) %></a></li>
|
||||||
|
<li><a href="#" class="delete text-error" rel="/admin/ask_admins/<%=a.id.to_s%>"><%= t(:delete_) %></a></li>
|
||||||
|
<% end %>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<% end %>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<%= 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>
|
||||||
|
|
|
@ -0,0 +1,186 @@
|
||||||
|
<% content_for :right_nav do %>
|
||||||
|
<% if !search_dom_id.nil?%>
|
||||||
|
<div class="searchClear pull-left" style="clear: left;">
|
||||||
|
<form id="module-search-form">
|
||||||
|
<input type="text" id="filter-input" class="search-query input-medium" placeholder="<%= t(:search_) %>" value="<%=params[:keywords]%>">
|
||||||
|
</form>
|
||||||
|
<img id="search-preloader" src="/assets/preloader.gif" style="height: 40px; position: absolute; left: 220px; top: -5px; display:none;">
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<ul class="nav nav-pills filter-nav pull-right">
|
||||||
|
<% fields.keys.each do |field| %>
|
||||||
|
<li class="accordion-group">
|
||||||
|
<div class="accordion-heading">
|
||||||
|
<a href="#collapse-<%= field %>" data-toggle="collapse" data-parent="#filter" class="accordion-toggle"><%= t(field) %></a>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
<% end %>
|
||||||
|
</ul>
|
||||||
|
<div class="filter-group accordion-group">
|
||||||
|
<% fields.keys.each do |field| %>
|
||||||
|
<div class="accordion-body collapse" id="collapse-<%= field %>">
|
||||||
|
<div class="accordion-inner pagination-right" data-toggle="buttons-checkbox">
|
||||||
|
<% fields[field].each do |val| %>
|
||||||
|
<%= link_to (val[:title].blank? ? "" : t(val[:title])), "#", :onclick => "filter.addFilter('filters[#{field}][]=#{val[:id]}')", :class => "btn btn-small #{is_filter_active?(field, val[:id])}", :id => "filter_#{val[:id]}" %>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
<div class="filter-clear">
|
||||||
|
<a href="#" onclick="filter.clearFilter();" class="btn btn-link btn-small"><i class="icons-cycle"></i> <%= t(:clear) %></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
<script type="text/javascript">
|
||||||
|
<% if !search_dom_id.nil?%>
|
||||||
|
var interval = 0;
|
||||||
|
var keyword;
|
||||||
|
var searchLock=false;
|
||||||
|
|
||||||
|
$("#filter-input").bind("input", function() {queueSearch();});
|
||||||
|
$("#module-search-form").submit(function(){queueSearch(); return false; });
|
||||||
|
|
||||||
|
var params = function(key){
|
||||||
|
var result = {};
|
||||||
|
var datas = window.location.search ? window.location.search.replace('?','').split('&') : []
|
||||||
|
datas.map(function(data){
|
||||||
|
tmp = data.split("=");
|
||||||
|
tmp[1] = decodeURIComponent(tmp[1]);
|
||||||
|
if(key){
|
||||||
|
if(tmp[0]==key){
|
||||||
|
if(tmp[0].indexOf('[]')>=0){
|
||||||
|
if(!Array.isArray(result)) result = [];
|
||||||
|
result.push(tmp[1]);
|
||||||
|
}else{
|
||||||
|
result = tmp[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
if(tmp[0].indexOf('[]')>=0){
|
||||||
|
if(typeof(result[tmp[0]]) == "undefined") result[tmp[0]] = [];
|
||||||
|
result[tmp[0]].push(tmp[1]);
|
||||||
|
}else{
|
||||||
|
result[tmp[0]] = tmp[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
var queueSearch = function(){
|
||||||
|
if($("#filter-input").val()!=keyword){
|
||||||
|
keyword = $("#filter-input").val();
|
||||||
|
interval=500;
|
||||||
|
if(!searchLock) moduleSearch();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var moduleSearch = function(){
|
||||||
|
$("#search-preloader").fadeIn();
|
||||||
|
searchLock = true;
|
||||||
|
if(interval==0){
|
||||||
|
url = document.URL;
|
||||||
|
url = url.replace('#','');
|
||||||
|
if(url.indexOf("keywords=")>=0){
|
||||||
|
url = url.replace("keywords="+encodeURIComponent(params("keywords")),"keywords="+keyword)
|
||||||
|
}else{
|
||||||
|
url = (url.indexOf("?")>=0) ? url+"&keywords="+keyword : url+"?keywords="+keyword
|
||||||
|
}
|
||||||
|
url = url.replace("page="+params("page"),"page=1");
|
||||||
|
|
||||||
|
history.pushState(null, null, url);
|
||||||
|
$.get(url,function(data){
|
||||||
|
searchLock = false;
|
||||||
|
$("#<%= search_dom_id %>").html(data);
|
||||||
|
bindPagination();
|
||||||
|
$("#search-preloader").fadeOut();
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
interval -= 100;
|
||||||
|
setTimeout(moduleSearch,100);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
var bindPagination = function(){
|
||||||
|
$(".pagination a").click(function(){
|
||||||
|
filter.updateTable($(this).attr('href'),false,true);
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var Filter = function(dom){
|
||||||
|
var self = this;
|
||||||
|
var makeFilters = function(){
|
||||||
|
return (window.location.search ? window.location.search.replace('?','').split('&') : []);
|
||||||
|
}
|
||||||
|
var filters = makeFilters(),
|
||||||
|
dom = $(dom),
|
||||||
|
mainUrl = window.location.pathname;
|
||||||
|
this.updateTable = function(url, goback, is_pagination){
|
||||||
|
update = true;
|
||||||
|
xurl = (url == null ? ( filters.length ? mainUrl + "?" + filters.join('&') : mainUrl ) : url);
|
||||||
|
$.ajax({
|
||||||
|
url : xurl,
|
||||||
|
type : "get",
|
||||||
|
dataType : "html"
|
||||||
|
}).done(function(data){
|
||||||
|
if(is_pagination){
|
||||||
|
history.pushState(null, null, decodeURIComponent(xurl));
|
||||||
|
}else{
|
||||||
|
if(!goback) history.replaceState(null, null, decodeURIComponent(xurl));
|
||||||
|
}
|
||||||
|
filters = makeFilters();
|
||||||
|
dom.html(data);
|
||||||
|
bindPagination();
|
||||||
|
update = false;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
this.addFilter = function(filter){
|
||||||
|
filters = makeFilters();
|
||||||
|
$.each(filters,function(idx,data){
|
||||||
|
if(typeof(data)=="undefined") return true;
|
||||||
|
if(data.indexOf("page=")>-1) filters.splice(idx,1);
|
||||||
|
});
|
||||||
|
|
||||||
|
if( (index = filters.indexOf(filter) ) > -1){
|
||||||
|
mainUrl = mainUrl.replace(filter,'');
|
||||||
|
filters.splice(index,1);
|
||||||
|
}else{
|
||||||
|
filters.push(filter);
|
||||||
|
}
|
||||||
|
|
||||||
|
self.updateTable();
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
this.clearFilter = function(){
|
||||||
|
$(".filter-group a.active").removeClass("active");
|
||||||
|
filters = [];
|
||||||
|
self.updateTable();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
window.onpopstate = function(event){
|
||||||
|
if(!update){
|
||||||
|
$("#filter-input").val( $.isEmptyObject(params('keywords')) ? "" : params('keywords') );
|
||||||
|
self.updateTable(document.location, true);
|
||||||
|
$(".filter-group .btn-small").removeClass('active');
|
||||||
|
$.each(document.location.search.split('&'),function(key,filter){
|
||||||
|
if(filter.split('=')[0].indexOf("keywords")>=0) return true;
|
||||||
|
$('#filter_'+filter.split('=')[1]).addClass('active');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
update = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var update = false;
|
||||||
|
var filter;
|
||||||
|
$(document).ready(function(){
|
||||||
|
filter = new Filter("#<%= search_dom_id %>");
|
||||||
|
bindPagination();
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -0,0 +1,59 @@
|
||||||
|
<% content_for :page_specific_css do %>
|
||||||
|
<%= stylesheet_link_tag "lib/main-forms" %>
|
||||||
|
<%= stylesheet_link_tag "lib/main-list" %>
|
||||||
|
<% end %>
|
||||||
|
<% content_for :page_specific_javascript do %>
|
||||||
|
<%= javascript_include_tag "lib/module-area" %>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<div class="input-area">
|
||||||
|
<div id="ask-asks">
|
||||||
|
<table class="table">
|
||||||
|
<tr>
|
||||||
|
<td><%= AskQuestion.human_attribute_name(:name) %>:<%= @ask_question.name %></td>
|
||||||
|
<td><%= AskQuestion.human_attribute_name(:identity) %>:<%= @ask_question[:identity] %></td>
|
||||||
|
<td><%= AskQuestion.human_attribute_name(:mail) %>:<%= @ask_question.mail %></td>
|
||||||
|
<td><%= AskQuestion.human_attribute_name(:phone) %>:<%= @ask_question.phone %></td>
|
||||||
|
<td><%= AskQuestion.human_attribute_name(:fax) %>:<%= @ask_question.fax %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="5"><%= AskQuestion.human_attribute_name(:title) %>:<%= @ask_question.title %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="5"><%= AskQuestion.human_attribute_name(:content) %>:<br/><%= @ask_question.content %></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td colspan="5">
|
||||||
|
<%= f.label :reply %>
|
||||||
|
<br/> <%= f.text_area :reply, rows: 10, style: 'width: 500px' %>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="5">
|
||||||
|
<%= f.label :comment %>
|
||||||
|
<br/> <%= f.text_field :comment, style: 'width: 500px' %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="5"><%= f.label :status %> <%= f.select :status, [
|
||||||
|
['待處理', 'is_hot'],
|
||||||
|
['已處理', 'is_top'],
|
||||||
|
['轉介其他單位', 'is_hidden']
|
||||||
|
] %></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td colspan="5">
|
||||||
|
<%= f.label :send_email %><%= f.radio_button :send_email, 1, checked: @ask_question.send_email? %><%= t('ask.yes') %>
|
||||||
|
|
||||||
|
<%= f.radio_button :send_email, 0, checked: !@ask_question.send_email? %><%= t('ask.no') %>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-actions">
|
||||||
|
<%= f.submit t('submit'), class: 'btn btn-primary' %>
|
||||||
|
<%= f.button t('cancel'), type: 'reset', class: 'btn' %>
|
||||||
|
</div>
|
|
@ -0,0 +1,44 @@
|
||||||
|
<table class="table main-list">
|
||||||
|
<thead>
|
||||||
|
<tr class="sort-header">
|
||||||
|
<% @table_fields.each do |f| %>
|
||||||
|
<%= thead(f) %>
|
||||||
|
<% end %>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<% @askquestions.each do |b| %>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<% if b.status == 'is_hot' %>
|
||||||
|
<span class='label label-important'><%= t('待處理') %></span>
|
||||||
|
<% elsif b.status == 'is_top' %>
|
||||||
|
<span class='label label-success'><%= t('已處理') %></span>
|
||||||
|
<% elsif b.status == 'is_hidden' %>
|
||||||
|
<span class='label'><%= t('轉介其他單位') %></span>
|
||||||
|
<% end %>
|
||||||
|
</td>
|
||||||
|
<td><%= b.category.title %></td>
|
||||||
|
<td>
|
||||||
|
<%= b.title %>
|
||||||
|
<div class="quick-edit">
|
||||||
|
<ul class="nav nav-pills">
|
||||||
|
<% if can_edit_or_delete?(b) %>
|
||||||
|
<li><a href="/admin/asks/<%=b.id.to_s%>/edit"><%= t(:edit) %></a></li>
|
||||||
|
<li><a href="#" class="delete text-error" rel="/admin/asks/<%=b.id.to_s%>"><%= t(:delete_) %></a></li>
|
||||||
|
<% end %>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td><%= b.name %></td>
|
||||||
|
<td><%= format_value b.created_at %></td>
|
||||||
|
</tr>
|
||||||
|
<% end %>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<%=
|
||||||
|
content_tag :div, class: "bottomnav clearfix" do
|
||||||
|
content_tag :div, paginate(@askquestions), class: "pagination pagination-centered"
|
||||||
|
end
|
||||||
|
%>
|
|
@ -0,0 +1,5 @@
|
||||||
|
<%= form_for @ask_question, url: @url, html: { class: 'form-horizontal main-forms previewable' } do |f| %>
|
||||||
|
<fieldset>
|
||||||
|
<%= render :partial => 'form', locals: {f: f} %>
|
||||||
|
</fieldset>
|
||||||
|
<% end %>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
<%= @data['reply'] %>
|
||||||
|
</p>
|
||||||
|
<br />
|
||||||
|
<p>此為系統自動發信,請勿直接回覆</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,21 @@
|
||||||
|
<div id="asks-export">
|
||||||
|
<%= form_tag export_admin_asks_path, method: 'post' do |f| %>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td><%= t('date_') %></td>
|
||||||
|
<td><%= date_select 'export', :start %> <%= t('ask.to') %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td><%= date_select 'export', :end %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="2">
|
||||||
|
<div class="form-actions">
|
||||||
|
<%= submit_tag t('submit'), class: 'btn btn-primary' %>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
|
@ -0,0 +1,6 @@
|
||||||
|
<%= render_filter @filter_fields, "index_table" %>
|
||||||
|
<span id="index_table">
|
||||||
|
<%= render 'index'%>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<%= render 'layouts/delete_modal', delete_options: @delete_options %>
|
|
@ -0,0 +1,36 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1><%= @data['title'] %></h1>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td><%= AskQuestion.human_attribute_name(:name) %>:</td>
|
||||||
|
<td><%= @data['name'] %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><%= AskQuestion.human_attribute_name(:identity) %>:</td>
|
||||||
|
<td><%= @data['identity'] %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><%= AskQuestion.human_attribute_name(:mail) %>:</td>
|
||||||
|
<td><%= @data['mail'] %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><%= AskQuestion.human_attribute_name(:phone) %>:</td>
|
||||||
|
<td><%= @data['phone'] %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><%= AskQuestion.human_attribute_name(:fax) %>:</td>
|
||||||
|
<td><%= @data['fax'] %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><%= AskQuestion.human_attribute_name(:content) %>:</td>
|
||||||
|
<td><%= @data['content'] %></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<p>此為系統自動發信,請勿直接回覆</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,126 @@
|
||||||
|
<% data = action_data
|
||||||
|
@ask_question = data["ask_question"]
|
||||||
|
@categories = data["categories"]
|
||||||
|
@module_app = data["module_app"]
|
||||||
|
%>
|
||||||
|
|
||||||
|
<%= javascript_include_tag 'validator' %>
|
||||||
|
<link href="/assets/ask/ask.css" media="screen" rel="stylesheet">
|
||||||
|
<div id="new-ask-question" class="ask-question">
|
||||||
|
<%= form_for @ask_question, url: asks_path, html: {class: 'form-horizontal'} do |f| %>
|
||||||
|
<!-- Category -->
|
||||||
|
<div class="control-group">
|
||||||
|
<%= f.label :ask_category_id, class: 'control-label required' %>
|
||||||
|
<div class="controls">
|
||||||
|
<%= f.select :category_id, @categories.collect{|t| [ t.title, t.id ]} %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- 姓名 -->
|
||||||
|
<div class="control-group">
|
||||||
|
<%= f.label :name, class: 'control-label required' %>
|
||||||
|
<div class="controls">
|
||||||
|
<%= f.text_field :name, data: {"fv-validation" => "required;", "fv-messages" => "必填欄位;"} %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- 身分 -->
|
||||||
|
<div class="control-group">
|
||||||
|
<%= f.label :identity, class: 'control-label required' %>
|
||||||
|
<div class="controls">
|
||||||
|
<%= f.select :identity, options_for_select( [t('ask.teacher'),
|
||||||
|
t('ask.stuff'),
|
||||||
|
t('ask.student'),
|
||||||
|
t('ask.schoolfellow'),
|
||||||
|
t('ask.others')].map{|i| [i, i]} ) %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- Email -->
|
||||||
|
<div class="control-group">
|
||||||
|
<%= f.label :mail, class: 'control-label required' %>
|
||||||
|
<div class="controls">
|
||||||
|
<%= f.text_field :mail, data: {"fv-validation" => "required;check_email;", "fv-messages" => "必填欄位;Email不正確;"} %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- 聯絡電話 -->
|
||||||
|
<div class="control-group">
|
||||||
|
<%= f.label :phone, class: 'control-label' %>
|
||||||
|
<div class="controls">
|
||||||
|
<%= f.text_field :phone %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- 傳真 -->
|
||||||
|
<div class="control-group">
|
||||||
|
<%= f.label :fax, class: 'control-label' %>
|
||||||
|
<div class="controls">
|
||||||
|
<%= f.text_field :fax %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- 主旨 -->
|
||||||
|
<div class="control-group">
|
||||||
|
<%= f.label :title, class: 'control-label required' %>
|
||||||
|
<div class="controls">
|
||||||
|
<%= f.text_field :title, data: {"fv-validation" => "required;", "fv-messages" => "必填欄位;"} %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- 內容 -->
|
||||||
|
<div class="control-group">
|
||||||
|
<%= f.label :content, class: 'control-label required' %>
|
||||||
|
<div class="controls">
|
||||||
|
<%= f.text_area :content, rows: 8, class: 'input-xlarge' %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- 驗證碼 -->
|
||||||
|
<div class="control-group">
|
||||||
|
<%= f.label :recaptcha, class: 'control-label' %>
|
||||||
|
<div class="controls">
|
||||||
|
<%= gotcha_error %>
|
||||||
|
<%= gotcha %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-actions">
|
||||||
|
<input type="hidden" name="referer_url" value="<%= request.original_url.split(request.env["HTTP_HOST"]).last %>">
|
||||||
|
<%= f.submit t('submit'), class: 'btn btn-primary', :id => 'button-mail' %>
|
||||||
|
<%= f.button t('cancel'), type: 'reset', class: 'btn' %>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script type='text/javascript'>
|
||||||
|
// $(function(){
|
||||||
|
// $("#button-mail").click(function(){
|
||||||
|
// if( $("#ask_question_name").val()!='' ) $("#ask_question_name").css('border','');
|
||||||
|
// if( $("#ask_question_email").val()!='' ) $("#ask_question_email").css('border','');
|
||||||
|
// if( $("#ask_question_title").val()!='' ) $("#ask_question_title").css('border','');
|
||||||
|
// if( $("#ask_question_content").val()!='' ) $("#ask_question_content").css('border','');
|
||||||
|
|
||||||
|
// if( $("#ask_question_name").val()=='' ) $("#ask_question_name").css('border','1px solid #F00');
|
||||||
|
// if( $("#ask_question_email").val()=='' ) $("#ask_question_email").css('border','1px solid #F00');
|
||||||
|
// if( $("#ask_question_title").val()=='' ) $("#ask_question_title").css('border','1px solid #F00');
|
||||||
|
// if( $("#ask_question_content").val()=='' ) $("#ask_question_content").css('border','1px solid #F00');
|
||||||
|
// });
|
||||||
|
|
||||||
|
$('#new-ask-question .required').each(function() {
|
||||||
|
$(this).text('*' + $(this).text());
|
||||||
|
});
|
||||||
|
|
||||||
|
// $('#new-ask-question form') .submit(function() {
|
||||||
|
// $.post($(this).attr('action'), $(this).serializeArray());
|
||||||
|
// 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){
|
||||||
|
|
||||||
|
// }
|
||||||
|
})
|
||||||
|
</script>
|
|
@ -0,0 +1,8 @@
|
||||||
|
<link href="/assets/ask/ask.css" media="screen" rel="stylesheet">
|
||||||
|
<div class="form-horizontal">
|
||||||
|
<p>發問失敗,請重新發問!</p>
|
||||||
|
<p>Failed to ask questions, please re-ask!</p>
|
||||||
|
<div class="form-actions">
|
||||||
|
<input name="goback" type="button" class="btn" onclick="window.history.go(-1);" onkeypress="window.history.go(-1);" value="回上一頁">
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -0,0 +1,7 @@
|
||||||
|
<% data = action_data
|
||||||
|
@acknowledgement = data["acknowledgement"]
|
||||||
|
%>
|
||||||
|
<link href="/assets/ask/ask.css" media="screen" rel="stylesheet">
|
||||||
|
<div class="form-horizontal">
|
||||||
|
<%= @acknowledgement[:content].gsub(/[(\n)(\r)]/, "\n" => "<br/>", "\r" => "" ).html_safe %>
|
||||||
|
</div>
|
|
@ -0,0 +1,21 @@
|
||||||
|
$:.push File.expand_path("../lib", __FILE__)
|
||||||
|
|
||||||
|
# Maintain your gem's version:
|
||||||
|
require "ask/version"
|
||||||
|
|
||||||
|
# Describe your gem and declare its dependencies:
|
||||||
|
Gem::Specification.new do |s|
|
||||||
|
s.name = "ask"
|
||||||
|
s.version = Ask::VERSION
|
||||||
|
s.authors = ["RulingDigital"]
|
||||||
|
s.email = ["orbit@rulingcom.com"]
|
||||||
|
s.homepage = "http://www.rulingcom.com"
|
||||||
|
s.summary = "Ask for orbit"
|
||||||
|
s.description = "Ask for orbit"
|
||||||
|
s.license = "MIT"
|
||||||
|
|
||||||
|
s.files = Dir["{app,config,db,lib}/**/*", "MIT-LICENSE", "Rakefile", "README.rdoc"]
|
||||||
|
s.test_files = Dir["test/**/*"]
|
||||||
|
|
||||||
|
s.add_dependency "gotcha"
|
||||||
|
end
|
|
@ -0,0 +1,4 @@
|
||||||
|
#!/usr/bin/env ruby
|
||||||
|
APP_PATH = File.expand_path('../../config/application', __FILE__)
|
||||||
|
require_relative '../config/boot'
|
||||||
|
require 'rails/commands'
|
|
@ -0,0 +1,24 @@
|
||||||
|
en:
|
||||||
|
ask:
|
||||||
|
ask: Ask
|
||||||
|
all_articles: All
|
||||||
|
export: Export
|
||||||
|
reply: Reply
|
||||||
|
reply_success: Reply success
|
||||||
|
to: To
|
||||||
|
widget:
|
||||||
|
index: Form
|
||||||
|
save_success: Successfully saved
|
||||||
|
teacher: Teacher
|
||||||
|
stuff: Stuff
|
||||||
|
student: Student
|
||||||
|
schoolfellow: Schoolfellow
|
||||||
|
others: Others
|
||||||
|
acknowledgements: Thank You
|
||||||
|
admin: Administrator
|
||||||
|
new_question: New question
|
||||||
|
pending: Pending
|
||||||
|
mongoid:
|
||||||
|
attributes:
|
||||||
|
ask_question:
|
||||||
|
ask_category_id: Ask Category
|
|
@ -0,0 +1,48 @@
|
||||||
|
zh_tw:
|
||||||
|
module_name:
|
||||||
|
ask: 發問
|
||||||
|
recaptcha:
|
||||||
|
errors:
|
||||||
|
verification_failed: 驗證碼錯誤
|
||||||
|
ask:
|
||||||
|
name: 發問人
|
||||||
|
created_at: 發問時間
|
||||||
|
status: 狀態
|
||||||
|
ask: 發問
|
||||||
|
all_articles: 全部
|
||||||
|
exports: 匯出
|
||||||
|
reply: 問題回覆
|
||||||
|
reply_success: 回覆成功
|
||||||
|
to: 至
|
||||||
|
yes: 是
|
||||||
|
no: 否
|
||||||
|
widget:
|
||||||
|
index: 表單
|
||||||
|
save_success: 儲存成功
|
||||||
|
teacher: 教師
|
||||||
|
stuff: 職員
|
||||||
|
student: 學生
|
||||||
|
schoolfellow: 校友
|
||||||
|
others: 其他
|
||||||
|
acknowledgements: 感謝詞
|
||||||
|
admins: 管理者
|
||||||
|
new_question: 新的發問
|
||||||
|
pending: 待處理
|
||||||
|
|
||||||
|
mongoid:
|
||||||
|
attributes:
|
||||||
|
ask_question:
|
||||||
|
ask_category_id: 諮詢類別
|
||||||
|
recaptcha: 驗證碼
|
||||||
|
name: 姓名
|
||||||
|
identity: 身份
|
||||||
|
mail: Email
|
||||||
|
phone: 聯絡電話
|
||||||
|
fax: 傳真
|
||||||
|
title: 主旨
|
||||||
|
reply: 回覆
|
||||||
|
created_at: 日期
|
||||||
|
content: 內容
|
||||||
|
comment: 備註
|
||||||
|
status: 狀態
|
||||||
|
send_email: 是否回信
|
|
@ -0,0 +1,19 @@
|
||||||
|
Rails.application.routes.draw do
|
||||||
|
locales = Site.first.in_use_locales rescue I18n.available_locales
|
||||||
|
|
||||||
|
scope "(:locale)", locale: Regexp.new(locales.join("|")) do
|
||||||
|
namespace :admin do #backend
|
||||||
|
resources :asks do
|
||||||
|
collection do
|
||||||
|
get 'export'
|
||||||
|
post 'export', to: 'asks#do_export'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
resources :ask_acknowledgements
|
||||||
|
resources :ask_admins
|
||||||
|
end
|
||||||
|
|
||||||
|
resources :asks #fronted
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
require "ask/engine"
|
||||||
|
|
||||||
|
module Ask
|
||||||
|
end
|
|
@ -0,0 +1,66 @@
|
||||||
|
module Ask
|
||||||
|
class Engine < ::Rails::Engine
|
||||||
|
initializer "ask" do
|
||||||
|
OrbitApp.registration "Ask", :type => "ModuleApp" do
|
||||||
|
module_label "ask.ask"
|
||||||
|
base_url File.expand_path File.dirname(__FILE__)
|
||||||
|
# widget_methods ["widget","widget1"]
|
||||||
|
# widget_settings [{"data_count"=>10}]
|
||||||
|
#taggable "AskQuestion"
|
||||||
|
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_articles',
|
||||||
|
:link_path=>"admin_asks_path" ,
|
||||||
|
:priority=>1,
|
||||||
|
:active_for_action=>{'admin/asks'=>'index'},
|
||||||
|
:available_for => 'users'
|
||||||
|
context_link 'categories',
|
||||||
|
:link_path=>"admin_module_app_categories_path" ,
|
||||||
|
:link_arg=>"{:module_app_id=>ModuleApp.find_by(:key=>'ask').id}",
|
||||||
|
:priority=>2,
|
||||||
|
:active_for_action=>{'admin/asks'=>'categories'},
|
||||||
|
:active_for_category => 'Ask',
|
||||||
|
:available_for => 'managers'
|
||||||
|
context_link 'ask.acknowledgements',
|
||||||
|
:link_path=>"admin_ask_acknowledgements_path" ,
|
||||||
|
:priority=>3,
|
||||||
|
:active_for_action=>{'admin/asks'=>'acknowledgements'},
|
||||||
|
:available_for => 'managers'
|
||||||
|
context_link 'ask.admins',
|
||||||
|
:link_path=>"admin_ask_admins_path" ,
|
||||||
|
:priority=>4,
|
||||||
|
:active_for_action=>{'admin/asks'=>'admins'},
|
||||||
|
:available_for => 'managers'
|
||||||
|
context_link 'ask.exports',
|
||||||
|
:link_path=>"export_admin_asks_path" ,
|
||||||
|
:priority=>5,
|
||||||
|
: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
|
|
@ -0,0 +1,3 @@
|
||||||
|
module Ask
|
||||||
|
VERSION = "0.0.1"
|
||||||
|
end
|
|
@ -0,0 +1,4 @@
|
||||||
|
# desc "Explaining what the task does"
|
||||||
|
# task :ask do
|
||||||
|
# # Task goes here
|
||||||
|
# end
|
Loading…
Reference in New Issue