напоминание в календаре
У меня есть календарь, события которого хранятся в базе. Подскажите как можно реализовать напоминание за 3-2-1 дня до события. Чтобы с приближением события выхдило напоминание каждый день. Вот код, Спасибо.
<div id="calPeriod"><?php
// (A1) MONTH SELECTOR
// NOTE: DEFAULT TO CURRENT SERVER MONTH YEAR
$months = [
1 => "January", 2 => "Febuary", 3 => "March", 4 => "April",
5 => "May", 6 => "June", 7 => "July", 8 => "August",
9 => "September", 10 => "October", 11 => "November", 12 => "December"
];
$monthNow = date("m");
echo "<select id='calmonth'>";
foreach ($months as $m=>$mth) {
printf("<option value='%s'%s>%s</option>",
$m, $m==$monthNow?" selected":"", $mth
);
}
echo "</select>";
echo "<input type='number' id='calyear' value='".date("Y")."'/>";
?></div>
<div id="calwrap"></div>
<div id="calblock"><form id="calform">
<input type="hidden" name="req" value="save" style="background-color: red;" />
<input type="hidden" id="evtid" name="eid"/>
<label for="start">Date Start</label>
<input type="datetime-local" id="evtstart" name="start" required/>
<label for="end">Date End</label>
<input type="datetime-local" id="evtend" name="end" required/>
<label for="txt">Event</label>
<textarea id="evttxt" name="txt" required></textarea>
<label for="color">Priority Color</label>
<input type="color" id="evtcolor" name="color" value="#F10000" required/>
<input type="submit" id="calformsave" value="Save"/>
<input type="button" id="calformdel" value="Delete"/>
<input type="button" id="calformcx" value="Cancel"/>
</form></div>
php
class Calendar {
private $pdo = null;
private $stmt = null;
public $error = "";
function __construct () {
try {
$this->pdo = new PDO(
"mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET,
DB_USER, DB_PASSWORD, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
]
);
} catch (Exception $ex) { exit($ex->getMessage()); }
}
function __destruct () {
if ($this->stmt!==null) { $this->stmt = null; }
if ($this->pdo!==null) { $this->pdo = null; }
}
function exec ($sql, $data=null) {
try {
$this->stmt = $this->pdo->prepare($sql);
$this->stmt->execute($data);
return true;
} catch (Exception $ex) {
$this->error = $ex->getMessage();
return false;
}
}
function save ($start, $end, $txt, $color, $id=null) {
// (D1) START & END DATE QUICK CHECK
$uStart = strtotime($start);
$uEnd = strtotime($end);
if ($uEnd < $uStart) {
$this->error = "End date cannot be earlier than start date";
return false;
}
if ($id==null) {
$sql = "INSERT INTO `events` (`evt_start`, `evt_end`, `evt_text`, `evt_color`) VALUES (?,?,?,?)";
$data = [$start, $end, $txt, $color];
} else {
$sql = "UPDATE `events` SET `evt_start`=?, `evt_end`=?, `evt_text`=?, `evt_color`=? WHERE `evt_id`=?";
$data = [$start, $end, $txt, $color, $id];
}
return $this->exec($sql, $data);
}
function del ($id) {
return $this->exec("DELETE FROM `events` WHERE `evt_id`=?", [$id]);
}
function get ($month, $year) {
// (F1) FIST & LAST DAY OF MONTH
$daysInMonth = cal_days_in_month(CAL_GREGORIAN, $month, $year);
$dayFirst = "{$year}-{$month}-01 00:00:00";
$dayLast = "{$year}-{$month}-{$daysInMonth} 23:59:59";
if (!$this->exec(
"SELECT * FROM `events` WHERE (
(`evt_start` BETWEEN ? AND ?)
OR (`evt_end` BETWEEN ? AND ?)
OR (`evt_start` <= ? AND `evt_end` >= ?)
)", [$dayFirst, $dayLast, $dayFirst, $dayLast, $dayFirst, $dayLast]
)) { return false; }
// $events = [
// "e" => [ EVENT ID => [DATA], EVENT ID => [DATA], ... ],
// "d" => [ DAY => [EVENT IDS], DAY => [EVENT IDS], ... ]
// ]
$events = ["e" => [], "d" => []];
while ($row = $this->stmt->fetch()) {
$eStartMonth = substr($row["evt_start"], 5, 2);
$eEndMonth = substr($row["evt_end"], 5, 2);
$eStartDay = $eStartMonth==$month
? (int)substr($row["evt_start"], 8, 2) : 1 ;
$eEndDay = $eEndMonth==$month
? (int)substr($row["evt_end"], 8, 2) : $daysInMonth ;
for ($d=$eStartDay; $d<=$eEndDay; $d++) {
if (!isset($events["d"][$d])) { $events["d"][$d] = []; }
$events["d"][$d][] = $row["evt_id"];
}
$events["e"][$row["evt_id"]] = $row;
$events["e"][$row["evt_id"]]["first"] = $eStartDay;
}
return $events;
}
}
define("DB_HOST", "localhost");
define("DB_NAME", "test");
define("DB_CHARSET", "utf8");
define("DB_USER", "root");
define("DB_PASSWORD", "");
$_CAL = new Calendar();