diff --git a/Gemfile b/Gemfile index 80d2db1c..82d572a9 100644 --- a/Gemfile +++ b/Gemfile @@ -43,6 +43,7 @@ gem 'resque', :require => 'resque/server' # background jobs gem 'resque-scheduler' # job scheduling gem 'resque-restriction' #gem 'rb-readline' +gem 'roo' # gem 'ruby-debug19' gem 'rubyzip', '< 1.0.0' diff --git a/app/assets/images/social-share-button.png b/app/assets/images/social-share-button.png new file mode 100644 index 00000000..3507161c Binary files /dev/null and b/app/assets/images/social-share-button.png differ diff --git a/app/assets/javascripts/lib/social-share-button.coffee b/app/assets/javascripts/lib/social-share-button.coffee new file mode 100644 index 00000000..cec9fcbc --- /dev/null +++ b/app/assets/javascripts/lib/social-share-button.coffee @@ -0,0 +1,33 @@ +window.SocialShareButton = + openUrl : (url) -> + window.open(url) + false + + share : (el) -> + site = $(el).data('site') + title = encodeURIComponent($(el).parent().data('title')) + img = encodeURIComponent($(el).parent().data("img")) + fb_url = encodeURIComponent($(el).parent().data("fb_url")) + url = encodeURIComponent(location.href) + switch site + when "weibo" + SocialShareButton.openUrl("http://v.t.sina.com.cn/share/share.php?url=#{url}&pic=#{img}&title=#{title}&content=utf-8") + when "twitter" + SocialShareButton.openUrl("https://twitter.com/home?status=#{title}: #{url}") + when "douban" + SocialShareButton.openUrl("http://www.douban.com/recommend/?url=#{url}&title=#{title}&image=#{img}") + when "facebook" + SocialShareButton.openUrl("http://www.facebook.com/sharer.php?t=#{title}&u=#{fb_url}") + when "qq" + SocialShareButton.openUrl("http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=#{url}&title=#{title}&pics=#{img}") + when "tqq" + SocialShareButton.openUrl("http://share.v.t.qq.com/index.php?c=share&a=index&url=#{url}&title=#{title}&pic=#{img}") + when "baidu" + SocialShareButton.openUrl("http://apps.hi.baidu.com/share/?url=#{url}&title=#{title}&content=") + when "kaixin001" + SocialShareButton.openUrl("http://www.kaixin001.com/rest/records.php?url=#{url}&content=#{title}&style=11&pic=#{img}") + when "renren" + SocialShareButton.openUrl("http://widget.renren.com/dialog/share?resourceUrl=#{url}&title=#{title}&description=") + when "google_plus" + SocialShareButton.openUrl("https://plus.google.com/share?url=#{url}&t=#{title}") + false \ No newline at end of file diff --git a/app/assets/javascripts/member-selection.js b/app/assets/javascripts/member-selection.js index 276b48b2..cf783d0a 100644 --- a/app/assets/javascripts/member-selection.js +++ b/app/assets/javascripts/member-selection.js @@ -10,7 +10,7 @@ $(document).ready(function() { type: 'GET', url: $(this).attr("rel"), dataType: 'script', - data: {ids: ids}, + data: {field: $(this).attr("field"), ids: ids}, success: function (msg) { $("#member-filter").modal('show'); }, error: function(){ @@ -20,6 +20,11 @@ $(document).ready(function() { }); return false; }); + + $(document).on('click', ".remove_user", function(){ + $(this).parent().remove(); + }); + $("#remove_users").on('click', function(){ var ids = []; var users = $('.selected_user input[type="checkbox"]:checked'); diff --git a/app/assets/javascripts/orbit-bar-search.js b/app/assets/javascripts/orbit-bar-search.js new file mode 100644 index 00000000..e0d9bf97 --- /dev/null +++ b/app/assets/javascripts/orbit-bar-search.js @@ -0,0 +1,10 @@ +$(document).ajaxStop(function() { + $('.nav').find('.dropdown').on({ + mouseleave: function() { + $(this).removeClass("open"); + }, + mouseenter: function() { + $(this).addClass("open") + } + }); +}); \ No newline at end of file diff --git a/app/assets/stylesheets/member_select.css b/app/assets/stylesheets/member_select.css new file mode 100644 index 00000000..891a4f33 --- /dev/null +++ b/app/assets/stylesheets/member_select.css @@ -0,0 +1,230 @@ +/* Member Filter */ +#select_user #select_user_modal.modal { + width: 80%; + margin-left: -40%; +} +#select_user #select_user_modal .modal-body { + max-height: 425px; +} +#select_user #select_user_modal .modal-body form { + margin-bottom: 0px; +} +#select_user #select_user_modal .modal-body form fieldset { + min-height: 360px; +} +#select_user #select_user_modal .modal-body .radio.inline, +#select_user #select_user_modal .modal-body .checkbox.inline { + display: inline-block; + padding-top: 5px; + margin-bottom: 0; + vertical-align: middle; + min-width: 100px; + margin-left: 0; +} +#select_user #select_user_modal .modal-body .form-actions { + margin: 20px 0 0; + padding: 10px 0 0; + background-color: transparent; + text-align: right; +} +#select_user #select_user_modal .modal-body .tabs-left > .nano { + width: 160px; + min-height: 425px; + float: left; +} +#select_user #select_user_modal .modal-body .tabs-left > .nano .pane { + right: 6px; +} +#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs { + width: 140px; + float: left; + margin-bottom: 0; + margin-right: 0; + border-right: 1px solid #ddd; + border-bottom: none; +} +#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs > li { + float: none; +} +#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs > li > a { + min-width: 74px; + margin-right: 0; + margin-bottom: 3px; +} +#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs > li > a { + margin-right: -1px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} +#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs > li > a:hover { + border-color: #eeeeee #dddddd #eeeeee #eeeeee; +} +#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs .active > a, +#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs .active > a:hover { + border-color: #ddd transparent #ddd #ddd; + *border-right-color: #ffffff; +} +#select_user #select_user_modal .member-filter-options { + float: left; + display: inline-block; + width: 175px; + min-height: 425px; + margin-right: 10px; + padding: 0 10px 0 0; +} +#select_user #select_user_modal .member-filter-options select { + width: 165px; +} +#select_user #select_user_modal .member-filter-options .btn { + display: block; +} +#select_user #select_user_modal .member-filter-result { + padding-left: 15px; + min-height: 360px; + width: auto; +} + + +/* Check Box Card */ +.checkbox-card { + margin: 0; +} +.checkbox-card li { + position: relative; + list-style: none; + color: #FFFFFF; + width: 180px; + height: 40px; + margin: 0 10px 10px 0; + float: left; + display: inline-block; + background-color: #cccccc; + overflow: hidden; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + -webkit-transition: all .2s linear; + -moz-transition: all .2s linear; + -o-transition: all .2s linear; + transition: all .2s linear; +} +.checkbox-card li.mark { + width: 0; + height: 0; + padding: 0; + margin: 0; + -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + opacity: 0; + visibility: hidden; +} +.checkbox-card li:hover { + background-color: #0088cc; +} +.checkbox-card li:after { + content: ""; + display: block; + clear: both; + height: 0; + visibility: hidden; +} +.checkbox-card li.active:before { + -webkit-text-size-adjust : none; + font-family: FontAwesome; + font-weight: normal; + font-style: normal; + color: #FFF; + text-decoration: inherit; + content: "\f00c"; + position: absolute; + right: 0px; + top: 0px; + line-height: 14px; + text-indent: 10px; + font-size: 10px; + width: 0px; + height: 0px; + border-style: solid; + border-width: 0 22px 22px 0; + border-color: transparent #51a351 transparent transparent; +} +.checkbox-card li.active label { +} +.checkbox-card li label { + margin-bottom: 0px; + overflow: hidden; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.checkbox-card li input { + opacity: 0; + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + margin: 0; + z-index: 10; +} +.checkbox-card li label span { + -webkit-text-size-adjust : none; + font-size: 10px; + display: block; + width: 130px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + color: #666666; + margin-top: -3px; +} +.checkbox-card li:hover label span, +.checkbox-card li:hover label span.user-name { + color: #FFFFFF; +} +.checkbox-card li label span.user-name { + font-size: 12px; + color: #363636; + padding: 2px 0 0; + margin-top: 0; +} +.checkbox-card li .user-pic { + float: left; + margin-right: 5px; + width: 40px; + height: 40px; +} +#selected_users .selected_user { + display: block; + margin-bottom: 5px; +} +#selected_users .selected_user .remove_user { + font-size: 15px; +} +/* +.promoter { + border-color: #CCCCCC; + border-style: solid; + border-width: 0 1px; + padding: 0 10px 5px 10px; +} +.promoter > div { + border-bottom: 1px solid #CCCCCC; +} +.promoter > div:after { + content: ""; + clear: both; + display: block; + visibility: hidden; +} +.promoter > div > span { + display: block; + margin-left: 70px; + padding-bottom: 5px; +} +.promoter p { + width: 70px; + float: left; + text-align:right; +}*/ \ No newline at end of file diff --git a/app/assets/stylesheets/social-share-button.css b/app/assets/stylesheets/social-share-button.css new file mode 100644 index 00000000..1acc138e --- /dev/null +++ b/app/assets/stylesheets/social-share-button.css @@ -0,0 +1,90 @@ +.social-share-button-baidu { + display:inline-block; + width:16px; + height:16px; + background:url("/assets/social-share-button.png") 0px 0px no-repeat; +} +.social-share-button-delicious { + display:inline-block; + width:16px; + height:16px; + background:url("/assets/social-share-button.png") -16px 0px no-repeat; +} +.social-share-button-douban { + display:inline-block; + width:16px; + height:16px; + background:url("/assets/social-share-button.png") 0px -16px no-repeat; +} +.social-share-button-email { + display:inline-block; + width:16px; + height:16px; + background:url("/assets/social-share-button.png") -16px -16px no-repeat; +} +.social-share-button-facebook { + display:inline-block; + width:16px; + height:16px; + background:url("/assets/social-share-button.png") -32px 0px no-repeat; +} +.social-share-button-flickr { + display:inline-block; + width:16px; + height:16px; + background:url("/assets/social-share-button.png") -32px -16px no-repeat; +} +.social-share-button-google { + display:inline-block; + width:16px; + height:16px; + background:url("/assets/social-share-button.png") 0px -32px no-repeat; +} +.social-share-button-google_plus { + display:inline-block; + width:16px; + height:16px; + background:url("/assets/social-share-button.png") -16px -32px no-repeat; +} +.social-share-button-kaixin001 { + display:inline-block; + width:16px; + height:16px; + background:url("/assets/social-share-button.png") -32px -32px no-repeat; +} +.social-share-button-qq { + display:inline-block; + width:16px; + height:16px; + background:url("/assets/social-share-button.png") -48px 0px no-repeat; +} +.social-share-button-renren { + display:inline-block; + width:16px; + height:16px; + background:url("/assets/social-share-button.png") -48px -16px no-repeat; +} +.social-share-button-tqq { + display:inline-block; + width:16px; + height:16px; + background:url("/assets/social-share-button.png") -48px -32px no-repeat; +} +.social-share-button-twitter { + display:inline-block; + width:16px; + height:16px; + background:url("/assets/social-share-button.png") 0px -48px no-repeat; +} +.social-share-button-weibo { + display:inline-block; + width:16px; + height:16px; + background:url("/assets/social-share-button.png") -16px -48px no-repeat; +} +.social-share-button-rss { + display:inline-block; + width:16px; + height:16px; + background:url("/assets/social-share-button.png") -32px -48px no-repeat; +} \ No newline at end of file diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb new file mode 100644 index 00000000..927719bc --- /dev/null +++ b/app/controllers/sessions_controller.rb @@ -0,0 +1,40 @@ +# encoding: utf-8 + +class SessionsController < Devise::SessionsController + prepend_before_filter :require_no_authentication, :only => [ :new, :create ] + + + def create + @site = Site.first + + private_key = OpenSSL::PKey::RSA.new(@site.private_key) + wresult = private_key.private_decrypt(request.params['wresult']) + + @ids = wresult.split("@") + + login_uid = @ids[0] + + resource = User.first(conditions:{user_id: login_uid}) + + if !resource.blank? + resource_name = resource.class.to_s.downcase + sign_in(resource_name, resource) + session[:user_id_type] = "myntu" + redirect_to after_sign_in_path_for(resource) + else + flash[:error] = "很抱歉,您無此權限或帳號登入本站,請洽本站管理員
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 \ No newline at end of file diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index a1a81c4b..d31cd5fa 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -194,7 +194,8 @@ module ApplicationHelper stylesheets << "\n" stylesheets << "\n" if page.design.css_reset # stylesheets << "\n" - # stylesheets << "\n" + # stylesheets << "\n" + stylesheets << "\n" stylesheets << "\n" if page.design.css_default theme = page.design.themes.detect{ |d| d.id == page.theme_id } stylesheets << "\n" if theme @@ -203,8 +204,12 @@ module ApplicationHelper def page_javascripts(page, edit=nil) javascripts = '' + unless edit + javascripts << "\n" + end # javascripts << "\n" # javascripts << "\n" + javascripts << "\n" page.design.javascripts.each do |js| javascripts << "" end @@ -301,7 +306,7 @@ module ApplicationHelper # NTU link def get_link(site_number) - "http://#{request.host}:2#{site_number}00" + "http://#{site_number}.#{request.domain(3)}" end def sortable(column, title = nil, options = {}) diff --git a/app/helpers/orbit_backend_helper.rb b/app/helpers/orbit_backend_helper.rb index f9256fbb..04d36d93 100644 --- a/app/helpers/orbit_backend_helper.rb +++ b/app/helpers/orbit_backend_helper.rb @@ -345,7 +345,7 @@ module OrbitBackendHelper if object.is_a?(klass.constantize) autorized ||= object.user_can_sub_manage?(current_user) else - autorized ||= object.send(klass.underscore).user_can_sub_manage?(current_user) + autorized ||= object.send(klass.underscore).user_can_sub_manage?(current_user) rescue nil end autorized end @@ -444,4 +444,4 @@ module OrbitBackendHelper res.html_safe end -end \ No newline at end of file +end diff --git a/app/views/admin/member_selects/_modal_select.html.erb b/app/views/admin/member_selects/_modal_select.html.erb index becc1993..99f4f02a 100644 --- a/app/views/admin/member_selects/_modal_select.html.erb +++ b/app/views/admin/member_selects/_modal_select.html.erb @@ -28,6 +28,7 @@
<%= submit_tag t(:submit), class: "btn btn-primary" %> + <%= hidden_field_tag field, @field %>
<% end %> @@ -53,6 +54,7 @@
<%= submit_tag t(:submit), class: "btn btn-primary" %> + <%= hidden_field_tag field, @field %>
<% end %> diff --git a/app/views/admin/member_selects/_promoter_front.html.erb b/app/views/admin/member_selects/_promoter_front.html.erb new file mode 100644 index 00000000..f8bec0fb --- /dev/null +++ b/app/views/admin/member_selects/_promoter_front.html.erb @@ -0,0 +1,14 @@ +<% unless users.blank? %> +
+

