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}}
-
-
-
-
-
-
-
-
- {{role}}
-
-
{{email}}
+
+
+
+
{{status-title}}
+
+
+
+
+
+
+
+
+
+
+ {{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" %>