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/sproduction.datasync/admin/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/ilovecveti.ru/bitrix/modules/sproduction.datasync/admin/ajax.php
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php");
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/interface/admin_lib.php");

error_reporting(E_ERROR);

global $USER;

if (!$USER->IsAuthorized()) {
	return false;
}

CModule::IncludeModule("sproduction.datasync");
CModule::IncludeModule("iblock");
CModule::IncludeModule("sale");

use SProduction\Datasync\FileLog;
use SProduction\Datasync\SettingsFileLog;
use SProduction\Datasync\PortalPrices;
use SProduction\Datasync\StorePrices;
use SProduction\Datasync\PortalMeasures;
use SProduction\Datasync\StoreMeasures;
use SProduction\Datasync\SettingsIblocksMain;
use SProduction\Datasync\SettingsIblocksProfiles;
use SProduction\Datasync\Settings,
	SProduction\Datasync\Rest,
	SProduction\Datasync\IblockProfilesAddSync,
	SProduction\Datasync\PortalProducts,
	SProduction\Datasync\StoreProducts,
	SProduction\Datasync\CheckState,
	SProduction\Datasync\RemoteDiagAccess,
	Bitrix\Main\Context,
    Bitrix\Main\Config\Option,
	Bitrix\Main\Localization\Loc,
	Bitrix\Currency\CurrencyManager,
    Bitrix\Sale;
use SProduction\Datasync\PortalHandlers;
use SProduction\Datasync\StoreHandlers;

Loc::loadMessages(__FILE__);

$params = json_decode(file_get_contents('php://input'), true);

$action = trim($_REQUEST['action'] ?? '');
$result = [];
$result['status'] = 'error';
$result['log'] = [];
$lock_result = false;

FileLog::put('action: ' . $action . "\n" . 'params: ' . print_r($params, true));

try {
	switch ($action) {

		/**
		 * Global functions
		 */

		// Main check
		case 'main_check':
		$errors = \SProdDatasync::mainCheck();
		$errors = array_merge($errors, CheckState::getErrors());
		$warnings = CheckState::getWarnings();
		$result['errors'] = $errors;
		$result['warnings'] = $warnings;
		break;

		/**
		 * Main settings
		 */

		// Data of all blocks
		case 'settings_get':
		$main_errors = \SProdDatasync::mainCheck();
		if ( ! empty($main_errors)) {
			$result['blocks']['connect']['state']['display'] = false;
			$result['blocks']['sync']['state']['display'] = false;
			$result['blocks']['active']['state']['display'] = false;
			$result['status'] = 'ok';
		} else {
			$app_info = Rest::getAppInfo();
			$auth_info = Rest::getAuthInfo();
			$sync_active = CheckState::isSyncActive();
			// Connection settings
			$result['blocks']['connect']['state'] = [
				'display' => true,
				'active'  => true,
			];
			$site_def = SProdDatasync::getSiteDef();
			$site_def_addr = 'https://' . $site_def['SERVER_NAME'];
			$site = Settings::hasRecord("site") ? Settings::get("site") : $site_def_addr;
			$result['blocks']['connect']['fields'] = [
				'site'   => $site,
				'portal' => Settings::get("portal"),
				'app_id' => Settings::get("app_id"),
				'secret' => Settings::get("secret"),
			];
			if ($app_info && ! $auth_info) {
				$result['blocks']['connect']['fields']['auth_link'] = Rest::getAuthLink();
			}
			$result['blocks']['connect']['info'] = [
				'has_cred' => ($auth_info),
			];
			// Synchronization params
			$result['blocks']['sync']['state'] = [
				'display' => true,
				'active'  => ($app_info && $auth_info),
			];
			$result['blocks']['sync']['fields'] = [
//				'direction'   => Settings::get("direction") ? : 'stoc',
				Settings::EVENTS_MODE_KEY   => Settings::get(Settings::EVENTS_MODE_KEY),
				Settings::IBLOCK_SYNC_EXCLUDES => Settings::get(Settings::IBLOCK_SYNC_EXCLUDES),
			];
			// Synchronization active
			$result['blocks']['active']['state'] = [
				'display' => true,
				'active'  => ($app_info && $auth_info),
			];
			$result['blocks']['active']['fields'] = [
				'active' => Settings::get("active"),
			];
			///
			$result['errors'] = [];
			$result['status'] = 'ok';
		}
		break;

		// Data save
		// Connection settings (saving)
		case 'settings_connect_save':
		$fields = $params['fields'];
		$old_data = [
			'site'   => Settings::get("site"),
			'portal' => Settings::get("portal"),
			'app_id' => Settings::get("app_id"),
			'secret' => Settings::get("secret"),
		];
		$new_data = [
			'site'   => $fields["site"],
			'portal' => $fields["portal"],
			'app_id' => $fields["app_id"],
			'secret' => $fields["secret"],
		];
		// Reset placements and event handlers
		$sync_active = CheckState::isSyncActive();
		if ( ! empty(array_diff($new_data, $old_data)) && $sync_active) {
			PortalHandlers::unreg();
		}
		// Save data
		if ( ! empty($fields)) {
			foreach ($fields as $name => $value) {
				Settings::save($name, $value);
			}
		}
		$result['status'] = 'ok';

		// Reset connection data
		if ( ! empty(array_diff($new_data, $old_data))) {
			Rest::saveAuthInfo('');
		}
		break;

		// Reset connection
		case 'settings_connect_reset':
		// Reset placements and event handlers
		$sync_active = CheckState::isSyncActive();
		if ($sync_active) {
			PortalHandlers::unreg();
		}
		// Reset connection
		Rest::saveAuthInfo('');
		$result['status'] = 'ok';
		break;

		// Synchronization params (saving)
		case 'settings_sync_save':
		$old_data = [
			Settings::EVENTS_MODE_KEY   => Settings::get(Settings::EVENTS_MODE_KEY),
			Settings::IBLOCK_SYNC_EXCLUDES   => Settings::get(Settings::IBLOCK_SYNC_EXCLUDES),
//			'direction'   => Settings::get("direction"),
		];
		// Save data
		$fields = $params['fields'];
		if ( ! empty($fields)) {
			foreach ($fields as $name => $value) {
				Settings::save($name, $value);
			}
		}
		// Additional actions
		$new_data = [
			Settings::EVENTS_MODE_KEY   => Settings::get(Settings::EVENTS_MODE_KEY),
			Settings::IBLOCK_SYNC_EXCLUDES   => Settings::get(Settings::IBLOCK_SYNC_EXCLUDES),
//			'direction'   => Settings::get("direction"),
		];
//		// Refresh event handlers
//		if ($new_data['direction'] != $old_data['direction']) {
//			PortalHandlers::unreg();
//			PortalHandlers::reg();
//		}
		$result['status'] = 'ok';
		break;

		// Synchronization active (saving)
		case 'settings_active_save':
		// Save data
		$fields = $params['fields'];
		if ( ! empty($fields)) {
			foreach ($fields as $name => $value) {
				Settings::save($name, $value);
			}
		}
		$result['status'] = 'ok';
		// Additional actions
		$sync_active = CheckState::isSyncActive();
		if ($sync_active) {
			if ( ! StoreHandlers::check()) {
				StoreHandlers::reg();
			}
			if ( ! PortalHandlers::check()) {
				PortalHandlers::reg();
			}
		} else {
			if (StoreHandlers::check()) {
				StoreHandlers::unreg();
			}
			if (PortalHandlers::check()) {
				PortalHandlers::unreg();
			}
		}
		break;

//	// Connection settings (check)
//	case 'settings_connect_check':
//		$result['errors'] = [];
//		$result['status'] = 'ok';
//		break;


		/**
		 * Iblocks main settings
		 */

		// Data of all blocks
		case 'iblocks_main_get':
		$main_errors = \SProdDatasync::mainCheck();
		if ( ! empty($main_errors)) {
			$result['blocks']['prices']['state']['display'] = false;
			$result['blocks']['measures']['state']['display'] = false;
			$result['blocks']['vat']['state']['display'] = false;
			$result['status'] = 'ok';
		} else {
			// Prices types comparable table
			$result['blocks']['prices']['state'] = [
				'display' => true,
				'active'  => true,
			];
			$result['blocks']['prices']['fields'] = [
				'table_comp' => SettingsIblocksMain::getPricesCT(),
			];
			$result['blocks']['prices']['info'] = [
				'store_items' => StorePrices::getTypes(),
				'crm_items'  => PortalPrices::getTypes(),
			];
			$result['blocks']['measures']['state'] = [
				'display' => true,
				'active'  => true,
			];
			$result['blocks']['measures']['fields'] = [
				'table_comp' => SettingsIblocksMain::getMeasuresCT(),
			];
			$result['blocks']['measures']['info'] = [
				'store_items' => StoreMeasures::getTypes(),
				'crm_items'  => PortalMeasures::getTypes(),
			];
			$result['blocks']['vat']['state'] = [
				'display' => true,
				'active'  => true,
			];
			$result['blocks']['vat']['fields'] = [
				'table_comp' => SettingsIblocksMain::getVatCT(),
			];
			$result['blocks']['vat']['info'] = [
				'store_items' => \SProduction\Datasync\StoreVat::getTypes(),
				'crm_items'  => \SProduction\Datasync\PortalVat::getTypes(),
			];
			$result['status'] = 'ok';
		}
		break;

		// Data save
		// Prices params (saving)
		case 'iblocks_main_prices_save':
		case 'iblocks_main_measures_save':
		case 'iblocks_main_vat_save':
		// Save data
		$fields = $params['fields'];
		if ( ! empty($fields)) {
			foreach ($fields as $name => $value) {
				if ($name == 'table_comp') {
					$value = serialize($value);
					if ($action == 'iblocks_main_prices_save') {
						$name = 'price_types_table_comp';
					}
					elseif ($action == 'iblocks_main_measures_save') {
						$name = 'measures_table_comp';
					}
					elseif ($action == 'iblocks_main_vat_save') {
						$name = 'vat_table_comp';
					}
				}
				Settings::save($name, $value);
			}
		}
		$result['status'] = 'ok';
		// Additional actions
		break;


		/**
		 * IBlocks list
		 */

		// Iblocks list
		case 'iblocks_profiles':
		$main_errors = \SProdDatasync::mainCheck();
		if ( ! empty($main_errors)) {
			$list = [];
		} else {
			$list = SettingsIblocksProfiles::getList(true);
		}
		if ( ! \SProdDatasync::isUtf()) {
			$list = \Bitrix\Main\Text\Encoding::convertEncoding($list, "UTF-8", "Windows-1251");
		}
		$result['list'] = $list;
		$result['status'] = 'ok';
		break;


		/**
		 * Iblock profile edit
		 */

		// Information for profile viewing
		case 'iblocks_profile_info':
		$id = $params['id'];
		$main_errors = \SProdDatasync::mainCheck();
		$info = [];
		// Base info
		if (empty($main_errors)) {
			$info = \SProduction\Datasync\SettingsIblocksProfilesInfo::getAll($id);
		}
		// Blocks state default
		$result['state'] = [];
		$result['state']['main'] = ['display' => true, 'active'  => true, 'messages' => []];
		$result['state']['base'] = ['display' => true, 'active'  => false, 'messages' => []];
		$result['state']['props'] = ['display' => true, 'active'  => false, 'messages' => []];
		$result['state']['catalog'] = ['display' => true, 'active'  => false, 'messages' => []];
		$result['state']['other'] = ['display' => true, 'active'  => false, 'messages' => []];
		$result['state']['sync'] = ['display' => true, 'active'  => true, 'messages' => []];
		$result['state']['man_sync'] = ['display' => true, 'active'  => false, 'messages' => []];
		$result['state']['add_sync'] = ['display' => true, 'active'  => true, 'messages' => []];
		// Display settings
		if (SettingsIblocksProfiles::getCrmIblockId($id)) {
			$result['state']['base']['active'] = true;
			$result['state']['props']['active'] = true;
			$result['state']['catalog']['active'] = true;
			$result['state']['other']['active'] = true;
		}
		else {
			foreach (['base', 'props', 'catalog', 'other'] as $block_code) {
				$result['state'][$block_code]['messages'][] = [
					'text'    => Loc::getMessage('SP_DS_AJAX_IBLOCKS_PROFILE_INFO_CRMIBLOCK_WARN'),
					'variant' => 'warning',
					'hint'    => '',
				];
			}
		}
		// Sync blocks state
		if (SettingsIblocksProfiles::isActive($id)) {
			$result['state']['man_sync']['active'] = true;
		}
		else {
			$result['state']['sync']['messages'][] = [
				'text' => Loc::getMessage('SP_DS_AJAX_IBLOCKS_PROFILE_INFO_ACTIVE_WARN'),
				'variant' => 'warning',
				'hint' => '',
			];
		}
		$result['info'] = $info;
		$result['status'] = 'ok';
		break;

		// Profile data
		case 'iblocks_profile_get':
		$id = $params['id'];
		$main_errors = \SProdDatasync::mainCheck();
		$profile = [];
		if (empty($main_errors)) {
			$profile = SettingsIblocksProfiles::get($id);
		}
		// Data
		$result['blocks'] = $profile;
		$result['status'] = 'ok';
		break;

		// Profile update
		case 'iblocks_profile_save':
		$id = $params['id'];
		$block_code = $params['block'];
		$inp_fields = $params['fields'];
		$save_result = SettingsIblocksProfiles::save($id, $block_code, $inp_fields);
		if ($save_result->isSuccess()) {
			$result['status'] = 'ok';
		} else {
			$errors = $save_result->getErrorMessages();
			$result['message'] = $errors;
		}
		break;


		/**
		 * State of system
		 */

		// All data blocks
		case 'status_get':
		$result['blocks']['table']['state'] = [
			'display' => true,
			'active'  => true,
		];
		$result['blocks']['filelog']['state'] = [
			'display' => true,
			'active'  => true,
		];
		$result['blocks']['remote']['state'] = [
			'display' => true,
			'active'  => true,
		];
		$result['blocks']['table']['fields'] = CheckState::checkList();
		$result['blocks']['filelog']['fields']['active'] = (Settings::get("filelog") == 'Y');
		$result['blocks']['filelog']['fields']['link'] = SettingsFileLog::getLink();
		$result['blocks']['filelog']['fields']['info'] = SettingsFileLog::get();
		$result['blocks']['remote']['fields']['active'] = RemoteDiagAccess::isActive();
		$result['blocks']['remote']['fields']['link'] = RemoteDiagAccess::getLink();
		$result['blocks']['remote']['fields']['link_state'] = RemoteDiagAccess::getState();
		$result['blocks']['remote']['fields']['close_date'] = RemoteDiagAccess::getTime();
		$result['blocks']['remote']['fields']['server_time'] = date('d.m.Y H:i');
		$result['status'] = 'ok';
		break;

		case 'status_filelog_reset':
		SettingsFileLog::reset();
		$result['status'] = 'ok';
		break;

		// Table of system state
		case 'status_table_save':
		$result['status'] = 'ok';
		break;

		// File log
		case 'status_filelog_save':
		$fields = $params['fields'];
		$active = $fields['active'] ? 'Y' : 'N';
		Settings::save('filelog', $active);
		$result['status'] = 'ok';
		break;

		// File log
		case 'status_remote_save':
		$fields = $params['fields'];
		RemoteDiagAccess::setTime($fields['close_date']);
		RemoteDiagAccess::setActive($fields['active']);
		$result['status'] = 'ok';
		break;


		/**
		 * testing
		 */

		case 'test':
		$result['data'] = 123;
		$result['status'] = 'ok';
		break;

	}
} catch (Exception $e) {
	$result['status'] = 'error';
	$result['message'] = $e->getMessage().' ['.$e->getCode().']';
	FileLog::put('(ajax.php) error: ' . $e->getMessage() . ' [' . $e->getCode() . ']');
}

if (!$lock_result) {
	echo \Bitrix\Main\Web\Json::encode($result);
}

Youez - 2016 - github.com/yon3zu
LinuXploit