static function DisplayPeriodicEvent(&$res, $arParams)
{
$length = intval($arParams['length']);// length in seconds
$count = $arParams['count'];
$f_limit_ts = MakeTimeStamp($arParams['fromLimit'], getTSFormat());
$t_limit_ts = MakeTimeStamp($arParams['toLimit'], getTSFormat());
$f_real_ts = MakeTimeStamp($arParams['arItem']['DISPLAY_ACTIVE_FROM'], getTSFormat());
$t_real_ts = MakeTimeStamp($arParams['arItem']['DISPLAY_ACTIVE_TO'], getTSFormat());
if ($count <= 0)
$count = 1;
if ($f_limit_ts < $f_real_ts)
$f_limit_ts = $f_real_ts;
if ($t_limit_ts > $t_real_ts)
$t_limit_ts = $t_real_ts;
$from_ts = $f_real_ts;
$to_ts = $f_real_ts;
$arDays = array();
if ($arParams['perType'] == 'WEEKLY')
{
$arDays_ = explode(',', $arParams['additional']);
$arDaysCount = count($arDays_);
for ($i = 0; $i < $arDaysCount; $i++)
if ($arDays_[$i] != "")
$arDays[$arDays_[$i]] = true;
$arParams['arDays'] = $arDays;
}
while($to_ts < $t_limit_ts)
{
$f_time_h = date("H", $from_ts);
$f_time_m = date("i", $from_ts);
$f_time_s = date("s", $from_ts);
$f_d = date("d", $from_ts);
$f_m = date("m", $from_ts);
$f_y = date("Y", $from_ts);
if ($arParams['perType'] == 'WEEKLY')
{
$f_day = convertDayInd(date("w", $from_ts));
if ($arDays[$f_day] || count($arDays) == 0)
{
$to_ts = mktime($f_time_h, $f_time_m, $f_time_s + $length, $f_m, $f_d, $f_y);
if ($from_ts <= $t_limit_ts && $to_ts >= $f_limit_ts)
CEventCalendar::HandlePeriodicElement($res, array_merge($arParams, array('dateFrom' => date(getDateFormat(), $from_ts), 'dateTo' => date(getDateFormat(), $to_ts))));
elseif($from_ts > $f_limit_ts)
break;
}
if ($f_day == 6)
$delta = ($count - 1) * 7 + 1;
else
$delta = 1;
$from_ts = mktime($f_time_h, $f_time_m, $f_time_s, $f_m, $f_d + $delta, $f_y);
}
else // DAILY, MONTHLY, YEARLY
{
$to_ts = mktime($f_time_h, $f_time_m, $f_time_s + $length, $f_m, $f_d, $f_y);
if ($from_ts <= $t_limit_ts && $to_ts >= $f_limit_ts)
CEventCalendar::HandlePeriodicElement($res, array_merge($arParams, array('dateFrom' => date(getDateFormat(), $from_ts), 'dateTo' => date(getDateFormat(), $to_ts))));
elseif($from_ts > $f_limit_ts)
break;
switch ($arParams['perType'])
{
case 'DAILY':
$from_ts = mktime($f_time_h, $f_time_m, $f_time_s, $f_m, $f_d + $count, $f_y);
break;
case 'MONTHLY':
$from_ts = mktime($f_time_h, $f_time_m, $f_time_s, $f_m + $count, $f_d, $f_y);
break;
case 'YEARLY':
$from_ts = mktime($f_time_h, $f_time_m, $f_time_s, $f_m, $f_d, $f_y + $count);
break;
}
}
}
}