Member Module registration fixed, plugins registration fixed, member frontend

This commit is contained in:
Saurabh Bhatia 2014-06-24 14:07:59 +08:00
parent 1b9a344611
commit 91a431374f
24 changed files with 372 additions and 41 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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"]

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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] }

View File

@ -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

View File

@ -0,0 +1,25 @@
<div class="index-members">
<h3 class="index-title">
<span>{{widget-title}}</span>
</h3>
<div class="row" module="member" data-level="0" data-list="members">
<div class="index-content col-sm-6">
<div class="boxes-inner">
<div class="index-pic">
<img src="{{img_src}}" alt="">
</div>
<section class="index-part">
<h4 class="index-part-title">
<a href="{{link_to_show}}">{{name}}</a>
</h4>
<div data-level="1" data-list="roles">
<p class="index-part-subtitle">{{role}}</p>
</div>
<p class="index-part-subtitle">{{email}}</p>
<a class="more" href="{{link_to_show}}">Read More »</a>
</section>
</div>
</div>
</div>
</div>
{{pagination_goes_here}}

View File

@ -0,0 +1,65 @@
<article class="show" module="member">
<div class="post-name">
<h1>{{name}}</h1>
</div>
<small>
<span>
Roles :
<span data-list="roles" data-level="0">
<a href="#"><span class="label label-info">{{role}}</span></a>
</span>
</span>
</small>
<div data-list="role_fields" data-level="0">
<p>{{role_field_title}} : {{role_field_value}}</p>
</div>
<table>
<thead>
<tr class="table">
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>id number:</td>
<td>{{id}}</td>
</tr>
<tr>
<td>e-mail:</td>
<td>{{email}}</td>
</tr>
<tr>
<td>gender:</td>
<td>{{gender}}</td>
</tr>
<tr>
<td>birthday:</td>
<td>{{birthday}}</td>
</tr>
<tr>
<td>office telephone:</td>
<td>{{office}}</td>
</tr>
</tbody>
</table>
<div data-list="custom_fields" data-level="0">
<p>{{custom_field_title}} : {{custom_field_value}}</p>
</div>
<section class="post">
<p class="pic"><img src="{{img_src}}" alt=""></p>
<h3>Autobiography:</h3>
<p>{{autobiography}}</p>
</section>
<div data-list="plugins" data-level="0">
<ul>
<li>{{plugin_title}} : <div data-list="plugin_data" data-level="1"><ul><li><a href="{{link_to_show}}">{{data_title}}</a></li></ul></div></li>
</ul>
</div>
</article>

View File

@ -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? %>
</ul>
</div>
</td>

View File

@ -21,6 +21,12 @@
</div>
</div>
<% role.attribute_fields.asc(:_id).each do |rf|%>
<%= rf.block_helper(@member,@form_index,false,"role")%>
<% @form_index = @form_index +1 %>
<% end %>
</div>
</div>

View File

@ -3,7 +3,6 @@
<% end %>
<% content_for :right_nav do %>
<div class="searchClear pull-left" style="clear: left;">
<form action="" method="get">
<%= text_field_tag 'mq',( params[:mq] ? params[:mq] : '' ), {:id=>'filter-input', :class => "search-query input-medium", :placeholder => 'Search'} %>

View File

@ -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| %>
<fieldset>
<div id="basic-area" class="input-area">

View File

@ -19,7 +19,7 @@
<h4><%= @member.name%></h4>
<small class="muted"><%= @member.email %></small>
<div class="btn-group">
<%= link_to("<i class='icon-edit'></i> #{t(:edit)}".html_safe,edit_admin_member_path(@member.id),:class=>"btn btn-mini" ) if current_user.is_admin?%>
<%= link_to("<i class='icon-edit'></i> #{t(:edit)}".html_safe,edit_admin_member_path(@member),:class=>"btn btn-mini" ) if current_user.is_admin?%>
<%= link_to("<i class='icons-cycle'></i> #{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("<i class='icons-lock-open'></i> #{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%>
</div>
@ -33,6 +33,7 @@
</div>
</div>
<div id="member-module">
<div id="module-navbar">
<div class="navbar">

View File

@ -1,2 +1 @@
<h1>Members#index</h1>
<p>Find me in app/views/members/index.html.erb</p>
<%= render_view %>

View File

@ -1,2 +1 @@
<h1>Members#show</h1>
<p>Find me in app/views/members/show.html.erb</p>
<%= render_view %>

View File

@ -8,4 +8,5 @@ OrbitApp.registration "Member", type: 'ModuleApp' do
intro "I am intro"
update_info 'some update_info'
frontend_enabled
icon_class_no_sidebar "icons-user"
end

View File

@ -16,7 +16,6 @@ Orbit::Application.routes.draw do
get "/page_parts/info" => "page_parts#info"
get "/page_parts/edit_sub_part" => "page_parts#edit_sub_part"
resources :pages
resources :page_parts do
member do
@ -68,6 +67,11 @@ Orbit::Application.routes.draw do
get "/facebook/profile_import" => "facebook#profile_import"
resources :passwords
resources :members do
collection do
get ':name-:uid', to: 'members#show', as: :display
end
end
namespace :admin do
resources :dashboards do
@ -162,8 +166,6 @@ Orbit::Application.routes.draw do
end
end
resources :members
resources :sites do
get 'mail_setting'
get 'site_info'

View File

@ -2,6 +2,7 @@ require 'orbit_app/helper/renderer'
require 'orbit_app/helper/side_bar_renderer'
require "orbit_app/helper/context_link_renderer"
require 'orbit_app/register_module'
require "orbit_app/plugin/registration"
require 'orbit_app/module/registration'
require 'orbit_app/module/side_bar'

View File

@ -31,7 +31,7 @@ module OrbitApp
end
class RegisteredModule
attr_reader :name,:key,:base_path, :module_label,:widget_methods,:authorizable_models,:is_authorizable, :data_count, :widget_settings
attr_reader :name,:key,:base_path, :module_label,:widget_methods,:authorizable_models,:is_authorizable, :data_count, :widget_settings, :icon_class_no_sidebar
def initialize(name,&block)
@name = name
@ -47,6 +47,7 @@ module OrbitApp
@is_categorizable = false
@is_frontend_enabled = false
@data_count = nil
@icon_class_no_sidebar = nil
block.arity < 1 ? instance_eval(&block) : block.call(self) if block_given?
setup_module_app
end
@ -62,7 +63,7 @@ module OrbitApp
module_app.save(:validate=>false)
end
%w{data_count module_label category base_url version organization author intro update_info}.each do |field|
%w{data_count module_label icon_class_no_sidebar category base_url version organization author intro update_info}.each do |field|
define_method(field){|var| instance_variable_set( "@" + field, var)}
end
@ -99,7 +100,7 @@ module OrbitApp
end
def icon_class
@side_bar.get_icon_class
(@side_bar.get_icon_class rescue nil || @get_icon_class_no_sidebar)
end
def taggable(model)
@ -160,6 +161,14 @@ module OrbitApp
@data_count
end
def icon_class_no_sidebar(icon_class)
@icon_class_no_sidebar = icon_class
end
def get_icon_class_no_sidebar
@icon_class_no_sidebar
end
def personal_plugin(params) #setter for personal_plugin from init
Plugin::Registration.new_from_module_app(@name,@key,@base_path,params)
end