Compare commits

...
53 changed files with 1169 additions and 456 deletions

No files matched your search

+1
View File
@@ -21,3 +21,4 @@ uploads/**/*
.sass-cache/*
*.supported
mongoid.yml
+4 -2
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'
@@ -46,14 +48,14 @@ gem 'sinatra'
gem 'sprockets'
gem 'social-share-button'
gem 'tinymce-rails'
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'
gem 'rb-readline','~> 0.4.2' if RUBY_PLATFORM.downcase.include?("linux")
gem "impressionist", :git => 'git://github.com/charlotte-ruby/impressionist.git'
gem "impressionist",'1.2.0'
#gem 'contacts'
#gem 'event-calendar', :require => 'event_calendar'#, :git => 'git://github.com/elevation/event_calendar.git'
-409
View File
@@ -1,409 +0,0 @@
GIT
remote: git://github.com/amatsuda/kaminari.git
revision: 2e09b5374fec33b57c6387ca7bac89ecaa60c9eb
specs:
kaminari (0.14.1)
actionpack (>= 3.0.0)
activesupport (>= 3.0.0)
GIT
remote: git://github.com/charlotte-ruby/impressionist.git
revision: 0894f6a550a33f83f4937d655e9f0774521781e4
specs:
impressionist (1.2.0)
httpclient (~> 2.2)
nokogiri (~> 1.5)
GEM
remote: http://rubygems.org/
specs:
actionmailer (3.2.12)
actionpack (= 3.2.12)
mail (~> 2.4.4)
actionpack (3.2.12)
activemodel (= 3.2.12)
activesupport (= 3.2.12)
builder (~> 3.0.0)
erubis (~> 2.7.0)
journey (~> 1.0.4)
rack (~> 1.4.5)
rack-cache (~> 1.2)
rack-test (~> 0.6.1)
sprockets (~> 2.2.1)
activemodel (3.2.12)
activesupport (= 3.2.12)
builder (~> 3.0.0)
activerecord (3.2.12)
activemodel (= 3.2.12)
activesupport (= 3.2.12)
arel (~> 3.0.2)
tzinfo (~> 0.3.29)
activeresource (3.2.12)
activemodel (= 3.2.12)
activesupport (= 3.2.12)
activesupport (3.2.12)
i18n (~> 0.6)
multi_json (~> 1.0)
arel (3.0.2)
attr_required (0.0.5)
bcrypt-ruby (3.0.0)
binding_of_caller (0.7.1)
debug_inspector (>= 0.0.1)
bourne (1.1.2)
mocha (= 0.10.5)
brakeman (1.9.2)
erubis (~> 2.6)
fastercsv (~> 1.5)
haml (~> 3.0)
highline (~> 1.6)
multi_json (~> 1.2)
ruby2ruby (~> 2.0)
ruby_parser (~> 3.1.1)
sass (~> 3.0)
terminal-table (~> 1.4)
bson (1.8.2)
bson_ext (1.8.2)
bson (~> 1.8.2)
builder (3.0.4)
capybara (2.0.2)
mime-types (>= 1.16)
nokogiri (>= 1.3.3)
rack (>= 1.0.0)
rack-test (>= 0.5.4)
selenium-webdriver (~> 2.0)
xpath (~> 1.0.0)
carrierwave (0.6.2)
activemodel (>= 3.2.0)
activesupport (>= 3.2.0)
carrierwave-mongoid (0.2.2)
carrierwave (~> 0.6.1)
mongoid (~> 2.1)
childprocess (0.3.8)
ffi (~> 1.0, >= 1.0.11)
chinese_pinyin (0.4.1)
chronic (0.9.0)
coderay (1.0.9)
coffee-rails (3.2.2)
coffee-script (>= 2.2.0)
railties (~> 3.2.0)
coffee-script (2.2.0)
coffee-script-source
execjs
coffee-script-source (1.4.0)
columnize (0.3.6)
database_cleaner (0.9.1)
debug_inspector (0.0.2)
debugger (1.2.4)
columnize (>= 0.3.1)
debugger-linecache (~> 1.1.1)
debugger-ruby_core_source (~> 1.1.7)
debugger-linecache (1.1.2)
debugger-ruby_core_source (>= 1.1.1)
debugger-ruby_core_source (1.1.8)
delorean (2.1.0)
chronic
devise (1.5.3)
bcrypt-ruby (~> 3.0)
orm_adapter (~> 0.0.3)
warden (~> 1.1)
diff-lcs (1.1.3)
encrypted_strings (0.3.3)
erubis (2.7.0)
exception_notification (3.0.1)
actionmailer (>= 3.0.4)
execjs (1.4.0)
multi_json (~> 1.0)
factory_girl (4.2.0)
activesupport (>= 3.0.0)
factory_girl_rails (4.2.1)
factory_girl (~> 4.2.0)
railties (>= 3.0.0)
faker (1.1.2)
i18n (~> 0.5)
fastercsv (1.5.5)
fattr (2.2.1)
fb_graph (2.6.4)
httpclient (>= 2.2.0.2)
multi_json (>= 1.3)
rack-oauth2 (>= 0.14.4)
tzinfo
ffi (1.4.0)
haml (3.1.8)
highline (1.6.15)
hike (1.2.1)
httpclient (2.3.2)
i18n (0.6.1)
journey (1.0.4)
jquery-rails (2.1.4)
railties (>= 3.0, < 5.0)
thor (>= 0.14, < 2.0)
jquery-ui-rails (4.0.1)
jquery-rails
railties (>= 3.1.0)
json (1.7.7)
mail (2.4.4)
i18n (>= 0.4.0)
mime-types (~> 1.16)
treetop (~> 1.4.8)
metaclass (0.0.1)
method_source (0.8.1)
mime-types (1.21)
mini_magick (3.5.0)
subexec (~> 0.2.1)
mocha (0.10.5)
metaclass (~> 0.0.1)
mongo (1.8.2)
bson (~> 1.8.2)
mongo_session_store-rails3 (3.0.6)
actionpack (>= 3.0)
mongo
mongoid (2.6.0)
activemodel (~> 3.1)
mongo (~> 1.7)
tzinfo (~> 0.3.22)
mongoid-encryptor (0.0.5)
activesupport (~> 3.0)
encrypted_strings (~> 0.3.3)
mongoid (~> 2)
mongoid-tree (0.7.0)
mongoid (~> 2.0)
multi_json (1.6.1)
net-ldap (0.3.1)
nokogiri (1.5.6)
options (2.3.0)
fattr
orm_adapter (0.0.7)
polyglot (0.3.3)
pr_geohash (1.0.0)
progress_bar (0.4.0)
highline (~> 1.6.1)
options (~> 2.3.0)
pry (0.9.12)
coderay (~> 1.0.5)
method_source (~> 0.8)
slop (~> 3.4)
pry-debugger (0.2.1)
debugger (~> 1.2.0)
pry (~> 0.9.10)
pry-remote (0.1.6)
pry (~> 0.9)
slop (~> 3.0)
pry-stack_explorer (0.4.9)
binding_of_caller (>= 0.7)
pry (~> 0.9.11)
rack (1.4.5)
rack-cache (1.2)
rack (>= 0.4)
rack-gridfs (0.4.1)
mime-types
mongo (~> 1.2)
rack
rack-oauth2 (1.0.0)
activesupport (>= 2.3)
attr_required (>= 0.0.5)
httpclient (>= 2.2.0.2)
i18n
multi_json (>= 1.3.6)
rack (>= 1.1)
rack-protection (1.3.2)
rack
rack-ssl (1.3.3)
rack
rack-test (0.6.2)
rack (>= 1.0)
radius (0.7.3)
rails (3.2.12)
actionmailer (= 3.2.12)
actionpack (= 3.2.12)
activerecord (= 3.2.12)
activeresource (= 3.2.12)
activesupport (= 3.2.12)
bundler (~> 1.0)
railties (= 3.2.12)
railties (3.2.12)
actionpack (= 3.2.12)
activesupport (= 3.2.12)
rack-ssl (~> 1.3.2)
rake (>= 0.8.7)
rdoc (~> 3.4)
thor (>= 0.14.6, < 2.0)
rake (10.0.3)
rdoc (3.12.1)
json (~> 1.4)
redis (3.0.2)
redis-namespace (1.2.1)
redis (~> 3.0.0)
redis-search (0.9.0)
chinese_pinyin (>= 0.3.0)
redis (>= 2.1.1)
redis-namespace (>= 1.0.2)
resque (1.23.0)
multi_json (~> 1.0)
redis-namespace (~> 1.0)
sinatra (>= 0.9.2)
vegas (~> 0.1.2)
resque-restriction (0.3.0)
resque (>= 1.7.0)
resque-scheduler (2.0.0)
redis (>= 2.0.1)
resque (>= 1.20.0)
rufus-scheduler
rmmseg-cpp-huacnlee (0.2.9)
rsolr (1.0.8)
builder (>= 2.1.2)
rspec (2.12.0)
rspec-core (~> 2.12.0)
rspec-expectations (~> 2.12.0)
rspec-mocks (~> 2.12.0)
rspec-core (2.12.2)
rspec-expectations (2.12.1)
diff-lcs (~> 1.1.3)
rspec-mocks (2.12.2)
rspec-rails (2.12.2)
actionpack (>= 3.0)
activesupport (>= 3.0)
railties (>= 3.0)
rspec-core (~> 2.12.0)
rspec-expectations (~> 2.12.0)
rspec-mocks (~> 2.12.0)
ruby2ruby (2.0.3)
ruby_parser (~> 3.1)
sexp_processor (~> 4.0)
ruby_parser (3.1.1)
sexp_processor (~> 4.1)
rubyzip (0.9.9)
rufus-scheduler (2.0.17)
tzinfo (>= 0.3.23)
sass (3.2.5)
sass-rails (3.2.6)
railties (~> 3.2.0)
sass (>= 3.1.10)
tilt (~> 1.3)
select2-rails (3.3.1)
sass-rails (>= 3.2)
thor (~> 0.14)
selenium-webdriver (2.30.0)
childprocess (>= 0.2.5)
multi_json (~> 1.0)
rubyzip
websocket (~> 1.0.4)
sexp_processor (4.1.5)
shoulda-matchers (1.4.2)
activesupport (>= 3.0.0)
bourne (~> 1.1.2)
simplecov (0.7.1)
multi_json (~> 1.0)
simplecov-html (~> 0.7.1)
simplecov-html (0.7.1)
sinatra (1.3.4)
rack (~> 1.4)
rack-protection (~> 1.3)
tilt (~> 1.3, >= 1.3.3)
slop (3.4.3)
social-share-button (0.1.1)
spork (0.9.2)
sprockets (2.2.2)
hike (~> 1.2)
multi_json (~> 1.0)
rack (~> 1.0)
tilt (~> 1.1, != 1.3.0)
subexec (0.2.2)
sunspot (1.3.3)
pr_geohash (~> 1.0)
rsolr (~> 1.0.7)
sunspot-rails-tester (0.0.4)
sunspot_rails (~> 1.2)
sunspot_mongo (1.0.1)
sunspot_rails
sunspot_rails (1.3.3)
nokogiri
sunspot (= 1.3.3)
sunspot_solr (1.3.3)
syslog-logger (1.6.8)
terminal-table (1.4.5)
thor (0.17.0)
tilt (1.3.3)
tinymce-rails (3.5.8)
railties (>= 3.1.1)
treetop (1.4.12)
polyglot
polyglot (>= 0.3.1)
tzinfo (0.3.35)
uglifier (1.3.0)
execjs (>= 0.3.0)
multi_json (~> 1.0, >= 1.0.2)
vegas (0.1.11)
rack (>= 1.0.0)
warden (1.2.1)
rack (>= 1.0)
watchr (0.7)
websocket (1.0.7)
xpath (1.0.0)
nokogiri (~> 1.3)
PLATFORMS
ruby
DEPENDENCIES
brakeman
bson_ext
capybara
carrierwave
carrierwave-mongoid
chinese_pinyin (= 0.4.1)
coffee-rails
database_cleaner
debugger
delorean
devise (= 1.5.3)
exception_notification
execjs
factory_girl_rails
faker
fb_graph
impressionist!
jquery-rails (= 2.1.4)
jquery-ui-rails
kaminari!
mime-types
mini_magick
mongo_session_store-rails3 (= 3.0.6)
mongoid (> 2.1, < 3.0.0)
mongoid-encryptor
mongoid-tree
net-ldap (~> 0.3.1)
nokogiri
progress_bar
pry
pry-debugger
pry-remote
pry-stack_explorer
rack-gridfs
radius
rails (~> 3.2.9)
rake
redis (>= 2.1.1)
redis-namespace
redis-search
resque
resque-restriction
resque-scheduler
rmmseg-cpp-huacnlee (= 0.2.9)
rspec (~> 2.0)
rspec-rails (~> 2.0)
rubyzip
sass-rails
select2-rails (= 3.3.1)
shoulda-matchers
simplecov
sinatra
social-share-button
spork
sprockets
sunspot-rails-tester
sunspot_mongo
sunspot_solr
syslog-logger
tinymce-rails
uglifier
watchr
@@ -0,0 +1,38 @@
class Admin::MailCronLogsController < OrbitBackendController
layout "new_admin"
before_filter :authenticate_user!
before_filter :is_admin?
def index
# @mail_cron_logs = MailCronLog.all.desc(:created_at).page(params[:page_main] ).per('20')
@mail_cron_logs = (params[:sort]) ? get_sorted_and_filtered("mail_cron_log") : get_viewable("mail_cron_log")
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @mail_crons }
format.js
end
end
def destroy
@mail_cron_log = MailCronLog.find(params[:id])
@mail_cron_log.destroy
respond_to do |format|
format.html { redirect_to(admin_mail_cron_logs_url) }
# format.xml { head :ok }
format.js
end
end
def delete
if params[:ids]
mail_cron_logs = MailCronLog.any_in(:_id => params[:ids]).destroy_all
end
redirect_to admin_mail_cron_logs_url(:direction => params[:direction], :sort => params[:sort], :sort_options => params[:sort_options])
end
end
@@ -0,0 +1,126 @@
class Admin::MailCronsController < OrbitBackendController
layout "new_admin"
before_filter :authenticate_user!
before_filter :is_admin?
def index
# @mail_crons = MailCron.all.asc(:mail_sentdate).page(params[:page_main] ).per('20')
@mail_crons = (params[:sort]) ? get_sorted_and_filtered("mail_cron") : get_viewable("mail_cron")
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @mail_crons }
format.js
end
end
def show
end
def new
@mail_cron = MailCron.new
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @mail_cron }
end
end
def create
@mail_cron = MailCron.new(params[:mail_cron])
@mail_cron.create_user_id = current_user.id
@mail_cron.update_user_id = current_user.id
respond_to do |format|
if @mail_cron.save
format.html { redirect_to(admin_mail_crons_url) }
format.xml { render :xml => @mail_cron, :status => :created, :location => @mail_cron }
else
format.html { render :action => "new" }
format.xml { render :xml => @mail_cron.errors, :status => :unprocessable_entity }
end
end
end
def edit
@mail_cron = MailCron.find(params[:id])
end
def update
@datas = MailCron.where(:mail_sentdate.lte => Time.now, :mail_sent => false)
@datas.each do |mail_data|
@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
@mail_cron = MailCron.find(params[:id])
@mail_cron.update_user_id = current_user.id
respond_to do |format|
if @mail_cron.update_attributes(params[:mail_cron])
format.html { redirect_to(admin_mail_crons_url) }
format.js { render 'toggle_enable' }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @mail_cron.errors, :status => :unprocessable_entity }
end
end
end
def destroy
@mail_cron = MailCron.find(params[:id])
@mail_cron.destroy
respond_to do |format|
format.html { redirect_to(admin_mail_crons_url) }
# format.xml { head :ok }
format.js
end
end
def delete
if params[:ids]
mail_crons = MailCron.any_in(:_id => params[:ids]).destroy_all
end
redirect_to admin_mail_crons_url(:direction => params[:direction], :sort => params[:sort], :sort_options => params[:sort_options])
end
protected
end
+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
+42
View File
@@ -0,0 +1,42 @@
class EmailCron
@queue = :mail
def self.perform
@datas = MailCron.where(:mail_sentdate.lte => Time.now)
@datas.each do |mail_data|
@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
+81
View File
@@ -0,0 +1,81 @@
class MailCronMailer < ActionMailer::Base
default :from => "orbit_test@rulingcom.com"
def get_settings
@site = Site.first
@smtp_settings = {
:address => @site['site_settings']['address'],
:port => @site['site_settings']['port'],
:domain => @site['site_settings']['domain'],
:authentication => @site['site_settings']['authentication'],
# :user_name => @site['site_settings']['user_name'],
# :password => @site['site_settings']['password'],
:tls => (@site['site_settings']['tls'] == '0' ? false : true ) ,
:enable_starttls_auto => (@site['site_settings']['enable_starttls_auto'] == '0' ? false : true )
}
if !@site['site_settings']['user_name'].blank?
@smtp_settings[:user_name] = @site['site_settings']['user_name']
end
if !@site['site_settings']['password'].blank?
@smtp_settings[:password] = @site['site_settings']['password']
end
ActionMailer::Base.smtp_settings = @smtp_settings
end
def cron_mail( data_id, group_mail )
get_settings
@data = MailCron.find(data_id)
if @data
@user = User.find(@data.create_user_id)
if !@data.mail_cron_files.blank?
@data.mail_cron_files.each_with_index do |mail_cron_file, i|
file_type = File.extname(mail_cron_file.file.to_s)
file_content = Mongo::GridFileSystem.new(Mongoid.database).open(mail_cron_file.file.url.gsub("/gridfs/", "").force_encoding("UTF-8"), 'r')
attachments["#{mail_cron_file.title}#{file_type}"] = file_content.read
end
end
if !@data.mail_content["text"].blank?
mail( :from => @data.mail_from, :reply_to => @data.mail_reply_to, :bcc => group_mail, :subject => @data.mail_subject ) do |format|
format.html { render :text => @data.mail_content["text"] }
end
elsif !@data.mail_content["template"].blank?
mail( :from => @data.mail_from, :reply_to => @data.mail_reply_to, :bcc => group_mail, :subject => @data.mail_subject ) do |format|
format.html { render :template => @data.mail_content["template"], :collection => @data.mail_content }
end
end
@mail_cron_log = {
:mail_subject => @data.mail_subject,
:mail_to => group_mail,
:mail_user => @user.user_id,
:mailer_count => group_mail.split(",").size,
:mail_from_app => @data.mail_from_app
}
@mail_cron_log = MailCronLog.new(@mail_cron_log)
@mail_cron_log.save
@data.destroy
end
end
end
+32
View File
@@ -0,0 +1,32 @@
class MailCron
include Mongoid::Document
include Mongoid::Timestamps
field :mail_from_app
field :mail_from
field :mail_to
field :mail_reply_to
field :mail_subject
field :mail_content, :type => Hash
field :mail_sentdate , :type => DateTime
field :create_user_id
field :update_user_id
has_many :mail_cron_files, :autosave => true, :dependent => :destroy
accepts_nested_attributes_for :mail_cron_files, :allow_destroy => true
after_save :save_mail_cron_files
def save_mail_cron_files
self.mail_cron_files.each do |t|
if t.should_destroy
t.destroy
end
end
end
end
+13
View File
@@ -0,0 +1,13 @@
class MailCronFile
include Mongoid::Document
include Mongoid::Timestamps
mount_uploader :file, AssetUploader
field :should_destroy, :type => Boolean
field :title
belongs_to :mail_cron
end
+14
View File
@@ -0,0 +1,14 @@
class MailCronLog
include Mongoid::Document
include Mongoid::Timestamps
field :mail_subject
field :mail_to
field :mail_user
field :mailer_count
field :mail_from_app
end
+3 -2
View File
@@ -51,8 +51,9 @@ class PrototypeAuth
end
def remove_operation(item,obj)
if (self.send item).include? obj
(self.send item).delete obj
item = (item.to_s.singularize == item.to_s) ? "#{item.to_s}_id" : "#{item.to_s.singularize}_ids"
if (self.send item).include? obj.id
(self.send item).delete obj.id
self.save!
else
false #should put error message for user not existed in list
@@ -0,0 +1,3 @@
<div class="filter-clear">
<%= link_to content_tag(:i, nil, :class => 'icons-cycle') + t(:clear), admin_mail_crons_path(:filter => @filter, :sort => params[:sort], :direction => params[:direction], :clear => true, :type => type), :class => "btn btn-small js_history" %>
</div>
@@ -0,0 +1,11 @@
<div id="filter" class="subnav">
<div class="filters">
<div id="sort_headers" class="table-label">
<%= render 'sort_headers' %>
</div>
</div>
</div>
<% content_for :page_specific_javascript do %>
<%= javascript_include_tag "sort_header" %>
<% end %>
@@ -0,0 +1,29 @@
<tr id="<%= dom_id mail_cron_log %>" class="with_action">
<td class="span1">
<% if is_manager? %>
<%= check_box_tag 'to_delete[]', mail_cron_log.id, false, :class => "checkbox_in_list" %>
<% end -%>
</td>
<td class="span1-2">
<%= mail_cron_log.mail_subject %>
<div class="quick-edit">
<ul class="nav nav-pills hide">
<%if at_least_module_manager %>
<li><%= link_to t(:delete_), admin_mail_cron_log_path(mail_cron_log), :confirm => t('sure?'), :method => :delete, :remote => true %></li>
<% end -%>
</ul>
</div>
</td>
<td class="span2">
<%= mail_cron_log.mail_to.gsub(/,/, "<br />").html_safe %>
</td>
<td class="span2">
<%= mail_cron_log.mail_user %>
</td>
<td class="span2">
<%= mail_cron_log.mail_from_app %>
</td>
<td class="span2">
<%= display_date_time(mail_cron_log.created_at) %>
</td>
</tr>
@@ -0,0 +1,6 @@
<%= render_sort_bar(true, delete_admin_mail_cron_logs_path(:direction => params[:direction], :sort => params[:sort], :sort_options => params[:sort_options]),
['subject', 'mail_subject','span2', :subject] ,
['mail_to', 'mail_to','span2', :mail_to] ,
['mail_user', 'mail_user','span2', :mail_user] ,
['mail_from_app', 'mail_from_app','span2', :mail_from_app] ,
['sentdate', 'created_at','span2', :sentdate] ).html_safe %>
@@ -0,0 +1 @@
$("#<%= dom_id @mail_cron_log %>").remove();
@@ -0,0 +1,28 @@
<% content_for :side_bar do %>
<%= render :partial => 'layouts/side_bar', :locals => {:link_name => t('site.settings'), :link_url => admin_site_site_info_path(@site), :icon => 'icons-cog', :side_bar_content => 'admin/sites/side_bar'} %>
<% end %>
<%= render 'filter' %>
<table class="table main-list">
<thead>
<tr>
<th class="span1"></th>
<th class="span2"></th>
<th class="span2"></th>
<th class="span2"></th>
<th class="span2"></th>
<th class="span2"></th>
</tr>
</thead>
<tbody id="tbody_mail_cron_logs" class="sort-holder">
<%= render :partial => "mail_cron_log",:collection=> @mail_cron_logs%>
</tbody>
</table>
<div class="form-actions form-fixed pagination-right">
<div id="web_link_pagination" class="paginationFixed">
<%= paginate @mail_cron_logs, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil} %>
</div>
</div>
@@ -0,0 +1,4 @@
$("#delete_all").attr("action", "<%= delete_admin_mail_cron_logs_path(:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil, :sort_options => params[:sort_options]) %>");
$("#sort_headers").html("<%= j render 'sort_headers' %>");
$("#tbody_mail_cron_logs").html("<%= j render :partial => 'mail_cron_log', :collection => @mail_cron_logs %>");
$("#mail_cron_log_pagination").html("<%= j paginate @mail_cron_logs, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil} %>");
@@ -0,0 +1,3 @@
<div class="filter-clear">
<%= link_to content_tag(:i, nil, :class => 'icons-cycle') + t(:clear), admin_mail_crons_path(:filter => @filter, :sort => params[:sort], :direction => params[:direction], :clear => true, :type => type), :class => "btn btn-small js_history" %>
</div>
@@ -0,0 +1,11 @@
<div id="filter" class="subnav">
<div class="filters">
<div id="sort_headers" class="table-label">
<%= render 'sort_headers' %>
</div>
</div>
</div>
<% content_for :page_specific_javascript do %>
<%= javascript_include_tag "sort_header" %>
<% end %>
+122
View File
@@ -0,0 +1,122 @@
<div id= "poststuff">
<% # encoding: utf-8 %>
<%= f.error_messages %>
<!--Widget start-->
<div id="sub-wiget">
<div id="widget-date" class="widget-box widget-size-300">
<h3 class="widget-title"><i class="icons-calendar"></i><%= t(:date_) %></h3>
<div class="widget-content clear">
<div class="control-group">
<%= f.datetime_picker :mail_sentdate, :picker_type => 'separated', :label => t(:start) %>
</div>
</div>
</div>
</div>
<!--Wiget End-->
<!--Post Start-->
<div id="post-body">
<div id="post-body-content" class="clear">
<%= f.label :mail_subject ,t(:mail_subject)%>
<%= f.text_field :mail_subject %>
<%= f.label :mail_from ,t(:mail_from)%>
<%= f.text_field :mail_from %>
<%= f.label :mail_reply_to ,t(:mail_reply_to)%>
<%= f.text_field :mail_reply_to %>
<%= f.label :mail_to ,t(:mail_to)%>
<%= f.text_field :mail_to %>
<%= f.label :mail_content ,t(:mail_content)%>
<%= f.text_area :mail_content, :class=>"span12", :cols=>"25", :rows=>"10" %>
</div>
<div>
<div id='plugin_files' class="plugin_files_block">
<table class="table table-condensed">
<thead>
<tr>
<th>File</th>
<th>File Name</th>
<th class="span1"></th>
</tr>
</thead>
<tfoot>
<tr>
<td style="text-align:center" colspan="3">
<div id='add_plugin_file' class="info_input plugin_files_block">
<%= hidden_field_tag 'plugin_file_field_count', @mail_cron.mail_cron_files.count %>
<a class="add"><span class="btn btn-primary btn-small"><i class="icon-plus icon-white"></i> ADD/新增</span></a>
</div>
</td>
</tr>
</tfoot>
<tbody>
<% @mail_cron.mail_cron_files.each_with_index do |mail_cron_file, i| %>
<%= f.fields_for :mail_cron_files, mail_cron_file do |f| %>
<%= render :partial => 'form_file', :object => mail_cron_file, :locals => {:f => f, :i => i} %>
<% end %>
<% end %>
</tbody>
</table>
</div>
</div>
<!--Post End-->
</div>
<div class="form-actions">
<%= f.submit t('submit'), :class=>'btn btn-primary' %>
<%= link_to t('cancel'), get_go_back, :class=>"btn" %>
</div>
<% content_for :page_specific_javascript do %>
<%= javascript_include_tag "archive_plugin_form" %>
<script>
$('#add_plugin_file a.add').live('click', function(){
var new_id = $(this).prev().attr('value');
var old_id = new RegExp("new_add_plugin_files", "g");
$(this).prev().attr('value', parseInt(new_id) + 1);
$(this).parents('table').append(("<%= escape_javascript(add_attribute 'form_file', f, :mail_cron_files) %>").replace(old_id, new_id));
});
$('.add_plugin_files_block a.delete').live('click', function(){
$(this).parents('.list_item').remove();
});
$('.action a.remove_existing_record').live('click', function(){
$(this).next('.should_destroy').attr('value', 1);
$("tr#add_plugin_file_" + $(this).prev().attr('value')).hide();
});
</script>
<% end %>
</div>
@@ -0,0 +1,35 @@
<% # encoding: utf-8 %>
<tr id="<%= "plugin_file_#{form_file.id}" if !form_file.new_record? %>" class='list_item'>
<td>
<div class="control-group">
<div class="controls">
<%= f.file_field :file %>
<%= form_file.file.file ? ( link_to t(:view), form_file.file.url, {:class => 'btn', :target => '_blank', :title => t(:view)} ) : '' %>
</div>
</div>
</td>
<td>
<div class="tab-content">
<%= f.text_field :title %>
</div>
</td>
<td>
<span class="action">
<% if form_file.new_record? %>
<a class="delete"><i class="icon-remove"></i></a>
<% else %>
<%= f.hidden_field :id %>
<a class="remove_existing_record"><i class="icon-remove"></i></a>
<%= f.hidden_field :should_destroy, :value => nil, :class => 'should_destroy' %>
<% end %>
</span>
</td>
</tr>
@@ -0,0 +1,26 @@
<tr id="<%= dom_id mail_cron %>" class="with_action">
<td class="span1">
<% if is_manager? %>
<%= check_box_tag 'to_delete[]', mail_cron.id, false, :class => "checkbox_in_list" %>
<% end -%>
</td>
<td class="span1-2">
<%= mail_cron.mail_subject %>
<div class="quick-edit">
<ul class="nav nav-pills hide">
<%if at_least_module_manager %>
<li><%= link_to t(:delete_), admin_mail_cron_path(mail_cron), :confirm => t('sure?'), :method => :delete, :remote => true %></li>
<% end -%>
</ul>
</div>
</td>
<td class="span2">
<%= mail_cron.mail_to.gsub(/,/, "<br />").html_safe %>
</td>
<td class="span2">
<%= mail_cron.mail_from_app %>
</td>
<td class="span2">
<%= display_date_time(mail_cron.mail_sentdate) %>
</td>
</tr>
@@ -0,0 +1,5 @@
<%= render_sort_bar(true, delete_admin_mail_crons_path(:direction => params[:direction], :sort => params[:sort], :sort_options => params[:sort_options]),
['subject', 'mail_subject','span2', :mail_subject] ,
['mail_to', 'mail_to','span2', :mail_to] ,
['mail_from_app', 'mail_from_app','span2', :mail_from_app] ,
['sentdate', 'mail_sentdate','span2', :mail_sentdate] ).html_safe %>
@@ -0,0 +1 @@
$("#<%= dom_id @mail_cron %>").remove();
+9
View File
@@ -0,0 +1,9 @@
<% content_for :side_bar do %>
<%= render :partial => 'layouts/side_bar', :locals => {:link_name => t('site.settings'), :link_url => admin_site_site_info_path(@site), :icon => 'icons-cog', :side_bar_content => 'admin/sites/side_bar'} %>
<% end %>
<h1><%= t('mail_cron.editing_mail_cron') %></h1>
<%= form_for @mail_cron, :url => admin_mail_cron_path(@mail_cron), :html => {:class => 'clear'} do |f| %>
<%= render :partial => 'form', :locals => {:f => f} %>
<% end %>
+27
View File
@@ -0,0 +1,27 @@
<% content_for :side_bar do %>
<%= render :partial => 'layouts/side_bar', :locals => {:link_name => t('site.settings'), :link_url => admin_site_site_info_path(@site), :icon => 'icons-cog', :side_bar_content => 'admin/sites/side_bar'} %>
<% end %>
<%= render 'filter' %>
<table class="table main-list">
<thead>
<tr>
<th class="span1"></th>
<th class="span2"></th>
<th class="span2"></th>
<th class="span2"></th>
<th class="span2"></th>
</tr>
</thead>
<tbody id="tbody_mail_crons" class="sort-holder">
<%= render :partial => "mail_cron",:collection=> @mail_crons%>
</tbody>
</table>
<div class="form-actions form-fixed pagination-right">
<div id="web_link_pagination" class="paginationFixed">
<%= paginate @mail_crons, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil} %>
</div>
</div>
+4
View File
@@ -0,0 +1,4 @@
$("#delete_all").attr("action", "<%= delete_admin_mail_crons_path(:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil, :sort_options => params[:sort_options]) %>");
$("#sort_headers").html("<%= j render 'sort_headers' %>");
$("#tbody_mail_crons").html("<%= j render :partial => 'mail_cron', :collection => @mail_crons %>");
$("#mail_cron_pagination").html("<%= j paginate @mail_crons, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil} %>");
+12
View File
@@ -0,0 +1,12 @@
<% content_for :side_bar do %>
<%= render :partial => 'layouts/side_bar', :locals => {:link_name => t('site.settings'), :link_url => admin_site_site_info_path(@site), :icon => 'icons-cog', :side_bar_content => 'admin/sites/side_bar'} %>
<% end %>
<div id="poststuff">
<h1><%= t('mail_cron.new_mail_cron') %></h1>
<%= form_for @mail_cron, :url => admin_mail_crons_path, :html => {:class => 'clear'} do |f| %>
<%= render :partial => 'form', :locals => {:f => f} %>
<% end %>
</div>
+2
View File
@@ -9,6 +9,8 @@
<%#= content_tag :li, link_to(t(:theme), admin_site_ui_theme_path(@site)), :class => active_for_action('sites', 'ui_theme') %>
<%= content_tag :li, link_to(t('sitemap'), admin_site_sitemap_path(@site)), :class => active_for_action('sites', 'sitemap') %>
<%= content_tag :li, link_to(t('user_actions'), admin_user_actions_path), :class => active_for_action('user_actions', 'index') %>
<%= content_tag :li, link_to(t('mail.mail_cron'), admin_mail_crons_path), :class => active_for_action('mail_cron', 'index') %>
<%= content_tag :li, link_to(t('mail.mail_cron_log'), admin_mail_cron_logs_path), :class => active_for_action('mail_cron_log', 'index') %>
<% 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
View File
@@ -272,6 +272,8 @@ en:
setting: Mail settings
tls: TLS
user_name: User Name
mail_cron: Scheduled Email
mail_cron_log: Email Log
manager: Manager
markup: Markup
markup_options: Markup options
+2
View File
@@ -272,6 +272,8 @@ zh_tw:
setting: 電子郵件設定
tls: 電子郵件TLS
user_name: 電子郵件帳號
mail_cron: 待寄Email
mail_cron_log: Email發送記錄
manager: 管理者
markup: 輸入模式
markup_options: 標註選項
+1 -1
View File
@@ -8,7 +8,7 @@ defaults: &defaults
development:
<<: *defaults
database: production_7
database: demo_site_development
test:
<<: *defaults
database: test_site
+7 -1
View File
@@ -8,4 +8,10 @@ generate_system_summary:
cron: 0 0 12 * * *
class: GenerateSystemSummary
args:
description: Generate the system status such as disk free space,package version list for showing at site tab
description: Generate the system status such as disk free space,package version list for showing at site tab
email_cron:
cron: 0 0 [10,16,22] * * *
class: EmailCron
args:
description: EmailCron
+18
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"
@@ -29,6 +34,19 @@ Orbit::Application.routes.draw do
get 'delete'
end
end
resources :mail_crons do
collection do
get 'delete'
end
end
resources :mail_cron_logs do
collection do
get 'delete'
end
end
resources :asset_categories
resources :asset_tags
resources :app_auths
+3 -2
View File
@@ -79,9 +79,10 @@ module OrbitCoreLib
else
auth_object_space = ObjectAuth.where(obj_authable_type: self.to_s,title: title)
end
query1 = auth_object_space.any_in({sub_role_ids: sub_role_ids_ary}).excludes(blocked_user_ids: user.id)
query2 = auth_object_space.any_of({all: true},{privilege_user_ids: user.id},{role_ids: user.role_ids}).excludes(blocked_user_ids: user.id)
query2 = auth_object_space.any_of({all: true},{privilege_user_ids: user.id}).excludes(blocked_user_ids: user.id)
# query2 = auth_object_space.any_of({all: true},{privilege_user_ids: user.id},{role_ids: user.role_ids}).excludes(blocked_user_ids: user.id) #save for backup if something went wrong (0626 Matt)
result = (query1 + query2).uniq
result.collect{|t| t.obj_authable}.delete_if{|val| val==nil}
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)")
@@ -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 -1
View File
@@ -36,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
@@ -36,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: 時間
@@ -1,14 +1,18 @@
class Panel::Archive::BackEnd::ArchiveFileCategorysController < OrbitBackendController
before_filter :for_app_manager,:except => [:index]
include OrbitControllerLib::DivisionForDisable
class Panel::Archive::BackEnd::ArchiveFileCategorysController < OrbitBackendController
include OrbitControllerLib::DivisionForDisable
before_filter :for_app_manager,:except => [:index,:get_categorys_json,:get_archive_files_json]
before_filter :force_order_for_visitor,:only=>[:index,:get_categorys_json,:get_archive_files_json]
before_filter :force_order_for_user,:except => [:index,:get_categorys_json,:get_archive_files_json]
before_filter :for_app_sub_manager,:except => [:index,:get_categorys_json,:get_archive_files_json]
def index
@archive_file_categorys = get_categories_for_index("ArchiveFileCategory")
# @archive_file_categorys = ArchiveFileCategory.all
@archive_file_category = ArchiveFileCategory.new(:display => 'List')
@url = panel_archive_back_end_archive_file_categorys_path
@url = panel_archive_back_end_archive_file_categorys_path
respond_to do |format|
format.html # index.html.erb
@@ -16,6 +20,42 @@ class Panel::Archive::BackEnd::ArchiveFileCategorysController < OrbitBackendCont
end
end
def get_categorys_json
categorys = ArchiveFileCategory.all
data = Array.new
categorys.each do |c|
data << {
category: c.title,
link: "#{url_for( :action => "index",
:controller => "panel/archive/front_end/archive_files",
:format => :rss,
:only_path => false,
:inner=>true,
:category_id => c )}"
}
end
render :json => JSON.pretty_generate(data)
end
def get_archive_files_json
archive_file = ArchiveFileCategory.find(params[:archive_file_category_id]).archive_files
p archive_file
data = Array.new
archive_file.each do |b|
data << {
title: b.title,
link: "http://#{request.host_with_port}#{panel_archive_front_end_archive_file_path(b, :category_id => b.archive_file_category.id)}",
tag: b.sorted_tags.to_a,
}
end
render :json => JSON.pretty_generate(data)
end
# GET /archive_files/1
# GET /archive_files/1.xml
def show
@@ -0,0 +1,15 @@
module Panel::Archive::BackEnd::ArchiveFileCategorysHelper
include ActionView::Helpers::UrlHelper
def show_anc_cate_permission_link(archive_file_category)
type = 'submit'
oa = archive_file_category.get_object_auth_by_title(type)
if oa.nil?
archive_file_category.object_auths.new(title: type ).save
oa = archive_file_category.get_object_auth_by_title(type)
end
link_to t(:category_auth),admin_object_auth_ob_auth_path(oa)
end
end
@@ -1,13 +1,16 @@
<tr id="<%= dom_id archive_file_category %>" class="with_action">
<td>
<%= archive_file_category.key %>
<div class="quick-edit">
<ul class="nav nav-pills hide">
<li><%= link_to t('archive_file_category.edit'), edit_panel_archive_back_end_archive_file_category_path(archive_file_category), :remote => true %></li>
<% if is_admin?%>
<li><%= link_to t(:edit), edit_panel_archive_back_end_archive_file_category_path(archive_file_category), :remote => true %></li>
<li><%= link_to show_toggle_archive_btn(archive_file_category) , panel_archive_back_end_archive_file_category_path(archive_file_category), :confirm => t(:sure?), :method => :delete, :remote => true,:class=> "archive_toggle" %></li>
<!-- <li><%#= link_to t('archive_file_category.delete'), panel_archive_back_end_archive_file_category_path(archive_file_category), :confirm => t('sure?'), :method => :delete, :remote => true %></li> -->
<% end %>
<%if is_manager? || is_admin? %>
<li><%= show_anc_cate_permission_link(archive_file_category) %></li>
<% end %>
</ul>
</div>
</td>
@@ -24,16 +24,17 @@
</td>
<td><%= archive_file.archive_file_category.title %></td>
<td>
<%= link_to archive_file.title, panel_archive_front_end_archive_file_path(archive_file) %>
<%= link_to archive_file.title, panel_archive_front_end_archive_file_path(archive_file) %>
<div class="quick-edit">
<ul class="nav nav-pills hide">
<% if (archive_file.create_user_id == current_or_guest_user.id) || is_manager? %>
<li><%= link_to t(:edit), edit_panel_archive_back_end_archive_file_path(archive_file) %></li>
<li class="dropdown"><%= link_to t(:delete_), panel_archive_back_end_archive_file_path(archive_file), :confirm => t(:sure?), :method => :delete, :remote => true %></li>
<% end -%>
</ul>
</div>
<div class="quick-edit">
<ul class="nav nav-pills hide">
<%if at_least_module_manager || archive_file.archive_file_category.cur_user_is_sub_manager_of(:edit)%>
<li><%= link_to t('edit'), edit_panel_archive_back_end_archive_file_path(archive_file, :page => params[:page], :filter => @filter) %></li>
<li><%= link_to t(:delete_), panel_archive_back_end_archive_file_path(archive_file), :confirm => t('sure?'), :method => :delete, :remote => true %></li>
<% end -%>
</ul>
</div>
</td>
<td>
<div class="label-group">
+8 -3
View File
@@ -50,7 +50,7 @@ module Archive
head_label_i18n 'archive.archive',:icon_class=>"icons-archive"
available_for [:admin,:guest,:manager,:sub_manager]
active_for_controllers ({:private=>['archive_file_categorys','archive_files'],:public=>['panel/archive/back_end/tags']})
# active_for_object_auth ['BulletinCategory']
active_for_object_auth ['ArchiveFileCategory']
head_link_path "panel_archive_back_end_archive_files_path"
@@ -64,7 +64,7 @@ module Archive
:link_path=>"new_panel_archive_back_end_archive_file_path" ,
:priority=>2,
:active_for_action=>{:archive_files=>:new},
:available_for => [:admin]
:available_for => [:sub_manager]
context_link 'categories',
:link_path=>"panel_archive_back_end_archive_file_categorys_path" ,
@@ -76,7 +76,12 @@ module Archive
:link_path=>"admin_tags_path(:module_app_id => ModuleApp.first(conditions: {title: 'Archive'}))" ,
:priority=>4,
# :active_for_action=>{:bulletin_categorys=>:index},
:available_for => [:admin]
:available_for => [:manager]
context_link 'module_authorization',
:link_path=>"admin_module_app_manager_auth_proc_path(ModuleApp.first(conditions: {title: 'Archive'}))",
:priority=>6,
:active_for_app_auth => 'Archive'
end
end
@@ -51,7 +51,14 @@ var calendarAPI = function(){
// c.loadMonthView(c.cur_month,c.cur_year);
// c.loadWeekView(c.cur_week,c.cur_year);
// c.loadDayView(c.cur_date,c.cur_month,c.cur_year);
c.loadAgendaView();
agenda_end_month = c.cur_month + 5;
agenda_end_year = c.cur_year;
if(agenda_end_month > 12){
agenda_end_month = agenda_end_month - 12;
agenda_end_year++;
}
c.loadAgendaView(c.cur_month,c.cur_year,agenda_end_month,agenda_end_year);
$(".calendar-filter-btn").each(function(){
c.calendars.push($(this).attr("href"));
})
@@ -130,7 +137,7 @@ var calendarAPI = function(){
c.loadDayView(c.cur_date,c.cur_month,c.cur_year);
break;
case 'agenda':
c.loadAgendaView();
c.loadAgendaView(c.cur_month,c.cur_year,agenda_end_month,agenda_end_year);
break;
}
})
@@ -591,6 +598,8 @@ var calendarAPI = function(){
this.loadAgendaView = function(start_month,start_year,end_month,end_year){
c.view = "agenda";
var url = "cals/agenda_view";
$(".mode_switch").removeClass("active");
$(".mode_switch:eq(3)").addClass("active");
if(start_month && start_year && end_month && end_year)
var url = "cals/agenda_view?s_month="+start_month+"&s_year="+start_year+"&e_month="+end_month+"&e_year="+end_year ;
@@ -190,7 +190,8 @@ class Panel::Calendar::BackEnd::CalsController < OrbitBackendController
end
display_time = est + " " + event.start_am_pm + " - " + eet + " " + event.end_am_pm
end
for c in start_date..(start_date + no_of_days)
for c in start_date..(start_date + no_of_days - 1)
if h.index(c) == nil
h << c
end
@@ -296,7 +297,7 @@ class Panel::Calendar::BackEnd::CalsController < OrbitBackendController
year = params[:year].to_i
fromcalendars = params[:calendars]
@d = getWeekDataSet(week,year)
events = Event.where(:cal_id.in=>fromcalendars).and(:start_week.lte => week).and(:start_year => year).and(:end_week.gte => week).and(:start_year => year).asc(:start_week).asc(:start_date)
events = Event.where(:cal_id.in=>fromcalendars).and(:start_week.lte => week).and(:start_year => year).and(:end_week.gte => week).asc(:start_week).asc(:start_date)
@events = Array.new
events.each_with_index do |event,i|
# @temp = Array.new
@@ -335,7 +336,7 @@ class Panel::Calendar::BackEnd::CalsController < OrbitBackendController
startdt = @d[0].to_i
event.all_day = true
if event.end_week == week
colcount = 7 - @d.index(event.end_date.to_s).to_i
colcount = @d.index(event.end_date.to_s).to_i + 1
days = 7;
startdt = event.start_date
end
@@ -71,8 +71,11 @@ class Panel::Calendar::BackEnd::EventsController < OrbitBackendController
start_am_pm = params[:start_am_pm]
end_am_pm = params[:end_am_pm]
cal_id = params[:event][:cal_id]
if params[:event][:cal_id]
cal_id = params[:event][:cal_id]
else
cal_id = Cal.first.id.to_s
end
# if start_am_pm == "PM"
# temp_start_time = $starttime + 12
# end
@@ -90,7 +93,9 @@ class Panel::Calendar::BackEnd::EventsController < OrbitBackendController
final_start_time = Date.new(start_year.to_i,start_month.to_i,start_date.to_i)
final_end_time = Date.new(end_year.to_i,end_month.to_i,end_date.to_i)
start_week = final_start_time.strftime("%U")
end_week = final_end_time.strftime("%U")
start_week = start_week.to_i + 1
end_week = final_end_time.strftime("%U")
end_week = end_week.to_i + 1
total_days = final_end_time - final_start_time
@event = Event.new
@event.title = title
@@ -150,6 +155,12 @@ class Panel::Calendar::BackEnd::EventsController < OrbitBackendController
# if end_am_pm == "PM"
# temp_end_time = $endtime + 12
# end
if params[:event][:cal_id]
cal_id = params[:event][:cal_id]
else
cal_id = Cal.first.id.to_s
end
if params[:all_day]
all_day = true
$starttime = 0
@@ -161,7 +172,9 @@ class Panel::Calendar::BackEnd::EventsController < OrbitBackendController
final_start_time = Date.new(start_year.to_i,start_month.to_i,start_date.to_i)
final_end_time = Date.new(end_year.to_i,end_month.to_i,end_date.to_i)
start_week = final_start_time.strftime("%U")
end_week = final_end_time.strftime("%U")
start_week = start_week.to_i + 1
end_week = final_end_time.strftime("%U")
end_week = end_week.to_i + 1
total_days = final_end_time - final_start_time
@event = Event.find(params[:id])
@event.title = title