PATH:
home
/
letacommog
/
laindinois
/
wp-content
/
plugins
/
wilcity-mobile-app
/
app
/
Controllers
/
Firebase
<?php namespace WILCITY_APP\Controllers\Firebase; use Kreait\Firebase\Database; use WILCITY_APP\Database\FirebaseDB; use WILCITY_APP\Database\FirebaseMsgDB; use WILCITY_APP\Database\FirebaseUser; use WilokeListingTools\Controllers\DashboardController; use WilokeListingTools\Framework\Helpers\GetSettings; use WilokeListingTools\Framework\Helpers\Message; use WilokeListingTools\Framework\Routing\Controller; use WilokeListingTools\Frontend\User; class MessageController extends Controller { private $db; public function __construct() { add_filter('wilcity/filter/submit-new-message-middleware', array($this, 'addMiddlewareToSubmitNewMessage'), 1); add_filter('wilcity/filter/submit-new-message-middleware-options', array($this, 'addOptionsToMiddleWare'), 1); add_action('wilcity/action/received-message', array($this, 'updateLatestChat'), 10, 3); add_action('wilcity/action/received-message', array($this, 'updateMessageToFirebase'), 10, 3); add_filter('wilcity/filter/firebase/delete/msg', array($this, 'deleteMsg'), 10, 5); add_filter('wilcity/filter/firebase/delete-msgs-chat-with', array($this, 'deleteMsgWithChatWith'), 10, 2); add_action('wilcity/wiloke-listing-tools/update-read-message-status', array($this, 'updateReadStatus')); // add_filter('wilcity/wilcity-mobile-app/filter/build-reference', array($this, 'buildReference'), 10, 2); add_action('wilcity/action/send-welcome-message', array($this, 'sendWelcomeMessage'), 10, 3); } public function updateReadStatus($senderID){ FirebaseMsgDB::updateReadMessageStatus($senderID); } public function testeUpdateFirebase(){ $aUserIDs = array(21, 23, 20, 14, 8, 9, 10, 11, 15, 25, 24, 3, 5); $msg = 'This is my test'; foreach ($aUserIDs as $userID){ $msg .= $userID; $this->updateMessageToFirebase(22, $userID, $msg); $this->updateLatestChat(22, $userID, $msg); $msg = 'This is my test'; } } public function testUpdateMessage(){ if ( !is_admin() ){ return false; } for ( $i = 0; $i < 100; $i++ ){ $this->referMsgDB(22, 6); $this->db->getChild('lists')->push([ 'message' => 'This is test ' . $i, 'userID' => 6, 'timestamp' => Database::SERVER_TIMESTAMP ]); } } // Delete message on the both Receiver and Sender private function deleteLatestMessage($chatWithID, $userID){ $aLatestMsg = FirebaseMsgDB::getLatestMessageIDByUserID($chatWithID); if ( !empty($aLatestMsg) ){ $aKeys = array_keys($aLatestMsg); FirebaseMsgDB::deleteLatestMessage($aKeys[0]); } $aLatestMsg = FirebaseMsgDB::getLatestMessageIDByUserID($userID, $chatWithID); if ( !empty($aLatestMsg) ){ $aKeys = array_keys($aLatestMsg); FirebaseMsgDB::deleteLatestMessage($aKeys[0], $chatWithID); } } public function deleteMsgWithChatWith($status, $chatWithID){ $userID = User::getCurrentUserID(); $chatRoom = '___' . $chatWithID . '___' . $userID . '___'; $aChatRoom = FirebaseMsgDB::getChatRoom($chatRoom); if ( empty($aChatRoom) ){ $chatRoom = '___' . $userID . '___' . $chatWithID . '___'; $aChatRoom = FirebaseMsgDB::getChatRoom($chatRoom); $this->deleteLatestMessage($chatWithID, $userID); if ( empty($aChatRoom) ){ return false; }else{ FirebaseMsgDB::deleteChatRoom($chatRoom); } }else{ FirebaseMsgDB::deleteChatRoom($chatRoom); $this->deleteLatestMessage($chatWithID, $userID); } return true; } public function deleteMsg($status, $chatRoom, $msgID, $senderID, $receiverID){ $aGetMsg = FirebaseMsgDB::getMsgByID($chatRoom, $msgID); if ( empty($aGetMsg) || $aGetMsg['userID'] != User::getCurrentUserID() ){ return false; } FirebaseMsgDB::deleteMsg($chatRoom, $msgID); $currentMsg = FirebaseMsgDB::getChatRoom($chatRoom); if ( empty($currentMsg) ){ $aLatestMsg = FirebaseMsgDB::getLatestMessageIDByUserID($senderID, $receiverID); if ( !empty($aLatestMsg) ){ $aKeys = array_keys($aLatestMsg); FirebaseMsgDB::deleteLatestMessage($aKeys[0], $receiverID); } $aLatestMsg = FirebaseMsgDB::getLatestMessageIDByUserID($receiverID, $senderID); if ( !empty($aLatestMsg) ){ $aKeys = array_keys($aLatestMsg); FirebaseMsgDB::deleteLatestMessage($aKeys[0], $senderID); } } return true; } private function buildUserId($user1, $user2){ return '___'.$user1.'___'.$user2.'___'; } private function referMsgDB($user1, $user2){ if ( empty($this->db) ){ $this->db = FirebaseDB::getDB()->getReference('messages/chats/'.$this->buildUserId($user1, $user2)); if ( $this->db->getValue() === null ){ $this->db = FirebaseDB::getDB()->getReference('messages/chats/'.$this->buildUserId($user2, $user1)); } } return $this->db; } public function updateLatestChat($receiverID, $senderID, $msg, $activate=true){ $aStatus = FirebaseMsgDB::updateLatestChat($receiverID, $senderID, $msg, $activate); if ( $aStatus['status'] == 'error' ){ Message::error($aStatus['msg']); } FirebaseMsgDB::updateLatestChat($senderID, $receiverID, $msg, null); } public function buildReference($senderID, $receiverID){ return $this->referMsgDB($senderID, $receiverID); } public function updateMessageToFirebase($receiverID, $senderID, $msg){ $this->referMsgDB($receiverID, $senderID); $this->db->getChild('lists')->push([ 'message' => $msg, 'userID' => $senderID, 'timestamp' => Database::SERVER_TIMESTAMP ]); if ( !$this->db->getChild('fUser')->getSnapshot()->exists() ){ $this->db->update(array( 'fUser' => FirebaseUser::getFirebaseID(), 'sUser' => FirebaseDB::getFirebaseID($receiverID) )); } /* * Hooked WilokeListingTools\Controllers\EmailController@sendMessageToEmail 10 */ do_action('wilcity/action/after-sent-message', $receiverID, $senderID, $msg); return true; } public function sendWelcomeMessage($receiverID, $senderID, $message){ $this->updateMessageToFirebase($receiverID, $senderID, $message); FirebaseMsgDB::updateLatestChat($receiverID, $senderID, $message, true); } public function addOptionsToMiddleWare($aOptions){ $aOptions['oChatRef'] = $this->referMsgDB($aOptions['receiveID'], User::getCurrentUserID()); return $aOptions; } public function addMiddlewareToSubmitNewMessage($aMiddleware){ $aMiddleware[] = 'isLoggedInToFirebase'; $aMiddleware[] = 'verifyFirebaseChat'; return $aMiddleware; } }
[+]
..
[-] MessageController.php
[edit]
[-] PushNotificationController.php
[edit]
[-] LoginRegister.php
[edit]