HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux wordpress-ubuntu-s-2vcpu-4gb-fra1-01 5.4.0-169-generic #187-Ubuntu SMP Thu Nov 23 14:52:28 UTC 2023 x86_64
User: root (0)
PHP: 7.4.33
Disabled: 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_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/shoetique/wp-content/plugins/googleanalytics/view/templates/ga4-dashboard.php
<?php

use Google\Analytics\Data\V1beta\BetaAnalyticsDataClient;
use Google\Analytics\Data\V1beta\DateRange;
use Google\Analytics\Data\V1beta\Dimension;
use Google\Analytics\Data\V1beta\Metric;
use Google\Analytics\Data\V1beta\OrderBy;

$ga4_demo = get_option('googleanalytics-ga4-demo');
$page_list_count_data = [];
$gender_count_data = [];
$age_count_data = [];
$analytics_service = new BetaAnalyticsDataClient( [
	'credentials' => Google\ApiCore\CredentialsWrapper::build( [
		'scopes'  => [
			'https://www.googleapis.com/auth/analytics.readonly',
		],
		'keyFile' => [
			'type'          => 'authorized_user',
			'client_id'     => $client_obj['client_id'],
			'client_secret' => $client_obj['client_secret'],
			'refresh_token' => $token_response["access_token"]
		],
	] ),
] );

$from = false === empty($date_range['from']) ? $date_range['from'] : '8daysAgo';
$to = false === empty($date_range['to']) ? $date_range['to'] : 'today';

$response = $analytics_service->runReport([
	'property' => $ga4_property,
	'dateRanges' => [
		new DateRange([
			'start_date' => $from,
			'end_date' => $to,
		]),
	],
	'dimensions' => [
		new Dimension(['name' => 'date']),
	],
	'metrics' => [
		new Metric(['name' => 'screenPageViews',]),
	],
	'orderBys' => [
		new OrderBy([
			'dimension' => new OrderBy\DimensionOrderBy([
				'dimension_name' => 'date', // your dimension here
				'order_type' => OrderBy\DimensionOrderBy\OrderType::ALPHANUMERIC
			]),
			'desc' => false,
		]),
	],
]);

$page_list_response = $analytics_service->runReport([
	'property' => $ga4_property,
	'dateRanges' => [
		new DateRange([
			'start_date' => $from,
			'end_date' => $to,
		]),
	],
	'dimensions' => [
		new Dimension(['name' => 'landingPage']),
	],
	'metrics' => [
		new Metric(['name' => 'screenPageViews',]),
	],
]);

foreach ($page_list_response->getRows() as $row) :
	$metrics = $row->getMetricValues();

	foreach ($row->getDimensionValues() as $index => $dimension_value) :
		$page = $dimension_value->getValue();
		$page_list_count_data[$page] = $metrics[$index]->getValue();
	endforeach;
endforeach;

$pageViewCount = array_sum(array_values($page_list_count_data));

$user_response = $analytics_service->runReport([
	'property' => $ga4_property,
	'dateRanges' => [
		new DateRange([
			'start_date' => $from,
			'end_date' => $to,
		]),
	],
	'dimensions' => [
		new Dimension(['name' => 'date',]),
	],
	'metrics' => [
		new Metric(['name' => 'newUsers',]),
	],
	'orderBys' => [
		new OrderBy([
			'dimension' => new OrderBy\DimensionOrderBy([
				'dimension_name' => 'date', // your dimension here
				'order_type' => OrderBy\DimensionOrderBy\OrderType::ALPHANUMERIC
			]),
			'desc' => false,
		]),
	],
]);

$gender_chart_response = $analytics_service->runReport([
	'property' => $ga4_property,
	'dateRanges' => [
		new DateRange([
			'start_date' => $from,
			'end_date' => $to,
		]),
	],
	'dimensions' => [
		new Dimension(['name' => 'userGender',]),
	],
	'metrics' => [
		new Metric(['name' => 'newUsers',]),
	],
]);

$age_chart_response = $analytics_service->runReport([
	'property' => $ga4_property,
	'dateRanges' => [
		new DateRange([
			'start_date' => $from,
			'end_date' => $to,
		]),
	],
	'dimensions' => [
		new Dimension(['name' => 'userAgeBracket',]),
	],
	'metrics' => [
		new Metric(['name' => 'newUsers',]),
	],
]);

