From 791148ce1b9cf9d104a2b4c7677202940a3222b0 Mon Sep 17 00:00:00 2001 From: Harry Bomrah Date: Mon, 26 May 2014 16:43:51 +0800 Subject: [PATCH] sign up form and facebook connect --- app/assets/images/facebook-logo.png | Bin 0 -> 12262 bytes app/controllers/facebook_controller.rb | 117 ++++++++++++++++++ app/controllers/users_controller.rb | 56 ++++++++- app/helpers/orbit_helper.rb | 1 - app/models/Facebook.rb | 9 ++ app/models/member_profile.rb | 2 +- app/models/user.rb | 3 + app/views/facebook/server_redirect.html.erb | 12 ++ app/views/users/_form_page.html.erb | 130 ++++++++++++++++++++ app/views/users/confirmation.html.erb | 14 +++ app/views/users/form_page.html.erb | 35 ++++++ app/views/users/index.html.erb | 59 +++++++++ app/views/users/role_page.html.erb | 26 ++++ config/routes.rb | 19 +++ 14 files changed, 479 insertions(+), 4 deletions(-) create mode 100644 app/assets/images/facebook-logo.png create mode 100644 app/controllers/facebook_controller.rb create mode 100644 app/models/Facebook.rb create mode 100644 app/views/facebook/server_redirect.html.erb create mode 100644 app/views/users/_form_page.html.erb create mode 100644 app/views/users/confirmation.html.erb create mode 100644 app/views/users/form_page.html.erb create mode 100644 app/views/users/index.html.erb create mode 100644 app/views/users/role_page.html.erb diff --git a/app/assets/images/facebook-logo.png b/app/assets/images/facebook-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9495a3d5e2657acc97403de5bf88ecde898e8ca0 GIT binary patch literal 12262 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"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 \ No newline at end of file diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index cece132..ccdc23b 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -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 diff --git a/app/helpers/orbit_helper.rb b/app/helpers/orbit_helper.rb index 06bb95f..aa0ef8d 100644 --- a/app/helpers/orbit_helper.rb +++ b/app/helpers/orbit_helper.rb @@ -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 diff --git a/app/models/Facebook.rb b/app/models/Facebook.rb new file mode 100644 index 0000000..c8b6b4c --- /dev/null +++ b/app/models/Facebook.rb @@ -0,0 +1,9 @@ +class Facebook + include Mongoid::Document + include Mongoid::Timestamps + + field :fb_identifier + field :connected, type: Boolean + + belongs_to :user +end \ No newline at end of file diff --git a/app/models/member_profile.rb b/app/models/member_profile.rb index 4dace42..e92cea7 100644 --- a/app/models/member_profile.rb +++ b/app/models/member_profile.rb @@ -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 diff --git a/app/models/user.rb b/app/models/user.rb index 6ada238..d22f8ec 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -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} diff --git a/app/views/facebook/server_redirect.html.erb b/app/views/facebook/server_redirect.html.erb new file mode 100644 index 0000000..2327000 --- /dev/null +++ b/app/views/facebook/server_redirect.html.erb @@ -0,0 +1,12 @@ +<%= stylesheet_link_tag "sign_up" %> +
+
\ No newline at end of file diff --git a/app/views/users/_form_page.html.erb b/app/views/users/_form_page.html.erb new file mode 100644 index 0000000..1de6431 --- /dev/null +++ b/app/views/users/_form_page.html.erb @@ -0,0 +1,130 @@ + + <%#= devise_error_messages! %> + + +
+
+

<%=t(:sys_basic_form)%>

+
+
+ + +
+ <%= f.label t("users.avatar"),:class=>"control-label muted" %> +
+ +
+
+ <% if !@member_profile.nil? %> + <%= image_tag(@member_profile.avatar.thumb.url) if !@member_profile.avatar.nil? %> + <% else %> + <%= image_tag "person.png" %> + <% end %> +
+
+ + <%= t(:select_image) %> + <%= t(:change) %> + <%= f.file_field :avatar %> + + <%= t(:cancel) %> +
+
+
+ + +
+ <%= f.label t("users.first_name"),{:class=>"control-label muted", :func=>"field_label"} %> +
+
+
+
+ <% @site_in_use_locales.each_with_index do |locale, i| %> +
" 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 %> +
+ <% end %> +
+
+ <% @site_in_use_locales.each_with_index do |locale, i| %> + " href="#first_name_<%= locale %>" data-toggle="tab"><%= t(locale.to_s) %> + <% end %> + +
+
+
+
+
+ + +
+ <%= f.label t("users.last_name"),{:class=>"control-label muted", :func=>"field_label"} %> +
+
+
+
+ <% @site_in_use_locales.each_with_index do |locale, i| %> +
" 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 %> +
+ <% end %> +
+
+ <% @site_in_use_locales.each_with_index do |locale, i| %> + " href="#last_name_<%= locale %>" data-toggle="tab"><%= t(locale.to_s) %> + <% end %> + +
+
+
+
+
+ + +
+ <%= f.label t("users.email"),:class=>"control-label muted" %> +
+ <%= f.email_field :email %> +
+
+ + +
+ <%= f.label t("users.sid"),:class=>"control-label muted" %> +
+ <%= f.text_field :sid %> + <%= t("users.sid_note")%> +
+
+ + +
+ <%= f.label t("users.office_tel"),:class=>"control-label muted" %> +
+ <%= f.text_field :office_tel %> + <%= t("users.office_tel_note")%> +
+
+ + +
+ <%= f.label t("users.sex"),:class=>"control-label muted" %> +
+ + + +
+
+ +
+
diff --git a/app/views/users/confirmation.html.erb b/app/views/users/confirmation.html.erb new file mode 100644 index 0000000..2e3c330 --- /dev/null +++ b/app/views/users/confirmation.html.erb @@ -0,0 +1,14 @@ +
+ +
\ No newline at end of file diff --git a/app/views/users/form_page.html.erb b/app/views/users/form_page.html.erb new file mode 100644 index 0000000..36555cb --- /dev/null +++ b/app/views/users/form_page.html.erb @@ -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| %> + +
+
+ + <%#= f.error_messages %> + <%= render :partial => 'form_page', :locals => {:f => f}%> + +
+ +
+ +
+ +
+ +<% end -%> diff --git a/app/views/users/index.html.erb b/app/views/users/index.html.erb new file mode 100644 index 0000000..8e9c8db --- /dev/null +++ b/app/views/users/index.html.erb @@ -0,0 +1,59 @@ +
+ +
+ + diff --git a/app/views/users/role_page.html.erb b/app/views/users/role_page.html.erb new file mode 100644 index 0000000..c6e8b2d --- /dev/null +++ b/app/views/users/role_page.html.erb @@ -0,0 +1,26 @@ +
+
\ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index f77518b..20cb03c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -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