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/yandex.market/admin/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/yandex.market/admin/setup_run.php
<?php

use Bitrix\Main;
use Bitrix\Main\Localization\Loc;
use Yandex\Market;

const BX_SESSION_ID_CHANGE = false;
const NOT_CHECK_FILE_PERMISSIONS = true;

require $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_admin_before.php';

/** @var CUser $USER */
/** @var CMain $APPLICATION */

Loc::loadMessages(__FILE__);

if (!Main\Loader::includeModule('yandex.market'))
{
	\CAdminMessage::ShowMessage([
		'TYPE' => 'ERROR',
		'MESSAGE' => Loc::getMessage('YANDEX_MARKET_MODULE_NOT_INSTALLED')
	]);

	return;
}

$request = Main\Context::getCurrent()->getRequest();
$actionMessage = '';

// action process

$requestAction = $request->get('action');

if ($requestAction)
{
	$response = [
		'status' => 'error',
		'message' => null
	];

	try
	{
		if (!check_bitrix_sessid() || !$USER->IsAuthorized())
		{
			throw new Main\SystemException(Market\Config::getLang('ADMIN_SETUP_RUN_ACTION_SESSION_EXPIRED'));
		}

		if (!Market\Ui\Access::isProcessExportAllowed())
		{
			throw new Main\SystemException(Market\Config::getLang('ACCESS_DENIED'));
		}

		session_write_close(); // release session

		Main\Application::getInstance()->getExceptionHandler()->setDebugMode(true);
		ini_set('display_errors', 1);

		/** @var \Yandex\Market\Export\Setup\Model $setup */
		$setupId = (int)$request->getPost('SETUP_ID');
		$setup = Market\Export\Setup\Model::loadById($setupId);
		$initTimestamp = $request->getPost('INIT_TIME');
		$initTime = (
			$initTimestamp !== null
				? Main\Type\DateTime::createFromTimestamp($initTimestamp)
				: new Main\Type\DateTime()
		);
		$timeLimit = (int)$request->getPost('TIME_LIMIT') ?: 30;
		$timeSleep = (int)$request->getPost('TIME_SLEEP') ?: 3;

		$processor = new Market\Export\Run\Processor($setup, [
			'step' => $request->getPost('STEP'),
			'stepOffset' => $request->getPost('STEP_OFFSET'),
			'progressCount' => true,
			'timeLimit' => $timeLimit,
			'initTime' => $initTime,
			'usePublic' => false
		]);

		switch ($requestAction)
		{
			case 'run':

				Market\Export\Run\Admin::progress($setupId);

				if ($request->getPost('STEP') === null) // is first request
				{
					if ($setup->hasFullRefresh())
					{
						$setup->handleRefresh(false);
					}

					Market\Watcher\Track\StampFacade::shift(Market\Glossary::SERVICE_EXPORT, $setupId);

					Market\Export\Run\Admin::setTimeLimit($timeLimit);
					Market\Export\Run\Admin::setTimeSleep($timeSleep);
				}

				$processResult = $processor->run();

				if ($processResult->isFinished())
				{
					Market\Environment::stamp();
					Market\Export\Run\Admin::release($setupId);

					$setup->updateListener();

					$response['status'] = 'ok';
					$response['message'] = '<div class="b-admin-message-list compensate--spacing message-width--auto">';

					// publish note

					$response['message'] .= BeginNote();
					$response['message'] .=
						$setup->getFormat()->getPublishNote()
						?: Market\Config::getLang('ADMIN_SETUP_RUN_ACTION_RUN_SUCCESS_PUBLISH');
					$response['message'] .= EndNote();

					// export result

					$adminMessage = new CAdminMessage(array(
						'MESSAGE' => Market\Config::getLang('ADMIN_SETUP_RUN_ACTION_RUN_SUCCESS_TITLE'),
						'DETAILS' => sprintf(
							'<div class="b-grid gutter--centi">
								<div class="b-grid__item">
									<a class="b-link-complex" href="%1$s" download>
										<svg class="b-icon size--small b-link-complex__icon" width="10" height="10">
											<use xlink:href="/bitrix/images/yandex.market/yml-actions.svg#download"></use>
										</svg>
										<span class="b-link-complex__target">%2$s</span>
									</a> 
								</div>
								<div class="b-grid__item">
									<a class="b-link-complex" href="%1$s" target="_blank">
										<svg class="b-icon size--small b-link-complex__icon" width="10" height="10">
											<use xlink:href="/bitrix/images/yandex.market/yml-actions.svg#launch"></use>
										</svg>
										<span class="b-link-complex__target">%3$s</span>
									</a>
								</div>
							</div>',
							$setup->getFileRelativePath(),
							Market\Config::getLang('ADMIN_SETUP_RUN_ACTION_RUN_SUCCESS_DOWNLOAD'),
							Market\Config::getLang('ADMIN_SETUP_RUN_ACTION_RUN_SUCCESS_OPEN')
						),
						'TYPE' => 'OK',
						'HTML' => true
					));

					$response['message'] .= $adminMessage->Show();
					$response['message'] .= '</div>';

					// copy url

					$response['message'] .= '<div class="b-admin-text-message spacing--1x1">';
					$response['message'] .= '<input type="text" value="' . htmlspecialcharsbx($setup->getFileUrl()) . '" size="50" /> ';
					$response['message'] .= '<button class="adm-btn js-plugin-click" type="button" data-plugin="Ui.Input.CopyClipboard">' . Market\Config::getLang('ADMIN_SETUP_RUN_ACTION_RUN_COPY_LINK') . '</button>';
					$response['message'] .= '</div>';

					// statistic

					$queryStatistic = Market\Export\Run\Storage\OfferTable::getList([
						'filter' => [ '=SETUP_ID' => $setup->getId() ],
						'group' => [ 'STATUS' ],
						'select' => [ 'STATUS', 'CNT' ],
						'runtime' => [
							new Main\Entity\ExpressionField('CNT', 'COUNT(*)')
						],
					]);

					$statistic = $queryStatistic->fetchAll();
					$statistic = array_column($statistic, 'CNT', 'STATUS');
					$usedStatuses = [
						Market\Export\Run\Steps\Base::STORAGE_STATUS_SUCCESS,
						Market\Export\Run\Steps\Base::STORAGE_STATUS_DUPLICATE,
						Market\Export\Run\Steps\Base::STORAGE_STATUS_FAIL,
					];
					$hasErrors = false;

					$response['message'] .= '<div class="b-admin-text-message spacing--1x1">';

					foreach ($usedStatuses as $statusId)
					{
						$count = isset($statistic[$statusId]) ? (int)$statistic[$statusId] : 0;

						if ($count === 0 && $statusId !== Market\Export\Run\Steps\Base::STORAGE_STATUS_SUCCESS) { continue; }

						if ($count > 0 && $statusId !== Market\Export\Run\Steps\Base::STORAGE_STATUS_SUCCESS)
						{
							$hasErrors = true;
						}

						$response['message'] .= '<div class="spacing--1x4">';
						$response['message'] .= Market\Config::getLang('ADMIN_SETUP_RUN_ACTION_RUN_SUCCESS_STAT_' . $statusId, [
							'#COUNT#' => $count,
						]);
						$response['message'] .= '</div>';
					}

					if ($hasErrors)
					{
						$logQuery = [
							'lang' => LANGUAGE_ID,
							'set_filter' => 'Y',
							'apply_filter' => 'Y',
							'find_setup' => $setupId,
						];

						$logUrl = 'yamarket_log.php?' . http_build_query($logQuery);

						$response['message'] .= '<div class="spacing--1x4">';
						$response['message'] .= Market\Config::getLang('ADMIN_SETUP_RUN_ACTION_RUN_SUCCESS_LOG', [
							'#URL#' => htmlspecialcharsbx($logUrl),
						]);
						$response['message'] .= '</div>';
					}

					$response['message'] .= '</div>';
				}
				else if ($processResult->isSuccess())
				{
					$processStepName = $processResult->getStep();
					$readyCountMessage = '';
					$stepList = Market\Export\Run\Manager::getSteps();
					$isFoundCurrentStep = false;

					foreach ($stepList as $stepName)
					{
						$isCurrentStep = ($stepName === $processStepName || ($processStepName === null && !$isFoundCurrentStep));
						$stepText = null;
						$stepTitle = Market\Config::getLang('ADMIN_SETUP_RUN_ACTION_RUN_PROGRESS_STEP', [
							'#STEP#' => Market\Export\Run\Manager::getStepTitle($stepName)
						]);

						if ($isCurrentStep)
						{
							$isFoundCurrentStep = true;
							$readyCount = $processResult->getStepReadyCount();
							$stepText = $stepTitle;

							if ($readyCount !== null)
							{
								$stepText .= Market\Config::getLang('ADMIN_SETUP_RUN_ACTION_RUN_PROGRESS_READY_COUNT', [
									'#COUNT#' => (int)$readyCount,
									'#LABEL#' => Market\Utils::sklon($readyCount, [
										Market\Config::getLang('ADMIN_SETUP_RUN_ACTION_RUN_PROGRESS_READY_COUNT_LABEL_1'),
										Market\Config::getLang('ADMIN_SETUP_RUN_ACTION_RUN_PROGRESS_READY_COUNT_LABEL_2'),
										Market\Config::getLang('ADMIN_SETUP_RUN_ACTION_RUN_PROGRESS_READY_COUNT_LABEL_5'),
									])
								]);
							}
							else
							{
								$stepText .= '...';
							}
						}
						else if (!$isFoundCurrentStep) // is ready
						{
							$stepText = '<b>' . $stepTitle . '</b>';
						}

						if ($stepText !== null)
						{
							$readyCountMessage .= '<p>' . $stepText . '</p>';
						}
					}

					$adminMessage = new CAdminMessage(array(
						'TYPE' => 'PROGRESS',
						'MESSAGE' => Market\Config::getLang('ADMIN_SETUP_RUN_ACTION_RUN_PROGRESS_TITLE'),
						'DETAILS' => $readyCountMessage,
						'HTML' => true,
					));

					$response['status'] = 'progress';
					$response['message'] = $adminMessage->Show();
					$response['state'] = [
						'STEP' => $processResult->getStep(),
						'STEP_OFFSET' => $processResult->getStepOffset(),
						'sessid' => bitrix_sessid(),
						'INIT_TIME' => $initTime->getTimestamp()
					];
				}
				else
				{
					Market\Export\Run\Admin::release($setupId);

					$errorMessage = $processResult->hasErrors()
						? implode('<br />', $processResult->getErrorMessages())
						: Market\Config::getLang('ADMIN_SETUP_RUN_ACTION_RUN_ERROR_UNDEFINED');

					$adminMessage = new CAdminMessage(array(
						'TYPE' => 'ERROR',
						'MESSAGE' => Market\Config::getLang('ADMIN_SETUP_RUN_ACTION_RUN_ERROR_TITLE'),
						'DETAILS' => $errorMessage,
						'HTML' => true,
					));
					
					$response['status'] = 'error';
					$response['message'] = $adminMessage->Show();
				}

			break;

			case 'stop':

				Market\Export\Run\Admin::release($setupId);

				$processor->clear(true);

				if ($setup->hasFullRefresh())
				{
					$setup->handleRefresh(false);
				}

				if ($setup->isAutoUpdate())
				{
					$setup->handleChanges(false);
				}

				$response['status'] = 'ok';

			break;

			default:
				throw new Main\SystemException(
					Market\Config::getLang('ADMIN_SETUP_RUN_ACTION_NOT_FOUND')
				);
		}
	}
	catch (Main\SystemException $exception)
	{
		$adminMessage = new CAdminMessage(array(
			'TYPE' => 'ERROR',
			'MESSAGE' => $exception->getMessage()
		));

		$response['status'] = 'error';
		$response['message'] = $adminMessage->Show();

		if (Market\Migration\Controller::canRestore($exception))
		{
			$response['message'] .=
				'<a class="adm-btn" href="yamarket_migration.php?lang=' . LANGUAGE_ID . '">'
				. Market\Config::getLang('ADMIN_SETUP_RUN_GO_MIGRATION')
				. '</a>'
				. '<br /><br />';
		}
	}
	catch (\Exception $exception)
	{
		$adminMessage = new CAdminMessage(array(
			'TYPE' => 'ERROR',
			'MESSAGE' => Market\Config::getLang('ADMIN_SETUP_RUN_FATAL_EXCEPTION'),
			'DETAILS' =>
				$exception->getMessage()
				. '<br />'
				. sprintf(
					'<textarea cols="90" rows="8">%s</textarea>',
					$exception->getTraceAsString()
				),
			'HTML' => true,
		));

		$response['status'] = 'error';
		$response['message'] = $adminMessage->Show();
	}
	/** @noinspection PhpElementIsNotAvailableInCurrentPhpVersionInspection */
	catch (\Throwable $exception)
	{
		$adminMessage = new CAdminMessage(array(
			'TYPE' => 'ERROR',
			'MESSAGE' => Market\Config::getLang('ADMIN_SETUP_RUN_FATAL_EXCEPTION'),
			'DETAILS' =>
				$exception->getMessage()
				. '<br />'
				. sprintf(
					'<textarea cols="90" rows="8">%s</textarea>',
					$exception->getTraceAsString()
				),
			'HTML' => true,
		));

		$response['status'] = 'error';
		$response['message'] = $adminMessage->Show();
	}

	if ($request->isAjaxRequest())
	{
		Market\Utils\HttpResponse::sendJson($response);
	}
	else
	{
		$actionMessage = $response['message'];
	}
}

