Archived
Compare commits
16
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e89656cdd1 | ||
|
|
077e98a6d4 | ||
|
|
52f8e9f1b8 | ||
|
|
aca97f85d8 | ||
|
|
1a79c2fed3 | ||
|
|
947f2765c6 | ||
|
|
8fb3b408b4 | ||
|
|
0dff9163bc | ||
|
|
b533b3f6ea | ||
|
|
2a83c6b51d | ||
|
|
774cc5d392 | ||
|
|
671257992a | ||
|
|
280523fbeb | ||
|
|
07964de968 | ||
|
|
d226b34de5 | ||
|
|
43da2eca79 |
No files matched your search
@@ -20,6 +20,7 @@ gem "acts_as_unvlogable"
|
||||
gem 'youtube_it'
|
||||
gem 'gotcha'
|
||||
gem "geocoder"
|
||||
gem 'whenever', :require => false
|
||||
|
||||
# gem "memcached", "~> 1.4.3"
|
||||
# gem "memcache-client"
|
||||
@@ -43,7 +44,6 @@ gem 'resque', :require => 'resque/server' # background jobs
|
||||
gem 'resque-scheduler' # job scheduling
|
||||
gem 'resque-restriction'
|
||||
#gem 'rb-readline'
|
||||
gem 'roo'
|
||||
# gem 'ruby-debug19'
|
||||
gem 'rubyzip', '< 1.0.0'
|
||||
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 7.4 KiB |
@@ -289,13 +289,14 @@ var orbitDesktop = function(dom){
|
||||
return false;
|
||||
}
|
||||
var ca = $e.attr("content-holder");
|
||||
|
||||
var a = function(){
|
||||
$.ajax({
|
||||
type : t,
|
||||
dataType : responsetype,
|
||||
url : $e.attr("href"),
|
||||
success : function(data){
|
||||
if(typeof data == "string"){
|
||||
if(typeof data == "string" && t != "delete"){
|
||||
if(ca)
|
||||
$(ca).html(data);
|
||||
else{
|
||||
@@ -308,10 +309,12 @@ var orbitDesktop = function(dom){
|
||||
window.o[o.data_method][exe](data,$e);
|
||||
if(t == "delete"){
|
||||
if($e.attr("delete-item")=="true"){
|
||||
var li_to_delete = $e.parentsUntil("li[item=true]").find("li[item=true]");
|
||||
var li_to_delete = $e.parentsUntil("li[item=true]");
|
||||
li_to_delete.slideUp();
|
||||
}
|
||||
}
|
||||
},
|
||||
error : function(x){
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
window.SocialShareButton =
|
||||
openUrl : (url) ->
|
||||
window.open(url)
|
||||
false
|
||||
|
||||
share : (el) ->
|
||||
site = $(el).data('site')
|
||||
title = encodeURIComponent($(el).parent().data('title'))
|
||||
img = encodeURIComponent($(el).parent().data("img"))
|
||||
fb_url = encodeURIComponent($(el).parent().data("fb_url"))
|
||||
url = encodeURIComponent(location.href)
|
||||
switch site
|
||||
when "weibo"
|
||||
SocialShareButton.openUrl("http://v.t.sina.com.cn/share/share.php?url=#{url}&pic=#{img}&title=#{title}&content=utf-8")
|
||||
when "twitter"
|
||||
SocialShareButton.openUrl("https://twitter.com/home?status=#{title}: #{url}")
|
||||
when "douban"
|
||||
SocialShareButton.openUrl("http://www.douban.com/recommend/?url=#{url}&title=#{title}&image=#{img}")
|
||||
when "facebook"
|
||||
SocialShareButton.openUrl("http://www.facebook.com/sharer.php?t=#{title}&u=#{fb_url}")
|
||||
when "qq"
|
||||
SocialShareButton.openUrl("http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=#{url}&title=#{title}&pics=#{img}")
|
||||
when "tqq"
|
||||
SocialShareButton.openUrl("http://share.v.t.qq.com/index.php?c=share&a=index&url=#{url}&title=#{title}&pic=#{img}")
|
||||
when "baidu"
|
||||
SocialShareButton.openUrl("http://apps.hi.baidu.com/share/?url=#{url}&title=#{title}&content=")
|
||||
when "kaixin001"
|
||||
SocialShareButton.openUrl("http://www.kaixin001.com/rest/records.php?url=#{url}&content=#{title}&style=11&pic=#{img}")
|
||||
when "renren"
|
||||
SocialShareButton.openUrl("http://widget.renren.com/dialog/share?resourceUrl=#{url}&title=#{title}&description=")
|
||||
when "google_plus"
|
||||
SocialShareButton.openUrl("https://plus.google.com/share?url=#{url}&t=#{title}")
|
||||
false
|
||||
@@ -10,7 +10,7 @@ $(document).ready(function() {
|
||||
type: 'GET',
|
||||
url: $(this).attr("rel"),
|
||||
dataType: 'script',
|
||||
data: {field: $(this).attr("field"), ids: ids},
|
||||
data: {ids: ids},
|
||||
success: function (msg) {
|
||||
$("#member-filter").modal('show'); },
|
||||
error: function(){
|
||||
@@ -20,11 +20,6 @@ $(document).ready(function() {
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
$(document).on('click', ".remove_user", function(){
|
||||
$(this).parent().remove();
|
||||
});
|
||||
|
||||
$("#remove_users").on('click', function(){
|
||||
var ids = [];
|
||||
var users = $('.selected_user input[type="checkbox"]:checked');
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
$(document).ajaxStop(function() {
|
||||
$('.nav').find('.dropdown').on({
|
||||
mouseleave: function() {
|
||||
$(this).removeClass("open");
|
||||
},
|
||||
mouseenter: function() {
|
||||
$(this).addClass("open")
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -1,230 +0,0 @@
|
||||
/* Member Filter */
|
||||
#select_user #select_user_modal.modal {
|
||||
width: 80%;
|
||||
margin-left: -40%;
|
||||
}
|
||||
#select_user #select_user_modal .modal-body {
|
||||
max-height: 425px;
|
||||
}
|
||||
#select_user #select_user_modal .modal-body form {
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
#select_user #select_user_modal .modal-body form fieldset {
|
||||
min-height: 360px;
|
||||
}
|
||||
#select_user #select_user_modal .modal-body .radio.inline,
|
||||
#select_user #select_user_modal .modal-body .checkbox.inline {
|
||||
display: inline-block;
|
||||
padding-top: 5px;
|
||||
margin-bottom: 0;
|
||||
vertical-align: middle;
|
||||
min-width: 100px;
|
||||
margin-left: 0;
|
||||
}
|
||||
#select_user #select_user_modal .modal-body .form-actions {
|
||||
margin: 20px 0 0;
|
||||
padding: 10px 0 0;
|
||||
background-color: transparent;
|
||||
text-align: right;
|
||||
}
|
||||
#select_user #select_user_modal .modal-body .tabs-left > .nano {
|
||||
width: 160px;
|
||||
min-height: 425px;
|
||||
float: left;
|
||||
}
|
||||
#select_user #select_user_modal .modal-body .tabs-left > .nano .pane {
|
||||
right: 6px;
|
||||
}
|
||||
#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs {
|
||||
width: 140px;
|
||||
float: left;
|
||||
margin-bottom: 0;
|
||||
margin-right: 0;
|
||||
border-right: 1px solid #ddd;
|
||||
border-bottom: none;
|
||||
}
|
||||
#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs > li {
|
||||
float: none;
|
||||
}
|
||||
#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs > li > a {
|
||||
min-width: 74px;
|
||||
margin-right: 0;
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs > li > a {
|
||||
margin-right: -1px;
|
||||
-webkit-border-radius: 4px 0 0 4px;
|
||||
-moz-border-radius: 4px 0 0 4px;
|
||||
border-radius: 4px 0 0 4px;
|
||||
}
|
||||
#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs > li > a:hover {
|
||||
border-color: #eeeeee #dddddd #eeeeee #eeeeee;
|
||||
}
|
||||
#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs .active > a,
|
||||
#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs .active > a:hover {
|
||||
border-color: #ddd transparent #ddd #ddd;
|
||||
*border-right-color: #ffffff;
|
||||
}
|
||||
#select_user #select_user_modal .member-filter-options {
|
||||
float: left;
|
||||
display: inline-block;
|
||||
width: 175px;
|
||||
min-height: 425px;
|
||||
margin-right: 10px;
|
||||
padding: 0 10px 0 0;
|
||||
}
|
||||
#select_user #select_user_modal .member-filter-options select {
|
||||
width: 165px;
|
||||
}
|
||||
#select_user #select_user_modal .member-filter-options .btn {
|
||||
display: block;
|
||||
}
|
||||
#select_user #select_user_modal .member-filter-result {
|
||||
padding-left: 15px;
|
||||
min-height: 360px;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
|
||||
/* Check Box Card */
|
||||
.checkbox-card {
|
||||
margin: 0;
|
||||
}
|
||||
.checkbox-card li {
|
||||
position: relative;
|
||||
list-style: none;
|
||||
color: #FFFFFF;
|
||||
width: 180px;
|
||||
height: 40px;
|
||||
margin: 0 10px 10px 0;
|
||||
float: left;
|
||||
display: inline-block;
|
||||
background-color: #cccccc;
|
||||
overflow: hidden;
|
||||
-webkit-border-radius: 3px;
|
||||
-moz-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
-webkit-transition: all .2s linear;
|
||||
-moz-transition: all .2s linear;
|
||||
-o-transition: all .2s linear;
|
||||
transition: all .2s linear;
|
||||
}
|
||||
.checkbox-card li.mark {
|
||||
width: 0;
|
||||
height: 0;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
|
||||
filter: alpha(opacity=0);
|
||||
opacity: 0;
|
||||
visibility: hidden;
|
||||
}
|
||||
.checkbox-card li:hover {
|
||||
background-color: #0088cc;
|
||||
}
|
||||
.checkbox-card li:after {
|
||||
content: "";
|
||||
display: block;
|
||||
clear: both;
|
||||
height: 0;
|
||||
visibility: hidden;
|
||||
}
|
||||
.checkbox-card li.active:before {
|
||||
-webkit-text-size-adjust : none;
|
||||
font-family: FontAwesome;
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
color: #FFF;
|
||||
text-decoration: inherit;
|
||||
content: "\f00c";
|
||||
position: absolute;
|
||||
right: 0px;
|
||||
top: 0px;
|
||||
line-height: 14px;
|
||||
text-indent: 10px;
|
||||
font-size: 10px;
|
||||
width: 0px;
|
||||
height: 0px;
|
||||
border-style: solid;
|
||||
border-width: 0 22px 22px 0;
|
||||
border-color: transparent #51a351 transparent transparent;
|
||||
}
|
||||
.checkbox-card li.active label {
|
||||
}
|
||||
.checkbox-card li label {
|
||||
margin-bottom: 0px;
|
||||
overflow: hidden;
|
||||
-webkit-border-radius: 3px;
|
||||
-moz-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
.checkbox-card li input {
|
||||
opacity: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
margin: 0;
|
||||
z-index: 10;
|
||||
}
|
||||
.checkbox-card li label span {
|
||||
-webkit-text-size-adjust : none;
|
||||
font-size: 10px;
|
||||
display: block;
|
||||
width: 130px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
color: #666666;
|
||||
margin-top: -3px;
|
||||
}
|
||||
.checkbox-card li:hover label span,
|
||||
.checkbox-card li:hover label span.user-name {
|
||||
color: #FFFFFF;
|
||||
}
|
||||
.checkbox-card li label span.user-name {
|
||||
font-size: 12px;
|
||||
color: #363636;
|
||||
padding: 2px 0 0;
|
||||
margin-top: 0;
|
||||
}
|
||||
.checkbox-card li .user-pic {
|
||||
float: left;
|
||||
margin-right: 5px;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
}
|
||||
#selected_users .selected_user {
|
||||
display: block;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
#selected_users .selected_user .remove_user {
|
||||
font-size: 15px;
|
||||
}
|
||||
/*
|
||||
.promoter {
|
||||
border-color: #CCCCCC;
|
||||
border-style: solid;
|
||||
border-width: 0 1px;
|
||||
padding: 0 10px 5px 10px;
|
||||
}
|
||||
.promoter > div {
|
||||
border-bottom: 1px solid #CCCCCC;
|
||||
}
|
||||
.promoter > div:after {
|
||||
content: "";
|
||||
clear: both;
|
||||
display: block;
|
||||
visibility: hidden;
|
||||
}
|
||||
.promoter > div > span {
|
||||
display: block;
|
||||
margin-left: 70px;
|
||||
padding-bottom: 5px;
|
||||
}
|
||||
.promoter p {
|
||||
width: 70px;
|
||||
float: left;
|
||||
text-align:right;
|
||||
}*/
|
||||
@@ -1,90 +0,0 @@
|
||||
.social-share-button-baidu {
|
||||
display:inline-block;
|
||||
width:16px;
|
||||
height:16px;
|
||||
background:url("/assets/social-share-button.png") 0px 0px no-repeat;
|
||||
}
|
||||
.social-share-button-delicious {
|
||||
display:inline-block;
|
||||
width:16px;
|
||||
height:16px;
|
||||
background:url("/assets/social-share-button.png") -16px 0px no-repeat;
|
||||
}
|
||||
.social-share-button-douban {
|
||||
display:inline-block;
|
||||
width:16px;
|
||||
height:16px;
|
||||
background:url("/assets/social-share-button.png") 0px -16px no-repeat;
|
||||
}
|
||||
.social-share-button-email {
|
||||
display:inline-block;
|
||||
width:16px;
|
||||
height:16px;
|
||||
background:url("/assets/social-share-button.png") -16px -16px no-repeat;
|
||||
}
|
||||
.social-share-button-facebook {
|
||||
display:inline-block;
|
||||
width:16px;
|
||||
height:16px;
|
||||
background:url("/assets/social-share-button.png") -32px 0px no-repeat;
|
||||
}
|
||||
.social-share-button-flickr {
|
||||
display:inline-block;
|
||||
width:16px;
|
||||
height:16px;
|
||||
background:url("/assets/social-share-button.png") -32px -16px no-repeat;
|
||||
}
|
||||
.social-share-button-google {
|
||||
display:inline-block;
|
||||
width:16px;
|
||||
height:16px;
|
||||
background:url("/assets/social-share-button.png") 0px -32px no-repeat;
|
||||
}
|
||||
.social-share-button-google_plus {
|
||||
display:inline-block;
|
||||
width:16px;
|
||||
height:16px;
|
||||
background:url("/assets/social-share-button.png") -16px -32px no-repeat;
|
||||
}
|
||||
.social-share-button-kaixin001 {
|
||||
display:inline-block;
|
||||
width:16px;
|
||||
height:16px;
|
||||
background:url("/assets/social-share-button.png") -32px -32px no-repeat;
|
||||
}
|
||||
.social-share-button-qq {
|
||||
display:inline-block;
|
||||
width:16px;
|
||||
height:16px;
|
||||
background:url("/assets/social-share-button.png") -48px 0px no-repeat;
|
||||
}
|
||||
.social-share-button-renren {
|
||||
display:inline-block;
|
||||
width:16px;
|
||||
height:16px;
|
||||
background:url("/assets/social-share-button.png") -48px -16px no-repeat;
|
||||
}
|
||||
.social-share-button-tqq {
|
||||
display:inline-block;
|
||||
width:16px;
|
||||
height:16px;
|
||||
background:url("/assets/social-share-button.png") -48px -32px no-repeat;
|
||||
}
|
||||
.social-share-button-twitter {
|
||||
display:inline-block;
|
||||
width:16px;
|
||||
height:16px;
|
||||
background:url("/assets/social-share-button.png") 0px -48px no-repeat;
|
||||
}
|
||||
.social-share-button-weibo {
|
||||
display:inline-block;
|
||||
width:16px;
|
||||
height:16px;
|
||||
background:url("/assets/social-share-button.png") -16px -48px no-repeat;
|
||||
}
|
||||
.social-share-button-rss {
|
||||
display:inline-block;
|
||||
width:16px;
|
||||
height:16px;
|
||||
background:url("/assets/social-share-button.png") -32px -48px no-repeat;
|
||||
}
|
||||
@@ -0,0 +1,734 @@
|
||||
# encoding: utf-8
|
||||
|
||||
require 'net/http'
|
||||
require 'open-uri'
|
||||
require 'timeout'
|
||||
|
||||
class Admin::ImportDataController < OrbitBackendController
|
||||
# helper Admin::PagePartsHelper
|
||||
# include Admin::FrontendWidgetInterface
|
||||
|
||||
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?
|
||||
if hash.user_id.present?
|
||||
# ntu_seq = hash.ntu_seq
|
||||
u_account = hash.user_id
|
||||
books_xml = Nokogiri::XML( \
|
||||
# open("http://ann.cc.ntu.edu.tw/Achv/xmlBook.asp?Seq=#{ntu_seq}"))
|
||||
open("http://ann.cc.ntu.edu.tw/Achv/xmlData_useMail.asp?item=Book&account=#{u_account}"))
|
||||
@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?
|
||||
if hash.user_id.present?
|
||||
# ntu_seq = hash.ntu_seq
|
||||
u_account = hash.user_id
|
||||
conference_xml = Nokogiri::XML( \
|
||||
# open("http://ann.cc.ntu.edu.tw/Achv/xmlPaper.asp?Seq=#{ntu_seq}&type=C"))
|
||||
open("http://ann.cc.ntu.edu.tw/Achv/xmlData_useMail.asp?item=paper&account=#{u_account}&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?
|
||||
if hash.user_id.present?
|
||||
# ntu_seq = hash.ntu_seq
|
||||
u_account = hash.user_id
|
||||
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"))
|
||||
open("http://ann.cc.ntu.edu.tw/Achv/xmlData_useMail.asp?item=paper&account=#{u_account}&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?
|
||||
if @user.user_id.present?
|
||||
# ntu_seq = @user.sid
|
||||
u_account = @user.user_id
|
||||
conference_xml = Nokogiri::XML( \
|
||||
# open("http://ann.cc.ntu.edu.tw/Achv/xmlPaper.asp?Seq=#{ntu_seq}&type=C"))
|
||||
open("http://ann.cc.ntu.edu.tw/Achv/xmlData_useMail.asp?item=paper&account=#{u_account}&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
|
||||
respond_to do |format|
|
||||
|
||||
format.html { redirect_to request.referer }
|
||||
format.json { render json: {"success"=>true}.to_json}
|
||||
|
||||
end
|
||||
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?
|
||||
if @user.user_id.present?
|
||||
# ntu_seq = @user.sid
|
||||
u_account = @user.user_id
|
||||
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"))
|
||||
open("http://ann.cc.ntu.edu.tw/Achv/xmlData_useMail.asp?item=paper&account=#{u_account}&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
|
||||
|
||||
respond_to do |format|
|
||||
|
||||
format.html { redirect_to request.referer }
|
||||
format.json { render json: {"success"=>true}.to_json}
|
||||
|
||||
end
|
||||
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?
|
||||
if @user.user_id.present?
|
||||
# ntu_seq = @user.sid
|
||||
u_account = @user.user_id
|
||||
books_xml = Nokogiri::XML( \
|
||||
# open("http://ann.cc.ntu.edu.tw/Achv/xmlBook.asp?Seq=#{ntu_seq}"))
|
||||
open("http://ann.cc.ntu.edu.tw/Achv/xmlData_useMail.asp?item=Book&account=#{u_account}"))
|
||||
@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
|
||||
|
||||
respond_to do |format|
|
||||
|
||||
format.html { redirect_to request.referer }
|
||||
format.json { render json: {"success"=>true}.to_json}
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
def sync_conference_data_auto
|
||||
@user = User.all
|
||||
@user.each do |user|
|
||||
if user.user_id.present?
|
||||
next if !user.email.include? "ntu.edu.tw"
|
||||
u_account = user.user_id
|
||||
@conference_xml = nil
|
||||
begin
|
||||
timeout(60) do
|
||||
@conference_xml = Nokogiri::XML( \
|
||||
open("http://ann.cc.ntu.edu.tw/Achv/xmlData_useMail.asp?item=paper&account=#{u_account}&type=C"))
|
||||
end
|
||||
rescue Timeout::Error
|
||||
next
|
||||
end
|
||||
@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?
|
||||
WritingConference.delete_all(conditions:{create_user_id: user.id})
|
||||
|
||||
@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
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
def sync_journal_paper_data_auto
|
||||
@user = User.all
|
||||
@user.each do |user|
|
||||
if user.user_id.present?
|
||||
next if !user.email.include? "ntu.edu.tw"
|
||||
u_account = user.user_id
|
||||
@paper_xml = nil
|
||||
begin
|
||||
timeout(60) do
|
||||
@paper_xml = Nokogiri::XML( \
|
||||
open("http://ann.cc.ntu.edu.tw/Achv/xmlData_useMail.asp?item=paper&account=#{u_account}&type=J"))
|
||||
end
|
||||
rescue Timeout::Error
|
||||
next
|
||||
end
|
||||
@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?
|
||||
|
||||
WritingJournal.delete_all(conditions:{create_user_id: user.id})
|
||||
|
||||
@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
|
||||
puts "Sync "+u_account+"\r\n"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def sync_book_data_auto
|
||||
@user = User.all
|
||||
@user.each do |user|
|
||||
if user.user_id.present?
|
||||
next if !user.email.include? "ntu.edu.tw"
|
||||
u_account = user.user_id
|
||||
@books_xml = nil
|
||||
begin
|
||||
timeout(60) do
|
||||
@books_xml = Nokogiri::XML( \
|
||||
open("http://ann.cc.ntu.edu.tw/Achv/xmlData_useMail.asp?item=Book&account=#{u_account}"))
|
||||
end
|
||||
rescue Timeout::Error
|
||||
next
|
||||
end
|
||||
|
||||
@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?
|
||||
|
||||
WritingBook.delete_all(conditions:{create_user_id: user.id})
|
||||
|
||||
@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
|
||||
end
|
||||
@@ -1,48 +1,9 @@
|
||||
class Admin::ModuleStoreController < OrbitBackendController
|
||||
|
||||
@@store = STORE_CONFIG[:store_settings]["url"]
|
||||
|
||||
def index
|
||||
@extensions = get_extensions
|
||||
end
|
||||
|
||||
def show
|
||||
@extension = get_extension(params[:id]) rescue nil
|
||||
end
|
||||
|
||||
def download
|
||||
#get extension related values
|
||||
extension = get_extension(params[:id]) rescue nil
|
||||
download_link = @@store + "/"+ extension["extension"]["extension"]["url"]
|
||||
downloaded_file_name = extension["extension_filename"]
|
||||
module_app_name = downloaded_file_name.split(/(.zip)/).first
|
||||
|
||||
#check if the directory exists or not
|
||||
@module_status = Dir.exists?("#{Rails.root}/vendor/built_in_modules/#{module_app_name}")
|
||||
if @module_status.eql?(true)
|
||||
flash[:notice] = "This module is already installed"
|
||||
else
|
||||
download_extension(download_link, downloaded_file_name,module_app_name)
|
||||
flash[:notice] = "This module has been successfully installed"
|
||||
end
|
||||
redirect_to admin_module_store_path
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def get_extensions
|
||||
JSON.parse(open("#{@@store}/api/extensions").read)
|
||||
end
|
||||
|
||||
def get_extension(id)
|
||||
JSON.parse(open("#{@@store}/api/extensions/#{id}").read)
|
||||
end
|
||||
|
||||
def download_extension(download_link, downloaded_file_name,module_app_name)
|
||||
puts %x(wget "#{download_link}")
|
||||
puts %x(unzip "#{downloaded_file_name}")
|
||||
puts %x(mv #{module_app_name} "#{Rails.root}/vendor/built_in_modules/")
|
||||
puts %x(rm "#{downloaded_file_name}")
|
||||
site_restart
|
||||
end
|
||||
end
|
||||
@@ -3,7 +3,6 @@ class Admin::SitesController < OrbitBackendController
|
||||
before_filter :authenticate_user!
|
||||
before_filter :is_admin?
|
||||
before_filter :get_site
|
||||
before_filter :git_branch
|
||||
|
||||
# def index
|
||||
# @site = Site.first
|
||||
@@ -108,43 +107,6 @@ class Admin::SitesController < OrbitBackendController
|
||||
render :nothing => true
|
||||
end
|
||||
|
||||
def update_manager
|
||||
end
|
||||
|
||||
def get_update_history
|
||||
@update_log = %x{git log --pretty=format:"%ad','%s" --date=short}.split("\n").map{|log| log.gsub("'","").split(",")}.to_json
|
||||
render :json => @update_log
|
||||
end
|
||||
|
||||
def check_updates
|
||||
%x(git fetch origin)
|
||||
@new_updates = %x(git log #{@branch}..origin/#{@branch} --pretty=format:"%ad','%s" --date=short).split("\n").map{|log| log.gsub("'","").split(",")}.to_json
|
||||
render :json => @new_updates
|
||||
end
|
||||
|
||||
def update_orbit
|
||||
result = ""
|
||||
need_stash = %x(git diff).blank?
|
||||
%x(git stash) unless need_stash
|
||||
%x(git fetch origin)
|
||||
pull_result = %x(git pull -r --ff-only 2>&1 origin #{@branch})
|
||||
|
||||
if pull_result.include? "fatal: Not possible to fast-forward, aborting."
|
||||
result = "failed"
|
||||
else
|
||||
result = "success"
|
||||
%x{bundle install}
|
||||
%x{touch tmp/restart.txt}
|
||||
end
|
||||
%x(git stash pop) unless need_stash
|
||||
|
||||
render :text => result
|
||||
end
|
||||
|
||||
def restart_server
|
||||
render :text => "success"
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def update_design(design)
|
||||
@@ -162,9 +124,5 @@ class Admin::SitesController < OrbitBackendController
|
||||
def get_site
|
||||
@site ||= Site.first
|
||||
end
|
||||
|
||||
def git_branch
|
||||
@branch = %x(git rev-parse --abbrev-ref HEAD).gsub("\n","")
|
||||
end
|
||||
|
||||
end
|
||||
@@ -1,7 +1,7 @@
|
||||
class Admin::TemplateStoreController < OrbitBackendController
|
||||
|
||||
|
||||
@@store_domain = STORE_CONFIG[:store_settings]["url"]
|
||||
@@store_domain = "http://store.tp.rulingcom.com"
|
||||
def index
|
||||
@store = @@store_domain
|
||||
@templates = JSON.parse(get_templates)
|
||||
@@ -33,4 +33,6 @@ class Admin::TemplateStoreController < OrbitBackendController
|
||||
response.body
|
||||
end
|
||||
|
||||
|
||||
|
||||
end
|
||||
@@ -197,8 +197,8 @@ class PagesController < ApplicationController
|
||||
else
|
||||
model = params[:app_action].classify.constantize rescue nil
|
||||
if !model.nil?
|
||||
item = model.where(:_id=>params[:id]).first
|
||||
@item = Item.where(:category => [item.category_id.to_s]).first if !module_app.has_category.blank? and !item.blank?
|
||||
item = model.find(params[:id])
|
||||
@item = Item.where(:category => [item.category_id.to_s]).first if !module_app.has_category.blank?
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ class SessionsController < Devise::SessionsController
|
||||
if !resource.blank?
|
||||
resource_name = resource.class.to_s.downcase
|
||||
sign_in(resource_name, resource)
|
||||
session[:user_id_type] = "myntu"
|
||||
session[:user_id_type] = "myntucoph"
|
||||
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."
|
||||
@@ -30,8 +30,8 @@ class SessionsController < Devise::SessionsController
|
||||
def destroy
|
||||
@user_id_type = session[:user_id_type]
|
||||
sign_out
|
||||
if @user_id_type == "myntu"
|
||||
redirect_to "https://adfs.ntu.edu.tw/adfs/ls/?wa=wsignout1.0&wreply=https://galogin.ntu.edu.tw"
|
||||
if @user_id_type == "myntucoph"
|
||||
redirect_to "https://adfs.ntu.edu.tw/adfs/ls/?wa=wsignout1.0&wreply=https://cophlogin.ntu.edu.tw"
|
||||
else
|
||||
redirect_to root_path
|
||||
end
|
||||
|
||||
@@ -193,9 +193,8 @@ module ApplicationHelper
|
||||
stylesheets = ''
|
||||
stylesheets << "<link href='#{asset_path 'orbit_bar_bootstrap'}' rel='stylesheet' type='text/css' />\n"
|
||||
stylesheets << "<link href='#{page.design.css_reset.file.url}' rel='stylesheet' type='text/css' />\n" if page.design.css_reset
|
||||
# stylesheets << "<link href='#{asset_path 'banner_nav.css'}' rel='stylesheet' type='text/css' />\n"
|
||||
# stylesheets << "<link href='#{asset_path 'default_widget.css'}' rel='stylesheet' type='text/css' />\n"
|
||||
stylesheets << "<link href='/assets/social-share-button.css' rel='stylesheet' type='text/css' />\n"
|
||||
stylesheets << "<link href='#{asset_path 'banner_nav.css'}' rel='stylesheet' type='text/css' />\n"
|
||||
stylesheets << "<link href='#{asset_path 'default_widget.css'}' rel='stylesheet' type='text/css' />\n"
|
||||
stylesheets << "<link href='#{page.design.css_default.file.url}' rel='stylesheet' type='text/css' />\n" if page.design.css_default
|
||||
theme = page.design.themes.detect{ |d| d.id == page.theme_id }
|
||||
stylesheets << "<link href='#{theme.file.url}' rel='stylesheet' type='text/css' />\n" if theme
|
||||
@@ -204,12 +203,8 @@ module ApplicationHelper
|
||||
|
||||
def page_javascripts(page, edit=nil)
|
||||
javascripts = ''
|
||||
unless edit
|
||||
javascripts << "<script type='text/javascript' src='/assets/orbit-bar-search.js'></script>\n"
|
||||
end
|
||||
# javascripts << "<script type='text/javascript' src='/assets/lib/jquery.preload-min.js'></script>\n"
|
||||
# javascripts << "<script type='text/javascript' src='/assets/jquery.cycle.all.latest.js'></script>\n"
|
||||
javascripts << "<script type='text/javascript' src='/assets/lib/social-share-button.js'></script>\n"
|
||||
page.design.javascripts.each do |js|
|
||||
javascripts << "<script type='text/javascript' src='#{js.file.url}'></script>"
|
||||
end
|
||||
@@ -306,7 +301,7 @@ module ApplicationHelper
|
||||
|
||||
# NTU link
|
||||
def get_link(site_number)
|
||||
"http://#{site_number}.#{request.domain(3)}"
|
||||
"http://#{request.host}:2#{site_number}00"
|
||||
end
|
||||
|
||||
def sortable(column, title = nil, options = {})
|
||||
|
||||
@@ -271,31 +271,17 @@ module OrbitBackendHelper
|
||||
# TODO: links to other actions
|
||||
# ===============================================================
|
||||
def footer(args={})
|
||||
|
||||
if args[:link_name]
|
||||
link_name = args[:link_name]
|
||||
else
|
||||
link_name = content_tag(:i, nil, :class => 'icon-plus') + ' ' + t(:add)
|
||||
end
|
||||
|
||||
paginate = args.has_key?(:paginate) ? args[:paginate] : true
|
||||
link = (is_manager? || is_sub_manager? rescue nil) && args.has_key?(:link) ? true : false
|
||||
if paginate || link
|
||||
@index_footer = content_tag :div, class: "bottomnav clearfix" do
|
||||
concat content_tag :div, link_to(link_name, args[:link].blank? ? '#' : send(args[:link]), :class => (args[:link_class] || 'btn btn-primary'), data: args[:link_data]), class: "action pull-right" if link
|
||||
concat content_tag :div, link_to(content_tag(:i, nil, :class => 'icon-plus') + ' ' + t(:add), args[:link].blank? ? '#' : send(args[:link]), :class => (args[:link_class] || 'btn btn-primary'), data: args[:link_data]), class: "action pull-right" if link
|
||||
concat content_tag :div, paginate(@objects, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil, :sort_options => params[:sort_options]}), class: "pagination pagination-centered" if paginate
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def get_quick_link(quick, object, authorization, approvable)
|
||||
|
||||
if !quick[:link_option].blank?
|
||||
link_option = ",#{quick[:link_option]}"
|
||||
else
|
||||
link_option = ""
|
||||
end
|
||||
|
||||
case quick[:type]
|
||||
when 'approval'
|
||||
if show_approval_link(object)
|
||||
@@ -307,12 +293,12 @@ module OrbitBackendHelper
|
||||
end
|
||||
when 'edit'
|
||||
if authorization && approvable
|
||||
content_tag :li, link_to(t(quick[:translation] || :edit), quick[:link].nil? ? '#' : eval("#{quick[:link]}('#{object.id}'#{link_option})"), class: quick[:class], data: eval("#{quick[:data]}"))
|
||||
content_tag :li, link_to(t(quick[:translation] || :edit), quick[:link].nil? ? '#' : eval("#{quick[:link]}('#{object.id}')"), class: quick[:class], data: eval("#{quick[:data]}"))
|
||||
end
|
||||
when 'delete'
|
||||
if show_delete_link(object)
|
||||
@delete_options = {title: quick[:title], warning: quick[:warning], cancel: quick[:cancel], submit: quick[:submit]}
|
||||
content_tag :li, link_to(t(quick[:translation] || :delete_), '#', rel: eval("#{quick[:link]}('#{object.id}'#{link_option})"), class: "delete #{quick[:class] || 'text-error'}")
|
||||
content_tag :li, link_to(t(quick[:translation] || :delete_), '#', rel: eval("#{quick[:link]}('#{object.id}')"), class: "delete #{quick[:class] || 'text-error'}")
|
||||
end
|
||||
when 'detail'
|
||||
content_tag :li, link_to(t(quick[:translation] || :detail), '#', class: (quick[:class] || "detail-row"))
|
||||
@@ -345,7 +331,7 @@ module OrbitBackendHelper
|
||||
if object.is_a?(klass.constantize)
|
||||
autorized ||= object.user_can_sub_manage?(current_user)
|
||||
else
|
||||
autorized ||= object.send(klass.underscore).user_can_sub_manage?(current_user) rescue nil
|
||||
autorized ||= object.send(klass.underscore).user_can_sub_manage?(current_user)
|
||||
end
|
||||
autorized
|
||||
end
|
||||
@@ -444,4 +430,4 @@ module OrbitBackendHelper
|
||||
res.html_safe
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
@@ -1,7 +0,0 @@
|
||||
class GetAnnouncementFromRss
|
||||
@queue = :high
|
||||
|
||||
def self.perform()
|
||||
%x(ruby "#{Rails.root}/lib/rss_ntu_job.rb")
|
||||
end
|
||||
end
|
||||
@@ -42,7 +42,7 @@ class AvatarUploader < CarrierWave::Uploader::Base
|
||||
# end
|
||||
|
||||
version :thumb do
|
||||
process :resize_to_fit => [200, 200]
|
||||
process :resize_to_fit => [80, 80]
|
||||
end
|
||||
|
||||
# Add a white list of extensions which are allowed to be uploaded.
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
<p>Successfully Imported Announcement Data!</p>
|
||||
@@ -0,0 +1 @@
|
||||
<p>Successfully Book Data!</p>
|
||||
@@ -0,0 +1 @@
|
||||
<p>Successfully Conference Data!</p>
|
||||
@@ -0,0 +1 @@
|
||||
<p>Successfully Journal Paper Data!</p>
|
||||
@@ -0,0 +1 @@
|
||||
<p>Successfully Imported Page Data!</p>
|
||||
@@ -0,0 +1 @@
|
||||
<p>Successfully Imported Teacher Data!</p>
|
||||
@@ -0,0 +1 @@
|
||||
<p>Book Data Synced Successfully!</p>
|
||||
@@ -0,0 +1 @@
|
||||
<p>Conference Paper Data Synced Successfully!</p>
|
||||
@@ -0,0 +1 @@
|
||||
<p>Journal Paper Data Synced Successfully!</p>
|
||||
@@ -20,8 +20,6 @@
|
||||
|
||||
<li title="<%= t('preference') %>"><%= link_to admin_site_preference_path(@site), :class => active_for_action('sites', 'preference') do %><span><i class="icons-cog"></i></span><%end%></li>
|
||||
|
||||
<li title="<%= t('update_manager') %>"><%= link_to admin_site_update_manager_path(@site), :class => active_for_action('sites', 'update_manager') do %><span><i class="icon-refresh"></i></span><%end%></li>
|
||||
|
||||
<!-- <li title="System Info"><a href="/orbit_4.0.1/admin/system_info/index.shtml?sidebarNavList=8&subNavBlockList=0"><span><i class="icons-info-2"></i></span></a></li>
|
||||
--> </ul>
|
||||
</div>
|
||||
|
||||
@@ -28,7 +28,6 @@
|
||||
<div class="form-actions">
|
||||
<button type="button" class="btn" data-dismiss="modal"><%= t(:cancel) %></button>
|
||||
<%= submit_tag t(:submit), class: "btn btn-primary" %>
|
||||
<%= hidden_field_tag field, @field %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
@@ -54,7 +53,6 @@
|
||||
<div class="form-actions condition">
|
||||
<button type="button" class="btn" data-dismiss="modal"><%= t(:cancel) %></button>
|
||||
<%= submit_tag t(:submit), class: "btn btn-primary" %>
|
||||
<%= hidden_field_tag field, @field %>
|
||||
</div>
|
||||
</fieldset>
|
||||
<% end %>
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
<% unless users.blank? %>
|
||||
<div class="promoter-block">
|
||||
<p class="promoter-title"><%= t(:promoter) %>:</p>
|
||||
<ul>
|
||||
<% users.each do |user| %>
|
||||
<li class="promoter">
|
||||
<p>
|
||||
<%= link_to user.name, "mailto:#{user.email}", class: "promoter-name" %> / <span class="promoter-phone"><%= user.office_tel %></span>
|
||||
</p>
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
</div>
|
||||
<% end %>
|
||||
@@ -1,16 +0,0 @@
|
||||
<% content_for :page_specific_javascript do -%>
|
||||
<%= javascript_include_tag "member-selection" %>
|
||||
<%= javascript_include_tag "lib/jquery.nanoscroller" %>
|
||||
<%= javascript_include_tag "lib/checkbox.card" %>
|
||||
<% end -%>
|
||||
<% content_for :page_specific_css do -%>
|
||||
<%= stylesheet_link_tag "member_select" %>
|
||||
<% end %>
|
||||
|
||||
<div>
|
||||
<div id="selected_users">
|
||||
<%= render partial: 'admin/member_selects/user', collection: users, locals: {field: field} %>
|
||||
<%= hidden_field_tag field %>
|
||||
</div>
|
||||
<%= link_to t(:add), '#', class: 'btn btn-primary btn-small select_user_modal', rel: select_members_admin_member_selects_path, field: field %>
|
||||
</div>
|
||||
@@ -14,14 +14,8 @@
|
||||
<%= javascript_include_tag 'lib/retina' %>
|
||||
<%= javascript_include_tag 'lib/mudole_templates_status' %>
|
||||
</head>
|
||||
<!--
|
||||
<% @extensions.each do |extension|%>
|
||||
<%=link_to extension["title"], admin_module_store_show_path(extension["_slugs"][0])%>
|
||||
<%end%> -->
|
||||
|
||||
<%= flash[:notice] rescue nil%>
|
||||
|
||||
<table id="mt-list" class="table main-list">
|
||||
<table id="mt-list" class="table main-list">
|
||||
<thead>
|
||||
<tr class="sort-header">
|
||||
<th class="first"><a href="#">Module Title</a></th>
|
||||
@@ -31,38 +25,6 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<% @extensions.each do |extension|%>
|
||||
<tr>
|
||||
<td class="detail-row">
|
||||
<div class="module_icon pull-left">
|
||||
<%= image_tag "module_icon.png"%>
|
||||
</div>
|
||||
<h5 class="mt_title"><span><%=link_to extension["title"], admin_module_store_show_path(extension["_slugs"][0])%></span></h5>
|
||||
<p class="mt_dev muted"><%=extension["author"]%></p>
|
||||
</td>
|
||||
<td class="detail-row">2013/07/12</td>
|
||||
<td>
|
||||
<%= extension["description"].html_safe%> <%= link_to 'Read More', admin_module_store_show_path(extension["_slugs"][0]) %>
|
||||
</td>
|
||||
<!-- <td class="active"><button class="act btn btn-mini" type="button">Uninstall</button></td>
|
||||
-->
|
||||
<% download_link = STORE_CONFIG[:store_settings]["url"] + "/"+ extension["extension"]["extension"]["url"]
|
||||
downloaded_file_name = extension["extension_filename"]
|
||||
module_app_name = downloaded_file_name.split(/(.zip)/).first
|
||||
@module_status = Dir.exists?("#{Rails.root}/vendor/built_in_modules/#{module_app_name}")
|
||||
%>
|
||||
<% if @module_status.eql?(true)%>
|
||||
<td class="active">Installed</td>
|
||||
<% else %>
|
||||
<td class="active"><%= link_to 'Download', admin_module_store_download_path(:id => extension["_slugs"][0]), :class=>"act btn btn-mini btn-success" %></td>
|
||||
<% end %>
|
||||
</tr>
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
<!--
|
||||
<tr>
|
||||
<td class="detail-row">
|
||||
<div class="module_icon pull-left">
|
||||
@@ -118,5 +80,6 @@
|
||||
@detail
|
||||
</td>
|
||||
<td class="active"><button class="act btn btn-mini btn-info" type="button">Update</button></td>
|
||||
</tr> -->
|
||||
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -22,7 +22,7 @@
|
||||
<div class="side">
|
||||
<div id="item-info">
|
||||
<img src="/assets/module/thumb/mt<%= params[:m] %>.jpg" alt="" class="item-thumb">
|
||||
<h2 class="item-name"><%= @extension.first["title"] %></h2>
|
||||
<h2 class="item-name">Module Name</h2>
|
||||
<a id="download" href="">free download</a>
|
||||
<ul class="item-extra-info">
|
||||
<li><span class="title">downloads</span><span class="count"><%= Random.new.rand(10..100) %></span></li>
|
||||
@@ -38,12 +38,16 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="main clearfix">
|
||||
<h3>Description</h3>
|
||||
<div id="desc-holder" class="paragraph"><%= @extension.first["description"].html_safe%></div>
|
||||
<h3>description</h3>
|
||||
<div id="desc-holder" class="paragraph">Pixel Union’s Jitensha defines storefront minimalism. Japanese for “bicycle,” Jitensha offers clean typography and easy usability, including full color, font, logo, and footer customization. With its painless social media and blog integration, Jitensha gorgeously accomodates every aspect of your business. Any questions before you launch? Don’t hesitate to email us: Support@PixelUnion.net.</div>
|
||||
<h3>screen shot</h3>
|
||||
<div id="screen-shot">
|
||||
<div class="holder">
|
||||
<%= image_tag "#{STORE_CONFIG[:store_settings]["url"]}/#{@extension.first['preview']['preview']['url']}"%>
|
||||
<img src="" alt="Thumbnail 1" class="preview item-thumb">
|
||||
<img src="" alt="Thumbnail 2" class="preview item-thumb">
|
||||
<img src="" alt="Thumbnail 3" class="preview item-thumb">
|
||||
<img src="" alt="Thumbnail 4" class="preview item-thumb">
|
||||
<img src="" alt="Thumbnail 5" class="preview item-thumb">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -20,8 +20,6 @@
|
||||
|
||||
<li title="<%= t('preference') %>"><%= link_to admin_site_preference_path(@site), :class => active_for_action('sites', 'preference') do %><span><i class="icons-cog"></i></span><%end%></li>
|
||||
|
||||
<li title="<%= t('update_manager') %>"><%= link_to admin_site_update_manager_path(@site), :class => active_for_action('sites', 'update_manager') do %><span><i class="icon-refresh"></i></span><%end%></li>
|
||||
|
||||
<!-- <li title="System Info"><a href="/orbit_4.0.1/admin/system_info/index.shtml?sidebarNavList=8&subNavBlockList=0"><span><i class="icons-info-2"></i></span></a></li>
|
||||
--> </ul>
|
||||
</div>
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
});
|
||||
})
|
||||
});
|
||||
$(document).on('click', 'li .map-block .onoff', function () {
|
||||
$(document).on('click', 'li .onoff', function () {
|
||||
$(this).parents("li").toggleClass("disabled");
|
||||
if($(this).parents("li").attr("class").indexOf("disabled") > 0){
|
||||
$(this).text("<%= t('off_upcase') %>")
|
||||
|
||||
@@ -1,245 +0,0 @@
|
||||
<% 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 %>
|
||||
<style type="text/css">
|
||||
.container{
|
||||
}
|
||||
|
||||
#new_update_container{
|
||||
display: none;
|
||||
}
|
||||
|
||||
#update_progress{
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#update_status{
|
||||
/*display: none;*/
|
||||
}
|
||||
|
||||
#update_done{
|
||||
display: none;
|
||||
}
|
||||
|
||||
#update_failed{
|
||||
display: none;
|
||||
}
|
||||
|
||||
.panel{
|
||||
/*max-height: 400px;*/
|
||||
border-radius: 5px;
|
||||
overflow: hidden;
|
||||
border: 1px solid #DFDFDF;
|
||||
background: #FFF;
|
||||
box-shadow: 0px 0px 10px #CCC;
|
||||
}
|
||||
|
||||
.panel-heading{
|
||||
font-size: 16px;
|
||||
color: #666;
|
||||
padding: 10px 20px;
|
||||
|
||||
background-color: #fafafa;
|
||||
background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2);
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2));
|
||||
background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2);
|
||||
background-image: -o-linear-gradient(top, #ffffff, #f2f2f2);
|
||||
background-image: linear-gradient(to bottom, #ffffff, #f2f2f2);
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0);
|
||||
*zoom: 1;
|
||||
border-bottom: 1px solid #DDD;
|
||||
}
|
||||
|
||||
.table{
|
||||
margin: 0;
|
||||
-webkit-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
.pannel-body{
|
||||
max-height: 400px;
|
||||
overflow: scroll;
|
||||
overflow-x: hidden;
|
||||
overflow-y: hidden;
|
||||
padding: 15px;
|
||||
}
|
||||
|
||||
.pannel-body:hover{
|
||||
overflow-y: scroll;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar {
|
||||
width: 5px;
|
||||
}
|
||||
::-webkit-scrollbar-track {
|
||||
background-color: #AAA;
|
||||
}
|
||||
::-webkit-scrollbar-thumb {
|
||||
background-color: #666;
|
||||
}
|
||||
|
||||
.break{
|
||||
border-left: 1px solid #FCFCFC;
|
||||
border-right: 1px solid #DDD;
|
||||
padding: 10px 0;
|
||||
margin: 0 15px;
|
||||
}
|
||||
</style>
|
||||
<div class="container">
|
||||
<div class="row-fluid">
|
||||
<div class="span6">
|
||||
<div id="new_update_container">
|
||||
<div class="panel">
|
||||
<div class="panel-heading">
|
||||
<i class="icon-exclamation-sign"></i>
|
||||
<span class="break"></span>
|
||||
<span class="panel-title"><%= t("update_manager_.available_updates") %></span>
|
||||
<span id="num_new_updates" class="badge badge-important pull-right"></span>
|
||||
</div>
|
||||
<div class="pannel-body">
|
||||
<table class="table table-striped">
|
||||
<tbody id="new_update_table">
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div style="height: 55px;">
|
||||
<button id="update_btn" class="btn btn-primary pull-right" style="margin: 10px;"><i class="icon-inbox icon-white"></i> <%= t("update_manager_.system_update") %></button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="update_status">
|
||||
<div class="panel">
|
||||
<div class="panel-heading">
|
||||
<i class="icon-info-sign"></i>
|
||||
<span class="break"></span>
|
||||
<span class="panel-title"><%= t("update_manager_.update_status") %></span>
|
||||
</div>
|
||||
<div class="pannel-body">
|
||||
<div id="update_done" class="alert alert-success" style="font-size: 16px; text-align: center; margin: 0px;">
|
||||
<i class="icon-ok-sign"> <%= t("update_manager_.update_done") %></i>
|
||||
</div>
|
||||
<div id="update_failed" class="alert alert-error" style="font-size: 16px; text-align: center; margin: 0px;">
|
||||
<i class="icon-remove"> <%= t("update_manager_.update_faild") %></i>
|
||||
</div>
|
||||
<div id="update_progress">
|
||||
<img src="http://ridepal.com/images/homeimg/preloader_transparent.gif" width="50"><br/>
|
||||
<span id="progress_msg"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="padding: 10px 0; height: 65px;">
|
||||
<button id="chech_update_btn" class="btn btn-small btn-inverse pull-right"><i class="icon-refresh icon-white"></i> <%= t("update_manager_.check_update") %></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="span6">
|
||||
<div class="panel">
|
||||
<div class="panel-heading">
|
||||
<i class="icon-th-list"></i>
|
||||
<span class="break"></span>
|
||||
<span class="panel-title"><%= t("update_manager_.update_history") %></span>
|
||||
<span id="num_updates" class="badge badge-success pull-right"></span>
|
||||
</div>
|
||||
<div class="pannel-body" id="update-history-body">
|
||||
<table class="table table-striped">
|
||||
<tbody id="update_history_table">
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
var update_logs;
|
||||
var update_log_display;
|
||||
var new_updates;
|
||||
|
||||
function get_update_history(){
|
||||
$.getJSON("<%= admin_site_get_update_history_path %>",function(data){
|
||||
update_logs = data;
|
||||
update_log_display = 0;
|
||||
$("#num_updates").text(update_logs.length);
|
||||
$("#update_history_table").html("");
|
||||
|
||||
show_update_history();
|
||||
});
|
||||
}
|
||||
|
||||
function show_update_history(){
|
||||
for(var i = 0; i<30; i++){
|
||||
var log = update_logs[update_log_display];
|
||||
update_log_display++;
|
||||
$("#update_history_table").append("<tr><td width=30%'>"+log[0]+"</td><td>"+log[1]+"</td></tr>");
|
||||
if((update_log_display+1)>update_logs.length) break;
|
||||
}
|
||||
}
|
||||
|
||||
function check_updates(){
|
||||
$("#progress_msg").html("<strong><%= t("update_manager_.checking_update") %></strong>");
|
||||
$("#new_update_container").fadeOut(function(){
|
||||
$("#update_done").fadeOut(function(){
|
||||
$("#update_status").fadeIn(function(){
|
||||
$("#update_progress").fadeIn();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
$.getJSON("<%= admin_site_check_updates_path %>",function(data){
|
||||
new_updates = data;
|
||||
show_new_updates();
|
||||
});
|
||||
}
|
||||
|
||||
function show_new_updates(){
|
||||
if(new_updates.length){
|
||||
$("#num_new_updates").text(new_updates.length);
|
||||
$.each(new_updates,function(){
|
||||
$("#new_update_table").append("<tr><td>"+$(this)[0]+"</td><td>"+$(this)[1]+"</td></tr>");
|
||||
});
|
||||
$("#update_status").fadeOut(function(){$("#new_update_container").fadeIn();});
|
||||
}else{
|
||||
$("#update_progress").fadeOut(function(){$("#update_done").fadeIn();});
|
||||
}
|
||||
}
|
||||
|
||||
$(document).ready(function(){
|
||||
check_updates();
|
||||
get_update_history();
|
||||
|
||||
$("#chech_update_btn").click(check_updates);
|
||||
|
||||
$("#update_btn").click(function(){
|
||||
$("#progress_msg").html("<strong><%= t("update_manager_.updating_orbit") %></strong>");
|
||||
$("#new_update_container").fadeOut(function(){
|
||||
$("#update_status").fadeIn();
|
||||
});
|
||||
$.get("<%= admin_site_update_orbit_path %>",function(result){
|
||||
if(result=="failed"){
|
||||
$("#chech_update_btn").hide();
|
||||
$("#update_progress").fadeOut(function(){$("#update_failed").fadeIn();});
|
||||
}else{
|
||||
$("#progress_msg").html("<strong><%= t("update_manager_.restart_server") %></strong>");
|
||||
$.get("<%= admin_site_restart_server_path %>",function(result){
|
||||
$("#update_progress").fadeOut(function(){$("#update_done").fadeIn();});
|
||||
$("#update_status").fadeIn();
|
||||
get_update_history();
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$("#update-history-body").scroll(function () {
|
||||
if((update_log_display+1)<update_logs.length){
|
||||
var scroll_pos = ($("#update-history-body").scrollTop()+$("#update-history-body").height())/$("#update_history_table").height()*100;
|
||||
if(scroll_pos>90){
|
||||
show_update_history();
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -21,7 +21,7 @@
|
||||
<ul class="nav nav-pills">
|
||||
<%= content_tag(:li, link_to(t(:edit),edit_admin_users_new_interface_path(user_for_listing))) if is_admin? %>
|
||||
<%= content_tag(:li, link_to(t("users.setting_privilege"),admin_users_new_interface_edit_privilege_path(user_for_listing))) if is_admin? and current_user.id != user_for_listing.id %>
|
||||
<%= content_tag(:li, link_to(t(:delete_),admin_users_new_interface_path(user_for_listing, :at=>params[:at]), :confirm => t(:sure?), :method => :delete, :class=>"text-error", :remote => true)) if is_admin? %>
|
||||
<%= content_tag(:li, link_to(t(:delete),admin_users_new_interface_path(user_for_listing, :at=>params[:at]), :confirm => t(:sure?), :method => :delete, :class=>"text-error", :remote => true)) if is_admin? %>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
|
||||
@@ -1,60 +1,62 @@
|
||||
<section id="main-wrap">
|
||||
|
||||
|
||||
<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| %>
|
||||
<%= content_tag :p, msg, :class => [key, "alert alert-error in fade"] %>
|
||||
|
||||
<% flash.each do |key, msg| %>
|
||||
<%= content_tag :p, msg, :class => [key, "alert alert-error"] %>
|
||||
<% end %>
|
||||
|
||||
<div class="form">
|
||||
<h3 class="login-logo">Log In to Orbit</h3>
|
||||
<div>
|
||||
<input name="utf8" type="hidden" value="" />
|
||||
<input name="authenticity_token" type="hidden" value="" />
|
||||
</div>
|
||||
|
||||
<div class="form">
|
||||
<h3 class="login-logo"><%= t(:login) %></h3>
|
||||
<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://galogin.ntu.edu.tw/saml_login&wctx=<%= @request_hosts[0] %>">使用計中帳號登入</a>
|
||||
<a class="btn btn-primary" type="submit" href="https://adfs.ntu.edu.tw/adfs/ls/?wa=wsignin1.0&wtrealm=https://cophlogin.ntu.edu.tw/saml_login&wctx=<%= @request_hosts[0] %>">使用計中帳號登入</a>
|
||||
<p>or</p>
|
||||
</div>
|
||||
<div class="form-block">
|
||||
<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">
|
||||
<label for="user_email">
|
||||
<i class="icon-user"></i>
|
||||
</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 class="control-group clear">
|
||||
<label for="user_password">
|
||||
<i class="icon-lock"></i>
|
||||
</label>
|
||||
<%= f.password_field :password, :placeholder => t(:dots), :id=>"user_password" %>
|
||||
<%= f.password_field :password, :placeholder => t(:dots) %>
|
||||
</div>
|
||||
<br/>
|
||||
<label class="checkbox">
|
||||
<% if devise_mapping.rememberable? -%>
|
||||
<%= f.check_box :remember_me %> <small><%= f.label :remember_me %></small>
|
||||
<% end -%>
|
||||
</label>
|
||||
|
||||
<!-- <label class="checkbox">
|
||||
<input type="checkbox" value="">
|
||||
<small>Remember me</small>
|
||||
</label> -->
|
||||
<%= 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 class="switchboard"><span>Forgot Password ?</span> <i class="icons-arrow-left-2"></i></div> -->
|
||||
</div>
|
||||
<div class="pull-right">
|
||||
<%= link_to content_tag(:small, t(:forgot_password)), new_user_password_path %>
|
||||
</div>
|
||||
<br/>
|
||||
<!-- <div class="register">
|
||||
<!-- <div class="register">
|
||||
<button class="btn btn-inverse" type="submit">Register</button>
|
||||
</div> -->
|
||||
<% end %>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -13,16 +13,6 @@
|
||||
</form>
|
||||
</li>
|
||||
|
||||
<!-- ntu sites -->
|
||||
<li id="orbit-tag" class="dropdown">
|
||||
<a class="dropdown-toggle orbit-bar-language" data-icons="" href="#" data-toggle="dropdown"></a>
|
||||
<ul class="dropdown-menu language-menu">
|
||||
<% t('ntu.site_names').each do |site| %>
|
||||
<li><%= link_to site[1], get_link(site[0]) %></li>
|
||||
<% end %>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<!-- Language -->
|
||||
<li id="orbit-language" class="dropdown">
|
||||
<a href="#" role="button" class="dropdown-toggle" data-toggle="dropdown"><%= t(:_locale, :locale => I18n.locale) %></a>
|
||||
@@ -46,7 +36,7 @@
|
||||
<% if @site.desktop_closed %>
|
||||
<li><%= link_to content_tag(:i, nil, class: 'icons-screen') + ' ' + t(:desktop), desktop_path, tabindex: '-1' %></li>
|
||||
<% end %>
|
||||
<li><%= link_to content_tag(:i, nil, class: 'icons-logout') + ' ' + t(:logout), user_logout_path, tabindex: '-1' %></li>
|
||||
<li><%= link_to content_tag(:i, nil, class: 'icons-logout') + ' ' + t(:logout), destroy_user_session_path, tabindex: '-1' %></li>
|
||||
<li class="divider"></li>
|
||||
<li><a tabindex="-1" href="#"><i class="icons-lifebuoy"></i> <%= t(:help) %></a></li>
|
||||
</ul>
|
||||
@@ -66,10 +56,9 @@
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<%= 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://galogin.ntu.edu.tw/saml_login&wctx=<%= @request_hosts[0] %>">使用計中帳號登入</a>
|
||||
<a class="btn btn-primary" type="submit" href="https://adfs.ntu.edu.tw/adfs/ls/?wa=wsignin1.0&wtrealm=https://cophlogin.ntu.edu.tw/saml_login&wctx=<%= @request_hosts[0] %>">使用計中帳號登入</a>
|
||||
<p>or</p>
|
||||
</div>
|
||||
<div class="input-prepend">
|
||||
@@ -100,4 +89,4 @@
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
</ul>
|
||||
</ul>
|
||||
@@ -1,7 +1,7 @@
|
||||
<div id="sidebar-menu">
|
||||
<div class="scroller">
|
||||
<ul class="sidebar-nav">
|
||||
<% OrbitApp::Module::SideBarRegisition.all.sort{|x,y| x.get_module_app_key <=> y.get_module_app_key}.each do |t| %>
|
||||
<% OrbitApp::Module::SideBarRegisition.all.each do |t| %>
|
||||
<%= t.render_head(request, params, current_user, @module_app) %>
|
||||
<% end %>
|
||||
</ul>
|
||||
@@ -10,7 +10,7 @@
|
||||
</div>
|
||||
|
||||
<div class="sub-nav-block-list">
|
||||
<% OrbitApp::Module::SideBarRegisition.all.sort{|x,y| x.get_module_app_key <=> y.get_module_app_key}.each do |t| %>
|
||||
<% OrbitApp::Module::SideBarRegisition.all.each do |t| %>
|
||||
<%= t.render(request, params, current_user, @module_app) %>
|
||||
<% end %>
|
||||
</div>
|
||||
@@ -1,2 +0,0 @@
|
||||
data = File.open(File.join(Rails.root, 'config', 'store_config.yml')).read
|
||||
STORE_CONFIG = YAML::load(ERB.new(data).result(binding)).symbolize_keys
|
||||
+21
-42
@@ -82,46 +82,25 @@ default_widget_style:
|
||||
- style5
|
||||
|
||||
sites:
|
||||
www:
|
||||
url: www.ga.ntu.edu.tw
|
||||
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx3fDAM40XvEiM5oG7YbA\nKnhc5Dyv/ZhVDzyrg95QB0ylBPtSs6g5xgkSSQMnIpAUCzdVIMrUd/A6DuH6f+T5\nccshgh3aDj3wISfgYZc9e7WY1csOItq9lOr6YG4HEABSyjVCcX/RrB8kCuuIGcvR\nRnvu/4fFb93vsVYHwGuivTYRJ+8VM8fOtIFCvbCxZsFj6r5cMl4qI4g4vaIn3xf2\ndXUCICebvdIBfMAdW29yaCScEap1oawEfdXtKCD5vYvAaRZ85jLY/FV5dYhbe1dz\n9G7+B1HI7VBm5bKV0MI1ZH2MTRczaqjLGf6ZF0FbMmcMYLx8iEGL1z0/hgOTcNT6\nrQIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
ga:
|
||||
url: www.ga.ntu.edu.tw
|
||||
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx3fDAM40XvEiM5oG7YbA\nKnhc5Dyv/ZhVDzyrg95QB0ylBPtSs6g5xgkSSQMnIpAUCzdVIMrUd/A6DuH6f+T5\nccshgh3aDj3wISfgYZc9e7WY1csOItq9lOr6YG4HEABSyjVCcX/RrB8kCuuIGcvR\nRnvu/4fFb93vsVYHwGuivTYRJ+8VM8fOtIFCvbCxZsFj6r5cMl4qI4g4vaIn3xf2\ndXUCICebvdIBfMAdW29yaCScEap1oawEfdXtKCD5vYvAaRZ85jLY/FV5dYhbe1dz\n9G7+B1HI7VBm5bKV0MI1ZH2MTRczaqjLGf6ZF0FbMmcMYLx8iEGL1z0/hgOTcNT6\nrQIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
doc:
|
||||
url: doc.ga.ntu.edu.tw
|
||||
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4aE7R0/49UBf5v4rbNiA\nnaXjPZ9rio9fjkaAZeow62yaZtoGurqf44BVj/cjQVUmLnMU4WDcZMI0osLa15+H\ndXSGCP8Upmvi+eA2UqhhBZts1IQ33rPMAjePAbpSGbNRxous0VpH7cc9BxMffQwh\nsygcbghUCEE3dVWdTFGokvgxkBzaKKTNbiqhmbuc8QIuzOvFFGkZHgqlxFHcaNYZ\n7KZJxqvuKSXsJcxIsQKzDiAPI11J3zgRdIf/CFVQv5g15gl1ieQgFdGc3jplsBcd\nrdLApPZ39+BWr9a/Gj9lgP6Ll5G/cM4Uq18a7TCWJIC9PNGw8bBDJTjnUEqmOu3R\nZQIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
cashier:
|
||||
url: cashier.ga.ntu.edu.tw
|
||||
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9wliL8gFsRn0DVZusd2h\nSoj6aQWkKq1UU6fj3vzcrb1adMy8RnKogTW6z1W9wxrcrI/GfyRz9Wop0+9+XNYx\nDH+QQ+/1po/O/MkPBGZ6WxXpH2BSCncdJdYZ9qLvlJHHRhFtczcSQki693MCDUCy\nMrMDvmL4YOowHExD7A5qrCIaYnbNcUCYMKluSLxR52AUeAuYjCwZbkgEwIQRdZ+M\n3JMgTD/9GFsvZ4c5x6n1cUnKCJNyyUIvI8jThtOnySCU8ZN17nWfKb1Cxavt17Vp\nGSdyIIL2SO9+rjOFW3PrAyX5P3xEgPYoDxA1QsYLYbj189qA0sT17xf9H7KcNzyP\n7wIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
general:
|
||||
url: general.ga.ntu.edu.tw
|
||||
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvyFUUFyaEJgsR+bYhTXx\nOA60kw82ohyHCDzkoHDT/k2xS520RZR0AzxT449qD3XfRr0+7F0c6rMx/2pBG7hS\nlHjgrTX7eQ70wV8H4OApriDIp1UDemm4+fKxcPZ6vhWqzp+3ijPdhJXe7OC9D89I\n9QKdlHPBxKFnUrBJiqn3cHGLpRrYTsKpI/Nl7VW4UJJh0k7R7P1Jqry0e+HalOLB\nBu5kl5z6iYBPy1gJ4psDHWuoNboxIgIsVR1SSLM7Mooebwx2qjm3W4VQuc7eQk0g\nh7KH4B8CrK4bC+K6lAS3ZzmTlA6M1WZPtIKv3XqEYCkyomMnkdTNZQYKbCKKlLBo\ntQIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
social:
|
||||
url: social.ga.ntu.edu.tw
|
||||
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqB8htGdGzDPs3GA76REG\nyjM0eEYdXV6ugi4hPZEViCOBg3POC5RZslA5oTCYYWfTVui8jHC2CPD3AYQLG67Z\n79g2miLHEEyDzG7dp//dc85qp0FYR2JII1y26fJutMVCgn0hth6OpfjPB2QhkgZf\nat+Ico5ppDYIx+4jX8xQr4qqRlUIAmECMAE5ATiAUqfv117GJG/fR3AsKZPYm2U1\nFhSpKT2mvC0AiqstZzxYEm4srl1ZjpJPJ7uU+ewvi/EhRyLWFGPmygP6fvg4IaKS\nG00dx7FGedyLVcSaxJCoCX5Z98hIYEStanCSzuR3FQEL0JaB8ZKKWY8dsB+U1v46\nQwIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
property:
|
||||
url: property.ga.ntu.edu.tw
|
||||
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1bmnJSRmxcehehuKBwSQ\nXiuYhAxzUOmptIk0sgciB1hK8++anXMaHXf3QA6UiXWjNyU+g2ZL1nVfVl0Qd3Ps\nxM2+hSeZRus2sw0g7CQea7NkAqLGQrpicnZ8Fgcb+0qwgClk0RVBXwJzfTDu6V+5\nL9lLEKWnSdHmoGkxkZTPMAtJpXYx9SMLtljPYGkMWKY2C1cBqPdMOl/rKTUZ9dYp\n2eJ13NTXDJJgDJOhDFHevzK/I6kwxdJbetNo4IO1dhQdbPionR5SNkkCNZvfy3k3\n68+xopPKH3xECCIuxorcePx0hyoeXS8vdmJ09VKHVUz08LBYGq2S/36V5LIc1P/6\nSQIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
procurement:
|
||||
url: procurement.ga.ntu.edu.tw
|
||||
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAze/Yr3vrpRBpeu7ohyEP\nboPvZ476dtANbvW+rMuDyKeGD5FfoZYwzF+AbMIK6KfleWizObnMM8ABC0LdBuag\nQ0Brk4FMxyKz0aXlSgG3OZiZXJaaWm2/+gqghgpBLpAPMRFnEmK2y11b/EgCxurV\nl+RZ/MgrIviRGipnU7GXfG4O7Ai21oD4lzKt3WbvuWgBdgtEsYpZMIyddWrhkUki\noM39Vm72mCyKPkysCVYCnYaMwDXVx/SKuTRHiVQZ4GNIv74rwp7BOCkfDZ8HrNLH\nr3ObCB8X0Bh9GqUUj7gYu3cFmx8lXer7qkGtGUq2wNUM0CBc01EODVO9e9RQnulA\n3wIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
fss:
|
||||
url: fss.ga.ntu.edu.tw
|
||||
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzsvi4FfIQokfP2QmiRTs\nzuxjPg7oPK7pLHNQC/AyY35H0vmkXGTc74pVvLbfSuaprLO10WVzE4bGGQmhmls1\nDqeY7EyHg1vs7GHQm1932n+Va+qDToSx7S+Zs1ZOglYAdEzBI3dyhefIcDtNUfty\n0i64RGiEzDH4yV5lecilXo5Q4/7W/HNdtw8Oe//LopOZ2Mj+Eq7Tk70WkGFDV73Z\n/jIBLBn51g2P9nrsid63OLe1X8u0l9+xSGff0fR1VlqbElBRACCrAmPvs9ceOW7H\n+yLw71elR4nMDm+/dx/zimeYUj0WaY2A3/O8xucPhSP22YCRiO1jEsAEvMXkCU9p\n8wIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
medicine:
|
||||
url: medicine.ga.ntu.edu.tw
|
||||
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwx7zQLnde6Azy/03bIxg\nkp5rM0DsKKkBbX8C5vhUADxaC2zVmVJuF0NnTGCWutNSSYsKWRKzFwEoZdzJ+8XS\nr8f9kRdEB0yu3Akv+EhZyHA7yVGyFvNAhPGVuekSmpDlpFFKanAqlhBzrhByku5A\nTqp2fXi3zHMoP6WX8QXb6SpG/y4CBpjXCI1qLCAJRw0Fkt7yMXkJnjO2q7zCKAnU\nnv6DVz5yDuBiZPfYlW09KHVWxSehgk5fvLu9Jb/s1XklPwEw1m5BPhIA1YG0QelR\nXk9Pdvwb7aM59LZx1xQZYcku0KGSqLo9rCDTD8YT47226v921yeM36Az8t8e4egU\nzwIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
police:
|
||||
url: police.ga.ntu.edu.tw
|
||||
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzKawlFWAMzA/uV/kcewd\nmtj8PcqxosmnSh7ZzJ0DumG2ieeP9oDBicqbqIEaeJVvrRzYJD2a+u8x5KKMKB8J\nHbMUpCBFlIpkDMjU/oZVMcYT9pcH51QWNvCgHG7prVykSGFz1JRvjSP6cwuZKBFd\nFFneOViETqoMIO1DbRLXsGfPvMOJY9C1xDwv1dLv0Wbj7M9N6eNz06a50bu3I4gl\nMumxWnZUabXL3G62S/Si4NM7J2jOUnkEOxJWOhcAX/iiqS9T8AHu84um2+mLQpfB\nJJFFIWCIAtU78VnIN5JSWwjFU5TsiSyCFYpGXKxUFD25cFmt3SfG0gwmrFis5Pdn\nhwIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
construction:
|
||||
url: construction.ga.ntu.edu.tw
|
||||
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvxJcKnPUDaNNyhdGpedL\n+h2OI9RDDZUTkHcvX1UvBNvlX2+dvok6sHQh2AhZoNyCUFZTbp2CRSNfIM5jXigD\nfHA3KzpN7cmGG7W7nIdBBkZU/ly4HFvkD7mGoEymB0JYgZkz59CXBx+3Zg6KLSYY\nZDoOw6wikrl643So2zFZvwHJpDkRkmX5oWWYqXOZxaZnkgbhvA3KdcH9+C1aEBYY\npY2K2MJt86k0ahW/CJfVRDb9CWSxAGir1RAPu9bRV9y9WWKKGWekH0/IqhhJPT8q\nl3v6PB1Oc6ltbOyYkS2xHbmvRxjORzGen0Xcbjzo4N8HBEoPe0Uc5iP0Y50GDjEL\nEQIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
sec:
|
||||
url: sec.ga.ntu.edu.tw
|
||||
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApsVKJ8Cvr/A0dmHR+vDS\nAYjVzGqMNJ/4pO7GwMzUZMNSkpq3b9CIjrIGg/QKj7woTHnKM39vczu5gxPXJGYN\nIo+PnWsibMDjcz2Vm8s11XXIPho/Ce+hQkWpWGzxpaH7Z/qLKSwiwHdHhlgN3fWw\njR8jYhreQYfohkRGR70h8A9TTU4YkFY/+8yIdwGns61+5tK981kMbVkm+pcgL0cP\nMN08I7MM+c87COY6IO27jVb/ALPAYpo+QUdAfEp5hlI7BQW95nB7LHOnxAm7lLTD\nhbdETUssieQUicwgDpGa2aD769nH+V3UCp0nA4yPDWyJJyKEWsD5EEK24VAcotql\nkwIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
info:
|
||||
url: info.ga.ntu.edu.tw
|
||||
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5MLcsMcedzVWjw7pd/lr\nf8GdrzV6rubsJgEBJbC2OdrloHc+7uxEwWiYNTfg4j46nY/zCuTqzV/Wcfni5pY8\n0yuOmZdH9LjK0PW5BgXYJwe/bZkQmQcIQhkoSPghR8o+kZlI0a3+3gs4eAkpxB21\nPR5Rg2fvzDkaO3WcHf13HymayIk9wn4i0NdLUXgKSWcz5XNJtVBh6jtMkDq7ioOH\nQZT9OAODFw5CW/TvXBJaAvSEdDHsCNTE4vgJO1h6qowC27mErgjilA7TM81JFp40\nwexOW/gXHc4gCsj9BY39tDTqa56QIbJjKdqx7iyHUr1jMFmII1osS1ZVATco9RrM\naQIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
coph:
|
||||
url: coph.ntu.edu.tw
|
||||
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzpqn0cXyC98jZ2hk4F8W\n0K7qgNSqHvH8unxCbgEuxWvkUA1ld2NMfsj9fTl9f2UlhPtwiaZchVAFSDjpYeQD\nH3A5XtlonUXfTD5XdnKBvk6WtKl7cFuyhIazcxp3MA8/cmSuGbXIjyZLMiUkElZg\n5CZ/1n+yhGFjXQz/d4d8W7sN7AjmhHjTi5vgJF4fkaSr1g6TwWJfLhhzzYsva2z/\nDRkQl3OpUEbSQP1X9/RmManDrYpn7Wrqi9Joqu7rPk0Grki8lCo5T/kaEsQ0wKte\nt7N9QRCBM/f2tOYoH+elitnOJq9zAtAtGaw80xso/GkjMHhcmPnI2YZ90yy1Fvau\nOwIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
dph:
|
||||
url: dph.ntu.edu.tw
|
||||
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0wNXuqsY6iHiPORSA+M1\nQzzoepGnJGSP92VszqTp7M+rDf6R98J+jFzG4YkMMUaFids4sXTwVp3zfgmhfl5k\nLJiufcXk9U5HYQ5b88kW+8BOAj9GBMQ7tDTw5hkFGL98anAAxZgW/FVovlAr3jv7\nei5/MBRPwctuOYhR4s9Mh47tbCnMFOswyjErEp5OfkbTo+qar44f2m4d1RVPTM1k\n0RCU65+0syw+hYgg01yRuWkSNzHie5FOVD7CujWeTD2CVZFh72kaGLp99ExOtrM3\n7AzS8duVmty/f7RG8DiJdB4a/mcHjcanlBLcowoo3FaaA1Arg1DkdjH0zwB2UVMs\nEQIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
ntuhpm:
|
||||
url: ntuhpm.ntu.edu.tw
|
||||
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAq/kK75YjD3Yvv9wacE0+\ncImWxnVcVFXhtG5T8Hm0tkit3OroJ2BobWHe23QBThnzXCF4+S1XosYw60XPNAKk\nrmImHry9lG2iz/UfXwj49AfMHOw0tpOcf2UHiVAZUKb9zZRAEDL6WbhVQ5C/9jZ1\nKWtrcArRxck1tivgT5tUaKrCHrnj9/jo6eAHiKg0CsEfS0hlXQFfo7/2kBZc0oBq\ntuVyoDADaY1PoyvqzHxZC3eyUTjURVa0+Lkpw9d9jbSUNnf2XfEi51Rt79PlrtNj\naxsQ2UKhz0xYouTXQPt9Mc+vxow9bvd1CPr52ywX37sjRlmOQ4gpcxEPa21bRevW\nwwIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
epm:
|
||||
url: epm.ntu.edu.tw
|
||||
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0pl5F02WcZC+YLDuowl7\nE2VbgXS/V4R1/pRryGCkuZFBQ5DRw6055dhDp8lribEUYRTk8Y8EUIM+8A1A80Y1\nJqaAhF/ZUE7Io1boqdf0XeRgAmQF4bCphLCSVTz6v2AeAQaS7btUqrLr3t7Ldbso\nbnXQ8qKxsBGTtuvIID5zx2JyRuO1U740KEbt7l5Nnb6zSYYHayOHzsS4FS4HmCa/\nK+1jQcnpis1k7tp/s3tif/9a8t4IjwuxyKI6PEUoyGTZYG9hyrTvoTGobR9g+r6s\n8IluoAauG6IlSjl92sL6D6p+BYS3VsFn+2mznrjgKl9TVt8HfQSgECgfyUAS/OgC\n3wIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
ieh:
|
||||
url: ieh.ntu.edu.tw
|
||||
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvtmUdzHwAE+b1Bt2HGSr\ny/o8rA4fWIpc9zTn4jXkAoH7yQMO0WsneMn1KxE0eUmhHiGaZGQLGrixxQ9ZG9DP\n1fe41IGRKZRt7ep5rpXQFCXxEwBV+CAmdVpwGM0ji3l9tL4CwKkX+ObmUiorQZLG\nAxQHAWpFdM7foiTNw37vqTm8TDIcCu0HXSV+Mb6IydbpQbvYTHdHN2wlgfIa41qU\nWhYqHckKimvApJCsIDHd8ZF32EuOaalfGFvYB7de7Z1Tn9YLvIqgPgIj6o89q4UK\n5EAr1E6kKX9jk3ru5r0u/EEL0zADdbJAWuops4a+XRdPaZMXqngdlEbcxwKTryU+\ncwIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
omih:
|
||||
url: omih.ntu.edu.tw
|
||||
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwgyfe4FFBnE6If3TH/L7\nVm43BYEunoK6ItBC9VccUGrhT3ZD5gAdnNC5OkR8HIUEBxtzvD57CsHaaGKrxxAf\nd8XJh5nXZCg5RaoQVaBNjFBmOPm4jZAWPUFPuGRow8Uzs/LzA5HNew196g+qWayB\nglTyX2TJUAADyx6Peq4ZNqEBBB68n4DyugXzfvlk0yXsrLDtbM44bzOhRuosKa7Y\nung+IonA5lqr2mJDrTMDOupIAgW6/4xO7ww2e/pMOVtfoVSw+5YfXFBGCbRjGKwT\nZ4b7whRBBuRd1lgWhQrzOikb+/NtEVQWLpWPpSeTFx5sIUyb5PmQTXtRxZX1xNcS\neQIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
mph:
|
||||
url: mph.ntu.edu.tw
|
||||
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7rlich0iWAWKUhT7pHji\nOHeEURjnykiX5ElkBD7twy5UyagiD9wVeBOi7mElaJjcR84WfoZVTJVbI08/a5KY\neFURiOy4CigwIFyiDKhwMH5XETuQD96JFqClZGgfxaZAtt9IEpqE3HbqGpPh/0Oc\noLP6Pez8icDYqShZrrZioQZ9XshlZJ6Xt2iStMHNucKHrptMylvtHo6sp/Uy00jC\nubbtH7cvAbQf/Ee/jbGWWMyVwjko1h8u1pMtQlXIC6R0UP6yfCAg7c/0P9eb33OE\n2B6t9i/7kdqTysyKvf6jdDeJeyDYxZVFFXEETu5TzffdhrEK67KAot3J3hi0Qwq7\nvQIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
|
||||
Regular → Executable
+4
-14
@@ -86,6 +86,7 @@ en:
|
||||
user_list: Unit
|
||||
approval_: Approval
|
||||
approval_setting: Approval setting
|
||||
archive: Archive
|
||||
asset: Asset
|
||||
attributes: Attributes
|
||||
auth:
|
||||
@@ -261,6 +262,7 @@ en:
|
||||
text_area: Text Area
|
||||
text_field: Text Field
|
||||
locale: Locale
|
||||
location: Location
|
||||
login: Login
|
||||
logout: Logout
|
||||
mail:
|
||||
@@ -351,7 +353,8 @@ en:
|
||||
brief_intro : "Brief Intro."
|
||||
complete_list : "Complete List"
|
||||
frontend_page : "Frontend Page"
|
||||
phone_number: "Phone Number"
|
||||
phone_number: "Phone Number"
|
||||
sync_data: "Synchronize"
|
||||
picture: Picture
|
||||
placeholder: Field Hint
|
||||
plugins: Plugins
|
||||
@@ -378,7 +381,6 @@ en:
|
||||
system_email: System Email
|
||||
preview: Preview
|
||||
profile: Profile
|
||||
promoter: Promoter
|
||||
publications: Publications
|
||||
purchase: Purchase
|
||||
quantity: Quantity
|
||||
@@ -531,18 +533,6 @@ en:
|
||||
success_: Successfully updated
|
||||
update_: Update
|
||||
update_at: Update at
|
||||
update_manager: Update Manager
|
||||
update_manager_:
|
||||
available_updates: Available Updates
|
||||
check_update: Check Update
|
||||
checking_update: Checking for Updates
|
||||
system_update: Install Updates
|
||||
update_done: System is update to date
|
||||
update_faild: Update failed. Merge is require in the update. Please login to server and update manually.
|
||||
update_history: Update Histroy
|
||||
update_status: Update Status
|
||||
updating_orbit: Updating Orbit. Please wait.
|
||||
restart_server: Restarting Server. Please wait.
|
||||
upload: Upload
|
||||
url: URL
|
||||
use_status: Use Statue
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
en:
|
||||
|
||||
ntu:
|
||||
rss_origin: Back to NTU Announcements
|
||||
site_names:
|
||||
"www": "Dean of General Affairs"
|
||||
"sec": "Office of the Dean and Secretariat"
|
||||
"doc": "Documentation Division"
|
||||
"general": "General Service Division"
|
||||
"property": "Property Management Division"
|
||||
"construction": "Construction and Maintenance Division"
|
||||
"cashier": "Cashier Division"
|
||||
"procurement": "Procurement Division"
|
||||
"fss": "Facilities Service Division"
|
||||
"police": "Campus Security"
|
||||
"social": "General Affairs Division, College of Social Science"
|
||||
"medicine": "General Service Division, College of Medicine"
|
||||
@@ -1,17 +0,0 @@
|
||||
zh_tw:
|
||||
|
||||
ntu:
|
||||
rss_origin: 回臺大校園公佈欄
|
||||
site_names:
|
||||
"www": "總務處"
|
||||
"sec": "總務長室暨總務處秘書室"
|
||||
"doc": "文書組"
|
||||
"general": "事務組"
|
||||
"property": "保管組"
|
||||
"construction": "營繕組"
|
||||
"cashier": "出納組"
|
||||
"procurement": "採購組"
|
||||
"fss": "經營管理組"
|
||||
"police": "駐警隊"
|
||||
"social": "社科院總務分處"
|
||||
"medicine": "醫學院總務分處"
|
||||
Regular → Executable
+4
-14
@@ -86,6 +86,7 @@ zh_tw:
|
||||
user_list: 使用者列表
|
||||
approval_: 審核
|
||||
approval_setting: 審核設定
|
||||
archive: 檔案室
|
||||
asset: 資產
|
||||
attributes: 屬性
|
||||
auth:
|
||||
@@ -263,6 +264,7 @@ zh_tw:
|
||||
text_area: 文字輸入方塊
|
||||
text_field: 文字輸入框
|
||||
locale: 位置
|
||||
location: 地標
|
||||
login: 登入
|
||||
logout: 登出
|
||||
mail:
|
||||
@@ -354,7 +356,8 @@ zh_tw:
|
||||
brief_intro : "摘要"
|
||||
complete_list : "完整列表"
|
||||
frontend_page : "前台呈現"
|
||||
phone_number: "電話"
|
||||
phone_number: "電話"
|
||||
sync_data: "同步資料"
|
||||
picture: 圖片
|
||||
placeholder: 欄位提示文字
|
||||
plugins: 學術資訊
|
||||
@@ -380,7 +383,6 @@ zh_tw:
|
||||
sidebar_nav: 側欄導引
|
||||
system_email: 系統信箱
|
||||
profile: 基本資料
|
||||
promoter: 承辦人
|
||||
publications: 著作
|
||||
purchase: 購買
|
||||
quantity: 數量
|
||||
@@ -534,18 +536,6 @@ zh_tw:
|
||||
success_: 使用者已更新成功
|
||||
update_: 更新
|
||||
update_at: 最後更新時間
|
||||
update_manager: 更新管理員
|
||||
update_manager_:
|
||||
available_updates: 有可用更新
|
||||
check_update: 檢查更新
|
||||
checking_update: 檢查更新中
|
||||
system_update: 安裝更新
|
||||
update_done: 系統已是最新版本
|
||||
update_faild: 更新失敗. 更新需要合併程式碼. 請登入伺服器手動進行更新.
|
||||
update_history: 更新紀錄
|
||||
update_status: 更新狀態
|
||||
updating_orbit: 安裝更新中,請稍候.
|
||||
restart_server: 重啟伺服器中,請稍候.
|
||||
upload: 上傳
|
||||
url: 網址
|
||||
use_status: 使用狀態
|
||||
|
||||
Regular → Executable
+3
-3
@@ -8,13 +8,13 @@ defaults: &defaults
|
||||
|
||||
development:
|
||||
<<: *defaults
|
||||
database: orbit_site_new
|
||||
database: ntu_mb_orbit_2_new
|
||||
|
||||
|
||||
|
||||
test:
|
||||
<<: *defaults
|
||||
database: orbit_site_new
|
||||
database: ntu_mb_orbit_2_new
|
||||
|
||||
# set these environment variables on your prod server
|
||||
production:
|
||||
@@ -24,4 +24,4 @@ production:
|
||||
# password: <%= ENV['MONGOID_PASSWORD'] %>
|
||||
# database: <%= ENV['MONGOID_DATABASE'] %>
|
||||
<<: *defaults
|
||||
database: orbit_site_new
|
||||
database: ntu_mb_orbit_2_new
|
||||
@@ -8,10 +8,4 @@ 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
|
||||
|
||||
get_announcement_from_rss:
|
||||
cron: 0 0 [2,12] * * *
|
||||
class: GetAnnouncementFromRss
|
||||
args:
|
||||
description: Loop through the announcement RSS until 24h ago
|
||||
description: Generate the system status such as disk free space,package version list for showing at site tab
|
||||
+14
-7
@@ -7,7 +7,7 @@ Orbit::Application.routes.draw do
|
||||
resources :passwords, :except => [:index, :show, :destroy]
|
||||
match "/users_passwd" => "desktop/registrations#update", :as => :users_passwd, :via => :put
|
||||
end
|
||||
|
||||
|
||||
devise_scope :user do
|
||||
get 'user_login' => 'sessions#create'
|
||||
match 'user_logout' => 'sessions#destroy'
|
||||
@@ -219,12 +219,20 @@ Orbit::Application.routes.draw do
|
||||
get 'change_design'
|
||||
get 'reset_default_locale'
|
||||
get 'preference'
|
||||
get 'update_manager'
|
||||
get 'get_update_history'
|
||||
get 'check_updates'
|
||||
get 'update_orbit'
|
||||
get 'restart_server'
|
||||
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
|
||||
collection do
|
||||
@@ -269,7 +277,6 @@ Orbit::Application.routes.draw do
|
||||
|
||||
match 'module_store' => 'module_store#index'
|
||||
match 'module_store/show' => 'module_store#show'
|
||||
match 'module_store/download' => 'module_store#download'
|
||||
match 'template_store' => 'template_store#index'
|
||||
match 'template_store/download_theme' => "template_store#download_theme"
|
||||
match 'template_store/template/:id' => 'template_store#show', :as => :template_store_template
|
||||
|
||||
@@ -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
|
||||
@@ -1,2 +0,0 @@
|
||||
store_settings:
|
||||
url: "http://store.tp.rulingcom.com"
|
||||
@@ -1,157 +0,0 @@
|
||||
# encoding: utf-8
|
||||
|
||||
require 'rss'
|
||||
require 'mongo'
|
||||
|
||||
SITES = { "總務處-各單位公告" => "0",
|
||||
"總務處-文書組" => "1",
|
||||
"總務處-出納組" => "2",
|
||||
"總務處-事務組" => "3",
|
||||
"總務處-保管組" => "5",
|
||||
"總務處-採購組" => "6",
|
||||
"總務處-經營管理組" => "7",
|
||||
"總務處-駐衛警察隊" => "9",
|
||||
"總務處-營繕組" => "10",
|
||||
"總務處-總務處" => "11",
|
||||
"社會科學院-社會科學院總務分處" => "4",
|
||||
"醫學院-醫學院總務分處" => "8" }
|
||||
|
||||
SITE_KEYS = SITES.keys
|
||||
|
||||
DB_BASE_NAME = "production_new"
|
||||
|
||||
all = {}
|
||||
continue = true
|
||||
i = 1
|
||||
yesterday = Time.now - 86400
|
||||
|
||||
while continue do
|
||||
open("http://ann.cc.ntu.edu.tw/asp/rss.asp?page=#{i}") do |rss|
|
||||
feed = RSS::Parser.parse(rss.read.encode('utf-8', 'big5', invalid: :replace, undef: :replace, replace: '').gsub('<pubDate>Wes,', '<pubDate>Wed,').gsub(/(encoding=\"big5\")/, 'encoding="utf-8"'))
|
||||
feed.items.each do |item|
|
||||
if item.pubDate > yesterday
|
||||
if SITE_KEYS.include?(item.author)
|
||||
author = item.author.strip
|
||||
category = item.category.to_s.gsub(/\<(\/)*category\>/, '')
|
||||
if all[author]
|
||||
all[author][item.link.strip] = {title: item.title.strip, author: author, link: item.link.strip, date: item.pubDate, category: category, description: item.description.gsub("\r\n", '<br/>').strip}
|
||||
else
|
||||
all[author] = {item.link.strip => {title: item.title.strip, author: author, link: item.link.strip, date: item.pubDate, category: category, description: item.description.gsub("\r\n", '<br/>').strip}}
|
||||
end
|
||||
end
|
||||
else
|
||||
continue = false
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
i += 1
|
||||
end
|
||||
|
||||
# Get corresponding category_id or create a new one
|
||||
def get_category_id(category, categories, coll_cat, bulletin_module_id)
|
||||
if categories.keys.include? "rss_#{category}"
|
||||
[categories["rss_#{category}"], categories]
|
||||
else
|
||||
cat = {
|
||||
_type: "Category",
|
||||
module_app_id: bulletin_module_id,
|
||||
key: "rss_#{category}",
|
||||
disable: false,
|
||||
custom: false,
|
||||
title: {:zh_tw => category},
|
||||
created_at: Time.now,
|
||||
updated_at: Time.now
|
||||
}
|
||||
|
||||
categories["rss_#{category}"] = result = coll_cat.save(cat)
|
||||
[result, categories]
|
||||
end
|
||||
end
|
||||
|
||||
# Get categories and id based on a given site number
|
||||
def get_mongo_and_categories(site_number="0")
|
||||
db = Mongo::Connection.new("localhost", 27017).db("#{DB_BASE_NAME}_#{site_number}")
|
||||
|
||||
bulletin_module_id = db["module_apps"].find(key: "announcement").first
|
||||
|
||||
coll_bulletin = db["bulletins"]
|
||||
coll_buffer_cat = db["buffer_categories"]
|
||||
coll_cat = db["categories"]
|
||||
coll_bulletin_cat = db["categories"].find(module_app_id: bulletin_module_id["_id"])
|
||||
|
||||
categories = coll_bulletin_cat.find().to_a.inject({}) do |categories, category|
|
||||
categories[category['key']] = category['_id']
|
||||
categories
|
||||
end
|
||||
[categories, coll_bulletin, coll_cat, bulletin_module_id["_id"],coll_buffer_cat]
|
||||
end
|
||||
|
||||
# Get main site (總務處) categories
|
||||
@main_categories, @main_coll_bulletin, @main_coll_cat, @main_bulletin_module_id, @main_coll_buffer_cat = get_mongo_and_categories
|
||||
@copy_categories, @copy_coll_bulletin, @copy_coll_cat, @copy_bulletin_module_id, @copy_coll_buffer_cat = get_mongo_and_categories('11')
|
||||
|
||||
all.each do |key, value| # Loop through all the authors
|
||||
site_number = SITES[key]
|
||||
categories, coll_bulletin, coll_cat, bulletin_module_id, coll_buffer_cat = get_mongo_and_categories(site_number) # Get current's site categories
|
||||
value.each_value do |bul| # Loop through all the items
|
||||
category_id, categories = get_category_id(bul[:category], categories, coll_cat, bulletin_module_id)
|
||||
unless coll_bulletin.find_one(rss_link: bul[:link])
|
||||
bulletin = { _type: "Bulletin",
|
||||
postdate: bul[:date],
|
||||
created_at: bul[:date],
|
||||
updated_at: bul[:date],
|
||||
public: true,
|
||||
is_checked: true,
|
||||
is_pending: false,
|
||||
is_rejected: false,
|
||||
category_id: category_id,
|
||||
title: {:zh_tw => bul[:title]},
|
||||
text: {:zh_tw => bul[:description]},
|
||||
available_for_en: false,
|
||||
available_for_zh_tw: true,
|
||||
rss_link: bul[:link],
|
||||
is_top: false,
|
||||
is_hot: false,
|
||||
is_hidden: false }
|
||||
bs = coll_bulletin.save(bulletin)
|
||||
|
||||
buffer_cat = { _type: "BufferCategory",
|
||||
category_id: category_id,
|
||||
categorizable_type: "Bulletin",
|
||||
categorizable_id: bs }
|
||||
coll_buffer_cat.save(buffer_cat)
|
||||
|
||||
unless site_number.eql?("0") || @main_coll_bulletin.find_one(rss_link: bul[:link]) # Copy the item to the main site
|
||||
|
||||
category_id, @main_categories = get_category_id(bul[:category], @main_categories, @main_coll_cat, @main_bulletin_module_id)
|
||||
main_bulletin = bulletin.clone
|
||||
main_bulletin['_id'] = BSON::ObjectId.new
|
||||
main_bulletin[:category_id] = category_id
|
||||
@main_coll_bulletin.save(main_bulletin)
|
||||
|
||||
main_buffer_cat = { _type: "BufferCategory",
|
||||
category_id: category_id,
|
||||
categorizable_type: "Bulletin",
|
||||
categorizable_id: main_bulletin['_id'] }
|
||||
@main_coll_buffer_cat.save(main_buffer_cat)
|
||||
|
||||
category_id, @copy_categories = get_category_id(bul[:category], @copy_categories, @copy_coll_cat, @copy_bulletin_module_id)
|
||||
copy_bulletin = bulletin.clone
|
||||
copy_bulletin['_id'] = BSON::ObjectId.new
|
||||
copy_bulletin[:category_id] = category_id
|
||||
@copy_coll_bulletin.save(copy_bulletin)
|
||||
|
||||
copy_buffer_cat = { _type: "BufferCategory",
|
||||
category_id: category_id,
|
||||
categorizable_type: "Bulletin",
|
||||
categorizable_id: copy_bulletin['_id'] }
|
||||
@copy_coll_buffer_cat.save(copy_buffer_cat)
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
#encoding: utf-8
|
||||
namespace :teacher do
|
||||
task :import, [:department,:category] => :environment do |t, args|
|
||||
department = "#{args.department}"
|
||||
teacher_role = Role.where(:key=>"teacher").first
|
||||
role_fulltime = RoleStatus.where(:key=>"1.fulltime").first
|
||||
role_adjunct = RoleStatus.where(:key=>"2.adjunct").first
|
||||
role_category = RoleCategory.where(:key=>"#{args.category}").first
|
||||
@teacher = []
|
||||
CSV.foreach("#{Rails.root}/#{department}.csv") do |row|
|
||||
@teacher.push(row)
|
||||
end
|
||||
@teacher.each do |teacher|
|
||||
sex = "unknown"
|
||||
if teacher[2]=="男"
|
||||
sex = "male"
|
||||
elsif teacher[2]=="女"
|
||||
sex = "female"
|
||||
end
|
||||
|
||||
role_status = ""
|
||||
if teacher[3].include? "兼任"
|
||||
role_status = role_adjunct
|
||||
else
|
||||
role_status = role_fulltime
|
||||
end
|
||||
|
||||
if teacher[1].blank?
|
||||
teacher[1] = " "
|
||||
end
|
||||
|
||||
user_data = {
|
||||
:user_id => teacher[5].split("@")[0],
|
||||
:password => "password",
|
||||
:first_name_translations =>{"zh_tw"=>teacher[0].split(teacher[0][0])[1],"en"=>teacher[1].split(" ")[1]},
|
||||
:last_name_translations => {"zh_tw"=>teacher[0][0],"en"=>teacher[1].split(" ")[0]},
|
||||
:roles => [teacher_role],
|
||||
:role_statuses => [role_status],
|
||||
:role_categorys => [role_category],
|
||||
:office_tel => teacher[4],
|
||||
:email => teacher[5],
|
||||
:confirmation_token => nil,
|
||||
:confirmed_at => Time.now,
|
||||
:approved => true,
|
||||
:sex => sex
|
||||
}
|
||||
|
||||
if User.where(:email=>teacher[5]).count == 0
|
||||
user = User.new(user_data)
|
||||
user.save
|
||||
else
|
||||
user = User.where(:email=>teacher[5]).first
|
||||
user.update_attributes(user_data)
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -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
|
||||
@@ -4,13 +4,9 @@ zh_tw:
|
||||
ad_banner: 廣告輪播
|
||||
banner: 橫幅
|
||||
banner_name: 橫幅名稱
|
||||
name_only_english: 橫幅名稱只能為英文
|
||||
edit_banner: 編輯橫幅
|
||||
enter_number: 請輸入數字
|
||||
enter_url: 請輸入網址
|
||||
banner_name_note: 橫幅名稱只能為英文
|
||||
ste: 轉換間隔時間
|
||||
number_seconds: 請輸入秒數
|
||||
number_milliseconds: 請輸入毫秒數
|
||||
ste_note: 請輸入秒數
|
||||
best_size: 最佳尺寸
|
||||
effect: 效果
|
||||
all: 全部
|
||||
@@ -20,4 +16,3 @@ zh_tw:
|
||||
size: 大小
|
||||
transition_interval: 轉換間隔時間
|
||||
transition_speed: 轉換速度
|
||||
type: 類型
|
||||
-1
@@ -64,7 +64,6 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController
|
||||
# GET /bulletins/1/edit
|
||||
def edit
|
||||
@bulletin = Bulletin.find(params[:id])
|
||||
@users = @bulletin.get_users
|
||||
@tags = get_tags
|
||||
is_authorized_sub_manager = @bulletin.category.auth_sub_manager.authorized_user_ids rescue nil
|
||||
|
||||
|
||||
@@ -24,13 +24,10 @@ class Bulletin
|
||||
|
||||
field :create_user_id
|
||||
field :update_user_id, :class_name => "User"
|
||||
field :user_ids
|
||||
|
||||
field :view_count, :type => Integer, :default => 0
|
||||
|
||||
field :public, :type => Boolean, :default => true
|
||||
field :rss_link
|
||||
|
||||
|
||||
mount_uploader :image, ImageUploader
|
||||
|
||||
@@ -152,9 +149,6 @@ class Bulletin
|
||||
preview_object
|
||||
end
|
||||
|
||||
def get_users
|
||||
User.find(self.user_ids) rescue []
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
|
||||
Vendored
-8
@@ -64,14 +64,6 @@
|
||||
<%= f.datetime_picker :deadline, :no_label => true %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Promoter -->
|
||||
<div class="control-group">
|
||||
<label class="control-label muted"><%= t(:promoter) %></label>
|
||||
<div class="controls">
|
||||
<%= render partial: 'admin/member_selects/selection_box', locals: {field: 'bulletin[user_ids][]', users: @users} %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
Vendored
-15
@@ -36,21 +36,6 @@
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
<% unless @bulletin.rss_link.blank? %>
|
||||
<div>
|
||||
<%= link_to t('ntu.rss_origin'), @bulletin.rss_link %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<% unless @bulletin.user_ids.blank? %>
|
||||
<div class="promoter">
|
||||
<div>
|
||||
<%= render partial: 'admin/member_selects/promoter_front', locals: {users: @bulletin.get_users} %>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<%= share_links(@bulletin, 'announcement') %>
|
||||
|
||||
|
||||
Vendored
-1
@@ -87,7 +87,6 @@ class Panel::Archive::BackEnd::ArchiveFilesController < OrbitBackendController
|
||||
# GET /archive_files/1/edit
|
||||
def edit
|
||||
@archive_file = ArchiveFile.find(params[:id])
|
||||
@users = @archive_file.get_users
|
||||
if !current_user.admin?
|
||||
redirect_to :action => :index
|
||||
else
|
||||
|
||||
@@ -22,8 +22,6 @@ class ArchiveFile
|
||||
field :title, localize: true
|
||||
field :create_user_id
|
||||
field :update_user_id, :class_name => "User"
|
||||
field :user_ids
|
||||
|
||||
|
||||
scope :can_display,where(is_hidden: false)
|
||||
|
||||
@@ -75,10 +73,6 @@ class ArchiveFile
|
||||
|
||||
end
|
||||
|
||||
def get_users
|
||||
User.find(self.user_ids) rescue []
|
||||
end
|
||||
|
||||
|
||||
def get_file_icon( file_data )
|
||||
file_icon = "<span class=\"o-archives-file-type\">#{file_data.split('.')[-1]}</span>".html_safe
|
||||
|
||||
Vendored
-8
@@ -54,14 +54,6 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Promoter -->
|
||||
<div class="control-group">
|
||||
<label class="control-label muted"><%= t(:promoter) %></label>
|
||||
<div class="controls">
|
||||
<%= render partial: 'admin/member_selects/selection_box', locals: {field: 'archive_file[user_ids][]', users: @users} %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- Status Module -->
|
||||
|
||||
Vendored
+6
-18
@@ -9,19 +9,19 @@
|
||||
<tr>
|
||||
<th class="column-ctrl col-title"><%= sortable(:title, t("archive.Title"))%></th>
|
||||
<th class="column-ctrl col-file"><%= t("archive.Files")%></th>
|
||||
<th class="column-ctrl col-promoter"><%= t(:promoter)%></th>
|
||||
<th class="column-ctrl col-category"><%= sortable(:archive_file_category, t("archive.Category"))%></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
||||
<% @archive_files.each_with_index do |post,i| %>
|
||||
<tr <% if ( (i + 1) % 2 ) == 0 %> class="even" <% end %>>
|
||||
<td class="col-title">
|
||||
<td>
|
||||
<div class="o-archives-title"><%= post.title %>
|
||||
<% if !post.is_hot.blank? %><span class="o-archives-hot"><%= t('hot')%></span><% end %>
|
||||
</div>
|
||||
</td>
|
||||
<td class="col-file">
|
||||
<td>
|
||||
<div class="o-archives-list-item">
|
||||
<% if !post.archive_file_multiples.blank? %>
|
||||
<ol>
|
||||
@@ -37,21 +37,9 @@
|
||||
<% end %>
|
||||
</div>
|
||||
</td>
|
||||
<td class="col-promoter">
|
||||
<% unless post.get_users.blank? %>
|
||||
<div class="promoter-block">
|
||||
<ul>
|
||||
<% post.get_users.each do |user| %>
|
||||
<li class="promoter">
|
||||
<p>
|
||||
<%= link_to user.name, "mailto:#{user.email}", class: "promoter-name" %> / <span class="promoter-phone"><%= user.office_tel %></span>
|
||||
</p>
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
</div>
|
||||
<% end %>
|
||||
</td>
|
||||
<td><div class="o-archives-category">
|
||||
<%= post.category.title if !post.category.blank? %>
|
||||
</div></td>
|
||||
</tr>
|
||||
<% end %>
|
||||
|
||||
|
||||
-45
@@ -1,45 +0,0 @@
|
||||
# encoding: utf-8
|
||||
|
||||
class Panel::Ask::BackEnd::AskRequestsController < OrbitBackendController
|
||||
include AdminHelper
|
||||
#include OrbitControllerLib::DivisionForDisable
|
||||
|
||||
#before_filter :for_app_manager
|
||||
skip_before_filter :verify_authenticity_token
|
||||
open_for_visitor :only => [:transferred_request]
|
||||
|
||||
def transferred_request
|
||||
app_title = request.fullpath.split('/')[2]
|
||||
module_app ||= ModuleApp.first(conditions: {:key => app_title} )
|
||||
|
||||
if request.headers["HTTP_X_AUTH_TOKEN"] == '3kjlfksjDFJ'
|
||||
if !module_app.categories.where("title.en" => "Transferred Question").any?
|
||||
ask_category = module_app.categories.build
|
||||
ask_category.title_translations = { "zh_tw" => "轉介的問題", "en" => "Transferred Question" }
|
||||
ask_category.save!
|
||||
end
|
||||
|
||||
module_app.categories.enabled
|
||||
category = module_app.categories.where("title.en" => "Transferred Question").first
|
||||
|
||||
@transferred_question = AskQuestion.new(
|
||||
name: params['name'],
|
||||
identity: params['identity'],
|
||||
email: params['email'],
|
||||
phone: params['phone'],
|
||||
tax: params['tax'],
|
||||
title: params['title'],
|
||||
content: params['content'],
|
||||
category_id: category.id)
|
||||
|
||||
@transferred_question.ask_reply = AskReply.new
|
||||
@transferred_question.ask_reply.update_attributes(status: "待處理 (轉)")
|
||||
@transferred_question.save
|
||||
|
||||
render :nothing => true
|
||||
else
|
||||
render :status => 500
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Vendored
+7
-8
@@ -1,14 +1,13 @@
|
||||
class Panel::Ask::BackEnd::AskAcknowledgementsController < OrbitBackendController
|
||||
#include AdminHelper
|
||||
#include OrbitControllerLib::DivisionForDisable
|
||||
include AdminHelper
|
||||
include OrbitControllerLib::DivisionForDisable
|
||||
|
||||
#before_filter :for_app_manager
|
||||
open_for_manager
|
||||
before_filter :for_app_manager
|
||||
|
||||
#def initialize
|
||||
# super
|
||||
# @app_title = 'ask_acknowledgement'
|
||||
#end
|
||||
def initialize
|
||||
super
|
||||
@app_title = 'ask_acknowledgement'
|
||||
end
|
||||
|
||||
def index
|
||||
@ask_acknowledgement = AskAcknowledgement.first || AskAcknowledgement.create
|
||||
|
||||
+7
-8
@@ -1,15 +1,14 @@
|
||||
class Panel::Ask::BackEnd::AskAdminsController < OrbitBackendController
|
||||
|
||||
#include AdminHelper
|
||||
#include OrbitControllerLib::DivisionForDisable
|
||||
include AdminHelper
|
||||
include OrbitControllerLib::DivisionForDisable
|
||||
|
||||
#before_filter :for_app_manager
|
||||
open_for_manager
|
||||
before_filter :for_app_manager
|
||||
|
||||
#def initialize
|
||||
# super
|
||||
# @app_title = 'ask_admins'
|
||||
#end
|
||||
def initialize
|
||||
super
|
||||
@app_title = 'ask_admins'
|
||||
end
|
||||
|
||||
def index
|
||||
@ask_admins = AskAdmin.all
|
||||
|
||||
+10
-13
@@ -1,11 +1,11 @@
|
||||
class Panel::Ask::BackEnd::AskQuestionsController < OrbitBackendController
|
||||
|
||||
require 'csv'
|
||||
require 'csv'
|
||||
|
||||
# def initialize
|
||||
# super
|
||||
# @app_title = 'ask_questions'
|
||||
# end
|
||||
class Panel::Ask::BackEnd::AskQuestionsController < OrbitBackendController
|
||||
|
||||
def initialize
|
||||
super
|
||||
@app_title = 'ask_questions'
|
||||
end
|
||||
|
||||
def index
|
||||
@ask_questions = AskQuestion.all
|
||||
@@ -53,12 +53,10 @@ class Panel::Ask::BackEnd::AskQuestionsController < OrbitBackendController
|
||||
Rails.application.config.mongoid.use_activesupport_time_zone = true
|
||||
date_start = "#{params[:export]['start(1i)']}-#{params[:export]['start(2i)']}-#{params[:export]['start(3i)']}"
|
||||
date_end = "#{params[:export]['end(1i)']}-#{params[:export]['end(2i)']}-#{params[:export]['end(3i)']}"
|
||||
#@ask_questions = AskQuestion.includes(:ask_category).includes(:ask_reply).where(:created_at.gte => date_start, :created_at.lte => date_end)
|
||||
@ask_questions = AskQuestion.where(:created_at.gte => date_start, :created_at.lte => date_end)
|
||||
@ask_questions = AskQuestion.includes(:ask_category).includes(:ask_reply).where(:created_at.gte => date_start, :created_at.lte => date_end)
|
||||
|
||||
csv = CSV.generate do |csv|
|
||||
csv << [ t('status'),
|
||||
t('category'),
|
||||
csv << [ t('category'),
|
||||
AskQuestion.human_attribute_name(:name),
|
||||
AskQuestion.human_attribute_name(:identity),
|
||||
AskQuestion.human_attribute_name(:email),
|
||||
@@ -70,8 +68,7 @@ class Panel::Ask::BackEnd::AskQuestionsController < OrbitBackendController
|
||||
AskReply.human_attribute_name(:comment)]
|
||||
@ask_questions.each do |ask_question|
|
||||
ask_question.ask_reply ||= AskReply.new
|
||||
csv << [ ask_question.ask_reply.status,
|
||||
ask_question.category.title,
|
||||
csv << [ ask_question.ask_category.name,
|
||||
ask_question.name,
|
||||
ask_question.identity,
|
||||
ask_question.email,
|
||||
|
||||
-104
@@ -1,4 +1,3 @@
|
||||
# encoding: utf-8
|
||||
class Panel::Ask::BackEnd::AskRepliesController < OrbitBackendController
|
||||
|
||||
include AdminHelper
|
||||
@@ -14,122 +13,19 @@ class Panel::Ask::BackEnd::AskRepliesController < OrbitBackendController
|
||||
def create
|
||||
@ask_question = AskQuestion.find(params[:ask_question_id])
|
||||
@ask_question.ask_reply = AskReply.new(params[:ask_reply])
|
||||
@ask_reply = @ask_question.ask_reply
|
||||
@ask_question.save
|
||||
|
||||
if @ask_question.ask_reply.send_email?
|
||||
Resque.enqueue(SendAskReplyMail, @ask_reply.ask_question.id)
|
||||
end
|
||||
|
||||
status_stack = []
|
||||
new_status = ""
|
||||
params[:ask_reply][:depts].each do |dns|
|
||||
# host = dns.split(":").first # local test
|
||||
|
||||
begin
|
||||
status_stack << send_request(dns, @ask_reply.ask_question, @ask_reply) # local test, switch host to dns if on server
|
||||
rescue
|
||||
status_stack << "fail"
|
||||
end
|
||||
end if params[:ask_reply][:status] == "轉介其他單位"
|
||||
|
||||
success_count = status_stack.count("success")
|
||||
failed_count = status_stack.count("fail")
|
||||
|
||||
if failed_count == 0 && success_count > 0
|
||||
new_status = "轉介其他單位"
|
||||
elsif failed_count > 0 && success_count > 0
|
||||
new_status = "部份轉介失敗"
|
||||
elsif failed_count > 0 && success_count == 0
|
||||
new_status = "轉介失敗"
|
||||
elsif failed_count == 0 && success_count == 0 && @ask_reply.status == "待處理"
|
||||
new_status = "待處理"
|
||||
elsif failed_count == 0 && success_count == 0 && @ask_reply.status == "已處理"
|
||||
new_status = "已處理"
|
||||
elsif failed_count == 0 && success_count == 0 && @ask_reply.status == "轉介其他單位"
|
||||
new_status = "轉介失敗"
|
||||
end
|
||||
|
||||
@ask_reply.update_attributes(status: new_status)
|
||||
|
||||
redirect_to panel_ask_back_end_ask_questions_path, notice: t('ask.reply_success')
|
||||
end
|
||||
|
||||
def update
|
||||
|
||||
@ask_reply = AskReply.find(params[:id])
|
||||
@ask_reply.update_attributes(params[:ask_reply])
|
||||
|
||||
if @ask_reply.send_email?
|
||||
Resque.enqueue(SendAskReplyMail, @ask_reply.ask_question.id)
|
||||
end
|
||||
|
||||
status_stack = []
|
||||
new_status = ""
|
||||
params[:ask_reply][:depts].each do |dns|
|
||||
# host = dns.split(":").first # local test
|
||||
|
||||
begin
|
||||
status_stack << send_request(dns, @ask_reply.ask_question, @ask_reply) # local test, switch host to dns if on server
|
||||
rescue
|
||||
status_stack << "fail"
|
||||
end
|
||||
end if params[:ask_reply][:status] == "轉介其他單位"
|
||||
|
||||
success_count = status_stack.count("success")
|
||||
failed_count = status_stack.count("fail")
|
||||
|
||||
if failed_count == 0 && success_count > 0
|
||||
new_status = "轉介其他單位"
|
||||
elsif failed_count > 0 && success_count > 0
|
||||
new_status = "部份轉介失敗"
|
||||
elsif failed_count > 0 && success_count == 0
|
||||
new_status = "轉介失敗"
|
||||
elsif failed_count == 0 && success_count == 0 && @ask_reply.status == "待處理"
|
||||
new_status = "待處理"
|
||||
elsif failed_count == 0 && success_count == 0 && @ask_reply.status == "已處理"
|
||||
new_status = "已處理"
|
||||
elsif failed_count == 0 && success_count == 0 && @ask_reply.status == "轉介其他單位"
|
||||
new_status = "轉介失敗"
|
||||
end
|
||||
|
||||
@ask_reply.update_attributes(status: new_status)
|
||||
|
||||
redirect_to panel_ask_back_end_ask_questions_path, notice: t('ask.reply_success')
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def send_request(dep_dns, current_question, current_reply)
|
||||
require 'net/http'
|
||||
require 'uri'
|
||||
require 'json'
|
||||
|
||||
uri_path = "/panel/ask/back_end/ask_requests/transferred_request"
|
||||
http = Net::HTTP.new(dep_dns, 80) # port 4000 for local test, switch to port 80 for deployment
|
||||
req = Net::HTTP::Post.new(uri_path)
|
||||
|
||||
body = {
|
||||
'name' => current_question.name,
|
||||
'title' => current_question.title,
|
||||
'identity' => current_question.identity,
|
||||
'email' => current_question.email,
|
||||
'phone' => current_question.phone,
|
||||
'tax' => current_question.tax,
|
||||
'content' => current_question.content
|
||||
}
|
||||
|
||||
status = ""
|
||||
req.set_form_data(body)
|
||||
req.add_field 'X-Auth-Token', '3kjlfksjDFJ'
|
||||
response = http.request(req)
|
||||
|
||||
if response.code == "200"
|
||||
status = "success"
|
||||
else
|
||||
status = "fail"
|
||||
end
|
||||
|
||||
return status
|
||||
end
|
||||
end
|
||||
@@ -6,7 +6,6 @@ class AskReply
|
||||
field :comment, type: String
|
||||
field :status, type: String
|
||||
field :send_email, type: Boolean, detault: false
|
||||
field :depts, :type => Array
|
||||
|
||||
belongs_to :ask_question
|
||||
end
|
||||
-62
@@ -1,45 +1,3 @@
|
||||
<script type="text/javascript">
|
||||
var local_host = "<%= request.host %>";
|
||||
|
||||
// var local_host = "<%= request.host_with_port %>"; // local test
|
||||
|
||||
if (local_host[0] == "g" && local_host[1] == "a") {
|
||||
local_host = "www." + local_host;
|
||||
}
|
||||
|
||||
function hide_current_host_name(localhost) {
|
||||
$('input[type=checkbox]').each(function() {
|
||||
if ($(this).val() == local_host) {
|
||||
$(this).addClass("hide");
|
||||
$(this).next().addClass("hide");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
|
||||
$('.dept_options').hide();
|
||||
|
||||
if ($("#ask_reply_status").val() == '轉介其他單位') {
|
||||
|
||||
hide_current_host_name(local_host);
|
||||
|
||||
$('.dept_options').show();
|
||||
}
|
||||
|
||||
$("#ask_reply_status").change(function() {
|
||||
|
||||
hide_current_host_name(local_host);
|
||||
|
||||
$('.dept_options').slideUp();
|
||||
if ($(this).find('option:selected').attr('value') == '轉介其他單位') {
|
||||
$('.dept_options').slideDown();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
<div id="ask_question_reply">
|
||||
<%= form_for @ask_reply, url: @url, method: @method do |f| %>
|
||||
<table class="table">
|
||||
@@ -74,26 +32,6 @@ $(document).ready(function() {
|
||||
['轉介其他單位', '轉介其他單位']
|
||||
] %></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="5" class="dept_options">
|
||||
<div class="checkbox">
|
||||
<!-- <%= check_box("school", "depts", {:multiple => true}, (request.host + ":3000"), nil) %><%= label_tag((request.host + ":3000"), "測試站 3000") %>
|
||||
<%= check_box("school", "depts", {:multiple => true}, (request.host + ":4000"), nil) %><%= label_tag((request.host + ":4000"), "測試站 4000") %> -->
|
||||
<%= check_box("ask_reply", "depts", {:multiple => true}, "www.ga.ntu.edu.tw", nil) %><%= label_tag("www.ga.ntu.edu.tw", "總務處") %>
|
||||
<%= check_box("ask_reply", "depts", {:multiple => true}, "sec.ga.ntu.edu.tw", nil) %><%= label_tag("sec.ga.ntu.edu.tw", "總務長室暨總務處秘書室") %>
|
||||
<%= check_box("ask_reply", "depts", {:multiple => true}, "doc.ga.ntu.edu.tw", nil) %><%= label_tag("doc.ga.ntu.edu.tw", "文書組") %>
|
||||
<%= check_box("ask_reply", "depts", {:multiple => true}, "general.ga.ntu.edu.tw", nil) %><%= label_tag("general.ga.ntu.edu.tw", "事務組") %>
|
||||
<%= check_box("ask_reply", "depts", {:multiple => true}, "property.ga.ntu.edu.tw", nil) %><%= label_tag("property.ga.ntu.edu.tw", "保管組") %>
|
||||
<%= check_box("ask_reply", "depts", {:multiple => true}, "construction.ga.ntu.edu.tw", nil) %><%= label_tag("construction.ga.ntu.edu.tw", "營繕組") %>
|
||||
<%= check_box("ask_reply", "depts", {:multiple => true}, "cashier.ga.ntu.edu.tw", nil) %><%= label_tag("cashier.ga.ntu.edu.tw", "出納組") %>
|
||||
<%= check_box("ask_reply", "depts", {:multiple => true}, "procurement.ga.ntu.edu.tw", nil) %><%= label_tag("procurement.ga.ntu.edu.tw", "採購組") %>
|
||||
<%= check_box("ask_reply", "depts", {:multiple => true}, "fss.ga.ntu.edu.tw", nil) %><%= label_tag("fss.ga.ntu.edu.tw", "經營管理組") %>
|
||||
<%= check_box("ask_reply", "depts", {:multiple => true}, "police.ga.ntu.edu.tw", nil) %><%= label_tag("police.ga.ntu.edu.tw", "駐警隊") %>
|
||||
<%= check_box("ask_reply", "depts", {:multiple => true}, "social.ga.ntu.edu.tw", nil) %><%= label_tag("social.ga.ntu.edu.tw", "社科院總務分處") %>
|
||||
<%= check_box("ask_reply", "depts", {:multiple => true}, "medicine.ga.ntu.edu.tw", nil) %><%= label_tag("medicine.ga.ntu.edu.tw", "醫學院總務分處") %>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="5">
|
||||
<%= f.label :send_email %><%= f.radio_button :send_email, 1, checked: @ask_reply.send_email? %><%= t('ask.yes') %>
|
||||
|
||||
-3
@@ -84,11 +84,8 @@ $(document).ready(function(){
|
||||
<%= f.text_area :content, rows: 8, class: 'input-xlarge' %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group">
|
||||
<%= f.label t('ask.validate_code'), class: 'control-label required' %>
|
||||
<div class="controls">
|
||||
<label><%= t('ask.validate_code_note') %></label>
|
||||
<%= gotcha_error %>
|
||||
<%= gotcha%>
|
||||
</div>
|
||||
|
||||
@@ -17,8 +17,6 @@ en:
|
||||
admin: Administrator
|
||||
new_question: New question
|
||||
pending: Pending
|
||||
validate_code: Verification code
|
||||
validate_code_note: Please answer the following verification questions.
|
||||
mongoid:
|
||||
attributes:
|
||||
ask_question:
|
||||
|
||||
@@ -22,8 +22,6 @@ zh_tw:
|
||||
admin: 管理者
|
||||
new_question: 新的發問
|
||||
pending: 待處理
|
||||
validate_code: 驗證碼
|
||||
validate_code_note: 請回答下列驗證問句。
|
||||
mongoid:
|
||||
attributes:
|
||||
ask_question:
|
||||
|
||||
@@ -15,8 +15,6 @@ Rails.application.routes.draw do
|
||||
resources :ask_categories
|
||||
resources :ask_acknowledgements
|
||||
resources :ask_admins
|
||||
|
||||
match "ask_requests/transferred_request" => "ask_requests#transferred_request", :as => 'transferred_request', :via => :post
|
||||
end
|
||||
|
||||
namespace :front_end do
|
||||
|
||||
Vendored
+1
-1
@@ -80,7 +80,7 @@
|
||||
<div class="o-members-pic"><%= show_avatar(member) %></div>
|
||||
<ul class="o-members-info">
|
||||
<li><b class="o-members-label"><%= t("users.name")%></b><%= link_to member.name, panel_member_front_end_member_list_path(member.id), {:class => "o-members-link"} %></li>
|
||||
<% @job_title = @member_lists.get_member_list_attribute_value(member.id,@job_title_field.id).get_value_by_locale(I18n.locale)
|
||||
<% @job_title = @member_lists.get_member_list_attribute_value(member.id,@job_title_field.id).get_value_by_locale(I18n.locale) rescue ""
|
||||
if @job_title != 'NoData' and !@job_title.blank?
|
||||
%>
|
||||
<li><b class="o-members-label"><%= @job_title_field.title %></b><%= @job_title %></li>
|
||||
|
||||
-29
@@ -4,7 +4,6 @@
|
||||
|
||||
<% @job_title_field = @member_lists.get_member_list_attribute_field("staff","job_title") %>
|
||||
<% @job_business_field = @member_lists.get_member_list_attribute_field("staff","business") %>
|
||||
<% @job_agent_field = @member_lists.get_member_list_attribute_field("staff","agent") %>
|
||||
|
||||
<% if @item.frontend_style == 'Single' or @item.frontend_style == 'Two' %>
|
||||
|
||||
@@ -59,15 +58,6 @@
|
||||
<%= @job_business %>
|
||||
</li>
|
||||
<% end %>
|
||||
|
||||
<% @job_agent = @member_lists.get_member_list_attribute_value(member.id,@job_agent_field.id).get_value_by_locale(I18n.locale)
|
||||
if @job_agent != 'NoData' and !@job_agent.blank?
|
||||
%>
|
||||
<li><b class="o-members-label">
|
||||
<%= @job_agent_field.title %></b>
|
||||
<%= @job_agent %>
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
@@ -120,15 +110,6 @@
|
||||
<%= @job_business %>
|
||||
</li>
|
||||
<% end %>
|
||||
|
||||
<% @job_agent = @member_lists.get_member_list_attribute_value(member.id,@job_agent_field.id).get_value_by_locale(I18n.locale)
|
||||
if @job_agent != 'NoData' and !@job_agent.blank?
|
||||
%>
|
||||
<li><b class="o-members-label">
|
||||
<%= @job_agent_field.title %></b>
|
||||
<%= @job_agent %>
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
@@ -172,7 +153,6 @@
|
||||
<td><span class="name"><%= t("users.name")%></span></td>
|
||||
<td><span class="tel"><%= t("users.office_tel")%></span></td>
|
||||
<td><span class="business"><%= @job_business_field.title %></span></td>
|
||||
<td><span class="agent"><%= @job_agent_field.title %></span></td>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
@@ -201,15 +181,6 @@
|
||||
<% end %>
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<span class="agent">
|
||||
<% @job_agent = @member_lists.get_member_list_attribute_value(member.id,@job_agent_field.id).get_value_by_locale(I18n.locale)
|
||||
if @job_agent != 'NoData' and !@job_agent.blank?
|
||||
%>
|
||||
<%= @job_agent %>
|
||||
<% end %>
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<% end %>
|
||||
|
||||
-1
@@ -48,7 +48,6 @@ class Panel::PageContent::BackEnd::PageContextsController < OrbitBackendControll
|
||||
# GET /page_contexts/1/edit
|
||||
def edit
|
||||
@page_context = PageContext.find(params[:id])
|
||||
@users = @page_context.get_users
|
||||
end
|
||||
|
||||
# POST /page_contexts
|
||||
|
||||
@@ -15,7 +15,6 @@ class PageContext
|
||||
field :update_user_id
|
||||
field :version, :type => Integer , :default => 0
|
||||
field :view_count, :type => Integer, :default => 0
|
||||
field :user_ids
|
||||
|
||||
field :archived, :type => Boolean, :default => false
|
||||
# field :current, :type => Boolean, :default => false
|
||||
@@ -37,9 +36,5 @@ class PageContext
|
||||
def title
|
||||
self.page.title
|
||||
end
|
||||
|
||||
def get_users
|
||||
User.find(self.user_ids) rescue []
|
||||
end
|
||||
|
||||
end
|
||||
-27
@@ -4,33 +4,6 @@
|
||||
|
||||
<fieldset>
|
||||
<div class="input-area">
|
||||
|
||||
<!-- Module Tabs -->
|
||||
<div class="nav-name"><strong><%= t(:module) %></strong></div>
|
||||
<ul class="nav nav-pills module-nav">
|
||||
<li class="active">
|
||||
<a href="#basic" data-toggle="tab"><%= t(:basic) %></a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<!-- Module -->
|
||||
<div class="tab-content module-area">
|
||||
|
||||
<!-- Basic Module -->
|
||||
<div class="tab-pane fade in active" id="basic">
|
||||
|
||||
<!-- Promoter -->
|
||||
<div class="control-group">
|
||||
<label class="control-label muted"><%= t(:promoter) %></label>
|
||||
<div class="controls">
|
||||
<%= render partial: 'admin/member_selects/selection_box', locals: {field: 'page_context[user_ids][]', users: @users} %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- Language Tabs -->
|
||||
<div class="nav-name"><strong><%= t(:language) %></strong></div>
|
||||
<ul class="nav nav-pills language-nav">
|
||||
|
||||
+1
-1
@@ -8,4 +8,4 @@
|
||||
|
||||
<div class="page_content"><%= @page_context.context.html_safe rescue '' %></div>
|
||||
|
||||
<%= render partial: 'admin/member_selects/promoter_front', locals: {users: @page_context.get_users} %>
|
||||
|
||||
vendor/built_in_modules/personal_book/app/assets/javascripts/personal_book/desktop/personal_books.js
Vendored
+10
@@ -92,6 +92,16 @@ orbitDesktop.prototype.initializePersonalBook = function(target,url,cache){ // t
|
||||
width: $(".overview").width() - 20
|
||||
});
|
||||
}
|
||||
|
||||
this.initializePersonalBook.syncComplete = function(){
|
||||
o.notify("Sync Complete","success");
|
||||
o.sub_menu_item($("div[content-type=menu] a").eq(0));
|
||||
}
|
||||
|
||||
this.initializePersonalBook.syncComplete = function(){
|
||||
o.notify("Sync Complete","success");
|
||||
o.sub_menu_item($("div[content-type=menu] a").eq(0));
|
||||
}
|
||||
|
||||
this.initializePersonalBook.coAuthorformCallback = function(data){
|
||||
if(data.success){
|
||||
|
||||
+2
-2
@@ -7,7 +7,7 @@ class Panel::PersonalBook::Desktop::PersonalBooksController < ApplicationControl
|
||||
page ||= 1
|
||||
|
||||
@per_column = 5
|
||||
|
||||
@userid = current_user.id
|
||||
case @view_by
|
||||
when "abstract"
|
||||
@per_column = 1
|
||||
@@ -70,4 +70,4 @@ class Panel::PersonalBook::Desktop::PersonalBooksController < ApplicationControl
|
||||
def books_window
|
||||
render :layout => false
|
||||
end
|
||||
end
|
||||
end
|
||||
+4
-11
@@ -84,20 +84,13 @@ class WritingBook
|
||||
|
||||
def create_link
|
||||
title = []
|
||||
title << self.authors if self.authors.present?
|
||||
|
||||
# title << self.paper_title if self.paper_title.present?
|
||||
# title = ["#{self.extracted_chapters}"] if self.extracted_chapters.present?
|
||||
title << self.paper_title if self.paper_title.present?
|
||||
title << self.book_title if self.book_title.present?
|
||||
title << self.publisher if self.publisher.present?
|
||||
title << self.isbn if self.isbn.present?
|
||||
|
||||
if !self.publish_date.nil?
|
||||
pd = self.publish_date.strftime("%Y-%m-%d").split('-')
|
||||
title << pd[0]+"/"+pd[1]
|
||||
end
|
||||
|
||||
title << self.pages if self.pages.present?
|
||||
# title << "(#{self.journal_level_types.collect{|x| x.title}.join(', ')})"
|
||||
title.join(', ')
|
||||
title.join(', ')
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
+4
-1
@@ -57,6 +57,9 @@
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="hh1 hp sdm">
|
||||
<div class="sdm_t hh1"><a href="<%= admin_import_data_sync_book_data_path(:user_id=>@userid) %>" class="icons-cycle" ajax-remote="get" response-type="json" callback-method="syncComplete" > Sync Books</a></div>
|
||||
</div>
|
||||
<div class="hh1 hp sdm">
|
||||
<div class="sdm_t hh1"><span class="icon-question-sign"></span></div>
|
||||
</div>
|
||||
@@ -67,4 +70,4 @@
|
||||
<%= publication_record w, @view_by%>
|
||||
<% end %>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
Vendored
Regular → Executable
+3
-2
@@ -75,8 +75,9 @@
|
||||
<% if is_admin? %>
|
||||
<div class="bottomnav clearfix">
|
||||
<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('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.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('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 class="pagination pagination-centered">
|
||||
<%= paginate @writing_books, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil} %>
|
||||
|
||||
+4
-1
@@ -42,7 +42,10 @@ orbitDesktop.prototype.initializeConferencePapers = function(target,url,cache){
|
||||
this.initializeConferencePapers.cancelpaper = function(){
|
||||
o.highlight_sub_menu_item(0);
|
||||
}
|
||||
|
||||
this.initializeConferencePapers.syncComplete = function(){
|
||||
o.notify("Sync Complete","success");
|
||||
o.sub_menu_item($("div[content-type=menu] a").eq(0));
|
||||
}
|
||||
var uploadFiles = function(){
|
||||
$('#add_plugin_file a.add').click(function(){
|
||||
var new_id = $(this).prev().attr('value');
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@ class Panel::PersonalConference::Desktop::ConferencePagesController < Applicatio
|
||||
@writing_conferences = WritingConference.where(create_user_id: current_user.id)
|
||||
page = params[:page]
|
||||
page ||= 1
|
||||
|
||||
@userid = current_user.id
|
||||
if @view_by.nil?
|
||||
@writing_conferences = @writing_conferences.asc(:paper_title)
|
||||
else
|
||||
|
||||
Vendored
Regular → Executable
+3
-11
@@ -84,21 +84,13 @@ class WritingConference
|
||||
end
|
||||
|
||||
def create_link
|
||||
title = []
|
||||
|
||||
title << self.authors if self.authors.present?
|
||||
|
||||
if !self.publication_date.nil?
|
||||
pd = self.publication_date.strftime("%Y-%m-%d").split('-')
|
||||
title << pd[0]
|
||||
end
|
||||
|
||||
title << self.paper_title if self.paper_title.present?
|
||||
title = ["#{self.paper_title}"]
|
||||
title << self.conference_title if self.conference_title.present?
|
||||
title << self.sponsor if self.sponsor.present?
|
||||
title << self.location if self.location.present?
|
||||
title << "#{period_start_date}-#{period_end_date}" if (self.period_start_date.present? && self.period_end_date.present?)
|
||||
# title << "(#{self.conference_paper_types.collect{|x| x.title}.join(', ')})"
|
||||
title.join(', ')
|
||||
title.join(', ')
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
+4
@@ -58,6 +58,10 @@
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="hh1 hp sdm">
|
||||
<div class="sdm_t hh1"><a href="<%= admin_import_data_sync_conference_data_path(:user_id => @userid) %>" class="icons-cycle" ajax-remote="get" response-type="json" callback-method="syncComplete" > Sync Conference Papers</a></div>
|
||||
</div>
|
||||
<div class="hh1 hp sdm">
|
||||
<div class="sdm_t hh1"><span class="icon-question-sign"></span></div>
|
||||
</div>
|
||||
|
||||
Vendored
Regular → Executable
+3
-2
@@ -75,8 +75,9 @@
|
||||
<% if is_admin? %>
|
||||
<div class="bottomnav clearfix">
|
||||
<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('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.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('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 class="pagination pagination-centered">
|
||||
<%= paginate @writing_conferences, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil} %>
|
||||
|
||||
+5
@@ -33,6 +33,7 @@ orbitDesktop.prototype.initializeJournalPapers = function(target,url,cache){ //
|
||||
}
|
||||
this.initializeJournalPapers.paperDelete = function(data,dom){
|
||||
var parent = dom.parent().parent().parent();
|
||||
// console.log(parent);
|
||||
if(data.success){
|
||||
parent.hide("slide",function(){parent.remove();});
|
||||
o.notify(data.msg,"success");
|
||||
@@ -42,6 +43,10 @@ orbitDesktop.prototype.initializeJournalPapers = function(target,url,cache){ //
|
||||
this.initializeJournalPapers.cancelpaper = function(){
|
||||
o.highlight_sub_menu_item(0);
|
||||
}
|
||||
this.initializeJournalPapers.syncComplete = function(){
|
||||
o.notify("Sync Complete","success");
|
||||
o.sub_menu_item($("div[content-type=menu] a").eq(0));
|
||||
}
|
||||
|
||||
var uploadFiles = function(){
|
||||
$('#add_plugin_file a.add').click(function(){
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@ class Panel::PersonalJournal::Desktop::JournalPagesController < ApplicationContr
|
||||
page ||= 1
|
||||
|
||||
@per_column = 5
|
||||
|
||||
@userid = current_user.id
|
||||
case @view_by
|
||||
when "abstract"
|
||||
@per_column = 1
|
||||
|
||||
+1
@@ -81,6 +81,7 @@ module Panel::PersonalJournal::Desktop::JournalPagesHelper
|
||||
"ajax-remote" => "delete",
|
||||
"confirm-message" => t("sure?"),
|
||||
"callback-method" => "paperDelete",
|
||||
"response-type" => "json",
|
||||
"delete-item" => "true",
|
||||
:class => "journal_paper_delete admbg2 admtxt",
|
||||
:href => panel_personal_journal_desktop_journal_page_path(publication))
|
||||
|
||||
Vendored
Regular → Executable
+5
-13
@@ -90,21 +90,13 @@ class WritingJournal
|
||||
end
|
||||
|
||||
def create_link
|
||||
title = []
|
||||
|
||||
title << self.authors if self.authors.present?
|
||||
|
||||
if !self.publication_date.nil?
|
||||
pd = self.publication_date.strftime("%Y-%m-%d").split('-')
|
||||
title << pd[0]
|
||||
end
|
||||
title << self.paper_title if self.paper_title.present?
|
||||
title = ["#{self.paper_title}"]
|
||||
title << self.journal_title if self.journal_title.present?
|
||||
title << self.vol_no if (self.vol_no.present? && self.vol_no != "0")
|
||||
title << self.issue_no if (self.issue_no.present? && self.issue_no != "0")
|
||||
title << "pp"+self.form_to_start+"-"+self.form_to_end if (self.form_to_start.present? && self.form_to_start != "0")
|
||||
title << ( !self.journal_level_types.blank? ? "(#{self.journal_level_types.collect{|x| x.title}.join(', ')})" : nil)
|
||||
title.join(', ')
|
||||
title << "Volume No: "+self.vol_no if (self.vol_no.present? && self.vol_no != "0")
|
||||
title << "From Page: "+self.form_to_start if (self.form_to_start.present? && self.form_to_start != "0")
|
||||
title << "To Page: "+self.form_to_end if (self.form_to_end.present? && self.form_to_end != "0")
|
||||
title.join(', ')
|
||||
end
|
||||
|
||||
def new_writing_journal_files=(var)
|
||||
|
||||
+4
-1
@@ -58,6 +58,9 @@
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="hh1 hp sdm">
|
||||
<div class="sdm_t hh1"><a href="<%= admin_import_data_sync_journal_paper_data_path(:user_id => @userid) %>" class="icons-cycle" ajax-remote="get" response-type="json" callback-method="syncComplete" > Sync Journal Papers</a></div>
|
||||
</div>
|
||||
<div class="hh1 hp sdm">
|
||||
<div class="sdm_t hh1"><span class="icon-question-sign"></span></div>
|
||||
</div>
|
||||
@@ -68,4 +71,4 @@
|
||||
<%= publication_record w, @view_by%>
|
||||
<% end %>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
Vendored
Regular → Executable
+3
-2
@@ -80,8 +80,9 @@
|
||||
<% if is_admin? %>
|
||||
<div class="bottomnav clearfix">
|
||||
<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('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.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('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 class="pagination pagination-centered">
|
||||
<%= paginate @writing_journals, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil} %>
|
||||
|
||||
+26
-170
@@ -1,8 +1,6 @@
|
||||
class Panel::Survey::BackEnd::SurveysController < OrbitBackendController
|
||||
require 'csv'
|
||||
|
||||
require 'csv'
|
||||
require 'iconv'
|
||||
require 'roo'
|
||||
class Panel::Survey::BackEnd::SurveysController < OrbitBackendController
|
||||
|
||||
include AdminHelper
|
||||
include OrbitControllerLib::DivisionForDisable
|
||||
@@ -107,145 +105,6 @@ class Panel::Survey::BackEnd::SurveysController < OrbitBackendController
|
||||
redirect_to panel_survey_back_end_surveys_url(:direction => params[:direction], :sort => params[:sort], :sort_options => params[:sort_options])
|
||||
end
|
||||
|
||||
def set_import
|
||||
@survey = ::Survey.find(params[:id])
|
||||
end
|
||||
|
||||
def import
|
||||
@survey = ::Survey.find(params[:id])
|
||||
@chart_data, @survey_questions, @survey_answers = @survey.generate_chart_data
|
||||
@file = params[:file]
|
||||
|
||||
case File.extname(@file.original_filename)
|
||||
when ".csv" then @spreadsheet = Roo::CSV.new(@file.path, csv_options: {encoding: Encoding::Big5})
|
||||
# when ".xls" then Excel.new(file.path, nil, :ignore)
|
||||
# when ".xlsx" then Excelx.new(file.path, nil, :ignore)
|
||||
else raise "Unknown file type: #{file.original_filename}"
|
||||
end
|
||||
|
||||
# Modify titles if changed
|
||||
titles = @spreadsheet.row(1) - [" "]
|
||||
@survey_questions.each_with_index do |question, index|
|
||||
question.update_attributes(title: titles[index])
|
||||
end
|
||||
|
||||
@survey_answers.destroy
|
||||
|
||||
# Start and end of speadsheet
|
||||
@end_row = @spreadsheet.count
|
||||
|
||||
@max_row_start = 0
|
||||
@survey_questions.each do |question|
|
||||
case question.type
|
||||
when ::SurveyQuestion::Radio, ::SurveyQuestion::Select, ::SurveyQuestion::Check
|
||||
if question.survey_question_options.count > @max_row_start
|
||||
@max_row_start = question.survey_question_options.count
|
||||
end
|
||||
when ::SurveyQuestion::Radiogroup
|
||||
if question.survey_question_options.count * question.survey_question_radiogroups.count > @max_row_start
|
||||
@max_row_start = question.survey_question_options.count * question.survey_question_radiogroups.count
|
||||
end
|
||||
end
|
||||
end
|
||||
@start_row = @max_row_start + 2
|
||||
|
||||
# Modify multiline options if changed
|
||||
(@start_row..@end_row).each do |row|
|
||||
@answer_model = @survey.survey_answers.new
|
||||
@survey_questions.each_with_index do |question, index|
|
||||
case question.type
|
||||
|
||||
when ::SurveyQuestion::Oneline, ::SurveyQuestion::Multiline
|
||||
@answer_model[question.id.to_s] = @spreadsheet.row(row)[index * 2]
|
||||
|
||||
when ::SurveyQuestion::Radio, ::SurveyQuestion::Select
|
||||
if !@spreadsheet.row(row)[index*2].nil? && @spreadsheet.row(row)[index*2] != " "
|
||||
@answer_model[question.id.to_s] = @spreadsheet.row(row)[index*2]
|
||||
end
|
||||
|
||||
when ::SurveyQuestion::Check
|
||||
if !@spreadsheet.row(row)[index*2].nil? && @spreadsheet.row(row)[index*2] != " "
|
||||
@answer_model[question.id.to_s] = @spreadsheet.row(row)[index*2].split("\"").select.each_with_index { |str, i| i.odd? }
|
||||
end
|
||||
|
||||
when ::SurveyQuestion::Radiogroup
|
||||
radio_groups = []
|
||||
spreadsheet_radiogroups_lines =
|
||||
question.survey_question_options.count * question.survey_question_radiogroups.count + 2
|
||||
|
||||
# Grab each radiogroups line for update
|
||||
(2...spreadsheet_radiogroups_lines).each do |line|
|
||||
radio_groups << @spreadsheet.row(line)[index * 2]
|
||||
end
|
||||
|
||||
# Grab answers info
|
||||
answers = []
|
||||
if not @spreadsheet.row(row)[index * 2].blank?
|
||||
answers << eval(@spreadsheet.row(row)[index * 2])
|
||||
end
|
||||
|
||||
# Save the answers
|
||||
answers.each do |answer|
|
||||
options = Hash[question.survey_question_options.collect { |o| [ o.id.to_s, o.name ] }]
|
||||
# @answer_model = @survey.survey_answers.new
|
||||
@answer_model[question.id.to_s] = {}
|
||||
|
||||
answer.each do |option, value|
|
||||
@answer_model[question.id.to_s][options.invert[option]] = value
|
||||
end
|
||||
|
||||
# @answer_model.save!
|
||||
end
|
||||
|
||||
# Parse the needed info in the array
|
||||
radio_titles = []
|
||||
radio_options = []
|
||||
radio_groups.each do |group|
|
||||
option_with_radio = group.split(' - ')
|
||||
radio_titles << option_with_radio[0]
|
||||
radio_options << option_with_radio[1]
|
||||
end
|
||||
|
||||
# Update the spreadsheet info to the DB
|
||||
groups_of_options = []
|
||||
groups_of_radios = []
|
||||
radio_titles.each_slice(question.survey_question_radiogroups.count) do |options|
|
||||
groups_of_options << options
|
||||
end
|
||||
|
||||
radio_options.each_slice(question.survey_question_radiogroups.count) do |options|
|
||||
groups_of_radios << options
|
||||
end
|
||||
|
||||
# Update option names
|
||||
question.survey_question_options.each_with_index do |option, index|
|
||||
groups_of_options[index].each do |modified_option|
|
||||
if option.name_translations["zh_tw"] != modified_option
|
||||
option.update_attributes(name: modified_option)
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# Update radio names
|
||||
question.survey_question_radiogroups.each_with_index do |option, index|
|
||||
groups_of_radios.each do |radios|
|
||||
if radios[index] != option.name_translations["zh_tw"]
|
||||
option.update_attributes(name: radios[index])
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@answer_model.save!
|
||||
|
||||
end #end row
|
||||
|
||||
redirect_to panel_survey_back_end_surveys_url, :notice => :success
|
||||
end
|
||||
|
||||
def export
|
||||
@survey = ::Survey.find(params[:id])
|
||||
@chart_data, @survey_questions, @survey_answers = @survey.generate_chart_data
|
||||
@@ -340,7 +199,6 @@ class Panel::Survey::BackEnd::SurveysController < OrbitBackendController
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@survey.survey_questions.all.each do |question|
|
||||
new_question = @new_survey.survey_questions.new
|
||||
question.attributes.each do |key, value|
|
||||
@@ -352,32 +210,30 @@ class Panel::Survey::BackEnd::SurveysController < OrbitBackendController
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# question.survey_question_options.all.each do |option|
|
||||
# new_option = new_question.survey_question_options.new
|
||||
# option.attributes.each do |key, value|
|
||||
# unless ['_id', 'survey_question_id'].include? key
|
||||
# if option.respond_to?(key + '_translations')
|
||||
# new_option.name_translations = value
|
||||
# else
|
||||
# new_option.write_attribute(key, value)
|
||||
# end
|
||||
# end
|
||||
# end
|
||||
# end
|
||||
|
||||
# question.survey_question_radiogroups.all.each do |radiogroup|
|
||||
# new_radiogroup = new_question.survey_question_radiogroups.new
|
||||
# radiogroup.attributes.each do |key, value|
|
||||
# unless ['_id', 'survey_question_id'].include? key
|
||||
# if radiogroup.respond_to?(key + '_translations')
|
||||
# new_option.name_translations = value
|
||||
# else
|
||||
# new_radiogroup.write_attribute(key, value)
|
||||
# end
|
||||
# end
|
||||
# end
|
||||
# end
|
||||
question.survey_question_options.all.each do |option|
|
||||
new_option = new_question.survey_question_options.new
|
||||
option.attributes.each do |key, value|
|
||||
unless ['_id', 'survey_question_id'].include? key
|
||||
if option.respond_to?(key + '_translations')
|
||||
new_option.send(key + '_translations=', value)
|
||||
else
|
||||
new_option.write_attribute(key, value)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
question.survey_question_radiogroups.all.each do |radiogroup|
|
||||
new_radiogroup = new_question.survey_question_radiogroups.new
|
||||
radiogroup.attributes.each do |key, value|
|
||||
unless ['_id', 'survey_question_id'].include? key
|
||||
if radiogroup.respond_to?(key + '_translations')
|
||||
new_radiogroup.send(key + '_translations=', value)
|
||||
else
|
||||
new_radiogroup.write_attribute(key, value)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@new_survey.create_user_id = current_user.id
|
||||
|
||||
+1
-2
@@ -13,8 +13,7 @@
|
||||
<li><%= link_to t('survey.duplicate_it'), duplicate_it_panel_survey_back_end_survey_path(survey, :page => params[:page]) %></li>
|
||||
<li><%= link_to t('survey.jump'), jump_panel_survey_back_end_survey_path(survey, :page => params[:page]) %></li>
|
||||
<li><%= link_to t('survey.set_answers'), set_answers_panel_survey_back_end_survey_path(survey, :page => params[:page]) %></li>
|
||||
<li><%= link_to t('survey.export_csv'), export_panel_survey_back_end_survey_path(survey, :format => :csv) %></li>
|
||||
<li><%= link_to t('survey.import_csv'), set_import_panel_survey_back_end_survey_path(survey) %></li>
|
||||
<li><%= link_to t('survey.export_csv'), export_panel_survey_back_end_survey_path(survey, :format => :csv), :target => '_blank' %></li>
|
||||
<li><%= link_to t('survey.chart'), result_panel_survey_front_end_survey_path(survey, :force_chart => true, :standalone => true), :target => '_blank' %></li>
|
||||
<li><%= link_to t(:delete_), panel_survey_back_end_survey_path(survey), :confirm => t('sure?'), :method => :delete, :remote => true %></li>
|
||||
<% end -%>
|
||||
|
||||
-18
@@ -1,18 +0,0 @@
|
||||
<%= form_tag import_panel_survey_back_end_survey_path(@survey), multipart: true do %>
|
||||
<table class="table main-list">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="span2"><%= t('survey.title') %></th>
|
||||
<th class="span2"></th>
|
||||
<th class="span2"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="tbody_surveys" class="sort-holder">
|
||||
<tr>
|
||||
<td><%= @survey.title %></td>
|
||||
<td><%= file_field_tag :file %></td>
|
||||
<td><%= submit_tag t("survey.import_csv"), :class => 'btn' %></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<% end %>
|
||||
@@ -24,7 +24,6 @@ en:
|
||||
answer_error: Unsuccessful answer
|
||||
|
||||
answers_list: Answers List
|
||||
import_csv: Import CSV
|
||||
export_csv: Export CSV
|
||||
chart: Chart
|
||||
set_answers: Set Answers
|
||||
|
||||
Loaded 100 of 178 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user