facebook login and import done
This commit is contained in:
		
							parent
							
								
									73b82bc177
								
							
						
					
					
						commit
						8d7e350c32
					
				|  | @ -46,6 +46,16 @@ | |||
| 	opacity: 0.8; | ||||
| } | ||||
| 
 | ||||
| .sign-up .role-label{ | ||||
| 	display: inline; | ||||
| 	margin-left: 3px; | ||||
| 	margin-right: 10px; | ||||
| } | ||||
| 
 | ||||
| .sign-up input[type=checkbox]{ | ||||
| 	margin-top: 0; | ||||
| } | ||||
| 
 | ||||
| .line{ | ||||
| 	border-bottom: 1px solid #EDEDED; | ||||
| } | ||||
|  |  | |||
|  | @ -1,9 +1,38 @@ | |||
| class BasicInfosController < ApplicationController | ||||
| 	layout "devise" | ||||
| 	def index | ||||
| 		if current_user.nil? | ||||
| 			redirect_to "/users/sign_up" | ||||
| 		end | ||||
| 		@user = current_user | ||||
| 	end | ||||
| 
 | ||||
| 	def form_page | ||||
| 		@user = User.find(params[:user_id]) | ||||
| 	end | ||||
| 
 | ||||
| 	def basic_info_update | ||||
| 		@user = User.find(params[:id]) | ||||
| 		if @user.update_attributes(params[:user]) | ||||
| 			redirect_to basic_infos_role_page_path(:user_id => @user.id.to_s) | ||||
| 		else | ||||
| 			render :action=> "form_page" | ||||
| 		end | ||||
| 	end | ||||
| 
 | ||||
| 	def role_page | ||||
| 		@roles = Role.where(:disabled => false) | ||||
| 		@user_id = params[:user_id] | ||||
| 	end | ||||
| 
 | ||||
| 	def role_update | ||||
| 		user = User.find(params[:id]) | ||||
| 		if user.update_attributes(params[:user]) | ||||
| 			redirect_to root_path | ||||
| 		else | ||||
| 			@roles = Role.where(:disabled => false) | ||||
| 			render :action => "role_page" | ||||
| 		end | ||||
| 	end | ||||
| 
 | ||||
| end | ||||
|  | @ -4,6 +4,8 @@ require 'json' | |||
| 
 | ||||
| class FacebookController< ApplicationController | ||||
| 
 | ||||
| 	@@facebook_server = "http://fb.tp.rulingcom.com" | ||||
| 
 | ||||
| 	def register_fb | ||||
| 		user = User.find(params[:user]) | ||||
| 		if !user.facebook | ||||
|  | @ -17,8 +19,9 @@ class FacebookController< ApplicationController | |||
|   	end | ||||
| 
 | ||||
|   	def get_friends | ||||
|   		if current_user.facebook | ||||
| 	  		@url = "http://fb.tp.rulingcom.com/get_friends?identifier=" + current_user.facebook.fb_identifier | ||||
|   		fb = current_user.facebook rescue nil | ||||
|   		if fb | ||||
| 	  		@url = "#{@@facebook_server}/get_friends?identifier=" + current_user.facebook.fb_identifier | ||||
| 		    uri = URI.parse(@url) | ||||
| 		    http = Net::HTTP.new(uri.host, uri.port) | ||||
| 		    request = Net::HTTP::Get.new(uri.request_uri) | ||||
|  | @ -43,8 +46,43 @@ class FacebookController< ApplicationController | |||
|   		render :json=>{"success"=>true}.to_json | ||||
|   	end | ||||
| 
 | ||||
|   	def profile_import | ||||
|   		temp_user = User.find(params[:user_id]) | ||||
|   		fb = temp_user.facebook rescue nil | ||||
|   		if fb | ||||
| 	  		@url = "#{@@facebook_server}/profile_import?identifier=" + fb.fb_identifier | ||||
| 		    uri = URI.parse(@url) | ||||
| 		    http = Net::HTTP.new(uri.host, uri.port) | ||||
| 		    request = Net::HTTP::Get.new(uri.request_uri) | ||||
| 		    response = http.request(request) | ||||
| 		    friends = response.body | ||||
| 		    data = JSON.parse(friends) | ||||
| 		    if data["success"] | ||||
| 		    	user = JSON.parse(data["user"]) | ||||
| 		    	u = User.find(current_user.id) | ||||
| 		    	u.first_name = user["first_name"] | ||||
| 		    	u.last_name = user["last_name"] | ||||
| 		    	u.office_tel = user["phone"] | ||||
| 		    	u.email = user["email"] | ||||
| 		    	u.sex = user["gender"] || "unknown" | ||||
| 		    	u.remote_avatar_url = user["picture"] if user["picture"] | ||||
| 		    	u.save! | ||||
| 	  			render :json=>{"success"=>true,"user"=>user}.to_json | ||||
| 	  		else | ||||
| 	  			render :json=>{"success"=>false,"message"=>data["message"]}.to_json | ||||
| 	  		end | ||||
| 
 | ||||
