PluginProbe
FireBox – WooCommerce Popup Builder, Exit Intent Popup, Email Optin & Cart Abandonment / 2.0.12
FireBox – WooCommerce Popup Builder, Exit Intent Popup, Email Optin & Cart Abandonment v2.0.12
3.1.13 3.1.12 3.1.11 3.1.10 3.1.9 3.1.8 3.1.7 trunk 1.0.0 1.0.1 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.1.0 1.1.1 All 122 releases
firebox / Inc / Core / Admin / Analytics / Metrics / ConversionRate.php

ConversionRate.php in FireBox – WooCommerce Popup Builder, Exit Intent Popup, Email Optin & Cart Abandonment 2.0.12, at Inc/Core/Admin/Analytics/Metrics/ConversionRate.php

162 lines 4.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * @package FireBox
4 * @version 2.0.12 Free
5 *
6 * @author FirePlugins <[email protected]>
7 * @link https://www.fireplugins.com
8 * @copyright Copyright © 2023 FirePlugins All Rights Reserved
9 * @license GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later
10 */
11
12 namespace FireBox\Core\Admin\Analytics\Metrics;
13
14 if (!defined('ABSPATH'))
15 {
16 exit; // Exit if accessed directly.
17 }
18
19 use FireBox\Core\Admin\Analytics\Metric;
20
21 class ConversionRate extends Metric
22 {
23 protected $data_source = 'metrics';
24
25 protected $data_source_input = [
26 'impressions',
27 'submissions'
28 ];
29
30 /**
31 * The suffix that is added to the results.
32 * s => seconds
33 * Todo: make it translatable
34 *
35 * @var string
36 */
37 protected $suffix = '%';
38
39 /**
40 * Metric specific data
41 */
42 protected function getMetricSpecificData()
43 {
44 return [
45 'type' => 'conversionrate',
46 'color' => '#c6a124',
47 'hover_color' => '#e1b215',
48 'clean_label' => fpframework()->_('FPF_CONVERSION_RATE'),
49 'label' => fpframework()->_('FPF_CONVERSION_RATE'),
50 'tooltip' => firebox()->_('FB_CONVERSION_RATE_TOOLTIP'),
51 'read_more_link' => FPF_SITE_URL . 'docs/firebox/analytics/the-conversion-rate-metric',
52 'decimal_points' => 2,
53 'hide_from_results_toolbar_items' => [
54 'event'
55 ]
56 ];
57 }
58
59 public function getCustomMetricData($previous_period = false)
60 {
61 if (!$metrics = $this->getCustomMetricsData())
62 {
63 return [];
64 }
65
66 $impressionsPeriodData = $previous_period ? $metrics['impressions']->getLastPeriodData() : $metrics['impressions']->getCurrentPeriodData();
67 $submissionsPeriodData = $previous_period ? $metrics['submissions']->getLastPeriodData() : $metrics['submissions']->getCurrentPeriodData();
68
69 $data = [];
70
71 $index = 0;
72 foreach ($submissionsPeriodData as $submission)
73 {
74 $data[] = [
75 'label' => $impressionsPeriodData[$index]['label'],
76 'total' => $impressionsPeriodData[$index]['total'] ? ($submission['total'] / $impressionsPeriodData[$index]['total']) * 100 : 0
77 ];
78
79 $index++;
80 }
81
82 return $data;
83 }
84
85 public function getResultsDataFromOtherMetrics($data)
86 {
87 $cvr = [];
88
89 foreach ($data['impressions'] as $key => $value)
90 {
91 $cvr[$key]['data'] = [
92 'current' => [],
93 'last_period' => []
94 ];
95
96 foreach (['current', 'last_period'] as $period)
97 {
98 if (!isset($data['submissions'][$key]['data'][$period]))
99 {
100 continue;
101 }
102
103 $submissions = $data['submissions'][$key]['data'][$period];
104
105 if (empty($submissions))
106 {
107 continue;
108 }
109
110 // Current
111 $index = 0;
112 foreach ($value['data'][$period] as $item)
113 {
114 $cvr[$key]['data'][$period][] = [
115 'label' => $item['label'],
116 'total' => isset($submissions[$index]) ? ((int) $item['total'] ? ((int) $submissions[$index]['total'] / (int) $item['total']) * 100 : 0) : 0
117 ];
118 $index++;
119 }
120 }
121 }
122
123 return $cvr;
124 }
125
126 /**
127 * Parses the metric total amount
128 *
129 * @param int $total
130 * @param array $data
131 * @param bool $previous_period
132 *
133 * @return int
134 */
135 public function parseMetricTotal($total, $data, $previous_period = false)
136 {
137 if (!$metrics = $this->getCustomMetricsData())
138 {
139 return [];
140 }
141
142 $impressionsTotal = $previous_period ? $metrics['impressions']->getLastPeriodTotal() : $metrics['impressions']->getCurrentPeriodTotal();
143 $submissionsTotal = $previous_period ? $metrics['submissions']->getLastPeriodTotal() : $metrics['submissions']->getCurrentPeriodTotal();
144
145 return $impressionsTotal ? ($submissionsTotal / $impressionsTotal) * 100 : 0;
146 }
147
148 private function getCustomMetricsData()
149 {
150 $metrics = $this->getCustomMetrics();
151
152 if (!isset($metrics['impressions']) || !isset($metrics['submissions']))
153 {
154 return;
155 }
156
157 return [
158 'impressions' => $metrics['impressions'],
159 'submissions' => $metrics['submissions']
160 ];
161 }
162 }