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/views/admin/page-stats.php
<?php
/**
 * Render the Statistics page under Advanced Ads > Statistics
 *
 * @package AdvancedAds
 * @author  Advanced Ads <info@wpadvancedads.com>
 *
 * @var string[] $periods       List of available periods in slug => translated string format.
 * @var string   $period        The chosen period slug for the current stats view.
 * @var string   $from          Start date for user defined period.
 * @var string   $to            End date for user defined period.
 * @var array    $groupbys      Group by argument for stats in slug => translated string format.
 * @var string   $groupby       Slug of the chosen group by for the current view.
 */

use AdvancedAds\Tracking\Database;
use AdvancedAds\Tracking\Db_Operations;
use AdvancedAds\Tracking\Helpers;

$all_ads          = Database::get_all_ads( 'dropdown' );
$autocomplete_src = [];

foreach ( $all_ads as $ad_id => $ad_title ) {
	$autocomplete_src[] = [
		'label' => $ad_title,
		'value' => $ad_id,
	];
}

$all_ads['length'] = count( $all_ads );

/**
 *  Ad groups
 */
$terms               = wp_advads_get_all_groups();
$groups_to_ads       = [];
$ads_to_groups       = [];
$groups_autocomplete = [];

foreach ( $terms as $ad_group ) {
	$ads_data = [];

	foreach ( wp_advads_get_ads_by_group_id( $ad_group->get_id() ) as $ad ) {
		$ads_data[ $ad->get_id() ] = [
			'ID'    => $ad->get_id(),
			'title' => $ad->get_title(),
		];
		if ( ! isset( $ads_to_groups[ $ad->get_id() ] ) ) {
			$ads_to_groups[ $ad->get_id() ] = [];
		}
		$ads_to_groups[ $ad->get_id() ][] = $ad_group->get_id();
	}

	$group_name = $ad_group->get_name();

	$groups_to_ads[ $ad_group->get_id() ] = [
		'ID'   => $ad_group->get_id(),
		'slug' => $ad_group->get_prop( 'slug' ),
		'name' => $group_name,
		'ads'  => $ads_data,
	];

	$groups_autocomplete[] = [
		'label' => $group_name,
		'value' => $ad_group->get_id(),
	];
}

$group_count             = count( $groups_to_ads );
$groups_to_ads['length'] = $group_count;

$formated_number = number_format_i18n( 12345.678, 3 );

?>
<script type="text/javascript">
	var groupsToAds      = <?php echo wp_json_encode( $groups_to_ads ); ?>;
	var adsToGroups      = <?php echo wp_json_encode( $ads_to_groups ); ?>;
	var groupAutoCompSrc = <?php echo wp_json_encode( $groups_autocomplete ); ?>;
	var numbersFormated  = "<?php echo esc_js( str_replace( '"', '\"', $formated_number ) ); ?>";
