Initial commit - Last War messaging system
This commit is contained in:
98
includes/schedule_helpers.php
Executable file
98
includes/schedule_helpers.php
Executable file
@@ -0,0 +1,98 @@
|
||||
<?php
|
||||
|
||||
function calculateNextSendTime(string $recurringDays, string $recurringTime): ?string
|
||||
{
|
||||
$daysMap = [
|
||||
'sunday' => 0,
|
||||
'monday' => 1,
|
||||
'tuesday' => 2,
|
||||
'wednesday' => 3,
|
||||
'thursday' => 4,
|
||||
'friday' => 5,
|
||||
'saturday' => 6
|
||||
];
|
||||
|
||||
$days = array_map('trim', explode(',', strtolower($recurringDays)));
|
||||
$days = array_filter($days, fn($d) => isset($daysMap[$d]));
|
||||
$days = array_map(fn($d) => $daysMap[$d], $days);
|
||||
|
||||
if (empty($days)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$timeParts = explode(':', $recurringTime);
|
||||
$hour = (int) ($timeParts[0] ?? 0);
|
||||
$minute = (int) ($timeParts[1] ?? 0);
|
||||
|
||||
$now = new DateTime('now', new DateTimeZone('America/Mexico_City'));
|
||||
$currentDay = (int) $now->format('w');
|
||||
$currentHour = (int) $now->format('H');
|
||||
$currentMinute = (int) $now->format('i');
|
||||
|
||||
sort($days);
|
||||
|
||||
foreach ($days as $day) {
|
||||
if ($day > $currentDay || ($day === $currentDay && ($hour > $currentHour || ($hour === $currentHour && $minute > $currentMinute)))) {
|
||||
$next = clone $now;
|
||||
$next->setTime($hour, $minute);
|
||||
$next->modify('+' . ($day - $currentDay) . ' days');
|
||||
return $next->format('Y-m-d H:i:s');
|
||||
}
|
||||
}
|
||||
|
||||
$daysAhead = (7 - $currentDay) + $days[0];
|
||||
$next = clone $now;
|
||||
$next->setTime($hour, $minute);
|
||||
$next->modify('+' . $daysAhead . ' days');
|
||||
|
||||
return $next->format('Y-m-d H:i:s');
|
||||
}
|
||||
|
||||
function getRecurringDaysOptions(): array
|
||||
{
|
||||
return [
|
||||
['value' => 'monday', 'label' => 'Lunes'],
|
||||
['value' => 'tuesday', 'label' => 'Martes'],
|
||||
['value' => 'wednesday', 'label' => 'Miércoles'],
|
||||
['value' => 'thursday', 'label' => 'Jueves'],
|
||||
['value' => 'friday', 'label' => 'Viernes'],
|
||||
['value' => 'saturday', 'label' => 'Sábado'],
|
||||
['value' => 'sunday', 'label' => 'Domingo']
|
||||
];
|
||||
}
|
||||
|
||||
function formatRecurringDays(string $days): string
|
||||
{
|
||||
$daysMap = [
|
||||
'monday' => 'Lun',
|
||||
'tuesday' => 'Mar',
|
||||
'wednesday' => 'Mié',
|
||||
'thursday' => 'Jue',
|
||||
'friday' => 'Vie',
|
||||
'saturday' => 'Sáb',
|
||||
'sunday' => 'Dom'
|
||||
];
|
||||
|
||||
$daysArray = array_map('trim', explode(',', strtolower($days)));
|
||||
|
||||
$result = [];
|
||||
foreach ($daysArray as $day) {
|
||||
$result[] = $daysMap[$day] ?? $day;
|
||||
}
|
||||
|
||||
return implode(', ', $result);
|
||||
}
|
||||
|
||||
function isValidRecurringDays(string $days): bool
|
||||
{
|
||||
$validDays = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'];
|
||||
$daysArray = array_map('trim', explode(',', strtolower($days)));
|
||||
|
||||
foreach ($daysArray as $day) {
|
||||
if (!in_array($day, $validDays)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return !empty($daysArray);
|
||||
}
|
||||
Reference in New Issue
Block a user