- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/lib/util/replicator/task/fromtemplate.php
- Класс: BitrixTasksUtilReplicatorTaskFromTemplate
- Вызов: FromTemplate::getWeeklyDate
static function getWeeklyDate($baseTime, $arParams, $preferredTime)
{
$weekNumber = intval($arParams["EVERY_WEEK"]);
$currentDay = date("N", $baseTime); // day 1 - 7
$days = is_array($arParams["WEEK_DAYS"]) && sizeof(array_filter($arParams["WEEK_DAYS"])) ? $arParams["WEEK_DAYS"] : array(1); // days 1 - 7
$preferredDateTime = static::stripTime($baseTime) + $preferredTime;
$date = $preferredDateTime;
// check if we need to create task today
if (in_array($currentDay, $days))
{
if ($date > $baseTime)
{
return $date;
}
}
// check if we have "chosen day" ahead, till the end of the week
$nextDay = false;
for ($i = $currentDay + 1; $i <= 7; $i++)
{
if(in_array($i, $days))
{
$nextDay = $i;
break;
}
}
if ($nextDay)
{
// next available day found, so just move there
$date = $preferredDateTime + ($nextDay - $currentDay) * 86400;
}
else
{
// we are at the end of the week, and there are no chosen days to pick
// so we skip $weekNumber weeks and add the first available day
reset($days);
$firstDay = current($days);
$restOfWeek = 7 - $currentDay;
$date = $preferredDateTime + ($weekNumber > 1? ($weekNumber - 1) : 0) * 7 * 86400 + ($restOfWeek + $firstDay) * 86400;
}
return $date;
}