Files
roi-theme/wp-content/plugins/restrict-content-pro/core/includes/cron-functions.php
root a22573bf0b Commit inicial - WordPress Análisis de Precios Unitarios
- WordPress core y plugins
- Tema Twenty Twenty-Four configurado
- Plugin allow-unfiltered-html.php simplificado
- .gitignore configurado para excluir wp-config.php y uploads

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-03 21:04:30 -06:00

239 lines
5.9 KiB
PHP

<?php
/**
* Cron Functions
*
* Schedules events.
*
* @package Restrict Content Pro
* @subpackage Cron Functions
* @copyright Copyright (c) 2017, Restrict Content Pro
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
*/
/**
* Set up the following cron job events:
*
* Daily: Expired users check
* @see rcp_check_for_expired_users()
*
* Daily: Send expiring soon notices
* @see rcp_check_for_soon_to_expire_users()
*
* Daily: Check and update member counts
* @see rcp_check_member_counts()
*
* @return void
*/
function rcp_setup_cron_jobs() {
if ( ! wp_next_scheduled( 'rcp_expired_users_check' ) ) {
wp_schedule_event( current_time( 'timestamp' ), 'daily', 'rcp_expired_users_check' );
}
if ( ! wp_next_scheduled( 'rcp_send_expiring_soon_notice' ) ) {
wp_schedule_event( current_time( 'timestamp' ), 'daily', 'rcp_send_expiring_soon_notice' );
}
if ( ! wp_next_scheduled( 'rcp_check_member_counts' ) ) {
wp_schedule_event( current_time( 'timestamp' ), 'daily', 'rcp_check_member_counts' );
}
if ( ! wp_next_scheduled( 'rcp_mark_abandoned_payments' ) ) {
wp_schedule_event( current_time( 'timestamp' ), 'daily', 'rcp_mark_abandoned_payments' );
}
}
add_action('wp', 'rcp_setup_cron_jobs');
/**
* Check for expired users
*
* Runs each day and checks for expired users. If their account has expired, their status
* is updated to "expired" and, based on settings, they may receive an email.
*
* @see rcp_email_on_expiration()
*
* @return void
*/
function rcp_check_for_expired_users() {
rcp_log( 'Starting rcp_check_for_expired_users() cron job.', true );
$args = array(
'expiration_date_query' => array(
'after' => date( 'Y-m-d H:i:s', strtotime( '-1 month' ) ),
'before' => current_time( 'mysql' )
),
'status' => array( 'active', 'cancelled' ),
'number' => 99999
);
/**
* Filters the query arguments.
*
* @param array $args
*
* @since 3.1.1
*/
$args = apply_filters( 'rcp_check_for_expired_memberships_query_args', $args );
$expired_memberships = rcp_get_memberships( $args );
/**
* Filters the array of memberships found via the query.
*
* @param array $expired_memberships Array of RCP_Membership objects.
*/
$expired_memberships = apply_filters( 'rcp_check_for_expired_users_members_filter', $expired_memberships );
if( $expired_memberships ) {
foreach( $expired_memberships as $key => $membership ) {
/**
* @var RCP_Membership $membership
*/
$expiration_date = $membership->get_expiration_time();
if( $expiration_date && current_time( 'timestamp' ) > $expiration_date ) {
rcp_log( sprintf( 'Expiring membership #%d via cron job.', $membership->get_id() ) );
$membership->set_status( 'expired' );
}
}
} else {
rcp_log( 'No expired memberships found.' );
}
}
//add_action( 'admin_init', 'rcp_check_for_expired_users' );
add_action( 'rcp_expired_users_check', 'rcp_check_for_expired_users' );
/**
* Check for soon-to-expire users
*
* Runs each day and checks for members that are soon to expire. Based on settings, each
* member gets sent an expiry notice email.
*
* @uses RCP_Reminders
*
* @return void
*/
function rcp_check_for_soon_to_expire_users() {
rcp_log( 'Starting rcp_check_for_soon_to_expire_users() cron job.', true );
$reminders = new RCP_Reminders();
$reminders->send_reminders();
}
add_action( 'rcp_send_expiring_soon_notice', 'rcp_check_for_soon_to_expire_users' );
/**
* Counts the active members on a membership level to ensure counts are accurate.
*
* Runs once per day
*
* @since 2.6
*
* @return void
*/
function rcp_check_member_counts() {
rcp_log( 'Starting rcp_check_member_counts() cron job.', true );
$entries_today = rcp_get_membership_count_entries( array(
'number' => 1,
'date_created_query' => array(
'year' => date( 'Y' ),
'month' => date( 'm' ),
'day' => date( 'd' )
)
) );
// Bail if we've already added entries today.
if ( ! empty( $entries_today ) ) {
rcp_log( 'Exiting rcp_check_member_counts() - counts have already been added today.', true );
return;
}
$levels = rcp_get_membership_levels( array( 'number' => 999 ) );
if( ! $levels ) {
return;
}
$statuses = array( 'active', 'pending', 'cancelled', 'expired', 'free' );
foreach( $levels as $level ) {
$counts = array(
'active' => 0,
'pending' => 0,
'cancelled' => 0,
'expired' => 0
);
foreach( $statuses as $status ) {
$key = $level->get_id() . '_' . $status . '_member_count';
// Change "free" to "active".
if ( 'free' == $status ) {
$status = 'active';
}
$count = rcp_count_memberships( array(
'status' => $status,
'object_id' => $level->get_id()
) );
rcp_update_membership_level_meta( $level->get_id(), $key, $count );
$counts[ $status ] = $count;
}
rcp_add_membership_count_entry( array(
'level_id' => $level->get_id(),
'active_count' => $counts['active'],
'pending_count' => $counts['pending'],
'cancelled_count' => $counts['cancelled'],
'expired_count' => $counts['expired']
) );
}
}
add_action( 'rcp_check_member_counts', 'rcp_check_member_counts' );
/**
* Find pending payments that are more than a week old and mark them as abandoned.
*
* @since 2.9
* @return void
*/
function rcp_mark_abandoned_payments() {
rcp_log( 'Starting rcp_mark_abandoned_payments() cron job.', true );
/**
* @var RCP_Payments $rcp_payments_db
*/
global $rcp_payments_db;
$args = array(
'fields' => 'id',
'number' => 9999,
'status' => 'pending',
'date' => array(
'end' => date( 'Y-m-d', strtotime( '-7 days', current_time( 'timestamp' ) ) )
)
);
$payments = $rcp_payments_db->get_payments( $args );
if ( $payments ) {
foreach ( $payments as $payment ) {
$rcp_payments_db->update( $payment->id, array( 'status' => 'abandoned' ) );
}
}
}
add_action( 'rcp_mark_abandoned_payments', 'rcp_mark_abandoned_payments' );