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/rospirotorg.ru/bitrix/modules/grain.iiko/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/grain.iiko/options.php
<?php

use Bitrix\Main\Localization\Loc;
use Bitrix\Main\Config\Option;
use Bitrix\Main\Loader;
use Bitrix\Main\SiteTable;
use Grain\Iiko\Rest;

$module_id = 'grain.iiko';

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

Loader::includeModule($module_id);
Loader::includeModule('iblock');
Loader::includeModule('currency');

if(Loader::includeSharewareModule("grain.iiko")==Loader::MODULE_DEMO)
	require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/grain.iiko/install/trial/trial.php");

$request = \Bitrix\Main\HttpApplication::getInstance()->getContext()->getRequest();

/* agent stuff */

$agentResult = \CAgent::GetList(array(), array('NAME'=>'\Grain\Iiko\Restaurants::sync();'));
$agentRestaurants=$agentResult->fetch();
if(!!$agentRestaurants && $request->get('agent_refresh')=='restaurants')
{
	\CAgent::Update($agentRestaurants['ID'], array("NEXT_EXEC"=>new \Bitrix\Main\Type\DateTime()));
	$agentRestaurants=\CAgent::GetByID($agentRestaurants['ID'])->fetch();
}
$refreshNote = '<a href="#" onclick="grain_iiko_agent_refresh(\'restaurants\'); this.onclick=\'\'; return false;">'.Loc::getMessage('GRAIN_IIKO_OPTIONS_AGENT_REFRESH').'</a>';
if(!!$agentRestaurants['NEXT_EXEC'] && ($nextExec = new \Bitrix\Main\Type\DateTime($agentRestaurants['NEXT_EXEC'])))
{
	if(($nextExec->getTimestamp()-time())<120)
		$refreshNote = Loc::getMessage('GRAIN_IIKO_OPTIONS_AGENT_WAITING');
	elseif($agentRestaurants['LAST_EXEC'] && ($lastExec = new \Bitrix\Main\Type\DateTime($agentRestaurants['LAST_EXEC'])) && (time()-$lastExec->getTimestamp())<=120)
		$refreshNote = Loc::getMessage('GRAIN_IIKO_OPTIONS_AGENT_RELOAD_PAGE',array('#URL#'=>$APPLICATION->GetCurPageParam("",array("agent_refresh"))));
}
$agentRestaurantsNote = Loc::getMessage('GRAIN_IIKO_OPTIONS_RESTAURANTS_SYNC',array(
	'#PREV#' => $agentRestaurants['LAST_EXEC']?$agentRestaurants['LAST_EXEC']:Loc::getMessage('GRAIN_IIKO_OPTIONS_SYNC_NO'),
	'#NEXT#' => $agentRestaurants['NEXT_EXEC']?$agentRestaurants['NEXT_EXEC']:Loc::getMessage('GRAIN_IIKO_OPTIONS_SYNC_NO'),
	'#LOG_URL#' => '/bitrix/admin/event_log.php?PAGEN_1=1&SIZEN_1=20&lang='.LANGUAGE_ID.'&set_filter=Y&adm_filter_applied=0&find_type=audit_type_id&find_audit_type%5B0%5D=GRAIN_IIKO_RESTAURANTS_SYNC',
	'#AGENT_URL#' => '/bitrix/admin/agent_list.php?PAGEN_1=1&SIZEN_1=20&lang='.LANGUAGE_ID.'&set_filter=Y&adm_filter_applied=0&find=%5CGrain%5CIiko%5CRestaurants%3A%3Async%28%29%3B&find_type=name',
	'#REFRESH#' => $refreshNote,
));

$agentResult = \CAgent::GetList(array(), array('NAME'=>'\Grain\Iiko\Dishes::sync();'));
$agentDishes=$agentResult->fetch();
if(!!$agentDishes && $request->get('agent_refresh')=='dishes')
{
	\CAgent::Update($agentDishes['ID'], array("NEXT_EXEC"=>new \Bitrix\Main\Type\DateTime()));
	$agentDishes=\CAgent::GetByID($agentDishes['ID'])->fetch();
}
$refreshNote = '<a href="#" onclick="grain_iiko_agent_refresh(\'dishes\'); this.onclick=\'\'; return false;">'.Loc::getMessage('GRAIN_IIKO_OPTIONS_AGENT_REFRESH').'</a>';
if(!!$agentDishes['NEXT_EXEC'] && ($nextExec = new \Bitrix\Main\Type\DateTime($agentDishes['NEXT_EXEC'])))
{
	if(($nextExec->getTimestamp()-time())<120)
		$refreshNote = Loc::getMessage('GRAIN_IIKO_OPTIONS_AGENT_WAITING');
	elseif($agentDishes['LAST_EXEC'] && ($lastExec = new \Bitrix\Main\Type\DateTime($agentDishes['LAST_EXEC'])) && (time()-$lastExec->getTimestamp())<=120)
		$refreshNote = Loc::getMessage('GRAIN_IIKO_OPTIONS_AGENT_RELOAD_PAGE',array('#URL#'=>$APPLICATION->GetCurPageParam("",array("agent_refresh"))));
}
$agentDishesNote = Loc::getMessage('GRAIN_IIKO_OPTIONS_DISHES_SYNC',array(
	'#PREV#' => $agentDishes['LAST_EXEC']?$agentDishes['LAST_EXEC']:Loc::getMessage('GRAIN_IIKO_OPTIONS_SYNC_NO'),
	'#NEXT#' => $agentDishes['NEXT_EXEC']?$agentDishes['NEXT_EXEC']:Loc::getMessage('GRAIN_IIKO_OPTIONS_SYNC_NO'),
	'#LOG_URL#' => '/bitrix/admin/event_log.php?PAGEN_1=1&SIZEN_1=20&lang='.LANGUAGE_ID.'&set_filter=Y&adm_filter_applied=0&find_type=audit_type_id&find_audit_type%5B0%5D=GRAIN_IIKO_DISHES_SYNC',
	'#AGENT_URL#' => '/bitrix/admin/agent_list.php?PAGEN_1=1&SIZEN_1=20&lang='.LANGUAGE_ID.'&set_filter=Y&adm_filter_applied=0&find=%5CGrain%5CIiko%5CDishes%3A%3Async%28%29%3B&find_type=name',
	'#REFRESH#' => $refreshNote,
));

