mirror of
https://github.com/lkddi/nexusphp.git
synced 2026-04-14 20:40:49 +08:00
filament setting apge
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
namespace App\Filament;
|
||||
|
||||
trait NexusOptionsTrait
|
||||
trait OptionsTrait
|
||||
{
|
||||
private static array $matchTypes = ['dec' => 'dec', 'hex' => 'hex'];
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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('/'),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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';
|
||||
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user