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/ilovecveti.ru/bitrix/modules/yandex.market/lib/component/business/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/ilovecveti.ru/bitrix/modules/yandex.market/lib/component/business/editform.php
<?php
namespace Yandex\Market\Component\Business;

use Yandex\Market\Reference\Assert;
use Yandex\Market\Reference\Concerns;
use Yandex\Market\Trading;
use Yandex\Market\Component;
use Yandex\Market\Api;
use Yandex\Market\Environment;
use Bitrix\Main;

class EditForm extends Component\Plain\EditForm
{
	use Concerns\HasMessage;

	/** @var Trading\Business\Model */
	private $businessModel;
	/** @var Trading\Setup\Model */
	private $tradingModel;

	public function __construct(\CBitrixComponent $component, array $componentParameters = [])
	{
		Assert::notNull($componentParameters['BUSINESS'], '$componentParameters[BUSINESS]');
		Assert::notNull($componentParameters['TRADING'], '$componentParameters[TRADING]');
		Assert::isInstanceOf($componentParameters['BUSINESS'], Trading\Business\Model::class);
		Assert::isInstanceOf($componentParameters['TRADING'], Trading\Setup\Model::class);

		$this->businessModel = $componentParameters['BUSINESS'];
		$this->tradingModel = $componentParameters['TRADING'];

		parent::__construct($component, $componentParameters);
	}

	public function load($primary, array $select = [], $isCopy = false)
	{
		return $this->initial($select);
	}

	public function initial(array $select = [])
	{
		$values = $this->optionValues();
		$values['SITE_ID'] = $this->tradingModel->getSiteId();

		return $this->applyValuesSelect($values, $select);
	}

	private function optionValues()
	{
		$values = $this->businessModel->getOptions()->getValues();

		if ($this->tradingModel->getBehaviorCode() !== Trading\Service\Manager::BEHAVIOR_BUSINESS)
		{
			if (!empty($values))
			{
				return $values;
			}

			return $this->tradingModel->getSettings()->getValues();
		}

		if ($this->businessModel->isNew())
		{
			$migrator = new OptionsMigrator();
			$values += $migrator->compile($this->businessModel->getTradingCollection(), $this->tradingModel);
			$values += $this->defaultSkuMap($values);

			return $values;
		}

		if (
			!$this->tradingModel->isNew()
			|| count(array_diff_key($values, [ 'API_KEY' => true ])) > 0
		)
		{
			return $values;
		}

		$migrator = new OptionsMigrator();
		$values += $migrator->compile($this->businessModel->getTradingCollection(), $this->tradingModel);
		$values += $this->defaultSkuMap($values);

		return $values;
	}

	private function defaultSkuMap(array $values)
	{
		if (isset($values['PRODUCT_SKU_FIELD'])) { return $values; }

		$molecula = new Component\Molecules\Business();
		$values['PRODUCT_SKU_FIELD'] = [];

		foreach ($molecula->usedIblocks([]) as $iblockId)
		{
			$values['PRODUCT_SKU_FIELD'][] = [
				'IBLOCK' => $iblockId,
				'FIELD' => 'ID',
			];
		}

		return $values;
	}

	public function getFields(array $select = [], array $item = null)
	{
		if ($this->fields === null)
		{
			$options = $this->businessModel->getOptions();
			$options->setValues($item !== null ? $item : $this->initial());

			$this->fields = $this->prepareFields($options->getFields());
		}

		return parent::getFields($select, $item);
	}

	private function applyValuesSelect(array $values, array $select)
	{
		if (empty($select)) { return $values; }

		return array_intersect_key($values, array_flip($select));
	}

	public function add(array $data)
	{
		try
		{
			$business = $this->businessModel;
			$trading = $this->tradingModel;

			$data = $this->prepareInsert($data);
			list($businessRaw, $tradingRaw) = $this->compileRaw($data, $trading);

			$business->setFields($businessRaw);
			$trading->setFields($tradingRaw);

			$apiCampaign = $this->apiCampaign($business);
			$business = $this->fulfillBusiness($business, $apiCampaign);
			$this->fulfillCampaign($business, $apiCampaign);

			$business->save();
			$business->install();

			$addResult = new Main\Entity\AddResult();
			$addResult->setId($business->getId());

			return $addResult;
		}
		catch (Main\SystemException $exception)
		{
			$updateResult = new Main\Entity\UpdateResult();
			$updateResult->addError(new Main\Error($exception->getMessage()));

			return $updateResult;
		}
	}

