diff --git a/.gitignore b/.gitignore
index f9bf6839..fffd6d15 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,6 +11,8 @@ vendor/.bundle
# Ignore the default SQLite database.
/db/**/*.sqlite3
/db/**/*.sqlite3-journal
+/public/system/**
+/public/assets/**
# Ignore all logfiles and tempfiles.
/log/*
diff --git a/Gemfile b/Gemfile
index ec1aff77..3f9c8256 100644
--- a/Gemfile
+++ b/Gemfile
@@ -77,4 +77,8 @@ gem 'rails-timeago', '~> 2.0'
gem 'http_accept_language'
+# For sending slack notifications.
gem 'slack-notifier'
+
+# For landing background image uploading.
+gem 'paperclip', '~> 4.2'
diff --git a/Gemfile.lock b/Gemfile.lock
index 4b84566c..5544207c 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -47,6 +47,9 @@ GEM
railties (>= 3.1)
builder (3.2.2)
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-script (>= 2.2.0)
railties (>= 4.0.0, < 5.2.x)
@@ -105,6 +108,7 @@ GEM
mime-types (3.1)
mime-types-data (~> 3.2015)
mime-types-data (3.2016.0521)
+ mimemagic (0.3.0)
mini_portile2 (2.1.0)
minitest (5.9.1)
mocha (1.2.1)
@@ -139,6 +143,12 @@ GEM
omniauth-twitter (1.2.1)
json (~> 1.3)
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)
puma (3.6.0)
rack (2.0.1)
@@ -242,6 +252,7 @@ DEPENDENCIES
omniauth (= 1.3.1)
omniauth-google-oauth2 (= 0.4.1)
omniauth-twitter (= 1.2.1)
+ paperclip (~> 4.2)
pg
puma (~> 3.0)
rails (~> 5.0.0, >= 5.0.0.1)
diff --git a/app/controllers/landing_controller.rb b/app/controllers/landing_controller.rb
index b88f5b9e..bcc83bd1 100644
--- a/app/controllers/landing_controller.rb
+++ b/app/controllers/landing_controller.rb
@@ -55,6 +55,19 @@ class LandingController < ApplicationController
end
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
def render_meeting
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
new file mode 100644
index 00000000..8e5be0b3
--- /dev/null
+++ b/app/controllers/users_controller.rb
@@ -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 .
+
+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
diff --git a/app/models/user.rb b/app/models/user.rb
index 34672309..ec106233 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -17,6 +17,9 @@
class User < ApplicationRecord
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)
user = find_or_initialize_by(uid: auth_hash['uid'], provider: auth_hash['provider'])
diff --git a/app/views/landing/preferences.html.erb b/app/views/landing/preferences.html.erb
new file mode 100644
index 00000000..542d8d3a
--- /dev/null
+++ b/app/views/landing/preferences.html.erb
@@ -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 .
+%>
+
+
+
+ <%= render layout: 'shared/center_panel' do %>
+
+
+
<%= t('preferences') %>
+
+
+ <% if @user %>
+
+ <% else %>
+
<%= t('preferences_logged') %>
+ <% end %>
+
+ <%= link_to t('back'), @user ? meeting_room_url(resource: 'rooms', id: @user.encrypted_id) : root_url, class: 'btn btn-info' %>
+
+
+ <% end %>
+
diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb
index 5cb24cdc..0eee7309 100644
--- a/app/views/layouts/application.html.erb
+++ b/app/views/layouts/application.html.erb
@@ -48,7 +48,7 @@ with BigBlueButton; if not, see .
+ style="background-image:url(<%= image_path(landing_background) if params[:controller] == 'landing' %>);">
diff --git a/app/views/shared/_center_panel.html.erb b/app/views/shared/_center_panel.html.erb
index 6e92cf0f..f5f7bb7e 100644
--- a/app/views/shared/_center_panel.html.erb
+++ b/app/views/shared/_center_panel.html.erb
@@ -25,7 +25,8 @@
<%= yield :footer %>
- <%= 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 %>
diff --git a/config/locales/en-us.yml b/config/locales/en-us.yml
index 9ddfb41a..4dc9358a 100644
--- a/config/locales/en-us.yml
+++ b/config/locales/en-us.yml
@@ -40,6 +40,8 @@ en-US:
admin_room_title: Welcome %{user}
are_you: Are you %{name}?
are_you_sure: Are you sure?
+ background_image: Background Image
+ back: Back
change_recording_visibility: "Change visibility to:"
client:
are_you_sure: Are you sure?
@@ -79,6 +81,7 @@ en-US:
hi_all: Hi Everyone
home_page: Home page
home_title: Welcome to BigBlueButton
+ invalid_file: You may only upload an image file (jpg, gif, png).
invite: Invite
invite_description: (share this link below to invite others to this meeting)
join: Join
@@ -106,6 +109,7 @@ en-US:
my_room: my room
name: Name
'no': 'No'
+ no_file: You must select a file to upload.
not_found_title: Sorry we couldn't find that.
notification_mailer:
recording_ready_email:
@@ -129,6 +133,8 @@ en-US:
users: Users
participants: Users
past_recordings: Past Recordings
+ preferences: Preferences
+ preferences_logged: You must be logged in to edit preferences.
presentation: Presentation
previous_meetings: (previous meetings)
return_to_room: Return to main page
@@ -138,8 +144,8 @@ en-US:
meeting_end: "%{meeting} has ended."
meeting_join: "%{user} joined %{meeting}.\n[Click here join!]"
recording_visibility: "A recording of %{meeting} was %{change}"
- published: published
- unpublished: unpublished
+ published: published.
+ unpublished: unpublished.
start: Start
start_join: Start
start_meeting: Start meeting
@@ -148,6 +154,7 @@ en-US:
subject: Test Email
phrase1: This is a test email sent to %{email}
thumbnails: Thumbnails
+ upload: Upload
url_copy_explanation: Copy this URL to invite others to the meeting
user_person_room: "%{name} personal room"
video: Video
diff --git a/config/routes.rb b/config/routes.rb
index d528f91d..833311c3 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -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}
end
+ get '/preferences', to: 'landing#preferences', as: :preferences
+
root to: 'landing#index', :resource => 'meetings'
end
diff --git a/db/migrate/20170510175654_add_attachment_background_to_users.rb b/db/migrate/20170510175654_add_attachment_background_to_users.rb
new file mode 100644
index 00000000..08b462c0
--- /dev/null
+++ b/db/migrate/20170510175654_add_attachment_background_to_users.rb
@@ -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
diff --git a/db/schema.rb b/db/schema.rb
index a3ce761f..51b91b7d 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,17 +10,21 @@
#
# 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|
- t.string "provider", null: false
- t.string "uid", null: false
+ t.string "provider", null: false
+ t.string "uid", null: false
t.string "name"
- t.datetime "created_at", null: false
- t.datetime "updated_at", null: false
+ t.datetime "created_at", null: false
+ t.datetime "updated_at", null: false
t.string "username"
- t.string "encrypted_id", null: false
+ t.string "encrypted_id", null: false
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 ["encrypted_id"], name: "index_users_on_encrypted_id", unique: true
t.index ["provider", "uid"], name: "index_users_on_provider_and_uid", unique: true
diff --git a/env b/env
index 83b14a96..ba0ad89f 100644
--- a/env
+++ b/env
@@ -57,6 +57,15 @@ GREENLIGHT_USE_WEBHOOKS=false
SLACK_WEBHOOK=
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
#
GREENLIGHT_MAIL_NOTIFICATIONS=true