diff --git a/app/controllers/admin/members_controller.rb b/app/controllers/admin/members_controller.rb index fe285af..45f7bd7 100644 --- a/app/controllers/admin/members_controller.rb +++ b/app/controllers/admin/members_controller.rb @@ -1,5 +1,5 @@ class Admin::MembersController < OrbitMemberController - before_action :set_member_profile, only: [:show, :edit, :update] + before_action :show_member_profile, only: [:show, :edit, :update, :edit_passwd, :edit_privilege] helper MemberHelper helper OrbitBackendHelper @@ -149,6 +149,12 @@ class Admin::MembersController < OrbitMemberController # @custom_field_value = MemberProfileFieldValue.put_field_values(@member, m.last, nil, field_value) # end end + if !params[:role_field_values].nil? + params[:role_field_values].each_with_index do |r,i| + field_value = r.last[:id].present? + @custom_field_value = AttributeValue.put_field_values(@member, r.last, r.last[:attribute_field_id], field_value) + end + end if params[:workgroup_id] @member.user.update_attributes(workgroup_id: params[:workgroup_id]) end @@ -200,7 +206,6 @@ class Admin::MembersController < OrbitMemberController end def edit_passwd - @member = MemberProfile.find(params[:member_id]) @user = @member.user if current_user.id == @user.id redirect_to :action => :index @@ -208,7 +213,6 @@ class Admin::MembersController < OrbitMemberController end def edit_privilege - @member = MemberProfile.find(params[:member_id]) @user = @member.user @workgroup = Workgroup.find_by(key: 'admin') if current_user.id == @user.id @@ -287,6 +291,18 @@ class Admin::MembersController < OrbitMemberController @member = MemberProfile.find(params[:id]) end + def show_member_profile + path = request.path.split('/') + if path.last.include? '-' + uid = path[-1].split("-").last + uid = uid.split("?").first + else + uid = path[-2].split("-").last + uid = uid.split("?").first + end + @member = MemberProfile.find_by(uid: uid) + end + # Never trust parameters from the scary internet, only allow the white list through. def member_profile_params params.require(:member_profile).permit! rescue nil diff --git a/app/controllers/members_controller.rb b/app/controllers/members_controller.rb index be283a3..c0b6c66 100644 --- a/app/controllers/members_controller.rb +++ b/app/controllers/members_controller.rb @@ -1,7 +1,135 @@ class MembersController < ApplicationController def index + members = MemberProfile.all + 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 + } + end + { + "name" => member.name, + "email" => member.email, + "roles" => roles, + "img_src" => image, + "link_to_show" => OrbitHelper.url_to_show(member.to_param) + } + end + { + "members" => member_list, + "extras" => {"widget-title"=>"Members"} + } end def show + params = OrbitHelper.params + + member = MemberProfile.find_by(uid: params[:uid]) + + plugins = OrbitApp::Plugin::Registration.all rescue nil + plugin_list = plugins.collect do |plugin| + plugin_data = plugin.app_name.constantize.where(member_profile_id: member) rescue nil + pd = plugin_data.collect do |p| + { + "data_title" => p.slug_title, + "link_to_show" => OrbitHelper.url_to_show(p.to_param) + } + end + + { + "plugin_data" => pd, + "plugin_title" => plugin.app_name.titleize + } + end + + if member.avatar.present? + image = member.avatar.thumb.url + else + image = "http://placehold.it/100x100" + end + + custom_fields = member.member_profile_field_values.collect do |cf| + if (cf.member_profile_field.markup.eql?("text_field") || cf.member_profile_field.markup.eql?("text_area")) + custom_field_value = cf.value[I18n.locale] + elsif (cf.member_profile_field.markup.eql?("select") || cf.member_profile_field.markup.eql?("radio_button")) + custom_field_value = cf.member_profile_field.markup_value["#{cf.value}"][I18n.locale] + elsif cf.member_profile_field.markup.eql?("address") + custom_field_value = cf[:address_key][I18n.locale].map{|k,v| v}.join(', ') + elsif cf.member_profile_field.markup.eql?("date") + + case cf.member_profile_field.typeC['format'] + when 'format1' + custom_field_value = cf.value.to_date.strftime("%Y/%m/%d") + when 'format2' + custom_field_value = cf.value.to_date.strftime("%Y/%m/%d") + when 'format3' + custom_field_value = cf.value.to_date.strftime("%Y/%m") + when 'format4' + custom_field_value = cf.value.to_date.strftime("%Y") + end + elsif cf.member_profile_field.markup.eql?("checkbox") + custom_field_value = cf.value.map {|v| cf.member_profile_field.markup_value["#{v}"][I18n.locale]}.join(', ') + end + { + "custom_field_title" => cf.member_profile_field.title, + "custom_field_value" => custom_field_value + } + end + + role_fields = member.attribute_values.collect do |rf| + if (rf.attribute_field.markup.eql?("text_field") || rf.attribute_field.markup.eql?("text_area")) + role_field_value = rf.value[I18n.locale] + elsif (rf.attribute_field.markup.eql?("select") || rf.attribute_field.markup.eql?("radio_button")) + role_field_value = rf.attribute_field.markup_value["#{rf.value}"][I18n.locale] + elsif rf.attribute_field.markup.eql?("address") + role_field_value = rf[:address_key][I18n.locale].map{|k,v| v}.join(', ') + elsif rf.attribute_field.markup.eql?("date") + + case rf.attribute_field.typeC['format'] + when 'format1' + role_field_value = rf.value.to_date.strftime("%Y/%m/%d") + when 'format2' + role_field_value = rf.value.to_date.strftime("%Y/%m/%d") + when 'format3' + role_field_value = rf.value.to_date.strftime("%Y/%m") + when 'format4' + role_field_value = rf.value.to_date.strftime("%Y") + end + elsif rf.attribute_field.markup.eql?("checkbox") + role_field_value = rf.value.map {|v| rf.attribute_field.markup_value["#{v}"][I18n.locale]}.join(', ') + end + + { + "role_field_title" => rf.attribute_field.title, + "role_field_value" => role_field_value + } + end + + roles = member.roles.collect do |role| + { + "role" => role.title + } + end + { + "roles" => roles, + "plugins" => plugin_list, + "custom_fields" => custom_fields, + "role_fields" => role_fields, + "data" => { + "name" => member.name, + "img_src" => image, + "email" => member.email, + "autobiography" => member.autobiography, + "gender" => member.sex, + "office" => member.office_tel, + "birthday" => member.birthday, + "id" => member.sid + } + } end end diff --git a/app/helpers/attribute_fields_helper.rb b/app/helpers/attribute_fields_helper.rb index 30c52b1..aa47445 100644 --- a/app/helpers/attribute_fields_helper.rb +++ b/app/helpers/attribute_fields_helper.rb @@ -10,14 +10,15 @@ module AttributeFieldsHelper include OrbitFormHelper - def block_helper(member,index,disable = false) + def block_helper(member,index,disable = false,attribute_type=nil) unless self.disabled @index = index @markup_options = markup_options.merge(:disabled=>disable,:func=>"input_unit") @member = member - @attribute_value = @member.get_value_from_field_id(id) + @attribute_value = @member.get_value_from_field_id(id,attribute_type) + @attribute_type = attribute_type @new_attribute = @attribute_value.nil? - @attribute_value = @attribute_value || @member.member_profile_field_values.build(member_profile_field: id) + @attribute_value = @attribute_value || (attribute_type.eql?("role") ? @member.attribute_values.build(attribute_field_id: id) : @member.member_profile_field_values.build(member_profile_field: id)) @prefiled_value = @attribute_value.value rescue nil return instance_eval("render_#{markup}") #rescue "" end @@ -387,7 +388,11 @@ protected def end_block if @new_attribute - hidden_field_tag(get_basic_field_name_base+"[member_profile_field_id]",id,:for=>"field_#{@index}") + if @attribute_type.eql?("role") + hidden_field_tag(get_basic_field_name_base+"[attribute_field_id]",id,:for=>"field_#{@index}") + else + hidden_field_tag(get_basic_field_name_base+"[member_profile_field_id]",id,:for=>"field_#{@index}") + end else hidden_field_tag(get_basic_field_name_base+"[id]",@attribute_value.id,:for=>"field_#{@index}") end @@ -412,9 +417,9 @@ protected def get_basic_field_name_base if @new_attribute - "member_profile_field_values[#{@index}]" + (@attribute_type.eql?("role") ? "role_field_values[#{@index}]" : "member_profile_field_values[#{@index}]") else - "member_profile_field_values[#{@index}]" + (@attribute_type.eql?("role") ? "role_field_values[#{@index}]" : "member_profile_field_values[#{@index}]") end end diff --git a/app/helpers/orbit_helper.rb b/app/helpers/orbit_helper.rb index e91a6c4..ca27bd8 100644 --- a/app/helpers/orbit_helper.rb +++ b/app/helpers/orbit_helper.rb @@ -151,7 +151,7 @@ module OrbitHelper else module_app = ModuleApp.where(:key => page.module).first unless module_app.nil? - [module_app.title, module_app.get_registration.icon_class] + [module_app.title, (module_app.get_registration.icon_class || module_app.get_registration.get_icon_class_no_sidebar)] else if page.module.eql? "sitemap" ["sitemap", "icons-directions"] diff --git a/app/models/attribute_value.rb b/app/models/attribute_value.rb index 9d611b5..8aa2651 100644 --- a/app/models/attribute_value.rb +++ b/app/models/attribute_value.rb @@ -112,6 +112,18 @@ class AttributeValue # Date.new(data["(1i)"].to_i,data["(2i)"].to_i,data["(3i)"].to_i) rescue nil end + def self.put_field_values(member, field_value_param, field_value_id=nil,field_value_status) + if field_value_status.eql?(true) + @attribute_field_value = self.find(field_value_id) rescue nil + @attribute_field_value.update(field_value_param) rescue nil + @attribute_field_value.save rescue nil + else + @attribute_field_value = member.attribute_values.build(field_value_param) rescue nil + @attribute_field_value.save + end + return @attribute_field_value + end + protected diff --git a/app/models/concerns/member_slug.rb b/app/models/concerns/member_slug.rb new file mode 100644 index 0000000..62b287e --- /dev/null +++ b/app/models/concerns/member_slug.rb @@ -0,0 +1,24 @@ + module MemberSlug + extend ActiveSupport::Concern + + included do + field :uid, type: String + + index({ uid: 1}, { unique: true }) + + validates_uniqueness_of :uid + + before_create :generate_uid + end + + def to_param + (self.name.gsub(/[ "'*@#$%^&()+=;:.,?>|\\\/<~_!:,、。!?;「」〈〉【】/]/,'-')+"-"+self.uid).gsub(/-{2,}/,'-') rescue "-"+self.uid + end + + private + + def generate_uid + self.uid = rand(10**8).to_s + self.save if self.class.where(:uid=>self.uid).size > 0 + end +end \ No newline at end of file diff --git a/app/models/concerns/slug.rb b/app/models/concerns/slug.rb index 81a4539..6258faa 100644 --- a/app/models/concerns/slug.rb +++ b/app/models/concerns/slug.rb @@ -1,4 +1,4 @@ -module Slug + module Slug extend ActiveSupport::Concern included do @@ -15,6 +15,8 @@ module Slug (self.slug_title.gsub(/[ "'*@#$%^&()+=;:.,?>|\\\/<~_!:,、。!?;「」〈〉【】/]/,'-')+"-"+self.uid).gsub(/-{2,}/,'-') rescue "-"+self.uid end + private + def generate_uid self.uid = rand(10**8).to_s generate_uid if self.class.where(:uid=>self.uid).size > 0 diff --git a/app/models/member_profile.rb b/app/models/member_profile.rb index 2e9a6fa..80bca11 100644 --- a/app/models/member_profile.rb +++ b/app/models/member_profile.rb @@ -5,6 +5,9 @@ class MemberProfile include Mongoid::Tree include Mongoid::Tree::Ordering + include OrbitModel::Status + include MemberSlug + field :first_name, type: String, localize: true field :last_name, type: String, localize: true field :sex @@ -26,8 +29,12 @@ class MemberProfile has_and_belongs_to_many :role_statuses has_many :member_profile_field_values - accepts_nested_attributes_for :member_profile_field_values + accepts_nested_attributes_for :member_profile_field_values, allow_destroy: true + has_many :attribute_values + accepts_nested_attributes_for :attribute_values, allow_destroy: true + + scope :can_display, ->{where(is_hidden: false).order_by([:is_top,:desc],[:created_at,:desc])} before_save :assign_default_position, :if => :assign_default_position? mount_uploader :avatar, AvatarUploader @@ -49,37 +56,63 @@ class MemberProfile end end - def new_attribute_values=(fields) + def new_attribute_values=(fields,attribute_type=nil) fields.each do |key,field| - self.member_profile_field_values.build(field) + if attribute_type.eql?("role") + self.attribute_values.build(field) + else + self.member_profile_field_values.build(field) + end end end - def get_attribute_value(attribute_field) - MemberProfileFieldValue.find_by(member_profile_field_id: attribute_field.id.to_s) + def get_attribute_value(attribute_field,attribute_type=nil) + if attribute_type.eql?("role") + AttributeValue.find_by(attribute_field_id: attribute_field.id) + else + MemberProfileFieldValue.find_by(member_profile_field_id: attribute_field.id) + end end - def get_attribute_values - @attribute_values ||= self.member_profile_field_values rescue nil + def get_attribute_values(attribute_type=nil) + if attribute_type.eql?("role") + @attribute_values = self.attribute_values rescue nil + else + @attribute_values = self.member_profile_field_values rescue nil + end end - def get_value_from_field_id(field_id) - values = get_attribute_values - value = values.detect {|value| value.member_profile_field_id == field_id} rescue nil - value ? value : nil + def get_value_from_field_id(field_id,attribute_type=nil) + if attribute_type.eql?("role") + values = get_attribute_values(attribute_type) + value = values.detect {|value| value.attribute_field_id == field_id} rescue nil + value ? value : nil + else + values = get_attribute_values + value = values.detect {|value| value.member_profile_field_id == field_id} rescue nil + value ? value : nil + end end - def self.get_member_list_attribute_field(field_key) - MemberProfileField.find_by(key: field_key) + def self.get_member_list_attribute_field(field_key, attribute_type=nil) + if attribute_type.eql?("role") + AttributeField.find_by(key: field_key) + else + MemberProfileField.find_by(key: field_key) + end end - def self.get_member_list_attribute_value(member_profile_id,field_id) - MemberProfileFieldValue.find_by(member_profile_id: member_profile_id, member_profile_field_id: field_id) + def self.get_member_list_attribute_value(member_profile_id,field_id,attribute_type=nil) + if attribute_type.eql?("role") + AttributeValue.find_by(member_profile_id: member_profile_id, attribute_field_id: field_id) + else + MemberProfileFieldValue.find_by(member_profile_id: member_profile_id, member_profile_field_id: field_id) + end end def self.get_role_member_data_by_sort(field_key, role_status_id) a = Array.new - attribute_field_data = get_member_list_attribute_field(field_key) + attribute_field_data = get_member_list_attribute_field(field_key,"role") self.where(role_status_ids: role_status_id).desc(:_id).collect{|t| a << [ get_member_list_attribute_value(t.id,attribute_field_data.id)['val'].to_i, t ] } member_data = a.sort member_data_tmp = member_data.collect {|v| v[1] } diff --git a/app/models/module_app.rb b/app/models/module_app.rb index ac3ba16..650166e 100644 --- a/app/models/module_app.rb +++ b/app/models/module_app.rb @@ -88,4 +88,8 @@ class ModuleApp def data_count get_registration.get_data_count end + + def icon_class_no_sidebar + get_registration.get_icon_class_no_sidebar + end end diff --git a/app/templates/orbit_bootstrap/modules/member/index.html.erb b/app/templates/orbit_bootstrap/modules/member/index.html.erb new file mode 100644 index 0000000..de950eb --- /dev/null +++ b/app/templates/orbit_bootstrap/modules/member/index.html.erb @@ -0,0 +1,25 @@ +
+

