From 4466e7ae1ce85ee207274d9a0fa4374d75725926 Mon Sep 17 00:00:00 2001 From: "Matthew K. Fu JuYuan" Date: Mon, 30 Apr 2012 03:14:15 +0800 Subject: [PATCH 01/39] Fix for NCCU 0430 all functions ok with two submanagers but different behavors --- .../admin/dashboards_controller.rb | 2 +- app/controllers/admin/designs_controller.rb | 3 +- app/controllers/application_controller.rb | 52 ++++++++++++++++++- app/views/admin/dashboards/index.html.erb | 2 + app/views/layouts/_side_bar.html.erb | 4 ++ public/static/kernel.js | 1 + .../back_end/approvals_controller.rb | 1 + .../back_end/bulletin_categorys_controller.rb | 4 +- .../back_end/bulletins_controller.rb | 28 ++++++---- .../_bulletin_category.html.erb | 11 ++-- .../bulletin_categorys/index.html.erb | 2 +- .../back_end/bulletins/_bulletin.html.erb | 16 ++++-- .../back_end/bulletins/_sort_headers.html.erb | 6 ++- .../back_end/bulletins/index.html.erb | 2 + 14 files changed, 109 insertions(+), 25 deletions(-) diff --git a/app/controllers/admin/dashboards_controller.rb b/app/controllers/admin/dashboards_controller.rb index 7b7613611..b7f377d3b 100644 --- a/app/controllers/admin/dashboards_controller.rb +++ b/app/controllers/admin/dashboards_controller.rb @@ -2,7 +2,7 @@ class Admin::DashboardsController < ApplicationController layout "new_admin" before_filter :authenticate_user! - before_filter :is_admin? +# before_filter :is_admin? def index end diff --git a/app/controllers/admin/designs_controller.rb b/app/controllers/admin/designs_controller.rb index 519b36a59..ff41c0b4d 100644 --- a/app/controllers/admin/designs_controller.rb +++ b/app/controllers/admin/designs_controller.rb @@ -5,7 +5,8 @@ class Admin::DesignsController < ApplicationController layout "new_admin" before_filter :authenticate_user! - before_filter :is_admin? + before_filter :is_admin? + before_filter :for_admin_only def upload_package if !params[:design].nil? diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index fb82774ef..2f6636b9b 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -39,9 +39,59 @@ class ApplicationController < ActionController::Base @parent_item = Item.first(:conditions => { :id => BSON::ObjectId(params[:parent_id]) }) rescue nil end + def auth_failed_in_backend + redirect_to admin_dashboards_url + end + # Check if the current_user is admin def is_admin? - redirect_to root_url unless current_user.admin? + + auth_failed_in_backend unless current_user.admin? + end + + def is_manager? + @module_app.managing_users.include?(current_user) || is_admin? + end + + def for_admin_only + if is_admin? + true + else + flash[:notice] = "Access Denied for you are not Admin" + auth_failed_in_backend + end + end + + def for_app_manager + if is_manager? + true + else + flash[:notice] = "Access Denied for you are not Manager for this app" + auth_failed_in_backend + end + end + + def for_app_sub_manager + if (@module_app.sub_managing_users.include?(current_user) || is_manager?) + true + else + flash[:notice] = "Access Denied for you are not SubManager for this app" + auth_failed_in_backend + end + end + + def for_app_user + if (@module_app.app_auth.auth_users.include?(current_user) || for_app_sub_manager ) + true + else + flash[:notice] = "Access Denied for you are not User for this app" + auth_failed_in_backend + end + end + + def check_object_premission(obj,title) + flash[:notice] = "Access Denied for you don't have permission for this object" + auth_failed_in_backend unless (obj.get_object_auth_by_title(title).auth_users.include?(current_user) || is_manager? || is_admin? ) end # Render the page diff --git a/app/views/admin/dashboards/index.html.erb b/app/views/admin/dashboards/index.html.erb index d038b63d4..1d9cd7100 100644 --- a/app/views/admin/dashboards/index.html.erb +++ b/app/views/admin/dashboards/index.html.erb @@ -1,3 +1,5 @@ +<%= flash_messages %> +

Member

diff --git a/app/views/layouts/_side_bar.html.erb b/app/views/layouts/_side_bar.html.erb index 96e0e2a84..431e83991 100644 --- a/app/views/layouts/_side_bar.html.erb +++ b/app/views/layouts/_side_bar.html.erb @@ -1,6 +1,10 @@ <%#= content_tag :li, :class => active_for_controllers('purchases') do -%> <%#= link_to content_tag(:i, nil, :class => 'icons-purchase') + t('admin.purchase'), admin_purchases_path %> <%# end -%> +<% content_for :page_specific_javascript do %> + <%= javascript_include_tag "/static/kernel.js" %> +<% end %> +<%= flash_messages %> <%= content_tag :li, :class => active_for_controllers('bulletins', '/panel/announcement/back_end/tags', 'bulletin_categorys','module_apps', 'approvals') do -%> <%= link_to content_tag(:i, nil, :class => 'icons-announcement') + t('admin.announcement'), panel_announcement_back_end_bulletins_path %> diff --git a/public/static/kernel.js b/public/static/kernel.js index c5b9a8a6a..ba5b81c38 100644 --- a/public/static/kernel.js +++ b/public/static/kernel.js @@ -1,4 +1,5 @@ $(document).ready(function() { + $.each($(".notice"),function(k,v){ alert("EMPTY Cate");}); $.each($(".dymanic_load"),function(){ if($(this).attr("path")==''){$(this).html("App setting Failed");} diff --git a/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/approvals_controller.rb b/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/approvals_controller.rb index 2d10dd75f..4338fdd13 100644 --- a/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/approvals_controller.rb +++ b/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/approvals_controller.rb @@ -1,5 +1,6 @@ class Panel::Announcement::BackEnd::ApprovalsController < OrbitBackendController before_filter :authenticate_user! + before_filter :is_admin? include AdminHelper # layout 'admin' diff --git a/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletin_categorys_controller.rb b/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletin_categorys_controller.rb index 0e3894b9d..b9151125c 100644 --- a/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletin_categorys_controller.rb +++ b/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletin_categorys_controller.rb @@ -1,5 +1,7 @@ class Panel::Announcement::BackEnd::BulletinCategorysController < OrbitBackendController - + before_filter :for_app_manager,:except => [:index] + + def index @bulletin_categorys = BulletinCategory.all @bulletin_category = BulletinCategory.new(:display => 'List') diff --git a/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletins_controller.rb b/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletins_controller.rb index f77e70b71..b5ebd0c07 100644 --- a/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletins_controller.rb +++ b/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletins_controller.rb @@ -1,8 +1,9 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController before_filter :authenticate_user! - before_filter :is_admin? - +# before_filter :for_admin_only,:only => [:] +# before_filter :for_app_manager,:only => [:index,:show,] + before_filter :for_app_sub_manager,:except => [:index,:show,:get_sorted_and_filtered_bulletins] def index # @bulletins = Bulletin.all # @bulletins = Bulletin.desc("postdate desc") @@ -39,6 +40,10 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController @bulletin_file = BulletinFile.new @file_url = panel_announcement_back_end_bulletins_path + @bulletins.delete_if{ |bulletin| + bulletin.is_pending == true && (!bulletin.bulletin_category.authed_users('fact_check').include?(current_user) || bulletin.create_user_id!=current_user.id) + } + respond_to do |format| format.html # index.html.erb format.js { } @@ -76,14 +81,17 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController # @bulletin.bulletin_files.build # @bulletin.bulletin_files.new - - get_categorys - get_tags - respond_to do |format| - format.html # new.html.erb - format.xml { render :xml => @bulletin } - end + if get_categorys.empty? + flash[:notice] = "You dont have any permission for post on cate" + redirect_to :action => :index + else + get_tags + respond_to do |format| + format.html # new.html.erb + format.xml { render :xml => @bulletin } + end + end end # GET /bulletins/1/edit @@ -311,7 +319,7 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController if(is_manager? || is_admin?) @bulletin_categorys = (id ? BulletinCategory.find(id).to_a : BulletinCategory.excludes('disabled' => true)) elsif is_sub_manager? - @bulletin_categorys = BulletinCategory.authed_for_user(current_user,'submit_new') + @bulletin_categorys = BulletinCategory.authed_for_user(current_user,'submit') end end diff --git a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletin_categorys/_bulletin_category.html.erb b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletin_categorys/_bulletin_category.html.erb index a75440e56..8ad4578ea 100644 --- a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletin_categorys/_bulletin_category.html.erb +++ b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletin_categorys/_bulletin_category.html.erb @@ -4,10 +4,13 @@ <%= bulletin_category.key %>
diff --git a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletin_categorys/index.html.erb b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletin_categorys/index.html.erb index 28d2fde0c..392e50a35 100644 --- a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletin_categorys/index.html.erb +++ b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletin_categorys/index.html.erb @@ -17,7 +17,7 @@ -
<%= render :partial => "form" %>
+
<%= render :partial => "form" if is_manager?%>
diff --git a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_bulletin.html.erb b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_bulletin.html.erb index b8dd663d9..3722fd81e 100644 --- a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_bulletin.html.erb +++ b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_bulletin.html.erb @@ -1,5 +1,8 @@ - <%= check_box_tag 'to_delete[]', bulletin.id, false, :class => "checkbox_in_list" %> + + <% if (bulletin.create_user_id == current_user.id) || is_manager? %> + <%= check_box_tag 'to_delete[]', bulletin.id, false, :class => "checkbox_in_list" %> + <% end -%> <% if bulletin.is_top? %> <%= t(:top) %> @@ -23,8 +26,11 @@ <%= bulletin.bulletin_category.i18n_variable[I18n.locale] %> <%= link_to bulletin.title[I18n.locale], panel_announcement_front_end_bulletin_path(bulletin, :category_id => bulletin.bulletin_category.id) rescue ''%> +
diff --git a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_sort_headers.html.erb b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_sort_headers.html.erb index b48cca39c..f53ef5a6c 100644 --- a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_sort_headers.html.erb +++ b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_sort_headers.html.erb @@ -2,8 +2,10 @@ - - + <% if is_manager? %> + + + <% end -%> <%= link_to (t('bulletin.status') + content_tag(:b, nil, :class => is_sort?('status'))).html_safe, panel_announcement_back_end_bulletins_path({:filter => @filter}.merge(sortable('status'))), :class => 'js_history' %> diff --git a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/index.html.erb b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/index.html.erb index 78532f00f..f1a061e62 100644 --- a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/index.html.erb +++ b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/index.html.erb @@ -1,3 +1,5 @@ + + <%= form_for :bulletins, :url => delete_panel_announcement_back_end_bulletins_path(:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil), :html => {:id => 'delete_bulletins'}, :remote => true do %> <%= render 'filter' %> From fe54c6ae71f932a21c9b5c7ffa7af6fad2025fb6 Mon Sep 17 00:00:00 2001 From: Christophe Vilayphiou Date: Mon, 30 Apr 2012 14:23:41 +0800 Subject: [PATCH 02/39] Fix bug when id or single object --- app/controllers/orbit_backend_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/orbit_backend_controller.rb b/app/controllers/orbit_backend_controller.rb index 7e9fa32a8..15afe9631 100644 --- a/app/controllers/orbit_backend_controller.rb +++ b/app/controllers/orbit_backend_controller.rb @@ -150,7 +150,7 @@ class OrbitBackendController< ApplicationController def get_with_nil(objects, option, sorted_objects) tmp = Array.new - objects.each { |object| tmp << [get_string_value_from_object(object), object] if (object.send(option).count == 0) } + objects.each { |object| tmp << [get_string_value_from_object(object), object] if (object.send(option).blank? || (object.send(option).size == 0 rescue nil)) } sorted = params[:direction].eql?('asc') ? tmp.sort : tmp.sort.reverse! sorted_tmp = sorted.collect {|a| a[1] } a = params[:direction].eql?('asc') ? (sorted_tmp + sorted_objects) : (sorted_objects + sorted_tmp) From a8033093806e0a98e43364dfcfca435b744c35df Mon Sep 17 00:00:00 2001 From: "Matthew K. Fu JuYuan" Date: Mon, 30 Apr 2012 15:51:22 +0800 Subject: [PATCH 03/39] clean up useless flash msgs. add i18n vars for app auth and object auth --- app/controllers/application_controller.rb | 10 ++--- app/views/admin/dashboards/index.html.erb | 2 - app/views/layouts/_side_bar.html.erb | 1 - config/locales/en.yml | 8 ++++ config/locales/zh_tw.yml | 42 +++++++++++-------- public/static/kernel.js | 1 - .../back_end/bulletins_controller.rb | 2 +- .../announcement/config/locales/en.yml | 2 + .../announcement/config/locales/zh_tw.yml | 2 + 9 files changed, 43 insertions(+), 27 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 2f6636b9b..8fc3a90ba 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -57,7 +57,7 @@ class ApplicationController < ActionController::Base if is_admin? true else - flash[:notice] = "Access Denied for you are not Admin" + flash[:error] = t("admin.access.denied.not_admin") auth_failed_in_backend end end @@ -66,7 +66,7 @@ class ApplicationController < ActionController::Base if is_manager? true else - flash[:notice] = "Access Denied for you are not Manager for this app" + flash[:error] = t("admin.access.denied.app.not_manager") auth_failed_in_backend end end @@ -75,7 +75,7 @@ class ApplicationController < ActionController::Base if (@module_app.sub_managing_users.include?(current_user) || is_manager?) true else - flash[:notice] = "Access Denied for you are not SubManager for this app" + flash[:error] = t("admin.access.denied.app.not_sub_manager") auth_failed_in_backend end end @@ -84,13 +84,13 @@ class ApplicationController < ActionController::Base if (@module_app.app_auth.auth_users.include?(current_user) || for_app_sub_manager ) true else - flash[:notice] = "Access Denied for you are not User for this app" + flash[:error] = t("admin.access.denied.app.not_authed_user") auth_failed_in_backend end end def check_object_premission(obj,title) - flash[:notice] = "Access Denied for you don't have permission for this object" + flash[:error] = t("admin.access.denied.object") auth_failed_in_backend unless (obj.get_object_auth_by_title(title).auth_users.include?(current_user) || is_manager? || is_admin? ) end diff --git a/app/views/admin/dashboards/index.html.erb b/app/views/admin/dashboards/index.html.erb index 21bc7ffb1..e22d7dac8 100644 --- a/app/views/admin/dashboards/index.html.erb +++ b/app/views/admin/dashboards/index.html.erb @@ -1,5 +1,3 @@ -<%= flash_messages %> -

<%= t(:content) %>