$agentResult = \CAgent::GetList(array(), array('NAME'=>'\Grain\Iiko\Location::sync(%);'));
$agentLocations=$agentResult->fetch();
if(!!$agentLocations && $request->get('agent_refresh')=='locations')
{
	\CAgent::Update($agentLocations['ID'], array("NEXT_EXEC"=>new \Bitrix\Main\Type\DateTime()));
	$agentLocations=\CAgent::GetByID($agentLocations['ID'])->fetch();
}
$refreshNote = '<a href="#" onclick="grain_iiko_agent_refresh(\'locations\'); this.onclick=\'\'; return false;">'.Loc::getMessage('GRAIN_IIKO_OPTIONS_AGENT_REFRESH').'</a>';
if(!!$agentLocations['NEXT_EXEC'] && ($nextExec = new \Bitrix\Main\Type\DateTime($agentLocations['NEXT_EXEC'])))
{
	if(($nextExec->getTimestamp()-time())<120)
		$refreshNote = Loc::getMessage('GRAIN_IIKO_OPTIONS_AGENT_WAITING');
	elseif($agentLocations['LAST_EXEC'] && ($lastExec = new \Bitrix\Main\Type\DateTime($agentLocations['LAST_EXEC'])) && (time()-$lastExec->getTimestamp())<=120)
		$refreshNote = Loc::getMessage('GRAIN_IIKO_OPTIONS_AGENT_RELOAD_PAGE',array('#URL#'=>$APPLICATION->GetCurPageParam("",array("agent_refresh"))));
}
$agentLocationsNote = Loc::getMessage('GRAIN_IIKO_OPTIONS_ADDRESS_SYNC',array(
	'#PREV#' => $agentLocations['LAST_EXEC']?$agentLocations['LAST_EXEC']:Loc::getMessage('GRAIN_IIKO_OPTIONS_ADDRESS_SYNC_NO'),
	'#NEXT#' => $agentLocations['NEXT_EXEC']?$agentLocations['NEXT_EXEC']:Loc::getMessage('GRAIN_IIKO_OPTIONS_ADDRESS_SYNC_NO'),
	'#LOG_URL#' => '/bitrix/admin/event_log.php?PAGEN_1=1&SIZEN_1=20&lang='.LANGUAGE_ID.'&set_filter=Y&adm_filter_applied=0&find_type=audit_type_id&find_audit_type%5B0%5D=GRAIN_IIKO_LOCATION_SYNC',
	'#AGENT_URL#' => '/bitrix/admin/agent_list.php?PAGEN_1=1&SIZEN_1=20&lang='.LANGUAGE_ID.'&set_filter=Y&adm_filter_applied=0&find=%5CGrain%5CIiko%5CLocation%3A%3Async%28%25%29%3B&find_type=name',
	'#REFRESH#' => $refreshNote,
));
?>
<script>
var grain_iiko_timer_id = false;
grain_iiko_agent_refresh = function(agentToRefresh) {
	if(grain_iiko_timer_id)
		clearTimeout(grain_iiko_timer_id);
	var url = '<?=$APPLICATION->GetCurPageParam()?>';
	url += '&agent_refresh='+(agentToRefresh?agentToRefresh:'Y');
	BX.ajax.loadJSON(
		url,
		function(data){
			BX('grain_iiko_restaurants_sync').innerHTML = data.restaurants;
			BX('grain_iiko_dishes_sync').innerHTML = data.dishes;
			BX('grain_iiko_locations_sync').innerHTML = data.locations;
			grain_iiko_timer_id = setTimeout(grain_iiko_agent_refresh, 10000);
		},
		function(p){
			var mess = '<?=Loc::getMessage('GRAIN_IIKO_OPTIONS_AGENT_REFRESH_FAIL',array('#URL'=>$APPLICATION->GetCurPageParam("",array("agent_refresh"))))?>';
			BX('grain_iiko_restaurants_sync').innerHTML = mess;
			BX('grain_iiko_dishes_sync').innerHTML = mess;
			BX('grain_iiko_locations_sync').innerHTML = mess;			
			console.log('failure',p);
		}
	);		
}
grain_iiko_timer_id = setTimeout(grain_iiko_agent_refresh, 10000);
</script>
<?php
if($request->get('agent_refresh'))
{
	$APPLICATION->RestartBuffer();
	echo \Bitrix\Main\Web\Json::encode(array(
		'restaurants' => $agentRestaurantsNote,
		'dishes' => $agentDishesNote,
		'locations' => $agentLocationsNote,
	));
	die();
}	

/* /agent stuff */

$errors = array();

$sites = array();
$rsSites = \Bitrix\Main\SiteTable::getList();
while($site = $rsSites->fetch())
	$sites[$site['LID']] = $site['NAME'].' ['.$site['LID'].']';

$currencyList = \Bitrix\Currency\CurrencyManager::getCurrencyList();

$iblocks = array(""=>"");
$iblockResult = \Bitrix\Iblock\IblockTable::getList(array(
	'order' => array('IBLOCK_TYPE_ID'=>'ASC','SORT'=>'ASC','ID'=>'DESC'),
));

while($iblock=$iblockResult->fetch())
{
	$iblockSiteResult = \Bitrix\Iblock\IblockSiteTable::getList(array(
		'filter' => array('=IBLOCK_ID'=>$iblock['ID']),
	));
	$iblockSites=array();
	while($iblockSite=$iblockSiteResult->fetch())
		$iblockSites[] = $iblockSite['SITE_ID'];
	$iblocks[$iblock['ID']] = '['.$iblock['ID'].', '.$iblock['IBLOCK_TYPE_ID'].', '.implode(', ',$iblockSites).'] '.$iblock['NAME'];
}

if(Loader::includeModule('catalog'))
{
	$rsGroup = \Bitrix\Catalog\GroupTable::getList();
	$priceGrous = array();
	while($arGroup=$rsGroup->fetch())
	{
		$priceGroups[$arGroup['ID']] = '['.$arGroup['ID'].', '.$arGroup['XML_ID'].'] '.$arGroup['NAME'];
	}
}

$aTabs = array();

$tab = 	array(
	'DIV' => 'edit1',
	'TAB' => Loc::getMessage('GRAIN_IIKO_OPTIONS_TAB1_TAB'),
	'TITLE' => Loc::getMessage('GRAIN_IIKO_OPTIONS_TAB1_TITLE'),
);

$organizationsByAccounts = Rest::getOrganizations();

$hasLoginData = false;

if(Loader::includeModule('grain.iikomulti'))
{
	$tab['OPTIONS_HTML'] = \Grain\IikoMulti\Auth::getSettingsHtml($organizationsByAccounts);
	$tab['OPTIONS_SAVE'] = 'grain.iikomulti';
	$hasLoginData = !!$organizationsByAccounts;
}
else
{
	$tab['OPTIONS'] = array(
		array('api_server', Loc::getMessage('GRAIN_IIKO_OPTIONS_SERVER'),
			'',
			array('selectbox', Rest::getServerList())),
		array('api_login', Loc::getMessage('GRAIN_IIKO_OPTIONS_LOGIN'),
			'',
			array('text', 25)),
		array('api_password', Loc::getMessage('GRAIN_IIKO_OPTIONS_PASSWORD'),
			'',
			array('text', 25)),
	);
	if(Option::get($module_id, 'api_login') && (Option::get($module_id, 'api_password') || $organizationsByAccounts[0]['account']['API_VERSION']==1))
	{
		$hasLoginData = true;
		if(!(is_array($organizationsByAccounts[0]['result']) && count($organizationsByAccounts[0]['result'])>0))
			$errors[] = $organizationsByAccounts[0]['error']?$organizationsByAccounts[0]['error']:Loc::getMessage('GRAIN_IIKO_OPTIONS_ERROR_NO_DATA');				
		if($errors)
			$tab['OPTIONS'][] = array('note' => Loc::getMessage('GRAIN_IIKO_OPTIONS_ERRORS').':<br>'.implode('<br>',$errors));
		if($errors && !Rest::checkAccess($organizationsByAccounts[0]['account']))
			$tab['OPTIONS'][] = array('note' => Loc::getMessage('GRAIN_IIKO_OPTIONS_NO_API_ACCESS'));	
	}
}

