Explorar el Código

Add 完善站内通知 & 用户工单相关通知(需对管理员通知调整)

兔姬桑 hace 4 años
padre
commit
44cb5ad098

+ 12 - 3
app/Http/Controllers/Admin/TicketController.php

@@ -7,6 +7,7 @@ use App\Http\Requests\Admin\TicketRequest;
 use App\Models\Ticket;
 use App\Models\User;
 use App\Notifications\TicketClosed;
+use App\Notifications\TicketCreated;
 use App\Notifications\TicketReplied;
 use Auth;
 use Illuminate\Http\Request;
@@ -40,7 +41,11 @@ class TicketController extends Controller
             return Response::json(['status' => 'fail', 'message' => '不能对自己发起工单']);
         }
 
-        if (Ticket::create(['user_id' => $user->id, 'admin_id' => auth()->id(), 'title' => $data['title'], 'content' => $data['content']])) {
+        if ($ticket = Ticket::create(['user_id' => $user->id, 'admin_id' => auth()->id(), 'title' => $data['title'], 'content' => clean($data['content'])])) {
+            if (in_array('mail', sysConfig('ticket_created_notification'), true)) {
+                $user->notify(new TicketCreated($data['title'], $data['content'], route('replyTicket', $ticket), true));
+            }
+
             return Response::json(['status' => 'success', 'message' => '工单创建成功']);
         }
 
@@ -66,7 +71,9 @@ class TicketController extends Controller
             $ticket->update(['status' => 1]);
 
             // 通知用户
-            $ticket->user->notify(new TicketReplied($ticket->title, $content, route('replyTicket', $ticket)));
+            if (in_array('mail', sysConfig('ticket_replied_notification'), true)) {
+                $ticket->user->notify(new TicketReplied($ticket->title, $content, route('replyTicket', $ticket), true));
+            }
 
             return Response::json(['status' => 'success', 'message' => '回复成功']);
         }
@@ -81,7 +88,9 @@ class TicketController extends Controller
             return Response::json(['status' => 'fail', 'message' => '关闭失败']);
         }
         // 通知用户
-        $ticket->user->notify(new TicketClosed($ticket->id, $ticket->title, route('replyTicket', $ticket), \request('reason')));
+        if (in_array('mail', sysConfig('ticket_closed_notification'), true)) {
+            $ticket->user->notify(new TicketClosed($ticket->id, $ticket->title, route('replyTicket', $ticket), \request('reason'), true));
+        }
 
         return Response::json(['status' => 'success', 'message' => '关闭成功']);
     }

+ 1 - 2
app/Http/Controllers/UserController.php