foreach ($gender_chart_response->getRows() as $gender_row) :
	$metrics = $gender_row->getMetricValues();

	foreach ($gender_row->getDimensionValues() as $index => $dimension_value) :
		$page = $dimension_value->getValue();

		if ('unknown' !== $page) {
			$gender_count_data[$page] = $metrics[$index]->getValue();
		}
	endforeach;
endforeach;

$gender_count_data = array_reverse($gender_count_data);

foreach ($age_chart_response->getRows() as $gender_row) :
	$metrics = $gender_row->getMetricValues();

	foreach ($gender_row->getDimensionValues() as $index => $dimension_value) :
		$page = $dimension_value->getValue();

		if ('unknown' !== $page) {
			$age_count_data[$page] = $metrics[$index]->getValue();
		}
	endforeach;
endforeach;

$ga4_device_chart_response = $analytics_service->runReport([
	'property' => $ga4_property,
	'dateRanges' => [
		new DateRange([
			'start_date' => $from,
			'end_date' => $to,
		]),
	],
	'dimensions' => [
		new Dimension(['name' => 'deviceCategory',]),
	],
	'metrics' => [
		new Metric(['name' => 'newUsers',]),
	],
]);

foreach ($ga4_device_chart_response->getRows() as $device_row) :
	$metrics = $device_row->getMetricValues();

	foreach ($device_row->getDimensionValues() as $index => $dimension_value) :
		$page = $dimension_value->getValue();
		$ga4_demo_device_data[$page] = $metrics[$index]->getValue();
	endforeach;
endforeach;

$x = 1;
?>
<script type="text/javascript">
	ga_charts.init( function() {
		const pageSessionData = new google.visualization.DataTable();
		const userData = new google.visualization.DataTable();

		pageSessionData.addColumn( 'string', '<?php echo esc_js( __( 'Day', 'googleanalytics' ) ); ?>' );
		pageSessionData.addColumn( 'number', '<?php echo esc_js( __( 'Page Views', 'googleanalytics' ) ); ?>' );
		pageSessionData.addColumn( { type: 'string', role: 'tooltip', 'p': { 'html': true } } );

		userData.addColumn( 'string', '<?php echo esc_js( __( 'Day', 'googleanalytics' ) ); ?>' );
		userData.addColumn( 'number', '<?php echo esc_js( __( 'New Users', 'googleanalytics' ) ); ?>' );
		userData.addColumn( { type: 'string', role: 'tooltip', 'p': { 'html': true } } );

		<?php foreach ($response->getRows() as $row) :
			$metrics = $row->getMetricValues();

			foreach ($row->getDimensionValues() as $index => $dimension_value) :
				$date = date('M d', strtotime($dimension_value->getValue()));
				$page_session_count_data[$date] = $metrics[$index]->getValue();
			endforeach;
		endforeach;

		foreach ($user_response->getRows() as $user_row) :
			$metrics = $user_row->getMetricValues();

			foreach ($user_row->getDimensionValues() as $index => $dimension_value) :
				$date = date('M d', strtotime($dimension_value->getValue()));

				$user_count_data[$date] = $metrics[$index]->getValue();
			endforeach;
		endforeach;
		?>

		// Page Sessions.
		<?php foreach($page_session_count_data as $date => $value) : ?>
			pageSessionData.addRow( [
				'<?php echo esc_js($date); ?>',
				<?php echo esc_js( $value ); ?>,
				ga_charts.createPageTooltip( '<?php echo esc_js($date); ?>',
					'<?php echo esc_js( $value ); ?>'
				)
			] );
		<?php endforeach; ?>

		// User data.
		<?php foreach($user_count_data as $date => $value) : ?>
		userData.addRow( [
			'<?php echo esc_js($date); ?>',
			<?php echo esc_js( $value ); ?>,
			ga_charts.createUserTooltip( '<?php echo esc_js($date); ?>',
				'<?php echo esc_js( $value ); ?>'
			)
		] );
		<?php endforeach; ?>

		ga_charts.events( pageSessionData );
		ga_charts.drawPageSessionChart( pageSessionData );
		ga_charts.drawUserChart( userData );

		// GA4 Demographic gender chart.
		<?php
		$demo_gender_data[0] = array( 'Gender', 'The gender of visitors' );

		$x = 1;
		foreach ( $gender_count_data as $gender_type => $amount ) {
			$demo_gender_data[ $x ] = array( ucfirst( $gender_type ), intval( $amount ) );
			$x ++;
		}
		?>

		ga_charts.drawDemoGenderGa4Chart(<?php echo wp_json_encode( $demo_gender_data ); ?>);
		ga_loader.hide();

		// Demographic age chart
		<?php
		$demo_ga4_age_data[0] = array( 'Age', 'Average age range of visitors' );

		$x = 1;

		foreach ( $age_count_data as $age_type => $amount ) {
			$demo_ga4_age_data[ $x ] = array( $age_type, intval( $amount ) );
			$x ++;
		}
		?>
		ga_charts.drawDemoAgeGa4Chart(<?php echo wp_json_encode( $demo_ga4_age_data ); ?>);

		// Device chart.
		<?php
		$ga4_demo_count_data    = array();
		$ga4_demo_count_data[0] = array(
			__( 'Device', 'googleanalytics' ),
			__( 'Device Breakdown', 'googleanalytics' ),
		);

		$x = 1;
		foreach ( $ga4_demo_device_data as $age_type => $amount ) {
			$ga4_demo_count_data[ $x ] = array( $age_type, intval( $amount ) );
			$x ++;
		}
		?>
		ga_charts.drawGa4DemoDeviceChart(<?php echo wp_json_encode($ga4_demo_count_data); ?>);

		ga_loader.hide();
	} );
