add room functionality

This commit is contained in:
Josh 2018-06-01 11:55:52 -04:00
parent 1bcd176285
commit 45fb18e609
9 changed files with 157 additions and 60 deletions

View File

@ -48,6 +48,9 @@ class RoomsController < ApplicationController
# redirect_to wait_room_path(@room) # redirect_to wait_room_path(@room)
#end #end
end end
# NOTE: TEST TO MAKE SURE THIS DOESN'T FIRE WHEN THEY ARE NOT OWNER AND REDIRECTED.
@recordings = @room.recordings
end end
# POST /r/:room_uid # POST /r/:room_uid
@ -62,7 +65,17 @@ class RoomsController < ApplicationController
# DELETE /r/:room_uid # DELETE /r/:room_uid
def destroy def destroy
@room.destroy unless @room == current_user.main_room # Only delete a room if there is another to fallback too.
if current_user.rooms.length > 1
# Assign a new random main_room if it's the main room.
if @room == current_user.main_room
current_user.main_room = (current_user.rooms - [@room]).sample
current_user.save
end
@room.destroy
end
redirect_to current_user.main_room redirect_to current_user.main_room
end end
@ -73,6 +86,9 @@ class RoomsController < ApplicationController
opts = default_meeting_options opts = default_meeting_options
opts[:user_is_moderator] = true opts[:user_is_moderator] = true
@room.sessions += 1
@room.save
redirect_to @room.join_path(current_user, opts) redirect_to @room.join_path(current_user, opts)
end end
@ -104,6 +120,43 @@ class RoomsController < ApplicationController
end end
# POST /r/:room_uid/home
def home
current_user.main_room = @room
current_user.save
redirect_to @room
end
# DELETE /r/:room_uid/:record_id
def delete_recording
@room.delete_recording(params[:record_id])
redirect_to current_user.main_room
end
# Helper for converting BigBlueButton dates into the desired format.
def recording_date(date)
date.strftime("%B #{date.day.ordinalize}, %Y.")
end
helper_method :recording_date
# Helper for converting BigBlueButton dates into a nice length string.
def recording_length(start_time, end_time)
len = ((end_time - start_time) * 24 * 60).to_i
if len > 60
"#{len / 60} hrs"
else
if len == 0
"< 1 min"
else
"#{len} min"
end
end
end
helper_method :recording_length
private private
def room_params def room_params

View File

@ -94,9 +94,37 @@ class Room < ApplicationRecord
# 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)
# Format playbacks in a more pleasant way.
res[:recordings].each do |r|
next if r.key?(:error)
r[:playbacks] = if !r[:playback] || !r[:playback][:format]
[]
elsif r[:playback][:format].is_a?(Array)
r[:playback][:format]
else
[r[:playback][:format]]
end
r.delete(:playback)
end
res[:recordings] res[:recordings]
end end
# Deletes a recording from a room.
def delete_recording(record_id)
res = bbb.delete_recordings(record_id)
if res[:returncode]
# Handle successful deletion.
else
# Handle unsuccessful deletion.
end
end
private private
def bbb_endpoint def bbb_endpoint

View File

@ -1,13 +1,13 @@
<div class="room-section pb-1"> <div class="room-section pb-1">
<div class="container"> <div class="container">
<div class="row pt-8"> <div class="row pt-9">
<div class="col-lg-9 col-sm-12"> <div class="col-lg-9 col-sm-12">
<h1 id="user-text" class="display-3 text-left text-primary mb-3"><%= @room.name %> <h1 id="user-text" class="display-3 text-left text-primary mb-3"><%= @room.name %>
<% if current_user.main_room == @room %> <% if current_user.main_room == @room %>
<i class="fas fa-home align-top" style="font-size: 22px;"></i> <i class="fas fa-home align-top" style="font-size: 22px;"></i>
<% end %> <% end %>
</h1> </h1>
<h4 class="text-left text-primary mb-6">0 Sessions | 0 Recordings</h4> <h4 class="text-left text-primary mb-6"><%= @room.sessions %> Sessions | <%= @recordings.length %> Recordings</h4>
<label class="form-label text-primary">Invite Participants</label> <label class="form-label text-primary">Invite Participants</label>
<form class="form-inline"> <form class="form-inline">
<div class="input-icon" style="width: 45%;"> <div class="input-icon" style="width: 45%;">
@ -43,7 +43,7 @@
</div> </div>
</div> </div>
<%= render "shared/sessions", recordings: @room.recordings %> <%= render "shared/sessions", recordings: @recordings %>
<script> <script>
var invite_url; var invite_url;

View File

