Compare commits

...
This repository has been archived on 2024-03-16. You can view files and clone it, but cannot push or open issues or pull requests.

12 Commits

Author SHA1 Message Date
Spen 22409c960b sso server for ntu mb server site 2014-01-13 17:18:56 +08:00
saurabhbhatia bc05eca7cc Fixed import data controller to work for admin and user only 2014-01-13 15:50:44 +08:00
Manson Wang 363a87ee2a Added sync button in personal plugin back_end 2014-01-13 15:50:44 +08:00
Spen 81ab701425 fix member plugin frontend 2014-01-13 15:50:44 +08:00
saurabhbhatia ac8e169cd0 Updated order for zh_tw translation 2014-01-13 15:50:44 +08:00
saurabhbhatia d615f1df6b Fixed order of Teacher Show page
Conflicts:
	vendor/built_in_modules/member/app/views/panel/member/front_end/member_lists/show.html.erb
2014-01-13 15:50:44 +08:00
saurabhbhatia dd36e3acfb Fixed the order in Personal Plugin member show page
Conflicts:
	vendor/built_in_modules/member/app/views/panel/member/front_end/member_lists/show.html.erb
2014-01-13 15:50:44 +08:00
saurabhbhatia be4f9a3be3 Updated Import data without page method 2014-01-13 15:50:44 +08:00
Spen 19b78c717a ntu mb sso logout fix
Conflicts:
	app/views/layouts/_right_menu.html.erb
2014-01-13 15:50:43 +08:00
Spen 0b557117ff sso for ntu mb all sites
Conflicts:
	app/assets/stylesheets/basic/global.css
	app/views/devise/sessions/new.html.erb
	app/views/layouts/devise.html.erb
2014-01-13 15:50:43 +08:00
saurabhbhatia 63a8f24f49 both manual and automatic methods working
Conflicts:
	config/routes.rb
2014-01-13 15:50:43 +08:00
saurabhbhatia e9d2051d78 Added Automatic Synchronize
Conflicts:
	Gemfile
	app/controllers/admin/import_data_controller.rb
	vendor/built_in_modules/personal_conference/app/models/writing_conference.rb
2014-01-13 15:50:43 +08:00
24 changed files with 1105 additions and 62 deletions

View File

@ -20,6 +20,7 @@ gem "acts_as_unvlogable"
gem 'youtube_it' gem 'youtube_it'
gem 'gotcha' gem 'gotcha'
gem "geocoder" gem "geocoder"
gem 'whenever', :require => false
# gem "memcached", "~> 1.4.3" # gem "memcached", "~> 1.4.3"
# gem "memcache-client" # gem "memcache-client"

View File

@ -682,8 +682,8 @@ legend {
margin-bottom: 25px; margin-bottom: 25px;
} }
.sign-in .btn { .sign-in .btn {
padding: 4px 0;
display: block; display: block;
padding: 4px 0;
width: 100%; width: 100%;
margin-bottom: 10px; margin-bottom: 10px;
} }
@ -711,7 +711,7 @@ legend {
.sign-in .checkbox { .sign-in .checkbox {
position: absolute; position: absolute;
text-align: left; text-align: left;
bottom: 37px; bottom: 47px;
} }
.sign-in .switchboard { .sign-in .switchboard {
color: #08C; color: #08C;
@ -766,4 +766,4 @@ legend {
#main-wrap .wrap-inner { #main-wrap .wrap-inner {
padding: 20px 0; padding: 20px 0;
} }
} }

View File

@ -2,16 +2,17 @@
top: 0px; top: 0px;
left: -10px; left: -10px;
right: -10px; right: -10px;
height: 40px;
z-index: 1041; z-index: 1041;
position: fixed; position: fixed;
margin-bottom: 0; margin-bottom: 0;
height: 40px;
} }
#orbit-bar .orbitlogo { #orbit-bar .orbitlogo {
width: 20px; width: 50px;
height: 20px; height: 40px;
padding: 0!important;
background-size: 70%; background-size: 70%;
display: inline-block; display: block;
background-position: center; background-position: center;
background-repeat: no-repeat; background-repeat: no-repeat;
background-image: url(<%= asset_path 'orbit-logo.svg' %>); background-image: url(<%= asset_path 'orbit-logo.svg' %>);
@ -19,8 +20,23 @@
/* For Suck IE */ /* For Suck IE */
background-image: url(<%= asset_path 'orbit-logo.png' %>)\9; background-image: url(<%= asset_path 'orbit-logo.png' %>)\9;
} }
#orbit-bar .dropdown-menu li > a {
padding: 0 20px;
display: block;
height: 30px;
line-height: 30px;
}
#orbit-bar .dropdown-menu li i {
float: left;
display: inline-block;
margin-right: 5px;
line-height: 30px;
height: 100%;
}
#orbit-bar.navbar .nav > li > a { #orbit-bar.navbar .nav > li > a {
color: #EEE; color: #EEE;
padding: 0 15px;
display: block;
text-shadow: 0 -1px 0 #000; text-shadow: 0 -1px 0 #000;
border-right: 1px solid #363636; border-right: 1px solid #363636;
box-shadow: 1px 0px 0px rgba(0, 0, 0, 0.3); box-shadow: 1px 0px 0px rgba(0, 0, 0, 0.3);
@ -34,6 +50,11 @@
background-color: #0095CF; background-color: #0095CF;
text-shadow: 0 -1px 0 #014380; text-shadow: 0 -1px 0 #014380;
} }
#orbit-bar.navbar .nav > li > a > [class^="icon"],
#orbit-bar.navbar .nav > li > a > [class*=" icon"] {
line-height: 40px;
display: block;
}
#orbit-bar.navbar .nav li.dropdown.open > .dropdown-toggle, #orbit-bar.navbar .nav li.dropdown.open > .dropdown-toggle,
#orbit-bar.navbar .nav li.dropdown.active > .dropdown-toggle, #orbit-bar.navbar .nav li.dropdown.active > .dropdown-toggle,
#orbit-bar.navbar .nav li.dropdown.open.active > .dropdown-toggle { #orbit-bar.navbar .nav li.dropdown.open.active > .dropdown-toggle {
@ -41,9 +62,7 @@
text-shadow: 0 -1px 0 #014380; text-shadow: 0 -1px 0 #014380;
} }
#orbit-bar .navbar-inner { #orbit-bar .navbar-inner {
height: 40px;
border-width: 0; border-width: 0;
min-height: 40px;
background-color: #333333; background-color: #333333;
-webkit-border-radius: 0px; -webkit-border-radius: 0px;
-moz-border-radius: 0px; -moz-border-radius: 0px;
@ -66,6 +85,10 @@
right: auto; right: auto;
bottom: auto; bottom: auto;
} }
#orbit-bar .nav > li {
display: block;
line-height: 40px;
}
#orbit-bar .nav [class^="icon"], #orbit-bar .nav [class^="icon"],
#orbit-bar .nav [class*=" icon"] { #orbit-bar .nav [class*=" icon"] {
font-size: 1.5em; font-size: 1.5em;
@ -92,17 +115,45 @@
#orbit-bar .modal .input-prepend { #orbit-bar .modal .input-prepend {
margin-bottom: 15px; margin-bottom: 15px;
} }
#orbit-bar .modal .other-sign-in {
position: relative;
text-align: center;
margin-top: 20px;
margin-bottom: 30px;
padding-bottom: 20px;
border-bottom: 1px solid #EDEDED;
}
#orbit-bar .modal .other-sign-in .btn {
padding: 4px 0;
display: block;
margin-bottom: 5px;
width: 100%;
}
#orbit-bar .modal .other-sign-in p {
position: absolute;
width: 30px;
height: 30px;
background-color: #FFF;
padding: 0 10px;
margin-bottom: 0;
margin-left: -25px;
line-height: 30px;
left: 50%;
bottom: -15px;
font-size: 1.3em;
color: #B1B1B1;
}
/*Search*/ /*Search*/
#orbit-bar #search { #orbit-bar #search {
margin-bottom: 0; margin-bottom: 0;
position: relative; position: relative;
padding: 8px 10px 0; padding: 0 10px;
border-right: 1px solid #363636; border-right: 1px solid #363636;
box-shadow: 1px 0px 0px rgba(0, 0, 0, 0.3); box-shadow: 1px 0px 0px rgba(0, 0, 0, 0.3);
} }
#orbit-bar #search form { #orbit-bar #search form {
margin-bottom: 8px; margin: 8px 0;
} }
#orbit-bar #search input[type="text"] { #orbit-bar #search input[type="text"] {
height: 14px; height: 14px;
@ -110,6 +161,7 @@
font-size: 13px; font-size: 13px;
padding-left: 25px; padding-left: 25px;
padding-right: 25px; padding-right: 25px;
display: block;
-webkit-border-radius: 12px; -webkit-border-radius: 12px;
-moz-border-radius: 12px; -moz-border-radius: 12px;
-o-border-radius: 12px; -o-border-radius: 12px;
@ -122,15 +174,16 @@
#orbit-bar #search .search-clear { #orbit-bar #search .search-clear {
position: absolute; position: absolute;
color: #A3A3A3; color: #A3A3A3;
top: 14px; top: 16px;
} }
#orbit-bar #search .icon-search { #orbit-bar #search .icon-search {
left: 13px; left: 15px;
top: 15px;
font-size: 1.2em; font-size: 1.2em;
width: 1.25em;
margin-top: 0;
} }
#orbit-bar #search .search-clear { #orbit-bar #search .search-clear {
right: 14px; right: 13px;
font-size: 1.3em; font-size: 1.3em;
} }
#orbit-bar #search .search-clear:hover { #orbit-bar #search .search-clear:hover {

