PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 1.29.0
Independent Analytics – WordPress Analytics Plugin v1.29.0
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 / Independent_Analytics.php
independent-analytics / IAWP Last commit date
AJAX 2 years ago Date_Range 2 years ago Interval 3 years ago Menu_Bar_Stats 3 years ago Migrations 2 years ago Models 2 years ago Queries 2 years ago Statistics 2 years ago Tables 2 years ago Utils 2 years ago Campaign_Builder.php 3 years ago Capability_Manager.php 3 years ago Chart.php 3 years ago Chart_Geo.php 2 years ago Chart_SVG.php 3 years ago City_To_Country_Converter.php 3 years ago Dashboard_Options.php 3 years ago Dashboard_Widget.php 3 years ago Email_Chart.php 3 years ago Email_Reports.php 2 years ago Filters.php 3 years ago Geo_Database_Background_Job.php 3 years ago Geo_Database_Downloader.php 2 years ago Geoposition.php 2 years ago Health_Check.php 3 years ago Icon_Directory.php 2 years ago Icon_Directory_Factory.php 2 years ago Illuminate_Builder.php 3 years ago Independent_Analytics.php 2 years ago Interrupt.php 2 years ago Known_Referrers.php 3 years ago Query.php 2 years ago Quick_Stats.php 3 years ago REST_API.php 2 years ago Real_Time.php 2 years ago Reset_Database.php 3 years ago Resource_Identifier.php 3 years ago Settings.php 2 years ago Sort_Configuration.php 3 years ago Track_Resource_Changes.php 3 years ago View.php 2 years ago View_Counter.php 2 years ago WP_Option_Cache_Bust.php 3 years ago WooCommerce_Order.php 3 years ago
Independent_Analytics.php
608 lines
1 <?php
2
3 namespace IAWP_SCOPED\IAWP;
4
5 use IAWP_SCOPED\IAWP\AJAX\Cleared_Cache_AJAX;
6 use IAWP_SCOPED\IAWP\AJAX\Create_Campaign_AJAX;
7 use IAWP_SCOPED\IAWP\AJAX\Delete_Campaign_AJAX;
8 use IAWP_SCOPED\IAWP\AJAX\Delete_Data_AJAX;
9 use IAWP_SCOPED\IAWP\AJAX\Export_Campaigns_AJAX;
10 use IAWP_SCOPED\IAWP\AJAX\Export_Devices_AJAX;
11 use IAWP_SCOPED\IAWP\AJAX\Export_Geo_AJAX;
12 use IAWP_SCOPED\IAWP\AJAX\Export_Pages_AJAX;
13 use IAWP_SCOPED\IAWP\AJAX\Export_Referrers_AJAX;
14 use IAWP_SCOPED\IAWP\AJAX\Filters_AJAX;
15 use IAWP_SCOPED\IAWP\AJAX\Migration_Status_AJAX;
16 use IAWP_SCOPED\IAWP\AJAX\Real_Time_AJAX;
17 use IAWP_SCOPED\IAWP\AJAX\Test_Email_AJAX;
18 use IAWP_SCOPED\IAWP\AJAX\Update_Capabilities_AJAX;
19 use IAWP_SCOPED\IAWP\Menu_Bar_Stats\Menu_Bar_Stats;
20 use IAWP_SCOPED\IAWP\Migrations\Migration;
21 use IAWP_SCOPED\IAWP\Statistics\Campaign_Statistics;
22 use IAWP_SCOPED\IAWP\Statistics\Country_Statistics;
23 use IAWP_SCOPED\IAWP\Statistics\Device_Statistics;
24 use IAWP_SCOPED\IAWP\Statistics\Page_Statistics;
25 use IAWP_SCOPED\IAWP\Statistics\Referrer_Statistics;
26 use IAWP_SCOPED\IAWP\Tables\Table;
27 use IAWP_SCOPED\IAWP\Tables\Table_Campaigns;
28 use IAWP_SCOPED\IAWP\Tables\Table_Devices;
29 use IAWP_SCOPED\IAWP\Tables\Table_Geo;
30 use IAWP_SCOPED\IAWP\Tables\Table_Pages;
31 use IAWP_SCOPED\IAWP\Tables\Table_Referrers;
32 use IAWP_SCOPED\IAWP\Utils\Security;
33 use IAWP_SCOPED\IAWP\Utils\Singleton;
34 class Independent_Analytics
35 {
36 use Singleton;
37 public $settings;
38 public $email_reports;
39 // This is where we attach functions to WP hooks
40 private function __construct()
41 {
42 $this->settings = new Settings();
43 new REST_API();
44 new Dashboard_Widget();
45 new View_Counter();
46 new Delete_Data_AJAX();
47 new Filters_AJAX();
48 new Export_Geo_AJAX();
49 new Export_Devices_AJAX();
50 new Export_Referrers_AJAX();
51 new Export_Pages_AJAX();
52 new Migration_Status_AJAX();
53 new Update_Capabilities_AJAX();
54 new Cleared_Cache_AJAX();
55 new Track_Resource_Changes();
56 Menu_Bar_Stats::register();
57 WooCommerce_Order::initialize_order_tracker();
58 if (\IAWP_SCOPED\iawp_is_pro()) {
59 $this->email_reports = new Email_Reports();
60 new Export_Campaigns_AJAX();
61 new Create_Campaign_AJAX();
62 new Delete_Campaign_AJAX();
63 new Campaign_Builder();
64 new Real_Time_AJAX();
65 new Test_Email_AJAX();
66 }
67 \add_filter('admin_body_class', function ($classes) {
68 if (\get_option('iawp_dark_mode')) {
69 $classes .= ' iawp-dark-mode ';
70 }
71 return $classes;
72 });
73 \add_action('admin_menu', [$this, 'add_admin_menu_pages']);
74 \add_action('admin_enqueue_scripts', [$this, 'enqueue_admin_scripts']);
75 \add_action('wp_enqueue_scripts', [$this, 'enqueue_scripts']);
76 \add_filter('plugin_action_links_independent-analytics/iawp.php', [$this, 'plugin_action_links']);
77 \add_filter('admin_footer_text', [$this, 'ip_db_attribution'], 1, 1);
78 \add_filter('admin_head', [$this, 'style_premium_menu_item']);
79 \add_action('init', [$this, 'polylang_translations']);
80 IAWP_FS()->add_filter('connect_message_on_update', [$this, 'filter_connect_message_on_update'], 10, 6);
81 IAWP_FS()->add_filter('connect_message', [$this, 'filter_connect_message_on_update'], 10, 6);
82 IAWP_FS()->add_filter('is_submenu_visible', [$this, 'hide_freemius_sub_menus'], 10, 2);
83 IAWP_FS()->add_filter('pricing_url', [$this, 'change_freemius_pricing_url'], 10);
84 IAWP_FS()->add_filter('show_deactivation_feedback_form', function () {
85 return \false;
86 });
87 }
88 public function polylang_translations()
89 {
90 if (\function_exists('IAWP_SCOPED\\pll_register_string')) {
91 pll_register_string('view_counter', 'Views:', 'Independent Analytics');
92 }
93 }
94 // Settings page where the analytics will appear
95 public function add_admin_menu_pages()
96 {
97 $title = Capability_Manager::white_labeled() ? \esc_html__('Analytics', 'independent-analytics') : 'Independent Analytics';
98 \add_menu_page($title, \esc_html__('Analytics', 'independent-analytics'), Capability_Manager::can_view_string(), 'independent-analytics', [$this, 'render_analytics_page'], 'dashicons-analytics', 3);
99 if (!Capability_Manager::white_labeled()) {
100 \add_submenu_page('independent-analytics', \esc_html__('Feedback', 'independent-analytics'), \esc_html__('Feedback', 'independent-analytics'), Capability_Manager::can_view_string(), \esc_url('https://feedback.independentwp.com/boards/feature-requests'));
101 }
102 if (\IAWP_SCOPED\iawp_is_free() && !Capability_Manager::white_labeled()) {
103 \add_submenu_page('independent-analytics', \esc_html__('Upgrade to Pro &rarr;', 'independent-analytics'), \esc_html__('Upgrade to Pro &rarr;', 'independent-analytics'), Capability_Manager::can_view_string(), \esc_url('https://independentwp.com/pricing/?utm_source=User+Dashboard&utm_medium=WP+Admin&utm_campaign=Upgrade+to+Pro&utm_content=Sidebar'));
104 }
105 }
106 public function hide_freemius_sub_menus($is_visible, $menu_id)
107 {
108 if ('pricing' == $menu_id) {
109 return \false;
110 } elseif ('support' == $menu_id && Capability_Manager::white_labeled()) {
111 return \false;
112 } else {
113 return \true;
114 }
115 }
116 public function change_freemius_pricing_url()
117 {
118 return 'https://independentwp.com/pricing/?utm_source=User+Dashboard&utm_medium=WP+Admin&utm_campaign=Upgrade+to+Pro&utm_content=Account';
119 }
120 // The submenu item needs to be styled on all admin pages, and we only load stylesheets on our page
121 public function style_premium_menu_item()
122 {
123 if (\IAWP_SCOPED\iawp_is_free()) {
124 echo '<style>#toplevel_page_independent-analytics .wp-submenu li:nth-child(4) a { color: #F69D0A; }</style>';
125 }
126 }
127 public function render_analytics_page()
128 {
129 if (!Capability_Manager::can_view()) {
130 return;
131 }
132 if (Migration::is_migrating()) {
133 $interrupt = new Interrupt('interrupt/migration_is_running');
134 $interrupt->render();
135 return;
136 }
137 $tab = $this->get_current_tab();
138 ?>
139 <div id="iawp-parent" class="iawp-parent">
140 <?php
141 if (!Capability_Manager::white_labeled()) {
142 echo \IAWP_SCOPED\iawp()->templates()->render('layout/header');
143 }
144 ?>
145 <nav class="nav">
146 <ul class="menu" data-testid="menu">
147 <li class="menu-item">
148 <a href="?page=independent-analytics"
149 data-controller="track-date-range"
150 data-test-menu="views"
151 class="menu-link link-dark <?php
152 if ($tab === 'views') {
153 ?>active<?php
154 }
155 ?>"><?php
156 \esc_html_e('Pages', 'independent-analytics');
157 ?></a>
158 </li>
159 <li class="menu-item">
160 <a href="?page=independent-analytics&tab=referrers"
161 data-controller="track-date-range"
162 data-test-menu="referrers"
163 class="menu-link link-dark <?php
164 if ($tab === 'referrers') {
165 ?>active<?php
166 }
167 ?>"><?php
168 \esc_html_e('Referrers', 'independent-analytics');
169 ?></a>
170 </li>
171 <li class="menu-item">
172 <a href="?page=independent-analytics&tab=geo"
173 data-controller="track-date-range"
174 data-test-menu="geo"
175 class="menu-link link-dark <?php
176 if ($tab === 'geo') {
177 ?>active<?php
178 }
179 ?>"><?php
180 \esc_html_e('Geographic', 'independent-analytics');
181 ?></a>
182 </li>
183 <li class="menu-item">
184 <a href="?page=independent-analytics&tab=devices"
185 data-controller="track-date-range"
186 data-test-menu="devices"
187 class="menu-link link-dark <?php
188 if ($tab === 'devices') {
189 ?>active<?php
190 }
191 ?>"><?php
192 \esc_html_e('Devices', 'independent-analytics');
193 ?></a>
194 </li>
195 <?php
196 if (\IAWP_SCOPED\iawp_is_pro()) {
197 ?>
198 <li class="menu-item">
199 <a href="?page=independent-analytics&tab=campaigns"
200 data-controller="track-date-range"
201 data-test-menu="campaigns"
202 class="menu-link link-dark <?php
203 if ($tab === 'campaigns' || $tab === 'campaign-builder') {
204 ?>active<?php
205 }
206 ?>"><?php
207 \esc_html_e('Campaigns', 'independent-analytics');
208 ?></a>
209 <div class="sub-menu">
210 <ul>
211 <li class="menu-item">
212 <a href="?page=independent-analytics&tab=campaign-builder"
213 class="menu-link link-dark"><?php
214 \esc_html_e('Campaign Builder', 'independent-analytics');
215 ?></a>
216 </li>
217 </ul>
218 </div>
219 </li>
220 <li class="menu-item">
221 <a href="?page=independent-analytics&tab=real-time"
222 data-test-menu="real-time"
223 class="menu-link link-dark <?php
224 if ($tab === 'real-time') {
225 ?>active<?php
226 }
227 ?>"><?php
228 \esc_html_e('Real-time', 'independent-analytics');
229 ?></a>
230 </li>
231 <?php
232 }
233 ?>
234 <?php
235 if (Capability_Manager::can_edit()) {
236 ?>
237 <li class="menu-item">
238 <a href="?page=independent-analytics&tab=settings"
239 data-test-menu="settings"
240 class="menu-link link-dark <?php
241 if ($tab === 'settings') {
242 ?>active<?php
243 }
244 ?>"><?php
245 \esc_html_e('Settings', 'independent-analytics');
246 ?></a>
247 </li>
248 <?php
249 }
250 ?>
251 <?php
252 if (!Capability_Manager::white_labeled()) {
253 ?>
254 <li class="menu-item">
255 <a href="?page=independent-analytics&tab=learn"
256 data-test-menu="learn"
257 class="menu-link link-dark <?php
258 if ($tab === 'learn') {
259 ?>active<?php
260 }
261 ?>"><?php
262 \esc_html_e('Learn', 'independent-analytics');
263 ?></a>
264 </li>
265 <?php
266 }
267 ?>
268 <?php
269 if (!Capability_Manager::white_labeled() && \IAWP_SCOPED\iawp_is_free()) {
270 ?>
271 <li class="menu-item upgrade first" data-controller="modal">
272 <a href="#"
273 data-test-menu="campaigns"
274 data-action="modal#toggleModal"
275 data-modal-target="modalButton"
276 class="menu-link link-dark">
277 <?php
278 \esc_html_e('Campaigns', 'independent-analytics');
279 ?>
280 </a>
281 <div class="upgrade-popup"
282 data-modal-target="modal"
283 >
284 <div class="title">
285 <span class="name"><?php
286 \esc_html_e('Campaigns', 'independent-analytics');
287 ?></span>
288 <span class="iawp-label"><?php
289 \esc_html_e('PRO', 'independent-analytics');
290 ?></span>
291 </div>
292 <div class="description">
293 <p><?php
294 \esc_html_e("Campaigns let you track visits from individual links you share online, whether that's a Tweet, ad, or guest post.", 'independent-analytics');
295 ?></p>
296 <a class="iawp-button purple" target="_blank"
297 href="https://independentwp.com/features/campaigns/?utm_source=User+Dashboard&utm_medium=WP+Admin&utm_campaign=Campaigns+menu+item&utm_content=Menu+item"><?php
298 \esc_html_e('Learn more', 'independent-analytics');
299 ?></a>
300 </div>
301 </div>
302 </li>
303 <li class="menu-item upgrade" data-controller="modal">
304 <a href="#"
305 data-test-menu="real-time"
306 data-action="modal#toggleModal"
307 data-modal-target="modalButton"
308 class="menu-link link-dark">
309 <?php
310 \esc_html_e('Real-time', 'independent-analytics');
311 ?>
312 </a>
313 <div class="upgrade-popup"
314 data-modal-target="modal"
315 >
316 <div class="title">
317 <span class="name"><?php
318 \esc_html_e('Real-time analytics', 'independent-analytics');
319 ?></span>
320 <span class="iawp-label"><?php
321 \esc_html_e('PRO', 'independent-analytics');
322 ?></span>
323 </div>
324 <div class="description">
325 <p><?php
326 \esc_html_e("Real-time analytics let you see how many people are on your site right now, what pages they're viewing, and where they came from.", 'independent-analytics');
327 ?></p>
328 <a class="iawp-button purple" target="_blank"
329 href="https://independentwp.com/features/real-time/?utm_source=User+Dashboard&utm_medium=WP+Admin&utm_campaign=Real-time+menu+item&utm_content=Menu+item"><?php
330 \esc_html_e('Learn more', 'independent-analytics');
331 ?></a>
332 </div>
333 </div>
334 </li>
335 <?php
336 }
337 ?>
338 </ul>
339 </nav>
340 <div class="iawp-tab-content"><?php
341 $options = new Dashboard_Options();
342 $date_rage = $options->get_date_range();
343 $date_label = $date_rage->label();
344 $columns = $options->columns();
345 if ($tab == 'views') {
346 $table = new Table_Pages($columns);
347 $statistics = new Page_Statistics($date_rage, null, $options->chart_interval());
348 $stats = new Quick_Stats(null, $statistics);
349 $chart = new Chart($statistics, $date_label);
350 $this->interface($table, $stats, $chart);
351 } elseif ($tab == 'referrers') {
352 $table = new Table_Referrers($columns);
353 $statistics = new Referrer_Statistics($date_rage, null, $options->chart_interval());
354 $stats = new Quick_Stats(null, $statistics);
355 $chart = new Chart($statistics, $date_label);
356 $this->interface($table, $stats, $chart);
357 } elseif ($tab == 'geo') {
358 $table = new Table_Geo($columns, $options->group());
359 $statistics = new Country_Statistics($date_rage);
360 $stats = new Quick_Stats(null, $statistics);
361 $table_data_class = $table->group()->table_data_class();
362 $geo_data = new $table_data_class($date_rage);
363 if ($options->group() === 'city') {
364 $country_rows = City_To_Country_Converter::convert($geo_data->rows());
365 $chart = new Chart_Geo($country_rows, $date_label);
366 } else {
367 $chart = new Chart_Geo($geo_data->rows(), $date_label);
368 }
369 $this->interface($table, $stats, $chart);
370 } elseif ($tab === 'campaigns') {
371 $table = new Table_Campaigns($columns);
372 $statistics = new Campaign_Statistics($date_rage, null, $options->chart_interval());
373 $stats = new Quick_Stats(null, $statistics);
374 $chart = new Chart($statistics, $date_label);
375 $this->interface($table, $stats, $chart);
376 } elseif ($tab == 'campaign-builder') {
377 (new Campaign_Builder())->render_campaign_builder();
378 } elseif ($tab == 'devices') {
379 $table = new Table_Devices($columns, $options->group());
380 $statistics = new Device_Statistics($date_rage);
381 $stats = new Quick_Stats(null, $statistics);
382 $chart = new Chart($statistics, $date_label);
383 $this->interface($table, $stats, $chart);
384 } elseif ($tab === 'real-time') {
385 (new Real_Time())->render_real_time_analytics();
386 } elseif ($tab == 'settings') {
387 echo '<div id="iawp-dashboard" class="iawp-dashboard">';
388 if (Capability_Manager::can_edit()) {
389 $this->settings->render_settings();
390 } else {
391 echo '<p class="permission-blocked">' . \esc_html__('You do not have permission to edit the settings.', 'independent-analytics') . '</p>';
392 }
393 echo '</div>';
394 } elseif ($tab == 'learn') {
395 echo '<div id="iawp-dashboard" class="iawp-dashboard">';
396 echo \IAWP_SCOPED\iawp()->templates()->render('learn/index');
397 echo '</div>';
398 }
399 ?>
400 </div>
401 <div id="loading-icon" class="loading-icon"><img
402 src="<?php
403 echo \esc_url(\IAWP_SCOPED\iawp_url_to('img/loading.svg'));
404 ?>"/>
405 </div>
406 <button id="scroll-to-top" class="scroll-to-top"><span
407 class="dashicons dashicons-arrow-up-alt"></span>
408 </button>
409 </div>
410 <?php
411 }
412 public function templates()
413 {
414 return new \IAWP_SCOPED\League\Plates\Engine(\IAWP_SCOPED\iawp_path_to('templates'));
415 }
416 public function interface(Table $table, $stats, $chart)
417 {
418 $options = new Dashboard_Options();
419 // Todo - Silly that I use table to get the params just to pass them back into table
420 $sort_configuration = $table->sanitize_sort_parameters($options->sort_by(), $options->sort_direction());
421 ?>
422 <div id="iawp-dashboard"
423 class="iawp-dashboard"
424 data-controller="report"
425 data-report-relative-range-id-value="<?php
426 echo Security::attr($options->relative_range_id());
427 ?>"
428 data-report-exact-start-value="<?php
429 echo Security::attr($options->start());
430 ?>"
431 data-report-exact-end-value="<?php
432 echo Security::attr($options->end());
433 ?>"
434 data-report-group-value="<?php
435 echo Security::attr($options->group());
436 ?>"
437 data-report-filters-value="<?php
438 \esc_attr_e(Security::json_encode($options->filters()));
439 ?>"
440 data-report-chart-interval-value="<?php
441 echo Security::attr($options->chart_interval()->id());
442 ?>"
443 data-report-columns-value="<?php
444 \esc_attr_e(Security::json_encode($table->visible_column_ids()));
445 ?>"
446 data-report-visible-datasets-value="<?php
447 \esc_attr_e(Security::json_encode($options->visible_datasets()));
448 ?>"
449 >
450 <?php
451 $table->output_toolbar();
452 ?>
453 <?php
454 echo $stats->get_html();
455 ?>
456 <?php
457 echo $chart->get_html($options->visible_datasets());
458 ?>
459 <?php
460 echo $table->get_table_markup($sort_configuration->column(), $sort_configuration->is_ascending() ? 'asc' : 'desc');
461 ?>
462 </div>
463 <div class="iawp-notices"><?php
464 $health_check = new Health_Check();
465 if (!$health_check->healthy()) {
466 echo \IAWP_SCOPED\iawp()->templates()->render('settings/notice', ['notice_text' => $health_check->error(), 'button_text' => \false, 'notice' => 'iawp-error', 'url' => 'https://independentwp.com/knowledgebase/common-questions/views-not-recording/']);
467 }
468 if (\get_option('iawp_need_clear_cache')) {
469 echo \IAWP_SCOPED\iawp()->templates()->render('settings/notice', ['notice_text' => \__('Please clear your cache to ensure tracking works properly.', 'independent-analytics'), 'button_text' => \__('I\'ve cleared the cache', 'independent-analytics'), 'notice' => 'iawp-warning', 'url' => 'https://independentwp.com/knowledgebase/common-questions/views-not-recording/']);
470 }
471 ?>
472 </div><?php
473 }
474 public function enqueue_admin_scripts($hook)
475 {
476 $this->enqueue_translations();
477 if ($hook == 'toplevel_page_independent-analytics') {
478 $tab = $this->get_current_tab();
479 \wp_register_style('iawp-style', \IAWP_SCOPED\iawp_url_to('dist/styles/style.css'), [], \IAWP_VERSION);
480 \wp_enqueue_style('iawp-style');
481 \wp_register_script('iawp-js', \IAWP_SCOPED\iawp_url_to('dist/js/index.js'), [], \IAWP_VERSION);
482 \wp_enqueue_script('iawp-js');
483 \wp_add_inline_script('iawp-js', 'const IAWP_DELETE_DATA_NONCE = ' . \json_encode(\wp_create_nonce('iawp_delete_data')), 'before');
484 if ($tab === 'views' || $tab === 'referrers' || $tab === 'geo' || $tab === 'campaigns' || $tab === 'campaign-builder' || $tab === 'devices') {
485 \wp_register_script('iawp-data-table', \IAWP_SCOPED\iawp_url_to('dist/js/data-table.js'), [], \IAWP_VERSION);
486 \wp_enqueue_script('iawp-data-table');
487 \wp_add_inline_script('iawp-data-table', 'const IAWP_AJAX = ' . \json_encode(['filter_nonce' => \wp_create_nonce('iawp_filter'), 'create_campaign_nonce' => \wp_create_nonce('iawp_create_campaign'), 'delete_campaign_nonce' => \wp_create_nonce('iawp_delete_campaign'), 'copied_text' => \esc_html__('Copied!', 'independent-analytics'), 'iawp_need_clear_cache_nonce' => \wp_create_nonce('iawp_need_clear_cache')]), 'before');
488 } elseif ($tab == 'settings') {
489 \wp_enqueue_style('wp-color-picker');
490 \wp_register_script('iawp-settings', \IAWP_SCOPED\iawp_url_to('dist/js/settings.js'), ['wp-color-picker'], \IAWP_VERSION);
491 \wp_enqueue_script('iawp-settings');
492 \wp_add_inline_script('iawp-settings', 'const IAWP_AJAX = ' . \json_encode(['export_views_nonce' => \wp_create_nonce('iawp_export_pages'), 'export_referrers_nonce' => \wp_create_nonce('iawp_export_referrers'), 'export_geo_nonce' => \wp_create_nonce('iawp_export_geo'), 'export_devices_nonce' => \wp_create_nonce('iawp_export_devices'), 'export_campaigns_nonce' => \wp_create_nonce('iawp_export_campaigns'), 'iawp_capabilities_nonce' => \wp_create_nonce('iawp_capabilities'), 'iawp_test_email_nonce' => \wp_create_nonce('iawp_test_email'), 'exporting_views_text' => \esc_html__('Exporting Pages...', 'independent-analytics'), 'export_views_text' => \esc_html__('Export Pages', 'independent-analytics'), 'exporting_referrers_text' => \esc_html__('Exporting Referrers...', 'independent-analytics'), 'export_referrers_text' => \esc_html__('Export Referrers', 'independent-analytics'), 'exporting_geo_text' => \esc_html__('Exporting Geolocations...', 'independent-analytics'), 'export_devices_text' => \esc_html__('Export Devices', 'independent-analytics'), 'exporting_devices_text' => \esc_html__('Exporting Devices...', 'independent-analytics'), 'export_geo_text' => \esc_html__('Export Geolocations', 'independent-analytics'), 'exporting_campaigns_text' => \esc_html__('Exporting Campaigns...', 'independent-analytics'), 'export_campaigns_text' => \esc_html__('Export Campaigns', 'independent-analytics')]), 'before');
493 } elseif ($tab == 'learn') {
494 \wp_register_script('iawp-learn', \IAWP_SCOPED\iawp_url_to('dist/js/learn.js'), [], \IAWP_VERSION);
495 \wp_enqueue_script('iawp-learn');
496 }
497 } elseif ($hook == 'index.php') {
498 \wp_register_script('iawp-dashboard-widget', \IAWP_SCOPED\iawp_url_to('dist/js/dashboard_widget.js'), [], \IAWP_VERSION);
499 \wp_enqueue_script('iawp-dashboard-widget');
500 \wp_register_style('iawp-dashboard-widget-css', \IAWP_SCOPED\iawp_url_to('dist/styles/dashboard_widget.css'), [], \IAWP_VERSION);
501 \wp_enqueue_style('iawp-dashboard-widget-css');
502 }
503 $this->maybe_enqueue_menu_bar_stats_styles();
504 }
505 public function enqueue_scripts($hook)
506 {
507 $this->maybe_enqueue_menu_bar_stats_styles();
508 }
509 public function enqueue_translations()
510 {
511 \wp_register_script('iawp-translations', '');
512 \wp_enqueue_script('iawp-translations');
513 \wp_add_inline_script('iawp-translations', 'const iawpText = ' . \json_encode(['visitors' => \__('Visitors', 'independent-analytics'), 'views' => \__('Views', 'independent-analytics'), 'sessions' => \__('Sessions', 'independent-analytics'), 'orders' => \__('Orders', 'independent-analytics'), 'netSales' => \__('Net Sales', 'independent-analytics'), 'country' => \__('country', 'independent-analytics'), 'exactDates' => \__('Apply Exact Dates', 'independent-analytics'), 'relativeDates' => \__('Apply Relative Dates', 'independent-analytics')]), 'before');
514 }
515 public function maybe_enqueue_menu_bar_stats_styles()
516 {
517 if (Menu_Bar_Stats::is_option_enabled()) {
518 \wp_register_style('iawp-front-end-css', \IAWP_SCOPED\iawp_url_to('dist/styles/menu_bar_stats.css'), [], \IAWP_VERSION);
519 \wp_enqueue_style('iawp-front-end-css');
520 }
521 }
522 public function get_option($name, $default)
523 {
524 $option = \get_option($name, $default);
525 return $option === '' ? $default : $option;
526 }
527 public function get_authors()
528 {
529 $roles = [];
530 foreach (\wp_roles()->roles as $role_name => $role_obj) {
531 if (!empty($role_obj['capabilities']['edit_posts'])) {
532 $roles[] = $role_name;
533 }
534 }
535 $users = \get_users(['role__in' => $roles]);
536 return $users;
537 }
538 public function get_custom_types(bool $tax = \false)
539 {
540 $args = ['public' => \true, '_builtin' => \false];
541 if ($tax) {
542 return \get_taxonomies($args);
543 } else {
544 return \get_post_types($args);
545 }
546 }
547 public function filter_connect_message_on_update($message, $user_first_name, $product_title, $user_login, $site_link, $freemius_link)
548 {
549 // Add the heading HTML.
550 $plugin_name = 'Independent Analytics';
551 $title = '<h3>' . \sprintf(\esc_html__('We hope you love %1$s', 'independent-analytics'), $plugin_name) . '</h3>';
552 $html = '';
553 // Add the introduction HTML.
554 $html .= '<p>';
555 $html .= \sprintf(\esc_html__('Hi, %1$s! This is an invitation to help the %2$s community.', 'independent-analytics'), $user_first_name, $plugin_name);
556 $html .= '<strong>';
557 $html .= \sprintf(\esc_html__('If you opt-in, some data about your usage of %2$s will be shared with us', 'independent-analytics'), $user_first_name, $plugin_name);
558 $html .= '</strong>';
559 $html .= \sprintf(\esc_html__(' so we can improve %2$s. We will also share some helpful info on using the plugin so you can get the most out of your sites analytics.', 'independent-analytics'), $user_first_name, $plugin_name);
560 $html .= '</p>';
561 $html .= '<p>';
562 $html .= \sprintf(\esc_html__('And if you skip this, that\'s okay! %1$s will still work just fine.', 'independent-analytics'), $plugin_name);
563 $html .= '</p>';
564 return $title . $html;
565 }
566 public function plugin_action_links($links)
567 {
568 // Create the link
569 $settings_link = '<a class="calendar-link" href="' . \esc_url(\IAWP_SCOPED\iawp_dashboard_url()) . '">' . \esc_html__('Analytics Dashboard', 'independent-analytics') . '</a>';
570 // Add the link to the start of the array
571 \array_unshift($links, $settings_link);
572 return $links;
573 }
574 public function set_time_limit($limit = 0)
575 {
576 if (!\function_exists('set_time_limit') && \false !== \strpos(\ini_get('disable_functions'), 'set_time_limit') && \ini_get('safe_mode')) {
577 return \false;
578 }
579 return @\set_time_limit($limit);
580 }
581 public function ip_db_attribution($text)
582 {
583 if ($this->get_current_tab() === 'geo') {
584 $text = $text . ' ' . \esc_html_x('Geolocation data powered by', 'Following text is a noun: DB-IP', 'independent-analytics') . ' ' . '<a href="https://db-ip.com" class="geo-message" target="_blank">DB-IP</a>.';
585 }
586 return $text;
587 }
588 public function pagination_page_size()
589 {
590 return 50;
591 }
592 private function get_current_tab()
593 {
594 if (\IAWP_SCOPED\iawp_is_pro()) {
595 $valid_tabs = ['views', 'referrers', 'geo', 'devices', 'campaigns', 'campaign-builder', 'real-time', 'settings', 'learn'];
596 } else {
597 $valid_tabs = ['views', 'referrers', 'geo', 'devices', 'settings', 'learn'];
598 }
599 $default_tab = $valid_tabs[0];
600 $tab = \array_key_exists('tab', $_GET) ? \sanitize_text_field($_GET['tab']) : \false;
601 $is_valid = \array_search($tab, $valid_tabs) != \false;
602 if (!$tab || !$is_valid) {
603 $tab = $default_tab;
604 }
605 return $tab;
606 }
607 }
608