HEX
Server: Apache
System: Linux digivps 5.15.0-163-generic #173-Ubuntu SMP Tue Oct 14 17:51:00 UTC 2025 x86_64
User: www (1000)
PHP: 8.3.15
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/wwwroot/healthyton.com/wp-content/plugins/advanced-ads/classes/ad-expiration.php
<?php

/**
 * Ad Expiration functionality.
 */
class Advanced_Ads_Ad_Expiration {
	const POST_STATUS = 'advanced_ads_expired';
	const POST_META   = 'advanced_ads_expiration_time';

	/**
	 * The current ad object.
	 *
	 * @var Advanced_Ads_Ad
	 */
	private $ad;

	/**
	 * Inject ad object, hook to option saving.
	 *
	 * @param Advanced_Ads_Ad $ad the current ad object.
	 */
	public function __construct( Advanced_Ads_Ad $ad ) {
		$this->ad = $ad;

		add_filter( 'advanced-ads-save-options', [ $this, 'save_expiration_date' ], 10, 2 );
	}

	/**
	 * Check whether this ad is expired.
	 *
	 * @return bool
	 */
	public function is_ad_expired() {
		if ( $this->ad->expiry_date <= 0 || $this->ad->expiry_date > time() ) {
			return false;
		}

		// if the ad is not trashed, but has a different status than expired, transition the status.
		if ( ! in_array( $this->ad->status, [ self::POST_STATUS, 'trash' ], true ) ) {
			$this->transition_post_status();
		}

		return true;
	}

	/**
	 * Extract the expiration date from the options array and save it as post_meta directly.
	 *
	 * @param array           $options array with all ad options.
	 * @param Advanced_Ads_Ad $ad      the current ad object.
	 *
	 * @return array
	 */
	public function save_expiration_date( $options, Advanced_Ads_Ad $ad ) {
		if ( empty( $options['expiry_date'] ) ) {
			delete_post_meta( $ad->id, self::POST_META );
			return $options;
		}
		$datetime = ( new DateTimeImmutable() )->setTimestamp( (int) $options['expiry_date'] );
		update_post_meta( $ad->id, self::POST_META, $datetime->format( 'Y-m-d H:i:s' ) );

		return $options;
	}

	/**
	 * Transition the post form previous status to self::POST_STATUS.
	 * Remove kses filters before updating the post so that expiring ads don’t lose HTML or other code.
	 */
	private function transition_post_status() {
		kses_remove_filters();
		wp_update_post(
			[
				'ID'          => $this->ad->id,
				'post_status' => self::POST_STATUS,
			]
		);
		kses_init_filters();
	}

	/**
	 * Register custom post status for expired ads.
	 */
	public static function register_post_status() {
		register_post_status( self::POST_STATUS, [
			'label'   => __( 'Expired', 'advanced-ads' ),
			'private' => true,
		] );
	}

	/**
	 * Hook into wp_untrash_post_status, to revert ads that previously had the expired status to that status instead of draft.
	 *
	 * @param string $new_status      The new status after untrashing a post.
	 * @param int    $post_id         The post id of the post to be untrashed.
	 * @param string $previous_status The post status before trashing.
	 *
	 * @return string
	 */
	public static function wp_untrash_post_status( $new_status, $post_id, $previous_status ) {
		if ( $previous_status === self::POST_STATUS ) {
			return $previous_status;
		}

		return $new_status;
	}
}