add preferences and customization (#171)

This commit is contained in:
Joshua Arts 2017-05-11 09:58:51 -04:00 committed by Jesus Federico
parent 45c55efd04
commit 24c8952e59
14 changed files with 160 additions and 10 deletions

2
.gitignore vendored
View File

@ -11,6 +11,8 @@ vendor/.bundle
# Ignore the default SQLite database. # Ignore the default SQLite database.
/db/**/*.sqlite3 /db/**/*.sqlite3
/db/**/*.sqlite3-journal /db/**/*.sqlite3-journal
/public/system/**
/public/assets/**
# Ignore all logfiles and tempfiles. # Ignore all logfiles and tempfiles.
/log/* /log/*

View File

@ -77,4 +77,8 @@ gem 'rails-timeago', '~> 2.0'
gem 'http_accept_language' gem 'http_accept_language'
# For sending slack notifications.
gem 'slack-notifier' gem 'slack-notifier'
# For landing background image uploading.
gem 'paperclip', '~> 4.2'

View File

@ -47,6 +47,9 @@ GEM
railties (>= 3.1) railties (>= 3.1)
builder (3.2.2) builder (3.2.2)
byebug (9.0.6) byebug (9.0.6)
climate_control (0.1.0)
cocaine (0.5.8)
climate_control (>= 0.0.3, < 1.0)
coffee-rails (4.2.1) coffee-rails (4.2.1)
coffee-script (>= 2.2.0) coffee-script (>= 2.2.0)
railties (>= 4.0.0, < 5.2.x) railties (>= 4.0.0, < 5.2.x)
@ -105,6 +108,7 @@ GEM
mime-types (3.1) mime-types (3.1)
mime-types-data (~> 3.2015) mime-types-data (~> 3.2015)
mime-types-data (3.2016.0521) mime-types-data (3.2016.0521)
mimemagic (0.3.0)
mini_portile2 (2.1.0) mini_portile2 (2.1.0)
minitest (5.9.1) minitest (5.9.1)
mocha (1.2.1) mocha (1.2.1)
@ -139,6 +143,12 @@ GEM
omniauth-twitter (1.2.1) omniauth-twitter (1.2.1)
json (~> 1.3) json (~> 1.3)
omniauth-oauth (~> 1.1) omniauth-oauth (~> 1.1)
paperclip (4.3.7)
activemodel (>= 3.2.0)
activesupport (>= 3.2.0)
cocaine (~> 0.5.5)
mime-types
mimemagic (= 0.3.0)
pg (0.19.0) pg (0.19.0)
puma (3.6.0) puma (3.6.0)
rack (2.0.1) rack (2.0.1)
@ -242,6 +252,7 @@ DEPENDENCIES
omniauth (= 1.3.1) omniauth (= 1.3.1)
omniauth-google-oauth2 (= 0.4.1) omniauth-google-oauth2 (= 0.4.1)
omniauth-twitter (= 1.2.1) omniauth-twitter (= 1.2.1)
paperclip (~> 4.2)
pg pg
puma (~> 3.0) puma (~> 3.0)
rails (~> 5.0.0, >= 5.0.0.1) rails (~> 5.0.0, >= 5.0.0.1)

View File

@ -55,6 +55,19 @@ class LandingController < ApplicationController
end end
helper_method :admin? helper_method :admin?
def preferences
@user = current_user
end
def landing_background
if !current_user || !current_user.background? then
(ENV['LANDING_BACKGROUND'].present?) ? ENV['LANDING_BACKGROUND'] : 'greenlight_background.png'
else
current_user.background.url
end
end
helper_method :landing_background
private private
def render_meeting def render_meeting

View File

@ -0,0 +1,41 @@
# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
#
# Copyright (c) 2016 BigBlueButton Inc. and by respective authors (see below).
#
# This program is free software; you can redistribute it and/or modify it under the
# terms of the GNU Lesser General Public License as published by the Free Software
# Foundation; either version 3.0 of the License, or (at your option) any later
# version.
#
# BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License along
# with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
class UsersController < ActionController::Base
# For updating a users background image.
def update
# Make sure they actually select a file.
if params[:user] then
@user = User.find(params[:id])
@user.assign_attributes(background: user_params[:background])
flash[:danger] = t('invalid_file') unless @user.save
else
flash[:danger] = t('no_file')
end
# Reload the page to apply changes and show flash messages.
redirect_back(fallback_location: root_path)
end
private
def user_params
params.require(:user).permit(:background)
end
end

View File

@ -17,6 +17,9 @@
class User < ApplicationRecord class User < ApplicationRecord
before_create :set_encrypted_id before_create :set_encrypted_id
has_attached_file :background
validates_attachment :background,
:content_type => { :content_type => ["image/jpg", "image/jpeg", "image/gif", "image/png"] }
def self.from_omniauth(auth_hash) def self.from_omniauth(auth_hash)
user = find_or_initialize_by(uid: auth_hash['uid'], provider: auth_hash['provider']) user = find_or_initialize_by(uid: auth_hash['uid'], provider: auth_hash['provider'])

View File

@ -0,0 +1,42 @@
<%
# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
# Copyright (c) 2016 BigBlueButton Inc. and by respective authors (see below).
# This program is free software; you can redistribute it and/or modify it under the
# terms of the GNU Lesser General Public License as published by the Free Software
# Foundation; either version 3.0 of the License, or (at your option) any later
# version.
#
# BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public License along
# with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
%>
<div class="center-panel-wrapper">
<%= render layout: 'shared/center_panel' do %>
<div class="center-block center-panel-content-size col-xs-12">
<h1><%= t('preferences') %></h1>
<br>
<% if @user %>
<div class="upload-form">
<p> <%= t('background_image') + ": " + (@user.background_file_name || '') %> </p>
<%= form_for @user, :html => { :multipart => true } do |f| %>
<div class="form-group">
<%= f.file_field :background, class: 'form-control'%>
</div>
<%= f.submit t('upload'), class: 'btn btn-info' %>
<% end %>
</div>
<% else %>
<h3><%= t('preferences_logged') %></h3>
<% end %>
<br><br>
<%= link_to t('back'), @user ? meeting_room_url(resource: 'rooms', id: @user.encrypted_id) : root_url, class: 'btn btn-info' %>
</div>
<% end %>
</div>

View File

@ -48,7 +48,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
<body class="app-background" data-controller="<%= params[:controller] %>" data-action="<%= params[:action] %>" <body class="app-background" data-controller="<%= params[:controller] %>" data-action="<%= params[:action] %>"
data-resource="<%= params[:resource] %>" data-resource="<%= params[:resource] %>"
data-current-user="<%= current_user.try(:encrypted_id) %>" data-current-user="<%= current_user.try(:encrypted_id) %>"
style="background-image:url(<%= image_path('greenlight_background.png') if params[:controller] == 'landing' %>);"> style="background-image:url(<%= image_path(landing_background) if params[:controller] == 'landing' %>);">
<!-- Messages --> <!-- Messages -->
<div id='alerts'> <div id='alerts'>
<div class='flash-alerts'> <div class='flash-alerts'>

View File

@ -25,7 +25,8 @@
</div> </div>
<%= yield :footer %> <%= yield :footer %>
<div class="help-link"> <div class="help-link">
<%= link_to t('help'), 'http://bigbluebutton.org/videos/', target: '_blank' %> <%= link_to t('help'), 'http://bigbluebutton.org/videos/', target: '_blank' %> |
<%= link_to t('preferences'), preferences_path %>
</div> </div>
</div> </div>
</div> </div>

View File

@ -40,6 +40,8 @@ en-US:
admin_room_title: Welcome %{user} admin_room_title: Welcome %{user}
are_you: Are you %{name}? are_you: Are you %{name}?
are_you_sure: Are you sure? are_you_sure: Are you sure?
background_image: Background Image
back: Back
change_recording_visibility: "Change visibility to:" change_recording_visibility: "Change visibility to:"
client: client:
are_you_sure: Are you sure? are_you_sure: Are you sure?
@ -79,6 +81,7 @@ en-US:
hi_all: Hi Everyone hi_all: Hi Everyone
home_page: Home page home_page: Home page
home_title: Welcome to BigBlueButton home_title: Welcome to BigBlueButton
invalid_file: You may only upload an image file (jpg, gif, png).
invite: Invite invite: Invite
invite_description: (share this link below to invite others to this meeting) invite_description: (share this link below to invite others to this meeting)
join: Join join: Join
@ -106,6 +109,7 @@ en-US:
my_room: my room my_room: my room
name: Name name: Name
'no': 'No' 'no': 'No'
no_file: You must select a file to upload.
not_found_title: Sorry we couldn't find that. not_found_title: Sorry we couldn't find that.
notification_mailer: notification_mailer:
recording_ready_email: recording_ready_email:
@ -129,6 +133,8 @@ en-US:
users: Users users: Users
participants: Users participants: Users
past_recordings: Past Recordings past_recordings: Past Recordings
preferences: Preferences
preferences_logged: You must be logged in to edit preferences.
presentation: Presentation presentation: Presentation
previous_meetings: (previous meetings) previous_meetings: (previous meetings)
return_to_room: Return to main page return_to_room: Return to main page
@ -138,8 +144,8 @@ en-US:
meeting_end: "%{meeting} has ended." meeting_end: "%{meeting} has ended."
meeting_join: "%{user} joined %{meeting}.\n[Click here join!]" meeting_join: "%{user} joined %{meeting}.\n[Click here join!]"
recording_visibility: "A recording of %{meeting} was %{change}" recording_visibility: "A recording of %{meeting} was %{change}"
published: published published: published.
unpublished: unpublished unpublished: unpublished.
start: Start start: Start
start_join: Start start_join: Start
start_meeting: Start meeting start_meeting: Start meeting
@ -148,6 +154,7 @@ en-US:
subject: Test Email subject: Test Email
phrase1: This is a test email sent to %{email} phrase1: This is a test email sent to %{email}
thumbnails: Thumbnails thumbnails: Thumbnails
upload: Upload
url_copy_explanation: Copy this URL to invite others to the meeting url_copy_explanation: Copy this URL to invite others to the meeting
user_person_room: "%{name} personal room" user_person_room: "%{name} personal room"
video: Video video: Video

View File

@ -52,5 +52,7 @@ Rails.application.routes.draw do
get '/(:room_id)/:id', to: 'landing#resource', as: :meeting_room, defaults: {room_id: nil}, :constraints => {:id => disallow_slash, :room_id => disallow_slash} get '/(:room_id)/:id', to: 'landing#resource', as: :meeting_room, defaults: {room_id: nil}, :constraints => {:id => disallow_slash, :room_id => disallow_slash}
end end
get '/preferences', to: 'landing#preferences', as: :preferences
root to: 'landing#index', :resource => 'meetings' root to: 'landing#index', :resource => 'meetings'
end end

View File

@ -0,0 +1,11 @@
class AddAttachmentBackgroundToUsers < ActiveRecord::Migration
def self.up
change_table :users do |t|
t.attachment :background
end
end
def self.down
remove_attachment :users, :background
end
end

View File

@ -10,17 +10,21 @@
# #
# 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: 20161208185458) do ActiveRecord::Schema.define(version: 20170510175654) do
create_table "users", force: :cascade do |t| create_table "users", force: :cascade do |t|
t.string "provider", null: false t.string "provider", null: false
t.string "uid", null: false t.string "uid", null: false
t.string "name" t.string "name"
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 "username" t.string "username"
t.string "encrypted_id", null: false t.string "encrypted_id", null: false
t.string "email" t.string "email"
t.string "background_file_name"
t.string "background_content_type"
t.integer "background_file_size"
t.datetime "background_updated_at"
t.index ["email"], name: "index_users_on_email", unique: true t.index ["email"], name: "index_users_on_email", unique: true
t.index ["encrypted_id"], name: "index_users_on_encrypted_id", unique: true t.index ["encrypted_id"], name: "index_users_on_encrypted_id", unique: true
t.index ["provider", "uid"], name: "index_users_on_provider_and_uid", unique: true t.index ["provider", "uid"], name: "index_users_on_provider_and_uid", unique: true

9
env
View File

@ -57,6 +57,15 @@ GREENLIGHT_USE_WEBHOOKS=false
SLACK_WEBHOOK= SLACK_WEBHOOK=
SLACK_CHANNEL= SLACK_CHANNEL=
# Landing Background (optional)
#
# Supply a URL to an image to change the landing background. If no
# URL is provided GreenLight will use a default image. If you
# supply a path that does not lead to an image, no landing image
# will appear.
#
LANDING_BACKGROUND=
# SMTP Mailer # SMTP Mailer
# #
GREENLIGHT_MAIL_NOTIFICATIONS=true GREENLIGHT_MAIL_NOTIFICATIONS=true