403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/cvetdv.ru/bitrix/modules/yandex.market/lib/salesboost/run/steps/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/cvetdv.ru/bitrix/modules/yandex.market/lib/salesboost/run/steps/collector.php
<?php
namespace Yandex\Market\SalesBoost\Run\Steps;

use Yandex\Market\Data;
use Yandex\Market\Glossary;
use Yandex\Market\Result;
use Yandex\Market\SalesBoost;

class Collector extends Data\Run\StepSkeleton
{
	protected $processor;

	public function __construct(SalesBoost\Run\Processor $processor)
	{
		$this->processor = $processor;
	}

	public function getName()
	{
		return 'collector';
	}

	public function validateAction($action)
	{
		if ($action === Data\Run\Processor::ACTION_CHANGE)
		{
			return (
				$this->processor->parameter('initTimeUTC') instanceof Data\Type\CanonicalDateTime
				&& $this->changesFilter() !== null
			);
		}

		if ($action === Data\Run\Processor::ACTION_REFRESH)
		{
			return ($this->processor->parameter('initTimeUTC') instanceof Data\Type\CanonicalDateTime);
		}

		return true;
	}

	public function run($action, $offset = null)
	{
		$result = new Result\Step();
		$state = $this->createState($action);
		$offsetObject = new Data\Run\Offset($offset);

		(new Data\Run\Waterfall())
			->add(new Collector\ElementsLoader($this->processor))
			->add(new Collector\StorageWriter($this->processor))
			->run($state, $offsetObject);

		if ($offsetObject->interrupted())
		{
			$result->setOffset((string)$offsetObject);
			$result->setTotal(1);

			if ($this->processor->parameter('progressCount') === true)
			{
				$result->setReadyCount($this->readyCount());
			}
		}

		return $result;
	}

	protected function readyCount()
	{
		return SalesBoost\Run\Storage\CollectorTable::getCount([
			'>=TIMESTAMP_X' => $this->processor->parameter('initTimeUTC'),
		]);
	}

	public function after($action)
	{
		if ($action === Data\Run\Processor::ACTION_CHANGE)
		{
			$this->markDeleted($this->changesFilter());
		}
		else
		{
			$this->markDeleted();
		}
	}

	public function finalize($action)
	{
		if ($action === Data\Run\Processor::ACTION_CHANGE)
		{
			$this->clearDeleted($this->changesFilter());
		}
		else
		{
			$this->clearDeleted();
		}
	}

	protected function createState($action)
	{
		$state = new Collector\State();
		$state->runAction = $action;
		$state->initTime = $this->processor->parameter('initTimeUTC');
		$state->selectedBoosts = $this->processor->parameter('boosts');

		if ($action === Data\Run\Processor::ACTION_CHANGE)
		{
			$state->changes = $this->processor->parameter('changes');
		}

		return $state;
	}

	protected function changesFilter()
	{
		$changes = $this->processor->parameter('changes');
		$partials = [];

		if (!empty($changes[Glossary::SERVICE_SALES_BOOST]))
		{
			$partials[] = [
				'=BOOST_ID' => $changes[Glossary::SERVICE_SALES_BOOST],
			];
		}

		if (!empty($changes[Glossary::ENTITY_OFFER]))
		{
			$partials[] = [
				'LOGIC' => 'OR',
				[ '=ELEMENT_ID' => $changes[Glossary::ENTITY_OFFER] ],
				[ '=PARENT_ID' => array_filter((array)$changes[Glossary::ENTITY_OFFER]) ], // remove null
			];
		}

		if (empty($partials)) { return null; }

		if (count($partials) > 1)
		{
			return [ 'LOGIC' => 'OR' ] + $partials;
		}

		return reset($partials);
	}

	protected function markDeleted(array $filter = [])
	{
		$selectedBoosts = $this->boostsForClean();
		$queryFilter = [];

		if ($selectedBoosts !== null)
		{
			$queryFilter['=BOOST_ID'] = $selectedBoosts;
		}

		$queryFilter[] = $filter;
		$queryFilter['<TIMESTAMP_X'] = $this->processor->parameter('initTimeUTC');

		SalesBoost\Run\Storage\CollectorTable::updateBatch([
			'filter' => $queryFilter,
		], [
			'STATUS' => SalesBoost\Run\Storage\CollectorTable::STATUS_DELETE,
			'TIMESTAMP_X' => new Data\Type\CanonicalDateTime(),
		]);
	}

	protected function clearDeleted(array $filter = [])
	{
		$selectedBoosts = $this->boostsForClean();
		$queryFilter = [];

		if ($selectedBoosts !== null)
		{
			$queryFilter['=BOOST_ID'] = $selectedBoosts;
		}

		$queryFilter[] = $filter;
		$queryFilter['=STATUS'] = SalesBoost\Run\Storage\CollectorTable::STATUS_DELETE;
		$queryFilter['SUBMITTER.ELEMENT_ID'] = false; // submitter task completed and deleted

		SalesBoost\Run\Storage\CollectorTable::deleteBatch([
			'filter' => $queryFilter,
		]);
	}

	protected function boostsForClean()
	{
		$partials = [];
		$keys = [ 'boosts', 'inactiveBoosts' ];

		foreach ($keys as $key)
		{
			$selected = $this->processor->parameter($key);

			if ($selected !== null)
			{
				$partials[] = (array)$selected;
			}
		}

		return !empty($partials) ? array_merge(...$partials) : null;
	}
}


Youez - 2016 - github.com/yon3zu
LinuXploit