</script>
<div class="wrap">
	<?php // There needs to be an empty H2 headline at the top of the page so that WordPress can properly position admin notifications. ?>
	<h2 style="display: none;"></h2>
	<?php if ( Helpers::is_tracking_method( 'ga' ) ) : ?>
		<div class="notice advads-notice">
			<p>
				<?php
				printf(
					/* translators: %1$s is the opening link tag, %2$s is the closing link tag. */
					esc_html__( 'You are currently tracking ads with Google Analytics. The statistics can be viewed only within your %1$sAnalytics account%2$s.', 'advanced-ads-tracking' ),
					'<a href="https://analytics.google.com/analytics/web/" class="advads-external-link" target="_blank">',
					'</a>'
				);
				?>
			</p>
		</div>
	<?php endif; ?>
	<div class="postbox advads-box">
		<h2 class="hndle"><?php esc_html_e( 'Filter', 'advanced-ads-tracking' ); ?>
			<?php if ( current_user_can( 'manage_options' ) ) : ?>
				<div class="advads-metabox-links"><a href="<?php echo esc_url( Helpers::get_database_tool_link() ); ?>"><?php esc_html_e( 'Database management', 'advanced-ads-tracking' ); ?></a></div>
			<?php endif; ?>
		</h2>
		<div class="inside">
			<form action="" method="post" id="stats-form">
				<input type="hidden" id="all-ads" value="<?php echo esc_attr( implode( '-', Database::get_all_ads( 'ids' ) ) ); ?>"/>
				<table id="period-table">
					<thead style="text-align:left;">
					<th><strong><?php esc_html_e( 'Period', 'advanced-ads-tracking' ); ?></strong></th>
					<th><strong><?php esc_html_e( 'Group by:', 'advanced-ads-tracking' ); ?></strong></th>
					<th>
						<?php
						if ( current_user_can( 'manage_options' ) ) :
							?>
							<strong><?php esc_html_e( 'Data source:', 'advanced-ads-tracking' ); ?></strong><?php endif; ?></th>
					<?php if ( current_user_can( 'manage_options' ) ) : ?>
						<th style="padding-left:6em;"></th>
					<?php endif; ?>
					</thead>
					<tbody>
					<tr>
						<td>
							<fieldset class="load-from-db-fields">
								<label>
									<select name="advads-stats[period]" class="advads-stats-period">
										<?php foreach ( $periods as $period_key => $period_title ) : ?>
											<option value="<?php echo esc_attr( $period_key ); ?>" <?php selected( $period_key, $period ); ?>><?php echo esc_html( $period_title ); ?></option>
										<?php endforeach; ?>
									</select>
								</label>
								<input type="text" name="advads-stats[from]" class="advads-stats-from<?php echo 'custom' !== $period ? ' hidden' : ''; ?>" value="<?php echo esc_attr( $from ); ?>" autocomplete="off" size="10" maxlength="10" placeholder="<?php esc_html_e( 'from', 'advanced-ads-tracking' ); ?>"/>
								<input type="text" name="advads-stats[to]" class="advads-stats-to<?php echo 'custom' !== $period ? ' hidden' : ''; ?>" value="<?php echo esc_attr( $to ); ?>" autocomplete="off" size="10" maxlength="10" placeholder="<?php esc_html_e( 'to', 'advanced-ads-tracking' ); ?>"/>
								<button class="button button-primary" id="load-simple"><?php esc_html_e( 'load stats', 'advanced-ads-tracking' ); ?></button>
							</fieldset>
							<fieldset class="load-from-file-fields" style="display:none;">
								<?php
								if ( current_user_can( 'manage_options' ) ) :
									$load_from_file_period_args = [
										'period-options' => [
											'latestmonth' => esc_html__( 'latest month', 'advanced-ads-tracking' ),
											'firstmonth'  => esc_html__( 'first month', 'advanced-ads-tracking' ),
										],
										'period'         => [ 'stats-file-period', '' ],
										'from'           => [ 'stats-file-from', '' ],
										'to'             => [ 'stats-file-to', '' ],
									];
									Db_Operations::period_select_inputs( $load_from_file_period_args );
									?>
									<button class="button button-primary" disabled id="load-stats-from-file"><?php esc_html_e( 'load stats', 'advanced-ads-tracking' ); ?></button>
								<?php endif; ?>
							</fieldset>
						</td>
						<td>
							<label>
								<select name="advads-stats[groupby]">
									<?php foreach ( $groupbys as $_groupby_key => $_groupby ) : ?>
										<option value="<?php echo esc_attr( $_groupby_key ); ?>" <?php selected( $_groupby_key, $groupby ); ?>><?php echo esc_html( $_groupby[1] ); ?></option>
									<?php endforeach; ?>
								</select>
								<span class="ajax-spinner-placeholder" id="statsA-spinner"></span>
							</label>
						</td>
						<td>
							<select id="data-source" <?php echo ! current_user_can( 'manage_options' ) ? 'style="display:none;"' : ''; ?>>
								<option value="db"><?php esc_html_e( 'Database', 'advanced-ads-tracking' ); ?></option>
								<?php if ( current_user_can( 'manage_options' ) ) : ?>
									<option value="file"><?php esc_html_e( 'File', 'advanced-ads-tracking' ); ?></option>
								<?php endif; ?>
							</select>
							<?php if ( current_user_can( 'manage_options' ) ) : ?>
								<span class="load-from-file-fields" style="display:none;">
						<button class="button button-secondary" id="select-file"><?php esc_html_e( 'select file', 'advanced-ads-tracking' ); ?></button>
						<span class="ajax-spinner-placeholder" id="file-spinner"></span>
						<span class="description" id="stats-file-description"><?php esc_html_e( 'no file selected', 'advanced-ads-tracking' ); ?></span>
						<input type="hidden" id="stats-attachment-id" value=""/>
						<input type="hidden" id="stats-attachment-firstdate" value=""/>
						<input type="hidden" id="stats-attachment-lastdate" value=""/>
						<input type="hidden" id="stats-attachment-adIDs" value=""/>
					</span>
							<?php endif; ?>
						</td>
					</tr>
					<tr>
						<td colspan="3" id="period-td"></td>
					</tr>
					<tr id="compare-tr" <?php echo ( isset( $_REQUEST['advads-stats']['period2'] ) ) ? '' : 'style="display:none;"'; ?>><?php // phpcs:ignore WordPress.Security.NonceVerification.Recommended ?>
						<td colspan="3" style="padding-top:1.5em;">
							<strong><?php esc_html_e( 'Compare with', 'advanced-ads-tracking' ); ?></strong>
							<fieldset>
								<button class="button button-secondary donotreversedisable" id="compare-prev-btn"><?php esc_html_e( 'previous period', 'advanced-ads-tracking' ); ?></button>
								&nbsp;&nbsp;
								<button class="button button-secondary donotreversedisable" id="compare-next-btn"><?php esc_html_e( 'next period', 'advanced-ads-tracking' ); ?></button>
								<input id="compare-offset" value="0" type="hidden"/>
								<input id="compare-from-prev" value="" type="hidden"/>
								<input id="compare-to-prev" value="" type="hidden"/>
								<input id="compare-from-next" value="" type="hidden"/>
								<input id="compare-to-next" value="" type="hidden"/>
							</fieldset>
						</td>
						<?php if ( current_user_can( 'manage_options' ) ) : ?>
							<td></td>
						<?php endif; ?>
					</tr>
					</tbody>
				</table>
				<hr/>
				<div id="ad-filter-wrap" style="float: left;">
					<label><strong><?php esc_html_e( 'Filter by ad', 'advanced-ads-tracking' ); ?></strong></label><br/>
					<input id="ad-filter" class="donotreversedisable" type="text" value="" <?php echo count( $all_ads ) < 2 ? 'disabled' : ''; ?>/>
					<script type="text/javascript">
						var adTitles    = <?php echo wp_json_encode( $all_ads ); ?>;
						var adTitlesDB  = <?php echo wp_json_encode( $all_ads ); ?>;
						var autoCompSrc = <?php echo wp_json_encode( $autocomplete_src ); ?>;
					</script>
				</div>
				<div id="group-filter-wrap">
					<?php if ( $groups_to_ads['length'] > 0 ) : ?>
						<label><strong><?php esc_html_e( 'Filter by group', 'advanced-ads-tracking' ); ?></strong></label><br/>
						<input id="group-filter" class="donotreversedisable" type="text" value=""/>
					<?php endif; ?>
				</div>
				<div id="display-filter-list">
					<strong style="display: block;"><span id="filter-head"><?php esc_html_e( 'Current filters', 'advanced-ads-tracking' ); ?></span></strong>
				</div>
			</form>
			<div class="clearfix" style="overflow: hidden;"></div>
		</div>
	</div>
	<div class="postbox advads-box">
		<div class="inside">
			<div id="advads-stats-graph"></div>
			<div id="advads-graph-legend" style="display:none;">
				<div class="legend-item donotremove">
					<div id="solid-line-legend">
					</div>
					<span><?php esc_html_e( 'impressions', 'advanced-ads-tracking' ); ?></span>
				</div>
				<div class="legend-item donotremove">
					<div id="dashed-line-legend">
					</div>
					<span><?php esc_html_e( 'clicks', 'advanced-ads-tracking' ); ?></span>
				</div>
			</div>
		</div>
	</div>
	<script type="text/javascript">
		var advadsStatPageNonce = '<?php echo esc_attr( wp_create_nonce( 'advads-stats-page' ) ); ?>';
	</script>
	<div id="table-area">
		<div class="postbox advads-box">
			<h2><?php esc_html_e( 'Statistics by date', 'advanced-ads-tracking' ); ?></h2>
			<div class="inside">
				<div id="dateTable"></div>
			</div>
		</div>
		<div class="postbox advads-box">
			<h2><?php esc_html_e( 'Statistics by ad', 'advanced-ads-tracking' ); ?></h2>
			<div class="inside">
				<div id="adTable"></div>
			</div>
		</div>
		<br class="clear"/>
	</div>
	<br class="clear"/>
</div>