diff --git a/app/assets/javascripts/lib/items/items.js.erb b/app/assets/javascripts/lib/items/items.js.erb index 4fdf9ab..e1fffd0 100755 --- a/app/assets/javascripts/lib/items/items.js.erb +++ b/app/assets/javascripts/lib/items/items.js.erb @@ -92,11 +92,18 @@ var Items = function(){ } }) - sidePanel.on("click","#status_list input[type=checkbox]",function(){ + sidePanel.on("click","#role_list input[type=checkbox]",function(){ if($(this).is(":checked") && $(this).hasClass("checkbox-all")){ - $(".view-page .content #status_list input[type=checkbox]").not($(this)).removeAttr("checked"); + $(".view-page .content #role_list input[type=checkbox]").not($(this)).removeAttr("checked"); }else{ - $(".view-page .content #status_list input[type=checkbox].checkbox-all").removeAttr("checked"); + $(".view-page .content #role_list input[type=checkbox].checkbox-all").removeAttr("checked"); + $("#status-list-"+$(this).val()+" input[type=checkbox]").removeAttr("checked"); + } + }) + + sidePanel.on("click",".status-checkbox",function(){ + if($(this).is(":checked")){ + $(this).parent().parent().parent().parent().find(".role-checkbox").removeAttr("checked"); } }) @@ -127,13 +134,13 @@ var Items = function(){ var this_value = $(this).val(), categories_list = $("#categories_list") tags_list = $("#tags_list"), - status_list = $("#status_list"), + role_list = $("#role_list"), layouts_list = $("#layouts_list"), data_count_area = $("#data_count_area"); categories_list.html(""); tags_list.html(""); - status_list.html(""); + role_list.html(""); if(this_value){ $.ajax({ url : "<%= Rails.application.routes.url_helpers.pages_get_categories_path %>", @@ -170,17 +177,24 @@ var Items = function(){ } var controlDiv = $("
"); - if(data.role_status.length){ - status_list.parent().find("label.control-label").text("<%= I18n.t(:role) %> :"); + if(data.roles.length){ + role_list.parent().find("label.control-label").text("<%= I18n.t(:role) %> :"); var checkbox = $(""); controlDiv.append(checkbox); - $.each(data.role_status,function(i,category){ - var checkbox = $(""); + $.each(data.roles,function(i,role){ + var status_list = ''; + + var checkbox = $(""); controlDiv.append(checkbox); }) - status_list.html(controlDiv); + role_list.html(controlDiv); }else{ - status_list.parent().find("label.control-label").text(""); + role_list.parent().find("label.control-label").text(""); } if(data.layouts.length){ diff --git a/app/controllers/members_controller.rb b/app/controllers/members_controller.rb index 2392f5b..2605bda 100644 --- a/app/controllers/members_controller.rb +++ b/app/controllers/members_controller.rb @@ -1,55 +1,86 @@ class MembersController < ApplicationController def index - statuses = OrbitHelper.page_categories - @statuses = [] - if statuses.first == "all" - module_app = OrbitHelper.this_module_app - @statuses = module_app.role_status.collect do |stat| + page_roles = OrbitHelper.page_categories + page_role_status = OrbitHelper.page_role_status + + if page_roles.include?("all") + roles = Role.all.collect do |role| { - "status" => stat.title, - "id" => stat.id.to_s, - "status-role" => stat.role.title, - "rs" => stat + "title" => role.title, + "id" => role.id } end else - statuses.each do |stat| - s = RoleStatus.find(stat) - @statuses << {"status" => s.title, "id" => s.id.to_s, "rs" => s, "status-role" => s.role.title} + page_role_status.each do |status_id| + page_roles << RoleStatus.find(status_id).role.id.to_s + end + roles = Role.find(page_roles.uniq).collect do |role| + { + "title" => role.title, + "id" => role.id, + "status" => RoleStatus.where(:role_id=>role, :_id.in=>page_role_status) + } end end - stats = @statuses.collect do |status| - members = status["rs"].member_profiles - member_list = members.collect do |member| - if member.avatar.present? - image = member.avatar.thumb.url - else - image = "http://placehold.it/100x100" - end - roles = member.roles.collect do |role| - { - "role" => role.title + + role_list = [] + roles.each do |role| + status_list = [] + if !role['status'].blank? + role['status'].each do |status| + member_profiles = get_members_by_status(status) + status_list << { + "status-title" => status.title, + "members" => member_profiles } end - { - "name" => member.name, - "roles" => roles, - "img_src" => image, - "email" => member.email, - "link_to_show" => OrbitHelper.url_to_show(member.to_param) + else + # Members with status + RoleStatus.where(:role_id=>role['id']).each do |status| + member_profiles = get_members_by_status(status) + status_list << { + "status-title" => status.title, + "members" => member_profiles + } + end + # Members without status + member_profiles = [] + MemberProfile.where(:role_ids.in=>[role['id']], :role_status_ids.in=>[nil,[]]).collect do |profile| + member_profiles << get_member_data(profile) + end + status_list << { + "status-title" => "", + "members" => member_profiles } - end - { - "status-title" => status["status"], - "role-title" => status["status-role"], - "members" => member_list + role_list << { + "role-title" => role['title'], + "status-list" => status_list } end - { - "stats" => stats, - "extras" => {"widget-title" => "Members"} + { + "roles" => role_list, + "extras" => { + "widget-title"=>t(:member_) } + } + end + + def get_members_by_status(status) + member_profiles = [] + status.member_profiles.each do |profile| + member_profiles<profile.name, + "email" => profile.email, + "image" => profile.avatar.present? ? profile.avatar.thumb.url : "http://placehold.it/100x100", + "link_to_show" => OrbitHelper.url_to_show(profile.to_param) + } end def show diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb index 0ab22a9..e65e323 100644 --- a/app/controllers/pages_controller.rb +++ b/app/controllers/pages_controller.rb @@ -80,6 +80,7 @@ class PagesController < ApplicationController OrbitHelper.set_this_module_app module_app.singularize OrbitHelper.set_page_categories page.categories || [] OrbitHelper.set_page_tags page.tags || [] + OrbitHelper.set_page_role_status page.role_status || [] OrbitHelper.set_page_data_count page.data_count if params[:layout].kind_of?(String) layout = to_bool(params[:layout]) @@ -141,10 +142,16 @@ class PagesController < ApplicationController def get_categories module_app = ModuleApp.find_by_key(params[:module]); if module_app.key.eql?("member") - role_status = module_app.role_status.collect do |cat| + roles = Role.all.collect do |role| { - "title" => "#{cat.role.title} - #{cat.title}", - "id" => cat.id.to_s + "title" => role.title, + "id" => role.id.to_s, + "status" => RoleStatus.where(:role=>role).collect do |status| + { + "title" => status.title, + "id" => status.id.to_s + } + end } end else @@ -156,13 +163,13 @@ class PagesController < ApplicationController end end - role_status = role_status.nil? ? [] : role_status.sort_by{|status| status['title']} + roles = roles.nil? ? [] : roles.sort_by{|status| status['title']} categories = categories.nil? ? [] : categories if module_app.data_count.nil? - render :json => {"categories" => categories, "tags" => module_app.tags,"role_status" => role_status,"layouts" => (get_layouts module_app.key),"data_count" => {"present"=>false}}.to_json + render :json => {"categories" => categories, "tags" => module_app.tags,"roles" => roles,"layouts" => (get_layouts module_app.key),"data_count" => {"present"=>false}}.to_json else - render :json => {"categories" => categories, "tags" => module_app.tags,"role_status" => role_status,"layouts" => (get_layouts module_app.key),"data_count" => {"present"=>true,"start"=>module_app.data_count.begin, "end" => module_app.data_count.end}}.to_json + render :json => {"categories" => categories, "tags" => module_app.tags,"roles" => roles,"layouts" => (get_layouts module_app.key),"data_count" => {"present"=>true,"start"=>module_app.data_count.begin, "end" => module_app.data_count.end}}.to_json end end @@ -187,15 +194,16 @@ class PagesController < ApplicationController @categories = @module_app.categories rescue [] @tags = @module_app.tags rescue [] if @module_app.key.eql?("member") - @status = @module_app.role_status.collect do |cat| + @roles = Role.all.collect do |role| { - "title" => "#{cat.role.title} - #{cat.title}", - "id" => cat.id.to_s + "title" => role.title, + "id" => role.id.to_s, + "status" => RoleStatus.where(:role=>role) } end - @status = @status.sort_by{|status| status['title']} + @roles = @roles.sort_by{|status| status['title']} else - @status = [] + @roles = [] end @layout_types = get_layouts @module_app.key end @@ -323,7 +331,7 @@ class PagesController < ApplicationController page = Page.find(params[:page][:parent_page]) page.url = page.url == "/" ? "" : page.url @url = page.url + "/#{params[:page][:page_id]}" - p = params.require(:page).permit(:number, :page_type, :page_id, :module, :layout, :parent_page, :data_count, :enabled_for_mobile, enabled_for_sitemap: [], enabled_for: [], menu_enabled_for: [], categories: [], tags: [], name_translations: [:en, :zh_tw],external_url_translations: [:en, :zh_tw]) + p = params.require(:page).permit(:number, :page_type, :page_id, :module, :layout, :parent_page, :data_count, :enabled_for_mobile, enabled_for_sitemap: [], enabled_for: [], menu_enabled_for: [], categories: [], tags: [], role_status: [], name_translations: [:en, :zh_tw],external_url_translations: [:en, :zh_tw]) p["url"] = @url if p["external_url_translations"] p["external_url_translations"]["en"] = p["external_url_translations"]["en"].sub("http://" + request.host_with_port,"") @@ -333,7 +341,9 @@ class PagesController < ApplicationController end def page_update_params - p = params.require(:page).permit(:number, :page_type, :page_id, :module, :layout, :parent_page, :data_count, :enabled_for_mobile, enabled_for_sitemap: [], enabled_for: [],menu_enabled_for: [], categories: [], tags: [], name_translations: [:en, :zh_tw], external_url_translations: [:en, :zh_tw]) + p = params.require(:page).permit(:number, :page_type, :page_id, :module, :layout, :parent_page, :data_count, :enabled_for_mobile, enabled_for_sitemap: [], enabled_for: [],menu_enabled_for: [], categories: [], tags: [], role_status: [], name_translations: [:en, :zh_tw], external_url_translations: [:en, :zh_tw]) + p["role_status"] = p["role_status"] || [] + p["categories"] = p["categories"] || [] p["enabled_for"] = p["enabled_for"] || [] p["menu_enabled_for"] = p["menu_enabled_for"] || [] p["enabled_for_mobile"] = p["enabled_for_mobile"] || 0 diff --git a/app/helpers/orbit_helper.rb b/app/helpers/orbit_helper.rb index e4b973b..96f5def 100644 --- a/app/helpers/orbit_helper.rb +++ b/app/helpers/orbit_helper.rb @@ -11,6 +11,10 @@ module OrbitHelper @tags = tags; end + def self.set_page_role_status(role_status) + @role_status = role_status; + end + def self.set_page_data_count(data_count) @data_count = data_count end @@ -38,6 +42,10 @@ module OrbitHelper @tags end + def self.page_role_status + @role_status + end + def self.page_for_tag(tag) page_for_tag = nil pages = Page.where(:module => @module_app.key) diff --git a/app/models/page.rb b/app/models/page.rb index d8b0636..b33cb7f 100644 --- a/app/models/page.rb +++ b/app/models/page.rb @@ -17,6 +17,7 @@ class Page field :menu_enabled_for, type: Array, default: [] field :categories, type: Array, :default => [] field :tags, type: Array, :default => [] + field :role_status, type: Array, :default => [] field :enabled_for_sitemap, type: Array, :default => [] field :rss2_id, type: String diff --git a/app/templates/orbit_bootstrap/modules/member/index.html.erb b/app/templates/orbit_bootstrap/modules/member/index.html.erb index 39beb01..24d52ba 100644 --- a/app/templates/orbit_bootstrap/modules/member/index.html.erb +++ b/app/templates/orbit_bootstrap/modules/member/index.html.erb @@ -2,27 +2,35 @@

{{widget-title}}

-
+
-

{{status-title}} ({{role-title}})

+

{{role-title}}

-
-
-
- -
-
-
- {{name}} -
-

- {{role}} -

-

{{email}}

+ +
+
+

{{status-title}}

+
+ +
+
+
+ +
+
+
+ {{name}} +
+

+ {{role-title}} +

+

{{email}}

+
+
diff --git a/app/views/pages/_form.html.erb b/app/views/pages/_form.html.erb index 55d869d..e0f5d2e 100644 --- a/app/views/pages/_form.html.erb +++ b/app/views/pages/_form.html.erb @@ -70,20 +70,30 @@
- -
+ +
<% if params[:action] == "edit" %>
- <% if !@status.blank? %> + <% if !@roles.blank? %> <% end %> - <% @status.each do |status| %> + <% @roles.each do |role| %> <% end %>