diff --git a/app/assets/images/facebook-logo.png b/app/assets/images/facebook-logo.png new file mode 100644 index 0000000..9495a3d Binary files /dev/null and b/app/assets/images/facebook-logo.png differ diff --git a/app/controllers/facebook_controller.rb b/app/controllers/facebook_controller.rb new file mode 100644 index 0000000..58cf9a0 --- /dev/null +++ b/app/controllers/facebook_controller.rb @@ -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 \ 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" %> +
+
+
+ +
+
There was a problem in getting your user info, please try again later.
+ Close Window +
+ +
+
\ 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 @@ +
+
+
+ +
+
+
We have sent you a confirmation email on your email id. Please confirm to proceed
+ Home +
+
+
+ +
+
\ 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 @@ +
+
+
+ +
+ Form +
+
+ OR +
+
+ +
+ +
+ +
+
+ + 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 @@ +
+
+
+ +
+
+
+ +
+ <% @roles.each do |role| %> + + + <% end %> + +

+ + +
+
+
+ +
+
\ 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