Compare commits

..

16 Commits

Author SHA1 Message Date
Spen e89656cdd1 ntu coph sso server 2014-01-13 17:10:40 +08:00
manson666 077e98a6d4 Fix Sync auto rescue timeout and filter user email for ntu only 2014-01-13 15:57:49 +08:00
manson666 52f8e9f1b8 Fix Sync timeout issue 2014-01-13 15:57:49 +08:00
manson666 aca97f85d8 Fix sync auto not deleting old data 2014-01-13 15:57:49 +08:00
manson666 1a79c2fed3 Fix sync auto 2014-01-13 15:57:49 +08:00
Manson Wang 947f2765c6 Import teacher data 2014-01-13 15:57:49 +08:00
Spen 8fb3b408b4 ntu coph sso 2014-01-13 15:57:49 +08:00
Spen 0dff9163bc ntu coph member plugin data sync 2014-01-13 15:57:49 +08:00
Harry Bomrah b533b3f6ea sync button added for desktop and also fixed a little bug.. 2014-01-13 15:57:49 +08:00
Manson Wang 2a83c6b51d Desktop sync button.. not finished 2014-01-13 15:57:49 +08:00
Harry Bomrah 774cc5d392 added sync for journal paper books and conference.. and also disabled the icons
Conflicts:
	app/assets/javascripts/desktop/orbitdesktop.js
	app/controllers/admin/import_data_controller.rb

Conflicts:
	vendor/built_in_modules/personal_book/app/controllers/panel/personal_book/desktop/personal_books_controller.rb
	vendor/built_in_modules/personal_book/app/views/panel/personal_book/desktop/personal_books/index.html.erb
	vendor/built_in_modules/personal_conference/app/assets/javascripts/personal_conference/desktop/conference_pages.js
	vendor/built_in_modules/personal_conference/app/views/panel/personal_conference/desktop/conference_pages/index.html.erb
	vendor/built_in_modules/personal_journal/app/assets/javascripts/personal_journal/desktop/journal_pages.js
	vendor/built_in_modules/personal_journal/app/controllers/panel/personal_journal/desktop/journal_pages_controller.rb
	vendor/built_in_modules/personal_journal/app/views/panel/personal_journal/desktop/journal_pages/index.html.erb
2014-01-13 15:57:49 +08:00
Manson Wang 671257992a Added sync button in personal plugin back_end
Conflicts:
	config/locales/en.yml
	config/locales/zh_tw.yml
	vendor/built_in_modules/personal_book/app/views/panel/personal_book/plugin/_profile.html.erb
	vendor/built_in_modules/personal_conference/app/views/panel/personal_conference/plugin/_profile.html.erb
	vendor/built_in_modules/personal_journal/app/views/panel/personal_journal/plugin/_profile.html.erb
2014-01-13 15:57:49 +08:00
saurabhbhatia 280523fbeb Updated Import data without page method 2014-01-13 15:57:49 +08:00
saurabhbhatia 07964de968 both manual and automatic methods working
Conflicts:
	config/routes.rb
2014-01-13 15:57:49 +08:00
saurabhbhatia d226b34de5 Added Automatic Synchronize
Conflicts:
	Gemfile
	app/controllers/admin/import_data_controller.rb
	vendor/built_in_modules/personal_conference/app/models/writing_conference.rb

Conflicts:
	Gemfile
	app/controllers/admin/import_data_controller.rb
2014-01-13 15:57:48 +08:00
saurabhbhatia 43da2eca79 Import Data, Sync Data
Conflicts:
	config/mongoid.yml
	vendor/built_in_modules/personal_book/app/models/writing_book.rb
	vendor/built_in_modules/personal_conference/app/models/writing_conference.rb
	vendor/built_in_modules/personal_journal/app/models/writing_journal.rb
2014-01-13 15:57:48 +08:00
87 changed files with 1342 additions and 1025 deletions

1
Gemfile Normal file → Executable file
View File

@ -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"

View File

@ -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){
}
});
}

View File

