Ad Contract for settings
This commit is contained in:
parent
62fb792e65
commit
d2a000cb31
|
@ -2,9 +2,11 @@
|
||||||
|
|
||||||
namespace App\Invoice;
|
namespace App\Invoice;
|
||||||
|
|
||||||
|
use App\Setting\Contracts\Indexable;
|
||||||
|
use App\Setting\Contracts\Storeable;
|
||||||
use App\Setting\LocalSettings;
|
use App\Setting\LocalSettings;
|
||||||
|
|
||||||
class InvoiceSettings extends LocalSettings
|
class InvoiceSettings extends LocalSettings implements Indexable, Storeable
|
||||||
{
|
{
|
||||||
public string $from_long;
|
public string $from_long;
|
||||||
|
|
||||||
|
@ -41,7 +43,7 @@ class InvoiceSettings extends LocalSettings
|
||||||
return SettingIndexAction::class;
|
return SettingIndexAction::class;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function saveAction(): string
|
public static function storeAction(): string
|
||||||
{
|
{
|
||||||
return SettingSaveAction::class;
|
return SettingSaveAction::class;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,9 +4,11 @@ namespace App\Mailman;
|
||||||
|
|
||||||
use App\Mailman\Actions\SettingIndexAction;
|
use App\Mailman\Actions\SettingIndexAction;
|
||||||
use App\Mailman\Actions\SettingSaveAction;
|
use App\Mailman\Actions\SettingSaveAction;
|
||||||
|
use App\Setting\Contracts\Indexable;
|
||||||
|
use App\Setting\Contracts\Storeable;
|
||||||
use App\Setting\LocalSettings;
|
use App\Setting\LocalSettings;
|
||||||
|
|
||||||
class MailmanSettings extends LocalSettings
|
class MailmanSettings extends LocalSettings implements Storeable, Indexable
|
||||||
{
|
{
|
||||||
public ?string $base_url;
|
public ?string $base_url;
|
||||||
|
|
||||||
|
@ -39,7 +41,7 @@ class MailmanSettings extends LocalSettings
|
||||||
return SettingIndexAction::class;
|
return SettingIndexAction::class;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function saveAction(): string
|
public static function storeAction(): string
|
||||||
{
|
{
|
||||||
return SettingSaveAction::class;
|
return SettingSaveAction::class;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Setting\Contracts;
|
||||||
|
|
||||||
|
interface Indexable
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @return class-string
|
||||||
|
*/
|
||||||
|
public static function indexAction(): string;
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Setting\Contracts;
|
||||||
|
|
||||||
|
interface Storeable
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @return class-string
|
||||||
|
*/
|
||||||
|
public static function storeAction(): string;
|
||||||
|
}
|
|
@ -14,16 +14,6 @@ class GeneralSettings extends Settings
|
||||||
/** @var array<int, int> */
|
/** @var array<int, int> */
|
||||||
public array $allowed_nami_accounts;
|
public array $allowed_nami_accounts;
|
||||||
|
|
||||||
/**
|
|
||||||
* @return array<int, string>
|
|
||||||
*/
|
|
||||||
public function moduleOptions(): array
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
'bill',
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function group(): string
|
public static function group(): string
|
||||||
{
|
{
|
||||||
return 'general';
|
return 'general';
|
||||||
|
|
|
@ -8,16 +8,6 @@ abstract class LocalSettings extends Settings
|
||||||
{
|
{
|
||||||
abstract public static function slug(): string;
|
abstract public static function slug(): string;
|
||||||
|
|
||||||
/**
|
|
||||||
* @return class-string
|
|
||||||
*/
|
|
||||||
abstract public static function indexAction(): string;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return class-string
|
|
||||||
*/
|
|
||||||
abstract public static function saveAction(): string;
|
|
||||||
|
|
||||||
abstract public static function title(): string;
|
abstract public static function title(): string;
|
||||||
|
|
||||||
public static function url(): string
|
public static function url(): string
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
namespace App\Setting;
|
namespace App\Setting;
|
||||||
|
|
||||||
|
use App\Setting\Contracts\Indexable;
|
||||||
|
use App\Setting\Contracts\Storeable;
|
||||||
use Illuminate\Routing\Router;
|
use Illuminate\Routing\Router;
|
||||||
|
|
||||||
class SettingFactory
|
class SettingFactory
|
||||||
|
@ -12,14 +14,19 @@ class SettingFactory
|
||||||
private array $settings = [];
|
private array $settings = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param class-string<LocalSettings> $setting
|
* @param class-string $setting
|
||||||
*/
|
*/
|
||||||
public function register(string $setting): void
|
public function register(string $setting): void
|
||||||
{
|
{
|
||||||
$this->settings[] = $setting;
|
$this->settings[] = $setting;
|
||||||
|
|
||||||
|
if (new $setting() instanceof Indexable) {
|
||||||
app(Router::class)->middleware(['web', 'auth:web', SettingMiddleware::class])->get($setting::url(), $setting::indexAction());
|
app(Router::class)->middleware(['web', 'auth:web', SettingMiddleware::class])->get($setting::url(), $setting::indexAction());
|
||||||
app(Router::class)->middleware(['web', 'auth:web', SettingMiddleware::class])->post($setting::url(), $setting::saveAction());
|
}
|
||||||
|
|
||||||
|
if (new $setting() instanceof Storeable) {
|
||||||
|
app(Router::class)->middleware(['web', 'auth:web', SettingMiddleware::class])->post($setting::url(), $setting::storeAction());
|
||||||
|
}
|
||||||
|
|
||||||
if (1 === count($this->settings)) {
|
if (1 === count($this->settings)) {
|
||||||
app(Router::class)->redirect('/setting', '/setting/'.$setting::slug());
|
app(Router::class)->redirect('/setting', '/setting/'.$setting::slug());
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Tests\Feature\Bill;
|
namespace Tests\Feature\Invoice;
|
||||||
|
|
||||||
use App\Invoice\InvoiceSettings;
|
use App\Invoice\InvoiceSettings;
|
||||||
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
Loading…
Reference in New Issue