Skip to content

User font accessibility settings #1234

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 11 commits into
base: develop
Choose a base branch
from
20 changes: 20 additions & 0 deletions app/Http/Controllers/Users/AccountController.php
Original file line number Diff line number Diff line change
Expand Up @@ -516,4 +516,24 @@ public function postReactivate(Request $request, UserService $service) {

return redirect()->back();
}

/**
* Changes user font settings.
*
* @param App\Services\UserService $service
*
* @return \Illuminate\Http\RedirectResponse
*/
public function postFont(Request $request, UserService $service) {
$data = $request->only(['font_size', 'site_fonts_disabled', 'letter_spacing', 'word_spacing', 'line_height']);
if ($service->updateFontSetting($data, Auth::user())) {
flash('Setting updated successfully.')->success();
} else {
foreach ($service->errors()->getMessages()['error'] as $error) {
flash($error)->error();
}
}

return redirect()->back();
}
}
2 changes: 1 addition & 1 deletion app/Http/Controllers/WorldController.php
Original file line number Diff line number Diff line change
Expand Up @@ -429,7 +429,7 @@ public function getItems(Request $request) {
$query->with('artist', 'shopStock')->withCount('shopStock');
}

$categoryVisibleCheck = ItemCategory::visible(Auth::user() ?? null)->pluck('id', 'name')->toArray();
$categoryVisibleCheck = ItemCategory::visible(Auth::check() ? Auth::user() : null)->pluck('id', 'name')->toArray();
// query where category is visible, or, no category and released
$query->where(function ($query) use ($categoryVisibleCheck) {
$query->whereIn('item_category_id', $categoryVisibleCheck)->orWhereNull('item_category_id');
Expand Down
1 change: 1 addition & 0 deletions app/Models/User/UserSettings.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ class UserSettings extends Model {
protected $fillable = [
'is_fto', 'submission_count', 'banned_at', 'ban_reason', 'birthday_setting',
'deactivate_reason', 'deactivated_at', 'content_warning_visibility', 'allow_profile_comments',
'css_fonts_disabled', 'font_size', 'letter_spacing', 'word_spacing', 'line_height',
];

/**
Expand Down
25 changes: 25 additions & 0 deletions app/Services/UserService.php
Original file line number Diff line number Diff line change
Expand Up @@ -696,4 +696,29 @@ public function reactivate($user, $staff = null) {

return $this->rollbackReturn(false);
}

/**
* Updates user's font settings.
*
* @param mixed $data
* @param mixed $user
*/
public function updateFontSetting($data, $user) {
DB::beginTransaction();

try {
$user->settings->font_size = $data['font_size'];
$user->settings->site_fonts_disabled = $data['site_fonts_disabled'];
$user->settings->letter_spacing = $data['letter_spacing'];
$user->settings->word_spacing = $data['word_spacing'];
$user->settings->line_height = $data['line_height'];
$user->settings->save();

return $this->commitReturn(true);
} catch (\Exception $e) {
$this->setError('error', $e->getMessage());
}

return $this->rollbackReturn(false);
}
}
33 changes: 33 additions & 0 deletions database/migrations/2024_06_28_213055_add_text_accessibility.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration {
/**
* Run the migrations.
*/
public function up(): void {
Schema::table('user_settings', function (Blueprint $table) {
$table->boolean('site_fonts_disabled')->default(0);
$table->decimal('font_size', 3, 2)->nullable()->default(NULL);
$table->decimal('letter_spacing', 3, 2)->nullable()->default(NULL);
$table->decimal('word_spacing', 3, 2)->nullable()->default(NULL);
$table->decimal('line_height', 3, 2)->nullable()->default(NULL);
});
}

/**
* Reverse the migrations.
*/
public function down(): void {
Schema::table('user_settings', function (Blueprint $table) {
$table->dropColumn('site_fonts_disabled');
$table->dropColumn('font_size');
$table->dropColumn('letter_spacing');
$table->dropColumn('word_spacing');
$table->dropColumn('line_height');
});
}
};
42 changes: 42 additions & 0 deletions resources/views/account/settings.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,48 @@
{!! Form::close() !!}
@endif
</div>

<div class="card p-3 mb-2">
<h3>Font Settings</h3>
<p>From here, you can disable the site's font style, as well as change its size.</p>
{!! Form::open(['url' => 'account/font']) !!}
<div class="form-group row">
<label class="col-md-3 col-form-label">Enable/Disable Site Fonts {!! add_help('If fonts are turned off, it will default to the Lorekeeper\'s default font.') !!}</label>
<div class="col-md-9">
{!! Form::select('site_fonts_disabled', ['0' => 'View this site\'s font style.', '1' => 'Disable this site\'s font style.'], Auth::user()->settings->site_fonts_disabled, ['class' => 'form-control']) !!}
</div>
</div>
<div class="alert alert-info">Note that all the below settings are measured in .rem, which means they are relative to the site's font. Suggested values are added for each field, but setting these fields to higher numbers might make layouts break.
</div>
<div class="form-group row">
<label class="col-md-4 col-form-label">Change Font Size{!! add_help('Change how big text appear on the site. Suggested value is between 1 and 1.8.') !!}</label>
<div class="col-md-8">
{!! Form::number('font_size', Auth::user()->settings->font_size, ['class' => 'form-control', 'step' => 'any']) !!}
</div>
</div>
<div class="form-group row">
<label class="col-md-4 col-form-label">Change letter spacing{!! add_help('Change how far apart each letter is. Suggested value is between 0 and 0.2') !!}</label>
<div class="col-md-8">
{!! Form::number('letter_spacing', Auth::user()->settings->letter_spacing, ['class' => 'form-control', 'step' => 'any']) !!}
</div>
</div>
<div class="form-group row">
<label class="col-md-4 col-form-label">Change word spacing{!! add_help('Change how far apart each word is. Suggested value is between 0.1 and 0.3') !!}</label>
<div class="col-md-8">
{!! Form::number('word_spacing', Auth::user()->settings->word_spacing, ['class' => 'form-control', 'step' => 'any']) !!}
</div>
</div>
<div class="form-group row">
<label class="col-md-4 col-form-label">Change line height{!! add_help('Change how far apart each line of text is.Suggested value is between 0 and 2') !!}</label>
<div class="col-md-8">
{!! Form::number('line_height', Auth::user()->settings->line_height, ['class' => 'form-control', 'step' => 'any']) !!}
</div>
</div>
<div class="text-right">
{!! Form::submit('Edit', ['class' => 'btn btn-primary']) !!}
</div>
{!! Form::close() !!}
</div>
@endsection
@section('scripts')
@include('js._tinymce_wysiwyg')
Expand Down
4 changes: 2 additions & 2 deletions resources/views/admin/users/user_ban.blade.php
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
@extends('admin.layout')

@section('admin-title')
User: {{ $user->name }}
Ban User: {{ $user->name }}
@endsection

@section('admin-content')
{!! breadcrumbs(['Admin Panel' => 'admin', 'User Index' => 'admin/users', $user->name => 'admin/users/' . $user->name . '/edit', 'Account Updates' => 'admin/users/' . $user->name . '/updates']) !!}
{!! breadcrumbs(['Admin Panel' => 'admin', 'User Index' => 'admin/users', $user->name => 'admin/users/' . $user->name . '/edit', 'Ban User' => 'admin/users/' . $user->name . '/ban']) !!}

<h1>User: {!! $user->displayName !!}</h1>
<ul class="nav nav-tabs mb-3">
Expand Down
4 changes: 2 additions & 2 deletions resources/views/admin/users/user_deactivate.blade.php
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
@extends('admin.layout')

@section('admin-title')
User: {{ $user->name }}
Deactivate User: {{ $user->name }}
@endsection

@section('admin-content')
{!! breadcrumbs(['Admin Panel' => 'admin', 'User Index' => 'admin/users', $user->name => 'admin/users/' . $user->name . '/edit', 'Account Updates' => 'admin/users/' . $user->name . '/updates']) !!}
{!! breadcrumbs(['Admin Panel' => 'admin', 'User Index' => 'admin/users', $user->name => 'admin/users/' . $user->name . '/edit', 'Deactivate User' => 'admin/users/' . $user->name . '/deactivate']) !!}

<h1>User: {!! $user->displayName !!}</h1>
<ul class="nav nav-tabs mb-3">
Expand Down
2 changes: 1 addition & 1 deletion resources/views/admin/users/user_update_log.blade.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
@extends('admin.layout')

@section('admin-title')
User: {{ $user->name }}
User Account Updates: {{ $user->name }}
@endsection

@section('admin-content')
Expand Down
2 changes: 1 addition & 1 deletion resources/views/layouts/_footer.blade.php
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<nav class="navbar navbar-expand-md navbar-light">
<ul class="navbar-nav ml-auto mr-auto">
<ul class="navbar-nav ml-auto mr-auto flex-wrap justify-content-center">
<li class="nav-item"><a href="{{ url('info/about') }}" class="nav-link">About</a></li>
<li class="nav-item"><a href="{{ url('info/terms') }}" class="nav-link">Terms</a></li>
<li class="nav-item"><a href="{{ url('info/privacy') }}" class="nav-link">Privacy</a></li>
Expand Down
4 changes: 4 additions & 0 deletions resources/views/layouts/app.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,10 @@
@endif

@include('feed::links')
@if (Auth::check())
@include('layouts.user_style_settings')
@endif


@yield('head')
</head>
Expand Down
34 changes: 34 additions & 0 deletions resources/views/layouts/user_style_settings.blade.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
@php
$userFontSize = Auth::user()->settings->font_size ?? null;
$DefaultFont = Auth::user()->settings->site_fonts_disabled ?? null;
$letterSpacing = Auth::user()->settings->letter_spacing ?? null;
$lineHeight = Auth::user()->settings->line_height ?? null;
$wordSpacing = Auth::user()->settings->word_spacing ?? null;
@endphp

<style>

*:not(.fas, .far, .fad, .fal) {
@if ($DefaultFont)
font-family: Roboto Condensed, serif !important;
@endif
}

.main-content, .sidebar {
@if ($lineHeight)
line-height: {{ $lineHeight }}rem;
@endif
}

html {
@if ($wordSpacing)
word-spacing: {{ $wordSpacing }}rem;
@endif
@if ($userFontSize)
font-size: {{ $userFontSize }}rem;
@endif
@if ($letterSpacing)
letter-spacing: {{ $letterSpacing }}rem;
@endif
}
</style>
1 change: 1 addition & 0 deletions routes/lorekeeper/members.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
Route::post('dob', 'AccountController@postBirthday');
Route::post('warning', 'AccountController@postWarningVisibility');
Route::post('comments', 'AccountController@postProfileComments');
Route::post('font', 'AccountController@postFont');

Route::get('two-factor/confirm', 'AccountController@getConfirmTwoFactor');
Route::post('two-factor/enable', 'AccountController@postEnableTwoFactor');
Expand Down
Loading