Exemple #1
0
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;
    }
}
Exemple #2
0
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;
    }
}