+ {{widget-title}} +

+
+
+
+
+ +
+
+

+ {{name}} +

+
+

{{role}}

+
+

{{email}}

+ Read More » +
+
+
+
+
+{{pagination_goes_here}} \ No newline at end of file diff --git a/app/templates/orbit_bootstrap/modules/member/show.html.erb b/app/templates/orbit_bootstrap/modules/member/show.html.erb new file mode 100644 index 0000000..ef40911 --- /dev/null +++ b/app/templates/orbit_bootstrap/modules/member/show.html.erb @@ -0,0 +1,65 @@ +
+
+

{{name}}

+
+ + + + Roles : + + {{role}} + + + +
+

{{role_field_title}} : {{role_field_value}}

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
id number:{{id}}
e-mail:{{email}}
gender:{{gender}}
birthday:{{birthday}}
office telephone:{{office}}
+ +
+

{{custom_field_title}} : {{custom_field_value}}

+
+
+

+

Autobiography:

+

{{autobiography}}

+
+ +
+ +
+ + +
\ No newline at end of file diff --git a/app/templates/orbit_bootstrap/modules/members/index.html.erb b/app/templates/orbit_bootstrap/modules/members/index.html.erb deleted file mode 100644 index e69de29..0000000 diff --git a/app/templates/orbit_bootstrap/modules/members/show.html.erb b/app/templates/orbit_bootstrap/modules/members/show.html.erb deleted file mode 100644 index e69de29..0000000 diff --git a/app/views/admin/members/_member_for_listing.html.erb b/app/views/admin/members/_member_for_listing.html.erb index 239a958..4271876 100644 --- a/app/views/admin/members/_member_for_listing.html.erb +++ b/app/views/admin/members/_member_for_listing.html.erb @@ -25,7 +25,7 @@ <% if member_for_listing.user.present? %> <%= content_tag(:li, link_to(t("users.setting_privilege"),admin_member_edit_privilege_path(member_for_listing))) if current_user.is_admin? and current_user.id != (member_for_listing.user.id if member_for_listing.user.present? ) %> <% end %> - <%= content_tag(:li, link_to(t(:delete_),admin_member_path(member_for_listing, at: params[:at]), data: { confirm: t('sure?') }, method: :delete, class: "text-error", remote: true)) if current_user.is_admin? %> + <%= content_tag(:li, link_to(t(:delete_),admin_member_path(member_for_listing.id, at: params[:at]), data: { confirm: t('sure?') }, method: :delete, class: "text-error", remote: true)) if current_user.is_admin? %> diff --git a/app/views/admin/members/_role.html.erb b/app/views/admin/members/_role.html.erb index 41d5d63..af06e0c 100644 --- a/app/views/admin/members/_role.html.erb +++ b/app/views/admin/members/_role.html.erb @@ -21,6 +21,12 @@ + <% role.attribute_fields.asc(:_id).each do |rf|%> + <%= rf.block_helper(@member,@form_index,false,"role")%> + <% @form_index = @form_index +1 %> + <% end %> + + diff --git a/app/views/admin/members/index.html.erb b/app/views/admin/members/index.html.erb index fa1ad0e..5f95bee 100644 --- a/app/views/admin/members/index.html.erb +++ b/app/views/admin/members/index.html.erb @@ -3,7 +3,6 @@ <% end %> <% content_for :right_nav do %> -
<%= text_field_tag 'mq',( params[:mq] ? params[:mq] : '' ), {:id=>'filter-input', :class => "search-query input-medium", :placeholder => 'Search'} %> diff --git a/app/views/admin/members/new.html.erb b/app/views/admin/members/new.html.erb index 0a33dd3..c4394e5 100644 --- a/app/views/admin/members/new.html.erb +++ b/app/views/admin/members/new.html.erb @@ -20,7 +20,7 @@ <%= javascript_include_tag "lib/member/role-forms" %> <% end -%> -<%= form_for @member, :url => admin_members_path(@member), :html => { :multipart => true , :class=>"form-horizontal main-forms", :id=>"user-forms"} do |f| %> +<%= form_for @member, :url => admin_members_path, :html => { :multipart => true , :class=>"form-horizontal main-forms", :id=>"user-forms"} do |f| %>
diff --git a/app/views/admin/members/show.html.erb b/app/views/admin/members/show.html.erb index 4a3969b..aff3080 100644 --- a/app/views/admin/members/show.html.erb +++ b/app/views/admin/members/show.html.erb @@ -19,7 +19,7 @@

<%= @member.name%>

<%= @member.email %>
- <%= link_to(" #{t(:edit)}".html_safe,edit_admin_member_path(@member.id),:class=>"btn btn-mini" ) if current_user.is_admin?%> + <%= link_to(" #{t(:edit)}".html_safe,edit_admin_member_path(@member),:class=>"btn btn-mini" ) if current_user.is_admin?%> <%= link_to(" #{t("users.change_passwd")}".html_safe,admin_member_edit_passwd_path(@member),:class=>"btn btn-mini" ) if current_user.is_admin? and current_user.id != @member.user.id rescue nil %> <%= link_to(" #{t("users.setting_privilege")}".html_safe,admin_member_edit_privilege_path(@member),:class=>"btn btn-mini" ) if current_user.is_admin? and current_user.id != @member.user.id rescue nil%>
@@ -33,6 +33,7 @@
+