diff --git a/app/resources/views/livewire/pages/sites/show.blade.php b/app/resources/views/livewire/pages/sites/show.blade.php index 9a2a6f1..13c58f9 100644 --- a/app/resources/views/livewire/pages/sites/show.blade.php +++ b/app/resources/views/livewire/pages/sites/show.blade.php @@ -27,6 +27,49 @@ new #[Layout('layouts.app')] class extends Component { public string $tlsMin = '1.3'; public string $sslProvider = 'letsencrypt'; // letsencrypt | custom | cloudflare + /** Staging environment state. */ + public bool $stagingActive = true; + public string $stagingSubdomain = 'staging'; + public bool $stagingPasswordProtect = true; + public bool $stagingExcludeMedia = false; + public string $stagingLastSync = '2026-05-31 14:22'; + + /** Plugin / theme registry — mocked, would come from WP-API in prod. */ + public function getPluginsProperty(): array + { + return [ + ['name' => 'Yoast SEO', 'slug' => 'wordpress-seo', 'version' => '22.5', 'latest' => '22.5', 'status' => 'active', 'auto' => true, 'updates' => false], + ['name' => 'WooCommerce', 'slug' => 'woocommerce', 'version' => '8.9.2', 'latest' => '9.0.1', 'status' => 'active', 'auto' => false, 'updates' => true], + ['name' => 'WP Rocket', 'slug' => 'wp-rocket', 'version' => '3.16.0', 'latest' => '3.16.0', 'status' => 'active', 'auto' => true, 'updates' => false], + ['name' => 'Wordfence Security', 'slug' => 'wordfence', 'version' => '7.11.4', 'latest' => '7.11.6', 'status' => 'active', 'auto' => true, 'updates' => true], + ['name' => 'Advanced Custom Fields', 'slug' => 'advanced-custom-fields', 'version' => '6.2.10', 'latest' => '6.3.1', 'status' => 'active', 'auto' => false, 'updates' => true], + ['name' => 'Contact Form 7', 'slug' => 'contact-form-7', 'version' => '5.9.6', 'latest' => '5.9.6', 'status' => 'inactive', 'auto' => true, 'updates' => false], + ['name' => 'Akismet Anti-Spam', 'slug' => 'akismet', 'version' => '5.3.2', 'latest' => '5.3.3', 'status' => 'active', 'auto' => true, 'updates' => true], + ['name' => 'UpdraftPlus', 'slug' => 'updraftplus', 'version' => '1.24.0', 'latest' => '1.24.0', 'status' => 'inactive', 'auto' => false, 'updates' => false], + ]; + } + + public function getThemesProperty(): array + { + return [ + ['name' => 'Storefront', 'version' => '4.6.0', 'latest' => '4.6.0', 'status' => 'parent'], + ['name' => 'Storefront Child', 'version' => '1.2.1', 'latest' => '1.2.1', 'status' => 'active'], + ['name' => 'Twenty Twenty-Four','version' => '1.2', 'latest' => '1.2', 'status' => 'inactive'], + ]; + } + + public function getRedirectsProperty(): array + { + return [ + ['from' => '/alte-kategorie/', 'to' => '/produkte/kaffee/', 'code' => 301, 'hits' => 4218, 'last' => 'vor 12 min'], + ['from' => '/2024-aktion', 'to' => '/aktuelle-angebote/', 'code' => 301, 'hits' => 2104, 'last' => 'vor 38 min'], + ['from' => '/sale', 'to' => '/aktuelle-angebote/', 'code' => 302, 'hits' => 18642,'last' => 'vor 2 min'], + ['from' => '/checkout-old', 'to' => '/warenkorb/', 'code' => 301, 'hits' => 12, 'last' => 'gestern'], + ['from' => '/feed/atom', 'to' => '/feed/', 'code' => 301, 'hits' => 891, 'last' => 'vor 7 min'], + ['from' => '/wp-content/uploads/2022/(.*)', 'to' => '/wp-content/uploads/legacy/$1', 'code' => 301, 'hits' => 56, 'last' => 'vor 4 std'], + ]; + } + public function mount(Site $site): void { $this->site = $site->load(['server', 'certificate', 'crons']); @@ -329,7 +372,7 @@ new #[Layout('layouts.app')] class extends Component { {{-- ── Tab bar ── --}}
| Plugin | Version | Status | Auto-Update | |
|---|---|---|---|---|
|
+
+
+ {{ mb_strtoupper(mb_substr($p['name'], 0, 1)) }}
+
+ |
+ + @if ($p['updates']) + {{ $p['version'] }} → {{ $p['latest'] }} + @else + {{ $p['version'] }} + @endif + | ++ @if ($p['status'] === 'active')aktiv + @else inaktiv@endif + | ++ + | +
+
+ @if ($p['updates'])
+
+ @endif
+
+
+
+ |
+
| Theme | Version | Status | |
|---|---|---|---|
| {{ $t['name'] }} | +{{ $t['version'] }} | ++ @if ($t['status'] === 'active')aktiv + @elseif ($t['status'] === 'parent')parent + @else inaktiv@endif + | +
+
+
+
+
+ |
+
| Von | → | Nach | Code | Hits 24h | Letzter Treffer | |
|---|---|---|---|---|---|---|
| + + | {{ $r['code'] }} | +{{ number_format($r['hits'], 0, ',', '.') }} | +{{ $r['last'] }} | +
+
+
+
+
+
+ |
+
Vollständiger Clone von Production: DB + Files + Uploads. URLs werden automatisch auf staging.{{ $site->domain }} umgeschrieben.
+Selektive Übernahme: Code, DB-Tabellen oder beides. Auto-Snapshot von Production vor dem Push.
+