| 	  	else | ||||
| 	  		render :json=>{"success"=>false,"message"=>"User is not connected to facebook."}.to_json | ||||
| 	  	end | ||||
|   	end | ||||
| 
 | ||||
|   	def server_redirect | ||||
|   		# "http://fb.tp.rulingcom.com/login?callback=http://harry.tp.rulingcom.com/facebook/register_fb?user="+current_user.id.to_s rescue nil | ||||
|   		redirect_to "http://new.tp.rulingcom.com" | ||||
|   		@url = "#{@@facebook_server}/login?callback=#{request.protocol}#{request.host_with_port}/facebook/register_fb?user="+current_user.id.to_s rescue nil | ||||
|   		if !@url.nil? | ||||
|   			redirect_to @url | ||||
|   		else | ||||
|   			render :layout=> "devise" | ||||
|   		end | ||||
|   	end | ||||
| end | ||||
|  | @ -0,0 +1,130 @@ | |||
| 
 | ||||
|   <%#= devise_error_messages! %> | ||||
| 
 | ||||
| 	<input type="hidden" value="<%= @user.id.to_s %>" name="id" /> | ||||
|   <div class="attributes"> | ||||
|     <div class="attributes-header clearfix"> | ||||
|       <h4><%=t(:sys_basic_form)%></h4> | ||||
|     </div> | ||||
|     <div class="attributes-body"> | ||||
| 
 | ||||
|       <!-- Avatar --> | ||||
|       <div class="control-group"> | ||||
|         <%= f.label t("users.avatar"),:class=>"control-label muted" %> | ||||
|         <div class="controls"> | ||||
|           <!-- if this page editing please add class "fileupload-edit" --> | ||||
|           <div class="fileupload fileupload-new clearfix <%= 'fileupload-edit' if @user.avatar.file %>" data-provides="fileupload"> | ||||
|             <div class="fileupload-new thumbnail pull-left"> | ||||
|               <% if @user.avatar? %> | ||||
|                 <%= image_tag(@user.avatar.thumb.url) %> | ||||
|               <% else %> | ||||
|                 <%= image_tag "person.png" %> | ||||
|               <% end %> | ||||
|             </div> | ||||
|             <div class="fileupload-preview fileupload-exists thumbnail pull-left"></div> | ||||
|             <span class="btn btn-file"> | ||||
|               <span class="fileupload-new"><%= t(:select_image) %></span> | ||||
|               <span class="fileupload-exists"><%= t(:change) %></span> | ||||
|               <%= f.file_field :avatar %> | ||||
|             </span> | ||||
|             <a href="#" class="btn fileupload-exists" data-dismiss="fileupload"><%= t(:cancel) %></a> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
| 
 | ||||
|       <!-- First Name --> | ||||
|       <div class="control-group"> | ||||
|           <%= f.label t("users.first_name"),{:class=>"control-label muted", :func=>"field_label"} %> | ||||
|         <div class="controls add-input"> | ||||
|           <div class="add-target"> | ||||
|             <div class="input-append"> | ||||
|               <div class="tab-content"> | ||||
|                 <% @site_valid_locales.each_with_index do |locale, i| %> | ||||
|                 <div class="tab-pane fade <%= ( i == 0 ) ? "active in" : '' %>" id="first_name_<%= locale %>"> | ||||
|                     <%= f.fields_for :first_name_translations do |f| %> | ||||
|                       <%= f.text_field locale, :value => (@user.first_name_translations[locale] rescue nil), :placeholder=>"#{t("users.first_name")}" %> | ||||
|                     <% end %> | ||||
|                 </div> | ||||
|                 <% end %> | ||||
|               </div> | ||||
|               <div class="btn-group" data-toggle="buttons-radio"> | ||||
|                 <% @site_valid_locales.each_with_index do |locale, i| %> | ||||
|                   <a class="btn <%= ( i == 0 ) ? "active" : '' %>" href="#first_name_<%= locale %>" data-toggle="tab"><%= I18nVariable.from_locale(locale) %></a> | ||||
|                 <% end %> | ||||
|                  | ||||
|               </div> | ||||
|             </div> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
| 
 | ||||
