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/components/bitrix/sale.paysystem.settings.robokassa/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/cvetdv.ru/bitrix/components/bitrix/sale.paysystem.settings.robokassa/class.php
<?php

if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true)
{
	die();
}

use Bitrix\Main\Engine\Contract\Controllerable;
use Bitrix\Main\Error;
use Bitrix\Main\Errorable;
use Bitrix\Main\ErrorCollection;
use Bitrix\Main\Loader;
use Bitrix\Main\Localization\Loc;
use Bitrix\Sale\PaySystem;
use Bitrix\Sale\Controller\Engine\ActionFilter\CheckWritePermission;

Loc::loadLanguageFile(__FILE__);

class SalePaySystemSettingsRobokassa extends \CBitrixComponent implements Controllerable, Errorable
{
	protected ErrorCollection $errorCollection;

	protected static array $requiredModules = ['sale'];

	public function configureActions()
	{
		return [
			'save' => [
				'+prefilters' => [
					new CheckWritePermission(),
				]
			],
		];
	}

	public function onPrepareComponentParams($params)
	{
		$this->errorCollection = new ErrorCollection();

		$this->checkModules();
		$this->initResult();

		return parent::onPrepareComponentParams($params);
	}

	private function checkModules(): void
	{
		foreach (static::$requiredModules as $requiredModule)
		{
			if (!Loader::includeModule($requiredModule))
			{
				$this->errorCollection->setError(
					new Error(
						Loc::getMessage(
							'SALE_SPSR_COMPONENT_MODULE_ERROR',
							[
								'#MODULE_ID#' => $requiredModule,
							]
						)
					)
				);
			}
		}
	}

	protected function hasPermission(): bool
	{
		global $APPLICATION;
		$saleModulePermissions = $APPLICATION->GetGroupRight('sale');

		return $saleModulePermissions >= 'W';
	}

	private function printErrors(): void
	{
		foreach ($this->errorCollection as $error)
		{
			ShowError($error);
		}
	}

	private function getSettings(): array
	{
		return (new PaySystem\Robokassa\ShopSettings())->get();
	}

	private function getSettingsName(): array
	{
		return [
			'ROBOXCHANGE_SHOPLOGIN' => Loc::getMessage('SALE_SPSR_ROBOXCHANGE_SHOPID'),
			'ROBOXCHANGE_SHOPPASSWORD' => Loc::getMessage('SALE_SPSR_ROBOXCHANGE_SHOPPASSWORD'),
			'ROBOXCHANGE_SHOPPASSWORD2' => Loc::getMessage('SALE_SPSR_ROBOXCHANGE_SHOPPASSWORD2'),
		];
	}

	private function initResult(): void
	{
		$this->arResult = [
			'ENTITY_FIELDS' => [],
			'ENTITY_CONFIG' => [],
			'ENTITY_DATA' => [],
			'PAY_SYSTEM_NAME' => '',
		];
	}

	private function prepareResult(): void
	{
		$this->arResult['PAY_SYSTEM_NAME'] = Loc::getMessage('SALE_SPSR_COMPONENT_PAY_SYSTEM_NAME');

		$settings = $this->getSettings();
		$settingsName = $this->getSettingsName();

		if ($settingsName)
		{
			$this->arResult['ENTITY_FIELDS'] = $this->getEntityFields($settingsName);
			$this->arResult['ENTITY_CONFIG'] = $this->getEntityConfig($settingsName);
		}

		if ($settings)
		{
			$this->arResult['ENTITY_DATA'] = $settings;
		}
	}

	private function getEntityFields(array $settingsName): array
	{
		$result = [];

		foreach ($settingsName as $code => $name)
		{
			$result[] = [
				'title' => $name,
				'name' => $code,
				'type' => 'text',
				'editable' => true,
				'optionFlags' => 1,
			];
		}

		return $result;
	}

	private function getEntityConfig(array $settingsName): array
	{
		$settings = array_keys($settingsName);

		$elements = [];

		foreach ($settings as $code)
		{
			$elements[] = ['name' => $code];
		}

		return [
			[
				'title' => Loc::getMessage('SALE_SPSR_COMPONENT_SECTION_TITLE'),
				'name' => 'paysystem_settings',
				'type' => 'section',
				'elements' => $elements,
				'hint' => Loc::getMessage('SALE_SPSR_COMPONENT_SECTION_TITLE_HINT'),
				'data' => [
					'isChangeable' => true,
					'isRemovable' => false,
				],
			],
		];
	}

	public function executeComponent()
	{
		if (!$this->hasPermission())
		{
			$this->errorCollection->setError(new Error(Loc::getMessage('SALE_SPSR_COMPONENT_ACCESS_DENIED_ERROR')));
		}

		if (!$this->errorCollection->isEmpty())
		{
			$this->printErrors();
			return;
		}

		$this->prepareResult();

		$this->includeComponentTemplate();
	}

	/**
	 * Getting array of errors.
	 * @return Error[]
	 */
	public function getErrors()
	{
		return $this->errorCollection->toArray();
	}

	/**
	 * Getting once error with the necessary code.
	 * @param string $code Code of error.
	 * @return Error
	 */
	public function getErrorByCode($code)
	{
		return $this->errorCollection->getErrorByCode($code);
	}

	/**
	 * @return void
	 */
	public function saveAction(): array
	{
		$shopSettings = new PaySystem\Robokassa\ShopSettings();
		$fields = $this->request->get('data') ?: [];

		$currentSettings = $this->getSettings();
		if ($currentSettings)
		{
			$preparedSettings = $this->prepareSettings($fields, $currentSettings);
			$saveResult = $shopSettings->update($preparedSettings);
		}
		else
		{
			$preparedSettings = $this->prepareSettings($fields);
			$saveResult = $shopSettings->add($preparedSettings);
		}

		if ($saveResult->isSuccess())
		{
			$this->prepareResult();

			return [
				'ENTITY_DATA' => $this->arResult['ENTITY_DATA'],
			];
		}

		$this->errorCollection->add($saveResult->getErrors());
		return [];
	}

	private function prepareSettings(array $settings, array $currentSettings = []): array
	{
		$result = [];

		$settingsCodeList = PaySystem\Robokassa\ShopSettings::getSettingsCoded();
		foreach ($settingsCodeList as $settingsCode)
		{
			if (isset($settings[$settingsCode]))
			{
				$result[$settingsCode] = trim($settings[$settingsCode]);
			}
		}

		foreach ($currentSettings as $code => $value)
		{
			if (!isset($result[$code]))
			{
				$result[$code] = $value;
			}
		}

		return $result;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit