where('key', '_live_activity') ->where('object_id', $ticketId) ->first(); $activities = []; if ($meta) { $activities = maybe_unserialize($meta->value); } foreach ($activities as $index => $activity) { if ((time() - $activity) > 60) { unset($activities[$index]); } } if (!$currentAgentId) { return self::getAgentsInfoFromActivities($activities); } $activities[$currentAgentId] = time(); if ($meta) { $meta->value = maybe_serialize($activities); $meta->save(); } else { Meta::insert([ 'object_type' => 'ticket_meta', 'key' => '_live_activity', 'object_id' => $ticketId, 'value' => maybe_serialize($activities) ]); } return self::getAgentsInfoFromActivities($activities); } public static function getAgentsInfoFromActivities($activities) { if (!$activities) { return []; } return Agent::select(['email', 'first_name', 'last_name']) ->whereIn('id', array_keys($activities)) ->get(); } public static function removeFromActivities($ticketId, $agentId) { $meta = Meta::where('object_type', 'ticket_meta') ->where('key', '_live_activity') ->where('object_id', $ticketId) ->first(); $activities = []; if ($meta) { $activities = maybe_unserialize($meta->value); } if (!$activities) { return false; } unset($activities[$agentId]); foreach ($activities as $index => $activity) { if ((time() - $activity) > 60) { unset($activities[$index]); } } $meta->value = maybe_serialize($activities); $meta->save(); return true; } public static function getSuggestedTickets($agentId, $limit = 5) { $tickets = Ticket::where('agent_id', $agentId) ->where('status', '!=', 'closed') ->applyFilters([ 'waiting_for_reply' => 'yes' ]) ->orderBy('last_customer_response', 'ASC') ->limit($limit) ->with('customer') ->get(); if($tickets->isEmpty() && PermissionManager::currentUserCan('fst_manage_unassigned_tickets')) { $tickets = Ticket::where('status', '!=', 'closed') ->orderBy('id', 'ASC') ->where(function ($q) { $q->whereNull('agent_id'); $q->orWhere('agent_id', '0'); }) ->with('customer') ->limit($limit) ->get(); } return $tickets; } }