File manager - Edit - /var/www/payraty/hris/app/Http/Controllers/vendor/Chatify/MessagesController.php
Back
<?php namespace Chatify\Http\Controllers; namespace App\Http\Controllers\vendor\Chatify; use App\Models\ChMessage; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Routing\Controller; use Illuminate\Support\Facades\Response; use App\Models\ChMessage as Message; use App\Models\ChFavorite as Favorite; use Chatify\Facades\ChatifyMessenger as Chatify; use App\Models\User; use App\Models\Utility; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Request as FacadesRequest; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Str; use function PHPSTORM_META\type; class MessagesController extends Controller { protected $perPage = 30; protected $messengerFallbackColor = '#2180f3'; /** * Authenticate the connection for pusher * * @param Request $request * @return JsonResponse */ public function pusherAuth(Request $request) { return Chatify::pusherAuth( $request->user(), Auth::user(), $request['channel_name'], $request['socket_id'] ); } /** * Returning the view of the app with the required data. * * @param int $id * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View */ public function index($id = null) { $routeName = FacadesRequest::route()->getName(); $route = (in_array($routeName, ['user', config('chatify.routes.prefix')])) ? 'user' : $routeName; return view('Chatify::pages.app', [ 'id' => $id ?? 0, 'route' => $route, 'messengerColor' => Auth::user()->messenger_color ?? $this->messengerFallbackColor, 'dark_mode' => Auth::user()->dark_mode < 1 ? 'light' : 'dark', ]); } /** * Fetch data by id for (user/group) * * @param Request $request * @return JsonResponse */ public function idFetchData(Request $request) { // Favorite $favorite = Chatify::inFavorite($request['id']); // User data // if ($request['type'] == 'user') { $fetch = User::where('id', $request['id'])->first(); if ($fetch) { $userAvatar = Chatify::getUserWithAvatar($fetch)->avatar; } // } $profile = \App\Models\Utility::get_file('/' . config('chatify.user_avatar.folder')); // send the response return Response::json([ 'favorite' => $favorite, 'fetch' => $fetch ?? [], 'user_avatar' => $userAvatar ?? $profile . '/avatar.png', ]); } /** * This method to make a links for the attachments * to be downloadable. * * @param string $fileName * @return \Symfony\Component\HttpFoundation\StreamedResponse|void */ public function download($fileName) { if (Chatify::storage()->exists(config('chatify.attachments.folder') . '/' . $fileName)) { return Chatify::storage()->download(config('chatify.attachments.folder') . '/' . $fileName); } else { return abort(404, "Sorry, File does not exist in our server or may have been deleted!"); } } /** * Send a message to database * * @param Request $request * @return JsonResponse */ public function send(Request $request) { // default variables $error = (object)[ 'status' => 0, 'message' => null ]; $attachment = null; $attachment_title = null; // if there is attachment [file] if ($request->hasFile('file')) { // allowed extensions $allowed_images = Chatify::getAllowedImages(); $allowed_files = Chatify::getAllowedFiles(); $allowed = array_merge($allowed_images, $allowed_files); $file = $request->file('file'); // if size less than 150MB if ($file->getSize() < 150000000) { if (in_array($file->getClientOriginalExtension(), $allowed)) { // get attachment name $attachment_title = $file->getClientOriginalName(); // upload attachment and store the new name $dir = '/attachments/'; $attachment = Str::uuid() . "." . $file->getClientOriginalExtension(); $path = Utility::upload_file($request, 'file', $attachment, $dir, []); if ($path['flag'] == 1) { $url = $path['url']; } else { return redirect()->back()->with('error', __($path['msg'])); } } else { $error->status = 1; $error->message = "File extension not allowed!"; } } else { $error->status = 1; $error->message = "File extension not allowed!"; } } if (!$error->status) { // send to database $messageID = mt_rand(9, 999999999) + time(); Chatify::newMessage([ 'id' => $messageID, 'type' => $request['type'], 'from_id' => Auth::user()->id, 'to_id' => $request['id'], 'body' => htmlentities(trim($request['message']), ENT_QUOTES, 'UTF-8'), 'attachment' => ($attachment) ? json_encode((object)[ 'new_name' => $attachment, 'old_name' => htmlentities(trim($attachment_title), ENT_QUOTES, 'UTF-8'), ]) : null, ]); // fetch message to send it with the response $messageData = Chatify::fetchMessage($messageID); // send to user using pusher Chatify::push("private-chatify." . $request['id'], 'messaging', [ 'from_id' => Auth::user()->id, 'to_id' => $request['id'], 'message' => Chatify::messageCard($messageData, 'default') ]); } // send the response return Response::json([ 'status' => '200', 'error' => $error, 'message' => Chatify::messageCard(@$messageData), 'tempID' => $request['temporaryMsgId'], ]); } /** * fetch [user/group] messages from database * * @param Request $request * @return JsonResponse */ public function fetch(Request $request) { $query = Chatify::fetchMessagesQuery($request['id'])->latest(); $messages = $query->paginate($request->per_page ?? $this->perPage); $totalMessages = $messages->total(); $lastPage = $messages->lastPage(); $response = [ 'total' => $totalMessages, 'last_page' => $lastPage, 'last_message_id' => collect($messages->items())->last()->id ?? null, 'messages' => '', ]; // if there is no messages yet. if ($totalMessages < 1) { $response['messages'] = '<p class="message-hint center-el"><span>Say \'hi\' and start messaging</span></p>'; return Response::json($response); } if (count($messages->items()) < 1) { $response['messages'] = ''; return Response::json($response); } $allMessages = null; foreach ($messages->reverse() as $index => $message) { $allMessages .= Chatify::messageCard( Chatify::fetchMessage($message->id, $index) ); } $response['messages'] = $allMessages; return Response::json($response); } /** * Make messages as seen * * @param Request $request * @return JsonResponse|void */ public function seen(Request $request) { // make as seen $seen = Chatify::makeSeen($request['id']); // send the response return Response::json([ 'status' => $seen, ], 200); } /** * Get contacts list * * @param Request $request * @return JsonResponse */ public function getContacts(Request $request) { // get all users that received/sent message from/to [Auth user] $users = Message::join('users', function ($join) { $join->on('ch_messages.from_id', '=', 'users.id') ->orOn('ch_messages.to_id', '=', 'users.id'); }) ->where(function ($q) { $q->where('ch_messages.from_id', Auth::user()->id) ->orWhere('ch_messages.to_id', Auth::user()->id); }) ->where('users.id', '!=', Auth::user()->id) ->select('users.*', DB::raw('MAX(ch_messages.created_at) max_created_at')) ->orderBy('max_created_at', 'desc') ->groupBy('users.id') ->paginate($request->per_page ?? $this->perPage); $usersList = $users->items(); if (count($usersList) > 0) { $contacts = ''; foreach ($usersList as $user) { $contacts_message = Chatify::getContactItem($user); $contacts .= $contacts_message; } } else { $contacts = '<p class="message-hint center-el"><span>Your contact list is empty</span></p>'; } // Get All Memebers $objUser = Auth::user(); if ($objUser->type != 'super admin') { $members = User::where('created_by', '=', $objUser->creatorId())->where('id', '!=', Auth::user()->id)->where('type', '!=', 'super admin')->get(); } $getRecords = null; foreach ($members as $record) { $getRecords .= view( 'vendor.Chatify.layouts.listItem', [ 'get' => 'all_members', 'type' => 'user', 'user' => $record, ] )->render(); } // send the response // return Response::json( // [ // // 'contacts' => $users->count() > 0 ? $contacts : '<br><p class="message-hint"><span>' . __('Your user list is empty') . '</span></p>', // // 'allUsers' => $members->count() > 0 ? $getRecords : '<br><p class="message-hint"><span>' . __('Your member list is empty') . '</span></p>', // ], // 200 // ); //message unread data if ($request->type == 'custom') { if (count($usersList) > 0) { $contacts = ''; foreach ($usersList as $user) { $message_count = Chatify::countUnseenMessages($user->id); if (!empty($message_count)) { $contacts_message = Chatify::getContactItem($user); $contacts .= $contacts_message; } } } return Response::json([ 'contacts' => $contacts, ], 200); } return Response::json([ 'contacts' => $contacts, 'total' => $users->total() ?? 0, 'last_page' => $users->lastPage() ?? 1, 'allUsers' => $members->count() > 0 ? $getRecords : '<br><p class="message-hint"><span>' . __('Your member list is empty') . '</span></p>', ], 200); } /** * Update user's list item data * * @param Request $request * @return JsonResponse */ public function updateContactItem(Request $request) { // Get user data $user = User::where('id', $request['user_id'])->first(); if (!$user) { return Response::json([ 'message' => 'User not found!', ], 401); } $contactItem = Chatify::getContactItem($user); // send the response return Response::json([ 'contactItem' => $contactItem, ], 200); } /** * Put a user in the favorites list * * @param Request $request * @return JsonResponse|void */ public function favorite(Request $request) { // check action [star/unstar] if (Chatify::inFavorite($request['user_id'])) { // UnStar Chatify::makeInFavorite($request['user_id'], 0); $status = 0; } else { // Star Chatify::makeInFavorite($request['user_id'], 1); $status = 1; } // send the response return Response::json([ 'status' => @$status, ], 200); } /** * Get favorites list * * @param Request $request * @return JsonResponse|void */ public function getFavorites(Request $request) { $favoritesList = null; $favorites = Favorite::where('user_id', Auth::user()->id); foreach ($favorites->get() as $favorite) { // get user data $user = User::where('id', $favorite->favorite_id)->first(); $favoritesList .= view('Chatify::layouts.favorite', [ 'user' => $user, ]); } $count = $favorites->count(); // send the response return Response::json([ 'count' => $count, 'favorites' => $count > 0 ? $favoritesList : '<p class="message-hint"><span>Your favourite list is empty</span></p>', ], 200); } /** * Search in messenger * * @param Request $request * @return JsonResponse|void */ public function search(Request $request) { $getRecords = null; $input = trim(filter_var($request['input'])); $records = User::where('id', '!=', Auth::user()->id)->where('name', '!=', 'Super Admin') ->where('created_by', \Auth::user()->creatorId()) ->where('name', 'LIKE', "%{$input}%") ->paginate($request->per_page ?? $this->perPage); foreach ($records->items() as $record) { $getRecords .= view('Chatify::layouts.listItem', [ 'get' => 'search_item', 'type' => 'user', 'user' => Chatify::getUserWithAvatar($record), ])->render(); } if ($records->total() < 1) { $getRecords = '<p class="message-hint center-el"><span>Nothing to show.</span></p>'; } // send the response return Response::json([ 'records' => $getRecords, 'total' => $records->total(), 'last_page' => $records->lastPage() ], 200); } /** * Get shared photos * * @param Request $request * @return JsonResponse|void */ public function sharedPhotos(Request $request) { $shared = Chatify::getSharedPhotos($request['user_id']); $sharedPhotos = null; // shared with its template for ($i = 0; $i < count($shared); $i++) { $sharedPhotos .= view('Chatify::layouts.listItem', [ 'get' => 'sharedPhoto', 'image' => Chatify::getAttachmentUrl($shared[$i]), ])->render(); } // send the response return Response::json([ 'shared' => count($shared) > 0 ? $sharedPhotos : '<p class="message-hint"><span>Nothing shared yet</span></p>', ], 200); } /** * Delete conversation * * @param Request $request * @return JsonResponse */ public function deleteConversation(Request $request) { // delete $delete = Chatify::deleteConversation($request['id']); // send the response return Response::json([ 'deleted' => $delete ? 1 : 0, ], 200); } /** * Delete message * * @param Request $request * @return JsonResponse */ public function deleteMessage(Request $request) { // delete $delete = Chatify::deleteMessage($request['id']); // send the response return Response::json([ 'deleted' => $delete ? 1 : 0, ], 200); } public function updateSettings(Request $request) { $msg = null; $error = $success = 0; // dark mode if ($request['dark_mode']) { $request['dark_mode'] == "dark" ? User::where('id', Auth::user()->id)->update(['dark_mode' => 1]) // Make Dark : User::where('id', Auth::user()->id)->update(['dark_mode' => 0]); // Make Light } // If messenger color selected if ($request['messengerColor']) { $messenger_color = trim(filter_var($request['messengerColor'])); User::where('id', Auth::user()->id) ->update(['messenger_color' => $messenger_color]); } // if there is a [file] if ($request->hasFile('avatar')) { // allowed extensions $allowed_images = Chatify::getAllowedImages(); $file = $request->file('avatar'); // check file size if ($file->getSize() < Chatify::getMaxUploadSize()) { if (in_array(strtolower($file->getClientOriginalExtension()), $allowed_images)) { // delete the older one if (Auth::user()->avatar != config('chatify.user_avatar.default')) { $avatar = Auth::user()->avatar; if (Chatify::storage()->exists($avatar)) { Chatify::storage()->delete($avatar); } } // upload $avatar = Str::uuid() . "." . $file->getClientOriginalExtension(); $update = User::where('id', Auth::user()->id)->update(['avatar' => $avatar]); $file->storeAs(config('chatify.user_avatar.folder'), $avatar, config('chatify.storage_disk_name')); $success = $update ? 1 : 0; } else { $msg = "File extension not allowed!"; $error = 1; } } else { $msg = "File size you are trying to upload is too large!"; $error = 1; } } // send the response return Response::json([ 'status' => $success ? 1 : 0, 'error' => $error ? 1 : 0, 'message' => $error ? $msg : 0, ], 200); } /** * Set user's active status * * @param Request $request * @return JsonResponse */ public function setActiveStatus(Request $request) { $update = $request['status'] > 0 ? User::where('id', $request['user_id'])->update(['active_status' => 1]) : User::where('id', $request['user_id'])->update(['active_status' => 0]); // send the response return Response::json([ 'status' => $update, ], 200); } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.30 | Generation time: 0.61 |
proxy
|
phpinfo
|
Settings