form validations and ajax check plus user approval done
This commit is contained in:
		
							parent
							
								
									1584eeaf27
								
							
						
					
					
						commit
						f1c2e29bf1
					
				|  | @ -23,3 +23,4 @@ uploads/**/* | |||
| *.supported | ||||
| mongoid.yml | ||||
| *. | ||||
| sftp-config.json | ||||
|  |  | |||
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 1.6 KiB | 
|  | @ -1,10 +1,12 @@ | |||
| .sign-up{ | ||||
| 	margin: 150px auto 0; | ||||
|     position: relative; | ||||
|     text-align: center; | ||||
|     width: 500px; | ||||
|     /*text-align: center;*/ | ||||
|     width: 600px; | ||||
| } | ||||
| .sign-up.facebook-form{ | ||||
| 	text-align: center; | ||||
| } | ||||
| 
 | ||||
| .sign-up .form{ | ||||
| 	background-color: #FFFFFF; | ||||
|     box-shadow: 0 10px 20px #CBCBCB; | ||||
|  | @ -52,10 +54,36 @@ | |||
| 	margin-right: 10px; | ||||
| } | ||||
| 
 | ||||
| .sign-up .notify{ | ||||
| 	font-size: 15px; | ||||
| } | ||||
| 
 | ||||
| .notify.alert{ | ||||
| 	padding: 5px 10px 5px 3px; | ||||
| } | ||||
| 
 | ||||
| .notify .icon-ok{ | ||||
| 	color: green; | ||||
| 	margin-right: 3px; | ||||
| 	margin-left: 3px; | ||||
| } | ||||
| 
 | ||||
| .notify .icon-remove{ | ||||
| 	color: red; | ||||
| 	margin-right: 3px; | ||||
| 	margin-left: 3px; | ||||
| } | ||||
| 
 | ||||
| .sign-up input[type=checkbox]{ | ||||
| 	margin-top: 0; | ||||
| } | ||||
| 
 | ||||
| .sign-up .error{ | ||||
| 	border-color: #E9322D; | ||||
| 	box-shadow: 0 0 6px #F8B987; | ||||
| 	color: #B94A48; | ||||
| } | ||||
| 
 | ||||
| .line{ | ||||
| 	border-bottom: 1px solid #EDEDED; | ||||
| } | ||||
|  | @ -64,3 +92,9 @@ | |||
| 	text-align: left; | ||||
| } | ||||
| 
 | ||||
