This commit is contained in:
root
2025-11-13 19:52:28 +03:00
parent 8aeeb05b7d
commit 807dec3b6c
4646 changed files with 163445 additions and 626017 deletions

View File

@@ -1,5 +1,13 @@
<?php
return [
'rest' => [
'value' => [
'defaultNamespace' => '\\Bitrix\\Rest\\V3\\Realisation\\Controllers',
'routes' => [
'documentation' => 'rest.documentation.openApi',
],
]
],
'controllers' => [
'value' => [
'defaultNamespace' => '\\Bitrix\\Rest\\Controller',

View File

@@ -1,17 +1,18 @@
<?php
CModule::AddAutoloadClasses(
"rest",
array(
"CRestServer" => "classes/general/rest.php",
"CRestUtil" => "classes/general/rest_util.php",
"CRestEvent" => "classes/general/rest_event.php",
"CRestEventCallback" => "classes/general/rest_event.php",
"CRestEventSession" => "classes/general/rest_event.php",
"IRestService" => "classes/general/rest.php",
"CRestProvider" => "classes/general/rest_provider.php",
"CBitrixRestEntity" => "classes/general/restentity.php",
"CRestServerBatchItem" => "classes/general/rest.php",
"rest" => "install/index.php",
)
);
'rest',
[
'CRestServer' => 'classes/general/rest.php',
'CRestApiServer' => 'classes/general/RestApiServer.php',
'CRestUtil' => 'classes/general/rest_util.php',
'CRestEvent' => 'classes/general/rest_event.php',
'CRestEventCallback' => 'classes/general/rest_event.php',
'CRestEventSession' => 'classes/general/rest_event.php',
'IRestService' => 'classes/general/rest.php',
'CRestProvider' => 'classes/general/rest_provider.php',
'CBitrixRestEntity' => 'classes/general/restentity.php',
'CRestServerBatchItem' => 'classes/general/rest.php',
'rest' => 'install/index.php',
]
);

View File

@@ -0,0 +1,541 @@
<?php
use Bitrix\Main\DI\ServiceLocator;
use Bitrix\Main\Engine\ControllerBuilder;
use Bitrix\Main\Engine\CurrentUser;
use Bitrix\Main\Loader;
use Bitrix\Main\LoaderException;
use Bitrix\Main\ModuleManager;
use Bitrix\Main\ObjectException;
use Bitrix\Main\SystemException;
use Bitrix\Rest\Engine\Access\LoadLimiter;
use Bitrix\Rest\Engine\RestManager;
use Bitrix\Rest\Event\Session;
use Bitrix\Rest\RestExceptionInterface;
use Bitrix\Rest\Tools\Diagnostics\RestServerProcessLogger;
use Bitrix\Rest\UsageStatTable;
use Bitrix\Rest\V3\Controllers\RestController;
use Bitrix\Rest\V3\Exceptions\AccessDeniedException;
use Bitrix\Rest\V3\Exceptions\Internal\InternalException;
use Bitrix\Rest\V3\Exceptions\InvalidSelectException;
use Bitrix\Rest\V3\Exceptions\LicenseException;
use Bitrix\Rest\V3\Exceptions\MethodNotFoundException;
use Bitrix\Rest\V3\Exceptions\RateLimitException;
use Bitrix\Rest\V3\Exceptions\RestException;
use Bitrix\Rest\V3\Interaction\Request\BatchRequest;
use Bitrix\Rest\V3\Interaction\Request\ServerRequest;
use Bitrix\Rest\V3\Interaction\Response\BatchResponse;
use Bitrix\Rest\V3\Interaction\Response\ErrorResponse;
use Bitrix\Rest\V3\Interaction\Response\Response;
use Bitrix\Rest\V3\Interaction\Response\ResponseWithRelations;
use Bitrix\Rest\V3\Schema\MethodDescription;
use Bitrix\Rest\V3\Schema\SchemaManager;
class CRestApiServer extends CRestServer
{
protected ?string $localErrorLanguage = null;
/**
* @var MethodDescription[]
*/
protected ?array $methodDescriptions = null;
/**
* @var string[]
*/
private array $availableScopes = [CRestUtil::GLOBAL_SCOPE];
private ?array $requestAccess = null;
protected SchemaManager $schemaManager;
/**
* @param $params
* @throws AccessDeniedException
*/
public function __construct($params)
{
$this->transport = self::TRANSPORT_JSON;
$this->localErrorLanguage = $params['LOCAL_ERROR_LANGUAGE'] ?? null;
$this->schemaManager = ServiceLocator::getInstance()->get(SchemaManager::class);
if (!$this->checkSite())
{
throw new AccessDeniedException(status: self::STATUS_WRONG_REQUEST);
}
parent::__construct($params);
$routes = $this->schemaManager->getRouteAliases();
$this->method = $routes[$this->method] ?? $this->method;
}
/**
* @return MethodDescription[]
*/
protected function getMethodDescriptions(): array
{
if ($this->methodDescriptions === null)
{
$this->methodDescriptions = $this->schemaManager->getMethodDescriptions();
}
return $this->methodDescriptions;
}
protected function getMethodDescription(string $method): ?MethodDescription
{
return $this->schemaManager->getMethodDescription($method);
}
public function processServerRequest(ServerRequest $request)
{
$this->timeStart = microtime(true);
if (!defined('BX24_REST_SKIP_SEND_HEADERS'))
{
CRestUtil::sendHeaders();
}
try
{
return $this->processServerExecution($request);
}
catch (Throwable $e)
{
return $this->processException($e);
}
}
private function processServerExecution(ServerRequest $request)
{
$this->initServerExecution($request);
$methodDescription = $this->getMethodDescription($request->getMethod());
if ($methodDescription === null || !Loader::includeModule($methodDescription->getModule()))
{
throw new MethodNotFoundException($request->getMethod());
}
$this->initRequestScope($request);
$this->checkServerAuth($request);
UsageStatTable::log($this);
$logger = new RestServerProcessLogger($this);
$logger->logRequest();
$result = $this->processServerRequestCall($request);
$logger->logResponse($result);
return $result;
}
protected function checkServerAuth(ServerRequest $request): bool
{
$res = $this->getRequestAccess($request->getQuery());
$this->authType = $res['auth_type'];
$this->clientId = $res['client_id'] ?? null;
$this->passwordId = $res['password_id'] ?? null;
$this->authData = $res;
if (isset($this->authData['auth_connector']) && !$this->canUseConnectors())
{
throw new LicenseException(status: self::STATUS_FORBIDDEN);
}
if (isset($res['parameters_clear']))
{
$query = $request->getQuery();
foreach ((array)$res['parameters_clear'] as $param)
{
if (array_key_exists($param, $query))
{
$this->auth[$param] = $query[$param];
unset($query[$param]);
}
}
$request->setQuery($query);
}
if (isset($res['parameters'][Session::PARAM_SESSION]))
{
Session::set($res['parameters'][Session::PARAM_SESSION]);
}
return true;
}
protected function initRequestScope(ServerRequest $request): void
{
if ($request->getToken() !== null)
{
[$scope] = explode(CRestUtil::TOKEN_DELIMITER, $request->getToken(), 2);
$request->setScope($scope ?: CRestUtil::GLOBAL_SCOPE);
}
else
{
$methodDescription = $this->getMethodDescription($request->getMethod());
$request->setScope($methodDescription?->getScope());
}
}
protected function initServerExecution(ServerRequest $request): void
{
if (array_key_exists('state', $request->getQuery()))
{
$this->securityClientState = $request->getQuery()['state'];
$query = $request->getQuery();
unset($query['state']);
$request->setQuery($query);
}
}
/**
* @param ServerRequest $request
* @return mixed
* @throws AccessDeniedException
* @throws InternalException
* @throws LoaderException
* @throws MethodNotFoundException
* @throws ObjectException
* @throws RateLimitException
* @throws SystemException
* @throws \Bitrix\Main\ArgumentException
* @throws \Bitrix\Main\ArgumentTypeException
* @throws \Bitrix\Main\ObjectPropertyException
*/
protected function processServerRequestCall(ServerRequest $request): mixed
{
$entityId = $this->getClientId() ?: $this->getPasswordId();
if (LoadLimiter::is($this->getAuthType(), $entityId, $request->getMethod()))
{
throw new RateLimitException();
}
$this->timeProcessStart = microtime(true);
if (ModuleManager::isModuleInstalled('bitrix24') && function_exists('getrusage'))
{
$this->usage = getrusage();
}
LoadLimiter::registerStarting(
$this->getAuthType(),
$entityId,
$request->getMethod(),
);
$currentUser = CurrentUser::get();
$response = $this->processRequest($request, $currentUser);
LoadLimiter::registerEnding(
$this->getAuthType(),
$entityId,
$request->getMethod(),
);
$this->timeProcessFinish = microtime(true);
return $this->processResponse($response);
}
/**
* @param ServerRequest $request
* @param CurrentUser $currentUser
* @return Response
* @throws AccessDeniedException
* @throws InternalException
* @throws MethodNotFoundException
* @throws ObjectException
* @throws SystemException
*/
protected function processRequest(ServerRequest $request, CurrentUser $currentUser): Response
{
if ($request->getMethod() === 'batch')
{
return $this->processBatchServerExecution($request, $currentUser);
}
else
{
return $this->processServerRequestExecution($request, $currentUser);
}
}
/**
* @param ServerRequest $request
* @param CurrentUser $currentUser
* @return Response
* @throws AccessDeniedException
* @throws InternalException
* @throws InvalidSelectException
* @throws MethodNotFoundException
* @throws ObjectException
* @throws SystemException
*/
protected function processBatchServerExecution(ServerRequest $request, CurrentUser $currentUser): Response
{
$jsonData = $request->getHttpRequest()->getJsonList()->toArray();
$batchRequest = new BatchRequest($jsonData);
$batchResponse = new BatchResponse();
foreach ($batchRequest->getItems() as $index => $item)
{
$context = $batchResponse->getContext();
$httpJsonData = $this->prepareJsonData($context, $item->getQuery());
$itemHttpRequest = new \Bitrix\Main\HttpRequest(\Bitrix\Main\Context::getCurrent()->getServer(), [], [], [], [], $httpJsonData);
$itemServerRequest = new ServerRequest($item->getMethod(), $request->getQuery(), $itemHttpRequest);
$response = $this->processServerRequestExecution($itemServerRequest, $currentUser);
if ($response instanceof ErrorResponse)
{
return $response;
}
$item->setResponse($response);
$batchResponse->addItem($item->getAlias() ?? $index, $response);
}
return $batchResponse;
}
protected function prepareJsonData(array $context, array $queryParams): array
{
$getValueByPath = function ($path, $context)
{
$current = $context;
$pathParts = explode('.', $path);
foreach ($pathParts as $key)
{
if (!is_array($current) && !($current instanceof ArrayAccess))
{
throw new InvalidSelectException("Invalid context path '{$path}' - expected array at '{$key}'");
}
if (!isset($current[$key]))
{
throw new InvalidSelectException("Path '{$path}' not found in context");
}
$current = $current[$key];
}
return $current;
};
$replaceRef = function ($value) use ($context, $getValueByPath, &$replaceRef)
{
if (is_array($value))
{
if (isset($value['$ref']))
{
return $getValueByPath($value['$ref'], $context);
}
if (isset($value['$refArray']))
{
$refValue = $value['$refArray'];
if (is_string($refValue))
{
$lastDotPos = strrpos($refValue, '.');
if ($lastDotPos === false)
{
throw new InvalidSelectException("Invalid \$refArray format - expected 'path.to.array.field'");
}
$arrayPath = substr($refValue, 0, $lastDotPos);
$field = substr($refValue, $lastDotPos + 1);
$items = $getValueByPath($arrayPath, $context);
if (!is_array($items) && !($items instanceof Traversable))
{
throw new InvalidSelectException("Path '{$arrayPath}' must point to an array or iterable");
}
$result = [];
foreach ($items as $item)
{
if (!is_array($item) && !($item instanceof ArrayAccess))
{
throw new InvalidSelectException("Items in '{$arrayPath}' must be arrays or objects");
}
if (!isset($item[$field]))
{
throw new InvalidSelectException("Field '{$field}' not found in items");
}
$result[] = $item[$field];
}
return $result;
}
throw new InvalidSelectException("Invalid \$refArray value - expected string");
}
// Рекурсивная обработка вложенных массивов
return array_map($replaceRef, $value);
}
return $value;
};
return $replaceRef($queryParams);
}
/**
* @throws MethodNotFoundException
* @throws AccessDeniedException
* @throws ObjectException
* @throws InternalException
* @throws SystemException
*/
protected function processServerRequestExecution(ServerRequest $request, CurrentUser $currentUser): Response
{
$methodDescription = $this->getMethodDescription($request->getMethod());
if ($methodDescription === null)
{
throw new MethodNotFoundException($request->getMethod());
}
if (!$request->getScope())
{
$request->setScope($methodDescription->getScope() ?? null);
}
if (!$this->isRequestScopeAvailable($request->getScope()))
{
throw new AccessDeniedException(status: self::STATUS_FORBIDDEN);
}
$controller = ControllerBuilder::build($methodDescription->getController(), ['scope' => \Bitrix\Main\Engine\Controller::SCOPE_REST, 'currentUser' => $currentUser, 'request' => $request->getHttpRequest()]);
if (!$controller instanceof RestController)
{
$exception = new SystemException('Use should use only RestController');
throw new InternalException($exception);
}
$controller->setLocalErrorLanguage($this->localErrorLanguage);
$manager = new RestManager();
$autoWirings = $manager->getAutoWirings();
$manager->registerAutoWirings($autoWirings);
$response = $controller->run($methodDescription->getMethod(), [$request->getQuery(), ['__restServer' => $this]]);
$manager->unRegisterAutoWirings($autoWirings);
if ($controller->hasErrors())
{
return new ErrorResponse($controller->getErrors());
}
if (!$response instanceof Response)
{
$exception = new SystemException('Use should use only Response');
throw new InternalException($exception);
}
if ($response instanceof ResponseWithRelations && !empty($response->getRelations()))
{
foreach ($response->getRelations() as $relation)
{
if (!$relation->getRequest()->filter)
{
continue;
}
$httpRequestBody = [
'select' => array_merge($relation->getRequest()->select->getList(), $relation->getRequest()->select->getRelationFields()),
'filter' => $relation->getRequest()->filter->getList(),
];
if ($relation->getRequest()->order)
{
$httpRequestBody['order'] = $relation->getRequest()->order->getList();
}
$httpRequest = new \Bitrix\Main\HttpRequest(\Bitrix\Main\Context::getCurrent()->getServer(), [], [], [], [], $httpRequestBody);
$subRequest = new ServerRequest($relation->getMethod(), $request->getQuery(), $httpRequest);
$subResponse = $this->processRequest($subRequest, $currentUser);
$relation->setResponse($subResponse);
}
}
return $response;
}
protected function processException(RestExceptionInterface|Exception $e): array
{
global $APPLICATION;
$this->error = $e;
$ex = $APPLICATION->GetException();
if ($ex instanceof CApplicationException)
{
$this->error = new InternalException(new Exception($ex->msg));
}
return $this->outputError();
}
/**
* @param Response $response
*/
protected function processResponse(mixed $response): array
{
$result = $response->toArray();
if ($this->securityClientState && $this->securityMethodState)
{
$result['signature'] = $this->getApplicationSignature();
}
if (!$response->isShowRawData())
{
$result = ['result' => $result];
}
if ($response->isShowDebugInfo())
{
$result = $this->appendDebugInfo($result);
}
if ($response instanceof ErrorResponse)
{
$this->error = $response;
}
return $result;
}
protected function getRequestAccess(array $query): array
{
if ($this->requestAccess === null)
{
$res = [];
if (!CRestUtil::checkAuth($query, '_global', $res))
{
throw new AccessDeniedException(status: $res['error'] === 'insufficient_scope' ? self::STATUS_FORBIDDEN : self::STATUS_UNAUTHORIZED);
}
$this->requestAccess = $res;
if ($res['scope'])
{
$this->availableScopes = array_merge($this->availableScopes, explode(',', $res['scope']));
}
}
return $this->requestAccess;
}
private function isRequestScopeAvailable(?string $scope): bool
{
return in_array($scope, $this->availableScopes, true);
}
protected function outputError(): array
{
if (!is_subclass_of($this->error, RestException::class))
{
$this->error = new InternalException($this->error);
}
return ['error' => $this->error->output($this->localErrorLanguage)];
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -122,7 +122,7 @@ class CRestProvider extends IRestService
),
'OnSubscriptionRenew' => [
'rest',
'onAfterSubscriptionRenew',
'onSubscriptionRenew',
[
__CLASS__,
'onSubscriptionRenew',

View File

@@ -9,7 +9,7 @@ IncludeModuleLangFile(__FILE__);
class CRestUtil
{
const GLOBAL_SCOPE = '_global';
public const GLOBAL_SCOPE = '_global';
const EVENTS = '_events';
const PLACEMENTS = '_placements';
@@ -237,7 +237,7 @@ class CRestUtil
"NOTIFY_MODULE" => "rest",
"NOTIFY_TAG" => "REST|APP_INSTALL_NOTIFY|".$USER->GetID()."|TO|".$id,
"NOTIFY_SUB_TAG" => "REST|APP_INSTALL_NOTIFY",
"NOTIFY_EVENT" => "admin_notification",
"NOTIFY_EVENT" => "app_install",
"NOTIFY_MESSAGE" => GetMessage(
"REST_APP_INSTALL_NOTIFY_TEXT",
array(
@@ -529,22 +529,22 @@ class CRestUtil
// compatibility fix: other modules use checkAuth instead of /rest/download
if(!is_array($query))
{
$query = array('auth' => $query);
$query = ['auth' => $query];
}
foreach(GetModuleEvents('rest', 'OnRestCheckAuth', true) as $eventHandler)
{
$eventResult = ExecuteModuleEventEx($eventHandler, array($query, $scope, &$res));
if($eventResult !== null)
$eventResult = ExecuteModuleEventEx($eventHandler, [$query, $scope, &$res]);
if ($eventResult !== null)
{
return $eventResult;
}
}
$res = array(
"error" => "NO_AUTH_FOUND",
"error_description" => "Wrong authorization data",
);
$res = [
'error' => 'NO_AUTH_FOUND',
'error_description' => 'Wrong authorization data',
];
return false;
}

View File

@@ -1,5 +1,6 @@
<?php
use Bitrix\Iblock\Public\Service\RestValidator as IblockRestValidator;
use Bitrix\Main\Application;
use Bitrix\Main\DB\SqlQueryException;
use Bitrix\Rest\Exceptions\ArgumentException;
@@ -652,6 +653,16 @@ class CBitrixRestEntity extends IRestService
$arFilter['IBLOCK_ID'] = $iBlockId;
$arFilter['CHECK_PERMISSIONS'] = 'Y';
$validator = IblockRestValidator\Format\ElementFilterFieldValidator::getInstance();
$internalResult = $validator->run($arFilter);
if (!$internalResult->isSuccess())
{
throw new RestException(
implode(' ', $internalResult->getErrorMessages()),
RestException::ERROR_ARGUMENT
);
}
$dbRes = \CIBlockElement::GetList(
$arSort,
$arFilter,
@@ -728,6 +739,17 @@ class CBitrixRestEntity extends IRestService
{
if(\CIBlockRights::UserHasRightTo($arIBlock['ID'], $arIBlock['ID'], 'element_edit'))
{
$validator = IblockRestValidator\Format\ElementFieldValidator::getInstance();
$validator->setFileValidator(new IblockRestValidator\Format\Type\SkipFile());
$internalResult = $validator->run($params);
if (!$internalResult->isSuccess())
{
throw new RestException(
implode(' ', $internalResult->getErrorMessages()),
RestException::ERROR_ARGUMENT
);
}
$arItemFields = self::prepareItem($params, $arIBlock, $server);
$ib = new \CIBlockElement();
@@ -796,6 +818,17 @@ class CBitrixRestEntity extends IRestService
if($arRes)
{
$validator = IblockRestValidator\Format\ElementFieldValidator::getInstance();
$validator->setFileValidator(new IblockRestValidator\Format\Type\SkipFile());
$internalResult = $validator->run($params);
if (!$internalResult->isSuccess())
{
throw new RestException(
implode(' ', $internalResult->getErrorMessages()),
RestException::ERROR_ARGUMENT
);
}
$arItemFields = self::prepareItem($params, $arIBlock, $server);
if(count($arItemFields) > 0)

View File

@@ -3,4 +3,5 @@ $rest_default_option = array(
'enable_mod_zip' => 'N',
'import_max_size' => '100',
'oauth_module_supported' => 'Y',
'can_use_demo_after_subscription' => 'N'
);

View File

@@ -6,6 +6,8 @@ require_once __DIR__.'/autoload.php';
class CRestEventHandlers
{
private const ACTIVATE_DEMO_MARKET_PARAM = 'activate_demo_market';
public static function OnBeforeProlog()
{
if(isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] === 'OPTIONS')
@@ -21,6 +23,21 @@ class CRestEventHandlers
die();
}
}
$context = \Bitrix\Main\Application::getInstance()->getContext();
$request = $context->getRequest();
$needToActivateDemoMarket = $request->getQuery(self::ACTIVATE_DEMO_MARKET_PARAM);
if (
isset($needToActivateDemoMarket)
&& $needToActivateDemoMarket === 'Y'
&& Loader::includeModule('rest')
)
{
$subscription = new \Bitrix\Rest\Internal\Integration\Market\Subscription();
$subscription->activateDemo();
}
}
}
@@ -31,6 +48,7 @@ CJSCore::registerExt('marketplace', array(
'css' => '/bitrix/js/rest/css/marketplace.css',
'lang' => BX_ROOT.'/modules/rest/lang/'.LANGUAGE_ID.'/jsmarketplace.php',
'lang_additional' => array(
'IS_RENAMED_MARKET' => \Bitrix\Rest\Integration\Market\Label::isRenamedMarket() ? 'Y' : 'N',
'REST_MARKETPLACE_CATEGORY_URL' => '/marketplace/',
'REST_BUY_SUBSCRIPTION_URL' => \Bitrix\Rest\Marketplace\Url::getSubscriptionBuyUrl(),
'CAN_BUY_SUBSCRIPTION' => \Bitrix\Rest\Marketplace\Client::canBuySubscription() ? 'Y' : 'N',

View File

@@ -16,7 +16,7 @@ $arComponentDescription = array(
"ID" => "content",
"CHILD" => array(
"ID" => "b24marketplace",
"NAME" => \Bitrix\Rest\Integration\Market\Label::isRenamedMarket() ? Loc::getMessage("RMP_PATH_B24MP_DESCR_2_MSGVER_1") : Loc::getMessage("RMP_PATH_B24MP_DESCR_2"),
"NAME" => \Bitrix\Rest\Integration\Market\Label::isRenamedMarket() ? Loc::getMessage("RMP_PATH_B24MP_DESCR_2_MSGVER_1") : Loc::getMessage("RMP_PATH_B24MP_DESCR_2_MSGVER_2"),
)
),
// "CACHE_PATH" => "Y",

View File

@@ -1,5 +1,5 @@
<?php
$MESS["RMP_LAYOUT_COMP_DESCR_2"] = "Application page";
$MESS["RMP_LAYOUT_COMP_NAME_2"] = "Application page";
$MESS["RMP_PATH_B24MP_DESCR_2"] = "Bitrix24 Market";
$MESS["RMP_PATH_B24MP_DESCR_2_MSGVER_1"] = "Bitrix24 Market";
$MESS["RMP_PATH_B24MP_DESCR_2_MSGVER_2"] = "Bitrix24 Market";

View File

@@ -1,3 +1,5 @@
<?php
$MESS["RMP_PATH_B24MP_DESCR_2"] = "Битрикс24 Маркетплейс";
$MESS["RMP_LAYOUT_COMP_DESCR_2"] = "Қосымша парақшасы";
$MESS["RMP_LAYOUT_COMP_NAME_2"] = "Қосымша парақшасы";
$MESS["RMP_PATH_B24MP_DESCR_2_MSGVER_1"] = "Маркетплейс";
$MESS["RMP_PATH_B24MP_DESCR_2_MSGVER_2"] = "Битрикс24 Маркет";

View File

@@ -0,0 +1,4 @@
<?php
$MESS["RMP_DETAIL_URL_2"] = "Қосымша парақшасының мекенжайына сілтеме қалыбы";
$MESS["RMP_SEF_APPLICATION"] = "Қосымша парақшасының мекенжайы";
$MESS["RMP_VA_ID"] = "Қосымша ID ";

View File

@@ -1,5 +1,5 @@
<?php
$MESS["RMP_LAYOUT_COMP_NAME_2"] = "Страница приложения";
$MESS["RMP_LAYOUT_COMP_DESCR_2"] = "Страница приложения";
$MESS["RMP_PATH_B24MP_DESCR_2"] = "Битрикс24.Маркет";
$MESS["RMP_PATH_B24MP_DESCR_2_MSGVER_2"] = "Битрикс24 Маркет";
$MESS["RMP_PATH_B24MP_DESCR_2_MSGVER_1"] = "Маркетплейс";

View File

@@ -6,5 +6,5 @@ $MESS["REST_APP_LAYOUT_PAYMENT_ACCESS_BTN_DEMO_SUBSCRIBE"] = "Free 15-days trial
$MESS["REST_APP_LAYOUT_PAYMENT_ACCESS_TITLE_APP"] = "Your #APP_NAME# subscription has expired";
$MESS["REST_APP_LAYOUT_PAYMENT_ACCESS_TITLE_SUBSCRIBE_2"] = "Your subscription has expired";
$MESS["REST_APP_LAYOUT_PAYMENT_ACCESS_TITLE_SUBSCRIBE_2_MSGVER_1"] = "Your subscription has expired";
$MESS["REST_APP_LAYOUT_PAYMENT_ACCESS_TITLE_SUBSCRIBE_APP"] = "To use #APP_NAME#, please subscribe to Bitrix24.Market Plus or activate a free Bitrix24.Market Plus 15-days trial.";
$MESS["REST_APP_LAYOUT_PAYMENT_ACCESS_TITLE_SUBSCRIBE_APP_MSGVER_1"] = "To use #APP_NAME#, please subscribe to Bitrix24 Market Plus or activate a free Bitrix24 Market Plus 15-days trial.";
$MESS["REST_APP_LAYOUT_PAYMENT_ACCESS_TITLE_SUBSCRIBE_APP_MSGVER_2"] = "To use #APP_NAME#, please subscribe to Bitrix24 Market Plus or activate a free Bitrix24 Market Plus 15-days trial.";

View File

@@ -6,5 +6,5 @@ $MESS["REST_APP_LAYOUT_PAYMENT_ACCESS_BTN_DEMO_SUBSCRIBE"] = "15 күнге те
$MESS["REST_APP_LAYOUT_PAYMENT_ACCESS_TITLE_APP"] = "\"#APP_NAME#\" төленген пайдалану кезеңі аяқталды";
$MESS["REST_APP_LAYOUT_PAYMENT_ACCESS_TITLE_SUBSCRIBE_2"] = "Маркетке жазылым аяқталды";
$MESS["REST_APP_LAYOUT_PAYMENT_ACCESS_TITLE_SUBSCRIBE_2_MSGVER_1"] = "Маркетплейске жазылу аяқталды";
$MESS["REST_APP_LAYOUT_PAYMENT_ACCESS_TITLE_SUBSCRIBE_APP"] = "\"#APP_NAME#\" қосымшасын пайдалану үшін Битрикс24.Маркет Плюс-ке жазылым сатып алыңыз немесе Битрикс24.Маркет Плюс-ке 15 күнге тегін демо-кезеңін іске қосыңыз. ";
$MESS["REST_APP_LAYOUT_PAYMENT_ACCESS_TITLE_SUBSCRIBE_APP_MSGVER_1"] = "\"#APP_NAME#\" қосымшасын пайдалану үшін Маркетплейс жазылымын сатып алыңыз немесе 15 күндік тегін маркетплейс демо кезеңін қосыңыз.";
$MESS["REST_APP_LAYOUT_PAYMENT_ACCESS_TITLE_SUBSCRIBE_APP_MSGVER_2"] = "\"#APP_NAME#\" қосымшасын пайдалану үшін Битрикс24 Маркет Плюс жазылымын сатып алыңыз немесе Битрикс24.Маркет Плюс демо кезеңін 15 күнге тегін қосыңыз.";

View File

@@ -1,7 +1,7 @@
<?php
$MESS["REST_APP_LAYOUT_PAYMENT_ACCESS_TITLE_SUBSCRIBE_2"] = "Подписка на Маркет закончилась";
$MESS["REST_APP_LAYOUT_PAYMENT_ACCESS_TITLE_SUBSCRIBE_2_MSGVER_1"] = "Подписка на Маркетплейс закончилась";
$MESS["REST_APP_LAYOUT_PAYMENT_ACCESS_TITLE_SUBSCRIBE_APP"] = "Для использования приложения \"#APP_NAME#\" купите подписку на Битрикс24.Маркет Плюс или активируйте бесплатный демо-период Битрикс24.Маркет Плюс на 15 дней.";
$MESS["REST_APP_LAYOUT_PAYMENT_ACCESS_TITLE_SUBSCRIBE_APP_MSGVER_2"] = "Для использования приложения \"#APP_NAME#\" купите подписку на Битрикс24 Маркет Плюс или активируйте бесплатный демо-период Битрикс24.Маркет Плюс на 15 дней.";
$MESS["REST_APP_LAYOUT_PAYMENT_ACCESS_TITLE_SUBSCRIBE_APP_MSGVER_1"] = "Для использования приложения \"#APP_NAME#\" купите подписку на Маркетплейс или активируйте бесплатный демо-период Маркетплейс на 15 дней.";
$MESS["REST_APP_LAYOUT_PAYMENT_ACCESS_TITLE_APP"] = "Оплаченный период использования \"#APP_NAME#\" закончился";
$MESS["REST_APP_LAYOUT_PAYMENT_ACCESS_BTN_BUY_SUBSCRIBE"] = "Продлить подписку";

View File

@@ -38,7 +38,7 @@ if ($arResult['PAYMENT_TYPE'] === AppTable::STATUS_SUBSCRIPTION || $arResult['AP
if (!$arResult['SUBSCRIPTION_FINISH'])
{
$title = Loc::getMessage(
'REST_APP_LAYOUT_PAYMENT_ACCESS_TITLE_SUBSCRIBE_APP',
'REST_APP_LAYOUT_PAYMENT_ACCESS_TITLE_SUBSCRIBE_APP_MSGVER_2',
[
'#APP_NAME#' => htmlspecialcharsbx($arResult['APP_NAME'])
]

View File

@@ -175,7 +175,7 @@ BX.rest.AppLayout.set(
<?
if($arParams['PLACEMENT'] !== \Bitrix\Rest\PlacementTable::PLACEMENT_DEFAULT):
?>
BX.rest.AppLayout.get('<?=$arResult['APP_SID']?>').denyInterface(['setTitle', 'setScroll', 'reloadWindow']);
BX.rest.AppLayout.get('<?=$arResult['APP_SID']?>').denyInterface(['setTitle']);
<?
endif;
if($arParams['POPUP']):

View File

@@ -23,8 +23,8 @@ if(!function_exists('restMenuBuildEventHandler'))
function restMenuBuildEventHandler($placement, $eventParam, &$menu)
{
$appList = \Bitrix\Rest\HandlerHelper::getApplicationList($placement);
$langInstall = \Bitrix\Main\Localization\Loc::getMessage('REST_AP_MENU_ITEM_TEXT_MORE_2');
$langMarket = \Bitrix\Main\Localization\Loc::getMessage('REST_AP_MENU_ITEM_TEXT_2');
$langInstall = \Bitrix\Main\Localization\Loc::getMessage('REST_AP_MENU_ITEM_TEXT_MORE_2_MSGVER_2');
$langMarket = \Bitrix\Main\Localization\Loc::getMessage('REST_AP_MENU_ITEM_TEXT_2_MSGVER_2');
if (\Bitrix\Rest\Integration\Market\Label::isRenamedMarket())
{
$langMarket = \Bitrix\Main\Localization\Loc::getMessage('REST_AP_MENU_ITEM_TEXT_2_MSGVER_1');

View File

@@ -1,6 +1,6 @@
<?php
$MESS["REST_AP_MENU_ITEM_TEXT_2"] = "Bitrix24.Market";
$MESS["REST_AP_MENU_ITEM_TEXT_2_MSGVER_1"] = "Bitrix24 Market";
$MESS["REST_AP_MENU_ITEM_TEXT_MORE_2"] = "Install from Bitrix24 Market";
$MESS["REST_AP_MENU_ITEM_TEXT_2_MSGVER_2"] = "Bitrix24 Market";
$MESS["REST_AP_MENU_ITEM_TEXT_MORE_2_MSGVER_1"] = "Install from Bitrix24 Market";
$MESS["REST_AP_MENU_ITEM_TEXT_MORE_2_MSGVER_2"] = "Install from Bitrix24 Market";
$MESS["REST_AP_MENU_ITEM_TITLE_2"] = "Bitrix24 Market extra features";

View File

@@ -1,6 +1,6 @@
<?php
$MESS["REST_AP_MENU_ITEM_TEXT_2"] = "Битрикс24 Маркетплейс";
$MESS["REST_AP_MENU_ITEM_TEXT_2_MSGVER_1"] = "Маркетплейс";
$MESS["REST_AP_MENU_ITEM_TEXT_MORE_2"] = "Битрикс24.Маркет-тен орнату";
$MESS["REST_AP_MENU_ITEM_TEXT_2_MSGVER_2"] = "Битрикс24 Маркет";
$MESS["REST_AP_MENU_ITEM_TEXT_MORE_2_MSGVER_1"] = "Маркетплейстен орнату";
$MESS["REST_AP_MENU_ITEM_TEXT_MORE_2_MSGVER_2"] = "Битрикс24 Маркеттен орнату";
$MESS["REST_AP_MENU_ITEM_TITLE_2"] = "Қосымшалар каталогынан қосымша мүмкіндіктер";

View File

@@ -1,6 +1,6 @@
<?php
$MESS['REST_AP_MENU_ITEM_TEXT_2'] = 'Битрикс24.Маркет';
$MESS['REST_AP_MENU_ITEM_TEXT_2_MSGVER_2'] = 'Битрикс24 Маркет';
$MESS['REST_AP_MENU_ITEM_TEXT_2_MSGVER_1'] = 'Маркетплейс';
$MESS['REST_AP_MENU_ITEM_TEXT_MORE_2'] = 'Установить из Битрикс24.Маркет';
$MESS['REST_AP_MENU_ITEM_TEXT_MORE_2_MSGVER_2'] = 'Установить из Битрикс24 Маркет';
$MESS['REST_AP_MENU_ITEM_TEXT_MORE_2_MSGVER_1'] = 'Установить из Маркетплейс';
$MESS['REST_AP_MENU_ITEM_TITLE_2'] = 'Дополнительные возможности из каталога приложений';

View File

@@ -50,10 +50,10 @@ class CRestConfigurationActionComponent extends CBitrixComponent
if ($this->getTemplateName() === 'crm')
{
$item['title'] = Loc::getMessage('REST_CONFIGURATION_ACTION_IMPORT_CRM_TITLE');
$item['description'] = Loc::getMessage('REST_CONFIGURATION_ACTION_IMPORT_CRM_DESCRIPTION');
$item['title'] = Loc::getMessage('REST_CONFIGURATION_ACTION_IMPORT_CRM_TITLE_MSGVER_1');
$item['description'] = Loc::getMessage('REST_CONFIGURATION_ACTION_IMPORT_CRM_DESCRIPTION_MSGVER_1');
$item['action'] = Loc::getMessage('REST_CONFIGURATION_ACTION_IMPORT_CRM_ACTION');
$item['icon'] = '/bitrix/images/rest/configuration/rest-market-site-import-crm.svg';
$item['icon'] = '/bitrix/images/rest/configuration/rest-market-site-import-crm.png';
$result['ITEMS']['import'] = $item;
}
else
@@ -73,10 +73,10 @@ class CRestConfigurationActionComponent extends CBitrixComponent
if ($this->getTemplateName() === 'crm')
{
$item['title'] = Loc::getMessage('REST_CONFIGURATION_ACTION_EXPORT_CRM_TITLE');
$item['description'] = Loc::getMessage('REST_CONFIGURATION_ACTION_EXPORT_CRM_DESCRIPTION');
$item['title'] = Loc::getMessage('REST_CONFIGURATION_ACTION_EXPORT_CRM_TITLE_MSGVER_1');
$item['description'] = Loc::getMessage('REST_CONFIGURATION_ACTION_EXPORT_CRM_DESCRIPTION_MSGVER_1');
$item['action'] = Loc::getMessage('REST_CONFIGURATION_ACTION_EXPORT_CRM_ACTION');
$item['icon'] = '/bitrix/images/rest/configuration/rest-market-site-export-crm.svg';
$item['icon'] = '/bitrix/images/rest/configuration/rest-market-site-export-crm.png';
$result['ITEMS']['export'] = $item;
}
else
@@ -132,4 +132,4 @@ class CRestConfigurationActionComponent extends CBitrixComponent
$this->includeComponentTemplate();
}
}
}

View File

@@ -1,10 +1,10 @@
<?php
$MESS["REST_CONFIGURATION_ACTION_EXPORT_CRM_ACTION"] = "Export";
$MESS["REST_CONFIGURATION_ACTION_EXPORT_CRM_DESCRIPTION"] = "Save and share your CRM configuration and preferences.";
$MESS["REST_CONFIGURATION_ACTION_EXPORT_CRM_TITLE"] = "Share your solutions";
$MESS["REST_CONFIGURATION_ACTION_EXPORT_CRM_DESCRIPTION_MSGVER_1"] = "Export your CRM and preferences<br/>to another Bitrix24.";
$MESS["REST_CONFIGURATION_ACTION_EXPORT_CRM_TITLE_MSGVER_1"] = "Share your solutions";
$MESS["REST_CONFIGURATION_ACTION_IMPORT_CRM_ACTION"] = "Migrate";
$MESS["REST_CONFIGURATION_ACTION_IMPORT_CRM_DESCRIPTION"] = "Migrate your data and preferences </br>from a third-party CRM.";
$MESS["REST_CONFIGURATION_ACTION_IMPORT_CRM_TITLE"] = "Bitrix24 Quick Start";
$MESS["REST_CONFIGURATION_ACTION_IMPORT_CRM_DESCRIPTION_MSGVER_1"] = "Migrate your data and preferences </br>from a third-party CRM.";
$MESS["REST_CONFIGURATION_ACTION_IMPORT_CRM_TITLE_MSGVER_1"] = "Quick start";
$MESS["REST_CONFIGURATION_ACTION_TITLE_EXPORT"] = "Export";
$MESS["REST_CONFIGURATION_ACTION_TITLE_IMPORT"] = "Import";
$MESS["REST_CONFIGURATION_ACTION_TITLE_LOAD_MARKETPLACE_2"] = "Publish your CRM solution preset to Bitrix24 Market";

View File

@@ -1,10 +1,10 @@
<?php
$MESS["REST_CONFIGURATION_ACTION_EXPORT_CRM_ACTION"] = "Экспорттау";
$MESS["REST_CONFIGURATION_ACTION_EXPORT_CRM_DESCRIPTION"] = "CRM баптауларын сақтаңыз, </br>оларды әріптестеріңізбен бөлісу үшін";
$MESS["REST_CONFIGURATION_ACTION_EXPORT_CRM_TITLE"] = "Шешімдермен бөлісіңіз";
$MESS["REST_CONFIGURATION_ACTION_EXPORT_CRM_DESCRIPTION_MSGVER_1"] = "CRM-ді барлық баптауларымен <br/> басқа Битрикс24-ке экспорттаңыз";
$MESS["REST_CONFIGURATION_ACTION_EXPORT_CRM_TITLE_MSGVER_1"] = "Дайын шешіммен бөлісіңіз";
$MESS["REST_CONFIGURATION_ACTION_IMPORT_CRM_ACTION"] = "Импорттау";
$MESS["REST_CONFIGURATION_ACTION_IMPORT_CRM_DESCRIPTION"] = "Баптаулар мен деректерді </br>басқа CRM-ден тасымалдау";
$MESS["REST_CONFIGURATION_ACTION_IMPORT_CRM_TITLE"] = "Битрикс24-те жылдам бастау";
$MESS["REST_CONFIGURATION_ACTION_IMPORT_CRM_DESCRIPTION_MSGVER_1"] = "CRM-ді барлық баптаулармен <br/> басқа Битрикс24-тен тасымалдаңыз";
$MESS["REST_CONFIGURATION_ACTION_IMPORT_CRM_TITLE_MSGVER_1"] = "Жылдам бастау";
$MESS["REST_CONFIGURATION_ACTION_TITLE_EXPORT"] = "Экспорттау";
$MESS["REST_CONFIGURATION_ACTION_TITLE_IMPORT"] = "Импорттау";
$MESS["REST_CONFIGURATION_ACTION_TITLE_LOAD_MARKETPLACE_2"] = "Маркетте жариялау";

View File

@@ -3,9 +3,9 @@ $MESS["REST_CONFIGURATION_ACTION_TITLE_IMPORT"] = "Импортировать";
$MESS["REST_CONFIGURATION_ACTION_TITLE_EXPORT"] = "Экспортировать";
$MESS["REST_CONFIGURATION_ACTION_TITLE_LOAD_MARKETPLACE_2"] = "Опубликовать в Маркет";
$MESS["REST_CONFIGURATION_ACTION_TITLE_LOAD_MARKETPLACE_2_MSGVER_1"] = "Опубликовать в Маркетплейс";
$MESS["REST_CONFIGURATION_ACTION_IMPORT_CRM_TITLE"] = "Быстрый старт <br/>в Битрикс24";
$MESS["REST_CONFIGURATION_ACTION_IMPORT_CRM_DESCRIPTION"] = "Перенесите настройки и данные <br/>из другой CRM";
$MESS["REST_CONFIGURATION_ACTION_IMPORT_CRM_TITLE_MSGVER_1"] = "Быстрый старт";
$MESS["REST_CONFIGURATION_ACTION_IMPORT_CRM_DESCRIPTION_MSGVER_1"] = "Перенесите CRM со всеми настройками <br/> из другого Битрикс24";
$MESS["REST_CONFIGURATION_ACTION_IMPORT_CRM_ACTION"] = "Импортировать";
$MESS["REST_CONFIGURATION_ACTION_EXPORT_CRM_TITLE"] = "Делитесь решениями";
$MESS["REST_CONFIGURATION_ACTION_EXPORT_CRM_DESCRIPTION"] = "Сохраняйте настройки вашей <br/>CRM, чтобы поделиться ими <br/>с коллегами";
$MESS["REST_CONFIGURATION_ACTION_EXPORT_CRM_ACTION"] = "Экспортировать";
$MESS["REST_CONFIGURATION_ACTION_EXPORT_CRM_TITLE_MSGVER_1"] = "Делитесь готовым решением";
$MESS["REST_CONFIGURATION_ACTION_EXPORT_CRM_DESCRIPTION_MSGVER_1"] = "Экспортируйте CRM со всеми настройками <br/> в другой Битрикс24";
$MESS["REST_CONFIGURATION_ACTION_EXPORT_CRM_ACTION"] = "Экспортировать";

View File

@@ -19,11 +19,11 @@
}
.rest-market-section__item-img {
width: 190px;
height: 190px;
width: 185px;
height: 175px;
position: absolute;
right: 0;
bottom: -10px;
bottom: -3px;
}
.rest-market-section__item_export {

View File

@@ -1 +1 @@
.rest-market-section{display:flex;align-items:center;justify-content:space-between}.rest-market-section__item{width:432px;#min-width:350px;height:170px;border-radius:16px;position:relative;overflow:hidden}.rest-market-section__item_import{margin-right:15px;background-color:var(--pallete-blue-blue-55,#58a4ff)}.rest-market-section__item-img{width:190px;height:190px;position:absolute;right:0;bottom:-10px}.rest-market-section__item_export{background-color:var(--pallete-green-green-55,#15c674)}.rest-market-section__item-container{padding:18px}.rest-market-section__item-title{color:#fff;font-weight:600;font-size:17px;line-height:23px;letter-spacing:.2px;width:300px;margin-bottom:6px}.rest-market-section__item-description{color:#fff;font-weight:400;font-size:14px;line-height:19px;letter-spacing:0;width:300px}.rest-market-section__item-action{margin-top:18px}.rest-market-section__item-action .ui-btn{--ui-btn-background:var(--design-outline-default-design-outline-bg,#fff)!important;--ui-btn-border-color:var(--design-outline-default-design-outline-stroke,#edeef0)!important;--ui-btn-color:var(--design-outline-default-design-outline-content,#525c69)!important;--ui-btn-background-hover:var(--design-outline-default-design-outline-bg,hsla(0,0%,100%,.9))!important;--ui-btn-background-active:var(--design-outline-default-design-outline-bg,hsla(0,0%,100%,.9))!important}
.rest-market-section{display:flex;align-items:center;justify-content:space-between}.rest-market-section__item{width:432px;#min-width:350px;height:170px;border-radius:16px;position:relative;overflow:hidden}.rest-market-section__item_import{margin-right:15px;background-color:var(--pallete-blue-blue-55,#58a4ff)}.rest-market-section__item-img{width:185px;height:175px;position:absolute;right:0;bottom:-3px}.rest-market-section__item_export{background-color:var(--pallete-green-green-55,#15c674)}.rest-market-section__item-container{padding:18px}.rest-market-section__item-title{color:#fff;font-weight:600;font-size:17px;line-height:23px;letter-spacing:.2px;width:300px;margin-bottom:6px}.rest-market-section__item-description{color:#fff;font-weight:400;font-size:14px;line-height:19px;letter-spacing:0;width:300px}.rest-market-section__item-action{margin-top:18px}.rest-market-section__item-action .ui-btn{--ui-btn-background:var(--design-outline-default-design-outline-bg,#fff)!important;--ui-btn-border-color:var(--design-outline-default-design-outline-stroke,#edeef0)!important;--ui-btn-color:var(--design-outline-default-design-outline-content,#525c69)!important;--ui-btn-background-hover:var(--design-outline-default-design-outline-bg,hsla(0,0%,100%,.9))!important;--ui-btn-background-active:var(--design-outline-default-design-outline-bg,hsla(0,0%,100%,.9))!important}

View File

@@ -65,7 +65,8 @@ class CRestConfigurationExportComponent extends CBitrixComponent implements Cont
{
return [
'MANIFEST_CODE',
'ITEM_CODE'
'ITEM_CODE',
'ADDITIONAL',
];
}
@@ -142,6 +143,7 @@ class CRestConfigurationExportComponent extends CBitrixComponent implements Cont
$setting = new Setting($context);
$setting->deleteFull();
$setting->set(Setting::MANIFEST_CODE, $this->arParams['MANIFEST_CODE']);
$setting->set(Setting::SETTING_ACTION_ADDITIONAL_OPTION, $this->arParams['ADDITIONAL'] ?? []);
$structure = new Structure($context);
if($structure->getFolder())
@@ -373,7 +375,8 @@ class CRestConfigurationExportComponent extends CBitrixComponent implements Cont
'CODE' => $manifest['CODE'],
'VERSION' => Setting::VERSION,
'MANIFEST_VERSION' => $manifest['VERSION'],
'USES' => $manifest['USES']
'USES' => $manifest['USES'],
'COMPATIBILITY_TAGS' => $manifest['COMPATIBILITY_TAGS'] ?? [],
];
$context = $this->getContext();
$structure = new Structure($context);
@@ -390,7 +393,9 @@ class CRestConfigurationExportComponent extends CBitrixComponent implements Cont
'MANIFEST_CODE' => $manifest['CODE'],
'IMPORT_MANIFEST' => [],//TODO: delete this after fix crm
'MANIFEST' => $manifest,
'ITEM_CODE' => $this->arParams['ITEM_CODE']
'ITEM_CODE' => $this->arParams['ITEM_CODE'] ?? '',
'SETTING' => $setting->get(Setting::SETTING_MANIFEST),
'ADDITIONAL_OPTION' => $setting->get(Setting::SETTING_ACTION_ADDITIONAL_OPTION),
]
);
$result = true;
@@ -424,7 +429,7 @@ class CRestConfigurationExportComponent extends CBitrixComponent implements Cont
$code = preg_replace('/[^a-zA-Z0-9_]/', '', $request->getPost("code"));
$step = intval($request->getPost("step"));
$next = htmlspecialcharsbx($request->getPost("next"));
if($code)
if ($code)
{
$structure = new Structure($this->getContext());
$items = Controller::callEventExport(
@@ -432,7 +437,7 @@ class CRestConfigurationExportComponent extends CBitrixComponent implements Cont
$code,
$step,
$next,
$this->arParams['ITEM_CODE'],
$this->arParams['ITEM_CODE'] ?? '',
$this->getContext()
);
foreach ($items as $item)
@@ -514,8 +519,9 @@ class CRestConfigurationExportComponent extends CBitrixComponent implements Cont
'TYPE' => 'EXPORT',
'STEP' => $step,
'NEXT' => $next,
'ITEM_CODE' => $this->arParams['ITEM_CODE'],
'CONTEXT_USER' => $this->getContext()
'ITEM_CODE' => $this->arParams['ITEM_CODE'] ?? '',
'CONTEXT_USER' => $this->getContext(),
'ADDITIONAL_OPTION' => $this->arParams['ADDITIONAL'] ?? [],
]
);
foreach ($items as $item)

View File

@@ -172,6 +172,19 @@ class CRestConfigurationImportComponent extends CBitrixComponent
return true;
}
protected function areCompatibleManifests(array $manifestData1, $manifestData2): bool
{
foreach ([$manifestData1, $manifestData2] as $manifestData)
{
if (!is_array($manifestData['COMPATIBILITY_TAGS']) || empty($manifestData['COMPATIBILITY_TAGS']))
{
return false;
}
}
return !empty(array_intersect($manifestData['COMPATIBILITY_TAGS'], $manifestData['COMPATIBILITY_TAGS']));
}
protected function prepareResult()
{
$result = [
@@ -460,9 +473,19 @@ class CRestConfigurationImportComponent extends CBitrixComponent
{
if(!empty($result['MANIFEST']))
{
if($result['IMPORT_MANIFEST_FILE']['CODE'] != $result['MANIFEST']['CODE'])
if (
$result['IMPORT_MANIFEST_FILE']['CODE'] != $result['MANIFEST']['CODE']
&&
!$this->areCompatibleManifests(
$result['MANIFEST'],
$result['IMPORT_MANIFEST_FILE']
)
)
{
$this->errors->setError(new Error(Loc::getMessage('REST_CONFIGURATION_IMPORT_MANIFEST_NOT_CURRENT')));
$this->errors->setError(
new Error(Loc::getMessage('REST_CONFIGURATION_IMPORT_MANIFEST_NOT_CURRENT'))
);
return false;
}
else

View File

@@ -10,11 +10,11 @@ $MESS["REST_CONFIGURATION_IMPORT_ERRORS_REPORT_BTN"] = "Error report";
$MESS["REST_CONFIGURATION_IMPORT_FINISH_DESCRIPTION_MSGVER_1"] = "All done! You can now start editing your site.";
$MESS["REST_CONFIGURATION_IMPORT_FINISH_ERROR_DESCRIPTION"] = "Settings have been imported; however, there were issues.";
$MESS["REST_CONFIGURATION_IMPORT_INSTALL_APP_TITLE_BLOCK"] = "Application installation";
$MESS["REST_CONFIGURATION_IMPORT_ROLLBACK_MODE_DESCRIPTION_2"] = "To remove the application, select one of the available Bitrix24 configurations, or select a new application in Bitrix24 Market.";
$MESS["REST_CONFIGURATION_IMPORT_ROLLBACK_MODE_DESCRIPTION_2_MSGVER_1"] = "To remove the application, select one of the available Bitrix24 configurations, or select a new application in Bitrix24 Market.";
$MESS["REST_CONFIGURATION_IMPORT_ROLLBACK_MODE_DESCRIPTION_2_MSGVER_2"] = "To remove the application, select one of the available Bitrix24 configurations, or select a new application in Bitrix24 Market.";
$MESS["REST_CONFIGURATION_IMPORT_ROLLBACK_SUBMIT_BTN"] = "Apply";
$MESS["REST_CONFIGURATION_IMPORT_ROLLBACK_TITLE_BLOCK"] = "Recover solution preset";
$MESS["REST_CONFIGURATION_IMPORT_SAVE_FILE_BTN"] = "Upload";
$MESS["REST_CONFIGURATION_IMPORT_SAVE_FILE_DESCRIPTION"] = "Upload solution preset file";
$MESS["REST_CONFIGURATION_IMPORT_SAVE_FILE_DESCRIPTION_MSGVER_1"] = "Upload a ZIP file you exported from another Bitrix24. #LINK_START#Learn more#LINK_END#";
$MESS["REST_CONFIGURATION_IMPORT_SAVE_FILE_PROCESS"] = "Uploading file";
$MESS["REST_CONFIGURATION_IMPORT_TITLE_BLOCK"] = "Import solution preset";

View File

@@ -10,11 +10,11 @@ $MESS["REST_CONFIGURATION_IMPORT_ERRORS_REPORT_BTN"] = "Қателер тура
$MESS["REST_CONFIGURATION_IMPORT_FINISH_DESCRIPTION_MSGVER_1"] = "Дайын! Редакциялауға кірісуге болады";
$MESS["REST_CONFIGURATION_IMPORT_FINISH_ERROR_DESCRIPTION"] = "Баптаулар импортталды, бірақ кейбір қателер бар.";
$MESS["REST_CONFIGURATION_IMPORT_INSTALL_APP_TITLE_BLOCK"] = "Қосымшаны орнату";
$MESS["REST_CONFIGURATION_IMPORT_ROLLBACK_MODE_DESCRIPTION_2"] = "Пайдаланылған қосымшаны жою үшін сіздің Битрикс24 баптауларының қолжетімді нұсқаларының бірін таңдау керек немесе Битрикс24 Маркеттен жаңа қосымша таңдау керек.";
$MESS["REST_CONFIGURATION_IMPORT_ROLLBACK_MODE_DESCRIPTION_2_MSGVER_1"] = "Пайдаланылған қосымшаны жою үшін Битрикс24 баптауының қолжетімді нұсқаларының бірін таңдау керек немесе Маркетплейсте жаңа қосымшаны таңдау керек";
$MESS["REST_CONFIGURATION_IMPORT_ROLLBACK_MODE_DESCRIPTION_2_MSGVER_2"] = "Пайдаланылған қосымшаны жою үшін өзіңіздің Битрикс24-те қолжетімді баптау опцияларыңыздың бірін таңдауыңыз керек немесе Битрикс24 Маркеттен жаңа қосымша таңдаңыз";
$MESS["REST_CONFIGURATION_IMPORT_ROLLBACK_SUBMIT_BTN"] = "Қолдану";
$MESS["REST_CONFIGURATION_IMPORT_ROLLBACK_TITLE_BLOCK"] = "Салалық баптауларды қалпына келтіру";
$MESS["REST_CONFIGURATION_IMPORT_SAVE_FILE_BTN"] = "Жүктеу";
$MESS["REST_CONFIGURATION_IMPORT_SAVE_FILE_DESCRIPTION"] = "Салалық баптаулары бар файлды жүктеңіз";
$MESS["REST_CONFIGURATION_IMPORT_SAVE_FILE_DESCRIPTION_MSGVER_1"] = "Басқа Битрикс24-тен экспорттаған файлды барлық баптауларымен ZIP форматында жүктеңіз. #LINK_START#Толығырақ#LINK_END#";
$MESS["REST_CONFIGURATION_IMPORT_SAVE_FILE_PROCESS"] = "Файлды жүктейміз";
$MESS["REST_CONFIGURATION_IMPORT_TITLE_BLOCK"] = "Салалық баптаулар импорты";

View File

@@ -4,10 +4,10 @@ $MESS['REST_CONFIGURATION_IMPORT_SAVE_FILE_BTN'] = 'Загрузить';
$MESS['REST_CONFIGURATION_IMPORT_TITLE_BLOCK'] = 'Импорт отраслевых настроек';
$MESS['REST_CONFIGURATION_IMPORT_ROLLBACK_TITLE_BLOCK'] = 'Восстановление отраслевых настроек';
$MESS['REST_CONFIGURATION_IMPORT_INSTALL_APP_TITLE_BLOCK'] = 'Установка приложения';
$MESS['REST_CONFIGURATION_IMPORT_SAVE_FILE_DESCRIPTION'] = 'Загрузите файл с отраслевыми настройками';
$MESS['REST_CONFIGURATION_IMPORT_SAVE_FILE_DESCRIPTION_MSGVER_1'] = 'Загрузите файл в формате ZIP со всеми настройками, которые вы экспортировали из другого Битрикс24. #LINK_START#Подробнее#LINK_END#';
$MESS['REST_CONFIGURATION_IMPORT_SAVE_FILE_PROCESS'] = 'Загружаем файл';
$MESS['REST_CONFIGURATION_IMPORT_ROLLBACK_SUBMIT_BTN'] = 'Применить';
$MESS['REST_CONFIGURATION_IMPORT_ROLLBACK_MODE_DESCRIPTION_2'] = 'Для удаления используемого приложения необходимо выбрать один из доступных вариантов настройки вашего Битрикс24, либо выбрать в Битрикс24.Маркет новое приложение';
$MESS['REST_CONFIGURATION_IMPORT_ROLLBACK_MODE_DESCRIPTION_2_MSGVER_2'] = "Для удаления используемого приложения необходимо выбрать один из доступных вариантов настройки вашего Битрикс24, либо выбрать в Битрикс24 Маркет новое приложение";
$MESS['REST_CONFIGURATION_IMPORT_ROLLBACK_MODE_DESCRIPTION_2_MSGVER_1'] = 'Для удаления используемого приложения необходимо выбрать один из доступных вариантов настройки вашего Битрикс24, либо выбрать в маркетплейсе новое приложение';
$MESS['REST_CONFIGURATION_IMPORT_EASY_DELETE_APP'] = 'У вас нет доступных вариантов для изменения настроек Битрикс24, поэтому мы просто удалили приложение';

View File

@@ -63,6 +63,10 @@
line-height: 18px;
}
.rest-configuration-pointer-link {
cursor: pointer;
}
/*round widget*/
.rest-configuration-start-icon-main-container {
background-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDk4IiBoZWlnaHQ9IjE3OCIgdmlld0JveD0iMCAwIDQ5OCAxNzgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIG9wYWNpdHk9IjAuMTE3MTY0IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTQ0My4wMzkgMTMzLjk4N0g0MjAuNjgyQzQyMC40OTEgMTMzLjk4NyA0MjAuMzAxIDEzMy45OCA0MjAuMTEzIDEzMy45NjhDNDE1LjA2MSAxMzMuODYzIDQxMSAxMzAuMTEgNDExIDEyNS40OTdDNDExLjAwMSAxMjMuMjQ4IDQxMS45ODYgMTIxLjA5MiA0MTMuNzM4IDExOS41MDJDNDE0LjYzNiAxMTguNjg4IDQxNS42OTggMTE4LjA1NiA0MTYuODUzIDExNy42MzVDNDE2LjgzNCAxMTcuNDA2IDQxNi44MjQgMTE3LjE3NSA0MTYuODI0IDExNi45NDFDNDE2LjgyNiAxMTQuNTY4IDQxNy44NjUgMTEyLjI5MyA0MTkuNzEzIDExMC42MTdDNDIxLjU2MiAxMDguOTQgNDI0LjA2OCAxMDcuOTk5IDQyNi42ODEgMTA4QzQzMC4wMjcgMTA4LjAwNCA0MzIuOTgyIDEwOS41MjQgNDM0Ljc1NyAxMTEuODQ0QzQzNS42MDEgMTExLjU3MiA0MzYuNTA4IDExMS40MjUgNDM3LjQ1NCAxMTEuNDI1QzQ0MS42MzIgMTExLjQzIDQ0NS4wNjMgMTE0LjMyMiA0NDUuNDYgMTE4LjAyMUM0NDkuNDYzIDExOC44MTMgNDUyLjQ1OSAxMjIuMDUyIDQ1Mi40NTUgMTI1LjkyNEM0NTIuNDUxIDEzMC4zODcgNDQ4LjQ2NiAxMzQuMDAyIDQ0My41NTIgMTM0QzQ0My4zOCAxMzQgNDQzLjIwOSAxMzMuOTk1IDQ0My4wMzkgMTMzLjk4N1YxMzMuOTg3WiIgZmlsbD0iIzJGQzZGNiIvPgo8cGF0aCBvcGFjaXR5PSIwLjExNzE2NCIgZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMDEuMjM1IDM2Ljk4NDVINzUuMjUyMUM3NS4wMjk4IDM2Ljk4NDUgNzQuODA5NCAzNi45NzcxIDc0LjU5MTIgMzYuOTYyNkM2OC43MTkgMzYuODQyIDY0LjAwMDMgMzIuNTEyIDY0IDI3LjE4ODRDNjQuMDAxNyAyNC41OTM2IDY1LjE0NjQgMjIuMTA1OCA2Ny4xODIzIDIwLjI3MjFDNjguMjI1OSAxOS4zMzIxIDY5LjQ1OTkgMTguNjAzNiA3MC44MDIzIDE4LjExNjhDNzAuNzc5OSAxNy44NTI4IDcwLjc2ODQgMTcuNTg2IDcwLjc2ODQgMTcuMzE2OEM3MC43NzAzIDE0LjU3ODkgNzEuOTc4MiAxMS45NTM5IDc0LjEyNjQgMTAuMDE5MUM3Ni4yNzQ2IDguMDg0MzQgNzkuMTg3MiA2Ljk5ODMzIDgyLjIyMzQgN0M4Ni4xMTI2IDcuMDA0MjggODkuNTQ2NCA4Ljc1ODA2IDkxLjYxMDEgMTEuNDM0OUM5Mi41OSAxMS4xMjE4IDkzLjY0NDkgMTAuOTUxNiA5NC43NDQgMTAuOTUyMUM5OS41OTg5IDEwLjk1NzQgMTAzLjU4NiAxNC4yOTQ2IDEwNC4wNDkgMTguNTYyNEMxMDguNyAxOS40NzY5IDExMi4xODIgMjMuMjEzOSAxMTIuMTc3IDI3LjY4MTlDMTEyLjE3MyAzMi44MzA5IDEwNy41NDEgMzcuMDAyMSAxMDEuODMxIDM3QzEwMS42MzEgMzYuOTk5OSAxMDEuNDMyIDM2Ljk5NDcgMTAxLjIzNSAzNi45ODQ1VjM2Ljk4NDVaIiBmaWxsPSIjMkZDNkY2Ii8+CjxwYXRoIG9wYWNpdHk9IjAuMiIgZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik04Ni43MjYzIDE3Ni45NjRIMjYuOTA2QzI2LjM5NDIgMTc2Ljk2NCAyNS44ODY3IDE3Ni45NDcgMjUuMzg0MyAxNzYuOTE0QzExLjg2NDggMTc2LjYzNyAxLjAwMDY4IDE2Ni42NzggMSAxNTQuNDMzQzEuMDAzOTMgMTQ4LjQ2NSAzLjYzOTQ2IDE0Mi43NDMgOC4zMjY4IDEzOC41MjZDMTAuNzI5NSAxMzYuMzY0IDEzLjU3MDQgMTM0LjY4OCAxNi42NjEyIDEzMy41NjlDMTYuNjA5NSAxMzIuOTYxIDE2LjU4MzEgMTMyLjM0OCAxNi41ODMxIDEzMS43MjlDMTYuNTg3NCAxMjUuNDMyIDE5LjM2ODQgMTE5LjM5NCAyNC4zMTQzIDExNC45NDRDMjkuMjYwMiAxMTAuNDk0IDM1Ljk2NTkgMTA3Ljk5NiA0Mi45NTYyIDEwOEM1MS45MTA1IDEwOC4wMSA1OS44MTYyIDExMi4wNDQgNjQuNTY3NCAxMTguMkM2Ni44MjM2IDExNy40OCA2OS4yNTIzIDExNy4wODkgNzEuNzgyNiAxMTcuMDlDODIuOTYwMiAxMTcuMTAyIDkyLjE0MDcgMTI0Ljc3OCA5My4yMDUgMTM0LjU5M0MxMDMuOTE1IDEzNi42OTcgMTExLjkzIDE0NS4yOTIgMTExLjkyIDE1NS41NjhDMTExLjkwOSAxNjcuNDExIDEwMS4yNDYgMTc3LjAwNSA4OC4wOTk2IDE3N0M4Ny42Mzg3IDE3NyA4Ny4xODA4IDE3Ni45ODggODYuNzI2MyAxNzYuOTY0VjE3Ni45NjRaIiBzdHJva2U9IiMyRkM2RjYiLz4KPHBhdGggb3BhY2l0eT0iMC4zMDI0MzIiIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNDAyLjk3OCAyMS45ODkySDM4NC44NUMzODQuNjk1IDIxLjk4OTIgMzg0LjU0MSAyMS45ODQgMzg0LjM4OSAyMS45NzM4QzM4MC4yOTIgMjEuODg5NCAzNzcgMTguODU4NCAzNzcgMTUuMTMxOUMzNzcuMDAxIDEzLjMxNTUgMzc3LjggMTEuNTc0IDM3OS4yMiAxMC4yOTA0QzM3OS45NDggOS42MzI1IDM4MC44MDkgOS4xMjI1IDM4MS43NDYgOC43ODE3OUMzODEuNzMgOC41OTY5NyAzODEuNzIyIDguNDEwMiAzODEuNzIyIDguMjIxNzRDMzgxLjcyMyA2LjMwNTI1IDM4Mi41NjYgNC40Njc3MSAzODQuMDY1IDMuMTEzMzdDMzg1LjU2NCAxLjc1OTA0IDM4Ny41OTYgMC45OTg4MzMgMzg5LjcxNCAxQzM5Mi40MjcgMS4wMDI5OSAzOTQuODIzIDIuMjMwNjQgMzk2LjI2MyA0LjEwNDQxQzM5Ni45NDcgMy44ODUyNSAzOTcuNjgzIDMuNzY2MTMgMzk4LjQ0OSAzLjc2NjQ5QzQwMS44MzYgMy43NzAxOCA0MDQuNjE4IDYuMTA2MjQgNDA0Ljk0MSA5LjA5MzY3QzQwOC4xODYgOS43MzM4MSA0MTAuNjE1IDEyLjM0OTcgNDEwLjYxMiAxNS40NzczQzQxMC42MDkgMTkuMDgxNiA0MDcuMzc4IDIyLjAwMTUgNDAzLjM5NCAyMkM0MDMuMjU0IDIxLjk5OTkgNDAzLjExNSAyMS45OTYzIDQwMi45NzggMjEuOTg5MlYyMS45ODkyWiIgc3Ryb2tlPSIjMkZDNkY2Ii8+Cjwvc3ZnPgo=');

View File

@@ -117,7 +117,7 @@ else
<div class="rest-configuration-start-icon"></div>
<div class="rest-configuration-start-icon-circle"></div>
</div>
<p class="rest-configuration-info"><?=\Bitrix\Rest\Integration\Market\Label::isRenamedMarket() ? Loc::getMessage("REST_CONFIGURATION_IMPORT_ROLLBACK_MODE_DESCRIPTION_2_MSGVER_1") : Loc::getMessage("REST_CONFIGURATION_IMPORT_ROLLBACK_MODE_DESCRIPTION_2");?></p>
<p class="rest-configuration-info"><?=\Bitrix\Rest\Integration\Market\Label::isRenamedMarket() ? Loc::getMessage("REST_CONFIGURATION_IMPORT_ROLLBACK_MODE_DESCRIPTION_2_MSGVER_1") : Loc::getMessage("REST_CONFIGURATION_IMPORT_ROLLBACK_MODE_DESCRIPTION_2_MSGVER_2");?></p>
<form method="post">
<?=bitrix_sessid_post()?>
<? foreach($arResult['ROLLBACK_ITEMS'] as $item):?>
@@ -175,11 +175,16 @@ else
<? else:
if(!empty($arResult['MANIFEST']['IMPORT_DESCRIPTION_UPLOAD']))
{
$importFileDescription = $arResult['MANIFEST']['IMPORT_DESCRIPTION_UPLOAD'];
$importFileDescription = htmlspecialcharsbx($arResult['MANIFEST']['IMPORT_DESCRIPTION_UPLOAD']);
}
else
{
$importFileDescription = Loc::getMessage('REST_CONFIGURATION_IMPORT_SAVE_FILE_DESCRIPTION');
$importFileDescription = Loc::getMessage('REST_CONFIGURATION_IMPORT_SAVE_FILE_DESCRIPTION_MSGVER_1',
[
'#LINK_START#' => '<a class="rest-configuration-pointer-link" onclick="top.BX.Helper.show(`redirect=detail&code=25376980`)">',
'#LINK_END#' => '</a>'
]
);
}
?>
<div class="rest-configuration-start-icon-main rest-configuration-start-icon-main-zip">
@@ -196,7 +201,7 @@ else
</label>
</div>
</form>
<p class="rest-configuration-info"><?=htmlspecialcharsbx($importFileDescription)?></p>
<p class="rest-configuration-info"><?= $importFileDescription?></p>
<? endif;?>
<? elseif (!empty($arResult['INSTALL_APP'])):?>
<?php

View File

@@ -1,4 +1,4 @@
<? if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true)
<?php if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true)
{
die();
}
@@ -8,7 +8,8 @@ use Bitrix\Rest\Configuration\Manifest;
use Bitrix\Main\Localization\Loc;
use Bitrix\Main\LoaderException;
use Bitrix\Main\SystemException;
use Bitrix\Main\Loader;;
use Bitrix\Main\Loader;
use \Bitrix\Main;
Loc::loadMessages(__FILE__);
@@ -154,12 +155,12 @@ class RestConfigurationComponent extends CBitrixComponent
$manifest = end($manifestList);
$variableList['MANIFEST_CODE'] = $manifest['CODE'];
$appTag[] = $manifest['CODE'];
$componentPage = 'section';
$componentPage = 'section_crm';
}
$analyticFrom .= '_' . mb_strtolower($code);
}
}
elseif ($componentPage == 'section')
elseif ($componentPage == 'section_crm')
{
if (!empty($variableList['MANIFEST_CODE']))
{
@@ -171,20 +172,23 @@ class RestConfigurationComponent extends CBitrixComponent
}
}
$variableList['ADDITIONAL_PARAMS'] = $this->request->get('additional') ?? [];
if (!empty($variableList['ADDITIONAL_PARAMS']))
{
foreach ($urlTemplateList as $url => $value)
{
$key = mb_strtoupper('PATH_TO_' . $url);
$this->arResult[$key] = rtrim($this->arResult[$key], '/') . (new Main\Web\Uri('/'))
->addParams(['additional' => $variableList['ADDITIONAL_PARAMS']])
->getUri()
;
}
}
if (!empty($this->request->get('from')))
{
$analyticFrom .= '_' . htmlspecialcharsbx($this->request->get('from'));
}
if (
$componentPage === 'section'
&& in_array(Application::getInstance()->getLicense()->getRegion(), ['ru', 'by', 'kz'])
)
{
$componentPage = 'section_crm';
}
$appTagBanner = $appTag;
$appTagBanner[] = 'premium';
@@ -244,4 +248,4 @@ class RestConfigurationComponent extends CBitrixComponent
ShowError($e->getMessage());
}
}
}
}

View File

@@ -1,6 +1,6 @@
<?php
$MESS["REST_CONFIGURATION_APP_SECTION_TITLE_2"] = "Bitrix24 Market";
$MESS["REST_CONFIGURATION_APP_SECTION_TITLE_2_MSGVER_1"] = "Bitrix24 Market";
$MESS["REST_CONFIGURATION_APP_SECTION_TITLE_2_MSGVER_2"] = "Bitrix24 Market";
$MESS["REST_CONFIGURATION_BTN_SHOW_ALL"] = "view all";
$MESS["REST_CONFIGURATION_ERROR_PLACEMENT"] = "Error: no data to show";
$MESS["REST_CONFIGURATION_TITLE_NEW_APP"] = "New applications";

View File

@@ -1,6 +1,6 @@
<?php
$MESS["REST_CONFIGURATION_APP_SECTION_TITLE_2"] = "Битрикс24.Маркет";
$MESS["REST_CONFIGURATION_APP_SECTION_TITLE_2_MSGVER_1"] = "Маркетплейс";
$MESS["REST_CONFIGURATION_APP_SECTION_TITLE_2_MSGVER_2"] = "Битрикс24 Маркет";
$MESS["REST_CONFIGURATION_BTN_SHOW_ALL"] = "барлығын қарау";
$MESS["REST_CONFIGURATION_ERROR_PLACEMENT"] = "Қате, көрсету үшін деректер жоқ";
$MESS["REST_CONFIGURATION_TITLE_NEW_APP"] = "Жаңа қосымшалар";

View File

@@ -9,6 +9,6 @@ $MESS['REST_CONFIGURATION_TITLE_PAGE_IMPORT_ROLLBACK'] = 'Восстановле
$MESS['REST_CONFIGURATION_TITLE_PAGE_PLACEMENT'] = 'Отраслевые решения';
$MESS["REST_CONFIGURATION_TITLE_NEW_APP"] = "Новые приложения";
$MESS["REST_CONFIGURATION_BTN_SHOW_ALL"] = "смотреть все";
$MESS["REST_CONFIGURATION_APP_SECTION_TITLE_2"] = "Битрикс24.Маркет";
$MESS["REST_CONFIGURATION_APP_SECTION_TITLE_2_MSGVER_2"] = "Битрикс24 Маркет";
$MESS["REST_CONFIGURATION_APP_SECTION_TITLE_2_MSGVER_1"] = "Маркетплейс";
$MESS['REST_CONFIGURATION_ERROR_PLACEMENT'] = 'Ошибка, нет данных для отображения';

View File

@@ -14,7 +14,7 @@ if(!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true)
* @global CMain $APPLICATION
* @global CUser $USER
*/
if($arResult['ERROR'])
if (!empty($arResult['ERROR']))
{
ShowError($arResult['ERROR']);
return false;
@@ -27,6 +27,7 @@ if($arResult['ERROR'])
array(
'MANIFEST_CODE' => $arResult['MANIFEST_CODE'],
'FROM' => $arResult['FROM'],
'ADDITIONAL' => $arResult['VARIABLES']['ADDITIONAL_PARAMS'],
)
);
?>
?>

View File

@@ -27,6 +27,7 @@ if($arResult['ERROR'])
array(
'SET_TITLE' => 'Y',
'FROM' => $arResult['FROM'],
'ADDITIONAL' => $arResult['VARIABLES']['ADDITIONAL_PARAMS'],
)
);
?>
?>

View File

@@ -76,4 +76,4 @@ $APPLICATION->IncludeComponent(
'FROM' => $arResult['FROM'],
)
)
?>
?>

View File

@@ -17,7 +17,7 @@ $APPLICATION->SetTitle($arResult['TITLE']);
$bodyClass = $APPLICATION->getPageProperty('BodyClass', false);
$bodyClasses = 'no-hidden no-background no-all-paddings';
$APPLICATION->setPageProperty('BodyClass', trim(sprintf('%s %s', $bodyClass, $bodyClasses)));
if($arResult['ERROR'])
if (!empty($arResult['ERROR']))
{
ShowError($arResult['ERROR']);
return false;
@@ -46,4 +46,4 @@ $APPLICATION->IncludeComponent(
'bitrix:rest.marketplace.solution',
'',
[]
);
);

View File

@@ -287,6 +287,11 @@ this.BX = this.BX || {};
BX.UI.Feedback.Form.open({
id: 'b5309667',
forms: [{
zones: ['en'],
id: 674,
lang: 'en',
sec: '5iorws'
}, {
zones: ['es'],
id: 676,
lang: 'es',
@@ -302,11 +307,6 @@ this.BX = this.BX || {};
lang: 'br',
sec: 'kuelnm'
}],
defaultForm: {
id: 674,
lang: 'en',
sec: '5iorws'
},
presets: {
...babelHelpers.classPrivateFieldLooseBase(this, _formConfiguration)[_formConfiguration],
sender_page: document.location.href

View File

@@ -110,11 +110,11 @@ export class EInvoiceAppButton extends EventEmitter
BX.UI.Feedback.Form.open({
id: 'b5309667',
forms: [
{ zones: ['en'], id: 674, lang: 'en', sec: '5iorws' },
{ zones: ['es'], id: 676, lang: 'es', sec: 'uthphh' },
{ zones: ['de'], id: 670, lang: 'de', sec: 'gk89kt' },
{ zones: ['com.br'], id: 668, lang: 'br', sec: 'kuelnm' },
],
defaultForm: { id: 674, lang: 'en', sec: '5iorws' },
presets: {
...this.#formConfiguration,
sender_page: document.location.href,

View File

@@ -104,7 +104,7 @@ class RestIntegrationEditComponent extends CBitrixComponent implements Controlle
!$isAdmin
&&
(
$presetData['ADMIN_ONLY'] === 'Y'
($presetData['ADMIN_ONLY'] ?? 'N') === 'Y'
|| $presetData['OPTIONS']['WIDGET_NEEDED'] !== 'D'
|| $presetData['OPTIONS']['APPLICATION_NEEDED'] !== 'D'
)
@@ -142,12 +142,12 @@ class RestIntegrationEditComponent extends CBitrixComponent implements Controlle
{
$result['QUERY_NEEDED'] = $presetData['OPTIONS']['QUERY_NEEDED'] ?? null;
$result['ERROR_MESSAGE'][] = Loc::getMessage(
'REST_INTEGRATION_EDIT_ATTENTION_USES_WEBHOOK',
'REST_INTEGRATION_EDIT_ATTENTION_USES_WEBHOOK_MSGVER_1',
[
'#URL#' =>
'<a href="'.\Bitrix\UI\Util::getArticleUrlByCode('12337906').'" >'
. Loc::getMessage('REST_INTEGRATION_EDIT_ATTENTION_USES_WEBHOOK_URL_MESSAGE')
. '</a>'
'[strong]' => '<strong>',
'[/strong]' => '</strong>',
'[article_link]' => '<a href="'.\Bitrix\UI\Util::getArticleUrlByCode('12337906').'" >',
'[/article_link]' => '</a>'
]
);
}
@@ -588,4 +588,4 @@ class RestIntegrationEditComponent extends CBitrixComponent implements Controlle
]
];
}
}
}

View File

@@ -1,6 +1,5 @@
<?php
$MESS["REST_INTEGRATION_EDIT_ATTENTION_USES_WEBHOOK"] = "<strong>Attention!</strong> This link allows a person who is in possession of it to perform actions according to permissions assigned to the link. Please keep this link secret. Learn more #URL#.";
$MESS["REST_INTEGRATION_EDIT_ATTENTION_USES_WEBHOOK_URL_MESSAGE"] = "here";
$MESS["REST_INTEGRATION_EDIT_ATTENTION_USES_WEBHOOK_MSGVER_1"] = "[strong]Attention![/strong] This link allows anyone to perform actions according to permissions assigned to the link. Please keep this link secret. [article_link]Learn more[/article_link]";
$MESS["REST_INTEGRATION_EDIT_ERROR_ACCESS_DENIED"] = "Access denied.";
$MESS["REST_INTEGRATION_EDIT_ERROR_CREAT"] = "Error creating an integration: #ERROR_TEXT#";
$MESS["REST_INTEGRATION_EDIT_ERROR_NOT_FOUND"] = "Integration was not found";

View File

@@ -1,6 +1,8 @@
<?php
$MESS["REST_INTEGRATION_EDIT_ATTENTION_USES_WEBHOOK"] = "<strong>Назар аударыңыз!</strong> Бұл сілтеме порталдағы әрекеттерді бапталған құқықтарға сәйкес орындауға мүмкіндік береді, оны құпия ұстау қажет. Толығырақ біздің #URL#.";
$MESS["REST_INTEGRATION_EDIT_ATTENTION_USES_WEBHOOK_URL_MESSAGE"] = "мақалада оқыңыз.";
$MESS["REST_INTEGRATION_EDIT_ATTENTION_USES_WEBHOOK_MSGVER_1"] = "
[strong]Назар аударыңыз![/strong] Бұл сілтеме порталдағы әрекеттерді реттелген құқықтарға сәйкес орындауға мүмкіндік береді, оны құпия ұстау қажет. Толығырақ біздің [article_link]мақалада[/article_link].
";
$MESS["REST_INTEGRATION_EDIT_ERROR_ACCESS_DENIED"] = "Қолжетімсіз";
$MESS["REST_INTEGRATION_EDIT_ERROR_CREAT"] = "Интеграция жасау қатесі: #ERROR_TEXT#";
$MESS["REST_INTEGRATION_EDIT_ERROR_NOT_FOUND"] = "Интеграция табылмады";

View File

@@ -4,6 +4,5 @@ $MESS['REST_INTEGRATION_EDIT_ERROR_REQUIRED_MODULES'] = 'Для данной и
$MESS['REST_INTEGRATION_EDIT_ERROR_ACCESS_DENIED'] = 'Нет доступа';
$MESS['REST_INTEGRATION_EDIT_ERROR_NOT_FOUND'] = 'Интеграция не найдена';
$MESS['REST_INTEGRATION_EDIT_ERROR_NO_HTTPS'] = '<strong>Внимание!</strong> Данная технология категорически не рекомендуется к использованию без https';
$MESS['REST_INTEGRATION_EDIT_ATTENTION_USES_WEBHOOK'] = '<strong>Внимание!</strong> Данная ссылка позволяет выполнять действия на портале в соответствии с настроенными правами, необходимо держать её в секрете. Подробности в нашей #URL#.';
$MESS['REST_INTEGRATION_EDIT_ATTENTION_USES_WEBHOOK_URL_MESSAGE'] = 'статье';
$MESS['REST_INTEGRATION_EDIT_HOLD_DUE_TO_OVERLOAD'] = '<strong>Внимание!</strong> Данная интеграция заблокирована за превышение нагрузки. Пожалуйста, обратитесь в поддержку для решения данной проблемы.';
$MESS['REST_INTEGRATION_EDIT_ATTENTION_USES_WEBHOOK_MSGVER_1'] = '[strong]Внимание![/strong] Данная ссылка позволяет выполнять действия на портале в соответствии с настроенными правами, необходимо держать её в секрете. Подробности в нашей [article_link]статье[/article_link].';
$MESS['REST_INTEGRATION_EDIT_HOLD_DUE_TO_OVERLOAD'] = '<strong>Внимание!</strong> Данная интеграция заблокирована за превышение нагрузки. Пожалуйста, обратитесь в поддержку для решения данной проблемы.';

View File

@@ -1,3 +0,0 @@
<?php
$MESS["UI_SIDEPANEL_WRAPPER_MARKET_EXPIRED_NOTIFICATION_BUTTON_TEXT"] = "Толығырақ";
$MESS["UI_SIDEPANEL_WRAPPER_MARKET_EXPIRED_NOTIFICATION_TEXT"] = "Қосымшамен жұмыс істеуді жалғастыру үшін <b>жазылым рәсімдеңіз</b>";

View File

@@ -71,7 +71,7 @@ class RestIntegratorsListComponent extends CBitrixComponent
$isAdmin = \CRestUtil::isAdmin();
if ($this->arParams['TYPE'] === 'LIST')
{
if (!$isAdmin && isset($items[$code]) && $items[$code]['ADMIN_ONLY'] === 'Y')
if (!$isAdmin && isset($items[$code]['ADMIN_ONLY']) && $items[$code]['ADMIN_ONLY'] === 'Y')
{
$this->errors->setError(new Error(Loc::getMessage('REST_INTEGRATION_LIST_ERROR_ACCESS_DENIED')));
@@ -89,7 +89,7 @@ class RestIntegratorsListComponent extends CBitrixComponent
!$isAdmin
&&
(
$item['ADMIN_ONLY'] === 'Y'
($item['ADMIN_ONLY'] ?? 'N') === 'Y'
||
(
!empty($item['OPTIONS'])
@@ -215,4 +215,4 @@ class RestIntegratorsListComponent extends CBitrixComponent
$this->includeComponentTemplate();
}
}
}

View File

@@ -107,7 +107,7 @@ class RestMarketplaceBookletComponent extends CBitrixComponent
$booklet['OPTION']['TITLE'] = $title;
}
}
$result['TITLE'] = !empty($booklet['OPTION']['TITLE']) ? $booklet['OPTION']['TITLE'] : Loc::getMessage('REST_MARKETPLACE_BOOKLET_DEFAULT_TITLE_2');
$result['TITLE'] = !empty($booklet['OPTION']['TITLE']) ? $booklet['OPTION']['TITLE'] : Loc::getMessage('REST_MARKETPLACE_BOOKLET_DEFAULT_TITLE_2_MSGVER_1');
}
if (!empty($booklet['OPTION']['ACTION_TITLE_MESSAGE_CODE']))

View File

@@ -4,5 +4,5 @@ $MESS["REST_BOOKLET_CRM_FIELD_DESCRIPTION"] = "Avoid tedious customization while
$MESS["REST_BOOKLET_CRM_FIELD_DESCRIPTION_TITLE"] = "Get a ready to use CRM for your business!";
$MESS["REST_BOOKLET_CRM_FIELD_TITLE"] = "Create custom field";
$MESS["REST_MARKETPLACE_BOOKLET_DEFAULT_ACTION_TITLE"] = "Actions";
$MESS["REST_MARKETPLACE_BOOKLET_DEFAULT_TITLE_2"] = "Bitrix24.Market";
$MESS["REST_MARKETPLACE_BOOKLET_DEFAULT_TITLE_2_MSGVER_1"] = "Bitrix24 Market";
$MESS["REST_MARKETPLACE_BOOKLET_ERROR_NOT_FOUND"] = "Page was not found";

View File

@@ -4,5 +4,5 @@ $MESS["REST_BOOKLET_CRM_FIELD_DESCRIPTION"] = "Компанияңызды ұза
$MESS["REST_BOOKLET_CRM_FIELD_DESCRIPTION_TITLE"] = "Сіздің бизнесіңіз үшін дайын CRM алыңыз!";
$MESS["REST_BOOKLET_CRM_FIELD_TITLE"] = "Өз өрісіңізді жасау";
$MESS["REST_MARKETPLACE_BOOKLET_DEFAULT_ACTION_TITLE"] = "Әрекеттер";
$MESS["REST_MARKETPLACE_BOOKLET_DEFAULT_TITLE_2"] = "Битрикс24.Маркет";
$MESS["REST_MARKETPLACE_BOOKLET_DEFAULT_TITLE_2_MSGVER_1"] = "Битрикс24 Маркет";
$MESS["REST_MARKETPLACE_BOOKLET_ERROR_NOT_FOUND"] = "Парақша табылмады";

View File

@@ -1,6 +1,6 @@
<?
$MESS["REST_MARKETPLACE_BOOKLET_ERROR_NOT_FOUND"] = "Страница не найдена";
$MESS["REST_MARKETPLACE_BOOKLET_DEFAULT_TITLE_2"] = "Битрикс24.Маркет";
$MESS["REST_MARKETPLACE_BOOKLET_DEFAULT_TITLE_2_MSGVER_1"] = "Битрикс24 Маркет";
$MESS["REST_MARKETPLACE_BOOKLET_DEFAULT_ACTION_TITLE"] = "Действия";
$MESS["REST_BOOKLET_CRM_FIELD_TITLE"] = "Создать своё поле";
$MESS["REST_BOOKLET_CRM_FIELD_DESCRIPTION_TITLE"] = "Получите готовую CRM для вашего бизнеса!";

View File

@@ -93,7 +93,7 @@ ob_start();
<? if($arResult['TERMS_OF_SERVICE_LINK']):?>
<div style="margin-bottom: 8px;">
<input type="checkbox" id="mp_tos_license" value="N">
<label for="mp_tos_license"><?=GetMessage("BX24_APP_INSTALL_TERMS_OF_SERVICE_TEXT_2", ["#LINK#" => $arResult['TERMS_OF_SERVICE_LINK']])?></label>
<label for="mp_tos_license"><?=GetMessage("BX24_APP_INSTALL_TERMS_OF_SERVICE_TEXT_2_MSGVER_1", ["#LINK#" => $arResult['TERMS_OF_SERVICE_LINK']])?></label>
</div>
<? endif;?>
<?if (LANGUAGE_ID == "ru" || LANGUAGE_ID == "ua" || $arResult["APP"]["EULA_LINK"]):?>

View File

@@ -13,4 +13,4 @@ $MESS["BX24_APP_INSTALL_PRIVACY_LINK"] = "https://www.bitrix24.com/privacy/";
$MESS["BX24_APP_INSTALL_PRIVACY_TEXT"] = "I have read and agree with the <a href=\"#LINK#\" target=\"_blank\">Privacy Policy</a>";
$MESS["BX24_APP_INSTALL_RIGHTS"] = "The application requests permissions for:";
$MESS["BX24_APP_INSTALL_SUCCESS"] = "The application has been installed. <a href='#LINK#'>Open</a>";
$MESS["BX24_APP_INSTALL_TERMS_OF_SERVICE_TEXT_2"] = "By installing or downloading apps or solutions, you agree to the <a href=\"#LINK#\" target=\"_blank\">Bitrix24.Market Terms of Use</a>";
$MESS["BX24_APP_INSTALL_TERMS_OF_SERVICE_TEXT_2_MSGVER_1"] = "By installing or downloading apps or solutions, you agree to the <a href=\"#LINK#\" target=\"_blank\">Bitrix24 Market Terms of Use</a>";

View File

@@ -32,11 +32,11 @@ $MESS["MARKETPLACE_APP_VERSION_MESS"] = "Version";
$MESS["MARKETPLACE_CONFIGURATION_INSTALL_SETTING_BTN"] = "Configure";
$MESS["MARKETPLACE_HIDDEN_BUY"] = "Containts in-app purchases";
$MESS["MARKETPLACE_LICENSE_ERROR"] = "You have to read and agree with the Privacy Policy to install the application";
$MESS["MARKETPLACE_LICENSE_TOS_ERROR_2"] = "You have to agree to the Bitrix24.Market Terms of Use to install the application";
$MESS["MARKETPLACE_LICENSE_TOS_ERROR_2_MSGVER_1"] = "You have to agree to the Bitrix24 Market Terms of Use to install the application.";
$MESS["MARKETPLACE_MORE_BUTTON"] = "More...";
$MESS["REST_MARKETPLACE_EXTERNAL_PAYMENT"] = "requires paid external services";
$MESS["REST_MARKETPLACE_HIDDEN_BUY"] = "contains in-app purchases";
$MESS["REST_MARKETPLACE_SUBSCRIPTION_EXPANDS"] = "advanced features available when subscribed for Bitrix24.Market";
$MESS["REST_MARKETPLACE_SUBSCRIPTION_EXPANDS_MSGVER_1"] = "advanced features available when subscribed to Bitrix24 Market";
$MESS["REST_MARKETPLACE_SUBSCRIPTION_REQUIRED"] = "requires subscription";
$MESS["REST_MP_APP_INSTALL_REQUEST"] = "Send";
$MESS["REST_MP_INSTALL_REQUEST_CONFIRM"] = "Insufficient permissions to install this app.<br/>Do you want to send a request to the administrators to install it?";

View File

@@ -13,4 +13,4 @@ $MESS["BX24_APP_INSTALL_PRIVACY_LINK"] = "https://www.bitrix24.kz/about/privacy.
$MESS["BX24_APP_INSTALL_PRIVACY_TEXT"] = "Мен <a href=\"#LINK#\" target=\"_blank\">құпиялылық саясатымен</a> таныстым және келісемін";
$MESS["BX24_APP_INSTALL_RIGHTS"] = "Қосымша келесі әрекеттерге рұқсат сұрайды:";
$MESS["BX24_APP_INSTALL_SUCCESS"] = "Қосымша сәтті орнатылды. <a href='#LINK#'>Өту</a>";
$MESS["BX24_APP_INSTALL_TERMS_OF_SERVICE_TEXT_2"] = "Қосымшаларды немесе интеграцияларды орнату немесе жүктеу арқылы сіз <a href=\"#LINK#\" target=\"_blank\">Битрикс24.Маркетті пайдалану шарттарымен</a> келісесіз";
$MESS["BX24_APP_INSTALL_TERMS_OF_SERVICE_TEXT_2_MSGVER_1"] = "Қосымшаларды немесе интеграцияларды орнату немесе жүктеу арқылы сіз <a href=\"#LINK#\" target=\"_blank\">Битрикс24 Маркет пайдалану шарттарымен</a> келісесіз";

View File

@@ -32,11 +32,11 @@ $MESS["MARKETPLACE_APP_VERSION_MESS"] = "Нұсқа";
$MESS["MARKETPLACE_CONFIGURATION_INSTALL_SETTING_BTN"] = "Баптау";
$MESS["MARKETPLACE_HIDDEN_BUY"] = "Кіріктірілген сатып алулар бар";
$MESS["MARKETPLACE_LICENSE_ERROR"] = "Қосымшаны орнату үшін лицензиялық келісіммен және құпиялылық саясатымен келісіміңізді растау қажет";
$MESS["MARKETPLACE_LICENSE_TOS_ERROR_2"] = "Қосымшаны орнату үшін Битрикс24.Маркетті пайдалану шарттарымен келісіміңізді растауыңыз керек";
$MESS["MARKETPLACE_LICENSE_TOS_ERROR_2_MSGVER_1"] = "Қосымшаны орнату үшін Битрикс24 Маркет пайдалану шарттарымен келісетініңізді растауыңыз керек";
$MESS["MARKETPLACE_MORE_BUTTON"] = "Тағы";
$MESS["REST_MARKETPLACE_EXTERNAL_PAYMENT"] = "сыртқы сервистің төлемі қажет";
$MESS["REST_MARKETPLACE_HIDDEN_BUY"] = "кіріктірілген сатып алулар бар";
$MESS["REST_MARKETPLACE_SUBSCRIPTION_EXPANDS"] = "Битрикс24.Маркетте жазылым бойынша кеңейтілген мүмкіндіктер";
$MESS["REST_MARKETPLACE_SUBSCRIPTION_EXPANDS_MSGVER_1"] = "Битрикс24 Маркет жазылымы бойынша кеңейтілген функционал";
$MESS["REST_MARKETPLACE_SUBSCRIPTION_REQUIRED"] = "жазылым қажет";
$MESS["REST_MP_APP_INSTALL_REQUEST"] = "Жіберу";
$MESS["REST_MP_INSTALL_REQUEST_CONFIRM"] = "Бұл қосымшаны орнатуға құқығы жеткіліксіз.<br/>Орнатуға сұрау әкімшілерге жіберілсін бе?";

View File

@@ -13,5 +13,5 @@ $MESS["BX24_APP_INSTALL_EULA_LINK"] = "https://www.1c-bitrix.ru/license.php?modu
$MESS["BX24_APP_INSTALL_PRIVACY_TEXT"] = "Я ознакомлен и согласен с <a href=\"#LINK#\" target=\"_blank\">политикой конфиденциальности</a>";
$MESS["BX24_APP_INSTALL_PRIVACY_LINK"] = "https://www.bitrix24.ru/about/privacy.php";
$MESS["BX24_APP_INSTALL_HTTPS_WARNING"] = "<b>Внимание!</b> При работе без https работоспособность устанавливаемых приложений не гарантируется.";
$MESS["BX24_APP_INSTALL_TERMS_OF_SERVICE_TEXT_2"] = "Устанавливая или загружая приложения или интеграции, вы соглашаетесь с <a href=\"#LINK#\" target=\"_blank\">Условиями использования Битрикс24.Маркет</a>";
$MESS["BX24_APP_INSTALL_TERMS_OF_SERVICE_TEXT_2_MSGVER_1"] = "Устанавливая или загружая приложения или интеграции, вы соглашаетесь с <a href=\"#LINK#\" target=\"_blank\">Условиями использования Битрикс24 Маркет</a>";
?>

View File

@@ -30,13 +30,13 @@ $MESS["MARKETPLACE_APP_IS_INSTALLED"] = "Установлено";
$MESS["MARKETPLACE_APP_PORTAL_ADMIN"] = "Для установки приложения обратитесь к администратору портала";
$MESS["MARKETPLACE_APP_INSTALL_REQUEST"] = "Ваш запрос на установку приложения отправлен</br>администраторам вашего Битрикс24, спасибо!";
$MESS["MARKETPLACE_LICENSE_ERROR"] = "Для установки приложения необходимо подтвердить свое согласие с лицензионным соглашением и политикой конфиденциальности";
$MESS["MARKETPLACE_LICENSE_TOS_ERROR_2"] = "Для установки приложения необходимо подтвердить свое согласие с условиями использования Битрикс24.Маркет";
$MESS["MARKETPLACE_LICENSE_TOS_ERROR_2_MSGVER_1"] = "Для установки приложения необходимо подтвердить свое согласие с условиями использования Битрикс24 Маркет";
$MESS["REST_MP_INSTALL_REQUEST_CONFIRM"] = "Недостаточно прав на установку этого приложения.<br/>Отправить запрос на установку администраторам?";
$MESS["REST_MP_APP_INSTALL_REQUEST"] = "Отправить";
$MESS["MARKETPLACE_MORE_BUTTON"] = "Ещё";
$MESS["MARKETPLACE_HIDDEN_BUY"] = "Содержит встроенные покупки";
$MESS["MARKETPLACE_CONFIGURATION_INSTALL_SETTING_BTN"] = "Настроить";
$MESS["REST_MARKETPLACE_HIDDEN_BUY"] = "содержит встроенные покупки";
$MESS["REST_MARKETPLACE_SUBSCRIPTION_EXPANDS"] = "расширенный функционал по подписке на Битрикс24.Маркет";
$MESS["REST_MARKETPLACE_SUBSCRIPTION_EXPANDS_MSGVER_1"] = "расширенный функционал по подписке на Битрикс24 Маркет";
$MESS["REST_MARKETPLACE_EXTERNAL_PAYMENT"] = "требуется оплата внешнего сервиса";
$MESS["REST_MARKETPLACE_SUBSCRIPTION_REQUIRED"] = "требуется подписка";

View File

@@ -406,7 +406,7 @@ if ($arResult['APP']['ACTIVE'] === 'Y' && $arResult['ADMIN'])
<div class="mp-detail-main-controls-description"><?=GetMessage('REST_MARKETPLACE_HIDDEN_BUY')?></div>
<?php endif;?>
<?php if ($arResult['APP']['SUBSCRIPTION_EXPANDS'] === 'Y'):?>
<div class="mp-detail-main-controls-description"><?=GetMessage('REST_MARKETPLACE_SUBSCRIPTION_EXPANDS')?></div>
<div class="mp-detail-main-controls-description"><?=GetMessage('REST_MARKETPLACE_SUBSCRIPTION_EXPANDS_MSGVER_1')?></div>
<?php endif;?>
<?php if ($arResult['APP']['SUBSCRIPTION_REQUIRED'] === 'Y'):?>
<div class="mp-detail-main-controls-description"><?=GetMessage('REST_MARKETPLACE_SUBSCRIPTION_REQUIRED')?></div>
@@ -545,7 +545,7 @@ $arJSParams = array(
BX.message({
"MARKETPLACE_APP_INSTALL_REQUEST" : "<?=GetMessageJS('MARKETPLACE_APP_INSTALL_REQUEST')?>",
"MARKETPLACE_LICENSE_ERROR" : "<?=GetMessageJS('MARKETPLACE_LICENSE_ERROR')?>",
"MARKETPLACE_LICENSE_TOS_ERROR_2" : "<?=GetMessageJS('MARKETPLACE_LICENSE_TOS_ERROR_2')?>",
"MARKETPLACE_LICENSE_TOS_ERROR_2_MSGVER_1" : "<?=GetMessageJS('MARKETPLACE_LICENSE_TOS_ERROR_2_MSGVER_1')?>",
"REST_MP_INSTALL_REQUEST_CONFIRM" : "<?=GetMessageJS('REST_MP_INSTALL_REQUEST_CONFIRM')?>",
"REST_MP_APP_INSTALL_REQUEST" : "<?=GetMessageJS('REST_MP_APP_INSTALL_REQUEST')?>"
});

View File

@@ -13,5 +13,5 @@ $MESS["REST_MARKETPLACE_INSTALL_MODULE_UNINSTALL_BITRIX24"] = "Some of the servi
$MESS["REST_MARKETPLACE_INSTALL_PRIVACY_LINK"] = "https://www.bitrix24.com/privacy/";
$MESS["REST_MARKETPLACE_INSTALL_PRIVACY_TEXT"] = "I have read and agree with the <a href=\"#LINK#\" target=\"_blank\">Privacy Policy</a>";
$MESS["REST_MARKETPLACE_INSTALL_REQUIRED_RIGHTS"] = "The application requests permissions for:";
$MESS["REST_MARKETPLACE_INSTALL_TERMS_OF_SERVICE_TEXT"] = "By installing or downloading apps or solutions, you agree to the <a href=\"#LINK#\" target=\"_blank\">Bitrix24.Market Terms of Use</a>";
$MESS["REST_MARKETPLACE_INSTALL_TOS_ERROR"] = "You have to agree to the Bitrix24.Market Terms of Use to install the application";
$MESS["REST_MARKETPLACE_INSTALL_TERMS_OF_SERVICE_TEXT_MSGVER_1"] = "By installing or downloading apps or solutions, you agree to the <a href=\"#LINK#\" target=\"_blank\">Bitrix24 Market Terms of Use</a>.";
$MESS["REST_MARKETPLACE_INSTALL_TOS_ERROR_MSGVER_1"] = "You have to agree to the Bitrix24 Market Terms of Use to install the application.";

View File

@@ -13,5 +13,5 @@ $MESS["REST_MARKETPLACE_INSTALL_MODULE_UNINSTALL_BITRIX24"] = "Қосымшан
$MESS["REST_MARKETPLACE_INSTALL_PRIVACY_LINK"] = "https://www.bitrix24.kz/about/privacy.php";
$MESS["REST_MARKETPLACE_INSTALL_PRIVACY_TEXT"] = "Мен <a href=\"#LINK#\" target=\"_blank\">құпиялылық саясатымен</a> таныстым және келісемін";
$MESS["REST_MARKETPLACE_INSTALL_REQUIRED_RIGHTS"] = "Қосымша келесі әрекеттерге рұқсат сұрайды:";
$MESS["REST_MARKETPLACE_INSTALL_TERMS_OF_SERVICE_TEXT"] = "Қосымшаларды немесе интеграцияларды орнату немесе жүктеу арқылы сіз <a href=\"#LINK#\" target=\"_blank\">Битрикс24.Маркетті пайдалану шарттарымен</a> келісесіз";
$MESS["REST_MARKETPLACE_INSTALL_TOS_ERROR"] = "Қосымшаны орнату үшін Битрикс24.Маркетті пайдалану шарттарымен келісіміңізді растауыңыз керек";
$MESS["REST_MARKETPLACE_INSTALL_TERMS_OF_SERVICE_TEXT_MSGVER_1"] = "Қосымшаларды немесе интеграцияларды орнату немесе жүктеу арқылы сіз <a href=\"#LINK#\" target=\"_blank\">Битрикс24 Маркет пайдалану шарттарымен</a> келісесіз";
$MESS["REST_MARKETPLACE_INSTALL_TOS_ERROR_MSGVER_1"] = "Қосымшаны орнату үшін Битрикс24 Маркет пайдалану шарттарымен келісетініңізді растауыңыз керек";

View File

@@ -10,8 +10,8 @@ $MESS["REST_MARKETPLACE_INSTALL_EULA_LINK"] = "https://www.1c-bitrix.ru/license.
$MESS["REST_MARKETPLACE_INSTALL_PRIVACY_TEXT"] = "Я ознакомлен и согласен с <a href=\"#LINK#\" target=\"_blank\">политикой конфиденциальности</a>";
$MESS["REST_MARKETPLACE_INSTALL_PRIVACY_LINK"] = "https://www.bitrix24.ru/about/privacy.php";
$MESS["REST_MARKETPLACE_INSTALL_HTTPS_WARNING"] = "<b>Внимание!</b> При работе без https работоспособность устанавливаемых приложений не гарантируется.";
$MESS["REST_MARKETPLACE_INSTALL_TERMS_OF_SERVICE_TEXT"] = "Устанавливая или загружая приложения или интеграции, вы соглашаетесь с <a href=\"#LINK#\" target=\"_blank\">Условиями использования Битрикс24.Маркет</a>";
$MESS["REST_MARKETPLACE_INSTALL_TERMS_OF_SERVICE_TEXT_MSGVER_1"] = "Устанавливая или загружая приложения или интеграции, вы соглашаетесь с <a href=\"#LINK#\" target=\"_blank\">Условиями использования Битрикс24 Маркет</a>";
$MESS["REST_MARKETPLACE_INSTALL_LICENSE_ERROR"] = "Для установки приложения необходимо подтвердить свое согласие с лицензионным соглашением и политикой конфиденциальности";
$MESS["REST_MARKETPLACE_INSTALL_TOS_ERROR"] = "Для установки приложения необходимо подтвердить свое согласие с условиями использования Битрикс24.Маркет";
$MESS["REST_MARKETPLACE_INSTALL_TOS_ERROR_MSGVER_1"] = "Для установки приложения необходимо подтвердить свое согласие с условиями использования Битрикс24 Маркет";
$MESS["REST_MARKETPLACE_INSTALL_BTN_INSTALL"] = "Установить";
$MESS["REST_MARKETPLACE_INSTALL_BTN_CANCEL"] = "Отмена";

View File

@@ -40,7 +40,7 @@ BX.Rest.Marketplace.Install =
BX("mp_tos_license") && !BX("mp_tos_license").checked
)
{
BX("rest_mp_install_error").innerHTML = BX.message("REST_MARKETPLACE_INSTALL_TOS_ERROR");
BX("rest_mp_install_error").innerHTML = BX.message("REST_MARKETPLACE_INSTALL_TOS_ERROR_MSGVER_1");
BX.show(BX('rest_mp_install_error'));
return;
}

View File

@@ -1 +1 @@
{"version":3,"file":"script.map.js","names":["BX","namespace","Rest","Marketplace","Install","init","params","this","code","CODE","version","VERSION","checkHash","CHECK_HASH","installHash","INSTALL_HASH","from","FROM","iframe","IFRAME","redirectPriority","REDIRECT_PRIORITY","formNode","buttonInstallNode","findChildByClassName","buttonCloseNode","bind","onSubmitForm","onClickClose","event","preventDefault","SidePanel","Instance","close","checked","innerHTML","message","show","hasClass","classList","add","queryParam","check_hash","install_hash","ajax","runAction","data","then","response","result","error","helperCode","top","UI","InfoHelper","error_description","redirect","location","href","util","remove_url_param","installed","eventResult","onCustomEvent","open","reload","rest","AppLayout","openApplication","id","initHelper","window","isInited","frameUrlTemplate","frameNode","iframeId","proxy","origin","indexOf","action","slider","getTopSlider"],"sources":["script.js"],"mappings":"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"}
{"version":3,"file":"script.map.js","names":["BX","namespace","Rest","Marketplace","Install","init","params","this","code","CODE","version","VERSION","checkHash","CHECK_HASH","installHash","INSTALL_HASH","from","FROM","iframe","IFRAME","redirectPriority","REDIRECT_PRIORITY","formNode","buttonInstallNode","findChildByClassName","buttonCloseNode","bind","onSubmitForm","onClickClose","event","preventDefault","SidePanel","Instance","close","checked","innerHTML","message","show","hasClass","classList","add","queryParam","check_hash","install_hash","ajax","runAction","data","then","response","result","error","helperCode","top","UI","InfoHelper","error_description","redirect","location","href","util","remove_url_param","installed","eventResult","onCustomEvent","open","reload","rest","AppLayout","openApplication","id","initHelper","window","isInited","frameUrlTemplate","frameNode","iframeId","proxy","origin","indexOf","action","slider","getTopSlider"],"sources":["script.js"],"mappings":"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","ignoreList":[]}

View File

@@ -1,2 +1,2 @@
"use strict";BX.namespace("BX.Rest.Marketplace.Install");BX.Rest.Marketplace.Install={init:function(e){e=typeof e==="object"?e:{};this.code=e.CODE||false;this.version=e.VERSION||false;this.checkHash=e.CHECK_HASH||false;this.installHash=e.INSTALL_HASH||false;this.from=e.FROM||false;this.iframe=e.IFRAME||false;this.redirectPriority=e.REDIRECT_PRIORITY||false;this.formNode=BX("restMarketAppInstallForm");this.buttonInstallNode=BX.findChildByClassName(this.formNode,"rest-btn-start-install");this.buttonCloseNode=BX.findChildByClassName(this.formNode,"rest-btn-close-install");BX.bind(this.formNode,"submit",this.onSubmitForm.bind(this));BX.bind(this.buttonCloseNode,"click",this.onClickClose.bind(this))},onClickClose:function(e){e.preventDefault();if(!!this.iframe){BX.SidePanel.Instance.close()}},onSubmitForm:function(e){e.preventDefault();if(BX("mp_tos_license")&&!BX("mp_tos_license").checked){BX("rest_mp_install_error").innerHTML=BX.message("REST_MARKETPLACE_INSTALL_TOS_ERROR");BX.show(BX("rest_mp_install_error"));return}if(BX("mp_detail_license")&&!BX("mp_detail_license").checked||BX("mp_detail_confidentiality")&&!BX("mp_detail_confidentiality").checked){BX("rest_mp_install_error").innerHTML=BX.message("REST_MARKETPLACE_INSTALL_LICENSE_ERROR");BX.show(BX("rest_mp_install_error"));return}if(BX.hasClass(this.buttonInstallNode,"ui-btn-wait")){return}this.buttonInstallNode.classList.add("ui-btn-wait");var t={code:this.code};if(!!this.version){t.version=this.version}if(!!this.checkHash){t.check_hash=this.checkHash;t.install_hash=this.installHash}if(!!this.from){t.from=this.from}BX.ajax.runAction("rest.application.install",{data:t}).then(function(e){var t=!!e.data?e.data:e;if(!!t.error){if(!!t.helperCode&&t.helperCode!==""){top.BX.UI.InfoHelper.show(t.helperCode)}else{BX("rest_mp_install_error").innerHTML='<div class="ui-alert-message">'+t.error+(!!t.error_description?"<br />"+t.error_description:"")+"</div>";BX.show(BX("rest_mp_install_error"))}}else if(!!t.redirect&&this.redirectPriority===true){top.location.href=t.redirect}else if(!this.iframe){if(!!t.redirect){top.location.href=t.redirect}else{top.location.href=BX.util.remove_url_param(top.location.href,["install"])}}else{if(t.installed){var i={};top.BX.onCustomEvent(top,"Rest:AppLayout:ApplicationInstall",[true,i],false)}if(!!t.open){BX.SidePanel.Instance.reload();top.BX.rest.AppLayout.openApplication(t.id,{})}else{BX.SidePanel.Instance.reload()}}}.bind(this))},initHelper:function(e){if(!window.BX.UI.InfoHelper.isInited()){window.BX.UI.InfoHelper.init({frameUrlTemplate:e.frameUrlTemplate});window.BX.UI.InfoHelper.frameNode=BX(e.iframeId)}BX.bind(window,"message",BX.proxy((function(e){if(!!e.origin&&e.origin.indexOf("bitrix")===-1){return}if(!e.data||typeof e.data!=="object"){return}if(e.data.action==="reloadParent"){var t=BX.SidePanel.Instance.getTopSlider();if(!!t){t.reload()}else{window.location.reload()}}})))}};
"use strict";BX.namespace("BX.Rest.Marketplace.Install");BX.Rest.Marketplace.Install={init:function(e){e=typeof e==="object"?e:{};this.code=e.CODE||false;this.version=e.VERSION||false;this.checkHash=e.CHECK_HASH||false;this.installHash=e.INSTALL_HASH||false;this.from=e.FROM||false;this.iframe=e.IFRAME||false;this.redirectPriority=e.REDIRECT_PRIORITY||false;this.formNode=BX("restMarketAppInstallForm");this.buttonInstallNode=BX.findChildByClassName(this.formNode,"rest-btn-start-install");this.buttonCloseNode=BX.findChildByClassName(this.formNode,"rest-btn-close-install");BX.bind(this.formNode,"submit",this.onSubmitForm.bind(this));BX.bind(this.buttonCloseNode,"click",this.onClickClose.bind(this))},onClickClose:function(e){e.preventDefault();if(!!this.iframe){BX.SidePanel.Instance.close()}},onSubmitForm:function(e){e.preventDefault();if(BX("mp_tos_license")&&!BX("mp_tos_license").checked){BX("rest_mp_install_error").innerHTML=BX.message("REST_MARKETPLACE_INSTALL_TOS_ERROR_MSGVER_1");BX.show(BX("rest_mp_install_error"));return}if(BX("mp_detail_license")&&!BX("mp_detail_license").checked||BX("mp_detail_confidentiality")&&!BX("mp_detail_confidentiality").checked){BX("rest_mp_install_error").innerHTML=BX.message("REST_MARKETPLACE_INSTALL_LICENSE_ERROR");BX.show(BX("rest_mp_install_error"));return}if(BX.hasClass(this.buttonInstallNode,"ui-btn-wait")){return}this.buttonInstallNode.classList.add("ui-btn-wait");var t={code:this.code};if(!!this.version){t.version=this.version}if(!!this.checkHash){t.check_hash=this.checkHash;t.install_hash=this.installHash}if(!!this.from){t.from=this.from}BX.ajax.runAction("rest.application.install",{data:t}).then(function(e){var t=!!e.data?e.data:e;if(!!t.error){if(!!t.helperCode&&t.helperCode!==""){top.BX.UI.InfoHelper.show(t.helperCode)}else{BX("rest_mp_install_error").innerHTML='<div class="ui-alert-message">'+t.error+(!!t.error_description?"<br />"+t.error_description:"")+"</div>";BX.show(BX("rest_mp_install_error"))}}else if(!!t.redirect&&this.redirectPriority===true){top.location.href=t.redirect}else if(!this.iframe){if(!!t.redirect){top.location.href=t.redirect}else{top.location.href=BX.util.remove_url_param(top.location.href,["install"])}}else{if(t.installed){var i={};top.BX.onCustomEvent(top,"Rest:AppLayout:ApplicationInstall",[true,i],false)}if(!!t.open){BX.SidePanel.Instance.reload();top.BX.rest.AppLayout.openApplication(t.id,{})}else{BX.SidePanel.Instance.reload()}}}.bind(this))},initHelper:function(e){if(!window.BX.UI.InfoHelper.isInited()){window.BX.UI.InfoHelper.init({frameUrlTemplate:e.frameUrlTemplate});window.BX.UI.InfoHelper.frameNode=BX(e.iframeId)}BX.bind(window,"message",BX.proxy((function(e){if(!!e.origin&&e.origin.indexOf("bitrix")===-1){return}if(!e.data||typeof e.data!=="object"){return}if(e.data.action==="reloadParent"){var t=BX.SidePanel.Instance.getTopSlider();if(!!t){t.reload()}else{window.location.reload()}}})))}};
//# sourceMappingURL=script.map.js

View File

@@ -163,7 +163,7 @@ else:
<input type="checkbox" id="mp_tos_license" value="N">
<label for="mp_tos_license">
<?=Loc::getMessage(
'REST_MARKETPLACE_INSTALL_TERMS_OF_SERVICE_TEXT',
'REST_MARKETPLACE_INSTALL_TERMS_OF_SERVICE_TEXT_MSGVER_1',
[
'#LINK#' => $arResult['TERMS_OF_SERVICE_LINK']
]
@@ -201,7 +201,7 @@ else:
<script>
BX.message({
"REST_MARKETPLACE_INSTALL_LICENSE_ERROR" : "<?=Loc::getMessage("REST_MARKETPLACE_INSTALL_LICENSE_ERROR")?>",
"REST_MARKETPLACE_INSTALL_TOS_ERROR" : "<?=Loc::getMessage("REST_MARKETPLACE_INSTALL_TOS_ERROR")?>",
"REST_MARKETPLACE_INSTALL_TOS_ERROR_MSGVER_1" : "<?=Loc::getMessage("REST_MARKETPLACE_INSTALL_TOS_ERROR_MSGVER_1")?>",
});
BX.ready(function () {
BX.Rest.Marketplace.Install.init(<?=Json::encode(

View File

@@ -22,7 +22,7 @@ class RestMarketplaceSolutionComponent extends CBitrixComponent
$trade = [
'title' => Loc::getMessage('REST_MARKETPLACE_SOLUTION_TRADE_TITLE'),
'description' => Loc::getMessage('REST_MARKETPLACE_SOLUTION_TRADE_DESCRIPTION'),
'image' => '/bitrix/images/rest/solution/trade.svg',
'image' => '/bitrix/images/rest/solution/trade.png',
'tag' => 'продажи',
];
$result['tags'][] = $trade;
@@ -30,7 +30,7 @@ class RestMarketplaceSolutionComponent extends CBitrixComponent
$furniture = [
'title' => Loc::getMessage('REST_MARKETPLACE_SOLUTION_FURNITURE_TITLE'),
'description' => Loc::getMessage('REST_MARKETPLACE_SOLUTION_FURNITURE_DESCRIPTION'),
'image' => '/bitrix/images/rest/solution/furniture.svg',
'image' => '/bitrix/images/rest/solution/furniture.png',
'tag' => 'мебель',
];
$result['tags'][] = $furniture;
@@ -38,17 +38,18 @@ class RestMarketplaceSolutionComponent extends CBitrixComponent
$production = [
'title' => Loc::getMessage('REST_MARKETPLACE_SOLUTION_PRODUCTION_TITLE'),
'description' => Loc::getMessage('REST_MARKETPLACE_SOLUTION_PRODUCTION_DESCRIPTION'),
'image' => '/bitrix/images/rest/solution/production.svg',
'image' => '/bitrix/images/rest/solution/production.png',
'tag' => 'производство',
];
$result['tags'][] = $production;
}
else if (in_array($region, ['ru', 'by']))
{
$trade = [
'title' => Loc::getMessage('REST_MARKETPLACE_SOLUTION_TRADE_TITLE'),
'description' => Loc::getMessage('REST_MARKETPLACE_SOLUTION_TRADE_DESCRIPTION'),
'image' => '/bitrix/images/rest/solution/trade.svg',
'image' => '/bitrix/images/rest/solution/trade.png',
'tag' => 'продажи',
];
$result['tags'][] = $trade;
@@ -56,7 +57,7 @@ class RestMarketplaceSolutionComponent extends CBitrixComponent
$build = [
'title' => Loc::getMessage('REST_MARKETPLACE_SOLUTION_CONSTRUCTION_TITLE'),
'description' => Loc::getMessage('REST_MARKETPLACE_SOLUTION_CONSTRUCTION_DESCRIPTION'),
'image' => '/bitrix/images/rest/solution/build.svg',
'image' => '/bitrix/images/rest/solution/build.png',
'tag' => 'строительство',
];
$result['tags'][] = $build;
@@ -64,13 +65,15 @@ class RestMarketplaceSolutionComponent extends CBitrixComponent
$tourism = [
'title' => Loc::getMessage('REST_MARKETPLACE_SOLUTION_TOURISM_TITLE'),
'description' => Loc::getMessage('REST_MARKETPLACE_SOLUTION_TOURISM_DESCRIPTION'),
'image' => '/bitrix/images/rest/solution/tourism.svg',
'image' => '/bitrix/images/rest/solution/tourism.png',
'tag' => 'туризм',
];
$result['tags'][] = $tourism;
}
$this->arResult = $result;
$this->arResult['CURRENT_LANG'] = \Bitrix\Main\Localization\Loc::getCurrentLang();
}
public function executeComponent(): void

View File

@@ -3,20 +3,24 @@
flex-direction: column;
}
.rest-market-solution-main {
}
.rest-market-solution-main__banner {
#width: 882px;
height: 280px;
background-color: #FFFFFF;
background-image: url(images/banner-bg.svg);
background-repeat: no-repeat;
background-position: right bottom;
border-radius: 16px;
position: relative;
box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.1);
background-size: auto 262px;
}
.rest-market-solution-main__banner--ru {
background-image: url(images/banner-bg-ru.png);
}
.rest-market-solution-main__banner--other {
background-image: url(images/banner-bg-other.png);
}
.rest-market-solution-main__banner-wrapper {
@@ -94,10 +98,10 @@
.rest-market-solution__item-img {
position: absolute;
width: 90px;
height: 90px;
top: 10px;
right: 10px;
width: 100px;
height: 120px;
bottom: 5px;
right: 0;
}
.rest-market-solution-all {

View File

@@ -1 +1 @@
.rest-market-solution-section{display:flex;flex-direction:column}.rest-market-solution-main__banner{#width:882px;height:280px;background-color:#fff;background-image:url(images/banner-bg.svg);background-repeat:no-repeat;background-position:100% 100%;border-radius:16px;position:relative;box-shadow:1px 1px 1px rgba(0,0,0,.1)}.rest-market-solution-main__banner-wrapper{position:absolute;left:24px;top:54px;width:360px}.rest-market-solution-main__banner-title{width:250px;font-weight:600;font-size:21px;line-height:29px;color:var(--ui-color-palette-black-base,#333)}.rest-market-solution-main__banner-description{margin-top:8px;font-weight:400;font-size:14px;line-height:19px;width:385px;color:var(--ui-color-palette-gray-90,#525c69)}.rest-market-solution-main__banner-action{margin-top:24px}.rest-market-solution-tag{margin-top:26px;display:flex;align-items:center;justify-content:space-between}.rest-market-solution-tag__item{width:291px;height:120px;background:var(--accent-soft-accent-soft-blue-3,#edf7ff);border-radius:16px;position:relative;box-shadow:1px 1px 1px rgba(0,0,0,.1)}.rest-market-solution-tag__item:not(:last-child){margin-right:10px}.rest-market-solution-tag__item-wrapper{position:absolute;top:30px;left:18px}.rest-market-solution-tag__item-title{font-weight:600;font-size:15px;line-height:20px;color:var(--ui-color-palette-black-base,#333)}.rest-market-solution-tag__item-description{margin-top:8px;width:150px;font-weight:400;font-size:10px;line-height:12px;letter-spacing:0;vertical-align:middle;color:var(--ui-color-palette-gray-90,#525c69)}.rest-market-solution__item-img{position:absolute;width:90px;height:90px;top:10px;right:10px}.rest-market-solution-all{text-align:center;margin-top:16px}
.rest-market-solution-section{display:flex;flex-direction:column}.rest-market-solution-main__banner{#width:882px;height:280px;background-color:#fff;background-repeat:no-repeat;background-position:100% 100%;border-radius:16px;position:relative;box-shadow:1px 1px 1px rgba(0,0,0,.1);background-size:auto 262px}.rest-market-solution-main__banner--ru{background-image:url(images/banner-bg-ru.png)}.rest-market-solution-main__banner--other{background-image:url(images/banner-bg-other.png)}.rest-market-solution-main__banner-wrapper{position:absolute;left:24px;top:54px;width:360px}.rest-market-solution-main__banner-title{width:250px;font-weight:600;font-size:21px;line-height:29px;color:var(--ui-color-palette-black-base,#333)}.rest-market-solution-main__banner-description{margin-top:8px;font-weight:400;font-size:14px;line-height:19px;width:385px;color:var(--ui-color-palette-gray-90,#525c69)}.rest-market-solution-main__banner-action{margin-top:24px}.rest-market-solution-tag{margin-top:26px;display:flex;align-items:center;justify-content:space-between}.rest-market-solution-tag__item{width:291px;height:120px;background:var(--accent-soft-accent-soft-blue-3,#edf7ff);border-radius:16px;position:relative;box-shadow:1px 1px 1px rgba(0,0,0,.1)}.rest-market-solution-tag__item:not(:last-child){margin-right:10px}.rest-market-solution-tag__item-wrapper{position:absolute;top:30px;left:18px}.rest-market-solution-tag__item-title{font-weight:600;font-size:15px;line-height:20px;color:var(--ui-color-palette-black-base,#333)}.rest-market-solution-tag__item-description{margin-top:8px;width:150px;font-weight:400;font-size:10px;line-height:12px;letter-spacing:0;vertical-align:middle;color:var(--ui-color-palette-gray-90,#525c69)}.rest-market-solution__item-img{position:absolute;width:100px;height:120px;bottom:5px;right:0}.rest-market-solution-all{text-align:center;margin-top:16px}

View File

@@ -10,8 +10,7 @@ use Bitrix\Main\Localization\Loc; ?>
<div class="rest-market-solution-section">
<div class="rest-market-solution-main">
<div class="rest-market-solution-main__banner">
<div class="rest-market-solution-main__banner rest-market-solution-main__banner--<?= $arResult['CURRENT_LANG'] === 'ru' ? 'ru' : 'other' ?>">
<div class="rest-market-solution-main__banner-wrapper">
<div class="rest-market-solution-main__banner-title">
<?= Loc::getMessage("REST_MARKETPLACE_SOLUTION_BANNER_TITLE") ?>
@@ -31,28 +30,29 @@ use Bitrix\Main\Localization\Loc; ?>
</div>
</div>
</div>
</div>
<div class="rest-market-solution-tag">
<?php foreach ($arResult['tags'] as $tag): ?>
<a href="/market/category/vertical_crm/?tag=<?= $tag['tag'] ?>" class="rest-market-solution-tag__item">
<div class="rest-market-solution-tag__item-wrapper">
<div class="rest-market-solution-tag__item-title">
<?= $tag['title'] ?>
<?php if (!empty($arResult['tags'])): ?>
<div class="rest-market-solution-tag">
<?php foreach ($arResult['tags'] as $tag): ?>
<a href="/market/category/vertical_crm/?tag=<?= $tag['tag'] ?>" class="rest-market-solution-tag__item">
<div class="rest-market-solution-tag__item-wrapper">
<div class="rest-market-solution-tag__item-title">
<?= $tag['title'] ?>
</div>
<div class="rest-market-solution-tag__item-description">
<?= $tag['description'] ?>
</div>
</div>
<div class="rest-market-solution-tag__item-description">
<?= $tag['description'] ?>
<div class="rest-market-solution-tag__item-bg">
<img src="<?= $tag['image'] ?>" class="rest-market-solution__item-img" alt=""/>
</div>
</div>
<div class="rest-market-solution-tag__item-bg">
<img src="<?= $tag['image'] ?>" class="rest-market-solution__item-img" alt=""/>
</div>
</a>
<?php
endforeach;
?>
</div>
</a>
<?php
endforeach;
?>
</div>
<?php endif; ?>
<div class="rest-market-solution-all">
<a href="/market/category/vertical_crm/" class="ui-btn --air ui-btn-lg --style-outline ui-btn-no-caps">

View File

@@ -1,5 +0,0 @@
<?php
$MESS["RMP_COMP_DESCR_2"] = "Bitrix24 Market composite component";
$MESS["RMP_COMP_NAME_2"] = "Bitrix24 application catalog";
$MESS["RMP_PATH_B24MP_DESCR_2"] = "Bitrix24 Market";
$MESS["RMP_PATH_B24MP_DESCR_2_MSGVER_1"] = "Bitrix24 Market";

View File

@@ -1,3 +1,3 @@
<?php
$MESS["RMP_PATH_B24MP_DESCR_2"] = "Битрикс24 Маркетплейс";
$MESS["RMP_PATH_B24MP_DESCR_2_MSGVER_1"] = "Маркетплейс";
$MESS["RMP_COMP_DESCR_2"] = "Битрикс24.Маркет кешенді компоненті";
$MESS["RMP_COMP_NAME_2"] = "Битрикс24 арналған қосымшалар каталогы";

View File

@@ -0,0 +1,10 @@
<?php
$MESS["RMP_APPLICATION_PAGE"] = "Қосымша парақшасының мекенжайына сілтеме қалыбы";
$MESS["RMP_SEF_BUY"] = "Сатып алулар мен орнатылған қосымшалар";
$MESS["RMP_SEF_CATEGORY"] = "Қосымшалар санатының индексі";
$MESS["RMP_SEF_DETAIL"] = "Қосымша парақшасы";
$MESS["RMP_SEF_SEARCH"] = "Іздеу";
$MESS["RMP_SEF_TOP"] = "Үздік қосымшалар";
$MESS["RMP_SEF_UPDATES"] = "Жаңартулар";
$MESS["RMP_VA_CATEGORY"] = "Қосымшалар санаты";
$MESS["RMP_VA_CODE"] = "Қосымшаның коды";

View File

@@ -1,5 +0,0 @@
<?php
$MESS["RMP_COMP_NAME_2"] = "Каталог приложений для Битрикс24";
$MESS["RMP_COMP_DESCR_2"] = "Комплексный компонент Битрикс24.Маркет";
$MESS["RMP_PATH_B24MP_DESCR_2"] = "Битрикс24.Маркет";
$MESS["RMP_PATH_B24MP_DESCR_2_MSGVER_1"] = "Маркетплейс";

View File

@@ -5,8 +5,5 @@ if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)
if(!CModule::IncludeModule('rest'))
return;
$arServiceParams = $arParams;
$arServiceParams['CLASS'] = 'CRestProvider';
$APPLICATION->IncludeComponent('bitrix:rest.server', '', $arServiceParams, null, array('HIDE_ICONS' => false))
$APPLICATION->IncludeComponent('bitrix:rest.server', '', $arParams, null, array('HIDE_ICONS' => false))
?>

View File

@@ -1,7 +1,8 @@
<?
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)
<?php
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true)
{
die();
die;
}
/**
@@ -14,42 +15,59 @@ if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)
* @global CUser $USER
*/
if(!CModule::IncludeModule('rest'))
use Bitrix\Rest\Internal\Service\MemoryLimitChecker;
if (!CModule::IncludeModule('rest'))
{
return;
}
MemoryLimitChecker::createByDefault()->executeOnMemoryExcess(function ($memoryUsageMB, $maxAllowedSizeMB) {
if (IsModuleInstalled('bitrix24'))
{
AddMessage2Log(
"Rest payload Too Large. Estimated memory usage: {$memoryUsageMB} MB, max allowed: {$maxAllowedSizeMB} MB",
'rest',
);
}
});
$query = \CRestUtil::getRequestData();
$arDefaultUrlTemplates404 = array(
"method" => "#method#",
"method1" => "#method#/",
"webhook" => "#aplogin#/#ap#/#method#",
"webhook1" => "#aplogin#/#ap#/#method#/",
);
$arDefaultUrlTemplates404 = [
'method' => '#method#',
'method1' => '#method#/',
'webhook' => '#aplogin#/#ap#/#method#',
'webhook1' => '#aplogin#/#ap#/#method#/',
'apiWebhook' => 'api/#aplogin#/#ap#/#method#',
'apiWebhook1' => 'api/#aplogin#/#ap#/#method#/',
'apiMethod' => 'api/#method#',
'apiMethod1' => 'api/#method#/',
];
$arDefaultVariableAliases404 = array();
$arDefaultVariableAliases = array();
$arDefaultVariableAliases404 = [];
$arDefaultVariableAliases = [];
$arComponentVariables = array(
"method", "aplogin", "ap"
);
$arComponentVariables = [
'method', 'aplogin', 'ap'
];
$arVariables = array();
$arVariables = [];
if($arParams["SEF_MODE"] == "Y")
$serverClass = CRestServer::class;
if ($arParams['SEF_MODE'] == 'Y')
{
$arUrlTemplates = CComponentEngine::MakeComponentUrlTemplates($arDefaultUrlTemplates404, $arParams["SEF_URL_TEMPLATES"] ?? []);
$arVariableAliases = CComponentEngine::MakeComponentVariableAliases($arDefaultVariableAliases404, $arParams["VARIABLE_ALIASES"] ?? []);
$arUrlTemplates = CComponentEngine::MakeComponentUrlTemplates($arDefaultUrlTemplates404, $arParams['SEF_URL_TEMPLATES'] ?? []);
$arVariableAliases = CComponentEngine::MakeComponentVariableAliases($arDefaultVariableAliases404, $arParams['VARIABLE_ALIASES'] ?? []);
$componentPage = CComponentEngine::ParseComponentPath(
$arParams["SEF_FOLDER"],
$arParams['SEF_FOLDER'],
$arUrlTemplates,
$arVariables
$arVariables,
);
CComponentEngine::InitComponentVariables($componentPage, $arComponentVariables, $arVariableAliases, $arVariables);
$query = array_merge($query, $arVariables);
unset($query['method']);
}
@@ -58,47 +76,63 @@ else
ShowError('Non-SEF mode is not supported by bitrix:rest.server component');
}
$transport = 'json';
$methods = [mb_strtolower($arVariables['method']), $arVariables['method']];
$transport = CRestServer::TRANSPORT_JSON;
// try lowercase first, then original
foreach ($methods as $method)
if (!in_array($componentPage, ['apiWebhook', 'apiWebhook1', 'apiMethod', 'apiMethod1'], true))
{
$point = mb_strrpos($method, '.');
$methods = [mb_strtolower($arVariables['method']), $arVariables['method']];
if($point > 0)
// try lowercase first, then original
foreach ($methods as $method)
{
$check = mb_substr($method, $point + 1);
if(CRestServer::transportSupported($check))
$point = mb_strrpos($method, '.');
if ($point > 0)
{
$transport = $check;
$method = mb_substr($method, 0, $point);
$check = mb_substr($method, $point + 1);
if (CRestServer::transportSupported($check))
{
$transport = $check;
$method = mb_substr($method, 0, $point);
}
}
$server = new CRestServer([
'CLASS' => $arParams['CLASS'] ?? null,
'METHOD' => $method,
'TRANSPORT' => $transport,
'QUERY' => $query,
], false);
$result = $server->process();
// try original controller name if lower is not found
if (is_array($result) && !empty($result['error']) && $result['error'] === 'ERROR_METHOD_NOT_FOUND')
{
continue;
}
// output result
break;
}
}
else
{
$schemaManager = \Bitrix\Main\DI\ServiceLocator::getInstance()->get(\Bitrix\Rest\V3\Schema\SchemaManager::class);
$routes = $schemaManager->getRouteAliases();
$serverRequest = new \Bitrix\Rest\V3\Interaction\Request\ServerRequest(($routes[$arVariables['method']] ?? $arVariables['method']), $query, \Bitrix\Main\Context::getCurrent()->getRequest());
$server = new CRestServer(array(
"CLASS" => $arParams["CLASS"],
"METHOD" => $method,
"TRANSPORT" => $transport,
"QUERY" => $query,
), false);
$server = new CRestApiServer([
'LOCAL_ERROR_LANGUAGE' => \Bitrix\Main\Context::getCurrent()->getRequest()->getHeader('X-Local-Error-Language'),
]);
$result = $server->process();
// try original controller name if lower is not found
if (is_array($result) && !empty($result['error']) && $result['error'] === 'ERROR_METHOD_NOT_FOUND')
{
continue;
}
// output result
break;
$result = $server->processServerRequest($serverRequest);
}
$APPLICATION->RestartBuffer();
$output = $server->output($result);
if (is_object($output) && $output instanceof \Bitrix\Main\HttpResponse)
if ($output instanceof \Bitrix\Main\HttpResponse)
{
$server->sendHeadersAdditional();
$output->send();
@@ -110,4 +144,4 @@ else
}
CMain::FinalActions();
die();
die;

View File

@@ -0,0 +1,2 @@
<?php
$MESS["REST_RSP_CLASS"] = "Іске асырушы класс";

View File

@@ -130,6 +130,21 @@ class rest extends CModule
'\Bitrix\Rest\Marketplace\TagTable',
'onAfterUnRegisterModule'
);
$eventManager->registerEventHandler(
'mobile',
'onMobileMenuStructureBuilt',
'rest',
'Bitrix\Rest\MobileMenuManager',
'onMobileMenuStructureBuilt',
);
$eventManager->registerEventHandlerCompatible(
'im',
'OnGetNotifySchema',
'rest',
\Bitrix\Rest\Integration\Im\NotifySchema::class,
'onGetNotifySchema',
);
\CAgent::AddAgent("Bitrix\\Rest\\Marketplace\\Client::getNumUpdates();", "rest", "N", 86400);
\CAgent::AddAgent("Bitrix\\Rest\\EventOfflineTable::cleanProcessAgent();", "rest", "N", 86400);
@@ -215,6 +230,21 @@ class rest extends CModule
'\Bitrix\Rest\Marketplace\TagTable',
'onAfterUnRegisterModule'
);
$eventManager->unRegisterEventHandler(
'mobile',
'onMobileMenuStructureBuilt',
'rest',
'Bitrix\Rest\MobileMenuManager',
'onMobileMenuStructureBuilt',
);
$eventManager->unRegisterEventHandler(
'im',
'OnGetNotifySchema',
'rest',
\Bitrix\Rest\Integration\Im\NotifySchema::class,
'onGetNotifySchema',
);
CAgent::RemoveModuleAgents("rest");

View File

@@ -183,7 +183,7 @@ BX.rest.Marketplace = (function(){
BX("mp_tos_license") && !BX("mp_tos_license").checked
)
{
BX("mp_detail_error").innerHTML = BX.message("MARKETPLACE_LICENSE_TOS_ERROR_2");
BX("mp_detail_error").innerHTML = BX.message("MARKETPLACE_LICENSE_TOS_ERROR_2_MSGVER_1");
return;
}
@@ -462,6 +462,18 @@ BX.rest.Marketplace = (function(){
);
}
var isRenamedMarket = BX.message("IS_RENAMED_MARKET");
var marketSubscriptionText3 = '';
if (isRenamedMarket === 'Y')
{
marketSubscriptionText3 = BX.message("REST_MP_SUBSCRIPTION_TEXT_3_MSGVER_1");
}
else
{
marketSubscriptionText3 = BX.message("REST_MP_SUBSCRIPTION_TEXT_3_MSGVER_2");
}
var oPopup = BX.PopupWindowManager.create('marketplace_buy_subscription', null, {
content: BX.create(
'div',
@@ -508,7 +520,7 @@ BX.rest.Marketplace = (function(){
props: {
className: 'rest-marketplace-popup-text'
},
html: BX.message("REST_MP_SUBSCRIPTION_TEXT_3").replace(
html: marketSubscriptionText3.replace(
'#ONCLICK#',
'BX.rest.Marketplace.open(null,\'subscription\')'
)
@@ -679,6 +691,19 @@ BX.rest.Marketplace = (function(){
this
)
});
var isRenamedMarket = BX.message("IS_RENAMED_MARKET");
var marketDemoSubscriptionText1 = '';
if (isRenamedMarket === 'Y')
{
marketDemoSubscriptionText1 = BX.message("REST_MP_SUBSCRIPTION_DEMO_TEXT_1_MSGVER_1");
}
else
{
marketDemoSubscriptionText1 = BX.message("REST_MP_SUBSCRIPTION_DEMO_TEXT_1_MSGVER_2");
}
var popupDemo = BX.PopupWindowManager.create('marketplace_demo_subscription', null, {
content: BX.create(
'div',
@@ -710,7 +735,7 @@ BX.rest.Marketplace = (function(){
props: {
className: 'rest-marketplace-popup-text'
},
html: BX.message("REST_MP_SUBSCRIPTION_DEMO_TEXT_1").replace(
html: marketDemoSubscriptionText1.replace(
'#ONCLICK#',
'BX.rest.Marketplace.open(null,\'subscription\')'
)

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,5 +1,6 @@
<?php
$arModuleVersion = [
'VERSION' => '25.700.100',
'VERSION_DATE' => '2025-07-24 15:29:04'
];
$arModuleVersion = array(
"VERSION" => "25.800.0",
"VERSION_DATE" => "2025-07-21 11:23:00"
);

View File

@@ -12,14 +12,13 @@ $MESS["REST_MP_SUBSCRIPTION_BUTTON_TITLE"] = "Buy subscription";
$MESS["REST_MP_SUBSCRIPTION_BUTTON_TITLE2"] = "Free for 15 days";
$MESS["REST_MP_SUBSCRIPTION_DEMO_EULA_LINK"] = "https://www.1c-bitrix.ru/download/files/manuals/ru/oferta_fiz.html";
$MESS["REST_MP_SUBSCRIPTION_DEMO_EULA_TITLE"] = "I have read and agree with the <a href=\"#LINK#\" target=\"_blank\">License Agreement</a>";
$MESS["REST_MP_SUBSCRIPTION_DEMO_TEXT_1"] = "Install and use applications available in <a href=\"javascript:void(0)\" onclick=\"#ONCLICK#\" >Bitrix24.Market</a> for free for 15 days.";
$MESS["REST_MP_SUBSCRIPTION_DEMO_TEXT_1_MSGVER_1"] = "Install and use applications available in <a href=\"javascript:void(0)\" onclick=\"#ONCLICK#\" >Bitrix24 Market</a> for free for 15 days.";
$MESS["REST_MP_SUBSCRIPTION_DEMO_TEXT_1_MSGVER_2"] = "Install and use applications available in <a href=\"javascript:void(0)\" onclick=\"#ONCLICK#\" >Bitrix24 Market</a> for free for 15 days.";
$MESS["REST_MP_SUBSCRIPTION_DEMO_TEXT_2"] = "Try out the hundreds of new features for free. Subscribe when you know it's worth it.";
$MESS["REST_MP_SUBSCRIPTION_DEMO_TITLE"] = "Subscribe for 15 days for free!";
$MESS["REST_MP_SUBSCRIPTION_ERROR_OPEN_BUY_URL"] = "Unknown error when opening a page.";
$MESS["REST_MP_SUBSCRIPTION_TEXT_1"] = "Your Bitrix24 has no limits!";
$MESS["REST_MP_SUBSCRIPTION_TEXT_2"] = "Tailor your Bitrix24 to fit your business.";
$MESS["REST_MP_SUBSCRIPTION_TEXT_3"] = "<a href=\"javascript:void(0)\" onclick=\"#ONCLICK#\" >Subscribe to Bitrix24.Market</a> and get:";
$MESS["REST_MP_SUBSCRIPTION_TEXT_3_LI_1"] = "sales and tasks management solutions;";
$MESS["REST_MP_SUBSCRIPTION_TEXT_3_LI_2"] = "sales scripts;";
$MESS["REST_MP_SUBSCRIPTION_TEXT_3_LI_3"] = "analytical reports;";
@@ -27,6 +26,7 @@ $MESS["REST_MP_SUBSCRIPTION_TEXT_3_LI_4"] = "lead generation and service integra
$MESS["REST_MP_SUBSCRIPTION_TEXT_3_LI_5"] = "add-on automation rules and workflows;";
$MESS["REST_MP_SUBSCRIPTION_TEXT_3_LI_6"] = "site templates;";
$MESS["REST_MP_SUBSCRIPTION_TEXT_3_MSGVER_1"] = "<a href=\"javascript:void(0)\" onclick=\"#ONCLICK#\" >Subscribe to Bitrix24 Market</a> and get:";
$MESS["REST_MP_SUBSCRIPTION_TEXT_3_MSGVER_2"] = "<a href=\"javascript:void(0)\" onclick=\"#ONCLICK#\" >Subscribe to Bitrix24 Market</a> and get:";
$MESS["REST_MP_SUBSCRIPTION_TEXT_4"] = "Get unlimited apps and widgets for <a href=\"javascript:void(0)\" onclick=\"#ONCLICK#\">fixed price</a>.";
$MESS["REST_MP_SUBSCRIPTION_TEXT_5"] = "Add even more features to your Bitrix24 to empower your business.";
$MESS["REST_MP_SUBSCRIPTION_TITLE"] = "Bitrix24 Subscription";

View File

@@ -0,0 +1,2 @@
<?php
$MESS["REST_ACCESS_DENIED"] = 'Access denied.';

View File

@@ -0,0 +1,2 @@
<?php
$MESS["REST_CLASS_REQUIRE_ATTRIBUTE_EXCEPTION"] = 'Class "#CLASS#" requires attribute "#ATTRIBUTE#".';

View File

@@ -0,0 +1,2 @@
<?php
$MESS["REST_ENTITY_NOT_FOUND"] = 'Entity with ID #ID# was not found.';

View File

@@ -0,0 +1,2 @@
<?php
$MESS["REST_INTERNAL_EXCEPTION"] = 'Something\'s gone wrong.';

View File

@@ -0,0 +1,2 @@
<?php
$MESS["REST_INTERNAL_ORM_SAVE_EXCEPTION"] = 'Internal error when saving a database record.';

View File

@@ -0,0 +1,2 @@
<?php
$MESS["REST_INVALID_FILTER_EXCEPTION"] = 'Invalid filter "#FILTER#".';

View File

@@ -0,0 +1,2 @@
<?php
$MESS["REST_INVALID_JSON_EXCEPTION"] = "Invalid JSON.";

View File

@@ -0,0 +1,2 @@
<?php
$MESS["REST_INVALID_ORDER_EXCEPTION"] = 'Invalid sort order "#ORDER#".';

Some files were not shown because too many files have changed in this diff Show More