Your IP : 172.28.240.42


Current Path : /var/www/html/clients/biblio.e-nkama.ru/bitrix/components/bitrix/main.mail.confirm/
Upload File :
Current File : /var/www/html/clients/biblio.e-nkama.ru/bitrix/components/bitrix/main.mail.confirm/class.php

<?php

use Bitrix\Main\Localization\Loc;

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

Loc::loadMessages(__FILE__);

class MainMailConfirmComponent extends CBitrixComponent
{

	public function executeComponent()
	{
		global $USER;

		if (!is_object($USER) || !$USER->isAuthorized())
			return array();

		if (!empty($this->arParams['CONFIRM_CODE']))
		{
			$this->includeComponentTemplate('confirm_code');
			return;
		}

		$this->arParams['USER_FULL_NAME'] = static::getUserNameFormated();
		$this->arParams['MAILBOXES'] = static::prepareMailboxes();

		$this->includeComponentTemplate();

		return $this->arParams['MAILBOXES'];
	}

	public static function prepareMailboxes()
	{
		global $USER;

		static $mailboxes;

		if (!is_null($mailboxes))
			return $mailboxes;

		$mailboxes = array();

		if (!is_object($USER) || !$USER->isAuthorized())
			return $mailboxes;

		if (\CModule::includeModule('mail'))
		{
			$res = \Bitrix\Mail\MailboxTable::getList(array(
				'select' => array('NAME', 'LOGIN', 'USER_ID', 'OPTIONS'),
				'filter' => array(
					'=LID'    => SITE_ID,
					'=ACTIVE' => 'Y',
					array(
						'LOGIC' => 'OR',
						'=USER_ID' => $USER->getId(),
						array(
							'USER_ID'      => 0,
							'=SERVER_TYPE' => 'imap',
						),
					),
				),
				'order' => array('ID' => 'ASC'),
			));

			while ($mailbox = $res->fetch())
			{
				$isUserMailbox = $mailbox['USER_ID'] > 0;
				$isCrmTracker  = !empty($mailbox['OPTIONS']['flags']) && in_array('crm_connect', (array) $mailbox['OPTIONS']['flags']);

				if (!$isUserMailbox && !$isCrmTracker)
					continue;

				$mailboxEmail = null;
				if (check_email($mailbox['NAME'], true))
					$mailboxEmail = strtolower($mailbox['NAME']);
				else if(check_email($mailbox['LOGIN'], true))
					$mailboxEmail = strtolower($mailbox['LOGIN']);

				if (!empty($mailboxEmail))
				{
					$mailboxName = !$isUserMailbox && trim($mailbox['OPTIONS']['name'])
						? trim($mailbox['OPTIONS']['name'])
						: static::getUserNameFormated();

					$key = hash('crc32b', strtolower($mailboxName).$mailboxEmail);
					$mailboxes[$key] = array(
						'name'  => $mailboxName,
						'email' => $mailboxEmail,
					);
				}
			}
		}

		// @TODO: query
		$crmEmail = static::extractEmail(\COption::getOptionString('crm', 'mail', ''));
		if (check_email($crmEmail, true))
		{
			$crmEmail = strtolower($crmEmail);
			$mailboxes[hash('crc32b', $crmEmail)] = array(
				'name'  => static::getUserNameFormated(),
				'email' => $crmEmail,
			);
		}

		$userEmail = $USER->getEmail();
		if (check_email($userEmail, true))
		{
			$userEmail = strtolower($userEmail);
			$mailboxes[hash('crc32b', $userEmail)] = array(
				'name'  => static::getUserNameFormated(),
				'email' => $userEmail,
			);
		}

		$confirmed = (array) \CUserOptions::getOption('mail', 'confirmed_from_emails', null)
			+ (array) \CUserOptions::getOption('mail', 'confirmed_from_emails', null, 0);
		foreach ($confirmed as $item)
		{
			if (!is_array($item))
				continue;

			if (check_email($item['email'], true))
			{
				$item['name']  = trim($item['name']);
				$item['email'] = strtolower($item['email']);
				$key = hash('crc32b', strtolower($item['name']).$item['email']);
				$mailboxes[$key] = array(
					'name'  => $item['name'] ?: static::getUserNameFormated(),
					'email' => $item['email'],
				);
			}
		}

		$mailboxes = array_values($mailboxes);

		return $mailboxes;
	}

	public static function prepareMailboxesFormated()
	{
		static $mailboxesFormated;

		if (!is_null($mailboxesFormated))
			return $mailboxesFormated;

		$mailboxesFormated = array();

		foreach (static::prepareMailboxes() as $item)
		{
			$mailboxesFormated[] = sprintf(
				$item['name'] ? '%s <%s>' : '%s%s',
				$item['name'], $item['email']
			);
		}

		return $mailboxesFormated;
	}

	protected static function getUserNameFormated()
	{
		global $USER;

		static $userNameFormated;

		if (!is_null($userNameFormated))
			return $userNameFormated;

		$userNameFormated = '';

		if (!is_object($USER) || !$USER->isAuthorized())
			return $userNameFormated;

		$userNameFormated = \CUser::formatName(
			\CSite::getNameFormat(),
			\Bitrix\Main\UserTable::getList(array(
				'select' => array('ID', 'NAME', 'LAST_NAME', 'SECOND_NAME', 'LOGIN', 'PERSONAL_PHOTO'),
				'filter' => array('=ID' => $USER->getId()),
			))->fetch(),
			true, false
		);

		return $userNameFormated;
	}

	protected static function extractEmail($email)
	{
		$email = trim($email);
		if (preg_match('/.*?[<\[\(](.+?)[>\]\)].*/i', $email, $matches))
			$email = $matches[1];

		return $email;
	}

}