// admin page

if (!$USER->IsAuthorized())
{
	$APPLICATION->AuthForm('');
}

require $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_admin_after.php';

if (!Market\Ui\Access::isProcessExportAllowed())
{
	\CAdminMessage::ShowMessage([
		'TYPE' => 'ERROR',
		'MESSAGE' => Loc::getMessage('YANDEX_MARKET_ACCESS_DENIED')
	]);
}

// load form data

$requestSetup = (int)$request->get('id');
$setupList = Market\Export\Setup\Table::getList([
	'select' => [ 'ID', 'NAME' ]
])->fetchAll();

if (empty($setupList))
{
	\CAdminMessage::ShowMessage([
		'TYPE' => 'ERROR',
		'MESSAGE' => Market\Config::getLang('ADMIN_SETUP_RUN_SETUP_LIST_EMPTY')
	]);

	return;
}

// form display

$APPLICATION->SetTitle(Market\Config::getLang('ADMIN_SETUP_RUN_TITLE'));

Market\Ui\Library::load('jquery');

Market\Ui\Assets::loadPlugin('base', 'css');

Market\Ui\Assets::loadPluginCore();
Market\Ui\Assets::loadFieldsCore();
Market\Ui\Assets::loadPlugins([
	'Ui.Admin.ExportForm',
	'Ui.Input.CopyClipboard',
]);

