PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 2.9.2
Independent Analytics – WordPress Analytics Plugin v2.9.2
2.15.5 2.15.4 2.15.3 2.15.2 2.15.1 2.15.0 2.14.10 trunk 1.1 1.10 1.10.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.17.1 1.17.2 1.17.3 1.17.4 1.18 1.18.1 1.19.0 1.19.1 1.2 1.20.0 1.21.0 1.22.0 1.22.1 1.23.0 1.23.1 1.24.0 1.24.1 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.28.1 1.28.2 1.28.3 1.29.0 1.3 1.30.0 1.30.1 1.4 1.5 1.6 1.7 1.8 1.9 2.0.0 2.0.1 2.1.4 2.1.5 2.1.6 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.10 2.11.2 2.11.3 2.11.4 2.11.5 2.11.6 2.11.7 2.11.8 2.11.9 2.12.0 2.12.1 2.12.2 2.13.1 2.13.2 2.13.5 2.13.6 2.14.0 2.14.1 2.14.2 2.14.4 2.14.6 2.14.7 2.14.8 2.14.9 2.2.0 2.2.1 2.3.1 2.3.2 2.4.2 2.4.3 2.5.0 2.5.1 2.6.0 2.6.1 2.6.2 2.6.3 2.6.4 2.7.0 2.7.1 2.7.2 2.7.3 2.8.2 2.8.3 2.8.4 2.8.5 2.8.6 2.8.7 2.8.8 2.8.9 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7
independent-analytics / IAWP / Admin_Page / Analytics_Page.php
independent-analytics / IAWP / Admin_Page Last commit date
Admin_Page.php 2 years ago Analytics_Page.php 1 year ago Campaign_Builder_Page.php 2 years ago Click_Tracking_Page.php 1 year ago Settings_Page.php 2 years ago Support_Page.php 2 years ago Updates_Page.php 2 years ago
Analytics_Page.php
184 lines
1 <?php
2
3 namespace IAWP\Admin_Page;
4
5 use IAWP\Capability_Manager;
6 use IAWP\Chart;
7 use IAWP\Chart_Geo;
8 use IAWP\Dashboard_Options;
9 use IAWP\Database;
10 use IAWP\Env;
11 use IAWP\Plugin_Conflict_Detector;
12 use IAWP\Quick_Stats;
13 use IAWP\Real_Time;
14 use IAWP\Report_Finder;
15 use IAWP\Tables\Table;
16 use IAWP\Tables\Table_Campaigns;
17 use IAWP\Tables\Table_Clicks;
18 use IAWP\Tables\Table_Devices;
19 use IAWP\Tables\Table_Geo;
20 use IAWP\Tables\Table_Pages;
21 use IAWP\Tables\Table_Referrers;
22 use IAWP\Utils\Security;
23 /** @internal */
24 class Analytics_Page extends \IAWP\Admin_Page\Admin_Page
25 {
26 protected function render_page()
27 {
28 $options = Dashboard_Options::getInstance();
29 $date_rage = $options->get_date_range();
30 $tab = (new Env())->get_tab();
31 if ($tab === 'views') {
32 $table = new Table_Pages();
33 $statistics_class = $table->group()->statistics_class();
34 $statistics = new $statistics_class($date_rage, null, $options->chart_interval());
35 $stats = new Quick_Stats($statistics);
36 $chart = new Chart($statistics);
37 $this->interface($table, $stats, $chart);
38 } elseif ($tab === 'referrers') {
39 $table = new Table_Referrers();
40 $statistics_class = $table->group()->statistics_class();
41 $statistics = new $statistics_class($date_rage, null, $options->chart_interval());
42 $stats = new Quick_Stats($statistics);
43 $chart = new Chart($statistics);
44 $this->interface($table, $stats, $chart);
45 } elseif ($tab === 'geo') {
46 $table = new Table_Geo($options->group());
47 $statistics_class = $table->group()->statistics_class();
48 $statistics = new $statistics_class($date_rage, null, $options->chart_interval());
49 $stats = new Quick_Stats($statistics);
50 $table_data_class = $table->group()->rows_class();
51 $geo_data = new $table_data_class($date_rage);
52 $chart = new Chart_Geo($geo_data->rows());
53 $this->interface($table, $stats, $chart);
54 } elseif ($tab === 'campaigns') {
55 $table = new Table_Campaigns();
56 $statistics_class = $table->group()->statistics_class();
57 $statistics = new $statistics_class($date_rage, null, $options->chart_interval());
58 $stats = new Quick_Stats($statistics);
59 $chart = new Chart($statistics);
60 $this->interface($table, $stats, $chart);
61 } elseif ($tab === 'clicks') {
62 $table = new Table_Clicks();
63 $statistics_class = $table->group()->statistics_class();
64 $statistics = new $statistics_class($date_rage, null, $options->chart_interval());
65 $stats = new Quick_Stats($statistics);
66 $chart = new Chart($statistics);
67 $this->interface($table, $stats, $chart);
68 } elseif ($tab === 'devices') {
69 $table = new Table_Devices($options->group());
70 $statistics_class = $table->group()->statistics_class();
71 $statistics = new $statistics_class($date_rage, null, $options->chart_interval());
72 $stats = new Quick_Stats($statistics);
73 $chart = new Chart($statistics);
74 $this->interface($table, $stats, $chart);
75 } elseif ($tab === 'real-time') {
76 (new Real_Time())->render_real_time_analytics();
77 }
78 }
79 private function interface(Table $table, $stats, $chart)
80 {
81 $options = Dashboard_Options::getInstance();
82 $sort_configuration = $table->sanitize_sort_parameters($options->sort_column(), $options->sort_direction());
83 ?>
84 <div data-controller="report"
85 data-report-name-value="<?php
86 echo Security::string($options->report_name());
87 ?>"
88 data-report-relative-range-id-value="<?php
89 echo Security::attr($options->relative_range_id());
90 ?>"
91 data-report-exact-start-value="<?php
92 echo Security::attr($options->start());
93 ?>"
94 data-report-exact-end-value="<?php
95 echo Security::attr($options->end());
96 ?>"
97 data-report-group-value="<?php
98 echo Security::attr($options->group());
99 ?>"
100 data-report-filters-value="<?php
101 echo \esc_attr(Security::json_encode($options->filters()));
102 ?>"
103 data-report-chart-interval-value="<?php
104 echo Security::attr($options->chart_interval()->id());
105 ?>"
106 data-report-sort-column-value="<?php
107 echo Security::attr($sort_configuration->column());
108 ?>"
109 data-report-sort-direction-value="<?php
110 echo Security::attr($sort_configuration->direction());
111 ?>"
112 data-report-columns-value="<?php
113 echo \esc_attr(Security::json_encode($table->visible_column_ids()));
114 ?>"
115 data-report-quick-stats-value="<?php
116 echo \esc_attr(Security::json_encode($options->visible_quick_stats()));
117 ?>"
118 data-report-primary-chart-metric-id-value="<?php
119 echo \esc_attr($options->primary_chart_metric_id());
120 ?>"
121 data-report-secondary-chart-metric-id-value="<?php
122 echo \esc_attr($options->secondary_chart_metric_id());
123 ?>"
124 >
125 <div id="report-header-container" class="report-header-container">
126 <?php
127 echo \IAWPSCOPED\iawp_blade()->run('partials.report-header', ['report' => (new Report_Finder())->current(), 'can_edit' => Capability_Manager::can_edit()]);
128 ?>
129 <?php
130 $table->output_report_toolbar();
131 ?>
132 <div class="modal-background"></div>
133 </div>
134 <?php
135 echo $stats->get_html();
136 ?>
137 <?php
138 echo $chart->get_html();
139 ?>
140 <?php
141 echo $table->get_table_toolbar_markup();
142 ?>
143 <?php
144 echo $table->get_table_markup($sort_configuration->column(), $sort_configuration->direction());
145 ?>
146 </div>
147 <?php
148 if (Env::get_tab() === 'geo') {
149 echo '<div class="geo-ip-attribution">';
150 echo \esc_html_x('Geolocation data powered by', 'Following text is a noun: DB-IP', 'independent-analytics') . ' ' . '<a href="https://db-ip.com" target="_blank">DB-IP</a>.';
151 echo '</div>';
152 }
153 ?>
154 <div class="iawp-notices"><?php
155 if (Capability_Manager::can_edit()) {
156 $plugin_conflict_detector = new Plugin_Conflict_Detector();
157 if ($plugin_conflict_detector->has_conflict()) {
158 echo \IAWPSCOPED\iawp_blade()->run('notices.notice', ['notice_text' => $plugin_conflict_detector->get_error(), 'button_text' => \false, 'id' => 'plugin-conflict', 'notice' => 'iawp-error', 'url' => 'https://independentwp.com/knowledgebase/tracking/secure-rest-api/']);
159 }
160 if (\get_option('iawp_need_clear_cache')) {
161 echo \IAWPSCOPED\iawp_blade()->run('notices.notice', ['notice_text' => \__('Please clear your cache to ensure tracking works properly.', 'independent-analytics'), 'button_text' => \__('I\'ve cleared the cache', 'independent-analytics'), 'id' => 'iawp_need_clear_cache', 'notice' => 'iawp-warning', 'url' => 'https://independentwp.com/knowledgebase/common-questions/views-not-recording/']);
162 }
163 $requires_logged_in_tracking = $plugin_conflict_detector->plugin_requiring_logged_in_tracking();
164 $show_logged_in_tracking_notice = $requires_logged_in_tracking && !\get_option('iawp_track_authenticated_users') && !\get_option('iawp_need_clear_cache');
165 if ($show_logged_in_tracking_notice) {
166 echo \IAWPSCOPED\iawp_blade()->run('notices.notice', ['notice_text' => '<strong>' . \sprintf(\_x('%s compatibility:', 'Variable is the name of a plugin', 'independent-analytics'), $requires_logged_in_tracking) . '</strong> ' . \__('We recommend you enable tracking for logged-in visitors.', 'independent-analytics'), 'button_text' => \false, 'id' => 'enable-logged-in-tracking', 'notice' => 'iawp-warning', 'url' => 'https://independentwp.com/knowledgebase/tracking/how-to-track-logged-in-visitors/']);
167 }
168 if (\IAWPSCOPED\iawp_db_version() > 0 && !Database::has_correct_database_privileges()) {
169 echo \IAWPSCOPED\iawp_blade()->run('notices.notice', ['notice_text' => \__('Your site is missing the following critical database permissions:', 'independent-analytics') . ' ' . \implode(', ', Database::missing_database_privileges()) . '. ' . \__('There is no issue at this time, but you will need to enable the missing permissions before updating the plugin to a newer version to ensure an error is avoided. Please click this link to read our tutorial:', 'independent-analytics'), 'button_text' => \false, 'id' => 'missing-permissions', 'notice' => 'iawp-error', 'url' => 'https://independentwp.com/knowledgebase/common-questions/missing-database-permissions/']);
170 }
171 if (Env::get_tab() === 'clicks') {
172 if (!\get_option('iawp_clicks_sync_notice')) {
173 echo \IAWPSCOPED\iawp_blade()->run('notices.notice', ['notice_text' => \__('Click data syncs every 60 seconds. Please allow for this delay when testing clicks on new links.', 'independent-analytics'), 'button_text' => \__('Dismiss', 'independent-analytics'), 'id' => 'iawp_clicks_sync_notice', 'notice' => 'iawp-warning', 'url' => 'https://independentwp.com/knowledgebase/click-tracking/click-tracking-update-process/']);
174 }
175 }
176 }
177 ?>
178 </div><?php
179 if (\get_option('iawp_show_gsg') === '1' && !\get_option('iawp_need_clear_cache') && !$show_logged_in_tracking_notice && !$plugin_conflict_detector->has_conflict() && (Env::get_tab() !== 'clicks' || Env::get_tab() === 'clicks' && \get_option('iawp_clicks_sync_notice'))) {
180 echo \IAWPSCOPED\iawp_blade()->run('notices.getting-started');
181 }
182 }
183 }
184