Project import generated by Copybara.
GitOrigin-RevId: 63746295f1a5ab5a619056791995793d65529e62
diff --git a/src/inc/recurringIncidents.php b/src/inc/recurringIncidents.php
new file mode 100644
index 0000000..b07bf66
--- /dev/null
+++ b/src/inc/recurringIncidents.php
@@ -0,0 +1,97 @@
+<?php
+class recurringIncidents {
+ /*public static function oldAdd($worker, $type, $details, $ifirstday, $ilastday, $begins, $ends, $creator = "ME", $typedays, $days, $alreadyTimestamp = false) {
+ global $con, $conf;
+
+ $sworker = (int)$worker;
+ $workerDetails = workers::get($sworker);
+ if ($workerDetails === false) return 1;
+
+ if ($creator === "ME") $creator = people::userData("id");
+ $screator = (int)$creator;
+
+ if (!security::isAllowed(security::ADMIN) && $workerDetails["person"] != $creator) return 5;
+
+ $stype = (int)$type;
+ $sverified = (int)$verified;
+ $sdetails = db::sanitize($details);
+
+ $incidenttype = self::getType($stype);
+ if ($incidenttype === false) return -1;
+
+ if ($alreadyTimestamp) {
+ $sfirstday = (int)$ifirstday;
+ $slastday = (int)$ilastday;
+ } else {
+ $firstday = new DateTime($ifirstday);
+ $sfirstday = (int)$firstday->getTimestamp();
+ $lastday = new DateTime($ilastday);
+ $slastday = (int)$lastday->getTimestamp();
+ }
+
+ if ($sfirstday >= $slastday) return 3;
+
+ $sbegins = (int)$begins;
+ $sends = (int)$ends;
+ if ($sbegins >= $sends) return 3;
+
+ $typedays = array_unique(array_map(function($el) {
+ return (int)$el;
+ }, $typedays));
+ foreach ($typedays as $typeday) {
+ if (!in_array($typeday, $workingTypes)) return 6;
+ }
+ $stypedays = json_encode($typedays);
+
+ if (!mysqli_query($con, "INSERT INTO recurringincidents (worker, creator, type, firstday, lastday, typedays, begins, ends, details) VALUES ($sworker, $screator, $stype, $sfirstday, $slastday, '$stypedays', $sbegins, $sends, '$sdetails')")) return -1;
+
+ return 0;
+ }*/ // NOTE: This was a first idea, to allow setting up recurring incidents like schedules, but we've changed how we'll handle them and so this is no longer useful.
+
+ public static function add($worker, $type, $details, $ifirstday, $ilastday, $begins, $ends, $creator = "ME", $typeDays, $days, $alreadyTimestamp = false) {
+ if ($alreadyTimestamp) {
+ $current = new DateTime();
+ $current->setTimestamp($ifirstday);
+ $lastday = new DateTime();
+ $lastday->setTimestamp($ilastday);
+ } else {
+ $current = new DateTime($ifirstday);
+ $lastday = new DateTime($ilastday);
+ }
+
+ $oneDay = new DateInterval("P1D");
+
+ $category = registry::getWorkerCategory($worker);
+ if ($category === false) return false;
+
+ $flag = true;
+
+ for (; $current->diff($lastday)->invert === 0; $current->add($oneDay)) {
+ $currentTimestamp = $current->getTimestamp();
+ $currentDay = (int)$current->format("N") - 1;
+
+ if (!in_array($currentDay, $days)) continue;
+
+ $calendarDays = registry::getDayTypes($currentTimestamp);
+ if ($calendarDays === false) return false;
+
+ if (isset($calendarDays[$category])) {
+ $typeDay = $calendarDays[$category];
+ } else if (isset($calendarDays[-1])) {
+ $typeDay = $calendarDays[-1];
+ } else {
+ $flag = false;
+ continue;
+ }
+
+ if (!in_array($typeDay, $typeDays)) continue;
+
+ if ($status = incidents::add($worker, $type, $details, $currentTimestamp, $begins, $ends, $creator, 1, true, false, false) !== 0) {
+ $flag = false;
+ continue;
+ }
+ }
+
+ return $flag;
+ }
+}