Author SHA1 Message Date
Manson Wang f1f9754f22 Final test for update manager 2014-01-13 17:29:53 +08:00
Manson Wang 80119ec9e8 Update Manager 2014-01-13 17:24:57 +08:00
144 changed files with 98 additions and 3983 deletions

No files matched your search

-1
View File
@@ -43,7 +43,6 @@ 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
View File
@@ -1,3 +1,4 @@
# Ruling Orbit # Ruling Orbit
RulingSite-s Version 4.0 Beta RulingSite-s Version 4.0 Beta
Update Manager!
Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

@@ -1,33 +0,0 @@
window.SocialShareButton =
openUrl : (url) ->
window.open(url)
false
share : (el) ->
site = $(el).data('site')
title = encodeURIComponent($(el).parent().data('title'))
img = encodeURIComponent($(el).parent().data("img"))
fb_url = encodeURIComponent($(el).parent().data("fb_url"))
url = encodeURIComponent(location.href)
switch site
when "weibo"
SocialShareButton.openUrl("http://v.t.sina.com.cn/share/share.php?url=#{url}&pic=#{img}&title=#{title}&content=utf-8")
when "twitter"
SocialShareButton.openUrl("https://twitter.com/home?status=#{title}: #{url}")
when "douban"
SocialShareButton.openUrl("http://www.douban.com/recommend/?url=#{url}&title=#{title}&image=#{img}")
when "facebook"
SocialShareButton.openUrl("http://www.facebook.com/sharer.php?t=#{title}&u=#{fb_url}")
when "qq"
SocialShareButton.openUrl("http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=#{url}&title=#{title}&pics=#{img}")
when "tqq"
SocialShareButton.openUrl("http://share.v.t.qq.com/index.php?c=share&a=index&url=#{url}&title=#{title}&pic=#{img}")
when "baidu"
SocialShareButton.openUrl("http://apps.hi.baidu.com/share/?url=#{url}&title=#{title}&content=")
when "kaixin001"
SocialShareButton.openUrl("http://www.kaixin001.com/rest/records.php?url=#{url}&content=#{title}&style=11&pic=#{img}")
when "renren"
SocialShareButton.openUrl("http://widget.renren.com/dialog/share?resourceUrl=#{url}&title=#{title}&description=")
when "google_plus"
SocialShareButton.openUrl("https://plus.google.com/share?url=#{url}&t=#{title}")
false
+1 -6
View File
@@ -10,7 +10,7 @@ $(document).ready(function() {
type: 'GET', type: 'GET',
url: $(this).attr("rel"), url: $(this).attr("rel"),
dataType: 'script', dataType: 'script',
data: {field: $(this).attr("field"), ids: ids}, data: {ids: ids},
success: function (msg) { success: function (msg) {
$("#member-filter").modal('show'); }, $("#member-filter").modal('show'); },
error: function(){ error: function(){
@@ -20,11 +20,6 @@ $(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');
@@ -1,10 +0,0 @@
$(document).ajaxStop(function() {
$('.nav').find('.dropdown').on({
mouseleave: function() {
$(this).removeClass("open");
},
mouseenter: function() {
$(this).addClass("open")
}
});
});
-230
View File
@@ -1,230 +0,0 @@
/* Member Filter */
#select_user #select_user_modal.modal {
width: 80%;
margin-left: -40%;
}
#select_user #select_user_modal .modal-body {
max-height: 425px;
}
#select_user #select_user_modal .modal-body form {
margin-bottom: 0px;
}
#select_user #select_user_modal .modal-body form fieldset {
min-height: 360px;
}
#select_user #select_user_modal .modal-body .radio.inline,
#select_user #select_user_modal .modal-body .checkbox.inline {
display: inline-block;
padding-top: 5px;
margin-bottom: 0;
vertical-align: middle;
min-width: 100px;
margin-left: 0;
}
#select_user #select_user_modal .modal-body .form-actions {
margin: 20px 0 0;
padding: 10px 0 0;
background-color: transparent;
text-align: right;
}
#select_user #select_user_modal .modal-body .tabs-left > .nano {
width: 160px;
min-height: 425px;
float: left;
}
#select_user #select_user_modal .modal-body .tabs-left > .nano .pane {
right: 6px;
}
#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs {
width: 140px;
float: left;
margin-bottom: 0;
margin-right: 0;
border-right: 1px solid #ddd;
border-bottom: none;
}
#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs > li {
float: none;
}
#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs > li > a {
min-width: 74px;
margin-right: 0;
margin-bottom: 3px;
}
#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs > li > a {
margin-right: -1px;
-webkit-border-radius: 4px 0 0 4px;
-moz-border-radius: 4px 0 0 4px;
border-radius: 4px 0 0 4px;
}
#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs > li > a:hover {
border-color: #eeeeee #dddddd #eeeeee #eeeeee;
}
#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs .active > a,
#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs .active > a:hover {
border-color: #ddd transparent #ddd #ddd;
*border-right-color: #ffffff;
}
#select_user #select_user_modal .member-filter-options {
float: left;
display: inline-block;
width: 175px;
min-height: 425px;
margin-right: 10px;
padding: 0 10px 0 0;
}
#select_user #select_user_modal .member-filter-options select {
width: 165px;
}
#select_user #select_user_modal .member-filter-options .btn {
display: block;
}
#select_user #select_user_modal .member-filter-result {
padding-left: 15px;
min-height: 360px;
width: auto;
}
/* Check Box Card */
.checkbox-card {
margin: 0;
}
.checkbox-card li {
position: relative;
list-style: none;
color: #FFFFFF;
width: 180px;
height: 40px;
margin: 0 10px 10px 0;
float: left;
display: inline-block;
background-color: #cccccc;
overflow: hidden;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
-webkit-transition: all .2s linear;
-moz-transition: all .2s linear;
-o-transition: all .2s linear;
transition: all .2s linear;
}
.checkbox-card li.mark {
width: 0;
height: 0;
padding: 0;
margin: 0;
-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
filter: alpha(opacity=0);
opacity: 0;
visibility: hidden;
}
.checkbox-card li:hover {
background-color: #0088cc;
}
.checkbox-card li:after {
content: "";
display: block;
clear: both;
height: 0;
visibility: hidden;
}
.checkbox-card li.active:before {
-webkit-text-size-adjust : none;
font-family: FontAwesome;
font-weight: normal;
font-style: normal;
color: #FFF;
text-decoration: inherit;
content: "\f00c";
position: absolute;
right: 0px;
top: 0px;
line-height: 14px;
text-indent: 10px;
font-size: 10px;
width: 0px;
height: 0px;
border-style: solid;
border-width: 0 22px 22px 0;
border-color: transparent #51a351 transparent transparent;
}
.checkbox-card li.active label {
}
.checkbox-card li label {
margin-bottom: 0px;
overflow: hidden;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
}
.checkbox-card li input {
opacity: 0;
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
margin: 0;
z-index: 10;
}
.checkbox-card li label span {
-webkit-text-size-adjust : none;
font-size: 10px;
display: block;
width: 130px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
color: #666666;
margin-top: -3px;
}
.checkbox-card li:hover label span,
.checkbox-card li:hover label span.user-name {
color: #FFFFFF;
}
.checkbox-card li label span.user-name {
font-size: 12px;
color: #363636;
padding: 2px 0 0;
margin-top: 0;
}
.checkbox-card li .user-pic {
float: left;
margin-right: 5px;
width: 40px;
height: 40px;
}
#selected_users .selected_user {
display: block;
margin-bottom: 5px;
}
#selected_users .selected_user .remove_user {
font-size: 15px;
}
/*
.promoter {
border-color: #CCCCCC;
border-style: solid;
border-width: 0 1px;
padding: 0 10px 5px 10px;
}
.promoter > div {
border-bottom: 1px solid #CCCCCC;
}
.promoter > div:after {
content: "";
clear: both;
display: block;
visibility: hidden;
}
.promoter > div > span {
display: block;
margin-left: 70px;
padding-bottom: 5px;
}
.promoter p {
width: 70px;
float: left;
text-align:right;
}*/
@@ -1,90 +0,0 @@
.social-share-button-baidu {
display:inline-block;
width:16px;
height:16px;
background:url("/assets/social-share-button.png") 0px 0px no-repeat;
}
.social-share-button-delicious {
display:inline-block;
width:16px;
height:16px;
background:url("/assets/social-share-button.png") -16px 0px no-repeat;
}
.social-share-button-douban {
display:inline-block;
width:16px;
height:16px;
background:url("/assets/social-share-button.png") 0px -16px no-repeat;
}
.social-share-button-email {
display:inline-block;
width:16px;
height:16px;
background:url("/assets/social-share-button.png") -16px -16px no-repeat;
}
.social-share-button-facebook {
display:inline-block;
width:16px;
height:16px;
background:url("/assets/social-share-button.png") -32px 0px no-repeat;
}
.social-share-button-flickr {
display:inline-block;
width:16px;
height:16px;
background:url("/assets/social-share-button.png") -32px -16px no-repeat;
}
.social-share-button-google {
display:inline-block;
width:16px;
height:16px;
background:url("/assets/social-share-button.png") 0px -32px no-repeat;
}
.social-share-button-google_plus {
display:inline-block;
width:16px;
height:16px;
background:url("/assets/social-share-button.png") -16px -32px no-repeat;
}
.social-share-button-kaixin001 {
display:inline-block;
width:16px;
height:16px;
background:url("/assets/social-share-button.png") -32px -32px no-repeat;
}
.social-share-button-qq {
display:inline-block;
width:16px;
height:16px;
background:url("/assets/social-share-button.png") -48px 0px no-repeat;
}
.social-share-button-renren {
display:inline-block;
width:16px;
height:16px;
background:url("/assets/social-share-button.png") -48px -16px no-repeat;
}
.social-share-button-tqq {
display:inline-block;
width:16px;
height:16px;
background:url("/assets/social-share-button.png") -48px -32px no-repeat;
}
.social-share-button-twitter {
display:inline-block;
width:16px;
height:16px;
background:url("/assets/social-share-button.png") 0px -48px no-repeat;
}
.social-share-button-weibo {
display:inline-block;
width:16px;
height:16px;
background:url("/assets/social-share-button.png") -16px -48px no-repeat;
}
.social-share-button-rss {
display:inline-block;
width:16px;
height:16px;
background:url("/assets/social-share-button.png") -32px -48px no-repeat;
}
@@ -1,48 +1,9 @@
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 = STORE_CONFIG[:store_settings]["url"] @@store_domain = "http://store.tp.rulingcom.com"
def index def index
@store = @@store_domain @store = @@store_domain
@templates = JSON.parse(get_templates) @templates = JSON.parse(get_templates)
@@ -33,4 +33,6 @@ class Admin::TemplateStoreController < OrbitBackendController
response.body response.body
end end
end end
+2 -2
View File
@@ -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.where(:_id=>params[:id]).first item = model.find(params[:id])
@item = Item.where(:category => [item.category_id.to_s]).first if !module_app.has_category.blank? and !item.blank? @item = Item.where(:category => [item.category_id.to_s]).first if !module_app.has_category.blank?
end end
end end
-34
View File
@@ -1,34 +0,0 @@
class SamlLoginsController < ApplicationController
require "net/http"
require "uri"
require 'rexml/document'
include REXML
def index
if params[:wa] == "wsignoutcleanup1.0" #logout
redirect_to :root
else #login
@wresult = params[:wresult]
@wctx = params[:wctx]
@main_url = LIST[:sites][@wctx]['url']
@main_public_key = LIST[:sites][@wctx]['key']
@doc = REXML::Document.new @wresult
public_key = OpenSSL::PKey::RSA.new(@main_public_key)
encrypted_data = public_key.public_encrypt(@doc.elements["//saml:AttributeValue"].text)
redirect_to "http://#{@main_url}/user_login?" + { :wresult => encrypted_data }.to_param
end
end
end
-40
View File
@@ -1,40 +0,0 @@
# 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
+3 -8
View File
@@ -193,9 +193,8 @@ 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
@@ -204,12 +203,8 @@ 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
@@ -306,7 +301,7 @@ module ApplicationHelper
# NTU link # NTU link
def get_link(site_number) def get_link(site_number)
"http://#{site_number}.#{request.domain(3)}" "http://#{request.host}:2#{site_number}00"
end end
def sortable(column, title = nil, options = {}) def sortable(column, title = nil, options = {})
+4 -18
View File
@@ -271,31 +271,17 @@ 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(link_name, args[:link].blank? ? '#' : send(args[:link]), :class => (args[:link_class] || 'btn btn-primary'), data: args[:link_data]), class: "action pull-right" if link concat content_tag :div, link_to(content_tag(:i, nil, :class => 'icon-plus') + ' ' + t(:add), args[:link].blank? ? '#' : send(args[:link]), :class => (args[:link_class] || 'btn btn-primary'), data: args[:link_data]), class: "action pull-right" if link
concat content_tag :div, paginate(@objects, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil, :sort_options => params[:sort_options]}), class: "pagination pagination-centered" if paginate 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)
@@ -307,12 +293,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}'#{link_option})"), class: quick[:class], data: eval("#{quick[:data]}")) content_tag :li, link_to(t(quick[:translation] || :edit), quick[:link].nil? ? '#' : eval("#{quick[:link]}('#{object.id}')"), class: quick[:class], data: eval("#{quick[:data]}"))
end 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}'#{link_option})"), class: "delete #{quick[:class] || 'text-error'}") content_tag :li, link_to(t(quick[:translation] || :delete_), '#', rel: eval("#{quick[:link]}('#{object.id}')"), class: "delete #{quick[:class] || 'text-error'}")
end 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"))
@@ -345,7 +331,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) rescue nil autorized ||= object.send(klass.underscore).user_can_sub_manage?(current_user)
end end
autorized autorized
end end
-7
View File
@@ -1,7 +0,0 @@
class GetAnnouncementFromRss
@queue = :high
def self.perform()
%x(ruby "#{Rails.root}/lib/rss_ntu_job.rb")
end
end
+1 -1
View File
@@ -42,7 +42,7 @@ class AvatarUploader < CarrierWave::Uploader::Base
# end # end
version :thumb do version :thumb do
process :resize_to_fit => [200, 200] process :resize_to_fit => [80, 80]
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,7 +28,6 @@
<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>
@@ -54,7 +53,6 @@
<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 %>
@@ -1,14 +0,0 @@
<% unless users.blank? %>
<div class="promoter-block">
<p class="promoter-title"><%= t(:promoter) %>:</p>
<ul>
<% users.each do |user| %>
<li class="promoter">
<p>
<%= link_to user.name, "mailto:#{user.email}", class: "promoter-name" %> / <span class="promoter-phone"><%= user.office_tel %></span>
</p>
</li>
<% end %>
</ul>
</div>
<% end %>
@@ -1,16 +0,0 @@
<% content_for :page_specific_javascript do -%>
<%= javascript_include_tag "member-selection" %>
<%= javascript_include_tag "lib/jquery.nanoscroller" %>
<%= javascript_include_tag "lib/checkbox.card" %>
<% end -%>
<% content_for :page_specific_css do -%>
<%= stylesheet_link_tag "member_select" %>
<% end %>
<div>
<div id="selected_users">
<%= render partial: 'admin/member_selects/user', collection: users, locals: {field: field} %>
<%= hidden_field_tag field %>
</div>
<%= link_to t(:add), '#', class: 'btn btn-primary btn-small select_user_modal', rel: select_members_admin_member_selects_path, field: field %>
</div>
+4 -41
View File
@@ -14,14 +14,8 @@
<%= 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%> -->
<%= flash[:notice] rescue nil%> <table id="mt-list" class="table main-list">
<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>
@@ -31,38 +25,6 @@
</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">
@@ -118,5 +80,6 @@
@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>
+8 -4
View File
@@ -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"><%= @extension.first["title"] %></h2> <h2 class="item-name">Module Name</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,12 +38,16 @@
</div> </div>
</div> </div>
<div class="main clearfix"> <div class="main clearfix">
<h3>Description</h3> <h3>description</h3>
<div id="desc-holder" class="paragraph"><%= @extension.first["description"].html_safe%></div> <div id="desc-holder" class="paragraph">Pixel Union’s Jitensha defines storefront minimalism. Japanese for “bicycle,” Jitensha offers clean typography and easy usability, including full color, font, logo, and footer customization. With its painless social media and blog integration, Jitensha gorgeously accomodates every aspect of your business. Any questions before you launch? Don’t hesitate to email us: Support@PixelUnion.net.</div>
<h3>screen shot</h3> <h3>screen shot</h3>
<div id="screen-shot"> <div id="screen-shot">
<div class="holder"> <div class="holder">
<%= image_tag "#{STORE_CONFIG[:store_settings]["url"]}/#{@extension.first['preview']['preview']['url']}"%> <img src="" alt="Thumbnail 1" class="preview item-thumb">
<img src="" alt="Thumbnail 2" class="preview item-thumb">
<img src="" alt="Thumbnail 3" class="preview item-thumb">
<img src="" alt="Thumbnail 4" class="preview item-thumb">
<img src="" alt="Thumbnail 5" class="preview item-thumb">
</div> </div>
</div> </div>
</div> </div>
+1 -1
View File
@@ -48,7 +48,7 @@
}); });
}) })
}); });
$(document).on('click', 'li .map-block .onoff', function () { $(document).on('click', 'li .onoff', function () {
$(this).parents("li").toggleClass("disabled"); $(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>
+3 -4
View File
@@ -12,11 +12,10 @@
<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">
<% @request_hosts = request.host_with_port.split(".") %> <a class="btn btn-primary" type="submit">Other Sign In</a>
<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">
+1 -17
View File
@@ -13,16 +13,6 @@
</form> </form>
</li> </li>
<!-- ntu sites -->
<li id="orbit-tag" class="dropdown">
<a class="dropdown-toggle orbit-bar-language" data-icons="&#xe02d;" 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>
@@ -46,7 +36,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), user_logout_path, tabindex: '-1' %></li> <li><%= link_to content_tag(:i, nil, class: 'icons-logout') + ' ' + t(:logout), destroy_user_session_path, tabindex: '-1' %></li>
<li class="divider"></li> <li 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>
@@ -66,12 +56,6 @@
</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>
+2 -2
View File
@@ -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.sort{|x,y| x.get_module_app_key <=> y.get_module_app_key}.each do |t| %> <% OrbitApp::Module::SideBarRegisition.all.each do |t| %>
<%= t.render_head(request, params, current_user, @module_app) %> <%= 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.sort{|x,y| x.get_module_app_key <=> y.get_module_app_key}.each do |t| %> <% OrbitApp::Module::SideBarRegisition.all.each do |t| %>
<%= t.render(request, params, current_user, @module_app) %> <%= t.render(request, params, current_user, @module_app) %>
<% end %> <% end %>
</div> </div>
-2
View File
@@ -1,2 +0,0 @@
data = File.open(File.join(Rails.root, 'config', 'store_config.yml')).read
STORE_CONFIG = YAML::load(ERB.new(data).result(binding)).symbolize_keys
-45
View File
@@ -80,48 +80,3 @@ default_widget_style:
- style3 - style3
- style4 - style4
- style5 - style5
sites:
www:
url: www.ga.ntu.edu.tw
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx3fDAM40XvEiM5oG7YbA\nKnhc5Dyv/ZhVDzyrg95QB0ylBPtSs6g5xgkSSQMnIpAUCzdVIMrUd/A6DuH6f+T5\nccshgh3aDj3wISfgYZc9e7WY1csOItq9lOr6YG4HEABSyjVCcX/RrB8kCuuIGcvR\nRnvu/4fFb93vsVYHwGuivTYRJ+8VM8fOtIFCvbCxZsFj6r5cMl4qI4g4vaIn3xf2\ndXUCICebvdIBfMAdW29yaCScEap1oawEfdXtKCD5vYvAaRZ85jLY/FV5dYhbe1dz\n9G7+B1HI7VBm5bKV0MI1ZH2MTRczaqjLGf6ZF0FbMmcMYLx8iEGL1z0/hgOTcNT6\nrQIDAQAB\n-----END PUBLIC KEY-----\n"
ga:
url: www.ga.ntu.edu.tw
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx3fDAM40XvEiM5oG7YbA\nKnhc5Dyv/ZhVDzyrg95QB0ylBPtSs6g5xgkSSQMnIpAUCzdVIMrUd/A6DuH6f+T5\nccshgh3aDj3wISfgYZc9e7WY1csOItq9lOr6YG4HEABSyjVCcX/RrB8kCuuIGcvR\nRnvu/4fFb93vsVYHwGuivTYRJ+8VM8fOtIFCvbCxZsFj6r5cMl4qI4g4vaIn3xf2\ndXUCICebvdIBfMAdW29yaCScEap1oawEfdXtKCD5vYvAaRZ85jLY/FV5dYhbe1dz\n9G7+B1HI7VBm5bKV0MI1ZH2MTRczaqjLGf6ZF0FbMmcMYLx8iEGL1z0/hgOTcNT6\nrQIDAQAB\n-----END PUBLIC KEY-----\n"
doc:
url: doc.ga.ntu.edu.tw
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4aE7R0/49UBf5v4rbNiA\nnaXjPZ9rio9fjkaAZeow62yaZtoGurqf44BVj/cjQVUmLnMU4WDcZMI0osLa15+H\ndXSGCP8Upmvi+eA2UqhhBZts1IQ33rPMAjePAbpSGbNRxous0VpH7cc9BxMffQwh\nsygcbghUCEE3dVWdTFGokvgxkBzaKKTNbiqhmbuc8QIuzOvFFGkZHgqlxFHcaNYZ\n7KZJxqvuKSXsJcxIsQKzDiAPI11J3zgRdIf/CFVQv5g15gl1ieQgFdGc3jplsBcd\nrdLApPZ39+BWr9a/Gj9lgP6Ll5G/cM4Uq18a7TCWJIC9PNGw8bBDJTjnUEqmOu3R\nZQIDAQAB\n-----END PUBLIC KEY-----\n"
cashier:
url: cashier.ga.ntu.edu.tw
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9wliL8gFsRn0DVZusd2h\nSoj6aQWkKq1UU6fj3vzcrb1adMy8RnKogTW6z1W9wxrcrI/GfyRz9Wop0+9+XNYx\nDH+QQ+/1po/O/MkPBGZ6WxXpH2BSCncdJdYZ9qLvlJHHRhFtczcSQki693MCDUCy\nMrMDvmL4YOowHExD7A5qrCIaYnbNcUCYMKluSLxR52AUeAuYjCwZbkgEwIQRdZ+M\n3JMgTD/9GFsvZ4c5x6n1cUnKCJNyyUIvI8jThtOnySCU8ZN17nWfKb1Cxavt17Vp\nGSdyIIL2SO9+rjOFW3PrAyX5P3xEgPYoDxA1QsYLYbj189qA0sT17xf9H7KcNzyP\n7wIDAQAB\n-----END PUBLIC KEY-----\n"
general:
url: general.ga.ntu.edu.tw
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvyFUUFyaEJgsR+bYhTXx\nOA60kw82ohyHCDzkoHDT/k2xS520RZR0AzxT449qD3XfRr0+7F0c6rMx/2pBG7hS\nlHjgrTX7eQ70wV8H4OApriDIp1UDemm4+fKxcPZ6vhWqzp+3ijPdhJXe7OC9D89I\n9QKdlHPBxKFnUrBJiqn3cHGLpRrYTsKpI/Nl7VW4UJJh0k7R7P1Jqry0e+HalOLB\nBu5kl5z6iYBPy1gJ4psDHWuoNboxIgIsVR1SSLM7Mooebwx2qjm3W4VQuc7eQk0g\nh7KH4B8CrK4bC+K6lAS3ZzmTlA6M1WZPtIKv3XqEYCkyomMnkdTNZQYKbCKKlLBo\ntQIDAQAB\n-----END PUBLIC KEY-----\n"
social:
url: social.ga.ntu.edu.tw
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqB8htGdGzDPs3GA76REG\nyjM0eEYdXV6ugi4hPZEViCOBg3POC5RZslA5oTCYYWfTVui8jHC2CPD3AYQLG67Z\n79g2miLHEEyDzG7dp//dc85qp0FYR2JII1y26fJutMVCgn0hth6OpfjPB2QhkgZf\nat+Ico5ppDYIx+4jX8xQr4qqRlUIAmECMAE5ATiAUqfv117GJG/fR3AsKZPYm2U1\nFhSpKT2mvC0AiqstZzxYEm4srl1ZjpJPJ7uU+ewvi/EhRyLWFGPmygP6fvg4IaKS\nG00dx7FGedyLVcSaxJCoCX5Z98hIYEStanCSzuR3FQEL0JaB8ZKKWY8dsB+U1v46\nQwIDAQAB\n-----END PUBLIC KEY-----\n"
property:
url: property.ga.ntu.edu.tw
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1bmnJSRmxcehehuKBwSQ\nXiuYhAxzUOmptIk0sgciB1hK8++anXMaHXf3QA6UiXWjNyU+g2ZL1nVfVl0Qd3Ps\nxM2+hSeZRus2sw0g7CQea7NkAqLGQrpicnZ8Fgcb+0qwgClk0RVBXwJzfTDu6V+5\nL9lLEKWnSdHmoGkxkZTPMAtJpXYx9SMLtljPYGkMWKY2C1cBqPdMOl/rKTUZ9dYp\n2eJ13NTXDJJgDJOhDFHevzK/I6kwxdJbetNo4IO1dhQdbPionR5SNkkCNZvfy3k3\n68+xopPKH3xECCIuxorcePx0hyoeXS8vdmJ09VKHVUz08LBYGq2S/36V5LIc1P/6\nSQIDAQAB\n-----END PUBLIC KEY-----\n"
procurement:
url: procurement.ga.ntu.edu.tw
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAze/Yr3vrpRBpeu7ohyEP\nboPvZ476dtANbvW+rMuDyKeGD5FfoZYwzF+AbMIK6KfleWizObnMM8ABC0LdBuag\nQ0Brk4FMxyKz0aXlSgG3OZiZXJaaWm2/+gqghgpBLpAPMRFnEmK2y11b/EgCxurV\nl+RZ/MgrIviRGipnU7GXfG4O7Ai21oD4lzKt3WbvuWgBdgtEsYpZMIyddWrhkUki\noM39Vm72mCyKPkysCVYCnYaMwDXVx/SKuTRHiVQZ4GNIv74rwp7BOCkfDZ8HrNLH\nr3ObCB8X0Bh9GqUUj7gYu3cFmx8lXer7qkGtGUq2wNUM0CBc01EODVO9e9RQnulA\n3wIDAQAB\n-----END PUBLIC KEY-----\n"
fss:
url: fss.ga.ntu.edu.tw
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzsvi4FfIQokfP2QmiRTs\nzuxjPg7oPK7pLHNQC/AyY35H0vmkXGTc74pVvLbfSuaprLO10WVzE4bGGQmhmls1\nDqeY7EyHg1vs7GHQm1932n+Va+qDToSx7S+Zs1ZOglYAdEzBI3dyhefIcDtNUfty\n0i64RGiEzDH4yV5lecilXo5Q4/7W/HNdtw8Oe//LopOZ2Mj+Eq7Tk70WkGFDV73Z\n/jIBLBn51g2P9nrsid63OLe1X8u0l9+xSGff0fR1VlqbElBRACCrAmPvs9ceOW7H\n+yLw71elR4nMDm+/dx/zimeYUj0WaY2A3/O8xucPhSP22YCRiO1jEsAEvMXkCU9p\n8wIDAQAB\n-----END PUBLIC KEY-----\n"
medicine:
url: medicine.ga.ntu.edu.tw
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwx7zQLnde6Azy/03bIxg\nkp5rM0DsKKkBbX8C5vhUADxaC2zVmVJuF0NnTGCWutNSSYsKWRKzFwEoZdzJ+8XS\nr8f9kRdEB0yu3Akv+EhZyHA7yVGyFvNAhPGVuekSmpDlpFFKanAqlhBzrhByku5A\nTqp2fXi3zHMoP6WX8QXb6SpG/y4CBpjXCI1qLCAJRw0Fkt7yMXkJnjO2q7zCKAnU\nnv6DVz5yDuBiZPfYlW09KHVWxSehgk5fvLu9Jb/s1XklPwEw1m5BPhIA1YG0QelR\nXk9Pdvwb7aM59LZx1xQZYcku0KGSqLo9rCDTD8YT47226v921yeM36Az8t8e4egU\nzwIDAQAB\n-----END PUBLIC KEY-----\n"
police:
url: police.ga.ntu.edu.tw
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzKawlFWAMzA/uV/kcewd\nmtj8PcqxosmnSh7ZzJ0DumG2ieeP9oDBicqbqIEaeJVvrRzYJD2a+u8x5KKMKB8J\nHbMUpCBFlIpkDMjU/oZVMcYT9pcH51QWNvCgHG7prVykSGFz1JRvjSP6cwuZKBFd\nFFneOViETqoMIO1DbRLXsGfPvMOJY9C1xDwv1dLv0Wbj7M9N6eNz06a50bu3I4gl\nMumxWnZUabXL3G62S/Si4NM7J2jOUnkEOxJWOhcAX/iiqS9T8AHu84um2+mLQpfB\nJJFFIWCIAtU78VnIN5JSWwjFU5TsiSyCFYpGXKxUFD25cFmt3SfG0gwmrFis5Pdn\nhwIDAQAB\n-----END PUBLIC KEY-----\n"
construction:
url: construction.ga.ntu.edu.tw
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvxJcKnPUDaNNyhdGpedL\n+h2OI9RDDZUTkHcvX1UvBNvlX2+dvok6sHQh2AhZoNyCUFZTbp2CRSNfIM5jXigD\nfHA3KzpN7cmGG7W7nIdBBkZU/ly4HFvkD7mGoEymB0JYgZkz59CXBx+3Zg6KLSYY\nZDoOw6wikrl643So2zFZvwHJpDkRkmX5oWWYqXOZxaZnkgbhvA3KdcH9+C1aEBYY\npY2K2MJt86k0ahW/CJfVRDb9CWSxAGir1RAPu9bRV9y9WWKKGWekH0/IqhhJPT8q\nl3v6PB1Oc6ltbOyYkS2xHbmvRxjORzGen0Xcbjzo4N8HBEoPe0Uc5iP0Y50GDjEL\nEQIDAQAB\n-----END PUBLIC KEY-----\n"
sec:
url: sec.ga.ntu.edu.tw
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApsVKJ8Cvr/A0dmHR+vDS\nAYjVzGqMNJ/4pO7GwMzUZMNSkpq3b9CIjrIGg/QKj7woTHnKM39vczu5gxPXJGYN\nIo+PnWsibMDjcz2Vm8s11XXIPho/Ce+hQkWpWGzxpaH7Z/qLKSwiwHdHhlgN3fWw\njR8jYhreQYfohkRGR70h8A9TTU4YkFY/+8yIdwGns61+5tK981kMbVkm+pcgL0cP\nMN08I7MM+c87COY6IO27jVb/ALPAYpo+QUdAfEp5hlI7BQW95nB7LHOnxAm7lLTD\nhbdETUssieQUicwgDpGa2aD769nH+V3UCp0nA4yPDWyJJyKEWsD5EEK24VAcotql\nkwIDAQAB\n-----END PUBLIC KEY-----\n"
info:
url: info.ga.ntu.edu.tw
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5MLcsMcedzVWjw7pd/lr\nf8GdrzV6rubsJgEBJbC2OdrloHc+7uxEwWiYNTfg4j46nY/zCuTqzV/Wcfni5pY8\n0yuOmZdH9LjK0PW5BgXYJwe/bZkQmQcIQhkoSPghR8o+kZlI0a3+3gs4eAkpxB21\nPR5Rg2fvzDkaO3WcHf13HymayIk9wn4i0NdLUXgKSWcz5XNJtVBh6jtMkDq7ioOH\nQZT9OAODFw5CW/TvXBJaAvSEdDHsCNTE4vgJO1h6qowC27mErgjilA7TM81JFp40\nwexOW/gXHc4gCsj9BY39tDTqa56QIbJjKdqx7iyHUr1jMFmII1osS1ZVATco9RrM\naQIDAQAB\n-----END PUBLIC KEY-----\n"
+2 -1
View File
@@ -86,6 +86,7 @@ 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:
@@ -261,6 +262,7 @@ 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:
@@ -378,7 +380,6 @@ 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
-17
View File
@@ -1,17 +0,0 @@
en:
ntu:
rss_origin: Back to NTU Announcements
site_names:
"www": "Dean of General Affairs"
"sec": "Office of the Dean and Secretariat"
"doc": "Documentation Division"
"general": "General Service Division"
"property": "Property Management Division"
"construction": "Construction and Maintenance Division"
"cashier": "Cashier Division"
"procurement": "Procurement Division"
"fss": "Facilities Service Division"
"police": "Campus Security"
"social": "General Affairs Division, College of Social Science"
"medicine": "General Service Division, College of Medicine"
-17
View File
@@ -1,17 +0,0 @@
zh_tw:
ntu:
rss_origin: 回臺大校園公佈欄
site_names:
"www": "總務處"
"sec": "總務長室暨總務處秘書室"
"doc": "文書組"
"general": "事務組"
"property": "保管組"
"construction": "營繕組"
"cashier": "出納組"
"procurement": "採購組"
"fss": "經營管理組"
"police": "駐警隊"
"social": "社科院總務分處"
"medicine": "醫學院總務分處"
+2 -1
View File
@@ -86,6 +86,7 @@ zh_tw:
user_list: 使用者列表 user_list: 使用者列表
approval_: 審核 approval_: 審核
approval_setting: 審核設定 approval_setting: 審核設定
archive: 檔案室
asset: 資產 asset: 資產
attributes: 屬性 attributes: 屬性
auth: auth:
@@ -263,6 +264,7 @@ zh_tw:
text_area: 文字輸入方塊 text_area: 文字輸入方塊
text_field: 文字輸入框 text_field: 文字輸入框
locale: 位置 locale: 位置
location: 地標
login: 登入 login: 登入
logout: 登出 logout: 登出
mail: mail:
@@ -380,7 +382,6 @@ zh_tw:
sidebar_nav: 側欄導引 sidebar_nav: 側欄導引
system_email: 系統信箱 system_email: 系統信箱
profile: 基本資料 profile: 基本資料
promoter: 承辦人
publications: 著作 publications: 著作
purchase: 購買 purchase: 購買
quantity: 數量 quantity: 數量
-6
View File
@@ -9,9 +9,3 @@ generate_system_summary:
class: GenerateSystemSummary class: GenerateSystemSummary
args: args:
description: Generate the system status such as disk free space,package version list for showing at site tab description: Generate the system status such as disk free space,package version list for showing at site tab
get_announcement_from_rss:
cron: 0 0 [2,12] * * *
class: GetAnnouncementFromRss
args:
description: Loop through the announcement RSS until 24h ago
-8
View File
@@ -8,13 +8,6 @@ Orbit::Application.routes.draw do
match "/users_passwd" => "desktop/registrations#update", :as => :users_passwd, :via => :put match "/users_passwd" => "desktop/registrations#update", :as => :users_passwd, :via => :put
end end
devise_scope :user do
get 'user_login' => 'sessions#create'
match 'user_logout' => 'sessions#destroy'
end
match "saml_login" => 'saml_logins#index'
mount Resque::Server, :at => "/admin/resque" mount Resque::Server, :at => "/admin/resque"
mount Rack::GridFS::Endpoint.new(:db => Mongoid.database,:lookup=>:path), :at => "gridfs" mount Rack::GridFS::Endpoint.new(:db => Mongoid.database,:lookup=>:path), :at => "gridfs"
@@ -269,7 +262,6 @@ 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
-2
View File
@@ -1,2 +0,0 @@
store_settings:
url: "http://store.tp.rulingcom.com"
-157
View File
@@ -1,157 +0,0 @@
# encoding: utf-8
require 'rss'
require 'mongo'
SITES = { "總務處-各單位公告" => "0",
"總務處-文書組" => "1",
"總務處-出納組" => "2",
"總務處-事務組" => "3",
"總務處-保管組" => "5",
"總務處-採購組" => "6",
"總務處-經營管理組" => "7",
"總務處-駐衛警察隊" => "9",
"總務處-營繕組" => "10",
"總務處-總務處" => "11",
"社會科學院-社會科學院總務分處" => "4",
"醫學院-醫學院總務分處" => "8" }
SITE_KEYS = SITES.keys
DB_BASE_NAME = "production_new"
all = {}
continue = true
i = 1
yesterday = Time.now - 86400
while continue do
open("http://ann.cc.ntu.edu.tw/asp/rss.asp?page=#{i}") do |rss|
feed = RSS::Parser.parse(rss.read.encode('utf-8', 'big5', invalid: :replace, undef: :replace, replace: '').gsub('<pubDate>Wes,', '<pubDate>Wed,').gsub(/(encoding=\"big5\")/, 'encoding="utf-8"'))
feed.items.each do |item|
if item.pubDate > yesterday
if SITE_KEYS.include?(item.author)
author = item.author.strip
category = item.category.to_s.gsub(/\<(\/)*category\>/, '')
if all[author]
all[author][item.link.strip] = {title: item.title.strip, author: author, link: item.link.strip, date: item.pubDate, category: category, description: item.description.gsub("\r\n", '<br/>').strip}
else
all[author] = {item.link.strip => {title: item.title.strip, author: author, link: item.link.strip, date: item.pubDate, category: category, description: item.description.gsub("\r\n", '<br/>').strip}}
end
end
else
continue = false
break
end
end
end
i += 1
end
# Get corresponding category_id or create a new one
def get_category_id(category, categories, coll_cat, bulletin_module_id)
if categories.keys.include? "rss_#{category}"
[categories["rss_#{category}"], categories]
else
cat = {
_type: "Category",
module_app_id: bulletin_module_id,
key: "rss_#{category}",
disable: false,
custom: false,
title: {:zh_tw => category},
created_at: Time.now,
updated_at: Time.now
}
categories["rss_#{category}"] = result = coll_cat.save(cat)
[result, categories]
end
end
# Get categories and id based on a given site number
def get_mongo_and_categories(site_number="0")
db = Mongo::Connection.new("localhost", 27017).db("#{DB_BASE_NAME}_#{site_number}")
bulletin_module_id = db["module_apps"].find(key: "announcement").first
coll_bulletin = db["bulletins"]
coll_buffer_cat = db["buffer_categories"]
coll_cat = db["categories"]
coll_bulletin_cat = db["categories"].find(module_app_id: bulletin_module_id["_id"])
categories = coll_bulletin_cat.find().to_a.inject({}) do |categories, category|
categories[category['key']] = category['_id']
categories
end
[categories, coll_bulletin, coll_cat, bulletin_module_id["_id"],coll_buffer_cat]
end
# Get main site (總務處) categories
@main_categories, @main_coll_bulletin, @main_coll_cat, @main_bulletin_module_id, @main_coll_buffer_cat = get_mongo_and_categories
@copy_categories, @copy_coll_bulletin, @copy_coll_cat, @copy_bulletin_module_id, @copy_coll_buffer_cat = get_mongo_and_categories('11')
all.each do |key, value| # Loop through all the authors
site_number = SITES[key]
categories, coll_bulletin, coll_cat, bulletin_module_id, coll_buffer_cat = get_mongo_and_categories(site_number) # Get current's site categories
value.each_value do |bul| # Loop through all the items
category_id, categories = get_category_id(bul[:category], categories, coll_cat, bulletin_module_id)
unless coll_bulletin.find_one(rss_link: bul[:link])
bulletin = { _type: "Bulletin",
postdate: bul[:date],
created_at: bul[:date],
updated_at: bul[:date],
public: true,
is_checked: true,
is_pending: false,
is_rejected: false,
category_id: category_id,
title: {:zh_tw => bul[:title]},
text: {:zh_tw => bul[:description]},
available_for_en: false,
available_for_zh_tw: true,
rss_link: bul[:link],
is_top: false,
is_hot: false,
is_hidden: false }
bs = coll_bulletin.save(bulletin)
buffer_cat = { _type: "BufferCategory",
category_id: category_id,
categorizable_type: "Bulletin",
categorizable_id: bs }
coll_buffer_cat.save(buffer_cat)
unless site_number.eql?("0") || @main_coll_bulletin.find_one(rss_link: bul[:link]) # Copy the item to the main site
category_id, @main_categories = get_category_id(bul[:category], @main_categories, @main_coll_cat, @main_bulletin_module_id)
main_bulletin = bulletin.clone
main_bulletin['_id'] = BSON::ObjectId.new
main_bulletin[:category_id] = category_id
@main_coll_bulletin.save(main_bulletin)
main_buffer_cat = { _type: "BufferCategory",
category_id: category_id,
categorizable_type: "Bulletin",
categorizable_id: main_bulletin['_id'] }
@main_coll_buffer_cat.save(main_buffer_cat)
category_id, @copy_categories = get_category_id(bul[:category], @copy_categories, @copy_coll_cat, @copy_bulletin_module_id)
copy_bulletin = bulletin.clone
copy_bulletin['_id'] = BSON::ObjectId.new
copy_bulletin[:category_id] = category_id
@copy_coll_bulletin.save(copy_bulletin)
copy_buffer_cat = { _type: "BufferCategory",
category_id: category_id,
categorizable_type: "Bulletin",
categorizable_id: copy_bulletin['_id'] }
@copy_coll_buffer_cat.save(copy_buffer_cat)
end
end
end
end
+2 -7
View File
@@ -4,13 +4,9 @@ zh_tw:
ad_banner: 廣告輪播 ad_banner: 廣告輪播
banner: 橫幅 banner: 橫幅
banner_name: 橫幅名稱 banner_name: 橫幅名稱
name_only_english: 橫幅名稱只能為英文 banner_name_note: 橫幅名稱只能為英文
edit_banner: 編輯橫幅
enter_number: 請輸入數字
enter_url: 請輸入網址
ste: 轉換間隔時間 ste: 轉換間隔時間
number_seconds: 請輸入秒數 ste_note: 請輸入秒數
number_milliseconds: 請輸入毫秒數
best_size: 最佳尺寸 best_size: 最佳尺寸
effect: 效果 effect: 效果
all: 全部 all: 全部
@@ -20,4 +16,3 @@ zh_tw:
size: 大小 size: 大小
transition_interval: 轉換間隔時間 transition_interval: 轉換間隔時間
transition_speed: 轉換速度 transition_speed: 轉換速度
type: 類型
@@ -64,7 +64,6 @@ 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,13 +24,10 @@ 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
@@ -152,9 +149,6 @@ class Bulletin
preview_object preview_object
end end
def get_users
User.find(self.user_ids) rescue []
end
protected protected
@@ -65,14 +65,6 @@
</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>
<!-- Status Module --> <!-- Status Module -->
@@ -36,21 +36,6 @@
</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') %>
@@ -87,7 +87,6 @@ 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,8 +22,6 @@ 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)
@@ -75,10 +73,6 @@ 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
@@ -54,14 +54,6 @@
</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 -->
@@ -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-promoter"><%= t(:promoter)%></th> <th class="column-ctrl col-category"><%= sortable(:archive_file_category, t("archive.Category"))%></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 class="col-title"> <td>
<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 class="col-file"> <td>
<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,21 +37,9 @@
<% end %> <% end %>
</div> </div>
</td> </td>
<td class="col-promoter"> <td><div class="o-archives-category">
<% unless post.get_users.blank? %> <%= post.category.title if !post.category.blank? %>
<div class="promoter-block"> </div></td>
<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 %>
@@ -1,45 +0,0 @@
# encoding: utf-8
class Panel::Ask::BackEnd::AskRequestsController < OrbitBackendController
include AdminHelper
#include OrbitControllerLib::DivisionForDisable
#before_filter :for_app_manager
skip_before_filter :verify_authenticity_token
open_for_visitor :only => [:transferred_request]
def transferred_request
app_title = request.fullpath.split('/')[2]
module_app ||= ModuleApp.first(conditions: {:key => app_title} )
if request.headers["HTTP_X_AUTH_TOKEN"] == '3kjlfksjDFJ'
if !module_app.categories.where("title.en" => "Transferred Question").any?
ask_category = module_app.categories.build
ask_category.title_translations = { "zh_tw" => "轉介的問題", "en" => "Transferred Question" }
ask_category.save!
end
module_app.categories.enabled
category = module_app.categories.where("title.en" => "Transferred Question").first
@transferred_question = AskQuestion.new(
name: params['name'],
identity: params['identity'],
email: params['email'],
phone: params['phone'],
tax: params['tax'],
title: params['title'],
content: params['content'],
category_id: category.id)
@transferred_question.ask_reply = AskReply.new
@transferred_question.ask_reply.update_attributes(status: "待處理 (轉)")
@transferred_question.save
render :nothing => true
else
render :status => 500
end
end
end
@@ -1,14 +1,13 @@
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
@@ -1,15 +1,14 @@
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
@@ -1,11 +1,11 @@
require 'csv'
class Panel::Ask::BackEnd::AskQuestionsController < OrbitBackendController class Panel::Ask::BackEnd::AskQuestionsController < OrbitBackendController
require 'csv' def initialize
super
# def initialize @app_title = 'ask_questions'
# super end
# @app_title = 'ask_questions'
# end
def index def index
@ask_questions = AskQuestion.all @ask_questions = AskQuestion.all
@@ -53,12 +53,10 @@ 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('status'), csv << [ t('category'),
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),
@@ -70,8 +68,7 @@ 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_reply.status, csv << [ ask_question.ask_category.name,
ask_question.category.title,
ask_question.name, ask_question.name,
ask_question.identity, ask_question.identity,
ask_question.email, ask_question.email,
@@ -1,4 +1,3 @@
# encoding: utf-8
class Panel::Ask::BackEnd::AskRepliesController < OrbitBackendController class Panel::Ask::BackEnd::AskRepliesController < OrbitBackendController
include AdminHelper include AdminHelper
@@ -14,122 +13,19 @@ 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
-1
View File
@@ -6,7 +6,6 @@ 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
@@ -1,45 +1,3 @@
<script type="text/javascript">
var local_host = "<%= request.host %>";
// var local_host = "<%= request.host_with_port %>"; // local test
if (local_host[0] == "g" && local_host[1] == "a") {
local_host = "www." + local_host;
}
function hide_current_host_name(localhost) {
$('input[type=checkbox]').each(function() {
if ($(this).val() == local_host) {
$(this).addClass("hide");
$(this).next().addClass("hide");
}
});
}
$(document).ready(function() {
$('.dept_options').hide();
if ($("#ask_reply_status").val() == '轉介其他單位') {
hide_current_host_name(local_host);
$('.dept_options').show();
}
$("#ask_reply_status").change(function() {
hide_current_host_name(local_host);
$('.dept_options').slideUp();
if ($(this).find('option:selected').attr('value') == '轉介其他單位') {
$('.dept_options').slideDown();
}
});
});
</script>
<div id="ask_question_reply"> <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">
@@ -74,26 +32,6 @@ $(document).ready(function() {
['轉介其他單位', '轉介其他單位'] ['轉介其他單位', '轉介其他單位']
] %></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') %>
@@ -84,11 +84,8 @@ $(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>
-2
View File
@@ -17,8 +17,6 @@ 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:
-2
View File
@@ -22,8 +22,6 @@ zh_tw:
admin: 管理者 admin: 管理者
new_question: 新的發問 new_question: 新的發問
pending: 待處理 pending: 待處理
validate_code: 驗證碼
validate_code_note: 請回答下列驗證問句。
mongoid: mongoid:
attributes: attributes:
ask_question: ask_question:
-2
View File
@@ -15,8 +15,6 @@ 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
@@ -4,7 +4,6 @@
<% @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' %>
@@ -59,15 +58,6 @@
<%= @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>
@@ -120,15 +110,6 @@
<%= @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>
@@ -172,7 +153,6 @@
<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>
@@ -201,15 +181,6 @@
<% 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 %>
@@ -48,7 +48,6 @@ 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,7 +15,6 @@ 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
@@ -38,8 +37,4 @@ class PageContext
self.page.title self.page.title
end end
def get_users
User.find(self.user_ids) rescue []
end
end end
@@ -4,33 +4,6 @@
<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">
@@ -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} %>
@@ -1,8 +1,6 @@
class Panel::Survey::BackEnd::SurveysController < OrbitBackendController require 'csv'
require 'csv' class Panel::Survey::BackEnd::SurveysController < OrbitBackendController
require 'iconv'
require 'roo'
include AdminHelper include AdminHelper
include OrbitControllerLib::DivisionForDisable include OrbitControllerLib::DivisionForDisable
@@ -107,145 +105,6 @@ class Panel::Survey::BackEnd::SurveysController < OrbitBackendController
redirect_to panel_survey_back_end_surveys_url(:direction => params[:direction], :sort => params[:sort], :sort_options => params[:sort_options]) 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
@@ -340,7 +199,6 @@ 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|
@@ -352,32 +210,30 @@ class Panel::Survey::BackEnd::SurveysController < OrbitBackendController
end end
end end
end end
question.survey_question_options.all.each do |option|
# question.survey_question_options.all.each do |option| new_option = new_question.survey_question_options.new
# new_option = new_question.survey_question_options.new option.attributes.each do |key, value|
# option.attributes.each do |key, value| unless ['_id', 'survey_question_id'].include? key
# unless ['_id', 'survey_question_id'].include? key if option.respond_to?(key + '_translations')
# if option.respond_to?(key + '_translations') new_option.send(key + '_translations=', value)
# new_option.name_translations = value else
# else new_option.write_attribute(key, value)
# new_option.write_attribute(key, value) end
# end end
# end end
# end end
# end question.survey_question_radiogroups.all.each do |radiogroup|
new_radiogroup = new_question.survey_question_radiogroups.new
# question.survey_question_radiogroups.all.each do |radiogroup| radiogroup.attributes.each do |key, value|
# new_radiogroup = new_question.survey_question_radiogroups.new unless ['_id', 'survey_question_id'].include? key
# radiogroup.attributes.each do |key, value| if radiogroup.respond_to?(key + '_translations')
# unless ['_id', 'survey_question_id'].include? key new_radiogroup.send(key + '_translations=', value)
# if radiogroup.respond_to?(key + '_translations') else
# new_option.name_translations = value new_radiogroup.write_attribute(key, value)
# else end
# new_radiogroup.write_attribute(key, value) end
# end end
# end end
# end
# end
end end
@new_survey.create_user_id = current_user.id @new_survey.create_user_id = current_user.id
@@ -13,8 +13,7 @@
<li><%= link_to t('survey.duplicate_it'), duplicate_it_panel_survey_back_end_survey_path(survey, :page => params[:page]) %></li> <li><%= link_to t('survey.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) %></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.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 -%>
@@ -1,18 +0,0 @@
<%= form_tag import_panel_survey_back_end_survey_path(@survey), multipart: true do %>
<table class="table main-list">
<thead>
<tr>
<th class="span2"><%= t('survey.title') %></th>
<th class="span2"></th>
<th class="span2"></th>
</tr>
</thead>
<tbody id="tbody_surveys" class="sort-holder">
<tr>
<td><%= @survey.title %></td>
<td><%= file_field_tag :file %></td>
<td><%= submit_tag t("survey.import_csv"), :class => 'btn' %></td>
</tr>
</tbody>
</table>
<% end %>
-1
View File
@@ -24,7 +24,6 @@ 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
@@ -25,7 +25,6 @@ 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: 設定結果
-2
View File
@@ -9,8 +9,6 @@ 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'
-17
View File
@@ -1,17 +0,0 @@
source "http://rubygems.org"
# Declare your gem's dependencies in survey_b.gemspec.
# Bundler will treat runtime dependencies like base dependencies, and
# development dependencies will be added by default to the :development group.
gemspec
# jquery-rails is used by the dummy application
gem "jquery-rails"
# Declare any dependencies that are still in development here instead of in
# your gemspec. These might include edge Rails or gems from your path or
# Git. Remember to move these dependencies to your gemspec before releasing
# your gem to rubygems.org.
# To use debugger
# gem 'debugger'
-20
View File
@@ -1,20 +0,0 @@
Copyright 2013 YOURNAME
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-3
View File
@@ -1,3 +0,0 @@
= SurveyB
This project rocks and uses MIT-LICENSE.
-38
View File
@@ -1,38 +0,0 @@
#!/usr/bin/env rake
begin
require 'bundler/setup'
rescue LoadError
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
end
begin
require 'rdoc/task'
rescue LoadError
require 'rdoc/rdoc'
require 'rake/rdoctask'
RDoc::Task = Rake::RDocTask
end
RDoc::Task.new(:rdoc) do |rdoc|
rdoc.rdoc_dir = 'rdoc'
rdoc.title = 'SurveyB'
rdoc.options << '--line-numbers'
rdoc.rdoc_files.include('README.rdoc')
rdoc.rdoc_files.include('lib/**/*.rb')
end
Bundler::GemHelper.install_tasks
require 'rake/testtask'
Rake::TestTask.new(:test) do |t|
t.libs << 'lib'
t.libs << 'test'
t.pattern = 'test/**/*_test.rb'
t.verbose = false
end
task :default => :test
@@ -1,23 +0,0 @@
class ApplicationController < ActionController::Base
protect_from_forgery
before_filter :set_locale
# Set I18n.locale
def set_locale
# update session if passed
session[:locale] = params[:locale] if params[:locale]
# set locale based on session or default
begin
# check if locale is valid for non site pages
if !VALID_LOCALES.include?(session[:locale])
I18n.locale = I18n.default_locale
else
I18n.locale = session[:locale]
end
rescue
I18n.locale = I18n.default_locale
end
end
end
@@ -1,81 +0,0 @@
class Panel::SurveyB::BackEnd::PeriodsController < OrbitBackendController
# include AdminHelper
# include OrbitControllerLib::DivisionForDisable
# before_filter :for_app_manager
open_for_manager
# def initialize
# super
# @app_title = 'survey_b'
# end
# before_filter :force_order_for_user,:only => :index
# before_filter :for_app_sub_manager,:except => :index
def index
@periods = SurveyBPeriod.page params[:page]
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @periods }
format.js
end
end
def new
@period = SurveyBPeriod.new
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @period }
end
end
def create
@period = SurveyBPeriod.new params[:survey_b_period]
respond_to do |format|
if @period.save
format.html { redirect_to(panel_survey_b_back_end_periods_url) }
format.xml { render :xml => @period, :status => :created, :location => @period }
else
format.html { render :action => "new" }
format.xml { render :xml => @period.errors, :status => :unprocessable_entity }
end
end
end
def edit
@period = SurveyBPeriod.find(params[:id])
end
def update
@period = SurveyBPeriod.find(params[:id])
respond_to do |format|
if @period.update_attributes(params[:survey_b_period])
format.html { redirect_to(panel_survey_b_back_end_periods_url(:page => params[:page])) }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @period.errors, :status => :unprocessable_entity }
end
end
end
def destroy
@period = SurveyBPeriod.find(params[:id])
respond_to do |format|
if @period.destroy
format.html { redirect_to(panel_survey_b_back_end_periods_url(:page => params[:page])) }
format.xml { head :ok }
end
end
end
end
@@ -1,37 +0,0 @@
class Panel::SurveyB::BackEnd::SettingsController < OrbitBackendController
# include AdminHelper
# include OrbitControllerLib::DivisionForDisable
# before_filter :for_app_manager
open_for_manager
# def initialize
# super
# @app_title = 'survey_b'
# end
def show
redirect_to edit_panel_survey_b_back_end_setting_path
end
def edit
@setting = SurveyBSetting.first_or_create
end
def update
@setting = SurveyBSetting.first_or_create
respond_to do |format|
if @setting.update_attributes(params[:survey_b_setting])
format.html { redirect_to(panel_survey_b_back_end_periods_url) }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @setting.errors, :status => :unprocessable_entity }
end
end
end
end
@@ -1,168 +0,0 @@
class Panel::SurveyB::BackEnd::SurveyBController < OrbitBackendController
# include AdminHelper
# include OrbitControllerLib::DivisionForDisable
# before_filter :for_app_manager
open_for_manager
#before_filter :force_order_for_user,:only => :index
#before_filter :for_app_sub_manager,:except => :index
# def initialize
# super
# @app_title = 'survey_b'
# end
def index
if params[:period] && @period = SurveyBPeriod.find(params[:period])
@answers = ::SurveyBAnswer.where(:created_at.gte => @period.start_date, :created_at.lte => @period.end_date)
else
@answers = ::SurveyBAnswer.all
end
if params[:sort]
options = params[:sort_options]
options = [options] if !options.class.eql?(Array)
options.each do |option|
@answers = @answers.order_by(option, params[:direction])
end
end
@answers = @answers.page(params[:page]).per(10)
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @answers }
format.js
end
end
def destroy
@answers = SurveyBAnswer.find(params[:id])
# @bulletin.bulletin_files.destroy
@answers.destroy
respond_to do |format|
format.html { redirect_to(panel_survey_b_back_end_survey_b_index_path(:period => params[:period], :page => params[:page])) }
# format.xml { head :ok }
format.js
end
end
def delete
if params[:ids]
answers = SurveyBAnswer.any_in(:_id => params[:ids]).destroy_all
end
redirect_to panel_survey_b_back_end_survey_b_index_url(:direction => params[:direction], :sort => params[:sort], :sort_options => params[:sort_options])
end
def result
if params[:period] && @period = SurveyBPeriod.find(params[:period])
@answers = ::SurveyBAnswer.where(:created_at.gte => @period.start_date, :created_at.lte => @period.end_date)
else
@answers = ::SurveyBAnswer.all
end
@results = Hash[(t('survey_b.institutions').keys + [ 'all' ]).map do |i_key|
[i_key, Hash[(t('survey_b.questions').keys + ['count', 'sum', 'sum7'] ).map{|q_key| [q_key, 0] }].merge({ 'count' => 0, 'sum' => 0, 'sum7' => 0 })]
end]
[:good_institutions, :bad_institutions].each do |item|
@results[item] = Hash[t('survey_b.institutions').map{|k, i| [k, 0] }]
end
[:person_question, :rate_question, :quality_question].each do |item|
@results[item] = t("survey_b.#{item}_options").map{|o| 0 }
end
@answers.each do |answer|
t('survey_b.institutions').each do |i_key, institution|
if answer[i_key.to_s]
@results[i_key]['count'] += 1
t('survey_b.questions').keys.each do |q_key|
point = 10 - ( answer[i_key.to_s][q_key.to_s].to_i * 2 )
@results[i_key][q_key] += point
@results[i_key]['sum'] += point
if q_key != :question6
@results[i_key]['sum7'] += point
end
end
end
end
[:good_institutions, :bad_institutions].each do |item|
if answer[item.to_s]
answer[item.to_s].each do |institution|
@results[item][institution] += 1
end
end
end
[:person_question, :rate_question, :quality_question].each do |item|
if answer[item.to_s]
@results[item][answer[item.to_s].to_i] += 1
end
end
end
t('survey_b.institutions').each do |i_key, institution|
(t('survey_b.questions').keys + ['count', 'sum', 'sum7'] ).each do |q_key|
@results['all'][q_key] += @results[i_key][q_key]
end
end
end
def export
if params[:period] && @period = SurveyBPeriod.find(params[:period])
@answers = ::SurveyBAnswer.where(:created_at.gte => @period.start_date, :created_at.lte => @period.end_date)
@comment_question = ::SurveyBAnswer.where(:created_at.gte => @period.start_date, :created_at.lte => @period.end_date, :comment_question.nin => [''])
else
@answers = ::SurveyBAnswer.all
@comment_question = ::SurveyBAnswer.where(:comment_question.nin => [''])
end
@results = Hash[(t('survey_b.institutions').keys + [ 'all' ]).map do |i_key|
[i_key, Hash[(t('survey_b.questions').keys + ['count', 'sum', 'sum7'] ).map{|q_key| [q_key, 0] }].merge({ 'count' => 0, 'sum' => 0, 'sum7' => 0 })]
end]
[:good_institutions, :bad_institutions].each do |item|
@results[item] = Hash[t('survey_b.institutions').map{|k, i| [k, 0] }]
end
[:person_question, :rate_question, :quality_question].each do |item|
@results[item] = t("survey_b.#{item}_options").map{|o| 0 }
end
@answers.each do |answer|
t('survey_b.institutions').each do |i_key, institution|
if answer[i_key.to_s]
@results[i_key]['count'] += 1
t('survey_b.questions').keys.each do |q_key|
point = 10 - ( answer[i_key.to_s][q_key.to_s].to_i * 2 )
@results[i_key][q_key] += point
@results[i_key]['sum'] += point
if q_key != :question6
@results[i_key]['sum7'] += point
end
end
end
end
[:good_institutions, :bad_institutions].each do |item|
if answer[item.to_s]
answer[item.to_s].each do |institution|
@results[item][institution] += 1
end
end
end
[:person_question, :rate_question, :quality_question].each do |item|
if answer[item.to_s]
@results[item][answer[item.to_s].to_i] += 1
end
end
end
t('survey_b.institutions').each do |i_key, institution|
(t('survey_b.questions').keys + ['count', 'sum', 'sum7'] ).each do |q_key|
@results['all'][q_key] += @results[i_key][q_key]
end
end
@setting = SurveyBSetting.first
headers['Content-Type'] = "application/vnd.ms-excel"
headers['Content-Disposition'] = "attachment; filename=#{@period.title}.xls"
headers['Cache-Control'] = ''
render :layout => false
end
end
@@ -1,88 +0,0 @@
class Panel::SurveyB::FrontEnd::SurveyBController < OrbitWidgetController
helper ApplicationHelper
def index
if params[:period].nil?
@period = SurveyBPeriod.get_current_survey()
else
@period = SurveyBPeriod.find(params[:period])
end
redirect_standalone panel_survey_b_front_end_survey_b_index_path( :standalone => 'true') do
@setting = SurveyBSetting.first_or_create
if params[:agree] == '1'
# @period = SurveyBPeriod.first
render :index, :layout => 'standalone'
else
# Escape from error when announcement is empty
if @setting.announcement.nil?
@setting.announcement = " "
end
render :announcement, :layout => 'standalone'
end
end
end
def create
answer = params[:answer]
@answer_model = ::SurveyBAnswer.new
not_answered = true
[:contact_name, :contact_phone, :contact_e_mail, :person_question, :rate_question, :quality_question].each do |item|
if answer[item].blank?
@answer_model.errors.add t("survey_b.#{item.to_s}_label"), t('survey_b.not_answered')
else
@answer_model[item] = answer[item]
end
end
@answer_model[:comment_question] = answer[:comment_question]
[:good_institutions, :bad_institutions].each do |item|
t('survey_b.institutions').each do |i_key, institution|
if answer[item][i_key] == '1'
@answer_model[item] ||= []
@answer_model[item].push i_key
end
end
end
t('survey_b.institutions').each do |i_key, institution|
if answer["institution_check"][i_key] == '1'
not_answered = false
@answer_model[i_key] ||= {}
t('survey_b.questions').each do |q_key, question|
if answer[i_key] && answer[i_key][q_key]
@answer_model[i_key][q_key] = answer[i_key][q_key]
else
@answer_model.errors.add institution + question, t('survey_b.not_answered')
end
end
end
end
if not_answered
@answer_model.errors.add t('survey_b.institution_check_label'), t('survey_b.not_answered')
end
if @answer_model.errors.empty?
@answer_model.save!
render :answer_success
else
@answer_error = @answer_model.errors.full_messages.join(',')
render :answer_error
end
end
def redirect_standalone url
unless params[:standalone] == 'true'
@redirect_url = url
render :redirect_standalone
else
module_app = ModuleApp.first(:conditions => {:key => 'survey_b'})
@item = Item.where(module_app_id: module_app.id).first
if @period
yield
else
# render :no_survey
# render :json => "No Survey"
render :no_survey, :layout => 'standalone'
end
end
end
end
@@ -1,5 +0,0 @@
class SurveyBAnswer
include Mongoid::Document
include Mongoid::Timestamps
end
@@ -1,41 +0,0 @@
class SurveyBPeriod
include Mongoid::Document
include Mongoid::Timestamps
field :title, :type => String
field :start_date, :type => DateTime
field :end_date, :type => DateTime
validates :start_date, :end_date, :presence => true
def self.get_current_survey
self.where(:start_date.lte => Time.now, :end_date.gte => Time.now).first
end
def isAvailable?
if start_date <= Time.now and end_date >= Time.now
return true
else
return false
end
end
def get_status_type
# status type
# reference to config/locales/en.yml and zh-tw.yml
# status_types:
# type1: 調查中
# type2: 未開始
# type3: 已結束
if start_date <= Time.now and end_date >= Time.now
return "type1"
end
if start_date > Time.now
return "type2"
end
if end_date < Time.now
return "type3"
end
end
end
@@ -1,17 +0,0 @@
class SurveyBSetting
include Mongoid::Document
field :description, :localize => true
field :announcement, :localize => true
def self.first_or_create
setting = self.first
unless setting
setting = self.new
setting.save
end
setting
end
end
@@ -1,68 +0,0 @@
<% content_for :page_specific_css do %>
<%= stylesheet_link_tag "lib/main-forms" %>
<%= stylesheet_link_tag "lib/fileupload" %>
<%= stylesheet_link_tag "lib/main-list" %>
<% end %>
<% content_for :page_specific_javascript do %>
<%= javascript_include_tag "lib/bootstrap-fileupload" %>
<%= javascript_include_tag "lib/bootstrap-datetimepicker" %>
<%= javascript_include_tag "lib/datetimepicker/datetimepicker.js" %>
<%= javascript_include_tag "lib/module-area" %>
<% end %>
<%= f.error_messages %>
<%= @period.errors.full_messages.join ', ' %>
<!-- 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">
<!-- title -->
<div class="control-group">
<label class="control-label muted"><%= t("survey_b.period_title") %></label>
<div class="controls">
<%= f.text_field :title %>
</div>
</div>
<!-- Date Time Picker -->
<div class="control-group">
<label class="control-label muted"><%= t("survey.postdate") %></label>
<div class="controls">
<%= f.datetime_picker :start_date, :no_label => true %>
</div>
</div>
<div class="control-group">
<label class="control-label muted"><%= t("survey.deadline") %></label>
<div class="controls">
<%= f.datetime_picker :end_date, :no_label => true %>
</div>
</div>
</div>
</div>
</div>
<!-- Form Actions -->
<div class="form-actions">
<%= hidden_field_tag 'page', params[:page] if !params[:page].blank? %>
<%= f.submit t('submit'), class: 'btn btn-primary' %>
<%= link_to t('cancel'), get_go_back, :class=>"btn" %>
</div>
@@ -1,33 +0,0 @@
<tr class="with_action">
<td>
<%= link_to period.title, panel_survey_b_front_end_survey_b_index_path(:period => period, :standalone => true), :target=>"_blank" %>
</td>
<td>
<a href="<%= result_panel_survey_b_back_end_survey_b_index_path(:period => period.id)%>">
<%= display_date_time period.start_date %>
-
<%= display_date_time period.end_date %>
</a>
<div class="quick-edit">
<ul class="nav nav-pills hide">
<li><%= link_to t('survey_b.result'), result_panel_survey_b_back_end_survey_b_index_path(:period => period, :page => params[:page]) %></li>
<li><%= link_to t(:list_), panel_survey_b_back_end_survey_b_index_path(:period => period, :page => params[:page]) %></li>
<li><%= link_to t('edit'), edit_panel_survey_b_back_end_period_path(period, :page => params[:page]) %></li>
<li><%= link_to t(:delete_), panel_survey_b_back_end_period_path(period), :confirm => t('sure?'), :method => :delete %></li>
<li><%= link_to t('survey_b.export'), export_panel_survey_b_back_end_survey_b_index_path(:period => period, :page => params[:page]) %></li>
</ul>
</div>
</td>
<td>
<% status_type = t('survey_b.status_types') %>
<% if period.start_date > Time.now %>
<span class="label label-info"><%= status_type[:type2] %></span>
<% end %>
<% if period.start_date <= Time.now and period.end_date >= Time.now %>
<span class="label label-success"><%= status_type[:type1] %></span>
<% end %>
<% if period.end_date < Time.now %>
<span class="label"><%= status_type[:type3] %></span>
<% end %>
</td>
</tr>
@@ -1,6 +0,0 @@
<h1><%= t(:edit) + t('survey_b.period') %></h1>
<%= form_for @period, url: panel_survey_b_back_end_period_path(@period), html: {class: "form-horizontal main-forms previewable"} do |f| %>
<fieldset>
<%= render :partial => 'form', :locals => {:f => f} %>
</fieldset>
<% end %>
@@ -1,19 +0,0 @@
<table class="table main-list">
<thead>
<tr>
<th width="20%"><%= t('survey_b.period_title') %></th>
<th width="20%"><%= t('survey_b.period') %></th>
<th><%= t('survey_b.status') %></th>
</tr>
</thead>
<tbody id="tbody_survey_periods" class="sort-holder">
<%= render :partial => 'period', :collection => @periods %>
</tbody>
</table>
<div class="form-actions form-fixed pagination-right">
<%= link_to t(:add) + t('survey_b.period'), new_panel_survey_b_back_end_period_path, :class => 'btn btn-primary pull-right' %>
<div id="survey_periods_pagination" class="paginationFixed">
<%= paginate @periods %>
</div>
</div>
@@ -1,2 +0,0 @@
$("#tbody_survey_periods").html("<%= j render :partial => 'answer', :collection => @periods %>");
$("#survey_periods_pagination").html("<%= j paginate @periods %>");
@@ -1,6 +0,0 @@
<h1><%=t(:add) + t('survey_b.period') %></h1>
<%= form_for @period, url: panel_survey_b_back_end_periods_path, html: {class: "form-horizontal main-forms previewable"} do |f| %>
<fieldset>
<%= render partial: 'form', locals: {f: f} %>
</fieldset>
<% end %>
@@ -1,72 +0,0 @@
<% # encoding: utf-8 %>
<% content_for :page_specific_css do %>
<%= stylesheet_link_tag "lib/main-forms" %>
<%= stylesheet_link_tag "lib/fileupload" %>
<%= stylesheet_link_tag "lib/main-list" %>
<% end %>
<% content_for :page_specific_javascript do %>
<%= javascript_include_tag "lib/bootstrap-fileupload" %>
<%= javascript_include_tag "lib/bootstrap-datetimepicker" %>
<%= javascript_include_tag "lib/datetimepicker/datetimepicker.js" %>
<%= javascript_include_tag "lib/module-area" %>
<% end %>
<%= f.error_messages %>
<!-- Input Area -->
<div class="input-area">
<!-- Language Tabs -->
<div class="nav-name"><strong><%= t(:language) %></strong></div>
<ul class="nav nav-pills language-nav">
<% @site_in_use_locales.each_with_index do |locale, i| %>
<li class="<%= 'active' if i == 0 %>">
<a data-toggle="tab" href=".<%= locale %>"><%= I18nVariable.from_locale(locale) %></a>
</li>
<% end %>
</ul>
<!-- Language -->
<div class="tab-content language-area">
<% @site_in_use_locales.each_with_index do |locale, i| %>
<div class="<%= locale %> tab-pane fade <%= ( i == 0 ) ? "in active" : '' %>">
<!-- Description -->
<div class="control-group input-subtitle">
<label class="control-label muted"><%= t('survey_b.description') %></label>
<div class="controls">
<div class="textarea">
<%= f.fields_for :description_translations do |f| %>
<%= f.text_area locale, rows: 7, class: "input-block-level", value: (@setting.description_translations[locale] rescue nil) %>
<% end %>
</div>
</div>
</div>
<!-- Announcement -->
<div class="control-group input-content">
<label class="control-label muted"><%= t('survey_b.announcement') %></label>
<div class="controls">
<div class="textarea">
<%= f.fields_for :announcement_translations do |f| %>
<%= f.text_area locale, rows: 7, class: "input-block-level", :value => (@setting.announcement_translations[locale] rescue nil) %>
<% end %>
</div>
</div>
</div>
</div>
<% end %>
</div>
</div>
<!-- Form Actions -->
<div class="form-actions">
<%= f.submit t('submit'), class: 'btn btn-primary' %>
<%= link_to t('cancel'), get_go_back, :class=>"btn" %>
</div>
@@ -1,7 +0,0 @@
<h1><%= t('survey_b.setting') %></h1>
<%= form_for @setting, url: panel_survey_b_back_end_setting_path, html: {class: "form-horizontal main-forms previewable"} do |f| %>
<fieldset>
<%= render :partial => 'form', :locals => {:f => f} %>
</fieldset>
<% end %>
@@ -1,13 +0,0 @@
<tr id="<%= dom_id answer %>" class="with_action">
<td>
<%= check_box_tag 'to_delete[]', answer.id, false, :class => "checkbox_in_list" %>
</td>
<% [:contact_name, :contact_phone, :contact_e_mail, :comment_question].each do |question| %>
<td>
<%= answer[question] %>
</td>
<% end %>
<td>
<%= answer.created_at %>
</td>
</tr>
@@ -1,11 +0,0 @@
<div id='filter' class="subnav">
<div class="filters accordion-group">
<div id="sort_headers" class="table-label">
<%= render 'sort_headers' %>
</div>
</div>
</div>
<% content_for :page_specific_javascript do %>
<%= javascript_include_tag "sort_header" %>
<% end %>
@@ -1,7 +0,0 @@
<% _sort_args = [] %>
<% [:contact_name, :contact_phone, :contact_e_mail, :comment_question].each do |question| %>
<% _sort_args.push [question.to_s, question.to_s, 'span1', t("survey_b.#{question}_label")] %>
<% end %>
<% _sort_args.push ['created_at', 'created_at','span1', 'created_at'] %>
<%= render_sort_bar(true, delete_panel_survey_b_back_end_survey_b_index_path(:direction => params[:direction], :sort => params[:sort], :sort_options => params[:sort_options]),
*_sort_args).html_safe %>
@@ -1,257 +0,0 @@
<table border="1">
<tr>
<td>標題</td>
<td><%= @period.title rescue '' %></td>
</tr>
<tr>
<td>問卷前言</td>
<td><%= @setting.description rescue '' %></td>
</tr>
<tr>
<td>填答人數</td>
<td><%= @answers.count rescue '' %></td>
</tr>
</table>
<br /><br />
一 、 顧客滿意填表人身分分析
<table border="1">
<tr>
<td>身份</td>
<% @results[:person_question].each_with_index do |count, option| %>
<td><%= t("survey_b.person_question_options")[option] %></td>
<% end %>
</tr>
<tr>
<td>填答人數</td>
<% @results[:person_question].each_with_index do |count, option| %>
<td><%= count %></td>
<% end %>
</tr>
<tr>
<td>比例</td>
<% @results[:person_question].each_with_index do |count, option| %>
<% @pcount = count.to_f / @answers.count %>
<td><%= @pcount == 0 ? "0" : sprintf("%.2f", @pcount * 100 ) %>%</td>
<% end %>
</tr>
</table>
<br /><br />
二、 整體行政品質表現比較分析
<br /><br />
對於總務處這一、二年之行政品質表現,您感覺是
<table border="1">
<tr>
<td>行政品質表現</td>
<% @results[:quality_question].each_with_index do |count, option| %>
<td><%= t("survey_b.quality_question_options")[option] %></td>
<% end %>
<td></td>
</tr>
<tr>
<td>填答人數</td>
<% @qcount = 0 %>
<% @results[:quality_question].each_with_index do |count, option| %>
<td><%= count %></td>
<% @qcount = @qcount + count %>
<% end %>
<td><%= @qcount %></td>
</tr>
<tr>
<td>比例</td>
<% @tqcount = 0 %>
<% @results[:quality_question].each_with_index do |count, option| %>
<% @pcount = count.to_f / @qcount %>
<td><%= @pcount == 0 ? "0" : sprintf("%.2f", @pcount * 100 ) %>%</td>
<% @tqcount = @tqcount + @pcount %>
<% end %>
<td><%= @tqcount %></td>
</tr>
</table>
<br />
對本處整體行政品質表現給予評鑑分數
<table border="1">
<tr>
<td>行政品質表現</td>
<% @results[:rate_question].each_with_index do |count, option| %>
<td><%= t("survey_b.rate_question_options")[option] %></td>
<% end %>
<td></td>
</tr>
<tr>
<td>填答人數</td>
<% @rcount = 0 %>
<% @results[:rate_question].each_with_index do |count, option| %>
<td><%= count %></td>
<% @rcount = @rcount + count %>
<% end %>
<td><%= @rcount %></td>
</tr>
<tr>
<td>比例</td>
<% @tqcount = 0 %>
<% @results[:rate_question].each_with_index do |count, option| %>
<% @pcount = count.to_f / @rcount %>
<td><%= @pcount == 0 ? "0" : sprintf("%.2f", @pcount * 100 ) %>%</td>
<% @tqcount = @tqcount + @pcount %>
<% end %>
<td><%= @tqcount %></td>
</tr>
</table>
<br />
以您與總務處各單位接觸之經驗,您覺得以下哪一組的服務品質較優。 (可複選)
<table border="1">
<tr>
<td>組別</td>
<% @results[:good_institutions].each do |institution, count| %>
<td><%= t("survey_b.institutions.#{institution}") %></td>
<% end %>
<td></td>
</tr>
<tr>
<td>人數</td>
<% @gcount = 0 %>
<% @results[:good_institutions].each do |institution, count| %>
<td><%= count %></td>
<% @gcount = @gcount + count %>
<% end %>
<td><%= @gcount %></td>
</tr>
<tr>
<td>比例</td>
<% @tqcount = 0 %>
<% @results[:good_institutions].each do |institution, count| %>
<% @pcount = count.to_f / @gcount %>
<td><%= @pcount == 0 ? "0" : sprintf("%.2f", @pcount * 100 ) %>%</td>
<% @tqcount = @tqcount + @pcount %>
<% end %>
<td><%= @tqcount %></td>
</tr>
</table>
<br />
以您與總務處各單位接觸之經驗,您覺得以下哪一組的服務品質尚待改進。 (可複選)
<table border="1">
<tr>
<td>組別</td>
<% @results[:bad_institutions].each do |institution, count| %>
<td><%= t("survey_b.institutions.#{institution}") %></td>
<% end %>
<td></td>
</tr>
<tr>
<td>人數</td>
<% @bcount = 0 %>
<% @results[:bad_institutions].each do |institution, count| %>
<td><%= count %></td>
<% @bcount = @bcount + count %>
<% end %>
<td><%= @bcount %></td>
</tr>
<tr>
<td>比例</td>
<% @tqcount = 0 %>
<% @results[:bad_institutions].each do |institution, count| %>
<% @pcount = count.to_f / @bcount %>
<td><%= @pcount == 0 ? "0" : sprintf("%.2f", @pcount * 100 ) %>%</td>
<% @tqcount = @tqcount + @pcount %>
<% end %>
<td><%= @tqcount %></td>
</tr>
</table>
<br /><br />
三、 各單位顧客滿意度調查分析
<table border="1">
<tr>
<td>組別</td>
<% @results[:bad_institutions].each do |institution, count| %>
<td><%= t("survey_b.institutions.#{institution}") %></td>
<% end %>
<td></td>
</tr>
<tr>
<% @tcount = 0 %>
<td><%= t('survey_b.answered_sum') %></td>
<% t('survey_b.institutions').each do |i_key, institution| %>
<% if @results[i_key]['count'] == 0 %>
<td><%= t('survey_b.no_data') %></td>
<% @tcount = @tcount + @results[i_key]['count'] %>
<% else %>
<td><%= sprintf("%.2f", ( @results[i_key]['sum'].to_f / t('survey_b.questions').count.to_f ) / @results[i_key]['count'].to_f ) %></td>
<% @tcount = @tcount + (( @results[i_key]['sum'].to_f / t('survey_b.questions').count.to_f ) / @results[i_key]['count'].to_f ) %>
<% end %>
<% end %>
<td><%= @tcount %></td>
</tr>
<tr>
<% @tcount = 0 %>
<td><%= t('survey_b.answered_sum7') %></td>
<% t('survey_b.institutions').each do |i_key, institution| %>
<% if @results[i_key]['count'] == 0 %>
<td><%= t('survey_b.no_data') %></td>
<% @tcount = @tcount + @results[i_key]['count'] %>
<% else %>
<td><%= sprintf("%.2f", ( @results[i_key]['sum7'].to_f / 7.0 ) / @results[i_key]['count'].to_f ) %></td>
<% @tcount = @tcount + ( ( @results[i_key]['sum7'].to_f / 7.0 ) / @results[i_key]['count'].to_f ) %>
<% end %>
<% end %>
<td><%= @tcount %></td>
</tr>
<tr>
<% @tcount = 0 %>
<td><%= t('survey_b.answered_count') %></td>
<% t('survey_b.institutions').each do |i_key, institution| %>
<td><%= @results[i_key]['count'] %></td>
<% @tcount = @tcount + @results[i_key]['count'] %>
<% end %>
<td><%= @tcount %></td>
</tr>
<% t('survey_b.questions').each do |q_key, question| %>
<% @tcount = 0 %>
<tr>
<td><%= question.sub /\d\./, '' %></td>
<% t('survey_b.institutions').each do |i_key, institution| %>
<% if @results[i_key]['count'] == 0 %>
<td><%= t('survey_b.no_data') %></td>
<% @tcount = @tcount + @results[i_key]['count'] %>
<% else %>
<td><%= sprintf("%.2f", ( @results[i_key][q_key].to_f / @results[i_key]['count'].to_f )) %></td>
<% @tcount = @tcount + ( @results[i_key][q_key].to_f / @results[i_key]['count'].to_f ) %>
<% end %>
<% end %>
<td><%= @tcount %></td>
</tr>
<% end %>
</table>
<br /><br />
您覺得本處之行政品質有那些地方尚待改進嗎?
<table border="1">
<tr>
<td>填答人數</td>
<td><%= @comment_question.count %></td>
</tr>
</table>
<br /><br />
<table border="0">
<tr>
<td>發佈日期</td>
<td><%= display_date_time @period.start_date %></td>
</tr>
<tr>
<td>截止日期</td>
<td><%= display_date_time @period.end_date %></td>
</tr>
</table>
@@ -1,33 +0,0 @@
<% set_default_index do
objects @answers
quick_edit_link type: 'delete',
link: 'panel_survey_b_back_end_survey_b_path',
link_option: ":period=>params[:period],:page=>params[:page]"
field db_field: 'contact_name',
translation: 'survey_b.contact_name_label',
quick_edit: true,
sort: 'contact_name',
header_class: 'span3'
field db_field: 'contact_phone',
translation: 'survey_b.contact_phone_label',
sort: 'contact_phone',
header_class: 'span3'
field db_field: 'contact_e_mail',
translation: 'survey_b.contact_e_mail_label',
sort: 'contact_e_mail',
header_class: 'span5'
field db_field: 'comment_question',
translation: 'survey_b.comment_question_label',
sort: 'comment_question',
header_class: 'span5'
field db_field: 'created_at',
translation: 'survey_b.created_at',
display_option: 'display_date_time(value)',
hide: 'phone',
sort: 'created_at'
footer link: 'panel_survey_b_back_end_periods_path',
link_name: t(:back) + t('survey_b.survey_b')
end %>
<%= render 'admin/default_index/index' %>
@@ -1,4 +0,0 @@
$("#delete_all").attr("action", "<%= delete_panel_survey_b_back_end_survey_b_index_path(:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil, :sort_options => params[:sort_options]) %>");
$("#sort_headers").html("<%= j render 'sort_headers' %>");
$("#tbody_survey_answers").html("<%= j render :partial => 'answer', :collection => @answers %>");
$("#survey_answers_pagination").html("<%= j paginate @answers %>");
@@ -1,134 +0,0 @@
<% if @period %>
<h1><%= @period.title %></h1>
<h4>
<%= t('survey_b.period') %>:
<%= display_date_time @period.start_date %>
-
<%= display_date_time @period.end_date %>
</h4>
<% end %>
<table class="table main-list">
<thead>
<tr>
<th></th>
<th><%= t('survey_b.answered_sum') %></th>
<th><%= t('survey_b.answered_sum7') %></th>
<th><%= t('survey_b.answered_count') %></th>
<% t('survey_b.questions').each do |q_key, question| %>
<th>
<%= question.sub /\d\./, '' %>
</th>
<% end %>
</tr>
</thead>
<tbody>
<% (t('survey_b.institutions').merge({ 'all' => t('survey_b.answered_sum') })).each do |i_key, institution| %>
<tr>
<td><%= institution %></td>
<td>
<% if @results[i_key]['count'] == 0 %>
<%= t('survey_b.no_data') %>
<% else %>
<%= sprintf("%.2f", ( @results[i_key]['sum'].to_f / t('survey_b.questions').count.to_f ) / @results[i_key]['count'].to_f ) %>
<%#= ( ( @results[i_key]['sum'].to_f / t('survey_b.questions').count.to_f ) / @results[i_key]['count'].to_f ).round(2) %>
<% end %>
</td>
<td>
<% if @results[i_key]['count'] == 0 %>
<%= t('survey_b.no_data') %>
<% else %>
<%= sprintf("%.2f", ( @results[i_key]['sum7'].to_f / 7.0 ) / @results[i_key]['count'].to_f ) %>
<%#= ( ( @results[i_key]['sum7'].to_f / 7.0 ) / @results[i_key]['count'].to_f ).round(2) %>
<% end %>
</td>
<td>
<%= @results[i_key]['count'] %>
</td>
<% t('survey_b.questions').each do |q_key, question| %>
<td>
<% if @results[i_key]['count'] == 0 %>
<%= t('survey_b.no_data') %>
<% else %>
<%= sprintf("%.2f", ( @results[i_key][q_key].to_f / @results[i_key]['count'].to_f )) %>
<%#= ( @results[i_key][q_key].to_f / @results[i_key]['count'].to_f ).round(2) %>
<% end %>
</td>
<% end %>
</tr>
<% end %>
</tbody>
</table>
<ul>
<% [:good_institutions, :bad_institutions, :person_question, :rate_question, :quality_question].each do |item| %>
<li>
<table>
<tr>
<td><div id="<%= item.to_s %>_chart" style="width: 600px; height: 300px;"></div>
</td>
<td><div id="<%= item.to_s %>_bar_chart" style="width: 600px; height: 300px;"></div>
</td>
</tr>
</table>
</li>
<% end %>
</ul>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
window.google.load("visualization", "1", {packages: ["columnchart"]});
window.google.load("visualization", "1", {packages:["corechart"]});
window.google.setOnLoadCallback(function(){
<% [:good_institutions, :bad_institutions].each do |item| %>
<% @tcount = 0 %>
var data_<%= item %> = google.visualization.arrayToDataTable([
['<%= t("survey_b.#{item}_label") %>', ''],
<% @results[item].each do |institution, count| %>
['<%= t("survey_b.institutions.#{institution}") %>', <%= count %>],
<% @tcount = @tcount + count %>
<% end %>
]);
var chart_<%= item %> = new google.visualization.PieChart(document.getElementById('<%= item.to_s %>_chart'));
chart_<%= item %>.draw(data_<%= item %>, {title: '<%= t("survey_b.#{item}_label") %>'});
//bar
var data_bar_<%= item %> = google.visualization.arrayToDataTable([
['<%= t("survey_b.#{item}_label") %>', '%'],
<% @results[item].each do |institution, count| %>
['<%= t("survey_b.institutions.#{institution}") %>', <%= count == 0 ? "0" : sprintf("%.2f", (count.to_f / @tcount ) * 100 ) %>],
<% end %>
]);
var bar_chart_<%= item %> = new google.visualization.ColumnChart(document.getElementById("<%= item.to_s %>_bar_chart"));
bar_chart_<%= item %>.draw(data_bar_<%= item %>, {title: '<%= t("survey_b.#{item}_label") %>'});
<% end %>
<% [:person_question, :rate_question, :quality_question].each do |item| %>
<% @tcount = 0 %>
var data_<%= item %> = google.visualization.arrayToDataTable([
['<%= t("survey_b.#{item}_label") %>', ''],
<% @results[item].each_with_index do |count, option| %>
['<%= t("survey_b.#{item}_options")[option] %>', <%= count %>],
<% @tcount = @tcount + count %>
<% end %>
]);
var chart_<%= item %> = new google.visualization.PieChart(document.getElementById('<%= item.to_s %>_chart'));
chart_<%= item %>.draw(data_<%= item %>, {title: '<%= t("survey_b.#{item}_label") %>'});
//bar
var data_bar_<%= item %> = google.visualization.arrayToDataTable([
['<%= t("survey_b.#{item}_label") %>', '%'],
<% @results[item].each_with_index do |count, option| %>
['<%= t("survey_b.#{item}_options")[option] %>', <%= count == 0 ? "0" : sprintf("%.2f", (count.to_f / @tcount ) * 100 ) %>],
<% end %>
]);
var bar_chart_<%= item %> = new google.visualization.ColumnChart(document.getElementById("<%= item.to_s %>_bar_chart"));
bar_chart_<%= item %>.draw(data_bar_<%= item %>, {title: '<%= t("survey_b.#{item}_label") %>'});
<% end %>
});
</script>
@@ -1 +0,0 @@
alert("<%= @answer_error %>");
@@ -1,2 +0,0 @@
alert("<%= t('survey.answer_success')%>");
window.location.href = "<%= root_path %>";
@@ -1,32 +0,0 @@
<h1><%= @period.title %></h1>
<div>
<section>
<div class="o-question">
<% if @period.isAvailable? %>
<%= form_for :answer, :url => panel_survey_b_front_end_survey_b_index_path, :method => :get, :html => {:class => 'survey_b clear'} do |f| %>
<%= f.hidden_field :standalone, :value => true, :name => :standalone %>
<%= f.hidden_field :period_id, :value => @period.id, :name => :period %>
<p>
<%= p @setting.announcement.gsub("\n", '<br />').html_safe %>
</p>
<br />
<p>
<%= f.check_box :agree, :name => :agree %>
<%= f.label :agree, t('survey_b.agree_check'), :style => "display:inline" %>
</p>
<div class="o-question-action">
<%= f.submit t('submit'), :class => 'survey-submit' %>
</div>
<% end %>
<% else %>
<% status_type = t('survey_b.status_types') %>
<p class="text-warning"><h4><%= t('survey_b.survey_b') + status_type[@period.get_status_type.to_sym] %></h4></p>
<% end %>
</div>
</section>
</div>
<% content_for :page_stylesheets do %>
<link href='/assets/questionnaire.css' rel='stylesheet' type='text/css' />
<% end %>
@@ -1,4 +0,0 @@
<script type="text/javascript">
<%= render 'answer_error' %>
window.history.back();
</script>
@@ -1 +0,0 @@
<%= render 'answer_error' %>
Loaded 100 of 144 files, more files were not shown because too many files have changed in this diff. Show more