HEX
Server: Apache/2.4.6 (CentOS) mpm-itk/2.4.7-04 mod_fcgid/2.3.9 PHP/5.4.16
System: Linux dvm.vladweb.ru 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64
User: region-gk.ru (1016)
PHP: 7.3.33
Disabled: NONE
Upload Files
File: //home/bk/100/bitrix/modules/yenisite.core/options.php
<?php

use Bitrix\Main\Loader;
use Bitrix\Main\ModuleManager as BxMM;

CJSCore::Init(array('jquery'));

$MODULE_ID = 'yenisite.core';
global $MOD_PREFIX;
$MOD_PREFIX = $MODULE_ID . '_OPT';

if (!$USER->CanDoOperation($MODULE_ID . '_settings')) {
	$APPLICATION->AuthForm(GetMessage("ACCESS_DENIED"));
}

Loader::IncludeModule($MODULE_ID);
Loader::IncludeModule('iblock');
Loader::IncludeModule('highloadblock');

$bColorGuess = (
	BxMM::isModuleInstalled('yenisite.bitronic2pro')/* ||
	BxMM::isModuleInstalled('yenisite.shinmarketpro') ||
	BxMM::isModuleInstalled('yenisite.apparelpro')*/
);

IncludeModuleLangFile($_SERVER["DOCUMENT_ROOT"] . BX_ROOT . "/modules/main/options.php");
IncludeModuleLangFile(__FILE__);

$arTabs = array(
	array(
		"DIV" => "edit2",
		"TAB" => GetMessage("MAIN_TAB_SET"),
		"ICON" => $MODULE_ID . '_settings',
		"TITLE" => GetMessage("MAIN_TAB_TITLE_SET"),
		'TYPE' => 'options', //options || rights || user defined
	)
);

if ($bColorGuess):

// Retrieve stored values
$colorGuess = COption::GetOptionString($MODULE_ID, 'color_guess', 'N');
$colorSetts = COption::GetOptionString($MODULE_ID, 'color_setts', 'a:0:{}');
$arGuess = unserialize($colorSetts);
$colorHLID = intval($arGuess['reference']);
unset($arGuess['reference']);

// Update values from request
if (isset($_REQUEST['color_guess_hlblock']) && ($hlID = intval($_REQUEST['color_guess_hlblock'])) > 0) {
	$colorHLID = $hlID;
}
if (isset($_REQUEST['color_guess_iblock']) && is_array($_REQUEST['color_guess_iblock'])) {
	$arID = $_REQUEST['color_guess_iblock'];
	foreach ($arID as $key => $id) {
		$arID[$key] = $id = intval($id);
		if ($id < 1) unset($arID[$key]);
	}
	$arGuess = array_flip($arID);
}
foreach ($arGuess as $iblockId => &$propId) {
	if (!isset($_REQUEST['color_guess_prop_'.$iblockId])) continue;
	$propId = intval($_REQUEST['color_guess_prop_'.$iblockId]);
}
if (isset($propId)) {
	unset($propId);
}

// Fetch HighLoad Blocks
$arhlblock = array();
$rshlblock = \Bitrix\Highloadblock\HighloadBlockTable::getList(array(
	'select' => array('*')
));

while ($arHL = $rshlblock->Fetch()) {
	$dbRes = CUserTypeEntity::GetList(Array(), Array("ENTITY_ID" => 'HLBLOCK_'.$arHL['ID'], "FIELD_NAME" => 'UF_RGB'));
	$arHL['RGB'] = (!!$dbRes->Fetch());
	$arHL['SELECTED'] = ($arHL['ID'] == $colorHLID);
	$arhlblock[$arHL['ID']] = $arHL;
}

// Fetch ALL InfoBlocks
$arIBlock = array();
$arFilter = array('ACTIVE' => 'Y', 'USER_TYPE' => 'directory');
$arProps  = array();
$rsIBlock = CIBlock::GetList();
while ($arBlock = $rsIBlock->Fetch()) {
	$arIBlock[$arBlock['ID']] = $arBlock['NAME'];
	if (!array_key_exists($arBlock['ID'], $arGuess)) continue;

	// Fetch iblock directory properties
	$arFilter['IBLOCK_ID'] = $arBlock['ID'];
	$arProps[$arBlock['ID']] = array();
	$bFound = false;
	$dbRes = CIBlockProperty::GetList(array(), $arFilter);
	while ($arProp = $dbRes->Fetch()) {	
		if (isset($arhlblock[$colorHLID]) && $arProp['USER_TYPE_SETTINGS']['TABLE_NAME'] != $arhlblock[$colorHLID]['TABLE_NAME']) continue;
		$arProp['SELECTED'] = ($arGuess[$arBlock['ID']] == $arProp['ID']);
		$arProps[$arBlock['ID']][] = $arProp;
		$bFound = $arProp['SELECTED'] ?: $bFound;
	}
	if (!$bFound) {
		$arGuess[$arBlock['ID']] = 0;
	}
}