if($request->get('debug')=='rest')
{
	echo "<pre>"; print_r($organizationsByAccounts); echo "</pre>";
}

$aTabs[] = $tab;

if(!$errors && $hasLoginData)
{
	$tab = 	array(
		'DIV' => 'edit2',
		'TAB' => Loc::getMessage('GRAIN_IIKO_OPTIONS_TAB2_TAB'),
		'TITLE' => Loc::getMessage('GRAIN_IIKO_OPTIONS_TAB2_TITLE'),
		'OPTIONS' => array(
			array('sync_restaurants', Loc::getMessage('GRAIN_IIKO_OPTIONS_RESTAURANTS_SYNC_ON'),
					'',
				array('checkbox')),
			array('sync_restaurants_inactive', Loc::getMessage('GRAIN_IIKO_OPTIONS_RESTAURANTS_SYNC_INACTIVE'),
					'',
				array('checkbox')),
			array('sync_restaurants_name', Loc::getMessage('GRAIN_IIKO_OPTIONS_RESTAURANTS_SYNC_NAME'),
					'',
				array('checkbox')),
			array('sync_restaurants_do_not_change_code', Loc::getMessage('GRAIN_IIKO_OPTIONS_RESTAURANTS_SYNC_DO_NOT_CHANGE_CODE'),
					'',
				array('checkbox')),
			array('restaurants_iblock_id', Loc::getMessage('GRAIN_IIKO_OPTIONS_RESTAURANTS_SYNC_IBLOCK'),
				'',
				array('selectbox',$iblocks)),
			array('note' => '<span id="grain_iiko_restaurants_sync">'.$agentRestaurantsNote.'</span>'),
		)
	);

	if(($restaurantsIblockId = intval(Option::get($module_id,'restaurants_iblock_id')))>0)
	{
		$tab['OPTIONS'][] = Loc::getMessage('GRAIN_IIKO_OPTIONS_RESTAURANTS_SYNC_STAT_HEAD');

		$result = \Bitrix\Iblock\ElementTable::getList(array(
			'filter' => array('IBLOCK_ID'=>$restaurantsIblockId),
			'select' => array('CNT'),
			'runtime' => array(
				new \Bitrix\Main\Entity\ExpressionField('CNT', 'COUNT(*)'),
			),
		));
		$restaurantCount=0;
		if($arRow = $result->Fetch())
			$restaurantCount = intval($arRow['CNT']);
		$result = \Bitrix\Iblock\ElementTable::getList(array(
			'filter' => array('IBLOCK_ID'=>$restaurantsIblockId,'ACTIVE'=>'Y'),
			'select' => array('CNT'),
			'runtime' => array(
				new \Bitrix\Main\Entity\ExpressionField('CNT', 'COUNT(*)'),
			),
		));
		$restaurantActiveCount=0;
		if($arRow = $result->Fetch())
			$restaurantActiveCount = intval($arRow['CNT']);

		$tab['OPTIONS'][] = array('note' => '<span onclick="if(event.ctrlKey || event.metaKey) location.href=\''.$APPLICATION->GetCurPageParam('',array('debug')).'&debug=rest'.'\'">'.Loc::getMessage('GRAIN_IIKO_OPTIONS_RESTAURANTS_SYNC_STAT',array(
			'#RESTAURANTS#' => $restaurantCount,
			'#RESTAURANTS_ACTIVE#' => $restaurantActiveCount,
		)).'</span>');
		
	}

	$aTabs[] = $tab;

	$tab = 	array(
		'DIV' => 'edit3',
		'TAB' => Loc::getMessage('GRAIN_IIKO_OPTIONS_TAB3_TAB'),
		'TITLE' => Loc::getMessage('GRAIN_IIKO_OPTIONS_TAB3_TITLE'),
		'OPTIONS' => array(),
	);

	$tab['OPTIONS'][] = array('note' => '<span id="grain_iiko_dishes_sync">'.$agentDishesNote.'</span>');
	
	$restaurants = array();

	if($restaurantsIblockId)
	{
		$result = \Bitrix\Iblock\ElementTable::getList(array(
			'filter' => array('IBLOCK_ID'=>$restaurantsIblockId),
			'select' => array('NAME','ID','XML_ID'),
		));
		while($arRow = $result->Fetch())
			$restaurants[] = $arRow;

		$i=0;
		foreach($restaurants as $restaurant)
		{
			$terminalGroups = array();
			$deliveryTerminalResult = \Grain\Iiko\DeliveryTerminalTable::getList(array(
				'filter' => array(
					'ORGANIZATION_ID' => $restaurant['XML_ID'],
				),
			));
			while($terminalGroup=$deliveryTerminalResult->fetch())
			{
				$terminalGroups[$terminalGroup['DELIVERY_TERMINAL_ID']] = $terminalGroup['NAME'];
			}
			
			$tab['OPTIONS'][] = $restaurant['NAME'];
			$tab['OPTIONS'][] = array('sync_dishes_'.$restaurant['ID'], Loc::getMessage('GRAIN_IIKO_OPTIONS_DISHES_SYNC_ON'),
					'',
				array('checkbox'));
			$tab['OPTIONS'][] = array('sync_dishes_inactive_'.$restaurant['ID'], Loc::getMessage('GRAIN_IIKO_OPTIONS_DISHES_SYNC_INACTIVE'),
					'',
				array('checkbox'));
			$tab['OPTIONS'][] = array('sync_dishes_sections_'.$restaurant['ID'], Loc::getMessage('GRAIN_IIKO_OPTIONS_DISHES_SYNC_SECTIONS_ON'),
					'',
				array('checkbox'));
			$tab['OPTIONS'][] = array('sync_dishes_sections_type_'.$restaurant['ID'], Loc::getMessage('GRAIN_IIKO_OPTIONS_DISHES_SYNC_SECTIONS_TYPE'),
					'',
				array('selectbox',array(
					'group' => Loc::getMessage('GRAIN_IIKO_OPTIONS_DISHES_SYNC_SECTIONS_TYPE_GROUP'),
					'category' => Loc::getMessage('GRAIN_IIKO_OPTIONS_DISHES_SYNC_SECTIONS_TYPE_CATEGORY'),
				)));
			$tab['OPTIONS'][] = array('sync_dishes_sections_inactive_'.$restaurant['ID'], Loc::getMessage('GRAIN_IIKO_OPTIONS_DISHES_SYNC_SECTIONS_INACTIVE'),
					'',
				array('checkbox'));
			$tab['OPTIONS'][] = array('sync_dishes_remove_action_'.$restaurant['ID'], Loc::getMessage('GRAIN_IIKO_OPTIONS_DISHES_SYNC_REMOVE_ACTION'),
					'',
				array('selectbox',array(
					'delete' => Loc::getMessage('GRAIN_IIKO_OPTIONS_DISHES_SYNC_REMOVE_ACTION_DELETE'),
					'deactivate' => Loc::getMessage('GRAIN_IIKO_OPTIONS_DISHES_SYNC_REMOVE_ACTION_DEACTIVATE'),
					'no' => Loc::getMessage('GRAIN_IIKO_OPTIONS_DISHES_SYNC_REMOVE_ACTION_NO'),					
				)));
			$tab['OPTIONS'][] = array('sync_dishes_blocked_section_names_'.$restaurant['ID'], Loc::getMessage('GRAIN_IIKO_OPTIONS_DISHES_SYNC_BLOCKED_SECTION_NAMES'),
				'',
				array('textarea', 3,50));
			$tab['OPTIONS'][] = array('sync_dishes_tags_'.$restaurant['ID'], Loc::getMessage('GRAIN_IIKO_OPTIONS_DISHES_SYNC_TAGS'),
					'',
				array('checkbox'));
			$tab['OPTIONS'][] = array('sync_dishes_use_stop_list_'.$restaurant['ID'], Loc::getMessage('GRAIN_IIKO_OPTIONS_DISHES_SYNC_USE_STOP_LIST'),
					'',
				array('checkbox'));
			$stopListTerminalGroups = Option::get($module_id,'sync_dishes_stop_list_terminal_groups_'.$restaurant['ID']);
			$stopListTerminalGroups = is_string($stopListTerminalGroups)?explode(',',$stopListTerminalGroups):array();
			
			foreach($stopListTerminalGroups as $terminalGroupId)
				if(strlen($terminalGroupId)>0 && !isset($terminalGroups[$terminalGroupId]))
					$terminalGroups[$terminalGroupId] = "deleted";
			$tab['OPTIONS'][] = array('sync_dishes_stop_list_terminal_groups_'.$restaurant['ID'], Loc::getMessage('GRAIN_IIKO_OPTIONS_DISHES_SYNC_STOP_LIST_TERMINAL_GROUPS'),
					'',
					array('multiselectbox',$terminalGroups));			
			$tab['OPTIONS'][] = array('dishes_iblock_id_'.$restaurant['ID'], Loc::getMessage('GRAIN_IIKO_OPTIONS_DISHES_SYNC_IBLOCK'),
				'',
				array('selectbox',$iblocks));
			if(Loader::includeModule('catalog'))
			{
				$tab['OPTIONS'][] = array('dishes_price_group_'.$restaurant['ID'], Loc::getMessage('GRAIN_IIKO_OPTIONS_DISHES_SYNC_PRICEGROUP',array('#REST#'=>$restaurant['NAME'])),
					'',
					array('selectbox',$priceGroups));
			}
			$tab['OPTIONS'][] = array('dishes_currency_'.$restaurant['ID'], Loc::getMessage('GRAIN_IIKO_OPTIONS_DISHES_SYNC_CURRENCY',array('#REST#'=>$restaurant['NAME'])),
				'',
				array('selectbox',$currencyList));				
			$tab['OPTIONS'][] = array('', '<b>'.Loc::getMessage('GRAIN_IIKO_OPTIONS_DISHES_SYNC_DO_NOT_CHANGE').':</b>',
				'', // <- html in case of 'statichtml'
				array('statichtml', ''));
			$tab['OPTIONS'][] = array('sync_dishes_do_not_change_code_'.$restaurant['ID'], Loc::getMessage('GRAIN_IIKO_OPTIONS_DISHES_SYNC_DO_NOT_CHANGE_CODE'),
					'',
				array('checkbox'));
			$tab['OPTIONS'][] = array('sync_dishes_do_not_change_sort_'.$restaurant['ID'], Loc::getMessage('GRAIN_IIKO_OPTIONS_DISHES_SYNC_DO_NOT_CHANGE_SORT'),
					'',
				array('checkbox'));
			$tab['OPTIONS'][] = array('sync_dishes_do_not_change_pictures_'.$restaurant['ID'], Loc::getMessage('GRAIN_IIKO_OPTIONS_DISHES_SYNC_DO_NOT_CHANGE_PICTURES'),
					'',
				array('checkbox'));
			$tab['OPTIONS'][] = array('sync_dishes_do_not_change_description_'.$restaurant['ID'], Loc::getMessage('GRAIN_IIKO_OPTIONS_DISHES_SYNC_DO_NOT_CHANGE_DESCRIPTION'),
					'',
				array('checkbox'));
			$tab['OPTIONS'][] = array('sync_dishes_do_not_change_weight_'.$restaurant['ID'], Loc::getMessage('GRAIN_IIKO_OPTIONS_DISHES_SYNC_DO_NOT_CHANGE_WEIGHT'),
					'',
				array('checkbox'));			
			if($request->get('debug')=='dish'.$i)
			{
				$dishes = Rest::getDishes($restaurant['ID']);
				echo 'Groups: '.(is_array($dishes['result']['groups'])?count($dishes['result']['groups']):'no data')."<br>";
				echo 'Categories: '.(is_array($dishes['result']['productCategories'])?count($dishes['result']['productCategories']):'no data')."<br>";
				echo 'Products: '.(is_array($dishes['result']['products'])?count($dishes['result']['products']):'no data')."<br>";
				echo "<pre>"; print_r($dishes); echo "</pre>";
			}
			elseif($request->get('debug')=='loc'.$i)
			{
				$result = Rest::getCities($restaurant['ID']);
				$resultTerminals = Rest::getDeliveryTerminals($restaurant['ID']);
				$c = array(
					'city' => 0,
					'cityDeleted' => 0,
					'street' => 0,
					'streetDeleted' => 0,
				);
				if(isset($result['result']['cities']))
				{
					foreach($result['result']['cities'] as $cityByOrganization)
					{
						if(isset($cityByOrganization['items']))
						{
							foreach($cityByOrganization['items'] as $city)
							{
								if(isset($city['streets']))
								{
									foreach($city['streets'] as $street)
									{
										$c['street']++;
										if($street['isDeleted'])
											$c['streetDeleted']++;
									}
								}
								$c['city']++;
								if($city['isDeleted'])
									$c['cityDeleted']++;
							}
						}
					}
				}
				echo 'Delivery Terminals: '.count($resultTerminals['result']['terminalGroups'])."<br>";
				echo 'Cities: '.$c['city'].($c['cityDeleted']?" (".$c['cityDeleted']." deleted)":"")."<br>";
				echo 'Streets: '.$c['street'].($c['streetDeleted']?" (".$c['streetDeleted']." deleted)":"")."<br><br>";
				echo 'Delivery terminals:<br>';	
				echo "<pre>"; print_r($resultTerminals); echo "</pre>";
				echo '<br>Cities and streets:<br>';	
				echo "<pre>"; print_r($result); echo "</pre>";
			}
			
			$i++;
		}
		
		$note = '';
		
		$i=0;
		foreach($restaurants as $restaurant)
		{	
			if(!($dishesIblockId = intval(Option::get($module_id,'dishes_iblock_id_'.$restaurant['ID'])))>0) 
			{
				$i++;
				continue;
			}
			$result = \Bitrix\Iblock\ElementTable::getList(array(
				'filter' => array('IBLOCK_ID'=>$dishesIblockId),
				'select' => array('CNT'),
				'runtime' => array(
					new \Bitrix\Main\Entity\ExpressionField('CNT', 'COUNT(*)'),
				),
			));
			$dishesCount=0;
			if($arRow = $result->Fetch())
				$dishesCount = intval($arRow['CNT']);
			$result = \Bitrix\Iblock\ElementTable::getList(array(
				'filter' => array('IBLOCK_ID'=>$dishesIblockId,'ACTIVE'=>'Y'),
				'select' => array('CNT'),
				'runtime' => array(
					new \Bitrix\Main\Entity\ExpressionField('CNT', 'COUNT(*)'),
				),
			));
			$dishesActiveCount=0;
			if($arRow = $result->Fetch())
				$dishesActiveCount = intval($arRow['CNT']);
		
			$note .= ($note?'<br>':'').Loc::getMessage('GRAIN_IIKO_OPTIONS_DISHES_SYNC_STAT',array(
				'#NAME#' => '<span onclick="if(event.ctrlKey || event.metaKey) location.href=\''.$APPLICATION->GetCurPageParam('',array('debug')).'&debug=dish'.$i.'\'">'.$restaurant['NAME'].'</span>',
				'#DISHES#' => $dishesCount,
				'#DISHES_ACTIVE#' => $dishesActiveCount,
			));
			$i++;
		}
		if($note)
		{
			$tab['OPTIONS'][] = Loc::getMessage('GRAIN_IIKO_OPTIONS_DISHES_SYNC_STAT_HEAD');
			$tab['OPTIONS'][] = array('note' => $note);
		}
	}
	
	$aTabs[] = $tab;
			
	$tab = 	array(
		'DIV' => 'edit4',
		'TAB' => Loc::getMessage('GRAIN_IIKO_OPTIONS_TAB4_TAB'),
		'TITLE' => Loc::getMessage('GRAIN_IIKO_OPTIONS_TAB4_TITLE'),
		'OPTIONS' => array(
			array('note' => '<span id="grain_iiko_locations_sync">'.$agentLocationsNote.'</span>'),
		)
	);

	$tab['OPTIONS'][] = array('location_total_queries_max', Loc::getMessage('GRAIN_IIKO_OPTIONS_ADDRESS_SYNC_LOCATION_TOTAL_QUERIES_MAX'),
		'',
		array('text', 6));	

	$tab['OPTIONS'][] = Loc::getMessage('GRAIN_IIKO_OPTIONS_ADDRESS_SYNC_ALL_TERMINAL_HEAD');
	$tab['OPTIONS'][] = array('note'=>Loc::getMessage('GRAIN_IIKO_OPTIONS_ADDRESS_SYNC_ALL_TERMINAL_NOTE'));
	foreach($restaurants as $restaurant)
	{	
		if(!$restaurant['XML_ID'])
			continue;
		$tab['OPTIONS'][] = array('all_terminal_groups_'.$restaurant['ID'], $restaurant['NAME'],
			'',
			array('checkbox'));	
	}
		
	$tab['OPTIONS'][] = Loc::getMessage('GRAIN_IIKO_OPTIONS_ADDRESS_SYNC_STAT_HEAD');
	$i=0;
	foreach($restaurants as $restaurant)
	{	
		if(!$restaurant['XML_ID'])
			continue;
		$cityCount = 0;
		$streetCount = 0;
		$terminalGroupCount = 0;
		$cityResult = \Grain\Iiko\LocationCityTable::getList(array(
			'filter' => array(
				'ORGANIZATION_ID' => $restaurant['XML_ID'],
			),
		));
		while($city=$cityResult->fetch())
		{
			$cityCount++;
			$streetResult = \Grain\Iiko\LocationStreetTable::getList(array(
				'filter' => array(
					'CITY_ID' => $city['ID'],
				),
				'runtime' => array(
					new \Bitrix\Main\Entity\ExpressionField('CNT', 'COUNT(*)')
				),
				'select' => array('CNT'),		
			));
			if($streetCnt=$streetResult->fetch())
				$streetCount += $streetCnt['CNT'];			
		}
		$deliveryTerminalResult = \Grain\Iiko\DeliveryTerminalTable::getList(array(
			'filter' => array(
				'ORGANIZATION_ID' => $restaurant['XML_ID'],
			),
		));
		while($terminalGroup=$deliveryTerminalResult->fetch())
		{
			$terminalGroupCount++;
		}
		
		$tab['OPTIONS'][] = array('note' => '<span onclick="if(event.ctrlKey || event.metaKey) location.href=\''.$APPLICATION->GetCurPageParam('',array('debug')).'&debug=loc'.$i.'\'">'.$restaurant['NAME'].'</span>: '.Loc::getMessage('GRAIN_IIKO_OPTIONS_ADDRESS_SYNC_STAT',array(
			'#CITY#' => $cityCount,
			'#STREET#' => $streetCount,
			'#DELIVERY_TERMINAL#' => $terminalGroupCount,
		)));
		$i++;
	}
	
	$aTabs[] = $tab;

	$tab = 	array(
		'DIV' => 'edit5',
		'TAB' => Loc::getMessage('GRAIN_IIKO_OPTIONS_TAB5_TAB'),
		'TITLE' => Loc::getMessage('GRAIN_IIKO_OPTIONS_TAB5_TITLE'),
		'OPTIONS' => array(
			array('add_modifiers_as_inactive', Loc::getMessage('GRAIN_IIKO_OPTIONS_ADD_MODIFIERS_AS_INACTIVE'),
				'',
				array('checkbox')),
		)
	);
	
	$aTabs[] = $tab;
	
	if(Loader::includeModule('sale'))
	{
		$paySystemList = array();
		$paySystemResult = \Bitrix\Sale\PaySystem\Manager::getList(array(
			'filter'  => array(
				//'ACTIVE' => 'Y',
			),
			'select' => array('ID','NAME'),
		));
		while ($paySystem = $paySystemResult->fetch())
			$paySystemList[$paySystem['ID']] = '['.$paySystem['ID'].'] '.$paySystem['NAME'];

		$deliveryList = array();
		$result = \Bitrix\Sale\Delivery\Services\Table::getList(array());
		while($delivery=$result->fetch())
			$deliveryList[$delivery['ID']] = $delivery['NAME'].' ['.$delivery['ID'].']';

		$iikoPaySystems = array();
		foreach($organizationsByAccounts as $organizations)
		{
			if(!is_array($organizations['result']))
				continue;
			foreach($organizations['result'] as $organization)
			{
				$restaurantId = 0;
				foreach($restaurants as $restaurant)
				{
					if($restaurant['XML_ID']!=$organization['id'])
						continue;
					$restaurantId = $restaurant['ID'];
					break;
				}	
				/* iiko paysystems */
				$iikoPaySystems[$organization['id']] = array(""=>"");
				$iikoPaySystemsCurrent = Rest::getPaymentTypes($restaurantId);
				if($iikoPaySystemsCurrent['result']['paymentTypes'])
					foreach($iikoPaySystemsCurrent['result']['paymentTypes'] as $iikoPaySystemCurrent)
					{
						$iikoPaySystems[$organization['id']][$iikoPaySystemCurrent['id']] = '['.$iikoPaySystemCurrent['code'].'] '.$iikoPaySystemCurrent['name'];
					}
				/* /iiko paysystems */	
				/* iiko discounts */
				$iikoDiscounts[$organization['id']] = array(""=>"");	
				$iikoDiscountsCurrent = Rest::getDiscounts($restaurantId);	
				if($iikoDiscountsCurrent['result']['discounts'][0]['items'])
					foreach($iikoDiscountsCurrent['result']['discounts'][0]['items'] as $iikoDiscountCurrent)
					{
						$iikoDiscounts[$organization['id']][$iikoDiscountCurrent['id']] = '['.$iikoDiscountCurrent['mode'].'] '.$iikoDiscountCurrent['name'];
					}
				/* /iiko discounts */
			}
		}
				
		$rsPt = \Bitrix\Sale\PersonTypeTable::getList(array(
			'filter' => array('ENTITY_REGISTRY_TYPE'=>\Bitrix\Sale\Registry::REGISTRY_TYPE_ORDER),
		));
		$personTypes = array();
		while($arPt=$rsPt->fetch())
			$personTypes[$arPt['ID']] = "[".$arPt['ID']."] ".$arPt['NAME'];
			
		$statusList = array(""=>Loc::getMessage('GRAIN_IIKO_OPTIONS_IIKO_STATUS_WEBHOOK_STATUS_NO'));
		$statusResult = \Bitrix\Sale\Internals\StatusLangTable::getList(array(
			'order' => array('STATUS.SORT'=>'ASC'),
			'filter' => array('STATUS.TYPE'=>'O','LID'=>LANGUAGE_ID),
			'select' => array('STATUS_ID','NAME'),
		));
		while($status=$statusResult->fetch())
			$statusList[$status['STATUS_ID']] = '['.$status['STATUS_ID'].'] '.$status['NAME'];
		
		/* status stuff */
		$statuses = array();
		$currentWebhooks = array();
		foreach($restaurants as $restaurant)
			$currentWebhooks[$restaurant['ID']] = Rest::getWebhook($restaurant['ID']);
			
		foreach($restaurants as $restaurant)
		{
			$webhookUrl = 'https://'.$request->getHttpHost().'/bitrix/tools/grain.iiko/webhook.php';
			
			if($request->get('webhook_set')==$restaurant['ID'])
			{
				// set webhook
				$setWebhookUrl = $request->get('webhook_url');
				Rest::setWebhook(array(
					'webHooksUri' => $setWebhookUrl,
					'authToken' => Rest::generateUuid(),
				),$restaurant['ID']);
				$currentWebhooks[$restaurant['ID']] = Rest::getWebhook($restaurant['ID']);
				$currentWebhook = $currentWebhooks[$restaurant['ID']];
				if(isset($currentWebhook['result']))
				{
					Option::set('grain.iiko','webhook_login_'.$restaurant['ID'],$currentWebhook['result']['apiLoginName']);
					Option::set('grain.iiko','webhook_token_'.$restaurant['ID'],$currentWebhook['result']['authToken']);
				}
				// /set webhook
			}
		
			$currentWebhook = $currentWebhooks[$restaurant['ID']];
			if(array_key_exists('error',$currentWebhook) || !is_array($currentWebhook['result']))
			{
				$webhookMessage = '<span style="color:#d40000">'.array_key_exists('error',$currentWebhook)?$currentWebhook['error']:Loc::getMessage('GRAIN_IIKO_OPTIONS_IIKO_STATUS_WEBHOOK_ERROR_GET').'</span>';
			}
			else
			{
				$hasData = Option::get('grain.iiko','webhook_login_'.$restaurant['ID']) == $currentWebhook['result']['apiLoginName'] && Option::get('grain.iiko','webhook_token_'.$restaurant['ID']) == $currentWebhook['result']['authToken'];
				$hasAccess = is_array($currentWebhook['result']['webHooksFilter']['deliveryOrderFilter']['orderStatuses']) && count($currentWebhook['result']['webHooksFilter']['deliveryOrderFilter']['orderStatuses'])>0;
								
				$webhookMessage = Loc::getMessage('GRAIN_IIKO_OPTIONS_IIKO_STATUS_WEBHOOK_SET',array(
					'#HOOK#' => $webhookUrl==$currentWebhook['result']['webHooksUri']?'<span style="color:green">'.$currentWebhook['result']['webHooksUri'].'</span>':'<span style="color:#bd7e00">'.$currentWebhook['result']['webHooksUri'].'</span>',
					'#DATA#' => $hasData?'<span style="color:green">'.Loc::getMessage('GRAIN_IIKO_OPTIONS_IIKO_STATUS_WEBHOOK_DATA_Y').'</span>':'<span style="color:#d40000">'.Loc::getMessage('GRAIN_IIKO_OPTIONS_IIKO_STATUS_WEBHOOK_DATA_N').'</span>',
					'#ACCESS#' => $hasAccess?'<span style="color:green">'.Loc::getMessage('GRAIN_IIKO_OPTIONS_IIKO_STATUS_WEBHOOK_ACCESS_Y').'</span>':'<span style="color:#d40000">'.Loc::getMessage('GRAIN_IIKO_OPTIONS_IIKO_STATUS_WEBHOOK_ACCESS_N').'</span>',
				));
		
			}
			
		
			$html = '<div style="margin-bottom: 12px;">'.$webhookMessage.'</div>';
		
			$html .= '<input type="text" id="grain_iiko_webhook_url_'.$restaurant['ID'].'" value="'.$webhookUrl.'" size="50">';
			$html .= '<input type="button" class="adm-btn" onclick="window.grain_iiko_webhook_set('.$restaurant['ID'].',this);" value="'.Loc::getMessage('GRAIN_IIKO_OPTIONS_IIKO_STATUS_WEBHOOK_SET_BTN').'">';
			
			if(is_array($currentWebhook['result']['webHooksFilter']['deliveryOrderFilter']['orderStatuses']) && count($currentWebhook['result']['webHooksFilter']['deliveryOrderFilter']['orderStatuses'])>0)
			{
				$html .= '<table style="margin-top: 12px;">';
				foreach($currentWebhook['result']['webHooksFilter']['deliveryOrderFilter']['orderStatuses'] as $iikoStatus)
				{
					$html .= '<tr><td>'.$iikoStatus.': </td><td><select name="status_'.$restaurant['ID'].'_'.$iikoStatus.'">';
					$selectedValue = Option::get('grain.iiko','status_'.$restaurant['ID'].'_'.$iikoStatus);
					foreach($statusList as $statusId=>$status)
						$html .= '<option value="'.$statusId.'"'.($selectedValue==$statusId?' selected':'').'>'.$status.'</option>';
					$html .= '</select></td></tr>';
				}
				$html .= '</table>';
			}
			
			if($request->get('webhook_set')==$restaurant['ID'])
			{
				$APPLICATION->RestartBuffer();
				echo \Bitrix\Main\Web\Json::encode(array(
					'webhook' => $html,
				));
				die();
			}

			$statuses[$restaurant['ID']] = '<span id="grain_iiko_webhook_'.$restaurant['ID'].'">'.$html.'</span>';
		}
		
		?>
		<script>
		window.grain_iiko_webhook_set = function(restaurantId,button) {
			button.setAttribute('disabled','');
			var url = '<?=$APPLICATION->GetCurPageParam()?>';
			url += '&webhook_set='+(restaurantId);
			url += '&webhook_url='+encodeURI(document.getElementById('grain_iiko_webhook_url_'+restaurantId).value);
			BX.ajax.loadJSON(
				url,
				function(data){
					BX('grain_iiko_webhook_'+restaurantId).innerHTML = data.webhook;
					button.removeAttribute('disabled');
				},
				function(p){
					var mess = '<?=Loc::getMessage('GRAIN_IIKO_OPTIONS_IIKO_STATUS_WEBHOOK_SET_FAIL',array('#URL'=>$APPLICATION->GetCurPageParam("",array("webhook_set"))))?>';
					BX('grain_iiko_webhook_'+restaurantId).innerHTML = mess;
					console.log('failure',p);
				}
			);		
		}
		</script>
		<?php
		/* /status stuff */
		
		$tab = 	array(
			'DIV' => 'edit6',
			'TAB' => Loc::getMessage('GRAIN_IIKO_OPTIONS_TAB6_TAB'),
			'TITLE' => Loc::getMessage('GRAIN_IIKO_OPTIONS_TAB6_TITLE'),
			'OPTIONS' => array(
				array('post_orders', Loc::getMessage('GRAIN_IIKO_OPTIONS_POST_ORDERS'),
					'',
					array('checkbox')),
				array('post_orders_check_error', Loc::getMessage('GRAIN_IIKO_OPTIONS_POST_ORDERS_CHECK_ERROR'),
					'',
					array('checkbox')),
				array('post_orders_check_problem', Loc::getMessage('GRAIN_IIKO_OPTIONS_POST_ORDERS_CHECK_PROBLEM'),
					'',
					array('checkbox')),
				array('order_prop_name', Loc::getMessage('GRAIN_IIKO_OPTIONS_ORDER_PROP_NAME'),
					'',
					array('text', 25)),
				array('order_prop_phone', Loc::getMessage('GRAIN_IIKO_OPTIONS_ORDER_PROP_PHONE'),
					'',
					array('text', 25)),
				array('order_prop_email', Loc::getMessage('GRAIN_IIKO_OPTIONS_ORDER_PROP_EMAIL'),
					'',
					array('text', 25)),
				array('order_prop_city', Loc::getMessage('GRAIN_IIKO_OPTIONS_ORDER_PROP_CITY'),
					'',
					array('text', 25)),
				array('order_prop_street', Loc::getMessage('GRAIN_IIKO_OPTIONS_ORDER_PROP_STREET'),
					'',
					array('text', 25)),
				array('order_prop_home', Loc::getMessage('GRAIN_IIKO_OPTIONS_ORDER_PROP_HOME'),
					'',
					array('text', 25)),
				array('order_prop_housing', Loc::getMessage('GRAIN_IIKO_OPTIONS_ORDER_PROP_HOUSING'),
					'',
					array('text', 25)),
				array('order_prop_apartment', Loc::getMessage('GRAIN_IIKO_OPTIONS_ORDER_PROP_APARTMENT'),
					'',
					array('text', 25)),
				array('order_prop_entrance', Loc::getMessage('GRAIN_IIKO_OPTIONS_ORDER_PROP_ENTRANCE'),
					'',
					array('text', 25)),
				array('order_prop_floor', Loc::getMessage('GRAIN_IIKO_OPTIONS_ORDER_PROP_FLOOR'),
					'',
					array('text', 25)),
				array('order_prop_doorphone', Loc::getMessage('GRAIN_IIKO_OPTIONS_ORDER_PROP_DOORPHONE'),
					'',
					array('text', 25)),
				array('order_prop_time', Loc::getMessage('GRAIN_IIKO_OPTIONS_ORDER_PROP_TIME'),
					'',
					array('text', 25)),
				array('time_zone', Loc::getMessage('GRAIN_IIKO_OPTIONS_ORDER_PROP_TIME_ZONE'),
					'',
					array('selectbox',array(
						'+00:00' => 'GMT (+00:00)',
						'+02:00' => 'MSK-1 (+02:00)',
						'+03:00' => 'MSK (+03:00)',
						'+04:00' => 'MSK+1 (+04:00)',
						'+05:00' => 'MSK+2 (+05:00)',
						'+06:00' => 'MSK+3 (+06:00)',
						'+07:00' => 'MSK+4 (+07:00)',
						'+08:00' => 'MSK+5 (+08:00)',
						'+09:00' => 'MSK+6 (+09:00)',
						'+10:00' => 'MSK+7 (+10:00)',
						'+11:00' => 'MSK+8 (+11:00)',
						'+12:00' => 'MSK+9 (+12:00)',
					))),
				array('order_prop_time_default', Loc::getMessage('GRAIN_IIKO_OPTIONS_ORDER_PROP_TIME_DEFAULT'),
					'',
					array('text', 5)),
				array('order_prop_time_min', Loc::getMessage('GRAIN_IIKO_OPTIONS_ORDER_PROP_TIME_MIN'),
					'',
					array('text', 5)),
				array('order_prop_delivery_terminal_id', Loc::getMessage('GRAIN_IIKO_OPTIONS_ORDER_PROP_DELIVERY_TERMINAL_ID'),
					'',
					array('text', 25)),
				array('online_payments', Loc::getMessage('GRAIN_IIKO_OPTIONS_ONLINE_PAYSYSTEMS'),
					'',
					array('multiselectbox',$paySystemList)),			
				array('note' => Loc::getMessage('GRAIN_IIKO_OPTIONS_ORDER_LOG',array('#URL#'=>'/bitrix/admin/event_log.php?PAGEN_1=1&SIZEN_1=20&lang='.LANGUAGE_ID.'&set_filter=Y&adm_filter_applied=0&find_type=audit_type_id&find_audit_type%5B0%5D=GRAIN_IIKO_ORDER_SUCCESS&find_audit_type%5B1%5D=GRAIN_IIKO_ORDER_ERROR'))),
			)
		);
	
		$tab['OPTIONS'][] = Loc::getMessage('GRAIN_IIKO_OPTIONS_ORDER_PERSON_TYPE');
		foreach($sites as $siteId=>$siteName)
		{
			$tab['OPTIONS'][] = array('order_person_type_'.$siteId, $siteName,
				'',
				array('selectbox', $personTypes));	
		}
		
		$tab['OPTIONS'][] = Loc::getMessage('GRAIN_IIKO_OPTIONS_POST_ORDERS_CHECK_ERROR_MESSAGE');
		foreach($sites as $siteId=>$siteName)
		{
			$tab['OPTIONS'][] = array('post_orders_check_error_message_'.$siteId, $siteName,
				'',
				array('textarea', 3,50));	
		}
	
		$tab['OPTIONS'][] = Loc::getMessage('GRAIN_IIKO_OPTIONS_POST_ORDERS_CHECK_PROBLEM_MESSAGE');
		foreach($sites as $siteId=>$siteName)
		{
			$tab['OPTIONS'][] = array('post_orders_check_error_message_'.$siteId, $siteName,
				'',
				array('textarea', 3,50));	
		}
	
		$tab['OPTIONS'][] = Loc::getMessage('GRAIN_IIKO_OPTIONS_POST_ORDERS_CHECK_PROBLEM_MESSAGE_GEO');
		foreach($sites as $siteId=>$siteName)
		{
			$tab['OPTIONS'][] = array('post_orders_check_problem_message_geo_'.$siteId, $siteName,
				'',
				array('textarea', 3,50));	
		}
				
		$tab['OPTIONS'][] = Loc::getMessage('GRAIN_IIKO_OPTIONS_DELIVERIES_DELIVERY');
		foreach($sites as $siteId=>$siteName)
		{
			$tab['OPTIONS'][] = array('delivery_delivery_'.$siteId, $siteName,
				'',
				array('multiselectbox',$deliveryList));	
		}
	
		$tab['OPTIONS'][] = Loc::getMessage('GRAIN_IIKO_OPTIONS_DELIVERIES_PICKUP');
		foreach($sites as $siteId=>$siteName)
		{
			$tab['OPTIONS'][] = array('delivery_pickup_'.$siteId, $siteName,
				'',
				array('multiselectbox',$deliveryList));	
		}
	
		$tab['OPTIONS'][] = Loc::getMessage('GRAIN_IIKO_OPTIONS_IIKO_PAYSYSTEM_CASH');
		foreach($restaurants as $restaurant)
		{
			$tab['OPTIONS'][] = array('iiko_paysystem_cash_'.$restaurant['ID'], $restaurant['NAME'],
				'',
				array('selectbox',$iikoPaySystems[$restaurant['XML_ID']]));	
		}
		$tab['OPTIONS'][] = array('iiko_paysystem_cash_order_price', Loc::getMessage('GRAIN_IIKO_OPTIONS_IIKO_PAYSYSTEM_CASH_ORDER_PRICE'),
			'',
			array('checkbox'));	
	
		$tab['OPTIONS'][] = Loc::getMessage('GRAIN_IIKO_OPTIONS_IIKO_PAYSYSTEM_ONLINE');
		foreach($restaurants as $restaurant)
		{
			$tab['OPTIONS'][] = array('iiko_paysystem_online_'.$restaurant['ID'], $restaurant['NAME'],
				'',
				array('selectbox',$iikoPaySystems[$restaurant['XML_ID']]));	
		}
		$tab['OPTIONS'][] = array('iiko_paysystem_online_order_price', Loc::getMessage('GRAIN_IIKO_OPTIONS_IIKO_PAYSYSTEM_ONLINE_ORDER_PRICE'),
			'',
			array('checkbox'));	
	
		$tab['OPTIONS'][] = Loc::getMessage('GRAIN_IIKO_OPTIONS_IIKO_PAYSYSTEM_DISCOUNT');
		$tab['OPTIONS'][] = array('note'=>Loc::getMessage('GRAIN_IIKO_OPTIONS_IIKO_PAYSYSTEM_DISCOUNT_NOTE'));	
		foreach($restaurants as $restaurant)
		{
			$tab['OPTIONS'][] = array('iiko_paysystem_discount_'.$restaurant['ID'], $restaurant['NAME'],
				'',
				array('selectbox',$iikoPaySystems[$restaurant['XML_ID']]));	
		}
	
		$tab['OPTIONS'][] = Loc::getMessage('GRAIN_IIKO_OPTIONS_IIKO_DISCOUNTS');
		$tab['OPTIONS'][] = array('note'=>Loc::getMessage('GRAIN_IIKO_OPTIONS_IIKO_DISCOUNTS_NOTE'));	
		foreach($restaurants as $restaurant)
		{
			$tab['OPTIONS'][] = array('iiko_discount_'.$restaurant['ID'], $restaurant['NAME'],
				'',
				array('selectbox',$iikoDiscounts[$restaurant['XML_ID']]));	
		}

		$tab['OPTIONS'][] = Loc::getMessage('GRAIN_IIKO_OPTIONS_IIKO_STATUS');
		
		foreach($restaurants as $restaurant)
		{
			$html = '';
			
			$tab['OPTIONS'][] = array('',$restaurant['NAME'],
				$statuses[$restaurant['ID']], 
				array('statichtml', ''));
		}
		
		$aTabs[] = $tab;
	
	}
}

