3namespace Bitrix\Translate;
7use Bitrix\Main\Localization;
8use Bitrix\Main\Localization\Loc;
37 if (!
Main\Loader::includeModule(
'translate'))
41 $this->sendJsonResponse(
new Error(
'Module "translate" is not installed.', self::STATUS_ERROR));
45 $this->
addError(
new Error(
'Module "translate" is not installed.', self::STATUS_ERROR));
94 $this->sendJsonResponse(
new Error(Loc::getMessage(
'TRANSLATE_FILTER_ERROR_ACCESS_DENIED'), self::STATUS_DENIED));
98 $this->
addError(
new Error(Loc::getMessage(
'TRANSLATE_FILTER_ERROR_ACCESS_DENIED'), self::STATUS_DENIED));
118 $this->sendJsonResponse(
new Error(Loc::getMessage(
'TRANSLATE_FILTER_ERROR_WRITING_RIGHTS'), self::STATUS_DENIED));
122 $this->
addError(
new Error(Loc::getMessage(
'TRANSLATE_FILTER_ERROR_WRITING_RIGHTS'), self::STATUS_DENIED));
142 $this->sendJsonResponse(
new Error(Loc::getMessage(
'TRANSLATE_FILTER_ERROR_PHP_EDIT_RIGHTS'), self::STATUS_DENIED));
146 $this->
addError(
new Error(Loc::getMessage(
'TRANSLATE_FILTER_ERROR_PHP_EDIT_RIGHTS'), self::STATUS_DENIED));
163 if (!empty($stepper))
165 $this->arResult[
'STEPPER'] = $stepper;
184 $majorVersion = (int)\mb_substr(\
Bitrix\
Main\Application::getConnection()->getVersion()[0], 0, 1);
186 if ($majorVersion >= 8)
189 if ($conf[
'Variable_name'] ==
'regexp_time_limit')
191 if ((
int)$conf[
'Value'] <= 0)
193 $this->
addWarning(
new Error(Loc::getMessage(
'TRANSLATE_MYSQL_CONFIG_ERROR_REGEXP_TIME_LIMIT'), self::STATUS_ERROR));
205 if (empty(
$params[
'CURRENT_LANG']))
207 $params[
'CURRENT_LANG'] = Loc::getCurrentLang();
209 if (empty(
$params[
'LIST_PATH']))
211 $params[
'LIST_PATH'] =
'/bitrix/admin/translate_list.php';
213 if (empty(
$params[
'EDIT_PATH']))
215 $params[
'EDIT_PATH'] =
'/bitrix/admin/translate_edit.php';
217 if (empty(
$params[
'SHOW_SOURCE_PATH']))
219 $params[
'SHOW_SOURCE_PATH'] =
'/bitrix/admin/translate_show_php.php';
221 if (empty(
$params[
'EDIT_SOURCE_PATH']))
223 $params[
'EDIT_SOURCE_PATH'] =
'/bitrix/admin/translate_edit_php.php';
245 $inx = \array_search($currentLangId, $languageList,
true);
248 unset($languageList[$inx]);
251 \array_unshift($languageList, $currentLangId);
253 return $languageList;
261 static $languagesList;
263 if (empty($languagesList))
268 return $languagesList;
281 array_walk($titles,
function(&
$title, $langId) {
$title =
"{$title} ({$langId})"; });
293 static $languages =
array();
294 if (empty($languages))
297 $currentLang = Loc::getCurrentLang();
300 $isEncodingCompatible =
function ($langId) use ($limitEncoding, $currentEncoding, $currentLang)
306 $langId == $currentLang ||
316 foreach ($enabledLanguages as $langId)
318 if ($limitEncoding && !$isEncodingCompatible($langId))
322 $languages[] = $langId;
334 $tabId = $this->request->get(
'tabId');
337 $this->tabId = (int)
$tabId;
358 $initPaths = Translate\Config::getInitPath();
359 if (
count($initPaths) > 0)
361 $home = $initPaths[0];
364 foreach ($initPaths as $initPath)
366 if (\mb_strpos(
$path, $initPath) === 0)
425 ($this->request->isAjaxRequest() || $this->request->get(
'AJAX_CALL') !==
null) &&
426 $this->request->getRequestMethod() ==
'POST';
437 protected function sendJsonResponse(
$response)
452 $answer->setStatus(
'500 Internal Server Error');
454 $response[
'status'] = self::STATUS_ERROR;
460 'message' =>
$error->getMessage(),
461 'code' =>
$error->getCode(),
469 $response[
'status'] = self::STATUS_SUCCESS;
472 $answer->addHeader(
'Content-Type',
'application/x-javascript; charset=UTF-8');
475 \CMain::finalActions();
486 $res = \CUserOptions::getList(
false,[
'CATEGORY' => $category,
'USER_ID' => $this->
getUser()->getId(),
'NAME_MASK' => $nameMask]);
487 while ($opt =
$res->fetch())
489 \CUserOptions::deleteOption($category, $opt[
'NAME']);
502 static $pathBackCache =
array();;
503 if (!isset($pathBackCache[
$path]))
505 $pathBack = \dirname(
$path);
506 $slash = \explode(
'/', $pathBack);
507 if (\is_array($slash))
510 $langKey = \array_search(
'lang', $slash) + 1;
511 unset($slashTmp[$langKey]);
512 if ($langKey == \
count($slash) - 1)
514 unset($slash[$langKey]);
515 $pathBack = \implode(
'/', $slash);
518 $pathBackCache[
$path] = $pathBack;
521 return $pathBackCache[
$path];
533 static $chainCache = [];
534 if (!isset($chainCache[
$path]))
538 $slash = \explode(
'/', \dirname(
$path));
539 if (\is_array($slash))
541 $langKey = \array_search(
'lang', $slash) + 1;
542 $slash[$langKey] =
$params[
'CURRENT_LANG'];
543 if ($langKey == \
count($slash) - 1)
545 unset($slash[$langKey]);
549 foreach ($slash as
$dir)
555 'link' =>
$params[
'LIST_PATH'].
556 '?lang='.
$params[
'CURRENT_LANG'].
557 '&tabId='.$this->tabId.
566 'link' =>
$params[
'LIST_PATH'].
567 '?lang='.
$params[
'CURRENT_LANG'].
568 '&tabId='.$this->tabId.
569 '&path=/'.\implode(
'/', $pathList).
'/',
575 $chainCache[
$path] = $chain;
578 return $chainCache[
$path];
588 'select' => [
'ID',
'PATH'],
592 '<=DEPTH_LEVEL' => $depth,
595 'DEPTH_LEVEL' =>
'ASC',
599 while ($row =
$res->fetch())
601 $list[$row[
'ID']] = $row[
'PATH'];
static getConnection($name="")
static useTranslationRepository()
static getCurrentEncoding()
static getList(array $parameters=array())
static getHtml($ids=[], $title="")
hasUserPermissionView($user)
rearrangeLanguages($languageList, $currentLangId)
detectStartingPath(?string $path='')
hasUserPermissionEdit($user)
getTopIndexedFolders(int $depth=2)
checkModuleAvailability()
getLanguagesTitle($languageIds)
clearSavedOptions($category, $nameMask)
hasUserPermissionEditSource($user)
generateChainLinks($path)
static getCultureEncoding(string $languageId)
static getEnabledLanguages()
static getLanguagesTitle(array $languageIds)
static getTabId(bool $increment=true)
static canView($checkUser)
static canEdit($checkUser)
static canEditSource($checkUser)
includeComponentTemplate($templatePage="", $customTemplatePath="")
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
addError(Main\Error $error)
htmlspecialcharsbx($string, $flags=ENT_COMPAT, $doubleEncode=true)
addWarning(Main\Error $error)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']