View File

@ -0,0 +1,752 @@
# encoding: utf-8
require 'net/http'
require 'open-uri'
class Admin::ImportDataController < OrbitBackendController
# helper Admin::PagePartsHelper
# include Admin::FrontendWidgetInterface
open_for_user
open_for_admin
def get_teacher_data
uri = URI("https://localhost:8000/teachers.xml")
#params = {"UnitName" => "管理學院".encode('big5-uao'), "account" => "manage"}
#uri.query = URI.encode_www_form(params)
res = Net::HTTP.get_response(uri)
@teacher_data = Hash.from_xml(res.body)
@teachers = @teacher_data["objects"]
@i = 5000
@teachers.each do |hash|
# @roles = Role.skip(1).first
@roles = Role.all
@teacher = User.new
I18n.locale = :zh_tw
if !hash['teacher_zh_tw'].blank?
@teacher.first_name = hash['teacher_zh_tw']
elsif hash['teacher_zh_tw'].blank? && !hash['teacher_en'].blank?
@teacher.first_name = hash['teacher_en']
elsif hash['teacher_zh_tw'].blank? && hash['teacher_en'].blank?
@teacher.first_name = "Please Fill the Name"
end
I18n.locale = :en
if !hash['teacher_en'].blank?
@teacher.first_name = hash['teacher_en']
elsif hash['teacher_en'].blank? && !hash['teacher_zh_tw'].blank?
@teacher.first_name = hash['teacher_zh_tw']
elsif hash['teacher_en'].blank? && hash['teacher_zh_tw'].blank?
@teacher.first_name = "Please Fill the Name"
end
#@teacher.first_name = hash['teacher_en']
@teacher.ntu_seq = hash['ntu_seq']
@teacher.sid = hash['ntu_seq']
@teacher.role_ids = ["#{@roles.skip(1).first.id}"]
@teacher.password = "testpass"
@i += 10
if !hash['email'].blank?
@user = User.where(email: "#{hash['email']}")
if @user.length == 0
@teacher.email = hash['email']
elsif @user.length > 0
@teacher.email = "#{@i}duplicate@ntu.edu.tw"
end
else
@teacher.email = "#{@i}@ntu.edu.tw"
end
if hash['teacher_zh_tw'].blank? && hash['teacher_en'].blank?
@teacher.user_id = "defaultuser"
elsif hash['teacher_en'].blank?
@teacher.user_id = hash['teacher_zh_tw']
elsif hash['teacher_zh_tw']
@teacher.user_id = hash['teacher_en']
end
@teacher.save!
end
end
def get_book_data
uri = URI("http://ann.cc.ntu.edu.tw/Achv/xmlTeacherData.asp")
params = {"UnitName" => "管理學院".encode('big5-uao'), "account" => "manage"}
uri.query = URI.encode_www_form(params)
res = Net::HTTP.get_response(uri)
teachers = User.all
teachers.each do |hash|
if hash.ntu_seq.present?
ntu_seq = hash.ntu_seq
books_xml = Nokogiri::XML( \
open("http://ann.cc.ntu.edu.tw/Achv/xmlBook.asp?Seq=#{ntu_seq}"))
@books = books_xml.xpath("//Book").map do |book_node|
{
author: (book_node>"Authors").text,
year: (book_node>"PublishYear").text,
title: (book_node>"DocTitle").text,
remarks: (book_node>"Remarks").text,
publisher: (book_node>"Publisher").text,
book_title: (book_node>"BookTitle").text
}
end
if @books.present?
@books.each do |b|
@book = WritingBook.new
I18n.locale = :zh_tw
@book.authors = b[:author]
@book.paper_title = b[:title]
@book.book_title = b[:book_title]
@book.note = b[:remarks]
@book.publisher = b[:publisher]
I18n.locale = :en
@book.authors = b[:author]
@book.paper_title = b[:title]
@book.book_title = b[:book_title]
@book.note = b[:remarks]
@book.publisher = b[:publisher]
@book.year = b[:year]
@book.create_user_id = hash.id
@book.save
end
else
puts "No books by Teacher"
end
end
end
end
def get_conference_data
uri = URI("http://ann.cc.ntu.edu.tw/Achv/xmlTeacherData.asp")
params = {"UnitName" => "管理學院".encode('big5-uao'), "account" => "manage"}
uri.query = URI.encode_www_form(params)
res = Net::HTTP.get_response(uri)
teachers = User.all
teachers.each do |hash|
if hash.ntu_seq.present?
ntu_seq = hash.ntu_seq
conference_xml = Nokogiri::XML( \
open("http://ann.cc.ntu.edu.tw/Achv/xmlPaper.asp?Seq=#{ntu_seq}&type=C"))
#open("http://versatile.management.ntu.edu.tw/publication1/conference/#{ntuseq}.xml"))
@conference_papers = conference_xml.xpath("//Paper").map do |cp_node|
{
author: (cp_node>"Authors").text,
year: (cp_node>"PublishYear").text,
title: (cp_node>"PaperTitle").text,
conference: (cp_node>"PublishOn").text,
date: Date::MONTHNAMES[(cp_node>"PublishMonth").text.to_i],
location: "#{(cp_node>"Country").text} #{(cp_node>"location").text}",
conference_title: (cp_node>"PublishOn").text,
remarks: (cp_node>"Remarks").text
}
end
if @conference_papers.present?
@conference_papers.each do |b|
@conference_paper = WritingConference.new
I18n.locale = :zh_tw
@conference_paper.authors = b[:author]
if b[:title].blank?
@conference_paper.paper_title = "No Title Present"
else
@conference_paper.paper_title = b[:title]
end
if b[:conference_title].blank?
@conference_paper.conference_title = "No Title Present"
else
@conference_paper.conference_title = b[:conference_title]
end
@conference_paper.note = b[:remarks]
I18n.locale = :en
@conference_paper.authors = b[:author]
if b[:title].blank?
@conference_paper.paper_title = "No Title Present"
else
@conference_paper.paper_title = b[:title]
end
if b[:conference_title].blank?
@conference_paper.conference_title = "No Title Present"
else
@conference_paper.conference_title = b[:conference_title]
end
@conference_paper.note = b[:remarks]
@conference_paper.location = b[:location]
@conference_paper.year = b[:year]
@conference_paper.create_user_id = hash.id
@conference_paper.save!
end
else
puts "No conference by Teacher"
end
end
end
end
def get_journal_paper_data
uri = URI("http://ann.cc.ntu.edu.tw/Achv/xmlTeacherData.asp")
params = {"UnitName" => "管理學院".encode('big5-uao'), "account" => "manage"}
uri.query = URI.encode_www_form(params)
res = Net::HTTP.get_response(uri)
teachers = User.all
teachers.each do |hash|
if hash.ntu_seq.present?
ntu_seq = hash.ntu_seq
paper_xml = Nokogiri::XML( \
#open("http://versatile.management.ntu.edu.tw/publication1/journal/#{ntuseq}.xml"))
open("http://ann.cc.ntu.edu.tw/Achv/xmlPaper.asp?Seq=#{ntu_seq}&type=J"))
@journal_papers = paper_xml.xpath("//Paper").map do |paper_node|
{
author: (paper_node>"Authors").text,
year: (paper_node>"PublishYear").text,
title: (paper_node>"PaperTitle").text,
journal: (paper_node>"PublishOn").text,
volume:(paper_node>"Volume").text,
volumeno:(paper_node>"VolumeNo").text,
beginpage:(paper_node>"BeginPage").text,
endpage:(paper_node>"EndPage").text,
subgroup:(paper_node>"subgroup").text,
remarks: (paper_node>"Remarks").text,
cate: ((paper_node>"subgroup")>"Group").text
}
end
if @journal_papers.present?
@journal_papers.each do |b|
@journal_paper = WritingJournal.new
I18n.locale = :zh_tw
@journal_paper.authors = b[:author]
if b[:title].blank?
@journal_paper.paper_title = "No Title Present"
else
@journal_paper.paper_title = b[:title]
end
@journal_paper.journal_title = b[:journal]
@journal_paper.note = b[:remarks]
I18n.locale = :en
@journal_paper.authors = b[:author]
if b[:title].blank?
@journal_paper.paper_title = "No Title Present"
else
@journal_paper.paper_title = b[:title]
end
@journal_paper.journal_title = b[:journal]
@journal_paper.note = b[:remarks]
@journal_paper.year = b[:year]
@journal_paper.vol_no = b[:volumeno]
@journal_paper.form_to_start = b[:beginpage]
@journal_paper.form_to_end = b[:endpage]
if !b[:cate].blank?
@level_type = JournalLevelType.where(:key => b[:cate])
if @level_type.present?
@journal_paper.journal_level_type_ids = ["#{@level_type.first.id}"]
end
end
@journal_paper.create_user_id = hash.id
@journal_paper.save!
end
else
puts "No journal paper by Teacher"
end
end
end
end
def sync_conference_data
@conference_data = WritingConference.where(create_user_id: "#{params[:user_id]}")
@conference_data.delete_all
@user = User.find("#{params[:user_id]}")
# teachers.each do |hash|
if @user.sid.present?
ntu_seq = @user.sid
conference_xml = Nokogiri::XML( \
open("http://ann.cc.ntu.edu.tw/Achv/xmlPaper.asp?Seq=#{ntu_seq}&type=C"))
#open("http://versatile.management.ntu.edu.tw/publication1/conference/#{ntuseq}.xml"))
@conference_papers = conference_xml.xpath("//Paper").map do |cp_node|
{
author: (cp_node>"Authors").text,
year: (cp_node>"PublishYear").text,
title: (cp_node>"PaperTitle").text,
conference: (cp_node>"PublishOn").text,
date: Date::MONTHNAMES[(cp_node>"PublishMonth").text.to_i],
location: "#{(cp_node>"Country").text} #{(cp_node>"location").text}",
conference_title: (cp_node>"PublishOn").text,
remarks: (cp_node>"Remarks").text
}
end
if @conference_papers.present?
@conference_papers.each do |b|
@conference_paper = WritingConference.new
I18n.locale = :zh_tw
@conference_paper.authors = b[:author]
if b[:title].blank?
@conference_paper.paper_title = "No Title Present"
else
@conference_paper.paper_title = b[:title]
end
if b[:conference_title].blank?
@conference_paper.conference_title = "No Title Present"
else
@conference_paper.conference_title = b[:conference_title]
end
@conference_paper.note = b[:remarks]
I18n.locale = :en
@conference_paper.authors = b[:author]
if b[:title].blank?
@conference_paper.paper_title = "No Title Present"
else
@conference_paper.paper_title = b[:title]
end
if b[:conference_title].blank?
@conference_paper.conference_title = "No Title Present"
else
@conference_paper.conference_title = b[:conference_title]
end
@conference_paper.note = b[:remarks]
@conference_paper.location = b[:location]
@conference_paper.year = b[:year]
@conference_paper.create_user_id = @user.id
@conference_paper.save!
end
else
puts "No conference by Teacher"
end
end
redirect_to request.referer
end
def sync_journal_paper_data
@journal_data = WritingJournal.where(create_user_id: "#{params[:user_id]}")
@journal_data.delete_all
@user = User.find("#{params[:user_id]}")
# teachers.each do |hash|
if @user.sid.present?
ntu_seq = @user.sid
paper_xml = Nokogiri::XML( \
#open("http://versatile.management.ntu.edu.tw/publication1/journal/#{ntuseq}.xml"))
open("http://ann.cc.ntu.edu.tw/Achv/xmlPaper.asp?Seq=#{ntu_seq}&type=J"))
@journal_papers = paper_xml.xpath("//Paper").map do |paper_node|
{
author: (paper_node>"Authors").text,
year: (paper_node>"PublishYear").text,
title: (paper_node>"PaperTitle").text,
journal: (paper_node>"PublishOn").text,
volume:(paper_node>"Volume").text,
volumeno:(paper_node>"VolumeNo").text,
beginpage:(paper_node>"BeginPage").text,
endpage:(paper_node>"EndPage").text,
subgroup:(paper_node>"subgroup").text,
remarks: (paper_node>"Remarks").text,
cate: ((paper_node>"subgroup")>"Group").text
}
end
if @journal_papers.present?
@journal_papers.each do |b|
@journal_paper = WritingJournal.new
I18n.locale = :zh_tw
@journal_paper.authors = b[:author]
if b[:title].blank?
@journal_paper.paper_title = "No Title Present"
else
@journal_paper.paper_title = b[:title]
end
@journal_paper.journal_title = b[:journal]
@journal_paper.note = b[:remarks]
I18n.locale = :en
@journal_paper.authors = b[:author]
if b[:title].blank?
@journal_paper.paper_title = "No Title Present"
else
@journal_paper.paper_title = b[:title]
end
@journal_paper.journal_title = b[:journal]
@journal_paper.note = b[:remarks]
@journal_paper.year = b[:year]
@journal_paper.vol_no = b[:volumeno]
@journal_paper.form_to_start = b[:beginpage]
@journal_paper.form_to_end = b[:endpage]
if !b[:cate].blank?
@level_type = JournalLevelType.where(:key => b[:cate])
if @level_type.present?
@journal_paper.journal_level_type_ids = ["#{@level_type.first.id}"]
end
end
@journal_paper.create_user_id = @user.id
@journal_paper.save!
end
end
end
redirect_to request.referer
end
def sync_book_data
@books_data = WritingBook.where(create_user_id: "#{params[:user_id]}")
@books_data.delete_all
@user = User.find("#{params[:user_id]}")
# teachers.each do |hash|
if @user.sid.present?
ntu_seq = @user.sid
books_xml = Nokogiri::XML( \
open("http://ann.cc.ntu.edu.tw/Achv/xmlBook.asp?Seq=#{ntu_seq}"))
@books = books_xml.xpath("//Book").map do |book_node|
{
author: (book_node>"Authors").text,
year: (book_node>"PublishYear").text,
title: (book_node>"DocTitle").text,
remarks: (book_node>"Remarks").text,
publisher: (book_node>"Publisher").text,
book_title: (book_node>"BookTitle").text
}
end
if @books.present?
@books.each do |b|
@book = WritingBook.new
I18n.locale = :zh_tw
@book.authors = b[:author]
@book.paper_title = b[:title]
@book.book_title = b[:book_title]
@book.note = b[:remarks]
@book.publisher = b[:publisher]
I18n.locale = :en
@book.authors = b[:author]
@book.paper_title = b[:title]
@book.book_title = b[:book_title]
@book.note = b[:remarks]
@book.publisher = b[:publisher]
@book.year = b[:year]
@book.create_user_id = @user.id
@book.save
end
end
end
redirect_to request.referer
end
def sync_conference_data_auto
@user = User.all
@user.each do |user|
@conference_data = WritingConference.where(create_user_id: "#{user.id}")
@conference_data.delete_all
# @user = User.find("#{params[:user_id]}")
# teachers.each do |hash|
if user.sid.present?
ntu_seq = user.sid
conference_xml = Nokogiri::XML( \
open("http://ann.cc.ntu.edu.tw/Achv/xmlPaper.asp?Seq=#{ntu_seq}&type=C"))
#open("http://versatile.management.ntu.edu.tw/publication1/conference/#{ntuseq}.xml"))
@conference_papers = conference_xml.xpath("//Paper").map do |cp_node|
{
author: (cp_node>"Authors").text,
year: (cp_node>"PublishYear").text,
title: (cp_node>"PaperTitle").text,
conference: (cp_node>"PublishOn").text,
date: Date::MONTHNAMES[(cp_node>"PublishMonth").text.to_i],
location: "#{(cp_node>"Country").text} #{(cp_node>"location").text}",
conference_title: (cp_node>"PublishOn").text,
remarks: (cp_node>"Remarks").text
}
end
if @conference_papers.present?
@conference_papers.each do |b|
@conference_paper = WritingConference.new
I18n.locale = :zh_tw
@conference_paper.authors = b[:author]
if b[:title].blank?
@conference_paper.paper_title = "No Title Present"
else
@conference_paper.paper_title = b[:title]
end
if b[:conference_title].blank?
@conference_paper.conference_title = "No Title Present"
else
@conference_paper.conference_title = b[:conference_title]
end
@conference_paper.note = b[:remarks]
I18n.locale = :en
@conference_paper.authors = b[:author]
if b[:title].blank?
@conference_paper.paper_title = "No Title Present"
else
@conference_paper.paper_title = b[:title]
end
if b[:conference_title].blank?
@conference_paper.conference_title = "No Title Present"
else
@conference_paper.conference_title = b[:conference_title]
end
@conference_paper.note = b[:remarks]
@conference_paper.location = b[:location]
@conference_paper.year = b[:year]
@conference_paper.create_user_id = user.id
@conference_paper.save!
end
else
puts "No conference by Teacher"
end
end
end
end
def sync_journal_paper_data_auto
@user = User.all
@user.each do |user|
@journal_data = WritingJournal.where(create_user_id: "#{user_id}")
@journal_data.delete_all
# @user = User.find("#{params[:user_id]}")
# teachers.each do |hash|
if user.sid.present?
ntu_seq = user.sid
paper_xml = Nokogiri::XML( \
#open("http://versatile.management.ntu.edu.tw/publication1/journal/#{ntuseq}.xml"))
open("http://ann.cc.ntu.edu.tw/Achv/xmlPaper.asp?Seq=#{ntu_seq}&type=J"))
@journal_papers = paper_xml.xpath("//Paper").map do |paper_node|
{
author: (paper_node>"Authors").text,
year: (paper_node>"PublishYear").text,
title: (paper_node>"PaperTitle").text,
journal: (paper_node>"PublishOn").text,
volume:(paper_node>"Volume").text,
volumeno:(paper_node>"VolumeNo").text,
beginpage:(paper_node>"BeginPage").text,
endpage:(paper_node>"EndPage").text,
subgroup:(paper_node>"subgroup").text,
remarks: (paper_node>"Remarks").text,
cate: ((paper_node>"subgroup")>"Group").text
}
end
if @journal_papers.present?
@journal_papers.each do |b|
@journal_paper = WritingJournal.new
I18n.locale = :zh_tw
@journal_paper.authors = b[:author]
if b[:title].blank?
@journal_paper.paper_title = "No Title Present"
else
@journal_paper.paper_title = b[:title]
end
@journal_paper.journal_title = b[:journal]
@journal_paper.note = b[:remarks]
I18n.locale = :en
@journal_paper.authors = b[:author]
if b[:title].blank?
@journal_paper.paper_title = "No Title Present"
else
@journal_paper.paper_title = b[:title]
end
@journal_paper.journal_title = b[:journal]
@journal_paper.note = b[:remarks]
@journal_paper.year = b[:year]
@journal_paper.vol_no = b[:volumeno]
@journal_paper.form_to_start = b[:beginpage]
@journal_paper.form_to_end = b[:endpage]
if !b[:cate].blank?
@level_type = JournalLevelType.where(:key => b[:cate])
if @level_type.present?
@journal_paper.journal_level_type_ids = ["#{@level_type.first.id}"]
end
end
@journal_paper.create_user_id = user.id
@journal_paper.save!
end
end
end
end
end
def sync_book_data_auto
@user = User.all
@user.each do |user|
@books_data = WritingBook.where(create_user_id: "#{user_id}")
@books_data.delete_all
# @user = User.find("#{params[:user_id]}")
# teachers.each do |hash|
if user.sid.present?
ntu_seq = user.sid
books_xml = Nokogiri::XML( \
open("http://ann.cc.ntu.edu.tw/Achv/xmlBook.asp?Seq=#{ntu_seq}"))
@books = books_xml.xpath("//Book").map do |book_node|
{
author: (book_node>"Authors").text,
year: (book_node>"PublishYear").text,
title: (book_node>"DocTitle").text,
remarks: (book_node>"Remarks").text,
publisher: (book_node>"Publisher").text,
book_title: (book_node>"BookTitle").text
}
end
if @books.present?
@books.each do |b|
@book = WritingBook.new
I18n.locale = :zh_tw
@book.authors = b[:author]
@book.paper_title = b[:title]
@book.book_title = b[:book_title]
@book.note = b[:remarks]
@book.publisher = b[:publisher]
I18n.locale = :en
@book.authors = b[:author]
@book.paper_title = b[:title]
@book.book_title = b[:book_title]
@book.note = b[:remarks]
@book.publisher = b[:publisher]
@book.year = b[:year]
@book.create_user_id = user.id
@book.save
end
end
end
end
end
def get_announcement_data
uri = URI("https://localhost:8000/announcements.xml")
#params = {"UnitName" => "管理學院".encode('big5-uao'), "account" => "manage"}
#uri.query = URI.encode_www_form(params)
res = Net::HTTP.get_response(uri)
@announcement_data = Hash.from_xml(res.body)
@announcements = @announcement_data["objects"]
@announcements.each do |hash|
@bulletin = Bulletin.new
I18n.locale = :zh_tw
if hash['announcement_title_zh_tw'].blank?
@bulletin.title = hash['announcement_title_en']
@bulletin.text = hash['announcement_content_zh_tw']
elsif hash['announcement_title_zh_tw'].blank? && hash['announcement_title_en'].blank?
@bulletin.title = "Please Fill the Name"
@bulletin.text = hash['announcement_content_zh_tw']
else
@bulletin.title = hash['announcement_title_zh_tw']
@bulletin.text = hash['announcement_content_zh_tw']
end
I18n.locale = :en
if hash['announcement_title_zh_tw'].blank? && hash['announcement_title_en'].blank?
@bulletin.title = "Please Fill the Name"
@bulletin.text = hash['announcement_content_en']
elsif hash['announcement_title_en'].blank?
@bulletin.title = hash['announcement_zh_tw']
@bulletin.text = hash['announcement_content_en']
elsif hash['announcement_title_zh_tw'].blank?
@bulletin.title = hash['announcement_title_en']
@bulletin.text = hash['announcement_content_en']
end
@bulletin.category_id = "51d2a16438178423c2000001"
@bulletin.is_pending = true
@bulletin.save!
end
end
# def get_page_data
# f = File.open("/home/rwub/orbit-db/ntu_mb/pages/management_pages.xml")
# page_xml = Nokogiri::XML(f)
# #open("http://versatile.management.ntu.edu.tw/publication1/conference/#{ntuseq}.xml"))
# @pages = page_xml.xpath("//management-page").map do |cp_node|
# {
# menu_title: (cp_node>"menu-title").text,
# content: (cp_node>"content").text
# }
# end
# if @pages.present?
# @i=0
# @pages.each do |b|
# get_variables_for_new
# @page = Page.new
# @page.parent = "4f45f3b9e9d02c5db900005d"
# @page.design = "50ac424983e75219d2000021"
# @page.theme_id = "50ac424a83e75219d2000025"
# @page.menu_enabled_for= ["en", "zh_tw", ""]
# @page.enabled_for= ["en", "zh_tw", ""]
# @page.is_published = false
# if b[:menu_title].blank?
# @page.title = 'No Title Present'
# @i += 1
# @page.name = "#{@i}Page"
# else
# @i += 1
# @page.title = b[:menu_title]
# @page.name = "#{@i}Page"
# end
# if b[:content].blank?
# @page.content = "No Content Present"
# else
# @page.content = b[:content]
# end
# @page.save!
# end
# else
# puts "No Page Data"
# end
# end
# def get_variables_for_new
# @designs = Design.all.entries
# @themes = Design.first.themes
# @module_apps = ModuleApp.for_frontend_select
# @app_frontend_urls = nil
# @categories = nil
# @tags = nil
# @page_frontend_data_counts = nil
# @frontend_styles = nil
# @selected={
# :design => @designs.first,
# :theme=> @themes.first,
# :module_app=>nil,#@module_apps.first
# :app_frontend_url=> nil, #@module_apps.first
# :category=>nil,
# :tag=>nil,
# :page_frontend_data_count=>nil,
# :frontend_style => nil
# }
# end
end

