@extends('layouts.admin') @section('title', 'Plugins') @section('content')

Plugins

@if(session('success'))
{{ session('success') }}
@endif @if(session('error'))
{{ session('error') }}
@endif
Upload Plugin (.zip)
@csrf
ZIP must contain exactly one top-level folder with plugin.json and bootstrap.php.
@forelse($plugins as $row) @php /** @var \App\Services\Plugins\PluginManifest $manifest */ $manifest = $row['manifest']; /** @var \App\Models\Plugin|null $record */ $record = $row['record']; $enabled = $record?->is_enabled ? true : false; @endphp @if(!empty($manifest->configFields)) @endif @empty @endforelse
Plugin Type Version Status Actions
{{ $manifest->name }}
{{ $manifest->slug }}
@if($manifest->description)
{{ $manifest->description }}
@endif
{{ $manifest->type }} {{ $manifest->version }} @if($enabled) Enabled @else Disabled @endif
@if(!$enabled)
@csrf
@else
@csrf
@endif
@csrf
Settings
@csrf @foreach($manifest->configFields as $field) @php $key = $field['key'] ?? ''; $label = $field['label'] ?? $key; $type = $field['type'] ?? 'text'; $placeholder = $field['placeholder'] ?? ''; $options = $field['options'] ?? []; $encrypted = (bool)($field['encrypted'] ?? false); $current = null; if($record) { $setting = $record->settings->firstWhere('key', $key); $current = $setting?->getValue(); } @endphp @if($type === 'select')
@elseif($type === 'password')
@if($encrypted)
Leave blank to keep existing secret.
@endif
@else
@endif @endforeach
No plugins found in /plugins directory.
@endsection