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 %> + + + + + + +
+
+ + <%= t('announcement.mail_hi') %>

+ <%= t('announcement.mail_url_view') %>

+ " target="_blank"> <%= @data.mail_content["title"] %>

+ + --
+ <%= t('announcement.mail_source') %> :" target="_blank"> <%= @data.mail_content["site_title"] %>
+ <%= t('announcement.mail_time') %> <%= DateTime.now %> +
+ + + + + + + + + + + \ No newline at end of file diff --git a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_form.html.erb b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_form.html.erb index 289608773..3e87b44b1 100644 --- a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_form.html.erb +++ b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_form.html.erb @@ -265,6 +265,50 @@ + + +
+
+ +
+

<%= t('announcement.email_eminder')%>

+
+
+ +
+
+ + <%= f.datetime_picker :email_sentdate, :picker_type => 'separated', :label => t("announcement.email_sentdate") %> + +
+ + <%= f.label :email_group ,t("announcement.email_group")%> +
+ +
+ + + <%= f.label :other_mailaddress ,"#{t("announcement.other_mailaddress")}(#{t("announcement.other_mailaddress_note")})"%> + <%= f.text_area :other_mailaddress, :class=>"span12", :cols=>"25", :rows=>"10" %> + +
+ + + + +
+
+
+ + @@ -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') + }) }); <% end %> diff --git a/vendor/built_in_modules/announcement/config/locales/en.yml b/vendor/built_in_modules/announcement/config/locales/en.yml index 4d0742606..d2d1349ca 100644 --- a/vendor/built_in_modules/announcement/config/locales/en.yml +++ b/vendor/built_in_modules/announcement/config/locales/en.yml @@ -37,4 +37,21 @@ en: widget: bulletins_and_web_links: Bulletins and Web Resources index: Index - search: Search \ No newline at end of file + 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 + diff --git a/vendor/built_in_modules/announcement/config/locales/zh_tw.yml b/vendor/built_in_modules/announcement/config/locales/zh_tw.yml index fc1f4affd..b676fccdc 100644 --- a/vendor/built_in_modules/announcement/config/locales/zh_tw.yml +++ b/vendor/built_in_modules/announcement/config/locales/zh_tw.yml @@ -37,4 +37,22 @@ zh_tw: widget: bulletins_and_web_links: 索引 index: 索引 - search: 搜尋 \ No newline at end of file + 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: 時間 + +