forked from saurabh/orbit4-5
sign up form and facebook connect
This commit is contained in:
parent
ab8b52e66f
commit
791148ce1b
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
|
@ -0,0 +1,117 @@
|
|||
require "net/http"
|
||||
require "uri"
|
||||
require 'json'
|
||||
|
||||
class FacebookController < ApplicationController
|
||||
|
||||
@@facebook_server = "http://fb.tp.rulingcom.com"
|
||||
|
||||
def register_fb
|
||||
user = User.find(params[:user])
|
||||
if !user.facebook
|
||||
user.build_facebook(fb_identifier: params[:identifier],connected: true)
|
||||
user.save!
|
||||
end
|
||||
render :json=>{"success"=>true,"user"=>user.facebook.fb_identifier}.to_json
|
||||
# respond_to do |format|
|
||||
# format.js
|
||||
# end
|
||||
end
|
||||
|
||||
def get_friends
|
||||
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)
|
||||
response = http.request(request)
|
||||
friends = response.body
|
||||
friends = JSON.parse(friends)
|
||||
output = Array.new
|
||||
friends.each do |friend|
|
||||
output << {"name"=>friend['name'],"identifier"=>friend['identifier']}
|
||||
end
|
||||
render :json=>{"success"=>true,"count"=>friends.count,"friends"=>output}.to_json
|
||||
else
|
||||
render :json=>{"success"=>false,"message"=>"User is not connected to facebook."}.to_json
|
||||
end
|
||||
end
|
||||
|
||||
def get_feed
|
||||
fb = current_user.facebook rescue nil
|
||||
if fb
|
||||
@url = "#{@@facebook_server}/get_feed?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)
|
||||
response = http.request(request)
|
||||
feed = response.body
|
||||
feed = JSON.parse(feed)
|
||||
output = Array.new
|
||||
feed.each do |f|
|
||||
output << {"story"=>f['raw_attributes']['story']}
|
||||
end
|
||||
render :json=>{"success"=>true,"count"=>feed.count,"feed"=>output}.to_json
|
||||
else
|
||||
render :json=>{"success"=>false,"message"=>"User is not connected to facebook."}.to_json
|
||||
end
|
||||
end
|
||||
|
||||
def disconnect
|
||||
user_fb = current_user.facebook
|
||||
if user_fb
|
||||
user_fb.destroy
|
||||
end
|
||||
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(temp_user.id)
|
||||
firstname = {}
|
||||
lastname = {}
|
||||
@site_valid_locales.each do |locale|
|
||||
firstname[locale] = user["first_name"]
|
||||
lastname[locale] = user["last_name"]
|
||||
end
|
||||
u.first_name_translations = firstname
|
||||
u.last_name_translations = lastname
|
||||
u.office_tel = user["phone"]
|
||||
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"=>"There was an error imporing data."}.to_json
|
||||
end
|
||||
|
||||
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
|
||||
@url = "#{@@facebook_server}/login?callback=#{request.protocol}#{request.host_with_port}/facebook/register_fb?user="+params[:user_id] rescue nil
|
||||
if !@url.nil?
|
||||
redirect_to @url
|
||||
else
|
||||
render :layout=> "devise"
|
||||
end
|
||||
end
|
||||
end
|
|
@ -20,7 +20,7 @@ class UsersController < ApplicationController
|
|||
def confirm_user
|
||||
user = User.confirm_email(params[:token])
|
||||
|
||||
redirect_to post_confirmation_users_path
|
||||
redirect_to users_path(:user_id => user.id.to_s)
|
||||
if user[:success].eql?("true")
|
||||
flash[:notice] = "You have confirmed successfully"
|
||||
else
|
||||
|
@ -28,7 +28,55 @@ class UsersController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
def post_confirmation
|
||||
def index
|
||||
if params[:user_id].nil?
|
||||
redirect_to "/users/sign_up"
|
||||
end
|
||||
@user = User.find(params[:user_id])
|
||||
end
|
||||
|
||||
def form_page
|
||||
@user = User.find(params[:user_id])
|
||||
@member_profile = @user.member_profile
|
||||
end
|
||||
|
||||
def basic_info_update
|
||||
@user = User.find(params[:id])
|
||||
member_profile = @user.member_profile
|
||||
if member_profile.update_attributes(basic_info_params)
|
||||
redirect_to users_role_page_path(:user_id => @user.id.to_s)
|
||||
else
|
||||
render :action=> "form_page"
|
||||
end
|
||||
end
|
||||
|
||||
def role_page
|
||||
@roles = []
|
||||
# @roles = Role.where(:disabled => false)
|
||||
@user_id = params[:user_id]
|
||||
end
|
||||
|
||||
def role_update
|
||||
user = User.find(params[:id])
|
||||
member_profile = user.member_profile
|
||||
if member_profile.update_attributes(params[:user])
|
||||
redirect_to "/users/sign_in"
|
||||
else
|
||||
@roles = []
|
||||
# @roles = Role.where(:disabled => false)
|
||||
render :action => "role_page"
|
||||
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
|
||||
|
||||
private
|
||||
|
@ -37,4 +85,8 @@ class UsersController < ApplicationController
|
|||
def user_params
|
||||
params.require(:user).permit(:password, :password_confirmation, :user_name, :member_profile_id, :email, :first_name, :last_name)
|
||||
end
|
||||
|
||||
def basic_info_params
|
||||
params.require(:member_profile).permit!
|
||||
end
|
||||
end
|
||||
|
|
|
@ -63,7 +63,6 @@ module OrbitHelper
|
|||
widget_categories = widget.categories
|
||||
finalpage = nil
|
||||
pages.each do |p|
|
||||
Rails.logger.info "*********************************" + p.name
|
||||
if p.categories == widget_categories
|
||||
finalpage = p
|
||||
end
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
class Facebook
|
||||
include Mongoid::Document
|
||||
include Mongoid::Timestamps
|
||||
|
||||
field :fb_identifier
|
||||
field :connected, type: Boolean
|
||||
|
||||
belongs_to :user
|
||||
end
|
|
@ -4,7 +4,7 @@ class MemberProfile
|
|||
|
||||
field :first_name, type: String, localize: true
|
||||
field :last_name, type: String, localize: true
|
||||
field :gender
|
||||
field :sex
|
||||
field :sid
|
||||
field :office_tel
|
||||
field :birthday, type: DateTime
|
||||
|
|
|
@ -8,6 +8,7 @@ class User
|
|||
field :password_digest, type: String
|
||||
field :confirmation_token, type: String
|
||||
field :reset_token, type: String
|
||||
field :approved, type: Boolean, :default => false
|
||||
has_many :assets
|
||||
has_many :user_actions, :dependent => :destroy
|
||||
|
||||
|
@ -18,6 +19,8 @@ class User
|
|||
belongs_to :workgroup
|
||||
has_many :authorizations
|
||||
belongs_to :member_profile
|
||||
has_one :facebook, :autosave => true, :dependent => :destroy
|
||||
|
||||
|
||||
validates :user_name, presence: true, uniqueness: true
|
||||
validates :password, presence: true, :on => :create, length: {:in => 8..20}
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
<%= 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>
|
|
@ -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 @member_profile.avatar.file rescue nil %>" data-provides="fileupload">
|
||||
<div class="fileupload-new thumbnail pull-left">
|
||||
<% if !@member_profile.nil? %>
|
||||
<%= image_tag(@member_profile.avatar.thumb.url) if !@member_profile.avatar.nil? %>
|
||||
<% 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_in_use_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 => (@member_profile.first_name_translations[locale] rescue nil), :placeholder=>"#{t("users.first_name")}" %>
|
||||
<% end %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
<div class="btn-group" data-toggle="buttons-radio">
|
||||
<% @site_in_use_locales.each_with_index do |locale, i| %>
|
||||
<a class="btn <%= ( i == 0 ) ? "active" : '' %>" href="#first_name_<%= locale %>" data-toggle="tab"><%= t(locale.to_s) %></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_in_use_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 => (@member_profile.member_profile.last_name_translations[locale] rescue nil), :placeholder=>"#{t("users.last_name")}" %>
|
||||
<% end %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
<div class="btn-group" data-toggle="buttons-radio">
|
||||
<% @site_in_use_locales.each_with_index do |locale, i| %>
|
||||
<a class="btn <%= ( i == 0 ) ? "active" : '' %>" href="#last_name_<%= locale %>" data-toggle="tab"><%= t(locale.to_s) %></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>
|
|
@ -0,0 +1,14 @@
|
|||
<section id="main-wrap">
|
||||
<div class="sign-up have-other-sign-in facebook-form">
|
||||
<div class="form">
|
||||
<h3 class="login-logo">Thank you for registering.</h3>
|
||||
<div class="form-block">
|
||||
<div class="form-list clearfix option-block">
|
||||
<div class="alert alert-success">We have sent you a confirmation email on your email id. Please confirm to proceed</div>
|
||||
<a href="<%= root_path %>">Home</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
|
@ -0,0 +1,35 @@
|
|||
<% 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 @member_profile, :url => users_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 -%>
|
|
@ -0,0 +1,59 @@
|
|||
<section id="main-wrap">
|
||||
<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">
|
||||
<a href="<%= users_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>
|
||||
<div class="line right"></div>
|
||||
</div>
|
||||
<a href="javascript:void(0);" class="facebook"><img src="assets/facebook-logo.png" /></a>
|
||||
</div>
|
||||
<div class="option-block msg alert hide"><h4></h4><br /><a href="<%= users_role_page_path(:user_id => @user.id.to_s) %>" class="btn btn-primary hide">Next</a></div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<script type="text/javascript">
|
||||
(function(){
|
||||
var facebookWindow = null,
|
||||
timeInterval = null;
|
||||
$("a.facebook").click(function(){
|
||||
facebookWindow = window.open('<%= facebook_server_path(:user_id=>@user.id.to_s) %>','login_window','height=668,width=1124,titlebar=0,statusbar=0,location=0');
|
||||
clearInterval(timeInterval);
|
||||
timeInterval = setInterval(function(){
|
||||
if( facebookWindow.closed ){
|
||||
clearInterval(timeInterval);
|
||||
$(".msg").removeClass('hide alert-danger').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!");
|
||||
}
|
||||
})
|
||||
}
|
||||
},1000);
|
||||
})
|
||||
|
||||
})()
|
||||
</script>
|
|
@ -0,0 +1,26 @@
|
|||
<section id="main-wrap">
|
||||
<div class="sign-up have-other-sign-in">
|
||||
<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="<%= users_role_update_path %>" method="post">
|
||||
<label>Roles</label>
|
||||
<div class="control-group clear">
|
||||
<% @roles.each do |role| %>
|
||||
<input type="checkbox" name="member_profile[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>
|
|
@ -40,6 +40,13 @@ Orbit::Application.routes.draw do
|
|||
|
||||
scope "(:locale)", locale: Regexp.new(locales.join("|")) do
|
||||
|
||||
get 'users/form' => "users#form_page"
|
||||
get 'users/role_page' => "users#role_page"
|
||||
get 'users/check_availability' => "users#check_availability"
|
||||
get 'users/confirmation' => "users#confirmation"
|
||||
post 'users/role_update' => "users#role_update"
|
||||
post 'users/basic_info_update' => "users#basic_info_update"
|
||||
|
||||
resources :users do
|
||||
collection do
|
||||
get 'confirm_user'
|
||||
|
@ -47,6 +54,18 @@ Orbit::Application.routes.draw do
|
|||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
# Facebook routes
|
||||
|
||||
post "/facebook/register_fb" => "facebook#register_fb"
|
||||
get "/facebook/get_friends" => "facebook#get_friends"
|
||||
get "/facebook/get_feed" => "facebook#get_feed"
|
||||
post "/facebook/disconnect" => "facebook#disconnect"
|
||||
get "/facebook/server" => "facebook#server_redirect"
|
||||
get "/facebook/profile_import" => "facebook#profile_import"
|
||||
|
||||
resources :passwords
|
||||
|
||||
namespace :admin do
|
||||
|
|
Loading…
Reference in New Issue