filament setting apge

This commit is contained in:
xiaomlove
2022-06-29 17:00:15 +08:00
parent 6fb3d95ef0
commit 1a8866f3d0
21 changed files with 314 additions and 47 deletions

View File

@@ -78,10 +78,8 @@ class Test extends Command
*/
public function handle()
{
$r = 'MTAwNDI%3D';
$r = 'MTAwNDI%3D';
$r = 'MTAwMDM%3D';
dd(base64_decode($r));
$r = range(0, 23);
dd($r);
}

View File

@@ -2,7 +2,7 @@
namespace App\Filament;
trait NexusOptionsTrait
trait OptionsTrait
{
private static array $matchTypes = ['dec' => 'dec', 'hex' => 'hex'];

View File

@@ -2,7 +2,7 @@
namespace App\Filament\Resources\System;
use App\Filament\NexusOptionsTrait;
use App\Filament\OptionsTrait;
use App\Filament\Resources\System\AgentAllowResource\Pages;
use App\Filament\Resources\System\AgentAllowResource\RelationManagers;
use App\Models\AgentAllow;
@@ -16,7 +16,7 @@ use Illuminate\Database\Eloquent\SoftDeletingScope;
class AgentAllowResource extends Resource
{
use NexusOptionsTrait;
use OptionsTrait;
protected static ?string $model = AgentAllow::class;
@@ -29,6 +29,16 @@ class AgentAllowResource extends Resource
return __('admin.sidebar.agent_allows');
}
public static function getBreadcrumb(): string
{
return self::getNavigationLabel();
}
// public static function getModelLabel(): string
// {
//
// }
public static function form(Form $form): Form
{

View File

@@ -26,6 +26,11 @@ class AgentDenyResource extends Resource
return __('admin.sidebar.agent_denies');
}
public static function getBreadcrumb(): string
{
return self::getNavigationLabel();
}
public static function form(Form $form): Form
{
return $form

View File

@@ -27,6 +27,11 @@ class ExamResource extends Resource
return __('admin.sidebar.exams_list');
}
public static function getBreadcrumb(): string
{
return self::getNavigationLabel();
}
public static function form(Form $form): Form
{
$userRep = new UserRepository();

View File

@@ -26,6 +26,11 @@ class MedalResource extends Resource
return __('admin.sidebar.medals_list');
}
public static function getBreadcrumb(): string
{
return self::getNavigationLabel();
}
public static function form(Form $form): Form
{
return $form

View File

@@ -2,7 +2,7 @@
namespace App\Filament\Resources\System;
use App\Filament\NexusOptionsTrait;
use App\Filament\OptionsTrait;
use App\Filament\Resources\System\SettingResource\Pages;
use App\Filament\Resources\System\SettingResource\RelationManagers;
use App\Models\Setting;
@@ -16,7 +16,7 @@ use Illuminate\Database\Eloquent\SoftDeletingScope;
class SettingResource extends Resource
{
use NexusOptionsTrait;
use OptionsTrait;
protected static ?string $model = Setting::class;
@@ -24,13 +24,19 @@ class SettingResource extends Resource
protected static ?string $navigationGroup = 'System';
protected static bool $shouldRegisterNavigation = false;
protected static bool $shouldRegisterNavigation = true;
protected static function getNavigationLabel(): string
{
return __('admin.sidebar.settings');
}
public static function getBreadcrumb(): string
{
return self::getNavigationLabel();
}
public static function form(Form $form): Form
{
return $form
@@ -77,10 +83,9 @@ class SettingResource extends Resource
public static function getPages(): array
{
return [
'index' => Pages\ListSettings::route('/'),
// 'index' => Pages\ListSettings::route('/'),
// 'create' => Pages\CreateSetting::route('/create'),
'edit' => Pages\EditSetting::route('/{record}/edit'),
'hit-and-run' => Pages\EditHitAndRun::route('/hit-and-run'),
'index' => Pages\EditSetting::route('/'),
];
}
}

View File

@@ -1,15 +0,0 @@
<?php
namespace App\Filament\Resources\System\SettingResource\Pages;
use App\Filament\Resources\System\SettingResource;
use Filament\Resources\Pages\Page;
class EditHitAndRun extends Page
{
protected static string $resource = SettingResource::class;
protected static string $view = 'filament.resources.system.setting-resource.pages.edit-hit-and-run';
}

View File

@@ -2,32 +2,101 @@
namespace App\Filament\Resources\System\SettingResource\Pages;
use App\Filament\OptionsTrait;
use App\Filament\Resources\System\SettingResource;
use Filament\Pages\Actions;
use App\Models\HitAndRun;
use App\Models\Setting;
use Filament\Forms\ComponentContainer;
use Filament\Forms\Concerns\InteractsWithForms;
use Filament\Resources\Pages\Concerns\InteractsWithRecord;
use Filament\Resources\Pages\EditRecord;
use Filament\Resources\Pages\Page;
use Filament\Forms;
use Illuminate\Support\Facades\DB;
use Nexus\Database\NexusDB;
class EditSetting extends EditRecord
class EditSetting extends Page implements Forms\Contracts\HasForms
{
use InteractsWithForms, OptionsTrait;
protected static string $resource = SettingResource::class;
protected function getActions(): array
protected static string $view = 'filament.resources.system.setting-resource.pages.edit-hit-and-run';
protected function getTitle(): string
{
return __('label.setting.nav_text');
}
public function mount()
{
$settings = Setting::get();
$this->form->fill($settings);
}
protected function getFormSchema(): array
{
return [
Actions\DeleteAction::make(),
Forms\Components\Tabs::make('Heading')
->tabs([
Forms\Components\Tabs\Tab::make(__('label.setting.hr.tab_header'))
->schema([
Forms\Components\Radio::make('hr.mode')->options(HitAndRun::listModes(true))->inline(true)->label(__('label.setting.hr.mode')),
Forms\Components\TextInput::make('hr.inspect_time')->helperText(__('label.setting.hr.inspect_time_help'))->label(__('label.setting.hr.inspect_time'))->integer(),
Forms\Components\TextInput::make('hr.seed_time_minimum')->helperText(__('label.setting.hr.seed_time_minimum_help'))->label(__('label.setting.hr.seed_time_minimum'))->integer(),
Forms\Components\TextInput::make('hr.ignore_when_ratio_reach')->helperText(__('label.setting.hr.ignore_when_ratio_reach_help'))->label(__('label.setting.hr.ignore_when_ratio_reach'))->integer(),
Forms\Components\TextInput::make('hr.ban_user_when_counts_reach')->helperText(__('label.setting.hr.ban_user_when_counts_reach_help'))->label(__('label.setting.hr.ban_user_when_counts_reach'))->integer(),
])->columns(2),
Forms\Components\Tabs\Tab::make(__('label.setting.backup.tab_header'))
->schema([
Forms\Components\Radio::make('backup.enabled')->options(self::$yesOrNo)->inline(true)->label(__('label.setting.backup.enabled'))->helperText(__('label.setting.backup.enabled_help')),
Forms\Components\Radio::make('backup.frequency')->options(['daily' => 'daily', 'hourly' => 'hourly'])->inline(true)->label(__('label.setting.backup.frequency'))->helperText(__('label.setting.backup.frequency_help')),
Forms\Components\Select::make('backup.hour')->options(range(0, 23))->label(__('label.setting.backup.hour'))->helperText(__('label.setting.backup.hour_help')),
Forms\Components\Select::make('backup.minute')->options(range(0, 59))->label(__('label.setting.backup.minute'))->helperText(__('label.setting.backup.minute_help')),
Forms\Components\TextInput::make('backup.google_drive_client_id')->label(__('label.setting.backup.google_drive_client_id')),
Forms\Components\TextInput::make('backup.google_drive_client_secret')->label(__('label.setting.backup.google_drive_client_secret')),
Forms\Components\TextInput::make('backup.google_drive_refresh_token')->label(__('label.setting.backup.google_drive_refresh_token')),
Forms\Components\TextInput::make('backup.google_drive_folder_id')->label(__('label.setting.backup.google_drive_folder_id')),
Forms\Components\Radio::make('backup.via_ftp')->options(self::$yesOrNo)->inline(true)->label(__('label.setting.backup.via_ftp'))->helperText(__('label.setting.backup.via_ftp_help')),
Forms\Components\Radio::make('backup.via_sftp')->options(self::$yesOrNo)->inline(true)->label(__('label.setting.backup.via_sftp'))->helperText(__('label.setting.backup.via_sftp_help')),
])->columns(2),
])
];
}
protected function getRedirectUrl(): ?string
public function submit()
{
return $this->getResource()::getUrl('index');
$formData = $this->form->getState();
$notAutoloadNames = ['donation_custom'];
$data = [];
foreach ($formData as $prefix => $parts) {
foreach ($parts as $name => $value) {
if (is_null($value)) {
continue;
}
if (in_array($name, $notAutoloadNames)) {
$autoload = 'no';
} else {
$autoload = 'yes';
}
if (is_array($value)) {
$value = json_encode($value);
}
$data[] = [
'name' => "$prefix.$name",
'value' => $value,
'autoload' => $autoload,
];
}
}
Setting::query()->upsert($data, ['name'], ['value']);
NexusDB::cache_del('nexus_settings_in_laravel');
NexusDB::cache_del('nexus_settings_in_nexus');
$this->notify('success', __('filament::resources/pages/edit-record.messages.saved'));
}
protected function mutateFormDataBeforeSave(array $data): array
{
$arr = json_decode($data['value'], true);
if (is_array($arr)) {
throw new \LogicException("Not support edit this !");
}
return $data;
}
}

View File

@@ -26,6 +26,11 @@ class TagResource extends Resource
return __('admin.sidebar.tags_list');
}
public static function getBreadcrumb(): string
{
return self::getNavigationLabel();
}
public static function form(Form $form): Form
{
return $form

View File

@@ -30,6 +30,11 @@ class ExamUserResource extends Resource
return __('admin.sidebar.exam_users');
}
public static function getBreadcrumb(): string
{
return self::getNavigationLabel();
}
public static function form(Form $form): Form
{
return $form

View File

@@ -29,6 +29,11 @@ class HitAndRunResource extends Resource
return __('admin.sidebar.hit_and_runs');
}
public static function getBreadcrumb(): string
{
return self::getNavigationLabel();
}
public static function form(Form $form): Form
{
return $form

View File

@@ -28,6 +28,10 @@ class UserResource extends Resource
return __('admin.sidebar.users_list');
}
public static function getBreadcrumb(): string
{
return self::getNavigationLabel();
}
public static function form(Form $form): Form
{

View File

@@ -3,6 +3,7 @@
namespace App\Filament\Resources\User\UserResource\Pages;
use App\Filament\Resources\User\UserResource;
use App\Models\User;
use Filament\Resources\Pages\Page;
class UserProfile extends Page
@@ -10,4 +11,19 @@ class UserProfile extends Page
protected static string $resource = UserResource::class;
protected static string $view = 'filament.resources.user.user-resource.pages.user-profile';
protected ?User $user;
public function mount($record)
{
$this->user = User::query()->with(['inviter'])->findOrFail($record);
}
protected function getViewData(): array
{
return [
'user' => $this->user,
];
}
}

View File

@@ -70,11 +70,17 @@ class HitAndRun extends NexusModel
return $result;
}
public static function listModes(): array
public static function listModes($onlyKeyValue = false): array
{
$result = self::$modes;
$keyValues = [];
foreach ($result as $key => &$value) {
$value['text'] = nexus_trans('hr.mode_' . $key);
$text = nexus_trans('hr.mode_' . $key);
$value['text'] = $text;
$keyValues[$key] = $text;
}
if ($onlyKeyValue) {
return $keyValues;
}
return $result;
}

View File

@@ -7,7 +7,9 @@ use Nexus\Database\NexusDB;
class Setting extends NexusModel
{
protected $fillable = ['name', 'value'];
protected $fillable = ['name', 'value', 'autoload'];
public $timestamps = true;
/**
* get setting autoload = yes with cache