/home3/bmscom/webinar.bmice.com/wp-content/plugins/webinar-ignition/inc/autowebinar_get_dates.php
<?php
defined('ABSPATH') || exit;
use Carbon\Carbon;
function webinarignition_get_full_weekday($short)
{
$long_array = [
'mon' => 'monday',
'tue' => 'tuesday',
'wed' => 'wednesday',
'thu' => 'thursday',
'fri' => 'friday',
'sat' => 'saturday',
'sun' => 'sunday',
];
return $long_array[$short];
}
function webinarignition_get_full_weekday_num($num)
{
$long_array = [
'1' => 'monday',
'2' => 'tuesday',
'3' => 'wednesday',
'4' => 'thursday',
'5' => 'friday',
'6' => 'saturday',
'7' => 'sunday',
];
return $long_array[$num];
}
function webinarignition_get_wp_locale_date_strings($dates, $date_format)
{
if (!is_array($dates)) {
return $dates;
}
foreach ($dates as $date => $label) {
if ($date == 'instant_access') {
continue;
}
$dateFromFormat = DateTime::createFromFormat('Y-m-d', $date);
$dates[$date] = date_i18n($date_format, $dateFromFormat->getTimestamp());
}
return $dates;
}
add_action('wp_ajax_nopriv_webinarignition_auto_lp_get_dates', 'webinarignition_auto_lp_get_dates_callback');
add_action('wp_ajax_webinarignition_auto_lp_get_dates', 'webinarignition_auto_lp_get_dates_callback');
add_action('wp_ajax_dismiss_old_webinars_notification', 'webinarignition_dismiss_old_webinars_notification_callback');
function webinarignition_dismiss_old_webinars_notification_callback()
{
/**
* update the value of wi_has_old_webinars
* so user will not see the notification again.
*/
update_option('wi_has_old_webinars', 'msg_dismissed');
wp_send_json(['code' => 'success']);
die();
}
function webinarignition_auto_lp_get_dates_callback()
{
check_ajax_referer('webinarignition_ajax_nonce', 'security');
// Prototype For Evergreen Webinar
// Get Variables
$tz = sanitize_text_field($_POST['tz']);
$ID = sanitize_text_field($_POST['id']);
// Get Results
$webinar_data = WebinarignitionManager::get_webinar_data($ID);
if (!empty($webinar_data->webinar_lang)) {
switch_to_locale($webinar_data->webinar_lang);
unload_textdomain('webinarignition');
load_textdomain('webinarignition', WEBINARIGNITION_PATH . 'languages/webinarignition-' . $webinar_data->webinar_lang . '.mo');
}
$date_format = !empty($webinar_data->date_format) ? $webinar_data->date_format : 'l, F j, Y';
$day_toggle = array(
'monday' => $webinar_data->auto_monday,
'tuesday' => $webinar_data->auto_tuesday,
'wednesday' => $webinar_data->auto_wednesday,
'thursday' => $webinar_data->auto_thursday,
'friday' => $webinar_data->auto_friday,
'saturday' => $webinar_data->auto_saturday,
'sunday' => $webinar_data->auto_sunday
);
$blacklisted_dates = array_map('trim', explode(',', $webinar_data->auto_blacklisted_dates));
$webinar_timezone = webinarignition_get_webinar_timezone($webinar_data, $tz);
$weekday_time_slots = webinarignition_get_time_slots_by_weekdays($webinar_data);
$one_day_interval = DateInterval::createfromdatestring('+1 day');
$datetime_now = new DateTime("now", new DateTimeZone($webinar_timezone));
$weekday_now = strtolower($datetime_now->format('l'));
if (!empty($weekday_time_slots[$weekday_now])) {
$today_time_slots_desc_order = $weekday_time_slots[$weekday_now];
webinar_ignition_sort_datetime_desc($today_time_slots_desc_order); //Sort the times in DESC order
//Create a new datetime object with today's date for comparison with max time slot, and assign webinar timezone
$datetime_compare = new DateTime($datetime_now->format('Y-m-d') . ' ' . $today_time_slots_desc_order[0], new DateTimeZone($webinar_timezone));
//Convert current datetime from webinar timezone to UTC for comparison, and to avoid daylight saving differences
$datetime_now->setTimezone(new DateTimeZone('UTC'));
//Convert compare datetime from webinar timezone to UTC
$datetime_compare->setTimezone(new DateTimeZone('UTC'));
$skip_today = $datetime_now->getTimestamp() > $datetime_compare->getTimestamp();
if ($skip_today) {
$datetime_now->add($one_day_interval); //Skip today
}
//Set current datetime back to webinar timezone for later use
$datetime_now->setTimezone(new DateTimeZone($webinar_timezone));
}
$number_of_days = !empty($webinar_data->auto_day_limit) && is_numeric($webinar_data->auto_day_limit) ? $webinar_data->auto_day_limit : 7;
$number_of_days_delay = !empty($webinar_data->auto_day_offset) && is_numeric($webinar_data->auto_day_offset) ? $webinar_data->auto_day_offset : 0;
if (!empty($number_of_days_delay)) {
$datetime_now->add(DateInterval::createfromdatestring("+$number_of_days_delay day"));
}
$datetimeObjects = [];
$dates = [];
$times = [];
while ($number_of_days > count($datetimeObjects)) {
$_current_date_weekday_full = strtolower($datetime_now->format('l'));
$skip_day = in_array($datetime_now->format('Y-m-d'), $blacklisted_dates) || $day_toggle[$_current_date_weekday_full] !== 'yes';
if ($skip_day) {
$datetime_now->add($one_day_interval);
continue;
}
$datetimeObjects[] = clone $datetime_now;
$datetime_now->add($one_day_interval);
}
// Instant access
if ($webinar_data->auto_today == "yes") {
$instant_text = $webinar_data->auto_translate_instant == "" ? __('Instant Access', 'webinarignition') : $webinar_data->auto_translate_instant;
$dates = ['instant_access' => $instant_text];
}
if (!empty($datetimeObjects)) {
foreach ($datetimeObjects as $datetimeObject) {
$dates[$datetimeObject->format('Y-m-d')] = $datetimeObject->format($date_format);
}
}
foreach ($dates as $mysql_date_string => $date_format_string) {
if ($mysql_date_string === 'instant_access') continue;
$_current_date_weekday_full = strtolower(date('l', strtotime($mysql_date_string)));
if (isset($weekday_time_slots[$_current_date_weekday_full]) && !empty($weekday_time_slots[$_current_date_weekday_full])) {
$times[$mysql_date_string] = $weekday_time_slots[$_current_date_weekday_full];
} else {
unset($dates[$mysql_date_string]);
}
}
$times = array_map('array_unique', $times);
$response_data = ['dates' => webinarignition_get_wp_locale_date_strings($dates, $date_format), 'times_by_date' => $times, 'tz' => $webinar_timezone];
restore_previous_locale();
wp_send_json($response_data);
}
function webinarignition_get_time_slots_by_weekdays($webinar_data)
{
$time_slots = [];
$is_multiple_auto_time_enabled = WebinarignitionPowerups::is_multiple_auto_time_enabled($webinar_data);
if ($is_multiple_auto_time_enabled) {
for ($number = 1; $number <= 3; $number++) {
$weekday_attribute = "auto_weekdays_{$number}";
$time_weekdays = isset($webinar_data->{$weekday_attribute}) && !empty($webinar_data->{$weekday_attribute}) ? $webinar_data->{$weekday_attribute} : [];
$weekday_time_attribute = "auto_time_{$number}";
$time_weekday_times = isset($webinar_data->{$weekday_time_attribute}) && !empty($webinar_data->{$weekday_time_attribute}) ? $webinar_data->{$weekday_time_attribute} : [];
if (!empty($time_weekdays) && !empty($time_weekday_times)) {
foreach ($time_weekdays as $weekday_short) {
$weekday_full = strtolower(date('l', strtotime($weekday_short)));
if ($webinar_data->{"auto_$weekday_full"} !== 'yes') {
continue;
} //Skip time slot if day is not enabled
$time_slots[$weekday_full][] = $time_weekday_times;
}
}
}
$weekday_attribute = "multiple__auto_weekdays";
$weekday_time_attribute = "multiple__auto_time";
$multiple_time_weekdays = isset($webinar_data->{$weekday_attribute}) && !empty($webinar_data->{$weekday_attribute}) ? $webinar_data->{$weekday_attribute} : [];
$multiple_time_weekday_times = isset($webinar_data->{$weekday_time_attribute}) && !empty($webinar_data->{$weekday_time_attribute}) ? $webinar_data->{$weekday_time_attribute} : [];
foreach ($multiple_time_weekdays as $time_weekday_index => $time_weekdays) {
$time_weekday_times = isset($multiple_time_weekday_times[$time_weekday_index]) && !empty($multiple_time_weekday_times[$time_weekday_index]) ? $multiple_time_weekday_times[$time_weekday_index] : [];
if (!empty($time_weekdays) && !empty($time_weekday_times)) {
foreach ($time_weekdays as $weekday_short) {
$weekday_full = strtolower(date('l', strtotime($weekday_short)));
if ($webinar_data->{"auto_$weekday_full"} !== 'yes') {
continue;
} //Skip time slot if day is not enabled
$time_slots[$weekday_full][] = $time_weekday_times;
}
}
}
} else {
//Loop over each weekday
for ($weekday_number = 1; $weekday_number <= 7; $weekday_number++) {
$weekday_full = strtolower(date('l', strtotime("Sunday +{$weekday_number} days")));
if ($webinar_data->{"auto_$weekday_full"} !== 'yes') {
continue;
} //Skip time slot if day is not enabled
for ($number = 1; $number <= 3; $number++) {
$weekday_time_attribute = "auto_time_{$number}";
if ($webinar_data->{$weekday_time_attribute} != 'no') {
$time_slots[$weekday_full][] = $webinar_data->{$weekday_time_attribute};
}
}
}
}
return $time_slots;
}
function webinar_ignition_sort_datetime_desc(array &$datetimes)
{
usort($datetimes, function ($time1, $time2) {
if (strtotime($time1) < strtotime($time2)) {
return 1;
} else if (strtotime($time1) > strtotime($time2)) {
return -1;
} else {
return 0;
}
});
}