//unset non existing iblocks from settings array
foreach ($arGuess as $iblockId => $propId) {
	if (array_key_exists($iblockId, $arIBlock)) continue;
	unset($arGuess[$iblockId]);
}

endif; //$bColorGuess

$arError = array();
$tabControl = new CAdminTabControl("tabControl", $arTabs);

if ($REQUEST_METHOD == "POST" && strlen($Update . $Apply . $RestoreDefaults) > 0 && check_bitrix_sessid()) {
	if (strlen($RestoreDefaults) > 0) {
		COption::RemoveOption($MODULE_ID);
		$colorHLID = 0;
		$arGuess = $arProps = array();
		// $z = CGroup::GetList($v1 = "id", $v2 = "asc", array("ACTIVE" => "Y", "ADMIN" => "N"));
		// while ($zr = $z->Fetch())
		// 	$APPLICATION->DelGroupRight($MODULE_ID, array($zr["ID"]));
	} else {
		if ($bColorGuess):
		if (!array_key_exists($colorHLID, $arhlblock)) {
			$arError['hlblock'] = GetMessage('CORE_ERROR_HLBLOCK_ID');
		} elseif (!$arhlblock[$colorHLID]['RGB']) {
			$arError['hlblock'] = GetMessage('CORE_ERROR_HLBLOCK_RGB');
		}
		if (empty($arGuess)/* && $_REQUEST['color_guess'] === 'Y' /* do you wanna empty iblock list? */) {
			$arError['iblock'] = GetMessage('CORE_ERROR_IBLOCK_EMPTY');
		} else {
			foreach ($arGuess as $iblockId => $propId) {
				if (!empty($propId)) continue;
				$arError['prop'.$iblockId] = GetMessage('CORE_ERROR_PROP_EMPTY');
			}
		}
		if (empty($arError)) {
			$arGuess['reference'] = $colorHLID;
			COption::SetOptionString($MODULE_ID, 'color_setts', serialize($arGuess));
		}
		if ($_REQUEST['color_guess'] === 'N' || ($_REQUEST['color_guess'] === 'Y' && empty($arError))) {
			$colorGuess = $_REQUEST['color_guess'];
			COption::SetOptionString($MODULE_ID, 'color_guess', $colorGuess);
			if ($colorGuess == 'N') {
				UnRegisterModuleDependences("iblock", "OnBeforeIBlockElementAdd",    'yenisite.core', '\Yenisite\Core\ColorGuess', 'staticHandler');
				UnRegisterModuleDependences("iblock", "OnBeforeIBlockElementUpdate", 'yenisite.core', '\Yenisite\Core\ColorGuess', 'staticHandler');
			} else {
				RegisterModuleDependences("iblock", "OnBeforeIBlockElementAdd",    'yenisite.core', '\Yenisite\Core\ColorGuess', 'staticHandler');
				RegisterModuleDependences("iblock", "OnBeforeIBlockElementUpdate", 'yenisite.core', '\Yenisite\Core\ColorGuess', 'staticHandler');
			}
		} elseif ($colorGuess === 'N' && $_REQUEST['color_guess'] === 'Y') {
			$arError['cguess'] = GetMessage('CORE_ERROR_COLOR_OFF');
		}
		endif; //$bColorGuess
		
		COption::SetOptionString($MODULE_ID, 'captcha_refresh', $_REQUEST['captcha_refresh']);
		if($_REQUEST['captcha_refresh'] == 'N'){
			UnRegisterModuleDependences("main", "OnEpilog",    'yenisite.core', '\Yenisite\Core\Events\Main', 'initRefreshCaptcha');
		} else {
			RegisterModuleDependences("main", "OnEpilog",    'yenisite.core', '\Yenisite\Core\Events\Main', 'initRefreshCaptcha');
		}
	}

	if (!empty($arError)) {
		CAdminMessage::ShowMessage(array(
			'MESSAGE' => GetMessage('CORE_ERROR_SAVE'),
			'DETAILS' => GetMessage('CORE_ERROR_SAVE_DETAILS'),
			'TYPE' => 'ERROR',
			'HTML' => false
		));
	}
}

$captchaRefresh = COption::GetOptionString($MODULE_ID, 'captcha_refresh', 'Y');
?>
<form method="POST" action="<?= $APPLICATION->GetCurPage() ?>?mid=<?= htmlspecialcharsbx($mid) ?>&amp;lang=<?= LANG ?>"
	  name="core_settings" id="core_settings">
