Compare commits

..
Author SHA1 Message Date
Spen c9aedb3598 ntue mail cron & log filter fix 2013-07-02 14:47:10 +08:00
Spen 1cc1c6856e ntue announcement email reminder fix and gemfile tinymce fix 2013-07-02 14:33:41 +08:00
Spen 77c0fdffd2 ntue site sso fix 2013-06-26 18:07:13 +08:00
Spen 3931f089c0 announcement email eminder and site sso 2013-06-26 18:07:13 +08:00
Spen 468fba93a4 email send cron & send logs for any apps 2013-06-26 18:07:13 +08:00
230 changed files with 631 additions and 2925 deletions

No files matched your search

+3 -4
View File
@@ -1,6 +1,8 @@
source 'http://rubygems.org'
gem 'rails', "~> 3.2.9"
gem 'savon', '~> 2.2.0'
gem "brakeman"
gem 'mime-types'
@@ -15,9 +17,6 @@ gem 'jquery-rails', '2.1.4'
gem 'jquery-ui-rails'
gem "select2-rails", '3.3.1'
gem 'kaminari', :git => 'git://github.com/amatsuda/kaminari.git'
gem "acts_as_unvlogable"
gem 'youtube_it'
gem 'gotcha'
# gem "memcached", "~> 1.4.3"
# gem "memcache-client"
@@ -49,7 +48,7 @@ gem 'sinatra'
gem 'sprockets'
gem 'social-share-button'
gem 'tinymce-rails', '3.5.8.3'
gem 'tinymce-rails', "~> 3.5.8"
gem 'therubyracer' if RUBY_PLATFORM.downcase.include?("linux")
gem 'libv8', '~> 3.11.8' if RUBY_PLATFORM.downcase.include?("linux")
gem 'mongoid-encryptor', :require => 'mongoid/encryptor'
+1 -5
View File
@@ -40,13 +40,9 @@ class DefaultWidgetController< OrbitWidgetController
def default_widget
@search = params["search_query"].blank? ? false : true
if !params[:id].blank? and !params["clicked_field_name"].blank?
if !params[:id].blank?
clicked_field_name = params["clicked_field_name"].to_sym
redirect_to eval("#{@page_part.module_app.widget_fields_link_method[clicked_field_name][:method]}('#{params[:id]}', {inner: #{params[:inner] || true}})")
elsif !params[:id].blank? and params["preview"]
clicked_field_name = :title
@preview_pages = @page_part.module_app.widget_fields_link_method.find_all{|t| t[1].has_key?(:preview)}.collect{|t| t[0]}
redirect_to eval("#{@page_part.module_app.widget_fields_link_method[clicked_field_name][:method]}('#{params[:id]}', {preview: true,inner: #{params[:inner] || true},clicked_field_name: '#{@preview_pages.first.to_s}'})")
else
@tag_class = nil
@default_widget = @page_part.module_app.get_default_widget
@@ -7,10 +7,4 @@ class OrbitFrontendComponentController< ApplicationController
@app_title = request.fullpath.split('/')[2]
end
def delay_impressionist(item)
user_id = current_user.nil? ? nil : current_user.id
Resque.enqueue(DelayedImpressionist,:request=>DelayImpressionistRequest.new(request),:obj=>item,:class=>item.class.to_s,:controller_name=>controller_name,:action_name=>action_name,:user=>user_id)
end
end
+30 -34
View File
@@ -44,13 +44,29 @@ class PagesController < ApplicationController
# render :file => "#{Rails.root}/public/404.html", :status => :not_found
#end
end
def convert_array_param(key,array)
array.collect{|t| "#{key}[]=#{t}"}.join("&")
end
def index_from_link
url = "/#{@item.path}"
options = ''
options << "#{options.blank? ? '?' : '&'}page_main=#{params[:page_main]}" unless params[:page_main].blank?
options << "#{options.blank? ? '?' : '&'}#{convert_array_param('category_id', params[:category_id])}" unless params[:category_id].blank?
options << "#{options.blank? ? '?' : '&'}#{convert_array_param('tag_id', params[:tag_id])}" unless params[:tag_id].blank?
if params[:category_id].is_a? Array
options << "#{options.blank? ? '?' : '&'}#{convert_array_param('category_id',params[:category_id])}" unless params[:category_id].blank?
elsif params[:category_id].is_a? String
options << "#{options.blank? ? '?' : '&'}category_id=#{params[:category_id]}" unless params[:category_id].blank?
end
if params[:tag_id].is_a? Array
options << "#{options.blank? ? '?' : '&'}#{convert_array_param('tag_id',params[:tag_id])}" unless params[:tag_id].blank?
elsif params[:category_id].is_a? String
options << "#{options.blank? ? '?' : '&'}tag_id=#{params[:tag_id]}" unless params[:tag_id].blank?
end
options << "#{options.blank? ? '?' : '&'}search_query=#{params[:search_query]}" unless params[:search_query].blank?
options << "#{options.blank? ? '?' : '&'}name=#{params[:name]}" unless params[:name].blank?
uri = URI::escape(url + options)
@@ -62,8 +78,8 @@ class PagesController < ApplicationController
url = "/#{@item.path}"
options = ''
options << "#{options.blank? ? '?' : '&'}id=#{params[:id]}" unless params[:id].blank?
options << "#{options.blank? ? '?' : '&'}#{convert_array_param('category_id', params[:category_id])}" unless params[:category_id].blank?
options << "#{options.blank? ? '?' : '&'}#{convert_array_param('tag_id', params[:tag_id])}" unless params[:tag_id].blank?
options << "#{options.blank? ? '?' : '&'}category_id=#{params[:category_id]}" unless params[:category_id].blank?
options << "#{options.blank? ? '?' : '&'}tag_id=#{params[:tag_id]}" unless params[:tag_id].blank?
options << "#{options.blank? ? '?' : '&'}preview=#{params[:preview]}" unless params[:preview].blank?
options << "#{options.blank? ? '?' : '&'}controller_action=#{params[:controller_action]}" unless params[:controller_action].blank?
options << "#{options.blank? ? '?' : '&'}clicked_field_name=#{params[:clicked_field_name]}" unless params[:clicked_field_name].blank?
@@ -82,43 +98,23 @@ class PagesController < ApplicationController
elsif params[:same_page_id]
@item = Item.find(params[:same_page_id])
else
category_ids = Array(params[:category_id]) unless params[:category_id].nil?
tag_ids = Array(params[:tag_id]) unless params[:tag_id].nil?
category_ids = params[:category_id].is_a?(Array) ? params[:category_id] : [params[:category_id]]
tag_ids = params[:tag_id].is_a?(Array) ? params[:tag_id] : [params[:tag_id]]
module_app = ModuleApp.first(:conditions => {:key => params[:app_name]})
default_query = { is_published: true, module_app_id: module_app.id, :app_frontend_url.in => [params[:app_action], 'default_widget'] }
specific_categories = { :category => category_ids }
in_categories = { :category.in => category_ids }
nil_categories = { :category.in => [nil, []] }
specific_tags = { :tag => tag_ids }
in_tags = { :tag.in => tag_ids }
nil_tags = { :tag.in => [nil, []] }
if !category_ids.blank? && !tag_ids.blank?
@item = Item.where(default_query.merge(specific_categories).merge(specific_tags)).first
@item = Item.where(default_query.merge(specific_categories).merge(in_tags)).first unless @item
@item = Item.where(default_query.merge(specific_categories).merge(nil_tags)).first unless @item
@item = Item.where(default_query.merge(specific_tags).merge(in_categories)).first unless @item
@item = Item.where(default_query.merge(specific_tags).merge(nil_categories)).first unless @item
@item = Item.where(default_query.merge(in_categories).merge(in_tags)).first unless @item
@item = Item.where(default_query.merge(in_categories).merge(nil_tags)).first unless @item
@item = Item.where(default_query.merge(in_tags).merge(nil_categories)).first unless @item
@item = Item.first(:conditions => {:module_app_id => module_app.id, :app_frontend_url => params[:app_action], :category.in => category_ids, :tag.in => tag_ids})
@item = Item.first(:conditions => {:module_app_id => module_app.id, :app_frontend_url => params[:app_action], :category.in => category_ids, :tag.in => [nil, []]}) unless @item
elsif !category_ids.blank?
@item = Item.where(default_query.merge(specific_categories).merge(nil_tags)).first
@item = Item.where(default_query.merge(specific_categories)).first unless @item
@item = Item.where(default_query.merge(in_categories).merge(nil_tags)).first unless @item
@item = Item.where(default_query.merge(in_categories)).first unless @item
@item = Item.where(module_app_id: module_app.id, app_frontend_url: params[:app_action], :category.in => category_ids).any_in(tag: [nil, []]).first
elsif !tag_ids.blank?
@item = Item.where(default_query.merge(specific_tags).merge(nil_categories)).first
@item = Item.where(default_query.merge(specific_tags)).first unless @item
@item = Item.where(default_query.merge(in_tags).merge(nil_categories)).first unless @item
@item = Item.where(default_query.merge(in_tags)).first unless @item
@item = Item.where(module_app_id: module_app.id, app_frontend_url: params[:app_action], :tag.in => tag_ids).any_in(category: [nil, []]).first
end
@item = Item.find(params[:orig_page]) unless @item || params[:orig_page].blank?
@item = Item.where(default_query.merge(nil_categories).merge(nil_tags)).first unless @item
@item = Item.where(default_query).first unless @item
@item = Item.where(module_app_id: module_app.id, app_frontend_url: params[:app_action]).all_of("tag" => {"$in" => [nil, []]},"category" => { "$in" => [nil, []]}).first unless @item
@item = Item.where(module_app_id: module_app.id, app_frontend_url: 'default_widget').first unless @item
@item = Item.where(module_app_id: module_app.id, app_frontend_url: params[:app_action]).first unless @item
end
raise PageError, 'Missing Frontend Page' if @item.nil?
raise PageError,'Missing Frontend Page' if @item.nil?
end
def save_from_no_lang_for_page
+35
View File
@@ -0,0 +1,35 @@
# encoding: utf-8
class SessionsController < Devise::SessionsController
prepend_before_filter :require_no_authentication, :only => [ :new, :create ]
require 'savon'
def create
@sys_id = params["sys_id"]
client = Savon.client(wsdl: 'http://sso.ntue.edu.tw/soap/soapserver.php?wsdl')
client.operations
response = client.call(:chkidno, message: { sys_id: @sys_id })
@id = response.body[:chkidno_response][:return][:id]
login_uid = @id
resource = User.first(conditions:{user_id: login_uid})
if !resource.blank?
resource_name = resource.class.to_s.downcase
sign_in(resource_name, resource)
redirect_to after_sign_in_path_for(resource)
else
flash[:error] = "很抱歉,您無此權限或帳號登入本站,請洽本站管理員<br />Sorry, you don't have the account or authority to login. Please contact the website administrator."
redirect_to :root
end
end
end
+18 -26
View File
@@ -1,5 +1,5 @@
module ApplicationHelper
include OrbitApp::Module::VisitorCounter
FLASH_NOTICE_KEYS = [:error, :notice, :warning]
@@ -7,10 +7,8 @@ module ApplicationHelper
request.referer.include?('?') ? [request.referer,param_hash.to_param].join('&') : [request.referer,param_hash.to_param].join('?')
end
def delayed_impressionist(item)
user_id = current_user.nil? ? nil : current_user.id
request = DelayImpressionistRequest.new(request)
Resque.enqueue(DelayedImpressionist,:request=>request,:obj=>item,:class=>item.class.to_s,:controller_name=>controller_name,:action_name=>action_name,:user=>user_id)
def delayed_impressionist(object)
# Resque.enqueue_at(1.minute.from_now,DelayedImpressionist,object)
end
def check_user_role_enable(attribute_fields)
@@ -244,27 +242,25 @@ module ApplicationHelper
"#{t(:view_count)}: #{object.view_count}"
end
# def display_visitors(options={})
# # Impression.where(options).and(:referrer.ne => nil).distinct(:session_hash).count
# impressions = Impression.where(options).and(:referrer.ne => nil)
# impressions.map{|i| i[:session_hash]}.uniq.count
# end
def display_visitors(options={})
Impression.where(options).and(:referrer.ne => nil).distinct(:session_hash).count
end
# def display_visitors_today
# display_visitors(created_at: {'$gte' => Date.today.beginning_of_day, '$lte' => Date.today.end_of_day})
# end
def display_visitors_today
display_visitors(created_at: {'$gte' => Date.today.beginning_of_day, '$lte' => Date.today.end_of_day})
end
# def display_visitors_this_week
# display_visitors(created_at: {'$gte' => Date.today.beginning_of_week, '$lte' => Date.today.end_of_week})
# end
def display_visitors_this_week
display_visitors(created_at: {'$gte' => Date.today.beginning_of_week, '$lte' => Date.today.end_of_week})
end
# def display_visitors_this_month
# display_visitors(created_at: {'$gte' => Date.today.beginning_of_month, '$lte' => Date.today.end_of_month})
# end
def display_visitors_this_month
display_visitors(created_at: {'$gte' => Date.today.beginning_of_month, '$lte' => Date.today.end_of_month})
end
# def display_visitors_this_year
# display_visitors(created_at: {'$gte' => Date.today.beginning_of_year, '$lte' => Date.today.end_of_year})
# end
def display_visitors_this_year
display_visitors(created_at: {'$gte' => Date.today.beginning_of_year, '$lte' => Date.today.end_of_year})
end
def display_date_time(object)
object.strftime("%Y-%m-%d %H:%M")
@@ -315,8 +311,4 @@ module ApplicationHelper
link_to title, params.merge({direction: direction, sort: column, sort_options: column}), {:class => "#{css_class} sortable", :remote => options[:remote]}
end
def convert_array_param(key, array)
Array(array).collect{|t| "#{key}[]=#{t}"}.join("&")
end
end
-16
View File
@@ -3,13 +3,6 @@ module DefaultWidgetHelper
I18n.t("#{@page_part.module_app.key}.default_widget.#{field}")
end
def get_top_hot_class(row_data)
class_attr = []
class_attr << 'data_is_hot' if( row_data.is_hot? rescue false )
class_attr << 'data_is_top' if( row_data.is_top? rescue false)
return class_attr.join(" ")
end
def link_to_field(row_data,field, switch, options=nil)
method_ary = @page_part.module_app.widget_fields_link_method
field = field.to_sym
@@ -84,13 +77,4 @@ module DefaultWidgetHelper
content_tag(:span,get_display(row_data,field_setting),:class=>field_setting[:class])
end
end
def get_row_category(row_data)
row_data.send("#{row_data.class.to_s.underscore}_category_id") rescue nil
end
def get_row_tags(row_data)
row_data.tagged_ids rescue nil
end
end
+25 -10
View File
@@ -1,21 +1,36 @@
class DashboardCounter < Resque::Plugins::RestrictionJob
extend OrbitApp::Module::VisitorCounterEval
@queue = :high
def self.perform(*args)
site = Site.first
obj = new(*args)
site.visitor_counters[:total] = display_visitors
site.visitor_counters[:today] = display_visitors_today
site.visitor_counters[:this_week] = display_visitors_this_week
site.visitor_counters[:this_month] = display_visitors_this_month
site.visitor_counters[:this_year] = display_visitors_this_year
site.dashboard_counter[:visitors_this_week] = obj.display_visitors_this_week
site.dashboard_counter[:visitors_this_month] = obj.display_visitors_this_month
site.dashboard_counter[:visitors_this_year] = obj.display_visitors_this_year
site.save
OrbitLogger.info "DashboardCounter done #{site.visitor_counters.to_s}"
OrbitLogger.info "DashboardCounter done #{site.dashboard_counter.to_s}"
end
#Notice this is mainly used at user dashbroad. however the code there is currentlly using realtime evaluation.
#and the site model will need a field call dashboard_counter to complete this job.
def display_visitors(options={})
impressions = Impression.where(options).and(:referrer.ne => nil)
impressions.map{|i| i[:session_hash]}.uniq.count
end
def display_visitors_today
display_visitors(created_at: {'$gte' => Date.today.beginning_of_day, '$lte' => Date.today.end_of_day})
end
def display_visitors_this_week
display_visitors(created_at: {'$gte' => Date.today.beginning_of_week, '$lte' => Date.today.end_of_week})
end
def display_visitors_this_month
display_visitors(created_at: {'$gte' => Date.today.beginning_of_month, '$lte' => Date.today.end_of_month})
end
def display_visitors_this_year
display_visitors(created_at: {'$gte' => Date.today.beginning_of_year, '$lte' => Date.today.end_of_year})
end
end
+6 -44
View File
@@ -1,45 +1,7 @@
class DelayedImpressionist
def self.before_filter(*args)
return
end
include ImpressionistController::InstanceMethods
@queue = :low
def initialize(request,controller_name,action_name,user,obj)
@controller_name = controller_name
@action_name = action_name
@user = User.find user unless user.nil?
@request = request
end
def self.perform(*args)
arg = args[0]
@request= DelayImpressionistRequest.new
@request.restore(arg["request"])
request = @request
obj = eval("#{arg["class"]}.find '#{arg['obj']['_id']}'")
# imp = new(@request,arg["controller_name"],arg["action_name"],arg["user"],obj)
new_impression = obj.impressions.build(:user_id=>arg["user"],:controller_name=>arg["controller_name"],:action_name=>arg["action_name"],:ip_address=>@request.remote_ip,:referrer=>@request.referer)
new_impression.save
obj.update_attribute(:view_count,obj.impression_count)
end
private
def user
@user
end
def action_name
@action_name
end
def controller_name
@controller_name
end
def request
@request
end
class DelayedImpressionist
@queue = :low
def self.perform(object)
impressionist(object)
true
end
end
+1 -1
View File
@@ -3,7 +3,7 @@ class UpdateTagCloud
def self.perform()
Tag.all.each do |tag|
tag.update_attribute(:cloud_view_count, tag.get_impressionist)
tag.update_attribute(:cloud_view_count, tag.impressionist_count(:created_at.gte => 14.days.ago, :created_at.lte => Time.now))
end
OrbitLogger.info "UpdateTagCloud Done"
end
+1 -1
View File
@@ -62,7 +62,7 @@ class MailCronMailer < ActionMailer::Base
@mail_cron_log = {
:mail_subject => @data.mail_subject,
:mail_to => group_mail,
:mail_user => @user.name,
:mail_user => @user.user_id,
:mailer_count => group_mail.split(",").size,
:mail_from_app => @data.mail_from_app
}
-38
View File
@@ -29,42 +29,4 @@ class MailCron
end
end
end
def self.send_mail_now(mail_cron_id)
mail_data = MailCron.find(mail_cron_id)
if !mail_data.blank?
@mail_j = 0
@read_mails = Array.new
@mails = mail_data.mail_to.split(",")
@mails.each do |send_mail|
@read_mails << send_mail
@mail_j += 1
if 0 == @mail_j % 30
MailCronMailer.cron_mail( mail_data.id, @read_mails.join(',') ).deliver
@read_mails = Array.new
sleep 10
end
end
if !@read_mails.join(',').blank?
MailCronMailer.cron_mail( mail_data.id, @read_mails.join(',') ).deliver
@read_mails = Array.new
sleep 10
end
end
end
end
+1 -1
View File
@@ -140,7 +140,7 @@ class ModuleApp
def sorted_tags_for_cloud
temp_tags = {}
self.tags.each{ |tag|
temp_tags.merge!({tag => tag.cloud_view_count})
temp_tags.merge!({tag => Tag.get_impressionist(tag)})
}
if !temp_tags.blank?
sorted_tags = temp_tags.sort{|a,b| a[1]<=>b[1]}.reverse
+1 -1
View File
@@ -3,7 +3,7 @@ class Page < Item
include Impressionist::Impressionable
include ParserFrontEnd
is_impressionable #:counter_cache => { :column_name => :view_count }
is_impressionable :counter_cache => { :column_name => :view_count }
field :content, localize: true
field :app_frontend_url
-1
View File
@@ -18,7 +18,6 @@ class Site
field :title_always_on, :type => Boolean, :default => false
field :dashbroad_allow_visitor, :type => Boolean, :default => false
field :mail_settings, :type => Hash
field :visitor_counters,:type=> Hash,:default=>{:total=>0,:today=>0,:this_week=>0,:this_month=>0,:this_year=>0}
field :disk_space, :type => String
field :system_package_info, :type => Hash,:default=>{}
+25 -1
View File
@@ -8,7 +8,7 @@ class Tag
include Mongoid::Timestamps
include Impressionist::Impressionable
is_impressionable #:counter_cache => { :column_name => :view_count }
is_impressionable :counter_cache => { :column_name => :view_count }
field :name, localize: true
field :view_count, :type => Integer, :default => 0
@@ -17,6 +17,30 @@ class Tag
belongs_to :module_tag, polymorphic: true
has_many :taggings, dependent: :destroy
#field :cloud_amper,:type: Integer,:default=> 0
# def self.sorted_for_cloud
# tags = {}
# self.all.each{ |tag|
# tags.merge!({tag => self.get_impressionist(tag)})
# }
# if !tags.blank?
# sorted_tags = tags.sort{|a,b| a[1]<=>b[1]}.reverse
# sorted_tags[0][1] = :hot1
# offset = (sorted_tags.size - 1) / 3
# i = 1
# class_i = 2
# sorted_tags[1..-1].collect!{ |x|
# x[1] = "hot#{class_i}"
# i == offset ? i = 1 : i += 1 if class_i < 4
# class_i += 1 if i == offset && class_i < 4
# }
# sorted_tags
# else
# []
# end
# end
protected
def self.get_impressionist(item_tag = self)
+1 -1
View File
@@ -3,7 +3,7 @@ class User
include Mongoid::Document
include Mongoid::Timestamps
devise :database_authenticatable, :recoverable, :rememberable, :trackable, :validatable #, :timeoutable
devise :database_authenticatable, :recoverable, :rememberable, :trackable, :registerable, :validatable #, :timeoutable
mount_uploader :avatar, AvatarUploader
+1
View File
@@ -8,5 +8,6 @@
</table>
<div class="form-actions form-fixed pagination-right">
<%= link_to content_tag(:i, nil, :class => 'icon-plus icon-white') + t(:add), new_admin_design_path, :class => 'btn btn-primary pull-right' %>
<%= link_to content_tag(:i, nil, :class => 'icon-plus icon-white') + t(:upload), upload_package_admin_designs_path, :class => 'btn btn-primary pull-right' %>
</div>
+13 -16
View File
@@ -1,22 +1,19 @@
<%= content_tag :div, class: @tag_class do %>
<%= content_tag :div,:class=>@tag_class do%>
<div class="default_widget_type_A">
<table class="default_widget_tb" border="0" cellpadding="0" cellspacing="0" >
<thead>
<thead>
<tr>
<% @frontend_field_names.each_with_index do |field,index|%>
<%= content_tag(:th,content_tag(:span,get_field_header(field),:class=>@frontend_classes[index]))unless field.blank?%>
<% end %>
</tr>
</thead>
<% @data.each do |row_data| %>
<tr>
<% @frontend_field_names.each_with_index do |field, index| %>
<%= content_tag(:th, content_tag(:span, get_field_header(field), class: @frontend_classes[index])) unless field.blank? %>
<% @frontend_field_names.each_with_index do |field,index|%>
<%= content_tag(:td,content_tag(:span,link_to_field(row_data,field, @frontend_sat_to_links[index], {orig_page: @page_id.to_s}),:class=>@frontend_classes[index]))unless field.blank?%>
<% end %>
</tr>
</thead>
<tbody>
<% @data.each do |row_data| %>
<tr class="<%= get_top_hot_class(row_data) %>">
<% @frontend_field_names.each_with_index do |field, index|%>
<%= content_tag(:td, content_tag(:span, link_to_field(row_data, field, @frontend_sat_to_links[index], {orig_page: @page_id.to_s, category_id: get_row_category(row_data), tag_id: get_row_tags(row_data)}), class: @frontend_classes[index])) unless field.blank? %>
<% end %>
</tr>
<% end %>
</tbody>
<% end %>
</table>
</div>
<% end %>
<% end %>
+5 -5
View File
@@ -1,13 +1,13 @@
<%= content_tag :div, class: @tag_class do %>
<%= content_tag :div,:class=>@tag_class do%>
<ul class="default_widget_list">
<% @data.each do |row_data| %>
<%= content_tag(:li, class: get_top_hot_class(row_data)) do %>
<%= content_tag(:li) do %>
<div class="img app-pic">
<%= image_tag row_data.send(@widget_image_field) %>
<%= image_tag row_data.send(@widget_image_field)%>
</div>
<div class="wrap">
<% @frontend_field_names.each_with_index do |field, index| %>
<%= content_tag(:span, link_to_field(row_data,field, @frontend_sat_to_links[index], {orig_page: @page_id.to_s, category_id: get_row_category(row_data), tag_id: get_row_tags(row_data)}), class: @frontend_classes[index]) unless field.blank? %>
<% @frontend_field_names.each_with_index do |field,index|%>
<%= content_tag(:span,link_to_field(row_data,field, @frontend_sat_to_links[index], {orig_page: @page_id.to_s}),:class=>@frontend_classes[index]) unless field.blank?%>
<% end %>
</div>
<% end %>
+5 -5
View File
@@ -1,12 +1,12 @@
<%= content_tag :div, class: @tag_class do %>
<%= content_tag :div,:class=>@tag_class do%>
<div class="img app-pic">
<%= image_tag @data.first.send(@widget_image_field) %>
<%= image_tag @data.first.send(@widget_image_field)%>
</div>
<ul class="default_widget_list">
<% @data.each do |row_data| %>
<%= content_tag(:li, class: get_top_hot_class(row_data)) do %>
<% @frontend_field_names.each_with_index do |field, index|%>
<%= content_tag(:span, link_to_field(row_data, field, @frontend_sat_to_links[index], {orig_page: @page_id.to_s, category_id: get_row_category(row_data), tag_id: get_row_tags(row_data)}), class: @frontend_classes[index]) unless field.blank? %>
<%= content_tag(:li) do %>
<% @frontend_field_names.each_with_index do |field,index|%>
<%= content_tag(:span, link_to_field(row_data,field, @frontend_sat_to_links[index], {orig_page: @page_id.to_s}),:class=>@frontend_classes[index]) unless field.blank?%>
<% end %>
<% end %>
<% end %>
+9 -9
View File
@@ -34,15 +34,15 @@ Orbit::Application.configure do
# :sender_address => %{"notifier" <redmine@rulingcom.com>},
# :exception_recipients => %w{chris@rulingcom.com}
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:enable_starttls_auto => true,
:address => "smtp.gmail.com",
:port => '587',
:domain => "smtp.gmail.com",
:authentication => "plain",
:user_name => "redmine@rulingcom.com",
:password => "rulingredmine" }
# config.action_mailer.delivery_method = :smtp
# config.action_mailer.smtp_settings = {
# :enable_starttls_auto => true,
# :address => "smtp.gmail.com",
# :port => '587',
# :domain => "smtp.gmail.com",
# :authentication => "plain",
# :user_name => "redmine@rulingcom.com",
# :password => "rulingredmine" }
end
+2 -2
View File
@@ -8,7 +8,7 @@ defaults: &defaults
development:
<<: *defaults
database: test_site
database: demo_site_development
test:
<<: *defaults
database: test_site
@@ -21,4 +21,4 @@ production:
# password: <%= ENV['MONGOID_PASSWORD'] %>
# database: <%= ENV['MONGOID_DATABASE'] %>
<<: *defaults
database: test_site
database: demo_site_production
+1 -7
View File
@@ -1,9 +1,3 @@
dashboard_counter_cache:
cron: 0 * * * * *
class: DashboardCounter
args:
description: DashboardCounterCache
update_tag_cloud:
cron: 0 0 [0,12] * * *
class: UpdateTagCloud
@@ -20,4 +14,4 @@ email_cron:
cron: 0 0 [10,16,22] * * *
class: EmailCron
args:
description: EmailCron
description: EmailCron
+5
View File
@@ -7,6 +7,11 @@ Orbit::Application.routes.draw do
match "/users_passwd" => "desktop/registrations#update", :as => :users_passwd, :via => :put
end
devise_scope :user do
get 'soap_login' => 'sessions#create'
end
mount Resque::Server, :at => "/admin/resque"
mount Rack::GridFS::Endpoint.new(:db => Mongoid.database,:lookup=>:path), :at => "gridfs"
-18
View File
@@ -1,18 +0,0 @@
class DelayImpressionistRequest
attr_accessor :session_options,:remote_ip,:referer,:user_agent
def initialize(request=nil)
if request
self.session_options=request.session_options
self.remote_ip=request.remote_ip
self.referer=request.referer
self.user_agent=request.user_agent
end
end
def restore(args)
args.each do |key,value|
self.send("#{key}=", value)
end
end
end
-6
View File
@@ -1,6 +0,0 @@
[{"old_id":1,"key":"administrative","title_translations":{"en":"Official","zh_tw":"行政公告"}}
,{"old_id":2,"key":"events","title_translations":{"en":"Activities","zh_tw":"活動"}}
,{"old_id":3,"key":"intern_opportunities","title_translations":{"en":"Internship","zh_tw":"實習機會"}}
,{"old_id":4,"key":"scholarship_and_exchange_student","title_translations":{"en":"Scholarship","zh_tw":"獎學金與交換生資訊"}}
,{"old_id":5,"key":"news","title_translations":{"en":"Newsletter","zh_tw":"新聞"}}
,{"old_id":6,"key":"enrollments","title_translations":{"en":"Admission","zh_tw":"招生資訊"}}]
File diff suppressed because it is too large. Load diff
@@ -6,14 +6,15 @@ module DefaultWidgetTagHelper
@request = req
params.delete :inner
@params = params
params_str = "?"
params_str ="?"
params.each do |index,param|
if param.is_a?(Array) and !param.blank?
params_str << "&" unless params_str.eql?("?")
params_str << param.collect{|t| "#{index}[]=#{t}"}.join("&")
params.delete index
end
end
end
params_str = params_str + (params_str.eql?("?") ? params.to_param : "&#{params.to_param}" )
content_tag :div,:class=> 'more' do
link_to I18n.t(@more_link[:label_i18n]),[eval("#{@more_link[:path_method]}"),params_str].join()
-28
View File
@@ -1,28 +0,0 @@
module OrbitApp
module Module
module VisitorCounter
Version = "0.1"
def display_visitors(options={})
Site.first.visitor_counters["total"]
end
def display_visitors_today
Site.first.visitor_counters["today"]
end
def display_visitors_this_week
Site.first.visitor_counters["this_week"]
end
def display_visitors_this_month
Site.first.visitor_counters["this_month"]
end
def display_visitors_this_year
Site.first.visitor_counters["this_year"]
end
end # of VisitorCounter
end # of Module
end # of OrbitApp
@@ -1,27 +0,0 @@
module OrbitApp
module Module
module VisitorCounterEval
Version = "0.1"
def display_visitors(options={})
impressions = Impression.where(options).and(:referrer.ne => nil).distinct(:session_hash).count
end
def display_visitors_today
display_visitors(created_at: {'$gte' => Date.today.beginning_of_day, '$lte' => Date.today.end_of_day})
end
def display_visitors_this_week
display_visitors(created_at: {'$gte' => Date.today.beginning_of_week, '$lte' => Date.today.end_of_week})
end
def display_visitors_this_month
display_visitors(created_at: {'$gte' => Date.today.beginning_of_month, '$lte' => Date.today.end_of_month})
end
def display_visitors_this_year
display_visitors(created_at: {'$gte' => Date.today.beginning_of_year, '$lte' => Date.today.end_of_year})
end
end # end of VisitorCounterEval
end # of Module
end # of OrbitApp
+3 -1
View File
@@ -43,7 +43,6 @@ module OrbitTag
def tags=(tag_ids)
ids = [tag_ids].flatten
tag_ids.delete('')
self.tagged_ids = tag_ids
ids = self.taggings.blank? ? [] : self.taggings.map{|t| t.tag.id}
tag_ids.each do |tag_id|
unless ids.include? tag_id
@@ -59,6 +58,9 @@ module OrbitTag
def tag_ids=(ids)
self.tags = ids
ids = [ids].flatten
ids.delete('')
self.tagged_ids = ids
end
private
-55
View File
@@ -1,55 +0,0 @@
# encoding: utf-8
require 'pry'
namespace :import do
task :ntu_mb_news_report => :environment do
jfile = File.new("#{Rails.root}/lib/import_data/news_report.json").read
jdata = JSON.parse(jfile)
end
task :ntu_mb => :environment do
DEPARTMENTS = %w[Management BA Acc Fin IB IM EMBA GMBA]
print 'Enter the numer of department you want to import'
puts DEPARTMENTS.map.with_index{|t,i| "#{i}.#{t}" }.to_s
num = STDIN.gets.gsub("\n",'').to_i
puts "Destroy all BulletinCategory? (Default No)"
if STDIN.gets.gsub("\n",'').downcase == 'yes'
BulletinCategory.destroy_all
else
puts "Did not destroy"
end
jfile = File.new("#{Rails.root}/lib/import_data/announce_categories.json").read
jdata = JSON.parse(jfile)
jdata.each do |data|
a = BulletinCategory.new data
a.save
end
news_report_category = BulletinCategory.new {"key":"news_report","title_translations":{"en":"NewsReport","zh_tw":"新聞報導"}}
puts "Imported #{jdata.count}+1(NewsReport)"
puts "Destroy all Bulletin? (Default No)"
if STDIN.gets.gsub("\n",'').downcase == 'yes'
Bulletin.destroy_all
else
puts "Did not destroy"
end
counter = 0
jfile = File.new("#{Rails.root}/lib/import_data/announcements.json").read
jdata = JSON.parse(jfile)
jdata.each do |data|
# puts data
# puts DEPARTMENTS[num]
if data["department"] == DEPARTMENTS[num]
a = Bulletin.new data
a.bulletin_category = BulletinCategory.where(:key=>data["category_key"]).first
a.save
counter = counter +1
end
end
puts "Imported #{counter}"
end
end
-16
View File
@@ -310,20 +310,4 @@ namespace :migrate do
Rake::Task["web_link_url:web_link_url_i18n"].execute
end
task :fix_tagged_ids => :environment do
Tag.all.each do |tag|
tag.taggings.each do |tagging|
tagged_ids = tagging.taggable.tagged_ids
unless tagged_ids.include?(tag.id.to_s)
tagged_ids << tag.id.to_s
tagging.taggable.update_attribute(:tagged_ids, tagged_ids)
end
end
end
end
task :clear_news_tags => :environment do
`mongo #{Mongoid.config.database.name} --eval "db.tags.remove({_type: {$ne: 'Tag'}})"`
end
end
@@ -1,3 +1,4 @@
# encoding: utf-8
class Panel::Announcement::BackEnd::ApprovalsController < OrbitBackendController
before_filter :authenticate_user!
before_filter :is_admin?
@@ -15,6 +16,14 @@ class Panel::Announcement::BackEnd::ApprovalsController < OrbitBackendControlle
@bulletin.proc_check(params[:bulletin][:is_checked],params[:bulletin][:not_checked_reason])
@bulletin.de_pending
if @bulletin.save
if @bulletin.email_sent == true && @bulletin.is_checked == true && !@bulletin.is_rejected
send_email_data(@bulletin)
@bulletin.email_sent = false
@bulletin.save
end
notice = t('announcement.approve_bulletin_success')
else
notice = t('announcement.approve_bulletin_fail')
@@ -61,6 +70,66 @@ class Panel::Announcement::BackEnd::ApprovalsController < OrbitBackendControlle
object_auth.privilege_users = privilege_users
object_auth
end
def send_email_data(bulletin)
@site = Site.first
@user = User.find(bulletin.create_user_id)
@host = request.host_with_port
email_group_data
@group_mail = Array.new
bulletin.email_group.each do |egroup|
if @email_group_data.include?(egroup) and (egroup == '0' or egroup == '1' or egroup == '2' or egroup == '3')
@group_mail << @email_group_data[egroup]["email"]
elsif @email_group_data.include?(egroup) and egroup == '4'
@group_mail << bulletin.other_mailaddress
end
end
if !@group_mail.join.blank?
@mail_content = {
"host" => @host,
"site_title" => @site.title,
"title" => bulletin.title,
"template" => 'announcement_mailer/cron_mail',
"url" => "http://#{@host}#{panel_announcement_front_end_bulletin_path(bulletin, :category_id => bulletin.bulletin_category.id)}"
}
@mail_cron = {
:mail_from_app => 'announcement',
:mail_from => @user.email,
:mail_reply_to => @user.email,
:mail_subject => "#{t("announcement.mail_subject",:site_title => @site.title)}:#{bulletin.title}",
:mail_to => @group_mail.join(','),
:mail_content => @mail_content ,
:mail_sentdate => bulletin.email_sentdate,
:create_user_id => bulletin.create_user_id,
:update_user_id => bulletin.create_user_id
}
@mail_cron = MailCron.new(@mail_cron)
@mail_cron.save
end
end
def email_group_data
@email_group_data = Bulletin.email_group_data
end
# def get_categorys(id = nil)
# @bulletin_categorys = []
@@ -1,3 +1,4 @@
# encoding: utf-8
class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController
include OrbitControllerLib::DivisionForDisable
@@ -77,6 +78,9 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController
# GET /bulletins/new
# GET /bulletins/new.xml
def new
email_group_data
if(session[:in_validate_object].blank?)
@bulletin = Bulletin.new(:postdate => DateTime.now)
else
@@ -94,6 +98,9 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController
# GET /bulletins/1/edit
def edit
email_group_data
@bulletin = Bulletin.find(params[:id])
if !current_user.admin? && (@bulletin.is_rejected? || @bulletin.is_checked?)
redirect_to :action => :index
@@ -146,6 +153,13 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController
respond_to do |format|
if @bulletin.save
if @bulletin.email_sent == true && @bulletin.is_checked == true && !@bulletin.is_rejected
send_email_data(@bulletin)
@bulletin.email_sent = false
@bulletin.save
end
format.html { redirect_to(panel_announcement_back_end_bulletins_url, :notice => t('announcement.create_bulletin_success')) }
format.xml { render :xml => @bulletin, :status => :created, :location => @bulletin }
# format.js
@@ -226,6 +240,14 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController
@bulletin.is_rejected = false
@bulletin.de_pending!
end
if @bulletin.email_sent == true && @bulletin.is_checked == true && !@bulletin.is_rejected
send_email_data(@bulletin)
@bulletin.email_sent = false
@bulletin.save
end
# if (params[:bulletin][:is_checked] == "false")
# @bulletin.is_rejected = true
# @bulletin.save!
@@ -293,6 +315,66 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController
protected
def send_email_data(bulletin)
@site = Site.first
@user = User.find(bulletin.create_user_id)
@host = request.host_with_port
email_group_data
@group_mail = Array.new
bulletin.email_group.each do |egroup|
if @email_group_data.include?(egroup) and (egroup == '0' or egroup == '1' or egroup == '2' or egroup == '3')
@group_mail << @email_group_data[egroup]["email"]
elsif @email_group_data.include?(egroup) and egroup == '4'
@group_mail << bulletin.other_mailaddress
end
end
if !@group_mail.join.blank?
@mail_content = {
"host" => @host,
"site_title" => @site.title,
"title" => bulletin.title,
"template" => 'announcement_mailer/cron_mail',
"url" => "http://#{@host}#{panel_announcement_front_end_bulletin_path(bulletin, :category_id => bulletin.bulletin_category.id)}"
}
@mail_cron = {
:mail_from_app => 'announcement',
:mail_from => @user.email,
:mail_reply_to => @user.email,
:mail_subject => "#{t("announcement.mail_subject",:site_title => @site.title)}:#{bulletin.title}",
:mail_to => @group_mail.join(','),
:mail_content => @mail_content ,
:mail_sentdate => bulletin.email_sentdate,
:create_user_id => bulletin.create_user_id,
:update_user_id => bulletin.create_user_id
}
@mail_cron = MailCron.new(@mail_cron)
@mail_cron.save
end
end
def email_group_data
@email_group_data = Bulletin.email_group_data
end
def delete_out_invalid_date_from_params
if((params[:bulletin]["deadline(1i)"] && params[:bulletin]["deadline(1i)"].blank?) or (params[:bulletin]["deadline(2i)"] && params[:bulletin]["deadline(2i)"].blank?) or (params[:bulletin]["deadline(3i)"] && params[:bulletin]["deadline(3i)"].blank?))
params[:bulletin].delete("deadline(1i)")
@@ -26,7 +26,6 @@ class Panel::Announcement::FrontEnd::BulletinsController < OrbitWidgetController
end
def index
@item = Page.find(params[:page_id]) rescue nil
if @item
if @item.frontend_data_count
@@ -61,11 +60,7 @@ class Panel::Announcement::FrontEnd::BulletinsController < OrbitWidgetController
else
@bulletins = Bulletin.all.available_for_lang(I18n.locale).can_display.any_of( {deadline: nil,:postdate.lte => date_now} , {:deadline.gte => date_now,:postdate.lte => date_now} ).desc( :is_top, :postdate).page( params[:page_main]).per(@page_num)
end
if params["tag_id"]
params["tag_id"].each do |tag_id|
delayed_impressionist(Tag.find tag_id) rescue nil
end
end
delayed_impressionist(@tag) if @tag
end
end
+19 -1
View File
@@ -14,7 +14,7 @@ class Bulletin
include OrbitTag::Taggable
taggable
is_impressionable #:counter_cache => { :column_name => :view_count }
is_impressionable :counter_cache => { :column_name => :view_count }
field :title, localize: true
field :subtitle, localize: true
@@ -40,6 +40,12 @@ class Bulletin
field :not_checked_reason
field :public, :type => Boolean, :default => true
field :email_sent, :type => Boolean, :default => false
field :email_sentdate , :type => DateTime
field :email_group, :type => Array
field :other_mailaddress
scope :can_display, where(is_checked: true, is_rejected: false, is_pending: false)
scope :available_for_lang, ->(locale){ where("available_for_#{locale}".to_sym => true) }
@@ -217,6 +223,18 @@ class Bulletin
protected
def self.email_group_data
@email_group_data = {
'0'=> {"name"=>I18n.t('announcement.email_group_data_0'), "email"=>"alluser@tea.ntue.edu.tw"},
'1'=> {"name"=>I18n.t('announcement.email_group_data_1'), "email"=>"allstu@tea.ntue.edu.tw"},
'2'=> {"name"=>I18n.t('announcement.email_group_data_2'), "email"=>"allgrad@tea.ntue.edu.tw"},
'3'=> {"name"=>I18n.t('announcement.email_group_data_3'), "email"=>"allad@tea.ntue.edu.tw"},
'4'=> {"name"=>I18n.t('announcement.email_group_data_4')}
}
end
def check_deadline
if(!self.deadline.nil? and (self.deadline < self.postdate ))
@@ -0,0 +1,29 @@
<% # encoding: utf-8 %>
<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
</head>
<body bgcolor="#FFFFFF">
<div style="text-ident:20px">
</div>
<%= t('announcement.mail_hi') %> <br /><br />
<%= t('announcement.mail_url_view') %> <br /><br />
<a href="<%= @data.mail_content["url"] %>" target="_blank"> <%= @data.mail_content["title"] %> </a> <br /><br />
</div>
<span style="color:#555">--<br />
<%= t('announcement.mail_source') %> :<a href="http://<%= @data.mail_content["host"] %>" target="_blank"> <%= @data.mail_content["site_title"] %> </a><br />
<%= t('announcement.mail_time') %> <%= DateTime.now %>
</span>
</body>
</html>
@@ -265,6 +265,50 @@
</div>
</div>
<div id="widget" class="widget-box">
<div class="widget-action clear">
<a class="action"><i title="Added to the file" class="icon-exclamation-sign icon-white tip"></i></a>
</div>
<h3 class="widget-title"><i class="icons-bell"></i><%= t('announcement.email_eminder')%></h3>
<div class="widget-content">
<div class="controls">
<label class="checkbox inline"><input id="remind-check" type="checkbox" value="1" name="bulletin[email_sent]"><%= t('announcement.activate_email_eminder')%></label>
<div id="content-box">
<hr />
<%= f.datetime_picker :email_sentdate, :picker_type => 'separated', :label => t("announcement.email_sentdate") %>
<br />
<%= f.label :email_group ,t("announcement.email_group")%>
<div class="form-inline">
<ul class="nav nav-pills">
<% @email_group_data.collect do |k,v| %>
<li class="pull-left">
<%= check_box_tag 'bulletin[email_group][]', k, (@bulletin.email_group.nil? ? false : @bulletin.email_group.include?(k)), :id => "field-#{k}" %>
<label for="field-<%= k %>"><%= v["name"] %></label>
<%= hidden_field_tag 'bulletin[email_group][]', '' %>
</li>
<% end %>
</ul>
</div>
<%= f.label :other_mailaddress ,"#{t("announcement.other_mailaddress")}(#{t("announcement.other_mailaddress_note")})"%>
<%= f.text_area :other_mailaddress, :class=>"span12", :cols=>"25", :rows=>"10" %>
</div>
</div>
</div>
</div>
</div>
</div>
@@ -300,6 +344,11 @@
$(this).parents('table').append(("<%= escape_javascript(add_attribute 'form_bulletin_file', f, :bulletin_files) %>").replace(old_id, new_id));
});
$('.for_preview').popover({ html : true });
$('#remind-check').prop('checked') ? '':$('#content-box').addClass('hide')
$('#remind-check').on('change', function() {
$(this).prop('checked') ? $('#content-box').removeClass('hide'):$('#content-box').addClass('hide')
})
});
</script>
<% end %>
+18 -2
View File
@@ -16,7 +16,6 @@ en:
bulletin_category_with_title: Bulletin Category with Title
postdate: Post Date
title: Title
subtitle: SubTitle
editing_announcement: Edit Announcement
editing_announcement_category: Edit Category
error:
@@ -37,4 +36,21 @@ en:
widget:
bulletins_and_web_links: Bulletins and Web Resources
index: Index
search: Search
search: Search
email_eminder: Email Reminder
activate_email_eminder: Activate Email Reminder
email_sentdate: Email Time
email_group: Email Group
email_group_data_0: All Faculty
email_group_data_1: Undergraduates
email_group_data_2: Postgraduates
email_group_data_3: Continuing Ed. Postgraduates
email_group_data_4: Other
mail_subject: this is an announcement reminder from【%{site_title}】
other_mailaddress: Other Email
other_mailaddress_note: Divide different email accounts with ","
mail_hi: Hi
mail_url_view: This email is the reminder of an announcement, please click the link for the details
mail_source: Source
mail_time: Time
@@ -16,7 +16,6 @@ zh_tw:
bulletin_category_with_title: 公告類別及標題
postdate: 張貼日期
title: 標題
subtitle: 副標題
editing_announcement: 編輯類別
editing_announcement_category: 編輯類別
error:
@@ -37,4 +36,22 @@ zh_tw:
widget:
bulletins_and_web_links: 索引
index: 索引
search: 搜尋
search: 搜尋
email_eminder: 寄送提醒
activate_email_eminder: 開啟寄送提醒
email_sentdate: 寄送時間
email_group: 寄送群組
other_mailaddress: 其他Mail
other_mailaddress_note: 輸入多組mail時,請用","逗號隔開
email_group_data_0: 全校教職員
email_group_data_1: 大學部學生
email_group_data_2: 日間部研究生
email_group_data_3: 進修部研究生
email_group_data_4: 其他
mail_subject: 來自【%{site_title}】的公告事件提醒
mail_hi: 您好
mail_url_view: 此封信件為公告事件提醒,請點選以下連結詳細觀看
mail_source: 來源
mail_time: 時間
+3 -4
View File
@@ -23,19 +23,18 @@ module Announcement
end
category ["BulletinCategory"]
data_count 1..10
data_count 3..10
taggable
widgets do
default_widget do
query 'Bulletin.any_of( {deadline: nil,:postdate.lte => Time.now} , {:deadline.gte => Time.now,:postdate.lte => Time.now} )'
enable ["typeA","typeB_style3","typeC"]
enable ["typeA","typeC"]
image :image
field :postdate
link_field :title,{:method => 'panel_announcement_front_end_bulletin_path',:args=>:self,:preview=>true}
link_field :title,{:method => 'panel_announcement_front_end_bulletin_path',:args=>:self}
link_field :bulletin_category_with_title,{:method => 'panel_announcement_front_end_bulletins_path',:args=>{:category_id => [:bulletin_category,:id]}}
field :subtitle
link_to_more 'panel_announcement_front_end_bulletins_path',:title_i18n=> 'more_plus'
end
@@ -3,4 +3,5 @@ log/*.log
pkg/
test/dummy/db/*.sqlite3
test/dummy/log/*.log
test/dummy/tmp/
test/dummy/tmp/
test/dummy/.sass-cache
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -0,0 +1,28 @@
class Panel::Ask::FrontEnd::AskQuestionsController < OrbitWidgetController
layout false
def initialize
super
@app_title = 'ask'
end
def index
@ask_question = AskQuestion.new
end
def create
@ask_question = AskQuestion.new(params[:ask_question])
if verify_recaptcha model: @ask_question, private_key: '6Lfl7OESAAAAAD4rl5S16-zjt5yiKNYJ6jsqdwmL'
@ask_acknowledgement = AskAcknowledgement.first || AskAcknowlegement.new
@ask_question.save
AskAdmin.all.each do |ask_admin|
Resque.enqueue(SendAskNoticeMail, ask_admin.id, @ask_question.id)
end
end
respond_to do |format|
format.js
end
end
end
@@ -1,6 +1,6 @@
class AskMailer < ActionMailer::Base
default from: 'orbit_test@rulingcom.com'
def reply(ask_question)
@ask_question = ask_question
mail(:to => @ask_question.email, :subject => "#{t('ask.reply')}:#{@ask_question.title}")
@@ -1,8 +1,4 @@
class AskQuestion
include ActiveModel::Validations
include ActiveModel::Conversion
extend ActiveModel::Naming
include Mongoid::Document
include Mongoid::Timestamps
include OrbitCoreLib::ObjectDisable
@@ -19,5 +15,4 @@ class AskQuestion
belongs_to :ask_category
has_one :ask_reply, dependent: :destroy
end
@@ -5,7 +5,7 @@
</head>
<body>
<p>
<%= @ask_question.content %>
<%= @ask_question.ask_reply.content %>
</p>
<p>此為系統自動發信,請勿直接回覆</p>
</body>
@@ -18,5 +18,6 @@
<div class="form-actions form-fixed pagination-right">
<div id="ask_questions_pagination" class="paginationFixed">
<%= paginate @ask_questions %>
</div>
</div>
@@ -0,0 +1,11 @@
<% if @ask_question.errors.empty? %>
$('html,body').scrollTop(0);
$('#acknowledgement')
.html('<%= j simple_format(@ask_acknowledgement.content) %>')
.fadeIn(600)
.delay(3000)
.fadeOut(600);
<% else %>
alert('<%= @ask_question.errors.full_messages.join('\n') %>');
Recaptcha.reload()
<% end %>
@@ -1,7 +1,8 @@
<link href='/assets/ask.css' rel='stylesheet' type='text/css' />
<div id="new-ask-question" class="ask-question">
<div id="acknowledgement"></div>
<%= form_for @ask_question, url: panel_ask_front_end_ask_questions_path(standalone: true), html: {class: 'form-horizontal'} do |f| %>
<%= form_for @ask_question, url: panel_ask_front_end_ask_questions_path(standalone: true), remote: true,
html: {class: 'form-horizontal'} do |f| %>
<div class="control-group">
<%= f.label :ask_category_id, class: 'control-label required' %>
<div class="controls">
@@ -54,13 +55,11 @@
<%= f.text_area :content, rows: 8, class: 'input-xlarge' %>
</div>
</div>
<div class="control-group">
<div class="control-group">
<div class="controls">
<%= gotcha_error %>
<%= gotcha%>
<%= recaptcha_tags ajax: true, public_key: '6Lfl7OESAAAAAKdxTSSmWSOWlL__04A9AqQzD7_z' %>
</div>
</div>
<div class="form-actions">
<%= f.submit t('submit'), class: 'btn btn-primary' %>
<%= f.button t('cancel'), type: 'reset', class: 'btn' %>
@@ -78,4 +77,4 @@
return false;
});
});
</script>
</script>
File renamed without changes.
File renamed without changes.
@@ -18,7 +18,6 @@ Rails.application.routes.draw do
end
namespace :front_end do
match "ask_questions/thank_you" => "ask_questions#thank_you", :as => 'thank_you'
resources :ask_questions
end
end
-1
View File
@@ -14,7 +14,6 @@ module Ask
app_page 'ask_questions' do
frontend_i18n 'ask.ask'
end
end
widgets do
File renamed without changes.
Loaded 100 of 230 files, more files were not shown because too many files have changed in this diff. Show more