Files
animexe/resources/views/admin/analytics/user-detail.blade.php
T
2026-07-14 00:01:48 +03:00

127 lines
6.2 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
@extends('admin.layouts.app')
@section('title', 'Kullanıcı Aktivitesi — ' . $user->name)
@section('content')
<div class="d-flex align-items-center gap-3 mb-4">
<a href="{{ route('admin.analytics.users', ['tab'=>'activity']) }}" class="btn btn-sm btn-outline-secondary"><i class="bi bi-arrow-left"></i></a>
<div class="d-flex align-items-center gap-3">
@if($user->avatar)
<img src="{{ $user->avatar }}" class="rounded-circle" width="48" height="48" style="object-fit:cover">
@else
<div class="rounded-circle bg-info d-flex align-items-center justify-content-center text-dark fw-bold" style="width:48px;height:48px;font-size:18px">{{ strtoupper(substr($user->name,0,1)) }}</div>
@endif
<div>
<h4 class="mb-0">{{ $user->name }} <span class="badge {{ $user->role==='admin'?'bg-danger':($user->role==='moderator'?'bg-warning text-dark':'bg-secondary') }}">{{ $user->role }}</span></h4>
<small class="text-muted">{{ $user->email }} · Üyelik: {{ $user->created_at->format('d.m.Y') }}</small>
</div>
</div>
<div class="ms-auto d-flex gap-2">
<form class="d-flex gap-2">
<input type="hidden" name="period" value="{{ $period }}">
<select name="period" class="form-select form-select-sm" onchange="this.form.submit()">
@foreach([7=>'Son 7 Gün',14=>'Son 14 Gün',30=>'Son 30 Gün',90=>'Son 90 Gün'] as $d=>$l)
<option value="{{ $d }}" {{ $period==$d?'selected':'' }}>{{ $l }}</option>
@endforeach
</select>
</form>
<a href="{{ route('admin.users.show', $user) }}" class="btn btn-sm btn-outline-info">
<i class="bi bi-person me-1"></i>Profili Gör
</a>
</div>
</div>
<div class="row g-4">
{{-- Aksiyon Özeti --}}
<div class="col-md-4">
<div class="card">
<div class="card-header"><strong>Aksiyon Özeti</strong></div>
<div class="card-body">
@forelse($actBreakdown as $ab)
@php $labels = \App\Models\UserActivityLog::$actionLabels; @endphp
<div class="d-flex justify-content-between mb-2">
<span style="font-size:12px">{{ $labels[$ab->action] ?? $ab->action }}</span>
<span class="badge bg-info text-dark">{{ $ab->cnt }}</span>
</div>
@empty
<p class="text-muted text-center small">Bu dönemde aktivite yok</p>
@endforelse
</div>
</div>
{{-- Son izleme --}}
<div class="card mt-3">
<div class="card-header"><strong><i class="bi bi-play-circle me-1"></i>Son İzlemeler</strong></div>
<div class="list-group list-group-flush">
@forelse($watchEvents as $w)
<div class="list-group-item py-2 px-3">
<div class="fw-semibold" style="font-size:12px">{{ $w->anime_title }}</div>
<div class="d-flex justify-content-between">
<small class="text-muted">Bölüm {{ $w->episode_number }}</small>
<small class="text-{{ $w->percent_complete >= 80 ? 'success' : 'warning' }}">%{{ $w->percent_complete }}</small>
</div>
<div style="height:3px;background:#333;border-radius:2px;margin-top:4px;overflow:hidden">
<div style="width:{{ $w->percent_complete }}%;height:100%;background:var(--bs-info)"></div>
</div>
<small class="text-muted" style="font-size:10px">{{ \Carbon\Carbon::parse($w->created_at)->diffForHumans() }}</small>
</div>
@empty
<div class="list-group-item text-muted small text-center py-3">İzleme verisi yok</div>
@endforelse
</div>
</div>
</div>
{{-- Aktivite Log Tablosu --}}
<div class="col-md-8">
<div class="card">
<div class="card-header"><strong>Detaylı Aktivite Günlüğü</strong></div>
<div class="table-responsive">
<table class="table table-sm table-hover mb-0">
<thead class="table-dark">
<tr><th>Aksiyon</th><th>Konu</th><th>IP</th><th>Ülke</th><th>Cihaz</th><th>Zaman</th></tr>
</thead>
<tbody>
@forelse($logs as $log)
@php $labels = \App\Models\UserActivityLog::$actionLabels; @endphp
<tr>
<td><span class="badge bg-info text-dark" style="font-size:10px">{{ $labels[$log->action] ?? $log->action }}</span></td>
<td><small class="text-muted">{{ $log->subject_type ? class_basename($log->subject_type).'#'.$log->subject_id : '—' }}</small></td>
<td><code style="font-size:10px">{{ $log->ip }}</code></td>
<td><small class="text-muted">{{ $log->country ?: '—' }}</small></td>
<td><small class="text-muted text-capitalize">{{ $log->device ?: '—' }}</small></td>
<td><small class="text-muted">{{ \Carbon\Carbon::parse($log->created_at)->format('d.m.Y H:i') }}</small></td>
</tr>
@empty
<tr><td colspan="6" class="text-center text-muted py-4">Aktivite bulunamadı</td></tr>
@endforelse
</tbody>
</table>
</div>
<div class="card-footer">{{ $logs->links() }}</div>
</div>
{{-- Son Sayfa Görüntülemeleri --}}
<div class="card mt-3">
<div class="card-header"><strong><i class="bi bi-eye me-1"></i>Son Sayfa Görüntülemeleri</strong></div>
<div class="table-responsive">
<table class="table table-sm mb-0">
<thead class="table-dark"><tr><th>URL</th><th>Sayfa Tipi</th><th>Süre</th><th>Zaman</th></tr></thead>
<tbody>
@forelse($pageviews as $pv)
<tr>
<td><small class="text-muted" style="max-width:200px;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap" title="{{ $pv->url }}">{{ $pv->url }}</small></td>
<td><span class="badge bg-secondary" style="font-size:9px">{{ $pv->page_type }}</span></td>
<td><small class="text-muted">{{ isset($pv->time_on_page) && $pv->time_on_page > 0 ? $pv->time_on_page.'s' : '—' }}</small></td>
<td><small class="text-muted">{{ \Carbon\Carbon::parse($pv->created_at)->format('d.m H:i') }}</small></td>
</tr>
@empty
<tr><td colspan="4" class="text-center text-muted py-3">Sayfa görüntüleme yok</td></tr>
@endforelse
</tbody>
</table>
</div>
</div>
</div>
</div>
@endsection