%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/bitrix/www/bitrix/modules/sender/lib/integration/bitrix24/limitation/
Upload File :
Create Path :
Current File : //home/bitrix/www/bitrix/modules/sender/lib/integration/bitrix24/limitation/limiter.php

<?php
/**
 * Bitrix Framework
 * @package bitrix
 * @subpackage sender
 * @copyright 2001-2012 Bitrix
 */

namespace Bitrix\Sender\Integration\Bitrix24\Limitation;

use Bitrix\Main\Config\Option;
use Bitrix\Main\Localization\Loc;
use Bitrix\Bitrix24\MailCounter as B24MailCounter;

use Bitrix\Sender\Integration\Bitrix24\Service;
use Bitrix\Sender\Transport;

Loc::loadMessages(__FILE__);

/**
 * Class Limiter
 * @package Bitrix\Sender\Integration\Bitrix24\Limitation
 */
class Limiter
{
	/** @var  Transport\iLimiter[] $limiters */
	protected static $limiters;

	/**
	 * Return true if installation is portal.
	 *
	 * @return Transport\iLimiter[]
	 */
	public static function getList()
	{
		if (!Service::isCloud())
		{
			return array();
		}

		if (empty(self::$limiters))
		{
			self::$limiters = array(
				self::getMonthly(),
				self::getDaily(),
			);
		}

		return self::$limiters;
	}

	/**
	 * Get monthly limiter percentage.
	 *
	 * @return int
	 */
	public static function getMonthlyLimitPercentage()
	{
		$value = (int) Option::get('sender', '~mail_month_limit_percent', 90);
		$value = $value < 10 ? 10 : $value;
		$value = $value > 100 ? 100 : $value;

		return $value;
	}

	/**
	 * Set monthly limiter percentage.
	 *
	 * @param int $value Value.
	 * @return void
	 */
	public static function setMonthlyLimitPercentage($value)
	{
		$value = (int) $value;
		$value = $value < 10 ? 10 : $value;
		$value = $value > 100 ? 100 : $value;

		Option::set('sender', '~mail_month_limit_percent', $value);
	}

	/**
	 * Return monthly limiter.
	 *
	 * @return Transport\CountLimiter
	 */
	public static function getMonthly()
	{
		$counter = new B24MailCounter();
		$limiter = Transport\CountLimiter::create()
			->withName('mail_per_month')
			->withLimit($counter->getLimit())
			->withUnit("1 " . Transport\iLimiter::MONTHS)
			->withCurrent(
				function () use ($counter)
				{
					return $counter->getMonthly();
				}
			)
			->setParameter(
				'globalHelpUri',
				Loc::getMessage('SENDER_INTEGRATION_BITRIX24_LIMITER_MONTH_HELP_URL') ?: Loc::getMessage('SENDER_INTEGRATION_BITRIX24_LIMITER_DAILY_HELP_URL')
			)
			->setParameter('percentage', self::getMonthlyLimitPercentage());

		if (!Service::isLicenceTop())
		{
			$limiter->setParameter('setupUri', 'javascript: BX.Sender.B24License.showMailLimitPopup();');
		}

		return $limiter;
	}

	/**
	 * Return daily limiter.
	 *
	 * @return Transport\iLimiter
	 */
	protected static function getDaily()
	{
		$counter = new DailyLimit();
		return Transport\CountLimiter::create()
			->withName('mail_per_day')
			->withLimit($counter->getLimit())
			->withUnit("1 " . Transport\iLimiter::DAYS)
			->withCurrent(
				function () use ($counter)
				{
					return $counter->getCurrent();
				}
			)
			->setParameter('setupUri', Loc::getMessage('SENDER_INTEGRATION_BITRIX24_LIMITER_DAILY_HELP_URL'))
			->setParameter('setupCaption', Loc::getMessage('SENDER_INTEGRATION_BITRIX24_LIMITER_DAILY_DETAILS'));
	}
}

Zerion Mini Shell 1.0