if ($request->isPost() && $request->get('Update') && check_bitrix_sessid())
{
	foreach ($aTabs as $aTab)
	{
		//or use __AdmSettingsSaveOptions($MODULE_ID, $arOptions);
				
		if(is_array($aTab['OPTIONS'])) 
		{
			foreach ($aTab['OPTIONS'] as $arOption)
			{
				if (!is_array($arOption)) 
					continue;
	
				if ($arOption['note']) 
					continue;
	
				//or __AdmSettingsSaveOption($MODULE_ID, $arOption);
				$optionName = $arOption[0];
	
				if(empty($optionName))
					continue;
	
				$optionValue = $request->getPost($optionName);
				if($arOption[3][0]=='checkbox' && $optionValue=='')
					$optionValue = 'N';
	
				Option::set($module_id, $optionName, is_array($optionValue) ? implode(",", $optionValue):$optionValue);
			}
			if(is_array($restaurants)) foreach($restaurants as $restaurant)
			{
				$currentWebhook = isset($currentWebhooks[$restaurant['ID']])?$currentWebhooks[$restaurant['ID']]:array();
				
				if(is_array($currentWebhook['result']['webHooksFilter']['deliveryOrderFilter']['orderStatuses']) && count($currentWebhook['result']['webHooksFilter']['deliveryOrderFilter']['orderStatuses'])>0)
				{
					foreach($currentWebhook['result']['webHooksFilter']['deliveryOrderFilter']['orderStatuses'] as $iikoStatus)
					{
						$optionValue = $request->getPost('status_'.$restaurant['ID'].'_'.$iikoStatus);
						Option::set('grain.iiko','status_'.$restaurant['ID'].'_'.$iikoStatus,$optionValue);
					}
				}
			}			
		}
		elseif($aTab['OPTIONS_SAVE']=='grain.iikomulti')
		{
			\Grain\IikoMulti\Auth::updateAccounts($request);
		}
	}
	
	\LocalRedirect($APPLICATION->GetCurPageParam(),true,"301 Moved permanently");
	
}

