@extends('layouts.superadmin') @section('title', 'لوحة تحكم الإدارة العليا') @section('page-title', 'لوحة التحكم الرئيسية') @section('content') @php use Illuminate\Support\Facades\DB; use Carbon\Carbon; $user = auth()->user(); $enableMemberCareWidget = ($showMemberCareWidget ?? true) && isset($memberCareWidgetCases) && $memberCareWidgetCases->isNotEmpty(); $latestFalconNotes = DB::table('falcon_rola_notes')->orderBy('created_at', 'desc')->limit(3)->get(); $tz = config('app.timezone', 'Asia/Jerusalem'); $next = $nextSchedule ?? null; if ($next) { $title = $next->event_title ?? 'فعالية ProActive القادمة'; $type = $next->event_type ?? 'regular'; // regular|plus $typeTxt = $type === 'plus' ? '+Plus' : 'عادية'; $date = Carbon::parse($next->event_date, $tz); $dateStr = $date->format('Y-m-d'); $dayName = $date->locale('ar')->dayName; $hostName = $next->leader_name ?? '—'; $isToday = $date->isToday(); } else { $title = 'فعالية ProActive القادمة'; $type = 'regular'; $typeTxt = 'عادية'; $dateStr = '—'; $dayName = '—'; $hostName = '—'; $isToday = false; } @endphp {{-- =================== Taateer Expiry Alerts Widget =================== --}} @if(isset($taateerExpiryWidget) && $taateerExpiryWidget) @php $tw = $taateerExpiryWidget; $danger = $tw['danger'] ?? collect(); // <= 24h (إنذار) $warning = $tw['warning'] ?? collect(); // <= 48h (تنبيه) $expired = $tw['expired'] ?? collect(); // منتهي $safe = $tw['safe'] ?? collect(); // بأمان $counts = $tw['counts'] ?? ['danger'=>0,'warning'=>0,'expired'=>0,'safe'=>0,'needs_action'=>0]; $rb = $tw['roleBreakdown'] ?? ['admin'=>0,'supervisor'=>0,'member'=>0]; $hasDanger = ($counts['danger'] ?? 0) > 0 || ($counts['expired'] ?? 0) > 0; $tzDash = config('app.timezone','Asia/Jerusalem'); $taateerRoute = \Illuminate\Support\Facades\Route::has('superadmin.taateer.index') ? route('superadmin.taateer.index') : '#'; @endphp {{-- ========================= ✅ Activities / Challenges Center — temporarily disabled ✅ Competitions are intentionally paused from the dashboard ✅ No heavy score queries here while disabled ========================= --}} @php $activitiesCenterDisabled = true; $activitiesCenterName = 'مركز الأنشطة والتفاعل'; $activitiesModuleLabel = 'نظام الفعاليات والتحديات'; $activitiesPausedAt = \Carbon\Carbon::now(config('app.timezone', 'Asia/Jerusalem'))->format('Y-m-d H:i'); @endphp
وضع رسمي مؤقت

{{ $activitiesCenterName }}

تم إيقاف المسابقات حاليًا من لوحة التحكم بعد انتهاء الموسم، مع إبقاء المركز جاهزًا لإعادة التشغيل لاحقًا بدون ضغط على قاعدة البيانات أو فتح روابط غير مطلوبة.

حالة المسابقات
متوقفة مؤقتًا
أداء الصفحة
أخف وأسرع
آخر ضبط
{{ $activitiesPausedAt }}
المسابقات مغلقة الآن
لن تظهر جداول المشاركين أو نقاط اليوم، ولن يتم فتح صفحة المسابقات من هذا الكرت.
عند بدء فعالية جديدة يمكن تغيير هذا الكرت لاحقًا إلى وضع التشغيل باسم الموسم الجديد.
تنبيهات انتهاء التعتير للأعضاء
القاعدة: قبل يومين (48 ساعة) يظهر تنبيهقبل يوم (24 ساعة) يظهر إنذار.
مهم: الهدف هو التجديد قبل الانتهاء لتفادي أي تعطل في التحقق أو الدخول.
بحاجة إجراء: {{ (int)($counts['needs_action'] ?? 0) }} إداري: {{ (int)($rb['admin'] ?? 0) }} مشرف: {{ (int)($rb['supervisor'] ?? 0) }} عضو: {{ (int)($rb['member'] ?? 0) }}
@if($taateerRoute !== '#') فتح نظام التعتير @endif
{{-- Summary pills --}}
منتهي
{{ (int)($counts['expired'] ?? 0) }}
إنذار (≤ 24 ساعة)
{{ (int)($counts['danger'] ?? 0) }}
تنبيه (≤ 48 ساعة)
{{ (int)($counts['warning'] ?? 0) }}
أعضاء بأمان
{{ (int)($counts['safe'] ?? 0) }}
{{-- EXPIRED --}} @if($expired->isNotEmpty())
🔥 أكواد منتهية — يجب إعادة إصدار/تجديد فورًا
    @foreach($expired->take(12) as $m)
  • {{ $m->name ?: ($m->username ? '@'.$m->username : '#'.$m->id) }} {{ $m->roleLabel }}
    انتهى عند: {{ \Carbon\Carbon::parse($m->expiresAt, $tzDash)->locale('ar')->isoFormat('D MMMM YYYY – h:mm A') }}
    منتهي
  • @endforeach
@if($expired->count() > 12)
و {{ $expired->count() - 12 }} آخرون…
@endif
@endif {{-- DANGER <= 24h --}} @if($danger->isNotEmpty())
⚠️ إنذار قبل يوم — متبقي أقل من 24 ساعة
    @foreach($danger->take(12) as $m) @php $h = max(0, (int)$m->hoursLeft); @endphp
  • {{ $m->name ?: ($m->username ? '@'.$m->username : '#'.$m->id) }} {{ $m->roleLabel }}
    ينتهي: {{ \Carbon\Carbon::parse($m->expiresAt, $tzDash)->locale('ar')->isoFormat('D MMMM YYYY – h:mm A') }}
    متبقي {{ $h }}س
  • @endforeach
@if($danger->count() > 12)
و {{ $danger->count() - 12 }} آخرون…
@endif
@endif {{-- WARNING <= 48h --}} @if($warning->isNotEmpty())
🔔 تنبيه قبل يومين — متبقي أقل من 48 ساعة
    @foreach($warning->take(12) as $m) @php $h = max(0, (int)$m->hoursLeft); @endphp
  • {{ $m->name ?: ($m->username ? '@'.$m->username : '#'.$m->id) }} {{ $m->roleLabel }}
    ينتهي: {{ \Carbon\Carbon::parse($m->expiresAt, $tzDash)->locale('ar')->isoFormat('D MMMM YYYY – h:mm A') }}
    متبقي {{ $h }}س
  • @endforeach
@if($warning->count() > 12)
و {{ $warning->count() - 12 }} آخرون…
@endif
@endif {{-- SAFE (collapsible) --}}
🟢 أعضاء بأمان (أكثر من 48 ساعة) {{ $safe->count() }}
@if($safe->isEmpty())
لا يوجد.
@else
    @foreach($safe->take(10) as $m)
  • {{ $m->name ?: ($m->username ? '@'.$m->username : '#'.$m->id) }} {{ $m->roleLabel }}
    ينتهي: {{ \Carbon\Carbon::parse($m->expiresAt, $tzDash)->locale('ar')->isoFormat('D MMMM YYYY – h:mm A') }}
  • @endforeach
@if($safe->count() > 10)
و {{ $safe->count() - 10 }} آخرون…
@endif @endif
@endif
{{-- خلفية Enterprise (fancy) --}}
{{-- Toast container --}}
{{-- ======================= Top Sticky Console Bar + Tabs ======================= --}}
{{-- Top Header (Compact) --}}

SuperAdmin Console — مركز الإدارة العليا

Live
{{ \Carbon\Carbon::now()->locale('ar')->isoFormat('dddd D MMMM YYYY') }} {{ now($tz)->format('H:i') }}
{{-- User badge: hidden on mobile to save space --}}
{{-- Tabs (Mobile-first: horizontal scroll instead of big wrap) --}}
@php $tabs = [ ['key' => 'overview', 'label' => 'نظرة عامة', 'icon' => 'fa-layer-group'], ['key' => 'members', 'label' => 'الأعضاء', 'icon' => 'fa-users-gear'], ['key' => 'requests', 'label' => 'الطلبات', 'icon' => 'fa-inbox'], ['key' => 'presence', 'label' => 'التواجد', 'icon' => 'fa-signal'], ['key' => 'analytics', 'label' => 'التحليلات', 'icon' => 'fa-chart-pie'], ['key' => 'proactive', 'label' => 'ProActive', 'icon' => 'fa-bolt'], ['key' => 'tips', 'label' => 'النصائح', 'icon' => 'fa-lightbulb'], ]; @endphp
{{-- subtle divider line --}}
@foreach ($tabs as $t) @endforeach
{{-- optional: hide scrollbar --}} {{-- ======================= PANELS ======================= --}} {{-- Panel: OVERVIEW --}}
{{-- Hero Card (Enterprise Profile + KPIs) --}}
صورة المشرف

لوحة الإدارة العليا — تحكم Enterprise

مرحبا {{ $user->name }}

مشرف / الإدارة العليا
{{ \Carbon\Carbon::now()->locale('ar')->isoFormat('dddd D MMMM YYYY') }} آخر تسجيل دخول: {{ $user->last_activity ? \Carbon\Carbon::parse($user->last_activity)->diffForHumans() : 'لأول مرة' }}

هنا تراقب صحة المنظومة، التزام الأعضاء، وملفات الإدارة داخل جيش الوفاء الذهبي.

{{-- KPIs --}}
@php $kpis = [ [ 'label' => 'إجمالي المستخدمين', 'value' => $stats['total_users'] ?? '—', 'valueCls' => 'text-slate-900 dark:text-white', 'icon' => 'fa-users', 'iconWrap' => 'bg-blue-500/10 text-blue-600 dark:bg-blue-500/10 dark:text-blue-200', ], [ 'label' => 'الأعضاء الرسميين', 'value' => $stats['official_members'] ?? '—', 'valueCls' => 'text-emerald-600 dark:text-emerald-200', 'icon' => 'fa-badge-check', 'iconWrap' => 'bg-emerald-500/10 text-emerald-600 dark:bg-emerald-500/10 dark:text-emerald-200', ], [ 'label' => 'أعضاء بيتا', 'value' => $stats['beta_members'] ?? '—', 'valueCls' => 'text-amber-600 dark:text-amber-200', 'icon' => 'fa-flask', 'iconWrap' => 'bg-amber-500/10 text-amber-600 dark:bg-amber-500/10 dark:text-amber-200', ], [ 'label' => 'المتواجدون الآن', 'value' => $stats['online_users'] ?? '—', 'valueCls' => 'text-violet-600 dark:text-violet-200', 'icon' => 'fa-signal', 'iconWrap' => 'bg-violet-500/10 text-violet-600 dark:bg-violet-500/10 dark:text-violet-200', ], ]; @endphp @foreach ($kpis as $k)

{{ $k['label'] }}

{{ $k['value'] }}

@endforeach
{{-- كارد الأعضاء بعذر رسمي اليوم --}} @if (isset($todayExcusedUsers) && $todayExcusedUsers->isNotEmpty())
يوجد أعضاء في فترة غياب معتمدة تغطي تاريخ اليوم.
الأعضاء اليوم عندهم عذر رسمي للغياب:
{{ $todayExcusedUsers->count() }}
    @foreach ($todayExcusedUsers as $u)
  • {{ mb_substr($u->name ?: $u->username, 0, 1) }}
    {{ $u->name ?: $u->username }}
    {{ $u->username ? '@' . $u->username : '' }}
  • @endforeach
@endif {{-- مركز الأولويات الآن --}} @php $pendingRequests = (int) ($requestStats['pending'] ?? 0); $newRequests = (int) ($requestStats['new'] ?? 0); $pendingAbsences = (int) ($absenceStats['pending'] ?? 0); $pendingEvals = (int) ($stats['pending_evaluations'] ?? 0); $pendingViolations = (int) ($violationStats['pending'] ?? ($stats['pending_violations'] ?? 0)); $unreadTips = (int) ($stats['unread_tips'] ?? 0); $scheduledLives = (int) ($stats['scheduled_lives'] ?? 0); $urgentTotal = $pendingRequests + $pendingAbsences + $pendingEvals + $pendingViolations + $unreadTips; $pressure = 0; $pressure += min(30, ($pendingRequests / 10) * 30); $pressure += min(20, ($pendingAbsences / 10) * 20); $pressure += min(20, ($pendingViolations / 10) * 20); $pressure += min(20, ($pendingEvals / 30) * 20); $pressure += min(10, ($unreadTips / 20) * 10); $pressure += min(10, ($scheduledLives / 50) * 10); $pressure = (int) round(min(100, $pressure)); $status = 'good'; $label = 'مستقر'; if ($pressure >= 75) { $status = 'danger'; $label = 'حرج'; } elseif ($pressure >= 45) { $status = 'warning'; $label = 'متوسط'; } $barClass = $status === 'danger' ? 'bg-gradient-to-r from-red-500 to-rose-500' : ($status === 'warning' ? 'bg-gradient-to-r from-amber-400 to-orange-500' : 'bg-gradient-to-r from-emerald-400 via-sky-400 to-violet-400'); $urlRequests = \Illuminate\Support\Facades\Route::has('live-activities.requests.index') ? route('live-activities.requests.index') : '#'; $urlLivesToday = \Illuminate\Support\Facades\Route::has('superadmin.falcon-room.lives-new.confirm') ? route('superadmin.falcon-room.lives-new.confirm', ['date' => now()->toDateString()]) : '#'; $urlTemplates = \Illuminate\Support\Facades\Route::has( 'superadmin.falcon-room.lives-insights.templates.index', ) ? route('superadmin.falcon-room.lives-insights.templates.index') : '#'; $urlFeedback = \Illuminate\Support\Facades\Route::has( 'superadmin.falcon-room.lives-insights.feedback.index', ) ? route('superadmin.falcon-room.lives-insights.feedback.index') : '#'; $templatesTotal = (int) ($insightsStats['templates_total'] ?? 0); $feedbackWeek = (int) ($insightsStats['feedback_week'] ?? 0); $topAiTip = $aiProgramTips[0] ?? null; @endphp
{{-- Left: Activities Priorities --}}

مركز الأنشطة والتفاعل

ملخص سريع لأهم ملفات نظام الفعاليات والتحديات اليوم — فعاليات • هدايا/ميزانية • جدول مهام • تنبيهات • أرشيف.

المتواجدون الآن: {{ $ramadanOnlineUsers ?? 0 }} تنبيهات المركز (معلّقة): {{ $ramadanUrgentTotal ?? 0 }} @if (!empty($ramadanNextSlot)) أقرب موعد نشاط: {{ $ramadanNextSlot->scheduled_date ?? '—' }}{{ $ramadanNextSlot->scheduled_time ?? '—' }} @endif {{-- ✅ التحديات القديمة 9 و10 — متوقفة حالياً --}} {{ $ramadanC9Title ?? 'التحدي 9' }}: {{ $ramadanC9Participants ?? 0 }} مشارك {{ $ramadanC9PointsSum ?? 0 }} نقطة {{ $ramadanC10Title ?? 'التحدي 10' }}: {{ $ramadanC10Participants ?? 0 }} مشارك {{ $ramadanC10PointsSum ?? 0 }} نقطة
{{-- Right: Activities Pressure --}}
ضغط المركز اليوم {{ $ramadanPressure ?? 0 }} / 100 — {{ $ramadanLabel ?? 'مستقر' }}
{{-- ✅ قول كمان: ضغط يومي/أسبوعي/شهري --}}
يومي: {{ $ramadanPressureDaily ?? ($ramadanPressure ?? 0) }}/100 أسبوعي: {{ $ramadanPressureWeekly ?? 0 }}/100 شهري: {{ $ramadanPressureMonthly ?? 0 }}/100 البروجريس: {{ $ramadanProgress ?? 0 }}%
{{-- ✅ Progress bar --}}
ملاحظة: البروجريس محسوب من ضغط الأسبوع + الشهر (كل ما الضغط أعلى يقل البروجريس).
{{-- Meta strip --}}
المشاركون: {{ $ramadanParticipantsTotal ?? 0 }} تحديات مربوطة: {{ $ramadanLinkedCompetitionsTotal ?? 0 }} مشاركون بالتحديات: {{ $ramadanParticipantsInComps ?? 0 }} تقارير اليوم: {{ $ramadanReportsToday ?? 0 }}
{{-- Breakdown --}}
{{-- ✅ Challenges card (keeps backend enum vars unchanged) --}}
تحديات (مسودات)
مربوطة: {{ $ramadanLinkedCompetitionsTotal ?? 0 }}
{{ $ramadanPendingCompetitions ?? 0 }} @if (($ramadanNewCompetitions ?? 0) > 0) (+{{ $ramadanNewCompetitions }}) @endif
نشطة: {{ $ramadanActiveCompetitions ?? 0 }} {{-- ✅ اختياري: منتهية --}} منتهية: {{ $ramadanEndedCompetitions ?? 0 }}
{{-- Financial --}}
هدايا/ميزانية (Pending)
{{ $ramadanPendingFinancial ?? 0 }}
الإجمالي: {{ $ramadanFinancialTotal ?? 0 }}
{{-- Schedule --}}
الجدول/الساعات (Pending)
{{ $ramadanPendingSchedule ?? 0 }}
اليوم: {{ $ramadanScheduledToday ?? 0 }}
القادمة: {{ $ramadanNextSlot->slot_label ?? '—' }} @if (!empty($ramadanNextSlot)) ({{ $ramadanNextSlot->scheduled_date ?? '' }} {{ $ramadanNextSlot->scheduled_time ?? '' }}) @endif
{{-- Archive + Alerts --}}
توثيق/أرشيف (Pending)
{{ $ramadanPendingArchive ?? 0 }}
تنبيهات عاجلة: {{ $ramadanUrgentTotal ?? 0 }}
{{-- Activities quick links --}}
التحديات والمسابقات
متوقفة مؤقتًا
تم تعطيل فتح المسابقات من الصفحة حاليًا بعد انتهاء الموسم.
مربوطة سابقًا: {{ $ramadanLinkedCompetitionsTotal ?? 0 }} • منتهية: {{ $ramadanEndedCompetitions ?? 0 }}
مواعيد الأنشطة (اليوم)
متابعة اليوم
القادمة: {{ $ramadanNextSlot->slot_label ?? '—' }}
{{ $ramadanScheduledToday ?? 0 }}
هدايا/ميزانية
إدارة المالية
Pending: {{ $ramadanPendingFinancial ?? 0 }}
{{ $ramadanFinancialTotal ?? 0 }}
سجل/تنبيهات المركز
دفتر الأنشطة
تقارير اليوم: {{ $ramadanReportsToday ?? 0 }}
{{ $ramadanLogWeek ?? 0 }}
{{-- AI Activities Tip --}} @if (!empty($ramadanTopAiTip))
توصية تشغيلية ذكية — {{ $ramadanTopAiTip['score'] ?? '' }}
{{ $ramadanTopAiTip['title'] ?? '—' }}
{{ $ramadanTopAiTip['body'] ?? '' }}
@endif
ملاحظة: مؤشر “ضغط المركز” تقديري مبني على (تنبيهات + تحديات مسودات + مالية + جدول ساعات + أرشيف + مشاركين + تقارير اليوم). آخر تحديث عند تحميل الصفحة.
{{-- بطاقة رقم التعتير --}} @if (isset($taateer) && $taateer) @php $issuedAt = \Carbon\Carbon::parse($taateer->issued_at)->locale('ar'); $expiresAt = \Carbon\Carbon::parse($taateer->expires_at)->locale('ar'); @endphp

رقم التعتير الخاص بك

مفعل حالياً

هذا الرقم هو مفتاح دخولك الرسمي للنظام ووسيلة التحقق من عضويتك في جيش الوفاء الذهبي. الرجاء الحفاظ عليه وعدم مشاركته مع أي شخص.

رقم تعتيرك
{{ $taateer->code }}
تاريخ إنشاء المفتاح
{{ $issuedAt->isoFormat('D MMMM YYYY – h:mm A') }}
تاريخ انتهاء الصلاحية
{{ $expiresAt->isoFormat('D MMMM YYYY – h:mm A') }}
عند انتهاء الصلاحية لن تتمكن من الدخول حتى يتم إصدار رقم جديد من قبل الصقر.
@else
🚨 لا يوجد رقم تعتير فعّال لحسابك حالياً. الرجاء التواصل مع مدير نظام التعتير — الصقر للتحقق من حسابك.
@endif {{-- رسائل الإدارة (AJAX) --}}
📣 رسائل الإدارة
{{-- Panel: MEMBERS --}} {{-- Panel: REQUESTS --}} {{-- Panel: PRESENCE --}} {{-- Panel: ANALYTICS --}} {{-- Panel: PROACTIVE --}} {{-- Panel: TIPS --}}
{{-- 🌟 Dock نقاطك - ثابت أسفل الشاشة --}}
نقاطك: {{ number_format(auth()->user()->total_points) }}
{{-- Helpers --}}
@endsection @push('scripts') {{-- ApexCharts --}} {{-- Encrypted Access Token --}} {{-- Enterprise Tabs + Toasts + Global Refresh --}} {{-- رسائل الإدارة (AJAX) --}} {{-- المتواجدون الآن + من تواجدوا اليوم (AJAX) --}} @if (auth()->check()) @endif {{-- ApexCharts Lazy Render (Analytics + Tips) --}} @endpush