|       <!-- Last Name --> | ||||
|       <div class="control-group"> | ||||
|           <%= f.label t("users.last_name"),{:class=>"control-label muted", :func=>"field_label"} %> | ||||
|         <div class="controls add-input"> | ||||
|           <div class="add-target"> | ||||
|             <div class="input-append"> | ||||
|               <div class="tab-content"> | ||||
|                 <% @site_valid_locales.each_with_index do |locale, i| %> | ||||
|                 <div class="tab-pane fade <%= ( i == 0 ) ? "active in" : '' %>" id="last_name_<%= locale %>"> | ||||
|                     <%= f.fields_for :last_name_translations do |f| %> | ||||
|                       <%= f.text_field locale, :value => (@user.last_name_translations[locale] rescue nil), :placeholder=>"#{t("users.last_name")}" %> | ||||
|                     <% end %> | ||||
|                 </div> | ||||
|                 <% end %> | ||||
|               </div> | ||||
|               <div class="btn-group" data-toggle="buttons-radio"> | ||||
|                 <% @site_valid_locales.each_with_index do |locale, i| %> | ||||
|                   <a class="btn <%= ( i == 0 ) ? "active" : '' %>" href="#last_name_<%= locale %>" data-toggle="tab"><%= I18nVariable.from_locale(locale) %></a> | ||||
|                 <% end %> | ||||
|                 | ||||
|               </div> | ||||
|             </div> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
| 
 | ||||
|       <!-- Mail --> | ||||
|       <div class="control-group"> | ||||
|         <%= f.label t("users.email"),:class=>"control-label muted" %> | ||||
|         <div class="controls add-input"> | ||||
|           <%= f.email_field :email %> | ||||
|         </div> | ||||
|       </div> | ||||
| 
 | ||||
|       <!-- ID Number --> | ||||
|       <div class="control-group"> | ||||
|         <%= f.label t("users.sid"),:class=>"control-label muted" %> | ||||
|         <div class="controls add-input"> | ||||
|           <%= f.text_field :sid %> | ||||
|           <span class="help-block"><%= t("users.sid_note")%></span> | ||||
|         </div> | ||||
|       </div> | ||||
| 
 | ||||
|       <!-- Office Tel Number --> | ||||
|       <div class="control-group"> | ||||
|         <%= f.label t("users.office_tel"),:class=>"control-label muted" %> | ||||
|         <div class="controls add-input"> | ||||
|           <%= f.text_field :office_tel %> | ||||
|           <span class="help-block"><%= t("users.office_tel_note")%></span> | ||||
|         </div> | ||||
|       </div> | ||||
| 
 | ||||
|       <!-- Gender --> | ||||
|       <div class="control-group"> | ||||
|         <%= f.label t("users.sex"),:class=>"control-label muted" %> | ||||
|         <div class="controls"> | ||||
|           <label class="radio inline"> | ||||
|             <%= f.radio_button :sex, "male" %><%= t('users.male')%> | ||||
|           </label> | ||||
|           <label class="radio inline"> | ||||
|             <%= f.radio_button :sex, "female" %><%= t('users.female')%> | ||||
|           </label> | ||||
|           <label class="radio inline"> | ||||
|             <%= f.radio_button :sex, "unknown" %><%= t('users.unknown')%> | ||||
|           </label> | ||||
|         </div> | ||||
|       </div> | ||||
| 
 | ||||
