@extends('layouts.app') @section('title', 'Dashboard') @section('content')

Dashboard

Hoş geldiniz, {{ $user->name }}!

Gelişmiş Analitik
@if($user->role === 'developer' && isset($quickSetupSteps))

Hızlı Kurulum

Sitenizi adım adım kurun ve öğrenin

@endif @if($userWidgets->count() > 0)
@foreach($userWidgets as $userWidget)
@component($userWidget->widget->component, [ 'settings' => $userWidget->settings ?? [], 'sites' => $sites ?? collect(), 'totalSites' => $totalSites ?? 0, 'user' => $user ?? null, 'stats' => $stats ?? [], 'developerKpis' => $developerKpis ?? [], 'performanceSnapshots' => $performanceSnapshots ?? collect(), 'financialSummary' => $financialSummary ?? null, 'pendingTrainings' => $pendingTrainings ?? 0, 'totalTrainings' => $totalTrainings ?? 0, 'securityAlerts' => $securityAlerts ?? collect(), 'pluginUpdates' => $pluginUpdates ?? ['total' => 0, 'critical' => 0, 'updates' => collect()], ]) @endcomponent
@endforeach
@else

Henüz widget eklenmemiş

"Widget Düzenle" butonuna tıklayarak widget ekleyin.

@endif @if($user->isAdmin())

GSP Connector Güncelleme Yönetimi

Yeni versiyon yayınlayın ve tüm WordPress sitelerinde GSP Connector eklentisini güncelleyin. Dilerseniz sadece panel üzerinden anlık güncelleme tetikleyebilirsiniz.

GitHub Release + Toplu Güncelleme

Girilen sürüm etiketi GitHub reposunda release olarak oluşturulur ve bakım modunda olmayan tüm sitelerde güncelleme tetiklenir.

@csrf

Format: vX.Y.Z (örn: v1.2.0)

@error('new_version')

{{ $message }}

@enderror

Panel Üzerinden Sadece Güncelle

GitHub release oluşturmadan mevcut sürümü çekmeye zorlamak için bu butonu kullanın. İşlem AJAX ile ilerler.

@if($user->isAdmin())

Döviz Kuru Senkronizasyonu

ExchangeRate-API'den güncel döviz kurlarını çekin ve veritabanına kaydedin. Otomatik senkronizasyon her gün sabah 06:00'da çalışır.

Senkronizasyon Durumu

Yükleniyor...

Son Senkronizasyon Bilgileri

Son Senkronizasyon:
-
Toplam Kur Sayısı:
-
Durum:
Kontrol ediliyor
@endif

Bakım Kuyruğu Durumu

Kontrol ediliyor

Bakım kuyruğunda çalışan worker'ın son kalp atışı ve durumunu takip edin.

Durum
Bilinmiyor
Son Görülme
-
Bakım Ayarları
@if(session('mass_update_results')) @php $results = session('mass_update_results', []); $summary = session('mass_update_summary', []); @endphp

Toplu Güncelleme Sonuçları

Sürüm: {{ $summary['version'] ?? '-' }} • Toplam: {{ $summary['total'] ?? 0 }} • Başarılı: {{ $summary['succeeded'] ?? 0 }} • Hata: {{ $summary['failed'] ?? 0 }} • Atlanan: {{ $summary['skipped'] ?? 0 }}

@foreach($results as $result) @php $status = $result['status'] ?? 'unknown'; $statusClass = match($status) { 'success' => 'text-green-600 dark:text-green-400', 'skipped' => 'text-gray-500 dark:text-gray-400 dark:text-gray-500', 'error', 'exception' => 'text-red-600 dark:text-red-400', default => 'text-gray-600 dark:text-gray-400 dark:text-gray-500', }; @endphp @endforeach
Site URL Durum Mesaj
{{ $result['site'] ?? '-' }} @if(!empty($result['url'])) {{ $result['url'] }} @else - @endif {{ $status }} {{ $result['message'] ?? '-' }}
@endif @if($performanceSnapshots->isNotEmpty() || !empty($performanceTrends['datasets'])) @if(!empty($performanceTrends['datasets']))

Performans Trend Grafikleri

Son 30 günlük mobil ve desktop performans skorları trend analizi

@endif @if(!empty($prioritizedSites) && $prioritizedSites->count() > 0)

Optimizasyon Öncelikli Siteler

Performans metriklerine göre en acil optimizasyon gerektiren siteler