	private function apiCampaign(Trading\Business\Model $business)
	{
		$campaignId = $this->tradingModel->getCampaignId();
		$apiCampaigns = Api\Campaigns\Facade::campaigns($business->getOptions()->getApiAuth());
		$apiCampaign = $apiCampaigns->getItemByCampaignId($campaignId);

		if ($apiCampaign === null)
		{
			throw new Main\SystemException(self::getMessage('CAMPAIGN_NOT_FOUND', [ '#ID#' => $campaignId ]));
		}

		return $apiCampaign;
	}

	private function fulfillBusiness(Trading\Business\Model $business, Api\Campaigns\Model\Campaign $apiCampaign)
	{
		$campaignBusiness = $apiCampaign->getBusiness();
		$storedBusiness = Trading\Business\Model::loadOne([
			'filter' => [ '=ID' => $campaignBusiness->getId() ],
		]);

		if ($storedBusiness !== null)
		{
			$storedSettings = $storedBusiness->getSettings()->getValues();
			$storeSiteId = $storedBusiness->getSiteId();

			$this->tradingModel->injectBusiness($storedBusiness);

			if (empty($storedSettings))
			{
				$storedBusiness->setField('SETTINGS', $business->getField('SETTINGS'));
			}

			if ($storeSiteId === '')
			{
				$storedBusiness->setField('SITE_ID', $this->tradingModel->getSiteId());
			}

			$business = $storedBusiness;
		}
		else
		{
			$business->setField('ID', $business->getId());
		}

		$business->setField('NAME', $business->getName());

		return $business;
	}

	private function fulfillCampaign(Trading\Business\Model $business, Api\Campaigns\Model\Campaign $apiCampaign)
	{
		$campaignCollection = $business->getCampaignCollection();
		$campaign = $campaignCollection->getItemById($apiCampaign->getId());

		if ($campaign === null)
		{
			$campaignCollection->addItem(Trading\Campaign\Model::fromApi(
				$apiCampaign,
				$business->getOverlay()->getWarehouses()->getWarehouseGroups()->getItemByCampaignId($apiCampaign->getId())
			));

			$business->setField('CAMPAIGN', $campaignCollection->toArray());
		}
	}

	public function update($primary, array $data)
	{
		try
		{
			$business = $this->businessModel;
			$trading = $this->tradingModel;

			$data = $this->prepareInsert($data, $primary);
			list($businessRaw, $tradingRaw) = $this->compileRaw($data, $trading);

			$business->setFields($businessRaw);
			$trading->setFields($tradingRaw);

			$business->save();
			$business->install();

			return new Main\Entity\UpdateResult();
		}
		catch (Main\SystemException $exception)
		{
			$updateResult = new Main\Entity\UpdateResult();
			$updateResult->addError(new Main\Error($exception->getMessage()));

			return $updateResult;
		}
	}

	private function prepareInsert(array $data, $primary = null)
	{
		Environment::stamp();

		$data = $this->applyUserFieldsOnBeforeSave($this->fields, $data, $primary);
		$data = $this->sliceFieldsDependHidden($this->fields, $data);

		return $data;
	}

	private function compileRaw(array $data, Trading\Setup\Model $trading)
	{
		$rawKeys = [
			'SITE_ID' => true,
		];

		$settings = array_diff_key($data, $rawKeys);
		$businessRaw = array_intersect_key($data, $rawKeys);
		$tradingRaw = $businessRaw;

		if ($trading->getBehaviorCode() !== Trading\Service\Manager::BEHAVIOR_BUSINESS)
		{
			$businessRaw = array_diff_key($businessRaw, $tradingRaw);
		}

		$businessRaw['SETTINGS'] = array_map(static function($key, $value) {
			return [
				'NAME' => $key,
				'VALUE' => $value,
			];
		}, array_keys($settings), array_values($settings));

		return [ $businessRaw, $tradingRaw ];
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit