Your IP : 3.147.104.221


Current Path : /var/www/axolotl/data/www/yar.axolotls.ru/bitrix/modules/tasks/lib/integration/mail/
Upload File :
Current File : /var/www/axolotl/data/www/yar.axolotls.ru/bitrix/modules/tasks/lib/integration/mail/user.php

<?
/**
 * Class implements all further interactions with "mail" module
 *
 * This class is for internal use only, not a part of public API.
 * It can be changed at any time without notification.
 *
 * @access private
 */

namespace Bitrix\Tasks\Integration\Mail;

use Bitrix\Main\Loader;
use Bitrix\Tasks\Util\Error\Collection;

final class User extends \Bitrix\Tasks\Integration\Mail
{
	public static function getExternalCode()
	{
		return 'email';
	}

	public static function getData(array $ids, $siteId = '')
	{
		if(!static::includeModule())
		{
			return array();
		}

		$data = \Bitrix\Mail\User::getUserData($ids, \Bitrix\Tasks\Util\Site::getUserNameFormat($siteId));
		if (empty($data))
		{
			return array();
		}

		return $data;
	}

	public static function create(array $data, Collection $errors = null)
	{
		if(!static::includeModule())
		{
			if($errors)
			{
				$errors->add('MODULE_NOT_INSTALLED', 'Module not installed: ' . static::MODULE_NAME);
			}
			return false;
		}

		static $users = array();

		$email = (string) $data['EMAIL'];

		if($email == '' || !\check_email($email))
		{
			if($errors)
			{
				$errors->add('BAD_EMAIL', 'Bad user email');
			}
			return false;
		}

		if($users[$email])
		{
			return $users[$email];
		}

		$item = \CUser::GetList(
			$o = "ID",
			$b = "ASC",
			array(
				"=EMAIL" => $email,
				"!EXTERNAL_AUTH_ID" => [ "bot", "controller", "replica", "shop", "imconnector", "sale", "saleanonymous" ]
			),
			array("FIELDS" => array("ID", "EXTERNAL_AUTH_ID", "ACTIVE"))
		)->fetch();

		if(
			$item && ($id = intval($item['ID']))
			&& ($item["ACTIVE"] == "Y" || $item["EXTERNAL_AUTH_ID"] == static::getExternalCode())
		)
		{
			if ($item["ACTIVE"] == "N") // email only
			{
				$user = new \CUser;
				$user->Update($id, array("ACTIVE" => "Y"));
			}
			$users[$email] = $id;

			return $id;
		}

		// create "extranet" user by email
		$id = \Bitrix\Mail\User::create(array(
			'EMAIL' => $email,
			'NAME' => (string) $data['NAME'],
			'LAST_NAME' => (string) $data['LAST_NAME']
		));

		if(!$id)
		{
			if($errors)
			{
				$errors->add('CREATION_FAIL', 'User creation failed');
			}
			return false;
		}
		else
		{
			$users[$email] = $id;
		}

		if (Loader::includeModule('intranet') && class_exists('\Bitrix\Intranet\Integration\Mail\EmailUser'))
		{
			\Bitrix\Intranet\Integration\Mail\EmailUser::invite($id);
		}

		return $id;
	}

	/**
	 * Return true if user is email user
	 *
	 * @param mixed $data
	 * @return bool
	 */
	public static function isEmail($data)
	{
		if(!static::includeModule())
		{
			return false;
		}

		return is_array($data) && isset($data["EXTERNAL_AUTH_ID"]) && $data["EXTERNAL_AUTH_ID"] == static::getExternalCode();
	}
}