|     </div> | ||||
|   </div> | ||||
|  | @ -1 +1,35 @@ | |||
| <%= stylesheet_link_tag "sign_up" %> | ||||
| <% 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/fileupload.css" %> | ||||
|     <%= stylesheet_link_tag "lib/togglebox.css" %> | ||||
| <% end -%> | ||||
| <% content_for :page_specific_javascript do -%> | ||||
|     <%= javascript_include_tag "lib/jquery-ui-1.10.3.custom.min.js" %> | ||||
|     <%= javascript_include_tag "lib/jquery.tmpl.min.js" %> | ||||
|     <%= javascript_include_tag "lib/bootstrap-fileupload.js" %> | ||||
|     <%= javascript_include_tag "lib/bootstrap-datetimepicker.js" %> | ||||
|     <%= javascript_include_tag "lib/datetimepicker/date.time.picker.js" %> | ||||
|     <%= javascript_include_tag "lib/member/textarea-lang-btn.js" %> | ||||
|     <%= javascript_include_tag "lib/member/role-forms.js" %> | ||||
| <% end -%> | ||||
| 
 | ||||
| 
 | ||||
| <%= form_for @user, :url => basic_infos_basic_info_update_path, :html => { :multipart => true , :class=>"form-horizontal main-forms", :id=>"user-forms"} do |f| %> | ||||
| 
 | ||||
|   <fieldset> | ||||
|     <div id="basic-area" class="input-area"> | ||||
| 
 | ||||
|     <%= f.error_messages %> | ||||
|     <%= render :partial => 'form_page', :locals => {:f => f}%> | ||||
| 
 | ||||
|     </div> | ||||
| 
 | ||||
|     <div class="form-actions"> | ||||
|       <input type="submit" value="Next" class="btn btn-primary" /> | ||||
|     </div> | ||||
| 
 | ||||
|   </fieldset>   | ||||
| 
 | ||||
| <% end -%> | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ | |||
| 		<div class="form"> | ||||
| 			<h3 class="login-logo">Please select a method for Basic Info</h3> | ||||
| 			<div class="option-block"> | ||||
| 				<a href="<%= basic_infos_form_path %>" class="btn btn-info btn-large">Form</a> | ||||
| 				<a href="<%= basic_infos_form_path(:user_id=>@user.id.to_s) %>" class="btn btn-info btn-large">Form</a> | ||||
| 				<div class="or"> | ||||
| 					<div class="line left"></div> | ||||
| 					<span>OR</span> | ||||
|  | @ -12,7 +12,7 @@ | |||
| 				</div> | ||||
| 				<a href="javascript:void(0);" class="facebook"><img src="assets/facebook-logo.png" /></a> | ||||
| 			</div> | ||||
| 			<div class="option-block msg"></div> | ||||
| 			<div class="option-block msg alert hide"><h4></h4><br /><a href="<%= basic_infos_role_page_path(:user_id => @user.id.to_s) %>" class="btn btn-primary hide">Next</a></div> | ||||
| 		</div> | ||||
| 
 | ||||
