Fix flashes and tracking.

This commit is contained in:
James Cole
2026-06-10 21:50:14 +02:00
parent cbdbf55887
commit 38ebbecdb2
7 changed files with 193 additions and 28 deletions
+32
View File
@@ -0,0 +1,32 @@
<?php
namespace FireflyIII\View\Components\Layout;
use Closure;
use Illuminate\Contracts\View\View;
use Illuminate\View\Component;
class Flash extends Component
{
public bool $invalidMonetaryLocale;
public string $upgradeSecurityMessage;
public string $upgradeSecurityLevel;
/**
* Create a new component instance.
*/
public function __construct(bool $invalidMonetaryLocale, string $upgradeSecurityMessage, string $upgradeSecurityLevel)
{
$this->invalidMonetaryLocale = $invalidMonetaryLocale;
$this->upgradeSecurityMessage = $upgradeSecurityMessage;
$this->upgradeSecurityLevel = $upgradeSecurityLevel;
}
/**
* Get the view / contents that represent the component.
*/
public function render(): View | Closure | string
{
return view('components.layout.flash');
}
}
+26
View File
@@ -0,0 +1,26 @@
<?php
namespace FireflyIII\View\Components\Layout;
use Closure;
use Illuminate\Contracts\View\View;
use Illuminate\View\Component;
class Tracking extends Component
{
/**
* Create a new component instance.
*/
public function __construct()
{
//
}
/**
* Get the view / contents that represent the component.
*/
public function render(): View|Closure|string
{
return view('components.layout.tracking');
}
}
@@ -0,0 +1,101 @@
{{-- LOCALE ERROR MESSAGE --}}
@if($invalidMonetaryLocale)
<div class="alert alert-info alert-dismissible fade show" role="alert">
<strong>{{ __('firefly.invalid_server_configuration') }}:</strong> <span class="bi bi-cash"></span> {!! __('firefly.invalid_locale_settings') !!}
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="{{ __('firefly.close') }}"></button>
</div>
@endif
{{-- MANDATORY UPDATE MESSAGE --}}
@if('' !== $upgradeSecurityLevel && '' !== $upgradeSecurityMessage)
<div class="alert alert-{{ $upgradeSecurityLevel }} alert-dismissible" role="alert">
<strong>{{ __('firefly.flash_' . $upgradeSecurityLevel) }}</strong> <span class="bi bi-exclamation-circle"></span> {{ $upgradeSecurityMessage }}
</div>
@endif
{{-- SUCCESS MESSAGE (ALWAYS SINGULAR) --}}
@if(\Illuminate\Support\Facades\Session::has('success'))
<div class="alert alert-success alert-dismissible fade show" role="alert">
<strong>{{ __('firefly.flash_success') }}</strong>
@if(\Illuminate\Support\Facades\Session::has('success_url'))
<a href="{{ session('success_url') }}">
@endif
{{ session('success') }}
@if(\Illuminate\Support\Facades\Session::has('success_url'))
</a>
@endif
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="{{ __('firefly.close') }}"></button>
</div>
@endif
{{-- INFO MESSAGE (CAN BE MULTIPLE) --}}
@if(\Illuminate\Support\Facades\Session::has('info'))
<div class="alert alert-info alert-dismissible fade show" role="alert">
{{-- MULTIPLE INFO MESSAGE --}}
@if(!is_string(session('info')) && is_iterable(session('info') && count(session('info')) > 1))
<strong>
{{ \Illuminate\Support\Facades\Lang::choice('firefly.flash_info_multiple', count(session('info')), ['count' => count(session('info'))]) }}
:</strong>
<ul class="list-unstyled">
@foreach(session('info') as $item)
<li>{{ $item }}</li>
@endforeach
</ul>
@endif
{{-- SET OF MULTIPLE INFO MESSAGES, BUT THERE IS JUST ONE --}}
@if(!is_string(session('info')) && is_iterable(session('info') && 1 === count(session('info'))))
<strong>{{ __('firefly.flash_info') }}:</strong> {{ session('info')[0] }}
@endif
{{-- SINGLE INFO MESSAGE --}}
@if(is_string(session('info')) && !is_iterable(session('info')))
@if(\Illuminate\Support\Facades\Session::has('info_url'))
<a href="{{ session('info_url') }}">
@endif
<strong>{{ __('firefly.flash_info') }}:</strong> {{ session('info') }}
@if(\Illuminate\Support\Facades\Session::has('info'))
</a>
@endif
@endif
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="{{ __('firefly.close') }}"></button>
</div>
@endif
{{-- WARNING MESSAGE (ALWAYS SINGULAR) --}}
@if(\Illuminate\Support\Facades\Session::has('warning'))
<div class="alert alert-warning alert-dismissible fade show" role="alert">
<strong>{{ __('firefly.flash_warning') }}</strong> {{ session('warning') }}
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="{{ __('firefly.close') }}"></button>
</div>
@endif
{{-- ERROR MESSAGE (CAN BE MULTIPLE) --}}
@if(\Illuminate\Support\Facades\Session::has('error'))
<div class="alert alert-danger alert-dismissible fade show" role="alert">
{{-- MULTIPLE ERRORS (BAD) --}}
@if(!is_string(session('error')) && is_iterable(session('error') && count(session('error')) > 1))
<strong>
{{ \Illuminate\Support\Facades\Lang::choice('firefly.flash_error_multiple', count(session('error')), ['count' => session('error')]) }}:
</strong>
<ul class="list-unstyled">
@foreach(session('error') as $item)
<li>{{ $item }}</li>
@endforeach
</ul>
@endif
{{-- SET OF MULTIPLE ERRORS, BUT THERE IS JUST ONE --}}
@if(!is_string(session('error')) && is_iterable(session('error') && 1 === count(session('error'))))
<strong>{{ __('firefly.flash_error') }}</strong>
{{ session('error')[0] }}
@endif
{{-- SINGLE ERROR --}}
@if(is_string(session('error')) && !is_iterable(session('error')))
<strong>{{ __('firefly.flash_error') }}</strong> {{ session('error') }}
@endif
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="{{ __('firefly.close') }}"></button>
</div>
@endif
@@ -7,23 +7,20 @@
id="navigation"
x-data="sidebar"
>
<!-- <li class="nav-item menu-open"> -->
<!-- <a href="route('index')" class="nav-link active"> -->
<li class="nav-item">
TODO SEARCH
{{--
<form action="{{ route('search.index') }}" method="get" class="sidebar-form">
<div class="input-group">
<input autocomplete="off" type="text" name="search" class="form-control"
placeholder="{{ 'searchPlaceholder'|_ }}" value="{{ query }}" spellcheck="false"/>
<span class="input-group-btn">
<button type='submit' name='go' id='search-btn' class="btn btn-flat"><span class="fa fa-search"></span></button>
</span>
<form action="{{ route('search.index') }}" method="get" class="pb-2">
<div class="form-row align-items-center">
<div class="col-auto">
<div class="input-group mb-2">
<label class="sr-only" for="searchInput">{{ trans('firefly.searchPlaceholder') }}</label>
<input autocomplete="off" type="text" id="searchInput" name="search" class="form-control" placeholder="{{ trans('firefly.searchPlaceholder') }}" value="{{ $query ?? '' }}" spellcheck="false"/>
<div class="input-group-append">
<button type='submit' name='go' id='search-btn' class="btn btn-outline-secondary"><span class="bi bi-search"></span></button>
</div>
</div>
</form>
--}}
</div>
</div>
</form>
</li>
<li class="nav-item">
<a href="{{ route('index') }}" class="nav-link {{ \FireflyIII\Support\Blade\Navigation::menuItemActive('index') }}">
@@ -0,0 +1,3 @@
<div>
<!-- Let all your things have their places; let each part of your business have its time. - Benjamin Franklin -->
</div>
+1 -1
View File
@@ -63,7 +63,7 @@
})()
</script>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
@vite(['src/sass/app.scss'])
@vite(['sass/app.scss'])
</head>
<body class="container bg-body-secondary">
+18 -12
View File
@@ -286,12 +286,20 @@
<div class="app-content">
<!--begin::Container-->
<div class="container-fluid">
<!-- Button trigger modal -->
TODO DEMO WARNING,
TODO MESSAGE FLASHES.
TODO DEMO tracking
@if($IS_DEMO_SITE)
<div class="row no-print">
<div class="col-lg-12">
<div class="alert alert-info" role="alert">
@includeFirst(['demo.' . Route::getCurrentRoute()->getName(), 'demo.no-demo-text'])
</div>
</div>
</div>
@endif
<x-layout.flash
:invalid-monetary-locale="$invalidMonetaryLocale ?? false"
:upgrade-security-level="$upgrade_security_level ?? ''"
:upgrade-security-message="$upgrade_security_message ?? ''"
/>
@yield('content')
@@ -605,12 +613,12 @@
</div>
</div>
</div>
<x-layout.tracking />
{{--
{% if config('firefly.tracker_site_id') != '' and config('firefly.tracker_url') != '' %}
@if('' !== config('firefly.tracker_site_id') && '' !== config('firefly.tracker_url'))
<!-- This tracker tag is only here because this instance of Firefly III was purposefully configured to include it -->
<!-- Your own installation will NOT include it, unless you explicitly configure it to have it. -->
<script type="text/javascript" nonce="{{ JS_NONCE }}">
<script type="text/javascript" nonce="{{ $JS_NONCE }}">
var _paq = window._paq || [];
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
@@ -629,9 +637,7 @@
<noscript><p><img
src="//{{ config('firefly.tracker_url') }}/matomo.php?idsite={{ config('firefly.tracker_site_id') }}&amp;rec=1"
class="no-border" alt=""/></p></noscript>
{% endif %}
--}}
@endif
</body>