function amr_parse_RRULEparams($args) { global $amr_bys; global $amr_day_of_week_no; global $amr_wkst; global $amr_rulewkst; global $amr_globaltz; if (!is_array($args)) { return false; } foreach ($args as $i => $a) { parse_str($a); } /* now we should have if they are there: $freq, $interval, $until, $wkst, $ count, $byweekno etc */ if (isset($BYMONTH)) { $p['month'] = explode(',', $BYMONTH); foreach ($p['month'] as $j => $k) { if ($k < 0) { $p['month'][$j] = 13 + $k; } } } if (isset($BYMONTHDAY)) { $p['day'] = explode(',', $BYMONTHDAY); } if (isset($BYHOUR)) { $p['hour'] = explode(',', $BYHOUR); foreach ($p['hour'] as $j => $k) { if ($k < 0) { $p['hour'][$j] = 24 + $k; } } } if (isset($BYMINUTE)) { $p['minute'] = explode(',', $BYMINUTE); foreach ($p['minute'] as $j => $k) { if ($k < 0) { $p['minute'][$j] = 60 + $k; } } } if (isset($BYSECOND)) { $p['second'] = explode(',', $BYSECOND); foreach ($p['second'] as $j => $k) { if ($k < 0) { $p['second'][$j] = 60 + $k; } } } if (isset($BYDAY)) { $p['BYDAY'] = explode(',', $BYDAY); foreach ($p['BYDAY'] as $j => $k) { $l = strlen($k); if ($l > 2) { /* special treatment required - flag to re handle, keep as we want to isolate a subset anyway */ $thenumber = substr($k, 0, $l - 2); $theday = substr($k, $l - 2, $l); $p['NBYDAY'][$theday][] = $thenumber; /* could be multiple numeric for same day eg first and last */ unset($p['BYDAY'][$j]); } else { $p['BYDAY'][$k] = true; unset($p['BYDAY'][$j]); } } } if (isset($p['BYDAY']) and count($p['BYDAY']) < 1) { unset($p['BYDAY']); } if (isset($BYWEEKNO)) { $p['BYWEEKNO'] = explode(',', $BYWEEKNO); } if (isset($BYYEARDAY)) { $p['BYYEARDAY'] = explode(',', $BYYEARDAY); } if (isset($UNTIL)) { $p['UNTIL'] = amr_parseDateTime($UNTIL, $amr_globaltz); } if (isset($COUNT)) { $p['COUNT'] = $COUNT; } if (isset($INTERVAL)) { $p['INTERVAL'] = $INTERVAL; } if (isset($FREQ)) { $p['FREQ'] = $FREQ; } if (isset($BYSETPOS)) { $p['BYSETPOS'] = explode(',', $BYSETPOS); } if (isset($WKST)) { $p['WKST'] = $WKST; $amr_wkst = $WKST; } if (!empty($p)) { return $p; } else { return false; } }
function amr_parseRDATE($string, $tzobj) { /* RDATE:19970714T123000Z RDATE:19970714T083000 RDATE;TZID=US-EASTERN:19970714T083000 RDATE;VALUE=PERIOD:19960403T020000Z/19960403T040000Z,19960404T010000Z/PT3H - not supported yet RDATE;VALUE=DATE:19970101,19970120,19970217,19970421,19970526,19970704,19970901,19971014,19971128,19971129,19971225 could be multiple dates after : */ if (empty($string)) { return false; } if (is_object($string)) { /* already parsed */ return $string; } //echo '*** Here'; var_dump($string); if (is_array($string)) { $rdatearray = array(); foreach ($string as $i => $rdatestring) { // $r = $string[0]; if (is_object($rdatestring)) { /* already parsed and is an array of dates */ return $string; } else { if (isset($_GET['debugexc'])) { echo '<br />***Doing next r or exdate ' . $i . ' ' . $rdatestring; } $rdate = amr_parseRDATE($rdatestring, $tzobj); } if (is_array($rdate)) { $rdatearray = array_merge($rdatearray, $rdate); } } //if (isset($_GET['debugexc'])) { //echo '<br />*** Array of r or exdate '; var_dump($rdatearray);// } return $rdatearray; } $rdatestring = explode(':', $string); /* $VALUE=DATE: or VALUE=DATE-TIME: and a series of dates (no time) */ // if (isset($_GET['rdebug'])) {echo '<br />Ok now really parse it '; var_dump($rdatestring); echo '<br />'; } if (isset($rdatestring[0])) { if ($rdatestring[0] == 'VALUE=DATE' and isset($rdatestring[1])) { $rdate = explode(',', $rdatestring[1]); /* that' sall we are doing for now */ // if (isset($_GET['rdebug'])) {echo '<br />Parsing value=date...<br/> '; var_dump($rdate);} foreach ($rdate as $i => $r) { $temp = amr_parseValue('DATE', $r, $tzobj); //amr 20150622 only variables by reference $dates[$i] = array_shift($temp); /*returns array, but there should only be 1 value */ } return $dates; } else { if ($rdatestring[0] == 'VALUE=PERIOD' and isset($rdatestring[1])) { echo "<br />HELP cannot yet deal with RDATE with VALUE=PERIOD<br />"; return false; } else { if ($rdatestring[0] == 'VALUE=DATE-TIME' and isset($rdatestring[1])) { $rdate = explode(',', $rdatestring[1]); } else { $rdate = explode(',', $rdatestring[0]); } foreach ($rdate as $i => $r) { if (empty($r)) { return false; } $dates[$i] = amr_parseDateTime($r, $tzobj); if (isset($_GET['debugexc'])) { echo '<br />*** Parsed as: ' . $dates[$i]->format('c'); } } if (empty($dates)) { return false; } else { return $dates; } } } } else { return false; } }