diff --git a/Gemfile b/Gemfile
index 0d435026c..1c524cd98 100644
--- a/Gemfile
+++ b/Gemfile
@@ -1,6 +1,8 @@
source 'http://rubygems.org'
gem 'rails', "~> 3.2.9"
+gem 'savon', '~> 2.2.0'
+
gem "brakeman"
gem 'mime-types'
diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb
new file mode 100644
index 000000000..42060868c
--- /dev/null
+++ b/app/controllers/sessions_controller.rb
@@ -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] = "很抱歉,您無此權限或帳號登入本站,請洽本站管理員
Sorry, you don't have the account or authority to login. Please contact the website administrator."
+ edirect_to :root
+ end
+
+ end
+
+end
\ No newline at end of file
diff --git a/config/resque_schedule.yml b/config/resque_schedule.yml
index 49396599a..a4e255bf3 100644
--- a/config/resque_schedule.yml
+++ b/config/resque_schedule.yml
@@ -10,7 +10,7 @@ generate_system_summary:
args:
description: Generate the system status such as disk free space,package version list for showing at site tab
- email_cron:
+email_cron:
cron: 0 0 [10,16,22] * * *
class: EmailCron
args:
diff --git a/config/routes.rb b/config/routes.rb
index 716918775..25e488432 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -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"
diff --git a/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletins_controller.rb b/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletins_controller.rb
index e45ced1d6..2776e862f 100644
--- a/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletins_controller.rb
+++ b/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletins_controller.rb
@@ -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
+ 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
+ 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)")
diff --git a/vendor/built_in_modules/announcement/app/models/bulletin.rb b/vendor/built_in_modules/announcement/app/models/bulletin.rb
index 207b3a544..2b33d06b3 100644
--- a/vendor/built_in_modules/announcement/app/models/bulletin.rb
+++ b/vendor/built_in_modules/announcement/app/models/bulletin.rb
@@ -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 ))
diff --git a/vendor/built_in_modules/announcement/app/views/announcement_mailer/cron_mail.html.erb b/vendor/built_in_modules/announcement/app/views/announcement_mailer/cron_mail.html.erb
new file mode 100644
index 000000000..fbf7e0b1c
--- /dev/null
+++ b/vendor/built_in_modules/announcement/app/views/announcement_mailer/cron_mail.html.erb
@@ -0,0 +1,29 @@
+<% # encoding: utf-8 %>
+
+
+