$tabControl = new CAdminTabControl('tabControl', $aTabs);

?>
<?php $tabControl->Begin(); ?>
<form method='post' action='<?php echo $APPLICATION->GetCurPage()?>?mid=<?=htmlspecialcharsbx($request['mid'])?>&amp;lang=<?=$request['lang']?>' name='grain_forum_settings'>

	<?php foreach ($aTabs as $aTab):
		if($aTab['OPTIONS_HTML']):
			$tabControl->BeginNextTab();
			echo $aTab['OPTIONS_HTML'];
		elseif($aTab['OPTIONS']):
		?>
		<?php $tabControl->BeginNextTab(); ?>
		<?php
		__AdmSettingsDrawList($module_id, $aTab['OPTIONS']); // /bitrix/modules/main/admin/settings.php
		?>

		<?php endif;
	endforeach; ?>

	<?php
	$tabControl->BeginNextTab();

	/*
	require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/admin/group_rights.php");

	?><tr><td colspan="4" align="center">
	<?=BeginNote('align="center"');?>
		<?=Loc::getMessage("GRAIN_FORUM_OPTIONS_RIGHTS_NOTE")?>
	<?=EndNote();?>
	</td></tr><?php
	*/
	
	$tabControl->Buttons(); ?>

	<input type="submit" name="Update" value="<?php echo GetMessage('MAIN_SAVE')?>">
	<input type="reset" name="reset" value="<?php echo GetMessage('MAIN_RESET')?>">
	<?=bitrix_sessid_post();?>
</form>
<?php $tabControl->End(); ?>

<?php if(!!$note=Loc::getMessage("GRAIN_IIKO_OPTIONS_NOTE")):?>
	<?=BeginNote();?>
		<?=$note?>
	<?=EndNote();?>
<?php endif?>

Youez - 2016 - github.com/yon3zu
LinuXploit