Server IP : 66.29.132.124 / Your IP : 18.119.253.198 Web Server : LiteSpeed System : Linux business141.web-hosting.com 4.18.0-553.lve.el8.x86_64 #1 SMP Mon May 27 15:27:34 UTC 2024 x86_64 User : wavevlvu ( 1524) PHP Version : 7.4.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/wavevlvu/book24.ng/vendor/munafio/chatify/src/ |
Upload File : |
<?php namespace Chatify; use App\Models\ChMessage as Message; use App\Models\ChFavorite as Favorite; use Pusher\Pusher; use Illuminate\Support\Facades\Auth; use Exception; use Illuminate\Support\Facades\File; class ChatifyMessenger { public $pusher; /** * Get max file's upload size in MB. * * @return int */ public function getMaxUploadSize(){ return config('chatify.attachments.max_upload_size') * 1048576; } public function __construct() { $this->pusher = new Pusher( config('chatify.pusher.key'), config('chatify.pusher.secret'), config('chatify.pusher.app_id'), config('chatify.pusher.options'), ); } /** * This method returns the allowed image extensions * to attach with the message. * * @return array */ public function getAllowedImages(){ return config('chatify.attachments.allowed_images'); } /** * This method returns the allowed file extensions * to attach with the message. * * @return array */ public function getAllowedFiles(){ return config('chatify.attachments.allowed_files'); } /** * Returns an array contains messenger's colors * * @return array */ public function getMessengerColors(){ return config('chatify.colors'); } /** * Trigger an event using Pusher * * @param string $channel * @param string $event * @param array $data * @return void */ public function push($channel, $event, $data) { return $this->pusher->trigger($channel, $event, $data); } /** * Authintication for pusher * * @param string $channelName * @param string $socket_id * @param array $data * @return void */ public function pusherAuth($channelName, $socket_id, $data = null){ return $this->pusher->socket_auth($channelName, $socket_id, $data); } /** * Fetch message by id and return the message card * view as a response. * * @param int $id * @return array */ public function fetchMessage($id){ $attachment = null; $attachment_type = null; $attachment_title = null; $msg = Message::where('id',$id)->first(); if(isset($msg->attachment)){ $attachmentOBJ = json_decode($msg->attachment); $attachment = $attachmentOBJ->new_name; $attachment_title = htmlentities(trim($attachmentOBJ->old_name), ENT_QUOTES, 'UTF-8'); $ext = pathinfo($attachment, PATHINFO_EXTENSION); $attachment_type = in_array($ext,$this->getAllowedImages()) ? 'image' : 'file'; } return [ 'id' => $msg->id, 'from_id' => $msg->from_id, 'to_id' => $msg->to_id, 'message' => $msg->body, 'attachment' => [$attachment, $attachment_title, $attachment_type], 'time' => $msg->created_at->diffForHumans(), 'fullTime' => $msg->created_at, 'viewType' => ($msg->from_id == Auth::user()->id) ? 'sender' : 'default', 'seen' => $msg->seen, ]; } /** * Return a message card with the given data. * * @param array $data * @param string $viewType * @return void */ public function messageCard($data, $viewType = null){ $data['viewType'] = ($viewType) ? $viewType : $data['viewType']; return view('Chatify::layouts.messageCard',$data)->render(); } /** * Default fetch messages query between a Sender and Receiver. * * @param int $user_id * @return Collection */ public function fetchMessagesQuery($user_id){ return Message::where('from_id',Auth::user()->id)->where('to_id',$user_id) ->orWhere('from_id',$user_id)->where('to_id',Auth::user()->id); } /** * create a new message to database * * @param array $data * @return void */ public function newMessage($data){ $message = new Message(); $message->id = $data['id']; $message->type = $data['type']; $message->from_id = $data['from_id']; $message->to_id = $data['to_id']; $message->body = $data['body']; $message->attachment = $data['attachment']; $message->save(); } /** * Make messages between the sender [Auth user] and * the receiver [User id] as seen. * * @param int $user_id * @return bool */ public function makeSeen($user_id){ Message::Where('from_id',$user_id) ->where('to_id',Auth::user()->id) ->where('seen',0) ->update(['seen' => 1]); return 1; } /** * Get last message for a specific user * * @param int $user_id * @return Collection */ public function getLastMessageQuery($user_id){ return $this->fetchMessagesQuery($user_id)->latest()->first(); } /** * Count Unseen messages * * @param int $user_id * @return Collection */ public function countUnseenMessages($user_id){ return Message::where('from_id',$user_id)->where('to_id',Auth::user()->id)->where('seen',0)->count(); } /** * Get user list's item data [Contact Itme] * (e.g. User data, Last message, Unseen Counter...) * * @param int $messenger_id * @param Collection $user * @return void */ public function getContactItem($user){ // get last message $lastMessage = $this->getLastMessageQuery($user->id); // Get Unseen messages counter $unseenCounter = $this->countUnseenMessages($user->id); return view('Chatify::layouts.listItem', [ 'get' => 'users', 'user' => $user, 'lastMessage' => $lastMessage, 'unseenCounter' => $unseenCounter, ])->render(); } /** * Check if a user in the favorite list * * @param int $user_id * @return boolean */ public function inFavorite($user_id){ return Favorite::where('user_id', Auth::user()->id) ->where('favorite_id', $user_id)->count() > 0 ? true : false; } /** * Make user in favorite list * * @param int $user_id * @param int $star * @return boolean */ public function makeInFavorite($user_id, $action){ if ($action > 0) { // Star $star = new Favorite(); $star->id = rand(9,99999999); $star->user_id = Auth::user()->id; $star->favorite_id = $user_id; $star->save(); return $star ? true : false; }else{ // UnStar $star = Favorite::where('user_id',Auth::user()->id)->where('favorite_id',$user_id)->delete(); return $star ? true : false; } } /** * Get shared photos of the conversation * * @param int $user_id * @return array */ public function getSharedPhotos($user_id){ $images = array(); // Default // Get messages $msgs = $this->fetchMessagesQuery($user_id)->orderBy('created_at','DESC'); if($msgs->count() > 0){ foreach ($msgs->get() as $msg) { // If message has attachment if($msg->attachment){ $attachment = json_decode($msg->attachment); // determine the type of the attachment in_array(pathinfo($attachment->new_name, PATHINFO_EXTENSION), $this->getAllowedImages()) ? array_push($images, $attachment->new_name) : ''; } } } return $images; } /** * Delete Conversation * * @param int $user_id * @return boolean */ public function deleteConversation($user_id){ try { foreach ($this->fetchMessagesQuery($user_id)->get() as $msg) { // delete file attached if exist if (isset($msg->attachment)) { $path = storage_path('app/public/'.config('chatify.attachments.folder').'/'.json_decode( $msg->attachment)->new_name); if(File::exists($path)){ File::delete($path); } } // delete from database $msg->delete(); } return 1; }catch(Exception $e) { return 0; } } }