File: //var/www/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) ?>&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>