Your IP : 3.147.42.159


Current Path : /home/bitrix/ext_www/coffe.land/bitrix/components/bitrix/mail.uf.message/
Upload File :
Current File : //home/bitrix/ext_www/coffe.land/bitrix/components/bitrix/mail.uf.message/class.php

<?php

use Bitrix\Main;
use Bitrix\Main\Security;
use Bitrix\Main\Localization\Loc;
use Bitrix\Mail;

if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();

Loc::loadMessages(__FILE__);

\Bitrix\Main\Loader::includeModule('mail');

class CMailUfMessageComponent extends CBitrixComponent
{

	public function executeComponent()
	{
		global $USER;

		$message = Mail\MailMessageTable::getList(array(
			'select' => array(
				'*',
				'MAILBOX_EMAIL' => 'MAILBOX.EMAIL',
				'MAILBOX_NAME' => 'MAILBOX.NAME',
				'MAILBOX_LOGIN' => 'MAILBOX.LOGIN',
			),
			'filter' => array(
				'=ID' => (int) $this->arParams['MESSAGE_ID'],
			),
		))->fetch();

		if (empty($message))
		{
			$this->includeComponentTemplate('empty');
			return;
		}

		Mail\Helper\Message::prepare($message);

		$message['__thread_new'] = 0;

		$newCount = Mail\MailMessageTable::getList(array(
			'runtime' => array(
				new Main\Entity\ReferenceField(
					'MESSAGE_UID',
					'Bitrix\Mail\MailMessageUidTable',
					array(
						'=this.MAILBOX_ID' => 'ref.MAILBOX_ID',
						'=this.ID'         => 'ref.MESSAGE_ID',
					),
					array(
						'join_type' => 'INNER',
					)
				),
				new Main\Entity\ReferenceField(
					'CLOSURE',
					Mail\Internals\MessageClosureTable::class,
					array(
						'=this.ID' => 'ref.MESSAGE_ID',
					)
				),
			),
			'select' => array(
				new Main\Entity\ExpressionField('NEW_COUNT', 'COUNT(DISTINCT %s)', 'ID'),
			),
			'filter' => array(
				'=MAILBOX_ID' => $message['MAILBOX_ID'],
				'=CLOSURE.PARENT_ID' => $message['ID'],
				'!@MESSAGE_UID.IS_SEEN' => array('Y', 'S'),
			),
		))->fetch();

		if (!empty($newCount) && $newCount['NEW_COUNT'] > 0)
		{
			$message['__thread_new'] = (int) $newCount['NEW_COUNT'];
		}

		$userField = $this->arParams['USER_FIELD'];
		if ($userField['ENTITY_VALUE_ID'] > 0)
		{
			$access = Mail\Internals\MessageAccessTable::getList(array(
				'filter' => array(
					'=MAILBOX_ID' => $message['MAILBOX_ID'],
					'=MESSAGE_ID' => $message['ID'],
					'=ENTITY_UF_ID' => $userField['ID'],
					'=ENTITY_ID' => $userField['ENTITY_VALUE_ID'],
				),
				'limit' => 1,
			))->fetch();

			if ($access)
			{
				$signer = new Security\Sign\Signer(new Security\Sign\HmacAlgorithm('md5'));

				$message['__href'] = \CHTTP::urlAddParams(
					$message['__href'],
					array(
						'mail_uf_message_token' => sprintf(
							'%s:%s',
							$access['TOKEN'],
							$signer->getSignature($access['SECRET'], sprintf('user%u', $USER->getId()))
						),
					),
					array(
						'encode' => true,
					)
				);
			}
		}

		if (empty($access))
		{
			if (!Mail\MailboxTable::getUserMailbox($message['MAILBOX_ID']))
			{
				return;
			}
		}

		$this->arResult['MESSAGE'] = $message;

		$this->includeComponentTemplate();
	}

}