@foreach($prioritizedSites as $site) @php $priorityLevel = $site->priority_level ?? 'low'; $priorityScore = $site->priority_score ?? 0; $reasons = $site->priority_reasons ?? []; $badgeClass = match($priorityLevel) { 'critical' => 'bg-red-100 dark:bg-red-900/30 text-red-800 dark:text-red-300 border-red-300 dark:border-red-700', 'high' => 'bg-orange-100 dark:bg-orange-900/30 text-orange-800 dark:text-orange-300 border-orange-300 dark:border-orange-700', 'medium' => 'bg-yellow-100 dark:bg-yellow-900/30 text-yellow-800 dark:text-yellow-300 border-yellow-300 dark:border-yellow-700', default => 'bg-gray-100 dark:bg-gray-700 text-gray-800 dark:text-gray-300 border-gray-300 dark:border-gray-600', }; $iconClass = match($priorityLevel) { 'critical' => 'fa-exclamation-circle text-red-600 dark:text-red-400', 'high' => 'fa-exclamation-triangle text-orange-600 dark:text-orange-400', 'medium' => 'fa-info-circle text-yellow-600 dark:text-yellow-400', default => 'fa-check-circle text-gray-600 dark:text-gray-400 dark:text-gray-500', }; @endphp
{{ $site->name }} @if($priorityLevel === 'critical') Kritik @elseif($priorityLevel === 'high') Yüksek @elseif($priorityLevel === 'medium') Orta @else Düşük @endif Öncelik Skoru: {{ number_format($priorityScore, 1) }}/100
@if(!empty($reasons)) @foreach(array_slice($reasons, 0, 3) as $reason)
{{ $reason }}
@endforeach @if(count($reasons) > 3)
+{{ count($reasons) - 3 }} neden daha...
@endif @else
Öncelik nedeni belirlenemedi
@endif
@php $latestMobile = $site->latest_mobile_report ?? null; $mobileScore = $latestMobile->performance_score ?? null; $mobileFcp = $latestMobile->fcp_metric ?? null; @endphp @if($mobileScore !== null)
Mobil Skor
{{ $mobileScore }}/100
@endif @if($mobileFcp !== null)
FCP
{{ number_format($mobileFcp, 2) }}s
@endif
@csrf
@endforeach
@if($prioritizedSites->count() >= 10) @endif
@endif @if(isset($securityAlerts) && $securityAlerts['total'] > 0)

Güvenlik Uyarıları

Tespit edilen güvenlik sorunları ve öneriler

CSV İndir @if($securityAlerts['critical'] > 0) {{ $securityAlerts['critical'] }} Kritik @endif @if($securityAlerts['high'] > 0) {{ $securityAlerts['high'] }} Yüksek @endif
@foreach($securityAlerts['alerts']->take(5) as $alert)
{{ $alert->site->name }} {{ ucfirst($alert->severity) }} {{ $alert->alert_type_label }}

{{ $alert->title }}

{{ $alert->message }}

@if($alert->details && is_array($alert->details))
@foreach(array_slice($alert->details, 0, 3) as $key => $detail) @if(is_string($detail) || is_numeric($detail))
{{ $detail }}
@elseif(is_array($detail)) @if(isset($detail['plugins']))
Plugin'ler: @foreach(array_slice($detail['plugins'], 0, 3) as $plugin) {{ $plugin['name'] ?? 'Bilinmeyen' }} @endforeach
@endif @endif @endforeach
@endif
@endforeach
@if($securityAlerts['total'] > 5) @endif
@endif @if(isset($pluginUpdates) && $pluginUpdates['total'] > 0)

Plugin Güncellemeleri

Güncelleme gerektiren WordPress plugin'leri

@if($pluginUpdates['critical'] > 0) {{ $pluginUpdates['critical'] }} Kritik @endif {{ $pluginUpdates['total'] }} Güncelleme
@foreach($pluginUpdates['updates']->take(10) as $update)
{{ $update->site->name }} {{ $update->plugin_name }} @if($update->is_critical) Kritik @endif
Mevcut: {{ $update->current_version ?? 'Bilinmiyor' }} Yeni: {{ $update->latest_version ?? 'Bilinmiyor' }} @if($update->last_checked_at) {{ $update->last_checked_at->diffForHumans() }} @endif
@endforeach
@if($pluginUpdates['total'] > 10) @endif
@endif

Son Performans Ölçümleri

Google PageSpeed sonuçlarından alınan en güncel mobil ve masaüstü skorları.

