<?php
/**
* Scheduled renewal reminder emails (January).
*
* @package TonItaliaRegistration
*/
defined( 'ABSPATH' ) || exit;
/**
* Class TON_Reg_Renewal_Reminders
*/
class TON_Reg_Renewal_Reminders {
const CRON_HOOK = 'ton_reg_renewal_reminders';
const OPTION_START_YEAR = 'ton_reg_renewal_reminders_start_year';
/**
* First calendar year for which automatic January reminders may be sent.
*
* @return int
*/
public static function get_start_year() {
$year = (int) get_option( self::OPTION_START_YEAR, 2027 );
return max( 2000, min( 2100, $year ) );
}
/**
* @param int $year Target quota year.
* @return bool
*/
public static function reminders_allowed_for_year( $year ) {
return (int) $year >= self::get_start_year();
}
/**
* Register daily cron if not already scheduled.
*/
public static function schedule_cron() {
if ( ! wp_next_scheduled( self::CRON_HOOK ) ) {
wp_schedule_event( time() + HOUR_IN_SECONDS, 'daily', self::CRON_HOOK );
}
}
/**
* Clear scheduled cron.
*/
public static function unschedule_cron() {
$timestamp = wp_next_scheduled( self::CRON_HOOK );
while ( $timestamp ) {
wp_unschedule_event( $timestamp, self::CRON_HOOK );
$timestamp = wp_next_scheduled( self::CRON_HOOK );
}
}
/**
* Daily cron entry point.
*/
public static function run_daily() {
$current_year = TON_Reg_Membership_Renewals::current_year();
if ( $current_year < self::get_start_year() ) {
return;
}
$month_day = wp_date( 'm-d' );
if ( '01-01' === $month_day ) {
self::process_reminders( 'first', $current_year );
return;
}
if ( '01-25' === $month_day ) {
self::process_reminders( 'last', $current_year );
}
}
/**
* @param string $reminder_type first|last.
* @param int $year Target calendar year.
*/
public static function process_reminders( $reminder_type, $year ) {
$year = (int) $year;
if ( $year < 2000 || $year > 2100 || ! self::reminders_allowed_for_year( $year ) ) {
return;
}
$members = TON_Reg_Membership_Renewals::get_unpaid_admitted( $year, $reminder_type );
if ( empty( $members ) ) {
return;
}
foreach ( $members as $member ) {
TON_Reg_Mailer::send_renewal_reminder_to_member( $member, $year, $reminder_type );
TON_Reg_Membership_Renewals::mark_reminder_sent( (int) $member->id, $year, $reminder_type );
}
TON_Reg_Mailer::send_renewal_admin_digest( $members, $year, $reminder_type );
}
}