Video merge feature, default avatar, video-redirects table, misc UI tweaks

Bundled pre-existing changes on the branch:
- Video merge: controller, service, admin merge modal, and a repair
  console command; new video_redirects table (with source_folder)
  so merged/moved videos keep resolving under their old keys.
- Default avatar SVG for users without a profile picture.
- Assorted view tweaks across profile, video actions/comments/insights,
  admin layout, video-details, and the app layout.
- Small touch-ups in SuperAdminController, User model, NasSyncService.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
This commit is contained in:
ghassanandClaude Opus 4.7 committed 2026-07-31 02:42:43 +03:00
1 parent ba8ab11ce4
commit 8d27520bdb
17 files changed
+736 -13

No files matched your search

@@ -24,8 +24,8 @@
if (!function_exists('ytcAvatar')) {
function ytcAvatar($user) {
if (!$user) return 'https://ui-avatars.com/api/?name=User&background=333&color=fff';
return $user->avatar_url ?? ('https://ui-avatars.com/api/?name='.urlencode($user->name ?? 'User').'&background=333&color=fff');
if (!$user) return asset('images/default-avatar.svg');
return $user->avatar_url ?? asset('images/default-avatar.svg');
}
}
if (!function_exists('ytcTime')) {
@@ -707,8 +707,8 @@ function esc(s) {
}
function fmt(s) { return s ?? ''; }
function avatarUrl(user) {
if (!user) return 'https://ui-avatars.com/api/?name=User&background=333&color=fff';
return user.avatar_url || ('https://ui-avatars.com/api/?name=' + encodeURIComponent(user.name || 'User') + '&background=333&color=fff');
if (!user) return '{{ asset('images/default-avatar.svg') }}';
return user.avatar_url || '{{ asset('images/default-avatar.svg') }}';
}
// ── Toast (use global if available, else local) ───────