@ -1,6 +1,4 @@
$(function() {
var ListCheckData = {},
ListCheck = function(element) {
var ListCheck = function(element) {
this.element = $(element);
this.element.data('exists', true);
if(this.element.context.parentNode.tagName == "TD") {
@ -11,72 +9,49 @@ $(function() {
this.elementWrap.addClass('listCheckHead');
}
this.element.before('<i class="icon-check-empty" />');
};
};
$.fn.listCheck = function () {
$(this).each(function() {
var $this = $(this),
$el = $this.find('input[type="checkbox"]');
$el.each(function (i) {
$.fn.listCheck = function (callback) {
this.each(function (i) {
if(!$(this).data('exists')) {
new ListCheck(this);
};
});
$this.on(clickEvent, $el, function(e) {
if($(e.target).prop('checked')) {
$(e.target).siblings('i').addClass('icon-check').removeClass('icon-check-empty').closest('tr').addClass('checkHit');
this.on(clickEvent, function(e) {
if($(this).prop('checked')) {
$(this).siblings('i').addClass('icon-check').removeClass('icon-check-empty').closest('tr').addClass('checkHit');
} else {
$(e.target).siblings('i').addClass('icon-check-empty').removeClass('icon-check').closest('tr').removeClass('checkHit');
$(this).siblings('i').addClass('icon-check-empty').removeClass('icon-check').closest('tr').removeClass('checkHit');
};
if($(e.target).closest('th').hasClass('listCheckHead')) {
$this.find('.listCheck input[type="checkbox"]').prop('checked', $(e.target).prop('checked'));
if($(e.target).prop('checked')) {
$this.find('.listCheck i').addClass('icon-check').removeClass('icon-check-empty').closest('tr').addClass('checkHit');
if ($(this).closest('.listCheckHead').length) {
$('.listCheck .list-check').prop('checked', $(this).prop('checked'));
if($(this).prop('checked')) {
$('.listCheck i').addClass('icon-check').removeClass('icon-check-empty').closest('tr').addClass('checkHit');
} else {
$this.find('.listCheck i').addClass('icon-check-empty').removeClass('icon-check').closest('tr').removeClass('checkHit');
$('.listCheck i').addClass('icon-check-empty').removeClass('icon-check').closest('tr').removeClass('checkHit');
}
};
var _isCheck = $this.find('tbody').find($el).filter(':checked').length,
_defaultLength = $this.find('tbody').find($el).length;
var _isCheck = $('tbody .list-check').filter(':checked').length,
_defaultLength = $('tbody .list-check').length;
if(_isCheck > 0 && _isCheck < _defaultLength) {
$this.find('.listCheckHead i').removeClass('icon-check-empty icon-check').addClass('icon-minus');
$('.listCheckHead i').removeClass('icon-check-empty icon-check').addClass('icon-minus');
} else if(!_isCheck) {
$this.find('.listCheckHead i').removeClass('icon-minus icon-check').addClass('icon-check-empty');
$('.listCheckHead i').removeClass('icon-minus icon-check').addClass('icon-check-empty');
} else {
$this.find('.listCheckHead i').removeClass('icon-check-empty icon-minus').addClass('icon-check');
$('.listCheckHead i').removeClass('icon-check-empty icon-minus').addClass('icon-check');
}
_isCheck ? $this.find('.list-active-btn').removeClass('disabled').data('actionable', true) : $this.find('.list-active-btn').addClass('disabled').data('actionable', false);
_isCheck ? $('.list-active-btn').removeClass('disabled').data('actionable', true) : $('.list-active-btn').addClass('disabled').data('actionable', false);
});
$this.on(clickEvent, '.list-active-btn', function(e) {
if(!$(this).hasClass('disabled')) {
ListCheckData.url = $(this).attr('rel');
ListCheckData.name = $this.find('tbody').find('input[type="checkbox"]').attr('name');
ListCheckData.action = $(this).data('checkAction');
ListCheckData.values = [];
ListCheckData.element = $this
$this.find('tbody').find('input[type="checkbox"]').each(function (i) {
this.checked && ListCheckData.values.push("ids[]=" + this.value);
});
console.log(ListCheckData.values.join("&"));
$('#dialog').modal('show');
return false;
}
});
});
clearCheck($(this));
};
function clearCheck(element) {
element.find('input[type="checkbox"]').each(function() {
$(this).prop('checked', false).siblings('i').addClass('icon-check-empty').removeClass('icon-check').closest('tr').removeClass('checkHit');
});
element.find('.list-active-btn').addClass('disabled');
};
function actionSuccess(e) {
ListCheckData.element.find('tbody').find('input[type="checkbox"]').each(function() {
};
function clearCheck() {
$('.list-check').each(function() {
$(this).prop('checked', false);
})
}
function actionSuccess(e) {
$("tbody .list-check").each(function() {
switch(e) {
case 'list-be-hide':
$(this).filter(':checked').closest('tr').addClass('checkHide');
@ -92,17 +67,32 @@ $(function() {
};
$('.list-check').siblings('i').removeAttr('class').addClass('icon-check-empty').closest('tr').removeClass('checkHit');
});
clearCheck(ListCheckData.element);
}
clearCheck();
}
$(function() {
var $t = null,
_data = null;
clearCheck();
$('.list-check').listCheck();
$('.list-active-btn').data('actionable', false).on(clickEvent, function(e) {
$t = $(this)
_data = $(this).data()
_data.actionable ? $('#dialog').modal('show') : "";
e.preventDefault();
});
$('.delete-item').on(clickEvent, function() {
if(ListCheckData.url.indexOf("?") > -1) {
$.ajax(ListCheckData.url + "&" + ListCheckData.values.join("&")).done(function() {
actionSuccess(ListCheckData.action);
var _v = [];
$("tbody .list-check").each(function() {
this.checked && _v.push("ids[]="+this.value)
});
var _t = $t.attr("rel");
if(_t.indexOf("?") > -1) {
$.ajax(_t + "&" + _v.join("&")).done(function() {
actionSuccess(_data.checkAction)
});
} else {
$.ajax(ListCheckData.url + "?" + ListCheckData.values.join("&")).done(function() {
actionSuccess(ListCheckData.action);
$.ajax(_t + "?" + _v.join("&")).done(function() {
actionSuccess(_data.checkAction)
});
}
$('#dialog').modal('hide');

View File

@ -2,19 +2,12 @@ $(function() {
$(".post_preview").click(function(){
$("#main-wrap").after("<span id='show_preview'></span>");
var preview_url = $(this).attr('url');
$("form.previewable").ajaxSubmit({
beforeSubmit: function(a,f,o){
o.dataType = 'script';
o.url = preview_url;
o.type = 'post';
},success: function(msg) {
$('#show_preview .modal').modal()
$.post($(this).attr('url'), $(".previewable").serialize() ,function(data){
$('#show_preview .modal').modal();
$('#show_preview .modal').height(function() {
return $(window).height() * 0.7;
});
}});
},'script');
});
$(".preview_trigger").click(function(){
$("#main-wrap").after("<span id='show_preview'></span>");

View File

@ -4,8 +4,8 @@
vertical-align: middle;
padding: 0 0 0 10px!important;
}
.listCheckHead input[type="checkbox"],
.listCheck input[type="checkbox"] {
.listCheckHead .list-check,
.listCheck .list-check {
position: absolute;
margin: -12px 0 0 -1px;
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";

View File

@ -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

View File

@ -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

View File

@ -36,26 +36,6 @@ class Admin::PagesController < Admin::ItemsController
@item.page_contexts.build(:create_user_id => current_user.id, :update_user_id => current_user.id )
end
if @item.update_attributes(params[:page])
unless params[:page]['frontend_field'].nil?
frontend_class = []
frontend_field_name = []
frontend_sat_to_link = []
params[:page]['frontend_field'].each do |field|
frontend_class << field['class']
frontend_field_name << field['field_name']
frontend_sat_to_link << field['sat_to_link']
end
@item['frontend_class'] = frontend_class
@item['frontend_field_name'] = frontend_field_name
@item['frontend_sat_to_link'] = frontend_sat_to_link
end
@item['tag'] = params[:page]['tag'] == nil ? [] : params[:page]['tag']
@item.save
render 'admin/items/reload_items'
else
@error = error_messages_for(@item)

View File

@ -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
@ -72,10 +71,7 @@ class Admin::SitesController < OrbitBackendController
end
def system_info
@disk_free = `df -h /`.gsub("\n","<br/>").html_safe
@nginx_version = %x[/opt/nginx/sbin/nginx -v 2>&1].gsub("\n","<br/> ").html_safe
@mongo_version = `mongod --version`.split("\n")[0].html_safe
@linux_version = `lsb_release -d`.split(":")[1].html_safe
end
def search_engine
@ -111,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)
@ -166,8 +125,4 @@ class Admin::SitesController < OrbitBackendController
@site ||= Site.first
end
def git_branch
@branch = %x(git rev-parse --abbrev-ref HEAD).gsub("\n","")
end
end

View File

@ -1,95 +1,22 @@
require 'net/http'
require 'uri'
require 'fileutils'
require 'zip/zip'
class Admin::TemplateStoreController < OrbitBackendController
@@store_domain = STORE_CONFIG[:store_settings]["url"]
@@store_domain = "http://store.tp.rulingcom.com"
def index
@store = @@store_domain
@design_ids = Design.all.map{|d| d.template_store_id}
@templates = JSON.parse(get_templates)
end
def show
@store = @@store_domain
@design_ids = Design.all.map{|d| d.template_store_id}
@template = JSON.parse(get_template(params[:id])) rescue nil
end
def download_theme
url = @@store_domain + params["url"]
url_base = url.split('/')[2]
url_path = '/'+url.split('/')[3..-1].join('/')
Net::HTTP.start(url_base) do |http|
open("public/#{params['slug']}.zip", "wb") do |file|
http.get(url_path) do |str|
file.write(str)
end
end
end
upload_package("#{params['slug']}.zip", params["id"])
File.delete("public/#{params['slug']}.zip")
render :json => {"success"=>true,"url"=>@@store_domain + params["url"]}.to_json
render :json => {"success"=>true}.to_json
end
protected
def upload_package(package_name,template_store_id)
temp_file = Tempfile.new("temp_file")
original_file = File.open("#{Rails.root}/public/#{package_name}")
temp_file.write(original_file.read.force_encoding('UTF-8'))
temp_file.rewind
filename = File.basename(original_file,".zip")
unzip_design(temp_file, filename, template_store_id)
temp_file.close
end
def unzip_design(file, zip_name, template_store_id)
Zip::ZipFile.open(file) { |zip_file|
design = Design.new.from_json(zip_file.read("#{zip_name}/info.json"))
design.template_store_id = template_store_id
Dir.mktmpdir('f_path') { |dir|
themes_entries = []
javascripts_entries = []
images_entries = []
zip_file.entries.each do |entry|
case (path = entry.to_s)
when /\A(#{zip_name})\/(default\.css)\z/ #for default css
design.build_css_default(:file => get_temp_file(zip_file, dir, entry))
when /\A(#{zip_name})\/(reset\.css)\z/ #for reset css
design.build_css_reset(:file => get_temp_file(zip_file, dir, entry))
when /\A(#{zip_name})\/(layout\.html)\z/ #for layout html
design.build_layout(:file => get_temp_file(zip_file, dir, entry))
when /\A(#{zip_name})\/(themes)\/.*(\.css)\z/ #for themes css
themes_entries << entry
when /\A(#{zip_name})\/(javascripts)\/.*(\.js)\z/ #for js
javascripts_entries << entry
when /\A(#{zip_name})\/(images)\/.*((\.jpg)|(\.png)|(\.gif))\z/ #for img
images_entries << entry
end
end
['themes', 'javascripts', 'images'].each do |type|
eval("#{type}_entries").each do |entry|
eval("design.#{type}").build(:file => get_temp_file(zip_file, dir, entry))
end
end
}
design.save
}
end
def get_temp_file(zip_file, dir, entry)
filename = File.basename(entry.to_s)
temp_file = File.new(dir + '/' + filename, 'w+')
temp_file.write (zip_file.read entry ).force_encoding('UTF-8')
temp_file
end
def get_template(id)
uri = URI.parse("#{@@store_domain}/api/templates/#{id}")
http = Net::HTTP.new(uri.host, uri.port)
@ -106,4 +33,6 @@ class Admin::TemplateStoreController < OrbitBackendController
response.body
end
end

View File

@ -1,7 +1,6 @@
class OrbitBackendController < ApplicationController
include OrbitCategory::Categorizing
include OrbitCoreLib::Authorization
include OrbitCoreLib::PermissionUtility
include OrbitTag::Tagging
include AdminHelper
include ApplicationHelper

View File

@ -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

View File

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

View File

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

View File

@ -193,8 +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='#{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

View File

@ -12,13 +12,13 @@ module OrbitBackendHelper
def show_form_status_field(object)
#by_object = (!object.is_expired? and object.is_pending?)
by_user = ((object.category.user_is_authorized_by_title?(current_user,"category_approval_#{@module_app.key}") rescue nil) or is_manager? or is_admin?)
by_user = ((object.category.authed_users("approval_#{@module_app.key}").include?(current_user) rescue nil) or is_manager? or is_admin? or is_sub_manager?)
by_user
end
def show_approval_link(object)
by_object = (!object.is_expired? and object.is_pending?)
by_user = ((object.category.user_is_authorized_by_title?(current_user,"category_approval_#{@module_app.key}") rescue nil) or is_manager? or is_admin?)
by_user = ((object.category.authed_users("approval_#{@module_app.key}").include?(current_user) rescue nil) or is_manager? or is_admin? or is_sub_manager?)
by_object and by_user
end
@ -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)
@ -306,13 +292,13 @@ module OrbitBackendHelper
content_tag :li, link_to(t(quick[:translation] || :authorization_), eval("#{quick[:link]}"), class: "preview_trigger #{quick[:class]}")
end
when 'edit'
if authorization && approvable || is_manager?
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]}"))
if authorization && approvable
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"))
@ -320,20 +306,10 @@ module OrbitBackendHelper
if show_reject_reason(object)
content_tag :li, link_to(t(quick[:translation] || :rejected_reason) + ' ' + truncate(object.not_checked_reason, :length => 10), '#', rel: "tooltip", 'data-original-title' => (wrap_string_with(object.not_checked_reason, :line_width => 24)), class: "reject_info #{quick[:class]}")
end
else
if quick[:define_link]
if quick[:condition_option]
if eval("#{quick[:condition_option]}")
content_tag :li, link_to(t(quick[:translation]), eval("#{quick[:define_link]}"), class: quick[:class])
end
else
content_tag :li, link_to(t(quick[:translation]), eval("#{quick[:define_link]}"), class: quick[:class])
end
else
content_tag :li, link_to(t(quick[:translation]), eval("#{quick[:link]}('#{object.id}')"), class: quick[:class])
end
end
end
def get_sorted_objects(objects, field)
if field
@ -443,10 +419,6 @@ module OrbitBackendHelper
res << "<li class='active'>#{t(:search_engine)}</li>"
when 'site_info'
res << "<li class='active'>#{t(:site_info)}</li>"
when 'update_manager'
res << "<li class='active'>#{t(:update_manager)}</li>"
when 'system_info'
res << "<li class='active'>#{t("site.system_preference")}</li>"
end
when 'items'
res << "<li class='active'>#{t(:structure)}</li>"

View File

@ -2,30 +2,28 @@ class CronMail < ActionMailer::Base
default :from => "orbit_test@rulingcom.com"
def get_settings
@site = Site.first
# @@smtp_settings = {
# :address => "smtp.gmail.com",
# :port => '587',
# :domain => "smtp.gmail.com",
# :authentication => "plain",
# :user_name => "redmine@rulingcom.com",
# :password => "rulingredmine",
# :tls => true,
# :enable_starttls_auto => true
# }
@@smtp_settings = {
:enable_starttls_auto => @site['site_settings']['enable_starttls_auto'],
:address => @site['site_settings']['address'],
:port => @site['site_settings']['port'],
:domain => @site['site_settings']['domain'],
:authentication => @site['site_settings']['authentication'],
:user_name => @site['site_settings']['user_name'],
:password => @site['site_settings']['password']
:address => @site['mail_settings']['address'],
:port => @site['mail_settings']['port'],
:domain => @site['mail_settings']['domain'],
:authentication => @site['mail_settings']['authentication'],
:user_name => @site['mail_settings']['user_name'],
:password => @site['mail_settings']['password'],
:tls => @site['mail_settings']['tls'],
:enable_starttls_auto => @site['mail_settings']['enable_starttls_auto']
}
end
def self.smtp_settings
@site = Site.first
@@smtp_settings = {
:enable_starttls_auto => @site['site_settings']['enable_starttls_auto'],
:address => @site['site_settings']['address'],
:port => @site['site_settings']['port'],
:domain => @site['site_settings']['domain'],
:authentication => @site['site_settings']['authentication'],
:user_name => @site['site_settings']['user_name'],
:password => @site['site_settings']['password']
}
end
def time_check(msg)
get_settings

View File

@ -7,7 +7,6 @@ class Design
field :intro, :type => String
field :title, :type => String
field :version, :type => String
field :template_store_id, :type => String
mount_uploader :zip_file, AssetUploader

View File

@ -194,7 +194,6 @@ class ModuleApp
# authorization
def update_auth_approval_users
user_ids = self.auth_approvals.inject([]) do |users, auth|
auth = auth.class.find(auth.id)
users += auth.authorized_users.map{|user| user.id}
end
self.update_attribute(:auth_approval_users, user_ids.uniq)

View File

@ -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.

View File

@ -0,0 +1 @@
<p>Successfully Imported Announcement Data!</p>

View File

@ -0,0 +1 @@
<p>Successfully Book Data!</p>

View File

@ -0,0 +1 @@
<p>Successfully Conference Data!</p>

View File

@ -0,0 +1 @@
<p>Successfully Journal Paper Data!</p>

View File

@ -0,0 +1 @@
<p>Successfully Imported Page Data!</p>

View File

@ -0,0 +1 @@
<p>Successfully Imported Teacher Data!</p>

View File

@ -0,0 +1 @@
<p>Book Data Synced Successfully!</p>

View File

@ -0,0 +1 @@
<p>Conference Paper Data Synced Successfully!</p>

View File

@ -0,0 +1 @@
<p>Journal Paper Data Synced Successfully!</p>

View File

@ -20,10 +20,8 @@
<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="<%= t("site.system_preference") %>"><%= link_to admin_site_system_info_path(@site), :class => active_for_action('sites', 'system_info') do %><span><i class="icons-info-2"></i></span><%end%></li>
</ul>
<!-- <li title="System Info"><a href="/orbit_4.0.1/admin/system_info/index.shtml?sidebarNavList=8&amp;subNavBlockList=0"><span><i class="icons-info-2"></i></span></a></li>
--> </ul>
</div>
<div class="sub-nav-arrow"></div>
</div>

View File

@ -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>

View File

@ -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 Unions 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? Dont 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>

View File

@ -20,10 +20,8 @@
<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="<%= t("site.system_preference") %>"><%= link_to admin_site_system_info_path(@site), :class => active_for_action('sites', 'system_info') do %><span><i class="icons-info-2"></i></span><%end%></li>
</ul>
<!-- <li title="System Info"><a href="/orbit_4.0.1/admin/system_info/index.shtml?sidebarNavList=8&amp;subNavBlockList=0"><span><i class="icons-info-2"></i></span></a></li>
--> </ul>
</div>
<div class="sub-nav-arrow"></div>
</div>

View File

@ -65,7 +65,7 @@
<div class="control-group">
<label class="control-label muted"><%= t 'mail.domain' %></label>
<div class="controls">
<%= f.text_field :domain, :value => (@site['site_settings']['domain'] rescue nil), :class=>"input-large", :placeholder=>"Domain" %>
<%= f.text_field :port, :value => (@site['site_settings']['port'] rescue nil), :class=>"input-large", :placeholder=>"Domain" %>
</div>
</div>
<div class="control-group">
@ -83,7 +83,7 @@
<div class="control-group">
<label class="control-label muted"><%= t 'mail.password' %></label>
<div class="controls">
<%= f.password_field :password, :value => (@site['site_settings']['password'] rescue nil), :class=>"input-large", :placeholder=>"Password" %>
<%= f.text_field :password, :value => (@site['site_settings']['password'] rescue nil), :class=>"input-large", :placeholder=>"Password" %>
</div>
</div>
<div class="control-group">

View File

@ -0,0 +1,47 @@
<h1><%= I18n.t("site.system_preference") %></h1>
<ul class="nav nav-tabs" id="myTab">
<li class="active"><a href="#summary" data-toggle="tab"><%= I18n.t("site.system_preference_.tab_summary") %></a></li>
<li><a href="#commits" data-toggle="tab"><%= I18n.t("site.system_preference_.tab_commits") %></a></li>
<li><a href="#backups" data-toggle="tab"><%= I18n.t("site.system_preference_.tab_backups") %></a></li>
<li><a href="#resque_logs" data-toggle="tab"><%= I18n.t("site.system_preference_.tab_logs") %></a></li>
</ul>
<div class="tab-content">
<div class="tab-pane active in" id="summary">
<h2><%= I18n.t("site.system_preference_.summary.disk_space") %>:</h2>
<%= content_tag :p,@site.disk_space.gsub(/\n/,"<br />").html_safe if @site.disk_space %>
<h2><%= I18n.t("site.system_preference_.summary.code_update_at") %>: </h2>
<% @site.system_package_info.each do |index,value| %>
<h2><%= index.titleize %> <%= I18n.t("site.system_preference_.summary.version") %>:</h2>
<%= content_tag :p,value %>
<% end %>
<h2><%= I18n.t("site.system_preference_.summary.weekness_report") %>:<%= '' %></h2>
</div>
<div class="tab-pane" id="commits">
<% if @git_commit_list_file %>
<% @git_commit_list_file.lines do |line|%>
<%= line %><br/>
<% end%>
<% else %>
<div class="well"><%= I18n.t("site.system_preference_.summary.no_data") %></div>
<% end %>
</div>
<div class="tab-pane" id="backups">
<%if @db_backup_list_file %>
<% @db_backup_list_file.lines do |line|%>
<%=line %><br/>
<% end %>
<% else %>
<div class="well"><%= I18n.t("site.system_preference_.summary.no_data") %></div>
<% end %>
</div>
<div class="tab-pane" id="resque_logs">
<%if @db_backup_list_file %>
<% @resque_logs_file.lines do |line|%>
<%=line %><br/>
<% end if @resque_logs_file%>
<%else %>
<div class="well"><%= I18n.t("site.system_preference_.summary.no_data") %></div>
<% end %>
</div>
</div>

View File

@ -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') %>")

View File

@ -1,126 +1,5 @@
<%= stylesheet_link_tag "lib/wrap-nav" %>
<%= stylesheet_link_tag "lib/main-list" %>
<%= stylesheet_link_tag "lib/main-forms" %>
<%= stylesheet_link_tag "lib/fileupload.css" %>
<%= stylesheet_link_tag "lib/togglebox.css" %>
<%= stylesheet_link_tag "lib/list-check.css" %>
<%= javascript_include_tag "lib/site_set" %>
<%= javascript_include_tag "lib/list-check" %>
<% 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 %>
<form class="form-horizontal main-forms">
<fieldset>
<div class="input-area">
<div class="nav-name"><strong><%= t("preferences.classification") %></strong></div>
<ul class="nav nav-pills language-nav">
<li class="active"><a href="#overview" data-toggle="tab"><%= t("site.system_preference_.tab_summary") %></a></li>
<li><a href="#mail-cron-logs" data-toggle="tab"><%= t("site.system_preference_.tab_send_reminders_log") %></a></li>
</ul>
<div class="tab-content">
<!-- Overview -->
<div id="overview" class="tab-pane fade in active">
<h3 class="muted"><%= t("site.system_preference_.summary.disk_space") %></h3>
<blockquote>
<p>
<%= @disk_free %>
</p>
</blockquote>
<h3 class="muted">Nginx <%= t("site.system_preference_.summary.version") %></h3>
<blockquote>
<p>
<%= @nginx_version %>
</p>
</blockquote>
</span>
<h3 class="muted">MongoDB <%= t("site.system_preference_.summary.version") %></h3>
<blockquote>
<p>
<%= @mongo_version %>
</p>
</blockquote>
<h3 class="muted">Linux <%= t("site.system_preference_.summary.version") %></h3>
<blockquote>
<p>
<%= @linux_version %>
</p>
</blockquote>
</span>
</div>
<!-- Email Log -->
<div id="mail-cron-logs" class="tab-pane fade">
<ul class="nav nav-pills">
<li class="active">
<a href="#send-log" data-toggle="tab"><%= t(:email_log) %></a>
</li>
<li>
<a href="#waiting-sent" data-toggle="tab"><%= t(:email_queue) %></a>
</li>
</ul>
<div class="tab-content">
<div class="tab-pane fade in active list-check" id="send-log">
<p class="">
<a href="#" class="btn list-active-btn disabled" data-check-action="list-be-remove" rel="/panel/announcement/back_end/bulletins/delete"><i class="icons-trash"></i></a>
</p>
<table class="table main-list table-striped">
<thead>
<tr>
<th>
<input type="checkbox" name="to_delete[]" value="b" />
</th>
<th><%= t(:sent_date) %></th>
<th><%= t(:subject) %></th>
<th><%= t(:mail_to) %></th>
<th><%= t(:mail_user) %></th>
<th><%= t(:mail_from_app) %></th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
<div class="tab-pane fade in list-check" id="waiting-sent">
<p class="">
<a href="#" class="btn list-active-btn disabled" data-check-action="list-be-remove" rel="/panel/announcement/back_end/bulletins/delete"><i class="icons-trash"></i></a>
</p>
<table class="table main-list table-striped">
<thead>
<tr>
<th>
<input type="checkbox" name="to_delete[]" value="b" />
</th>
<th><%= t(:sent_date) %></th>
<th><%= t(:subject) %></th>
<th><%= t(:mail_to) %></th>
<th><%= t(:mail_from_app) %></th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</fieldset>
</form>
<div id="dialog" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="Delete item" aria-hidden="true">
<div class="modal-header">
<a class="close" data-dismiss="modal">×</a>
<h3><%= t(:sure?) %></h3>
</div>
<div class="modal-body">
<span class="text-warning text-center"><%= t(:this_action_can_not_be_restore) %></span>
</div>
<div class="modal-footer">
<button class="btn" data-dismiss="modal" aria-hidden="true"><%= t(:close) %></button>
<button class="delete-item btn btn-danger"><%= t(:delete_) %></button>
</div>
</div>
system_info.html.erb

View File

@ -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">&nbsp;&nbsp;&nbsp;&nbsp;<%= 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">&nbsp;&nbsp;&nbsp;&nbsp;<%= 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>

View File

@ -60,11 +60,7 @@
<span class="item-price">Free</span>
</span>
</a>
<% if @design_ids.include?(template["_id"]["$oid"]) %>
<%= link_to "Installed", "javascript:void(0);", "data-url" => template['template']['template']['url'], :class=> 'btn btn-success download-link', "disabled"=>"disabled", "data-name"=>template['title'], "data-slug"=>template["_slugs"][0], "data-id"=>template["_id"]["$oid"] %>
<% else %>
<%= link_to "Download", "javascript:void(0);", "data-url" => template['template']['template']['url'], :class=> 'btn btn-primary download-link', "data-name"=>template['title'], "data-slug"=>template["_slugs"][0], "data-id"=>template["_id"]["$oid"] %>
<% end %>
<%= link_to "Download", "javascript:void(0);", "data-url" => template['template']['template']['url'], :class=> 'btn btn-primary download-link' %>
</li>
<% end %>
@ -75,20 +71,20 @@
<script type="text/javascript">
(function(){
$("a.download-link").on(clickEvent,function(){
if($(this).attr("disabled") == "disabled")return false;
var el = $(this);
var el = $(this),
downloadurl = $(this).data("url");
el.removeClass("btn-primary").addClass("btn-info").text("Installing").attr('disabled',"disabled");
$.ajax({
url : "<%= admin_template_store_download_theme_path %>",
data : el.data(),
data : {"url" : downloadurl},
dataType : "json",
type : "post"
}).done(function(data){
type : "post",
success : function(data){
if(data.success){
el.removeClass('btn-info').addClass('btn-success').text("Installed");
}
}).fail(function(){
el.removeClass('btn-info').addClass('btn-danger').text("Error, please try again.").removeAttr('disabled');
}
})
})
})()

View File

@ -8,11 +8,7 @@
<div id="item-info">
<%= image_tag "#{@store}#{@template['preview']['preview']['thumb']['url']}", :class => "item-thumb" %>
<h2 class="item-name"><%= @template['title'] %></h2>
<% if @design_ids.include?(@template["_id"]["$oid"]) %>
<%= link_to "Installed", "javascript:void(0);", "data-url" => @template['template']['template']['url'], :class=> 'btn btn-success download-link', "disabled"=>"disabled", "data-name"=>@template['title'], "data-slug"=>@template["_slugs"][0], "data-id"=>@template["_id"]["$oid"] %>
<% else %>
<%= link_to "Download", "javascript:void(0);", "data-url" => @template['template']['template']['url'], :class=> 'btn btn-primary download-link', "data-name"=>@template['title'], "data-slug"=>@template["_slugs"][0], "data-id"=>@template["_id"]["$oid"] %>
<% end %>
<%= link_to "Download", "javascript:void(0);", "data-url" => @template['template']['template']['url'], :class=> 'btn btn-primary download-link' %>
<ul class="item-extra-info">
<li><span class="title">views</span><span class="count"><%= Random.new.rand(10..100) %></span></li>
<!-- <li><span class="title">color</span><span class="color-tag green"></span></li> -->
@ -68,22 +64,21 @@
<script type="text/javascript">
(function(){
$("a.download-link").on(clickEvent,function(){
if($(this).attr("disabled") == "disabled")return false;
var el = $(this);
var el = $(this),
downloadurl = $(this).data("url");
el.removeClass("btn-primary").addClass("btn-info").text("Installing").attr('disabled',"disabled");
$.ajax({
url : "<%= admin_template_store_download_theme_path %>",
data : el.data(),
data : {"url" : downloadurl},
dataType : "json",
type : "post"
}).done(function(data){
type : "post",
success : function(data){
if(data.success){
el.removeClass('btn-info').addClass('btn-success').text("Installed");
}
}).fail(function(){
el.removeClass('btn-info').addClass('btn-danger').text("Error, please try again.").removeAttr('disabled');
}
})
})
})()
</script>

View File

@ -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>

View File

@ -66,7 +66,7 @@
<div id="module-content">
<div class="nano">
<div class="content list-check">
<div class="content">
<%=render :partial => @right_partial %>
</div>
</div>

View File

@ -1,59 +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"] %>
<%= 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="other-sign-in">
<a class="btn btn-primary" type="submit">Other Sign In</a>
<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://cophlogin.ntu.edu.tw/saml_login&wctx=<%= @request_hosts[0] %>">使用計中帳號登入</a>
<p>or</p>
</div> -->
</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| %>
<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>
<div class="pull-right">
<%= link_to content_tag(:small, t(:forgot_password)), new_user_password_path %>
<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>
<br/>
<!-- <div class="register">
<button class="btn btn-inverse" type="submit">Register</button>
</div> -->
<% end %>
</div>
</div>
</section>

View File

@ -56,6 +56,11 @@
</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://cophlogin.ntu.edu.tw/saml_login&wctx=<%= @request_hosts[0] %>">使用計中帳號登入</a>
<p>or</p>
</div>
<div class="input-prepend">
<span class="add-on">
<i class="icon-user"></i>

View File

@ -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>

View File

@ -41,7 +41,7 @@
function InsertPreviewImage(){
if($("iframe").contents().find('.news_image').length){
$("iframe").contents().find('.news_image').append("<a href='' target='_blank'><img src='"+preview_img+"' width='320' /></a>");
$("iframe").contents().find('.news_image').append("<a href='' target='_blank'><img src='"+preview_img+"' width='320' height='240' /></a>");
}else{
setTimeout(InsertPreviewImage,1000);
}

View File

@ -63,5 +63,15 @@ Orbit::Application.configure do
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.action_mailer.smtp_settings = {
:enable_starttls_auto => true,
:openssl_verify_mode => 'none',
:address => 'smtp.sendgrid.net',
:port => '587',
:domain => "new.tp.rulingcom.com",
:authentication => "plain",
:user_name => "rulingcom",
:password => "bjo4xjp6"
}
end

View File

@ -1,11 +0,0 @@
if defined?(PhusionPassenger)
PhusionPassenger.on_event(:starting_worker_process) do |forked|
if forked
Resque.redis.client.disconnect
Resque.redis = Redis.new(:host => 'localhost', :port => 6379)
Resque.redis.namespace = Site.first.resque_namespace rescue APP_CONFIG['orbit']
else
# We're in conservative spawning mode. We don't need to do anything.
end
end
end

View File

@ -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

View File

@ -80,3 +80,27 @@ default_widget_style:
- style3
- style4
- style5
sites:
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"

30
config/locales/en.yml Normal file → Executable file
View File

@ -86,6 +86,7 @@ en:
user_list: Unit
approval_: Approval
approval_setting: Approval setting
archive: Archive
asset: Asset
attributes: Attributes
auth:
@ -192,8 +193,6 @@ en:
link: Editing link
page: Editing page
email: Email
email_log: Email Log
email_queue: Waiting to be sent
enable: Enable
enabled_for: Enabled for
end: End
@ -225,13 +224,11 @@ en:
groups: Groups
help: Help
hidden: Hidden
is_hidden: Hidden
hide: Hide
hits: Hits
homepage: Homepage
horizontal: Horizontal
hot: Hot
is_hot: Hot
image: Image
images: Images
info: Information
@ -265,6 +262,7 @@ en:
text_area: Text Area
text_field: Text Field
locale: Locale
location: Location
login: Login
logout: Logout
mail:
@ -278,9 +276,6 @@ en:
setting: Mail settings
tls: TLS
user_name: User Name
mail_from_app: Mail From App
mail_to: Mail To
mail_user: Mail User
manager: Manager
markup: Markup
markup_options: Markup options
@ -347,13 +342,11 @@ en:
public_r_tag: System Widget
text: Text Area
passed: Approved
is_checked: Approved
password: Password
password_change: Change password
password_confirmation: Password confirmation
password_current: Current password
pending: Pending
is_pending: Pending
personal_plugins:
author : "Author"
edit_brief_intro : "Edit Brief Intro."
@ -361,6 +354,7 @@ en:
complete_list : "Complete List"
frontend_page : "Frontend Page"
phone_number: "Phone Number"
sync_data: "Synchronize"
picture: Picture
placeholder: Field Hint
plugins: Plugins
@ -396,7 +390,6 @@ en:
register: Register
registered: Registered
rejected: Rejected
is_rejected: Rejected
rejected_reason: 'Reason:'
rejected_reason_empty: "Approval rejected, no referencable information"
related_links: Related Links
@ -434,7 +427,6 @@ en:
index: Index
summary: Summary
thumbnail: Thumbnail
sent_date: Sent Date
settings: Site Setting
site:
backend_openness_on: Backend Openness
@ -465,7 +457,6 @@ en:
tab_commits: Commits
tab_summary: Summary
tab_logs: Logs
tab_send_reminders_log: Send reminders log
summary:
code_update_at: Code Update histroy
disk_space: Disk Free
@ -495,7 +486,6 @@ en:
sub_role: Sub Role
sub_role_field: Sub Role Field
sub_role_info: " Sub Role Info."
subject: Subject
subtitle: Subtitle
submit: Submit
submit_approval: Submit approval
@ -519,12 +509,10 @@ en:
text: Text
theme: Theme
themes: Themes
this_action_can_not_be_restore: This action can not be restored, are you sure you want to delete?
title: Title
to_search: Set as Search Key
to_show: Display in frontend
top: Top
is_top: Top
total_visitors: Total Visitors
traffic: Traffic
type: Field Type
@ -545,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

27
config/locales/zh_tw.yml Normal file → Executable file
View File

@ -86,6 +86,7 @@ zh_tw:
user_list: 使用者列表
approval_: 審核
approval_setting: 審核設定
archive: 檔案室
asset: 資產
attributes: 屬性
auth:
@ -192,8 +193,6 @@ zh_tw:
link: 編輯連結
page: 編輯頁面
email: 電子郵件
email_log: 寄送紀錄
email_queue: 待寄送郵件
enable: 開啟
enabled_for: 啟用
end: 結束
@ -265,6 +264,7 @@ zh_tw:
text_area: 文字輸入方塊
text_field: 文字輸入框
locale: 位置
location: 地標
login: 登入
logout: 登出
mail:
@ -278,9 +278,6 @@ zh_tw:
setting: 電子郵件設定
tls: 電子郵件TLS
user_name: 電子郵件帳號
mail_from_app: 寄送模組
mail_to: 收件者
mail_user: 寄件者
manager: 管理者
markup: 輸入模式
markup_options: 標註選項
@ -348,13 +345,11 @@ zh_tw:
public_r_tag: 系統模塊
text: 文字區域
passed: 通過審核
is_checked: 通過審核
password: 密碼
password_change: 更改密碼
password_confirmation: 確認密碼
password_current: 目前的密碼
pending: 待審核
is_pending: 待審核
personal_plugins:
author : "著作人"
edit_brief_intro : "編輯摘要"
@ -362,6 +357,7 @@ zh_tw:
complete_list : "完整列表"
frontend_page : "前台呈現"
phone_number: "電話"
sync_data: "同步資料"
picture: 圖片
placeholder: 欄位提示文字
plugins: 學術資訊
@ -396,7 +392,6 @@ zh_tw:
register: 註冊
registered: 已註冊
rejected: 拒絕
is_rejected: 拒絕
rejected_reason: 拒絕原因:'
rejected_reason_empty: "拒絕核准, 沒有參考資訊"
related_links: 相關連結
@ -434,7 +429,6 @@ zh_tw:
index: 檢索
summary: 摘要
thumbnail: 縮圖
sent_date: 寄送日期
settings: 基本設定
site:
frontend_closed: 前台關閉?
@ -465,7 +459,6 @@ zh_tw:
tab_commits: 程式版本
tab_summary: 總覽
tab_logs: 排程工作日誌
tab_send_reminders_log: 寄送提醒紀錄
summary:
code_update_at: 程式更新紀錄
disk_space: 硬碟空間
@ -495,7 +488,6 @@ zh_tw:
sub_role: 子身份
sub_role_field: 子身份欄位
sub_role_info: 子身份資料
subject: 主題
subtitle: 副標題
submit: 送出
submit_approval: 送出已核准
@ -519,7 +511,6 @@ zh_tw:
text: 內文
theme: 套用頁面樣式
themes: 主題
this_action_can_not_be_restore: 刪除後將無法還原,您確定要刪除嗎?
title: 標題
to_search: 加入搜尋條件
to_show: 是否顯示於前台
@ -545,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: 使用狀態

6
config/mongoid.yml Normal file → Executable file
View File

@ -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

View File

@ -8,6 +8,13 @@ Orbit::Application.routes.draw do
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'
end
match "saml_login" => 'saml_logins#index'
mount Resque::Server, :at => "/admin/resque"
mount Rack::GridFS::Endpoint.new(:db => Mongoid.database,:lookup=>:path), :at => "gridfs"
@ -212,13 +219,21 @@ 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
post 'add_to_default'
@ -262,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

20
config/schedule.rb Normal file
View File

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

View File

@ -1,2 +0,0 @@
store_settings:
url: "http://store.tp.rulingcom.com"

View File

@ -234,7 +234,7 @@ module OrbitCoreLib
when :sub_manager
@open ||= check_sub_manager
when :approver
@open ||= check_approver
@open ||= check_sub_manager
when :user
@open ||= true
when :visitor

View File

@ -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

View File

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

BIN
orbitdefault.zip Executable file

Binary file not shown.

View File

@ -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: 類型

View File

@ -10,7 +10,6 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController
end
def preview
params['bulletin']['image'] = nil
bulletin = Bulletin.new params
@preview_obj = bulletin.to_preview
@preview_obj.save

View File

@ -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>

View File

@ -93,6 +93,16 @@ orbitDesktop.prototype.initializePersonalBook = function(target,url,cache){ // t
});
}
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){
o.notify(data.msg,"success");

View File

@ -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

13
vendor/built_in_modules/personal_book/app/models/writing_book.rb vendored Normal file → Executable file
View File

@ -84,18 +84,11 @@ 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(', ')
end

View File

@ -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>

View File

@ -45,7 +45,7 @@
<thead>
<tr>
<% if is_admin? %>
<th><input type="checkbox" /></th>
<th><input type="checkbox" class="list-check" /></th>
<% end -%>
<th class="span1"><%= t('personal_book.year') %></th>
<th><%= t('personal_book.book_title') %></th>
@ -75,6 +75,7 @@
<% if is_admin? %>
<div class="bottomnav clearfix">
<div class="action pull-right">
<%= 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>

View File

@ -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');

View File

@ -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

View File

@ -84,17 +84,9 @@ 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(', ')})"

View File

@ -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>

View File

@ -45,7 +45,7 @@
<thead>
<tr>
<% if is_admin? %>
<th><input type="checkbox" /></th>
<th><input type="checkbox" class="list-check" /></th>
<% end -%>
<th class="span1"><%= t('personal_conference.year') %></th>
<th><%= t('module_name.personal_conference') %></th>
@ -75,6 +75,7 @@
<% if is_admin? %>
<div class="bottomnav clearfix">
<div class="action pull-right">
<%= 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>

View File

@ -45,7 +45,7 @@
<thead>
<tr>
<% if is_admin? %>
<th><input type="checkbox" /></th>
<th><input type="checkbox" class="list-check" /></th>
<% end -%>
<th class="span2"><%= t('date_') %></th>
<th><%= t('personal_diploma.school_name') %></th>

View File

@ -45,7 +45,7 @@
<thead>
<tr>
<% if is_admin? %>
<th><input type="checkbox" /></th>
<th><input type="checkbox" class="list-check" /></th>
<% end -%>
<th class="span2"><%= t('date_') %></th>
<th><%= t('personal_experience.organizationt_title') %></th>

View File

@ -45,7 +45,7 @@
<thead>
<tr>
<% if is_admin? %>
<th><input type="checkbox" /></th>
<th><input type="checkbox" class="list-check" /></th>
<% end -%>
<th class="span1"><%= t('personal_honor.year') %></th>
<th><%= t('personal_honor.award_name') %></th>

View File

@ -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(){

View File

@ -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

View File

@ -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))

View File

@ -90,20 +90,12 @@ 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 << "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

View File

@ -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>

View File

@ -44,7 +44,7 @@
<thead>
<tr>
<% if is_admin? %>
<th><input type="checkbox" /></th>
<th><input type="checkbox" class="list-check" /></th>
<% end -%>
<th class="span1"><%= t('personal_journal.year') %></th>
<th><%= t('module_name.personal_journal') %></th>
@ -80,6 +80,7 @@
<% if is_admin? %>
<div class="bottomnav clearfix">
<div class="action pull-right">
<%= 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>

View File

@ -45,7 +45,7 @@
<thead>
<tr>
<% if is_admin? %>
<th><input type="checkbox" /></th>
<th><input type="checkbox" class="list-check" /></th>
<% end -%>
<th class="span1"><%= t('personal_lab.year') %></th>
<th><%= t('personal_lab.lab_title') %></th>

View File

@ -45,7 +45,7 @@
<thead>
<tr>
<% if is_admin? %>
<th><input type="checkbox" /></th>
<th><input type="checkbox" class="list-check" /></th>
<% end -%>
<th class="span2"><%= t('personal_patent.publication_date') %></th>
<th><%= t('personal_patent.patent_title') %></th>

View File

@ -45,7 +45,7 @@
<thead>
<tr>
<% if is_admin? %>
<th><input type="checkbox" /></th>
<th><input type="checkbox" class="list-check" /></th>
<% end -%>
<th class="span2"><%= t('personal_project.period') %></th>
<th><%= t('personal_project.project_title') %></th>

View File

@ -45,7 +45,7 @@
<thead>
<tr>
<% if is_admin? %>
<th><input type="checkbox" /></th>
<th><input type="checkbox" class="list-check" /></th>
<% end -%>
<th class="span2"><%= t('personal_research.publication_date') %></th>
<th><%= t('personal_research.research_title') %></th>

View File

@ -199,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|
@ -211,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