diff --git a/app/views/layouts/_side_bar.html.erb b/app/views/layouts/_side_bar.html.erb index f479e6614..dbb065f6e 100644 --- a/app/views/layouts/_side_bar.html.erb +++ b/app/views/layouts/_side_bar.html.erb @@ -4,7 +4,6 @@ <% content_for :page_specific_javascript do %> <%= javascript_include_tag "/static/kernel.js" %> <% end %> -<%= flash_messages %> <%= content_tag :li, :class => active_for_controllers('bulletins', '/panel/announcement/back_end/tags', 'bulletin_categorys','module_apps', 'approvals') do -%> <%= link_to content_tag(:i, nil, :class => 'icons-announcement') + t('admin.announcement'), panel_announcement_back_end_bulletins_path %> diff --git a/config/locales/en.yml b/config/locales/en.yml index 8d15763cd..5a807b5a1 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -65,6 +65,14 @@ en: traffic: Traffic admin: + access: + denied: + app: + not_sub_manager: Access Denied for you are not SubManager for this app + not_manager: Access Denied for you are not SubManager for this app + not_authed_user: Access Denied for you are not User for this app + not_admin: Access Denied for you are not Admin + object: "Access Denied for you don't have permission for this object" action: Action ad_banner: AD Banner ad: diff --git a/config/locales/zh_tw.yml b/config/locales/zh_tw.yml index a30749e01..f0a23dde2 100644 --- a/config/locales/zh_tw.yml +++ b/config/locales/zh_tw.yml @@ -8,12 +8,12 @@ zh_tw: back: 回上一步 browse: 選擇檔案 cancel: 取消 - create: 創建 + create: 新增 delete: 刪除 desktop: 桌面 disable: 禁用 dots: … - downloaded: 已經下載 + downloaded: 已下載 download: 下載 edit: 編輯 email: 電子郵件 @@ -47,7 +47,7 @@ zh_tw: file_type: 檔案類型 hits: 點擊率 item: 項目 - member: 成員 + member: 會員 module: 模組 most_visited_page: 熱門頁面 quantity: 數量 @@ -62,6 +62,14 @@ zh_tw: traffic: 流量 admin: + access: + denied: + app: + not_sub_manager: 拒絕存取因你不是此應用程式次管理員 + not_manager: 拒絕存取因你不是此應用程式管理員 + not_authed_user: 拒絕存取因你不是此應用程式授權使用者 + not_admin: 拒絕存取因你不是此應用程式次管理員 + object: 拒絕存取因你不是網站管理者 action: 操作 ad_banner: 廣告輪播 ad: @@ -81,7 +89,7 @@ zh_tw: add_item: 新增項目 add_language: 新增語言 add_drop_down_item: +增加Orbit選單 - admin: 管理 + admin: 網站管理者 all_articles: 列表 announcement: 公告管理 asset: 資產 @@ -94,22 +102,22 @@ zh_tw: author: 作者 calendar: 行事曆 cant_delete_self: 您不可以刪除自己。 - cant_revoke_self_admin: 您不可以撤銷自己的管理作用。 + cant_revoke_self_admin: 您不可以撤銷自己的管理身份。 choose_file: 請選擇一個文件... class: 階級 content: 內容 - create_error_link: 創建連接時出錯。 - create_error_page: 創建頁面時出錯。 - create_success_home: 首頁已成功創建。 - create_success_layout: 樣板已成功創建。 - create_success_link: 連結已成功創建。 - create_success_page: 頁面已成功創建。 - create_success_home: 首頁已成功創建。 - create_success_layout: 佈局已成功創建。 - create_success_link: 連結已成功創建。 - create_success_page: 頁面已成功創建。 - create_success_snippet: 片段已成功創建。 - create_success_user: 用戶已成功創建。。 + create_error_link: 新增連接時出錯。 + create_error_page: 新增頁面時出錯。 + create_success_home: 首頁已成功新增。 + create_success_layout: 樣板已成功新增。 + create_success_link: 連結已成功新增。 + create_success_page: 頁面已成功新增。 + create_success_home: 首頁已成功新增。 + create_success_layout: 佈局已成功新增。 + create_success_link: 連結已成功新增。 + create_success_page: 頁面已成功新增。 + create_success_snippet: 片段已成功新增。 + create_success_user: 用戶已成功新增。。 dashboard: 儀表板 data: 資料數據 delete_language: 刪除語言 diff --git a/public/static/kernel.js b/public/static/kernel.js index ba5b81c38..c5b9a8a6a 100644 --- a/public/static/kernel.js +++ b/public/static/kernel.js @@ -1,5 +1,4 @@ $(document).ready(function() { - $.each($(".notice"),function(k,v){ alert("EMPTY Cate");}); $.each($(".dymanic_load"),function(){ if($(this).attr("path")==''){$(this).html("App setting Failed");} diff --git a/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletins_controller.rb b/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletins_controller.rb index b5ebd0c07..ff262c4d7 100644 --- a/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletins_controller.rb +++ b/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletins_controller.rb @@ -83,7 +83,7 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController # @bulletin.bulletin_files.new if get_categorys.empty? - flash[:notice] = "You dont have any permission for post on cate" + flash[:alert] = t("announcement.error.no_avilb_cate_for_posting") redirect_to :action => :index else get_tags diff --git a/vendor/built_in_modules/announcement/config/locales/en.yml b/vendor/built_in_modules/announcement/config/locales/en.yml index 3e7818231..16353b6ac 100644 --- a/vendor/built_in_modules/announcement/config/locales/en.yml +++ b/vendor/built_in_modules/announcement/config/locales/en.yml @@ -58,6 +58,8 @@ en: announcement: all_articles: List add_new: Add + error: + no_avilb_cate_for_posting: You need a category to submit your post,please contact admin sure?: Sure? campus_news: Campus News more: more+ diff --git a/vendor/built_in_modules/announcement/config/locales/zh_tw.yml b/vendor/built_in_modules/announcement/config/locales/zh_tw.yml index dfe9e55fe..bf0d0be6b 100644 --- a/vendor/built_in_modules/announcement/config/locales/zh_tw.yml +++ b/vendor/built_in_modules/announcement/config/locales/zh_tw.yml @@ -37,6 +37,8 @@ zh_tw: announcement: add_new: 新增 all_articles: 列表 + error: + no_avilb_cate_for_posting: 您目前沒有分類可以刊登公告,請聯絡系統管理員為您開通分類 tags: 標籤 categories: 分類 status: 狀態 From 7a5d3ecae3fab4ac0c0ca29462a52c7a721c0f89 Mon Sep 17 00:00:00 2001 From: "Matthew K. Fu JuYuan" Date: Tue, 1 May 2012 16:05:05 +0800 Subject: [PATCH 04/39] Apply app_auth to ad_banner. From now,ad_banner can only be viewed for at least manager. --- app/controllers/admin/ad_banners_controller.rb | 4 ++-- app/controllers/application_controller.rb | 3 ++- app/helpers/application_helper.rb | 9 +++++++++ app/views/layouts/_side_bar.html.erb | 12 +++++++----- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/app/controllers/admin/ad_banners_controller.rb b/app/controllers/admin/ad_banners_controller.rb index a21693aa6..47d3d3555 100644 --- a/app/controllers/admin/ad_banners_controller.rb +++ b/app/controllers/admin/ad_banners_controller.rb @@ -1,7 +1,7 @@ -class Admin::AdBannersController < ApplicationController +class Admin::AdBannersController < OrbitBackendController layout "new_admin" before_filter :authenticate_user! - before_filter :is_admin? + before_filter :for_app_manager def destroy @ad_banner = AdBanner.find(params[:id]) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 8fc3a90ba..ab01ea6bd 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -40,7 +40,8 @@ class ApplicationController < ActionController::Base end def auth_failed_in_backend - redirect_to admin_dashboards_url + #redirect_to admin_dashboards_url + redirect_to root_path end # Check if the current_user is admin diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 258000be9..6e76b1a27 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -74,6 +74,15 @@ module ApplicationHelper end end + def active_sys_call_for_app(controller_name,action_name,app_title) + unless active_for_action(controller_name,action_name).nil? + app = ModuleApp.find params[:id] + app.title == app_title ? 'active' : nil + else + nil + end + end + def active_for_controllers(*controller_names) (controller_names.include?(controller.controller_name) || controller_names.include?(request.fullpath)) ? 'active' : nil end diff --git a/app/views/layouts/_side_bar.html.erb b/app/views/layouts/_side_bar.html.erb index dbb065f6e..1d2fc8753 100644 --- a/app/views/layouts/_side_bar.html.erb +++ b/app/views/layouts/_side_bar.html.erb @@ -5,7 +5,7 @@ <%= javascript_include_tag "/static/kernel.js" %> <% end %> -<%= content_tag :li, :class => active_for_controllers('bulletins', '/panel/announcement/back_end/tags', 'bulletin_categorys','module_apps', 'approvals') do -%> +<%= content_tag :li, :class => active_for_controllers('bulletins', '/panel/announcement/back_end/tags', 'bulletin_categorys', 'approvals') || active_sys_call_for_app('module_apps','edit','Announcement') do -%> <%= link_to content_tag(:i, nil, :class => 'icons-announcement') + t('admin.announcement'), panel_announcement_back_end_bulletins_path %> <%= content_tag :ul, :class => ("nav nav-list " + visible_for_controllers('bulletins', '/panel/announcement/back_end/tags', 'bulletin_categorys', 'approvals')) do -%> <%= content_tag :li, link_to(t('announcement.all_articles'), panel_announcement_back_end_bulletins_path), :class => active_for_action('bulletins', 'index') %> @@ -13,7 +13,7 @@ <%= content_tag :li, link_to(t('announcement.categories'), panel_announcement_back_end_bulletin_categorys_path), :class => active_for_action('bulletin_categorys', 'index') %> <%= content_tag :li, link_to(t('announcement.tags'), panel_announcement_back_end_tags_path), :class => active_for_action('/panel/announcement/back_end/tags', 'index') %> <%= content_tag :li, link_to(t('announcement.bulletin.approval_setting'), panel_announcement_back_end_approval_setting_path), :class => active_for_action('approvals', 'setting') if (is_manager? rescue nil) %> - <%= content_tag :li, link_to(t('admin.module.authorization'),edit_admin_module_app_path(ModuleApp.first(conditions: {title: "Announcement"}))), :class => active_for_action('module_apps', 'edit') if (is_admin? rescue nil) %> + <%= content_tag :li, link_to(t('admin.module.authorization'),edit_admin_module_app_path(ModuleApp.first(conditions: {title: "Announcement"}))), :class => active_sys_call_for_app('module_apps','edit','Announcement') if (is_admin? rescue nil) %> <% end -%> @@ -34,13 +34,15 @@ <%= link_to content_tag(:i, nil, :class => 'icons-window-block') + t('admin.design'), admin_designs_path %> <% end -%> -<%= content_tag :li, :class => active_for_controllers('ad_banners', 'ad_images') do -%> +<%= content_tag :li, :class => active_for_controllers('ad_banners', 'ad_images') || active_sys_call_for_app('module_apps','edit','ad_banners') do -%> <%= link_to content_tag(:i, nil, :class => 'icons-link') + t('admin.ad_banner'), admin_ad_banners_path %> - <%#= content_tag :ul, :class => ("nav nav-list " + visible_for_controllers('ad_banners', 'ad_images')) do -%> + + <%= content_tag :ul, :class => ("nav nav-list " + visible_for_controllers('ad_banners', 'ad_images') ) do -%> <%#= content_tag :li, link_to(t('admin.ad.all_banners'), admin_ad_banners_path), :class => active_for_action('ad_banners', 'index') %> <%#= content_tag :li, link_to(t('admin.ad.new_banner'), new_admin_ad_banner_path), :class => active_for_action('ad_banners', 'new') %> <%#= content_tag :li, link_to(t('admin.ad.new_image'), new_ad_image_admin_ad_banners_path), :class => active_for_action('ad_images', 'new') %> - <%# end %> + <%= content_tag :li, link_to(t('admin.module.authorization'),edit_admin_module_app_path(ModuleApp.first(conditions: {title: "ad_banners"}))), :class => active_sys_call_for_app('module_apps','edit','ad_banners') if (is_admin? rescue nil) %> + <% end -%> <% end %> <%= content_tag :li, :class => active_for_controllers('web_links', '/panel/web_resource/back_end/tags', 'web_link_categorys') do -%> From de457e7dfc785305102eb7d0aed47d651551e1f8 Mon Sep 17 00:00:00 2001 From: "Matthew K. Fu JuYuan" Date: Tue, 1 May 2012 18:23:42 +0800 Subject: [PATCH 05/39] fix broken ad_banner --- app/views/admin/ad_banners/_ad_banner_tab.html.erb | 2 +- config/routes.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/admin/ad_banners/_ad_banner_tab.html.erb b/app/views/admin/ad_banners/_ad_banner_tab.html.erb index ff27d914f..797624ff1 100644 --- a/app/views/admin/ad_banners/_ad_banner_tab.html.erb +++ b/app/views/admin/ad_banners/_ad_banner_tab.html.erb @@ -15,7 +15,7 @@
<%= link_to t("admin.ad.new_image"),new_admin_ad_banner_ad_image_path(ad_banner_tab) ,:class => "btn btn-primary"%> - <%= link_to t("modal.preview"), admin_realtime_preview_ad_banner_path(ad_banner_tab.title) , :class=>'preview_trigger btn btn-success'%> + <%= link_to t("modal.preview"), admin_realtime_preview_ad_banner_path(ad_banner_tab.id) , :class=>'preview_trigger btn btn-success'%>
    <%= render :partial => "ad_image_update", :collection => ad_banner_tab.ad_images,:as => :ad_image,:locals=>{:ad_banner => ad_banner_tab} %> diff --git a/config/routes.rb b/config/routes.rb index e8695f0ab..c90a5ae05 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -25,7 +25,7 @@ Orbit::Application.routes.draw do end - match 'ad_banner/:id/preview' => 'ad_banners#realtime_preview',:as => :realtime_preview_ad_banner,:via => :put + match 'ad_banners/:id/preview' => 'ad_banners#realtime_preview',:as => :realtime_preview_ad_banner,:via => :put resources :ad_banners do collection do match 'new_ad_image' => 'ad_images#new',:as => :new_ad_image,:via => :get From 92a53c1b27c66b8050792b8a07ca4a4096358e6f Mon Sep 17 00:00:00 2001 From: Christophe Vilayphiou Date: Wed, 2 May 2012 16:20:59 +0800 Subject: [PATCH 06/39] Ray's fix --- app/assets/javascripts/orbit-1.0.js | 8 -------- app/assets/stylesheets/bootstrap.css.erb | 5 ++++- app/assets/stylesheets/list.css | 16 +++++++++++----- app/views/layouts/new_admin.html.erb | 4 ++-- .../back_end/bulletins/index.html.erb | 11 +++++------ .../news/back_end/news_bulletins/index.html.erb | 11 +++++------ 6 files changed, 27 insertions(+), 28 deletions(-) diff --git a/app/assets/javascripts/orbit-1.0.js b/app/assets/javascripts/orbit-1.0.js index 30e8fbe36..368bf2d0c 100644 --- a/app/assets/javascripts/orbit-1.0.js +++ b/app/assets/javascripts/orbit-1.0.js @@ -1,6 +1,5 @@ var viewportwidth, viewportheight; - console.log($(window).height()) function resize() { viewportheight=$(window).height(); viewportwidth=$(window).width(); @@ -17,7 +16,6 @@ $(document).ready(function(){ $(document).on('click', '.privacy', function() { - console.log($(this).val()); switch ($(this).val()) { case 'true': $(this).parents('.controls').children('.select-role').slideUp(300); @@ -53,15 +51,12 @@ $(document).ready(function(){ $orbitBar = $('#orbit-bar').height(), $mainSidebar = $('#main-sidebar').width()+5, $formActionPadding = parseInt($('.form-fixed').css("padding-left"))+parseInt($('.form-fixed').css("padding-right")); - console.log($orbitBar); - console.log("ready"+$(window).height()); $('#main-sidebar').css("height", viewportheight-$orbitBar); $('#main-sidebar .viewport').css("height", viewportheight-$orbitBar); $('#post-body').css("width", viewportwidth-$mainWrapMarginLeft-$subWiget); $('.post-title').css("width", viewportwidth-$mainWrapMarginLeft-$subWiget-16); $('#main-wrap .subnav').css("width", viewportwidth-$mainWrapMarginLeft); $('.form-fixed').css("width", viewportwidth-$mainWrapMarginLeft-$formActionPadding); - $('#bulletin_pagination').css("width", viewportwidth-$mainSidebar); $('#main-sidebar').tinyscrollbar({size:(viewportheight-$orbitBar-4)}); $('.detal-list').tinyscrollbar(); mainTablePosition(); @@ -82,14 +77,12 @@ $(window).resize(function(){ $orbitBar = $('#orbit-bar').height(), $mainSidebar = $('#main-sidebar').width()+5, $formActionPadding = parseInt($('.form-fixed').css("padding-left"))+parseInt($('.form-fixed').css("padding-right")); - console.log(viewportheight); $('#main-sidebar').css("height", viewportheight-$orbitBar); $('#main-sidebar .viewport').css("height", viewportheight-$orbitBar); $('#post-body').css("width", viewportwidth-$mainWrapMarginLeft-$subWiget); $('.post-title').css("width", viewportwidth-$mainWrapMarginLeft-$subWiget-16); $('#main-wrap .subnav').css("width", viewportwidth-$mainWrapMarginLeft); $('.form-fixed').css("width", viewportwidth-$mainWrapMarginLeft-$formActionPadding); - $('#bulletin_pagination').css("width", viewportwidth-$mainSidebar); $('#main-sidebar').tinyscrollbar({size:(viewportheight-$orbitBar-4)}); mainTablePosition(); }); @@ -118,5 +111,4 @@ $(window).scroll(function () { $(".table-label").css({left:$winLeft*-1} ); //$(".table-label").css({left:$mainWrapMarginLeft+($winLeft*-1)} ); //$("#main-wrap > .subnav").css({width:$subnavWidth+($winLeft)} ); - //console.log($mainWrapMarginLeft+($winLeft*-1)+5); }); diff --git a/app/assets/stylesheets/bootstrap.css.erb b/app/assets/stylesheets/bootstrap.css.erb index 40b3afca2..62a0afe8e 100644 --- a/app/assets/stylesheets/bootstrap.css.erb +++ b/app/assets/stylesheets/bootstrap.css.erb @@ -2701,8 +2701,11 @@ button.btn.small, input[type="submit"].btn.small { .pagination .current{ border-left-width: 1px; } +.pagination a { + background-color: #FFFFFF; +} .pagination a:hover, .pagination .active a { - background-color: #f5f5f5; + background-color: #e8e8e8; } .pagination .active a { color: #999999; diff --git a/app/assets/stylesheets/list.css b/app/assets/stylesheets/list.css index b77482915..4d7c11b1f 100644 --- a/app/assets/stylesheets/list.css +++ b/app/assets/stylesheets/list.css @@ -70,9 +70,8 @@ } .main-list .label-td:hover { height: auto; - text-align: center; padding: 5px 5px 8px; - left: -6px; + left: -40px; top: -6px; border: 1px solid rgba(0, 0, 0, 0.2); box-shadow: 0px 5px 10px rgba(0,0,0,0.2); @@ -82,6 +81,7 @@ -webkit-border-radius: 3px; -moz-border-radius: 3px; z-index: 5; + width: 200px; } .qe-edit-div .table-condensed { background-color: #F2F2F2; @@ -188,10 +188,16 @@ legend { } .form-fixed { position: fixed; - margin-bottom: 0; + margin: 0; + padding: 10px; bottom: 0; - z-index: 10; + z-index: 2; +} +.form-fixed .btn { + margin-top: 4px; } .paginationFixed { - margin-bottom: 25px; +} +.paginationFixed .pagination { + margin-top: 0 !important; } \ No newline at end of file diff --git a/app/views/layouts/new_admin.html.erb b/app/views/layouts/new_admin.html.erb index b6156c5d3..4686545ec 100644 --- a/app/views/layouts/new_admin.html.erb +++ b/app/views/layouts/new_admin.html.erb @@ -14,7 +14,7 @@ <%= render 'layouts/orbit_bar' %> -
- +
<%= yield %>
diff --git a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/index.html.erb b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/index.html.erb index 563be1906..875c1eaf9 100644 --- a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/index.html.erb +++ b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/index.html.erb @@ -5,8 +5,11 @@
<% end %> -
- <%= paginate @bulletins, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil, :sort_options => params[:sort_options]} %> +
+ <%= link_to content_tag(:i, nil, :class => 'icon-plus icon-white') + t('admin.add'), new_panel_announcement_back_end_bulletin_path, :class => 'btn btn-primary pull-right' %> +
+ <%= paginate @bulletins, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil, :sort_options => params[:sort_options]} %> +
- -
- <%= link_to content_tag(:i, nil, :class => 'icon-plus icon-white') + t('admin.add'), new_panel_announcement_back_end_bulletin_path, :class => 'btn btn-primary' %> -
<% content_for :page_specific_javascript do %> <%= javascript_include_tag "bulletin_form" %> diff --git a/vendor/built_in_modules/news/app/views/panel/news/back_end/news_bulletins/index.html.erb b/vendor/built_in_modules/news/app/views/panel/news/back_end/news_bulletins/index.html.erb index 78535138b..123b1a916 100644 --- a/vendor/built_in_modules/news/app/views/panel/news/back_end/news_bulletins/index.html.erb +++ b/vendor/built_in_modules/news/app/views/panel/news/back_end/news_bulletins/index.html.erb @@ -5,8 +5,11 @@ <% end %> -
- <%= paginate @news_bulletins, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil, :sort_options => params[:sort_options]} %> +
+ <%= link_to content_tag(:i, nil, :class => 'icon-plus icon-white') + t('admin.add'), new_panel_news_back_end_news_bulletin_path, :class => 'btn btn-primary' %> +
+ <%= paginate @news_bulletins, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil, :sort_options => params[:sort_options]} %> +
- -
- <%= link_to content_tag(:i, nil, :class => 'icon-plus icon-white') + t('admin.add'), new_panel_news_back_end_news_bulletin_path, :class => 'btn btn-primary' %> -
<% content_for :page_specific_javascript do %> <%= javascript_include_tag "news_bulletin_form" %> From 2762c2459326155280b613667d1f1ecdfd8d7e26 Mon Sep 17 00:00:00 2001 From: Christophe Vilayphiou Date: Thu, 26 Apr 2012 19:38:16 +0800 Subject: [PATCH 07/39] Fix wrong variable names in translations --- app/views/admin/translations/edit.html.erb | 8 ++++---- app/views/admin/translations/index.html.erb | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/views/admin/translations/edit.html.erb b/app/views/admin/translations/edit.html.erb index 4dd56a010..231c70f5c 100644 --- a/app/views/admin/translations/edit.html.erb +++ b/app/views/admin/translations/edit.html.erb @@ -10,23 +10,23 @@ <% end %> - <% if @user_info_model_i18n_variables.size > 0 %> + <% if @info_i18n_variables.size > 0 %>
<%= t('admin.user_info') %> <%#= render :partial => 'action_bar' %> -
<%= render :partial => 'edit_user_attribute_model', :collection => @user_info_model_i18n_variables %>
+
<%= render :partial => 'edit_user_attribute_model', :collection => @info_i18n_variables %>
<% end %> - <% if @user_role_model_i18n_variables.size > 0 %> + <% if @role_i18n_variables.size > 0 %>
<%= t('admin.user_role') %> <%#= render :partial => 'action_bar' %> -
<%= render :partial => 'edit_user_attribute_model', :collection => @user_role_model_i18n_variables %>
+
<%= render :partial => 'edit_user_attribute_model', :collection => @role_i18n_variables %>
<% end %> diff --git a/app/views/admin/translations/index.html.erb b/app/views/admin/translations/index.html.erb index a47aa52b3..255484d4f 100644 --- a/app/views/admin/translations/index.html.erb +++ b/app/views/admin/translations/index.html.erb @@ -46,7 +46,7 @@ <% end %> -<% if @user_info_model_i18n_variables.size > 0 %> +<% if @info_i18n_variables.size > 0 %>
<%= t('admin.user_info') %> @@ -56,7 +56,7 @@
<% end %> -<% if @user_role_model_i18n_variables.size > 0 %> +<% if @role_i18n_variables.size > 0 %>
<%= t('admin.user_role') %> From 45e21f9569afcc5736738f2fdd905a9b5979399d Mon Sep 17 00:00:00 2001 From: Christophe Vilayphiou Date: Wed, 2 May 2012 17:55:02 +0800 Subject: [PATCH 08/39] Fix filter category in news --- app/controllers/orbit_backend_controller.rb | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/app/controllers/orbit_backend_controller.rb b/app/controllers/orbit_backend_controller.rb index 15afe9631..8655e93fb 100644 --- a/app/controllers/orbit_backend_controller.rb +++ b/app/controllers/orbit_backend_controller.rb @@ -62,30 +62,23 @@ class OrbitBackendController< ApplicationController case key when 'status' a = Array.new - objects.each do |bulletin| + objects.each do |object| value.each do |v| - case v - when 'pending' - a << bulletin if bulletin.is_checked.nil? - when 'rejected' - a << bulletin if bulletin.is_checked.eql?(false) - else - a << bulletin if bulletin[v] - end + a << object if object[v] end end objects = a.uniq when 'categories' a = Array.new - objects.each do |bulletin| - a << bulletin if value.include?(bulletin.bulletin_category.id.to_s) + objects.each do |object| + a << object if value.include?(object.send("#{object.class.to_s.underscore}_category").id.to_s) end objects = a.uniq when 'tags' a = Array.new - objects.each do |bulletin| - bulletin.tags.each do |tag| - a << bulletin if value.include?(tag.id.to_s) + objects.each do |object| + object.tags.each do |tag| + a << object if value.include?(tag.id.to_s) end end objects = a.uniq From 2a14c8bad496f8e496b5e8b7cc64ba56b5e26eaa Mon Sep 17 00:00:00 2001 From: "Matthew K. Fu JuYuan" Date: Thu, 3 May 2012 14:57:10 +0800 Subject: [PATCH 09/39] Announcement preivew --- app/controllers/application_controller.rb | 4 +- app/controllers/pages_controller.rb | 6 +- app/helpers/application_helper.rb | 4 +- app/views/admin/ad_banners/index.html.erb | 2 +- app/views/admin/module_apps/edit.html.erb | 18 ++--- lib/parsers/parser_front_end.rb | 7 +- .../back_end/approvals_controller.rb | 7 ++ .../front_end/bulletins_controller.rb | 14 +++- .../approvals/_modal_approve.html.erb | 68 +++++++++++++++++++ .../approvals/preview_and_approve.js.erb | 5 ++ .../back_end/bulletins/_bulletin.html.erb | 2 +- .../back_end/bulletins/_form.html.erb | 22 ------ .../back_end/bulletins/index.html.erb | 2 + .../announcement/config/locales/en.yml | 1 + .../announcement/config/locales/zh_tw.yml | 1 + .../announcement/config/routes.rb | 6 +- 16 files changed, 124 insertions(+), 45 deletions(-) create mode 100644 vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/approvals/_modal_approve.html.erb create mode 100644 vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/approvals/preview_and_approve.js.erb diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index ab01ea6bd..a57b4d705 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -96,9 +96,9 @@ class ApplicationController < ActionController::Base end # Render the page - def render_page(id = nil) + def render_page(param) if @item - render :text => process_page(@item, id), :layout => 'page_layout' + render :text => process_page(@item, param[:id],param), :layout => 'page_layout' else render :text => '404 Not Found' end diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb index 4860ea2e8..fab5b6a03 100644 --- a/app/controllers/pages_controller.rb +++ b/app/controllers/pages_controller.rb @@ -19,7 +19,7 @@ class PagesController < ApplicationController if @item && @item.is_published case @item._type when 'Page' - render_page(params[:id]) + render_page(params) when 'Link' redirect_to "http://#{@item[:url]}" end @@ -40,7 +40,9 @@ class PagesController < ApplicationController end def show_from_link - redirect_to "/#{@item.full_name}?id=#{params[:id]}" + # debugger + # a=1 + redirect_to "/#{@item.full_name}?id=#{params[:id]}&preview=#{params[:preview]}" end def load_orbit_bar diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 6e76b1a27..ab8d163f6 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -116,8 +116,8 @@ module ApplicationHelper ' active' if (@filter[type].include?(id.to_s) rescue nil) end - def process_page(page, id) - parse_page_noko(page, id) + def process_page(page, id,params) + parse_page_noko(page, id,params) end def page_metas(page) diff --git a/app/views/admin/ad_banners/index.html.erb b/app/views/admin/ad_banners/index.html.erb index d70afab39..47a9ec4d3 100644 --- a/app/views/admin/ad_banners/index.html.erb +++ b/app/views/admin/ad_banners/index.html.erb @@ -1,7 +1,7 @@ <% content_for :page_specific_css do -%> <%#= stylesheet_link_tag "admin/ad_banner_preview" %> <% end -%> -<% content_for :page_specific_css do -%> +<% content_for :page_specific_javascript do -%> <%= javascript_include_tag "/static/jquery.cycle.all.latest.js" %> <%= javascript_include_tag "inc/modal-preview" %> <% end -%> diff --git a/app/views/admin/module_apps/edit.html.erb b/app/views/admin/module_apps/edit.html.erb index 52142feac..7fb64d170 100644 --- a/app/views/admin/module_apps/edit.html.erb +++ b/app/views/admin/module_apps/edit.html.erb @@ -17,17 +17,17 @@
-
<%= t("admin.user_role.auth.sub_manager") %> - <% @module_app.sub_managers.each do |manager| %> -
<%= manager.user.name %> <%= get_auth_by(manager) %><%= link_to '[X]',remove_sub_manager_admin_module_app_path(@module_app,manager),:method => :delete if if_permit_to_delete(:sub_manager) && manager.user != current_user %>
- <% end %> +
<%#= t("admin.user_role.auth.sub_manager") %> + <%# @module_app.sub_managers.each do |manager| %> +
<%#= manager.user.name %> <%#= get_auth_by(manager) %><%#= link_to '[X]',remove_sub_manager_admin_module_app_path(@module_app,manager),:method => :delete if if_permit_to_delete(:sub_manager) && manager.user != current_user %>
+ <%# end %>
- <%= form_tag(assign_sub_manager_admin_module_app_path) do %> - <%= collection_select(:sub_manager,:id, User.all, :id, :name, :prompt => true,:disabled => !if_permit_to_assign(:sub_manager))%> - <%= submit_tag t("admin.user_role.auth.add_sub_manager") %> - <% end %> + <%#= form_tag(assign_sub_manager_admin_module_app_path) do %> + <%#= collection_select(:sub_manager,:id, User.all, :id, :name, :prompt => true,:disabled => !if_permit_to_assign(:sub_manager))%> + <%#= submit_tag t("admin.user_role.auth.add_sub_manager") %> + <%# end %>
-<%= render :partial => "admin/components/user_role_management", :locals => { :object => @module_app ,:auth=> @module_app.app_auth ,:submit_url=> admin_module_app_app_auths_path(@module_app),:ploy_route_ary=>['remove',:admin,@module_app,@module_app.app_auth] } %> +<%#= render :partial => "admin/components/user_role_management", :locals => { :object => @module_app ,:auth=> @module_app.app_auth ,:submit_url=> admin_module_app_app_auths_path(@module_app),:ploy_route_ary=>['remove',:admin,@module_app,@module_app.app_auth] } %> diff --git a/lib/parsers/parser_front_end.rb b/lib/parsers/parser_front_end.rb index dfec0dd9a..ff69a72b9 100644 --- a/lib/parsers/parser_front_end.rb +++ b/lib/parsers/parser_front_end.rb @@ -21,10 +21,10 @@ module ParserFrontEnd require 'nokogiri' - def parse_page_noko(page, id = nil) + def parse_page_noko(page, id = nil,params) body = Nokogiri::HTML(page.design.layout.body) parse_menu(body, page) - public_r_tags = parse_contents(body, page, id) + public_r_tags = parse_contents(body, page, id,params[:preview]) parse_images(body, page) public_r_tags.each do |tag| @@ -35,7 +35,7 @@ module ParserFrontEnd end # page_contents - def parse_contents(body, page, id) + def parse_contents(body, page, id,preview = false) public_r_tags = [] body.css('.page_content').each do |content| ret = '' @@ -44,6 +44,7 @@ module ParserFrontEnd ret << "/#{id}" if id ret << "?inner=true&page_id=#{page.id}" ret << "&category_id=#{page.category}" if page[:category] + ret << "&preview=true" if preview ret << "'>
" else part = page.page_parts.detect{ |p| p.name.to_s == content['name'].to_s } rescue nil diff --git a/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/approvals_controller.rb b/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/approvals_controller.rb index 4338fdd13..566b07426 100644 --- a/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/approvals_controller.rb +++ b/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/approvals_controller.rb @@ -3,6 +3,13 @@ class Panel::Announcement::BackEnd::ApprovalsController < OrbitBackendControlle before_filter :is_admin? include AdminHelper # layout 'admin' + def preview_and_approve + @bulletin = Bulletin.find params[:bulletin_id] + end + + def approve + + end def setting @bulletin_categorys = BulletinCategory.all diff --git a/vendor/built_in_modules/announcement/app/controllers/panel/announcement/front_end/bulletins_controller.rb b/vendor/built_in_modules/announcement/app/controllers/panel/announcement/front_end/bulletins_controller.rb index 8438c8e0f..26739b62b 100644 --- a/vendor/built_in_modules/announcement/app/controllers/panel/announcement/front_end/bulletins_controller.rb +++ b/vendor/built_in_modules/announcement/app/controllers/panel/announcement/front_end/bulletins_controller.rb @@ -23,10 +23,20 @@ class Panel::Announcement::FrontEnd::BulletinsController < OrbitWidgetController end def show - @bulletin = Bulletin.can_display.where(_id: params[:id]).first - get_categorys + if params[:preview] == "true" + preview_content + else + @bulletin = Bulletin.can_display.where(_id: params[:id]).first + get_categorys + end + end + def preview_content + @bulletin = Bulletin.find params[:id] + get_categorys + render :show + end protected diff --git a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/approvals/_modal_approve.html.erb b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/approvals/_modal_approve.html.erb new file mode 100644 index 000000000..8f65e341c --- /dev/null +++ b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/approvals/_modal_approve.html.erb @@ -0,0 +1,68 @@ + <% if bulletin -%> + + + + + +<% end -%> diff --git a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/approvals/preview_and_approve.js.erb b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/approvals/preview_and_approve.js.erb new file mode 100644 index 000000000..d0e4649dd --- /dev/null +++ b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/approvals/preview_and_approve.js.erb @@ -0,0 +1,5 @@ +$('#show_preview').html("<%= escape_javascript(render(:partial => 'modal_approve',:locals => {:bulletin => @bulletin})) %>"); +var start_modal_with_id = "bulletin-<%=@bulletin.id%>"; +$("#"+start_modal_with_id).css("width","1050px"); +$("#"+start_modal_with_id).css("height","768px"); +$("#"+start_modal_with_id).css("margin","-270px 0 0 -550px"); \ No newline at end of file diff --git a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_bulletin.html.erb b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_bulletin.html.erb index 5fb1fcaab..db22e5019 100644 --- a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_bulletin.html.erb +++ b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_bulletin.html.erb @@ -54,7 +54,7 @@ <% end -%> <% if show_approval_link(bulletin) %> -
  • <%= link_to t('announcement.bulletin.approval'), edit_panel_announcement_back_end_bulletin_path(bulletin) %>
  • <%#= #TODO add ancher so user can quick access into that part %> +
  • <%= link_to t('announcement.bulletin.approval'), panel_announcement_back_end_bulletin_approval_preview_path(bulletin),:class => 'preview_trigger' %>
  • <%#= #TODO add ancher so user can quick access into that part %> <% end %> diff --git a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_form.html.erb b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_form.html.erb index df86f2211..d9771e831 100644 --- a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_form.html.erb +++ b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_form.html.erb @@ -105,28 +105,6 @@ -

    Audit

    -
    - - <% if is_manager? || @bulletin.bulletin_category.authed_users('fact_check').include?(current_user) || current_user.admin? %> -
    - <%= f.label :approval_stat, t('announcement.bulletin.approval_stat') %> - <%= content_tag :label,:class => "radio inline" do -%> - <%= f.radio_button :is_checked, true , {:class => 'privacy'} %> - <%= t('announcement.bulletin.approval_pass') %> - <% end -%> - <%= content_tag :label,:class => "radio inline" do -%> - <%= f.radio_button :is_checked, false, (!@bulletin.is_checked ? {:checked => true, :class => 'privacy'} : {})%> - <%= t('announcement.bulletin.approval_not_pass') %> - <% end -%> -
    - <%= label :is_checked_false, t('announcement.bulletin.approval_not_pass_reason') %> - <%= f.text_field :not_checked_reason %> -
    - -
    - <% end %> -
    <% elsif current_user.admin? %> <%= f.hidden_field :is_checked,:value => true%> diff --git a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/index.html.erb b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/index.html.erb index 54c0ab7a9..4220edf45 100644 --- a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/index.html.erb +++ b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/index.html.erb @@ -23,5 +23,7 @@ <% content_for :page_specific_javascript do %> <%= javascript_include_tag "bulletin_form" %> + <%= javascript_include_tag "/static/jquery.cycle.all.latest.js" %> + <%= javascript_include_tag "inc/modal-preview" %> <% end %> diff --git a/vendor/built_in_modules/announcement/config/locales/en.yml b/vendor/built_in_modules/announcement/config/locales/en.yml index 16353b6ac..f88490e44 100644 --- a/vendor/built_in_modules/announcement/config/locales/en.yml +++ b/vendor/built_in_modules/announcement/config/locales/en.yml @@ -81,6 +81,7 @@ en: approval_setting_window_title: 'Unit' approval_user_list: 'Approval Users' cate_auth: Category Authorization + submit_approval: Submit approval # admin: # action: Action # add_language: Add language diff --git a/vendor/built_in_modules/announcement/config/locales/zh_tw.yml b/vendor/built_in_modules/announcement/config/locales/zh_tw.yml index bf0d0be6b..d0b6d73ed 100644 --- a/vendor/built_in_modules/announcement/config/locales/zh_tw.yml +++ b/vendor/built_in_modules/announcement/config/locales/zh_tw.yml @@ -63,6 +63,7 @@ zh_tw: approval_setting_window_title: '單位' approval_user_list: '審核者' cate_auth: '分類授權' + submit_approval: '提交審核' bulletin: last_modified: 最後修改於 diff --git a/vendor/built_in_modules/announcement/config/routes.rb b/vendor/built_in_modules/announcement/config/routes.rb index 0de9877a1..f2c5092f7 100644 --- a/vendor/built_in_modules/announcement/config/routes.rb +++ b/vendor/built_in_modules/announcement/config/routes.rb @@ -7,6 +7,8 @@ Rails.application.routes.draw do match 'approval_setting' => "approvals#update_setting" ,:as => :approval_setting,:via => :post match 'approval_setting' => "approvals#user_list" ,:as => :approval_user_list,:via => :put resources :bulletins do + match "approve/:bulletin_id" => "approvals#preview_and_approve",:as => :approval_preview,:via => :put + match "approve/:bulletin_id" => "approvals#approve",:as => :approve,:via => :post match "link_quick_add/:bulletin_id" => "bulletins#link_quick_add" ,:as => :link_quick_add match "link_quick_edit/:bulletin_id" => "bulletins#link_quick_edit" ,:as => :link_quick_edit member do @@ -32,7 +34,9 @@ Rails.application.routes.draw do resources :tags end namespace :front_end do - resources :bulletins + resources :bulletins # do + # match "preview" => "bulletins#preview_content",:as => :get_preview_content + # end end namespace :widget do match "bulletins" => "bulletins#index" From eb81aa6980b35627ccead9c53a61ecce3a72010e Mon Sep 17 00:00:00 2001 From: "Matthew K. Fu JuYuan" Date: Thu, 3 May 2012 15:48:42 +0800 Subject: [PATCH 10/39] disable input --- .../announcement/back_end/approvals/_modal_approve.html.erb | 1 + 1 file changed, 1 insertion(+) diff --git a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/approvals/_modal_approve.html.erb b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/approvals/_modal_approve.html.erb index 8f65e341c..35049b981 100644 --- a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/approvals/_modal_approve.html.erb +++ b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/approvals/_modal_approve.html.erb @@ -57,6 +57,7 @@ //Disable all default actions e.preventDefault(); }); + $('input', frameBody).attr("disabled", true); }); }); From b89975b4c4721841ac71d9405599143fec05cf02 Mon Sep 17 00:00:00 2001 From: "Matthew K. Fu JuYuan" Date: Thu, 3 May 2012 18:27:39 +0800 Subject: [PATCH 11/39] add field called unit_list_for_anc and data from nccu(0224). Now can run "rake nccu_data:setup_ut_list" to setup NCCU data. --- .../back_end/bulletins_controller.rb | 1 + .../announcement/app/models/bulletin.rb | 1 + .../app/models/unit_list_for_anc.rb | 12 ++ .../back_end/bulletins/_form.html.erb | 3 + .../front_end/bulletins/show.html.erb | 2 +- .../data_for_ut_list_for_posting_anc.rake | 15 ++ .../lib/ut_list_from_nccu_2012feb.csv | 186 ++++++++++++++++++ 7 files changed, 219 insertions(+), 1 deletion(-) create mode 100644 vendor/built_in_modules/announcement/app/models/unit_list_for_anc.rb create mode 100644 vendor/built_in_modules/announcement/lib/tasks/data_for_ut_list_for_posting_anc.rake create mode 100644 vendor/built_in_modules/announcement/lib/ut_list_from_nccu_2012feb.csv diff --git a/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletins_controller.rb b/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletins_controller.rb index ff262c4d7..6a8ad109c 100644 --- a/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletins_controller.rb +++ b/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletins_controller.rb @@ -316,6 +316,7 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController def get_categorys(id = nil) @bulletin_categorys = [] + @unit_list_for_anc = UnitListForAnc.all if(is_manager? || is_admin?) @bulletin_categorys = (id ? BulletinCategory.find(id).to_a : BulletinCategory.excludes('disabled' => true)) elsif is_sub_manager? diff --git a/vendor/built_in_modules/announcement/app/models/bulletin.rb b/vendor/built_in_modules/announcement/app/models/bulletin.rb index 55d1ec84a..b01de8ea6 100644 --- a/vendor/built_in_modules/announcement/app/models/bulletin.rb +++ b/vendor/built_in_modules/announcement/app/models/bulletin.rb @@ -33,6 +33,7 @@ class Bulletin mount_uploader :image, ImageUploader belongs_to :bulletin_category + belongs_to :unit_list_for_anc # embeds_many :bulletin_links, :cascade_callbacks => true # embeds_many :bulletin_files, :cascade_callbacks => true diff --git a/vendor/built_in_modules/announcement/app/models/unit_list_for_anc.rb b/vendor/built_in_modules/announcement/app/models/unit_list_for_anc.rb new file mode 100644 index 000000000..5261f6a2a --- /dev/null +++ b/vendor/built_in_modules/announcement/app/models/unit_list_for_anc.rb @@ -0,0 +1,12 @@ +class UnitListForAnc + include Mongoid::Document + include Mongoid::Timestamps + + field :order + field :ut_code + field :up_ut_code + + has_one :title, :class_name => "I18nVariable", :as => :language_value, :autosave => true + + +end \ No newline at end of file diff --git a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_form.html.erb b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_form.html.erb index d9771e831..015b636a7 100644 --- a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_form.html.erb +++ b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_form.html.erb @@ -117,6 +117,9 @@
    + + <%= f.label :unit_list_for_anc%> + <%= f.select :unit_list_for_anc_id,@unit_list_for_anc.collect{|t| [ t.title[I18n.locale], t.id ]}, {}, :class => "input-medium" %> <%= f.label :category %> <%= f.select :bulletin_category_id, @bulletin_categorys.collect{|t| [ t.i18n_variable[I18n.locale], t.id ]}, {}, :class => "input-medium" %> 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 2f37df9c1..5c0857cd0 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 @@ -4,7 +4,7 @@
    diff --git a/vendor/built_in_modules/announcement/lib/tasks/data_for_ut_list_for_posting_anc.rake b/vendor/built_in_modules/announcement/lib/tasks/data_for_ut_list_for_posting_anc.rake new file mode 100644 index 000000000..e5bd0be22 --- /dev/null +++ b/vendor/built_in_modules/announcement/lib/tasks/data_for_ut_list_for_posting_anc.rake @@ -0,0 +1,15 @@ +# encoding: utf-8 + +namespace :nccu_data do + desc "load nccu data from csv" + task :setup_ut_list => :environment do + require 'csv' + + CSV.foreach("vendor/built_in_modules/announcement/lib/ut_list_from_nccu_2012feb.csv") do |row| + new_unit = UnitListForAnc.new(:order => row[0], :ut_code => row[1], :up_ut_code => row[2], :created_at => Time.now,:updated_at => Time.now) + new_unit.build_title :en => row[4], :zh_tw => row[3] + new_unit.save + end + + end +end \ No newline at end of file diff --git a/vendor/built_in_modules/announcement/lib/ut_list_from_nccu_2012feb.csv b/vendor/built_in_modules/announcement/lib/ut_list_from_nccu_2012feb.csv new file mode 100644 index 000000000..548ad5281 --- /dev/null +++ b/vendor/built_in_modules/announcement/lib/ut_list_from_nccu_2012feb.csv @@ -0,0 +1,186 @@ +order,ut_code,up_tu_code,ut_zh_tw,ut_en +0100,H00,H00,校長室,Office of the President +0110,H01,H01,副校長室一,Office of the Vice President +0110,H03,H03,副校長室二,Office of the Vice President +0200,100,100,文學院,College of Liberal Arts +0210,101,100,中文系,Dept. of Chinese Literature +0220,103,100,歷史系,Dept. of History +0230,104,100,哲學系,Dept. of Philosophy +0240,155,100,圖檔所,"Graduate Institute of Library, Informati" +0250,156,100,宗教所,Graduate Institute of Religious Studies +0260,158,100,台史所,Graduate Institute of Taiwan History +0270,159,100,台文所,Graduate Institute of Taiwan Literatu +0280,161,100,華文碩,Master's Program in Teaching Chinese as +0290,160,100,華文博,Doctor's Program in Teaching Chinese as +0294,913,100,圖資專班,E-learning Master Program of Library and +0300,700,700,理學院,College of Science +0310,701,700,應數系,Dept. of Mathematical Sciences +0320,702,700,心理系,Dept. of Psychology +0330,703,700,資科系,Dept. of Computer Science +0340,754,700,神科所,The Graduate Institute of Neuroscience +0350,755,700,應物所,Graduate Institute of Applied Physics +0600,200,200,社科院,College of Social Sciences +0605,202,200,政治系,Dept. of Political Science +0610,204,200,社會系,Dept. of Sociology +0615,205,200,財政系,Dept. of Public Finance +0620,206,200,公行系,Dept. of Public Administration +0625,207,200,地政系,Dept. of Land Economics +0630,208,200,經濟系,Dept. of Economics +0635,209,200,民族系,Dept. of Ethnology +0640,261,200,國發所,GIDS +0645,262,200,勞工所,Graduate Institute of Labor Research +0650,264,200,社工所,Graduate Institute of Social Work +0652,265,200,亞太博,International Doctor Program in Asia-Pac +0700,600,600,法學院,College of Law +0710,601,600,法律系,Dept. of Law +0720,652,600,法科所,The Institute of Law and Inter-disciplin +0800,300,300,商學院,College of Commerce +0801,301,300,國貿系,Dept. of International Business +0803,302,300,金融系,Dept. of Money and Banking +0805,303,300,會計系,Dept. of Accounting +0807,304,300,統計系,Dept. of Statistics +0809,305,300,企管系,Dept. of Business Administration +0811,306,300,資管系,Dept. of Management Information System +0813,307,300,財管系,Dept. of Finance +0815,308,300,風管系,Dept. of Risk Management and Insurance +0817,359,300,科管所,Graduate Institute of Technology and Inn +0819,361,300,智財所,Graduate Institute of Intellectual Prope +0821,362,300,管理碩士學程,Advanced Master of Business Administrati +0823,380,300,商管碩,Advanced Master of Business Administrati +1100,500,500,外語學院,College of Foreign Languages +1110,501,500,英文系,Dept. of English +1120,502,500,阿文系,Dept. of Arabic Language and Literature +1130,504,500,斯拉夫文系,Dept. of Slavic Languages and Literature +1140,506,500,日文系,Dept. of Japanese +1150,507,500,韓文系,Dept. of Korean Language and Cultur +1160,508,500,土文系,Dept. of Turkish Language and Cultu +1170,555,500,語言所,Graduate Institute of Linguistics +1180,509,500,歐洲語文學程,Undergraduate Program in European Langua +1190,5T1,500,外文中心,Foreign Languages Center +1200,400,400,傳播學院,College of Communication +1210,401,400,新聞系,Dept. of Journalism +1220,402,400,廣告系,Dept. of Advertising +1230,403,400,廣電系,Dept. of Radio and Television +1240,461,400,國傳英語碩士學位學程,International Master's Program in Intern +1250,404,400,傳播學程,College of Communication Undergraduate D +1260,462,400,數位內容學程,DCT +1270,781,700,數位內容與科技學士學位學程,數位內容與科技學士學位學程 +1280,4A1,400,實習廣播電台,NCCU Community Radio Station +1300,800,800,國際事務學院,College of International Affairs +1310,203,800,外交系,Dept. of Diplomacy +1320,260,800,東亞所,Graduate Institute of East Asian Studies +1330,263,800,俄研所,Graduate Institute of Russian Studies +1340,861,800,日碩研,Master Program in Japan Studies +1346,862,800,國際研究英語碩士學位學程(籌備處),International Master's Program in Intern +1600,900,900,教育學院,College of Education +1610,102,900,教育系,Dept. of Education +1620,157,900,幼教所,Graduate Institute of Early Childhood Ed +1630,171,900,教政所,Graduate Institute of Educational Admini +1640,1T3,900,師培中心,Institute of Teacher Education +1652,172,900,輔諮碩學程,MPCG +1660,1T1,900,教研中心,The Teacher In-Service Education Center +1700,L00,L00,國關中心,The Institute of International Relations +1710,L01,L00,國關第一所,First Division +1720,L02,L00,國關第二所,Second Division +1730,L03,L00,國關第三所,Third Division +1740,L04,L00,國關第四所,Fourth Division +1750,L05,L00,國關合交組,The Institute of International Relations +1760,L06,L00,國關編譯組,The Institute of International Relations +1770,L07,L00,國關圖資組,The Institute of International Relations +1780,L08,L00,國關秘書組,The Institute of International Relations +1800,S00,S00,選研中心,Election Study Center +1900,Z01,Z01,第三部門研究中心,Center for the Third Sector +1910,Z02,Z02,創新創造力研究中心,CCIS +1920,Z03,Z03,中國大陸研究中心,Center for China Studies +1930,Z04,Z04,台灣研究中心,TSC +1940,Z08,Z08,心腦學中心,"Reseach Center for Mind, Brain and Learn" +1950,Z10,Z10,原民中心,Center for Aboriginal Studies +1960,Z09,Z09,人文中心,Humanities Center +2000,T00,T00,教務處,Office of Academic Affairs +2010,T01,T00,教務處註冊組,Registration Section +2020,T02,T00,教務處課務組,Instruction Resources Section +2030,T03,T00,教務處綜合業務組,Admission Section +2040,T04,T00,教務處通識教育中心,Center of General Education +2100,M00,M00,學務處,Office of Student Affairs +2110,M01,M00,學務處生僑組,Life Guidance and Overseas Chinese Stude +2120,M02,M00,學務處課外組,Student Activities Section +2130,M03,M00,學務處住宿組,Student Housing Service Section +2150,M11,M00,學務處藝文中心,Art and Culture Center +2155,M14,M00,學務處身心健康中心,Physical and Mental Health Center +2160,M13,M00,學務處職涯中心,Center of Career Development +2170,D00,M00,學務處軍訓室,Military Education Office +2200,G00,G00,總務處,Office of General Affairs +2210,G01,G00,總務處文書組,Document and postal section +2220,G02,G00,總務處事務組,General Management Section +2230,G05,G00,總務處出納組,Cashier Section +2240,G04,G00,總務處營繕組,Construction and Maintenance Section +2250,G03,G00,總務處財產組,Property Management SEction +2260,G06,G00,總務處環保組,Environmental Protection Section +2270,G08,G00,總務處規劃組,Campus Planning & Devel opment Section +2280,G07,G00,總務處駐警隊,Campus Security National Chengchi Unive +2300,R00,R00,研發處,Office of Research and Development +2310,R01,R00,研發處企畫組,Planning Section +2320,R02,R00,研發處學術推展組,Academic Development Section +2330,R03,R00,研發處學評組,Academic Evaluation Section +2400,Z05,Z05,國合處,Office of International Cooperation +2410,Z06,Z05,國合處合作交流組,CES +2420,Z07,Z05,國合處教育組,IES +2430,Z14,Z05,國合處發展策劃組,DPS +2500,Q00,Q00,秘書處,Secretariat +2510,Q01,Q00,秘書處第一組,First Section +2520,Q02,Q00,秘書處第二組,Second Section +2530,Q03,Q00,秘書處第三組,Third Section +2600,K00,K00,圖書館,Libraries +2610,K06,K00,圖書館資訊組,System Information Section +2620,K07,K00,圖書館採編組,Acquisition & Cataloging Section +2630,K08,K00,圖書館典閱組,Circulation Section +2640,K09,K00,圖書館推廣服務組,Reference Services Section +2650,K10,K00,圖書館數位典藏組,Digital Preservation Section +2660,K11,K00,圖書館行政組,Administration Section +2670,K12,K00,圖書館圖書分館,Branch Libraries +2700,B00,B00,體育室,Physical Education Office +2710,B01,B00,體育教學組,Physical Education Office +2720,B02,B00,體育活動組,Sport activities section +2800,P00,P00,人事室,Personnel Office +2810,P01,P00,人一組,First Section +2820,P02,P00,人二組,Second Section +2830,P03,P00,人三組,Third Section +2840,P04,P00,人四組,Fourth Section +2900,A00,A00,會計室,Accounting Office +2910,A01,A00,會計室第一組,Budgeting Section +2920,A02,A00,會計室第二組,Accounting Section +2930,A03,A00,會計室第三組,Auditing Section +3000,I00,I00,公企中心,Public and Business Administration Educa +3010,I01,I00,公企諮詢組,Research and Consultation Section +3020,I02,I00,公企職訓組,Training Section +3030,I03,I00,公企語訓組,Language Training Section +3040,I04,I00,公企總務組,General Affairs Section +3050,I05,I00,公企中心圖資組,Library Resource Section +3100,O00,O00,公教中心,Civil Service Education Center +3110,O01,O00,公教教務組,Civil Service Education Center +3120,O02,O00,公教輔導組,Civil Service Education Center +3130,O03,O00,公教行政組,Civil Service Education Center +3200,J00,J00,社資中心,Social Sciences Information Center +3210,J03,J00,社資資料組,Reference Services Section +3220,J04,J00,社資研發組,Section of Research & Development +3300,C00,C00,電算中心,Computer Center +3310,C01,C00,電算教研組,Teaching and Research Section +3320,C02,C00,電算系統組,Application System Section +3330,C03,C00,電算行政組,Administration and Counseling Section +3340,C04,C00,電算網路組,Networking and Development Section +3400,T05,T05,教學發展中心,Center for Teaching and Learning Develop +3410,T06,T05,教發教學組,Teaching and Learning Division +3420,T07,T05,教發數位組,E-Learning Division +3430,T08,T05,教發規劃組,Planning and Research Division +3500,162,162,華語文中心,Chinese Language Center +3600,Z11,Z11,育成中心,Innovation Incubation Center +3700,V00,V00,附設實小,The Experimental Elementary School +3700,V01,V00,附設實小教務處,Office of Academic Affairs +3700,V02,V00,附設實小學務處,Office of Student Affairs +3700,V03,V00,附設實小輔導室,The Experimental Elementary School +3700,V04,V00,附設實小總務處,Office of General Affairs +3700,V06,V00,附設實小研究處,The Experimental Elementary School +3710,V05,V00,附設實小幼稚園,The Experimental Elementary School +3800,W00,W00,附中,The Affiliated High School +3900,Z13,Z13,政大書院辦公室,Chengchi College Project Office +4000,Z12,Z12,頂大辦公室,Office of NCCU Top University Program \ No newline at end of file From 05ded8de03afda0da8696a9423a78f55ff19fd75 Mon Sep 17 00:00:00 2001 From: "Matthew K. Fu JuYuan" Date: Mon, 30 Apr 2012 03:14:15 +0800 Subject: [PATCH 12/39] Fix for NCCU 0430 all functions ok with two submanagers but different behavors --- .../admin/dashboards_controller.rb | 2 +- app/controllers/admin/designs_controller.rb | 3 +- app/controllers/application_controller.rb | 52 ++++++++++++++++++- app/helpers/orbit_backend_helper.rb | 6 +-- app/views/admin/dashboards/index.html.erb | 2 + app/views/layouts/_side_bar.html.erb | 4 ++ public/static/kernel.js | 1 + .../back_end/approvals_controller.rb | 1 + .../back_end/bulletin_categorys_controller.rb | 4 +- .../back_end/bulletins_controller.rb | 28 ++++++---- .../_bulletin_category.html.erb | 11 ++-- .../bulletin_categorys/index.html.erb | 2 +- .../back_end/bulletins/_bulletin.html.erb | 16 ++++-- .../back_end/bulletins/_sort_headers.html.erb | 2 +- 14 files changed, 107 insertions(+), 27 deletions(-) diff --git a/app/controllers/admin/dashboards_controller.rb b/app/controllers/admin/dashboards_controller.rb index 7b7613611..b7f377d3b 100644 --- a/app/controllers/admin/dashboards_controller.rb +++ b/app/controllers/admin/dashboards_controller.rb @@ -2,7 +2,7 @@ class Admin::DashboardsController < ApplicationController layout "new_admin" before_filter :authenticate_user! - before_filter :is_admin? +# before_filter :is_admin? def index end diff --git a/app/controllers/admin/designs_controller.rb b/app/controllers/admin/designs_controller.rb index 519b36a59..ff41c0b4d 100644 --- a/app/controllers/admin/designs_controller.rb +++ b/app/controllers/admin/designs_controller.rb @@ -5,7 +5,8 @@ class Admin::DesignsController < ApplicationController layout "new_admin" before_filter :authenticate_user! - before_filter :is_admin? + before_filter :is_admin? + before_filter :for_admin_only def upload_package if !params[:design].nil? diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index fb82774ef..2f6636b9b 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -39,9 +39,59 @@ class ApplicationController < ActionController::Base @parent_item = Item.first(:conditions => { :id => BSON::ObjectId(params[:parent_id]) }) rescue nil end + def auth_failed_in_backend + redirect_to admin_dashboards_url + end + # Check if the current_user is admin def is_admin? - redirect_to root_url unless current_user.admin? + + auth_failed_in_backend unless current_user.admin? + end + + def is_manager? + @module_app.managing_users.include?(current_user) || is_admin? + end + + def for_admin_only + if is_admin? + true + else + flash[:notice] = "Access Denied for you are not Admin" + auth_failed_in_backend + end + end + + def for_app_manager + if is_manager? + true + else + flash[:notice] = "Access Denied for you are not Manager for this app" + auth_failed_in_backend + end + end + + def for_app_sub_manager + if (@module_app.sub_managing_users.include?(current_user) || is_manager?) + true + else + flash[:notice] = "Access Denied for you are not SubManager for this app" + auth_failed_in_backend + end + end + + def for_app_user + if (@module_app.app_auth.auth_users.include?(current_user) || for_app_sub_manager ) + true + else + flash[:notice] = "Access Denied for you are not User for this app" + auth_failed_in_backend + end + end + + def check_object_premission(obj,title) + flash[:notice] = "Access Denied for you don't have permission for this object" + auth_failed_in_backend unless (obj.get_object_auth_by_title(title).auth_users.include?(current_user) || is_manager? || is_admin? ) end # Render the page diff --git a/app/helpers/orbit_backend_helper.rb b/app/helpers/orbit_backend_helper.rb index b0da6df6e..55f44d61b 100644 --- a/app/helpers/orbit_backend_helper.rb +++ b/app/helpers/orbit_backend_helper.rb @@ -25,9 +25,9 @@ module OrbitBackendHelper content_tag :thead do content_tag :tr, :class => "sort-header" do concat (content_tag :th, :class => "span1 strong" do - concat check_box_tag :check_all - concat link_to content_tag(:i, nil, :class => "icon-trash"), '#', :class => "list-remove" - end) if delete_all + concat check_box_tag :check_all + concat link_to content_tag(:i, nil, :class => "icon-trash"), '#', :class => "list-remove" + end) if delete_all && is_manager? titles.each do |title| concat render_title(title[0], title[1], title[2], title[3]) end diff --git a/app/views/admin/dashboards/index.html.erb b/app/views/admin/dashboards/index.html.erb index e22d7dac8..21bc7ffb1 100644 --- a/app/views/admin/dashboards/index.html.erb +++ b/app/views/admin/dashboards/index.html.erb @@ -1,3 +1,5 @@ +<%= flash_messages %> +

    <%= t(:content) %>

    diff --git a/app/views/layouts/_side_bar.html.erb b/app/views/layouts/_side_bar.html.erb index 3baa80496..1a303a319 100644 --- a/app/views/layouts/_side_bar.html.erb +++ b/app/views/layouts/_side_bar.html.erb @@ -1,6 +1,10 @@ <%#= content_tag :li, :class => active_for_controllers('purchases') do -%> <%#= link_to content_tag(:i, nil, :class => 'icons-purchase') + t('admin.purchase'), admin_purchases_path %> <%# end -%> +<% content_for :page_specific_javascript do %> + <%= javascript_include_tag "/static/kernel.js" %> +<% end %> +<%= flash_messages %> <%= content_tag :li, :class => active_for_controllers('bulletins', '/panel/announcement/back_end/tags', 'bulletin_categorys','module_apps', 'approvals') do -%> <%= link_to content_tag(:i, nil, :class => 'icons-announcement') + t('admin.announcement'), panel_announcement_back_end_bulletins_path %> diff --git a/public/static/kernel.js b/public/static/kernel.js index c5b9a8a6a..ba5b81c38 100644 --- a/public/static/kernel.js +++ b/public/static/kernel.js @@ -1,4 +1,5 @@ $(document).ready(function() { + $.each($(".notice"),function(k,v){ alert("EMPTY Cate");}); $.each($(".dymanic_load"),function(){ if($(this).attr("path")==''){$(this).html("App setting Failed");} diff --git a/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/approvals_controller.rb b/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/approvals_controller.rb index 2d10dd75f..4338fdd13 100644 --- a/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/approvals_controller.rb +++ b/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/approvals_controller.rb @@ -1,5 +1,6 @@ class Panel::Announcement::BackEnd::ApprovalsController < OrbitBackendController before_filter :authenticate_user! + before_filter :is_admin? include AdminHelper # layout 'admin' diff --git a/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletin_categorys_controller.rb b/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletin_categorys_controller.rb index 0e3894b9d..b9151125c 100644 --- a/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletin_categorys_controller.rb +++ b/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletin_categorys_controller.rb @@ -1,5 +1,7 @@ class Panel::Announcement::BackEnd::BulletinCategorysController < OrbitBackendController - + before_filter :for_app_manager,:except => [:index] + + def index @bulletin_categorys = BulletinCategory.all @bulletin_category = BulletinCategory.new(:display => 'List') diff --git a/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletins_controller.rb b/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletins_controller.rb index 62de400d1..6cf11158d 100644 --- a/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletins_controller.rb +++ b/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletins_controller.rb @@ -1,8 +1,9 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController before_filter :authenticate_user! - before_filter :is_admin? - +# before_filter :for_admin_only,:only => [:] +# before_filter :for_app_manager,:only => [:index,:show,] + before_filter :for_app_sub_manager,:except => [:index,:show,:get_sorted_and_filtered_bulletins] def index # @bulletins = Bulletin.all # @bulletins = Bulletin.desc("postdate desc") @@ -42,6 +43,10 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController @bulletin_file = BulletinFile.new @file_url = panel_announcement_back_end_bulletins_path + @bulletins.delete_if{ |bulletin| + bulletin.is_pending == true && (!bulletin.bulletin_category.authed_users('fact_check').include?(current_user) || bulletin.create_user_id!=current_user.id) + } + respond_to do |format| format.html # index.html.erb format.js { } @@ -79,14 +84,17 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController # @bulletin.bulletin_files.build # @bulletin.bulletin_files.new - - get_categorys - get_tags - respond_to do |format| - format.html # new.html.erb - format.xml { render :xml => @bulletin } - end + if get_categorys.empty? + flash[:notice] = "You dont have any permission for post on cate" + redirect_to :action => :index + else + get_tags + respond_to do |format| + format.html # new.html.erb + format.xml { render :xml => @bulletin } + end + end end # GET /bulletins/1/edit @@ -314,7 +322,7 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController if(is_manager? || is_admin?) @bulletin_categorys = (id ? BulletinCategory.find(id).to_a : BulletinCategory.excludes('disabled' => true)) elsif is_sub_manager? - @bulletin_categorys = BulletinCategory.authed_for_user(current_user,'submit_new') + @bulletin_categorys = BulletinCategory.authed_for_user(current_user,'submit') end end diff --git a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletin_categorys/_bulletin_category.html.erb b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletin_categorys/_bulletin_category.html.erb index a75440e56..8ad4578ea 100644 --- a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletin_categorys/_bulletin_category.html.erb +++ b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletin_categorys/_bulletin_category.html.erb @@ -4,10 +4,13 @@ <%= bulletin_category.key %>
    diff --git a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletin_categorys/index.html.erb b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletin_categorys/index.html.erb index 4d31464f1..26a88dab7 100644 --- a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletin_categorys/index.html.erb +++ b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletin_categorys/index.html.erb @@ -35,7 +35,7 @@ -
    <%= render :partial => "form" %>
    +
    <%= render :partial => "form" if is_manager?%>
    diff --git a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_bulletin.html.erb b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_bulletin.html.erb index d171e0b3c..5fb1fcaab 100644 --- a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_bulletin.html.erb +++ b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_bulletin.html.erb @@ -1,5 +1,8 @@ - <%= check_box_tag 'to_delete[]', bulletin.id, false, :class => "checkbox_in_list" %> + + <% if (bulletin.create_user_id == current_user.id) || is_manager? %> + <%= check_box_tag 'to_delete[]', bulletin.id, false, :class => "checkbox_in_list" %> + <% end -%>
    @@ -27,8 +30,11 @@ <%= bulletin.bulletin_category.i18n_variable[I18n.locale] %> <%= link_to bulletin.title[I18n.locale], panel_announcement_front_end_bulletin_path(bulletin, :category_id => bulletin.bulletin_category.id) rescue ''%> +
    diff --git a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_sort_headers.html.erb b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_sort_headers.html.erb index bca2db6a9..f0d41dea1 100644 --- a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_sort_headers.html.erb +++ b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_sort_headers.html.erb @@ -4,4 +4,4 @@ ['start_date', 'postdate', 'span1-2', 'bulletin.start_date'], ['end_date', 'deadline', 'span1-2', 'bulletin.end_date'], ['tags', 'tags', 'span1-2', 'bulletin.tags'], - ['last_modified', 'update_user_id','span1-3', 'bulletin.last_modified']).html_safe %> \ No newline at end of file + ['last_modified', 'update_user_id','span1-3', 'bulletin.last_modified']).html_safe %> From f427c3803f64b592685227ed73de4d0056f1c769 Mon Sep 17 00:00:00 2001 From: "Matthew K. Fu JuYuan" Date: Mon, 30 Apr 2012 15:51:22 +0800 Subject: [PATCH 13/39] clean up useless flash msgs. add i18n vars for app auth and object auth --- app/controllers/application_controller.rb | 10 ++--- app/views/admin/dashboards/index.html.erb | 2 - app/views/layouts/_side_bar.html.erb | 1 - config/locales/en.yml | 8 ++++ config/locales/zh_tw.yml | 42 +++++++++++-------- public/static/kernel.js | 1 - .../back_end/bulletins_controller.rb | 2 +- .../announcement/config/locales/en.yml | 2 + .../announcement/config/locales/zh_tw.yml | 2 + 9 files changed, 43 insertions(+), 27 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 2f6636b9b..8fc3a90ba 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -57,7 +57,7 @@ class ApplicationController < ActionController::Base if is_admin? true else - flash[:notice] = "Access Denied for you are not Admin" + flash[:error] = t("admin.access.denied.not_admin") auth_failed_in_backend end end @@ -66,7 +66,7 @@ class ApplicationController < ActionController::Base if is_manager? true else - flash[:notice] = "Access Denied for you are not Manager for this app" + flash[:error] = t("admin.access.denied.app.not_manager") auth_failed_in_backend end end @@ -75,7 +75,7 @@ class ApplicationController < ActionController::Base if (@module_app.sub_managing_users.include?(current_user) || is_manager?) true else - flash[:notice] = "Access Denied for you are not SubManager for this app" + flash[:error] = t("admin.access.denied.app.not_sub_manager") auth_failed_in_backend end end @@ -84,13 +84,13 @@ class ApplicationController < ActionController::Base if (@module_app.app_auth.auth_users.include?(current_user) || for_app_sub_manager ) true else - flash[:notice] = "Access Denied for you are not User for this app" + flash[:error] = t("admin.access.denied.app.not_authed_user") auth_failed_in_backend end end def check_object_premission(obj,title) - flash[:notice] = "Access Denied for you don't have permission for this object" + flash[:error] = t("admin.access.denied.object") auth_failed_in_backend unless (obj.get_object_auth_by_title(title).auth_users.include?(current_user) || is_manager? || is_admin? ) end diff --git a/app/views/admin/dashboards/index.html.erb b/app/views/admin/dashboards/index.html.erb index 21bc7ffb1..e22d7dac8 100644 --- a/app/views/admin/dashboards/index.html.erb +++ b/app/views/admin/dashboards/index.html.erb @@ -1,5 +1,3 @@ -<%= flash_messages %> -

    <%= t(:content) %>

    diff --git a/app/views/layouts/_side_bar.html.erb b/app/views/layouts/_side_bar.html.erb index 1a303a319..dd8ffa839 100644 --- a/app/views/layouts/_side_bar.html.erb +++ b/app/views/layouts/_side_bar.html.erb @@ -4,7 +4,6 @@ <% content_for :page_specific_javascript do %> <%= javascript_include_tag "/static/kernel.js" %> <% end %> -<%= flash_messages %> <%= content_tag :li, :class => active_for_controllers('bulletins', '/panel/announcement/back_end/tags', 'bulletin_categorys','module_apps', 'approvals') do -%> <%= link_to content_tag(:i, nil, :class => 'icons-announcement') + t('admin.announcement'), panel_announcement_back_end_bulletins_path %> diff --git a/config/locales/en.yml b/config/locales/en.yml index 69491cbcf..4427e8908 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -68,6 +68,14 @@ en: traffic: Traffic admin: + access: + denied: + app: + not_sub_manager: Access Denied for you are not SubManager for this app + not_manager: Access Denied for you are not SubManager for this app + not_authed_user: Access Denied for you are not User for this app + not_admin: Access Denied for you are not Admin + object: "Access Denied for you don't have permission for this object" action: Action ad_banner: AD Banner ad: diff --git a/config/locales/zh_tw.yml b/config/locales/zh_tw.yml index 19f666c4e..dfbcdf951 100644 --- a/config/locales/zh_tw.yml +++ b/config/locales/zh_tw.yml @@ -8,12 +8,12 @@ zh_tw: back: 回上一步 browse: 選擇檔案 cancel: 取消 - create: 創建 + create: 新增 delete: 刪除 desktop: 桌面 disable: 禁用 dots: … - downloaded: 已經下載 + downloaded: 已下載 download: 下載 edit: 編輯 email: 電子郵件 @@ -47,7 +47,7 @@ zh_tw: file_type: 檔案類型 hits: 點擊率 item: 項目 - member: 成員 + member: 會員 module: 模組 most_visited_page: 熱門頁面 quantity: 數量 @@ -62,6 +62,14 @@ zh_tw: traffic: 流量 admin: + access: + denied: + app: + not_sub_manager: 拒絕存取因你不是此應用程式次管理員 + not_manager: 拒絕存取因你不是此應用程式管理員 + not_authed_user: 拒絕存取因你不是此應用程式授權使用者 + not_admin: 拒絕存取因你不是此應用程式次管理員 + object: 拒絕存取因你不是網站管理者 action: 操作 ad_banner: 廣告輪播 ad: @@ -81,7 +89,7 @@ zh_tw: add_item: 新增項目 add_language: 新增語言 add_drop_down_item: +增加Orbit選單 - admin: 管理 + admin: 網站管理者 all_articles: 列表 announcement: 公告管理 asset: 資產 @@ -94,22 +102,22 @@ zh_tw: author: 作者 calendar: 行事曆 cant_delete_self: 您不可以刪除自己。 - cant_revoke_self_admin: 您不可以撤銷自己的管理作用。 + cant_revoke_self_admin: 您不可以撤銷自己的管理身份。 choose_file: 請選擇一個文件... class: 階級 content: 內容 - create_error_link: 創建連接時出錯。 - create_error_page: 創建頁面時出錯。 - create_success_home: 首頁已成功創建。 - create_success_layout: 樣板已成功創建。 - create_success_link: 連結已成功創建。 - create_success_page: 頁面已成功創建。 - create_success_home: 首頁已成功創建。 - create_success_layout: 佈局已成功創建。 - create_success_link: 連結已成功創建。 - create_success_page: 頁面已成功創建。 - create_success_snippet: 片段已成功創建。 - create_success_user: 用戶已成功創建。。 + create_error_link: 新增連接時出錯。 + create_error_page: 新增頁面時出錯。 + create_success_home: 首頁已成功新增。 + create_success_layout: 樣板已成功新增。 + create_success_link: 連結已成功新增。 + create_success_page: 頁面已成功新增。 + create_success_home: 首頁已成功新增。 + create_success_layout: 佈局已成功新增。 + create_success_link: 連結已成功新增。 + create_success_page: 頁面已成功新增。 + create_success_snippet: 片段已成功新增。 + create_success_user: 用戶已成功新增。。 dashboard: 儀表板 data: 資料數據 delete_language: 刪除語言 diff --git a/public/static/kernel.js b/public/static/kernel.js index ba5b81c38..c5b9a8a6a 100644 --- a/public/static/kernel.js +++ b/public/static/kernel.js @@ -1,5 +1,4 @@ $(document).ready(function() { - $.each($(".notice"),function(k,v){ alert("EMPTY Cate");}); $.each($(".dymanic_load"),function(){ if($(this).attr("path")==''){$(this).html("App setting Failed");} diff --git a/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletins_controller.rb b/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletins_controller.rb index 6cf11158d..a1f5227e3 100644 --- a/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletins_controller.rb +++ b/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletins_controller.rb @@ -86,7 +86,7 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController # @bulletin.bulletin_files.new if get_categorys.empty? - flash[:notice] = "You dont have any permission for post on cate" + flash[:alert] = t("announcement.error.no_avilb_cate_for_posting") redirect_to :action => :index else get_tags diff --git a/vendor/built_in_modules/announcement/config/locales/en.yml b/vendor/built_in_modules/announcement/config/locales/en.yml index 5f3193406..cdb0d0c16 100644 --- a/vendor/built_in_modules/announcement/config/locales/en.yml +++ b/vendor/built_in_modules/announcement/config/locales/en.yml @@ -59,6 +59,8 @@ en: all_articles: List add_new: Add categories: Categories + error: + no_avilb_cate_for_posting: You need a category to submit your post,please contact admin sure?: Sure? campus_news: Campus News more: more+ diff --git a/vendor/built_in_modules/announcement/config/locales/zh_tw.yml b/vendor/built_in_modules/announcement/config/locales/zh_tw.yml index 11e79fcca..248d3e92d 100644 --- a/vendor/built_in_modules/announcement/config/locales/zh_tw.yml +++ b/vendor/built_in_modules/announcement/config/locales/zh_tw.yml @@ -37,6 +37,8 @@ zh_tw: announcement: add_new: 新增 all_articles: 列表 + error: + no_avilb_cate_for_posting: 您目前沒有分類可以刊登公告,請聯絡系統管理員為您開通分類 tags: 標籤 categories: 分類 status: 狀態 From bff3cefbc79e15a09a8525056db36393ee920319 Mon Sep 17 00:00:00 2001 From: "Matthew K. Fu JuYuan" Date: Tue, 1 May 2012 16:05:05 +0800 Subject: [PATCH 14/39] Apply app_auth to ad_banner. From now,ad_banner can only be viewed for at least manager. --- app/controllers/admin/ad_banners_controller.rb | 4 ++-- app/controllers/application_controller.rb | 3 ++- app/helpers/application_helper.rb | 9 +++++++++ app/views/layouts/_side_bar.html.erb | 12 +++++++----- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/app/controllers/admin/ad_banners_controller.rb b/app/controllers/admin/ad_banners_controller.rb index a21693aa6..47d3d3555 100644 --- a/app/controllers/admin/ad_banners_controller.rb +++ b/app/controllers/admin/ad_banners_controller.rb @@ -1,7 +1,7 @@ -class Admin::AdBannersController < ApplicationController +class Admin::AdBannersController < OrbitBackendController layout "new_admin" before_filter :authenticate_user! - before_filter :is_admin? + before_filter :for_app_manager def destroy @ad_banner = AdBanner.find(params[:id]) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 8fc3a90ba..ab01ea6bd 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -40,7 +40,8 @@ class ApplicationController < ActionController::Base end def auth_failed_in_backend - redirect_to admin_dashboards_url + #redirect_to admin_dashboards_url + redirect_to root_path end # Check if the current_user is admin diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 682799eb7..1839cf663 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -74,6 +74,15 @@ module ApplicationHelper end end + def active_sys_call_for_app(controller_name,action_name,app_title) + unless active_for_action(controller_name,action_name).nil? + app = ModuleApp.find params[:id] + app.title == app_title ? 'active' : nil + else + nil + end + end + def active_for_controllers(*controller_names) (controller_names.include?(controller.controller_name) || controller_names.include?(request.fullpath)) ? 'active' : nil end diff --git a/app/views/layouts/_side_bar.html.erb b/app/views/layouts/_side_bar.html.erb index dd8ffa839..41416bc4e 100644 --- a/app/views/layouts/_side_bar.html.erb +++ b/app/views/layouts/_side_bar.html.erb @@ -5,7 +5,7 @@ <%= javascript_include_tag "/static/kernel.js" %> <% end %> -<%= content_tag :li, :class => active_for_controllers('bulletins', '/panel/announcement/back_end/tags', 'bulletin_categorys','module_apps', 'approvals') do -%> +<%= content_tag :li, :class => active_for_controllers('bulletins', '/panel/announcement/back_end/tags', 'bulletin_categorys', 'approvals') || active_sys_call_for_app('module_apps','edit','Announcement') do -%> <%= link_to content_tag(:i, nil, :class => 'icons-announcement') + t('admin.announcement'), panel_announcement_back_end_bulletins_path %> <%= content_tag :ul, :class => ("nav nav-list " + visible_for_controllers('bulletins', '/panel/announcement/back_end/tags', 'bulletin_categorys', 'approvals')) do -%> <%= content_tag :li, link_to(t('announcement.all_articles'), panel_announcement_back_end_bulletins_path), :class => active_for_action('bulletins', 'index') %> @@ -13,7 +13,7 @@ <%= content_tag :li, link_to(t('announcement.categories'), panel_announcement_back_end_bulletin_categorys_path), :class => active_for_action('bulletin_categorys', 'index') %> <%= content_tag :li, link_to(t('announcement.tags'), panel_announcement_back_end_tags_path), :class => active_for_action('/panel/announcement/back_end/tags', 'index') %> <%= content_tag :li, link_to(t('announcement.bulletin.approval_setting'), panel_announcement_back_end_approval_setting_path), :class => active_for_action('approvals', 'setting') if (is_manager? rescue nil) %> - <%= content_tag :li, link_to(t('admin.module.authorization'),edit_admin_module_app_path(ModuleApp.first(conditions: {title: "Announcement"}))), :class => active_for_action('module_apps', 'edit') if (is_admin? rescue nil) %> + <%= content_tag :li, link_to(t('admin.module.authorization'),edit_admin_module_app_path(ModuleApp.first(conditions: {title: "Announcement"}))), :class => active_sys_call_for_app('module_apps','edit','Announcement') if (is_admin? rescue nil) %> <% end -%> @@ -46,13 +46,15 @@ <%= link_to content_tag(:i, nil, :class => 'icons-window-block') + t('admin.design'), admin_designs_path %> <% end -%> -<%= content_tag :li, :class => active_for_controllers('ad_banners', 'ad_images') do -%> +<%= content_tag :li, :class => active_for_controllers('ad_banners', 'ad_images') || active_sys_call_for_app('module_apps','edit','ad_banners') do -%> <%= link_to content_tag(:i, nil, :class => 'icons-link') + t('admin.ad_banner'), admin_ad_banners_path %> - <%#= content_tag :ul, :class => ("nav nav-list " + visible_for_controllers('ad_banners', 'ad_images')) do -%> + + <%= content_tag :ul, :class => ("nav nav-list " + visible_for_controllers('ad_banners', 'ad_images') ) do -%> <%#= content_tag :li, link_to(t('admin.ad.all_banners'), admin_ad_banners_path), :class => active_for_action('ad_banners', 'index') %> <%#= content_tag :li, link_to(t('admin.ad.new_banner'), new_admin_ad_banner_path), :class => active_for_action('ad_banners', 'new') %> <%#= content_tag :li, link_to(t('admin.ad.new_image'), new_ad_image_admin_ad_banners_path), :class => active_for_action('ad_images', 'new') %> - <%# end %> + <%= content_tag :li, link_to(t('admin.module.authorization'),edit_admin_module_app_path(ModuleApp.first(conditions: {title: "ad_banners"}))), :class => active_sys_call_for_app('module_apps','edit','ad_banners') if (is_admin? rescue nil) %> + <% end -%> <% end %> <%= content_tag :li, :class => active_for_controllers('web_links', '/panel/web_resource/back_end/tags', 'web_link_categorys') do -%> From f6307abfbf1559b0dfb7d5a8c416e7f02e3227b9 Mon Sep 17 00:00:00 2001 From: "Matthew K. Fu JuYuan" Date: Tue, 1 May 2012 18:23:42 +0800 Subject: [PATCH 15/39] fix broken ad_banner --- app/views/admin/ad_banners/_ad_banner_tab.html.erb | 2 +- config/routes.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/admin/ad_banners/_ad_banner_tab.html.erb b/app/views/admin/ad_banners/_ad_banner_tab.html.erb index ff27d914f..797624ff1 100644 --- a/app/views/admin/ad_banners/_ad_banner_tab.html.erb +++ b/app/views/admin/ad_banners/_ad_banner_tab.html.erb @@ -15,7 +15,7 @@
    <%= link_to t("admin.ad.new_image"),new_admin_ad_banner_ad_image_path(ad_banner_tab) ,:class => "btn btn-primary"%> - <%= link_to t("modal.preview"), admin_realtime_preview_ad_banner_path(ad_banner_tab.title) , :class=>'preview_trigger btn btn-success'%> + <%= link_to t("modal.preview"), admin_realtime_preview_ad_banner_path(ad_banner_tab.id) , :class=>'preview_trigger btn btn-success'%>
      <%= render :partial => "ad_image_update", :collection => ad_banner_tab.ad_images,:as => :ad_image,:locals=>{:ad_banner => ad_banner_tab} %> diff --git a/config/routes.rb b/config/routes.rb index e8695f0ab..c90a5ae05 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -25,7 +25,7 @@ Orbit::Application.routes.draw do end - match 'ad_banner/:id/preview' => 'ad_banners#realtime_preview',:as => :realtime_preview_ad_banner,:via => :put + match 'ad_banners/:id/preview' => 'ad_banners#realtime_preview',:as => :realtime_preview_ad_banner,:via => :put resources :ad_banners do collection do match 'new_ad_image' => 'ad_images#new',:as => :new_ad_image,:via => :get From 453cb210661f0bbb2a2ba4e7bf76a9233d06c382 Mon Sep 17 00:00:00 2001 From: "Matthew K. Fu JuYuan" Date: Thu, 3 May 2012 14:57:10 +0800 Subject: [PATCH 16/39] Announcement preivew --- app/controllers/application_controller.rb | 4 +- app/controllers/pages_controller.rb | 6 +- app/views/admin/ad_banners/index.html.erb | 2 +- app/views/admin/module_apps/edit.html.erb | 18 ++--- lib/parsers/parser_front_end.rb | 6 +- .../back_end/approvals_controller.rb | 7 ++ .../front_end/bulletins_controller.rb | 14 +++- .../approvals/_modal_approve.html.erb | 68 +++++++++++++++++++ .../approvals/preview_and_approve.js.erb | 5 ++ .../back_end/bulletins/_bulletin.html.erb | 2 +- .../back_end/bulletins/_form.html.erb | 22 ------ .../back_end/bulletins/index.html.erb | 2 + .../announcement/config/locales/en.yml | 3 +- .../announcement/config/locales/zh_tw.yml | 1 + .../announcement/config/routes.rb | 6 +- 15 files changed, 122 insertions(+), 44 deletions(-) create mode 100644 vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/approvals/_modal_approve.html.erb create mode 100644 vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/approvals/preview_and_approve.js.erb diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index ab01ea6bd..a57b4d705 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -96,9 +96,9 @@ class ApplicationController < ActionController::Base end # Render the page - def render_page(id = nil) + def render_page(param) if @item - render :text => process_page(@item, id), :layout => 'page_layout' + render :text => process_page(@item, param[:id],param), :layout => 'page_layout' else render :text => '404 Not Found' end diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb index 8e9f8bb6a..644f02238 100644 --- a/app/controllers/pages_controller.rb +++ b/app/controllers/pages_controller.rb @@ -19,7 +19,7 @@ class PagesController < ApplicationController if @item && @item.is_published case @item._type when 'Page' - render_page(params[:id]) + render_page(params) when 'Link' redirect_to "http://#{@item[:url]}" end @@ -40,7 +40,9 @@ class PagesController < ApplicationController end def show_from_link - redirect_to "/#{@item.full_name}?id=#{params[:id]}" + # debugger + # a=1 + redirect_to "/#{@item.full_name}?id=#{params[:id]}&preview=#{params[:preview]}" end def load_orbit_bar diff --git a/app/views/admin/ad_banners/index.html.erb b/app/views/admin/ad_banners/index.html.erb index d70afab39..47a9ec4d3 100644 --- a/app/views/admin/ad_banners/index.html.erb +++ b/app/views/admin/ad_banners/index.html.erb @@ -1,7 +1,7 @@ <% content_for :page_specific_css do -%> <%#= stylesheet_link_tag "admin/ad_banner_preview" %> <% end -%> -<% content_for :page_specific_css do -%> +<% content_for :page_specific_javascript do -%> <%= javascript_include_tag "/static/jquery.cycle.all.latest.js" %> <%= javascript_include_tag "inc/modal-preview" %> <% end -%> diff --git a/app/views/admin/module_apps/edit.html.erb b/app/views/admin/module_apps/edit.html.erb index 52142feac..7fb64d170 100644 --- a/app/views/admin/module_apps/edit.html.erb +++ b/app/views/admin/module_apps/edit.html.erb @@ -17,17 +17,17 @@
      -
      <%= t("admin.user_role.auth.sub_manager") %> - <% @module_app.sub_managers.each do |manager| %> -
      <%= manager.user.name %> <%= get_auth_by(manager) %><%= link_to '[X]',remove_sub_manager_admin_module_app_path(@module_app,manager),:method => :delete if if_permit_to_delete(:sub_manager) && manager.user != current_user %>
      - <% end %> +
      <%#= t("admin.user_role.auth.sub_manager") %> + <%# @module_app.sub_managers.each do |manager| %> +
      <%#= manager.user.name %> <%#= get_auth_by(manager) %><%#= link_to '[X]',remove_sub_manager_admin_module_app_path(@module_app,manager),:method => :delete if if_permit_to_delete(:sub_manager) && manager.user != current_user %>
      + <%# end %>
      - <%= form_tag(assign_sub_manager_admin_module_app_path) do %> - <%= collection_select(:sub_manager,:id, User.all, :id, :name, :prompt => true,:disabled => !if_permit_to_assign(:sub_manager))%> - <%= submit_tag t("admin.user_role.auth.add_sub_manager") %> - <% end %> + <%#= form_tag(assign_sub_manager_admin_module_app_path) do %> + <%#= collection_select(:sub_manager,:id, User.all, :id, :name, :prompt => true,:disabled => !if_permit_to_assign(:sub_manager))%> + <%#= submit_tag t("admin.user_role.auth.add_sub_manager") %> + <%# end %>
    -<%= render :partial => "admin/components/user_role_management", :locals => { :object => @module_app ,:auth=> @module_app.app_auth ,:submit_url=> admin_module_app_app_auths_path(@module_app),:ploy_route_ary=>['remove',:admin,@module_app,@module_app.app_auth] } %> +<%#= render :partial => "admin/components/user_role_management", :locals => { :object => @module_app ,:auth=> @module_app.app_auth ,:submit_url=> admin_module_app_app_auths_path(@module_app),:ploy_route_ary=>['remove',:admin,@module_app,@module_app.app_auth] } %> diff --git a/lib/parsers/parser_front_end.rb b/lib/parsers/parser_front_end.rb index 5eea7f9fd..7056094fd 100644 --- a/lib/parsers/parser_front_end.rb +++ b/lib/parsers/parser_front_end.rb @@ -21,10 +21,10 @@ module ParserFrontEnd require 'nokogiri' - def parse_page_noko(page, id = nil) + def parse_page_noko(page, id = nil,params) body = Nokogiri::HTML(page.design.layout.body) parse_menu(body, page) - public_r_tags = parse_contents(body, page, id) + public_r_tags = parse_contents(body, page, id,params[:preview]) parse_images(body, page) public_r_tags.each do |tag| @@ -35,7 +35,7 @@ module ParserFrontEnd end # page_contents - def parse_contents(body, page, id) + def parse_contents(body, page, id,preview = false) public_r_tags = [] body.css('.page_content').each do |content| ret = '' diff --git a/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/approvals_controller.rb b/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/approvals_controller.rb index 4338fdd13..566b07426 100644 --- a/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/approvals_controller.rb +++ b/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/approvals_controller.rb @@ -3,6 +3,13 @@ class Panel::Announcement::BackEnd::ApprovalsController < OrbitBackendControlle before_filter :is_admin? include AdminHelper # layout 'admin' + def preview_and_approve + @bulletin = Bulletin.find params[:bulletin_id] + end + + def approve + + end def setting @bulletin_categorys = BulletinCategory.all diff --git a/vendor/built_in_modules/announcement/app/controllers/panel/announcement/front_end/bulletins_controller.rb b/vendor/built_in_modules/announcement/app/controllers/panel/announcement/front_end/bulletins_controller.rb index e8f25163e..d3efc5c6e 100644 --- a/vendor/built_in_modules/announcement/app/controllers/panel/announcement/front_end/bulletins_controller.rb +++ b/vendor/built_in_modules/announcement/app/controllers/panel/announcement/front_end/bulletins_controller.rb @@ -25,10 +25,20 @@ class Panel::Announcement::FrontEnd::BulletinsController < OrbitWidgetController end def show - @bulletin = Bulletin.can_display.where(_id: params[:id]).first - get_categorys + if params[:preview] == "true" + preview_content + else + @bulletin = Bulletin.can_display.where(_id: params[:id]).first + get_categorys + end + end + def preview_content + @bulletin = Bulletin.find params[:id] + get_categorys + render :show + end protected diff --git a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/approvals/_modal_approve.html.erb b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/approvals/_modal_approve.html.erb new file mode 100644 index 000000000..8f65e341c --- /dev/null +++ b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/approvals/_modal_approve.html.erb @@ -0,0 +1,68 @@ + <% if bulletin -%> + + + + + +<% end -%> diff --git a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/approvals/preview_and_approve.js.erb b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/approvals/preview_and_approve.js.erb new file mode 100644 index 000000000..d0e4649dd --- /dev/null +++ b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/approvals/preview_and_approve.js.erb @@ -0,0 +1,5 @@ +$('#show_preview').html("<%= escape_javascript(render(:partial => 'modal_approve',:locals => {:bulletin => @bulletin})) %>"); +var start_modal_with_id = "bulletin-<%=@bulletin.id%>"; +$("#"+start_modal_with_id).css("width","1050px"); +$("#"+start_modal_with_id).css("height","768px"); +$("#"+start_modal_with_id).css("margin","-270px 0 0 -550px"); \ No newline at end of file diff --git a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_bulletin.html.erb b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_bulletin.html.erb index 5fb1fcaab..db22e5019 100644 --- a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_bulletin.html.erb +++ b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_bulletin.html.erb @@ -54,7 +54,7 @@ <% end -%> <% if show_approval_link(bulletin) %> -
  • <%= link_to t('announcement.bulletin.approval'), edit_panel_announcement_back_end_bulletin_path(bulletin) %>
  • <%#= #TODO add ancher so user can quick access into that part %> +
  • <%= link_to t('announcement.bulletin.approval'), panel_announcement_back_end_bulletin_approval_preview_path(bulletin),:class => 'preview_trigger' %>
  • <%#= #TODO add ancher so user can quick access into that part %> <% end %>
    diff --git a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_form.html.erb b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_form.html.erb index 360cead24..33aacf348 100644 --- a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_form.html.erb +++ b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_form.html.erb @@ -105,28 +105,6 @@
    -

    Audit

    -
    - - <% if is_manager? || @bulletin.bulletin_category.authed_users('fact_check').include?(current_user) || current_user.admin? %> -
    - <%= f.label :approval_stat, t('announcement.bulletin.approval_stat') %> - <%= content_tag :label,:class => "radio inline" do -%> - <%= f.radio_button :is_checked, true , {:class => 'privacy'} %> - <%= t('announcement.bulletin.approval_pass') %> - <% end -%> - <%= content_tag :label,:class => "radio inline" do -%> - <%= f.radio_button :is_checked, false, (!@bulletin.is_checked ? {:checked => true, :class => 'privacy'} : {})%> - <%= t('announcement.bulletin.approval_not_pass') %> - <% end -%> -
    - <%= label :is_checked_false, t('announcement.bulletin.approval_not_pass_reason') %> - <%= f.text_field :not_checked_reason %> -
    - -
    - <% end %> -
    <% elsif current_user.admin? %> <%= f.hidden_field :is_checked,:value => true%> diff --git a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/index.html.erb b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/index.html.erb index 875c1eaf9..c64035a56 100644 --- a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/index.html.erb +++ b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/index.html.erb @@ -20,5 +20,7 @@ <% content_for :page_specific_javascript do %> <%= javascript_include_tag "bulletin_form" %> + <%= javascript_include_tag "/static/jquery.cycle.all.latest.js" %> + <%= javascript_include_tag "inc/modal-preview" %> <% end %> diff --git a/vendor/built_in_modules/announcement/config/locales/en.yml b/vendor/built_in_modules/announcement/config/locales/en.yml index cdb0d0c16..1c4f51b0a 100644 --- a/vendor/built_in_modules/announcement/config/locales/en.yml +++ b/vendor/built_in_modules/announcement/config/locales/en.yml @@ -82,8 +82,9 @@ en: approval_setting_window_title: 'Unit' approval_user_list: 'Approval Users' cate_auth: Category Authorization + submit_approval: Submit approval tag_cloud: Tag cloud - + # admin: # action: Action # add_language: Add language diff --git a/vendor/built_in_modules/announcement/config/locales/zh_tw.yml b/vendor/built_in_modules/announcement/config/locales/zh_tw.yml index 248d3e92d..5cadd8433 100644 --- a/vendor/built_in_modules/announcement/config/locales/zh_tw.yml +++ b/vendor/built_in_modules/announcement/config/locales/zh_tw.yml @@ -63,6 +63,7 @@ zh_tw: approval_setting_window_title: '單位' approval_user_list: '審核者' cate_auth: '分類授權' + submit_approval: '提交審核' tag_cloud: 標籤雲 bulletin: diff --git a/vendor/built_in_modules/announcement/config/routes.rb b/vendor/built_in_modules/announcement/config/routes.rb index 6e60960fc..396ea8e47 100644 --- a/vendor/built_in_modules/announcement/config/routes.rb +++ b/vendor/built_in_modules/announcement/config/routes.rb @@ -7,6 +7,8 @@ Rails.application.routes.draw do match 'approval_setting' => "approvals#update_setting" ,:as => :approval_setting,:via => :post match 'approval_setting' => "approvals#user_list" ,:as => :approval_user_list,:via => :put resources :bulletins do + match "approve/:bulletin_id" => "approvals#preview_and_approve",:as => :approval_preview,:via => :put + match "approve/:bulletin_id" => "approvals#approve",:as => :approve,:via => :post match "link_quick_add/:bulletin_id" => "bulletins#link_quick_add" ,:as => :link_quick_add match "link_quick_edit/:bulletin_id" => "bulletins#link_quick_edit" ,:as => :link_quick_edit member do @@ -32,7 +34,9 @@ Rails.application.routes.draw do resources :tags end namespace :front_end do - resources :bulletins + resources :bulletins # do + # match "preview" => "bulletins#preview_content",:as => :get_preview_content + # end end namespace :widget do match "bulletins" => "bulletins#index" From 048ce4c97e0576574c91bcbcd21dc05245de12bc Mon Sep 17 00:00:00 2001 From: "Matthew K. Fu JuYuan" Date: Thu, 3 May 2012 15:48:42 +0800 Subject: [PATCH 17/39] disable input --- .../announcement/back_end/approvals/_modal_approve.html.erb | 1 + 1 file changed, 1 insertion(+) diff --git a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/approvals/_modal_approve.html.erb b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/approvals/_modal_approve.html.erb index 8f65e341c..35049b981 100644 --- a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/approvals/_modal_approve.html.erb +++ b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/approvals/_modal_approve.html.erb @@ -57,6 +57,7 @@ //Disable all default actions e.preventDefault(); }); + $('input', frameBody).attr("disabled", true); }); }); From 119d8ff13a1711d24eb9daef2266a32282978479 Mon Sep 17 00:00:00 2001 From: "Matthew K. Fu JuYuan" Date: Thu, 3 May 2012 18:27:39 +0800 Subject: [PATCH 18/39] add field called unit_list_for_anc and data from nccu(0224). Now can run "rake nccu_data:setup_ut_list" to setup NCCU data. --- .../back_end/bulletins_controller.rb | 1 + .../announcement/app/models/bulletin.rb | 1 + .../app/models/unit_list_for_anc.rb | 12 ++ .../back_end/bulletins/_form.html.erb | 3 + .../front_end/bulletins/show.html.erb | 2 +- .../data_for_ut_list_for_posting_anc.rake | 15 ++ .../lib/ut_list_from_nccu_2012feb.csv | 186 ++++++++++++++++++ 7 files changed, 219 insertions(+), 1 deletion(-) create mode 100644 vendor/built_in_modules/announcement/app/models/unit_list_for_anc.rb create mode 100644 vendor/built_in_modules/announcement/lib/tasks/data_for_ut_list_for_posting_anc.rake create mode 100644 vendor/built_in_modules/announcement/lib/ut_list_from_nccu_2012feb.csv diff --git a/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletins_controller.rb b/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletins_controller.rb index a1f5227e3..5f210f3c4 100644 --- a/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletins_controller.rb +++ b/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletins_controller.rb @@ -319,6 +319,7 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController def get_categorys(id = nil) @bulletin_categorys = [] + @unit_list_for_anc = UnitListForAnc.all if(is_manager? || is_admin?) @bulletin_categorys = (id ? BulletinCategory.find(id).to_a : BulletinCategory.excludes('disabled' => true)) elsif is_sub_manager? diff --git a/vendor/built_in_modules/announcement/app/models/bulletin.rb b/vendor/built_in_modules/announcement/app/models/bulletin.rb index 44882df36..008090f42 100644 --- a/vendor/built_in_modules/announcement/app/models/bulletin.rb +++ b/vendor/built_in_modules/announcement/app/models/bulletin.rb @@ -33,6 +33,7 @@ class Bulletin mount_uploader :image, ImageUploader belongs_to :bulletin_category + belongs_to :unit_list_for_anc # embeds_many :bulletin_links, :cascade_callbacks => true # embeds_many :bulletin_files, :cascade_callbacks => true diff --git a/vendor/built_in_modules/announcement/app/models/unit_list_for_anc.rb b/vendor/built_in_modules/announcement/app/models/unit_list_for_anc.rb new file mode 100644 index 000000000..5261f6a2a --- /dev/null +++ b/vendor/built_in_modules/announcement/app/models/unit_list_for_anc.rb @@ -0,0 +1,12 @@ +class UnitListForAnc + include Mongoid::Document + include Mongoid::Timestamps + + field :order + field :ut_code + field :up_ut_code + + has_one :title, :class_name => "I18nVariable", :as => :language_value, :autosave => true + + +end \ No newline at end of file diff --git a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_form.html.erb b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_form.html.erb index 33aacf348..235572066 100644 --- a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_form.html.erb +++ b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_form.html.erb @@ -117,6 +117,9 @@
    + + <%= f.label :unit_list_for_anc%> + <%= f.select :unit_list_for_anc_id,@unit_list_for_anc.collect{|t| [ t.title[I18n.locale], t.id ]}, {}, :class => "input-medium" %> <%= f.label :category %> <%= f.select :bulletin_category_id, @bulletin_categorys.collect{|t| [ t.i18n_variable[I18n.locale], t.id ]}, {}, :class => "input-medium" %> 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 2f37df9c1..5c0857cd0 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 @@ -4,7 +4,7 @@
    diff --git a/vendor/built_in_modules/announcement/lib/tasks/data_for_ut_list_for_posting_anc.rake b/vendor/built_in_modules/announcement/lib/tasks/data_for_ut_list_for_posting_anc.rake new file mode 100644 index 000000000..e5bd0be22 --- /dev/null +++ b/vendor/built_in_modules/announcement/lib/tasks/data_for_ut_list_for_posting_anc.rake @@ -0,0 +1,15 @@ +# encoding: utf-8 + +namespace :nccu_data do + desc "load nccu data from csv" + task :setup_ut_list => :environment do + require 'csv' + + CSV.foreach("vendor/built_in_modules/announcement/lib/ut_list_from_nccu_2012feb.csv") do |row| + new_unit = UnitListForAnc.new(:order => row[0], :ut_code => row[1], :up_ut_code => row[2], :created_at => Time.now,:updated_at => Time.now) + new_unit.build_title :en => row[4], :zh_tw => row[3] + new_unit.save + end + + end +end \ No newline at end of file diff --git a/vendor/built_in_modules/announcement/lib/ut_list_from_nccu_2012feb.csv b/vendor/built_in_modules/announcement/lib/ut_list_from_nccu_2012feb.csv new file mode 100644 index 000000000..548ad5281 --- /dev/null +++ b/vendor/built_in_modules/announcement/lib/ut_list_from_nccu_2012feb.csv @@ -0,0 +1,186 @@ +order,ut_code,up_tu_code,ut_zh_tw,ut_en +0100,H00,H00,校長室,Office of the President +0110,H01,H01,副校長室一,Office of the Vice President +0110,H03,H03,副校長室二,Office of the Vice President +0200,100,100,文學院,College of Liberal Arts +0210,101,100,中文系,Dept. of Chinese Literature +0220,103,100,歷史系,Dept. of History +0230,104,100,哲學系,Dept. of Philosophy +0240,155,100,圖檔所,"Graduate Institute of Library, Informati" +0250,156,100,宗教所,Graduate Institute of Religious Studies +0260,158,100,台史所,Graduate Institute of Taiwan History +0270,159,100,台文所,Graduate Institute of Taiwan Literatu +0280,161,100,華文碩,Master's Program in Teaching Chinese as +0290,160,100,華文博,Doctor's Program in Teaching Chinese as +0294,913,100,圖資專班,E-learning Master Program of Library and +0300,700,700,理學院,College of Science +0310,701,700,應數系,Dept. of Mathematical Sciences +0320,702,700,心理系,Dept. of Psychology +0330,703,700,資科系,Dept. of Computer Science +0340,754,700,神科所,The Graduate Institute of Neuroscience +0350,755,700,應物所,Graduate Institute of Applied Physics +0600,200,200,社科院,College of Social Sciences +0605,202,200,政治系,Dept. of Political Science +0610,204,200,社會系,Dept. of Sociology +0615,205,200,財政系,Dept. of Public Finance +0620,206,200,公行系,Dept. of Public Administration +0625,207,200,地政系,Dept. of Land Economics +0630,208,200,經濟系,Dept. of Economics +0635,209,200,民族系,Dept. of Ethnology +0640,261,200,國發所,GIDS +0645,262,200,勞工所,Graduate Institute of Labor Research +0650,264,200,社工所,Graduate Institute of Social Work +0652,265,200,亞太博,International Doctor Program in Asia-Pac +0700,600,600,法學院,College of Law +0710,601,600,法律系,Dept. of Law +0720,652,600,法科所,The Institute of Law and Inter-disciplin +0800,300,300,商學院,College of Commerce +0801,301,300,國貿系,Dept. of International Business +0803,302,300,金融系,Dept. of Money and Banking +0805,303,300,會計系,Dept. of Accounting +0807,304,300,統計系,Dept. of Statistics +0809,305,300,企管系,Dept. of Business Administration +0811,306,300,資管系,Dept. of Management Information System +0813,307,300,財管系,Dept. of Finance +0815,308,300,風管系,Dept. of Risk Management and Insurance +0817,359,300,科管所,Graduate Institute of Technology and Inn +0819,361,300,智財所,Graduate Institute of Intellectual Prope +0821,362,300,管理碩士學程,Advanced Master of Business Administrati +0823,380,300,商管碩,Advanced Master of Business Administrati +1100,500,500,外語學院,College of Foreign Languages +1110,501,500,英文系,Dept. of English +1120,502,500,阿文系,Dept. of Arabic Language and Literature +1130,504,500,斯拉夫文系,Dept. of Slavic Languages and Literature +1140,506,500,日文系,Dept. of Japanese +1150,507,500,韓文系,Dept. of Korean Language and Cultur +1160,508,500,土文系,Dept. of Turkish Language and Cultu +1170,555,500,語言所,Graduate Institute of Linguistics +1180,509,500,歐洲語文學程,Undergraduate Program in European Langua +1190,5T1,500,外文中心,Foreign Languages Center +1200,400,400,傳播學院,College of Communication +1210,401,400,新聞系,Dept. of Journalism +1220,402,400,廣告系,Dept. of Advertising +1230,403,400,廣電系,Dept. of Radio and Television +1240,461,400,國傳英語碩士學位學程,International Master's Program in Intern +1250,404,400,傳播學程,College of Communication Undergraduate D +1260,462,400,數位內容學程,DCT +1270,781,700,數位內容與科技學士學位學程,數位內容與科技學士學位學程 +1280,4A1,400,實習廣播電台,NCCU Community Radio Station +1300,800,800,國際事務學院,College of International Affairs +1310,203,800,外交系,Dept. of Diplomacy +1320,260,800,東亞所,Graduate Institute of East Asian Studies +1330,263,800,俄研所,Graduate Institute of Russian Studies +1340,861,800,日碩研,Master Program in Japan Studies +1346,862,800,國際研究英語碩士學位學程(籌備處),International Master's Program in Intern +1600,900,900,教育學院,College of Education +1610,102,900,教育系,Dept. of Education +1620,157,900,幼教所,Graduate Institute of Early Childhood Ed +1630,171,900,教政所,Graduate Institute of Educational Admini +1640,1T3,900,師培中心,Institute of Teacher Education +1652,172,900,輔諮碩學程,MPCG +1660,1T1,900,教研中心,The Teacher In-Service Education Center +1700,L00,L00,國關中心,The Institute of International Relations +1710,L01,L00,國關第一所,First Division +1720,L02,L00,國關第二所,Second Division +1730,L03,L00,國關第三所,Third Division +1740,L04,L00,國關第四所,Fourth Division +1750,L05,L00,國關合交組,The Institute of International Relations +1760,L06,L00,國關編譯組,The Institute of International Relations +1770,L07,L00,國關圖資組,The Institute of International Relations +1780,L08,L00,國關秘書組,The Institute of International Relations +1800,S00,S00,選研中心,Election Study Center +1900,Z01,Z01,第三部門研究中心,Center for the Third Sector +1910,Z02,Z02,創新創造力研究中心,CCIS +1920,Z03,Z03,中國大陸研究中心,Center for China Studies +1930,Z04,Z04,台灣研究中心,TSC +1940,Z08,Z08,心腦學中心,"Reseach Center for Mind, Brain and Learn" +1950,Z10,Z10,原民中心,Center for Aboriginal Studies +1960,Z09,Z09,人文中心,Humanities Center +2000,T00,T00,教務處,Office of Academic Affairs +2010,T01,T00,教務處註冊組,Registration Section +2020,T02,T00,教務處課務組,Instruction Resources Section +2030,T03,T00,教務處綜合業務組,Admission Section +2040,T04,T00,教務處通識教育中心,Center of General Education +2100,M00,M00,學務處,Office of Student Affairs +2110,M01,M00,學務處生僑組,Life Guidance and Overseas Chinese Stude +2120,M02,M00,學務處課外組,Student Activities Section +2130,M03,M00,學務處住宿組,Student Housing Service Section +2150,M11,M00,學務處藝文中心,Art and Culture Center +2155,M14,M00,學務處身心健康中心,Physical and Mental Health Center +2160,M13,M00,學務處職涯中心,Center of Career Development +2170,D00,M00,學務處軍訓室,Military Education Office +2200,G00,G00,總務處,Office of General Affairs +2210,G01,G00,總務處文書組,Document and postal section +2220,G02,G00,總務處事務組,General Management Section +2230,G05,G00,總務處出納組,Cashier Section +2240,G04,G00,總務處營繕組,Construction and Maintenance Section +2250,G03,G00,總務處財產組,Property Management SEction +2260,G06,G00,總務處環保組,Environmental Protection Section +2270,G08,G00,總務處規劃組,Campus Planning & Devel opment Section +2280,G07,G00,總務處駐警隊,Campus Security National Chengchi Unive +2300,R00,R00,研發處,Office of Research and Development +2310,R01,R00,研發處企畫組,Planning Section +2320,R02,R00,研發處學術推展組,Academic Development Section +2330,R03,R00,研發處學評組,Academic Evaluation Section +2400,Z05,Z05,國合處,Office of International Cooperation +2410,Z06,Z05,國合處合作交流組,CES +2420,Z07,Z05,國合處教育組,IES +2430,Z14,Z05,國合處發展策劃組,DPS +2500,Q00,Q00,秘書處,Secretariat +2510,Q01,Q00,秘書處第一組,First Section +2520,Q02,Q00,秘書處第二組,Second Section +2530,Q03,Q00,秘書處第三組,Third Section +2600,K00,K00,圖書館,Libraries +2610,K06,K00,圖書館資訊組,System Information Section +2620,K07,K00,圖書館採編組,Acquisition & Cataloging Section +2630,K08,K00,圖書館典閱組,Circulation Section +2640,K09,K00,圖書館推廣服務組,Reference Services Section +2650,K10,K00,圖書館數位典藏組,Digital Preservation Section +2660,K11,K00,圖書館行政組,Administration Section +2670,K12,K00,圖書館圖書分館,Branch Libraries +2700,B00,B00,體育室,Physical Education Office +2710,B01,B00,體育教學組,Physical Education Office +2720,B02,B00,體育活動組,Sport activities section +2800,P00,P00,人事室,Personnel Office +2810,P01,P00,人一組,First Section +2820,P02,P00,人二組,Second Section +2830,P03,P00,人三組,Third Section +2840,P04,P00,人四組,Fourth Section +2900,A00,A00,會計室,Accounting Office +2910,A01,A00,會計室第一組,Budgeting Section +2920,A02,A00,會計室第二組,Accounting Section +2930,A03,A00,會計室第三組,Auditing Section +3000,I00,I00,公企中心,Public and Business Administration Educa +3010,I01,I00,公企諮詢組,Research and Consultation Section +3020,I02,I00,公企職訓組,Training Section +3030,I03,I00,公企語訓組,Language Training Section +3040,I04,I00,公企總務組,General Affairs Section +3050,I05,I00,公企中心圖資組,Library Resource Section +3100,O00,O00,公教中心,Civil Service Education Center +3110,O01,O00,公教教務組,Civil Service Education Center +3120,O02,O00,公教輔導組,Civil Service Education Center +3130,O03,O00,公教行政組,Civil Service Education Center +3200,J00,J00,社資中心,Social Sciences Information Center +3210,J03,J00,社資資料組,Reference Services Section +3220,J04,J00,社資研發組,Section of Research & Development +3300,C00,C00,電算中心,Computer Center +3310,C01,C00,電算教研組,Teaching and Research Section +3320,C02,C00,電算系統組,Application System Section +3330,C03,C00,電算行政組,Administration and Counseling Section +3340,C04,C00,電算網路組,Networking and Development Section +3400,T05,T05,教學發展中心,Center for Teaching and Learning Develop +3410,T06,T05,教發教學組,Teaching and Learning Division +3420,T07,T05,教發數位組,E-Learning Division +3430,T08,T05,教發規劃組,Planning and Research Division +3500,162,162,華語文中心,Chinese Language Center +3600,Z11,Z11,育成中心,Innovation Incubation Center +3700,V00,V00,附設實小,The Experimental Elementary School +3700,V01,V00,附設實小教務處,Office of Academic Affairs +3700,V02,V00,附設實小學務處,Office of Student Affairs +3700,V03,V00,附設實小輔導室,The Experimental Elementary School +3700,V04,V00,附設實小總務處,Office of General Affairs +3700,V06,V00,附設實小研究處,The Experimental Elementary School +3710,V05,V00,附設實小幼稚園,The Experimental Elementary School +3800,W00,W00,附中,The Affiliated High School +3900,Z13,Z13,政大書院辦公室,Chengchi College Project Office +4000,Z12,Z12,頂大辦公室,Office of NCCU Top University Program \ No newline at end of file From 8f1ce78ab48c453e0026d57243d029c15b9dd4e7 Mon Sep 17 00:00:00 2001 From: Christophe Vilayphiou Date: Fri, 4 May 2012 15:08:42 +0800 Subject: [PATCH 19/39] Fix bug when homepage --- app/controllers/application_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index a57b4d705..0a08ec43a 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -96,9 +96,9 @@ class ApplicationController < ActionController::Base end # Render the page - def render_page(param) + def render_page(param={}) if @item - render :text => process_page(@item, param[:id],param), :layout => 'page_layout' + render :text => process_page(@item, param[:id], param), :layout => 'page_layout' else render :text => '404 Not Found' end From 15bc4d42688b3dbea9b30a06d980bedd0e60468b Mon Sep 17 00:00:00 2001 From: Christophe Vilayphiou Date: Fri, 4 May 2012 16:12:28 +0800 Subject: [PATCH 20/39] Fix merge error --- app/helpers/application_helper.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 1839cf663..45544f11e 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -96,8 +96,8 @@ module ApplicationHelper ((controller.controller_name.eql?(controller_name) || request.fullpath.eql?(controller_name)) && controller.action_name.eql?(action_name)) ? 'active' : nil end - def process_page(page, id) - parse_page_noko(page, id) + def process_page(page, id, params) + parse_page_noko(page, id, params) end def page_metas(page) From e9b337a3857f89a69c148812e4bd7ff7e9379002 Mon Sep 17 00:00:00 2001 From: Christophe Vilayphiou Date: Fri, 4 May 2012 18:49:07 +0800 Subject: [PATCH 21/39] Copy changes into news after merge --- .../back_end/bulletins/_bulletin.html.erb | 37 +++++----- .../back_end/news_approvals_controller.rb | 9 +++ .../news_bulletin_categorys_controller.rb | 3 + .../back_end/news_bulletins_controller.rb | 30 +++++--- .../front_end/news_bulletins_controller.rb | 13 +++- .../news_bulletin_categorys_helper.rb | 14 ++++ .../news/back_end/news_bulletins_helper.rb | 9 +++ .../news/app/models/news_bulletin.rb | 1 + .../news_approvals/_modal_approve.html.erb | 69 +++++++++++++++++++ .../news_approvals/preview_and_approve.js.erb | 5 ++ .../_news_bulletin_category.html.erb | 10 ++- .../news_bulletin_categorys/index.html.erb | 2 +- .../back_end/news_bulletins/_form.html.erb | 27 ++------ .../news_bulletins/_news_bulletin.html.erb | 48 ++++++++----- .../back_end/news_bulletins/index.html.erb | 2 + .../front_end/news_bulletins/show.html.erb | 2 +- vendor/built_in_modules/news/config/routes.rb | 6 +- 17 files changed, 210 insertions(+), 77 deletions(-) create mode 100644 vendor/built_in_modules/news/app/helpers/panel/news/back_end/news_bulletin_categorys_helper.rb create mode 100644 vendor/built_in_modules/news/app/helpers/panel/news/back_end/news_bulletins_helper.rb create mode 100644 vendor/built_in_modules/news/app/views/panel/news/back_end/news_approvals/_modal_approve.html.erb create mode 100644 vendor/built_in_modules/news/app/views/panel/news/back_end/news_approvals/preview_and_approve.js.erb diff --git a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_bulletin.html.erb b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_bulletin.html.erb index db22e5019..b69def3b5 100644 --- a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_bulletin.html.erb +++ b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_bulletin.html.erb @@ -3,6 +3,7 @@ <% if (bulletin.create_user_id == current_user.id) || is_manager? %> <%= check_box_tag 'to_delete[]', bulletin.id, false, :class => "checkbox_in_list" %> <% end -%> +
    @@ -35,26 +36,26 @@
    diff --git a/vendor/built_in_modules/news/app/controllers/panel/news/back_end/news_approvals_controller.rb b/vendor/built_in_modules/news/app/controllers/panel/news/back_end/news_approvals_controller.rb index c6cb33ea3..c6eda9d04 100644 --- a/vendor/built_in_modules/news/app/controllers/panel/news/back_end/news_approvals_controller.rb +++ b/vendor/built_in_modules/news/app/controllers/panel/news/back_end/news_approvals_controller.rb @@ -1,7 +1,16 @@ class Panel::News::BackEnd::NewsApprovalsController < OrbitBackendController before_filter :authenticate_user! + before_filter :is_admin? include AdminHelper + def preview_and_approve + @bulletin = NewsBulletin.find params[:bulletin_id] + end + + def approve + + end + def setting @news_bulletin_categorys = NewsBulletinCategory.all if params.has_key?(:category_id) diff --git a/vendor/built_in_modules/news/app/controllers/panel/news/back_end/news_bulletin_categorys_controller.rb b/vendor/built_in_modules/news/app/controllers/panel/news/back_end/news_bulletin_categorys_controller.rb index 83ca09f83..956e98dca 100644 --- a/vendor/built_in_modules/news/app/controllers/panel/news/back_end/news_bulletin_categorys_controller.rb +++ b/vendor/built_in_modules/news/app/controllers/panel/news/back_end/news_bulletin_categorys_controller.rb @@ -1,5 +1,8 @@ class Panel::News::BackEnd::NewsBulletinCategorysController < OrbitBackendController + before_filter :for_app_manager,:except => [:index] + + def index @news_bulletin_categorys = NewsBulletinCategory.all @news_bulletin_category = NewsBulletinCategory.new(:display => 'List') diff --git a/vendor/built_in_modules/news/app/controllers/panel/news/back_end/news_bulletins_controller.rb b/vendor/built_in_modules/news/app/controllers/panel/news/back_end/news_bulletins_controller.rb index f5c2b5e63..a2a1a8818 100644 --- a/vendor/built_in_modules/news/app/controllers/panel/news/back_end/news_bulletins_controller.rb +++ b/vendor/built_in_modules/news/app/controllers/panel/news/back_end/news_bulletins_controller.rb @@ -1,7 +1,10 @@ class Panel::News::BackEnd::NewsBulletinsController < OrbitBackendController before_filter :authenticate_user! - before_filter :is_admin? + +# before_filter :for_admin_only,:only => [:] +# before_filter :for_app_manager,:only => [:index,:show,] + before_filter :for_app_sub_manager,:except => [:index,:show,:get_sorted_and_filtered_news_bulletins] def index # @news_bulletins = NewsBulletin.all @@ -39,6 +42,10 @@ class Panel::News::BackEnd::NewsBulletinsController < OrbitBackendController @news_bulletin_link = NewsBulletinLink.new @link_url = panel_news_back_end_news_bulletins_path + @news_bulletins.delete_if{ |news_bulletin| + news_bulletin.is_pending == true && (!news_bulletin.bulletin_category.authed_users('fact_check').include?(current_user) || news_bulletin.create_user_id!=current_user.id) + } + @news_bulletin_file = NewsBulletinFile.new @file_url = panel_news_back_end_news_bulletins_path @@ -75,17 +82,19 @@ class Panel::News::BackEnd::NewsBulletinsController < OrbitBackendController def new @news_bulletin = NewsBulletin.new - @link_url = panel_news_back_end_news_bulletins_path + @link_url = panel_news_back_end_news_bulletins_path # @news_bulletin.news_bulletin_files.build # @news_bulletin.news_bulletin_files.new - - get_categorys - get_tags - - respond_to do |format| - format.html # new.html.erb - format.xml { render :xml => @news_bulletin } + if get_categorys.empty? + flash[:alert] = t("announcement.error.no_avilb_cate_for_posting") + redirect_to :action => :index + else + get_tags + respond_to do |format| + format.html # new.html.erb + format.xml { render :xml => @news_bulletin } + end end end @@ -311,10 +320,11 @@ class Panel::News::BackEnd::NewsBulletinsController < OrbitBackendController def get_categorys(id = nil) @news_bulletin_categorys = [] + @unit_list_for_anc = UnitListForAnc.all if(is_manager? || is_admin?) @news_bulletin_categorys = (id ? NewsBulletinCategory.find(id).to_a : NewsBulletinCategory.excludes('disabled' => true)) elsif is_sub_manager? - @news_bulletin_categorys = NewsBulletinCategory.authed_for_user(current_user,'submit_new') + @news_bulletin_categorys = NewsBulletinCategory.authed_for_user(current_user,'submit') end end diff --git a/vendor/built_in_modules/news/app/controllers/panel/news/front_end/news_bulletins_controller.rb b/vendor/built_in_modules/news/app/controllers/panel/news/front_end/news_bulletins_controller.rb index 12d0cac69..5c8706046 100644 --- a/vendor/built_in_modules/news/app/controllers/panel/news/front_end/news_bulletins_controller.rb +++ b/vendor/built_in_modules/news/app/controllers/panel/news/front_end/news_bulletins_controller.rb @@ -24,10 +24,19 @@ class Panel::News::FrontEnd::NewsBulletinsController < OrbitWidgetController end def show - @news_bulletin = NewsBulletin.can_display.where(_id: params[:id]).first - get_categorys + if params[:preview] == "true" + preview_content + else + @news_bulletins = NewsBulletin.can_display.where(_id: params[:id]).first + get_categorys + end end + def preview_content + @news_bulletins = NewsBulletin.find params[:id] + get_categorys + render :show + end protected diff --git a/vendor/built_in_modules/news/app/helpers/panel/news/back_end/news_bulletin_categorys_helper.rb b/vendor/built_in_modules/news/app/helpers/panel/news/back_end/news_bulletin_categorys_helper.rb new file mode 100644 index 000000000..8ad75108e --- /dev/null +++ b/vendor/built_in_modules/news/app/helpers/panel/news/back_end/news_bulletin_categorys_helper.rb @@ -0,0 +1,14 @@ +module Panel::News::BackEnd::NewsBulletinCategorysHelper +include ActionView::Helpers::UrlHelper + + + def show_submit_permission_link(news_bulletin_category) + oa = news_bulletin_category.get_object_auth_by_title('submit') + if oa.nil? + news_bulletin_category.object_auths.new(title: 'submit' ).save + oa = news_bulletin_category.get_object_auth_by_title('submit') + end + link_to t('announcement.bulletin.cate_auth'), edit_admin_object_auth_path(oa) + end + +end \ No newline at end of file diff --git a/vendor/built_in_modules/news/app/helpers/panel/news/back_end/news_bulletins_helper.rb b/vendor/built_in_modules/news/app/helpers/panel/news/back_end/news_bulletins_helper.rb new file mode 100644 index 000000000..35a3afee2 --- /dev/null +++ b/vendor/built_in_modules/news/app/helpers/panel/news/back_end/news_bulletins_helper.rb @@ -0,0 +1,9 @@ +module Panel::News::BackEnd::NewsBulletinsHelper + + def show_approval_link(news_bulletin) + by_news_bulletin = (!news_bulletin.is_expired? and !news_bulletin.is_checked?) + by_user = news_bulletin.news_bulletin_category.authed_users('fact_check').include?(current_user) or is_manager? + by_news_bulletin and by_user + end + +end \ No newline at end of file diff --git a/vendor/built_in_modules/news/app/models/news_bulletin.rb b/vendor/built_in_modules/news/app/models/news_bulletin.rb index 101ed5d2b..538180dcb 100644 --- a/vendor/built_in_modules/news/app/models/news_bulletin.rb +++ b/vendor/built_in_modules/news/app/models/news_bulletin.rb @@ -33,6 +33,7 @@ class NewsBulletin mount_uploader :image, ImageUploader belongs_to :news_bulletin_category + belongs_to :unit_list_for_anc # embeds_many :news_bulletin_links, :cascade_callbacks => true # embeds_many :news_bulletin_files, :cascade_callbacks => true diff --git a/vendor/built_in_modules/news/app/views/panel/news/back_end/news_approvals/_modal_approve.html.erb b/vendor/built_in_modules/news/app/views/panel/news/back_end/news_approvals/_modal_approve.html.erb new file mode 100644 index 000000000..83a7b38f2 --- /dev/null +++ b/vendor/built_in_modules/news/app/views/panel/news/back_end/news_approvals/_modal_approve.html.erb @@ -0,0 +1,69 @@ + <% if news_bulletin -%> + + + + + +<% end -%> diff --git a/vendor/built_in_modules/news/app/views/panel/news/back_end/news_approvals/preview_and_approve.js.erb b/vendor/built_in_modules/news/app/views/panel/news/back_end/news_approvals/preview_and_approve.js.erb new file mode 100644 index 000000000..4191ae04d --- /dev/null +++ b/vendor/built_in_modules/news/app/views/panel/news/back_end/news_approvals/preview_and_approve.js.erb @@ -0,0 +1,5 @@ +$('#show_preview').html("<%= escape_javascript(render(:partial => 'modal_approve',:locals => {:news_bulletin => @news_bulletin})) %>"); +var start_modal_with_id = "news_bulletin-<%=@news_bulletin.id%>"; +$("#"+start_modal_with_id).css("width","1050px"); +$("#"+start_modal_with_id).css("height","768px"); +$("#"+start_modal_with_id).css("margin","-270px 0 0 -550px"); \ No newline at end of file diff --git a/vendor/built_in_modules/news/app/views/panel/news/back_end/news_bulletin_categorys/_news_bulletin_category.html.erb b/vendor/built_in_modules/news/app/views/panel/news/back_end/news_bulletin_categorys/_news_bulletin_category.html.erb index 01d58f986..377091bde 100644 --- a/vendor/built_in_modules/news/app/views/panel/news/back_end/news_bulletin_categorys/_news_bulletin_category.html.erb +++ b/vendor/built_in_modules/news/app/views/panel/news/back_end/news_bulletin_categorys/_news_bulletin_category.html.erb @@ -4,8 +4,14 @@ <%= news_bulletin_category.key %>
    diff --git a/vendor/built_in_modules/news/app/views/panel/news/back_end/news_bulletin_categorys/index.html.erb b/vendor/built_in_modules/news/app/views/panel/news/back_end/news_bulletin_categorys/index.html.erb index caa4981f9..c876b6c84 100644 --- a/vendor/built_in_modules/news/app/views/panel/news/back_end/news_bulletin_categorys/index.html.erb +++ b/vendor/built_in_modules/news/app/views/panel/news/back_end/news_bulletin_categorys/index.html.erb @@ -17,7 +17,7 @@ -
    <%= render :partial => "form" %>
    +
    <%= render :partial => "form" if is_manager? %>
    diff --git a/vendor/built_in_modules/news/app/views/panel/news/back_end/news_bulletins/_form.html.erb b/vendor/built_in_modules/news/app/views/panel/news/back_end/news_bulletins/_form.html.erb index c7dfd1558..ce00b63fa 100644 --- a/vendor/built_in_modules/news/app/views/panel/news/back_end/news_bulletins/_form.html.erb +++ b/vendor/built_in_modules/news/app/views/panel/news/back_end/news_bulletins/_form.html.erb @@ -105,28 +105,6 @@
    -

    Audit

    -
    - - <% if is_manager? || @news_bulletin.news_bulletin_category.authed_users('fact_check').include?(current_user) || current_user.admin? %> -
    - <%= f.label :approval_stat, t('news.news_bulletin.approval_stat') %> - <%= content_tag :label,:class => "radio inline" do -%> - <%= f.radio_button :is_checked, true , {:class => 'privacy'} %> - <%= t('news.news_bulletin.approval_pass') %> - <% end -%> - <%= content_tag :label,:class => "radio inline" do -%> - <%= f.radio_button :is_checked, false, (!@news_bulletin.is_checked ? {:checked => true, :class => 'privacy'} : {})%> - <%= t('news.news_bulletin.approval_not_pass') %> - <% end -%> -
    - <%= label :is_checked_false, t('news.news_bulletin.approval_not_pass_reason') %> - <%= f.text_field :not_checked_reason %> -
    - -
    - <% end %> -
    <% elsif current_user.admin? %> <%= f.hidden_field :is_checked,:value => true%> @@ -139,7 +117,10 @@
    - + + <%= f.label :unit_list_for_anc%> + <%= f.select :unit_list_for_anc_id,@unit_list_for_anc.collect{|t| [ t.title[I18n.locale], t.id ]}, {}, :class => "input-medium" %> + <%= f.label :category %> <%= f.select :news_bulletin_category_id, @news_bulletin_categorys.collect{|t| [ t.i18n_variable[I18n.locale], t.id ]}, {}, :class => "input-medium" %> diff --git a/vendor/built_in_modules/news/app/views/panel/news/back_end/news_bulletins/_news_bulletin.html.erb b/vendor/built_in_modules/news/app/views/panel/news/back_end/news_bulletins/_news_bulletin.html.erb index c800bf18b..976cab00e 100644 --- a/vendor/built_in_modules/news/app/views/panel/news/back_end/news_bulletins/_news_bulletin.html.erb +++ b/vendor/built_in_modules/news/app/views/panel/news/back_end/news_bulletins/_news_bulletin.html.erb @@ -1,5 +1,9 @@ - <%= check_box_tag 'to_delete[]', news_bulletin.id, false, :class => "checkbox_in_list" %> + + <% if (news_bulletin.create_user_id == current_user.id) || is_manager? %> + <%= check_box_tag 'to_delete[]', news_bulletin.id, false, :class => "checkbox_in_list" %> + <% end -%> +
    @@ -27,27 +31,33 @@ <%= news_bulletin.news_bulletin_category.i18n_variable[I18n.locale] %> <%= link_to news_bulletin.title[I18n.locale], panel_news_front_end_news_bulletin_path(news_bulletin, :category_id => news_bulletin.news_bulletin_category.id) rescue ''%> +
    diff --git a/vendor/built_in_modules/news/app/views/panel/news/back_end/news_bulletins/index.html.erb b/vendor/built_in_modules/news/app/views/panel/news/back_end/news_bulletins/index.html.erb index 123b1a916..742293fe7 100644 --- a/vendor/built_in_modules/news/app/views/panel/news/back_end/news_bulletins/index.html.erb +++ b/vendor/built_in_modules/news/app/views/panel/news/back_end/news_bulletins/index.html.erb @@ -26,5 +26,7 @@ <% content_for :page_specific_javascript do %> <%= javascript_include_tag "news_bulletin_form" %> + <%= javascript_include_tag "/static/jquery.cycle.all.latest.js" %> + <%= javascript_include_tag "inc/modal-preview" %> <% end %> diff --git a/vendor/built_in_modules/news/app/views/panel/news/front_end/news_bulletins/show.html.erb b/vendor/built_in_modules/news/app/views/panel/news/front_end/news_bulletins/show.html.erb index 37e3e1f33..67bfb396c 100644 --- a/vendor/built_in_modules/news/app/views/panel/news/front_end/news_bulletins/show.html.erb +++ b/vendor/built_in_modules/news/app/views/panel/news/front_end/news_bulletins/show.html.erb @@ -4,7 +4,7 @@
    diff --git a/vendor/built_in_modules/news/config/routes.rb b/vendor/built_in_modules/news/config/routes.rb index aaf688019..b7882d2db 100644 --- a/vendor/built_in_modules/news/config/routes.rb +++ b/vendor/built_in_modules/news/config/routes.rb @@ -6,6 +6,8 @@ Rails.application.routes.draw do match 'update_setting' => "news_approvals#update_setting" ,:as => :news_approval_update_setting resources :news_bulletins do + match "approve/:news_bulletin_id" => "approvals#preview_and_approve",:as => :approval_preview,:via => :put + match "approve/:news_bulletin_id" => "approvals#approve",:as => :approve,:via => :post match "link_quick_add/:news_bulletin_id" => "news_bulletins#link_quick_add" ,:as => :link_quick_add match "link_quick_edit/:news_bulletin_id" => "news_bulletins#link_quick_edit" ,:as => :link_quick_edit member do @@ -31,7 +33,9 @@ Rails.application.routes.draw do resources :tags end namespace :front_end do - resources :news_bulletins + resources :news_bulletins # do + # match "preview" => "news_bulletins#preview_content",:as => :get_preview_content + # end end namespace :widget do match "news_bulletins" => "news_bulletins#index" From 8e6fd277c21b1d98fbabe9a5a74bc424511b64a5 Mon Sep 17 00:00:00 2001 From: Christophe Vilayphiou Date: Fri, 4 May 2012 19:02:40 +0800 Subject: [PATCH 22/39] Fix bug: preview was always true --- lib/parsers/parser_front_end.rb | 2 +- .../panel/news/front_end/news_bulletins_controller.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/parsers/parser_front_end.rb b/lib/parsers/parser_front_end.rb index 1cca99150..c95cac4d1 100644 --- a/lib/parsers/parser_front_end.rb +++ b/lib/parsers/parser_front_end.rb @@ -46,7 +46,7 @@ module ParserFrontEnd # ret << "&category_id=#{page.category}" if page[:category] ret << "&category_id=#{params[:category_id]}" if !params[:category_id].blank? ret << "&tag_id=#{params[:tag_id]}" if !params[:tag_id].blank? - ret << "&preview=true" if preview + ret << "&preview=true" if preview.eql?('true') ret << "'>
    " else part = page.page_parts.detect{ |p| p.name.to_s == content['name'].to_s } rescue nil diff --git a/vendor/built_in_modules/news/app/controllers/panel/news/front_end/news_bulletins_controller.rb b/vendor/built_in_modules/news/app/controllers/panel/news/front_end/news_bulletins_controller.rb index 5c8706046..bf51d3086 100644 --- a/vendor/built_in_modules/news/app/controllers/panel/news/front_end/news_bulletins_controller.rb +++ b/vendor/built_in_modules/news/app/controllers/panel/news/front_end/news_bulletins_controller.rb @@ -27,7 +27,7 @@ class Panel::News::FrontEnd::NewsBulletinsController < OrbitWidgetController if params[:preview] == "true" preview_content else - @news_bulletins = NewsBulletin.can_display.where(_id: params[:id]).first + @news_bulletin = NewsBulletin.can_display.where(_id: params[:id]).first get_categorys end end From e0a191162ddc8a2541572c83c5cbe6fc14887af7 Mon Sep 17 00:00:00 2001 From: Christophe Vilayphiou Date: Fri, 4 May 2012 19:11:28 +0800 Subject: [PATCH 23/39] Ray's changes --- app/assets/images/-sign-in-logo.png | Bin 0 -> 11789 bytes app/assets/images/orbit-bar.png | Bin 5113 -> 3046 bytes app/assets/images/sign-in-logo.png | Bin 11789 -> 18523 bytes app/assets/javascripts/orbit-1.0.js | 1 + app/assets/javascripts/orbit-bar-search.js | 6 ++++++ app/assets/javascripts/orbit_bar.js | 2 +- .../inc/permission-checkbox.css.erb | 15 +++++++++------ app/assets/stylesheets/style.css.erb | 9 +++++---- app/helpers/application_helper.rb | 2 +- app/views/layouts/_orbit_bar.html.erb | 2 +- 10 files changed, 24 insertions(+), 13 deletions(-) create mode 100644 app/assets/images/-sign-in-logo.png diff --git a/app/assets/images/-sign-in-logo.png b/app/assets/images/-sign-in-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..53756c7c332f57f2375f755788d9d224b9fa2987 GIT binary patch literal 11789 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/orbit-bar.png b/app/assets/images/orbit-bar.png index 160b9d781962c1af808a87167f605251210ecc11..4b2a558524a5550f94f398ada05a8e1571231ee1 100644 GIT binary patch literal 3046 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 H(ue#ng}Xis literal 5113 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 delta 11240 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 puVT^v{R{pdHEBx7V) no-repeat center 40px; + background: url(<%= asset_path 'sign-in-logo.png' %>) no-repeat center 80px; padding-top: 40px; height: 160px; } @@ -61,8 +61,8 @@ margin-right: -20px; } #orbit-bar .search-query { - padding: 4px 9px; - height: 12px; + padding: 7px 9px 5px; + height: 10px; margin-top: 3px; border: 1px solid #333333; font-size: 11px; @@ -119,7 +119,8 @@ background-position: -10px -10px; } #orbit-bar .nav > li > a.orbit-bar-desktop { - background-position: -106px -9px; + background-position: -73px -42px; + width: 48px; } #orbit-bar .nav > li > a.orbit-bar-member { background-position: -4px -37px; diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 682799eb7..95e2dc3d9 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -126,8 +126,8 @@ module ApplicationHelper javascripts << "\n" javascripts << "\n" javascripts << "\n" - javascripts << "\n" javascripts << "\n" + javascripts << "\n" end javascripts << "\n" javascripts << "\n" diff --git a/app/views/layouts/_orbit_bar.html.erb b/app/views/layouts/_orbit_bar.html.erb index d8d0ae321..46f2b712f 100644 --- a/app/views/layouts/_orbit_bar.html.erb +++ b/app/views/layouts/_orbit_bar.html.erb @@ -27,7 +27,7 @@ -