View File

@ -0,0 +1,34 @@
class SamlLoginsController < ApplicationController
require "net/http"
require "uri"
require 'rexml/document'
include REXML
def index
if params[:wa] == "wsignoutcleanup1.0" #logout
redirect_to :root
else #login
@wresult = params[:wresult]
@wctx = params[:wctx]
@main_url = LIST[:sites][@wctx]['url']
@main_public_key = LIST[:sites][@wctx]['key']
@doc = REXML::Document.new @wresult
public_key = OpenSSL::PKey::RSA.new(@main_public_key)
encrypted_data = public_key.public_encrypt(@doc.elements["//saml:AttributeValue"].text)
redirect_to "http://#{@main_url}/user_login?" + { :wresult => encrypted_data }.to_param
end
end
end

View File

@ -0,0 +1,40 @@
# encoding: utf-8
class SessionsController < Devise::SessionsController
prepend_before_filter :require_no_authentication, :only => [ :new, :create ]
def create
@site = Site.first
private_key = OpenSSL::PKey::RSA.new(@site.private_key)
wresult = private_key.private_decrypt(request.params['wresult'])
@ids = wresult.split("@")
login_uid = @ids[0]
resource = User.first(conditions:{user_id: login_uid})
if !resource.blank?
resource_name = resource.class.to_s.downcase
sign_in(resource_name, resource)
session[:user_id_type] = "myntumb"
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
def destroy
@user_id_type = session[:user_id_type]
sign_out
if @user_id_type == "myntumb"
redirect_to "https://adfs.ntu.edu.tw/adfs/ls/?wa=wsignout1.0&wreply=https://management.ntu.edu.tw"
else
redirect_to root_path
end
end
end