</script>
<div class="dashboard-title">GA4 Dashboard</div>

<?php
if (true === empty($page_list_count_data)) :
    echo wp_kses(
        Ga_Helper::ga_wp_notice(
            __( 'You don\'t appear to have enough page view data. Please come back at a later date once you do.' ),
            'warning',
            false,
            array(

            )
        ),
        array(
            'button' => array(
                'class'   => array(),
                'onclick' => array(),
            ),
            'div'    => array(
                'class' => array(),
            ),
            'p'      => array(),
        )
    );
else :
    ?>
<div id="page_session_chart_div"></div>

<?php require plugin_dir_path( __FILE__ ) . 'ga4-demographic-chart.php'; ?>

<div class="ga-panel ga-panel-default" style="width:100%; max-width:1210px; margin-top: 2rem;">
	<div class="ga-panel-heading">
		<strong><?php echo esc_html( 'Top 10 Pages/Posts by page views' ); ?></strong>
	</div>
	<div class="ga-panel-body">
		<div id="table-container">
			<table class="ga-table">
				<tr>
					<th style="text-align: right;">
						<?php echo esc_html( 'Url' ); ?>
					</th>
					<th style="text-align: right;">
						<?php echo esc_html( 'Pageviews' ); ?>
					</th>
					<th style="text-align: right;">
						<?php echo '%'; ?>
					</th>
				</tr>
				<?php foreach ( array_slice($page_list_count_data, 0, 10) as $page => $metric ) :
					$percentage = round((float)($metric / $pageViewCount) * 100 )
					?>
					<tr>
						<td class="ga-col-name">
							<?php
							if ( '(direct) / (none)' !== $page ) :
								$single_breakdown = false === empty( $ts ) ?
									'/explorer-table.plotKeys=%5B%5D&_r.drilldown=analytics.sourceMedium:' :
									'/explorer-table.plotKeys=%5B%5D&_r.drilldown=analytics.pagePath:';
								?>
								<a class="ga-source-name"
								   href="
										<?php
								   echo esc_url(
									   $page . $single_breakdown . str_replace(
										   '+',
										   '%20',
										   str_replace(
											   '2F',
											   '~2F',
											   str_replace( '%', '', rawurlencode( $page ) )
										   )
									   )
								   );
								   ?>
													/"
								   target="_blank"><?php echo esc_html( $page ); ?></a>
							<?php else : ?>
								<?php echo esc_html( $page ); ?>
							<?php endif; ?>
						</td>
						<td style="text-align: right"><?php echo esc_html( $metric ); ?></td>
						<td>
							<div class="progress">
								<div class="progress-bar" role="progressbar"
									 aria-valuenow="<?php echo esc_attr( $percentage ); ?>" aria-valuemin="0"
									 aria-valuemax="100"
									 style="width: <?php echo esc_attr( $percentage ); ?>%;"></div>
								<span style="margin-left: 10px;">
									<?php echo esc_html( Ga_Helper::format_percent( $percentage ) ); ?>
								</span>
							</div>
						</td>
					</tr>
				<?php endforeach; ?>
			</table>
		</div>
	</div>
</div>
<?php endif; ?>
<div id="user_chart_div"></div>