From 28aab34c95ce925baf835e1dab8c6a59f41e7336 Mon Sep 17 00:00:00 2001 From: Saurabh Bhatia Date: Tue, 17 Jun 2014 21:49:41 +0800 Subject: [PATCH] fixed member infos,attribute sets, member values --- .../javascripts/lib/member/role-forms.js | 2 +- .../admin/member_infos_controller.rb | 32 +++++++++--- app/controllers/admin/members_controller.rb | 20 +++++-- app/helpers/attribute_fields_helper.rb | 16 +++--- app/models/member_info.rb | 28 ++++++++++ app/models/member_profile.rb | 3 +- app/models/member_profile_field.rb | 46 ++++++++++++++-- app/models/member_profile_field_value.rb | 11 ++++ app/views/admin/member_infos/_form.html.erb | 9 ++++ app/views/admin/member_infos/_index.html.erb | 14 +++++ .../admin/member_infos/_member_info.html.erb | 14 +++++ app/views/admin/member_infos/_new.html.erb | 10 ++++ .../member_infos/add_attribute_field.js.erb | 1 + app/views/admin/member_infos/edit.html.erb | 52 ++++++++++++++++--- app/views/admin/member_infos/index.html.erb | 36 +++---------- app/views/admin/member_infos/index.js.erb | 4 ++ app/views/admin/member_infos/new.html.erb | 39 +------------- app/views/admin/member_infos/new.js.erb | 1 + .../admin/member_infos/toggle_enable.js.erb | 3 ++ app/views/admin/members/_info.html.erb | 2 +- .../admin/members/_member_basic.html.erb | 25 ++++++--- .../members/_member_for_listing.html.erb | 2 +- .../admin/roles/_attribute_field.html.erb | 2 +- .../_address_modal_dialog.html.erb | 5 +- .../attribute_field/_attribute_field.html.erb | 5 +- test/fixtures/member_infos.yml | 16 +++--- 26 files changed, 274 insertions(+), 124 deletions(-) create mode 100644 app/models/member_info.rb create mode 100644 app/views/admin/member_infos/_form.html.erb create mode 100644 app/views/admin/member_infos/_index.html.erb create mode 100644 app/views/admin/member_infos/_member_info.html.erb create mode 100644 app/views/admin/member_infos/_new.html.erb create mode 100644 app/views/admin/member_infos/add_attribute_field.js.erb create mode 100644 app/views/admin/member_infos/index.js.erb create mode 100644 app/views/admin/member_infos/new.js.erb create mode 100644 app/views/admin/member_infos/toggle_enable.js.erb diff --git a/app/assets/javascripts/lib/member/role-forms.js b/app/assets/javascripts/lib/member/role-forms.js index ea8d932..455cd6d 100644 --- a/app/assets/javascripts/lib/member/role-forms.js +++ b/app/assets/javascripts/lib/member/role-forms.js @@ -96,7 +96,7 @@ function inputAppendLength() { // Role Attribute Template Data function setData(l, type, ol) { - var fields = $('#info').length ? "member_profile_field" : $('#sub_role').length ? "sub_role[attribute_fields]" : "role[attribute_fields]", + var fields = $('#info').length ? "info[attribute_fields]" : $('#sub_role').length ? "sub_role[attribute_fields]" : "role[attribute_fields]", data = { _add_more: ["add_more_" +l, fields+"["+l+"]["+type+"][add_more]"], _calendar: ["calendar_" +l, fields+"["+l+"]["+type+"][calendar]"], diff --git a/app/controllers/admin/member_infos_controller.rb b/app/controllers/admin/member_infos_controller.rb index 38c6666..c468ca4 100644 --- a/app/controllers/admin/member_infos_controller.rb +++ b/app/controllers/admin/member_infos_controller.rb @@ -5,12 +5,13 @@ class Admin::MemberInfosController < OrbitMemberController helper Admin::AttributeValuesViewHelper def index - @attributes = MemberProfileField.order('created_at DESC') + @attributes = MemberInfo.order('created_at DESC') @roles = Role.excludes('disabled' => true) end def new - @attribute = MemberProfileField.new + @attribute = MemberInfo.new + render layout: false end def show @@ -20,14 +21,30 @@ class Admin::MemberInfosController < OrbitMemberController end def create - @attribute = MemberProfileField.new(member_info_params) + @attribute = MemberInfo.new(info_params) @attribute.save redirect_to action: :index end def update - @attribute.update_params(member_info_params) + if info_params[:attribute_fields].present? + info_params[:attribute_fields].each do |a| + field_status = a.last[:id].present? + @attribute_field = MemberProfileField.add_attribute_field(@attribute, a.last, a.last[:id], field_status) + end + flash.now[:notice] = "Updated Fields" + respond_to do |format| + format.js { render 'admin/member_infos/add_attribute_field' } + end + else + @attribute.update_attributes(info_params) + @attribute.member_profile_fields.each{|t| t.destroy if t["to_delete"] == true} + respond_to do |format| + format.html { redirect_to(admin_member_infos_path) } + format.js { render 'admin/member_infos/toggle_enable' } + end + end end def destroy @@ -38,12 +55,11 @@ class Admin::MemberInfosController < OrbitMemberController private # Use callbacks to share common setup or constraints between actions. def set_member_info - @attribute = MemberProfileField.find(params[:id]) + @attribute = MemberInfo.find(params[:id]) end - # Never trust parameters from the scary internet, only allow the white list through. - def member_info_params - params.require(:member_profile_field).permit! + def info_params + params.require(:info).permit! end protected diff --git a/app/controllers/admin/members_controller.rb b/app/controllers/admin/members_controller.rb index c4bcf79..c07e189 100644 --- a/app/controllers/admin/members_controller.rb +++ b/app/controllers/admin/members_controller.rb @@ -114,9 +114,9 @@ class Admin::MembersController < OrbitMemberController if @member.save @user.member_profile_id = @member.id - if !params[:member_profile_field_value].nil? - params[:member_profile_field_value].each_with_index do |m,i| - @custom_field_value = @member.member_profile_field_values.new(value: m.second["value"], member_profile_field_id: m.second["member_profile_field_id"]) + if !params[:member_profile_field_values].nil? + params[:member_profile_field_values].each_with_index do |m,i| + @custom_field_value = @member.member_profile_field_values.build(value: m.second["value"], member_profile_field_id: m.second["member_profile_field_id"]) @custom_field_value.save end end @@ -130,7 +130,7 @@ class Admin::MembersController < OrbitMemberController def update respond_to do |format| - if @member.update(member_profile_params) + if @member.update_attributes(member_profile_params) if @member.user.present? @member.user.update(user_params) else @@ -138,6 +138,18 @@ class Admin::MembersController < OrbitMemberController @user.save @user.update_attributes(member_profile_id: @member.id) end + if !params[:member_profile_field_values].nil? + params[:member_profile_field_values].each_with_index do |m,i| + field_value = m.last[:id].present? + @custom_field_value = MemberProfileFieldValue.put_field_values(@member, m.last, m.last[:id], field_value) + end + # elsif !params[:member_profile_field_value].nil? + # params[:member_profile_field_value].each_with_index do |m,i| + # field_value = m.last[:id].present? + # @custom_field_value = MemberProfileFieldValue.put_field_values(@member, m.last, nil, field_value) + # end + end + format.html { redirect_to admin_members_path, notice: 'Successfully Updated the User' } format.json { head :no_content } diff --git a/app/helpers/attribute_fields_helper.rb b/app/helpers/attribute_fields_helper.rb index 0fc4f03..fa7ca09 100644 --- a/app/helpers/attribute_fields_helper.rb +++ b/app/helpers/attribute_fields_helper.rb @@ -49,7 +49,7 @@ module AttributeFieldsHelper def render_checkbox @prefiled_value ||=[] control_group_wrapper do - a = self[:option_list].collect do |key,value| + a = self.typeE[:option_list].collect do |key,value| label_tag(key,check_box_tag(get_field_name_base+"[#{key}]", true , (@prefiled_value.include?(key) ? true : false), {})+value[I18n.locale.to_s],@markup_options.merge(:class=>"checkbox inline")) end.join rescue "" end @@ -132,22 +132,22 @@ module AttributeFieldsHelper end - def render_radio_button - @prefiled_value ||=[] + def render_radio_button + @prefiled_value ||=[] control_group_wrapper do - self[:option_list].collect do |key,value| + self.typeE[:option_list].collect do |key,value| label_tag(key,radio_button_tag(get_field_name_base, key , (@prefiled_value.include?(key) ? true : false), {})+value[I18n.locale.to_s],@markup_options.merge(:class=>"radio inline")) end.join end end - def render_select + def render_select prompt = @panel_setting["initial"][I18n.locale.to_s] rescue nil @markup_options.merge!(:prompt => prompt) unless prompt.nil? - control_group_wrapper{select_tag( get_field_name_base,options_for_select(self.option_list.collect{|p| [p[1][I18n.locale.to_s],p[0]]},@prefiled_value),@markup_options)} rescue "" + control_group_wrapper{select_tag( get_field_name_base,options_for_select(self.typeB["option_list"].collect{|p| [p[1][I18n.locale.to_s],p[0]]},@prefiled_value),@markup_options)} rescue "" end - def render_text_area + def render_text_area control_group_wrapper do |key,value| value = can_muti_lang_input? ? @prefiled_value[key] : @prefiled_value key = can_muti_lang_input? ? "[#{key}]" : "" @@ -422,7 +422,7 @@ protected def get_basic_field_name_base if @new_attribute - "member_profile_field_value[#{@index}]" + "member_profile_field_values[#{@index}]" else "member_profile_field_values[#{@index}]" end diff --git a/app/models/member_info.rb b/app/models/member_info.rb new file mode 100644 index 0000000..03ab8ff --- /dev/null +++ b/app/models/member_info.rb @@ -0,0 +1,28 @@ +class MemberInfo + include Mongoid::Document + include Mongoid::Timestamps + + field :key, type: String + field :built_in, type: Boolean, default: false + field :disabled, type: Boolean, default: false + field :title, localize: true + + field :to_search, type: Boolean, default: false + field :to_show, type: Boolean, default: true + + has_many :member_profile_fields, autosave: true, dependent: :destroy + accepts_nested_attributes_for :member_profile_fields, allow_destroy: true + + + def is_built_in? + self.built_in + end + + def is_disabled? + self.disabled + end + + def get_enabled_attribute_fields + self.member_profile_fields.excludes('disabled' => true) + end +end diff --git a/app/models/member_profile.rb b/app/models/member_profile.rb index 7ae2b7c..4f313c9 100644 --- a/app/models/member_profile.rb +++ b/app/models/member_profile.rb @@ -10,7 +10,7 @@ class MemberProfile field :sid field :office_tel field :birthday, type: DateTime - field :address + field :address, type: String, localize: true field :personal_website field :autobiography, type: String, localize: true field :email, type: String @@ -22,7 +22,6 @@ class MemberProfile has_one :user has_and_belongs_to_many :roles - has_many :role_field_values has_and_belongs_to_many :role_statuses has_many :member_profile_field_values diff --git a/app/models/member_profile_field.rb b/app/models/member_profile_field.rb index bbbb236..8f71bbb 100644 --- a/app/models/member_profile_field.rb +++ b/app/models/member_profile_field.rb @@ -1,9 +1,11 @@ class MemberProfileField include Mongoid::Document include Mongoid::Timestamps + include Mongoid::Attributes::Dynamic include ::AttributeFieldsHelper field :key, type: String + field :af_count field :title, type: String, localize: true field :markup, default: "text_field" field :option_list, type: Hash,default: {} @@ -21,6 +23,7 @@ class MemberProfileField field :typeD, type: Hash, default: {cross_lang: false} field :typeE, type: Hash, default: {} + belongs_to :member_info has_many :member_profile_field_values def markup_value @@ -35,9 +38,17 @@ class MemberProfileField get_data["cross_lang"] == "true" ? false : true end - + def self_defined_markup_options? + (self.member_info.method(self[:key].pluralize.to_sym) && self.member_info.method(self[:key].pluralize+"_for_"+markup)) rescue false + end + def option_list - if self[:option_list].nil? || (self[:option_list].empty?) + if self_defined_markup_options? + #Class need to have corresponding field and value agent + # Ex: For "status" the class must have field called "statuses" for the relation and "statuses_for_select" for the select function + method = self.attribute.role.method(self[:key].pluralize+"_for_"+markup) + return (method.call rescue {}) + elsif self[:option_list].nil? || (self[:option_list].empty?) return {} else return self[:option_list] @@ -58,7 +69,7 @@ class MemberProfileField end def role - self.attribute.role + self.member_info end def panel @@ -88,8 +99,37 @@ class MemberProfileField self.disabled end + def self.add_attribute_field(member_info,attribute_param, attribute_field_id=nil,field_status) + if field_status.eql?(true) + @attribute_field_counter = member_info.member_profile_fields.count rescue nil + @attribute_field = self.find(attribute_field_id) rescue nil + @attribute_field.update(attribute_param) + @attribute_field.save + @attribute_field[:af_count] = @attribute_field_counter + else + @attribute_field_counter = member_info.member_profile_fields.count rescue nil + @attribute_field = member_info.member_profile_fields.build(attribute_param) rescue nil + @attribute_field.save + @attribute_field[:af_count] = @attribute_field_counter + end + return @attribute_field + end + + protected + def check_option_list + self[:option_list] = self[panel]["option_list"] rescue nil + end + + def add_more_convert(opt) + + end + + def cross_lang_convert(opt) + + end + def check_cross_lang_convert(var,field) if self[field]["cross_lang"] != var["cross_lang"] case var["cross_lang"] diff --git a/app/models/member_profile_field_value.rb b/app/models/member_profile_field_value.rb index 205ad9a..d98d0cb 100644 --- a/app/models/member_profile_field_value.rb +++ b/app/models/member_profile_field_value.rb @@ -109,6 +109,17 @@ class MemberProfileFieldValue # 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) + @attribute_field_value.save + else + @attribute_field_value = member.member_profile_field_values.build(field_value_param) rescue nil + @attribute_field_value.save + end + return @attribute_field_value + end protected diff --git a/app/views/admin/member_infos/_form.html.erb b/app/views/admin/member_infos/_form.html.erb new file mode 100644 index 0000000..dccadb8 --- /dev/null +++ b/app/views/admin/member_infos/_form.html.erb @@ -0,0 +1,9 @@ +<%= label_tag "key","key", :class=>"muted" %> +<%= f.text_field :key, :value => @attribute.key,:class=>"input-large", placeholder: t(:key) %> + +<%= f.fields_for :title_translations do |f| %> + <% current_site.in_use_locales.each do |locale| %> + <%= label_tag "name-#{locale}", "#{t(:name)} (#{t(locale.to_s)})" %> + <%= f.text_field locale, :class => 'input-large', :value => (@attribute.title_translations[locale] rescue ''), placeholder: t(:name) %> + <% end %> +<% end %> \ No newline at end of file diff --git a/app/views/admin/member_infos/_index.html.erb b/app/views/admin/member_infos/_index.html.erb new file mode 100644 index 0000000..7da2f37 --- /dev/null +++ b/app/views/admin/member_infos/_index.html.erb @@ -0,0 +1,14 @@ + + + + + + + + + + <% @attributes.each do |attribute|%> + <%= render partial: 'admin/member_infos/member_info', locals: { attribute: attribute } %> + <% end %> + +
<%= t('key') %><%= t('title') %><%= t('title') %>
\ No newline at end of file diff --git a/app/views/admin/member_infos/_member_info.html.erb b/app/views/admin/member_infos/_member_info.html.erb new file mode 100644 index 0000000..a35fa0a --- /dev/null +++ b/app/views/admin/member_infos/_member_info.html.erb @@ -0,0 +1,14 @@ + + + <%= attribute.key %> + + <%= attribute.title %> +
+ +
+ + <%= attribute.key %> + \ No newline at end of file diff --git a/app/views/admin/member_infos/_new.html.erb b/app/views/admin/member_infos/_new.html.erb new file mode 100644 index 0000000..f0761e3 --- /dev/null +++ b/app/views/admin/member_infos/_new.html.erb @@ -0,0 +1,10 @@ +<%= form_for @attribute, url: admin_member_infos_path(id: @attribute.id), remote: true, :html => { :id => 'form_role_filter' } do |f| %> +
+ Add + <%= render :partial => 'form', :locals => {:f => f} %> +
+
+ <%= t(:cancel) %> + <%= f.submit t(:create_), class: 'btn btn-primary btn-small' %> +
+<% end %> \ No newline at end of file diff --git a/app/views/admin/member_infos/add_attribute_field.js.erb b/app/views/admin/member_infos/add_attribute_field.js.erb new file mode 100644 index 0000000..95ce3d4 --- /dev/null +++ b/app/views/admin/member_infos/add_attribute_field.js.erb @@ -0,0 +1 @@ +$('<%= j render :partial => 'shared/attribute_field/attribute_field', :collection => [@attribute_field] %>').appendTo('#attribute_field_list').hide().fadeIn(); \ No newline at end of file diff --git a/app/views/admin/member_infos/edit.html.erb b/app/views/admin/member_infos/edit.html.erb index 41720ba..464fbc3 100644 --- a/app/views/admin/member_infos/edit.html.erb +++ b/app/views/admin/member_infos/edit.html.erb @@ -14,20 +14,58 @@ <%= javascript_include_tag "lib/member/role-forms.js" %> <% end -%> -<%= form_for @attribute,:url => admin_member_info_path(@attribute) , :html => { :class=> "form-horizontal main-forms", :id=>'info' } do |f| %> -

Basic Info

- -
+<%= form_for @attribute,:url => admin_member_info_path(@attribute) , :html => { :class=> "form-horizontal main-forms", :id=>'info', remote: true } do |f| %> +

<%= t(eval(":#{@attribute_type}"))%>

+
+
+
+
+

Basic

+
+
+
+ +
+ + <% if @attribute.new_record? %> + <%= f.text_field :key, :placeholder => t(:key) %> + <% else %> +
<%= @attribute.key %>
+ <% end %> +
+
+ <%= render :partial=>"shared/attribute_field/placeholder_block",:locals=>{:values=>@attribute.title_translations,:class_ext=>"pull-left",:label_ext=>t(:item_name),:field_name=>"#{@attribute_type}[title_translations]"}%> +
+ +
+ + +
+
+
+
+
+
+

<%= @attribute.title %>

+
- + + <%= render :partial=>"shared/attribute_field/attribute_field",:collection=>@attribute.member_profile_fields%> +
<%= hidden_field_tag 'id', params[:role_id] if !params[:role_id].blank? %> - <%= f.submit t(:submit),:class=>"btn btn-primary"%> - <%= link_to t('cancel'), get_go_back, :class=>"btn" %> + <%= f.submit t(:save),:class=>"btn btn-primary"%> + <%= link_to t('done'), get_go_back, :class=>"btn" %>
diff --git a/app/views/admin/member_infos/index.html.erb b/app/views/admin/member_infos/index.html.erb index 3468581..f12d476 100644 --- a/app/views/admin/member_infos/index.html.erb +++ b/app/views/admin/member_infos/index.html.erb @@ -2,32 +2,12 @@ <%= render :partial => 'admin/members/side_bar' %> <% end %> - -
- - - - - - - - - - <% @attributes.each do |attribute| %> - - - - - - <% end %> - -
<%= t('key') %><%= t('title') %><%= t('type') %>
<%= attribute.key %> - <%= attribute.title %> -
- -
-
<%= attribute.key %>
+
+
+ <%= link_to content_tag(:i,t("new.attribute"),:class=>"icon-plus"),eval("new_admin_member_info_path"),:class=>"btn btn-primary open-slide"%> +
+
+ +
+ <%= render 'admin/member_infos/index' %>
diff --git a/app/views/admin/member_infos/index.js.erb b/app/views/admin/member_infos/index.js.erb new file mode 100644 index 0000000..dff4053 --- /dev/null +++ b/app/views/admin/member_infos/index.js.erb @@ -0,0 +1,4 @@ +// $("#role_filters_index").html("<%= j render 'index' %>") +location.reload(); +$.pageslide.close(); +openSlide(); \ No newline at end of file diff --git a/app/views/admin/member_infos/new.html.erb b/app/views/admin/member_infos/new.html.erb index 2b5787c..e3355a9 100644 --- a/app/views/admin/member_infos/new.html.erb +++ b/app/views/admin/member_infos/new.html.erb @@ -1,38 +1 @@ -<% content_for :side_bar do %> - <%= render :partial => 'admin/members/side_bar' %> -<% end %> - -<% content_for :page_specific_css do -%> - <%= stylesheet_link_tag "lib/wrap-nav.css" %> - <%= stylesheet_link_tag "lib/pageslide.css" %> - <%= stylesheet_link_tag "lib/main-forms.css" %> - <%= stylesheet_link_tag "lib/togglebox.css" %> -<% end -%> - -<% content_for :page_specific_javascript do -%> - <%= javascript_include_tag "lib/jquery.tmpl.min.js" %> - <%= javascript_include_tag "lib/member/role-forms.js" %> -<% end -%> - -<%= form_for @attribute,:url => admin_member_infos_path(@attribute) , :html => { :class=> "form-horizontal main-forms", :id=>'info' } do |f| %> -

Basic Info

- -
- -
- -
- -
- - <%= hidden_field_tag 'id', params[:role_id] if !params[:role_id].blank? %> - <%= f.submit t(:submit),:class=>"btn btn-primary"%> - <%= link_to t('cancel'), get_go_back, :class=>"btn" %> -
-
- -<% end %> - -<% content_for :page_specific_javascript do -%> - <%= render 'js/support_member_form_js' %> -<% end -%> \ No newline at end of file +<%= render 'new' %> \ No newline at end of file diff --git a/app/views/admin/member_infos/new.js.erb b/app/views/admin/member_infos/new.js.erb new file mode 100644 index 0000000..eaff01f --- /dev/null +++ b/app/views/admin/member_infos/new.js.erb @@ -0,0 +1 @@ +$("#form > form").replaceWith("<%= j render "form" %>"); \ No newline at end of file diff --git a/app/views/admin/member_infos/toggle_enable.js.erb b/app/views/admin/member_infos/toggle_enable.js.erb new file mode 100644 index 0000000..c42c474 --- /dev/null +++ b/app/views/admin/member_infos/toggle_enable.js.erb @@ -0,0 +1,3 @@ +$("#enable_<%= @attribute.id %>").toggle(); +$("#disable_<%= @attribute.id %>").toggle(); +$("#attribute_<%= @attribute.id %>").toggleClass('disable'); \ No newline at end of file diff --git a/app/views/admin/members/_info.html.erb b/app/views/admin/members/_info.html.erb index 16443a2..f1b836c 100644 --- a/app/views/admin/members/_info.html.erb +++ b/app/views/admin/members/_info.html.erb @@ -10,7 +10,7 @@ <% content_for :page_specific_javascript do -%> -<% ( params[:id].blank? ? @fname = 'new_attribute_values' : @fname = 'member_profile_field_values' ) %> +<% ( params[:id].blank? ? @fname = 'member_profile_field_value' : @fname = 'member_profile_field_values' ) %> console.log(<%= @fname%>);