Commit 90169376 by Hoang Nam Nguyen

'Finish register,login pages'

parent 2baa6eb2
...@@ -15,6 +15,7 @@ gem 'whenever', :require => false ...@@ -15,6 +15,7 @@ gem 'whenever', :require => false
gem "figaro" gem "figaro"
gem 'devise' gem 'devise'
gem 'bcrypt', '3.1.11' gem 'bcrypt', '3.1.11'
gem 'carrierwave', '~> 1.0'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 5.1.3' gem 'rails', '~> 5.1.3'
# Use mysql as the database for Active Record # Use mysql as the database for Active Record
...@@ -28,6 +29,8 @@ gem 'uglifier', '>= 1.3.0' ...@@ -28,6 +29,8 @@ gem 'uglifier', '>= 1.3.0'
# See https://github.com/rails/execjs#readme for more supported runtimes # See https://github.com/rails/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby # gem 'therubyracer', platforms: :ruby
gem 'font-awesome-sass', '~> 4.7.0'
# Use CoffeeScript for .coffee assets and views # Use CoffeeScript for .coffee assets and views
gem 'coffee-rails', '~> 4.2' gem 'coffee-rails', '~> 4.2'
# Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks # Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks
......
...@@ -13,4 +13,5 @@ ...@@ -13,4 +13,5 @@
//= require rails-ujs //= require rails-ujs
//= require turbolinks //= require turbolinks
//= require jquery-3.2.1.min //= require jquery-3.2.1.min
//= require popper
//= require_tree . //= require_tree .
@import "font-awesome-sprockets";
@import "font-awesome";
@import "bootstrap";
@import "custom";
...@@ -121,3 +121,21 @@ input { ...@@ -121,3 +121,21 @@ input {
color: #a94442; color: #a94442;
} }
} }
footer.page-footer .footer-copyright {
overflow: hidden;
height: 50px;
line-height: 50px;
color: rgba(255,255,255,.6);
background-color: rgba(0,0,0,.2);
text-align: center;
font-size: .9rem;
}
footer.page-footer {
color: #fff;
}
.dark-grey-text {
color: #4f4f4f !important;
}
\ No newline at end of file
class ApplicationController < ActionController::Base class ApplicationController < ActionController::Base
protect_from_forgery with: :exception protect_from_forgery with: :exception
include SessionsHelper
end end
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by(email: params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
log_in user
redirect_to my_page_path(id: user.id)
else
flash[:danger] = 'Invalid email/password combination'
render 'new'
end
end
def destroy
log_out
redirect_to root_url
end
end
...@@ -25,35 +25,33 @@ class UsersController < ApplicationController ...@@ -25,35 +25,33 @@ class UsersController < ApplicationController
@user = User.find(params[:id]) @user = User.find(params[:id])
@user.validate_name = true @user.validate_name = true
@user.validate_password = true @user.validate_password = true
uploadedFile = params[:user][:cv]
File.open(Rails.root.join('public','cv',uploadedFile.original_filename), 'wb') do |f|
f.write(uploadedFile.read)
end
if @user.update_attributes(user_params) if @user.update_attributes(user_params)
flash[:success] = "Sign up success" flash[:success] = "Sign up success"
render 'my_page' redirect_to my_page_path
else else
render 'edit' render 'edit'
end end
end end
# def create def my_page
# @user = User.find(params[:id]) @user = User.find(params[:id])
# @user.validate_name = true end
# @user.validate_password = true
# if @user.update_attributes(user_params)
# flash[:success] = "Welcome to the Ven Jobs!"
# redirect_to @user
# else
# render 'new'
# end
# end
# def login def download_cv
# @user = User.find(params[:id]) @user = User.find(params[:id])
# end downloadFile = @user.cv
send_file downloadFile.file.file
end
private private
def user_params def user_params
params.require(:user).permit(:name, :email, :password, params.require(:user).permit(:name, :email, :password,
:password_confirmation) :password_confirmation, :cv)
end end
def email_params def email_params
......
module SessionsHelper
def log_in(user)
session[:user_id] = user.id
end
def current_user
@current_user ||= User.find_by(id: session[:user_id])
end
def logged_in?
!current_user.nil?
end
def log_out
session.delete(:user_id)
@current_user = nil
end
end
class User < ApplicationRecord class User < ApplicationRecord
attr_accessor :validate_name, :validate_password, :validate_confirm attr_accessor :validate_name, :validate_password, :validate_confirm
mount_uploader :cv, CvUploader
before_save { self.email = email.downcase } before_save { self.email = email.downcase }
validates :name, presence: true, length: { maximum: 200 }, if: :validate_name validates :name, presence: true, length: { maximum: 200 }, if: :validate_name
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
......
<footer class="blockquote-footer">
<nav> <!--Footer-->
ZiGExN VeNtura 2017 <footer class="page-footer center-on-small-only blue-grey lighten-5 pt-0 mt-5 ct_local">
</nav> <div style="background-color: #21d192;">
\ No newline at end of file <div class="container">
<div class="row py-4 d-flex align-items-center">
<!--Grid column-->
<div class="col-12 col-md-5 text-left mb-4 mb-md-0">
<h6 class="mb-0 text-white text-center text-md-left">Get connected with us on social networks!</h6>
</div>
<!--Grid column-->
<div class="col-12 col-md-7 text-center text-md-right">
<span class="glyphicon glyphicon-ok"></span>
<!--Facebook-->
<a class="icons-sm fb-ic ml-0"><i class="fa fa-facebook text-white mr-lg-4"> </i></a>
<!--Twitter-->
<a class="icons-sm tw-ic"><i class="fa fa-twitter text-white mr-lg-4"> </i></a>
<!--Google +-->
<a class="icons-sm gplus-ic"><i class="fa fa-google-plus text-white mr-lg-4"> </i></a>
<!--Linkedin-->
<a class="icons-sm li-ic"><i class="fa fa-linkedin text-white mr-lg-4"> </i></a>
<!--Instagram-->
<a class="icons-sm ins-ic"><i class="fa fa-instagram text-white mr-lg-4"> </i></a>
</div>
</div>
</div>
</div>
<!--Footer Links-->
<div class="container mt-5 mb-4 text-center text-md-left">
<div class="row mt-3">
<!--First column-->
<div class="col-md-3 col-lg-4 col-xl-3 mb-r dark-grey-text">
<h6 class="title font-bold"><strong>Zigexn Ventura</strong></h6>
<hr class="teal accent-3 mb-4 mt-0 d-inline-block mx-auto" style="width: 60px;">
<p>
ZIGExN tại Nhật là một tập đoàn chuyên về các dịch vụ internet. Nằm trong top những công ty phát triển nhanh nhất về internet, ZIGExN đã được Delloite trao tặng danh hiệu Japan Technology Fast 50 vào những năm 2011, 2012.</p>
</div>
<!--/.First column-->
<!--Second column-->
<div class="col-md-2 col-lg-2 col-xl-2 mx-auto mb-r dark-grey-text">
<h6 class="title font-bold"><strong>Products</strong></h6>
<hr class="teal accent-3 mb-4 mt-0 d-inline-block mx-auto" style="width: 60px;">
<p><a href="#!" class="dark-grey-text">MDBootstrap</a></p>
<p><a href="#!" class="dark-grey-text">MDWordPress</a></p>
<p><a href="#!" class="dark-grey-text">BrandFlow</a></p>
<p><a href="#!" class="dark-grey-text">Bootstrap Angular</a></p>
</div>
<!--/.Second column-->
<!--Third column-->
<div class="col-md-3 col-lg-2 col-xl-2 mx-auto mb-r dark-grey-text">
<h6 class="title font-bold"><strong>Useful links</strong></h6>
<hr class="teal accent-3 mb-4 mt-0 d-inline-block mx-auto" style="width: 60px;">
<p><a href="#!" class="dark-grey-text">Your Account</a></p>
<p><a href="#!" class="dark-grey-text">Become an Affiliate</a></p>
<p><a href="#!" class="dark-grey-text">Shipping Rates</a></p>
<p><a href="#!" class="dark-grey-text">Help</a></p>
</div>
<!--/.Third column-->
<!--Fourth column-->
<div class="col-md-4 col-lg-3 col-xl-3 dark-grey-text">
<h6 class="title font-bold"><strong>Contact</strong></h6>
<hr class="teal accent-3 mb-4 mt-0 d-inline-block mx-auto" style="width: 60px;">
<p><i class="fa fa-home mr-3"></i>Lầu 4, MIRAE BUSINESS CENTER 268 Tô Hiến Thành, Phường 15
Quận 10, Tp. Hồ Chí Minh, Việt Nam</p>
<p><i class="fa fa-envelope mr-3"></i> info@example.com</p>
<p><i class="fa fa-phone mr-3"></i> (84)-838-633-399</p>
<p><i class="fa fa-print mr-3"></i> <i class="text-primary">info@zigexn.vn</i></p>
</div>
<!--/.Fourth column-->
</div>
</div>
<!-- Copyright-->
<div class="footer-copyright">
<div class="container-fluid text-center text-white">
<strong>© 2017 Zigexn VenTura: </strong> <a href="http://<zigexn class"><strong>Zigexn.vn</strong></a>
</div>
</div>
</footer>
<!--/.Footer-->
...@@ -7,15 +7,52 @@ ...@@ -7,15 +7,52 @@
<div class="col-6 col-md-4"> <div class="col-6 col-md-4">
<ul class="nav navbar-nav" > <ul class="nav navbar-nav" >
<li><%= link_to 'Login','#', class: 'btn btn-info distance mt-4 slide'%></li> <!-- Set up method log-out -->
<li><%= link_to 'Favorite','#',class: 'btn btn-info distance mt-1 slide'%></li> <% if logged_in? %>
<!--Set up icon button logout-->
<li>
<%= link_to logout_path ,class: 'btn btn-info distance mt-4 slide',method: :delete,data: { confirm: 'Are you sure?' } do %>
<i class="fa fa-sign-out"></i> Log Out
<% end %>
</li>
<!--end-->
<% else %>
<!--Set up icon button login-->
<li>
<%= link_to login_user_path ,class: 'btn btn-info distance mt-4 slide' do %>
<i class="fa fa-sign-in"></i> Login
<% end %>
</li>
<!--end-->
<% end %>
<!--end set-up-->
<li>
<%= link_to '#',class: 'btn btn-info distance mt-1 slide' do %>
<i class="fa fa-heart"></i> Favorite
<% end %>
</li>
</ul> </ul>
</div> </div>
<div class="col-6 col-md-4"> <div class="col-6 col-md-4">
<ul class="nav navbar-nav" id="slidebar"> <ul class="nav navbar-nav" id="slidebar">
<li><%= link_to 'Register',confirm_email_path, class: 'btn btn-info distance mt-4 no-gutters'%></li> <% if @current_user.nil? %>
<li><%= link_to 'History','#',class: 'btn btn-info distance mt-1 no-gutters'%></li> <li>
<p class="btn btn-info distance mt-4 no-gutters">
<%= link_to confirm_email_path, class: 'btn btn-info distance mt-4 no-gutters' do %>
<i class="fa fa-user-circle-o"></i> Register
</p>
<% end %>
</li>
<% end %>
<li>
<%= link_to '#',class: 'btn btn-info distance mt-1 no-gutters' do %>
<i class="fa fa-history"></i> History
<% end %>
</li>
</ul> </ul>
</div> </div>
</div> </div>
...@@ -13,9 +13,6 @@ ...@@ -13,9 +13,6 @@
<%= yield %> <%= yield %>
<%= render 'layouts/footer' %> <%= render 'layouts/footer' %>
</div> </div>
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
</body> </body>
</html> </html>
<% provide(:title,"User login") %>
<h1 class="text-center">Log in</h1>
<div class="row ml-5 mt-5">
<div class="col-md-10 col-md-offset-3">
<!--set message errors -->
<% flash.each do |key, value| %>
<div class="alert alert-<%= key %>"><%= value %></div>
<% end %>
<!--end set -->
<!--set field all -->
<%= form_for(:session, url: login_path) do |f| %>
<div class="row mt-3">
<!--set field email -->
<div class="col-md-2 mb-5">
<strong><i><%= f.label :email %></i></strong>
</div>
<!--set field email -->
<div class="col-md-10">
<div class="input-group">
<span class="input-group-addon mb-5"><i class="fa fa-user fa" aria-hidden="true"></i></span>
<%= f.email_field :email, class: 'form-control mb-5' %>
</div>
</div>
<!--end field email -->
<!--set field password -->
<div class="col-md-2">
<strong><i><%= f.label :password, "Password" %></i></strong>
</div>
<!--set field password -->
<div class="col-md-10">
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-lock" aria-hidden="true"></i></span>
<%= f.password_field :password, class: 'form-control' %>
</div>
</div>
<!--end set field password -->
</div>
<!--end set field all -->
<p class="ml-5 mt-3"><%= link_to "Forgot password ?",'#'%></p>
<!--set button -->
<div class="row ml-5 text-center">
<div class="col-md-5 ml-5">
<%= button_tag(type: "submit", class: "btn btn-lg btn-success") do %>
<span class="fa fa-sign-in"></span> Log In
<% end %>
</div>
<div class="col-md-4">
<%= link_to confirm_email_path ,class: "btn btn-lg btn-success" do %>
<i class="fa fa-sign-in"></i> Register
<% end %>
</div>
<!--end set button -->
</div>
<% end %>
</div>
</div>
...@@ -8,8 +8,8 @@ ...@@ -8,8 +8,8 @@
<%= form_tag job_index_path, method: :get do %> <%= form_tag job_index_path, method: :get do %>
<div class="row search_field mt-3"> <div class="row search_field mt-3">
<%= search_field_tag 's', nil, placeholder: 'Search...', class: 'col-10 form-control' %> <%= search_field_tag 's', nil, placeholder: 'Search...', class: 'col-10 form-control'%>
<%= submit_tag 'Search', class: 'col-1 btn btn-success form-control ml-4' %> <%= submit_tag 'Search', class: 'col-1 btn btn-success form-control ml-4'%>
</div> </div>
<% end %> <% end %>
......
<% provide(:title, 'User information Form') %> <% provide(:title, 'User information Form') %>
<h1 class="text-success text-center">Register</h1> <h1 class="text-success text-center">My Page</h1>
<div class="row ml-5"> <div class="row ml-5">
<div class="col-md-10 col-md-offset-3"> <div class="col-md-10 col-md-offset-3">
<%= form_for(@user, url: update_user_path) do |f| %> <%= form_for(@user, url: update_user_path) do |f| %>
<%= render 'shared/error_messages'%> <%= render 'shared/error_messages'%>
<div class="row mt-5 mb-5"> <div class="row mt-5 mb-5">
...@@ -41,9 +42,18 @@ ...@@ -41,9 +42,18 @@
</div> </div>
</div> </div>
<div class="row mt-3 mb-5">
<div class="col-md-2">
<strong><i><%= f.label :cv, "My CV"%></i></strong>
</div>
<div class="col-md-10">
<%= f.file_field :cv %>
</div>
</div>
<div class="row col-md-12 ml-5 mt-3"> <div class="row col-md-12 ml-5 mt-3">
<%= f.submit "Register", class: "btn btn-primary" %> <%= f.submit "Update", class: "btn btn-primary" %>
</div> </div>
<% end %> <% end %>
</div> </div>
</div> </div>
<%= provide(:title, "My Page") %> <%= provide(:title, "My Page") %>
<div class="text-success text-center">
<h1 class="text-success">My Page</h1>
</div>
<div class="row ml-5 ct_local pl-3 pt-5 mt-5 mb-5">
<div class="col-md-10 col-md-offset-3">
<!--set field email -->
<div class="row mt-3 mb-5 ml-5">
<!--set field email -->
<div class="col-md-2">
<strong><i>Email: </i></strong>
</div>
<!--set field email -->
<div class="col-md-10">
<%= @user.email %>
</div>
<!--end field password -->
</div>
<!--set field Name -->
<div class="row mt-5 mb-5 ml-5">
<!--set field Name -->
<div class= "col-md-2">
<strong><i>Full Name: </i></strong>
</div>
<!--set field name -->
<div class="col-md-10">
<%= @user.name %>
</div>
<!--set field password -->
</div>
<!--set field cv -->
<div class="row mt-5 mb-5 ml-5">
<!--set field cv -->
<div class="col-md-2">
<strong><i>My CV</i></strong>
</div>
<!--set field cv -->
<div class="col-md-10 ">
<%= link_to 'Download cv',downloadcv_path %>
</div>
<!--set field cv -->
</div>
<!--end field cv -->
<!--set button update -->
<div class="row ml-5 pb-5 pl-5">
<div class="col-md-4 text-center ">
<%= link_to 'Update', edit_user_path, { class: 'btn btn-success' } %>
</div>
<!--end set button update -->
<!--set button download -->
<div class="col-md-3">
<%= link_to 'My Jobs','#',{class: 'btn btn-success'}%>
</div>
</div>
<!--end set button download -->
</div>
</div>
...@@ -5,16 +5,18 @@ ...@@ -5,16 +5,18 @@
</div> </div>
<%= form_for(@user, url: create_email_path(@user.id)) do |f| %> <%= form_for(@user, url: create_email_path(@user.id)) do |f| %>
<%= render 'shared/error_messages'%> <%= render 'shared/error_messages'%>
<!--set field EMAIL -->
<div class="row mt-3 mb-3"> <div class="row mt-3 mb-3">
<div class="col-md-2"> <div class="col-md-2">
<strong><i><%= f.label :email %></i></strong> <strong><i><%= f.label :email %></i></strong>
</div> </div>
<div class="col-md-10"> <div class="col-md-10">
<%= f.email_field :email, class: 'form-control',placeholder: 'Enter Email' %> <%= f.email_field :email, class: 'form-control',placeholder: 'Enter Email' %>
</div> </div>
</div> </div>
<!--end set email -->
<div class="text-center"> <div class="text-center">
<%= f.submit "Confirm your email", class: "btn btn-primary form-control ml-3 w-50" %> <%= f.submit "Confirm your email", class: "btn btn-primary form-control ml-3 w-50" %>
</div> </div>
......
...@@ -12,6 +12,8 @@ module VenJob ...@@ -12,6 +12,8 @@ module VenJob
config.load_defaults 5.1 config.load_defaults 5.1
config.eager_load_paths += %W(#{config.root}/lib) config.eager_load_paths += %W(#{config.root}/lib)
config.active_job.queue_adapter = :sidekiq config.active_job.queue_adapter = :sidekiq
require 'carrierwave'
require 'carrierwave/orm/activerecord'
# Settings in config/environments/* take precedence over those specified here. # Settings in config/environments/* take precedence over those specified here.
# Application configuration should go into files in config/initializers # Application configuration should go into files in config/initializers
# -- all .rb files in that directory are automatically loaded. # -- all .rb files in that directory are automatically loaded.
......
require 'sidekiq/web' require 'sidekiq/web'
Rails.application.routes.draw do Rails.application.routes.draw do
get 'sessions/new'
get 'users/new' get 'users/new'
get '/cities',to: 'top_pages#cities' get '/cities',to: 'top_pages#cities'
...@@ -16,16 +18,10 @@ Rails.application.routes.draw do ...@@ -16,16 +18,10 @@ Rails.application.routes.draw do
# get 'register/:id',controller: :users,action: :show, as: :show_email # get 'register/:id',controller: :users,action: :show, as: :show_email
get 'register/:id/edit',controller: :users,action: :edit,as: :edit_user get 'register/:id/edit',controller: :users,action: :edit,as: :edit_user
patch 'register/:id',controller: :users,action: :update,as: :update_user patch 'register/:id',controller: :users,action: :update,as: :update_user
get '/my',controller: :users,action: :my_page,as: :my_page get 'register/:id/my',controller: :users,action: :my_page,as: :my_page
# get 'register/1', controller: :users, action: :show, as: :sign_up get 'register/:id/download',controller: :users,action: :download_cv, as: :downloadcv
# get 'register/2', controller: :users, action: :confirm_email,as: :create_email get '/login',controller: :sessions,action: :new,as: :login_user
# post 'register/2', controller: :users, action: :confirm_email post '/login',controller: :sessions,action: :create
# get 'register/new', controller: :users, action: :new,as: :register_users delete '/logout',controller: :sessions,action: :destroy
# post 'register/create', controller: :users, action: :create, as: :create_user
# get 'login', controller: :users,action: :login,as: :login_user
mount Sidekiq::Web => '/sidekiq' mount Sidekiq::Web => '/sidekiq'
# get '/job',to: 'job#index'
# get '/job/detail', to: 'job#detail'
# only: :index
# get '/detail', to: 'job#detail'
end end
class AddCvToUser < ActiveRecord::Migration[5.1]
def change
add_column :users, :cv, :string
end
end
...@@ -10,7 +10,13 @@ ...@@ -10,7 +10,13 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20170925092617) do ActiveRecord::Schema.define(version: 20170927013828) do
create_table "add_cv_to_users", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
t.string "cv"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "cities", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| create_table "cities", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
t.string "location" t.string "location"
...@@ -78,6 +84,7 @@ ActiveRecord::Schema.define(version: 20170925092617) do ...@@ -78,6 +84,7 @@ ActiveRecord::Schema.define(version: 20170925092617) do
t.datetime "created_at", null: false t.datetime "created_at", null: false
t.datetime "updated_at", null: false t.datetime "updated_at", null: false
t.string "password_digest" t.string "password_digest"
t.string "cv"
end end
end end
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment