gurl_o/plugins/tps/birzha/components/Messages.php

174 lines
5.4 KiB
PHP

<?php namespace Tps\Birzha\Components;
use Cms\Classes\ComponentBase;
use Illuminate\Support\Facades\Log;
use October\Rain\Exception\AjaxException;
use RainLab\User\Models\User;
use Tps\Birzha\Models\Chatroom;
use Tps\Birzha\Models\Message;
use Auth;
use Input;
use Carbon\Carbon;
use Flash;
use Event;
class Messages extends ComponentBase
{
public function componentDetails() {
return [
'name' => 'Messages',
'description' => 'Messages'
];
}
protected function loadMessages($sellerId) {
$newChatRoomNeeded = true;
$this->chatrooms = Auth::user()->chatrooms;
foreach($this->chatrooms as $room) {
$room->last_message = $room->messages()->latest('send_at')->first();
$room->message_partner = $room->users()->where('users.id','!=',Auth::user()->id)->first();
$room->count_unread_messages = $room->messages()->where('read_at',null)->where('reciver_id',Auth::user()->id)->count();
if($room->message_partner->id == $sellerId) {
$newChatRoomNeeded = false;
}
}
// dump($this->chatrooms);
if($sellerId) {
if(!$newChatRoomNeeded) {
// dump('open an existing chat');
} else {
// dump('create new chat');
$seller = User::findOrFail($sellerId);
$chatroom = new Chatroom;
$chatroom->save();
$chatroom->users()->attach($seller->id);
$chatroom->users()->attach(Auth::user()->id);
// add this newly added chatroom to the collection "chatrooms"
$chatroom->message_partner = $seller;
$this->chatrooms->push($chatroom);
// dd($this->chatrooms);
}
} else {
// dump("don't do anything");
}
}
public $chatrooms;
public function onRun() {
$sellerId = null;
if(Input::get('seller_id') && is_numeric(Input::get('seller_id')) && Input::get('seller_id') != Auth::user()->id) {
$sellerId = Input::get('seller_id');
}
if(\Auth::user()){
$this->loadMessages($sellerId);
}
//dd($this->chatrooms);
}
public function onChatroom() {
$chatRoomId = Input::get('chatroom_id');
// Read unread messages
Chatroom::find($chatRoomId)->messages()->where('reciver_id',Auth::user()->id)->where('read_at',null)->update(['read_at'=>Carbon::now()]);
$this->page['result'] = Chatroom::find($chatRoomId)->messages()->latest('send_at')->limit(5)->get()->reverse();
$this->page['currentUserId'] = Auth::user()->id;
$this->page['chat_room_id'] = $chatRoomId;
$this->page['chatRoomPartnerId'] = Chatroom::find($chatRoomId)->users()->where('users.id','!=',Auth::user()->id)->first()->id;
return [
'chat_area' => $this->renderPartial('@chatroom')
];
}
public function onLoadMore() {
$skipParam = Input::get('skip');
$chatRoomId = Input::get('chatroom_id');
return [
'more_messages' => Chatroom::find($chatRoomId)->messages()->latest('send_at')->skip($skipParam)->limit(5)->get()->reverse(),
'currentUserId' => Auth::user()->id,
'skipparam' => $skipParam
];
}
public function onMessageSend() {
$newMsg = new Message;
$newMsg->sender_id = Auth::user()->id;
$newMsg->reciver_id = Input::get('reciver_id');
$newMsg->send_at = Carbon::now();
$newMsg->message = Input::get('msg');
$newMsg->chatroom_id = Input::get('chatroom_id');
if($newMsg->save()){
Event::fire('tps.message.received', [User::find($newMsg->reciver_id), Auth::user()]);
$this->page['latestMessage'] = $newMsg->message;
$this->page['latestMessageTime'] = $newMsg->send_at;
}else
throw new AjaxException('Hat gitmedi. Nasazlyk yuze chykdy');
return [
'latest_message_area' => $this->renderPartial('@latest_message')
];
}
public function onMessageInUserProfile() {
$newMsg = new Message;
$newMsg->sender_id = Auth::user()->id;
$newMsg->reciver_id = Input::get('reciver_id');
$newMsg->send_at = Carbon::now();
$newMsg->message = Input::get('msg');
$newMsg->chatroom_id = Input::get('chatroom_id');
if($newMsg->save()){
Event::fire('tps.message.received', [User::find($newMsg->reciver_id), Auth::user()]);
$this->page['latestMessage'] = $newMsg->message;
$this->page['latestMessageTime'] = $newMsg->send_at;
}else
throw new AjaxException('Hat gitmedi. Nasazlyk yuze chykdy');
return [
'latest_message_area' => $this->renderPartial('@latest_message_profile')
];
}
public function onDeleteChat()
{
$chatRoomId = Input::get('chatroom_id');
$chatroom = Chatroom::with(['messages', 'users'])->find($chatRoomId);
if($chatroom) {
\DB::beginTransaction();
try {
$chatroom->messages()->delete();
$chatroom->users()->detach();
$chatroom->delete();
} catch (\Throwable $th) {
return \Redirect::to('/error');
}
\DB::commit();
}
return \Redirect::back();
}
}