-
Notifications
You must be signed in to change notification settings - Fork 45
Expand file tree
/
Copy pathPasteFoxSharePlugin.php
More file actions
104 lines (91 loc) · 3.79 KB
/
PasteFoxSharePlugin.php
File metadata and controls
104 lines (91 loc) · 3.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
<?php
namespace FlexKleks\PasteFoxShare;
use App\Contracts\Plugins\HasPluginSettings;
use App\Traits\EnvironmentWriterTrait;
use Filament\Contracts\Plugin;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Notifications\Notification;
use Filament\Panel;
use Filament\Schemas\Components\Section;
class PasteFoxSharePlugin implements HasPluginSettings, Plugin
{
use EnvironmentWriterTrait;
public function getId(): string
{
return 'pastefox-share';
}
public function register(Panel $panel): void {}
public function boot(Panel $panel): void {}
public function getSettingsForm(): array
{
return [
Section::make('API Configuration')
->description('Without API key, pastes expire after 7 days and are always public.')
->schema([
TextInput::make('api_key')
->label('API Key')
->password()
->revealable()
->helperText('Optional - Get your API key from https://pastefox.com/dashboard')
->default(fn () => config('pastefox-share.api_key')),
]),
Section::make('Paste Settings')
->schema([
Select::make('visibility')
->label('Visibility')
->options([
'PUBLIC' => 'Public',
'PRIVATE' => 'Private (requires API key)',
])
->default(fn () => config('pastefox-share.visibility', 'PUBLIC'))
->helperText('Private pastes require an API key'),
Select::make('effect')
->label('Visual Effect')
->options([
'NONE' => 'None',
'MATRIX' => 'Matrix Rain',
'GLITCH' => 'Glitch',
'CONFETTI' => 'Confetti',
'SCRATCH' => 'Scratch Card',
'PUZZLE' => 'Puzzle Reveal',
'SLOTS' => 'Slot Machine',
'SHAKE' => 'Shake',
'FIREWORKS' => 'Fireworks',
'TYPEWRITER' => 'Typewriter',
'BLUR' => 'Blur Reveal',
])
->default(fn () => config('pastefox-share.effect', 'NONE')),
Select::make('theme')
->label('Theme')
->options([
'dark' => 'Dark',
'light' => 'Light',
])
->default(fn () => config('pastefox-share.theme', 'dark')),
TextInput::make('password')
->label('Password Protection')
->password()
->revealable()
->minLength(4)
->maxLength(100)
->helperText('Optional - 4-100 characters')
->default(fn () => config('pastefox-share.password')),
]),
];
}
public function saveSettings(array $data): void
{
$this->writeToEnvironment([
'PASTEFOX_API_KEY' => $data['api_key'] ?? '',
'PASTEFOX_VISIBILITY' => $data['visibility'] ?? 'PUBLIC',
'PASTEFOX_EFFECT' => $data['effect'] ?? 'NONE',
'PASTEFOX_THEME' => $data['theme'] ?? 'dark',
'PASTEFOX_PASSWORD' => $data['password'] ?? '',
]);
Notification::make()
->title('Settings saved')
->success()
->send();
}
}