forked from External/greenlight
		
	signup and room waiting
This commit is contained in:
		| @@ -9,5 +9,4 @@ | |||||||
|   this.App || (this.App = {}); |   this.App || (this.App = {}); | ||||||
|  |  | ||||||
|   App.cable = ActionCable.createConsumer(); |   App.cable = ActionCable.createConsumer(); | ||||||
|  |  | ||||||
| }).call(this); | }).call(this); | ||||||
|   | |||||||
| @@ -79,6 +79,10 @@ a { | |||||||
|   font-size: 20px; |   font-size: 20px; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | .join-button { | ||||||
|  |   width: 60%; | ||||||
|  | } | ||||||
|  |  | ||||||
| iframe{ | iframe{ | ||||||
|   position: absolute; |   position: absolute; | ||||||
|   top: 0; |   top: 0; | ||||||
|   | |||||||
							
								
								
									
										5
									
								
								app/channels/waiting_channel.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								app/channels/waiting_channel.rb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | |||||||
|  | class WaitingChannel < ApplicationCable::Channel | ||||||
|  |   def subscribed | ||||||
|  |     stream_from "#{params[:uid]}_waiting_channel" | ||||||
|  |   end | ||||||
|  | end | ||||||
| @@ -24,49 +24,31 @@ class RoomsController < ApplicationController | |||||||
|  |  | ||||||
|   # GET /r/:room_uid |   # GET /r/:room_uid | ||||||
|   def show |   def show | ||||||
|     opts = default_meeting_options |     if current_user && @room.owned_by?(current_user) | ||||||
|  |  | ||||||
|     if @room.is_running? |  | ||||||
|       if current_user |  | ||||||
|         # If you don't own the room but the meeting is running, join up. |  | ||||||
|         if !@room.owned_by?(current_user) |  | ||||||
|           opts[:user_is_moderator] = false |  | ||||||
|           redirect_to @room.join_path(current_user, opts) |  | ||||||
|         end |  | ||||||
|       else |  | ||||||
|         # Render the join page so they can supply their name. |  | ||||||
|         render :join |  | ||||||
|       end |  | ||||||
|     else |  | ||||||
|       # If the room isn't running, go to join page to enter a name. |  | ||||||
|       if !@room.owned_by?(current_user) |  | ||||||
|         render :join |  | ||||||
|       end |  | ||||||
|  |  | ||||||
|       # If the meeting isn't running and you don't own the room, go to the waiting page. |  | ||||||
|       #if !@room.owned_by?(current_user) |  | ||||||
|       #  redirect_to wait_room_path(@room) |  | ||||||
|       #end |  | ||||||
|     end |  | ||||||
|  |  | ||||||
|     # NOTE: TEST TO MAKE SURE THIS DOESN'T FIRE WHEN THEY ARE NOT OWNER AND REDIRECTED. |  | ||||||
|       @recordings = @room.recordings |       @recordings = @room.recordings | ||||||
|  |     else | ||||||
|  |       render :join | ||||||
|  |     end | ||||||
|   end |   end | ||||||
|  |  | ||||||
|   # POST /r/:room_uid |   # POST /r/:room_uid | ||||||
|   def join |   def join | ||||||
|     opts = default_meeting_options |     opts = default_meeting_options | ||||||
|  |  | ||||||
|  |     # Assign join name if passed. | ||||||
|  |     if params[@room.invite_path] | ||||||
|  |       @join_name = params[@room.invite_path][:join_name] | ||||||
|  |     end | ||||||
|  |  | ||||||
|     if @room.is_running? |     if @room.is_running? | ||||||
|       # If you're unauthenticated, you must enter a name to join the meeting. |       if current_user | ||||||
|       if params[@room.invite_path][:join_name] |  | ||||||
|         redirect_to @room.join_path(params[@room.invite_path][:join_name], opts) |  | ||||||
|       else |  | ||||||
|         redirect_to @room.join_path(current_user, opts) |         redirect_to @room.join_path(current_user, opts) | ||||||
|  |       elsif join_name = params[:join_name] || params[@room.invite_path][:join_name] | ||||||
|  |         redirect_to @room.join_path(join_name, opts) | ||||||
|       end |       end | ||||||
|     else |     else | ||||||
|       # They need to wait until the meeting begins. |       # They need to wait until the meeting begins. | ||||||
|  |       render :wait | ||||||
|     end |     end | ||||||
|   end |   end | ||||||
|  |  | ||||||
| @@ -85,19 +67,10 @@ class RoomsController < ApplicationController | |||||||
|     opts[:user_is_moderator] = true |     opts[:user_is_moderator] = true | ||||||
|  |  | ||||||
|     redirect_to @room.join_path(current_user, opts) |     redirect_to @room.join_path(current_user, opts) | ||||||
|   end |  | ||||||
|  |  | ||||||
|   # GET/POST /r/:room_uid/wait |     # Notify users that the room has started. | ||||||
|   def wait |     # Delay 5 seconds to allow for server start, although the request will retry until it succeeds. | ||||||
|     if @room.is_running? |     NotifyUserWaitingJob.set(wait: 5.seconds).perform_later(@room) | ||||||
|       if current_user |  | ||||||
|         # If they are logged in and waiting, use their account name. |  | ||||||
|         redirect_to @room.join_path(current_user, default_meeting_options) |  | ||||||
|       elsif !params[:unauthenticated_join_name].blank? |  | ||||||
|         # Otherwise, use the name they submitted on the wating page. |  | ||||||
|         redirect_to @room.join_path(params[:unauthenticated_join_name], default_meeting_options) |  | ||||||
|       end |  | ||||||
|     end |  | ||||||
|   end |   end | ||||||
|  |  | ||||||
|   # GET /r/:room_uid/logout |   # GET /r/:room_uid/logout | ||||||
| @@ -110,11 +83,6 @@ class RoomsController < ApplicationController | |||||||
|     end |     end | ||||||
|   end |   end | ||||||
|  |  | ||||||
|   # GET /r/:room_uid/sessions |  | ||||||
|   def sessions |  | ||||||
|  |  | ||||||
|   end |  | ||||||
|  |  | ||||||
|   # POST /r/:room_uid/home |   # POST /r/:room_uid/home | ||||||
|   def home |   def home | ||||||
|     current_user.main_room = @room |     current_user.main_room = @room | ||||||
|   | |||||||
| @@ -1,6 +1,7 @@ | |||||||
| class UsersController < ApplicationController | class UsersController < ApplicationController | ||||||
|  |  | ||||||
|   before_action :find_user, only: [:edit, :update] |   before_action :find_user, only: [:edit, :update] | ||||||
|  |   before_action :ensure_unauthenticated, only: [:new, :create] | ||||||
|  |  | ||||||
|   # POST /users |   # POST /users | ||||||
|   def create |   def create | ||||||
| @@ -15,6 +16,11 @@ class UsersController < ApplicationController | |||||||
|     end |     end | ||||||
|   end |   end | ||||||
|  |  | ||||||
|  |   # GET /signup | ||||||
|  |   def new  | ||||||
|  |     @user = User.new | ||||||
|  |   end | ||||||
|  |  | ||||||
|   # GET /users/:user_uid/edit |   # GET /users/:user_uid/edit | ||||||
|   def edit |   def edit | ||||||
|     if current_user |     if current_user | ||||||
| @@ -64,6 +70,10 @@ class UsersController < ApplicationController | |||||||
|     end |     end | ||||||
|   end |   end | ||||||
|  |  | ||||||
|  |   def ensure_unauthenticated | ||||||
|  |     redirect_to current_user.main_room if current_user | ||||||
|  |   end | ||||||
|  |  | ||||||
|   def user_params |   def user_params | ||||||
|     params.require(:user).permit(:name, :email, :password, :password_confirmation, :new_password, :provider) |     params.require(:user).permit(:name, :email, :password, :password_confirmation, :new_password, :provider) | ||||||
|   end |   end | ||||||
|   | |||||||
							
								
								
									
										7
									
								
								app/jobs/notify_user_waiting_job.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								app/jobs/notify_user_waiting_job.rb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | |||||||
|  | class NotifyUserWaitingJob < ApplicationJob | ||||||
|  |   queue_as :default | ||||||
|  |  | ||||||
|  |   def perform(room) | ||||||
|  |     room.notify_waiting | ||||||
|  |   end | ||||||
|  | end | ||||||
| @@ -51,6 +51,7 @@ class Room < ApplicationRecord | |||||||
|  |  | ||||||
|     # Increment room sessions. |     # Increment room sessions. | ||||||
|     self.sessions += 1 |     self.sessions += 1 | ||||||
|  |     self.last_session = DateTime.now | ||||||
|     self.save |     self.save | ||||||
|  |  | ||||||
|     #meeting_options.merge!( |     #meeting_options.merge!( | ||||||
| @@ -101,6 +102,13 @@ class Room < ApplicationRecord | |||||||
|     end |     end | ||||||
|   end |   end | ||||||
|  |  | ||||||
|  |   # Notify waiting users that a meeting has started. | ||||||
|  |   def notify_waiting | ||||||
|  |     ActionCable.server.broadcast("#{uid}_waiting_channel", { | ||||||
|  |       action: "started" | ||||||
|  |     }) | ||||||
|  |   end | ||||||
|  |  | ||||||
|   # Fetches all recordings for a meeting. |   # Fetches all recordings for a meeting. | ||||||
|   def recordings |   def recordings | ||||||
|     res = bbb.get_recordings(meetingID: bbb_id) |     res = bbb.get_recordings(meetingID: bbb_id) | ||||||
|   | |||||||
| @@ -1,10 +1,10 @@ | |||||||
| <div class="room-section pb-2 pt-9"> | <div class="room-section pb-2 pt-9"> | ||||||
|   <div class="container text-center"> |   <div class="container text-center"> | ||||||
|  |  | ||||||
|     <h1 id="main-text" class="display-3 font-weight-400">Welcome to Greenlight.</h1> |     <h1 id="main-text" class="display-3 font-weight-400">Welcome to BigBlueButton.</h1> | ||||||
|     <h4 class="text-muted">A simple front end for your BigBlueButton Open Source Web Conferencing Server.</h4> |     <h4 class="text-muted">A simple front end for your BigBlueButton Open Source Web Conferencing Server.</h4> | ||||||
|  |  | ||||||
|     <%= link_to "https://www.google.com", class: "p-3", target: "_blank" do %> |     <%= link_to "https://www.youtube.com/watch?v=yGX3JCv7OVM&feature=youtu.be", class: "p-3", target: "_blank" do %> | ||||||
|       <h4>Watch a tutorial on using Greenlight <i class="fe fe-play-circle"></i></h4> |       <h4>Watch a tutorial on using Greenlight <i class="fe fe-play-circle"></i></h4> | ||||||
|     <% end %> |     <% end %> | ||||||
|   </div> |   </div> | ||||||
|   | |||||||
| @@ -1,27 +1,8 @@ | |||||||
| <div class="room-section pb-9"> | <%= render 'shared/room_event' do %> | ||||||
|   <div class="container"> |  | ||||||
|     <div class="row pt-9"> |  | ||||||
|       <div class="col-lg-12 col-sm-12"> |  | ||||||
|         <h4 class="text-left">You have been invited to join</h4> |  | ||||||
|         <h1 class="display-3 text-left mb-3 font-weight-400"><%= @room.name %></h1> |  | ||||||
|         <hr class="mt-2 float-left" style="width: 20%;"> |  | ||||||
|       </div> |  | ||||||
|     </div> |  | ||||||
|  |  | ||||||
|     <div class="row"> |  | ||||||
|       <div class="col-lg-6 col-md-8 col-sm-12 form-inline mb-5 align-top"> |  | ||||||
|         <% if @room.owner.image.nil? %> |  | ||||||
|           <span class="avatar"><%= @room.owner.name.first %></span> |  | ||||||
|         <% else %> |  | ||||||
|           <span class="avatar" style="background-image: url(<%= @room.owner.image %>)"></span> |  | ||||||
|         <% end %> |  | ||||||
|         <h5 class="font-weight-normal ml-4 mt-3"><%= @room.owner.name %> (Owner)</h5> |  | ||||||
|       </div> |  | ||||||
|       <div class="col-lg-6 col-md-4 col-sm-12"> |  | ||||||
|   <%= form_for room_path, method: :post do |f| %> |   <%= form_for room_path, method: :post do |f| %> | ||||||
|     <div class="input-group" style="height: 60px;"> |     <div class="input-group" style="height: 60px;"> | ||||||
|     <% if current_user %> |     <% if current_user %> | ||||||
|             <%= f.submit "Join", class: "btn btn-primary px-7 main-large btn-block"%> |       <%= f.submit "Join", class: "btn btn-primary px-7 main-large join-button"%> | ||||||
|     <% else %> |     <% else %> | ||||||
|         <%= f.text_field :join_name, class: "form-control main-large", placeholder: "Enter your name!" %> |         <%= f.text_field :join_name, class: "form-control main-large", placeholder: "Enter your name!" %> | ||||||
|         <span class="input-group-append"> |         <span class="input-group-append"> | ||||||
| @@ -30,7 +11,4 @@ | |||||||
|     <% end %> |     <% end %> | ||||||
|     </div> |     </div> | ||||||
|   <% end %> |   <% end %> | ||||||
|       </div> | <% end %> | ||||||
|     </div> |  | ||||||
|   </div> |  | ||||||
| </div> |  | ||||||
|   | |||||||
| @@ -1,7 +1,45 @@ | |||||||
| <p>Waiting for meeting to start...</p> | <%= render 'shared/room_event' do %> | ||||||
| <p>You will be redirected when the meeing starts...</p> |   <div class="row"> | ||||||
|  |     <div class="col-9"> | ||||||
| <% unless current_user %> |       <h3>Oops! The meeting hasn't started yet.</h3> | ||||||
|   <p>Input a name for when the meeting starts.</p> |       <h4 class="text-muted">You will automatically join when the meeting starts.</h4> | ||||||
|   <%= text_field(:unauthenticated_join_name, nil) %> |     </div> | ||||||
|  |     <div class="col-3"> | ||||||
|  |       <div class="loader align-bottom mt-3"></div> | ||||||
|  |     </div> | ||||||
|  |   </div> | ||||||
| <% end %> | <% end %> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | $(document).on("turbolinks:load", function(){ | ||||||
|  |   App.waiting = App.cable.subscriptions.create({ | ||||||
|  |     channel: "WaitingChannel", | ||||||
|  |     uid: $(".room-section").attr("room") | ||||||
|  |   }, { | ||||||
|  |     received: function(data){ | ||||||
|  |       if(data.action = "started"){ request_to_join_meeting(); } | ||||||
|  |     } | ||||||
|  |   }); | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | var join_attempts = 0; | ||||||
|  |  | ||||||
|  | var request_to_join_meeting = function(){ | ||||||
|  |   $.ajax({ | ||||||
|  |     url: window.location.pathname, | ||||||
|  |     type: 'POST', | ||||||
|  |     data: { | ||||||
|  |       join_name: $(".room-section").attr("join-name") | ||||||
|  |     }, | ||||||
|  |     headers: { | ||||||
|  |       'Content-Type': 'application/x-www-form-urlencoded', | ||||||
|  |       'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content') | ||||||
|  |     }, | ||||||
|  |     error: function(){ | ||||||
|  |       // The meeting is still booting (going slowly), retry shortly. | ||||||
|  |       if(join_attempts < 4){ setTimeout(request_to_join_meeting, 5000); } | ||||||
|  |       join_attempts++; | ||||||
|  |     } | ||||||
|  |   }); | ||||||
|  | } | ||||||
|  | </script> | ||||||
|   | |||||||
| @@ -44,11 +44,10 @@ | |||||||
| 						</div> | 						</div> | ||||||
| 					</div> | 					</div> | ||||||
| 				<% else %> | 				<% else %> | ||||||
| 					<button type="submit" class="btn btn-pill btn-outline-primary mx-2" data-toggle="modal" data-target="#loginModal">Login</button> | 					<%= link_to "Login", "#loginModal", :class => "btn btn-pill btn-outline-primary mx-2", "data-toggle": "modal" %> | ||||||
| 					<button type="submit" class="btn btn-pill btn-outline-primary mx-2" data-toggle="modal" data-target="#signupModal">Signup</button> | 					<%= link_to "Signup", signup_path, :class => "btn btn-pill btn-outline-primary mx-2" %> | ||||||
| 					 | 					 | ||||||
| 					<%= render "shared/modals/login_modal" %> | 					<%= render "shared/modals/login_modal" %> | ||||||
| 					<%= render "shared/modals/signup_modal" %> |  | ||||||
| 				<% end %> | 				<% end %> | ||||||
| 			</div> | 			</div> | ||||||
| 		</div> | 		</div> | ||||||
|   | |||||||
							
								
								
									
										26
									
								
								app/views/shared/_room_event.html.erb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								app/views/shared/_room_event.html.erb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | |||||||
|  | <div class="room-section pb-9" room="<%= @room.uid %>" join-name="<%= @join_name %>"> | ||||||
|  |   <div class="container"> | ||||||
|  |     <div class="row pt-9"> | ||||||
|  |       <div class="col-lg-12 col-sm-12"> | ||||||
|  |         <h4 class="text-left">You have been invited to join</h4> | ||||||
|  |         <h1 class="display-3 text-left mb-3 font-weight-400"><%= @room.name %></h1> | ||||||
|  |         <hr class="mt-2 float-left" style="width: 20%;"> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |  | ||||||
|  |     <div class="row"> | ||||||
|  |       <div class="col-lg-6 col-md-8 col-sm-12 form-inline mb-5 align-top"> | ||||||
|  |         <% if @room.owner.image.nil? %> | ||||||
|  |           <span class="avatar"><%= @room.owner.name.first %></span> | ||||||
|  |         <% else %> | ||||||
|  |           <span class="avatar" style="background-image: url(<%= @room.owner.image %>)"></span> | ||||||
|  |         <% end %> | ||||||
|  |         <h5 class="font-weight-normal ml-4 mt-3"><%= @room.owner.name %> (Owner)</h5> | ||||||
|  |       </div> | ||||||
|  |  | ||||||
|  |       <div class="col-lg-6 col-md-4 col-sm-12"> | ||||||
|  |         <%= yield %> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |   </div> | ||||||
|  | </div> | ||||||
| @@ -14,16 +14,17 @@ | |||||||
|         <td style="border-top: none;"> |         <td style="border-top: none;"> | ||||||
|           <h4 class="m-0 text-normal" style="color: #495057;"><%= room.name %></h4> |           <h4 class="m-0 text-normal" style="color: #495057;"><%= room.name %></h4> | ||||||
|           <div class="small text-muted"> |           <div class="small text-muted"> | ||||||
|             <i>Last Session on <%= recording_date(room.created_at) %></i> |             <% if room.sessions > 0 %> | ||||||
|  |               <i>Last session on <%= recording_date(room.last_session) %></i> | ||||||
|  |             <% else %> | ||||||
|  |               <i>This room has no sessions, yet!</i> | ||||||
|  |             <% end %> | ||||||
|           </div> |           </div> | ||||||
|         </td> |         </td> | ||||||
|         <td class="text-right" style="border-top: none;"> |         <td class="text-right" style="border-top: none;"> | ||||||
|           <div class="item-action dropdown"> |           <div class="item-action dropdown"> | ||||||
|             <a href="javascript:void(0)" data-toggle="dropdown" class="icon"><i class="fe fe-more-vertical"></i></a> |             <a href="javascript:void(0)" data-toggle="dropdown" class="icon"><i class="fe fe-more-vertical"></i></a> | ||||||
|             <div class="dropdown-menu dropdown-menu-right"> |             <div class="dropdown-menu dropdown-menu-right"> | ||||||
|               <%= button_to root_path, class: "dropdown-item" do %> |  | ||||||
|                 <i class="dropdown-icon fe fe-link"></i> Copy Link |  | ||||||
|               <% end %> |  | ||||||
|               <%= button_to root_path, class: "dropdown-item" do %> |               <%= button_to root_path, class: "dropdown-item" do %> | ||||||
|                 <i class="dropdown-icon fas fa-cog"></i> Room Settings |                 <i class="dropdown-icon fas fa-cog"></i> Room Settings | ||||||
|               <% end %> |               <% end %> | ||||||
|   | |||||||
| @@ -1,38 +0,0 @@ | |||||||
| <div class="modal fade" id="signupModal" tabindex="-1" role="dialog"> |  | ||||||
|   <div class="modal-dialog modal-dialog-centered" role="document"> |  | ||||||
|     <div class="modal-content text-center"> |  | ||||||
|       <div class="modal-body"> |  | ||||||
|         <div class="card-body p-6"> |  | ||||||
|           <div class="card-title text-primary"> |  | ||||||
|             <h3>Signup</h3> |  | ||||||
|           </div> |  | ||||||
|  |  | ||||||
|           <hr class="small-rule"> |  | ||||||
|  |  | ||||||
|           <%= form_for(User.new) do |f| %> |  | ||||||
|             <div class="form-group"> |  | ||||||
|               <%= f.label :name, "Full Name", class: "form-label text-left" %> |  | ||||||
|               <%= f.text_field :name, class: "form-control", placeholder: "Full Name" %> |  | ||||||
|             </div> |  | ||||||
|             <div class="form-group"> |  | ||||||
|               <%= f.label :email, "Email", class: "form-label text-left" %> |  | ||||||
|               <%= f.text_field :email, class: "form-control", placeholder: "Email" %> |  | ||||||
|             </div> |  | ||||||
|             <div class="form-group"> |  | ||||||
|               <%= f.label :password, "Password", class: "form-label text-left" %> |  | ||||||
|               <%= f.password_field :password, class: "form-control", placeholder: "Password" %> |  | ||||||
|             </div> |  | ||||||
|             <div class="form-group"> |  | ||||||
|               <%= f.label :password, "Password Confirmation", class: "form-label text-left" %> |  | ||||||
|               <%= f.password_field :password, class: "form-control", placeholder: "Password Confirmation" %> |  | ||||||
|             </div> |  | ||||||
|  |  | ||||||
|             <div class="form-footer"> |  | ||||||
|               <%= f.submit "Signup", class: "btn btn-outline-primary btn-block btn-pill" %> |  | ||||||
|             </div> |  | ||||||
|           <% end %> |  | ||||||
|         </div> |  | ||||||
|       </div> |  | ||||||
|     </div> |  | ||||||
|   </div> |  | ||||||
| </div> |  | ||||||
							
								
								
									
										41
									
								
								app/views/users/new.html.erb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								app/views/users/new.html.erb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,41 @@ | |||||||
|  | <div class="container"> | ||||||
|  |   <div class="row mt-9"> | ||||||
|  |     <div class="col col-4 offset-4 mx-auto"> | ||||||
|  |       <div class="card"> | ||||||
|  |         <div class="card-header"> | ||||||
|  |           <h4 class="mt-2">Create an Account</h4> | ||||||
|  |         </div> | ||||||
|  |         <div class="card-body"> | ||||||
|  |           <%= form_for @user, method: :post do |f|  %> | ||||||
|  |             <div class="form-group"> | ||||||
|  |               <%= f.label "Fullname", class: "form-label" %> | ||||||
|  |               <div class="input-icon"> | ||||||
|  |                 <span class="input-icon-addon"> | ||||||
|  |                   <i class="fas fa-user"></i> | ||||||
|  |                 </span> | ||||||
|  |                 <%= f.text_field :name, class: "form-control", placeholder: "Fullname" %> | ||||||
|  |               </div> | ||||||
|  |               <br> | ||||||
|  |               <%= f.label "Email", class: "form-label" %> | ||||||
|  |               <div class="input-icon"> | ||||||
|  |                 <span class="input-icon-addon"> | ||||||
|  |                   <i class="fas fa-at"></i> | ||||||
|  |                 </span> | ||||||
|  |                 <%= f.text_field :email, class: "form-control", placeholder: "Email" %> | ||||||
|  |               </div> | ||||||
|  |               <br> | ||||||
|  |               <%= f.label "Password", class: "form-label" %> | ||||||
|  |               <%= f.password_field :password, class: "form-control", placeholder: "Password" %> | ||||||
|  |               <br> | ||||||
|  |               <%= f.label "Password Confirmation", class: "form-label" %> | ||||||
|  |               <%= f.password_field :password, class: "form-control", placeholder: "Password Confirmation" %> | ||||||
|  |             </div> | ||||||
|  |             <div class="card-footer"> | ||||||
|  |               <%= f.submit "Sign up", class: "btn btn-primary float-right" %> | ||||||
|  |             </div> | ||||||
|  |           <% end %> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |   </div> | ||||||
|  | </div> | ||||||
| @@ -7,9 +7,7 @@ Rails.application.routes.draw do | |||||||
|   scope '/r/:room_uid' do |   scope '/r/:room_uid' do | ||||||
|     post '/', to: 'rooms#join' |     post '/', to: 'rooms#join' | ||||||
|     get '/start', to: 'rooms#start', as: :start_room |     get '/start', to: 'rooms#start', as: :start_room | ||||||
|     match '/wait', to: 'rooms#wait', as: :wait_room, via: [:get, :post] |  | ||||||
|     get '/logout', to: 'rooms#logout', as: :logout_room |     get '/logout', to: 'rooms#logout', as: :logout_room | ||||||
|     get '/sessions', to: 'rooms#sessions', as: :sessions |  | ||||||
|     post '/home', to: 'rooms#home', as: :make_home |     post '/home', to: 'rooms#home', as: :make_home | ||||||
|      |      | ||||||
|     # Mange recordings. |     # Mange recordings. | ||||||
| @@ -21,6 +19,7 @@ Rails.application.routes.draw do | |||||||
|  |  | ||||||
|   # User resources. |   # User resources. | ||||||
|   resources :users, only: [:create], param: :user_uid |   resources :users, only: [:create], param: :user_uid | ||||||
|  |   get '/signup', to: 'users#new', as: :signup | ||||||
|   get '/users/:user_uid/edit', to: 'users#edit', as: :edit_user |   get '/users/:user_uid/edit', to: 'users#edit', as: :edit_user | ||||||
|   patch '/users/:user_uid/edit', to: 'users#update', as: :update_user |   patch '/users/:user_uid/edit', to: 'users#update', as: :update_user | ||||||
|  |  | ||||||
|   | |||||||
| @@ -7,6 +7,7 @@ class CreateRooms < ActiveRecord::Migration[5.0] | |||||||
|       t.string :bbb_id, index: true |       t.string :bbb_id, index: true | ||||||
|       t.string :icon, index: true |       t.string :icon, index: true | ||||||
|       t.integer :sessions, index: true, default: 0 |       t.integer :sessions, index: true, default: 0 | ||||||
|  |       t.datetime :last_session, index: true | ||||||
|  |  | ||||||
|       t.timestamps |       t.timestamps | ||||||
|     end |     end | ||||||
|   | |||||||
| @@ -19,10 +19,12 @@ ActiveRecord::Schema.define(version: 20180504131705) do | |||||||
|     t.string   "bbb_id" |     t.string   "bbb_id" | ||||||
|     t.string   "icon" |     t.string   "icon" | ||||||
|     t.integer  "sessions",     default: 0 |     t.integer  "sessions",     default: 0 | ||||||
|  |     t.datetime "last_session" | ||||||
|     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.index ["bbb_id"], name: "index_rooms_on_bbb_id" |     t.index ["bbb_id"], name: "index_rooms_on_bbb_id" | ||||||
|     t.index ["icon"], name: "index_rooms_on_icon" |     t.index ["icon"], name: "index_rooms_on_icon" | ||||||
|  |     t.index ["last_session"], name: "index_rooms_on_last_session" | ||||||
|     t.index ["name"], name: "index_rooms_on_name" |     t.index ["name"], name: "index_rooms_on_name" | ||||||
|     t.index ["sessions"], name: "index_rooms_on_sessions" |     t.index ["sessions"], name: "index_rooms_on_sessions" | ||||||
|     t.index ["uid"], name: "index_rooms_on_uid" |     t.index ["uid"], name: "index_rooms_on_uid" | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user