forked from External/greenlight
Admin panel (#496)
* Added the administrator role and functionality that comes with it (#403) * GRN-20: Added roles to the user model * GRN-75: Added a view for admins to see their users * GRN-77: Added Edit/Delete/Promote ability for admins * GRN-71: Added admin account by default * Changed the way locales are shown * Updated the rest of the locales * Changed the way available_locales are defined * Updated locales in Russian * Updated locaales for German * Update user.rb * Update admins.js * GRN-15: Added the ability to change color and image from admin interface (#425) * GRN-20: Added roles to the user model * GRN-75: Added a view for admins to see their users * GRN-77: Added Edit/Delete/Promote ability for admins * GRN-71: Added admin account by default * Changed the way locales are shown * Updated the rest of the locales * Changed the way available_locales are defined * Updated locales in Russian * Updated locaales for German * GRN-15: Added the ability for admins to customize color and image * Update user.rb * Update user.rb * Update routes.rb * Update admins_controller.rb * GRN-87:Added a super admin role and made changes to how to the design works (#430) * GRN-20: Added roles to the user model * GRN-75: Added a view for admins to see their users * GRN-77: Added Edit/Delete/Promote ability for admins * GRN-71: Added admin account by default * Changed the way locales are shown * Updated the rest of the locales * Changed the way available_locales are defined * Updated locales in Russian * Updated locaales for German * GRN-15: Added the ability for admins to customize color and image * Added the super admin and completed the design tab * Update user.rb * Update themes_controller_spec.rb * Update routes.rb * Update admins_controller.rb * Removed duplicated code that broke the build after last merge * GRN-78: Restructured some of the views to make the UI more consistent and responsive (#435) * GRN-20: Added roles to the user model * GRN-75: Added a view for admins to see their users * GRN-77: Added Edit/Delete/Promote ability for admins * GRN-71: Added admin account by default * GRN-15: Added the ability for admins to customize color and image * Added the super admin and completed the design tab * GRN-78: Cleaned up buttons and moved signin to its own page * GRN-78: Moved the Rooms and Recordings link to nav bar * Merge fix * Views restructure fix (#458) * Added cache to gitlab-ci.yml * Restructured seed * GRN2-99 -> GRN2-106: UI cleanup and refactoring (#478) * GRN2-98: Change Fullname to Full name * GRN2-105: Changed View Users to Manage Users * GRN2-101/103: Updated email to match branding * GRN2-100: Updated Email Sent flash to be more descriptive * GRN2-104: Redirect user to sign in page w/ flash after clicking activation link * GRN2-102: Changed the wording in the verification email * GRN2-99: Added email form validation * GRN2-106: Cleaned up Users list front end * Fixes to rake and admin password validator for passing rubocop * GRN2-113: Fixed issues with admin panel (#479) * GRN2-116: Code clean up after restructure of views (#482) * Removed unused references * Rubocop * Added pagination to admin view (#483) * GRN2-114: Added the ability for admins to ban/unban users (#487) * Added the ability for admins to ban and unban users * Update sessions_helper.rb * Merge branch 'master' into admin-panel (#492) * Updated rubocop gem * Updated rubocop and fixed issues (#490) * Rubocop fixes * GRN2-122: Updated sign in flow for admins and switch design tab to site settings (#489) * Switched design tab to site settings * Update _header with spaces instead of tabs * Added more test cases to increase coverage (#494)
This commit is contained in:
42
app/views/admins/index.html.erb
Normal file
42
app/views/admins/index.html.erb
Normal file
@ -0,0 +1,42 @@
|
||||
<%
|
||||
# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
|
||||
# Copyright (c) 2018 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="container pt-6">
|
||||
<%= render "shared/components/subtitle", subtitle: t("administrator.title"), search: false %>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-3 mb-4">
|
||||
<div class="list-group list-group-transparent mb-0">
|
||||
<button id="users" class="list-group-item list-group-item-action setting-btn <%= "active" if !params[:setting] || params[:setting] == "users"%>">
|
||||
<span class="icon mr-3"><i class="fas fa-users"></i></span><%= t("administrator.users.title") %>
|
||||
</button>
|
||||
<button id="site_settings" class="list-group-item list-group-item-action setting-btn <%= "active" if params[:setting] == "site_settings"%>">
|
||||
<span class="icon mr-4"><i class="fas fa-cogs"></i></span><%= t("administrator.site_settings.title") %>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-lg-9">
|
||||
<% if defined?(setting_id) && setting_id == "account" %>
|
||||
<%= render "shared/settings/setting_view", setting_id: "account", setting_title: t("administrator.users.edit.title") %>
|
||||
<% else %>
|
||||
<%= render "shared/settings/setting_view", admin_view: true, setting_id: "users", setting_title: t("administrator.users.title") %>
|
||||
<%= render "shared/settings/setting_view", admin_view: true, setting_id: "site_settings", setting_title: t("administrator.site_settings.subtitle") %>
|
||||
<% end %>
|
||||
|
||||
<%= render "shared/modals/delete_account_modal", delete_location: "/" %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
20
app/views/errors/unauthorized.html.erb
Normal file
20
app/views/errors/unauthorized.html.erb
Normal file
@ -0,0 +1,20 @@
|
||||
<%
|
||||
# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
|
||||
# Copyright (c) 2018 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="container text-center pt-9">
|
||||
<div class="display-1 text-muted mb-5">401</div>
|
||||
<h1 class="h2 mb-3"><%= t("errors.unauthorized.message") %></h1>
|
||||
<p class="h4 text-muted font-weight-normal mb-7"><%= t("errors.unauthorized.help") %></p>
|
||||
</div>
|
@ -32,7 +32,10 @@
|
||||
|
||||
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
|
||||
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
|
||||
|
||||
|
||||
<!-- Primary color styling -->
|
||||
<%= stylesheet_link_tag themes_primary_path %>
|
||||
|
||||
<script type="text/javascript">
|
||||
// Rail-ish function to translate a string, according to the Rails locales
|
||||
window.t = function t(key) {
|
||||
@ -42,7 +45,7 @@
|
||||
|
||||
var keys = key.split('.');
|
||||
var value = <%= current_translations.to_json.html_safe %>; // Add I18n variables
|
||||
|
||||
|
||||
keys.forEach(key => {
|
||||
if (value) {
|
||||
value = value[key];
|
||||
@ -77,11 +80,9 @@
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<%= yield %>
|
||||
<%= render 'shared/flash_messages' unless flash.empty? %>
|
||||
|
||||
<% if current_user %>
|
||||
<%= render "shared/modals/create_room_modal" %>
|
||||
<% end %>
|
||||
<%= yield %>
|
||||
</div>
|
||||
|
||||
<%= render "shared/footer" %>
|
||||
|
@ -13,8 +13,6 @@
|
||||
# with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
%>
|
||||
|
||||
<%= render 'shared/flash_messages' unless flash.empty? %>
|
||||
|
||||
<div class="background">
|
||||
<div class="container pt-9 pb-8">
|
||||
<div class="row">
|
||||
|
@ -13,8 +13,6 @@
|
||||
# with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
%>
|
||||
|
||||
<%= render 'shared/flash_messages' unless flash.empty? %>
|
||||
|
||||
<div class="container">
|
||||
<div class="row pt-7">
|
||||
<div class="col col-4 offset-4">
|
||||
|
@ -13,8 +13,6 @@
|
||||
# with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
%>
|
||||
|
||||
<%= render 'shared/flash_messages' unless flash.empty? %>
|
||||
|
||||
<div class="container">
|
||||
<div class="row pt-7">
|
||||
<div class="col col-4 offset-4">
|
||||
|
@ -13,11 +13,9 @@
|
||||
# with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
%>
|
||||
|
||||
<%= render 'shared/flash_messages' unless flash.empty? %>
|
||||
|
||||
<div class="background pb-1">
|
||||
<div class="container">
|
||||
<div class="row pt-9">
|
||||
<div class="row pt-7">
|
||||
<div class="col-lg-9 col-sm-12">
|
||||
<div id="room-title" class="display-3 form-inline <%= 'edit_hover_class' if current_user.main_room != @room %>">
|
||||
<h1 contenteditable=false id="user-text" class="display-3 text-left mb-3 font-weight-400"><%= @room.name %></h1>
|
||||
@ -51,7 +49,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="room_block_container" class="row pt-7 pb-2">
|
||||
<div id="room_block_container" class="row pt-7 pb-5">
|
||||
<% if current_user.rooms.length > 1 %>
|
||||
<div class="col-lg-4 col-md-6 col-sm-12">
|
||||
<%= link_to current_user.main_room do %>
|
||||
@ -67,8 +65,11 @@
|
||||
<%= render "shared/modals/delete_room_modal", room: room %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<%= render "shared/components/create_room_block"%>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<%= render "shared/sessions", recordings: @recordings, only_public: false, user_recordings: false %>
|
||||
<%= render "shared/sessions", recordings: @recordings, only_public: false, user_recordings: false, title: t("room.recordings")%>
|
||||
|
||||
<%= render "shared/modals/create_room_modal" %>
|
||||
|
@ -15,16 +15,19 @@
|
||||
|
||||
<% flash.each do |key,value| %>
|
||||
<% if key.eql? "success" %>
|
||||
<div class="alert alert-icon alert-success text-center mb-0">
|
||||
<%= content_tag :div, value, class: "flash #{key} d-inline" %>
|
||||
<div class="alert alert-success alert-dismissible text-center mb-0">
|
||||
<button type="button" class="close" data-dismiss="alert">×</button>
|
||||
<%= value %>
|
||||
</div>
|
||||
<% elsif key.eql? "alert" %>
|
||||
<div class="alert alert-icon alert-danger text-center mb-0">
|
||||
<%= content_tag :div, value, class: "flash #{key} d-inline" %>
|
||||
<div class="alert alert-danger alert-dismissible text-center mb-0">
|
||||
<button type="button" class="close" data-dismiss="alert">×</button>
|
||||
<%= value %>
|
||||
</div>
|
||||
<% elsif key.eql? "info" %>
|
||||
<div class="alert alert-icon alert-info text-center mb-0">
|
||||
<%= content_tag :div, value, class: "flash #{key} d-inline" %>
|
||||
<div class="alert alert-info alert-dismissible text-center mb-0">
|
||||
<button type="button" class="close" data-dismiss="alert">×</button>
|
||||
<%= value %>
|
||||
</div>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
@ -14,65 +14,77 @@
|
||||
%>
|
||||
|
||||
<div class="header py-4">
|
||||
<div class="container">
|
||||
<div class="d-flex">
|
||||
<%= link_to (current_user ? current_user.main_room : root_path), class: "header-brand" do %>
|
||||
<%= image_tag(Rails.configuration.branding_image,class: "header-brand-img") %>
|
||||
<% end %>
|
||||
<div class="container">
|
||||
<div class="d-flex">
|
||||
<%= link_to (current_user ? home_page : root_path), class: "header-brand" do %>
|
||||
<%= image_tag(logo_image, class: "header-brand-img", alt:"") %>
|
||||
<% end %>
|
||||
|
||||
<div class="d-flex ml-auto">
|
||||
<% if current_user %>
|
||||
<a id="create-room" class="px-5 ml-2 mt-1" href="" data-toggle="modal" data-target="#createRoomModal">
|
||||
<i class="fas fa-plus"></i> <%= t("header.create_room") %>
|
||||
</a>
|
||||
<div class="dropdown">
|
||||
<a href="#" class="nav-link pr-0" data-toggle="dropdown">
|
||||
<% if current_user.image.blank? %>
|
||||
<span class="avatar"><%= current_user.name.first %></span>
|
||||
<% else %>
|
||||
<span id="user-avatar" class="avatar d-none"><%= current_user.name.first %></span>
|
||||
<%= image_tag(current_user.image, id: "user-image", class: "avatar") %>
|
||||
<% end %>
|
||||
<span class="ml-2 d-none d-lg-block">
|
||||
<span class="text-default username"><%= current_user.name %></span>
|
||||
</span>
|
||||
</a>
|
||||
<div class="dropdown-menu dropdown-menu-right dropdown-menu-arrow" x-placement="bottom-end">
|
||||
<%= link_to current_user.main_room, class: "dropdown-item" do %>
|
||||
<i class="dropdown-icon fas fa-home"></i> <%= t("header.dropdown.home") %>
|
||||
<% end %>
|
||||
<%= link_to get_user_recordings_path(current_user), class: "dropdown-item" do %>
|
||||
<i class="dropdown-icon fas fa-video"></i> <%= t("room.recordings") %>
|
||||
<% end %>
|
||||
<%= link_to edit_user_path(current_user), class: "dropdown-item" do %>
|
||||
<i class="dropdown-icon fas fa-cog"></i> <%= t("header.dropdown.settings") %>
|
||||
<% end %>
|
||||
<div class="dropdown-divider"></div>
|
||||
<a class="dropdown-item" href="http://docs.bigbluebutton.org/install/greenlight-v2.html" target="_blank">
|
||||
<i class="dropdown-icon far fa-question-circle"></i> <%= t("header.dropdown.help") %>
|
||||
</a>
|
||||
<%= link_to logout_path, class: "dropdown-item" do %>
|
||||
<i class="dropdown-icon fas fa-sign-out-alt"></i> <%= t("header.dropdown.signout") %>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex ml-auto">
|
||||
<% if current_user %>
|
||||
|
||||
<% if current_user.has_role? :super_admin %>
|
||||
<% admins_page = params[:controller] == "admins" && params[:action] == "index" ? "active" : "" %>
|
||||
<%= link_to admins_path, class: "px-3 mx-1 mt-1 header-nav #{admins_page}" do %>
|
||||
<i class="fas fa-home pr-1 "></i> <%= t("header.dropdown.home") %>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<% rooms_page = params[:controller] == "rooms" && params[:action] == "show" ? "active" : "" %>
|
||||
<%= link_to current_user.main_room, class: "px-3 mx-1 mt-1 header-nav #{rooms_page}" do %>
|
||||
<i class="fas fa-home pr-1 "></i> <%= t("header.dropdown.home") %>
|
||||
<% end %>
|
||||
|
||||
<% all_rec_page = params[:controller] == "users" && params[:action] == "recordings" ? "active" : "" %>
|
||||
<%= link_to get_user_recordings_path(current_user), class: "px-3 mx-1 mt-1 header-nav #{all_rec_page}" do %>
|
||||
<i class="fas fa-video pr-1"></i> <%= t("header.all_recordings") %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
<div class="dropdown">
|
||||
<a href="#" class="nav-link pr-0" data-toggle="dropdown">
|
||||
<% if current_user.image.blank? %>
|
||||
<span class="avatar"><%= current_user.name.first %></span>
|
||||
<% else %>
|
||||
<span id="user-avatar" class="avatar d-none"><%= current_user.name.first %></span>
|
||||
<%= image_tag(current_user.image, id: "user-image", class: "avatar") %>
|
||||
<% end %>
|
||||
<span class="ml-2 d-none d-lg-block">
|
||||
<span class="text-default username"><%= current_user.name %></span>
|
||||
</span>
|
||||
</a>
|
||||
<div class="dropdown-menu dropdown-menu-right dropdown-menu-arrow" x-placement="bottom-end">
|
||||
<%= link_to edit_user_path(current_user), class: "dropdown-item" do %>
|
||||
<i class="dropdown-icon fas fa-id-card mr-3"></i><%= t("header.dropdown.settings") %>
|
||||
<% end %>
|
||||
<% if current_user.has_role? :admin %>
|
||||
<%= link_to admins_path, class: "dropdown-item" do %>
|
||||
<i class="dropdown-icon fas fa-user-tie mr-3"></i><%= t("header.dropdown.account_settings") %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<div class="dropdown-divider"></div>
|
||||
<a class="dropdown-item" href="http://docs.bigbluebutton.org/install/greenlight-v2.html" target="_blank">
|
||||
<i class="dropdown-icon far fa-question-circle"></i> <%= t("header.dropdown.help") %>
|
||||
</a>
|
||||
<%= link_to logout_path, class: "dropdown-item" do %>
|
||||
<i class="dropdown-icon fas fa-sign-out-alt"></i> <%= t("header.dropdown.signout") %>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
<% else %>
|
||||
<% allow_greenlight_accounts = allow_greenlight_accounts? %>
|
||||
<% if Rails.configuration.omniauth_ldap %>
|
||||
<%= link_to t("login"), omniauth_login_url(:ldap), :class => "btn btn-pill btn-outline-primary mx-2 sign-in-button" %>
|
||||
<%= link_to t("login"), omniauth_login_url(:ldap), :class => "btn btn-outline-primary mx-2 sign-in-button" %>
|
||||
<% elsif allow_greenlight_accounts %>
|
||||
<%= link_to t("login"), "#loginModal", :class => "btn btn-pill btn-outline-primary mx-2 sign-in-button", "data-toggle": "modal" %>
|
||||
<%= link_to t("login"), signin_path, :class => "btn btn-outline-primary mx-2 sign-in-button" %>
|
||||
<% elsif Rails.configuration.loadbalanced_configuration %>
|
||||
<%= link_to t("login"), omniauth_login_url(:bn_launcher), :class => "btn btn-pill btn-outline-primary mx-2 sign-in-button" %>
|
||||
<% else %>
|
||||
<%= link_to t("login"), "#loginModal", :class => "btn btn-pill btn-outline-primary mx-2 sign-in-button", "data-toggle": "modal" %>
|
||||
<%= link_to t("login"), signin_path, :class => "btn btn-outline-primary mx-2 sign-in-button" %>
|
||||
<% end %>
|
||||
|
||||
<% if allow_user_signup? && allow_greenlight_accounts %>
|
||||
<%= link_to t("signup.title"), signup_path, :class => "btn btn-pill btn-outline-primary mx-2 sign-in-button" %>
|
||||
<%= link_to t("signup.title"), signup_path, :class => "btn btn-outline-primary mx-2 sign-in-button" %>
|
||||
<% end %>
|
||||
|
||||
<%= render "shared/modals/login_modal" %>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -40,4 +40,4 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<%= render "shared/sessions", recordings: @room.public_recordings, only_public: true, user_recordings: false %>
|
||||
<%= render "shared/sessions", recordings: @room.public_recordings, only_public: true, user_recordings: false, title: t("room.recordings") %>
|
||||
|
@ -16,7 +16,7 @@
|
||||
<div class="sessions pb-5">
|
||||
<div class="container pt-6">
|
||||
|
||||
<%= render "shared/components/subtitle", subtitle: (only_public ? t("recording.visibility.public") + " " : "") + t("room.recordings"), search: true %>
|
||||
<%= render "shared/components/subtitle", subtitle: (only_public ? t("recording.visibility.public") + " " : "") + title, search: true %>
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="card">
|
||||
|
47
app/views/shared/admin_settings/_site_settings.html.erb
Normal file
47
app/views/shared/admin_settings/_site_settings.html.erb
Normal file
@ -0,0 +1,47 @@
|
||||
<%
|
||||
# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
|
||||
# Copyright (c) 2018 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="form-group">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="mb-7 form-group">
|
||||
<label class="form-label"><%= t("administrator.site_settings.branding.title") %></label>
|
||||
<label class="form-label text-muted"><%= t("administrator.site_settings.branding.info") %></label>
|
||||
<div class="input-group">
|
||||
<input id="branding-url" type="text" class="form-control" value="<%= logo_image %>">
|
||||
<span class="input-group-append">
|
||||
<button onclick="changeBrandingImage('<%= admin_branding_path %>')" class="btn btn-primary" type="button"><%= t("administrator.site_settings.branding.change") %></button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="form-label"><%= t("administrator.site_settings.color.title") %></label>
|
||||
<label class="form-label text-muted"><%= t("administrator.site_settings.color.info") %></label>
|
||||
<div class="row gutters-xs">
|
||||
<div class="col-auto">
|
||||
<input id="coloring-path" value="<%= admin_coloring_path %>" hidden>
|
||||
<label class="colorinput">
|
||||
<input name="color" type="color" value="<%= user_color %>" class="colorinput-input" />
|
||||
<span class="colorinput-color" style="background: <%= user_color %>;">
|
||||
<i class="p-1 fas fa-paint-brush"></i>
|
||||
</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
143
app/views/shared/admin_settings/_users.html.erb
Normal file
143
app/views/shared/admin_settings/_users.html.erb
Normal file
@ -0,0 +1,143 @@
|
||||
<%
|
||||
# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
|
||||
# Copyright (c) 2018 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="form-group">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-hover table-outline table-vcenter text-nowrap card-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th data-header="name" data-order="<%= @order_column == "name" ? @order_direction : "none" %>">
|
||||
<%= t("administrator.users.table.name") %>
|
||||
<% if @order_column == "name" && @order_direction == "desc" %>
|
||||
↓
|
||||
<% elsif @order_column == "name" && @order_direction == "asc" %>
|
||||
↑
|
||||
<% end %>
|
||||
</th>
|
||||
<th data-header="email" data-order="<%= @order_column == "email" ? @order_direction : "none" %>">
|
||||
<%= t("administrator.users.table.username") %>
|
||||
<% if @order_column == "email" && @order_direction == "desc" %>
|
||||
↓
|
||||
<% elsif @order_column == "email" && @order_direction == "asc" %>
|
||||
↑
|
||||
<% end %>
|
||||
</th>
|
||||
<th class="text-left" data-header="provider" data-order="<%= @order_column == "provider" ? @order_direction : "none" %>">
|
||||
<%= t("administrator.users.table.authenticator") %>
|
||||
<% if @order_column == "provider" && @order_direction == "desc" %>
|
||||
↓
|
||||
<% elsif @order_column == "provider" && @order_direction == "asc" %>
|
||||
↑
|
||||
<% end %>
|
||||
</th>
|
||||
<th class="text-center">
|
||||
<%= t("administrator.users.table.role") %>
|
||||
</th>
|
||||
<th class="text-center">
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="users-table">
|
||||
<tr id="no_users_found" style="display: none;">
|
||||
<td colspan="7" class="text-center h4 p-6 font-weight-normal" >
|
||||
<%= t("administrator.users.table.not_found") %>
|
||||
</td>
|
||||
</tr>
|
||||
<% if @users %>
|
||||
<% @users.each do |user| %>
|
||||
<% if user != current_user %>
|
||||
<tr data-user-uid="<%= user.uid %>">
|
||||
<td>
|
||||
<div><%= user.name %></div>
|
||||
<div class="small text-muted"><%= [t("administrator.users.table.created"), ": ", user.created_at].join %></div>
|
||||
</td>
|
||||
<td><%= user.email && user.email != "" ? user.email : user.username%></td>
|
||||
<td><%= user.provider %></td>
|
||||
<td class="text-center">
|
||||
<% if user.has_role? :denied %>
|
||||
<div class="user-role btn btn-sm btn-gray-dark">
|
||||
<%= t("roles.banned") %>
|
||||
</div>
|
||||
<% elsif user.has_role? :super_admin %>
|
||||
<div class="user-role btn btn-sm btn-red">
|
||||
<%= t("roles.super_admin") %>
|
||||
</div>
|
||||
<% elsif user.has_role? :admin %>
|
||||
<div class="user-role btn btn-sm btn-yellow">
|
||||
<%= t("roles.administrator") %>
|
||||
</div>
|
||||
<% else %>
|
||||
<div class="user-role btn btn-sm btn-gray">
|
||||
<%= t("roles.user") %>
|
||||
</div>
|
||||
<% end %>
|
||||
</td>
|
||||
<td>
|
||||
<% unless user.has_role? :super_admin %>
|
||||
<div class="item-action dropdown">
|
||||
<a href="javascript:void(0)" data-toggle="dropdown" class="icon">
|
||||
<i class="fas fa-ellipsis-v px-4"></i>
|
||||
</a>
|
||||
<div class="dropdown-menu dropdown-menu">
|
||||
<% if user.has_role? :denied %>
|
||||
<%= button_to admin_unban_path(user_uid: user.uid), class: "dropdown-item" do %>
|
||||
<i class="dropdown-icon fas fa-lock-open"></i> <%= t("administrator.users.settings.unban") %>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<%= link_to admin_edit_user_path(user_uid: user.uid), class: "dropdown-item" do %>
|
||||
<i class="dropdown-icon fas fa-user-edit"></i> <%= t("administrator.users.settings.edit") %>
|
||||
<% end %>
|
||||
<button class= "delete-user dropdown-item" data-toggle="modal" data-target="#deleteAccountModal">
|
||||
<i class="dropdown-icon fas fa-user-minus"></i> <%= t("administrator.users.settings.delete") %>
|
||||
</button>
|
||||
|
||||
<% if user.has_role? :admin %>
|
||||
<%= button_to admin_demote_path(user_uid: user.uid), class: "dropdown-item" do %>
|
||||
<i class="dropdown-icon fas fa-level-down-alt"></i> <%= t("administrator.users.settings.demote") %>
|
||||
<% end %>
|
||||
<% elsif user.has_role? :user %>
|
||||
<%= button_to admin_promote_path(user_uid: user.uid), class: "dropdown-item" do %>
|
||||
<i class="dropdown-icon fas fa-level-up-alt"></i> <%= t("administrator.users.settings.promote") %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<%= button_to admin_ban_path(user_uid: user.uid), class: "dropdown-item" do %>
|
||||
<i class="dropdown-icon fas fa-lock"></i> <%= t("administrator.users.settings.ban") %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<tr>
|
||||
<td colspan="7" class="text-center h4 p-6 font-weight-normal" >
|
||||
<%= t("administrator.users.table.no_users") %>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="float-right mt-4">
|
||||
<%== pagy_bootstrap_nav(@pagy) %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
29
app/views/shared/components/_create_room_block.html.erb
Normal file
29
app/views/shared/components/_create_room_block.html.erb
Normal file
@ -0,0 +1,29 @@
|
||||
<%
|
||||
# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
|
||||
# Copyright (c) 2018 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="col-lg-4 col-md-6 col-sm-12">
|
||||
<div id="create-room-block" class="card-body p-1 mb-5 background" data-toggle="modal" data-target="#createRoomModal">
|
||||
<div class="row p-3">
|
||||
<div class="col-4">
|
||||
<span class="stamp stamp-md bg-primary">
|
||||
<i class="fas fa-plus"></i>
|
||||
</span>
|
||||
</div>
|
||||
<div class="col-8">
|
||||
<h4 class="my-2"><%= t("room.create_room") %></h4>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -18,7 +18,7 @@
|
||||
<table class="table table-hover table-vcenter text-wrap table-no-border">
|
||||
<tbody class="no-border-top">
|
||||
<td>
|
||||
<span class="stamp stamp-md bg-cyan">
|
||||
<span class="stamp stamp-md bg-primary">
|
||||
<% if room == current_user.main_room %>
|
||||
<i class="fas fa-home"></i>
|
||||
<% else %>
|
||||
|
@ -14,11 +14,11 @@
|
||||
%>
|
||||
|
||||
<div class="row mt-2">
|
||||
<div class="col-9">
|
||||
<div class="col-8">
|
||||
<p class="subtitle"><%= subtitle %></p>
|
||||
</div>
|
||||
<% if search %>
|
||||
<div id="search_bar" class="col-3">
|
||||
<div id="search_bar" class="col-4">
|
||||
<div class="input-icon">
|
||||
<input type="text" class="form-control btn-pill" placeholder="Search...">
|
||||
<span class="input-icon-addon">
|
||||
|
@ -63,8 +63,8 @@
|
||||
<span class="custom-switch-indicator float-right"></span>
|
||||
</label>
|
||||
<div class="mt-4">
|
||||
<%= f.submit t("header.create_room"), id: "create-room-submit", class: "create-only btn btn-outline-primary btn-block btn-pill" %>
|
||||
<%= f.submit t("modal.room_settings.update"), id: "create-room-submit", class: "update-only btn btn-outline-primary btn-block btn-pill" %>
|
||||
<%= f.submit t("modal.create_room.create"), id: "create-room-submit", class: "create-only btn btn-primary btn-block" %>
|
||||
<%= f.submit t("modal.room_settings.update"), id: "create-room-submit", class: "update-only btn btn-primary btn-block" %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
|
@ -22,11 +22,11 @@
|
||||
<h3><%= t("modal.delete_account.confirm") %></h3>
|
||||
</div>
|
||||
|
||||
<button type="button" class="btn btn-pill btn-info my-1 btn-del-room" data-dismiss="modal">
|
||||
<button type="button" class="btn btn-info my-1 btn-del-room" data-dismiss="modal">
|
||||
<%= t("modal.delete_account.keep") %>
|
||||
</button>
|
||||
|
||||
<%= button_to delete_user_path, method: :delete, id: "delete-confirm", class: "btn btn-pill btn-danger my-1 btn-del-room" do %>
|
||||
<%= button_to delete_location, method: :delete, id: "delete-confirm", class: "btn btn-danger my-1 btn-del-room" do %>
|
||||
<%= t("modal.delete_account.delete") %>
|
||||
<% end %>
|
||||
|
||||
|
@ -22,11 +22,11 @@
|
||||
<h3><%= t("modal.delete_room.confirm", room: room.name) %></h3>
|
||||
</div>
|
||||
|
||||
<button type="button" class="btn btn-pill btn-info my-1 btn-del-room" data-dismiss="modal">
|
||||
<button type="button" class="btn btn-info my-1 btn-del-room" data-dismiss="modal">
|
||||
<%= t("modal.delete_room.keep") %>
|
||||
</button>
|
||||
|
||||
<%= button_to room, method: :delete, id: "delete-confirm", class: "btn btn-pill btn-danger my-1 btn-del-room" do %>
|
||||
<%= button_to room, method: :delete, id: "delete-confirm", class: "btn btn-danger my-1 btn-del-room" do %>
|
||||
<%= t("modal.delete_room.delete") %>
|
||||
<% end %>
|
||||
|
||||
|
@ -27,4 +27,4 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<%= render "shared/modals/delete_account_modal" %>
|
||||
<%= render "shared/modals/delete_account_modal", delete_location: delete_user_path %>
|
||||
|
@ -16,10 +16,44 @@
|
||||
<%= content_tag(:div, id: setting_id, class: "setting-view card") do %>
|
||||
<div class="card-body p-6">
|
||||
<div class="card-title text-primary">
|
||||
<h4><%= setting_title %></h4>
|
||||
<div class="form-group">
|
||||
<div class="row">
|
||||
<% if setting_id == "users" %>
|
||||
<div class="col-7 mt-2">
|
||||
<h4><%= setting_title %></h4>
|
||||
</div>
|
||||
|
||||
<div class="col-5 float-right">
|
||||
<div id="search-bar">
|
||||
<div class="input-group">
|
||||
<input id="search-input" type="text" class="form-control" placeholder="<%= t("settings.search") %>..." value="<%= @search %>">
|
||||
<% unless @search.blank? %>
|
||||
<span id="clear-search" class="text-primary" onclick="clearSearch()">
|
||||
<i class="fas fa-times"></i>
|
||||
</span>
|
||||
<% end %>
|
||||
<span class="input-group-append">
|
||||
<button class="btn btn-primary" type="button" onclick="searchPage()">
|
||||
<i class="fas fa-search"></i>
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% else %>
|
||||
<div class="col-12 mt-2">
|
||||
<h4 class="text-primary"><%= setting_title %></h4>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
|
||||
<%= render "shared/settings/#{setting_id}" %>
|
||||
<% unless (defined?(admin_view)).nil? %>
|
||||
<%= render "shared/admin_settings/#{setting_id}" %>
|
||||
<% else %>
|
||||
<%= render "shared/settings/#{setting_id}" %>
|
||||
<% end %>
|
||||
</div>
|
||||
<% end %>
|
||||
|
@ -17,7 +17,7 @@
|
||||
%>
|
||||
<div style="text-align:center; font-family:'Source Sans Pro', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', Arial, sans-serif">
|
||||
<div style="display:inline-block; background-color:#F5F7FB; border:1px solid #d3d3d3; padding: 25px 70px">
|
||||
<%= image_tag(Rails.configuration.branding_image) %>
|
||||
<%= image_tag(logo_image, height: '70')%>
|
||||
|
||||
<h1 style="margin-bottom:30px">
|
||||
<%= t('mailer.user.password_reset.title') %>
|
||||
@ -32,7 +32,7 @@
|
||||
</p>
|
||||
|
||||
<a
|
||||
style="background: #467fcf;color: #ffffff; padding: 10px 15px; box-shadow: 0 2px 4px 0 rgba(0,0,0,.25);border: 1px solid transparent;text-decoration:none;"
|
||||
style="background: <%= user_color %>;color: #ffffff; padding: 10px 15px; box-shadow: 0 2px 4px 0 rgba(0,0,0,.25);border: 1px solid transparent;text-decoration:none;"
|
||||
href="<%= @url %>">
|
||||
<%= t('mailer.user.password_reset.reset_link') %>
|
||||
</a>
|
||||
|
@ -18,21 +18,25 @@
|
||||
|
||||
<div style="text-align:center; font-family:'Source Sans Pro', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', Arial, sans-serif">
|
||||
<div style="display:inline-block; background-color:#F5F7FB; border:1px solid #d3d3d3; padding: 25px 70px">
|
||||
<%= image_tag(Rails.configuration.branding_image) %>
|
||||
<%= image_tag(logo_image, height: '70') %>
|
||||
|
||||
<h1 style="margin-bottom:30px">
|
||||
<%= t('mailer.user.verify_email.welcome', bigbluebutton: t('bigbluebutton'), name: @user[:name]) %>
|
||||
<%= t('mailer.user.verify_email.welcome', name: @user[:name]) %>
|
||||
</h1>
|
||||
|
||||
<p>
|
||||
<%= t('mailer.user.verify_email.success', bigbluebutton: t('bigbluebutton'), email: @user[:email]) %>
|
||||
<%= t('mailer.user.verify_email.success', bigbluebutton: t('bigbluebutton')) %>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<%= t('mailer.user.verify_email.username', email: @user[:email]) %>
|
||||
</p>
|
||||
|
||||
<p style="margin-bottom:45px;">
|
||||
<%= t('mailer.user.verify_email.verify') %>
|
||||
</p>
|
||||
|
||||
<a style="background: #467fcf;color: #ffffff; padding: 10px 15px; box-shadow: 0 2px 4px 0 rgba(0,0,0,.25);border: 1px solid transparent;text-decoration:none;" href="<%= @url %>">
|
||||
<a style="background: <%= user_color %>;color: #ffffff; padding: 10px 15px; box-shadow: 0 2px 4px 0 rgba(0,0,0,.25);border: 1px solid transparent;text-decoration:none;" href="<%= @url %>">
|
||||
<%= t('mailer.user.verify_email.verify_link') %>
|
||||
</a>
|
||||
|
||||
|
@ -16,9 +16,11 @@
|
||||
# with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
%>
|
||||
|
||||
<%= t('mailer.user.verify_email.welcome', bigbluebutton: t('bigbluebutton'), name: @user[:name]) %>
|
||||
<%= t('mailer.user.verify_email.welcome', name: @user[:name]) %>
|
||||
|
||||
<%= t('mailer.user.verify_email.success', bigbluebutton: t('bigbluebutton'), email: @user[:email]) %>
|
||||
<%= t('mailer.user.verify_email.success', bigbluebutton: t('bigbluebutton')) %>
|
||||
|
||||
<%= t('mailer.user.verify_email.username', email: @user[:email]) %>
|
||||
|
||||
<%= t('mailer.user.verify_email.verify_text', url: @url) %>
|
||||
|
||||
|
@ -13,7 +13,7 @@
|
||||
# with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
%>
|
||||
|
||||
<div class="container pt-8">
|
||||
<div class="container pt-6">
|
||||
<%= render "shared/components/subtitle", subtitle: t("settings.title"), search: false %>
|
||||
|
||||
<div class="row">
|
||||
@ -30,12 +30,6 @@
|
||||
</button>
|
||||
<% end %>
|
||||
|
||||
<% if Rails.configuration.allow_custom_branding %>
|
||||
<button id="design" class="list-group-item list-group-item-action setting-btn <%= "active" if params[:setting] == "design"%>">
|
||||
<span class="icon mr-3"><i class="fas fa-edit"></i></span><%= t("settings.design.title") %>
|
||||
</button>
|
||||
<% end %>
|
||||
|
||||
<button id="delete" class="list-group-item list-group-item-action setting-btn <%= "active" if params[:setting] == "delete"%>">
|
||||
<span class="icon mr-3"><i class="fas fa-trash-alt"></i></span><%= t("settings.delete.title") %>
|
||||
</button>
|
||||
@ -49,10 +43,6 @@
|
||||
<% end %>
|
||||
</ul>
|
||||
<% end %>
|
||||
|
||||
<div class="mt-8">
|
||||
<%= render 'shared/flash_messages' unless flash.empty? %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@ -63,10 +53,6 @@
|
||||
<%= render "shared/settings/setting_view", setting_id: "password", setting_title: t("settings.password.subtitle") %>
|
||||
<% end %>
|
||||
|
||||
<% if Rails.configuration.allow_custom_branding %>
|
||||
<%= render "shared/settings/setting_view", setting_id: "design", setting_title: t("settings.design.subtitle") %>
|
||||
<% end %>
|
||||
|
||||
<%= render "shared/settings/setting_view", setting_id: "delete", setting_title: t("settings.delete.subtitle") %>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -15,7 +15,7 @@
|
||||
|
||||
<div class="container">
|
||||
<div class="row pt-7">
|
||||
<div class="col col-4 offset-4">
|
||||
<div class="col col-lg-6 offset-lg-3">
|
||||
<div class="card">
|
||||
<div class="card-header background">
|
||||
<h4 class="mt-2"><%= t("signup.subtitle") %></h4>
|
||||
@ -23,7 +23,7 @@
|
||||
<div class="card-body background">
|
||||
<% unless iconset_providers.length.zero? %>
|
||||
<% iconset_providers.each do |provider| %>
|
||||
<%= link_to omniauth_login_url(provider), class: "customBtn-#{provider}" do %>
|
||||
<%= link_to omniauth_login_url(provider), class: "customBtn-#{provider} oauth-signin" do %>
|
||||
<span class="customBtn-icon">
|
||||
<img class="customBtn-image"></img>
|
||||
</span>
|
||||
@ -69,9 +69,9 @@
|
||||
<div class="invalid-feedback d-block"><%= @user.errors.full_messages_for(:accepted_terms).first %></div>
|
||||
</div>
|
||||
<% end %>
|
||||
<div class="card-footer">
|
||||
<%= f.submit t("signup.title"), class: "btn btn-primary float-right ml-2" %>
|
||||
<%= link_to t("cancel"), root_path, class: "btn btn-secondary float-right ml-2" %>
|
||||
<div class="card-footer px-0 pb-0">
|
||||
<%= f.submit t("signup.title"), class: "btn btn-primary btn-block signin-button" %>
|
||||
<%= link_to t("cancel"), root_path, class: "btn btn-secondary btn-block signin-button" %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
|
@ -18,4 +18,4 @@
|
||||
# without losing all css
|
||||
%>
|
||||
|
||||
<%= render "shared/sessions", recordings: @recordings, only_public: false, user_recordings: true %>
|
||||
<%= render "shared/sessions", recordings: @recordings, only_public: false, user_recordings: true, title: t("recording.all_recordings") %>
|
||||
|
@ -13,18 +13,18 @@
|
||||
# with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
%>
|
||||
|
||||
<div class="modal fade" id="loginModal" 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">
|
||||
<h3><%= t("login") %></h3>
|
||||
</div>
|
||||
<div class="container">
|
||||
<div class="row pt-7">
|
||||
<div class="col col-lg-6 offset-lg-3">
|
||||
<div class="card">
|
||||
<div class="card-header background">
|
||||
<h4 class="mt-2"><%= t("login_title") %></h4>
|
||||
</div>
|
||||
<div class="card-body background">
|
||||
<% unless iconset_providers.length.zero? %>
|
||||
<% iconset_providers.each do |provider| %>
|
||||
<%= link_to omniauth_login_url(provider), class: "customBtn-#{provider}" do %>
|
||||
<span class="customBtn-icon">
|
||||
<%= link_to omniauth_login_url(provider), class: "customBtn-#{provider} oauth-signin" do %>
|
||||
<span class="customBtn-icon ">
|
||||
<img class="customBtn-image"></img>
|
||||
</span>
|
||||
<span class="customBtn-text"><%= t("modal.login.with", provider: t("provider.#{provider}")) %></span>
|
||||
@ -32,7 +32,7 @@
|
||||
<% end %>
|
||||
<div class="or-line my-6">
|
||||
<div>
|
||||
<span class="text-uppercase">
|
||||
<span class="text-uppercase" style="background-color: #F5F7FB;">
|
||||
<%= t("modal.login.or") %>
|
||||
</span>
|
||||
</div>
|
||||
@ -62,8 +62,8 @@
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
<div class="form-footer">
|
||||
<%= f.submit t("login"), class: "btn btn-outline-primary btn-block btn-pill" %>
|
||||
<div class="card-footer px-0">
|
||||
<%= f.submit t("login"), class: "btn btn-primary btn-block signin-button" %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
Reference in New Issue
Block a user