View File

@ -1,59 +1,62 @@
<section id="main-wrap">
<div class="sign-in have-other-sign-in"> <div class="sign-in have-other-sign-in">
<!-- <p class="alert alert-error in fade">You need to sign in.</p>
--> <% flash.each do |key, msg| %>
<% flash.each do |key, msg| %> <%= content_tag :p, msg, :class => [key, "alert alert-error"] %>
<%= content_tag :p, msg, :class => [key, "alert alert-error in fade"] %>
<% end %> <% end %>
<div class="form">
<h3 class="login-logo">Log In to Orbit</h3> <div class="form">
<div> <h3 class="login-logo"><%= t(:login) %></h3>
<input name="utf8" type="hidden" value="" /> <div class="other-sign-in">
<input name="authenticity_token" type="hidden" value="" /> <% @request_hosts = request.host_with_port.split(".") %>
</div> <a class="btn btn-primary" type="submit" href="https://adfs.ntu.edu.tw/adfs/ls/?wa=wsignin1.0&wtrealm=https://management.ntu.edu.tw/saml_login&wctx=<%= @request_hosts[0] %>">使用計中帳號登入</a>
<!-- <div class="other-sign-in">
<a class="btn btn-primary" type="submit">Other Sign In</a>
<p>or</p> <p>or</p>
</div> --> </div>
<div class="form-block"> <div class="form-block">
<div class="form-list clearfix"> <div class="form-list clearfix">
<form class="content" accept-charset="UTF-8" action="/users/sign_in" method="post"> <%= form_for resource, :as => resource_name, :url => session_path(resource_name), :html => {:class => 'content'} do |f| %>
<%= form_for resource, :as => resource_name, :url => session_path(resource_name), :html => {:class => 'content'} do |f| %>
<div class="control-group clear"> <div class="control-group clear">
<label for="user_email"> <label for="user_email">
<i class="icon-user"></i> <i class="icon-user"></i>
</label> </label>
<%= f.text_field :user_id, :placeholder => t("users.user_id"), :id=>"user_email" %> <%= f.text_field :user_id, :placeholder => t("users.user_id") %>
</div> </div>
<div class="control-group clear"> <div class="control-group clear">
<label for="user_password"> <label for="user_password">
<i class="icon-lock"></i> <i class="icon-lock"></i>
</label> </label>
<%= f.password_field :password, :placeholder => t(:dots), :id=>"user_password" %> <%= f.password_field :password, :placeholder => t(:dots) %>
</div> </div>
<br/> <!-- <label class="checkbox">
<label class="checkbox"> <input type="checkbox" value="">
<% if devise_mapping.rememberable? -%> <small>Remember me</small>
<%= f.check_box :remember_me %> <small><%= f.label :remember_me %></small> </label> -->
<% end -%>
</label>
<%= content_tag :button, t(:login), :type => :submit, :class => 'btn btn-primary' %> <%= content_tag :button, t(:login), :type => :submit, :class => 'btn btn-primary' %>
</form> <% end %>
<!-- <form class="content" accept-charset="UTF-8" action="/users/sign_in" method="post">
<div class="control-group clear">
<label for="user_email">
<i class="icon-user"></i>
</label>
<input type="text" id="user_id" name="user[id]" placeholder="帳號" />
</div>
<div class="control-group clear">
<label for="user_password">
<i class="icons-mail"></i>
</label>
<input type="text" id="user_email" name="user[email]" placeholder="電子郵件" />
</div>
<button class="btn btn-primary" type="submit">Submit</button>
</form> -->
</div> </div>
<!-- <div class="switchboard"><span>Forgot Password ?</span> <i class="icons-arrow-left-2"></i></div> -->
</div> </div>
<div class="pull-right"> <!-- <div class="register">
<%= link_to content_tag(:small, t(:forgot_password)), new_user_password_path %>
</div>
<br/>
<!-- <div class="register">
<button class="btn btn-inverse" type="submit">Register</button> <button class="btn btn-inverse" type="submit">Register</button>
</div> --> </div> -->
<% end %>
</div> </div>
</div> </div>
</section>

