mirror of
https://github.com/Einundzwanzig-Podcast/einundzwanzig-portal.git
synced 2025-12-11 06:46:47 +00:00
set timezone
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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,
|
||||
],
|
||||
];
|
||||
|
||||
|
||||
@@ -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(
|
||||
|
||||
31
app/Http/Middleware/SetTimezoneMiddleware.php
Normal file
31
app/Http/Middleware/SetTimezoneMiddleware.php
Normal 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);
|
||||
}
|
||||
}
|
||||
@@ -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'),
|
||||
|
||||
@@ -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')
|
||||
|
||||
68
app/Observers/EventObserver.php
Normal file
68
app/Observers/EventObserver.php
Normal 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)
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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
32
app/Support/Carbon.php
Normal 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
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user