@@ -274,8 +274,7 @@ class UserController extends Controller
     {
         $user = auth()->user();
         $title = $request->input('title');
-        $content = clean($request->input('content'));
-        $content = str_replace(['atob', 'eval'], '', $content);
+        $content = substr(str_replace(['atob', 'eval'], '', clean($request->input('content'))), 0, 300);
 
         if (empty($title) || empty($content)) {
             return Response::json([

+ 1 - 1
app/Notifications/AccountExpire.php

@@ -31,7 +31,7 @@ class AccountExpire extends Notification implements ShouldQueue
             ->action(trans('notification.view_web'), url('/'));
     }
 
-    public function toArray($notifiable)
+    public function toDataBase($notifiable)
     {
         return [
             'days' => $this->days,

+ 0 - 8
app/Notifications/Custom.php

@@ -33,14 +33,6 @@ class Custom extends Notification implements ShouldQueue
             ->markdown('mail.custom', ['content' => $this->content]);
     }
 
-    public function toArray($notifiable)
-    {
-        return [
-            'title'   => $this->title,
-            'content' => $this->content,
-        ];
-    }
-
     public function toCustom($notifiable)
     {
         return [

+ 3 - 3
app/Notifications/DataExhaust.php

@@ -27,15 +27,15 @@ class DataExhaust extends Notification implements ShouldQueue
     {
         return (new MailMessage)
             ->subject(trans('notification.traffic_warning'))
-            ->line(trans('notification.traffic_remain', ['num' => $this->percent]))
+            ->line(trans('notification.traffic_remain', ['percent' => $this->percent]))
             ->line(trans('notification.traffic_tips'))
             ->action(trans('notification.view_web'), url('/'));
     }
 
-    public function toArray($notifiable)
+    public function toDataBase($notifiable)
     {
         return [
-            //
+            'percent' => $this->percent,
         ];
     }
 }

+ 0 - 7
app/Notifications/PasswordReset.php

@@ -31,11 +31,4 @@ class PasswordReset extends Notification
             ->line(__('You are receiving this email because we received a password reset request for your account.'))
             ->line(__('If you did not request a password reset, no further action is required.'));
     }
-
-    public function toArray($notifiable)
-    {
-        return [
-            //
-        ];
-    }
 }

+ 7 - 4
app/Notifications/TicketClosed.php

@@ -14,18 +14,20 @@ class TicketClosed extends Notification implements ShouldQueue
     private $title;
     private $url;
     private $reason;
+    private $is_user;
 
-    public function __construct($id, $title, $url, $reason)
+    public function __construct($id, $title, $url, $reason, $is_user = null)
     {
         $this->id = $id;
         $this->title = $title;
         $this->url = $url;
         $this->reason = $reason;
+        $this->is_user = $is_user;
     }
 
     public function via($notifiable)
     {
-        return sysConfig('ticket_closed_notification');
+        return $this->is_user ? ['mail'] : sysConfig('ticket_closed_notification');
     }
 
     public function toMail($notifiable)
@@ -37,10 +39,11 @@ class TicketClosed extends Notification implements ShouldQueue
             ->line(__('If your problem has not been solved, Feel free to open other one.'));
     }
 
-    public function toArray($notifiable)
+    public function toCustom($notifiable)
     {
         return [
-
+            'title'   => trans('close_ticket', ['id' => $this->id, 'title' => $this->title]),
+            'content' => $this->reason,
         ];
     }
 }

+ 7 - 4
app/Notifications/TicketCreated.php

@@ -14,17 +14,19 @@ class TicketCreated extends Notification implements ShouldQueue
     private $title;
     private $content;
     private $url;
+    private $is_user;
 
-    public function __construct($title, $content, $url)
+    public function __construct($title, $content, $url, $is_user = null)
     {
         $this->title = $title;
         $this->content = $content;
         $this->url = $url;
+        $this->is_user = $is_user;
     }
 
     public function via($notifiable)
     {
-        return sysConfig('ticket_created_notification');
+        return $this->is_user ? ['mail'] : sysConfig('ticket_created_notification');
     }
 
     public function toMail($notifiable)
@@ -36,10 +38,11 @@ class TicketCreated extends Notification implements ShouldQueue
             ->action(trans('notification.view_ticket'), $this->url);
     }
 
-    public function toArray($notifiable)
+    public function toCustom($notifiable)
     {
         return [
-            //
+            'title'   => trans('notification.new_ticket', ['title' => $this->title]),
+            'content' => trans('notification.ticket_content').strip_tags($this->content),
         ];
     }
 }

+ 8 - 5
app/Notifications/TicketReplied.php

@@ -14,17 +14,19 @@ class TicketReplied extends Notification implements ShouldQueue
     private $title;
     private $content;
     private $url;
+    private $is_user;
 
-    public function __construct($title, $content, $url)
+    public function __construct($title, $content, $url, $is_user = null)
     {
         $this->title = $title;
         $this->content = $content;
         $this->url = $url;
+        $this->is_user = $is_user;
     }
 
     public function via($notifiable)
     {
-        return sysConfig('ticket_replied_notification');
+        return $this->is_user ? ['mail'] : sysConfig('ticket_replied_notification');
     }
 
     public function toMail($notifiable)
@@ -32,14 +34,15 @@ class TicketReplied extends Notification implements ShouldQueue
         return (new MailMessage)
             ->subject(trans('notification.reply_ticket', ['title' => $this->title]))
             ->line(trans('notification.ticket_content'))
-            ->line($this->content)
+            ->line(strip_tags($this->content))
             ->action(trans('notification.view_ticket'), $this->url);
     }
 
-    public function toArray($notifiable)
+    public function toCustom($notifiable)
     {
         return [
-            //
+            'title'   => trans('notification.reply_ticket', ['title' => $this->title]),
+            'content' => trans('notification.ticket_content').strip_tags($this->content),
         ];
     }
 }