View File

@ -56,6 +56,11 @@
</div> </div>
<div class="modal-body"> <div class="modal-body">
<%= form_for :user, url: user_session_path, html: {class: 'container'} do |f| %> <%= form_for :user, url: user_session_path, html: {class: 'container'} do |f| %>
<div class="other-sign-in">
<% @request_hosts = request.host_with_port.split(".") %>
<a class="btn btn-primary" type="submit" href="https://adfs.ntu.edu.tw/adfs/ls/?wa=wsignin1.0&wtrealm=https://management.ntu.edu.tw/saml_login&wctx=<%= @request_hosts[0] %>">使用計中帳號登入</a>
<p>or</p>
</div>
<div class="input-prepend"> <div class="input-prepend">
<span class="add-on"> <span class="add-on">
<i class="icon-user"></i> <i class="icon-user"></i>
@ -84,4 +89,4 @@
</div> </div>
</div> </div>
<% end %> <% end %>
</ul> </ul>

View File

@ -24,5 +24,9 @@
<body> <body>
<%= render 'layouts/orbit_bar' %> <%= render 'layouts/orbit_bar' %>
<%= yield %> <%= yield %>
<!--<div id="sign-footer">
<p>Rulingcom</p>
</div>
-->
</body> </body>
</html> </html>

