- Модуль: disk
- Путь к файлу: ~/bitrix/modules/disk/lib/baseobject.php
- Класс: BitrixDiskBaseObject
- Вызов: BaseObject::getNextGeneratedName
static function getNextGeneratedName($mainPartName, $suffix, $underObjectId, $withoutLike = false)
{
$underObjectId = (int)$underObjectId;
$left = $mainPartName . ' (';
$right = ')';
if ($suffix)
{
$right = ').'. $suffix;
}
$lengthR = mb_strlen($right);
$lengthL = mb_strlen($left);
$connection = Application::getConnection();
$sqlHelper = $connection->getSqlHelper();
$filterByLike = "NAME LIKE '" . $sqlHelper->forSql($left) . "%' AND";
if ($withoutLike)
{
$filterByLike = '';
}
$sql = "
SELECT NAME FROM b_disk_object
WHERE
PARENT_ID = {$underObjectId} AND
{$filterByLike}
LEFT(NAME, {$lengthL}) = '" . $sqlHelper->forSql($left) . "' AND
MID(NAME, {$lengthL} + 1, CHAR_LENGTH(NAME) - {$lengthL} - {$lengthR}) regexp '^[1-9][[:digit:]]*$' AND
RIGHT(NAME, {$lengthR}) = '" . $sqlHelper->forSql($right) . "'
ORDER BY CHAR_LENGTH(NAME) DESC, NAME DESC
LIMIT 1;
";
$row = $connection->query($sql)->fetch();
if (!$row)
{
$newName = $mainPartName . " (1)";
if ($suffix)
{
$newName .= "." . $suffix;
}
return [
$newName,
null,
1
];
}
$counter = mb_substr($row['NAME'], $lengthL, mb_strlen($row['NAME']) - $lengthL - $lengthR);
$counter = (int)$counter + 1;
return [
$left . $counter . $right,
$row['NAME'],
$counter
];
}