Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Repository/ConversationMessage.php
<?php

namespace XF\Repository;

use
XF\Entity\ConversationMaster;
use
XF\Mvc\Entity\Repository;

class
ConversationMessage extends Repository
{
    public function
findMessagesForConversationView(ConversationMaster $conversation)
    {
       
/** @var \XF\Finder\ConversationMessage $finder */
       
$finder = $this->finder('XF:ConversationMessage');
       
$finder
           
->inConversation($conversation)
            ->
order('message_date')
            ->
with('full');

        return
$finder;
    }

    public function
findNewestMessagesInConversation($conversation, $lastDate)
    {
       
/** @var \XF\Finder\ConversationMessage $finder */
       
$finder = $this->finder('XF:ConversationMessage');
       
$finder
           
->inConversation($conversation)
            ->
order('message_date', 'DESC')
            ->
where('message_date', '>', $lastDate)
            ->
with('full');

        return
$finder;
    }

    public function
findNextMessageInConversation(ConversationMaster $conversation, $newerThan)
    {
       
/** @var \XF\Finder\ConversationMessage $finder */
       
$finder = $this->finder('XF:ConversationMessage');
       
$finder
           
->inConversation($conversation)
            ->
order('message_date')
            ->
where('message_date', '>', $newerThan)
            ->
limit(1);

        return
$finder;
    }

    public function
getFirstUnreadMessageInConversation(\XF\Entity\ConversationUser $userConv, array $with = [])
    {
        if (!
$userConv->isUnread())
        {
            return
null;
        }

       
$lastReadDate = $userConv->Recipient->last_read_date;
       
$conversation = $userConv->Master;

        return
$this->findNextMessageInConversation($conversation, $lastReadDate)->with($with)->fetchOne();
    }

   
/**
     * @param ConversationMaster $conversation
     *
     * @return \XF\Mvc\Entity\Finder
     */
   
public function findLatestMessage(ConversationMaster $conversation)
    {
       
/** @var \XF\Finder\ConversationMessage $finder */
       
$finder = $this->finder('XF:ConversationMessage');
       
$finder
           
->inConversation($conversation)
            ->
order('message_date', 'DESC')
            ->
limit(1);

        return
$finder;
    }

   
/**
     * @param ConversationMaster $conversation
     *
     * @param \XF\Entity\ConversationMessage $message
     *
     * @return \XF\Mvc\Entity\Finder
     */
   
public function findEarlierMessages(ConversationMaster $conversation, \XF\Entity\ConversationMessage $message)
    {
       
/** @var \XF\Finder\ConversationMessage $finder */
       
$finder = $this->finder('XF:ConversationMessage');
       
$finder->inConversation($conversation)
            ->
earlierThan($message);

        return
$finder;
    }
}