- Модуль: documentgenerator
- Путь к файлу: ~/bitrix/modules/documentgenerator/lib/controller/template.php
- Класс: BitrixDocumentGeneratorControllerTemplate
- Вызов: Template::getDefaultTemplateList
static function getDefaultTemplateList(array $filter = [])
{
$result = new Result();
$dataPath = Application::getDocumentRoot().self::DEFAULT_DATA_PATH;
if(!Directory::isDirectoryExists($dataPath))
{
return $result->addError(new Error('Default data directory not found'));
}
$templatesFile = new BitrixMainIOFile(Path::combine($dataPath, 'templates.php'));
if(!$templatesFile->isExists())
{
return $result->addError(new Error('File with default templates not found'));
}
$templates = include $templatesFile->getPath();
if(!is_array($templates))
{
return $result->addError(new Error('No data in templates file'));
}
foreach($templates as $key => $template)
{
if(!$template['FILE'])
{
$result->addError(new Error('Empty FILE for template'));
unset($templates[$key]);
continue;
}
if(isset($filter['CODE']) && $template['CODE'] != $filter['CODE'])
{
unset($templates[$key]);
continue;
}
if(isset($filter['MODULE_ID']) && $template['MODULE_ID'] != $filter['MODULE_ID'])
{
unset($templates[$key]);
continue;
}
if(isset($filter['REGION']))
{
if(is_array($filter['REGION']))
{
if(!in_array($template['REGION'], $filter['REGION']))
{
unset($templates[$key]);
continue;
}
}
else
{
if($filter['REGION'] != $template['REGION'])
{
unset($templates[$key]);
continue;
}
}
}
if(isset($filter['NAME']) && mb_strpos($template['NAME'], $filter['NAME']) === false)
{
unset($templates[$key]);
continue;
}
}
$templates = array_values($templates);
$providers = DataProviderManager::getInstance()->getList();
$extendedProviders = [];
foreach($providers as $provider)
{
if(isset($provider['ORIGINAL']))
{
$extendedProviders[$provider['ORIGINAL']][] = $provider;
}
}
$buffer = $names = $codes = [];
foreach($templates as $template)
{
$names[] = $template['NAME'];
$codes[] = $template['CODE'];
foreach($template['PROVIDERS'] as $key => $provider)
{
$provider = mb_strtolower($provider);
if(isset($extendedProviders[$provider]))
{
unset($template['PROVIDERS'][$key]);
foreach($extendedProviders[$provider] as $extendedProvider)
{
$template['PROVIDER_NAMES'][] = $extendedProvider['NAME'];
$template['PROVIDERS'][] = $extendedProvider['CLASS'];
}
}
else
{
$template['PROVIDER_NAMES'][] = $providers[mb_strtolower($provider)]['NAME'];
}
}
$buffer[$template['CODE']] = $template;
}
$templates = $buffer;
unset($buffer);
$oldTemplates = TemplateTable::getList([
'select' => [
'ID',
'FILE_ID',
'NAME',
'CODE',
'IS_DELETED',
],
'order' => [
'ID' => 'desc'
],
'filter' => [
'@CODE' => $codes,
'@NAME' => $names,
],
])->fetchAll();
$unFoundTemplates = $templates;
foreach($oldTemplates as $oldTemplate)
{
foreach($unFoundTemplates as $code => $unFoundTemplate)
{
if($oldTemplate['CODE'] == $unFoundTemplate['CODE'] && $oldTemplate['NAME'] == $unFoundTemplate['NAME'])
{
$templates[$code]['IS_DELETED'] = $oldTemplate['IS_DELETED'];
$templates[$code]['ID'] = $oldTemplate['ID'];
$templates[$code]['FILE_ID'] = $oldTemplate['FILE_ID'];
unset($unFoundTemplates[$code]);
break;
}
}
}
$numeratorCodes = [];
foreach ($templates as $template)
{
$baseNumeratorConfig = $template['NUMERATOR']['CONFIG'][Numerator::getType()] ?? null;
if ($baseNumeratorConfig && isset($baseNumeratorConfig['code']))
{
$numeratorCodes[$baseNumeratorConfig['code']] = (string)$baseNumeratorConfig['code'];
}
}
if (!empty($numeratorCodes))
{
$dbIterator =
NumeratorTable::query()
->setSelect(['ID', 'CODE'])
->whereIn('CODE', $numeratorCodes)
->exec()
;
$codeToIdMap = [];
while ($numerator = $dbIterator->fetchObject())
{
$codeToIdMap[$numerator->getCode()] = $numerator->getId();
}
foreach ($templates as &$template)
{
$code = $template['NUMERATOR']['CONFIG'][Numerator::getType()]['code'] ?? null;
if ($code && isset($codeToIdMap[$code]))
{
$template['NUMERATOR_ID'] = $codeToIdMap[$code];
}
}
unset($template);
}
$result->setData($templates);
return $result;
}