From 46d8a4bbca244be5eaf902c4eff21335dcc70845 Mon Sep 17 00:00:00 2001 From: Trevor Vallender Date: Thu, 30 May 2024 09:07:54 +0100 Subject: [PATCH] Add ActionText and user profile text --- app/assets/stylesheets/colors.css | 1 + app/assets/stylesheets/forms.css | 10 ++++++- app/controllers/users_controller.rb | 34 +++++++++++++++++++++-- app/models/user.rb | 1 + app/views/layouts/application.html.erb | 1 + app/views/users/_form.html.erb | 34 +++++++++++++++++------ app/views/users/edit.html.erb | 6 ++++ app/views/users/show.html.erb | 13 +++++++-- config/locales/en.yml | 12 ++++++++ config/routes.rb | 2 +- test/controllers/users_controller_test.rb | 18 ++++++++++++ test/fixtures/action_text/rich_texts.yml | 8 +++--- 12 files changed, 120 insertions(+), 20 deletions(-) create mode 100644 app/views/users/edit.html.erb diff --git a/app/assets/stylesheets/colors.css b/app/assets/stylesheets/colors.css index 8c77bdc..b2cba83 100644 --- a/app/assets/stylesheets/colors.css +++ b/app/assets/stylesheets/colors.css @@ -12,4 +12,5 @@ --notice-text-color: #fff; --invalid-alert: #d00; + --input-background: #fff; } diff --git a/app/assets/stylesheets/forms.css b/app/assets/stylesheets/forms.css index 1eb719e..219fceb 100644 --- a/app/assets/stylesheets/forms.css +++ b/app/assets/stylesheets/forms.css @@ -1,4 +1,4 @@ -form { +form, fieldset { display: grid; gap: 1rem; grid-template-columns: 1fr 2fr; @@ -31,4 +31,12 @@ form { color: var(--invalid-alert); font-size: .8em; } + + fieldset, p, trix-editor { + grid-column: 1/3; + } + + trix-editor { + background-color: var(--input-background); + } } diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index df1837a..c589672 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -2,14 +2,15 @@ class UsersController < ApplicationController skip_before_action :authenticate, only: [ :new, :create ] - before_action :set_user, only: [ :show ] + before_action :set_user, only: [ :show, :edit, :update ] + before_action :ensure_self, only: [ :edit, :update ] def new @user = User.new end def create - @user = User.new(user_params) + @user = User.new(new_user_params) if @user.save token = @user.generate_token_for(:email_verification) UserMailer.with(user: @user, token: token).email_verification.deliver_later @@ -27,9 +28,21 @@ class UsersController < ApplicationController end end + def edit + end + + def update + if @user.update(existing_user_params) + redirect_to @user, notice: t(".success") + else + flash.now[:alert] = t(".error") + render :edit, status: :unprocessable_entity + end + end + private - def user_params + def new_user_params params.require(:user).permit( :username, :password, @@ -40,7 +53,22 @@ class UsersController < ApplicationController ) end + def existing_user_params + params.require(:user).permit( + :password, + :password_confirmation, + :password_challenge, + :first_name, + :last_name, + :profile, + ) + end + def set_user @user = User.find_by(username: params[:id]) end + + def ensure_self + head :forbidden unless @user == Current.user || Current.user.admin? + end end diff --git a/app/models/user.rb b/app/models/user.rb index 8c59498..69486c0 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -5,6 +5,7 @@ class User < ApplicationRecord has_many :owned_tables, foreign_key: :owner_id, class_name: "Table" has_many :players, dependent: :destroy has_many :tables, through: :players + has_rich_text :profile has_secure_password generates_token_for :password_reset, expires_in: 4.hours do diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index a006677..80c3783 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -19,6 +19,7 @@