PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 2.10.3
Independent Analytics – WordPress Analytics Plugin v2.10.3
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 1 year 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 1 year ago Updates_Page.php 1 year ago
Analytics_Page.php
196 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;
15 use IAWP\Report_Finder;
16 use IAWP\Tables\Table;
17 use IAWP\Tables\Table_Campaigns;
18 use IAWP\Tables\Table_Clicks;
19 use IAWP\Tables\Table_Devices;
20 use IAWP\Tables\Table_Geo;
21 use IAWP\Tables\Table_Pages;
22 use IAWP\Tables\Table_Referrers;
23 use IAWP\Utils\Security;
24 /** @internal */
25 class Analytics_Page extends \IAWP\Admin_Page\Admin_Page
26 {
27 protected function render_page()
28 {
29 $options = Dashboard_Options::getInstance();
30 $date_rage = $options->get_date_range();
31 $tab = (new Env())->get_tab();
32 $report = (new Report_Finder())->current();
33 $is_showing_skeleton_ui = $report instanceof Report && $report->has_filters();
34 if ($tab === 'views') {
35 $table = new Table_Pages();
36 $statistics_class = $table->group()->statistics_class();
37 $statistics = new $statistics_class($date_rage, null, $options->chart_interval());
38 $stats = new Quick_Stats($statistics, \false, $is_showing_skeleton_ui);
39 $chart = new Chart($statistics, \false, $is_showing_skeleton_ui);
40 $this->interface($table, $stats, $chart);
41 } elseif ($tab === 'referrers') {
42 $table = new Table_Referrers();
43 $statistics_class = $table->group()->statistics_class();
44 $statistics = new $statistics_class($date_rage, null, $options->chart_interval());
45 $stats = new Quick_Stats($statistics, \false, $is_showing_skeleton_ui);
46 $chart = new Chart($statistics, \false, $is_showing_skeleton_ui);
47 $this->interface($table, $stats, $chart);
48 } elseif ($tab === 'geo') {
49 $table = new Table_Geo($options->group());
50 $statistics_class = $table->group()->statistics_class();
51 $statistics = new $statistics_class($date_rage, null, $options->chart_interval());
52 $stats = new Quick_Stats($statistics, \false, $is_showing_skeleton_ui);
53 $table_data_class = $table->group()->rows_class();
54 $geo_data = new $table_data_class($date_rage);
55 $chart = new Chart_Geo($geo_data->rows(), null, $is_showing_skeleton_ui);
56 $this->interface($table, $stats, $chart);
57 } elseif ($tab === 'campaigns') {
58 $table = new Table_Campaigns();
59 $statistics_class = $table->group()->statistics_class();
60 $statistics = new $statistics_class($date_rage, null, $options->chart_interval());
61 $stats = new Quick_Stats($statistics, \false, $is_showing_skeleton_ui);
62 $chart = new Chart($statistics, \false, $is_showing_skeleton_ui);
63 $this->interface($table, $stats, $chart);
64 } elseif ($tab === 'clicks') {
65 $table = new Table_Clicks($options->group());
66 $statistics_class = $table->group()->statistics_class();
67 $statistics = new $statistics_class($date_rage, null, $options->chart_interval());
68 $stats = new Quick_Stats($statistics, \false, $is_showing_skeleton_ui);
69 $chart = new Chart($statistics, \false, $is_showing_skeleton_ui);
70 $this->interface($table, $stats, $chart);
71 } elseif ($tab === 'devices') {
72 $table = new Table_Devices($options->group());
73 $statistics_class = $table->group()->statistics_class();
74 $statistics = new $statistics_class($date_rage, null, $options->chart_interval());
75 $stats = new Quick_Stats($statistics, \false, $is_showing_skeleton_ui);
76 $chart = new Chart($statistics, \false, $is_showing_skeleton_ui);
77 $this->interface($table, $stats, $chart);
78 } elseif ($tab === 'real-time') {
79 (new Real_Time())->render_real_time_analytics();
80 }
81 }
82 private function interface(Table $table, $stats, $chart)
83 {
84 $options = Dashboard_Options::getInstance();
85 $sort_configuration = $table->sanitize_sort_parameters($options->sort_column(), $options->sort_direction());
86 ?>
87 <div data-controller="report"
88 data-report-name-value="<?php
89 echo Security::string($options->report_name());
90 ?>"
91 data-report-relative-range-id-value="<?php
92 echo Security::attr($options->relative_range_id());
93 ?>"
94 data-report-exact-start-value="<?php
95 echo Security::attr($options->start());
96 ?>"
97 data-report-exact-end-value="<?php
98 echo Security::attr($options->end());
99 ?>"
100 data-report-group-value="<?php
101 echo Security::attr($options->group());
102 ?>"
103 data-report-filters-value="<?php
104 echo \esc_attr(Security::json_encode($options->filters()));
105 ?>"
106 data-report-chart-interval-value="<?php
107 echo Security::attr($options->chart_interval()->id());
108 ?>"
109 data-report-sort-column-value="<?php
110 echo Security::attr($sort_configuration->column());
111 ?>"
112 data-report-sort-direction-value="<?php
113 echo Security::attr($sort_configuration->direction());
114 ?>"
115 data-report-columns-value="<?php
116 echo \esc_attr(Security::json_encode($table->visible_column_ids()));
117 ?>"
118 data-report-quick-stats-value="<?php
119 echo \esc_attr(Security::json_encode($options->visible_quick_stats()));
120 ?>"
121 data-report-primary-chart-metric-id-value="<?php
122 echo \esc_attr($options->primary_chart_metric_id());
123 ?>"
124 data-report-secondary-chart-metric-id-value="<?php
125 echo \esc_attr($options->secondary_chart_metric_id());
126 ?>"
127 >
128 <div id="report-header-container" class="report-header-container">
129 <?php
130 echo \IAWPSCOPED\iawp_blade()->run('partials.report-header', ['report' => (new Report_Finder())->current(), 'can_edit' => Capability_Manager::can_edit()]);
131 ?>
132 <?php
133 $table->output_report_toolbar();
134 ?>
135 <div class="modal-background"></div>
136 </div>
137 <?php
138 echo $stats->get_html();
139 ?>
140 <?php
141 echo $chart->get_html();
142 ?>
143 <?php
144 echo $table->get_table_toolbar_markup();
145 ?>
146 <?php
147 echo $table->get_table_markup($sort_configuration->column(), $sort_configuration->direction());
148 ?>
149 </div>
150 <?php
151 if (Env::get_tab() === 'geo') {
152 echo '<div class="geo-ip-attribution">';
153 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>.';
154 echo '</div>';
155 }
156 ?>
157 <div class="iawp-notices"><?php
158 if (Capability_Manager::can_edit()) {
159 $plugin_conflict_detector = new Plugin_Conflict_Detector();
160 if ($plugin_conflict_detector->has_conflict()) {
161 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/']);
162 } elseif (\IAWPSCOPED\iawp_is_pro() && \is_plugin_active('better-wp-security/better-wp-security.php')) {
163 $settings = \get_option('itsec-storage');
164 if (\array_key_exists('system-tweaks', $settings)) {
165 if (\array_key_exists('plugins_php', $settings['system-tweaks'])) {
166 if ($settings['system-tweaks']['plugins_php']) {
167 echo \IAWPSCOPED\iawp_blade()->run('notices.notice', ['notice_text' => \__('The "Solid Security" plugin is disabling PHP execution in the plugins folder, and this is preventing click tracking from working. Please visit the Security > Settings page, click on the Advanced section, click on System Tweaks Settings, uncheck the "Disable PHP Plugins" option, and then save.', 'independent-analytics'), 'button_text' => \false, 'id' => 'plugin-conflict', 'notice' => 'iawp-error', 'url' => 'https://independentwp.com/knowledgebase/click-tracking/allow-php-execution-plugins-folder/']);
168 }
169 }
170 }
171 }
172 if (\get_option('iawp_need_clear_cache')) {
173 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/']);
174 }
175 $requires_logged_in_tracking = $plugin_conflict_detector->plugin_requiring_logged_in_tracking();
176 $show_logged_in_tracking_notice = $requires_logged_in_tracking && !\get_option('iawp_track_authenticated_users') && !\get_option('iawp_need_clear_cache') && !\get_option('iawp_logged_in_tracking_notice');
177 if ($show_logged_in_tracking_notice) {
178 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' => \__('Dismiss', 'independent-analytics'), 'id' => 'enable-logged-in-tracking', 'notice' => 'iawp-warning', 'url' => 'https://independentwp.com/knowledgebase/tracking/how-to-track-logged-in-visitors/']);
179 }
180 if (\IAWPSCOPED\iawp_db_version() > 0 && !Database::has_correct_database_privileges()) {
181 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/']);
182 }
183 if (Env::get_tab() === 'clicks') {
184 if (!\get_option('iawp_clicks_sync_notice')) {
185 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/']);
186 }
187 }
188 }
189 ?>
190 </div><?php
191 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'))) {
192 echo \IAWPSCOPED\iawp_blade()->run('notices.getting-started');
193 }
194 }
195 }
196