%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/modules/sender/lib/runtime/ |
| Current File : //home/bitrix/www/bitrix/modules/sender/lib/runtime/senderjob.php |
<?php
/**
* Bitrix Framework
* @package bitrix
* @subpackage sender
* @copyright 2001-2018 Bitrix
*/
namespace Bitrix\Sender\Runtime;
use Bitrix\Main\Config\Option;
use Bitrix\Sender\Internals\Model\LetterTable;
/**
* Class SenderJob
* @package Bitrix\Sender\Runtime
*/
class SenderJob extends Job
{
/** @var int $letterId Letter ID. */
protected $letterId;
/** @var int $campaignId Campaign ID. */
protected $campaignId;
/**
* Set campaign ID.
*
* @param int $campaignId Campaign ID.
* @return $this
*/
public function withCampaignId($campaignId)
{
$this->campaignId = $campaignId;
return $this;
}
/**
* Set letter ID.
*
* @param int $letterId Letter ID.
* @return $this
*/
public function withLetterId($letterId)
{
$this->letterId = $letterId;
return $this;
}
/**
* Actualize jobs.
* @return $this
*/
public function actualize()
{
$filter = [];
if ($this->campaignId)
{
$filter['=CAMPAIGN_ID'] = $this->campaignId;
}
if ($this->letterId)
{
$filter['=ID'] = $this->letterId;
}
$list = LetterTable::getList(array(
'select' => ['ID', 'STATUS', 'AUTO_SEND_TIME', 'CAMPAIGN_ACTIVE' => 'CAMPAIGN.ACTIVE'],
'filter' => $filter
));
foreach ($list as $row)
{
$agentName = static::getAgentName($row['ID']);
if (!$agentName)
{
continue;
}
self::removeAgent($agentName);
if (Env::isSenderJobCron())
{
continue;
}
if (empty($row['AUTO_SEND_TIME']))
{
continue;
}
if ($row['CAMPAIGN_ACTIVE'] !== 'Y')
{
continue;
}
$allowedStatuses = [LetterTable::STATUS_SEND, LetterTable::STATUS_PLAN];
if (!in_array($row['STATUS'], $allowedStatuses))
{
continue;
}
$interval = Option::get('sender', 'auto_agent_interval');
self::addAgent($agentName, $interval, $row['AUTO_SEND_TIME']);
}
return $this;
}
/**
* Get agent name.
*
* @param int $letterId Letter ID.
* @return string
*/
public static function getAgentName($letterId)
{
$letterId = (int) $letterId;
if (!$letterId)
{
return '';
}
return '\Bitrix\Sender\MailingManager::chainSend(' . $letterId . ');';
}
}