WC_Download_Handler::track_download()private staticWC 1.0

Takes care of tracking download requests, with support for deferring tracking in the case of partial (ranged request) downloads.

Method of the class: WC_Download_Handler{}

Return

null. Nothing (null).

Usage

$result = WC_Download_Handler::track_download( $download, $user_id, $user_ip_address, $defer ): void;
$download(WC_Customer_Download|int) (required)
The download to be tracked.
$user_id(int|null)
The user ID, if known.
Default: null
$user_ip_address(string|null)
The download IP address, if known.
Default: null
$defer(true|false)
If tracking the download should be deferred.
Default: false

WC_Download_Handler::track_download() code WC 9.4.2

private static function track_download( $download, $user_id = null, $user_ip_address = null, bool $defer = false ): void {
	try {
		// If we were supplied with an integer, convert it to a download object.
		$download = new WC_Customer_Download( $download );

		// In simple cases, we can track the download immediately.
		if ( ! $defer ) {
			$download->track_download( $user_id, $user_ip_address );
			return;
		}

		// Counting of partial downloads may be disabled by the site operator.
		if ( get_option( 'woocommerce_downloads_count_partial', 'yes' ) !== 'yes' ) {
			return;
		}

		/**
		 * Determines how long the window of time is for tracking unique download attempts, in relation to
		 * partial (ranged) download requests.
		 *
		 * @since 9.2.0
		 *
		 * @param int $window_in_seconds      Non-negative number of seconds. Defaults to 1800 (30 minutes).
		 * @param int $download_permission_id References the download permission being tracked.
		 */
		$window = absint( apply_filters( 'woocommerce_partial_download_tracking_window', 30 * MINUTE_IN_SECONDS, $download->get_id() ) );

		// If we do not have Action Scheduler 3.6.0+ (this would be an unexpected scenario) then we cannot
		// track partial downloads, because we require support for unique actions.
		if ( version_compare( ActionScheduler_Versions::instance()->latest_version(), '3.6.0', '<' ) ) {
			throw new Exception( 'Support for unique scheduled actions is not currently available.' );
		}

		as_schedule_single_action(
			time() + $window,
			self::TRACK_DOWNLOAD_CALLBACK,
			array(
				$download->get_id(),
				$user_id,
				$user_ip_address,
			),
			'woocommerce',
			true
		);
	} catch ( Exception $e ) {
		wc_get_logger()->error(
			'There was a problem while tracking a product download.',
			array(
				'error'    => $e->getMessage(),
				'id'       => $download->get_id(),
				'user_id'  => $user_id,
				'ip'       => $user_ip_address,
				'deferred' => $defer ? 'yes' : 'no',
			)
		);
	}
}