talkTablePrefix = BddConstant::DEFAULT_TABLE_PREFIX ."talk_"; $this->commentsTablePrefix = BddConstant::DEFAULT_TABLE_PREFIX; $this->pdo = $db; } private function execSQL($sql, $conditions){ $stmt = $this->pdo->prepare($sql); $stmt->execute($conditions); $data = $stmt->fetchAll(\PDO::FETCH_ASSOC); $stmt->closeCursor(); return json_encode($data); } private function execSQLNoData($sql, $conditions){ $stmt = $this->pdo->prepare($sql); $stmt->execute($conditions); $stmt->closeCursor(); } private function execSQLNoJsonReturn($sql, $conditions){ $stmt = $this->pdo->prepare($sql); $stmt->execute($conditions); $data = $stmt->fetchAll(\PDO::FETCH_ASSOC); $stmt->closeCursor(); return $data; } private function getDevisTalkRoomByName($name){ $sql = "SELECT * FROM ".$this->talkTablePrefix."rooms as room WHERE room.name = ? ORDER BY room.id DESC LIMIT 1;"; $rooms = $this->execSQLNoJsonReturn( $sql, [$name]); if(!empty($rooms)){ return $rooms[0]; } return null; } private function createDevisTalkRoom($name,$token){ $dateTime = new Datetime(); $dateTime = $dateTime->format(('Y-m-d H:i:s')); $sql = "INSERT INTO `".$this->talkTablePrefix."rooms` ( `name`, `token`, `type`, `last_activity`) VALUES (?,?,?,?);"; $this->execSQLNoData($sql, array( $name, $token, self::DEVIS_TALK_ROOM_TYPE, $dateTime )); return true; } private function createDevisTalkRoomAttendeesByActors($actors,$roomId){ foreach($actors as $actor){ $this->createDevisTalkRoomAttendees($actor,$roomId); } } private function createDevisTalkRoomAttendees($idNextCloud,$roomId){ $sql = "INSERT INTO `".$this->talkTablePrefix."attendees` ( `room_id`, `actor_type`, `actor_id`, `display_name`, `participant_type`) VALUES (?,?,?,?,?);"; $this->execSQLNoData($sql, array( $roomId, self::DEVIS_TALK_ROOM_ACTOR_TYPE, $idNextCloud, $idNextCloud, self::DEVIS_TALK_ROOM_DEFAULT_PARTICIPANT_TYPE )); } private function createDevisTalkRoomMessage($actorId,$message,$verb,$roomId,$reference = null){ $datetime = new DateTime(); $datetime = $datetime->format(('Y-m-d H:i:s')); $sql = "INSERT INTO `".$this->commentsTablePrefix."comments` ( `actor_type`, `actor_id`, `message`, `verb`, `creation_timestamp`, `object_type`, `object_id`, `reference_id` ) VALUES (?,?,?,?,?,?,?,?);"; $this->execSQLNoData($sql, array( self::DEVIS_TALK_ROOM_ACTOR_TYPE, $actorId, $message, $verb, $datetime, self::DEVIS_TALK_ROOM_DEFAULT_MESSAGE_TYPE, $roomId, $reference )); } private function getDevisTalkRoomMessageByRoomAndMessage($roomId,$message){ $sql = "SELECT * FROM ".$this->commentsTablePrefix."comments as comment WHERE comment.object_id = ? AND comment.message = ? ORDER BY comment.id DESC LIMIT 1;"; $messages = $this->execSQLNoJsonReturn( $sql, [$roomId,$message]); if(!empty($messages)){ return $messages[0]; } return null; } public function getDevisTalkRoomByNames($names){ $sql = "SELECT * FROM ".$this->talkTablePrefix."rooms as room WHERE room.name = ? OR room.name = ? LIMIT 1;"; $rooms = $this->execSQLNoJsonReturn( $sql, [$names['createdByUser'],$names['createdByAdmin']]); if(!empty($rooms)){ return $rooms[0]; } return null; } public function createDevisTalkRoomAndReturnDevisTalkRoom($idNextCloud,$token){ $roomName = '["'.$idNextCloud.'","'.BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD.'"]'; $this->createDevisTalkRoom($roomName,$token); $room = $this->getDevisTalkRoomByName($roomName); $attendees = [ $idNextCloud, BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD ]; $this->createDevisTalkRoomAttendeesByActors($attendees,$room['id']); return $room; } public function setDevisTalkRoomInitialMessageAndReturnMessage($roomId,$idNextCloud){ $this->createDevisTalkRoomMessage( $idNextCloud, self::DEVIS_TALK_ROOM_INITIAL_MESSAGE, self::DEVIS_TALK_ROOM_VERB_INITIAL_MESSAGE, $roomId ); $message = $this->getDevisTalkRoomMessageByRoomAndMessage($roomId,self::DEVIS_TALK_ROOM_INITIAL_MESSAGE); return $message; } public function setAttendeeLastReadMessage($roomId,$messageId,$idNextCloud){ $sql = "UPDATE ".$this->talkTablePrefix."attendees as attendee SET attendee.last_read_message = ? WHERE attendee.room_id = ? AND attendee.actor_id = ?;"; $this->execSQLNoData( $sql, [$messageId,$roomId,$idNextCloud]); } public function createDevisTalkRoomMessageAndReturnMessage($roomId,$message){ $this->createDevisTalkRoomMessage( BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD, $message, self::DEVIS_TALK_ROOM_VERB_COMMENT, $roomId, Uuid::uuid4()->toString() ); $message = $this->getDevisTalkRoomMessageByRoomAndMessage($roomId,$message); return $message; } public function updateDevisTalkRoomLastActivity($roomId,$datetime){ $datetime = $datetime->format(('Y-m-d H:i:s')); $sql = "UPDATE ".$this->talkTablePrefix."rooms as room SET room.last_activity = ? WHERE room.id = ?;"; $this->execSQLNoData( $sql, [$datetime,$roomId]); } public function updateRoomLastMessage($roomId,$lastMessageId){ $sql = "UPDATE ".$this->talkTablePrefix."rooms as room SET room.last_message = ? WHERE room.id = ?;"; $this->execSQLNoData( $sql, [$lastMessageId,$roomId]); } }