function PHPTest() { $result = ''; $rule = new RRule(new iCalDate($this->dtstart), $this->recur); $i = 0; do { $date = $rule->GetNext(); if (isset($date)) { if ($i++ % 4 == 0) { $result .= "\n"; } $result .= " " . $date->Render(); } } while (isset($date) && $i < 30); return $result; }
function rrule($sn = '', $recurrence = '', $allDay = null) { global $xoopsDB, $xoopsUser; include_once XOOPS_ROOT_PATH . "/modules/tad_cal/class/rrule.php"; include_once XOOPS_ROOT_PATH . "/modules/tad_cal/class/ical.php"; if (empty($sn) or empty($recurrence)) { return; } // die($recurrence); $ical = new ical(); $ical->parse($recurrence); $rrule_array = $ical->get_all_data(); // die('[rrule_array]' . var_export($rrule_array)); foreach ($rrule_array['']['RRULE'] as $key => $val) { $all[] = "{$key}={$val}"; } $rrule = 'RRULE:' . implode(";", $all); // die($rrule_array['']['DTSTART']['unixtime']); $start = substr(str_replace(":", "", str_replace("-", "", date("c", $rrule_array['']['DTSTART']['unixtime']))), 0, 15); $endTime = $rrule_array['']['DTEND']['unixtime'] - $rrule_array['']['DTSTART']['unixtime']; // die($start . "====" . $rrule); // echo "<p>start= $start</p>"; // echo "<p>rrule= $rrule</p>"; $rule = new RRule($start, $rrule); $i = 0; while ($date = $rule->GetNext()) { if ($i > 300) { break; } $new_date = $date->Render(); // echo "<p>new_date= $new_date</p>"; if (empty($new_date)) { continue; } $end = date("Y-m-d H:i", strtotime($new_date) + $endTime); $allday = is_null($allDay) ? isAllDay($new_date, $end) : $allDay; $allDate[] = "('{$sn}','{$new_date}','{$end}','{$allday}')"; $i++; } // exit; $sql_data = implode(",", $allDate); if (empty($sql_data)) { return; } $sql = "delete from " . $xoopsDB->prefix("tad_cal_repeat") . " where `sn`='{$sn}'"; $xoopsDB->queryF($sql) or web_error($sql); $sql = "insert into " . $xoopsDB->prefix("tad_cal_repeat") . "\n (`sn` , `start` , `end` , `allday`)\n values{$sql_data}"; // echo "<p>$sql</p>"; $xoopsDB->queryF($sql) or web_error($sql); }
/** * Return true if $date is an occurrence. * * @param mixed $date * @return bool */ public function occursAt($date) { $date = RRule::parseDate($date); if (in_array($date, $this->cache)) { // in the cache (whether cache is complete or not) return true; } elseif ($this->total !== null) { // cache complete and not in cache return false; } // test if it *should* occur (before exclusion) $occurs = false; foreach ($this->rdates as $rdate) { if ($rdate == $date) { $occurs = true; break; } } if (!$occurs) { foreach ($this->rrules as $rrule) { if ($rrule->occursAt($date)) { $occurs = true; break; } } } // if it should occur, test if it's excluded if ($occurs) { foreach ($this->exdates as $exdate) { if ($exdate == $date) { return false; } } foreach ($this->exrules as $exrule) { if ($exrule->occursAt($date)) { return false; } } } return $occurs; }