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 : |
<?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'])?>&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?>