View File

@ -80,3 +80,32 @@ default_widget_style:
- style3 - style3
- style4 - style4
- style5 - style5
sites:
www:
url: www.management.ntu.edu.tw
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmUuz5i/f9PCacIiTADln\na5xpbNh3tMwNSpnMZDa9FsGlw6/pKCkb5VuiusI7on8eZJGyneOrJ2L5tFael4pG\n0xmRMJnPm0FCaFjVO43Ktclehy5zIY7YJqqZo04j95oJrUBwAcB1xESpCx7atdpD\naFGdCtGQia+q/2cRSMic6JSALUtR3l1Xc5FCpC8n9DeYVOsOc4uO3MNuPvZ3MWPe\njULW4kojYcPL/2aHypi0iQKNm3Kss7mTW6/rsKNyhpds1YvdSqkak+QjqgR7hRDA\nFbYPNx4RL/o5RsxW12po7DdttsMHru0btrt+3Uw6TyqU+5cPcM6WJf2CV1/Fh1zm\njwIDAQAB\n-----END PUBLIC KEY-----\n"
ba:
url: ba.management.ntu.edu.tw
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsiVjWXc2OmyxK1O/N7R2\nsbhop1o4XStsxwcGm9AQNekoq7F8HEk2ZrSz5+hRln8FK4fT4YajALRQDS0nGUpe\nGmII0bvjQaiUvVvg7qMdUhdw88543VfPZShXZYjVaa/9JFEdw/+d5gHe5N8gTsde\nYY3KcIz6cECx56L2o5l4SNXYgCJt8aEtKOcsOM2ZDdoxTGJGWPxZaYvyKH9euTdC\nd8N/QGr6fzWcFEsefb1Ftxx417RRfJBFbqDsFIHGSGOPRKXwxL8/4qMDSZhtxHrK\nOdSvQhfF1YAr210TQxgdj/8Pl0PbuY0g8TM+S1izGjanT8vepuye7vUQ2vKRZ36z\nHwIDAQAB\n-----END PUBLIC KEY-----\n"
acc:
url: acc.management.ntu.edu.tw
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmhhNwvOI7hBu0qZfO8rU\nFg2lNw8Fmm5OUXm2Y/cElGaNWFVpRhJJGPQUV3tu9dMECi2n6yMvvgpXXeqYD/hV\nrlApoBb23o7HPg94cBckEO5vWVnZ4ylPS+GodOe+bFdSe4S/tjFY1KOcKN5rGNQQ\nFQ6JkWoQPBXcIoI4TqJVVAkjd8/x9jMRtK9ZzGGiRFhsbcP/A67kvz0fUsdMt4t1\nHmQJbCa2ONzJ8AGX1oTeHwXGz9ZPVstenci4o8lhwu1Jzim1UryW/XaPcYFH6wKm\nKwRAKJvn8awEvW4fzwD5fwI3u7cu19niT+KQAvDjV3HFuqnqu7LETCkr36hy30Hm\nIwIDAQAB\n-----END PUBLIC KEY-----\n"
finance:
url: finance.management.ntu.edu.tw
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxvRR2ay3HNjq/5rcGlBc\n2nFbQwCQK4nR/GqOUFAwdgWEIivwMALYWPQsNuU90RJqm0HkwxvdLXy/XRZfLSVC\nA5D3JtGmpstJKK7A1jOkP5sj54zs8NMnm2zrm9/YDrUmxUr58OOmsCIjiDXQ0PW+\nIR34FOde6yXgwriPUq2DjTo2UgujNPoNeICGmtTTV+YzVdOZmNqfRVnCpfUUnMsN\nDxzL8K2VzGa7KGJeCe5NEwCdJZ8FApMKUJORpCao9jR62dhZ0GKQpMqvO3c/aHxI\nWY+wnuzMWAZl96hIQc4ksnl7hcd2y5WSQZZS7OBdeSxumqJBqgCd6ITBhrzC5gSv\nCQIDAQAB\n-----END PUBLIC KEY-----\n"
ib:
url: ib.management.ntu.edu.tw
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzfoOcLyW3q7bYXArXEBC\nl62pLW7Yg0zyj5blWjU/DnIwxX6B8q48HfubDWQRGgHJsxCsGVrPwhUNEcmfS20q\nUlTBhx4Qt6qHXQYX0jBZbNg7fr2rbwNlbYovMUxF28dcik8K+eKz0fP2NH1lV4BS\ngDb9Nd/gNXozO67/MSrTCXXBKx8andlmVxhJSC8zQcQ4WXPpDhmTB0AvqUcRm/z7\nbLeIntibt6ke3/BVeixgu1Cf4u1y01+EsJ1sAnJzD+cSrq2tu5ccstbRfY5crY3v\n9YFQ3M9LrYV0fi91LhNt6xPNEvvQuZ21/Wwd9DL4D/7Hg55upcolfTxB3J83cTDg\niwIDAQAB\n-----END PUBLIC KEY-----\n"
im:
url: im.management.ntu.edu.tw
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy1o15uvdBKra9LQsjnRL\nyaJ2ZTOLlaS0ICu/RkDWNTz4gbwKhAvxvS2Om9O85MiZKaOtS+TgrMePk/zTztZA\nnxrVcVZStzj5//zKuOLAg2DOUH0Bd/uBTjvOkfc6CQrJuu50B1S+GgN08KeZSxw4\nYgKn6I3Dnm8NZfl9foZRnGgpgJSUrv2oN2RWTBqkwey9LbWtZ0yoRdZHZpVDKq50\n4PpqgAibNXy4er06yd9qqWA0wIoPPQIsYhBkDmqkBe+AxTV4hqX8W/M+j3ftA+T9\nsKAhMYJD/sWvXA1LbKwiYn2f2GNo6zECCPdbYVwbwVeRHslt6lL11ZejW7jaXVaA\nAwIDAQAB\n-----END PUBLIC KEY-----\n"
emba:
url: emba.management.ntu.edu.tw
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzky+srC6d21nBP54Xtv+\nC6VJgjRolToLaaJKR6+qXW6lTU6/kYexfMiVTahcBtSooCDj137L/qn4NJpl/2UF\nXrx45n7FWWrXWJhlec6bh4Lg+wGcJrSDGF3GXhLD6T/0o++ep51zt5a6R3LW+WCg\nAUYzc6lWqSpKF/5Z3GfI4/jvNqrZLEoRtTR19WCjdO5J819XxUv3fW7TDx+XJ3kK\n9OsZWT81R7oushb2HFnGj0HJjwm5yCTFdWTzk6X/R0dAmg8lLcSDpeH1aq0YO/RB\nWycZEgIuV42eTaEg9aYbVnS7F2y8gIQjoVjlJF3VCsntzsaFpAEgXysla826Pna+\njQIDAQAB\n-----END PUBLIC KEY-----\n"
ntugmba:
url: ntugmba.management.ntu.edu.tw
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs4WtrGLgj2FEZx+NnHzb\nK1HJ+V3qCJ7jIFH7mboeAjEPrAMLeFIdV4MvoasPALxuoo34oZl1NK6vYnfic5xk\nhV956QIzhB3vd4KDu1zbuYQO3ojlBSP3mbJPyHT6fKSkjLjKy0R5HEeT1+yLizC1\nMCPVBiP7mpaYIKPwfmMXFLA8GQxwBO2VpWpQD7jzd/+UWEXjKoK5t2uoMDL0k0w0\naffMcZKNntENXTRgnTq4iK39ayT95iXw81FH+LyEo5XtiHYsO2mhOPc9j5tU3GCO\nKwFmXPlh2+B1YwV+lkfCqpdT37Z3lLNFmw7sYidMvD3xIiFBsPKspoa1qlURmnuH\nvQIDAQAB\n-----END PUBLIC KEY-----\n"
ia:
url: ia.management.ntu.edu.tw
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvlVvwFF+k6/UI9+hhTEi\n032nTnEG/8l3ARfpSsTPwijsyk+e8Utjq3sslHVGlWzmT74KYHoMwNDYXiAH2wpS\n4k+vUugOPYNkY46smDG5oCGVVbmCORzzpZsccpXhFGft378NhNiTRNhk4DBMrFwb\nlALdd9sUDbqcc+PBJIW3KXD66+rcyImHpkEaa8t0rkAd1ZIkfLbXyQWikvOMWYvJ\n3K2+N/vVInAbVOmBwZgK0iP7ZvwvwR/li0nAkdD12jgvgrR6gP2pC+qyH15J2zib\nEz8aLweNBYq/BXGxtWxioFHif22v9LUj1fkAFqEoTwVCIGDdXn2/R9febBkSSPuL\ngQIDAQAB\n-----END PUBLIC KEY-----\n"