@ -26,53 +26,8 @@
</td> </td>
</tr> </tr>
<% else %> <% else %>
<% 3.times do %> <% recordings.each do |recording| %>
<tr> <%= render "shared/components/recording_row", recording: recording %>
<td>
<div>Example Meeting</div>
<div class="small text-muted">
June 21, 2017 <i>(about 3 hours ago)</i>
</div>
</td>
<td>
<img class="thumbnail px-2" src="http://test-install.blindsidenetworks.com/presentation/b622495d927cd99e9898b0601c2b18a5424a0627-1527259102285/presentation/d2d9a672040fbde2a47a10bf6c37b6a4b5ae187f-1527259102298/thumbnails/thumb-1.png">
<img class="thumbnail px-2" src="http://test-install.blindsidenetworks.com/presentation/b622495d927cd99e9898b0601c2b18a5424a0627-1527259102285/presentation/d2d9a672040fbde2a47a10bf6c37b6a4b5ae187f-1527259102298/thumbnails/thumb-1.png">
<img class="thumbnail px-2" src="http://test-install.blindsidenetworks.com/presentation/b622495d927cd99e9898b0601c2b18a5424a0627-1527259102285/presentation/d2d9a672040fbde2a47a10bf6c37b6a4b5ae187f-1527259102298/thumbnails/thumb-1.png">
</td>
<td class="text-left">
<div class="small text-muted text-uppercase">
Length
</div>
1 hr
</td>
<td class="text-left">
<div class="small text-muted text-uppercase">
Users
</div>
4
</td>
<td class="text-left">
<div class="small text-muted text-uppercase">
Visibility
</div>
Unlisted
</td>
<td>
<a href="#" class="btn btn-secondary">Presentation</a>
<a href="#" class="btn btn-secondary">Podcast</a>
</td>
<td class="text-center">
<div class="item-action dropdown">
<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">
<a href="javascript:void(0)" class="dropdown-item"><i class="dropdown-icon far fa-eye"></i> Change Visibility</a>
<a href="javascript:void(0)" class="dropdown-item"><i class="dropdown-icon far fa-envelope"></i> Email Recording</a>
<div class="dropdown-divider"></div>
<a href="javascript:void(0)" class="dropdown-item"><i class="dropdown-icon far fa-trash-alt"></i> Delete</a>
</div>
</div>
</td>
</tr>
<% end %> <% end %>
<% end %> <% end %>
</tbody> </tbody>

View File

@ -0,0 +1,52 @@
<tr>
<td>
<div><%= recording[:name] %></div>
<div class="small text-muted">
Recorded on <%= recording_date(recording[:startTime]) %>
</div>
</td>
<td>
<% p = recording[:playbacks].find do |p| p[:type] == "presentation" end %>
<% if p %>
<% p[:preview][:images][:image].each do |img| %>
<%= image_tag(img[:content], class: "thumbnail px-2") %>
<% end %>
<% end %>
</td>
<td class="text-left">
<div class="small text-muted text-uppercase">
Length
</div>
<%= recording_length(recording[:startTime], recording[:endTime]) %>
</td>
<td class="text-left">
<div class="small text-muted text-uppercase">
Users
</div>
<%= recording[:participants] %>
</td>
<td class="text-left">
<div class="small text-muted text-uppercase">
Visibility
</div>
<%= recording[:state].capitalize %>
</td>
<td>
<% recording[:playbacks].each do |p| %>
<%= link_to p[:type].capitalize, p[:url], class: "btn btn-secondary", target: "_blank" %>
<% end %>
</td>
<td class="text-center">
<div class="item-action dropdown">
<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">
<a href="javascript:void(0)" class="dropdown-item"><i class="dropdown-icon far fa-eye"></i> Change Visibility</a>
<a href="javascript:void(0)" class="dropdown-item"><i class="dropdown-icon far fa-envelope"></i> Email Recording</a>
<div class="dropdown-divider"></div>
<%= button_to delete_recording_path(@room, record_id: recording[:recordID]), method: :delete, class: "dropdown-item" do %>
<i class="dropdown-icon far fa-trash-alt"></i> Delete
<% end %>
</div>
</div>
</td>
</tr>

View File

@ -14,21 +14,21 @@
<td> <td>
<div><%= room.name %></div> <div><%= room.name %></div>
<div class="small text-muted"> <div class="small text-muted">
<i>Last Session on <%= room.created_at.strftime("%B #{room.created_at.day.ordinalize}, %Y.") %></i> <i>Last Session on <%= recording_date(room.created_at) %></i>
</div> </div>
</td> </td>
<td class="text-right"> <td class="text-right">
<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 %> <% if room != current_user.main_room %>
<%= button_to make_home_path(room), class: "dropdown-item" do %>
<i class="dropdown-icon fas fa-home"></i> Make Home Room <i class="dropdown-icon fas fa-home"></i> Make Home Room
<% end %> <% end %>
<% if room != current_user.main_room %> <% end %>
<%= button_to room, method: :delete, data: { confirm: 'Are you sure?' }, class: "dropdown-item" do %> <%= button_to room, method: :delete, data: { confirm: 'Are you sure?' }, class: "dropdown-item" do %>
<i class="dropdown-icon far fa-trash-alt"></i> Delete <i class="dropdown-icon far fa-trash-alt"></i> Delete
<% end %> <% end %>
<% end %>
</div> </div>
</div> </div>
</td> </td>

View File

@ -10,6 +10,13 @@ Rails.application.routes.draw do
match '/wait', to: 'rooms#wait', as: :wait_room, via: [:get, :post] 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 get '/sessions', to: 'rooms#sessions', as: :sessions
post '/home', to: 'rooms#home', as: :make_home
# Mange recordings.
scope '/:record_id' do
post '/', to: 'rooms#update_recording', as: :update_recording
delete '/', to: 'rooms#delete_recording', as: :delete_recording
end
end end
# Signup route. # Signup route.

View File

@ -6,7 +6,7 @@ class CreateRooms < ActiveRecord::Migration[5.0]
t.string :uid, index: true t.string :uid, index: true
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 t.integer :sessions, index: true, default: 0
t.timestamps t.timestamps
end end

View File

@ -18,11 +18,13 @@ ActiveRecord::Schema.define(version: 20180504131705) do
t.string "uid" t.string "uid"
t.string "bbb_id" t.string "bbb_id"
t.string "icon" t.string "icon"
t.integer "sessions", default: 0
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 ["name"], name: "index_rooms_on_name" t.index ["name"], name: "index_rooms_on_name"
t.index ["sessions"], name: "index_rooms_on_sessions"
t.index ["uid"], name: "index_rooms_on_uid" t.index ["uid"], name: "index_rooms_on_uid"
t.index ["user_id"], name: "index_rooms_on_user_id" t.index ["user_id"], name: "index_rooms_on_user_id"
end end