Archived
Compare commits
11
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f0f6e809af | ||
|
|
d19223c873 | ||
|
|
77c00ac72f | ||
|
|
92f1f44e4b | ||
|
|
332658d394 | ||
|
|
e947af4c34 | ||
|
|
37e58cd780 | ||
|
|
2931676ecf | ||
|
|
e71a343718 | ||
|
|
a108426412 | ||
|
|
a154d16a7e |
No files matched your search
@@ -43,6 +43,7 @@ gem 'resque', :require => 'resque/server' # background jobs
|
|||||||
gem 'resque-scheduler' # job scheduling
|
gem 'resque-scheduler' # job scheduling
|
||||||
gem 'resque-restriction'
|
gem 'resque-restriction'
|
||||||
#gem 'rb-readline'
|
#gem 'rb-readline'
|
||||||
|
gem 'roo'
|
||||||
# gem 'ruby-debug19'
|
# gem 'ruby-debug19'
|
||||||
gem 'rubyzip', '< 1.0.0'
|
gem 'rubyzip', '< 1.0.0'
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# Ruling Orbit
|
# Ruling Orbit
|
||||||
|
|
||||||
RulingSite-s Version 4.0 Beta
|
RulingSite-s Version 4.0 Beta
|
||||||
Update Manager!
|
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 7.4 KiB |
@@ -0,0 +1,33 @@
|
|||||||
|
window.SocialShareButton =
|
||||||
|
openUrl : (url) ->
|
||||||
|
window.open(url)
|
||||||
|
false
|
||||||
|
|
||||||
|
share : (el) ->
|
||||||
|
site = $(el).data('site')
|
||||||
|
title = encodeURIComponent($(el).parent().data('title'))
|
||||||
|
img = encodeURIComponent($(el).parent().data("img"))
|
||||||
|
fb_url = encodeURIComponent($(el).parent().data("fb_url"))
|
||||||
|
url = encodeURIComponent(location.href)
|
||||||
|
switch site
|
||||||
|
when "weibo"
|
||||||
|
SocialShareButton.openUrl("http://v.t.sina.com.cn/share/share.php?url=#{url}&pic=#{img}&title=#{title}&content=utf-8")
|
||||||
|
when "twitter"
|
||||||
|
SocialShareButton.openUrl("https://twitter.com/home?status=#{title}: #{url}")
|
||||||
|
when "douban"
|
||||||
|
SocialShareButton.openUrl("http://www.douban.com/recommend/?url=#{url}&title=#{title}&image=#{img}")
|
||||||
|
when "facebook"
|
||||||
|
SocialShareButton.openUrl("http://www.facebook.com/sharer.php?t=#{title}&u=#{fb_url}")
|
||||||
|
when "qq"
|
||||||
|
SocialShareButton.openUrl("http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=#{url}&title=#{title}&pics=#{img}")
|
||||||
|
when "tqq"
|
||||||
|
SocialShareButton.openUrl("http://share.v.t.qq.com/index.php?c=share&a=index&url=#{url}&title=#{title}&pic=#{img}")
|
||||||
|
when "baidu"
|
||||||
|
SocialShareButton.openUrl("http://apps.hi.baidu.com/share/?url=#{url}&title=#{title}&content=")
|
||||||
|
when "kaixin001"
|
||||||
|
SocialShareButton.openUrl("http://www.kaixin001.com/rest/records.php?url=#{url}&content=#{title}&style=11&pic=#{img}")
|
||||||
|
when "renren"
|
||||||
|
SocialShareButton.openUrl("http://widget.renren.com/dialog/share?resourceUrl=#{url}&title=#{title}&description=")
|
||||||
|
when "google_plus"
|
||||||
|
SocialShareButton.openUrl("https://plus.google.com/share?url=#{url}&t=#{title}")
|
||||||
|
false
|
||||||
@@ -10,7 +10,7 @@ $(document).ready(function() {
|
|||||||
type: 'GET',
|
type: 'GET',
|
||||||
url: $(this).attr("rel"),
|
url: $(this).attr("rel"),
|
||||||
dataType: 'script',
|
dataType: 'script',
|
||||||
data: {ids: ids},
|
data: {field: $(this).attr("field"), ids: ids},
|
||||||
success: function (msg) {
|
success: function (msg) {
|
||||||
$("#member-filter").modal('show'); },
|
$("#member-filter").modal('show'); },
|
||||||
error: function(){
|
error: function(){
|
||||||
@@ -20,6 +20,11 @@ $(document).ready(function() {
|
|||||||
});
|
});
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$(document).on('click', ".remove_user", function(){
|
||||||
|
$(this).parent().remove();
|
||||||
|
});
|
||||||
|
|
||||||
$("#remove_users").on('click', function(){
|
$("#remove_users").on('click', function(){
|
||||||
var ids = [];
|
var ids = [];
|
||||||
var users = $('.selected_user input[type="checkbox"]:checked');
|
var users = $('.selected_user input[type="checkbox"]:checked');
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
$(document).ajaxStop(function() {
|
||||||
|
$('.nav').find('.dropdown').on({
|
||||||
|
mouseleave: function() {
|
||||||
|
$(this).removeClass("open");
|
||||||
|
},
|
||||||
|
mouseenter: function() {
|
||||||
|
$(this).addClass("open")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -0,0 +1,230 @@
|
|||||||
|
/* Member Filter */
|
||||||
|
#select_user #select_user_modal.modal {
|
||||||
|
width: 80%;
|
||||||
|
margin-left: -40%;
|
||||||
|
}
|
||||||
|
#select_user #select_user_modal .modal-body {
|
||||||
|
max-height: 425px;
|
||||||
|
}
|
||||||
|
#select_user #select_user_modal .modal-body form {
|
||||||
|
margin-bottom: 0px;
|
||||||
|
}
|
||||||
|
#select_user #select_user_modal .modal-body form fieldset {
|
||||||
|
min-height: 360px;
|
||||||
|
}
|
||||||
|
#select_user #select_user_modal .modal-body .radio.inline,
|
||||||
|
#select_user #select_user_modal .modal-body .checkbox.inline {
|
||||||
|
display: inline-block;
|
||||||
|
padding-top: 5px;
|
||||||
|
margin-bottom: 0;
|
||||||
|
vertical-align: middle;
|
||||||
|
min-width: 100px;
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
#select_user #select_user_modal .modal-body .form-actions {
|
||||||
|
margin: 20px 0 0;
|
||||||
|
padding: 10px 0 0;
|
||||||
|
background-color: transparent;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
#select_user #select_user_modal .modal-body .tabs-left > .nano {
|
||||||
|
width: 160px;
|
||||||
|
min-height: 425px;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
#select_user #select_user_modal .modal-body .tabs-left > .nano .pane {
|
||||||
|
right: 6px;
|
||||||
|
}
|
||||||
|
#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs {
|
||||||
|
width: 140px;
|
||||||
|
float: left;
|
||||||
|
margin-bottom: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
border-right: 1px solid #ddd;
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs > li {
|
||||||
|
float: none;
|
||||||
|
}
|
||||||
|
#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs > li > a {
|
||||||
|
min-width: 74px;
|
||||||
|
margin-right: 0;
|
||||||
|
margin-bottom: 3px;
|
||||||
|
}
|
||||||
|
#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs > li > a {
|
||||||
|
margin-right: -1px;
|
||||||
|
-webkit-border-radius: 4px 0 0 4px;
|
||||||
|
-moz-border-radius: 4px 0 0 4px;
|
||||||
|
border-radius: 4px 0 0 4px;
|
||||||
|
}
|
||||||
|
#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs > li > a:hover {
|
||||||
|
border-color: #eeeeee #dddddd #eeeeee #eeeeee;
|
||||||
|
}
|
||||||
|
#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs .active > a,
|
||||||
|
#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs .active > a:hover {
|
||||||
|
border-color: #ddd transparent #ddd #ddd;
|
||||||
|
*border-right-color: #ffffff;
|
||||||
|
}
|
||||||
|
#select_user #select_user_modal .member-filter-options {
|
||||||
|
float: left;
|
||||||
|
display: inline-block;
|
||||||
|
width: 175px;
|
||||||
|
min-height: 425px;
|
||||||
|
margin-right: 10px;
|
||||||
|
padding: 0 10px 0 0;
|
||||||
|
}
|
||||||
|
#select_user #select_user_modal .member-filter-options select {
|
||||||
|
width: 165px;
|
||||||
|
}
|
||||||
|
#select_user #select_user_modal .member-filter-options .btn {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
#select_user #select_user_modal .member-filter-result {
|
||||||
|
padding-left: 15px;
|
||||||
|
min-height: 360px;
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Check Box Card */
|
||||||
|
.checkbox-card {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
.checkbox-card li {
|
||||||
|
position: relative;
|
||||||
|
list-style: none;
|
||||||
|
color: #FFFFFF;
|
||||||
|
width: 180px;
|
||||||
|
height: 40px;
|
||||||
|
margin: 0 10px 10px 0;
|
||||||
|
float: left;
|
||||||
|
display: inline-block;
|
||||||
|
background-color: #cccccc;
|
||||||
|
overflow: hidden;
|
||||||
|
-webkit-border-radius: 3px;
|
||||||
|
-moz-border-radius: 3px;
|
||||||
|
border-radius: 3px;
|
||||||
|
-webkit-transition: all .2s linear;
|
||||||
|
-moz-transition: all .2s linear;
|
||||||
|
-o-transition: all .2s linear;
|
||||||
|
transition: all .2s linear;
|
||||||
|
}
|
||||||
|
.checkbox-card li.mark {
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
|
||||||
|
filter: alpha(opacity=0);
|
||||||
|
opacity: 0;
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
.checkbox-card li:hover {
|
||||||
|
background-color: #0088cc;
|
||||||
|
}
|
||||||
|
.checkbox-card li:after {
|
||||||
|
content: "";
|
||||||
|
display: block;
|
||||||
|
clear: both;
|
||||||
|
height: 0;
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
.checkbox-card li.active:before {
|
||||||
|
-webkit-text-size-adjust : none;
|
||||||
|
font-family: FontAwesome;
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
color: #FFF;
|
||||||
|
text-decoration: inherit;
|
||||||
|
content: "\f00c";
|
||||||
|
position: absolute;
|
||||||
|
right: 0px;
|
||||||
|
top: 0px;
|
||||||
|
line-height: 14px;
|
||||||
|
text-indent: 10px;
|
||||||
|
font-size: 10px;
|
||||||
|
width: 0px;
|
||||||
|
height: 0px;
|
||||||
|
border-style: solid;
|
||||||
|
border-width: 0 22px 22px 0;
|
||||||
|
border-color: transparent #51a351 transparent transparent;
|
||||||
|
}
|
||||||
|
.checkbox-card li.active label {
|
||||||
|
}
|
||||||
|
.checkbox-card li label {
|
||||||
|
margin-bottom: 0px;
|
||||||
|
overflow: hidden;
|
||||||
|
-webkit-border-radius: 3px;
|
||||||
|
-moz-border-radius: 3px;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
.checkbox-card li input {
|
||||||
|
opacity: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
margin: 0;
|
||||||
|
z-index: 10;
|
||||||
|
}
|
||||||
|
.checkbox-card li label span {
|
||||||
|
-webkit-text-size-adjust : none;
|
||||||
|
font-size: 10px;
|
||||||
|
display: block;
|
||||||
|
width: 130px;
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
color: #666666;
|
||||||
|
margin-top: -3px;
|
||||||
|
}
|
||||||
|
.checkbox-card li:hover label span,
|
||||||
|
.checkbox-card li:hover label span.user-name {
|
||||||
|
color: #FFFFFF;
|
||||||
|
}
|
||||||
|
.checkbox-card li label span.user-name {
|
||||||
|
font-size: 12px;
|
||||||
|
color: #363636;
|
||||||
|
padding: 2px 0 0;
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
.checkbox-card li .user-pic {
|
||||||
|
float: left;
|
||||||
|
margin-right: 5px;
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
}
|
||||||
|
#selected_users .selected_user {
|
||||||
|
display: block;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
#selected_users .selected_user .remove_user {
|
||||||
|
font-size: 15px;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
.promoter {
|
||||||
|
border-color: #CCCCCC;
|
||||||
|
border-style: solid;
|
||||||
|
border-width: 0 1px;
|
||||||
|
padding: 0 10px 5px 10px;
|
||||||
|
}
|
||||||
|
.promoter > div {
|
||||||
|
border-bottom: 1px solid #CCCCCC;
|
||||||
|
}
|
||||||
|
.promoter > div:after {
|
||||||
|
content: "";
|
||||||
|
clear: both;
|
||||||
|
display: block;
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
.promoter > div > span {
|
||||||
|
display: block;
|
||||||
|
margin-left: 70px;
|
||||||
|
padding-bottom: 5px;
|
||||||
|
}
|
||||||
|
.promoter p {
|
||||||
|
width: 70px;
|
||||||
|
float: left;
|
||||||
|
text-align:right;
|
||||||
|
}*/
|
||||||
@@ -0,0 +1,90 @@
|
|||||||
|
.social-share-button-baidu {
|
||||||
|
display:inline-block;
|
||||||
|
width:16px;
|
||||||
|
height:16px;
|
||||||
|
background:url("/assets/social-share-button.png") 0px 0px no-repeat;
|
||||||
|
}
|
||||||
|
.social-share-button-delicious {
|
||||||
|
display:inline-block;
|
||||||
|
width:16px;
|
||||||
|
height:16px;
|
||||||
|
background:url("/assets/social-share-button.png") -16px 0px no-repeat;
|
||||||
|
}
|
||||||
|
.social-share-button-douban {
|
||||||
|
display:inline-block;
|
||||||
|
width:16px;
|
||||||
|
height:16px;
|
||||||
|
background:url("/assets/social-share-button.png") 0px -16px no-repeat;
|
||||||
|
}
|
||||||
|
.social-share-button-email {
|
||||||
|
display:inline-block;
|
||||||
|
width:16px;
|
||||||
|
height:16px;
|
||||||
|
background:url("/assets/social-share-button.png") -16px -16px no-repeat;
|
||||||
|
}
|
||||||
|
.social-share-button-facebook {
|
||||||
|
display:inline-block;
|
||||||
|
width:16px;
|
||||||
|
height:16px;
|
||||||
|
background:url("/assets/social-share-button.png") -32px 0px no-repeat;
|
||||||
|
}
|
||||||
|
.social-share-button-flickr {
|
||||||
|
display:inline-block;
|
||||||
|
width:16px;
|
||||||
|
height:16px;
|
||||||
|
background:url("/assets/social-share-button.png") -32px -16px no-repeat;
|
||||||
|
}
|
||||||
|
.social-share-button-google {
|
||||||
|
display:inline-block;
|
||||||
|
width:16px;
|
||||||
|
height:16px;
|
||||||
|
background:url("/assets/social-share-button.png") 0px -32px no-repeat;
|
||||||
|
}
|
||||||
|
.social-share-button-google_plus {
|
||||||
|
display:inline-block;
|
||||||
|
width:16px;
|
||||||
|
height:16px;
|
||||||
|
background:url("/assets/social-share-button.png") -16px -32px no-repeat;
|
||||||
|
}
|
||||||
|
.social-share-button-kaixin001 {
|
||||||
|
display:inline-block;
|
||||||
|
width:16px;
|
||||||
|
height:16px;
|
||||||
|
background:url("/assets/social-share-button.png") -32px -32px no-repeat;
|
||||||
|
}
|
||||||
|
.social-share-button-qq {
|
||||||
|
display:inline-block;
|
||||||
|
width:16px;
|
||||||
|
height:16px;
|
||||||
|
background:url("/assets/social-share-button.png") -48px 0px no-repeat;
|
||||||
|
}
|
||||||
|
.social-share-button-renren {
|
||||||
|
display:inline-block;
|
||||||
|
width:16px;
|
||||||
|
height:16px;
|
||||||
|
background:url("/assets/social-share-button.png") -48px -16px no-repeat;
|
||||||
|
}
|
||||||
|
.social-share-button-tqq {
|
||||||
|
display:inline-block;
|
||||||
|
width:16px;
|
||||||
|
height:16px;
|
||||||
|
background:url("/assets/social-share-button.png") -48px -32px no-repeat;
|
||||||
|
}
|
||||||
|
.social-share-button-twitter {
|
||||||
|
display:inline-block;
|
||||||
|
width:16px;
|
||||||
|
height:16px;
|
||||||
|
background:url("/assets/social-share-button.png") 0px -48px no-repeat;
|
||||||
|
}
|
||||||
|
.social-share-button-weibo {
|
||||||
|
display:inline-block;
|
||||||
|
width:16px;
|
||||||
|
height:16px;
|
||||||
|
background:url("/assets/social-share-button.png") -16px -48px no-repeat;
|
||||||
|
}
|
||||||
|
.social-share-button-rss {
|
||||||
|
display:inline-block;
|
||||||
|
width:16px;
|
||||||
|
height:16px;
|
||||||
|
background:url("/assets/social-share-button.png") -32px -48px no-repeat;
|
||||||
|
}
|
||||||
@@ -1,9 +1,48 @@
|
|||||||
class Admin::ModuleStoreController < OrbitBackendController
|
class Admin::ModuleStoreController < OrbitBackendController
|
||||||
|
|
||||||
|
@@store = STORE_CONFIG[:store_settings]["url"]
|
||||||
|
|
||||||
def index
|
def index
|
||||||
|
@extensions = get_extensions
|
||||||
end
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
|
@extension = get_extension(params[:id]) rescue nil
|
||||||
end
|
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
|
end
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
class Admin::TemplateStoreController < OrbitBackendController
|
class Admin::TemplateStoreController < OrbitBackendController
|
||||||
|
|
||||||
|
|
||||||
@@store_domain = "http://store.tp.rulingcom.com"
|
@@store_domain = STORE_CONFIG[:store_settings]["url"]
|
||||||
def index
|
def index
|
||||||
@store = @@store_domain
|
@store = @@store_domain
|
||||||
@templates = JSON.parse(get_templates)
|
@templates = JSON.parse(get_templates)
|
||||||
@@ -33,6 +33,4 @@ class Admin::TemplateStoreController < OrbitBackendController
|
|||||||
response.body
|
response.body
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
end
|
end
|
||||||
@@ -197,8 +197,8 @@ class PagesController < ApplicationController
|
|||||||
else
|
else
|
||||||
model = params[:app_action].classify.constantize rescue nil
|
model = params[:app_action].classify.constantize rescue nil
|
||||||
if !model.nil?
|
if !model.nil?
|
||||||
item = model.find(params[:id])
|
item = model.where(:_id=>params[:id]).first
|
||||||
@item = Item.where(:category => [item.category_id.to_s]).first if !module_app.has_category.blank?
|
@item = Item.where(:category => [item.category_id.to_s]).first if !module_app.has_category.blank? and !item.blank?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -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] = "myntu"
|
||||||
|
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 == "myntu"
|
||||||
|
redirect_to "https://adfs.ntu.edu.tw/adfs/ls/?wa=wsignout1.0&wreply=https://galogin.ntu.edu.tw"
|
||||||
|
else
|
||||||
|
redirect_to root_path
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
@@ -193,8 +193,9 @@ module ApplicationHelper
|
|||||||
stylesheets = ''
|
stylesheets = ''
|
||||||
stylesheets << "<link href='#{asset_path 'orbit_bar_bootstrap'}' rel='stylesheet' type='text/css' />\n"
|
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='#{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 '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 'default_widget.css'}' rel='stylesheet' type='text/css' />\n"
|
||||||
|
stylesheets << "<link href='/assets/social-share-button.css' rel='stylesheet' type='text/css' />\n"
|
||||||
stylesheets << "<link href='#{page.design.css_default.file.url}' rel='stylesheet' type='text/css' />\n" if page.design.css_default
|
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 }
|
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
|
stylesheets << "<link href='#{theme.file.url}' rel='stylesheet' type='text/css' />\n" if theme
|
||||||
@@ -203,8 +204,12 @@ module ApplicationHelper
|
|||||||
|
|
||||||
def page_javascripts(page, edit=nil)
|
def page_javascripts(page, edit=nil)
|
||||||
javascripts = ''
|
javascripts = ''
|
||||||
|
unless edit
|
||||||
|
javascripts << "<script type='text/javascript' src='/assets/orbit-bar-search.js'></script>\n"
|
||||||
|
end
|
||||||
# javascripts << "<script type='text/javascript' src='/assets/lib/jquery.preload-min.js'></script>\n"
|
# javascripts << "<script type='text/javascript' src='/assets/lib/jquery.preload-min.js'></script>\n"
|
||||||
# javascripts << "<script type='text/javascript' src='/assets/jquery.cycle.all.latest.js'></script>\n"
|
# javascripts << "<script type='text/javascript' src='/assets/jquery.cycle.all.latest.js'></script>\n"
|
||||||
|
javascripts << "<script type='text/javascript' src='/assets/lib/social-share-button.js'></script>\n"
|
||||||
page.design.javascripts.each do |js|
|
page.design.javascripts.each do |js|
|
||||||
javascripts << "<script type='text/javascript' src='#{js.file.url}'></script>"
|
javascripts << "<script type='text/javascript' src='#{js.file.url}'></script>"
|
||||||
end
|
end
|
||||||
@@ -301,7 +306,7 @@ module ApplicationHelper
|
|||||||
|
|
||||||
# NTU link
|
# NTU link
|
||||||
def get_link(site_number)
|
def get_link(site_number)
|
||||||
"http://#{request.host}:2#{site_number}00"
|
"http://#{site_number}.#{request.domain(3)}"
|
||||||
end
|
end
|
||||||
|
|
||||||
def sortable(column, title = nil, options = {})
|
def sortable(column, title = nil, options = {})
|
||||||
|
|||||||
@@ -271,17 +271,31 @@ module OrbitBackendHelper
|
|||||||
# TODO: links to other actions
|
# TODO: links to other actions
|
||||||
# ===============================================================
|
# ===============================================================
|
||||||
def footer(args={})
|
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
|
paginate = args.has_key?(:paginate) ? args[:paginate] : true
|
||||||
link = (is_manager? || is_sub_manager? rescue nil) && args.has_key?(:link) ? true : false
|
link = (is_manager? || is_sub_manager? rescue nil) && args.has_key?(:link) ? true : false
|
||||||
if paginate || link
|
if paginate || link
|
||||||
@index_footer = content_tag :div, class: "bottomnav clearfix" do
|
@index_footer = content_tag :div, class: "bottomnav clearfix" do
|
||||||
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, 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, 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
|
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
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_quick_link(quick, object, authorization, approvable)
|
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]
|
case quick[:type]
|
||||||
when 'approval'
|
when 'approval'
|
||||||
if show_approval_link(object)
|
if show_approval_link(object)
|
||||||
@@ -293,12 +307,12 @@ module OrbitBackendHelper
|
|||||||
end
|
end
|
||||||
when 'edit'
|
when 'edit'
|
||||||
if authorization && approvable
|
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]}"))
|
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]}"))
|
||||||
end
|
end
|
||||||
when 'delete'
|
when 'delete'
|
||||||
if show_delete_link(object)
|
if show_delete_link(object)
|
||||||
@delete_options = {title: quick[:title], warning: quick[:warning], cancel: quick[:cancel], submit: quick[:submit]}
|
@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}')"), class: "delete #{quick[:class] || 'text-error'}")
|
content_tag :li, link_to(t(quick[:translation] || :delete_), '#', rel: eval("#{quick[:link]}('#{object.id}'#{link_option})"), class: "delete #{quick[:class] || 'text-error'}")
|
||||||
end
|
end
|
||||||
when 'detail'
|
when 'detail'
|
||||||
content_tag :li, link_to(t(quick[:translation] || :detail), '#', class: (quick[:class] || "detail-row"))
|
content_tag :li, link_to(t(quick[:translation] || :detail), '#', class: (quick[:class] || "detail-row"))
|
||||||
@@ -331,7 +345,7 @@ module OrbitBackendHelper
|
|||||||
if object.is_a?(klass.constantize)
|
if object.is_a?(klass.constantize)
|
||||||
autorized ||= object.user_can_sub_manage?(current_user)
|
autorized ||= object.user_can_sub_manage?(current_user)
|
||||||
else
|
else
|
||||||
autorized ||= object.send(klass.underscore).user_can_sub_manage?(current_user)
|
autorized ||= object.send(klass.underscore).user_can_sub_manage?(current_user) rescue nil
|
||||||
end
|
end
|
||||||
autorized
|
autorized
|
||||||
end
|
end
|
||||||
@@ -430,4 +444,4 @@ module OrbitBackendHelper
|
|||||||
res.html_safe
|
res.html_safe
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
@@ -42,7 +42,7 @@ class AvatarUploader < CarrierWave::Uploader::Base
|
|||||||
# end
|
# end
|
||||||
|
|
||||||
version :thumb do
|
version :thumb do
|
||||||
process :resize_to_fit => [80, 80]
|
process :resize_to_fit => [200, 200]
|
||||||
end
|
end
|
||||||
|
|
||||||
# Add a white list of extensions which are allowed to be uploaded.
|
# Add a white list of extensions which are allowed to be uploaded.
|
||||||
|
|||||||
@@ -28,6 +28,7 @@
|
|||||||
<div class="form-actions">
|
<div class="form-actions">
|
||||||
<button type="button" class="btn" data-dismiss="modal"><%= t(:cancel) %></button>
|
<button type="button" class="btn" data-dismiss="modal"><%= t(:cancel) %></button>
|
||||||
<%= submit_tag t(:submit), class: "btn btn-primary" %>
|
<%= submit_tag t(:submit), class: "btn btn-primary" %>
|
||||||
|
<%= hidden_field_tag field, @field %>
|
||||||
</div>
|
</div>
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
@@ -53,6 +54,7 @@
|
|||||||
<div class="form-actions condition">
|
<div class="form-actions condition">
|
||||||
<button type="button" class="btn" data-dismiss="modal"><%= t(:cancel) %></button>
|
<button type="button" class="btn" data-dismiss="modal"><%= t(:cancel) %></button>
|
||||||
<%= submit_tag t(:submit), class: "btn btn-primary" %>
|
<%= submit_tag t(:submit), class: "btn btn-primary" %>
|
||||||
|
<%= hidden_field_tag field, @field %>
|
||||||
</div>
|
</div>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
<% unless users.blank? %>
|
||||||
|
<div class="promoter-block">
|
||||||
|
<p class="promoter-title"><%= t(:promoter) %>:</p>
|
||||||
|
<ul>
|
||||||
|
<% users.each do |user| %>
|
||||||
|
<li class="promoter">
|
||||||
|
<p>
|
||||||
|
<%= link_to user.name, "mailto:#{user.email}", class: "promoter-name" %> / <span class="promoter-phone"><%= user.office_tel %></span>
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
<% end %>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
<% content_for :page_specific_javascript do -%>
|
||||||
|
<%= javascript_include_tag "member-selection" %>
|
||||||
|
<%= javascript_include_tag "lib/jquery.nanoscroller" %>
|
||||||
|
<%= javascript_include_tag "lib/checkbox.card" %>
|
||||||
|
<% end -%>
|
||||||
|
<% content_for :page_specific_css do -%>
|
||||||
|
<%= stylesheet_link_tag "member_select" %>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<div id="selected_users">
|
||||||
|
<%= render partial: 'admin/member_selects/user', collection: users, locals: {field: field} %>
|
||||||
|
<%= hidden_field_tag field %>
|
||||||
|
</div>
|
||||||
|
<%= link_to t(:add), '#', class: 'btn btn-primary btn-small select_user_modal', rel: select_members_admin_member_selects_path, field: field %>
|
||||||
|
</div>
|
||||||
@@ -14,8 +14,14 @@
|
|||||||
<%= javascript_include_tag 'lib/retina' %>
|
<%= javascript_include_tag 'lib/retina' %>
|
||||||
<%= javascript_include_tag 'lib/mudole_templates_status' %>
|
<%= javascript_include_tag 'lib/mudole_templates_status' %>
|
||||||
</head>
|
</head>
|
||||||
|
<!--
|
||||||
|
<% @extensions.each do |extension|%>
|
||||||
|
<%=link_to extension["title"], admin_module_store_show_path(extension["_slugs"][0])%>
|
||||||
|
<%end%> -->
|
||||||
|
|
||||||
<table id="mt-list" class="table main-list">
|
<%= flash[:notice] rescue nil%>
|
||||||
|
|
||||||
|
<table id="mt-list" class="table main-list">
|
||||||
<thead>
|
<thead>
|
||||||
<tr class="sort-header">
|
<tr class="sort-header">
|
||||||
<th class="first"><a href="#">Module Title</a></th>
|
<th class="first"><a href="#">Module Title</a></th>
|
||||||
@@ -25,6 +31,38 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<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>
|
<tr>
|
||||||
<td class="detail-row">
|
<td class="detail-row">
|
||||||
<div class="module_icon pull-left">
|
<div class="module_icon pull-left">
|
||||||
@@ -80,6 +118,5 @@
|
|||||||
@detail
|
@detail
|
||||||
</td>
|
</td>
|
||||||
<td class="active"><button class="act btn btn-mini btn-info" type="button">Update</button></td>
|
<td class="active"><button class="act btn btn-mini btn-info" type="button">Update</button></td>
|
||||||
</tr>
|
</tr> -->
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
<div class="side">
|
<div class="side">
|
||||||
<div id="item-info">
|
<div id="item-info">
|
||||||
<img src="/assets/module/thumb/mt<%= params[:m] %>.jpg" alt="" class="item-thumb">
|
<img src="/assets/module/thumb/mt<%= params[:m] %>.jpg" alt="" class="item-thumb">
|
||||||
<h2 class="item-name">Module Name</h2>
|
<h2 class="item-name"><%= @extension.first["title"] %></h2>
|
||||||
<a id="download" href="">free download</a>
|
<a id="download" href="">free download</a>
|
||||||
<ul class="item-extra-info">
|
<ul class="item-extra-info">
|
||||||
<li><span class="title">downloads</span><span class="count"><%= Random.new.rand(10..100) %></span></li>
|
<li><span class="title">downloads</span><span class="count"><%= Random.new.rand(10..100) %></span></li>
|
||||||
@@ -38,16 +38,12 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="main clearfix">
|
<div class="main clearfix">
|
||||||
<h3>description</h3>
|
<h3>Description</h3>
|
||||||
<div id="desc-holder" class="paragraph">Pixel Union’s Jitensha defines storefront minimalism. Japanese for “bicycle,” Jitensha offers clean typography and easy usability, including full color, font, logo, and footer customization. With its painless social media and blog integration, Jitensha gorgeously accomodates every aspect of your business. Any questions before you launch? Don’t hesitate to email us: Support@PixelUnion.net.</div>
|
<div id="desc-holder" class="paragraph"><%= @extension.first["description"].html_safe%></div>
|
||||||
<h3>screen shot</h3>
|
<h3>screen shot</h3>
|
||||||
<div id="screen-shot">
|
<div id="screen-shot">
|
||||||
<div class="holder">
|
<div class="holder">
|
||||||
<img src="" alt="Thumbnail 1" class="preview item-thumb">
|
<%= image_tag "#{STORE_CONFIG[:store_settings]["url"]}/#{@extension.first['preview']['preview']['url']}"%>
|
||||||
<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>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -48,7 +48,7 @@
|
|||||||
});
|
});
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
$(document).on('click', 'li .onoff', function () {
|
$(document).on('click', 'li .map-block .onoff', function () {
|
||||||
$(this).parents("li").toggleClass("disabled");
|
$(this).parents("li").toggleClass("disabled");
|
||||||
if($(this).parents("li").attr("class").indexOf("disabled") > 0){
|
if($(this).parents("li").attr("class").indexOf("disabled") > 0){
|
||||||
$(this).text("<%= t('off_upcase') %>")
|
$(this).text("<%= t('off_upcase') %>")
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<ul class="nav nav-pills">
|
<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(: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("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>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
|
|||||||
@@ -12,10 +12,11 @@
|
|||||||
<input name="utf8" type="hidden" value="" />
|
<input name="utf8" type="hidden" value="" />
|
||||||
<input name="authenticity_token" type="hidden" value="" />
|
<input name="authenticity_token" type="hidden" value="" />
|
||||||
</div>
|
</div>
|
||||||
<!-- <div class="other-sign-in">
|
<div class="other-sign-in">
|
||||||
<a class="btn btn-primary" type="submit">Other Sign In</a>
|
<% @request_hosts = request.host_with_port.split(".") %>
|
||||||
|
<a class="btn btn-primary" type="submit" href="https://adfs.ntu.edu.tw/adfs/ls/?wa=wsignin1.0&wtrealm=https://galogin.ntu.edu.tw/saml_login&wctx=<%= @request_hosts[0] %>">使用計中帳號登入</a>
|
||||||
<p>or</p>
|
<p>or</p>
|
||||||
</div> -->
|
</div>
|
||||||
<div class="form-block">
|
<div class="form-block">
|
||||||
<div class="form-list clearfix">
|
<div class="form-list clearfix">
|
||||||
<form class="content" accept-charset="UTF-8" action="/users/sign_in" method="post">
|
<form class="content" accept-charset="UTF-8" action="/users/sign_in" method="post">
|
||||||
|
|||||||
@@ -13,6 +13,16 @@
|
|||||||
</form>
|
</form>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
|
<!-- ntu sites -->
|
||||||
|
<li id="orbit-tag" class="dropdown">
|
||||||
|
<a class="dropdown-toggle orbit-bar-language" data-icons="" href="#" data-toggle="dropdown"></a>
|
||||||
|
<ul class="dropdown-menu language-menu">
|
||||||
|
<% t('ntu.site_names').each do |site| %>
|
||||||
|
<li><%= link_to site[1], get_link(site[0]) %></li>
|
||||||
|
<% end %>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
|
||||||
<!-- Language -->
|
<!-- Language -->
|
||||||
<li id="orbit-language" class="dropdown">
|
<li id="orbit-language" class="dropdown">
|
||||||
<a href="#" role="button" class="dropdown-toggle" data-toggle="dropdown"><%= t(:_locale, :locale => I18n.locale) %></a>
|
<a href="#" role="button" class="dropdown-toggle" data-toggle="dropdown"><%= t(:_locale, :locale => I18n.locale) %></a>
|
||||||
@@ -36,7 +46,7 @@
|
|||||||
<% if @site.desktop_closed %>
|
<% if @site.desktop_closed %>
|
||||||
<li><%= link_to content_tag(:i, nil, class: 'icons-screen') + ' ' + t(:desktop), desktop_path, tabindex: '-1' %></li>
|
<li><%= link_to content_tag(:i, nil, class: 'icons-screen') + ' ' + t(:desktop), desktop_path, tabindex: '-1' %></li>
|
||||||
<% end %>
|
<% end %>
|
||||||
<li><%= link_to content_tag(:i, nil, class: 'icons-logout') + ' ' + t(:logout), destroy_user_session_path, tabindex: '-1' %></li>
|
<li><%= link_to content_tag(:i, nil, class: 'icons-logout') + ' ' + t(:logout), user_logout_path, tabindex: '-1' %></li>
|
||||||
<li class="divider"></li>
|
<li class="divider"></li>
|
||||||
<li><a tabindex="-1" href="#"><i class="icons-lifebuoy"></i> <%= t(:help) %></a></li>
|
<li><a tabindex="-1" href="#"><i class="icons-lifebuoy"></i> <%= t(:help) %></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
@@ -56,6 +66,12 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<%= form_for :user, url: user_session_path, html: {class: 'container'} do |f| %>
|
<%= form_for :user, url: user_session_path, html: {class: 'container'} do |f| %>
|
||||||
|
|
||||||
|
<div class="other-sign-in">
|
||||||
|
<% @request_hosts = request.host_with_port.split(".") %>
|
||||||
|
<a class="btn btn-primary" type="submit" href="https://adfs.ntu.edu.tw/adfs/ls/?wa=wsignin1.0&wtrealm=https://galogin.ntu.edu.tw/saml_login&wctx=<%= @request_hosts[0] %>">使用計中帳號登入</a>
|
||||||
|
<p>or</p>
|
||||||
|
</div>
|
||||||
<div class="input-prepend">
|
<div class="input-prepend">
|
||||||
<span class="add-on">
|
<span class="add-on">
|
||||||
<i class="icon-user"></i>
|
<i class="icon-user"></i>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<div id="sidebar-menu">
|
<div id="sidebar-menu">
|
||||||
<div class="scroller">
|
<div class="scroller">
|
||||||
<ul class="sidebar-nav">
|
<ul class="sidebar-nav">
|
||||||
<% OrbitApp::Module::SideBarRegisition.all.each do |t| %>
|
<% OrbitApp::Module::SideBarRegisition.all.sort{|x,y| x.get_module_app_key <=> y.get_module_app_key}.each do |t| %>
|
||||||
<%= t.render_head(request, params, current_user, @module_app) %>
|
<%= t.render_head(request, params, current_user, @module_app) %>
|
||||||
<% end %>
|
<% end %>
|
||||||
</ul>
|
</ul>
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="sub-nav-block-list">
|
<div class="sub-nav-block-list">
|
||||||
<% OrbitApp::Module::SideBarRegisition.all.each do |t| %>
|
<% OrbitApp::Module::SideBarRegisition.all.sort{|x,y| x.get_module_app_key <=> y.get_module_app_key}.each do |t| %>
|
||||||
<%= t.render(request, params, current_user, @module_app) %>
|
<%= t.render(request, params, current_user, @module_app) %>
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
data = File.open(File.join(Rails.root, 'config', 'store_config.yml')).read
|
||||||
|
STORE_CONFIG = YAML::load(ERB.new(data).result(binding)).symbolize_keys
|
||||||
@@ -86,7 +86,6 @@ en:
|
|||||||
user_list: Unit
|
user_list: Unit
|
||||||
approval_: Approval
|
approval_: Approval
|
||||||
approval_setting: Approval setting
|
approval_setting: Approval setting
|
||||||
archive: Archive
|
|
||||||
asset: Asset
|
asset: Asset
|
||||||
attributes: Attributes
|
attributes: Attributes
|
||||||
auth:
|
auth:
|
||||||
@@ -262,7 +261,6 @@ en:
|
|||||||
text_area: Text Area
|
text_area: Text Area
|
||||||
text_field: Text Field
|
text_field: Text Field
|
||||||
locale: Locale
|
locale: Locale
|
||||||
location: Location
|
|
||||||
login: Login
|
login: Login
|
||||||
logout: Logout
|
logout: Logout
|
||||||
mail:
|
mail:
|
||||||
@@ -380,6 +378,7 @@ en:
|
|||||||
system_email: System Email
|
system_email: System Email
|
||||||
preview: Preview
|
preview: Preview
|
||||||
profile: Profile
|
profile: Profile
|
||||||
|
promoter: Promoter
|
||||||
publications: Publications
|
publications: Publications
|
||||||
purchase: Purchase
|
purchase: Purchase
|
||||||
quantity: Quantity
|
quantity: Quantity
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
en:
|
||||||
|
|
||||||
|
ntu:
|
||||||
|
rss_origin: Back to NTU Announcements
|
||||||
|
site_names:
|
||||||
|
"www": "Dean of General Affairs"
|
||||||
|
"sec": "Office of the Dean and Secretariat"
|
||||||
|
"doc": "Documentation Division"
|
||||||
|
"general": "General Service Division"
|
||||||
|
"property": "Property Management Division"
|
||||||
|
"construction": "Construction and Maintenance Division"
|
||||||
|
"cashier": "Cashier Division"
|
||||||
|
"procurement": "Procurement Division"
|
||||||
|
"fss": "Facilities Service Division"
|
||||||
|
"police": "Campus Security"
|
||||||
|
"social": "General Affairs Division, College of Social Science"
|
||||||
|
"medicine": "General Service Division, College of Medicine"
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
zh_tw:
|
||||||
|
|
||||||
|
ntu:
|
||||||
|
rss_origin: 回臺大校園公佈欄
|
||||||
|
site_names:
|
||||||
|
"www": "總務處"
|
||||||
|
"sec": "總務長室暨總務處秘書室"
|
||||||
|
"doc": "文書組"
|
||||||
|
"general": "事務組"
|
||||||
|
"property": "保管組"
|
||||||
|
"construction": "營繕組"
|
||||||
|
"cashier": "出納組"
|
||||||
|
"procurement": "採購組"
|
||||||
|
"fss": "經營管理組"
|
||||||
|
"police": "駐警隊"
|
||||||
|
"social": "社科院總務分處"
|
||||||
|
"medicine": "醫學院總務分處"
|
||||||
@@ -86,7 +86,6 @@ zh_tw:
|
|||||||
user_list: 使用者列表
|
user_list: 使用者列表
|
||||||
approval_: 審核
|
approval_: 審核
|
||||||
approval_setting: 審核設定
|
approval_setting: 審核設定
|
||||||
archive: 檔案室
|
|
||||||
asset: 資產
|
asset: 資產
|
||||||
attributes: 屬性
|
attributes: 屬性
|
||||||
auth:
|
auth:
|
||||||
@@ -264,7 +263,6 @@ zh_tw:
|
|||||||
text_area: 文字輸入方塊
|
text_area: 文字輸入方塊
|
||||||
text_field: 文字輸入框
|
text_field: 文字輸入框
|
||||||
locale: 位置
|
locale: 位置
|
||||||
location: 地標
|
|
||||||
login: 登入
|
login: 登入
|
||||||
logout: 登出
|
logout: 登出
|
||||||
mail:
|
mail:
|
||||||
@@ -382,6 +380,7 @@ zh_tw:
|
|||||||
sidebar_nav: 側欄導引
|
sidebar_nav: 側欄導引
|
||||||
system_email: 系統信箱
|
system_email: 系統信箱
|
||||||
profile: 基本資料
|
profile: 基本資料
|
||||||
|
promoter: 承辦人
|
||||||
publications: 著作
|
publications: 著作
|
||||||
purchase: 購買
|
purchase: 購買
|
||||||
quantity: 數量
|
quantity: 數量
|
||||||
|
|||||||
@@ -8,6 +8,11 @@ Orbit::Application.routes.draw do
|
|||||||
match "/users_passwd" => "desktop/registrations#update", :as => :users_passwd, :via => :put
|
match "/users_passwd" => "desktop/registrations#update", :as => :users_passwd, :via => :put
|
||||||
end
|
end
|
||||||
|
|
||||||
|
devise_scope :user do
|
||||||
|
get 'user_login' => 'sessions#create'
|
||||||
|
match 'user_logout' => 'sessions#destroy'
|
||||||
|
end
|
||||||
|
|
||||||
mount Resque::Server, :at => "/admin/resque"
|
mount Resque::Server, :at => "/admin/resque"
|
||||||
mount Rack::GridFS::Endpoint.new(:db => Mongoid.database,:lookup=>:path), :at => "gridfs"
|
mount Rack::GridFS::Endpoint.new(:db => Mongoid.database,:lookup=>:path), :at => "gridfs"
|
||||||
|
|
||||||
@@ -262,6 +267,7 @@ Orbit::Application.routes.draw do
|
|||||||
|
|
||||||
match 'module_store' => 'module_store#index'
|
match 'module_store' => 'module_store#index'
|
||||||
match 'module_store/show' => 'module_store#show'
|
match 'module_store/show' => 'module_store#show'
|
||||||
|
match 'module_store/download' => 'module_store#download'
|
||||||
match 'template_store' => 'template_store#index'
|
match 'template_store' => 'template_store#index'
|
||||||
match 'template_store/download_theme' => "template_store#download_theme"
|
match 'template_store/download_theme' => "template_store#download_theme"
|
||||||
match 'template_store/template/:id' => 'template_store#show', :as => :template_store_template
|
match 'template_store/template/:id' => 'template_store#show', :as => :template_store_template
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
store_settings:
|
||||||
|
url: "http://store.tp.rulingcom.com"
|
||||||
@@ -4,9 +4,13 @@ zh_tw:
|
|||||||
ad_banner: 廣告輪播
|
ad_banner: 廣告輪播
|
||||||
banner: 橫幅
|
banner: 橫幅
|
||||||
banner_name: 橫幅名稱
|
banner_name: 橫幅名稱
|
||||||
banner_name_note: 橫幅名稱只能為英文
|
name_only_english: 橫幅名稱只能為英文
|
||||||
|
edit_banner: 編輯橫幅
|
||||||
|
enter_number: 請輸入數字
|
||||||
|
enter_url: 請輸入網址
|
||||||
ste: 轉換間隔時間
|
ste: 轉換間隔時間
|
||||||
ste_note: 請輸入秒數
|
number_seconds: 請輸入秒數
|
||||||
|
number_milliseconds: 請輸入毫秒數
|
||||||
best_size: 最佳尺寸
|
best_size: 最佳尺寸
|
||||||
effect: 效果
|
effect: 效果
|
||||||
all: 全部
|
all: 全部
|
||||||
@@ -16,3 +20,4 @@ zh_tw:
|
|||||||
size: 大小
|
size: 大小
|
||||||
transition_interval: 轉換間隔時間
|
transition_interval: 轉換間隔時間
|
||||||
transition_speed: 轉換速度
|
transition_speed: 轉換速度
|
||||||
|
type: 類型
|
||||||
+1
@@ -64,6 +64,7 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController
|
|||||||
# GET /bulletins/1/edit
|
# GET /bulletins/1/edit
|
||||||
def edit
|
def edit
|
||||||
@bulletin = Bulletin.find(params[:id])
|
@bulletin = Bulletin.find(params[:id])
|
||||||
|
@users = @bulletin.get_users
|
||||||
@tags = get_tags
|
@tags = get_tags
|
||||||
is_authorized_sub_manager = @bulletin.category.auth_sub_manager.authorized_user_ids rescue nil
|
is_authorized_sub_manager = @bulletin.category.auth_sub_manager.authorized_user_ids rescue nil
|
||||||
|
|
||||||
|
|||||||
@@ -24,10 +24,13 @@ class Bulletin
|
|||||||
|
|
||||||
field :create_user_id
|
field :create_user_id
|
||||||
field :update_user_id, :class_name => "User"
|
field :update_user_id, :class_name => "User"
|
||||||
|
field :user_ids
|
||||||
|
|
||||||
field :view_count, :type => Integer, :default => 0
|
field :view_count, :type => Integer, :default => 0
|
||||||
|
|
||||||
field :public, :type => Boolean, :default => true
|
field :public, :type => Boolean, :default => true
|
||||||
|
field :rss_link
|
||||||
|
|
||||||
|
|
||||||
mount_uploader :image, ImageUploader
|
mount_uploader :image, ImageUploader
|
||||||
|
|
||||||
@@ -149,6 +152,9 @@ class Bulletin
|
|||||||
preview_object
|
preview_object
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def get_users
|
||||||
|
User.find(self.user_ids) rescue []
|
||||||
|
end
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
|
|||||||
Vendored
+8
@@ -64,6 +64,14 @@
|
|||||||
<%= f.datetime_picker :deadline, :no_label => true %>
|
<%= f.datetime_picker :deadline, :no_label => true %>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- Promoter -->
|
||||||
|
<div class="control-group">
|
||||||
|
<label class="control-label muted"><%= t(:promoter) %></label>
|
||||||
|
<div class="controls">
|
||||||
|
<%= render partial: 'admin/member_selects/selection_box', locals: {field: 'bulletin[user_ids][]', users: @users} %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
Vendored
+15
@@ -36,6 +36,21 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
<% unless @bulletin.rss_link.blank? %>
|
||||||
|
<div>
|
||||||
|
<%= link_to t('ntu.rss_origin'), @bulletin.rss_link %>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<% unless @bulletin.user_ids.blank? %>
|
||||||
|
<div class="promoter">
|
||||||
|
<div>
|
||||||
|
<%= render partial: 'admin/member_selects/promoter_front', locals: {users: @bulletin.get_users} %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
<%= share_links(@bulletin, 'announcement') %>
|
<%= share_links(@bulletin, 'announcement') %>
|
||||||
|
|
||||||
|
|
||||||
Vendored
+1
@@ -87,6 +87,7 @@ class Panel::Archive::BackEnd::ArchiveFilesController < OrbitBackendController
|
|||||||
# GET /archive_files/1/edit
|
# GET /archive_files/1/edit
|
||||||
def edit
|
def edit
|
||||||
@archive_file = ArchiveFile.find(params[:id])
|
@archive_file = ArchiveFile.find(params[:id])
|
||||||
|
@users = @archive_file.get_users
|
||||||
if !current_user.admin?
|
if !current_user.admin?
|
||||||
redirect_to :action => :index
|
redirect_to :action => :index
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ class ArchiveFile
|
|||||||
field :title, localize: true
|
field :title, localize: true
|
||||||
field :create_user_id
|
field :create_user_id
|
||||||
field :update_user_id, :class_name => "User"
|
field :update_user_id, :class_name => "User"
|
||||||
|
field :user_ids
|
||||||
|
|
||||||
|
|
||||||
scope :can_display,where(is_hidden: false)
|
scope :can_display,where(is_hidden: false)
|
||||||
|
|
||||||
@@ -73,6 +75,10 @@ class ArchiveFile
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def get_users
|
||||||
|
User.find(self.user_ids) rescue []
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
def get_file_icon( file_data )
|
def get_file_icon( file_data )
|
||||||
file_icon = "<span class=\"o-archives-file-type\">#{file_data.split('.')[-1]}</span>".html_safe
|
file_icon = "<span class=\"o-archives-file-type\">#{file_data.split('.')[-1]}</span>".html_safe
|
||||||
|
|||||||
Vendored
+8
@@ -54,6 +54,14 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- Promoter -->
|
||||||
|
<div class="control-group">
|
||||||
|
<label class="control-label muted"><%= t(:promoter) %></label>
|
||||||
|
<div class="controls">
|
||||||
|
<%= render partial: 'admin/member_selects/selection_box', locals: {field: 'archive_file[user_ids][]', users: @users} %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Status Module -->
|
<!-- Status Module -->
|
||||||
|
|||||||
Vendored
+18
-6
@@ -9,19 +9,19 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<th class="column-ctrl col-title"><%= sortable(:title, t("archive.Title"))%></th>
|
<th class="column-ctrl col-title"><%= sortable(:title, t("archive.Title"))%></th>
|
||||||
<th class="column-ctrl col-file"><%= t("archive.Files")%></th>
|
<th class="column-ctrl col-file"><%= t("archive.Files")%></th>
|
||||||
<th class="column-ctrl col-category"><%= sortable(:archive_file_category, t("archive.Category"))%></th>
|
<th class="column-ctrl col-promoter"><%= t(:promoter)%></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
|
||||||
<% @archive_files.each_with_index do |post,i| %>
|
<% @archive_files.each_with_index do |post,i| %>
|
||||||
<tr <% if ( (i + 1) % 2 ) == 0 %> class="even" <% end %>>
|
<tr <% if ( (i + 1) % 2 ) == 0 %> class="even" <% end %>>
|
||||||
<td>
|
<td class="col-title">
|
||||||
<div class="o-archives-title"><%= post.title %>
|
<div class="o-archives-title"><%= post.title %>
|
||||||
<% if !post.is_hot.blank? %><span class="o-archives-hot"><%= t('hot')%></span><% end %>
|
<% if !post.is_hot.blank? %><span class="o-archives-hot"><%= t('hot')%></span><% end %>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td class="col-file">
|
||||||
<div class="o-archives-list-item">
|
<div class="o-archives-list-item">
|
||||||
<% if !post.archive_file_multiples.blank? %>
|
<% if !post.archive_file_multiples.blank? %>
|
||||||
<ol>
|
<ol>
|
||||||
@@ -37,9 +37,21 @@
|
|||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td><div class="o-archives-category">
|
<td class="col-promoter">
|
||||||
<%= post.category.title if !post.category.blank? %>
|
<% unless post.get_users.blank? %>
|
||||||
</div></td>
|
<div class="promoter-block">
|
||||||
|
<ul>
|
||||||
|
<% post.get_users.each do |user| %>
|
||||||
|
<li class="promoter">
|
||||||
|
<p>
|
||||||
|
<%= link_to user.name, "mailto:#{user.email}", class: "promoter-name" %> / <span class="promoter-phone"><%= user.office_tel %></span>
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
<% end %>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
|||||||
+45
@@ -0,0 +1,45 @@
|
|||||||
|
# encoding: utf-8
|
||||||
|
|
||||||
|
class Panel::Ask::BackEnd::AskRequestsController < OrbitBackendController
|
||||||
|
include AdminHelper
|
||||||
|
#include OrbitControllerLib::DivisionForDisable
|
||||||
|
|
||||||
|
#before_filter :for_app_manager
|
||||||
|
skip_before_filter :verify_authenticity_token
|
||||||
|
open_for_visitor :only => [:transferred_request]
|
||||||
|
|
||||||
|
def transferred_request
|
||||||
|
app_title = request.fullpath.split('/')[2]
|
||||||
|
module_app ||= ModuleApp.first(conditions: {:key => app_title} )
|
||||||
|
|
||||||
|
if request.headers["HTTP_X_AUTH_TOKEN"] == '3kjlfksjDFJ'
|
||||||
|
if !module_app.categories.where("title.en" => "Transferred Question").any?
|
||||||
|
ask_category = module_app.categories.build
|
||||||
|
ask_category.title_translations = { "zh_tw" => "轉介的問題", "en" => "Transferred Question" }
|
||||||
|
ask_category.save!
|
||||||
|
end
|
||||||
|
|
||||||
|
module_app.categories.enabled
|
||||||
|
category = module_app.categories.where("title.en" => "Transferred Question").first
|
||||||
|
|
||||||
|
@transferred_question = AskQuestion.new(
|
||||||
|
name: params['name'],
|
||||||
|
identity: params['identity'],
|
||||||
|
email: params['email'],
|
||||||
|
phone: params['phone'],
|
||||||
|
tax: params['tax'],
|
||||||
|
title: params['title'],
|
||||||
|
content: params['content'],
|
||||||
|
category_id: category.id)
|
||||||
|
|
||||||
|
@transferred_question.ask_reply = AskReply.new
|
||||||
|
@transferred_question.ask_reply.update_attributes(status: "待處理 (轉)")
|
||||||
|
@transferred_question.save
|
||||||
|
|
||||||
|
render :nothing => true
|
||||||
|
else
|
||||||
|
render :status => 500
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
Vendored
+8
-7
@@ -1,13 +1,14 @@
|
|||||||
class Panel::Ask::BackEnd::AskAcknowledgementsController < OrbitBackendController
|
class Panel::Ask::BackEnd::AskAcknowledgementsController < OrbitBackendController
|
||||||
include AdminHelper
|
#include AdminHelper
|
||||||
include OrbitControllerLib::DivisionForDisable
|
#include OrbitControllerLib::DivisionForDisable
|
||||||
|
|
||||||
before_filter :for_app_manager
|
#before_filter :for_app_manager
|
||||||
|
open_for_manager
|
||||||
|
|
||||||
def initialize
|
#def initialize
|
||||||
super
|
# super
|
||||||
@app_title = 'ask_acknowledgement'
|
# @app_title = 'ask_acknowledgement'
|
||||||
end
|
#end
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@ask_acknowledgement = AskAcknowledgement.first || AskAcknowledgement.create
|
@ask_acknowledgement = AskAcknowledgement.first || AskAcknowledgement.create
|
||||||
|
|||||||
+8
-7
@@ -1,14 +1,15 @@
|
|||||||
class Panel::Ask::BackEnd::AskAdminsController < OrbitBackendController
|
class Panel::Ask::BackEnd::AskAdminsController < OrbitBackendController
|
||||||
|
|
||||||
include AdminHelper
|
#include AdminHelper
|
||||||
include OrbitControllerLib::DivisionForDisable
|
#include OrbitControllerLib::DivisionForDisable
|
||||||
|
|
||||||
before_filter :for_app_manager
|
#before_filter :for_app_manager
|
||||||
|
open_for_manager
|
||||||
|
|
||||||
def initialize
|
#def initialize
|
||||||
super
|
# super
|
||||||
@app_title = 'ask_admins'
|
# @app_title = 'ask_admins'
|
||||||
end
|
#end
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@ask_admins = AskAdmin.all
|
@ask_admins = AskAdmin.all
|
||||||
|
|||||||
+12
-9
@@ -1,11 +1,11 @@
|
|||||||
require 'csv'
|
|
||||||
|
|
||||||
class Panel::Ask::BackEnd::AskQuestionsController < OrbitBackendController
|
class Panel::Ask::BackEnd::AskQuestionsController < OrbitBackendController
|
||||||
|
|
||||||
|
require 'csv'
|
||||||
|
|
||||||
def initialize
|
# def initialize
|
||||||
super
|
# super
|
||||||
@app_title = 'ask_questions'
|
# @app_title = 'ask_questions'
|
||||||
end
|
# end
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@ask_questions = AskQuestion.all
|
@ask_questions = AskQuestion.all
|
||||||
@@ -53,10 +53,12 @@ class Panel::Ask::BackEnd::AskQuestionsController < OrbitBackendController
|
|||||||
Rails.application.config.mongoid.use_activesupport_time_zone = true
|
Rails.application.config.mongoid.use_activesupport_time_zone = true
|
||||||
date_start = "#{params[:export]['start(1i)']}-#{params[:export]['start(2i)']}-#{params[:export]['start(3i)']}"
|
date_start = "#{params[:export]['start(1i)']}-#{params[:export]['start(2i)']}-#{params[:export]['start(3i)']}"
|
||||||
date_end = "#{params[:export]['end(1i)']}-#{params[:export]['end(2i)']}-#{params[:export]['end(3i)']}"
|
date_end = "#{params[:export]['end(1i)']}-#{params[:export]['end(2i)']}-#{params[:export]['end(3i)']}"
|
||||||
@ask_questions = AskQuestion.includes(:ask_category).includes(:ask_reply).where(:created_at.gte => date_start, :created_at.lte => date_end)
|
#@ask_questions = AskQuestion.includes(:ask_category).includes(:ask_reply).where(:created_at.gte => date_start, :created_at.lte => date_end)
|
||||||
|
@ask_questions = AskQuestion.where(:created_at.gte => date_start, :created_at.lte => date_end)
|
||||||
|
|
||||||
csv = CSV.generate do |csv|
|
csv = CSV.generate do |csv|
|
||||||
csv << [ t('category'),
|
csv << [ t('status'),
|
||||||
|
t('category'),
|
||||||
AskQuestion.human_attribute_name(:name),
|
AskQuestion.human_attribute_name(:name),
|
||||||
AskQuestion.human_attribute_name(:identity),
|
AskQuestion.human_attribute_name(:identity),
|
||||||
AskQuestion.human_attribute_name(:email),
|
AskQuestion.human_attribute_name(:email),
|
||||||
@@ -68,7 +70,8 @@ class Panel::Ask::BackEnd::AskQuestionsController < OrbitBackendController
|
|||||||
AskReply.human_attribute_name(:comment)]
|
AskReply.human_attribute_name(:comment)]
|
||||||
@ask_questions.each do |ask_question|
|
@ask_questions.each do |ask_question|
|
||||||
ask_question.ask_reply ||= AskReply.new
|
ask_question.ask_reply ||= AskReply.new
|
||||||
csv << [ ask_question.ask_category.name,
|
csv << [ ask_question.ask_reply.status,
|
||||||
|
ask_question.category.title,
|
||||||
ask_question.name,
|
ask_question.name,
|
||||||
ask_question.identity,
|
ask_question.identity,
|
||||||
ask_question.email,
|
ask_question.email,
|
||||||
|
|||||||
+104
@@ -1,3 +1,4 @@
|
|||||||
|
# encoding: utf-8
|
||||||
class Panel::Ask::BackEnd::AskRepliesController < OrbitBackendController
|
class Panel::Ask::BackEnd::AskRepliesController < OrbitBackendController
|
||||||
|
|
||||||
include AdminHelper
|
include AdminHelper
|
||||||
@@ -13,19 +14,122 @@ class Panel::Ask::BackEnd::AskRepliesController < OrbitBackendController
|
|||||||
def create
|
def create
|
||||||
@ask_question = AskQuestion.find(params[:ask_question_id])
|
@ask_question = AskQuestion.find(params[:ask_question_id])
|
||||||
@ask_question.ask_reply = AskReply.new(params[:ask_reply])
|
@ask_question.ask_reply = AskReply.new(params[:ask_reply])
|
||||||
|
@ask_reply = @ask_question.ask_reply
|
||||||
@ask_question.save
|
@ask_question.save
|
||||||
|
|
||||||
if @ask_question.ask_reply.send_email?
|
if @ask_question.ask_reply.send_email?
|
||||||
Resque.enqueue(SendAskReplyMail, @ask_reply.ask_question.id)
|
Resque.enqueue(SendAskReplyMail, @ask_reply.ask_question.id)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
status_stack = []
|
||||||
|
new_status = ""
|
||||||
|
params[:ask_reply][:depts].each do |dns|
|
||||||
|
# host = dns.split(":").first # local test
|
||||||
|
|
||||||
|
begin
|
||||||
|
status_stack << send_request(dns, @ask_reply.ask_question, @ask_reply) # local test, switch host to dns if on server
|
||||||
|
rescue
|
||||||
|
status_stack << "fail"
|
||||||
|
end
|
||||||
|
end if params[:ask_reply][:status] == "轉介其他單位"
|
||||||
|
|
||||||
|
success_count = status_stack.count("success")
|
||||||
|
failed_count = status_stack.count("fail")
|
||||||
|
|
||||||
|
if failed_count == 0 && success_count > 0
|
||||||
|
new_status = "轉介其他單位"
|
||||||
|
elsif failed_count > 0 && success_count > 0
|
||||||
|
new_status = "部份轉介失敗"
|
||||||
|
elsif failed_count > 0 && success_count == 0
|
||||||
|
new_status = "轉介失敗"
|
||||||
|
elsif failed_count == 0 && success_count == 0 && @ask_reply.status == "待處理"
|
||||||
|
new_status = "待處理"
|
||||||
|
elsif failed_count == 0 && success_count == 0 && @ask_reply.status == "已處理"
|
||||||
|
new_status = "已處理"
|
||||||
|
elsif failed_count == 0 && success_count == 0 && @ask_reply.status == "轉介其他單位"
|
||||||
|
new_status = "轉介失敗"
|
||||||
|
end
|
||||||
|
|
||||||
|
@ask_reply.update_attributes(status: new_status)
|
||||||
|
|
||||||
redirect_to panel_ask_back_end_ask_questions_path, notice: t('ask.reply_success')
|
redirect_to panel_ask_back_end_ask_questions_path, notice: t('ask.reply_success')
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
|
|
||||||
@ask_reply = AskReply.find(params[:id])
|
@ask_reply = AskReply.find(params[:id])
|
||||||
@ask_reply.update_attributes(params[:ask_reply])
|
@ask_reply.update_attributes(params[:ask_reply])
|
||||||
|
|
||||||
if @ask_reply.send_email?
|
if @ask_reply.send_email?
|
||||||
Resque.enqueue(SendAskReplyMail, @ask_reply.ask_question.id)
|
Resque.enqueue(SendAskReplyMail, @ask_reply.ask_question.id)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
status_stack = []
|
||||||
|
new_status = ""
|
||||||
|
params[:ask_reply][:depts].each do |dns|
|
||||||
|
# host = dns.split(":").first # local test
|
||||||
|
|
||||||
|
begin
|
||||||
|
status_stack << send_request(dns, @ask_reply.ask_question, @ask_reply) # local test, switch host to dns if on server
|
||||||
|
rescue
|
||||||
|
status_stack << "fail"
|
||||||
|
end
|
||||||
|
end if params[:ask_reply][:status] == "轉介其他單位"
|
||||||
|
|
||||||
|
success_count = status_stack.count("success")
|
||||||
|
failed_count = status_stack.count("fail")
|
||||||
|
|
||||||
|
if failed_count == 0 && success_count > 0
|
||||||
|
new_status = "轉介其他單位"
|
||||||
|
elsif failed_count > 0 && success_count > 0
|
||||||
|
new_status = "部份轉介失敗"
|
||||||
|
elsif failed_count > 0 && success_count == 0
|
||||||
|
new_status = "轉介失敗"
|
||||||
|
elsif failed_count == 0 && success_count == 0 && @ask_reply.status == "待處理"
|
||||||
|
new_status = "待處理"
|
||||||
|
elsif failed_count == 0 && success_count == 0 && @ask_reply.status == "已處理"
|
||||||
|
new_status = "已處理"
|
||||||
|
elsif failed_count == 0 && success_count == 0 && @ask_reply.status == "轉介其他單位"
|
||||||
|
new_status = "轉介失敗"
|
||||||
|
end
|
||||||
|
|
||||||
|
@ask_reply.update_attributes(status: new_status)
|
||||||
|
|
||||||
redirect_to panel_ask_back_end_ask_questions_path, notice: t('ask.reply_success')
|
redirect_to panel_ask_back_end_ask_questions_path, notice: t('ask.reply_success')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def send_request(dep_dns, current_question, current_reply)
|
||||||
|
require 'net/http'
|
||||||
|
require 'uri'
|
||||||
|
require 'json'
|
||||||
|
|
||||||
|
uri_path = "/panel/ask/back_end/ask_requests/transferred_request"
|
||||||
|
http = Net::HTTP.new(dep_dns, 80) # port 4000 for local test, switch to port 80 for deployment
|
||||||
|
req = Net::HTTP::Post.new(uri_path)
|
||||||
|
|
||||||
|
body = {
|
||||||
|
'name' => current_question.name,
|
||||||
|
'title' => current_question.title,
|
||||||
|
'identity' => current_question.identity,
|
||||||
|
'email' => current_question.email,
|
||||||
|
'phone' => current_question.phone,
|
||||||
|
'tax' => current_question.tax,
|
||||||
|
'content' => current_question.content
|
||||||
|
}
|
||||||
|
|
||||||
|
status = ""
|
||||||
|
req.set_form_data(body)
|
||||||
|
req.add_field 'X-Auth-Token', '3kjlfksjDFJ'
|
||||||
|
response = http.request(req)
|
||||||
|
|
||||||
|
if response.code == "200"
|
||||||
|
status = "success"
|
||||||
|
else
|
||||||
|
status = "fail"
|
||||||
|
end
|
||||||
|
|
||||||
|
return status
|
||||||
|
end
|
||||||
end
|
end
|
||||||
@@ -6,6 +6,7 @@ class AskReply
|
|||||||
field :comment, type: String
|
field :comment, type: String
|
||||||
field :status, type: String
|
field :status, type: String
|
||||||
field :send_email, type: Boolean, detault: false
|
field :send_email, type: Boolean, detault: false
|
||||||
|
field :depts, :type => Array
|
||||||
|
|
||||||
belongs_to :ask_question
|
belongs_to :ask_question
|
||||||
end
|
end
|
||||||
+62
@@ -1,3 +1,45 @@
|
|||||||
|
<script type="text/javascript">
|
||||||
|
var local_host = "<%= request.host %>";
|
||||||
|
|
||||||
|
// var local_host = "<%= request.host_with_port %>"; // local test
|
||||||
|
|
||||||
|
if (local_host[0] == "g" && local_host[1] == "a") {
|
||||||
|
local_host = "www." + local_host;
|
||||||
|
}
|
||||||
|
|
||||||
|
function hide_current_host_name(localhost) {
|
||||||
|
$('input[type=checkbox]').each(function() {
|
||||||
|
if ($(this).val() == local_host) {
|
||||||
|
$(this).addClass("hide");
|
||||||
|
$(this).next().addClass("hide");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
$(document).ready(function() {
|
||||||
|
|
||||||
|
$('.dept_options').hide();
|
||||||
|
|
||||||
|
if ($("#ask_reply_status").val() == '轉介其他單位') {
|
||||||
|
|
||||||
|
hide_current_host_name(local_host);
|
||||||
|
|
||||||
|
$('.dept_options').show();
|
||||||
|
}
|
||||||
|
|
||||||
|
$("#ask_reply_status").change(function() {
|
||||||
|
|
||||||
|
hide_current_host_name(local_host);
|
||||||
|
|
||||||
|
$('.dept_options').slideUp();
|
||||||
|
if ($(this).find('option:selected').attr('value') == '轉介其他單位') {
|
||||||
|
$('.dept_options').slideDown();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
<div id="ask_question_reply">
|
<div id="ask_question_reply">
|
||||||
<%= form_for @ask_reply, url: @url, method: @method do |f| %>
|
<%= form_for @ask_reply, url: @url, method: @method do |f| %>
|
||||||
<table class="table">
|
<table class="table">
|
||||||
@@ -32,6 +74,26 @@
|
|||||||
['轉介其他單位', '轉介其他單位']
|
['轉介其他單位', '轉介其他單位']
|
||||||
] %></td>
|
] %></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="5" class="dept_options">
|
||||||
|
<div class="checkbox">
|
||||||
|
<!-- <%= check_box("school", "depts", {:multiple => true}, (request.host + ":3000"), nil) %><%= label_tag((request.host + ":3000"), "測試站 3000") %>
|
||||||
|
<%= check_box("school", "depts", {:multiple => true}, (request.host + ":4000"), nil) %><%= label_tag((request.host + ":4000"), "測試站 4000") %> -->
|
||||||
|
<%= check_box("ask_reply", "depts", {:multiple => true}, "www.ga.ntu.edu.tw", nil) %><%= label_tag("www.ga.ntu.edu.tw", "總務處") %>
|
||||||
|
<%= check_box("ask_reply", "depts", {:multiple => true}, "sec.ga.ntu.edu.tw", nil) %><%= label_tag("sec.ga.ntu.edu.tw", "總務長室暨總務處秘書室") %>
|
||||||
|
<%= check_box("ask_reply", "depts", {:multiple => true}, "doc.ga.ntu.edu.tw", nil) %><%= label_tag("doc.ga.ntu.edu.tw", "文書組") %>
|
||||||
|
<%= check_box("ask_reply", "depts", {:multiple => true}, "general.ga.ntu.edu.tw", nil) %><%= label_tag("general.ga.ntu.edu.tw", "事務組") %>
|
||||||
|
<%= check_box("ask_reply", "depts", {:multiple => true}, "property.ga.ntu.edu.tw", nil) %><%= label_tag("property.ga.ntu.edu.tw", "保管組") %>
|
||||||
|
<%= check_box("ask_reply", "depts", {:multiple => true}, "construction.ga.ntu.edu.tw", nil) %><%= label_tag("construction.ga.ntu.edu.tw", "營繕組") %>
|
||||||
|
<%= check_box("ask_reply", "depts", {:multiple => true}, "cashier.ga.ntu.edu.tw", nil) %><%= label_tag("cashier.ga.ntu.edu.tw", "出納組") %>
|
||||||
|
<%= check_box("ask_reply", "depts", {:multiple => true}, "procurement.ga.ntu.edu.tw", nil) %><%= label_tag("procurement.ga.ntu.edu.tw", "採購組") %>
|
||||||
|
<%= check_box("ask_reply", "depts", {:multiple => true}, "fss.ga.ntu.edu.tw", nil) %><%= label_tag("fss.ga.ntu.edu.tw", "經營管理組") %>
|
||||||
|
<%= check_box("ask_reply", "depts", {:multiple => true}, "police.ga.ntu.edu.tw", nil) %><%= label_tag("police.ga.ntu.edu.tw", "駐警隊") %>
|
||||||
|
<%= check_box("ask_reply", "depts", {:multiple => true}, "social.ga.ntu.edu.tw", nil) %><%= label_tag("social.ga.ntu.edu.tw", "社科院總務分處") %>
|
||||||
|
<%= check_box("ask_reply", "depts", {:multiple => true}, "medicine.ga.ntu.edu.tw", nil) %><%= label_tag("medicine.ga.ntu.edu.tw", "醫學院總務分處") %>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="5">
|
<td colspan="5">
|
||||||
<%= f.label :send_email %><%= f.radio_button :send_email, 1, checked: @ask_reply.send_email? %><%= t('ask.yes') %>
|
<%= f.label :send_email %><%= f.radio_button :send_email, 1, checked: @ask_reply.send_email? %><%= t('ask.yes') %>
|
||||||
|
|||||||
+3
@@ -84,8 +84,11 @@ $(document).ready(function(){
|
|||||||
<%= f.text_area :content, rows: 8, class: 'input-xlarge' %>
|
<%= f.text_area :content, rows: 8, class: 'input-xlarge' %>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="control-group">
|
<div class="control-group">
|
||||||
|
<%= f.label t('ask.validate_code'), class: 'control-label required' %>
|
||||||
<div class="controls">
|
<div class="controls">
|
||||||
|
<label><%= t('ask.validate_code_note') %></label>
|
||||||
<%= gotcha_error %>
|
<%= gotcha_error %>
|
||||||
<%= gotcha%>
|
<%= gotcha%>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -17,6 +17,8 @@ en:
|
|||||||
admin: Administrator
|
admin: Administrator
|
||||||
new_question: New question
|
new_question: New question
|
||||||
pending: Pending
|
pending: Pending
|
||||||
|
validate_code: Verification code
|
||||||
|
validate_code_note: Please answer the following verification questions.
|
||||||
mongoid:
|
mongoid:
|
||||||
attributes:
|
attributes:
|
||||||
ask_question:
|
ask_question:
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ zh_tw:
|
|||||||
admin: 管理者
|
admin: 管理者
|
||||||
new_question: 新的發問
|
new_question: 新的發問
|
||||||
pending: 待處理
|
pending: 待處理
|
||||||
|
validate_code: 驗證碼
|
||||||
|
validate_code_note: 請回答下列驗證問句。
|
||||||
mongoid:
|
mongoid:
|
||||||
attributes:
|
attributes:
|
||||||
ask_question:
|
ask_question:
|
||||||
|
|||||||
@@ -15,6 +15,8 @@ Rails.application.routes.draw do
|
|||||||
resources :ask_categories
|
resources :ask_categories
|
||||||
resources :ask_acknowledgements
|
resources :ask_acknowledgements
|
||||||
resources :ask_admins
|
resources :ask_admins
|
||||||
|
|
||||||
|
match "ask_requests/transferred_request" => "ask_requests#transferred_request", :as => 'transferred_request', :via => :post
|
||||||
end
|
end
|
||||||
|
|
||||||
namespace :front_end do
|
namespace :front_end do
|
||||||
|
|||||||
+29
@@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
<% @job_title_field = @member_lists.get_member_list_attribute_field("staff","job_title") %>
|
<% @job_title_field = @member_lists.get_member_list_attribute_field("staff","job_title") %>
|
||||||
<% @job_business_field = @member_lists.get_member_list_attribute_field("staff","business") %>
|
<% @job_business_field = @member_lists.get_member_list_attribute_field("staff","business") %>
|
||||||
|
<% @job_agent_field = @member_lists.get_member_list_attribute_field("staff","agent") %>
|
||||||
|
|
||||||
<% if @item.frontend_style == 'Single' or @item.frontend_style == 'Two' %>
|
<% if @item.frontend_style == 'Single' or @item.frontend_style == 'Two' %>
|
||||||
|
|
||||||
@@ -58,6 +59,15 @@
|
|||||||
<%= @job_business %>
|
<%= @job_business %>
|
||||||
</li>
|
</li>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
<% @job_agent = @member_lists.get_member_list_attribute_value(member.id,@job_agent_field.id).get_value_by_locale(I18n.locale)
|
||||||
|
if @job_agent != 'NoData' and !@job_agent.blank?
|
||||||
|
%>
|
||||||
|
<li><b class="o-members-label">
|
||||||
|
<%= @job_agent_field.title %></b>
|
||||||
|
<%= @job_agent %>
|
||||||
|
</li>
|
||||||
|
<% end %>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
@@ -110,6 +120,15 @@
|
|||||||
<%= @job_business %>
|
<%= @job_business %>
|
||||||
</li>
|
</li>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
<% @job_agent = @member_lists.get_member_list_attribute_value(member.id,@job_agent_field.id).get_value_by_locale(I18n.locale)
|
||||||
|
if @job_agent != 'NoData' and !@job_agent.blank?
|
||||||
|
%>
|
||||||
|
<li><b class="o-members-label">
|
||||||
|
<%= @job_agent_field.title %></b>
|
||||||
|
<%= @job_agent %>
|
||||||
|
</li>
|
||||||
|
<% end %>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
@@ -153,6 +172,7 @@
|
|||||||
<td><span class="name"><%= t("users.name")%></span></td>
|
<td><span class="name"><%= t("users.name")%></span></td>
|
||||||
<td><span class="tel"><%= t("users.office_tel")%></span></td>
|
<td><span class="tel"><%= t("users.office_tel")%></span></td>
|
||||||
<td><span class="business"><%= @job_business_field.title %></span></td>
|
<td><span class="business"><%= @job_business_field.title %></span></td>
|
||||||
|
<td><span class="agent"><%= @job_agent_field.title %></span></td>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
|
|
||||||
@@ -181,6 +201,15 @@
|
|||||||
<% end %>
|
<% end %>
|
||||||
</span>
|
</span>
|
||||||
</td>
|
</td>
|
||||||
|
<td>
|
||||||
|
<span class="agent">
|
||||||
|
<% @job_agent = @member_lists.get_member_list_attribute_value(member.id,@job_agent_field.id).get_value_by_locale(I18n.locale)
|
||||||
|
if @job_agent != 'NoData' and !@job_agent.blank?
|
||||||
|
%>
|
||||||
|
<%= @job_agent %>
|
||||||
|
<% end %>
|
||||||
|
</span>
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|||||||
+1
@@ -48,6 +48,7 @@ class Panel::PageContent::BackEnd::PageContextsController < OrbitBackendControll
|
|||||||
# GET /page_contexts/1/edit
|
# GET /page_contexts/1/edit
|
||||||
def edit
|
def edit
|
||||||
@page_context = PageContext.find(params[:id])
|
@page_context = PageContext.find(params[:id])
|
||||||
|
@users = @page_context.get_users
|
||||||
end
|
end
|
||||||
|
|
||||||
# POST /page_contexts
|
# POST /page_contexts
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ class PageContext
|
|||||||
field :update_user_id
|
field :update_user_id
|
||||||
field :version, :type => Integer , :default => 0
|
field :version, :type => Integer , :default => 0
|
||||||
field :view_count, :type => Integer, :default => 0
|
field :view_count, :type => Integer, :default => 0
|
||||||
|
field :user_ids
|
||||||
|
|
||||||
field :archived, :type => Boolean, :default => false
|
field :archived, :type => Boolean, :default => false
|
||||||
# field :current, :type => Boolean, :default => false
|
# field :current, :type => Boolean, :default => false
|
||||||
@@ -36,5 +37,9 @@ class PageContext
|
|||||||
def title
|
def title
|
||||||
self.page.title
|
self.page.title
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def get_users
|
||||||
|
User.find(self.user_ids) rescue []
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
+27
@@ -4,6 +4,33 @@
|
|||||||
|
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<div class="input-area">
|
<div class="input-area">
|
||||||
|
|
||||||
|
<!-- Module Tabs -->
|
||||||
|
<div class="nav-name"><strong><%= t(:module) %></strong></div>
|
||||||
|
<ul class="nav nav-pills module-nav">
|
||||||
|
<li class="active">
|
||||||
|
<a href="#basic" data-toggle="tab"><%= t(:basic) %></a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<!-- Module -->
|
||||||
|
<div class="tab-content module-area">
|
||||||
|
|
||||||
|
<!-- Basic Module -->
|
||||||
|
<div class="tab-pane fade in active" id="basic">
|
||||||
|
|
||||||
|
<!-- Promoter -->
|
||||||
|
<div class="control-group">
|
||||||
|
<label class="control-label muted"><%= t(:promoter) %></label>
|
||||||
|
<div class="controls">
|
||||||
|
<%= render partial: 'admin/member_selects/selection_box', locals: {field: 'page_context[user_ids][]', users: @users} %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- Language Tabs -->
|
<!-- Language Tabs -->
|
||||||
<div class="nav-name"><strong><%= t(:language) %></strong></div>
|
<div class="nav-name"><strong><%= t(:language) %></strong></div>
|
||||||
<ul class="nav nav-pills language-nav">
|
<ul class="nav nav-pills language-nav">
|
||||||
|
|||||||
+1
-1
@@ -8,4 +8,4 @@
|
|||||||
|
|
||||||
<div class="page_content"><%= @page_context.context.html_safe rescue '' %></div>
|
<div class="page_content"><%= @page_context.context.html_safe rescue '' %></div>
|
||||||
|
|
||||||
|
<%= render partial: 'admin/member_selects/promoter_front', locals: {users: @page_context.get_users} %>
|
||||||
+170
-26
@@ -1,7 +1,9 @@
|
|||||||
require 'csv'
|
|
||||||
|
|
||||||
class Panel::Survey::BackEnd::SurveysController < OrbitBackendController
|
class Panel::Survey::BackEnd::SurveysController < OrbitBackendController
|
||||||
|
|
||||||
|
require 'csv'
|
||||||
|
require 'iconv'
|
||||||
|
require 'roo'
|
||||||
|
|
||||||
include AdminHelper
|
include AdminHelper
|
||||||
include OrbitControllerLib::DivisionForDisable
|
include OrbitControllerLib::DivisionForDisable
|
||||||
|
|
||||||
@@ -105,6 +107,145 @@ class Panel::Survey::BackEnd::SurveysController < OrbitBackendController
|
|||||||
redirect_to panel_survey_back_end_surveys_url(:direction => params[:direction], :sort => params[:sort], :sort_options => params[:sort_options])
|
redirect_to panel_survey_back_end_surveys_url(:direction => params[:direction], :sort => params[:sort], :sort_options => params[:sort_options])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def set_import
|
||||||
|
@survey = ::Survey.find(params[:id])
|
||||||
|
end
|
||||||
|
|
||||||
|
def import
|
||||||
|
@survey = ::Survey.find(params[:id])
|
||||||
|
@chart_data, @survey_questions, @survey_answers = @survey.generate_chart_data
|
||||||
|
@file = params[:file]
|
||||||
|
|
||||||
|
case File.extname(@file.original_filename)
|
||||||
|
when ".csv" then @spreadsheet = Roo::CSV.new(@file.path, csv_options: {encoding: Encoding::Big5})
|
||||||
|
# when ".xls" then Excel.new(file.path, nil, :ignore)
|
||||||
|
# when ".xlsx" then Excelx.new(file.path, nil, :ignore)
|
||||||
|
else raise "Unknown file type: #{file.original_filename}"
|
||||||
|
end
|
||||||
|
|
||||||
|
# Modify titles if changed
|
||||||
|
titles = @spreadsheet.row(1) - [" "]
|
||||||
|
@survey_questions.each_with_index do |question, index|
|
||||||
|
question.update_attributes(title: titles[index])
|
||||||
|
end
|
||||||
|
|
||||||
|
@survey_answers.destroy
|
||||||
|
|
||||||
|
# Start and end of speadsheet
|
||||||
|
@end_row = @spreadsheet.count
|
||||||
|
|
||||||
|
@max_row_start = 0
|
||||||
|
@survey_questions.each do |question|
|
||||||
|
case question.type
|
||||||
|
when ::SurveyQuestion::Radio, ::SurveyQuestion::Select, ::SurveyQuestion::Check
|
||||||
|
if question.survey_question_options.count > @max_row_start
|
||||||
|
@max_row_start = question.survey_question_options.count
|
||||||
|
end
|
||||||
|
when ::SurveyQuestion::Radiogroup
|
||||||
|
if question.survey_question_options.count * question.survey_question_radiogroups.count > @max_row_start
|
||||||
|
@max_row_start = question.survey_question_options.count * question.survey_question_radiogroups.count
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
@start_row = @max_row_start + 2
|
||||||
|
|
||||||
|
# Modify multiline options if changed
|
||||||
|
(@start_row..@end_row).each do |row|
|
||||||
|
@answer_model = @survey.survey_answers.new
|
||||||
|
@survey_questions.each_with_index do |question, index|
|
||||||
|
case question.type
|
||||||
|
|
||||||
|
when ::SurveyQuestion::Oneline, ::SurveyQuestion::Multiline
|
||||||
|
@answer_model[question.id.to_s] = @spreadsheet.row(row)[index * 2]
|
||||||
|
|
||||||
|
when ::SurveyQuestion::Radio, ::SurveyQuestion::Select
|
||||||
|
if !@spreadsheet.row(row)[index*2].nil? && @spreadsheet.row(row)[index*2] != " "
|
||||||
|
@answer_model[question.id.to_s] = @spreadsheet.row(row)[index*2]
|
||||||
|
end
|
||||||
|
|
||||||
|
when ::SurveyQuestion::Check
|
||||||
|
if !@spreadsheet.row(row)[index*2].nil? && @spreadsheet.row(row)[index*2] != " "
|
||||||
|
@answer_model[question.id.to_s] = @spreadsheet.row(row)[index*2].split("\"").select.each_with_index { |str, i| i.odd? }
|
||||||
|
end
|
||||||
|
|
||||||
|
when ::SurveyQuestion::Radiogroup
|
||||||
|
radio_groups = []
|
||||||
|
spreadsheet_radiogroups_lines =
|
||||||
|
question.survey_question_options.count * question.survey_question_radiogroups.count + 2
|
||||||
|
|
||||||
|
# Grab each radiogroups line for update
|
||||||
|
(2...spreadsheet_radiogroups_lines).each do |line|
|
||||||
|
radio_groups << @spreadsheet.row(line)[index * 2]
|
||||||
|
end
|
||||||
|
|
||||||
|
# Grab answers info
|
||||||
|
answers = []
|
||||||
|
if not @spreadsheet.row(row)[index * 2].blank?
|
||||||
|
answers << eval(@spreadsheet.row(row)[index * 2])
|
||||||
|
end
|
||||||
|
|
||||||
|
# Save the answers
|
||||||
|
answers.each do |answer|
|
||||||
|
options = Hash[question.survey_question_options.collect { |o| [ o.id.to_s, o.name ] }]
|
||||||
|
# @answer_model = @survey.survey_answers.new
|
||||||
|
@answer_model[question.id.to_s] = {}
|
||||||
|
|
||||||
|
answer.each do |option, value|
|
||||||
|
@answer_model[question.id.to_s][options.invert[option]] = value
|
||||||
|
end
|
||||||
|
|
||||||
|
# @answer_model.save!
|
||||||
|
end
|
||||||
|
|
||||||
|
# Parse the needed info in the array
|
||||||
|
radio_titles = []
|
||||||
|
radio_options = []
|
||||||
|
radio_groups.each do |group|
|
||||||
|
option_with_radio = group.split(' - ')
|
||||||
|
radio_titles << option_with_radio[0]
|
||||||
|
radio_options << option_with_radio[1]
|
||||||
|
end
|
||||||
|
|
||||||
|
# Update the spreadsheet info to the DB
|
||||||
|
groups_of_options = []
|
||||||
|
groups_of_radios = []
|
||||||
|
radio_titles.each_slice(question.survey_question_radiogroups.count) do |options|
|
||||||
|
groups_of_options << options
|
||||||
|
end
|
||||||
|
|
||||||
|
radio_options.each_slice(question.survey_question_radiogroups.count) do |options|
|
||||||
|
groups_of_radios << options
|
||||||
|
end
|
||||||
|
|
||||||
|
# Update option names
|
||||||
|
question.survey_question_options.each_with_index do |option, index|
|
||||||
|
groups_of_options[index].each do |modified_option|
|
||||||
|
if option.name_translations["zh_tw"] != modified_option
|
||||||
|
option.update_attributes(name: modified_option)
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Update radio names
|
||||||
|
question.survey_question_radiogroups.each_with_index do |option, index|
|
||||||
|
groups_of_radios.each do |radios|
|
||||||
|
if radios[index] != option.name_translations["zh_tw"]
|
||||||
|
option.update_attributes(name: radios[index])
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
@answer_model.save!
|
||||||
|
|
||||||
|
end #end row
|
||||||
|
|
||||||
|
redirect_to panel_survey_back_end_surveys_url, :notice => :success
|
||||||
|
end
|
||||||
|
|
||||||
def export
|
def export
|
||||||
@survey = ::Survey.find(params[:id])
|
@survey = ::Survey.find(params[:id])
|
||||||
@chart_data, @survey_questions, @survey_answers = @survey.generate_chart_data
|
@chart_data, @survey_questions, @survey_answers = @survey.generate_chart_data
|
||||||
@@ -199,6 +340,7 @@ class Panel::Survey::BackEnd::SurveysController < OrbitBackendController
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@survey.survey_questions.all.each do |question|
|
@survey.survey_questions.all.each do |question|
|
||||||
new_question = @new_survey.survey_questions.new
|
new_question = @new_survey.survey_questions.new
|
||||||
question.attributes.each do |key, value|
|
question.attributes.each do |key, value|
|
||||||
@@ -210,30 +352,32 @@ class Panel::Survey::BackEnd::SurveysController < OrbitBackendController
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
question.survey_question_options.all.each do |option|
|
|
||||||
new_option = new_question.survey_question_options.new
|
# question.survey_question_options.all.each do |option|
|
||||||
option.attributes.each do |key, value|
|
# new_option = new_question.survey_question_options.new
|
||||||
unless ['_id', 'survey_question_id'].include? key
|
# option.attributes.each do |key, value|
|
||||||
if option.respond_to?(key + '_translations')
|
# unless ['_id', 'survey_question_id'].include? key
|
||||||
new_option.send(key + '_translations=', value)
|
# if option.respond_to?(key + '_translations')
|
||||||
else
|
# new_option.name_translations = value
|
||||||
new_option.write_attribute(key, value)
|
# else
|
||||||
end
|
# new_option.write_attribute(key, value)
|
||||||
end
|
# end
|
||||||
end
|
# end
|
||||||
end
|
# end
|
||||||
question.survey_question_radiogroups.all.each do |radiogroup|
|
# end
|
||||||
new_radiogroup = new_question.survey_question_radiogroups.new
|
|
||||||
radiogroup.attributes.each do |key, value|
|
# question.survey_question_radiogroups.all.each do |radiogroup|
|
||||||
unless ['_id', 'survey_question_id'].include? key
|
# new_radiogroup = new_question.survey_question_radiogroups.new
|
||||||
if radiogroup.respond_to?(key + '_translations')
|
# radiogroup.attributes.each do |key, value|
|
||||||
new_radiogroup.send(key + '_translations=', value)
|
# unless ['_id', 'survey_question_id'].include? key
|
||||||
else
|
# if radiogroup.respond_to?(key + '_translations')
|
||||||
new_radiogroup.write_attribute(key, value)
|
# new_option.name_translations = value
|
||||||
end
|
# else
|
||||||
end
|
# new_radiogroup.write_attribute(key, value)
|
||||||
end
|
# end
|
||||||
end
|
# end
|
||||||
|
# end
|
||||||
|
# end
|
||||||
end
|
end
|
||||||
|
|
||||||
@new_survey.create_user_id = current_user.id
|
@new_survey.create_user_id = current_user.id
|
||||||
|
|||||||
+2
-1
@@ -13,7 +13,8 @@
|
|||||||
<li><%= link_to t('survey.duplicate_it'), duplicate_it_panel_survey_back_end_survey_path(survey, :page => params[:page]) %></li>
|
<li><%= link_to t('survey.duplicate_it'), duplicate_it_panel_survey_back_end_survey_path(survey, :page => params[:page]) %></li>
|
||||||
<li><%= link_to t('survey.jump'), jump_panel_survey_back_end_survey_path(survey, :page => params[:page]) %></li>
|
<li><%= link_to t('survey.jump'), jump_panel_survey_back_end_survey_path(survey, :page => params[:page]) %></li>
|
||||||
<li><%= link_to t('survey.set_answers'), set_answers_panel_survey_back_end_survey_path(survey, :page => params[:page]) %></li>
|
<li><%= link_to t('survey.set_answers'), set_answers_panel_survey_back_end_survey_path(survey, :page => params[:page]) %></li>
|
||||||
<li><%= link_to t('survey.export_csv'), export_panel_survey_back_end_survey_path(survey, :format => :csv), :target => '_blank' %></li>
|
<li><%= link_to t('survey.export_csv'), export_panel_survey_back_end_survey_path(survey, :format => :csv) %></li>
|
||||||
|
<li><%= link_to t('survey.import_csv'), set_import_panel_survey_back_end_survey_path(survey) %></li>
|
||||||
<li><%= link_to t('survey.chart'), result_panel_survey_front_end_survey_path(survey, :force_chart => true, :standalone => true), :target => '_blank' %></li>
|
<li><%= link_to t('survey.chart'), result_panel_survey_front_end_survey_path(survey, :force_chart => true, :standalone => true), :target => '_blank' %></li>
|
||||||
<li><%= link_to t(:delete_), panel_survey_back_end_survey_path(survey), :confirm => t('sure?'), :method => :delete, :remote => true %></li>
|
<li><%= link_to t(:delete_), panel_survey_back_end_survey_path(survey), :confirm => t('sure?'), :method => :delete, :remote => true %></li>
|
||||||
<% end -%>
|
<% end -%>
|
||||||
|
|||||||
+18
@@ -0,0 +1,18 @@
|
|||||||
|
<%= form_tag import_panel_survey_back_end_survey_path(@survey), multipart: true do %>
|
||||||
|
<table class="table main-list">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th class="span2"><%= t('survey.title') %></th>
|
||||||
|
<th class="span2"></th>
|
||||||
|
<th class="span2"></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody id="tbody_surveys" class="sort-holder">
|
||||||
|
<tr>
|
||||||
|
<td><%= @survey.title %></td>
|
||||||
|
<td><%= file_field_tag :file %></td>
|
||||||
|
<td><%= submit_tag t("survey.import_csv"), :class => 'btn' %></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<% end %>
|
||||||
@@ -24,6 +24,7 @@ en:
|
|||||||
answer_error: Unsuccessful answer
|
answer_error: Unsuccessful answer
|
||||||
|
|
||||||
answers_list: Answers List
|
answers_list: Answers List
|
||||||
|
import_csv: Import CSV
|
||||||
export_csv: Export CSV
|
export_csv: Export CSV
|
||||||
chart: Chart
|
chart: Chart
|
||||||
set_answers: Set Answers
|
set_answers: Set Answers
|
||||||
|
|||||||
+2
-1
@@ -25,6 +25,7 @@ zh_tw:
|
|||||||
answer_error: 問卷填寫錯誤
|
answer_error: 問卷填寫錯誤
|
||||||
|
|
||||||
answers_list: 結果清單
|
answers_list: 結果清單
|
||||||
|
import_csv: 匯入CSV
|
||||||
export_csv: 匯出CSV
|
export_csv: 匯出CSV
|
||||||
chart: 結果圖表
|
chart: 結果圖表
|
||||||
set_answers: 設定結果
|
set_answers: 設定結果
|
||||||
@@ -80,4 +81,4 @@ zh_tw:
|
|||||||
have_not_chart: 此種類型問題不含結果圖表
|
have_not_chart: 此種類型問題不含結果圖表
|
||||||
|
|
||||||
move_up: 上移
|
move_up: 上移
|
||||||
move_down: 下移
|
move_down: 下移
|
||||||
+3
-1
@@ -9,6 +9,8 @@ Rails.application.routes.draw do
|
|||||||
end
|
end
|
||||||
member do
|
member do
|
||||||
get 'export'
|
get 'export'
|
||||||
|
get 'set_import'
|
||||||
|
post 'import'
|
||||||
get 'set_answers'
|
get 'set_answers'
|
||||||
get 'jump'
|
get 'jump'
|
||||||
get 'duplicate_it'
|
get 'duplicate_it'
|
||||||
@@ -30,4 +32,4 @@ Rails.application.routes.draw do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
match "/appfront/*path" => redirect("/panel/*path")
|
match "/appfront/*path" => redirect("/panel/*path")
|
||||||
end
|
end
|
||||||
Reference in new issue
Block a user