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 %> +
+

<%= t('background_image') + ": " + (@user.background_file_name || '') %>

+ <%= form_for @user, :html => { :multipart => true } do |f| %> +
+ <%= f.file_field :background, class: 'form-control'%> +
+ <%= f.submit t('upload'), class: 'btn btn-info' %> + <% end %> +
+ <% 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 %>
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