- Модуль: translate
- Путь к файлу: ~/bitrix/modules/translate/lib/file.php
- Класс: BitrixTranslateFile
- Вызов: File::updatePhraseIndex
public function updatePhraseIndex(): IndexFileIndex
{
$this->getFileIndex();
$fileId = $this->fileIndex->getId();
if ($fileId > 0)
{
$phraseId = IndexInternalsPhraseIndexTable::query()
->registerRuntimeField(new MainORMFieldsExpressionField('MAXID', 'MAX(%s)', ['ID']))
->addSelect('MAXID')
->exec()
->fetch()['MAXID'];
$pathId = $this->fileIndex->getPathId();
$phraseData = [];
$phraseCodeData = [];
foreach ($this as $code => $phrase)
{
$phraseId ++;
$langId = $this->getLangId();
$phraseCodeData[] = [
'ID' => $phraseId,
'FILE_ID' => $fileId,
'PATH_ID' => $pathId,
'LANG_ID' => $langId,
'CODE' => $code,
];
if (!isset($phraseData[$langId]))
{
$phraseData[$langId] = [];
}
$phraseData[$langId][] = [
'ID' => $phraseId,
'FILE_ID' => $fileId,
'PATH_ID' => $pathId,
'CODE' => $code,
'PHRASE' => $phrase,
];
}
// delete
$filter = new TranslateFilter(['fileId' => $fileId]);
IndexInternalsPhraseIndexTable::purge($filter);
foreach (TranslateConfig::getLanguages() as $langId)
{
$ftsClass = IndexInternalsPhraseFts::getFtsEntityClass($langId);
$ftsClass::purge($filter);
}
// add
if (count($phraseCodeData) > 0)
{
IndexInternalsPhraseIndexTable::bulkAdd($phraseCodeData);
foreach ($phraseData as $langId => $phraseLangData)
{
$ftsClass = IndexInternalsPhraseFts::getFtsEntityClass($langId);
$ftsClass::bulkAdd($phraseLangData, 'ID');
}
}
$this->fileIndex
->setPhraseCount($this->count())
->setIndexed(true)
->setIndexedTime(new MainTypeDateTime())
->save();
}
return $this->fileIndex;
}