for user new interface, member role is working.

This commit is contained in:
Matthew K. Fu JuYuan authored and chris committed 2012-10-26 11:27:37 +08:00
1 parent b301f6522a
commit bd0d975014
15 files changed
+312 -90

No files matched your search

+26 -1
View File
@@ -22,10 +22,35 @@ class AttributeField
belongs_to :attribute
# belongs_to :role
has_many :attribute_values
has_many :attribute_values,:autosave => true, :dependent => :destroy
# validates_uniqueness_of :key
def self_defined_markup_options?
(self.attribute.role.method(self[:key].pluralize.to_sym) && self.attribute.role.method(self[:key].pluralize+"_for_"+markup)) rescue false
end
def markup_value=(var)
if !self_defined_markup_options?
self[:markup_value] = (eval(var) rescue {})
end
end
def markup_value
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[:markup_value].nil? || (self[:markup_value].empty?)
return {}
else
return self[:markup_value]
end
end
def markup_options=(var)
self[:markup_options] = (eval(var) rescue {})
end
+3 -2
View File
@@ -14,6 +14,7 @@ class AttributeValue
# NO_MULTI_TAG = ["select","date","radio_button","checkbox","date_durnation"]
def check_key
binding.pry if attribute_field.nil?
self.key = attribute_field.key
end
@@ -30,7 +31,7 @@ class AttributeValue
when "text_field"
self.attribute_field.locale ? self[locale] : self[:value]
when "select"
markup_values = eval(self.attribute_field.markup_value)
markup_values = self.attribute_field.self_defined_markup_options? ? self.attribute_field.markup_value : eval(self.attribute_field.markup_value)
markup_values[self[:value]][locale.to_s] rescue 'NoData'
when "text_area"
self.attribute_field.locale ? self[locale] : self[:value]
@@ -62,7 +63,7 @@ class AttributeValue
if self.attribute_field.markup == "select"
self[:value]
else
self[:value].keys
self[:value].keys rescue self[:value]
end
end
end
+7
View File
@@ -27,4 +27,11 @@ class Role
self.first(:conditions => {:key => key})
end
def statuses_for_select
data = self.statuses.map do |t|
[t.id.to_s,t.title_translations]
end
Hash[data]
end
end
+1 -1
View File
@@ -5,7 +5,7 @@ class Status
has_and_belongs_to_many :users
field :key
belongs_to :role
# has_and_belongs_to_many :sub_roles
+63 -29
View File
@@ -34,27 +34,60 @@ class User
accepts_nested_attributes_for :attribute_values, :allow_destroy => true
before_create :initialize_desktop
before_save :check_status_record
before_save :rebuild_status_record
before_save :save_roles
scope :remote_account, where(:nccu_id.ne => nil)
validates_uniqueness_of :email,:message=> I18n.t("devise.registrations.email_not_unique")
# def new_attribute_values=(vars)
# binding.pry
# end
# def new_attribute_values(vars)
# binding.pry
# end
def rebuild_sub_roles_from_attribute_values!(attribute_values)
# attribute_fields = AttributeField.find attribute_values.collect{|t| t[1][:attribute_field_id]}
# self.sub_roles = attribute_fields.collect{|t| t.attribute if t.attribute.is_a? SubRole}.compact.uniq
## # class << self
## def initialize
## self.define_method("asd"){ p "hi"}
## sub_roles.each do |sr|
## sr_ids = sr.attribute_fields.collect{|t| t.id.to_s}
## self.define_method("attribute_values_for_"+sr.key.to_s) {
## AttributeValue.where(user_id: id ).in(attribute_field_id: sr_ids)
## }
## end
## yield self
## end
# end
# def initialize
# binding.pry
# # yield self
# end
def get_attribute_value(attribute_field)
attribute_values.where(attribute_field_id: attribute_field.id).first
end
def get_sub_roles_by_role(role)
sub_roles.where(role_id: role.id)
end
def disable_sub_role=(var)
var[:id].each do |id,val|
# binding.pry if id == '5052c5b22b5c49ab02000004'
if (val=="true")
self.sub_roles = self.sub_roles.reject{|t| t.id.to_s==id}
elsif(val=="false")
self.sub_roles << SubRole.find(id)
end
end
end
def set_sub_role(sub_role_id,status_id)
self.sub_roles << SubRole.find(sub_role_id)
self.status_record.store(sub_role_id,status_id)
self.status_record.merge!(Hash[sub_role_id,status_id])
end
# def get_status(*params)
@@ -80,11 +113,18 @@ class User
def self.find_by_status_and_sub_role_key(sub_role_key,status_key) #Query for users by using specific sub_role and status key
sr = ::SubRole.first({conditions: { key: sub_role_key }})
status = ::Status.first({conditions:{role_id: sr.role.id,key: status_key}})
find_by_status(sr.id,status.id)
find_by_subrole_and_status(sr.id,status.id)
end
def self.find_by_status(sub_role_id,status_id) #Query for users by using specific sub_role and status key buy within ID
User.where("status_record.#{sub_role_id}" => status_id)
def self.find_by_subrole_and_status(sub_role_id,status_id) #Query for users by using specific sub_role and status key by within ID
User.where("status_record.#{sub_role_id}" => status_id,:sub_role_ids.in => [ sub_role_id ])
end
def self.find_by_status(status_id)
status = ::Status.find status_id
::SubRole.where({role_id: status.role.id.to_s,disabled: false}).collect{|sr|
find_by_subrole_and_status(sr.id.to_s,status_id)
}.uniq!
end
def create_dept_cache
@@ -143,23 +183,17 @@ class User
end
protected
def save_roles
self.roles = self.sub_roles.collect{|t| t.role}.uniq
def save_roles
self.roles = self.sub_roles.collect{|t| t.role}.uniq
end
def rebuild_status_record
self.status_record = {}
self.attribute_values.reject{|t| t.key!='status'}.each do |status|
# binding.pry
set_sub_role(status.attribute_field.attribute.id.to_s,status[:value]) rescue nil
end
end
def check_status_record
roles = sub_roles.collect{|t| t.role}.uniq #get all role from sub_roles
sub_roles_ary = sub_roles.collect{|t| t.id.to_s}
self.status_record = status_record.keep_if{|sub_role_id, status_id|
includeing = sub_roles_ary.include?(sub_role_id)
valide = false
if includeing
sub_role = SubRole.find sub_role_id
valide = sub_role.role.statuses.include? (Status.find status_id)
end
(includeing and valide)
} rescue {}
end
end
end