| 	</div> | ||||
|  | @ -24,14 +24,32 @@ | |||
| 		timeInterval = null; | ||||
| 	$("a.facebook").click(function(){ | ||||
| 		facebookWindow = window.open('<%= facebook_server_path %>','login_window','height=668,width=1124,titlebar=0,statusbar=0,location=0'); | ||||
| 		clearInterval(timeInterval); | ||||
| 		timeInterval = setInterval(function(){ | ||||
| 			if( facebookWindow.closed ){ | ||||
| 				clearInterval(timeInterval); | ||||
| 				$.getJSON("/facebook/get_friends",function(data){ | ||||
| 					if(!data.success){ | ||||
| 						$(".msg").text(data.message); | ||||
| 					}else{ | ||||
| 						$(".msg").text("Import Succesfull!"); | ||||
| 				$(".msg").removeClass('hide').find("h4").text("Importing,please wait..."); | ||||
| 				$.ajax({ | ||||
| 					url : "/facebook/profile_import", | ||||
| 					data : {"user_id":"<%= @user.id.to_s %>"}, | ||||
| 					type : "get", | ||||
| 					dataType : "json", | ||||
| 					success : function(data){ | ||||
| 						if(!data.success){ | ||||
| 							$(".msg").removeClass('hide').addClass('alert-danger').find("h4").text(data.message); | ||||
| 						}else{ | ||||
| 							var msg = ""; | ||||
| 							if (data.user.first_name){ | ||||
| 								msg+= "Welcome " + data.user.first_name + ", your data is successfully imported!" | ||||
| 							}else{ | ||||
| 								msg = "Import Succesfull!" | ||||
| 							} | ||||
| 							$(".msg").removeClass('hide').addClass('alert-success').find("h4").text(msg); | ||||
| 							$(".msg a").removeClass('hide'); | ||||
| 						} | ||||
| 					}, | ||||
| 					error : function(){ | ||||
| 						$(".msg").removeClass('hide').addClass('alert-danger').find("h4").text("Error connecting the server!"); | ||||
| 					} | ||||
| 				}) | ||||
| 			} | ||||
|  |  | |||
|  | @ -0,0 +1,32 @@ | |||
| <%= stylesheet_link_tag "sign_up" %> | ||||
| <section id="main-wrap"> | ||||
| 	<div class="sign-up have-other-sign-in"> | ||||
| 
 | ||||
| 		<% flash.each do |key, msg| %> | ||||
| 			<%= content_tag :p, msg, :class => [key, "alert alert-error in fade"] %> | ||||
| 		<% end %> | ||||
| 
 | ||||
| 		<div class="form"> | ||||
| 			<h3 class="login-logo">Please select a role</h3> | ||||
| 			<div class="form-block"> | ||||
| 				<div class="form-list clearfix option-block"> | ||||
| 					<form action="<%= basic_infos_role_update_path %>" method="post"> | ||||
| 						<label>Roles</label> | ||||
| 						<div class="control-group clear"> | ||||
| 							<% @roles.each do |role| %> | ||||
| 								<input type="checkbox" name="user[role_ids][]" value="<%= role.id.to_s %>" /> | ||||
| 								<label class="role-label"> | ||||
| 									<%= role.title %> | ||||
| 								</label> | ||||
| 							<% end %> | ||||
| 							<input type="hidden" name="id" value="<%= @user_id %>" | ||||
| 						</div> | ||||
| 						<h3 class="line"></h3> | ||||
| 						<input type="submit" value="Finish" class="btn btn-primary pull-right" /> | ||||
| 					</form> | ||||
| 				</div> | ||||
| 			</div> | ||||
| 		</div> | ||||
| 
 | ||||
| 	</div> | ||||
| </section> | ||||
|  | @ -0,0 +1,13 @@ | |||
| 
 | ||||
| <%= stylesheet_link_tag "sign_up" %> | ||||
| <section id="main-wrap"> | ||||
| 	<div class="sign-up have-other-sign-in"> | ||||
| 		<div class="form"> | ||||
| 			<h3 class="login-logo">Error</h3> | ||||
| 			<div class="option-block"> | ||||
| 			<div class="option-block msg">There was a problem in getting your user info, please try again later.</div> | ||||
| 			<a href="javascript:void(0);" onclick="window.close();">Close Window</a> | ||||
| 		</div> | ||||
| 
 | ||||
| 	</div> | ||||
| </section> | ||||
|  | @ -19,6 +19,9 @@ Orbit::Application.routes.draw do | |||
|   match 'load_orbit_bar' => 'pages#load_orbit_bar' | ||||
|   get 'basic_infos' => "basic_infos#index" | ||||
|   get 'basic_infos/form' => "basic_infos#form_page" | ||||
|   get 'basic_infos/role_page' => "basic_infos#role_page" | ||||
|   post 'basic_infos/role_update' => "basic_infos#role_update" | ||||
|   match 'basic_infos/basic_info_update' => "basic_infos#basic_info_update" | ||||
|   # routes for admin | ||||
|   namespace :admin do | ||||
|     match 'user_actions' => 'user_actions#index' | ||||
|  | @ -321,6 +324,7 @@ Orbit::Application.routes.draw do | |||
|   match "/facebook/get_friends" => "facebook#get_friends" | ||||
|   match "/facebook/disconnect" => "facebook#disconnect" | ||||
|   match "/facebook/server" => "facebook#server_redirect" | ||||
|   match "/facebook/profile_import" => "facebook#profile_import" | ||||
|   match "/desktop/wallpaper_upload" => "desktop#wallpaper_upload" | ||||
| 
 | ||||
|   #match '/desktop_orbit/eventajaxload' => 'desktop_publications#create_journal' | ||||
|  |  | |||
|  | @ -6,7 +6,7 @@ | |||
|     "type": "sftp", | ||||
| 
 | ||||
|     "save_before_upload": true, | ||||
|     "upload_on_save": false, | ||||
|     "upload_on_save": true, | ||||
|     "sync_down_on_open": false, | ||||
|     "sync_skip_deletes": false, | ||||
|     "confirm_downloads": false, | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue