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/rospirotorg.ru/bitrix/modules/sproduction.datasync/admin/ |
Upload File : |
<? 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); }