Your IP : 18.216.81.181


Current Path : /home/bitrix/initial_sites/ballu.in.ua_1/bitrix/modules/mail/lib/
Upload File :
Current File : /home/bitrix/initial_sites/ballu.in.ua_1/bitrix/modules/mail/lib/blacklist.php

<?php

namespace Bitrix\Mail;

use Bitrix\Main\Application;
use Bitrix\Main\Entity;
use Bitrix\Main\Localization;

Localization\Loc::loadMessages(__FILE__);

class BlacklistTable extends Entity\DataManager
{

	public static function getFilePath()
	{
		return __FILE__;
	}

	public static function getTableName()
	{
		return 'b_mail_blacklist';
	}

	public static function replace($siteId, $mailboxId, array $list)
	{
		global $DB;

		if ($mailboxId > 0)
			$DB->query(sprintf("DELETE FROM b_mail_blacklist WHERE MAILBOX_ID = %u", $mailboxId));
		else
			$DB->query(sprintf("DELETE FROM b_mail_blacklist WHERE SITE_ID = '%s' AND MAILBOX_ID = 0", $DB->forSql($siteId)));

		if (!empty($list))
		{
			foreach ($list as $item)
			{
				static::add(array(
					'SITE_ID'    => $siteId,
					'MAILBOX_ID' => $mailboxId,
					'ITEM_TYPE'  => Blacklist\ItemType::resolveByValue($item),
					'ITEM_VALUE' => $item,
				));
			}
		}
	}

	/**
	 * @param array $list
	 * @param array $mailbox
	 * @return int
	 * @throws \Bitrix\Main\Db\SqlQueryException
	 */
	public static function addMailsBatch(array $list, $userId = null)
	{
		if (empty($list))
		{
			return 0;
		}
		if (is_null($userId))
		{
			$userId = 0;
		}
		$sqlHelper = Application::getConnection()->getSqlHelper();
		$addList = [];
		foreach ($list as $index => $item)
		{
			$itemToAdd = [
				'SITE_ID' => SITE_ID,
				'MAILBOX_ID' => 0,
				'USER_ID' => $userId,
				'ITEM_TYPE' => Blacklist\ItemType::resolveByValue($item),
				'ITEM_VALUE' => $item,
			];
			$addList[] = $itemToAdd;
		}

		if (count($addList) === 0)
		{
			return 0;
		}
		$keys = implode(', ', array_keys(current($addList)));
		$values = [];
		foreach ($addList as $item)
		{
			$values[] = implode(
				", ",
				[
					"'" . $sqlHelper->forSql($item['SITE_ID']) . "'",
					(int)$item['MAILBOX_ID'],
					(int)$item['USER_ID'],
					$item['ITEM_TYPE'],
					"'" . $sqlHelper->forSql($item['ITEM_VALUE']) . "'",
				]
			);
		}
		$values = implode('), (', $values);

		$tableName = static::getTableName();
		$sql = "INSERT IGNORE $tableName($keys) VALUES($values)";
		Application::getConnection()->query($sql);
		return Application::getConnection()->getAffectedRowsCount();
	}

	public static function getMap()
	{
		return array(
			'ID' => array(
				'data_type'    => 'integer',
				'primary'      => true,
				'autocomplete' => true,
			),
			'SITE_ID' => array(
				'data_type' => 'string',
				'required'  => true,
			),
			'MAILBOX_ID' => array(
				'data_type' => 'integer',
			),
			'USER_ID' => array(
				'data_type' => 'integer',
			),
			'ITEM_TYPE' => array(
				'data_type' => 'integer',
				'required'  => true,
			),
			'ITEM_VALUE' => array(
				'data_type' => 'string',
				'required'  => true,
				'fetch_data_modification' => function()
				{
					return array(
						function ($value, $query, $data)
						{
							if (Blacklist\ItemType::DOMAIN == $data['ITEM_TYPE'])
								$value = sprintf('@%s', $value);

							return $value;
						}
					);
				}
			),
		);
	}

}