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/sproduction.datasync/lib/ |
Upload File : |
<?php /** * Iblocks List Settings * * @mail support@s-production.online * @link s-production.online */ namespace SProduction\Datasync; \Bitrix\Main\Loader::includeModule('catalog'); use Bitrix\Main, Bitrix\Main\DB\Exception, Bitrix\Main\Config\Option; class SettingsIblocksProfiles { const BLOCK_MAIN = 'main'; const BLOCK_BASE = 'base'; const BLOCK_PROPS = 'props'; const BLOCK_CATALOG = 'catalog'; const BLOCK_OTHER = 'other'; const BLOCK_SYNC = 'sync'; const BLOCK_SYNC_PROCESS = 'sync_process'; /** * Get list of iblocks profiles */ public static function getList($offers=false, $onlyActive=false) { $list = []; $iblocks_list = StoreProducts::getIblocks($offers); foreach ($iblocks_list as $iblock) { $iblock_id = $iblock['ID']; if (!$onlyActive || self::isActive($iblock_id)) { $profile = self::get($iblock_id); $list[] = [ 'id' => $profile['main']['store_iblock_id'], 'name' => $profile['main']['name'], 'active' => $profile['main']['active'], ]; } } return $list; } /** * Get default settings of iblock profile */ protected static function getDefault($iblock_id, $crm_iblock_id=false) { $params = [ self::BLOCK_MAIN => [ 'active' => false, 'sort' => 0, 'name' => '', 'store_iblock_id' => $iblock_id, 'crm_iblock_id' => 0, ], self::BLOCK_BASE => [], self::BLOCK_PROPS => [], self::BLOCK_CATALOG => [], self::BLOCK_OTHER => [], self::BLOCK_SYNC => [ 'man_sync_steps' => [true, true, true, true, true] ], self::BLOCK_SYNC_PROCESS => [], ]; // Default parameters $iblock = \Bitrix\Iblock\IblockTable::getById($iblock_id)->fetch(); if ($iblock) { $params[self::BLOCK_MAIN]['name'] = $iblock['NAME']; // Default values of crm fields if ($crm_iblock_id) { $fields = SettingsIblocksProfilesInfo::getCrmFields($crm_iblock_id); $fields = SettingsIblocksProfilesInfo::addOptions($fields, $iblock_id); foreach ($params as $b_code => $b_fields) { if (isset($fields[$b_code])) { foreach ($fields[$b_code]['items'] as $field) { $params[$b_code]['comp_table'][$field['id']] = [ 'direction' => $field[SettingsIblocksProfilesInfo::FIELD_OPTION_DIRECTION], 'value' => $field[SettingsIblocksProfilesInfo::FIELD_OPTION_DEFAULT], ]; } } } } } return $params; } /** * Get the iblock profile */ public static function get($iblock_id) { $profile_params = IblocksProfilesTable::getByIblockId($iblock_id); $params = self::getDefault($iblock_id, $profile_params['crm_iblock_id'] ?? false); if ($profile_params) { $params[self::BLOCK_MAIN]['active'] = $profile_params['active']; $params[self::BLOCK_MAIN]['crm_iblock_id'] = $profile_params['crm_iblock_id']; $params[self::BLOCK_MAIN] = array_replace_recursive($params[self::BLOCK_MAIN], $profile_params['options']); $params[self::BLOCK_BASE] = array_replace_recursive($params[self::BLOCK_BASE], $profile_params[self::BLOCK_BASE]); $params[self::BLOCK_PROPS] = array_replace_recursive($params[self::BLOCK_PROPS], $profile_params[self::BLOCK_PROPS]); $params[self::BLOCK_CATALOG] = array_replace_recursive($params[self::BLOCK_CATALOG], $profile_params[self::BLOCK_CATALOG]); $params[self::BLOCK_OTHER] = array_replace_recursive($params[self::BLOCK_OTHER], $profile_params[self::BLOCK_OTHER]); $params[self::BLOCK_SYNC] = array_replace_recursive($params[self::BLOCK_SYNC], $profile_params[self::BLOCK_SYNC]); $params[self::BLOCK_SYNC_PROCESS] = array_replace_recursive($params[self::BLOCK_SYNC_PROCESS], $profile_params[self::BLOCK_SYNC_PROCESS]); } if ( ! \SProdDatasync::isUtf()) { $params = \Bitrix\Main\Text\Encoding::convertEncoding($params, 'UTF-8', 'Windows-1251'); } return $params; } /** * Get crm iblock id */ public static function isActive($iblock_id) { $profile = self::get($iblock_id); $active_value = $profile[self::BLOCK_MAIN]['active'] ?? ''; return $active_value == 'Y'; } /** * Get crm iblock id */ public static function getCrmIblockId($iblock_id) { $crm_iblock_id = 0; $profile = self::get($iblock_id); if ($profile[self::BLOCK_MAIN]['crm_iblock_id']) { $crm_iblock_id = $profile[self::BLOCK_MAIN]['crm_iblock_id']; } return $crm_iblock_id; } /** * Get search field of Store */ public static function getStoreSearchField($iblock_id) { $profile = self::get($iblock_id); return $profile[self::BLOCK_MAIN]['store_search_field'] ?? false; } /** * Get search field of CRM */ public static function getCrmSearchField($iblock_id) { $profile = self::get($iblock_id); return $profile[self::BLOCK_MAIN]['crm_search_field'] ?? false; } /** * Update the iblock profile */ public static function save($iblock_id, $block_code, $inp_fields) { // Old values of params $params_old = SettingsIblocksProfiles::get($iblock_id); // Get params $params = []; if ($block_code == self::BLOCK_MAIN) { if ( ! empty($inp_fields)) { foreach ($inp_fields as $name => $value) { switch ($name) { case 'active': case 'crm_iblock_id': $params[$name] = $value; break; default: $params['options'][$name] = $value; } } } } else { $params[$block_code] = $inp_fields; } // Try to get $profile = IblocksProfilesTable::getByIblockId($iblock_id); // Create if not exist if (empty($profile)) { $params['store_iblock_id'] = $iblock_id; $result = IblocksProfilesTable::add($params); } // Update existed else { FileLog::put('(SettingsIblocksProfiles::save) profile_id ' . $profile['id']); FileLog::put('(SettingsIblocksProfiles::save) params ' . print_r($params, 1)); $result = IblocksProfilesTable::update($profile['id'], $params); } // Set agent if ($block_code == self::BLOCK_SYNC) { if ($params[$block_code]['add_sync_schedule'] != $params_old[$block_code]['add_sync_schedule']) { IblockProfilesAddSync::set($iblock_id); } } return $result; } /** * Update the iblock profile */ public static function saveParam($iblock_id, $block_code, $field_param, $value) { $profile = self::get($iblock_id); if (isset($profile[$block_code]) && is_array($profile[$block_code])) { $profile[$block_code][$field_param] = $value; self::save($iblock_id, $block_code, $profile[$block_code]); } } /** * Update the iblock profile */ public static function getParam($iblock_id, $block_code, $field_param) { $value = false; $profile = self::get($iblock_id); if (isset($profile[$block_code]) && is_array($profile[$block_code])) { $value = $profile[$block_code][$field_param] ?? false; } return $value; } }