+ 1 - 1
resources/lang/en/notification.php

@@ -20,7 +20,7 @@ return [
     'node_offline_content'    => 'Following Nodes abnormal: return heartbeats information are abnormal, Please pay attention.',
     'block_report'            => 'Blocked Report: ',
     'traffic_warning'         => 'Data Traffic Waring: ',
-    'traffic_remain'          => 'Data Traffic Consumption: :num%',
+    'traffic_remain'          => 'Data Traffic Consumption: :percent%',
     'traffic_tips'            => 'Please pay attention on the service reset day. You may also cloud consider reset your data before the reset day.',
     'verification_account'    => 'Account Verification',
     'verification'            => 'Your verification code: ',

+ 1 - 1
resources/lang/zh-CN/notification.php

@@ -20,7 +20,7 @@ return [
     'node_offline_content'    => '以下节点存在异常:心跳异常,可能离线了:',
     'block_report'            => '阻断日志:',
     'traffic_warning'         => '流量提醒',
-    'traffic_remain'          => '流量已使用::num%,请保持关注。',
+    'traffic_remain'          => '流量已使用::percent%,请保持关注。',
     'traffic_tips'            => '请注意套餐流量重置日,合理分配流量使用或在流量耗尽后,付费重置套餐流量',
     'verification_account'    => '账号验证',
     'verification'            => '您的验证码:',

+ 0 - 3
resources/views/admin/config/system.blade.php

@@ -1003,7 +1003,6 @@
                                                 <select id="ticket_closed_notification" data-plugin="selectpicker" data-style="btn-outline btn-primary"
                                                         onchange="updateFromOther('select','ticket_closed_notification')" multiple>
                                                     <option value="mail">邮箱</option>
-                                                    <option value="database">站内通知</option>
                                                     <option value="telegram" disabled>Telegram</option>
                                                     <option value="beary" disabled>BearyChat</option>
                                                     <option value="bark">Bark</option>
@@ -1020,7 +1019,6 @@
                                                 <select id="ticket_created_notification" data-plugin="selectpicker" data-style="btn-outline btn-primary"
                                                         onchange="updateFromOther('select','ticket_created_notification')" multiple>
                                                     <option value="mail">邮箱</option>
-                                                    <option value="database">站内通知</option>
                                                     <option value="telegram" disabled>Telegram</option>
                                                     <option value="beary" disabled>BearyChat</option>
                                                     <option value="bark">Bark</option>
@@ -1037,7 +1035,6 @@
                                                 <select id="ticket_replied_notification" data-plugin="selectpicker" data-style="btn-outline btn-primary"
                                                         onchange="updateFromOther('select','ticket_replied_notification')" multiple>
                                                     <option value="mail">邮箱</option>
-                                                    <option value="database">站内通知</option>
                                                     <option value="telegram" disabled>Telegram</option>
                                                     <option value="beary" disabled>BearyChat</option>
                                                     <option value="bark">Bark</option>

+ 1 - 1
resources/views/user/components/notifications/accountExpire.blade.php

@@ -1,7 +1,7 @@
 <a class="list-group-item dropdown-item" href="javascript:void(0)" role="menuitem">
     <div class="media">
         <div class="pr-10">
-            <i class="icon wb-order bg-primary-600 white icon-circle" aria-hidden="true"></i>
+            <i class="icon wb-calendar bg-cyan-600 white icon-circle" aria-hidden="true"></i>
         </div>
         <div class="media-body">
             <h6 class="media-heading text-break">

+ 13 - 0
resources/views/user/components/notifications/dataExhaust.blade.php

@@ -0,0 +1,13 @@
+<a class="list-group-item dropdown-item" href="javascript:void(0)" role="menuitem">
+    <div class="media">
+        <div class="pr-10">
+            <i class="icon wb-pluse bg-red-600 white icon-circle" aria-hidden="true"></i>
+        </div>
+        <div class="media-body">
+            <h6 class="media-heading text-break">
+                {{trans('notification.traffic_remain', ['percent' => $notification->data['percent']])}}
+            </h6>
+            <time class="media-meta" datetime="{{$notification->created_at}}">{{$notification->created_at->diffForHumans()}}</time>
+        </div>
+    </div>
+</a>