View File

@ -353,6 +353,7 @@ en:
brief_intro : "Brief Intro." brief_intro : "Brief Intro."
complete_list : "Complete List" complete_list : "Complete List"
frontend_page : "Frontend Page" frontend_page : "Frontend Page"
sync_data: "Synchronize"
phone_number: "Phone Number" phone_number: "Phone Number"
picture: Picture picture: Picture
placeholder: Field Hint placeholder: Field Hint

View File

@ -356,6 +356,7 @@ zh_tw:
brief_intro : "摘要" brief_intro : "摘要"
complete_list : "完整列表" complete_list : "完整列表"
frontend_page : "前台呈現" frontend_page : "前台呈現"
sync_data: "同步資料"
phone_number: "電話" phone_number: "電話"
picture: 圖片 picture: 圖片
placeholder: 欄位提示文字 placeholder: 欄位提示文字

View File

@ -8,13 +8,13 @@ defaults: &defaults
development: development:
<<: *defaults <<: *defaults
database: orbit_site_new database: ntu_mb_orbit_2_new
test: test:
<<: *defaults <<: *defaults
database: orbit_site_new database: ntu_mb_orbit_2_new
# set these environment variables on your prod server # set these environment variables on your prod server
production: production:
@ -24,4 +24,4 @@ production:
# password: <%= ENV['MONGOID_PASSWORD'] %> # password: <%= ENV['MONGOID_PASSWORD'] %>
# database: <%= ENV['MONGOID_DATABASE'] %> # database: <%= ENV['MONGOID_DATABASE'] %>
<<: *defaults <<: *defaults
database: orbit_site_new database: ntu_mb_orbit_2_new

View File

@ -8,6 +8,14 @@ Orbit::Application.routes.draw do
match "/users_passwd" => "desktop/registrations#update", :as => :users_passwd, :via => :put match "/users_passwd" => "desktop/registrations#update", :as => :users_passwd, :via => :put
end end
devise_scope :user do
get 'user_login' => 'sessions#create'
match 'user_logout' => 'sessions#destroy'
end
match "saml_login" => 'saml_logins#index'
mount Resque::Server, :at => "/admin/resque" mount Resque::Server, :at => "/admin/resque"
mount Rack::GridFS::Endpoint.new(:db => Mongoid.database,:lookup=>:path), :at => "gridfs" mount Rack::GridFS::Endpoint.new(:db => Mongoid.database,:lookup=>:path), :at => "gridfs"
@ -213,6 +221,19 @@ Orbit::Application.routes.draw do
get 'reset_default_locale' get 'reset_default_locale'
get 'preference' get 'preference'
end end
get "import_data/get_teacher_data"
get "import_data/get_book_data"
get "import_data/get_conference_data"
get "import_data/get_journal_paper_data"
get "import_data/get_announcement_data"
get "import_data/get_page_data"
get "import_data/sync_book_data"
get "import_data/sync_journal_paper_data"
get "import_data/sync_conference_data"
get "import_data/sync_book_data_auto"
get "import_data/sync_journal_paper_data_auto"
get "import_data/sync_conference_data_auto"
resources :tags do resources :tags do
collection do collection do

20
config/schedule.rb Normal file
View File

@ -0,0 +1,20 @@
# Use this file to easily define all of your cron jobs.
#
# It's helpful, but not entirely necessary to understand cron before proceeding.
# http://en.wikipedia.org/wiki/Cron
# Example:
#
# set :output, "/path/to/my/cron_log.log"
#
every 1.day, :at => '11:00 pm' do
# command "/usr/bin/some_great_command"
# runner "MyModel.some_method"
rake "rake synchronize:data"
end
#
# every 4.days do
# runner "AnotherModel.prune_old_records"
# end
# Learn more: http://github.com/javan/whenever

View File

@ -0,0 +1,12 @@
# encoding: utf-8
namespace :synchronize do
desc "synchronize tasks"
task :data => :environment do
p Admin::ImportDataController.new.sync_book_data_auto
puts "Book Data Synchronization Complete"
p Admin::ImportDataController.new.sync_journal_paper_data_auto
puts "Journal Paper Data Synchronization Complete"
p Admin::ImportDataController.new.sync_conference_data_auto
puts "Conference Data Synchronization Complete"
end
end

View File

@ -0,0 +1,30 @@
<% show_office_field.attribute_fields.where(:disabled=>false).asc(:_id).each do |rf| %>
<%
if !@member.get_attribute_value(rf).blank?
if !@member.get_attribute_value(rf)['val'].blank?
@rodata = @member.get_attribute_value(rf)['val']
elsif !@member.get_attribute_value(rf)[I18n.locale].blank?
@rodata = @member.get_attribute_value(rf)[I18n.locale]
else
@rodata = nil
end
if !@rodata.blank? and !@member.get_attribute_value(rf).get_value_by_locale(I18n.locale).blank?
%>
<tr>
<% if (rf.title == "Office" || rf.title == "研究室")%>
<td><%= rf.title %></td>
<td><%= nl2br(show_attribute_value(@member.get_attribute_value(rf).get_value_by_locale(I18n.locale))) rescue '' %></td>
</tr>
<%end%>
</tr>
<% end -%>
<% end -%>
<% end -%>

