mirror of
				https://github.com/pelican-dev/panel.git
				synced 2025-11-04 10:56:52 +01:00 
			
		
		
		
	Work In Progress
This commit is contained in:
		
							parent
							
								
									366a49dba3
								
							
						
					
					
						commit
						791f04c5d9
					
				
							
								
								
									
										17
									
								
								app/Features/CustomModal.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								app/Features/CustomModal.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,17 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace App\Features;
 | 
			
		||||
 | 
			
		||||
use Filament\Forms\Components\Concerns\HasActions;
 | 
			
		||||
use Filament\Forms\Components\Field;
 | 
			
		||||
use Filament\Support\Concerns\HasDescription;
 | 
			
		||||
use Filament\Support\Concerns\HasHeading;
 | 
			
		||||
 | 
			
		||||
class CustomModal extends Field
 | 
			
		||||
{
 | 
			
		||||
    use HasActions;
 | 
			
		||||
    use HasHeading;
 | 
			
		||||
    use HasDescription;
 | 
			
		||||
 | 
			
		||||
    protected string $view = 'livewire.custom-modal';
 | 
			
		||||
}
 | 
			
		||||
@ -7,12 +7,12 @@ use Filament\Actions\Action;
 | 
			
		||||
abstract class Feature
 | 
			
		||||
{
 | 
			
		||||
    /** you need to agree to the eula in order to run the server */
 | 
			
		||||
    abstract static public function listeners(): array;
 | 
			
		||||
    abstract public function listeners(): array;
 | 
			
		||||
 | 
			
		||||
    /** eula */
 | 
			
		||||
    abstract static public function featureName(): string;
 | 
			
		||||
    abstract public function featureName(): string;
 | 
			
		||||
 | 
			
		||||
    abstract static public function action(): Action;
 | 
			
		||||
    abstract public function action(): Action;
 | 
			
		||||
 | 
			
		||||
    public function matchesListeners(string $line): bool
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
@ -9,7 +9,7 @@ use Filament\Notifications\Notification;
 | 
			
		||||
 | 
			
		||||
class JavaVersion extends Feature
 | 
			
		||||
{
 | 
			
		||||
    public static function listeners(): array
 | 
			
		||||
    public function listeners(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [
 | 
			
		||||
            'minecraft 1.17 requires running the server with java 16 or above',
 | 
			
		||||
@ -20,12 +20,12 @@ class JavaVersion extends Feature
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static function featureName(): string
 | 
			
		||||
    public function featureName(): string
 | 
			
		||||
    {
 | 
			
		||||
        return 'java_version';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static function action(): Action
 | 
			
		||||
    public function action(): Action
 | 
			
		||||
    {
 | 
			
		||||
        return Action::make('eula')
 | 
			
		||||
            ->form([
 | 
			
		||||
 | 
			
		||||
@ -9,21 +9,21 @@ use Filament\Notifications\Notification;
 | 
			
		||||
 | 
			
		||||
class MinecraftEula extends Feature
 | 
			
		||||
{
 | 
			
		||||
    public static function listeners(): array
 | 
			
		||||
    public function listeners(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [
 | 
			
		||||
            'you need to agree to the eula in order to run the server',
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static function featureName(): string
 | 
			
		||||
    public function featureName(): string
 | 
			
		||||
    {
 | 
			
		||||
        return 'eula';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static function action(): Action
 | 
			
		||||
    public function action(): Action
 | 
			
		||||
    {
 | 
			
		||||
        return Action::make('eula')
 | 
			
		||||
        return Action::make($this->featureName())
 | 
			
		||||
            ->form([
 | 
			
		||||
                Placeholder::make('eula')
 | 
			
		||||
                    ->label('By pressing I Accept below you are indicating your agreement to the Minecraft® EULA.'),
 | 
			
		||||
 | 
			
		||||
@ -3,6 +3,7 @@
 | 
			
		||||
namespace App\Filament\Server\Widgets;
 | 
			
		||||
 | 
			
		||||
use App\Exceptions\Http\HttpForbiddenException;
 | 
			
		||||
use App\Features\Feature;
 | 
			
		||||
use App\Models\Permission;
 | 
			
		||||
use App\Models\Server;
 | 
			
		||||
use App\Models\User;
 | 
			
		||||
@ -10,10 +11,9 @@ use App\Services\Nodes\NodeJWTService;
 | 
			
		||||
use App\Services\Servers\GetUserPermissionsService;
 | 
			
		||||
use Filament\Widgets\Widget;
 | 
			
		||||
use Illuminate\Support\Arr;
 | 
			
		||||
use Illuminate\Support\Collection;
 | 
			
		||||
use Illuminate\Support\Facades\Log;
 | 
			
		||||
use Livewire\Attributes\On;
 | 
			
		||||
use App\Features;
 | 
			
		||||
use App\Features\CustomModal;
 | 
			
		||||
 | 
			
		||||
class ServerConsole extends Widget
 | 
			
		||||
{
 | 
			
		||||
@ -33,6 +33,14 @@ class ServerConsole extends Widget
 | 
			
		||||
 | 
			
		||||
    public string $input = '';
 | 
			
		||||
 | 
			
		||||
    public function modal(): CustomModal
 | 
			
		||||
    {
 | 
			
		||||
        return CustomModal::make('modal-eula')
 | 
			
		||||
            ->heading('Info!')
 | 
			
		||||
            ->description('Description')
 | 
			
		||||
            ->registerActions([/* if neccessary */]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected function getToken(): string
 | 
			
		||||
    {
 | 
			
		||||
        if (!$this->user || !$this->server || $this->user->cannot(Permission::ACTION_WEBSOCKET_CONNECT, $this->server)) {
 | 
			
		||||
@ -108,18 +116,23 @@ class ServerConsole extends Widget
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return Feature[]
 | 
			
		||||
     */
 | 
			
		||||
    public function getActiveFeatures(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [new Features\MinecraftEula(), new Features\JavaVersion()];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[On('line-to-check')]
 | 
			
		||||
    public function lineToCheck(string $line)
 | 
			
		||||
    public function lineToCheck(string $line): void
 | 
			
		||||
    {
 | 
			
		||||
        foreach ($this->getActiveFeatures() as $feature) {
 | 
			
		||||
          if ($feature->matchesListeners($line)) {
 | 
			
		||||
             Log::info('Feature listens for this', compact(['feature', 'line']));
 | 
			
		||||
          }
 | 
			
		||||
            if ($feature->matchesListeners($line)) {
 | 
			
		||||
                logger()->info('Feature listens for this', compact(['feature', 'line']));
 | 
			
		||||
 | 
			
		||||
                $this->dispatch('open-modal', id: "modal-{$feature->featureName()}");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -154,5 +154,6 @@
 | 
			
		||||
            "displayName": true,
 | 
			
		||||
            "fileName": true
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    },
 | 
			
		||||
    "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,3 +1,4 @@
 | 
			
		||||
@php use App\Features\CustomModal; @endphp
 | 
			
		||||
<x-filament::widget>
 | 
			
		||||
    @assets
 | 
			
		||||
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@xterm/xterm/css/xterm.min.css">
 | 
			
		||||
@ -105,7 +106,7 @@
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const checkListeners = (line) => {
 | 
			
		||||
            $dispatch('line-to-check', { line })
 | 
			
		||||
            $dispatch('line-to-check', { line });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const handleTransferStatus = (status) =>
 | 
			
		||||
@ -193,4 +194,7 @@
 | 
			
		||||
        });
 | 
			
		||||
    </script>
 | 
			
		||||
    @endscript
 | 
			
		||||
 | 
			
		||||
    {{ $this->modal()->render() }}
 | 
			
		||||
 | 
			
		||||
</x-filament::widget>
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										17
									
								
								resources/views/livewire/custom-modal.blade.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								resources/views/livewire/custom-modal.blade.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,17 @@
 | 
			
		||||
<x-filament::modal id="{{ $getName() }}" :width="'xl'">
 | 
			
		||||
    <div class="text-xl font-bold text-center">
 | 
			
		||||
        {{ $getHeading() }}
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <div class="text-lg text-center">
 | 
			
		||||
        {{ $getDescription() }}
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <div class="w-full flex justify-center mt-3">
 | 
			
		||||
        @if ($actions = $getActions())
 | 
			
		||||
            <x-filament::actions
 | 
			
		||||
                    :actions="$actions"
 | 
			
		||||
            />
 | 
			
		||||
        @endif
 | 
			
		||||
    </div>
 | 
			
		||||
</x-filament::modal>
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user