Add NAS file manager integration and all pending platform changes

- Installed p7h/nas-file-manager package via private VCS repo
- Published config/nas-file-manager.php with super_admin middleware restriction
- Added NAS env vars to .env.example
- Created admin/nas-storage page with connection info panel and file browser widget
- Added NAS Storage link to admin sidebar (super_admin only)
- Added SuperAdminController@nasStorage method and admin.nas-storage route
- Includes all accumulated branch changes: profile wall, 2FA, audit logs,
  settings panel, country/phone/timezone components, posts, slideshow,
  playlist shares, video downloads/shares, comment likes, notifications,
  social links, and more

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
This commit is contained in:
ghassanandClaude Sonnet 4.6 committed 2026-05-13 13:24:32 +03:00
1 parent d44490dfe0
commit 0b2e95ea65
161 files changed
+27496 -7250

No files matched your search

@@ -0,0 +1,38 @@
<?php
namespace App\Notifications;
use App\Models\Comment;
use App\Models\User;
use App\Models\Video;
use Illuminate\Notifications\Notification;
use Illuminate\Support\Str;
class NewCommentLikeNotification extends Notification
{
public function __construct(
public Video $video,
public Comment $comment,
public User $liker
) {}
public function via(object $notifiable): array
{
return ['database'];
}
public function toArray(object $notifiable): array
{
return [
'type' => 'comment_like',
'video_id' => $this->video->id,
'video_route_key' => $this->video->getRouteKey(),
'video_title' => $this->video->title,
'video_thumbnail' => $this->video->thumbnail,
'actor_id' => $this->liker->id,
'actor_name' => $this->liker->name,
'actor_avatar' => $this->liker->avatar_url,
'comment_preview' => Str::limit($this->comment->body, 80),
];
}
}
@@ -0,0 +1,38 @@
<?php
namespace App\Notifications;
use App\Models\Comment;
use App\Models\User;
use App\Models\Video;
use Illuminate\Notifications\Notification;
use Illuminate\Support\Str;
class NewCommentNotification extends Notification
{
public function __construct(
public Video $video,
public Comment $comment,
public User $commenter
) {}
public function via(object $notifiable): array
{
return ['database'];
}
public function toArray(object $notifiable): array
{
return [
'type' => 'new_comment',
'video_id' => $this->video->id,
'video_route_key' => $this->video->getRouteKey(),
'video_title' => $this->video->title,
'video_thumbnail' => $this->video->thumbnail,
'actor_id' => $this->commenter->id,
'actor_name' => $this->commenter->name,
'actor_avatar' => $this->commenter->avatar_url,
'comment_preview' => Str::limit($this->comment->body, 80),
];
}
}
@@ -0,0 +1,38 @@
<?php
namespace App\Notifications;
use App\Models\Comment;
use App\Models\User;
use App\Models\Video;
use Illuminate\Notifications\Notification;
use Illuminate\Support\Str;
class NewReplyNotification extends Notification
{
public function __construct(
public Video $video,
public Comment $reply,
public User $replier
) {}
public function via(object $notifiable): array
{
return ['database'];
}
public function toArray(object $notifiable): array
{
return [
'type' => 'new_reply',
'video_id' => $this->video->id,
'video_route_key' => $this->video->getRouteKey(),
'video_title' => $this->video->title,
'video_thumbnail' => $this->video->thumbnail,
'actor_id' => $this->replier->id,
'actor_name' => $this->replier->name,
'actor_avatar' => $this->replier->avatar_url,
'comment_preview' => Str::limit($this->reply->body, 80),
];
}
}
+33
View File
@@ -0,0 +1,33 @@
<?php
namespace App\Notifications;
use App\Models\Video;
use App\Models\User;
use Illuminate\Notifications\Notification;
class NewVideoUploaded extends Notification
{
public function __construct(public Video $video, public User $uploader)
{
}
public function via(object $notifiable): array
{
return ['database'];
}
public function toArray(object $notifiable): array
{
return [
'type' => 'new_video',
'video_id' => $this->video->id,
'video_route_key' => $this->video->getRouteKey(),
'video_title' => $this->video->title,
'video_thumbnail' => $this->video->thumbnail,
'uploader_id' => $this->uploader->id,
'uploader_name' => $this->uploader->name,
'uploader_avatar' => $this->uploader->avatar_url,
];
}
}
+39
View File
@@ -0,0 +1,39 @@
<?php
namespace App\Notifications;
use Illuminate\Auth\Notifications\VerifyEmail as BaseVerifyEmail;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\URL;
class VerifyEmail extends BaseVerifyEmail
{
use Queueable;
public function toMail($notifiable): MailMessage
{
$url = $this->verificationUrl($notifiable);
return (new MailMessage)
->subject('Verify your email address — ' . config('app.name'))
->view('emails.verify-email', [
'url' => $url,
'userName' => $notifiable->name,
]);
}
protected function verificationUrl($notifiable): string
{
return URL::temporarySignedRoute(
'verification.verify',
Carbon::now()->addMinutes(Config::get('auth.verification.expire', 60)),
[
'id' => $notifiable->getKey(),
'hash' => sha1($notifiable->getEmailForVerification()),
]
);
}
}