Market\Metrika::reachGoal('generate_YML');

$tabs = [
	[ 'DIV' => 'common', 'TAB' => Market\Config::getLang('ADMIN_SETUP_RUN_TAB_COMMON') ]
];

$tabControl = new CAdminTabControl('YANDEX_MARKET_ADMIN_SETUP_RUN', $tabs, true, true);
$formQuery = [
	'lang' => LANGUAGE_ID,
];

$formUrl = $APPLICATION->GetCurPage() . '?' . http_build_query($formQuery);

?>
<form class="js-plugin" action="<?= $formUrl ?>" method="post" data-plugin="Ui.Admin.ExportForm">
	<div class="js-export-form__message">
		<?= $actionMessage ?>
	</div>
	<div class="b-admin-text-message is--hidden js-export-form__timer-holder">
		<?= Market\Config::getLang('ADMIN_SETUP_RUN_TIMER_LABEL') ?>:
		<span class="js-export-form__timer">00:00</span>
	</div>
	<?php
	$tabControl->Begin();

	echo bitrix_sessid_post();

	// common tab

	$tabControl->BeginNextTab([ 'showTitle' => false ]);

	?>
	<tr>
		<td width="40%" align="right"><?= Market\Config::getLang('ADMIN_SETUP_RUN_FIELD_SETUP_ID') ?></td>
		<td width="60%">
			<select name="SETUP_ID">
				<?php
				foreach ($setupList as $setup)
				{
					?>
					<option value="<?= $setup['ID'] ?>" <?= (int)$setup['ID'] === $requestSetup ? 'selected' : '' ?>>[<?= $setup['ID'] ?>] <?= Market\Utils::htmlEscape($setup['NAME']) ?></option>
					<?php
				}
				?>
			</select>
		</td>
	</tr>
	<tr>
		<td width="40%" align="right">
			<span class="b-icon icon--question indent--right b-tag-tooltip--holder">
				<span class="b-tag-tooltip--content"><?= Market\Config::getLang('ADMIN_SETUP_RUN_FIELD_TIME_LIMIT_HELP') ?></span>
			</span><?php
			echo Market\Config::getLang('ADMIN_SETUP_RUN_FIELD_TIME_LIMIT')
			?>
		</td>
		<td>
			<input type="text" name="TIME_LIMIT" value="<?= Market\Export\Run\Admin::getTimeLimit() ?>" size="2" />
			<?= Market\Config::getLang('ADMIN_SETUP_RUN_FIELD_TIME_LIMIT_UNIT') ?><?php
			?><?= Market\Config::getLang('ADMIN_SETUP_RUN_FIELD_TIME_LIMIT_SLEEP') ?>
			<input type="text" name="TIME_SLEEP" value="<?= Market\Export\Run\Admin::getTimeSleep() ?>" size="2" />
			<?= Market\Config::getLang('ADMIN_SETUP_RUN_FIELD_TIME_LIMIT_UNIT') ?>
		</td>
	</tr>
	<?php

	// buttons

	$tabControl->Buttons();

	?>
	<input
		type="button"
		class="adm-btn adm-btn-save js-export-form__run-button"
		value="<?= Market\Config::getLang('ADMIN_SETUP_RUN_BUTTON_START') ?>"
		<?= !Market\Ui\Access::isProcessExportAllowed() ? 'disabled' : '' ?>
	/>
	<input type="button" class="adm-btn js-export-form__stop-button" value="<?= Market\Config::getLang('ADMIN_SETUP_RUN_BUTTON_STOP') ?>" disabled />
	<?php
	$tabControl->End();
	?>
</form>
<?php
$jsLang = [
	'YANDEX_MARKET_INPUT_COPY_CLIPBOARD_SUCCESS' => Market\Config::getLang('ADMIN_SETUP_RUN_CLIPBOARD_SUCCESS'),
	'YANDEX_MARKET_INPUT_COPY_CLIPBOARD_FAIL' => Market\Config::getLang('ADMIN_SETUP_RUN_CLIPBOARD_FAIL'),
	'YANDEX_MARKET_EXPORT_FORM_QUERY_ERROR_TITLE' => Market\Config::getLang('ADMIN_SETUP_RUN_QUERY_ERROR_TITLE'),
	'YANDEX_MARKET_EXPORT_FORM_QUERY_ERROR_TEXT' => Market\Config::getLang('ADMIN_SETUP_RUN_QUERY_ERROR_TEXT'),
];
?>
<script>
	BX.message(<?= Market\Utils::jsonEncode($jsLang, JSON_UNESCAPED_UNICODE) ?>);
</script>
<?php

require $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/epilog_admin.php';

Youez - 2016 - github.com/yon3zu
LinuXploit