HEX
Server: Apache/2.4.65 (Debian)
System: Linux 88f31f35b0b8 6.1.0-38-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.147-1 (2025-08-02) x86_64
User: www-data (33)
PHP: 8.2.29
Disabled: NONE
Upload Files
File: /var/www/html/wp-content/plugins/advanced-ads-tracking/includes/class-public-ad.php
<?php
/**
 * Public Ad.
 *
 * @package AdvancedAds\Tracking
 * @author  Advanced Ads <info@wpadvancedads.com>
 * @since   2.6.0
 */

namespace AdvancedAds\Tracking;

use AdvancedAds\Abstracts\Ad;

defined( 'ABSPATH' ) || exit;

/**
 * Public Ad.
 */
class Public_Ad {

	/**
	 * Ad object.
	 *
	 * @var Ad
	 */
	private $ad = null;

	/**
	 * Constructor.
	 *
	 * @param Ad|WP_Post|int|bool $ad_id Ad instance, post instance, numeric or false to use global $post.
	 */
	public function __construct( $ad_id ) {
		$this->ad = wp_advads_get_ad( $ad_id );
	}

	/**
	 * Check if the current ad has tracking enabled.
	 *
	 * @return bool True if tracking is enabled.
	 */
	public function has_tracking(): bool {
		$tracking = $this->ad->get_prop( 'tracking.enabled' );

		return ! empty( $tracking );
	}

	/**
	 * Get the public ad name as set by the user.
	 *
	 * @param bool $fallback Whether to return the ad title.
	 *
	 * @return string
	 */
	public function get_name( $fallback = false ): string {
		$name = $this->ad->get_prop( 'tracking.public-name' );
		if ( $fallback && empty( $name ) ) {
			$name = $this->ad->get_title();
		}

		return $name ?? '';
	}

	/**
	 * Gets public ID from ad_id
	 *
	 * @return string The public ID.
	 */
	public function get_id(): string {
		$public_id = $this->ad->get_prop( 'tracking.public-id' );
		if ( ! empty( $public_id ) ) {
			return $public_id;
		}

		return $this->set_id();
	}

	/**
	 * Get the URL for the public ad statistics.
	 *
	 * @return string The URL for the public ad statistics.
	 */
	public function get_url(): string {
		$public_stats_slug = Helpers::get_public_stats_slug();
		$public_id         = $this->get_id();

		$url = sprintf( '/%1$s/%2$s/', $public_stats_slug, $public_id );

		return site_url( $url );
	}

	/**
	 * Sets public ID from ad ID
	 *
	 * @return string
	 */
	private function set_id(): string {
		$public_id = wp_generate_password( 48, false );
		$this->ad->set_prop( 'tracking.public-id', $public_id );
		$this->ad->save();

		return $public_id;
	}
}