<%= t(:promoter) %>:

+ +
+<% end %> \ No newline at end of file diff --git a/app/views/admin/member_selects/_selection_box.html.erb b/app/views/admin/member_selects/_selection_box.html.erb new file mode 100644 index 00000000..c54929aa --- /dev/null +++ b/app/views/admin/member_selects/_selection_box.html.erb @@ -0,0 +1,16 @@ +<% content_for :page_specific_javascript do -%> + <%= javascript_include_tag "member-selection" %> + <%= javascript_include_tag "lib/jquery.nanoscroller" %> + <%= javascript_include_tag "lib/checkbox.card" %> +<% end -%> +<% content_for :page_specific_css do -%> + <%= stylesheet_link_tag "member_select" %> +<% end %> + +
+
+ <%= render partial: 'admin/member_selects/user', collection: users, locals: {field: field} %> + <%= hidden_field_tag field %> +
+ <%= link_to t(:add), '#', class: 'btn btn-primary btn-small select_user_modal', rel: select_members_admin_member_selects_path, field: field %> +
\ No newline at end of file diff --git a/app/views/devise/sessions/new.html.erb b/app/views/devise/sessions/new.html.erb index 1b77fce2..476b61fa 100644 --- a/app/views/devise/sessions/new.html.erb +++ b/app/views/devise/sessions/new.html.erb @@ -12,10 +12,11 @@ - +
diff --git a/app/views/layouts/_right_menu.html.erb b/app/views/layouts/_right_menu.html.erb index b4efb307..89ca7ad2 100644 --- a/app/views/layouts/_right_menu.html.erb +++ b/app/views/layouts/_right_menu.html.erb @@ -13,6 +13,16 @@
+ + +
  • <%= link_to content_tag(:i, nil, class: 'icons-screen') + ' ' + t(:desktop), desktop_path, tabindex: '-1' %>
  • <% end %> -
  • <%= link_to content_tag(:i, nil, class: 'icons-logout') + ' ' + t(:logout), destroy_user_session_path, tabindex: '-1' %>
  • +
  • <%= link_to content_tag(:i, nil, class: 'icons-logout') + ' ' + t(:logout), user_logout_path, tabindex: '-1' %>
  • <%= t(:help) %>
  • @@ -56,6 +66,12 @@
    + + +
    + +
    + <%= render partial: 'admin/member_selects/selection_box', locals: {field: 'bulletin[user_ids][]', users: @users} %> +
    +
    diff --git a/vendor/built_in_modules/announcement/app/views/panel/announcement/front_end/bulletins/show.html.erb b/vendor/built_in_modules/announcement/app/views/panel/announcement/front_end/bulletins/show.html.erb index 0f60d98e..3b09c4e5 100644 --- a/vendor/built_in_modules/announcement/app/views/panel/announcement/front_end/bulletins/show.html.erb +++ b/vendor/built_in_modules/announcement/app/views/panel/announcement/front_end/bulletins/show.html.erb @@ -36,6 +36,21 @@ <% end %> + <% unless @bulletin.rss_link.blank? %> +
    + <%= link_to t('ntu.rss_origin'), @bulletin.rss_link %> +
    + <% end %> +<% unless @bulletin.user_ids.blank? %> +
    +
    + <%= render partial: 'admin/member_selects/promoter_front', locals: {users: @bulletin.get_users} %> +
    +
    +<% end %> + <%= share_links(@bulletin, 'announcement') %> + + diff --git a/vendor/built_in_modules/archive/app/controllers/panel/archive/back_end/archive_files_controller.rb b/vendor/built_in_modules/archive/app/controllers/panel/archive/back_end/archive_files_controller.rb index 5cf588f5..f196e847 100644 --- a/vendor/built_in_modules/archive/app/controllers/panel/archive/back_end/archive_files_controller.rb +++ b/vendor/built_in_modules/archive/app/controllers/panel/archive/back_end/archive_files_controller.rb @@ -87,6 +87,7 @@ class Panel::Archive::BackEnd::ArchiveFilesController < OrbitBackendController # GET /archive_files/1/edit def edit @archive_file = ArchiveFile.find(params[:id]) + @users = @archive_file.get_users if !current_user.admin? redirect_to :action => :index else diff --git a/vendor/built_in_modules/archive/app/models/archive_file.rb b/vendor/built_in_modules/archive/app/models/archive_file.rb index db5ad635..3ea6bfab 100644 --- a/vendor/built_in_modules/archive/app/models/archive_file.rb +++ b/vendor/built_in_modules/archive/app/models/archive_file.rb @@ -22,6 +22,8 @@ class ArchiveFile field :title, localize: true field :create_user_id field :update_user_id, :class_name => "User" + field :user_ids + scope :can_display,where(is_hidden: false) @@ -73,6 +75,10 @@ class ArchiveFile end + def get_users + User.find(self.user_ids) rescue [] + end + def get_file_icon( file_data ) file_icon = "#{file_data.split('.')[-1]}".html_safe diff --git a/vendor/built_in_modules/archive/app/views/panel/archive/back_end/archive_files/_form.html.erb b/vendor/built_in_modules/archive/app/views/panel/archive/back_end/archive_files/_form.html.erb index 1583a0be..a19ce99a 100644 --- a/vendor/built_in_modules/archive/app/views/panel/archive/back_end/archive_files/_form.html.erb +++ b/vendor/built_in_modules/archive/app/views/panel/archive/back_end/archive_files/_form.html.erb @@ -54,6 +54,14 @@ + +
    + +
    + <%= render partial: 'admin/member_selects/selection_box', locals: {field: 'archive_file[user_ids][]', users: @users} %> +
    +
    + diff --git a/vendor/built_in_modules/archive/app/views/panel/archive/front_end/archive_files/_index.html.erb b/vendor/built_in_modules/archive/app/views/panel/archive/front_end/archive_files/_index.html.erb index 149ee2f3..428ee8c6 100644 --- a/vendor/built_in_modules/archive/app/views/panel/archive/front_end/archive_files/_index.html.erb +++ b/vendor/built_in_modules/archive/app/views/panel/archive/front_end/archive_files/_index.html.erb @@ -9,19 +9,19 @@ <%= sortable(:title, t("archive.Title"))%> <%= t("archive.Files")%> - <%= sortable(:archive_file_category, t("archive.Category"))%> + <%= t(:promoter)%> <% @archive_files.each_with_index do |post,i| %> class="even" <% end %>> - +
    <%= post.title %> <% if !post.is_hot.blank? %><%= t('hot')%><% end %>
    - +
    <% if !post.archive_file_multiples.blank? %>
      @@ -37,9 +37,21 @@ <% end %>
    -
    - <%= post.category.title if !post.category.blank? %> -
    + + <% unless post.get_users.blank? %> +
    + +
    + <% end %> + <% end %> diff --git a/vendor/built_in_modules/ask/app/controllers/panel/ask/back_end/asK_requests_controller.rb b/vendor/built_in_modules/ask/app/controllers/panel/ask/back_end/asK_requests_controller.rb new file mode 100644 index 00000000..5f7d3a4f --- /dev/null +++ b/vendor/built_in_modules/ask/app/controllers/panel/ask/back_end/asK_requests_controller.rb @@ -0,0 +1,45 @@ +# encoding: utf-8 + +class Panel::Ask::BackEnd::AskRequestsController < OrbitBackendController + include AdminHelper + #include OrbitControllerLib::DivisionForDisable + + #before_filter :for_app_manager + skip_before_filter :verify_authenticity_token + open_for_visitor :only => [:transferred_request] + + def transferred_request + app_title = request.fullpath.split('/')[2] + module_app ||= ModuleApp.first(conditions: {:key => app_title} ) + + if request.headers["HTTP_X_AUTH_TOKEN"] == '3kjlfksjDFJ' + if !module_app.categories.where("title.en" => "Transferred Question").any? + ask_category = module_app.categories.build + ask_category.title_translations = { "zh_tw" => "轉介的問題", "en" => "Transferred Question" } + ask_category.save! + end + + module_app.categories.enabled + category = module_app.categories.where("title.en" => "Transferred Question").first + + @transferred_question = AskQuestion.new( + name: params['name'], + identity: params['identity'], + email: params['email'], + phone: params['phone'], + tax: params['tax'], + title: params['title'], + content: params['content'], + category_id: category.id) + + @transferred_question.ask_reply = AskReply.new + @transferred_question.ask_reply.update_attributes(status: "待處理 (轉)") + @transferred_question.save + + render :nothing => true + else + render :status => 500 + end + end +end + diff --git a/vendor/built_in_modules/ask/app/controllers/panel/ask/back_end/ask_acknowledgements_controller.rb b/vendor/built_in_modules/ask/app/controllers/panel/ask/back_end/ask_acknowledgements_controller.rb index 58f2ef47..8debc5e7 100644 --- a/vendor/built_in_modules/ask/app/controllers/panel/ask/back_end/ask_acknowledgements_controller.rb +++ b/vendor/built_in_modules/ask/app/controllers/panel/ask/back_end/ask_acknowledgements_controller.rb @@ -1,13 +1,14 @@ class Panel::Ask::BackEnd::AskAcknowledgementsController < OrbitBackendController - include AdminHelper - include OrbitControllerLib::DivisionForDisable + #include AdminHelper + #include OrbitControllerLib::DivisionForDisable - before_filter :for_app_manager + #before_filter :for_app_manager + open_for_manager - def initialize - super - @app_title = 'ask_acknowledgement' - end + #def initialize + # super + # @app_title = 'ask_acknowledgement' + #end def index @ask_acknowledgement = AskAcknowledgement.first || AskAcknowledgement.create diff --git a/vendor/built_in_modules/ask/app/controllers/panel/ask/back_end/ask_admins_controller.rb b/vendor/built_in_modules/ask/app/controllers/panel/ask/back_end/ask_admins_controller.rb index b6994da0..8a657d4a 100644 --- a/vendor/built_in_modules/ask/app/controllers/panel/ask/back_end/ask_admins_controller.rb +++ b/vendor/built_in_modules/ask/app/controllers/panel/ask/back_end/ask_admins_controller.rb @@ -1,14 +1,15 @@ class Panel::Ask::BackEnd::AskAdminsController < OrbitBackendController - include AdminHelper - include OrbitControllerLib::DivisionForDisable + #include AdminHelper + #include OrbitControllerLib::DivisionForDisable - before_filter :for_app_manager + #before_filter :for_app_manager + open_for_manager - def initialize - super - @app_title = 'ask_admins' - end + #def initialize + # super + # @app_title = 'ask_admins' + #end def index @ask_admins = AskAdmin.all diff --git a/vendor/built_in_modules/ask/app/controllers/panel/ask/back_end/ask_questions_controller.rb b/vendor/built_in_modules/ask/app/controllers/panel/ask/back_end/ask_questions_controller.rb index cf8180c3..f15731ef 100644 --- a/vendor/built_in_modules/ask/app/controllers/panel/ask/back_end/ask_questions_controller.rb +++ b/vendor/built_in_modules/ask/app/controllers/panel/ask/back_end/ask_questions_controller.rb @@ -1,11 +1,11 @@ -require 'csv' - class Panel::Ask::BackEnd::AskQuestionsController < OrbitBackendController + + require 'csv' - def initialize - super - @app_title = 'ask_questions' - end + # def initialize + # super + # @app_title = 'ask_questions' + # end def index @ask_questions = AskQuestion.all @@ -53,10 +53,12 @@ class Panel::Ask::BackEnd::AskQuestionsController < OrbitBackendController Rails.application.config.mongoid.use_activesupport_time_zone = true date_start = "#{params[:export]['start(1i)']}-#{params[:export]['start(2i)']}-#{params[:export]['start(3i)']}" date_end = "#{params[:export]['end(1i)']}-#{params[:export]['end(2i)']}-#{params[:export]['end(3i)']}" - @ask_questions = AskQuestion.includes(:ask_category).includes(:ask_reply).where(:created_at.gte => date_start, :created_at.lte => date_end) + #@ask_questions = AskQuestion.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 << [ t('category'), + csv << [ t('status'), + t('category'), AskQuestion.human_attribute_name(:name), AskQuestion.human_attribute_name(:identity), AskQuestion.human_attribute_name(:email), @@ -68,7 +70,8 @@ class Panel::Ask::BackEnd::AskQuestionsController < OrbitBackendController AskReply.human_attribute_name(:comment)] @ask_questions.each do |ask_question| ask_question.ask_reply ||= AskReply.new - csv << [ ask_question.ask_category.name, + csv << [ ask_question.ask_reply.status, + ask_question.category.title, ask_question.name, ask_question.identity, ask_question.email, diff --git a/vendor/built_in_modules/ask/app/controllers/panel/ask/back_end/ask_replies_controller.rb b/vendor/built_in_modules/ask/app/controllers/panel/ask/back_end/ask_replies_controller.rb index 86219b7a..d392fd90 100644 --- a/vendor/built_in_modules/ask/app/controllers/panel/ask/back_end/ask_replies_controller.rb +++ b/vendor/built_in_modules/ask/app/controllers/panel/ask/back_end/ask_replies_controller.rb @@ -1,3 +1,4 @@ +# encoding: utf-8 class Panel::Ask::BackEnd::AskRepliesController < OrbitBackendController include AdminHelper @@ -13,19 +14,122 @@ class Panel::Ask::BackEnd::AskRepliesController < OrbitBackendController def create @ask_question = AskQuestion.find(params[:ask_question_id]) @ask_question.ask_reply = AskReply.new(params[:ask_reply]) + @ask_reply = @ask_question.ask_reply @ask_question.save + if @ask_question.ask_reply.send_email? Resque.enqueue(SendAskReplyMail, @ask_reply.ask_question.id) end + + status_stack = [] + new_status = "" + params[:ask_reply][:depts].each do |dns| + # host = dns.split(":").first # local test + + begin + status_stack << send_request(dns, @ask_reply.ask_question, @ask_reply) # local test, switch host to dns if on server + rescue + status_stack << "fail" + end + end if params[:ask_reply][:status] == "轉介其他單位" + + success_count = status_stack.count("success") + failed_count = status_stack.count("fail") + + if failed_count == 0 && success_count > 0 + new_status = "轉介其他單位" + elsif failed_count > 0 && success_count > 0 + new_status = "部份轉介失敗" + elsif failed_count > 0 && success_count == 0 + new_status = "轉介失敗" + elsif failed_count == 0 && success_count == 0 && @ask_reply.status == "待處理" + new_status = "待處理" + elsif failed_count == 0 && success_count == 0 && @ask_reply.status == "已處理" + new_status = "已處理" + elsif failed_count == 0 && success_count == 0 && @ask_reply.status == "轉介其他單位" + new_status = "轉介失敗" + end + + @ask_reply.update_attributes(status: new_status) + redirect_to panel_ask_back_end_ask_questions_path, notice: t('ask.reply_success') end def update + @ask_reply = AskReply.find(params[:id]) @ask_reply.update_attributes(params[:ask_reply]) + if @ask_reply.send_email? Resque.enqueue(SendAskReplyMail, @ask_reply.ask_question.id) end + + status_stack = [] + new_status = "" + params[:ask_reply][:depts].each do |dns| + # host = dns.split(":").first # local test + + begin + status_stack << send_request(dns, @ask_reply.ask_question, @ask_reply) # local test, switch host to dns if on server + rescue + status_stack << "fail" + end + end if params[:ask_reply][:status] == "轉介其他單位" + + success_count = status_stack.count("success") + failed_count = status_stack.count("fail") + + if failed_count == 0 && success_count > 0 + new_status = "轉介其他單位" + elsif failed_count > 0 && success_count > 0 + new_status = "部份轉介失敗" + elsif failed_count > 0 && success_count == 0 + new_status = "轉介失敗" + elsif failed_count == 0 && success_count == 0 && @ask_reply.status == "待處理" + new_status = "待處理" + elsif failed_count == 0 && success_count == 0 && @ask_reply.status == "已處理" + new_status = "已處理" + elsif failed_count == 0 && success_count == 0 && @ask_reply.status == "轉介其他單位" + new_status = "轉介失敗" + end + + @ask_reply.update_attributes(status: new_status) + redirect_to panel_ask_back_end_ask_questions_path, notice: t('ask.reply_success') end + + private + + def send_request(dep_dns, current_question, current_reply) + require 'net/http' + require 'uri' + require 'json' + + uri_path = "/panel/ask/back_end/ask_requests/transferred_request" + http = Net::HTTP.new(dep_dns, 80) # port 4000 for local test, switch to port 80 for deployment + req = Net::HTTP::Post.new(uri_path) + + body = { + 'name' => current_question.name, + 'title' => current_question.title, + 'identity' => current_question.identity, + 'email' => current_question.email, + 'phone' => current_question.phone, + 'tax' => current_question.tax, + 'content' => current_question.content + } + + status = "" + req.set_form_data(body) + req.add_field 'X-Auth-Token', '3kjlfksjDFJ' + response = http.request(req) + + if response.code == "200" + status = "success" + else + status = "fail" + end + + return status + end end diff --git a/vendor/built_in_modules/ask/app/models/ask_reply.rb b/vendor/built_in_modules/ask/app/models/ask_reply.rb index 54112aac..a5fe2358 100644 --- a/vendor/built_in_modules/ask/app/models/ask_reply.rb +++ b/vendor/built_in_modules/ask/app/models/ask_reply.rb @@ -6,6 +6,7 @@ class AskReply field :comment, type: String field :status, type: String field :send_email, type: Boolean, detault: false + field :depts, :type => Array belongs_to :ask_question end diff --git a/vendor/built_in_modules/ask/app/views/panel/ask/back_end/ask_questions/edit.html.erb b/vendor/built_in_modules/ask/app/views/panel/ask/back_end/ask_questions/edit.html.erb index 7225f69a..2a14fd32 100644 --- a/vendor/built_in_modules/ask/app/views/panel/ask/back_end/ask_questions/edit.html.erb +++ b/vendor/built_in_modules/ask/app/views/panel/ask/back_end/ask_questions/edit.html.erb @@ -1,3 +1,45 @@ + +
    <%= form_for @ask_reply, url: @url, method: @method do |f| %> @@ -32,6 +74,26 @@ ['轉介其他單位', '轉介其他單位'] ] %> + + + + @@ -181,6 +201,15 @@ <% end %> + <% end %> diff --git a/vendor/built_in_modules/page_content/app/controllers/panel/page_content/back_end/page_contexts_controller.rb b/vendor/built_in_modules/page_content/app/controllers/panel/page_content/back_end/page_contexts_controller.rb index 644c5dbd..fee4caa4 100644 --- a/vendor/built_in_modules/page_content/app/controllers/panel/page_content/back_end/page_contexts_controller.rb +++ b/vendor/built_in_modules/page_content/app/controllers/panel/page_content/back_end/page_contexts_controller.rb @@ -48,6 +48,7 @@ class Panel::PageContent::BackEnd::PageContextsController < OrbitBackendControll # GET /page_contexts/1/edit def edit @page_context = PageContext.find(params[:id]) + @users = @page_context.get_users end # POST /page_contexts diff --git a/vendor/built_in_modules/page_content/app/models/page_context.rb b/vendor/built_in_modules/page_content/app/models/page_context.rb index 78b572fb..80919b13 100644 --- a/vendor/built_in_modules/page_content/app/models/page_context.rb +++ b/vendor/built_in_modules/page_content/app/models/page_context.rb @@ -15,6 +15,7 @@ class PageContext field :update_user_id field :version, :type => Integer , :default => 0 field :view_count, :type => Integer, :default => 0 + field :user_ids field :archived, :type => Boolean, :default => false # field :current, :type => Boolean, :default => false @@ -36,5 +37,9 @@ class PageContext def title self.page.title end + + def get_users + User.find(self.user_ids) rescue [] + end end \ No newline at end of file diff --git a/vendor/built_in_modules/page_content/app/views/panel/page_content/back_end/page_contexts/_form.html.erb b/vendor/built_in_modules/page_content/app/views/panel/page_content/back_end/page_contexts/_form.html.erb index da3856ba..5a5ddb4c 100644 --- a/vendor/built_in_modules/page_content/app/views/panel/page_content/back_end/page_contexts/_form.html.erb +++ b/vendor/built_in_modules/page_content/app/views/panel/page_content/back_end/page_contexts/_form.html.erb @@ -4,6 +4,33 @@
    + + + + + + +
    + + +
    + + +
    + +
    + <%= render partial: 'admin/member_selects/selection_box', locals: {field: 'page_context[user_ids][]', users: @users} %> +
    +
    + +
    + +
    +
    +
    + + <%= 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", "醫學院總務分處") %> +
    +
    <%= f.label :send_email %><%= f.radio_button :send_email, 1, checked: @ask_reply.send_email? %><%= t('ask.yes') %> diff --git a/vendor/built_in_modules/ask/app/views/panel/ask/front_end/ask_questions/index.html.erb b/vendor/built_in_modules/ask/app/views/panel/ask/front_end/ask_questions/index.html.erb index 30ea643d..fd928b25 100644 --- a/vendor/built_in_modules/ask/app/views/panel/ask/front_end/ask_questions/index.html.erb +++ b/vendor/built_in_modules/ask/app/views/panel/ask/front_end/ask_questions/index.html.erb @@ -84,8 +84,11 @@ $(document).ready(function(){ <%= f.text_area :content, rows: 8, class: 'input-xlarge' %> +
    + <%= f.label t('ask.validate_code'), class: 'control-label required' %>
    + <%= gotcha_error %> <%= gotcha%>
    diff --git a/vendor/built_in_modules/ask/config/locales/en.yml b/vendor/built_in_modules/ask/config/locales/en.yml index a4aeacae..7efeb897 100644 --- a/vendor/built_in_modules/ask/config/locales/en.yml +++ b/vendor/built_in_modules/ask/config/locales/en.yml @@ -17,6 +17,8 @@ en: admin: Administrator new_question: New question pending: Pending + validate_code: Verification code + validate_code_note: Please answer the following verification questions. mongoid: attributes: ask_question: diff --git a/vendor/built_in_modules/ask/config/locales/zh_tw.yml b/vendor/built_in_modules/ask/config/locales/zh_tw.yml index 0b8109b1..d4fd7163 100644 --- a/vendor/built_in_modules/ask/config/locales/zh_tw.yml +++ b/vendor/built_in_modules/ask/config/locales/zh_tw.yml @@ -22,6 +22,8 @@ zh_tw: admin: 管理者 new_question: 新的發問 pending: 待處理 + validate_code: 驗證碼 + validate_code_note: 請回答下列驗證問句。 mongoid: attributes: ask_question: diff --git a/vendor/built_in_modules/ask/config/routes.rb b/vendor/built_in_modules/ask/config/routes.rb index df2ffe95..bc33409c 100644 --- a/vendor/built_in_modules/ask/config/routes.rb +++ b/vendor/built_in_modules/ask/config/routes.rb @@ -15,6 +15,8 @@ Rails.application.routes.draw do resources :ask_categories resources :ask_acknowledgements resources :ask_admins + + match "ask_requests/transferred_request" => "ask_requests#transferred_request", :as => 'transferred_request', :via => :post end namespace :front_end do diff --git a/vendor/built_in_modules/member_staff/app/views/panel/member_staff/front_end/member_staff_lists/index.html.erb b/vendor/built_in_modules/member_staff/app/views/panel/member_staff/front_end/member_staff_lists/index.html.erb index b8e699e9..744e66c6 100644 --- a/vendor/built_in_modules/member_staff/app/views/panel/member_staff/front_end/member_staff_lists/index.html.erb +++ b/vendor/built_in_modules/member_staff/app/views/panel/member_staff/front_end/member_staff_lists/index.html.erb @@ -4,6 +4,7 @@ <% @job_title_field = @member_lists.get_member_list_attribute_field("staff","job_title") %> <% @job_business_field = @member_lists.get_member_list_attribute_field("staff","business") %> +<% @job_agent_field = @member_lists.get_member_list_attribute_field("staff","agent") %> <% if @item.frontend_style == 'Single' or @item.frontend_style == 'Two' %> @@ -58,6 +59,15 @@ <%= @job_business %> <% 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? + %> +
  • + <%= @job_agent_field.title %> + <%= @job_agent %> +
  • + <% end %> @@ -110,6 +120,15 @@ <%= @job_business %> <% 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? + %> +
  • + <%= @job_agent_field.title %> + <%= @job_agent %> +
  • + <% end %> @@ -153,6 +172,7 @@
    <%= t("users.name")%> <%= t("users.office_tel")%> <%= @job_business_field.title %><%= @job_agent_field.title %>
    + + <% @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 %> + +
    + + + + + + + + + + + + + + +
    <%= t('survey.title') %>
    <%= @survey.title %><%= file_field_tag :file %><%= submit_tag t("survey.import_csv"), :class => 'btn' %>
    +<% end %> diff --git a/vendor/built_in_modules/survey/config/locales/en.yml b/vendor/built_in_modules/survey/config/locales/en.yml index 94e49ecf..895cf625 100644 --- a/vendor/built_in_modules/survey/config/locales/en.yml +++ b/vendor/built_in_modules/survey/config/locales/en.yml @@ -24,6 +24,7 @@ en: answer_error: Unsuccessful answer answers_list: Answers List + import_csv: Import CSV export_csv: Export CSV chart: Chart set_answers: Set Answers diff --git a/vendor/built_in_modules/survey/config/locales/zh_tw.yml b/vendor/built_in_modules/survey/config/locales/zh_tw.yml index 337012db..d545b981 100644 --- a/vendor/built_in_modules/survey/config/locales/zh_tw.yml +++ b/vendor/built_in_modules/survey/config/locales/zh_tw.yml @@ -25,6 +25,7 @@ zh_tw: answer_error: 問卷填寫錯誤 answers_list: 結果清單 + import_csv: 匯入CSV export_csv: 匯出CSV chart: 結果圖表 set_answers: 設定結果 @@ -80,4 +81,4 @@ zh_tw: have_not_chart: 此種類型問題不含結果圖表 move_up: 上移 - move_down: 下移 \ No newline at end of file + move_down: 下移 diff --git a/vendor/built_in_modules/survey/config/routes.rb b/vendor/built_in_modules/survey/config/routes.rb index c33b3633..79d601dd 100644 --- a/vendor/built_in_modules/survey/config/routes.rb +++ b/vendor/built_in_modules/survey/config/routes.rb @@ -9,6 +9,8 @@ Rails.application.routes.draw do end member do get 'export' + get 'set_import' + post 'import' get 'set_answers' get 'jump' get 'duplicate_it' @@ -30,4 +32,4 @@ Rails.application.routes.draw do end end match "/appfront/*path" => redirect("/panel/*path") -end \ No newline at end of file +end