CSV İndir
@foreach($performanceSnapshots as $snapshot) @php $mobileScore = $snapshot['mobile_score'] ?? null; $desktopScore = $snapshot['desktop_score'] ?? null; $mobileFcp = $snapshot['mobile_fcp'] ?? null; $mobileLcp = $snapshot['mobile_lcp'] ?? null; $mobileCls = $snapshot['mobile_cls'] ?? null; $mobileTti = $snapshot['mobile_tti'] ?? null; $mobileTbt = $snapshot['mobile_tbt'] ?? null; $desktopFcp = $snapshot['desktop_fcp'] ?? null; $desktopLcp = $snapshot['desktop_lcp'] ?? null; $desktopCls = $snapshot['desktop_cls'] ?? null; $desktopTti = $snapshot['desktop_tti'] ?? null; $desktopTbt = $snapshot['desktop_tbt'] ?? null; $updatedAt = $snapshot['updated_at'] ?? null; @endphp @endforeach
Site Mobil Skor Mobil Metrikler Masaüstü Skor Masaüstü Metrikler Son Ölçüm
{{ $snapshot['site_name'] }} @if(!is_null($mobileScore)) {{ $mobileScore }} @else - @endif @if($mobileFcp || $mobileLcp || $mobileCls || $mobileTti || $mobileTbt)
@if($mobileFcp)
FCP: {{ number_format($mobileFcp, 2) }}s
@endif @if($mobileLcp)
LCP: {{ number_format($mobileLcp, 2) }}s
@endif @if($mobileCls !== null)
CLS: {{ number_format($mobileCls, 3) }}
@endif @if($mobileTti)
TTI: {{ number_format($mobileTti, 2) }}s
@endif @if($mobileTbt)
TBT: {{ number_format($mobileTbt, 2) }}s
@endif
@else - @endif
@if(!is_null($desktopScore)) {{ $desktopScore }} @else - @endif @if($desktopFcp || $desktopLcp || $desktopCls || $desktopTti || $desktopTbt)
@if($desktopFcp)
FCP: {{ number_format($desktopFcp, 2) }}s
@endif @if($desktopLcp)
LCP: {{ number_format($desktopLcp, 2) }}s
@endif @if($desktopCls !== null)
CLS: {{ number_format($desktopCls, 3) }}
@endif @if($desktopTti)
TTI: {{ number_format($desktopTti, 2) }}s
@endif @if($desktopTbt)
TBT: {{ number_format($desktopTbt, 2) }}s
@endif
@else - @endif
@if($updatedAt) {{ \Carbon\Carbon::parse($updatedAt)->format('d.m.Y H:i') }} @else - @endif
@endif @if($user->isAdmin() && !empty($financialSummary))

Finansal Sağlık Özeti

Para birimi dağılımı, vergi durumu ve stok uyarılarını tek bir yerden takip edin.

Para Birimleri

    @forelse($financialSummary['currencies'] as $row)
  • {{ strtoupper($row['currency']) }} {{ $row['total'] }} site
  • @empty
  • Kayıtlı para birimi bulunamadı.
  • @endforelse

Vergi Durumu

Vergi Açık {{ $financialSummary['tax']['enabled'] ?? 0 }} site
Vergi Kapalı {{ $financialSummary['tax']['disabled'] ?? 0 }} site

Stok Uyarıları

Bildiren Site {{ $financialSummary['stock']['sites_reporting'] ?? 0 }}
Düşük Stok {{ $financialSummary['stock']['low_stock'] ?? 0 }} ürün
Stokta Yok {{ $financialSummary['stock']['out_of_stock'] ?? 0 }} ürün

Son Finansal Senkronizasyonlar

@forelse($financialSummary['site_rows'] as $row) @empty @endforelse
Site Para Birimi Vergi Düşük Stok Stokta Yok
{{ $row['name'] }} {{ strtoupper($row['currency'] ?? '-') }} @if($row['tax_enabled']) Açık @else Kapalı @endif {{ $row['low_stock'] }} {{ $row['out_of_stock'] }}
Henüz finansal veri senkronize edilmedi.
@endif

Geliştirici KPI Takibi

Ortalama kurulum süreleri, tamamlanan site sayıları ve ekip performansına dair özet veriler.

@forelse($developerKpis as $kpi) @empty @endforelse
Geliştirici Tamamlanan Site Ortalama Kurulum Süresi
{{ $kpi['name'] }} {{ $kpi['completed_count'] }} @if(isset($kpi['avg_setup_time_detail']) && $kpi['avg_minutes_raw'] > 0) {{ $kpi['avg_setup_time_detail'] }} @elseif($kpi['avg_setup_time'] > 0) {{ $kpi['avg_setup_time'] }} {{ $kpi['avg_unit'] }} @else Veri yok @endif
Henüz tamamlanan site bulunmuyor.
@endif

Son Siteler

@if($user->isAdmin()) @endif @forelse($sites as $site) @if($user->isAdmin()) @endif @empty @endforelse
Site Adı URLAtananDurum İşlemler
{{ $site->name }} {{ $site->url }} {{ $site->assignedUser ? $site->assignedUser->name : 'Atanmamış' }} {{ $site->status }} Detay
Henüz site bulunmamaktadır.
@endsection @push('scripts') @if($user->isAdmin()) @endif @if($user->role === 'developer' && isset($quickSetupSteps)) @endif @endpush