Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
rahmanramsi committed Oct 5, 2023
1 parent dc9b91c commit 9cca8f1
Show file tree
Hide file tree
Showing 23 changed files with 396 additions and 79 deletions.
15 changes: 15 additions & 0 deletions app/Actions/Settings/SettingPopulateDefaultData.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php

namespace App\Actions\Settings;

use Lorisleiva\Actions\Concerns\AsAction;

class SettingPopulateDefaultData
{
use AsAction;

public function handle()
{
// ...
}
}
91 changes: 91 additions & 0 deletions app/Administration/Livewire/AccessSetting.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
<?php

namespace App\Administration\Livewire;

use App\Actions\MailTemplates\MailTemplatePopulateDefaultData;
use App\Actions\MailTemplates\MailTemplateRestoreDefaultData;
use App\Actions\Settings\SettingUpdateAction;
use App\Infolists\Components\BladeEntry;
use App\Infolists\Components\VerticalTabs;
use App\Mail\Templates\TestMail;
use App\Mail\Templates\VerifyUserEmail;
use App\Models\MailTemplate;
use Filament\Forms\Components\Actions;
use Filament\Forms\Components\Actions\Action;
use Filament\Forms\Components\Checkbox;
use Filament\Forms\Components\Section;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Concerns\InteractsWithForms;
use Filament\Forms\Contracts\HasForms;
use Filament\Forms\Form;
use Filament\Infolists\Concerns\InteractsWithInfolists;
use Filament\Infolists\Contracts\HasInfolists;
use Filament\Infolists\Infolist;
use Filament\Notifications\Notification;
use Filament\Support\Enums\FontWeight;
use Filament\Tables\Actions\Action as TableAction;
use Filament\Tables\Actions\ActionGroup;
use Filament\Tables\Actions\EditAction;
use Filament\Tables\Columns\Layout\Split;
use Filament\Tables\Columns\Layout\Stack;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Columns\TextColumn\TextColumnSize;
use Filament\Tables\Concerns\InteractsWithTable;
use Filament\Tables\Contracts\HasTable;
use Filament\Tables\Table;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Str;
use Livewire\Component;
use Mohamedsabil83\FilamentFormsTinyeditor\Components\TinyEditor;

class AccessSetting extends Component implements HasForms
{
use InteractsWithForms;

public ?array $formData = [];

public function mount()
{
$this->form->fill(setting()->all());
}

public function form(Form $form): Form
{
return $form
->schema([
Section::make()
->schema([
Checkbox::make('allow_registration')
->label('Allow Registration')
->helperText('Allow public to register on the site.'),
Checkbox::make('must_verify_email')
->label('Must Verify Email')
->helperText('Require users to verify their email address before they can log in.'),
])
->columns(1),
Actions::make([
Action::make('save')
->label('Save')
->successNotificationTitle('Saved!')
->failureNotificationTitle('Data could not be saved.')
->action(function (Action $action) {
$formData = $this->form->getState();
try {
SettingUpdateAction::run($formData);
$action->sendSuccessNotification();
} catch (\Throwable $th) {
$action->failure();
// $action->sendFailureNotification();
}
}),
])->alignLeft(),
])
->statePath('formData');
}

public function render()
{
return view('administration.livewire.access-setting');
}
}
104 changes: 104 additions & 0 deletions app/Administration/Livewire/DateAndTimeSetting.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
<?php

namespace App\Administration\Livewire;

use App\Actions\MailTemplates\MailTemplatePopulateDefaultData;
use App\Actions\MailTemplates\MailTemplateRestoreDefaultData;
use App\Actions\Settings\SettingUpdateAction;
use App\Infolists\Components\BladeEntry;
use App\Infolists\Components\VerticalTabs;
use App\Mail\Templates\TestMail;
use App\Mail\Templates\VerifyUserEmail;
use App\Models\MailTemplate;
use Filament\Forms\Components\Actions;
use Filament\Forms\Components\Actions\Action;
use Filament\Forms\Components\Checkbox;
use Filament\Forms\Components\Radio;
use Filament\Forms\Components\Section;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Concerns\InteractsWithForms;
use Filament\Forms\Contracts\HasForms;
use Filament\Forms\Form;
use Filament\Infolists\Concerns\InteractsWithInfolists;
use Filament\Infolists\Contracts\HasInfolists;
use Filament\Infolists\Infolist;
use Filament\Notifications\Notification;
use Filament\Support\Enums\FontWeight;
use Filament\Tables\Actions\Action as TableAction;
use Filament\Tables\Actions\ActionGroup;
use Filament\Tables\Actions\EditAction;
use Filament\Tables\Columns\Layout\Split;
use Filament\Tables\Columns\Layout\Stack;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Columns\TextColumn\TextColumnSize;
use Filament\Tables\Concerns\InteractsWithTable;
use Filament\Tables\Contracts\HasTable;
use Filament\Tables\Table;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\HtmlString;
use Illuminate\Support\Str;
use Livewire\Component;
use Mohamedsabil83\FilamentFormsTinyeditor\Components\TinyEditor;

