В продолжение темы: сортировка по CURRENT_BIRTHDAY задается в методе GetList класса cUser здесь:
bitrix/modules/main/classes/mysql/user.php
следующим кодом:
| Код |
|---|
if($field == "CURRENT_BIRTHDAY")
{
$cur_year = intval(date('Y'));
$arSqlOrder[$field] = "IF(ISNULL(PERSONAL_BIRTHDAY), '9999-99-99', IF (
DATE_FORMAT(U.PERSONAL_BIRTHDAY, '".$cur_year."-%m-%d') < DATE_FORMAT(CURDATE(), '%Y-%m-%d'),
DATE_FORMAT(U.PERSONAL_BIRTHDAY, '".($cur_year + 1)."-%m-%d'),
DATE_FORMAT(U.PERSONAL_BIRTHDAY, '".$cur_year."-%m-%d')
)) ".$dir;
}
|
Наиболее простым вариантом для решения вопроса будет изменение этого кода с тем чтобы при сравнении даты учитывалась не просто CURDATE() а текущая дата, скорректированная с учетом выходных и праздничных дней.
Есть, однако, и недостатки такого решения:
А) при обновлении системы эти изменения затрутся и их нужно вносить заново. Возможно, есть вариант как этого избежать - здесь хотелось бы посоветоваться с другими специалистами.
Б) теоретически, сортировка по Current_BIRTHDAY может использоваться в других компонентах, кроме Birthday_NEAREST, и там может потребоваться стандартная логика, без корректировки на выходные и праздничные дни. Что делать в этом случае? Видимо, создавать отдельный параметр для сортировки, например, CURRENT_BIRTHDAY_MOD, у которого уже прописать логику с учетом выходных и праздничных дней.