<?= bitrix_sessid_post(); ?>
<? $tabControl->Begin() ?>
<? $tabControl->BeginNextTab() ?>
<? if($bColorGuess): ?>
	<tr class="heading">
		<td colspan="2"><strong><?=GetMessage('CORE_COLOR_DETECTION')?></strong></td>
	</tr>
	<tr>
		<td valign="middle" width="50%">
			<label for="color_guess"><?=GetMessage('CORE_COLOR_AUTO_DETECTION')?>:</label>
		</td>
		<td valign="bottom" width="50%">
			<input type="hidden" name="color_guess" value="N">
			<input type="checkbox" id="color_guess" value="Y" name="color_guess"<?=($colorGuess==='Y'?' checked="checked"':'')?>>
			<span class="errortext"><?=$arError['cguess']?></span>
		</td>
	</tr>
	<tr>
		<td align="center" colspan="2"><?= BeginNote(), GetMessage('CORE_COLOR_DETECTION_INFO'), EndNote() ?></td>
	</tr>
	<tr>
		<td valign="middle" width="50%">
			<label for="color_guess_hlblock"><?=GetMessage('CORE_COLOR_HLBLOCK')?>:</label>
		</td>
		<td>
			<select id="color_guess_hlblock" name="color_guess_hlblock">
<?foreach ($arhlblock as $blockId => $arblock):
	$bSelected = ($blockId == $colorHLID);?>
				<option value="<?=$blockId?>"<?=($bSelected?' selected="selected"':'')?>
				data-rgb="<?=$arblock['RGB']?'Y':'N'?>" data-table="<?=$arblock['TABLE_NAME']?>"><?=$arblock['NAME']?></option>
<?endforeach?>
			</select>
			<a id="fillColorLink" href="<?=BX_ROOT?>/js/<?=$MODULE_ID?>/ajax/options.php?ACTION=HLBLOCK_FILL_COLORS">
				<span class="rgb-no"><?=GetMessage('CORE_COLOR_HLBLOCK_INIT')?></span>
				<span class="rgb-yes"><?=GetMessage('CORE_COLOR_HLBLOCK_UPDATE')?></span>
			</a>
			<div class="errortext"><?=$arError['hlblock']?></div>
		</td>
	</tr>
	<tr>
		<td valign="middle" width="50%">
			<label for="color_guess_iblock"><?=GetMessage('CORE_COLOR_IBLOCKS')?>:</label>
		</td>
		<td>
			<input type="hidden" name="color_guess_iblock[]" value="0">
			<select id="color_guess_iblock" name="color_guess_iblock[]" size="<?=min(10,count($arIBlock))?>" multiple="multiple">
<?foreach ($arIBlock as $blockId => $blockName):
	$bSelected = array_key_exists($blockId, $arGuess);?>
				<option value="<?=$blockId?>"<?=($bSelected?' selected="selected"':'')?>><?=$blockName?></option>
<?endforeach?>
			</select>
			<div class="errortext"><?=$arError['iblock']?></div>
		</td>
	</tr>
<?foreach ($arProps as $iblockId => $arCurProps):?>
	<tr class="colorProps">
		<td valign="middle">
			<label for="color_guess_prop_<?=$iblockId?>"><?=GetMessage('CORE_COLOR_PROPERTY', array('#IBLOCK_NAME#' => $arIBlock[$iblockId]))?></label>
		</td>
		<td valign="bottom">
			<select id="color_guess_prop_<?=$iblockId?>" name="color_guess_prop_<?=$iblockId?>">
<?	foreach ($arCurProps as $arProp):?>
				<option value="<?=$arProp['ID']?>"<?=($arProp['SELECTED']?' selected="selected"':'')?>><?=$arProp['CODE']?> :: <?=$arProp['NAME']?></option>
<?	endforeach?>
			</select>
			<span class="errortext"><?=$arError['prop'.$iblockId]?></span>
		</td>
	</tr>
<?endforeach?>
	<tr class="colorEnd">
		<td></td><td></td>
	</tr>
<? endif ?>

	<tr class="heading">
		<td colspan="2"><strong><?=GetMessage('CORE_CAPTCHA_SETTINGS')?></strong></td>
	</tr>
	<tr>
		<td valign="middle" width="50%">
			<label for="color_guess"><?=GetMessage('CORE_CAPTCHA_ENABLE_REFRESH')?>:</label>
		</td>
		<td valign="bottom" width="50%">
			<input type="hidden" name="captcha_refresh" value="N">
			<input type="checkbox" id="captcha_refresh" value="Y" name="captcha_refresh"<?=($captchaRefresh==='Y'?' checked="checked"':'')?>>
		</td>
	</tr>