class DateAndTimeSetting extends Component implements HasForms
{
use InteractsWithForms;

public ?array $formData = [];

public function mount()
{
$this->form->fill(setting()->all());
}

public function form(Form $form): Form
{
$now = now()->hours(16);

return $form
->statePath('formData')
->schema([
Section::make('Date and Time Formats')
->description(new HtmlString(<<<'HTML'
Please select the desired format for dates and times. You may also enter a custom format using
special <a href="https://www.php.net/manual/en/function.strftime.php#refsect1-function.strftime-parameters" target="_blank"
class="filament-link inline-flex items-center justify-center gap-0.5 font-medium outline-none hover:underline focus:underline text-sm text-primary-600 hover:text-primary-500 filament-tables-link-action">format characters</a>.
HTML))
->schema([
Radio::make('format.date')
->options(fn () => collect([
'F j, Y',
'F j Y',
'j F Y',
'Y F j',
])->mapWithKeys(fn ($format) => [$format => $now->format($format)])),
Radio::make('format.time')
->options(fn () => collect([
'h:i A',
'g:ia',
'H:i',
])->mapWithKeys(fn ($format) => [$format => $now->format($format)])),
]),
Actions::make([
Action::make('save')
->successNotificationTitle('Saved!')
->action(function (Action $action) {
$formData = $this->form->getState();
try {
SettingUpdateAction::run($formData);

$action->sendSuccessNotification();
} catch (\Throwable $th) {
$action->sendFailureNotification();
}
}),
])->alignLeft(),
]);
}

public function render()
{
return view('administration.livewire.access-setting');
}
}
76 changes: 21 additions & 55 deletions app/Administration/Pages/SiteSettings.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

use App\Actions\Settings\SettingUpdateAction;
use App\Actions\Site\SiteUpdateAction;
use App\Administration\Livewire\AccessSetting;
use App\Administration\Livewire\DateAndTimeSetting;
use App\Administration\Livewire\EmailSetting;
use App\Infolists\Components\BladeEntry;
use App\Infolists\Components\LivewireEntry;
Expand Down Expand Up @@ -32,19 +34,12 @@ class SiteSettings extends Page implements HasForms, HasInfolists

protected static string $view = 'administration.pages.site-settings';

public array $systemFormData = [];

public array $informationFormData = [];

public array $appearanceFormData = [];

public function mount()
{
$this->systemForm->fill([
'format' => setting('format'),
'privacy_statement' => setting('privacy_statement'),
]);

$this->informationForm->fill([
'meta' => app()->getSite()->getAllMeta()->toArray(),
]);
Expand Down Expand Up @@ -74,8 +69,25 @@ public function infolist(Infolist $infolist): Infolist
]),
Tabs\Tab::make('System')
->schema([
BladeEntry::make('general')
->blade('{{ $this->systemForm }}'),
// BladeEntry::make('general')
// ->blade('{{ $this->systemForm }}'),
VerticalTabs\Tabs::make()
->tabs([
VerticalTabs\Tab::make('Access Options')
->icon('heroicon-o-information-circle')
->schema([
LivewireEntry::make('access_setting')
->livewire(AccessSetting::class)
->lazy(),
]),
VerticalTabs\Tab::make('Date & Time')
->icon('heroicon-o-clock')
->schema([
LivewireEntry::make('date_and_time')
->livewire(DateAndTimeSetting::class)
->lazy(),
]),
]),
]),
Tabs\Tab::make('E-Mail')
->schema([
Expand All @@ -92,7 +104,6 @@ protected function getForms(): array
{
return [
'informationForm',
'systemForm',
'appearanceForm',
];
}
Expand Down Expand Up @@ -142,49 +153,4 @@ public function informationForm(Form $form): Form
->columns(2),
]);
}

public function systemForm(Form $form): Form
{
$now = now()->hours(16);

return $form
->statePath('systemFormData')
->schema([
Section::make('Date and Time Formats')
->description(new HtmlString(<<<'HTML'
Please select the desired format for dates and times. You may also enter a custom format using
special <a href="https://www.php.net/manual/en/function.strftime.php#refsect1-function.strftime-parameters" target="_blank"
class="filament-link inline-flex items-center justify-center gap-0.5 font-medium outline-none hover:underline focus:underline text-sm text-primary-600 hover:text-primary-500 filament-tables-link-action">format characters</a>.
HTML))
->schema([
Radio::make('format.date')
->options(fn () => collect([
'F j, Y',
'F j Y',
'j F Y',
'Y F j',
])->mapWithKeys(fn ($format) => [$format => $now->format($format)])),
Radio::make('format.time')
->options(fn () => collect([
'h:i A',
'g:ia',
'H:i',
])->mapWithKeys(fn ($format) => [$format => $now->format($format)])),
])
->aside(),
Actions::make([
Action::make('save')
->successNotificationTitle('Saved!')
->action(function (Action $action) {
try {
SettingUpdateAction::run($this->systemForm->getState());

$action->sendSuccessNotification();
} catch (\Throwable $th) {
$action->sendFailureNotification();
}
}),
])->alignRight(),
]);
}
}
33 changes: 33 additions & 0 deletions app/Http/Middleware/MustVerifyEmail.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;

class MustVerifyEmail
{
/**
* Handle an incoming request.
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next): Response
{
if(!setting('must_verify_email')){
return $next($request);
}

if(!$request->user()){
return redirect()->route('livewirePageGroup.website.pages.login');
}

if(!$request->user()->hasVerifiedEmail()){
return redirect()->route('livewirePageGroup.website.pages.email-verification');
}


return $next($request);
}
}
1 change: 1 addition & 0 deletions app/Http/Middleware/Panel/PanelAuthenticate.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

class PanelAuthenticate extends Authenticate
{

protected function redirectTo($request): ?string
{
return route('livewirePageGroup.website.pages.login');
Expand Down
1 change: 0 additions & 1 deletion app/Models/User.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

namespace App\Models;

// use Illuminate\Contracts\Auth\MustVerifyEmail;

use App\Mail\Templates\VerifyUserEmail;
use App\Models\Enums\ConferenceStatus;
Expand Down
Loading

0 comments on commit 9cca8f1

Please sign in to comment.