/** * creates formatted output for calendar component property data value type recur * * @author Kjell-Inge Gustafsson, kigkonsult <*****@*****.**> * @since 2.4.8 - 2008-10-22 * @param array $recurlabel * @param array $recurdata * @return string */ function _format_recur($recurlabel, $recurdata) { $output = null; foreach ($recurdata as $therule) { if (empty($therule['value'])) { if ($this->getConfig('allowEmpty')) { $output .= $this->_createElement($recurlabel); } continue; } $attributes = isset($therule['params']) ? $this->_createParams($therule['params']) : null; $content1 = $content2 = null; foreach ($therule['value'] as $rulelabel => $rulevalue) { switch ($rulelabel) { case 'FREQ': $content1 .= "FREQ={$rulevalue}"; break; case 'UNTIL': $content2 .= ";UNTIL="; $content2 .= iCal_UtilityFunctions::_format_date_time($rulevalue); break; case 'COUNT': case 'INTERVAL': case 'WKST': $content2 .= ";{$rulelabel}={$rulevalue}"; break; case 'BYSECOND': case 'BYMINUTE': case 'BYHOUR': case 'BYMONTHDAY': case 'BYYEARDAY': case 'BYWEEKNO': case 'BYMONTH': case 'BYSETPOS': $content2 .= ";{$rulelabel}="; if (is_array($rulevalue)) { foreach ($rulevalue as $vix => $valuePart) { $content2 .= $vix ? ',' : null; $content2 .= $valuePart; } } else { $content2 .= $rulevalue; } break; case 'BYDAY': $content2 .= ";{$rulelabel}="; $bydaycnt = 0; foreach ($rulevalue as $vix => $valuePart) { $content21 = $content22 = null; if (is_array($valuePart)) { $content2 .= $bydaycnt ? ',' : null; foreach ($valuePart as $vix2 => $valuePart2) { if ('DAY' != strtoupper($vix2)) { $content21 .= $valuePart2; } else { $content22 .= $valuePart2; } } $content2 .= $content21 . $content22; $bydaycnt++; } else { $content2 .= $bydaycnt ? ',' : null; if ('DAY' != strtoupper($vix)) { $content21 .= $valuePart; } else { $content22 .= $valuePart; $bydaycnt++; } $content2 .= $content21 . $content22; } } break; default: $content2 .= ";{$rulelabel}={$rulevalue}"; break; } } $output .= $this->_createElement($recurlabel, $attributes, $content1 . $content2); } return $output; }