set timezone

This commit is contained in:
Benjamin Takats
2022-12-02 16:24:25 +01:00
parent b55ac39215
commit b995c5737c
18 changed files with 286 additions and 34 deletions

View File

@@ -20,11 +20,13 @@ class UpdateUserProfileInformation implements UpdatesUserProfileInformation
public function update($user, array $input)
{
Validator::make($input, [
'name' => ['required', 'string', 'max:255'],
'email' => ['nullable', 'email', 'max:255', Rule::unique('users')
->ignore($user->id)
'name' => ['required', 'string', 'max:255'],
'timezone' => ['required', 'string'],
'email' => [
'nullable', 'email', 'max:255', Rule::unique('users')
->ignore($user->id)
],
'photo' => ['nullable', 'mimes:jpg,jpeg,png', 'max:1024'],
'photo' => ['nullable', 'mimes:jpg,jpeg,png', 'max:1024'],
])
->validateWithBag('updateProfileInformation');
@@ -37,8 +39,9 @@ class UpdateUserProfileInformation implements UpdatesUserProfileInformation
$this->updateVerifiedUser($user, $input);
} else {
$user->forceFill([
'name' => $input['name'],
'email' => $input['email'],
'name' => $input['name'],
'email' => $input['email'],
'timezone' => $input['timezone'],
])
->save();
}
@@ -57,6 +60,7 @@ class UpdateUserProfileInformation implements UpdatesUserProfileInformation
$user->forceFill([
'name' => $input['name'],
'email' => $input['email'],
'timezone' => $input['timezone'],
'email_verified_at' => null,
])
->save();

View File

@@ -3,6 +3,7 @@
namespace App\Http;
use App\Http\Middleware\CustomEnsureEmailVerified;
use App\Http\Middleware\SetTimezoneMiddleware;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel
@@ -34,12 +35,14 @@ class Kernel extends HttpKernel
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
SetTimezoneMiddleware::class,
],
'api' => [
// \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
'throttle:api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
SetTimezoneMiddleware::class,
],
];

View File

@@ -34,9 +34,15 @@ class EventTable extends DataTableComponent
->sortable(),
Column::make("Kurs", "course.name")
->sortable(),
Column::make("Erstellt am", "created_at")
Column::make("Von", "from")
->format(
fn($value, $row, Column $column) => $value->asDateTime()
)
->sortable(),
Column::make("Zuletzt geändert", "updated_at")
Column::make("Bis", "to")
->format(
fn($value, $row, Column $column) => $value->asDateTime()
)
->sortable(),
/*Column::make("Teilnehmer")
->label(

View File

@@ -0,0 +1,31 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class SetTimezoneMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
*
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
*/
public function handle(Request $request, Closure $next)
{
if (
!collect($request->segments())->contains('nova')
&& $request->user()
&& $timezone = $request->user()->timezone
) {
config(['app.timezone' => $timezone]);
}
config(['app.timezone' => 'Europe/Berlin']);
return $next($request);
}
}

View File

@@ -52,12 +52,12 @@ class City extends Resource
Number::make('Latitude')
->rules('required', 'numeric')
->step(0.00001)
->step(0.000001)
->help('https://latitude.to/lat/47.72671/lng/10.31688'),
Number::make('Longitude')
->rules('required', 'numeric')
->step(0.00001)
->step(0.000001)
->help('https://latitude.to/lat/47.72671/lng/10.31688'),
BelongsTo::make('Country'),

View File

@@ -57,11 +57,11 @@ class Event extends Resource
DateTime::make('From')
->rules('required')
->step(CarbonInterval::minutes(30)),
->step(CarbonInterval::minutes(30))->displayUsing(fn ($value) => $value->asDateTime()),
DateTime::make('To')
->rules('required')
->step(CarbonInterval::minutes(30)),
->step(CarbonInterval::minutes(30))->displayUsing(fn ($value) => $value->asDateTime()),
BelongsTo::make('Course'),
BelongsTo::make('Venue')

View File

@@ -0,0 +1,68 @@
<?php
namespace App\Observers;
use App\Models\Event;
class EventObserver
{
/**
* Handle the Event "created" event.
*
* @param \App\Models\Event $event
*
* @return void
*/
public function created(Event $event)
{
//
}
/**
* Handle the Event "updated" event.
*
* @param \App\Models\Event $event
*
* @return void
*/
public function updated(Event $event)
{
//
}
/**
* Handle the Event "deleted" event.
*
* @param \App\Models\Event $event
*
* @return void
*/
public function deleted(Event $event)
{
//
}
/**
* Handle the Event "restored" event.
*
* @param \App\Models\Event $event
*
* @return void
*/
public function restored(Event $event)
{
//
}
/**
* Handle the Event "force deleted" event.
*
* @param \App\Models\Event $event
*
* @return void
*/
public function forceDeleted(Event $event)
{
//
}
}

View File

@@ -2,6 +2,8 @@
namespace App\Providers;
use App\Support\Carbon;
use Illuminate\Support\Facades\Date;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Str;
use Illuminate\Support\Stringable;
@@ -10,22 +12,22 @@ class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
Date::use(
Carbon::class
);
}
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Stringable::macro('initials', function(){
Stringable::macro('initials', function () {
$words = preg_split("/\s+/", $this);
$initials = "";
@@ -35,7 +37,7 @@ class AppServiceProvider extends ServiceProvider
return new static($initials);
});
Str::macro('initials', function(string $string){
Str::macro('initials', function (string $string) {
return (string) (new Stringable($string))->initials();
});
}

View File

@@ -2,6 +2,7 @@
namespace App\Providers;
use App\Observers\EventObserver;
use Illuminate\Auth\Events\Registered;
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
@@ -27,7 +28,7 @@ class EventServiceProvider extends ServiceProvider
*/
public function boot()
{
//
\App\Models\Event::observe(EventObserver::class);
}
/**

View File

@@ -82,6 +82,10 @@ class NovaServiceProvider extends NovaApplicationServiceProvider
// return MIT license and date
return sprintf("%s %s - %s", date('Y'), config('app.name'), __('MIT License'));
});
Nova::userTimezone(function (Request $request) {
return $request->user()->timezone;
});
}
/**

32
app/Support/Carbon.php Normal file
View File

@@ -0,0 +1,32 @@
<?php
namespace App\Support;
use Carbon\CarbonImmutable;
class Carbon extends CarbonImmutable
{
public function asDate(): string
{
$dt = $this->timezone(config('app.timezone'))->locale('de');
return str($dt->day)->padLeft(2, '0').'. '.$dt->monthName.' '.$dt->year;
}
public function asTime(): string
{
return $this->timezone(config('app.timezone'))->locale('de')
->format('H:i');
}
public function asDateTime(): string
{
$dt = $this->timezone(config('app.timezone'))->locale('de');
return sprintf("%s. %s %s %s (%s)",
str($dt->day)->padLeft(2, '0'),
$dt->monthName,
$dt->year,
$dt->format('H:i'),
$dt->timezone
);
}
}