| .loader{ | ||||
| 	width:100px; | ||||
| 	margin-left: 3px; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -7,6 +7,18 @@ class Admin::UsersNewInterfaceController <  OrbitMemberController | |||
|   open_for_user :only => [:setting_account, :edit_user_data, :update] | ||||
|   open_for_visitor :only => [:index, :show] | ||||
| 
 | ||||
|   def registration_approval | ||||
|     page_num = params[:page] || 1 | ||||
|     @users = User.approval_pending.page(page_num).per(12).desc("_id") | ||||
|   end | ||||
| 
 | ||||
|   def approve_registration | ||||
|     user = User.find(params[:users_new_interface_id]) | ||||
|     user.approved = true | ||||
|     user.save | ||||
|     redirect_to admin_users_new_interface_registration_approval_path | ||||
|   end | ||||
| 
 | ||||
|   def index | ||||
|     get_tags | ||||
|     get_sub_roles | ||||
|  | @ -386,6 +398,8 @@ class Admin::UsersNewInterfaceController <  OrbitMemberController | |||
|     @users = User.not_guest_user | ||||
|   end | ||||
| 
 | ||||
| 
 | ||||
|    | ||||
|   protected | ||||
|   def get_tags | ||||
|     @sub_role_tags = SubRoleTag.all | ||||
|  |  | |||
|  | @ -35,4 +35,20 @@ class BasicInfosController < ApplicationController | |||
| 		end | ||||
| 	end | ||||
| 
 | ||||
| 	def check_availability | ||||
| 		response = {} | ||||
| 		case params[:type] | ||||
| 		when "user_id" | ||||
| 			response["success"] = User.where(:user_id => params[:value]).count > 0 ? false : true | ||||
| 		when "user_email" | ||||
| 			response["success"] = User.where(:email => params[:value]).count > 0? false : true | ||||
| 		end | ||||
| 		render :json => response.to_json | ||||
| 	end | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| end | ||||
|  | @ -69,14 +69,12 @@ class FacebookController< ApplicationController | |||
| 		    	u.first_name_translations = firstname | ||||
| 		    	u.last_name_translations = lastname | ||||
| 		    	u.office_tel = user["phone"] | ||||
| 		    	u.email = user["email"] | ||||
| 		    	# u.email = "xyz@zyx.com" | ||||
| 		    	u.sex = user["gender"] || "unknown" | ||||
| 		    	u.remote_avatar_url = user["picture"] if user["picture"] | ||||
| 		    	if u.save | ||||
| 	  				render :json=>{"success"=>true,"user"=>user}.to_json | ||||
| 	  			else | ||||
| 	  				render :json=>{"success"=>false,"message"=>"Email already occupied."}.to_json | ||||
| 	  				render :json=>{"success"=>false,"message"=>"There was an error imporing data."}.to_json | ||||
| 	  			end | ||||
| 
 | ||||
| 	  		else | ||||
|  |  | |||
|  | @ -17,6 +17,7 @@ class User | |||
|   field :last_name, localize: true | ||||
|   field :email | ||||
|   field :sex, :default => 'unknown' | ||||
|   field :approved, type: Boolean, :default => false | ||||
|   field :office_tel | ||||
|   field :cache_dept,type: Hash | ||||
|   field :status_record,type: Hash | ||||
|  | @ -56,7 +57,8 @@ class User | |||
|   before_save :assign_default_position, :if => :assign_default_position? | ||||
|   before_save :rebuild_status_record | ||||
|   scope :remote_account, where(:nccu_id.ne => nil) | ||||
|   scope :not_guest_user, all_of(:name.ne => "guest") | ||||
|   scope :not_guest_user, all_of(:name.ne => "guest").and(:approved => true) | ||||
|   scope :approval_pending, where(:approved => false) | ||||
| 
 | ||||
|   validates :user_id, | ||||
|             :presence => { :message => I18n.t("users.user_id_not_null") } ,  | ||||
|  |  | |||
|  | @ -0,0 +1,29 @@ | |||
|   <%  | ||||
|       if not_approved_listing.sex == 'male' | ||||
|         @user_sex = 'gender-man' | ||||
|       elsif not_approved_listing.sex == 'female' | ||||
|         @user_sex = 'gender-woman' | ||||
|       else | ||||
|         @user_sex = 'gender-none' | ||||
|       end | ||||
|     %> | ||||
|     <tr id="<%= dom_id not_approved_listing %>"> | ||||
|       <td class="<%= @user_sex %>"></td> | ||||
|       <td> | ||||
|         <% not_approved_listing.roles.each do |rf| %> | ||||
|         <% @roledata = Role.find(rf.id) %> | ||||
|         <span class="label label-info"><%= @roledata.title %></span> | ||||
|         <% end %> | ||||
|       </td> | ||||
|       <td> | ||||
|         <%= link_to (not_approved_listing.name && not_approved_listing.name != not_approved_listing.email ? not_approved_listing.name : not_approved_listing.user_id),admin_users_new_interface_path(not_approved_listing) %> | ||||
|         <div class="quick-edit"> | ||||
|           <ul class="nav nav-pills"> | ||||
|             <%= content_tag(:li, link_to(t(:edit),edit_admin_users_new_interface_path(not_approved_listing))) if is_admin? %> | ||||
|             <%= content_tag(:li, link_to(t(:approve),admin_users_new_interface_approve_registration_path(not_approved_listing))) if is_admin? %> | ||||
|             <%= content_tag(:li, link_to(t(:delete),admin_users_new_interface_path(not_approved_listing, :at=>params[:at]), :confirm => t(:sure?), :method => :delete, :class=>"text-error", :remote => true)) if is_admin? %> | ||||
|           </ul> | ||||
|         </div> | ||||
|       </td> | ||||
|       <td><%= not_approved_listing.email %></td> | ||||
|     </tr> | ||||
|  | @ -29,7 +29,7 @@ | |||
|         <%= content_tag :li, link_to((content_tag(:span, t(:all_member))), admin_users_new_interface_index_path), :class => active_for_action('users_new_interface', 'index') %> | ||||
|         <%= content_tag :li, link_to((content_tag(:span, t(:add_member))), new_admin_users_new_interface_path), :class => active_for_action('users_new_interface', 'new') if (is_admin? rescue nil) %> | ||||
|         <%= content_tag :li, link_to((content_tag(:span, t(:member_authorization))), '#'), :class => active_for_action('users_new_interfacexx', 'index')  if (is_admin? rescue nil) %> | ||||
|         <%= content_tag :li, link_to((content_tag(:span, t(:member_registration))), '#'), :class => active_for_action('users_new_interfacexx', 'index')  if (is_admin? rescue nil) %> | ||||
|         <%= content_tag :li, link_to((content_tag(:span, t(:member_registration))), admin_users_new_interface_registration_approval_path), :class => active_for_action('users_new_interface', 'registration_approval')  if (is_admin? rescue nil) %> | ||||
|         <%= content_tag :li, link_to((content_tag(:span, t(:member_role))),admin_roles_path ), :class => active_for_action('roles', 'index')  if (is_admin? rescue nil) %> | ||||
|         <%= content_tag :li, link_to((content_tag(:span, t(:member_info))), edit_admin_info_path(Info.first.id.to_s)), :class => active_for_action('users_new_interfacexx', 'index') if (is_admin? rescue nil) and Info.first %> | ||||
|       <% end -%> | ||||
|  |  | |||
|  | @ -0,0 +1,31 @@ | |||
| <% content_for :side_bar do %> | ||||
|   <%= render :partial => 'admin/users_new_interface/side_bar' %> | ||||
| <% end %> | ||||
| 
 | ||||
| <%= render :partial => "js_and_css"%> | ||||
| 
 | ||||
| <div id="list-view"> | ||||
|   <table id="member-list" class="table main-list"> | ||||
|     <thead> | ||||
|       <tr class="sort-header"> | ||||
|         <th class="gender"></th> | ||||
|         <th class="span3"><a href="#">Roles</a></th> | ||||
|         <th class="span4"><a href="#">Name</a></th> | ||||
|         <th><a href="#">Email</a></th> | ||||
|       </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|       <% if !@users.blank? %> | ||||
|         <%= render :partial => "not_approved_listing",:collection=> @users %> | ||||
|       <% else %> | ||||
|         <tr><td colspan="4" style="text-align:center">Hooray! No pending registration approvals left.</td></tr> | ||||
|       <% end %> | ||||
|     </tbody> | ||||
|   </table> | ||||
| </div> | ||||
| <div class="bottomnav clearfix"> | ||||
|    <div class="pagination pagination-centered"> | ||||
|     <%= paginate @users, :params => {:inner => false} %> | ||||
|   </div> | ||||
| </div> | ||||
| 
 | ||||
|  | @ -1,6 +1,6 @@ | |||
| <%= stylesheet_link_tag "sign_up" %> | ||||
| <section id="main-wrap"> | ||||
| 	<div class="sign-up have-other-sign-in"> | ||||
| 	<div class="sign-up have-other-sign-in facebook-form"> | ||||
| 		<div class="form"> | ||||
| 			<h3 class="login-logo">Please select a method for Basic Info</h3> | ||||
| 			<div class="option-block"> | ||||
|  |  | |||
|  | @ -8,28 +8,41 @@ | |||
| 
 | ||||
| 		<div class="form"> | ||||
| 			<h3 class="login-logo">Sign up with Orbit</h3> | ||||
| 			<div class="form-block"> | ||||
| 			<div class="form-block option-block"> | ||||
| 				<div class="form-list clearfix"> | ||||
| 
 | ||||
| 					<%= form_for resource, :as => resource_name, :url => registration_path(resource_name), :html => {:class => 'content'} do |f| %> | ||||
| 						<label for="user_email">User ID</label> | ||||
| 					<%= form_for resource, :as => resource_name, :url => registration_path(resource_name), :html => {:class => 'content form-horizontal'} do |f| %> | ||||
| 						<div class="control-group clear"> | ||||
| 							<%= f.text_field :user_id, :placeholder => t("users.user_id"), :id=>"user_email" %> | ||||
| 							<label class="control-label" for="user_email">User ID</label> | ||||
| 							<div class="controls"> | ||||
| 								<%= f.text_field :user_id, :placeholder => t("users.user_id"), :id=>"user_id",:class=>"availibility" %> | ||||
| 								<span class="loader hide"><img src="/assets/availability-check-loader.gif" /></span> | ||||
| 								<span class="notify not-ok hide alert alert-danger"><i class="icon-remove"></i>Not Available</span> | ||||
| 								<span class="notify ok alert hide alert-success"><i class="icon-ok"></i>Available</span> | ||||
| 							</div> | ||||
| 						</div> | ||||
| 						<div class="control-group clear"> | ||||
| 							<label class="control-label" for="user_email">Email</label> | ||||
| 							<div class="controls"> | ||||
| 								<%= f.email_field :email, :placeholder => t("users.email"), :id=>"user_email", :class=>"availibility" %> | ||||
| 								<span class="loader hide"><img src="/assets/availability-check-loader.gif" /></span> | ||||
| 								<span class="notify not-ok hide alert alert-danger"><i class="icon-remove"></i>Not Available</span> | ||||
| 								<span class="notify ok hide alert alert-success"><i class="icon-ok"></i>Available</span> | ||||
| 							</div> | ||||
| 						</div> | ||||
| 
 | ||||
| 						<label for="user_email">Email</label> | ||||
| 						<div class="control-group clear"> | ||||
| 							<%= f.email_field :email, :placeholder => t("users.email"), :id=>"user_email" %> | ||||
| 						</div> | ||||
| 
 | ||||
| 						<label for="user_password">Password</label> | ||||
| 						<div class="control-group clear"> | ||||
| 							<label class="control-label" for="user_password">Password</label> | ||||
| 							<div class="controls"> | ||||
| 								<%= f.password_field :password, :placeholder => t(:dots), :id=>"user_password" %> | ||||
| 							</div> | ||||
| 						<label for="user_password">Confirm Password</label> | ||||
| 						</div> | ||||
| 						<div class="control-group clear"> | ||||
| 							<label class="control-label" for="user_password">Confirm Password</label> | ||||
| 							<div class="controls"> | ||||
| 								<%= f.password_field :password, :placeholder => t(:dots), :id=>"confirm_user_password" %> | ||||
| 							</div> | ||||
| 						</div> | ||||
| 						<h3 class="line"></h3> | ||||
| 						<div class="pull-right"> | ||||
| 							<%= content_tag :button, t(:register), :type => :submit, :class => 'btn btn-primary' %> | ||||
|  | @ -45,3 +58,82 @@ | |||
| 
 | ||||
| 	</div> | ||||
| </section> | ||||
| 
 | ||||
| <script type="text/javascript"> | ||||
| (function(){ | ||||
| 	var validated = false; | ||||
| 
 | ||||
| 	$("form.content").submit(function(event) { | ||||
| 		var form = $(this); | ||||
| 		form.find("input").removeClass('error'); | ||||
| 		form.find("input[type=text], input[type=email], input[type=password]").each(function(){ | ||||
| 			validated = $(this).val() ? true : false; | ||||
| 			if(!validated){ | ||||
| 				return false; | ||||
| 			} | ||||
| 		}) | ||||
| 		if(validated){ | ||||
| 			form.find("span.not-ok").each(function(){ | ||||
| 				validated = $(this).hasClass('hide') ? true : false; | ||||
| 				if(!validated)return false; | ||||
| 			}) | ||||
| 		} | ||||
| 		if(validated){ | ||||
| 			validated = form.find("input[type=password]:eq(0)").val() == form.find("input[type=password]:eq(1)").val() ? true : false; | ||||
| 			if(!validated){ | ||||
| 				form.find("input[type=password]").addClass('error'); | ||||
| 			} | ||||
| 		} | ||||
| 		if(!validated){ | ||||
| 			return false;; | ||||
| 		} | ||||
| 	}); | ||||
| 
 | ||||
| 	$(".availibility").blur(function(){ | ||||
| 		var type = $(this).attr("id"), | ||||
| 			loader = $(this).parent().find('.loader'), | ||||
| 			elem = $(this), | ||||
| 			value = $(this).val() || null; | ||||
| 
 | ||||
| 		elem.parent().find("span").addClass('hide'); | ||||
| 
 | ||||
| 		var checkAvailability = function(){ | ||||
| 			loader.removeClass('hide'); | ||||
| 			elem.removeClass('error'); | ||||
| 			$.ajax({ | ||||
| 				url : "<%= basic_infos_check_availability_path %>", | ||||
| 				data : {"type" : type, "value" : value}, | ||||
| 				dataType : "json", | ||||
| 				type : "get", | ||||
| 				success : function(data){ | ||||
| 					loader.addClass('hide'); | ||||
| 					if( data.success == true ){ | ||||
| 						elem.parent().find(".ok").removeClass('hide'); | ||||
| 					}else{ | ||||
| 						elem.parent().find(".not-ok").removeClass('hide'); | ||||
| 						elem.addClass('error'); | ||||
| 					} | ||||
| 				} | ||||
| 			}) | ||||
| 		} | ||||
| 
 | ||||
| 		if( value ){ | ||||
| 			if(type == "user_email" && validateEmail(value)){ | ||||
| 				checkAvailability(); | ||||
| 			}else if(type == "user_id"){ | ||||
| 				checkAvailability(); | ||||
| 			}else{ | ||||
| 				elem.addClass('error'); | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		 | ||||
| 	}) | ||||
| 	var validateEmail = function(email) {  | ||||
| 	    var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA	-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; | ||||
| 	    return re.test(email); | ||||
| 	}  | ||||
| })(); | ||||
| </script> | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -20,6 +20,7 @@ Orbit::Application.routes.draw do | |||
|   get 'basic_infos' => "basic_infos#index" | ||||
|   get 'basic_infos/form' => "basic_infos#form_page" | ||||
|   get 'basic_infos/role_page' => "basic_infos#role_page" | ||||
|   get 'basic_infos/check_availability' => "basic_infos#check_availability" | ||||
|   post 'basic_infos/role_update' => "basic_infos#role_update" | ||||
|   match 'basic_infos/basic_info_update' => "basic_infos#basic_info_update" | ||||
|   # routes for admin | ||||
|  | @ -220,6 +221,8 @@ Orbit::Application.routes.draw do | |||
|     end | ||||
|     resources :users | ||||
| 
 | ||||
|     match "users_new_interface/registration_approval" => "users_new_interface#registration_approval" | ||||
| 
 | ||||
|     resources :users_new_interface do | ||||
|       member do | ||||
|         get 'temp_edit' | ||||
|  | @ -234,6 +237,8 @@ Orbit::Application.routes.draw do | |||
|       match "edit_user_data" => "users_new_interface#edit_user_data" ,:as => :edit_user_data | ||||
|       match "setting_account" => "users_new_interface#setting_account" ,:as => :setting_account | ||||
|       match "edit_privilege" => "users_new_interface#edit_privilege" ,:as => :edit_privilege | ||||
|       match "approve_registration" => "users_new_interface#approve_registration", :as => :approve_registration | ||||
| 
 | ||||
|     end | ||||
| 
 | ||||
|     resources :member_selects do | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue