示例#1
0
 public function parse(GmailEvent $event)
 {
     if (!$event->isHandled()) {
         MSupportTicket::unguard();
         MSupportReply::unguard();
         $info = $event->getFrom();
         $now = Carbon::now();
         if ($email = $info['email'] ?? null) {
             $user = User::where('email', '=', $email)->orWhere('contact_email', '=', $email)->first();
             if (empty($user) || empty($user->user_id)) {
                 $signup = new UserSignupEvent(array_merge($info, ['verified' => 'true']));
                 $this->dispatcher->fire(UserSignupEvent::USER_SIGNUP_BEGIN, $signup);
                 $user = $signup->getUser();
             }
             if (preg_match('/^T(\\d+)$/', $event->getRef(), $matches)) {
                 $ticket = MSupportTicket::find($matches[1]);
             }
             if (empty($ticket) || empty($ticket->ticket_id)) {
                 $ticket = MSupportTicket::where('user_id', '=', $user->user_id)->where('title', '=', $event->getSubject())->first();
                 if (empty($ticket) || empty($ticket->support_ticket_id)) {
                     $ticket = MSupportTicket::create(['user_id' => $user->user_id, 'created_at' => $now, 'updated_at' => $now, 'title' => $event->getSubject(), 'category' => 'General', 'state' => 'open']);
                 }
             }
             /** @var MSupportReply $reply */
             $reply = MSupportReply::create(['support_ticket_id' => $ticket->support_ticket_id, 'user_id' => $user->user_id, 'created_at' => $now, 'reply_safe' => $event->getText()]);
             $event->setHandled($reply->support_reply_id > 0);
         }
     }
 }
示例#2
0
 public function addBack()
 {
     /** @var MSupportTicket $ticket */
     foreach (MSupportTicket::where('state', '=', 'deferred')->where('addback_at', '<', Carbon::now())->get() as $ticket) {
         $ticket->state = 'open';
         $ticket->addback_at = null;
         $ticket->save();
     }
 }
示例#3
0
 public function index(string $_mode, array $_models, RouteEx $_route, array $_parents, string $alias)
 {
     $return = $this->postHandler->index($_mode, $_models, $_route, $_parents, $alias);
     $model = $_models[0];
     if ($model instanceof MSupportTicket) {
         $eventName = 'admin.support.' . 'status';
         $ticketData = $model->attributesToArray();
     } elseif ($model instanceof MSupportReply) {
         $eventName = 'admin.support.' . 'reply';
         /** @var MSupportTicket $ticket */
         if ($ticket = MSupportTicket::find($model->support_ticket_id)) {
             $ticketData = array_merge($model->attributesToArray(), $ticket->attributesToArray());
         }
     }
     if (!empty($eventName) && !empty($ticketData)) {
         $this->dispatcher->fire($eventName, new SupportEvent($model->user_id, $ticketData));
     }
     return $return;
 }
示例#4
0
 public function adminDashboardPanel(ImportEvent $event)
 {
     $count = MSupportTicket::where('state', '=', 'open')->count();
     $panels = [['type' => 'site', 'title' => 'Support', 'stats' => "{$count} open", 'icon' => 'fa-life-bouy', 'priority' => 3, 'href' => '/admin/support/tickets/open', 'cta' => 'View tickets..']];
     $event->addContent($panels);
 }