<?
	$tabControl->Buttons(); ?>
	<script language="javascript">
		function confirmRestoreDefaults() {
			return confirm('<?= AddSlashes(GetMessage("MAIN_HINT_RESTORE_DEFAULTS_WARNING"))?>');
		}
	</script>
	<input type="submit" name="Update" value="<?= GetMessage("MAIN_SAVE") ?>">
	<input type="hidden" name="Update" value="Y">
	<input type="reset" name="reset" value="<?= GetMessage("MAIN_RESET") ?>">
	<input type="submit" name="RestoreDefaults" title="<?= GetMessage("MAIN_HINT_RESTORE_DEFAULTS") ?>"
		   onclick="return confirmRestoreDefaults();" value="<?= GetMessage("MAIN_RESTORE_DEFAULTS") ?>">
	<? $tabControl->End(); ?>
</form>

<script type="text/javascript">
var ajaxURL = '<?=BX_ROOT?>/js/<?=$MODULE_ID?>/ajax/options.php';

<? if($bColorGuess): ?>
function toggleButtons(enabled) {
	if (typeof toggleButtons.$obj == "undefined") {
		toggleButtons.$obj = $('input[type="submit"], input[type="reset"]');
	}
	if (typeof toggleButtons.count == "undefined") {
		toggleButtons.count = 0;
	}
	var disabled = !enabled;
	toggleButtons.count += disabled ? 1 : -1;
	if (disabled || toggleButtons.count < 1) {
		toggleButtons.$obj.prop('disabled', disabled);
	}
	if (toggleButtons.count < 0) {
		toggleButtons.count = 0;
	}
}

function updateProps(e) {
	if (typeof updateProps.timeout == "undefined") {
		updateProps.timeout = false;
	}
	if (updateProps.timeout) {
		clearTimeout(updateProps.timeout);
	} else {
		toggleButtons(false);
	}

	updateProps.timeout = setTimeout(function(){
		updateProps.timeout = false;
		BX.showWait();

		var $iblock  = $('#color_guess_iblock' ).prop('disabled', true);
		var $hlblock = $('#color_guess_hlblock').prop('disabled', true);
		var params = {
			'iblock_id': $iblock.val(),
			'reference_table': $hlblock.find(':selected').data('table')
		};
		if (params.iblock_id != null) {
			for (var i = 0; i < params.iblock_id.length; i++) {
				var iblock = params.iblock_id[i];
				var $prop = $('#color_guess_prop_'+iblock);
				if ($prop.length > 0) {
					if (typeof params.prop_id == "undefined") params.prop_id = {};
					params.prop_id[iblock] = $prop.val();
				}
			}
		}
		params.ACTION = 'GET_IBLOCK_DIRECTORY_PROPS';

		$.post(ajaxURL, params, function(data){
			if (!!data.success) {
				$('tr.colorProps').remove();
				$('tr.colorEnd').replaceWith(data.msg);
			} else {
				alert('Error: ' + data.msg);
			}
			$iblock.add($hlblock).prop('disabled', false);
			toggleButtons(true);
			BX.closeWait();
		}, 'json');
	}, 700);
}

function updateColorLink() {
	var $hl = $('#color_guess_hlblock');
	$('#fillColorLink').data('hlblock', $hl.val())
		.closest('td')
		.toggleClass('has-rgb', ($hl.find(':selected').data('rgb') === 'Y'));
}
$(document).ready(updateColorLink);

$('#color_guess_hlblock').on('change', function(){
	updateColorLink();
	updateProps();
});

$('#fillColorLink').on('click', function(e){
	e.preventDefault();
	BX.showWait();
	toggleButtons(false);

	var $_ = $(this);
	var params = $_.data();
	params['ACTION'] = 'HLBLOCK_FILL_COLORS';

	$_.css('pointer-events', 'none');
	$('#color_guess_hlblock').prop('disabled', true);

	$.post($_.attr('href'), params, function(data){
		if (!!data.success) {
			$('#color_guess_hlblock')
				.find('option[value="'+params.hlblock+'"]').data('rgb', 'Y')
				.end().prop('disabled', false);
		}
		updateColorLink();
		$_.css('pointer-events', '');
		BX.closeWait();
		toggleButtons(true);
	}, 'json');
});

$('#color_guess_iblock').on('change', updateProps);

$('#core_settings').on('reset', function(e){
	var $hlblock = $('#color_guess_hlblock');
	var hlblock = $hlblock.val();
	setTimeout(function(){
		if ($hlblock.val() != hlblock) {
			$hlblock.trigger('change');
			return;
		}
		var iblocks = $('#color_guess_iblock').val();
		if (!iblocks) {
			iblocks = [];
		}
		if (iblocks.length != $('tr.colorProps').length) {
			$('#color_guess_iblock').trigger('change');
		} else {
			for (var i = 0; i < iblocks.length; i++) {
				if($('#color_guess_prop_'+iblocks[i]).length == 1) continue;
				$('#color_guess_iblock').trigger('change');
				break;
			}
		}
	}, 1);
});
<? endif ?>

</script>