wip: article AI polish, category SEO fields, cover generator, membership plan seeder
CI / PHPUnit (PHP 8.3) (push) Failing after 4s
CI / PHPUnit (PHP 8.2) (push) Failing after 1m9s
CI / Deploy (manual gate) (push) Skipped

This commit is contained in:
2026-09-07 18:48:37 +00:00
parent 263b98b218
commit 3cec4c5e18
121 changed files with 4701 additions and 313 deletions
+37 -9
View File
@@ -10,8 +10,10 @@ use BackedEnum;
use Filament\Actions\Action;
use Filament\Notifications\Notification;
use Filament\Pages\Page;
use Filament\Support\Enums\Alignment;
use Filament\Support\Enums\Width;
use Filament\Support\Icons\Heroicon;
use UnitEnum;
use Illuminate\Contracts\View\View;
class ManagePlugins extends Page
{
@@ -69,19 +71,45 @@ class ManagePlugins extends Page
public function showDocs(string $name, PluginManager $manager): void
{
$docs = $manager->readDocs($name);
if ($docs === null || trim($docs) === '') {
if ($manager->readDocs($name) === null) {
Notification::make()->title(__('admin.messages.plugin_docs_missing'))->warning()->send();
return;
}
Notification::make()
->title(__('admin.pages.plugin_docs'))
->body(str($docs)->limit(1800)->toString())
->persistent()
->info()
->send();
$this->mountAction('viewDocs', ['name' => $name]);
}
public function viewDocsAction(): Action
{
return Action::make('viewDocs')
->label(__('admin.pages.plugin_docs'))
->modalHeading(function (array $arguments): string {
$name = (string) ($arguments['name'] ?? '');
$plugin = collect($this->plugins)->firstWhere('name', $name);
$title = is_array($plugin) ? (string) ($plugin['title'] ?? $name) : $name;
return __('admin.pages.plugin_docs').($title !== '' ? ' · '.$title : '');
})
->modalContent(function (array $arguments): View {
return view('filament.partials.plugin-docs', [
'html' => app(PluginManager::class)->readDocsHtml((string) ($arguments['name'] ?? '')) ?? '',
]);
})
->modalAlignment(Alignment::Center)
->modalWidth(Width::FiveExtraLarge)
->modalSubmitAction(false)
->modalCancelAction(fn (Action $action): Action => $action
->label(__('admin.actions.close'))
->color('primary')
->close()
)
->modalFooterActionsAlignment(Alignment::End)
->closeModalByClickingAway()
->closeModalByEscaping()
->stickyModalHeader()
->stickyModalFooter()
->extraModalWindowAttributes(['class' => 'lb-plugin-docs-modal']);
}
protected function reload(PluginManager $manager): void
@@ -22,4 +22,10 @@ class MembershipPluginPage extends PluginSkeletonPage
{
return 'membership';
}
public static function shouldRegisterNavigation(): bool
{
// UI is owned by plugins/larablog/membership Filament resources.
return false;
}
}