View File

@ -0,0 +1,30 @@
<% show_research_field.attribute_fields.where(:disabled=>false).asc(:_id).each do |rf| %>
<%
if !@member.get_attribute_value(rf).blank?
if !@member.get_attribute_value(rf)['val'].blank?
@rodata = @member.get_attribute_value(rf)['val']
elsif !@member.get_attribute_value(rf)[I18n.locale].blank?
@rodata = @member.get_attribute_value(rf)[I18n.locale]
else
@rodata = nil
end
if !@rodata.blank? and !@member.get_attribute_value(rf).get_value_by_locale(I18n.locale).blank?
%>
<tr>
<% if (rf.title == "Research Field"|| rf.title == "研究領域")%>
<td><%= rf.title %></td>
<td><%= nl2br(show_attribute_value(@member.get_attribute_value(rf).get_value_by_locale(I18n.locale))) rescue '' %></td>
</tr>
<%end%>
</tr>
<% end -%>
<% end -%>
<% end -%>

View File

@ -94,6 +94,8 @@ class WritingBook
if !self.publish_date.nil? if !self.publish_date.nil?
pd = self.publish_date.strftime("%Y-%m-%d").split('-') pd = self.publish_date.strftime("%Y-%m-%d").split('-')
title << pd[0]+"/"+pd[1] title << pd[0]+"/"+pd[1]
elsif !self.year.blank?
title << self.year
end end
# title << "(#{self.journal_level_types.collect{|x| x.title}.join(', ')})" # title << "(#{self.journal_level_types.collect{|x| x.title}.join(', ')})"

View File

@ -75,8 +75,9 @@
<% if is_admin? %> <% if is_admin? %>
<div class="bottomnav clearfix"> <div class="bottomnav clearfix">
<div class="action pull-right"> <div class="action pull-right">
<%= link_to content_tag(:i, nil, :class => 'icon-plus') + t('personal_plugins.edit_brief_intro'), panel_personal_book_back_end_personal_book_intros_path(:user_id => @user.id), :class => 'btn btn-primary' %> <%= link_to content_tag(:i, nil, :class => 'icon-plus') + t('personal_plugins.sync_data'), admin_import_data_sync_book_data_path(:user_id => @user.id), :class => 'btn btn-primary' %>
<%= link_to content_tag(:i, nil, :class => 'icon-plus') + t('announcement.add_new'), new_panel_personal_book_back_end_writing_book_path(:user_id => @user.id), :class => 'btn btn-primary' %> <%= link_to content_tag(:i, nil, :class => 'icon-plus') + t('personal_plugins.edit_brief_intro'), panel_personal_book_back_end_personal_book_intros_path(:user_id => @user.id), :class => 'btn btn-primary' %>
<%= link_to content_tag(:i, nil, :class => 'icon-plus') + t('announcement.add_new'), new_panel_personal_book_back_end_writing_book_path(:user_id => @user.id), :class => 'btn btn-primary' %>
</div> </div>
<div class="pagination pagination-centered"> <div class="pagination pagination-centered">
<%= paginate @writing_books, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil} %> <%= paginate @writing_books, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil} %>

View File

@ -91,6 +91,8 @@ class WritingConference
if !self.publication_date.nil? if !self.publication_date.nil?
pd = self.publication_date.strftime("%Y-%m-%d").split('-') pd = self.publication_date.strftime("%Y-%m-%d").split('-')
title << pd[0] title << pd[0]
elsif !self.year.blank?
title << self.year
end end
title << self.paper_title if self.paper_title.present? title << self.paper_title if self.paper_title.present?

View File

@ -75,8 +75,9 @@
<% if is_admin? %> <% if is_admin? %>
<div class="bottomnav clearfix"> <div class="bottomnav clearfix">
<div class="action pull-right"> <div class="action pull-right">
<%= link_to content_tag(:i, nil, :class => 'icon-plus') + t('personal_plugins.edit_brief_intro'), panel_personal_conference_back_end_personal_conference_intros_path(:user_id => @user.id), :class => 'btn btn-primary' %> <%= link_to content_tag(:i, nil, :class => 'icon-plus') + t('personal_plugins.sync_data'), admin_import_data_sync_conference_data_path(:user_id => @user.id), :class => 'btn btn-primary' %>
<%= link_to content_tag(:i, nil, :class => 'icon-plus') + t('announcement.add_new'), new_panel_personal_conference_back_end_writing_conference_path(:user_id => @user.id), :class => 'btn btn-primary' %> <%= link_to content_tag(:i, nil, :class => 'icon-plus') + t('personal_plugins.edit_brief_intro'), panel_personal_conference_back_end_personal_conference_intros_path(:user_id => @user.id), :class => 'btn btn-primary' %>
<%= link_to content_tag(:i, nil, :class => 'icon-plus') + t('announcement.add_new'), new_panel_personal_conference_back_end_writing_conference_path(:user_id => @user.id), :class => 'btn btn-primary' %>
</div> </div>
<div class="pagination pagination-centered"> <div class="pagination pagination-centered">
<%= paginate @writing_conferences, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil} %> <%= paginate @writing_conferences, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil} %>

View File

@ -97,6 +97,8 @@ class WritingJournal
if !self.publication_date.nil? if !self.publication_date.nil?
pd = self.publication_date.strftime("%Y-%m-%d").split('-') pd = self.publication_date.strftime("%Y-%m-%d").split('-')
title << pd[0] title << pd[0]
elsif !self.year.blank?
title << self.year
end end
title << self.paper_title if self.paper_title.present? title << self.paper_title if self.paper_title.present?
title << self.journal_title if self.journal_title.present? title << self.journal_title if self.journal_title.present?

View File

@ -77,17 +77,16 @@
</tbody> </tbody>
</table> </table>
<% if is_admin? %>
<div class="bottomnav clearfix"> <div class="bottomnav clearfix">
<div class="action pull-right"> <div class="action pull-right">
<%= link_to content_tag(:i, nil, :class => 'icon-plus') + t('personal_plugins.edit_brief_intro'), panel_personal_journal_back_end_personal_journal_intros_path(:user_id => @user.id), :class => 'btn btn-primary' %> <%= link_to content_tag(:i, nil, :class => 'icon-plus') + t('personal_plugins.sync_data'), admin_import_data_sync_journal_paper_data_path(:user_id => @user.id), :class => 'btn btn-primary' %>
<%= link_to content_tag(:i, nil, :class => 'icon-plus') + t('announcement.add_new'), new_panel_personal_journal_back_end_writing_journal_path(:user_id => @user.id), :class => 'btn btn-primary' %> <%= link_to content_tag(:i, nil, :class => 'icon-plus') + t('personal_plugins.edit_brief_intro'), panel_personal_journal_back_end_personal_journal_intros_path(:user_id => @user.id), :class => 'btn btn-primary' %>
<%= link_to content_tag(:i, nil, :class => 'icon-plus') + t('announcement.add_new'), new_panel_personal_journal_back_end_writing_journal_path(:user_id => @user.id), :class => 'btn btn-primary' %>
</div> </div>
<div class="pagination pagination-centered"> <div class="pagination pagination-centered">
<%= paginate @writing_journals, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil} %> <%= paginate @writing_journals, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil} %>
</div> </div>
</div> </div>
<% end %>
<div id="dialog" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="Delete item" aria-hidden="true"> <div id="dialog" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="Delete item" aria-hidden="true">
<div class="modal-header"> <div class="modal-header">