Version Description
- 2018-06-25 =
- Tweaked tracker data anonymization
- Fixed tracker notice
Download this release
Release Info
Developer | jablonowski |
Plugin | Flexible Checkout Fields for WooCommerce – WooCommerce Checkout Manager |
Version | 1.6.6 |
Comparing to | |
See all releases |
Code changes from version 1.6.5 to 1.6.6
- acceptance/reports/html/cucumber_reporter.html +1217 -0
- acceptance/reports/html/plugins_tests_report.html +1107 -0
- acceptance/reports/html/screenshot/After_2464.png +0 -0
- acceptance/reports/html/screenshot/screenShot1.png +0 -0
- acceptance/reports/html/screenshot/screenShot2.png +0 -0
- acceptance/reports/html/screenshot/screenShot3.png +0 -0
- acceptance/reports/html/screenshot/screenShot4.png +0 -0
- acceptance/reports/html/tracker_long_message_is_visible-14-1.png +0 -0
- acceptance/reports/json/cucumber_report.json +467 -0
- flexible-checkout-fields.php +17 -6
- inc/wpdesk-tracker/class-wpdesk-tracker-factory.php +91 -0
- inc/wpdesk-tracker/class-wpdesk-tracker.php +199 -632
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-gateways.php +43 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-identification-gdpr.php +62 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-identification.php +39 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-jetpack.php +42 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-license-emails.php +54 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-orders-country.php +53 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-orders-month.php +57 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-orders.php +42 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-plugins.php +84 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-products-variations.php +39 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-products.php +43 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-server.php +61 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-settings.php +55 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-shipping-classes.php +41 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-shipping-methods-zones.php +60 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-shipping-methods.php +47 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-templates.php +65 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-theme.php +44 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-user-agent.php +35 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-users.php +44 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-wordpress.php +50 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider.php +30 -0
- inc/wpdesk-tracker/sender/Exception/class-wpdesk-tracker-sender-exception-wperror.php +17 -0
- inc/wpdesk-tracker/sender/class-wpdesk-tracker-sender-logged.php +56 -0
- inc/wpdesk-tracker/sender/class-wpdesk-tracker-sender-wordpress-to-wpdesk.php +60 -0
- inc/wpdesk-tracker/sender/class-wpdesk-tracker-sender.php +23 -0
- inc/wpdesk-tracker/views/tracker-connect.php +3 -10
- inc/wpdesk-tracker/views/tracker-notice.php +11 -56
- lang/flexible-checkout-fields-pl_PL.mo +0 -0
- lang/flexible-checkout-fields-pl_PL.po +121 -132
- readme.txt +5 -1
- vendor/autoload.php +1 -1
- vendor/composer/autoload_classmap.php +40 -0
- vendor/composer/autoload_real.php +4 -4
- vendor/composer/autoload_static.php +45 -1
acceptance/reports/html/cucumber_reporter.html
ADDED
@@ -0,0 +1,1217 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html>
|
2 |
+
<html>
|
3 |
+
<head>
|
4 |
+
<title>Cucumber Feature Report</title>
|
5 |
+
<link rel="stylesheet" href="https://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" >
|
6 |
+
<style type="text/css">
|
7 |
+
.panel-heading {
|
8 |
+
padding: 0;
|
9 |
+
}
|
10 |
+
|
11 |
+
.panel-heading a {
|
12 |
+
padding: 10px 15px;
|
13 |
+
display: block;
|
14 |
+
position: relative;
|
15 |
+
text-decoration: none;
|
16 |
+
}
|
17 |
+
|
18 |
+
.panel-heading i.glyphicon-chevron-down {
|
19 |
+
display: none;
|
20 |
+
}
|
21 |
+
|
22 |
+
.panel-heading i.glyphicon-chevron-right {
|
23 |
+
display: inline-block;
|
24 |
+
}
|
25 |
+
|
26 |
+
.panel-heading.open i.glyphicon-chevron-down {
|
27 |
+
display: inline-block;
|
28 |
+
}
|
29 |
+
|
30 |
+
.panel-heading.open i.glyphicon-chevron-right {
|
31 |
+
display: none;
|
32 |
+
}
|
33 |
+
|
34 |
+
.generated-on {
|
35 |
+
text-align: right;
|
36 |
+
padding-bottom: 10px;
|
37 |
+
}
|
38 |
+
|
39 |
+
.panel-title b {
|
40 |
+
padding-right: 10px;
|
41 |
+
}
|
42 |
+
|
43 |
+
.panel-heading .label-container {
|
44 |
+
position: absolute;
|
45 |
+
top: 8px;
|
46 |
+
right: 8px;
|
47 |
+
}
|
48 |
+
|
49 |
+
.panel-heading .label-container label {
|
50 |
+
margin-left: 5px;
|
51 |
+
padding: 5px;
|
52 |
+
}
|
53 |
+
|
54 |
+
.navbar .label-container {
|
55 |
+
position: absolute;
|
56 |
+
right: 10px;
|
57 |
+
top: 14px;
|
58 |
+
}
|
59 |
+
|
60 |
+
.navbar {
|
61 |
+
margin-bottom: 10px;
|
62 |
+
}
|
63 |
+
|
64 |
+
.navbar .label {
|
65 |
+
font-size: 20px;
|
66 |
+
}
|
67 |
+
|
68 |
+
.navbar .project-name {
|
69 |
+
position: absolute;
|
70 |
+
top: 10px;
|
71 |
+
left: 50%;
|
72 |
+
margin-left: -100px;
|
73 |
+
text-align: center;
|
74 |
+
font-size: 20px;
|
75 |
+
font-weight: bold;
|
76 |
+
}
|
77 |
+
|
78 |
+
.tags {
|
79 |
+
margin-left: 18px;
|
80 |
+
margin-right: 20px;
|
81 |
+
padding-top: 5px;
|
82 |
+
margin-bottom: -4px;
|
83 |
+
}
|
84 |
+
|
85 |
+
.tag {
|
86 |
+
font-size: 13px;
|
87 |
+
color: #696969;
|
88 |
+
letter-spacing: 0.3px;
|
89 |
+
font-weight: bold;
|
90 |
+
font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;
|
91 |
+
}
|
92 |
+
|
93 |
+
.chart {
|
94 |
+
padding-bottom: 15px;
|
95 |
+
}
|
96 |
+
|
97 |
+
div.chart div div svg rect {
|
98 |
+
fill: #f5f5f5;
|
99 |
+
}
|
100 |
+
|
101 |
+
table.arguments {
|
102 |
+
margin-left: 30px;
|
103 |
+
}
|
104 |
+
|
105 |
+
.screenshot {
|
106 |
+
padding: 2% 0 2% 0;
|
107 |
+
}
|
108 |
+
|
109 |
+
.scenarioTitle {
|
110 |
+
width: 80%
|
111 |
+
}
|
112 |
+
|
113 |
+
.description {
|
114 |
+
background-color: white;
|
115 |
+
border-color: white;
|
116 |
+
line-height: 1.6;
|
117 |
+
color: #6f6f6f;
|
118 |
+
font-weight: 400;
|
119 |
+
font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;
|
120 |
+
font-size: 14px;
|
121 |
+
padding: 0.1em 0.5em 1.2em 1.5em
|
122 |
+
}
|
123 |
+
|
124 |
+
#scenario-description {
|
125 |
+
padding-bottom: 1em;
|
126 |
+
padding-left: 0.2em;
|
127 |
+
}
|
128 |
+
|
129 |
+
.scrollBar {
|
130 |
+
overflow-x: scroll;
|
131 |
+
}
|
132 |
+
|
133 |
+
table {
|
134 |
+
border-collapse: collapse;
|
135 |
+
}
|
136 |
+
|
137 |
+
table, th, td {
|
138 |
+
border: 1px solid black;
|
139 |
+
}
|
140 |
+
|
141 |
+
th, td {
|
142 |
+
text-align: left;
|
143 |
+
padding: 8px;
|
144 |
+
}
|
145 |
+
|
146 |
+
th {
|
147 |
+
background-color: #f5f5f5;
|
148 |
+
color: black;
|
149 |
+
}
|
150 |
+
|
151 |
+
.info {
|
152 |
+
background-color: #fbfbfb;
|
153 |
+
}
|
154 |
+
|
155 |
+
.step-duration {
|
156 |
+
float: right;
|
157 |
+
}
|
158 |
+
|
159 |
+
.footer-div {
|
160 |
+
text-align: right;
|
161 |
+
vertical-align: middle;
|
162 |
+
height:3.5%;
|
163 |
+
width:100%;
|
164 |
+
}
|
165 |
+
|
166 |
+
.footer-container {
|
167 |
+
margin-right: 10px;
|
168 |
+
margin-top: 5px;
|
169 |
+
width:18%;
|
170 |
+
z-index: 10;
|
171 |
+
position: absolute;
|
172 |
+
right: 0;
|
173 |
+
bottom: 10px;
|
174 |
+
text-align: center;
|
175 |
+
background-color: transparent;
|
176 |
+
}
|
177 |
+
|
178 |
+
.footer-link {
|
179 |
+
font-size: 13px;
|
180 |
+
float: right;
|
181 |
+
}
|
182 |
+
|
183 |
+
.footer-link:hover {
|
184 |
+
color: darkgray;
|
185 |
+
}
|
186 |
+
</style>
|
187 |
+
<meta charset="UTF-8">
|
188 |
+
</head>
|
189 |
+
<body>
|
190 |
+
|
191 |
+
<div class="navbar navbar-default navbar-static-top" role="navigation">
|
192 |
+
<div class="container">
|
193 |
+
<div class="navbar-header">
|
194 |
+
<a class="navbar-brand">Cucumberjs Report</a>
|
195 |
+
<div class="project-name visible-md visible-lg">WPDESK_PLUGINS_TESTS</div>
|
196 |
+
<div class="label-container">
|
197 |
+
<span class="label label-success" title=scenarios>Passed: 3</span>
|
198 |
+
<span class="label label-danger" title=scenarios>Failed: 1</span>
|
199 |
+
</div>
|
200 |
+
</div>
|
201 |
+
</div>
|
202 |
+
</div>
|
203 |
+
|
204 |
+
<div class="container">
|
205 |
+
|
206 |
+
<div class="generated-on">Mon Jun 25 2018 11:11:11 GMT+0000 (UTC)</div>
|
207 |
+
|
208 |
+
<div class="row">
|
209 |
+
<div class="chart col-lg-6 col-md-6" id="piechart_features"></div>
|
210 |
+
<div class="chart col-lg-6 col-md-6" id="piechart_scenarios"></div>
|
211 |
+
</div>
|
212 |
+
|
213 |
+
|
214 |
+
|
215 |
+
<div class="row">
|
216 |
+
|
217 |
+
<div class="col-lg-6 col-md-6">
|
218 |
+
<div class="panel panel-default">
|
219 |
+
<div class="panel-heading">
|
220 |
+
<h4 class="panel-title">
|
221 |
+
<div class="tags"> <span class="tag">@flexible-checkout-fields</span> </div>
|
222 |
+
<a data-toggle="collapse" href="#collapseFeature0">
|
223 |
+
<i class="glyphicon glyphicon-chevron-right"></i>
|
224 |
+
<i class="glyphicon glyphicon-chevron-down"></i>
|
225 |
+
<b>Feature:</b>Activate and Deactivate plugin Flexible Checkout Fields tests
|
226 |
+
<span class="label-container">
|
227 |
+
<span class="label label-success">2</span>
|
228 |
+
|
229 |
+
|
230 |
+
|
231 |
+
|
232 |
+
</span>
|
233 |
+
</a>
|
234 |
+
</h4>
|
235 |
+
</div>
|
236 |
+
<div id="collapseFeature0" class="panel-collapse collapse">
|
237 |
+
<div class="panel-body">
|
238 |
+
|
239 |
+
|
240 |
+
<div class="panel panel-default">
|
241 |
+
<div class="panel-heading">
|
242 |
+
<h4 class="panel-title">
|
243 |
+
<div class="tags"> </div>
|
244 |
+
<a data-toggle="collapse" href="#collapseScenario0_0">
|
245 |
+
<i class="glyphicon glyphicon-chevron-right"></i>
|
246 |
+
<i class="glyphicon glyphicon-chevron-down"></i>
|
247 |
+
<b>Scenario:</b>Plugin Flexible Checkout Fields is active
|
248 |
+
<span class="label-container">
|
249 |
+
<span class="label label-success" title="Passed">6</span>
|
250 |
+
|
251 |
+
|
252 |
+
|
253 |
+
|
254 |
+
</span>
|
255 |
+
</a>
|
256 |
+
</h4>
|
257 |
+
</div>
|
258 |
+
<div id="collapseScenario0_0" class="panel-collapse collapse">
|
259 |
+
<div class="panel-body">
|
260 |
+
|
261 |
+
|
262 |
+
|
263 |
+
|
264 |
+
|
265 |
+
<p class="scenario-container">
|
266 |
+
|
267 |
+
|
268 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
269 |
+
|
270 |
+
|
271 |
+
<span class="text">
|
272 |
+
<span class="keyword highlight">Given </span>
|
273 |
+
user is logged in to wordPress
|
274 |
+
|
275 |
+
<span class="step-duration">
|
276 |
+
0s
|
277 |
+
</span>
|
278 |
+
|
279 |
+
|
280 |
+
|
281 |
+
|
282 |
+
</span>
|
283 |
+
|
284 |
+
|
285 |
+
|
286 |
+
|
287 |
+
|
288 |
+
|
289 |
+
|
290 |
+
|
291 |
+
|
292 |
+
|
293 |
+
</p>
|
294 |
+
|
295 |
+
|
296 |
+
|
297 |
+
<p class="scenario-container">
|
298 |
+
|
299 |
+
|
300 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
301 |
+
|
302 |
+
|
303 |
+
<span class="text">
|
304 |
+
<span class="keyword highlight">And </span>
|
305 |
+
i resets the consent to collect data in the database
|
306 |
+
|
307 |
+
<span class="step-duration">
|
308 |
+
0s
|
309 |
+
</span>
|
310 |
+
|
311 |
+
|
312 |
+
|
313 |
+
|
314 |
+
</span>
|
315 |
+
|
316 |
+
|
317 |
+
|
318 |
+
|
319 |
+
|
320 |
+
|
321 |
+
|
322 |
+
|
323 |
+
|
324 |
+
|
325 |
+
</p>
|
326 |
+
|
327 |
+
|
328 |
+
|
329 |
+
<p class="scenario-container">
|
330 |
+
|
331 |
+
|
332 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
333 |
+
|
334 |
+
|
335 |
+
<span class="text">
|
336 |
+
<span class="keyword highlight">When </span>
|
337 |
+
i open "menu-plugins" and activate plugin with slug "flexible-checkout-fields"
|
338 |
+
|
339 |
+
<span class="step-duration">
|
340 |
+
2s
|
341 |
+
</span>
|
342 |
+
|
343 |
+
|
344 |
+
|
345 |
+
|
346 |
+
</span>
|
347 |
+
|
348 |
+
|
349 |
+
|
350 |
+
|
351 |
+
|
352 |
+
|
353 |
+
|
354 |
+
|
355 |
+
|
356 |
+
|
357 |
+
</p>
|
358 |
+
|
359 |
+
|
360 |
+
|
361 |
+
<p class="scenario-container">
|
362 |
+
|
363 |
+
|
364 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
365 |
+
|
366 |
+
|
367 |
+
<span class="text">
|
368 |
+
<span class="keyword highlight">Then </span>
|
369 |
+
check if plugin with slug "flexible-checkout-fields" is Active
|
370 |
+
|
371 |
+
<span class="step-duration">
|
372 |
+
0s
|
373 |
+
</span>
|
374 |
+
|
375 |
+
|
376 |
+
|
377 |
+
|
378 |
+
</span>
|
379 |
+
|
380 |
+
|
381 |
+
|
382 |
+
|
383 |
+
|
384 |
+
|
385 |
+
|
386 |
+
|
387 |
+
|
388 |
+
|
389 |
+
</p>
|
390 |
+
|
391 |
+
|
392 |
+
|
393 |
+
|
394 |
+
</div>
|
395 |
+
</div>
|
396 |
+
</div>
|
397 |
+
|
398 |
+
<div class="panel panel-default">
|
399 |
+
<div class="panel-heading">
|
400 |
+
<h4 class="panel-title">
|
401 |
+
<div class="tags"> </div>
|
402 |
+
<a data-toggle="collapse" href="#collapseScenario0_1">
|
403 |
+
<i class="glyphicon glyphicon-chevron-right"></i>
|
404 |
+
<i class="glyphicon glyphicon-chevron-down"></i>
|
405 |
+
<b>Scenario:</b>Plugin Flexible Checkout Fields is inactive
|
406 |
+
<span class="label-container">
|
407 |
+
<span class="label label-success" title="Passed">6</span>
|
408 |
+
|
409 |
+
|
410 |
+
|
411 |
+
|
412 |
+
</span>
|
413 |
+
</a>
|
414 |
+
</h4>
|
415 |
+
</div>
|
416 |
+
<div id="collapseScenario0_1" class="panel-collapse collapse">
|
417 |
+
<div class="panel-body">
|
418 |
+
|
419 |
+
|
420 |
+
|
421 |
+
|
422 |
+
|
423 |
+
<p class="scenario-container">
|
424 |
+
|
425 |
+
|
426 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
427 |
+
|
428 |
+
|
429 |
+
<span class="text">
|
430 |
+
<span class="keyword highlight">Given </span>
|
431 |
+
user is logged in to wordPress
|
432 |
+
|
433 |
+
<span class="step-duration">
|
434 |
+
0s
|
435 |
+
</span>
|
436 |
+
|
437 |
+
|
438 |
+
|
439 |
+
|
440 |
+
</span>
|
441 |
+
|
442 |
+
|
443 |
+
|
444 |
+
|
445 |
+
|
446 |
+
|
447 |
+
|
448 |
+
|
449 |
+
|
450 |
+
|
451 |
+
</p>
|
452 |
+
|
453 |
+
|
454 |
+
|
455 |
+
<p class="scenario-container">
|
456 |
+
|
457 |
+
|
458 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
459 |
+
|
460 |
+
|
461 |
+
<span class="text">
|
462 |
+
<span class="keyword highlight">And </span>
|
463 |
+
i resets the consent to collect data in the database
|
464 |
+
|
465 |
+
<span class="step-duration">
|
466 |
+
0s
|
467 |
+
</span>
|
468 |
+
|
469 |
+
|
470 |
+
|
471 |
+
|
472 |
+
</span>
|
473 |
+
|
474 |
+
|
475 |
+
|
476 |
+
|
477 |
+
|
478 |
+
|
479 |
+
|
480 |
+
|
481 |
+
|
482 |
+
|
483 |
+
</p>
|
484 |
+
|
485 |
+
|
486 |
+
|
487 |
+
<p class="scenario-container">
|
488 |
+
|
489 |
+
|
490 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
491 |
+
|
492 |
+
|
493 |
+
<span class="text">
|
494 |
+
<span class="keyword highlight">When </span>
|
495 |
+
i open "menu-plugins" and deactivate plugin with slug "flexible-checkout-fields"
|
496 |
+
|
497 |
+
<span class="step-duration">
|
498 |
+
1s
|
499 |
+
</span>
|
500 |
+
|
501 |
+
|
502 |
+
|
503 |
+
|
504 |
+
</span>
|
505 |
+
|
506 |
+
|
507 |
+
|
508 |
+
|
509 |
+
|
510 |
+
|
511 |
+
|
512 |
+
|
513 |
+
|
514 |
+
|
515 |
+
</p>
|
516 |
+
|
517 |
+
|
518 |
+
|
519 |
+
<p class="scenario-container">
|
520 |
+
|
521 |
+
|
522 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
523 |
+
|
524 |
+
|
525 |
+
<span class="text">
|
526 |
+
<span class="keyword highlight">Then </span>
|
527 |
+
check if plugin with slug "flexible-checkout-fields" is Inactive
|
528 |
+
|
529 |
+
<span class="step-duration">
|
530 |
+
0s
|
531 |
+
</span>
|
532 |
+
|
533 |
+
|
534 |
+
|
535 |
+
|
536 |
+
</span>
|
537 |
+
|
538 |
+
|
539 |
+
|
540 |
+
|
541 |
+
|
542 |
+
|
543 |
+
|
544 |
+
|
545 |
+
|
546 |
+
|
547 |
+
</p>
|
548 |
+
|
549 |
+
|
550 |
+
|
551 |
+
|
552 |
+
</div>
|
553 |
+
</div>
|
554 |
+
</div>
|
555 |
+
|
556 |
+
</div>
|
557 |
+
</div>
|
558 |
+
</div>
|
559 |
+
</div>
|
560 |
+
|
561 |
+
|
562 |
+
|
563 |
+
<div class="col-lg-6 col-md-6">
|
564 |
+
<div class="panel panel-default">
|
565 |
+
<div class="panel-heading">
|
566 |
+
<h4 class="panel-title">
|
567 |
+
<div class="tags"> <span class="tag">@flexible-checkout-fields</span> </div>
|
568 |
+
<a data-toggle="collapse" href="#collapseFeature1">
|
569 |
+
<i class="glyphicon glyphicon-chevron-right"></i>
|
570 |
+
<i class="glyphicon glyphicon-chevron-down"></i>
|
571 |
+
<b>Feature:</b>Tracker message Flexible Checkout Fields tests
|
572 |
+
<span class="label-container">
|
573 |
+
<span class="label label-success">1</span>
|
574 |
+
<span class="label label-danger">1</span>
|
575 |
+
|
576 |
+
|
577 |
+
|
578 |
+
</span>
|
579 |
+
</a>
|
580 |
+
</h4>
|
581 |
+
</div>
|
582 |
+
<div id="collapseFeature1" class="panel-collapse collapse">
|
583 |
+
<div class="panel-body">
|
584 |
+
|
585 |
+
|
586 |
+
<div class="panel panel-default">
|
587 |
+
<div class="panel-heading">
|
588 |
+
<h4 class="panel-title">
|
589 |
+
<div class="tags"> </div>
|
590 |
+
<a data-toggle="collapse" href="#collapseScenario1_0">
|
591 |
+
<i class="glyphicon glyphicon-chevron-right"></i>
|
592 |
+
<i class="glyphicon glyphicon-chevron-down"></i>
|
593 |
+
<b>Scenario:</b>Tracker message is Visible
|
594 |
+
<span class="label-container">
|
595 |
+
<span class="label label-success" title="Passed">8</span>
|
596 |
+
|
597 |
+
|
598 |
+
|
599 |
+
|
600 |
+
</span>
|
601 |
+
</a>
|
602 |
+
</h4>
|
603 |
+
</div>
|
604 |
+
<div id="collapseScenario1_0" class="panel-collapse collapse">
|
605 |
+
<div class="panel-body">
|
606 |
+
|
607 |
+
|
608 |
+
|
609 |
+
|
610 |
+
|
611 |
+
<p class="scenario-container">
|
612 |
+
|
613 |
+
|
614 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
615 |
+
|
616 |
+
|
617 |
+
<span class="text">
|
618 |
+
<span class="keyword highlight">Given </span>
|
619 |
+
user is logged in to wordPress
|
620 |
+
|
621 |
+
<span class="step-duration">
|
622 |
+
0s
|
623 |
+
</span>
|
624 |
+
|
625 |
+
|
626 |
+
|
627 |
+
|
628 |
+
</span>
|
629 |
+
|
630 |
+
|
631 |
+
|
632 |
+
|
633 |
+
|
634 |
+
|
635 |
+
|
636 |
+
|
637 |
+
|
638 |
+
|
639 |
+
</p>
|
640 |
+
|
641 |
+
|
642 |
+
|
643 |
+
<p class="scenario-container">
|
644 |
+
|
645 |
+
|
646 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
647 |
+
|
648 |
+
|
649 |
+
<span class="text">
|
650 |
+
<span class="keyword highlight">And </span>
|
651 |
+
i resets the consent to collect data in the database
|
652 |
+
|
653 |
+
<span class="step-duration">
|
654 |
+
0s
|
655 |
+
</span>
|
656 |
+
|
657 |
+
|
658 |
+
|
659 |
+
|
660 |
+
</span>
|
661 |
+
|
662 |
+
|
663 |
+
|
664 |
+
|
665 |
+
|
666 |
+
|
667 |
+
|
668 |
+
|
669 |
+
|
670 |
+
|
671 |
+
</p>
|
672 |
+
|
673 |
+
|
674 |
+
|
675 |
+
<p class="scenario-container">
|
676 |
+
|
677 |
+
|
678 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
679 |
+
|
680 |
+
|
681 |
+
<span class="text">
|
682 |
+
<span class="keyword highlight">When </span>
|
683 |
+
i open "menu-plugins" and activate plugin with slug "flexible-checkout-fields"
|
684 |
+
|
685 |
+
<span class="step-duration">
|
686 |
+
1s
|
687 |
+
</span>
|
688 |
+
|
689 |
+
|
690 |
+
|
691 |
+
|
692 |
+
</span>
|
693 |
+
|
694 |
+
|
695 |
+
|
696 |
+
|
697 |
+
|
698 |
+
|
699 |
+
|
700 |
+
|
701 |
+
|
702 |
+
|
703 |
+
</p>
|
704 |
+
|
705 |
+
|
706 |
+
|
707 |
+
<p class="scenario-container">
|
708 |
+
|
709 |
+
|
710 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
711 |
+
|
712 |
+
|
713 |
+
<span class="text">
|
714 |
+
<span class="keyword highlight">Then </span>
|
715 |
+
tracker message type "short" visible
|
716 |
+
|
717 |
+
<span class="step-duration">
|
718 |
+
0s
|
719 |
+
</span>
|
720 |
+
|
721 |
+
|
722 |
+
|
723 |
+
|
724 |
+
</span>
|
725 |
+
|
726 |
+
|
727 |
+
|
728 |
+
|
729 |
+
|
730 |
+
|
731 |
+
|
732 |
+
|
733 |
+
|
734 |
+
|
735 |
+
</p>
|
736 |
+
|
737 |
+
|
738 |
+
|
739 |
+
<p class="scenario-container">
|
740 |
+
|
741 |
+
|
742 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
743 |
+
|
744 |
+
|
745 |
+
<span class="text">
|
746 |
+
<span class="keyword highlight">And </span>
|
747 |
+
Check if buttons skip and Allow & Continue visible in tracker message
|
748 |
+
|
749 |
+
<span class="step-duration">
|
750 |
+
0s
|
751 |
+
</span>
|
752 |
+
|
753 |
+
|
754 |
+
|
755 |
+
|
756 |
+
</span>
|
757 |
+
|
758 |
+
|
759 |
+
|
760 |
+
|
761 |
+
|
762 |
+
|
763 |
+
|
764 |
+
|
765 |
+
|
766 |
+
|
767 |
+
</p>
|
768 |
+
|
769 |
+
|
770 |
+
|
771 |
+
<p class="scenario-container">
|
772 |
+
|
773 |
+
|
774 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
775 |
+
|
776 |
+
|
777 |
+
<span class="text">
|
778 |
+
<span class="keyword highlight">But </span>
|
779 |
+
i open "menu-plugins" and deactivate plugin with slug "flexible-checkout-fields"
|
780 |
+
|
781 |
+
<span class="step-duration">
|
782 |
+
1s
|
783 |
+
</span>
|
784 |
+
|
785 |
+
|
786 |
+
|
787 |
+
|
788 |
+
</span>
|
789 |
+
|
790 |
+
|
791 |
+
|
792 |
+
|
793 |
+
|
794 |
+
|
795 |
+
|
796 |
+
|
797 |
+
|
798 |
+
|
799 |
+
</p>
|
800 |
+
|
801 |
+
|
802 |
+
|
803 |
+
|
804 |
+
</div>
|
805 |
+
</div>
|
806 |
+
</div>
|
807 |
+
|
808 |
+
<div class="panel panel-default">
|
809 |
+
<div class="panel-heading">
|
810 |
+
<h4 class="panel-title">
|
811 |
+
<div class="tags"> </div>
|
812 |
+
<a data-toggle="collapse" href="#collapseScenario1_1">
|
813 |
+
<i class="glyphicon glyphicon-chevron-right"></i>
|
814 |
+
<i class="glyphicon glyphicon-chevron-down"></i>
|
815 |
+
<b>Scenario:</b>Tracker long message is Visible
|
816 |
+
<span class="label-container">
|
817 |
+
<span class="label label-success" title="Passed">7</span>
|
818 |
+
|
819 |
+
|
820 |
+
<span class="label label-warning" title="Skipped">1</span>
|
821 |
+
<span class="label label-danger" title="Failed">1</span>
|
822 |
+
</span>
|
823 |
+
</a>
|
824 |
+
</h4>
|
825 |
+
</div>
|
826 |
+
<div id="collapseScenario1_1" class="panel-collapse collapse">
|
827 |
+
<div class="panel-body">
|
828 |
+
|
829 |
+
|
830 |
+
|
831 |
+
|
832 |
+
|
833 |
+
<p class="scenario-container">
|
834 |
+
|
835 |
+
|
836 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
837 |
+
|
838 |
+
|
839 |
+
<span class="text">
|
840 |
+
<span class="keyword highlight">Given </span>
|
841 |
+
user is logged in to wordPress
|
842 |
+
|
843 |
+
<span class="step-duration">
|
844 |
+
0s
|
845 |
+
</span>
|
846 |
+
|
847 |
+
|
848 |
+
|
849 |
+
|
850 |
+
</span>
|
851 |
+
|
852 |
+
|
853 |
+
|
854 |
+
|
855 |
+
|
856 |
+
|
857 |
+
|
858 |
+
|
859 |
+
|
860 |
+
|
861 |
+
</p>
|
862 |
+
|
863 |
+
|
864 |
+
|
865 |
+
<p class="scenario-container">
|
866 |
+
|
867 |
+
|
868 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
869 |
+
|
870 |
+
|
871 |
+
<span class="text">
|
872 |
+
<span class="keyword highlight">And </span>
|
873 |
+
i resets the consent to collect data in the database
|
874 |
+
|
875 |
+
<span class="step-duration">
|
876 |
+
0s
|
877 |
+
</span>
|
878 |
+
|
879 |
+
|
880 |
+
|
881 |
+
|
882 |
+
</span>
|
883 |
+
|
884 |
+
|
885 |
+
|
886 |
+
|
887 |
+
|
888 |
+
|
889 |
+
|
890 |
+
|
891 |
+
|
892 |
+
|
893 |
+
</p>
|
894 |
+
|
895 |
+
|
896 |
+
|
897 |
+
<p class="scenario-container">
|
898 |
+
|
899 |
+
|
900 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
901 |
+
|
902 |
+
|
903 |
+
<span class="text">
|
904 |
+
<span class="keyword highlight">When </span>
|
905 |
+
i open "menu-plugins" and activate plugin with slug "flexible-checkout-fields"
|
906 |
+
|
907 |
+
<span class="step-duration">
|
908 |
+
1s
|
909 |
+
</span>
|
910 |
+
|
911 |
+
|
912 |
+
|
913 |
+
|
914 |
+
</span>
|
915 |
+
|
916 |
+
|
917 |
+
|
918 |
+
|
919 |
+
|
920 |
+
|
921 |
+
|
922 |
+
|
923 |
+
|
924 |
+
|
925 |
+
</p>
|
926 |
+
|
927 |
+
|
928 |
+
|
929 |
+
<p class="scenario-container">
|
930 |
+
|
931 |
+
|
932 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
933 |
+
|
934 |
+
|
935 |
+
<span class="text">
|
936 |
+
<span class="keyword highlight">And </span>
|
937 |
+
Skip tracker message
|
938 |
+
|
939 |
+
<span class="step-duration">
|
940 |
+
2s
|
941 |
+
</span>
|
942 |
+
|
943 |
+
|
944 |
+
|
945 |
+
|
946 |
+
</span>
|
947 |
+
|
948 |
+
|
949 |
+
|
950 |
+
|
951 |
+
|
952 |
+
|
953 |
+
|
954 |
+
|
955 |
+
|
956 |
+
|
957 |
+
</p>
|
958 |
+
|
959 |
+
|
960 |
+
|
961 |
+
<p class="scenario-container">
|
962 |
+
|
963 |
+
|
964 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
965 |
+
|
966 |
+
|
967 |
+
<span class="text">
|
968 |
+
<span class="keyword highlight">And </span>
|
969 |
+
i open submenu "Checkout Fields" from menu "toplevel_page_woocommerce"
|
970 |
+
|
971 |
+
<span class="step-duration">
|
972 |
+
1s
|
973 |
+
</span>
|
974 |
+
|
975 |
+
|
976 |
+
|
977 |
+
|
978 |
+
</span>
|
979 |
+
|
980 |
+
|
981 |
+
|
982 |
+
|
983 |
+
|
984 |
+
|
985 |
+
|
986 |
+
|
987 |
+
|
988 |
+
|
989 |
+
</p>
|
990 |
+
|
991 |
+
|
992 |
+
|
993 |
+
<p class="scenario-container">
|
994 |
+
|
995 |
+
|
996 |
+
<span class="label label-danger" title="Failed"><i class="glyphicon glyphicon-remove"></i></span>
|
997 |
+
|
998 |
+
|
999 |
+
<span class="text">
|
1000 |
+
<span class="keyword highlight">Then </span>
|
1001 |
+
tracker message type "long" visible
|
1002 |
+
|
1003 |
+
<span class="step-duration">
|
1004 |
+
0s
|
1005 |
+
</span>
|
1006 |
+
|
1007 |
+
|
1008 |
+
|
1009 |
+
|
1010 |
+
</span>
|
1011 |
+
|
1012 |
+
|
1013 |
+
|
1014 |
+
|
1015 |
+
<a href="#error1_16" data-toggle="collapse">+ Show Error</a>
|
1016 |
+
<div id="error1_16" class="collapse">
|
1017 |
+
<pre class=info>AssertionError: expected 'Hey admin,\nWe need your help to improve WP Desk plugins, so they are more useful for you and the rest of 30,000+ users. By collecting data on how you use our plugins, you will help us a lot. We will not collect any sensitive data, so you can feel safe. Find out more »\nAllow\nDismiss this notice.' to include '\nWe need your help to improve WP Desk plugins, so they are more useful for you and the rest of 18,000+ users. By collecting data on how you use our plugins, you will help us a lot. We will not collect any sensitive data, so you can feel safe. Find out more'</pre>
|
1018 |
+
</div>
|
1019 |
+
|
1020 |
+
|
1021 |
+
|
1022 |
+
|
1023 |
+
|
1024 |
+
|
1025 |
+
|
1026 |
+
</p>
|
1027 |
+
|
1028 |
+
|
1029 |
+
|
1030 |
+
<p class="scenario-container">
|
1031 |
+
|
1032 |
+
|
1033 |
+
<span class="label label-warning" title="Skipped"><i class="glyphicon glyphicon-minus"></i></span>
|
1034 |
+
|
1035 |
+
|
1036 |
+
<span class="text">
|
1037 |
+
<span class="keyword highlight">And </span>
|
1038 |
+
i open "menu-plugins" and deactivate plugin with slug "flexible-checkout-fields"
|
1039 |
+
|
1040 |
+
|
1041 |
+
|
1042 |
+
|
1043 |
+
</span>
|
1044 |
+
|
1045 |
+
|
1046 |
+
|
1047 |
+
|
1048 |
+
|
1049 |
+
|
1050 |
+
|
1051 |
+
|
1052 |
+
|
1053 |
+
|
1054 |
+
</p>
|
1055 |
+
|
1056 |
+
|
1057 |
+
|
1058 |
+
<p class="scenario-container">
|
1059 |
+
|
1060 |
+
|
1061 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
1062 |
+
|
1063 |
+
|
1064 |
+
<span class="text">
|
1065 |
+
<span class="keyword highlight">After </span>
|
1066 |
+
|
1067 |
+
|
1068 |
+
<span class="step-duration">
|
1069 |
+
2s
|
1070 |
+
</span>
|
1071 |
+
|
1072 |
+
|
1073 |
+
|
1074 |
+
|
1075 |
+
</span>
|
1076 |
+
|
1077 |
+
|
1078 |
+
|
1079 |
+
|
1080 |
+
|
1081 |
+
|
1082 |
+
|
1083 |
+
|
1084 |
+
<a class="toggle" href="#">Screenshot -</a>
|
1085 |
+
<a class="screenshot" href="screenshot/After_2464.png">
|
1086 |
+
<img class="screenshot" style="height:100%;width:100%" id="my_images" src="screenshot/After_2464.png"/>
|
1087 |
+
</a>
|
1088 |
+
|
1089 |
+
|
1090 |
+
|
1091 |
+
</p>
|
1092 |
+
|
1093 |
+
|
1094 |
+
</div>
|
1095 |
+
</div>
|
1096 |
+
</div>
|
1097 |
+
|
1098 |
+
</div>
|
1099 |
+
</div>
|
1100 |
+
</div>
|
1101 |
+
</div>
|
1102 |
+
|
1103 |
+
</div>
|
1104 |
+
|
1105 |
+
|
1106 |
+
|
1107 |
+
|
1108 |
+
</div>
|
1109 |
+
|
1110 |
+
<!--<footer class="footer">-->
|
1111 |
+
<!--<div class="footer-text">-->
|
1112 |
+
<!--<p class="text-muted"> Report generated by cucumber-html-reporter</p>-->
|
1113 |
+
<!--</div>-->
|
1114 |
+
<!--</footer>-->
|
1115 |
+
|
1116 |
+
<div class="navbar-fixed-bottom row-fluid footer-div ">
|
1117 |
+
<div class="navbar-inner">
|
1118 |
+
<div class="footer-container">
|
1119 |
+
<a target="_blank" href="https://www.npmjs.com/package/cucumber-html-reporter">
|
1120 |
+
<div class="text-muted footer-link">
|
1121 |
+
generated by @cucumber-html-reporter
|
1122 |
+
</div>
|
1123 |
+
</a>
|
1124 |
+
</div>
|
1125 |
+
</div>
|
1126 |
+
</div>
|
1127 |
+
|
1128 |
+
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
|
1129 |
+
<script src="https://netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
|
1130 |
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.5.1/moment.min.js"></script>
|
1131 |
+
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
|
1132 |
+
<script type="text/javascript">
|
1133 |
+
google.load("visualization", "1", {packages: ["corechart"]});
|
1134 |
+
google.setOnLoadCallback(function() {drawChart({
|
1135 |
+
"title" : "Features",
|
1136 |
+
"failed" : 1,
|
1137 |
+
"passed" : 1
|
1138 |
+
})
|
1139 |
+
});
|
1140 |
+
google.setOnLoadCallback(function() {drawChart({
|
1141 |
+
"title" : "Scenarios",
|
1142 |
+
"failed" : 1,
|
1143 |
+
"passed" : 3,
|
1144 |
+
"notdefined" : 0,
|
1145 |
+
"skipped" : 0
|
1146 |
+
})
|
1147 |
+
});
|
1148 |
+
</script>
|
1149 |
+
<script>
|
1150 |
+
$(document).ready(function() {
|
1151 |
+
$('.collapse').on('hide.bs.collapse', function(e) {
|
1152 |
+
e.stopPropagation();
|
1153 |
+
$(this).prev().removeClass('open');
|
1154 |
+
}).on('show.bs.collapse', function(e) {
|
1155 |
+
e.stopPropagation();
|
1156 |
+
$(this).prev().addClass('open');
|
1157 |
+
});
|
1158 |
+
|
1159 |
+
$('a.toggle').on('click', function() {
|
1160 |
+
if ($(this).text() === 'Screenshot -') {
|
1161 |
+
$(this).text('Screenshot +');
|
1162 |
+
$(this).siblings('a.screenshot').find('img').hide();
|
1163 |
+
} else {
|
1164 |
+
$(this).text('Screenshot -');
|
1165 |
+
$(this).siblings('a.screenshot').find('img').show();
|
1166 |
+
}
|
1167 |
+
});
|
1168 |
+
var $generated = $('.generated-on');
|
1169 |
+
|
1170 |
+
$generated.text('Generated ' + moment($generated.text()).fromNow());
|
1171 |
+
|
1172 |
+
|
1173 |
+
});
|
1174 |
+
|
1175 |
+
function drawChart(chartData) {
|
1176 |
+
var data = google.visualization.arrayToDataTable([
|
1177 |
+
['Task', 'Cucumber Results'],
|
1178 |
+
['Passed', chartData.passed],
|
1179 |
+
['Failed', chartData.failed],
|
1180 |
+
['Pending', chartData.notdefined],
|
1181 |
+
['Skipped', chartData.skipped]
|
1182 |
+
]);
|
1183 |
+
|
1184 |
+
var total = chartData.passed + chartData.failed + (chartData.notdefined || 0) + (chartData.skipped || 0);
|
1185 |
+
var title;
|
1186 |
+
|
1187 |
+
if (total === 1) {
|
1188 |
+
title = total + ' ' + chartData.title.slice(0, -1)
|
1189 |
+
} else {
|
1190 |
+
title = total + ' ' + chartData.title;
|
1191 |
+
}
|
1192 |
+
|
1193 |
+
var options = {
|
1194 |
+
width: '100%',
|
1195 |
+
height: 240,
|
1196 |
+
title: title,
|
1197 |
+
is3D: true,
|
1198 |
+
colors: ['#5cb85c', '#d9534f', '#5bc0de', '#f0ad4e'],
|
1199 |
+
fontSize: '13',
|
1200 |
+
fontName: '"Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif',
|
1201 |
+
slices: {
|
1202 |
+
1: {offset: 0.4},
|
1203 |
+
2: {offset: 0.4},
|
1204 |
+
3: {offset: 0.4}
|
1205 |
+
},
|
1206 |
+
titleTextStyle: {
|
1207 |
+
fontSize: '13',
|
1208 |
+
color: '#5e5e5e'
|
1209 |
+
}
|
1210 |
+
};
|
1211 |
+
|
1212 |
+
var chart = new google.visualization.PieChart(document.getElementById('piechart_' + chartData.title.toLowerCase()));
|
1213 |
+
chart.draw(data, options);
|
1214 |
+
}
|
1215 |
+
</script>
|
1216 |
+
</body>
|
1217 |
+
</html>
|
acceptance/reports/html/plugins_tests_report.html
ADDED
@@ -0,0 +1,1107 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!doctype html>
|
2 |
+
<html>
|
3 |
+
<head>
|
4 |
+
<title>Cucumber Report</title>
|
5 |
+
<meta charset="UTF-8"/>
|
6 |
+
|
7 |
+
<style type="text/css">
|
8 |
+
body {
|
9 |
+
font-family: Arial, sans-serif;
|
10 |
+
margin: 0;
|
11 |
+
background-color: #fff;
|
12 |
+
color: #282828;
|
13 |
+
}
|
14 |
+
|
15 |
+
.feature-navigator {
|
16 |
+
position: fixed;
|
17 |
+
overflow-y: auto;
|
18 |
+
height: 100%;
|
19 |
+
width: 20%;
|
20 |
+
float: left;
|
21 |
+
}
|
22 |
+
|
23 |
+
.report-container {
|
24 |
+
margin-top: 60px;
|
25 |
+
margin-left: 20%;
|
26 |
+
width: 75%;
|
27 |
+
float: left;
|
28 |
+
padding-left: 20px;
|
29 |
+
}
|
30 |
+
|
31 |
+
a, a:hover, a:visited {
|
32 |
+
color: #000;
|
33 |
+
text-decoration: none;
|
34 |
+
}
|
35 |
+
|
36 |
+
table {
|
37 |
+
width: 100%;
|
38 |
+
border-collapse: collapse;
|
39 |
+
}
|
40 |
+
|
41 |
+
th {
|
42 |
+
text-align: left;
|
43 |
+
background-color: #eee;
|
44 |
+
color: #999;
|
45 |
+
text-transform: capitalize;
|
46 |
+
}
|
47 |
+
|
48 |
+
th, td {
|
49 |
+
padding: 5px 10px;
|
50 |
+
border-bottom: rgba(162, 162, 162, 0.16) 1px solid;
|
51 |
+
}
|
52 |
+
|
53 |
+
tr.failed { cursor: pointer; }
|
54 |
+
|
55 |
+
tr td.passed,
|
56 |
+
.passed,
|
57 |
+
tr.passed,
|
58 |
+
.summary .passed {
|
59 |
+
background-color: rgb(150, 250, 150);
|
60 |
+
}
|
61 |
+
|
62 |
+
tr td.failed,
|
63 |
+
tr.failed,
|
64 |
+
.summary .failed {
|
65 |
+
background-color: rgb(250, 150, 150);
|
66 |
+
}
|
67 |
+
|
68 |
+
td.status {
|
69 |
+
text-transform: capitalize;
|
70 |
+
}
|
71 |
+
|
72 |
+
.datatable {
|
73 |
+
margin-left: 2em;
|
74 |
+
width: auto;
|
75 |
+
border-width: 1pt;
|
76 |
+
margin-top: 0.6em;
|
77 |
+
font-size: 80%;
|
78 |
+
}
|
79 |
+
.datatable td {
|
80 |
+
border: rgba(162, 162, 162, 0.16) 1px solid;
|
81 |
+
}
|
82 |
+
|
83 |
+
h1 {
|
84 |
+
margin: 0;
|
85 |
+
padding: 20px 10px 10px 10px;
|
86 |
+
color: #282828;
|
87 |
+
}
|
88 |
+
|
89 |
+
h2 {
|
90 |
+
margin-top: 5px;
|
91 |
+
margin-bottom: 5px;
|
92 |
+
}
|
93 |
+
|
94 |
+
h2.component {
|
95 |
+
color: #282828;
|
96 |
+
padding: 0 10px 10px 10px;
|
97 |
+
}
|
98 |
+
|
99 |
+
h3 { margin: 25px 0 10px 0; }
|
100 |
+
|
101 |
+
img {
|
102 |
+
max-width: 100%;
|
103 |
+
margin-top: 10px;
|
104 |
+
}
|
105 |
+
|
106 |
+
.filename {
|
107 |
+
margin: 0 0 10px 0;
|
108 |
+
color: #999;
|
109 |
+
}
|
110 |
+
|
111 |
+
span.tags {
|
112 |
+
float: right;
|
113 |
+
font-size: 15px;
|
114 |
+
color: #888;
|
115 |
+
}
|
116 |
+
|
117 |
+
span.scenario-tag {
|
118 |
+
float: right;
|
119 |
+
font-size: 15px;
|
120 |
+
color: #888;
|
121 |
+
margin-left: 0.5em;
|
122 |
+
}
|
123 |
+
|
124 |
+
p.story {
|
125 |
+
font-size: 20px;
|
126 |
+
color: #888;
|
127 |
+
font-style: italic;
|
128 |
+
padding-left: 20px;
|
129 |
+
}
|
130 |
+
|
131 |
+
div.report {
|
132 |
+
width: 100%;
|
133 |
+
float: left;
|
134 |
+
padding: 10px;
|
135 |
+
background: #fff;
|
136 |
+
}
|
137 |
+
|
138 |
+
td.result,
|
139 |
+
.duration { text-align: right; }
|
140 |
+
|
141 |
+
.hidden { display: none; }
|
142 |
+
|
143 |
+
.header {
|
144 |
+
width: 100%;
|
145 |
+
float: left;
|
146 |
+
}
|
147 |
+
|
148 |
+
.header .logo {
|
149 |
+
margin: 0 auto;
|
150 |
+
max-width: 90%;
|
151 |
+
padding-left: 10px;
|
152 |
+
}
|
153 |
+
|
154 |
+
.summary,
|
155 |
+
.feature-list,
|
156 |
+
.scenario-list {
|
157 |
+
list-style-type: none;
|
158 |
+
margin: 0;
|
159 |
+
padding: 10px;
|
160 |
+
}
|
161 |
+
|
162 |
+
.summary li,
|
163 |
+
.feature-list li,
|
164 |
+
.scenario-list li { padding: 10px; }
|
165 |
+
|
166 |
+
.scenario-list li a { color: #999; }
|
167 |
+
|
168 |
+
.summary li { padding: 5px 10px; }
|
169 |
+
|
170 |
+
.feature-list li {
|
171 |
+
border-top: rgba(162, 162, 162, 0.16) 1px solid;
|
172 |
+
border-bottom: rgba(162, 162, 162, 0.16) 1px solid;
|
173 |
+
}
|
174 |
+
|
175 |
+
.scenario-list li { border: none; }
|
176 |
+
|
177 |
+
.scenario-list { padding: 10px 0; }
|
178 |
+
|
179 |
+
.summary li,
|
180 |
+
.feature-list li { font-weight: bold; }
|
181 |
+
|
182 |
+
.scenario-list li { font-weight: normal; }
|
183 |
+
|
184 |
+
.feature-list > li.passed { border-left: 5px solid rgb(150, 250, 150); }
|
185 |
+
.feature-list > li.failed { border-left: 5px solid rgb(250, 150, 150); }
|
186 |
+
|
187 |
+
.scenario-list > li.passed a { color: #999; }
|
188 |
+
.scenario-list > li.failed a { color: rgb(250, 150, 150); }
|
189 |
+
|
190 |
+
.summary span.passed {
|
191 |
+
color: rgb(150, 250, 150);
|
192 |
+
background-color: transparent;
|
193 |
+
text-transform: capitalize;
|
194 |
+
}
|
195 |
+
|
196 |
+
.summary span.failed {
|
197 |
+
color: rgb(250, 150, 150);
|
198 |
+
background-color: transparent;
|
199 |
+
text-transform: capitalize;
|
200 |
+
}
|
201 |
+
|
202 |
+
.footer {
|
203 |
+
color: #3C494C;
|
204 |
+
text-align: center;
|
205 |
+
padding: 20px 0;
|
206 |
+
float: left;
|
207 |
+
width: 100%;
|
208 |
+
}
|
209 |
+
|
210 |
+
.footer a, footer a:visited { color: #3C494C; }
|
211 |
+
|
212 |
+
.copy-to-clipboard { /* as small as possible - when hidden, copy will not work */
|
213 |
+
width: 2em;
|
214 |
+
height: 2em;
|
215 |
+
position: fixed;
|
216 |
+
top: 0;
|
217 |
+
left: 0;
|
218 |
+
border: none;
|
219 |
+
outline: none;
|
220 |
+
box-shadow: none;
|
221 |
+
}
|
222 |
+
|
223 |
+
tr td.skipped,
|
224 |
+
.skipped {
|
225 |
+
background-color: rgb(250, 250, 150);
|
226 |
+
}
|
227 |
+
|
228 |
+
@media (max-width: 500px) {
|
229 |
+
.feature-navigator {
|
230 |
+
position: relative;
|
231 |
+
height: auto;
|
232 |
+
width: 100%;
|
233 |
+
clear: both;
|
234 |
+
overflow: auto;
|
235 |
+
}
|
236 |
+
.report-container {
|
237 |
+
margin-top: 1em;
|
238 |
+
margin-left: auto;
|
239 |
+
width: 100%
|
240 |
+
}
|
241 |
+
}
|
242 |
+
|
243 |
+
.print-button {
|
244 |
+
background-color: transparent;
|
245 |
+
color: #428bca;
|
246 |
+
transition: all .5s;
|
247 |
+
display: inline-block;
|
248 |
+
padding: .375rem 1rem;
|
249 |
+
font-size: 1rem;
|
250 |
+
font-weight: normal;
|
251 |
+
line-height: 1.5;
|
252 |
+
text-align: center;
|
253 |
+
white-space: nowrap;
|
254 |
+
vertical-align: middle;
|
255 |
+
cursor: pointer;
|
256 |
+
-webkit-user-select: none;
|
257 |
+
-moz-user-select: none;
|
258 |
+
-ms-user-select: none;
|
259 |
+
user-select: none;
|
260 |
+
border: 1px solid #428bca;
|
261 |
+
border-radius: .25rem;
|
262 |
+
margin: 20px 0 0 20px;
|
263 |
+
}
|
264 |
+
|
265 |
+
.print-button:hover {
|
266 |
+
background-color: #428bca;
|
267 |
+
color: #fff;
|
268 |
+
border-color: #428bca;
|
269 |
+
text-decoration: none;
|
270 |
+
}
|
271 |
+
|
272 |
+
.print-button:focus {
|
273 |
+
outline: none;
|
274 |
+
}
|
275 |
+
|
276 |
+
@media print {
|
277 |
+
.print-button {
|
278 |
+
display: none;
|
279 |
+
}
|
280 |
+
}
|
281 |
+
.print-button {
|
282 |
+
background-color: transparent;
|
283 |
+
color: #428bca;
|
284 |
+
transition: all .5s;
|
285 |
+
display: inline-block;
|
286 |
+
padding: .375rem 1rem;
|
287 |
+
font-size: 1rem;
|
288 |
+
font-weight: normal;
|
289 |
+
line-height: 1.5;
|
290 |
+
text-align: center;
|
291 |
+
white-space: nowrap;
|
292 |
+
vertical-align: middle;
|
293 |
+
cursor: pointer;
|
294 |
+
-webkit-user-select: none;
|
295 |
+
-moz-user-select: none;
|
296 |
+
-ms-user-select: none;
|
297 |
+
user-select: none;
|
298 |
+
border: 1px solid #428bca;
|
299 |
+
border-radius: .25rem;
|
300 |
+
margin: 20px 0 0 20px;
|
301 |
+
}
|
302 |
+
|
303 |
+
.print-button:hover {
|
304 |
+
background-color: #428bca;
|
305 |
+
color: #fff;
|
306 |
+
border-color: #428bca;
|
307 |
+
text-decoration: none;
|
308 |
+
}
|
309 |
+
|
310 |
+
.print-button:focus {
|
311 |
+
outline: none;
|
312 |
+
}
|
313 |
+
|
314 |
+
.summary-table .main-header th,
|
315 |
+
.summary-table .sub-header th:nth-child(2),
|
316 |
+
.summary-table table tr td:nth-child(2),
|
317 |
+
.summary-table .sub-header th:nth-child(5),
|
318 |
+
.summary-table table tr td:nth-child(5),
|
319 |
+
.summary-table .sub-header th:nth-child(9),
|
320 |
+
.summary-table table tr td:nth-child(9) {
|
321 |
+
border-left: 1px solid #999999;
|
322 |
+
}
|
323 |
+
|
324 |
+
.summary-table .main-header th:first-child {
|
325 |
+
border-left: none;
|
326 |
+
}
|
327 |
+
|
328 |
+
.screenshots {
|
329 |
+
display: block;
|
330 |
+
position: relative;
|
331 |
+
margin-top: 60px;
|
332 |
+
margin-left: 20%;
|
333 |
+
max-width: 75%;
|
334 |
+
float: left;
|
335 |
+
}
|
336 |
+
|
337 |
+
.screenshots .image-container {
|
338 |
+
padding: 10px;
|
339 |
+
}
|
340 |
+
|
341 |
+
.screenshot-link a {
|
342 |
+
text-decoration: underline;
|
343 |
+
color: #0000ff;
|
344 |
+
}
|
345 |
+
|
346 |
+
@media print {
|
347 |
+
|
348 |
+
.feature-navigator {
|
349 |
+
position: relative;
|
350 |
+
height: auto;
|
351 |
+
width: 100%;
|
352 |
+
float: none;
|
353 |
+
display:block;
|
354 |
+
clear: both;
|
355 |
+
}
|
356 |
+
|
357 |
+
.report-container {
|
358 |
+
margin-top: 20px;
|
359 |
+
margin-left:0;
|
360 |
+
width: 100%;
|
361 |
+
float: none;
|
362 |
+
}
|
363 |
+
|
364 |
+
.feature-navigator .logo {
|
365 |
+
max-height:72px;
|
366 |
+
display:block;
|
367 |
+
}
|
368 |
+
|
369 |
+
.feature-navigator h1, .feature-navigator h2 {
|
370 |
+
display: block;
|
371 |
+
text-align:center;
|
372 |
+
}
|
373 |
+
|
374 |
+
.feature-navigator h2 {
|
375 |
+
font-size:18px;
|
376 |
+
}
|
377 |
+
|
378 |
+
.feature-navigator .summary {
|
379 |
+
border-top: 3px solid #333;
|
380 |
+
border-bottom: 3px solid #333;
|
381 |
+
display: table;
|
382 |
+
width: 100%;
|
383 |
+
}
|
384 |
+
|
385 |
+
.feature-navigator .summary > li {
|
386 |
+
display: table-cell;
|
387 |
+
text-align: center;
|
388 |
+
}
|
389 |
+
|
390 |
+
.print-button {
|
391 |
+
display: none;
|
392 |
+
}
|
393 |
+
|
394 |
+
.hidden.failed {
|
395 |
+
display: table-row;
|
396 |
+
}
|
397 |
+
|
398 |
+
.print-hide {
|
399 |
+
display: none !important;
|
400 |
+
}
|
401 |
+
}
|
402 |
+
</style></head>
|
403 |
+
<body>
|
404 |
+
<aside class="feature-navigator">
|
405 |
+
<header class="header">
|
406 |
+
<button class="print-button" type="button" onclick="window.scrollTo(0, 0); window.print();">Print Report</button>
|
407 |
+
|
408 |
+
<img class="logo" src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjU5OXB4IiBoZWlnaHQ9IjE1MHB4IiB2aWV3Qm94PSIwIDAgNTk5IDE1MCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWxuczpza2V0Y2g9Imh0dHA6Ly93d3cuYm9oZW1pYW5jb2RpbmcuY29tL3NrZXRjaC9ucyI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDMuMi4yICg5OTgzKSAtIGh0dHA6Ly93d3cuYm9oZW1pYW5jb2RpbmcuY29tL3NrZXRjaCAtLT4KICAgIDx0aXRsZT5jdWN1bWJlcjwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxkZWZzPjwvZGVmcz4KICAgIDxnIGlkPSJMb2dvcyIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc2tldGNoOnR5cGU9Ik1TUGFnZSI+CiAgICAgICAgPGcgaWQ9ImN1Y3VtYmVyIiBza2V0Y2g6dHlwZT0iTVNMYXllckdyb3VwIj4KICAgICAgICAgICAgPGcgaWQ9Imc2MDUzIiBza2V0Y2g6dHlwZT0iTVNTaGFwZUdyb3VwIj4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik01MjQuNzExNzYxLDg3LjAwMTg4NzYgQzUxNy42NTI4NTksODcuMDAxODg3NiA1MTMuMTgyMjIsOTAuNTQxMTA3NCA1MDkuODg4MDY2LDk1Ljk2NzkxMTEgQzUwOS44ODgwNjYsOTQuNTUyMjIzMiA1MTAuNTkzOTU2LDkyLjkwMDU4NzIgNTEwLjU5Mzk1Niw5MS43MjA4NDczIEw1MTAuNTkzOTU2LDg5LjM2MTM2NzQgTDQ5OC44MjkxMTgsODkuMzYxMzY3NCBMNDk4LjgyOTExOCwxNDguMzQ4MzY0IEw1MTAuNTkzOTU2LDE0OC4zNDgzNjQgTDUxMC41OTM5NTYsMTE0LjM3MTg1NCBDNTEwLjU5Mzk1NiwxMDQuNjk3OTg3IDUxNS43NzA0ODUsOTguNzk5Mjg2OSA1MjQuNzExNzYxLDk4Ljc5OTI4NjkgTDUyNy4wNjQ3MjksOTguNzk5Mjg2OSBMNTI3LjA2NDcyOSw4Ny4wMDE4ODc2IEw1MjQuNzExNzYxLDg3LjAwMTg4NzYgTDUyNC43MTE3NjEsODcuMDAxODg3NiBaIiBpZD0icGF0aDU0NDMiIGZpbGw9IiMwMDAwMDAiPjwvcGF0aD4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik00Ni4zNTM0NjA1LDEwOC43MDkxMDIgQzQzLjA1OTMwNiwxMDMuNTE4MjQ3IDM4LjM1MzM3MDksOTkuOTc5MDI2OCAzMS41Mjk3NjUsOTkuOTc5MDI2OCBDMjAuNzA2MTE0NCw5OS45NzkwMjY4IDEyLjk0MTMyMTUsMTA4LjIzNzIwNiAxMi45NDEzMjE1LDExOC42MTg5MTggQzEyLjk0MTMyMTUsMTI5LjAwMDYyOSAyMC43MDYxMTQ0LDEzNy4yNTg4MDkgMzEuNTI5NzY1LDEzNy4yNTg4MDkgQzM4LjM1MzM3MDksMTM3LjI1ODgwOSA0My4wNTkzMDYsMTMzLjk1NTUzNyA0Ni4zNTM0NjA1LDEyOC43NjQ2ODEgTDU3LjE3NzExMTIsMTM1LjEzNTI3NyBDNTIuMDAwNTgyNiwxNDMuMTU3NTA4IDQyLjM1MzQxNTcsMTQ5LjA1NjIwOCAzMS41Mjk3NjUsMTQ5LjA1NjIwOCBDMTEuNTI5NTQwOSwxNDkuMDU2MjA4IDcuMTA1NDI3MzZlLTE1LDEzMy45NTU1MzcgNy4xMDU0MjczNmUtMTUsMTE4Ljg1NDg2NiBDNy4xMDU0MjczNmUtMTUsMTAzLjc1NDE5NSAxMS43NjQ4Mzc3LDg4LjY1MzUyMzUgMzEuNTI5NzY1LDg4LjY1MzUyMzUgQzQzLjc2NTE5NjIsODguNjUzNTIzNSA1MS41Mjk5ODkxLDk0LjU1MjIyMzIgNTcuMTc3MTExMiwxMDIuNTc0NDU1IEw0Ni4zNTM0NjA1LDEwOC43MDkxMDIgTDQ2LjM1MzQ2MDUsMTA4LjcwOTEwMiBaIiBpZD0icGF0aDU0NDUiIGZpbGw9IiMwMDAwMDAiPjwvcGF0aD4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik02Ny41MzAxNjg0LDkwLjA2OTIxMTQgTDc5Ljc2NTU5OTYsOTAuMDY5MjExNCBMNzkuNzY1NTk5NiwxMjIuMTU4MTM4IEM3OS43NjU1OTk2LDEzMC42NTIyNjUgODUuODgzMzE1MiwxMzYuNTUwOTY1IDkzLjY0ODEwODEsMTM2LjU1MDk2NSBDMTAxLjE3NzYwNCwxMzYuNTUwOTY1IDEwNy41MzA2MTcsMTMwLjQxNjMxNyAxMDcuNTMwNjE3LDEyMi4xNTgxMzggTDEwNy41MzA2MTcsOTAuMDY5MjExNCBMMTE5Ljc2NjA0OCw5MC4wNjkyMTE0IEwxMTkuNzY2MDQ4LDEyMy4xMDE5MyBDMTE5Ljc2NjA0OCwxMzkuMTQ2MzkzIDEwNy4yOTUzMiwxNDguODIwMjYgOTMuNjQ4MTA4MSwxNDguODIwMjYgQzgwLjAwMDg5NjQsMTQ4LjgyMDI2IDY3LjUzMDE2ODQsMTM5LjE0NjM5MyA2Ny41MzAxNjg0LDEyMy4xMDE5MyBMNjcuNTMwMTY4NCw5MC4wNjkyMTE0IEw2Ny41MzAxNjg0LDkwLjA2OTIxMTQgWiIgaWQ9InBhdGg1NDQ3IiBmaWxsPSIjMDAwMDAwIj48L3BhdGg+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTc3LjE3ODQ1NiwxMDguNzA5MTAyIEMxNzMuODg0MzAxLDEwMy41MTgyNDcgMTY5LjE3ODM2Niw5OS45NzkwMjY4IDE2Mi4zNTQ3Niw5OS45NzkwMjY4IEMxNTEuNTMxMTEsOTkuOTc5MDI2OCAxNDMuNzY2MzE3LDEwOC4yMzcyMDYgMTQzLjc2NjMxNywxMTguNjE4OTE4IEMxNDMuNzY2MzE3LDEyOS4wMDA2MjkgMTUxLjUzMTExLDEzNy4yNTg4MDkgMTYyLjM1NDc2LDEzNy4yNTg4MDkgQzE2OS4xNzgzNjYsMTM3LjI1ODgwOSAxNzMuODg0MzAxLDEzMy45NTU1MzcgMTc3LjE3ODQ1NiwxMjguNzY0NjgxIEwxODguMDAyMTA2LDEzNS4xMzUyNzcgQzE4Mi44MjU1NzgsMTQzLjE1NzUwOCAxNzMuMTc4NDExLDE0OS4wNTYyMDggMTYyLjM1NDc2LDE0OS4wNTYyMDggQzE0Mi4zNTQ1MzYsMTQ5LjA1NjIwOCAxMzAuODI0OTk1LDEzMy45NTU1MzcgMTMwLjgyNDk5NSwxMTguODU0ODY2IEMxMzAuODI0OTk1LDEwMy43NTQxOTUgMTQyLjM1NDUzNiw4OC42NTM1MjM1IDE2Mi4zNTQ3Niw4OC42NTM1MjM1IEMxNzQuNTkwMTkxLDg4LjY1MzUyMzUgMTgyLjM1NDk4NCw5NC41NTIyMjMyIDE4OC4wMDIxMDYsMTAyLjU3NDQ1NSBMMTc3LjE3ODQ1NiwxMDguNzA5MTAyIEwxNzcuMTc4NDU2LDEwOC43MDkxMDIgWiIgaWQ9InBhdGg1NDQ5IiBmaWxsPSIjMDAwMDAwIj48L3BhdGg+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTk4LjM1NTE2NCw5MC4wNjkyMTE0IEwyMTAuNTkwNTk1LDkwLjA2OTIxMTQgTDIxMC41OTA1OTUsMTIyLjE1ODEzOCBDMjEwLjU5MDU5NSwxMzAuNjUyMjY1IDIxNi43MDgzMSwxMzYuNTUwOTY1IDIyNC40NzMxMDMsMTM2LjU1MDk2NSBDMjMyLjAwMjU5OSwxMzYuNTUwOTY1IDIzOC4zNTU2MTIsMTMwLjQxNjMxNyAyMzguMzU1NjEyLDEyMi4xNTgxMzggTDIzOC4zNTU2MTIsOTAuMDY5MjExNCBMMjUwLjU5MTA0Myw5MC4wNjkyMTE0IEwyNTAuNTkxMDQzLDEyMy4xMDE5MyBDMjUwLjU5MTA0MywxMzkuMTQ2MzkzIDIzOC4xMjAzMTUsMTQ4LjgyMDI2IDIyNC40NzMxMDMsMTQ4LjgyMDI2IEMyMTAuODI1ODkyLDE0OC44MjAyNiAxOTguMzU1MTY0LDEzOS4xNDYzOTMgMTk4LjM1NTE2NCwxMjMuMTAxOTMgTDE5OC4zNTUxNjQsOTAuMDY5MjExNCBMMTk4LjM1NTE2NCw5MC4wNjkyMTE0IFoiIGlkPSJwYXRoNTQ1MSIgZmlsbD0iIzAwMDAwMCI+PC9wYXRoPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTI2NS44ODUzMzIsMTExLjU0MDQ3OCBDMjY1Ljg4NTMzMiw5Ni45MTE3MDMgMjc1LjUzMjQ5OSw4OC42NTM1MjM1IDI4Ni44MjY3NDMsODguNjUzNTIzNSBDMjk1LjUzMjcyMyw4OC42NTM1MjM1IDMwMS42NTA0MzksOTIuOTAwNTg3MiAzMDQuMDAzNDA2LDk4Ljc5OTI4NjkgTDMwNC4yMzg3MDMsOTguNzk5Mjg2OSBDMzA2LjU5MTY3LDkyLjY2NDYzOTMgMzEyLjcwOTM4Niw4OC42NTM1MjM1IDMyMS40MTUzNjYsODguNjUzNTIzNSBDMzMyLjcwOTYxLDg4LjY1MzUyMzUgMzQyLjM1Njc3Nyw5Ny4xNDc2NTEgMzQyLjM1Njc3NywxMTEuNTQwNDc4IEwzNDIuMzU2Nzc3LDE0Ny40MDQ1NzIgTDMzMC4xMjEzNDYsMTQ3LjQwNDU3MiBMMzMwLjEyMTM0NiwxMTEuNTQwNDc4IEMzMzAuMTIxMzQ2LDEwNC42OTc5ODcgMzI1Ljg4NjAwNCwxMDAuNjg2ODcxIDMyMC43MDk0NzYsMTAwLjY4Njg3MSBDMzE0LjgyNzA1NywxMDAuNjg2ODcxIDMxMC41OTE3MTUsMTA0LjIyNjA5MSAzMTAuNTkxNzE1LDExMy4xOTIxMTQgTDMxMC41OTE3MTUsMTQ3LjE2ODYyNCBMMjk4LjM1NjI4NCwxNDcuMTY4NjI0IEwyOTguMzU2Mjg0LDExMy4xOTIxMTQgQzI5OC4zNTYyODQsMTA0LjIyNjA5MSAyOTQuMTIwOTQyLDEwMC42ODY4NzEgMjg4LjIzODUyNCwxMDAuNjg2ODcxIEMyODMuMDYxOTk1LDEwMC42ODY4NzEgMjc4LjgyNjY1MywxMDQuNjk3OTg3IDI3OC44MjY2NTMsMTExLjU0MDQ3OCBMMjc4LjgyNjY1MywxNDcuMTY4NjI0IEwyNjUuODg1MzMyLDE0Ny4xNjg2MjQgTDI2NS44ODUzMzIsMTExLjU0MDQ3OCBMMjY1Ljg4NTMzMiwxMTEuNTQwNDc4IFoiIGlkPSJwYXRoNTQ1MyIgZmlsbD0iIzAwMDAwMCI+PC9wYXRoPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTM1Ny40MTU3NjksNzMuMDgwOTU2NCBMMzY5LjY1MTIwMSw3My4wODA5NTY0IEwzNjkuNjUxMjAxLDk3LjE0NzY1MSBMMzY5Ljg4NjQ5Nyw5Ny4xNDc2NTEgQzM3Mi43MTAwNTgsOTIuNDI4NjkxMyAzODAuNDc0ODUxLDg4LjY1MzUyMzUgMzg4LjQ3NDk0MSw4OC42NTM1MjM1IEM0MDMuMjk4NjM2LDg4LjY1MzUyMzUgNDE4LjEyMjMzMiw5OS43NDMwNzg5IDQxOC4xMjIzMzIsMTE4Ljg1NDg2NiBDNDE4LjEyMjMzMiwxMzcuOTY2NjUzIDQwMy4yOTg2MzYsMTQ5LjA1NjIwOCAzODguNDc0OTQxLDE0OS4wNTYyMDggQzM4MC40NzQ4NTEsMTQ5LjA1NjIwOCAzNzIuNzEwMDU4LDE0NS4yODEwNCAzNjkuODg2NDk3LDE0MC41NjIwODEgTDM2OS42NTEyMDEsMTQwLjU2MjA4MSBMMzY5LjY1MTIwMSwxNDcuNjQwNTIgTDM1Ny40MTU3NjksMTQ3LjY0MDUyIEwzNTcuNDE1NzY5LDczLjA4MDk1NjQgTDM1Ny40MTU3NjksNzMuMDgwOTU2NCBaIE0zODcuMjk4NDU3LDEwMC4yMTQ5NzUgQzM3Ny4xODA2OTcsMTAwLjIxNDk3NSAzNjkuNjUxMjAxLDEwOC4yMzcyMDYgMzY5LjY1MTIwMSwxMTguODU0ODY2IEMzNjkuNjUxMjAxLDEyOS40NzI1MjUgMzc3LjE4MDY5NywxMzcuNDk0NzU3IDM4Ny4yOTg0NTcsMTM3LjQ5NDc1NyBDMzk3LjY1MTUxNCwxMzcuNDk0NzU3IDQwNS4xODEwMSwxMjkuNDcyNTI1IDQwNS4xODEwMSwxMTguODU0ODY2IEM0MDUuMTgxMDEsMTA4LjAwMTI1OCAzOTcuNjUxNTE0LDEwMC4yMTQ5NzUgMzg3LjI5ODQ1NywxMDAuMjE0OTc1IEwzODcuMjk4NDU3LDEwMC4yMTQ5NzUgWiIgaWQ9InBhdGg1NDU1IiBmaWxsPSIjMDAwMDAwIj48L3BhdGg+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNDg0LjAwNTQyMywxMzQuODk5MzI5IEM0NzcuMTgxODE3LDE0My42Mjk0MDQgNDY3Ljc2OTk0NywxNDguODIwMjYgNDU3LjQxNjg5LDE0OC44MjAyNiBDNDM3LjQxNjY2NiwxNDguODIwMjYgNDI1Ljg4NzEyNSwxMzMuNzE5NTg5IDQyNS44ODcxMjUsMTE4LjYxODkxOCBDNDI1Ljg4NzEyNSwxMDMuNTE4MjQ3IDQzNy42NTE5NjIsODguNjUzNTIzNSA0NTcuNDE2ODksODguNjUzNTIzNSBDNDY5LjE4MTcyNyw4OC42NTM1MjM1IDQ4Ny4wNjQyODEsOTguNTYzMzM4OSA0ODcuMDY0MjgxLDEyMC43NDI0NSBMNDg3LjA2NDI4MSwxMjIuODY1OTgyIEw0MzkuNzY5NjMzLDEyMi44NjU5ODIgQzQ0MC40NzU1MjMsMTMxLjU5NjA1NyA0NDguNzEwOTEsMTM3Ljk2NjY1MyA0NTcuMTgxNTkzLDEzNy45NjY2NTMgQzQ2My43Njk5MDIsMTM3Ljk2NjY1MyA0NjkuNDE3MDI0LDEzNC42NjMzODEgNDczLjY1MjM2NiwxMjkuMDAwNjI5IEw0ODQuMDA1NDIzLDEzNC44OTkzMjkgTDQ4NC4wMDU0MjMsMTM0Ljg5OTMyOSBaIE00NzIuNzExMTc5LDExMi43MjAyMTggQzQ3MC4xMjI5MTQsMTAzLjk5MDE0MyA0NjMuNzY5OTAyLDk5LjI3MTE4MjkgNDU1Ljc2OTgxMiw5OS4yNzExODI5IEM0NDguMDA1MDIsOTkuMjcxMTgyOSA0NDEuNjUyMDA3LDEwNC4yMjYwOTEgNDM5LjUzNDMzNiwxMTIuNzIwMjE4IEw0NzIuNzExMTc5LDExMi43MjAyMTggTDQ3Mi43MTExNzksMTEyLjcyMDIxOCBaIiBpZD0icGF0aDU0NTciIGZpbGw9IiMwMDAwMDAiPjwvcGF0aD4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik01NjAuNDU4MjMzLDAuOTI3MTcwMTk3IEM1MzkuMTYyNjIxLDAuOTI3MTcwMTk3IDUyMS45MjgzODksMTguMjA5MTAxNyA1MjEuOTI4Mzg5LDM5LjU2MzY1MyBDNTIxLjkyODM4OSw1OC4zNjUwMjIgNTM1LjM2ODY1NCw3My45ODcwNjc0IDU1My4xMDUyMDksNzcuNDYyNzk4MyBMNTUzLjEwNTIwOSw4OC41MjI4NjAyIEM1NzYuMTY0NTEyLDg1LjAzNjcyNCA1OTYuNTgyMTMxLDY2LjY4MTQ2NDIgNTk4LjEwNTcxMyw0Mi41ODY3MzY2IEM1OTkuMDIyNzgyLDI4LjA4MzcyODggNTkxLjgxMTYzMSwxMy4yNzc5MTA3IDU3OS42NDk2MjQsNi4wODg1MzI0IEM1NzguOTUzMjk5LDUuNjc2OTExIDU3OC4yNDU4MzQsNS4yNjgyNzcxNiA1NzcuNTE3MjQ3LDQuOTA4NzkyNDcgQzU3Ni43NzQ4NDgsNC41NDI0OTMxMyA1NzYuMDEyNDk5LDQuMTg1NDkwMTQgNTc1LjIzNzgxLDMuODc2NTIwMDMgQzU3NC45OTE5MDEsMy43NzMzNjc4MiA1NzQuNzUwOTQ4LDMuNjc5NzkyMjYgNTc0LjUwMjUwOCwzLjU4MTU4NTA1IEM1NzMuODI1ODk1LDMuMzMxMTIyNzIgNTczLjE0MzE2OCwzLjA0OTA4MyA1NzIuNDQzNjYxLDIuODQ0MjQ3NTkgQzU2OC42NzM0MzgsMS41OTgxNDUxNiA1NjQuNjQzMTI2LDAuOTI3MTcwMTk3IDU2MC40NTgyMzMsMC45MjcxNzAxOTcgTDU2MC40NTgyMzMsMC45MjcxNzAxOTcgWiIgaWQ9InBhdGgzOTQzIiBmaWxsPSIjMDBBODE4Ij48L3BhdGg+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNTY4LjM5OTQ5OCwxNS4yMzE1MTY5IEM1NjcuMDgxNDY5LDE1LjA5NjAzMDggNTY1LjY5MzU4NSwxNS41NTU5NDU0IDU2NC43MjI5ODYsMTYuNzA2MTkxOCBDNTY0LjAxNzA5NiwxNy42NDk5ODM3IDU2My41NzU5MTUsMTguNTY0MjgyMiA1NjMuMTA1MzIxLDE5LjUwODA3NDEgQzU2MS42OTM1NCwyMi44MTEzNDYgNTYyLjE2NDEzNCwyNi4zNTA1NjU4IDU2NC4yODE4MDUsMjguOTQ1OTkzNiBDNTY3LjU3NTk1OSwyOC4yMzgxNDk2IDU3MC4zNzAxMDgsMjYuMTI5MzY0NSA1NzEuNzgxODg5LDIyLjgyNjA5MjcgQzU3Mi4yNTI0ODIsMjEuODgyMzAwOCA1NzIuNTE3MTkxLDIwLjY3MzA2NzMgNTcyLjUxNzE5MSwxOS43MjkyNzU0IEM1NzIuNjY0MjUyLDE3LjIyMjMyOCA1NzAuNTk2MjE0LDE1LjQ1NzMyNjQgNTY4LjM5OTQ5OCwxNS4yMzE1MTY5IEw1NjguMzk5NDk4LDE1LjIzMTUxNjkgWiBNNTUxLjI2Njk1MywxNS40NTI3MTgxIEM1NDkuMTE4NDkxLDE1LjY1Nzc5MDIgNTQ3LjA3NTczLDE3LjM2OTc5NTUgNTQ3LjA3NTczLDE5LjcyOTI3NTQgQzU0Ny4wNzU3MywyMC42NzMwNjczIDU0Ny4zNDA0MzgsMjEuODgyMzAwOCA1NDcuODExMDMyLDIyLjgyNjA5MjcgQzU0OS4yMjI4MTMsMjYuMTI5MzY0NSA1NTIuMjM3NTUyLDI4LjIzODE0OTYgNTU1LjUzMTcwNywyOC45NDU5OTM2IEM1NTcuNDE0MDgxLDI2LjM1MDU2NTggNTU3Ljg5OTM4LDIyLjgxMTM0NiA1NTYuNDg3NiwxOS41MDgwNzQxIEM1NTYuMDE3MDA2LDE4LjU2NDI4MjIgNTU1LjU3NTgyNSwxNy42MzUyMzcgNTU0Ljg2OTkzNSwxNi45MjczOTMgQzU1My44OTkzMzUsMTUuNzc3MTQ2NiA1NTIuNTU2MDMxLDE1LjMyOTY3NSA1NTEuMjY2OTUzLDE1LjQ1MjcxODEgTDU1MS4yNjY5NTMsMTUuNDUyNzE4MSBaIE01MzkuNzIyNzA2LDI2LjgwNzcxNSBDNTM2LjAxMjMwMSwyNi45OTg2Njc3IDUzNC4zNTQ5OTksMzEuNjc0MTQyMiA1MzcuNDQzMjY5LDM0LjEwNzM1NTggQzUzOC4zODQ0NTYsMzQuODE1MTk5OCA1MzkuMjk2MjMxLDM1LjMzMTMzNiA1NDAuMjM3NDE4LDM1LjgwMzIzMiBDNTQzLjUzMTU3MiwzNy4yMTg5MTk5IDU0Ny4zNDA0MzgsMzYuNzMyMjc3MiA1NTAuMTY0LDM0Ljg0NDY5MzMgQzU0OS40NTgxMDksMzEuNzc3MzY5NCA1NDcuMDYxMDI0LDI4Ljk2MDc0MDQgNTQzLjc2Njg2OSwyNy41NDUwNTI0IEM1NDIuNTkwMzg1LDI3LjA3MzE1NjUgNTQxLjYzNDQ5MiwyNi44MDc3MTUgNTQwLjQ1ODAwOCwyNi44MDc3MTUgQzU0MC4xOTMzLDI2Ljc3ODIyMTUgNTM5Ljk3MDA2NiwyNi43OTQ5NzM4IDUzOS43MjI3MDYsMjYuODA3NzE1IEw1MzkuNzIyNzA2LDI2LjgwNzcxNSBaIE01NzUuOTczMTEyLDQxLjExMjA2MTcgQzU3My44MTc3NTYsNDEuMDcwNTgyIDU3MS42MzQ4MjgsNDEuNzAxOTMxNiA1NjkuODcwMTAzLDQyLjg4MTY3MTYgQzU3MC41NzU5OTMsNDUuOTQ4OTk1NCA1NzIuOTczMDc5LDQ4Ljc2NTYyNDUgNTc2LjI2NzIzMyw1MC4xODEzMTI0IEM1NzcuNDQzNzE3LDUwLjY1MzIwODQgNTc4LjM5OTYxLDUwLjkxODY0OTkgNTc5LjU3NjA5NCw1MC45MTg2NDk5IEM1ODMuODExNDM1LDUxLjE1NDU5NzggNTg1Ljg4NDk4OCw0NS45MDQ3NTUxIDU4Mi41OTA4MzMsNDMuNTQ1Mjc1MyBDNTgxLjY0OTY0Niw0Mi44Mzc0MzEzIDU4MC43Mzc4NzEsNDIuMzk1MDI4OCA1NzkuNzk2Njg0LDQxLjkyMzEzMjkgQzU3OC41NjEzNzcsNDEuMzkyMjQ5OSA1NzcuMjY2MzI0LDQxLjEzNjk0NzEgNTc1Ljk3MzExMiw0MS4xMTIwNjE3IEw1NzUuOTczMTEyLDQxLjExMjA2MTcgWiBNNTQzLjg0MDM5OSw0MS4zMzMyNjI5IEM1NDIuNTQ3MTg2LDQxLjM1ODE1NTQgNTQxLjI1MjEzNSw0MS42MTM0NTExIDU0MC4wMTY4MjcsNDIuMTQ0MzM0MSBDNTM4Ljg0MDM0Myw0Mi42MTYyMzAxIDUzNy45Mjg1NjgsNDMuMTMyMzY2MyA1MzcuMjIyNjc4LDQzLjg0MDIxMDMgQzUzNC4xNjM4Miw0Ni40MzU2MzgxIDUzNi4yMjI2NjcsNTEuMzc1Nzk5MSA1NDAuNDU4MDA4LDUxLjEzOTg1MTEgQzU0MS42MzQ0OTIsNTEuMTM5ODUxMSA1NDIuODI1NjgyLDUwLjg3NDQwOTYgNTQzLjc2Njg2OSw1MC40MDI1MTM2IEM1NDcuMDYxMDI0LDQ4Ljk4NjgyNTcgNTQ5LjM5OTI4NSw0Ni4xNzAxOTY2IDU0OS44Njk4NzksNDMuMTAyODcyOCBDNTQ4LjEwNTE1Myw0MS45MjMxMzI5IDU0NS45OTU3NTUsNDEuMjkxNzg4IDU0My44NDAzOTksNDEuMzMzMjYyOSBMNTQzLjg0MDM5OSw0MS4zMzMyNjI5IFogTTU1NS43NTIyOTcsNDguNTU5MTcgQzU1Mi40NTgxNDMsNDkuMjY3MDEzOSA1NDkuNjYzOTk0LDUxLjM3NTc5OTEgNTQ4LjI1MjIxMyw1NC42NzkwNzA5IEM1NDcuNzgxNjIsNTUuNjIyODYyOCA1NDcuNTE2OTExLDU2Ljc1ODM2MjUgNTQ3LjUxNjkxMSw1Ny43MDIxNTQ1IEM1NDcuMjgxNjE0LDYxLjcxMzI3MDIgNTUyLjczNzU1OCw2My44NjYyOTU2IDU1NS4wOTA1MjUsNjAuNzk4OTcxOCBDNTU1Ljc5NjQxNiw1OS44NTUxNzk4IDU1Ni4yMzc1OTcsNTguOTQwODgxNCA1NTYuNzA4MTksNTcuOTk3MDg5NSBDNTU4LjExOTk3MSw1NC45Mjk3NjU2IDU1Ny42MzQ2NzEsNTEuMzkwNTQ1OCA1NTUuNzUyMjk3LDQ4LjU1OTE3IEw1NTUuNzUyMjk3LDQ4LjU1OTE3IFogTTU2NC41MDIzOTUsNDguNzgwMzcxMiBDNTYyLjYyMDAyMSw1MS4zNzU3OTkxIDU2Mi4xMzQ3MjIsNTQuOTE1MDE4OSA1NjMuNTQ2NTAyLDU4LjIxODI5MDcgQzU2NC4wMTcwOTYsNTkuMTYyMDgyNiA1NjQuNDU4Mjc3LDYwLjA5MTEyNzggNTY1LjE2NDE2OCw2MC43OTg5NzE4IEM1NjcuNzUyNDMyLDYzLjYzMDM0NzYgNTczLjE5MzY2OSw2MS41MzYzMDkyIDU3Mi45NTgzNzMsNTcuOTk3MDg5NSBDNTcyLjk1ODM3Myw1Ny4wNTMyOTc1IDU3Mi42OTM2NjQsNTUuODQ0MDY0MSA1NzIuMjIzMDcsNTQuOTAwMjcyMSBDNTcwLjgxMTI5LDUxLjU5NzAwMDMgNTY3Ljc5NjU1LDQ5LjQ4ODIxNTIgNTY0LjUwMjM5NSw0OC43ODAzNzEyIEw1NjQuNTAyMzk1LDQ4Ljc4MDM3MTIgWiIgaWQ9InJlY3Q0MDA1IiBmaWxsPSIjRkZGRkZGIj48L3BhdGg+CiAgICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPg==" alt="" />
|
409 |
+
|
410 |
+
<h1>Plugins tests report</h1>
|
411 |
+
|
412 |
+
<h2 class="component"></h2>
|
413 |
+
</header>
|
414 |
+
<ul class="summary">
|
415 |
+
<li>2 Features</li>
|
416 |
+
<li>4 Scenarios</li>
|
417 |
+
<li> Steps</li>
|
418 |
+
<li class="passed print-hide">3 Passed scenarios</li>
|
419 |
+
<li class="failed print-hide">1 Failing scenarios</li>
|
420 |
+
<li class="passed print-hide"> Passed steps</li>
|
421 |
+
<li class="failed print-hide"> Failing steps</li>
|
422 |
+
<li class="skipped print-hide"> Skipped steps</li>
|
423 |
+
<li>Status <span class="failed">failed</span></li>
|
424 |
+
</ul>
|
425 |
+
|
426 |
+
<ul class="feature-list print-hide">
|
427 |
+
<li class="failed">
|
428 |
+
<a href="#F_tracker-message-flexible-checkout-fields-tests" title="Tracker message Flexible Checkout Fields tests">Tracker message Flexible Checkout Fields tests</a>
|
429 |
+
<ul class="scenario-list">
|
430 |
+
<li class="failed"><a href="#S_tracker-message-flexible-checkout-fields-tests;tracker-long-message-is-visible" title="Tracker long message is Visible">Tracker long message is Visible</a></li>
|
431 |
+
<li class="passed"><a href="#S_tracker-message-flexible-checkout-fields-tests;tracker-message-is-visible" title="Tracker message is Visible">Tracker message is Visible</a></li>
|
432 |
+
</ul>
|
433 |
+
</li>
|
434 |
+
<li class="passed">
|
435 |
+
<a href="#F_activate-and-deactivate-plugin-flexible-checkout-fields-tests" title="Activate and Deactivate plugin Flexible Checkout Fields tests">Activate and Deactivate plugin Flexible Checkout Fields tests</a>
|
436 |
+
<ul class="scenario-list">
|
437 |
+
<li class="passed"><a href="#S_activate-and-deactivate-plugin-flexible-checkout-fields-tests;plugin-flexible-checkout-fields--is-active" title="Plugin Flexible Checkout Fields is active">Plugin Flexible Checkout Fields is active</a></li>
|
438 |
+
<li class="passed"><a href="#S_activate-and-deactivate-plugin-flexible-checkout-fields-tests;plugin-flexible-checkout-fields-is-inactive" title="Plugin Flexible Checkout Fields is inactive">Plugin Flexible Checkout Fields is inactive</a></li>
|
439 |
+
</ul>
|
440 |
+
</li>
|
441 |
+
</ul>
|
442 |
+
</aside><main class="report-container">
|
443 |
+
|
444 |
+
<!--
|
445 |
+
<div class="summary-table">
|
446 |
+
<table>
|
447 |
+
<tr class="main-header">
|
448 |
+
<th>Feature</th>
|
449 |
+
<th colspan="3">Scenarios</th>
|
450 |
+
<th colspan="4">Steps</th>
|
451 |
+
<th colspan="2"></th>
|
452 |
+
</tr>
|
453 |
+
<tr class="sub-header">
|
454 |
+
<th></th>
|
455 |
+
<th>Total</th>
|
456 |
+
<th>Passed</th>
|
457 |
+
<th>Failed</th>
|
458 |
+
<th>Total</th>
|
459 |
+
<th>Passed</th>
|
460 |
+
<th>Failed</th>
|
461 |
+
<th>Skipped</th>
|
462 |
+
<th>Duration</th>
|
463 |
+
<th>Status</th>
|
464 |
+
</tr>
|
465 |
+
|
466 |
+
<tr class="failed">
|
467 |
+
<td>Tracker message Flexible Checkout Fields tests</td>
|
468 |
+
<td class="scenarios-all"></td>
|
469 |
+
<td class="scenarios-passed passed"></td>
|
470 |
+
<td class="scenarios-failed failed"></td>
|
471 |
+
<td class="steps-all"></td>
|
472 |
+
<td class="steps-passed passed"></td>
|
473 |
+
<td class="steps-failed failed"></td>
|
474 |
+
<td class="steps-skipped skipped"></td>
|
475 |
+
<td class="duration">6.43 s</td>
|
476 |
+
<td class="status">failed</td>
|
477 |
+
</tr>
|
478 |
+
<tr class="passed">
|
479 |
+
<td>Activate and Deactivate plugin Flexible Checkout Fields tests</td>
|
480 |
+
<td class="scenarios-all"></td>
|
481 |
+
<td class="scenarios-passed passed"></td>
|
482 |
+
<td class="scenarios-failed failed"></td>
|
483 |
+
<td class="steps-all"></td>
|
484 |
+
<td class="steps-passed passed"></td>
|
485 |
+
<td class="steps-failed failed"></td>
|
486 |
+
<td class="steps-skipped skipped"></td>
|
487 |
+
<td class="duration">4.73 s</td>
|
488 |
+
<td class="status">passed</td>
|
489 |
+
</tr>
|
490 |
+
|
491 |
+
</table>
|
492 |
+
</div>
|
493 |
+
-->
|
494 |
+
|
495 |
+
<section class="report" id="F_tracker-message-flexible-checkout-fields-tests">
|
496 |
+
<h2>Feature: Tracker message Flexible Checkout Fields tests <span class="tags">@flexible-checkout-fields</span></h2>
|
497 |
+
|
498 |
+
<p class="filename">/tmp/tests/test-acceptance/features/tests_scenario/flexible-checkout-fields/trackerMessageIsVisibleWhenActivatePluginFlexibleCheckoutFieldsTests.feature</p>
|
499 |
+
|
500 |
+
<p class="story"></p>
|
501 |
+
<h3 id="S_tracker-message-flexible-checkout-fields-tests;tracker-long-message-is-visible">
|
502 |
+
Scenario: Tracker long message is Visible
|
503 |
+
<span class="scenario-tag">@flexible-checkout-fields</span>
|
504 |
+
</h3>
|
505 |
+
|
506 |
+
<table>
|
507 |
+
<tr class="header-row">
|
508 |
+
<th style="width: 100px;">Condition</th>
|
509 |
+
<th>Step</th>
|
510 |
+
<th style="width: 100px;">Line</th>
|
511 |
+
<th class="duration" style="width: 100px;">Duration</th>
|
512 |
+
<th style="width: 100px;">Status</th>
|
513 |
+
</tr>
|
514 |
+
|
515 |
+
<tr class="passed">
|
516 |
+
<td>Given </td>
|
517 |
+
<td>
|
518 |
+
user is logged in to wordPress
|
519 |
+
<table class="datatable">
|
520 |
+
<!-- -->
|
521 |
+
</table>
|
522 |
+
</td>
|
523 |
+
<td>5</td>
|
524 |
+
<td class="duration">0.28 s</td>
|
525 |
+
<td class="status">passed</td>
|
526 |
+
</tr>
|
527 |
+
|
528 |
+
<tr class="hidden passed">
|
529 |
+
<td class="trace" colspan="4">
|
530 |
+
<pre></pre>
|
531 |
+
</td>
|
532 |
+
<td class="screenshot-link" data-index="0"></td>
|
533 |
+
</tr>
|
534 |
+
<tr class="passed">
|
535 |
+
<td>And </td>
|
536 |
+
<td>
|
537 |
+
i resets the consent to collect data in the database
|
538 |
+
<table class="datatable">
|
539 |
+
<!-- -->
|
540 |
+
</table>
|
541 |
+
</td>
|
542 |
+
<td>6</td>
|
543 |
+
<td class="duration">0.02 s</td>
|
544 |
+
<td class="status">passed</td>
|
545 |
+
</tr>
|
546 |
+
|
547 |
+
<tr class="hidden passed">
|
548 |
+
<td class="trace" colspan="4">
|
549 |
+
<pre></pre>
|
550 |
+
</td>
|
551 |
+
<td class="screenshot-link" data-index="0"></td>
|
552 |
+
</tr>
|
553 |
+
<tr class="passed">
|
554 |
+
<td>When </td>
|
555 |
+
<td>
|
556 |
+
i open "menu-plugins" and activate plugin with slug "flexible-checkout-fields"
|
557 |
+
<table class="datatable">
|
558 |
+
<!-- -->
|
559 |
+
</table>
|
560 |
+
</td>
|
561 |
+
<td>15</td>
|
562 |
+
<td class="duration">0.66 s</td>
|
563 |
+
<td class="status">passed</td>
|
564 |
+
</tr>
|
565 |
+
|
566 |
+
<tr class="hidden passed">
|
567 |
+
<td class="trace" colspan="4">
|
568 |
+
<pre></pre>
|
569 |
+
</td>
|
570 |
+
<td class="screenshot-link" data-index="0"></td>
|
571 |
+
</tr>
|
572 |
+
<tr class="passed">
|
573 |
+
<td>And </td>
|
574 |
+
<td>
|
575 |
+
Skip tracker message
|
576 |
+
<table class="datatable">
|
577 |
+
<!-- -->
|
578 |
+
</table>
|
579 |
+
</td>
|
580 |
+
<td>16</td>
|
581 |
+
<td class="duration">2.3 s</td>
|
582 |
+
<td class="status">passed</td>
|
583 |
+
</tr>
|
584 |
+
|
585 |
+
<tr class="hidden passed">
|
586 |
+
<td class="trace" colspan="4">
|
587 |
+
<pre></pre>
|
588 |
+
</td>
|
589 |
+
<td class="screenshot-link" data-index="0"></td>
|
590 |
+
</tr>
|
591 |
+
<tr class="passed">
|
592 |
+
<td>And </td>
|
593 |
+
<td>
|
594 |
+
i open submenu "Checkout Fields" from menu "toplevel_page_woocommerce"
|
595 |
+
<table class="datatable">
|
596 |
+
<!-- -->
|
597 |
+
</table>
|
598 |
+
</td>
|
599 |
+
<td>17</td>
|
600 |
+
<td class="duration">0.79 s</td>
|
601 |
+
<td class="status">passed</td>
|
602 |
+
</tr>
|
603 |
+
|
604 |
+
<tr class="hidden passed">
|
605 |
+
<td class="trace" colspan="4">
|
606 |
+
<pre></pre>
|
607 |
+
</td>
|
608 |
+
<td class="screenshot-link" data-index="0"></td>
|
609 |
+
</tr>
|
610 |
+
<tr class="failed">
|
611 |
+
<td>Then </td>
|
612 |
+
<td>
|
613 |
+
tracker message type "long" visible
|
614 |
+
<table class="datatable">
|
615 |
+
<!-- -->
|
616 |
+
</table>
|
617 |
+
</td>
|
618 |
+
<td>18</td>
|
619 |
+
<td class="duration">0.1 s</td>
|
620 |
+
<td class="status">failed</td>
|
621 |
+
</tr>
|
622 |
+
|
623 |
+
<tr class="hidden failed">
|
624 |
+
<td class="trace" colspan="4">
|
625 |
+
<pre>AssertionError: expected 'Hey admin,\nWe need your help to improve WP Desk plugins, so they are more useful for you and the rest of 30,000+ users. By collecting data on how you use our plugins, you will help us a lot. We will not collect any sensitive data, so you can feel safe. Find out more »\nAllow\nDismiss this notice.' to include '\nWe need your help to improve WP Desk plugins, so they are more useful for you and the rest of 18,000+ users. By collecting data on how you use our plugins, you will help us a lot. We will not collect any sensitive data, so you can feel safe. Find out more'</pre>
|
626 |
+
</td>
|
627 |
+
<td class="screenshot-link" data-index="0"></td>
|
628 |
+
</tr>
|
629 |
+
<tr class="skipped">
|
630 |
+
<td>And </td>
|
631 |
+
<td>
|
632 |
+
i open "menu-plugins" and deactivate plugin with slug "flexible-checkout-fields"
|
633 |
+
<table class="datatable">
|
634 |
+
<!-- -->
|
635 |
+
</table>
|
636 |
+
</td>
|
637 |
+
<td>19</td>
|
638 |
+
<td class="duration"></td>
|
639 |
+
<td class="status">skipped</td>
|
640 |
+
</tr>
|
641 |
+
|
642 |
+
<tr class="hidden skipped">
|
643 |
+
<td class="trace" colspan="4">
|
644 |
+
<pre></pre>
|
645 |
+
</td>
|
646 |
+
<td class="screenshot-link" data-index="0"></td>
|
647 |
+
</tr>
|
648 |
+
|
649 |
+
</table>
|
650 |
+
|
651 |
+
|
652 |
+
|
653 |
+
<img src="tracker_long_message_is_visible-14-1.png" />
|
654 |
+
<h3 id="S_tracker-message-flexible-checkout-fields-tests;tracker-message-is-visible">
|
655 |
+
Scenario: Tracker message is Visible
|
656 |
+
<span class="scenario-tag">@flexible-checkout-fields</span>
|
657 |
+
</h3>
|
658 |
+
|
659 |
+
<table>
|
660 |
+
<tr class="header-row">
|
661 |
+
<th style="width: 100px;">Condition</th>
|
662 |
+
<th>Step</th>
|
663 |
+
<th style="width: 100px;">Line</th>
|
664 |
+
<th class="duration" style="width: 100px;">Duration</th>
|
665 |
+
<th style="width: 100px;">Status</th>
|
666 |
+
</tr>
|
667 |
+
|
668 |
+
<tr class="passed">
|
669 |
+
<td>Given </td>
|
670 |
+
<td>
|
671 |
+
user is logged in to wordPress
|
672 |
+
<table class="datatable">
|
673 |
+
<!-- -->
|
674 |
+
</table>
|
675 |
+
</td>
|
676 |
+
<td>5</td>
|
677 |
+
<td class="duration">0.28 s</td>
|
678 |
+
<td class="status">passed</td>
|
679 |
+
</tr>
|
680 |
+
|
681 |
+
<tr class="hidden passed">
|
682 |
+
<td class="trace" colspan="4">
|
683 |
+
<pre></pre>
|
684 |
+
</td>
|
685 |
+
<td class="screenshot-link" data-index="0"></td>
|
686 |
+
</tr>
|
687 |
+
<tr class="passed">
|
688 |
+
<td>And </td>
|
689 |
+
<td>
|
690 |
+
i resets the consent to collect data in the database
|
691 |
+
<table class="datatable">
|
692 |
+
<!-- -->
|
693 |
+
</table>
|
694 |
+
</td>
|
695 |
+
<td>6</td>
|
696 |
+
<td class="duration">0 s</td>
|
697 |
+
<td class="status">passed</td>
|
698 |
+
</tr>
|
699 |
+
|
700 |
+
<tr class="hidden passed">
|
701 |
+
<td class="trace" colspan="4">
|
702 |
+
<pre></pre>
|
703 |
+
</td>
|
704 |
+
<td class="screenshot-link" data-index="0"></td>
|
705 |
+
</tr>
|
706 |
+
<tr class="passed">
|
707 |
+
<td>When </td>
|
708 |
+
<td>
|
709 |
+
i open "menu-plugins" and activate plugin with slug "flexible-checkout-fields"
|
710 |
+
<table class="datatable">
|
711 |
+
<!-- -->
|
712 |
+
</table>
|
713 |
+
</td>
|
714 |
+
<td>9</td>
|
715 |
+
<td class="duration">0.71 s</td>
|
716 |
+
<td class="status">passed</td>
|
717 |
+
</tr>
|
718 |
+
|
719 |
+
<tr class="hidden passed">
|
720 |
+
<td class="trace" colspan="4">
|
721 |
+
<pre></pre>
|
722 |
+
</td>
|
723 |
+
<td class="screenshot-link" data-index="0"></td>
|
724 |
+
</tr>
|
725 |
+
<tr class="passed">
|
726 |
+
<td>Then </td>
|
727 |
+
<td>
|
728 |
+
tracker message type "short" visible
|
729 |
+
<table class="datatable">
|
730 |
+
<!-- -->
|
731 |
+
</table>
|
732 |
+
</td>
|
733 |
+
<td>10</td>
|
734 |
+
<td class="duration">0.12 s</td>
|
735 |
+
<td class="status">passed</td>
|
736 |
+
</tr>
|
737 |
+
|
738 |
+
<tr class="hidden passed">
|
739 |
+
<td class="trace" colspan="4">
|
740 |
+
<pre></pre>
|
741 |
+
</td>
|
742 |
+
<td class="screenshot-link" data-index="0"></td>
|
743 |
+
</tr>
|
744 |
+
<tr class="passed">
|
745 |
+
<td>And </td>
|
746 |
+
<td>
|
747 |
+
Check if buttons skip and Allow & Continue visible in tracker message
|
748 |
+
<table class="datatable">
|
749 |
+
<!-- -->
|
750 |
+
</table>
|
751 |
+
</td>
|
752 |
+
<td>11</td>
|
753 |
+
<td class="duration">0.13 s</td>
|
754 |
+
<td class="status">passed</td>
|
755 |
+
</tr>
|
756 |
+
|
757 |
+
<tr class="hidden passed">
|
758 |
+
<td class="trace" colspan="4">
|
759 |
+
<pre></pre>
|
760 |
+
</td>
|
761 |
+
<td class="screenshot-link" data-index="0"></td>
|
762 |
+
</tr>
|
763 |
+
<tr class="passed">
|
764 |
+
<td>But </td>
|
765 |
+
<td>
|
766 |
+
i open "menu-plugins" and deactivate plugin with slug "flexible-checkout-fields"
|
767 |
+
<table class="datatable">
|
768 |
+
<!-- -->
|
769 |
+
</table>
|
770 |
+
</td>
|
771 |
+
<td>12</td>
|
772 |
+
<td class="duration">1.03 s</td>
|
773 |
+
<td class="status">passed</td>
|
774 |
+
</tr>
|
775 |
+
|
776 |
+
<tr class="hidden passed">
|
777 |
+
<td class="trace" colspan="4">
|
778 |
+
<pre></pre>
|
779 |
+
</td>
|
780 |
+
<td class="screenshot-link" data-index="0"></td>
|
781 |
+
</tr>
|
782 |
+
|
783 |
+
</table>
|
784 |
+
|
785 |
+
|
786 |
+
|
787 |
+
|
788 |
+
</section>
|
789 |
+
<section class="report" id="F_activate-and-deactivate-plugin-flexible-checkout-fields-tests">
|
790 |
+
<h2>Feature: Activate and Deactivate plugin Flexible Checkout Fields tests <span class="tags">@flexible-checkout-fields</span></h2>
|
791 |
+
|
792 |
+
<p class="filename">/tmp/tests/test-acceptance/features/tests_scenario/flexible-checkout-fields/activateAndDeactivateFlexibleCheckoutFieldsTests.feature</p>
|
793 |
+
|
794 |
+
<p class="story"></p>
|
795 |
+
<h3 id="S_activate-and-deactivate-plugin-flexible-checkout-fields-tests;plugin-flexible-checkout-fields--is-active">
|
796 |
+
Scenario: Plugin Flexible Checkout Fields is active
|
797 |
+
<span class="scenario-tag">@flexible-checkout-fields</span>
|
798 |
+
</h3>
|
799 |
+
|
800 |
+
<table>
|
801 |
+
<tr class="header-row">
|
802 |
+
<th style="width: 100px;">Condition</th>
|
803 |
+
<th>Step</th>
|
804 |
+
<th style="width: 100px;">Line</th>
|
805 |
+
<th class="duration" style="width: 100px;">Duration</th>
|
806 |
+
<th style="width: 100px;">Status</th>
|
807 |
+
</tr>
|
808 |
+
|
809 |
+
<tr class="passed">
|
810 |
+
<td>Given </td>
|
811 |
+
<td>
|
812 |
+
user is logged in to wordPress
|
813 |
+
<table class="datatable">
|
814 |
+
<!-- -->
|
815 |
+
</table>
|
816 |
+
</td>
|
817 |
+
<td>5</td>
|
818 |
+
<td class="duration">0.29 s</td>
|
819 |
+
<td class="status">passed</td>
|
820 |
+
</tr>
|
821 |
+
|
822 |
+
<tr class="hidden passed">
|
823 |
+
<td class="trace" colspan="4">
|
824 |
+
<pre></pre>
|
825 |
+
</td>
|
826 |
+
<td class="screenshot-link" data-index="1"></td>
|
827 |
+
</tr>
|
828 |
+
<tr class="passed">
|
829 |
+
<td>And </td>
|
830 |
+
<td>
|
831 |
+
i resets the consent to collect data in the database
|
832 |
+
<table class="datatable">
|
833 |
+
<!-- -->
|
834 |
+
</table>
|
835 |
+
</td>
|
836 |
+
<td>6</td>
|
837 |
+
<td class="duration">0.03 s</td>
|
838 |
+
<td class="status">passed</td>
|
839 |
+
</tr>
|
840 |
+
|
841 |
+
<tr class="hidden passed">
|
842 |
+
<td class="trace" colspan="4">
|
843 |
+
<pre></pre>
|
844 |
+
</td>
|
845 |
+
<td class="screenshot-link" data-index="1"></td>
|
846 |
+
</tr>
|
847 |
+
<tr class="passed">
|
848 |
+
<td>When </td>
|
849 |
+
<td>
|
850 |
+
i open "menu-plugins" and activate plugin with slug "flexible-checkout-fields"
|
851 |
+
<table class="datatable">
|
852 |
+
<!-- -->
|
853 |
+
</table>
|
854 |
+
</td>
|
855 |
+
<td>9</td>
|
856 |
+
<td class="duration">2.13 s</td>
|
857 |
+
<td class="status">passed</td>
|
858 |
+
</tr>
|
859 |
+
|
860 |
+
<tr class="hidden passed">
|
861 |
+
<td class="trace" colspan="4">
|
862 |
+
<pre></pre>
|
863 |
+
</td>
|
864 |
+
<td class="screenshot-link" data-index="1"></td>
|
865 |
+
</tr>
|
866 |
+
<tr class="passed">
|
867 |
+
<td>Then </td>
|
868 |
+
<td>
|
869 |
+
check if plugin with slug "flexible-checkout-fields" is Active
|
870 |
+
<table class="datatable">
|
871 |
+
<!-- -->
|
872 |
+
</table>
|
873 |
+
</td>
|
874 |
+
<td>10</td>
|
875 |
+
<td class="duration">0.42 s</td>
|
876 |
+
<td class="status">passed</td>
|
877 |
+
</tr>
|
878 |
+
|
879 |
+
<tr class="hidden passed">
|
880 |
+
<td class="trace" colspan="4">
|
881 |
+
<pre></pre>
|
882 |
+
</td>
|
883 |
+
<td class="screenshot-link" data-index="1"></td>
|
884 |
+
</tr>
|
885 |
+
|
886 |
+
</table>
|
887 |
+
|
888 |
+
|
889 |
+
|
890 |
+
|
891 |
+
<h3 id="S_activate-and-deactivate-plugin-flexible-checkout-fields-tests;plugin-flexible-checkout-fields-is-inactive">
|
892 |
+
Scenario: Plugin Flexible Checkout Fields is inactive
|
893 |
+
<span class="scenario-tag">@flexible-checkout-fields</span>
|
894 |
+
</h3>
|
895 |
+
|
896 |
+
<table>
|
897 |
+
<tr class="header-row">
|
898 |
+
<th style="width: 100px;">Condition</th>
|
899 |
+
<th>Step</th>
|
900 |
+
<th style="width: 100px;">Line</th>
|
901 |
+
<th class="duration" style="width: 100px;">Duration</th>
|
902 |
+
<th style="width: 100px;">Status</th>
|
903 |
+
</tr>
|
904 |
+
|
905 |
+
<tr class="passed">
|
906 |
+
<td>Given </td>
|
907 |
+
<td>
|
908 |
+
user is logged in to wordPress
|
909 |
+
<table class="datatable">
|
910 |
+
<!-- -->
|
911 |
+
</table>
|
912 |
+
</td>
|
913 |
+
<td>5</td>
|
914 |
+
<td class="duration">0.28 s</td>
|
915 |
+
<td class="status">passed</td>
|
916 |
+
</tr>
|
917 |
+
|
918 |
+
<tr class="hidden passed">
|
919 |
+
<td class="trace" colspan="4">
|
920 |
+
<pre></pre>
|
921 |
+
</td>
|
922 |
+
<td class="screenshot-link" data-index="1"></td>
|
923 |
+
</tr>
|
924 |
+
<tr class="passed">
|
925 |
+
<td>And </td>
|
926 |
+
<td>
|
927 |
+
i resets the consent to collect data in the database
|
928 |
+
<table class="datatable">
|
929 |
+
<!-- -->
|
930 |
+
</table>
|
931 |
+
</td>
|
932 |
+
<td>6</td>
|
933 |
+
<td class="duration">0.03 s</td>
|
934 |
+
<td class="status">passed</td>
|
935 |
+
</tr>
|
936 |
+
|
937 |
+
<tr class="hidden passed">
|
938 |
+
<td class="trace" colspan="4">
|
939 |
+
<pre></pre>
|
940 |
+
</td>
|
941 |
+
<td class="screenshot-link" data-index="1"></td>
|
942 |
+
</tr>
|
943 |
+
<tr class="passed">
|
944 |
+
<td>When </td>
|
945 |
+
<td>
|
946 |
+
i open "menu-plugins" and deactivate plugin with slug "flexible-checkout-fields"
|
947 |
+
<table class="datatable">
|
948 |
+
<!-- -->
|
949 |
+
</table>
|
950 |
+
</td>
|
951 |
+
<td>13</td>
|
952 |
+
<td class="duration">1.16 s</td>
|
953 |
+
<td class="status">passed</td>
|
954 |
+
</tr>
|
955 |
+
|
956 |
+
<tr class="hidden passed">
|
957 |
+
<td class="trace" colspan="4">
|
958 |
+
<pre></pre>
|
959 |
+
</td>
|
960 |
+
<td class="screenshot-link" data-index="1"></td>
|
961 |
+
</tr>
|
962 |
+
<tr class="passed">
|
963 |
+
<td>Then </td>
|
964 |
+
<td>
|
965 |
+
check if plugin with slug "flexible-checkout-fields" is Inactive
|
966 |
+
<table class="datatable">
|
967 |
+
<!-- -->
|
968 |
+
</table>
|
969 |
+
</td>
|
970 |
+
<td>14</td>
|
971 |
+
<td class="duration">0.39 s</td>
|
972 |
+
<td class="status">passed</td>
|
973 |
+
</tr>
|
974 |
+
|
975 |
+
<tr class="hidden passed">
|
976 |
+
<td class="trace" colspan="4">
|
977 |
+
<pre></pre>
|
978 |
+
</td>
|
979 |
+
<td class="screenshot-link" data-index="1"></td>
|
980 |
+
</tr>
|
981 |
+
|
982 |
+
</table>
|
983 |
+
|
984 |
+
|
985 |
+
|
986 |
+
|
987 |
+
</section>
|
988 |
+
|
989 |
+
<section class="report">
|
990 |
+
<h2>Tags statistics</h2>
|
991 |
+
|
992 |
+
<div class="summary-table">
|
993 |
+
<table>
|
994 |
+
<tr class="main-header">
|
995 |
+
<th>Tags</th>
|
996 |
+
<th colspan="3">Scenarios</th>
|
997 |
+
<th colspan="4">Steps</th>
|
998 |
+
<th colspan="2"></th>
|
999 |
+
</tr>
|
1000 |
+
<tr class="sub-header">
|
1001 |
+
<th></th>
|
1002 |
+
<th>Total</th>
|
1003 |
+
<th>Passed</th>
|
1004 |
+
<th>Failed</th>
|
1005 |
+
<th>Total</th>
|
1006 |
+
<th>Passed</th>
|
1007 |
+
<th>Failed</th>
|
1008 |
+
<th>Skipped</th>
|
1009 |
+
<th>Duration</th>
|
1010 |
+
<th>Status</th>
|
1011 |
+
</tr>
|
1012 |
+
|
1013 |
+
<tr class="failed">
|
1014 |
+
<td>@flexible-checkout-fields</td>
|
1015 |
+
<td class="scenarios-all">4</td>
|
1016 |
+
<td class="scenarios-passed passed">3</td>
|
1017 |
+
<td class="scenarios-failed failed">1</td>
|
1018 |
+
<td class="steps-all">21</td>
|
1019 |
+
<td class="steps-passed passed">19</td>
|
1020 |
+
<td class="steps-failed failed">1</td>
|
1021 |
+
<td class="steps-skipped skipped">1</td>
|
1022 |
+
<td class="duration">11.16 s</td>
|
1023 |
+
<td class="status">failed</td>
|
1024 |
+
</tr>
|
1025 |
+
|
1026 |
+
</table>
|
1027 |
+
</div>
|
1028 |
+
</section>
|
1029 |
+
</main>
|
1030 |
+
|
1031 |
+
<div class="screenshots">
|
1032 |
+
</div>
|
1033 |
+
<div class="footer">
|
1034 |
+
<p><a href="https://github.com/leinonen/cucumber-html-report">Cucumber HTML Report Generator</a> by <a
|
1035 |
+
href="http://leinonen.se">Peter Leinonen</a> 2016.</p>
|
1036 |
+
</div>
|
1037 |
+
|
1038 |
+
<script>
|
1039 |
+
(function() {
|
1040 |
+
"use strict";
|
1041 |
+
|
1042 |
+
// Thanks to http://stackoverflow.com/questions/400212/how-do-i-copy-to-the-clipboard-in-javascript/30810322#30810322
|
1043 |
+
function copyTextToClipboard(text) {
|
1044 |
+
// Puts the supplied text into a hidden text area to select it and copy it the clipboard
|
1045 |
+
var textArea = document.createElement("textarea");
|
1046 |
+
textArea.class = "copy-to-clipboard";
|
1047 |
+
textArea.value = text;
|
1048 |
+
document.body.appendChild(textArea);
|
1049 |
+
textArea.select();
|
1050 |
+
try {
|
1051 |
+
document.execCommand("copy");
|
1052 |
+
} finally {
|
1053 |
+
document.body.removeChild(textArea);
|
1054 |
+
}
|
1055 |
+
}
|
1056 |
+
|
1057 |
+
var failed = document.getElementsByClassName("failed");
|
1058 |
+
for (var i = 0; i < failed.length; i += 1) {
|
1059 |
+
if (failed[i].className === "failed" && !failed[i].classList.contains("hidden")) {
|
1060 |
+
failed[i].addEventListener("click", (function(i) {
|
1061 |
+
return function() {
|
1062 |
+
if (failed[i].nextElementSibling.classList.contains("hidden")) {
|
1063 |
+
failed[i].nextElementSibling.classList.remove("hidden");
|
1064 |
+
} else {
|
1065 |
+
failed[i].nextElementSibling.classList.add("hidden");
|
1066 |
+
}
|
1067 |
+
copyTextToClipboard(failed[i].nextElementSibling.textContent);
|
1068 |
+
}
|
1069 |
+
})(i));
|
1070 |
+
}
|
1071 |
+
else if (failed[i].classList.contains("hidden")) {
|
1072 |
+
var children = failed[i].children;
|
1073 |
+
Array.prototype.filter.call(children, function(child) {
|
1074 |
+
return child.classList.contains("trace");
|
1075 |
+
})[0].addEventListener("click", (function(i) {
|
1076 |
+
return function() {
|
1077 |
+
if (failed[i].classList.contains("hidden")) {
|
1078 |
+
failed[i].classList.remove("hidden");
|
1079 |
+
} else {
|
1080 |
+
failed[i].classList.add("hidden");
|
1081 |
+
}
|
1082 |
+
}
|
1083 |
+
})(i));
|
1084 |
+
}
|
1085 |
+
}
|
1086 |
+
})(window);
|
1087 |
+
|
1088 |
+
/**
|
1089 |
+
* Rouds a number to the supplied decimals. Only makes sense for floats!
|
1090 |
+
* @param number The number to round
|
1091 |
+
* @param decimals The maximum number of decimals expected.
|
1092 |
+
* @returns {number} The rounded number. Always returns a float!
|
1093 |
+
*/
|
1094 |
+
var round = function(number, decimals) {
|
1095 |
+
return Math.round(number * Math.pow(10, decimals)) / parseFloat(Math.pow(10, decimals));
|
1096 |
+
};
|
1097 |
+
|
1098 |
+
|
1099 |
+
document.addEventListener("DOMContentLoaded", function() {
|
1100 |
+
var screenshotLinks = document.getElementsByClassName("screenshot-link");
|
1101 |
+
Array.prototype.forEach.call(screenshotLinks, function(failure) {
|
1102 |
+
var index = failure.getAttribute("data-index");
|
1103 |
+
var href = JSON.parse(failure.getAttribute("data-features"))[index].replace(/\s/g, "_");
|
1104 |
+
failure.innerHTML = "<a href='#" + href + "'>Screenshot</a>"
|
1105 |
+
});
|
1106 |
+
});
|
1107 |
+
</script></body>
|
acceptance/reports/html/screenshot/After_2464.png
ADDED
Binary file
|
acceptance/reports/html/screenshot/screenShot1.png
ADDED
Binary file
|
acceptance/reports/html/screenshot/screenShot2.png
ADDED
Binary file
|
acceptance/reports/html/screenshot/screenShot3.png
ADDED
Binary file
|
acceptance/reports/html/screenshot/screenShot4.png
ADDED
Binary file
|
acceptance/reports/html/tracker_long_message_is_visible-14-1.png
ADDED
Binary file
|
acceptance/reports/json/cucumber_report.json
ADDED
@@ -0,0 +1,467 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
[
|
2 |
+
{
|
3 |
+
"elements": [
|
4 |
+
{
|
5 |
+
"id": "activate-and-deactivate-plugin-flexible-checkout-fields-tests;plugin-flexible-checkout-fields--is-active",
|
6 |
+
"keyword": "Scenario",
|
7 |
+
"line": 8,
|
8 |
+
"name": "Plugin Flexible Checkout Fields is active",
|
9 |
+
"steps": [
|
10 |
+
{
|
11 |
+
"arguments": [],
|
12 |
+
"keyword": "Before ",
|
13 |
+
"result": {
|
14 |
+
"status": "passed",
|
15 |
+
"duration": 3776260858
|
16 |
+
},
|
17 |
+
"hidden": true,
|
18 |
+
"match": {
|
19 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/common.js:21"
|
20 |
+
}
|
21 |
+
},
|
22 |
+
{
|
23 |
+
"arguments": [],
|
24 |
+
"keyword": "Given ",
|
25 |
+
"name": "user is logged in to wordPress",
|
26 |
+
"result": {
|
27 |
+
"status": "passed",
|
28 |
+
"duration": 286095171
|
29 |
+
},
|
30 |
+
"line": 5,
|
31 |
+
"match": {
|
32 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/commonResults.js:9"
|
33 |
+
}
|
34 |
+
},
|
35 |
+
{
|
36 |
+
"arguments": [],
|
37 |
+
"keyword": "And ",
|
38 |
+
"name": "i resets the consent to collect data in the database",
|
39 |
+
"result": {
|
40 |
+
"status": "passed",
|
41 |
+
"duration": 27081581
|
42 |
+
},
|
43 |
+
"line": 6,
|
44 |
+
"match": {
|
45 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/wpdesk-helper/wpdeskHelperSettingsSteps.js:11"
|
46 |
+
}
|
47 |
+
},
|
48 |
+
{
|
49 |
+
"arguments": [],
|
50 |
+
"keyword": "When ",
|
51 |
+
"name": "i open \"menu-plugins\" and activate plugin with slug \"flexible-checkout-fields\"",
|
52 |
+
"result": {
|
53 |
+
"status": "passed",
|
54 |
+
"duration": 2133878763
|
55 |
+
},
|
56 |
+
"line": 9,
|
57 |
+
"match": {
|
58 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/plugins/pluginsSteps.js:9"
|
59 |
+
}
|
60 |
+
},
|
61 |
+
{
|
62 |
+
"arguments": [],
|
63 |
+
"keyword": "Then ",
|
64 |
+
"name": "check if plugin with slug \"flexible-checkout-fields\" is Active",
|
65 |
+
"result": {
|
66 |
+
"status": "passed",
|
67 |
+
"duration": 420396337
|
68 |
+
},
|
69 |
+
"line": 10,
|
70 |
+
"match": {
|
71 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/plugins/pluginsSteps.js:13"
|
72 |
+
}
|
73 |
+
},
|
74 |
+
{
|
75 |
+
"arguments": [],
|
76 |
+
"keyword": "After ",
|
77 |
+
"result": {
|
78 |
+
"status": "passed",
|
79 |
+
"duration": 2017470121
|
80 |
+
},
|
81 |
+
"hidden": true,
|
82 |
+
"match": {
|
83 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/common.js:35"
|
84 |
+
}
|
85 |
+
}
|
86 |
+
],
|
87 |
+
"tags": [
|
88 |
+
{
|
89 |
+
"name": "@flexible-checkout-fields",
|
90 |
+
"line": 1
|
91 |
+
}
|
92 |
+
],
|
93 |
+
"type": "scenario"
|
94 |
+
},
|
95 |
+
{
|
96 |
+
"id": "activate-and-deactivate-plugin-flexible-checkout-fields-tests;plugin-flexible-checkout-fields-is-inactive",
|
97 |
+
"keyword": "Scenario",
|
98 |
+
"line": 12,
|
99 |
+
"name": "Plugin Flexible Checkout Fields is inactive",
|
100 |
+
"steps": [
|
101 |
+
{
|
102 |
+
"arguments": [],
|
103 |
+
"keyword": "Before ",
|
104 |
+
"result": {
|
105 |
+
"status": "passed",
|
106 |
+
"duration": 943170015
|
107 |
+
},
|
108 |
+
"hidden": true,
|
109 |
+
"match": {
|
110 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/common.js:21"
|
111 |
+
}
|
112 |
+
},
|
113 |
+
{
|
114 |
+
"arguments": [],
|
115 |
+
"keyword": "Given ",
|
116 |
+
"name": "user is logged in to wordPress",
|
117 |
+
"result": {
|
118 |
+
"status": "passed",
|
119 |
+
"duration": 282878745
|
120 |
+
},
|
121 |
+
"line": 5,
|
122 |
+
"match": {
|
123 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/commonResults.js:9"
|
124 |
+
}
|
125 |
+
},
|
126 |
+
{
|
127 |
+
"arguments": [],
|
128 |
+
"keyword": "And ",
|
129 |
+
"name": "i resets the consent to collect data in the database",
|
130 |
+
"result": {
|
131 |
+
"status": "passed",
|
132 |
+
"duration": 30187140
|
133 |
+
},
|
134 |
+
"line": 6,
|
135 |
+
"match": {
|
136 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/wpdesk-helper/wpdeskHelperSettingsSteps.js:11"
|
137 |
+
}
|
138 |
+
},
|
139 |
+
{
|
140 |
+
"arguments": [],
|
141 |
+
"keyword": "When ",
|
142 |
+
"name": "i open \"menu-plugins\" and deactivate plugin with slug \"flexible-checkout-fields\"",
|
143 |
+
"result": {
|
144 |
+
"status": "passed",
|
145 |
+
"duration": 1161572176
|
146 |
+
},
|
147 |
+
"line": 13,
|
148 |
+
"match": {
|
149 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/plugins/pluginsSteps.js:17"
|
150 |
+
}
|
151 |
+
},
|
152 |
+
{
|
153 |
+
"arguments": [],
|
154 |
+
"keyword": "Then ",
|
155 |
+
"name": "check if plugin with slug \"flexible-checkout-fields\" is Inactive",
|
156 |
+
"result": {
|
157 |
+
"status": "passed",
|
158 |
+
"duration": 386512389
|
159 |
+
},
|
160 |
+
"line": 14,
|
161 |
+
"match": {
|
162 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/plugins/pluginsSteps.js:21"
|
163 |
+
}
|
164 |
+
},
|
165 |
+
{
|
166 |
+
"arguments": [],
|
167 |
+
"keyword": "After ",
|
168 |
+
"result": {
|
169 |
+
"status": "passed",
|
170 |
+
"duration": 1988750662
|
171 |
+
},
|
172 |
+
"hidden": true,
|
173 |
+
"match": {
|
174 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/common.js:35"
|
175 |
+
}
|
176 |
+
}
|
177 |
+
],
|
178 |
+
"tags": [
|
179 |
+
{
|
180 |
+
"name": "@flexible-checkout-fields",
|
181 |
+
"line": 1
|
182 |
+
}
|
183 |
+
],
|
184 |
+
"type": "scenario"
|
185 |
+
}
|
186 |
+
],
|
187 |
+
"id": "activate-and-deactivate-plugin-flexible-checkout-fields-tests",
|
188 |
+
"keyword": "Feature",
|
189 |
+
"line": 2,
|
190 |
+
"name": "Activate and Deactivate plugin Flexible Checkout Fields tests",
|
191 |
+
"tags": [
|
192 |
+
{
|
193 |
+
"name": "@flexible-checkout-fields",
|
194 |
+
"line": 1
|
195 |
+
}
|
196 |
+
],
|
197 |
+
"uri": "/tmp/tests/test-acceptance/features/tests_scenario/flexible-checkout-fields/activateAndDeactivateFlexibleCheckoutFieldsTests.feature"
|
198 |
+
},
|
199 |
+
{
|
200 |
+
"elements": [
|
201 |
+
{
|
202 |
+
"id": "tracker-message-flexible-checkout-fields-tests;tracker-message-is-visible",
|
203 |
+
"keyword": "Scenario",
|
204 |
+
"line": 8,
|
205 |
+
"name": "Tracker message is Visible",
|
206 |
+
"steps": [
|
207 |
+
{
|
208 |
+
"arguments": [],
|
209 |
+
"keyword": "Before ",
|
210 |
+
"result": {
|
211 |
+
"status": "passed",
|
212 |
+
"duration": 1056677632
|
213 |
+
},
|
214 |
+
"hidden": true,
|
215 |
+
"match": {
|
216 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/common.js:21"
|
217 |
+
}
|
218 |
+
},
|
219 |
+
{
|
220 |
+
"arguments": [],
|
221 |
+
"keyword": "Given ",
|
222 |
+
"name": "user is logged in to wordPress",
|
223 |
+
"result": {
|
224 |
+
"status": "passed",
|
225 |
+
"duration": 275564761
|
226 |
+
},
|
227 |
+
"line": 5,
|
228 |
+
"match": {
|
229 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/commonResults.js:9"
|
230 |
+
}
|
231 |
+
},
|
232 |
+
{
|
233 |
+
"arguments": [],
|
234 |
+
"keyword": "And ",
|
235 |
+
"name": "i resets the consent to collect data in the database",
|
236 |
+
"result": {
|
237 |
+
"status": "passed",
|
238 |
+
"duration": 1439808
|
239 |
+
},
|
240 |
+
"line": 6,
|
241 |
+
"match": {
|
242 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/wpdesk-helper/wpdeskHelperSettingsSteps.js:11"
|
243 |
+
}
|
244 |
+
},
|
245 |
+
{
|
246 |
+
"arguments": [],
|
247 |
+
"keyword": "When ",
|
248 |
+
"name": "i open \"menu-plugins\" and activate plugin with slug \"flexible-checkout-fields\"",
|
249 |
+
"result": {
|
250 |
+
"status": "passed",
|
251 |
+
"duration": 709212176
|
252 |
+
},
|
253 |
+
"line": 9,
|
254 |
+
"match": {
|
255 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/plugins/pluginsSteps.js:9"
|
256 |
+
}
|
257 |
+
},
|
258 |
+
{
|
259 |
+
"arguments": [],
|
260 |
+
"keyword": "Then ",
|
261 |
+
"name": "tracker message type \"short\" visible",
|
262 |
+
"result": {
|
263 |
+
"status": "passed",
|
264 |
+
"duration": 119925513
|
265 |
+
},
|
266 |
+
"line": 10,
|
267 |
+
"match": {
|
268 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/tracker/trackerResults.js:4"
|
269 |
+
}
|
270 |
+
},
|
271 |
+
{
|
272 |
+
"arguments": [],
|
273 |
+
"keyword": "And ",
|
274 |
+
"name": "Check if buttons skip and Allow & Continue visible in tracker message",
|
275 |
+
"result": {
|
276 |
+
"status": "passed",
|
277 |
+
"duration": 134937195
|
278 |
+
},
|
279 |
+
"line": 11,
|
280 |
+
"match": {
|
281 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/tracker/trackerResults.js:8"
|
282 |
+
}
|
283 |
+
},
|
284 |
+
{
|
285 |
+
"arguments": [],
|
286 |
+
"keyword": "But ",
|
287 |
+
"name": "i open \"menu-plugins\" and deactivate plugin with slug \"flexible-checkout-fields\"",
|
288 |
+
"result": {
|
289 |
+
"status": "passed",
|
290 |
+
"duration": 1033105179
|
291 |
+
},
|
292 |
+
"line": 12,
|
293 |
+
"match": {
|
294 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/plugins/pluginsSteps.js:17"
|
295 |
+
}
|
296 |
+
},
|
297 |
+
{
|
298 |
+
"arguments": [],
|
299 |
+
"keyword": "After ",
|
300 |
+
"result": {
|
301 |
+
"status": "passed",
|
302 |
+
"duration": 1977393669
|
303 |
+
},
|
304 |
+
"hidden": true,
|
305 |
+
"match": {
|
306 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/common.js:35"
|
307 |
+
}
|
308 |
+
}
|
309 |
+
],
|
310 |
+
"tags": [
|
311 |
+
{
|
312 |
+
"name": "@flexible-checkout-fields",
|
313 |
+
"line": 1
|
314 |
+
}
|
315 |
+
],
|
316 |
+
"type": "scenario"
|
317 |
+
},
|
318 |
+
{
|
319 |
+
"id": "tracker-message-flexible-checkout-fields-tests;tracker-long-message-is-visible",
|
320 |
+
"keyword": "Scenario",
|
321 |
+
"line": 14,
|
322 |
+
"name": "Tracker long message is Visible",
|
323 |
+
"steps": [
|
324 |
+
{
|
325 |
+
"arguments": [],
|
326 |
+
"keyword": "Before ",
|
327 |
+
"result": {
|
328 |
+
"status": "passed",
|
329 |
+
"duration": 958458537
|
330 |
+
},
|
331 |
+
"hidden": true,
|
332 |
+
"match": {
|
333 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/common.js:21"
|
334 |
+
}
|
335 |
+
},
|
336 |
+
{
|
337 |
+
"arguments": [],
|
338 |
+
"keyword": "Given ",
|
339 |
+
"name": "user is logged in to wordPress",
|
340 |
+
"result": {
|
341 |
+
"status": "passed",
|
342 |
+
"duration": 278898719
|
343 |
+
},
|
344 |
+
"line": 5,
|
345 |
+
"match": {
|
346 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/commonResults.js:9"
|
347 |
+
}
|
348 |
+
},
|
349 |
+
{
|
350 |
+
"arguments": [],
|
351 |
+
"keyword": "And ",
|
352 |
+
"name": "i resets the consent to collect data in the database",
|
353 |
+
"result": {
|
354 |
+
"status": "passed",
|
355 |
+
"duration": 19224355
|
356 |
+
},
|
357 |
+
"line": 6,
|
358 |
+
"match": {
|
359 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/wpdesk-helper/wpdeskHelperSettingsSteps.js:11"
|
360 |
+
}
|
361 |
+
},
|
362 |
+
{
|
363 |
+
"arguments": [],
|
364 |
+
"keyword": "When ",
|
365 |
+
"name": "i open \"menu-plugins\" and activate plugin with slug \"flexible-checkout-fields\"",
|
366 |
+
"result": {
|
367 |
+
"status": "passed",
|
368 |
+
"duration": 663565075
|
369 |
+
},
|
370 |
+
"line": 15,
|
371 |
+
"match": {
|
372 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/plugins/pluginsSteps.js:9"
|
373 |
+
}
|
374 |
+
},
|
375 |
+
{
|
376 |
+
"arguments": [],
|
377 |
+
"keyword": "And ",
|
378 |
+
"name": "Skip tracker message",
|
379 |
+
"result": {
|
380 |
+
"status": "passed",
|
381 |
+
"duration": 2302524439
|
382 |
+
},
|
383 |
+
"line": 16,
|
384 |
+
"match": {
|
385 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/tracker/trackerMessageSteps.js:4"
|
386 |
+
}
|
387 |
+
},
|
388 |
+
{
|
389 |
+
"arguments": [],
|
390 |
+
"keyword": "And ",
|
391 |
+
"name": "i open submenu \"Checkout Fields\" from menu \"toplevel_page_woocommerce\"",
|
392 |
+
"result": {
|
393 |
+
"status": "passed",
|
394 |
+
"duration": 794096829
|
395 |
+
},
|
396 |
+
"line": 17,
|
397 |
+
"match": {
|
398 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/menu/menuSteps.js:19"
|
399 |
+
}
|
400 |
+
},
|
401 |
+
{
|
402 |
+
"arguments": [],
|
403 |
+
"keyword": "Then ",
|
404 |
+
"name": "tracker message type \"long\" visible",
|
405 |
+
"result": {
|
406 |
+
"status": "failed",
|
407 |
+
"duration": 101550236,
|
408 |
+
"error_message": "AssertionError: expected 'Hey admin,\\nWe need your help to improve WP Desk plugins, so they are more useful for you and the rest of 30,000+ users. By collecting data on how you use our plugins, you will help us a lot. We will not collect any sensitive data, so you can feel safe. Find out more »\\nAllow\\nDismiss this notice.' to include '\\nWe need your help to improve WP Desk plugins, so they are more useful for you and the rest of 18,000+ users. By collecting data on how you use our plugins, you will help us a lot. We will not collect any sensitive data, so you can feel safe. Find out more'"
|
409 |
+
},
|
410 |
+
"line": 18,
|
411 |
+
"match": {
|
412 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/tracker/trackerResults.js:4"
|
413 |
+
}
|
414 |
+
},
|
415 |
+
{
|
416 |
+
"arguments": [],
|
417 |
+
"keyword": "And ",
|
418 |
+
"name": "i open \"menu-plugins\" and deactivate plugin with slug \"flexible-checkout-fields\"",
|
419 |
+
"result": {
|
420 |
+
"status": "skipped"
|
421 |
+
},
|
422 |
+
"line": 19,
|
423 |
+
"match": {
|
424 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/plugins/pluginsSteps.js:17"
|
425 |
+
}
|
426 |
+
},
|
427 |
+
{
|
428 |
+
"arguments": [],
|
429 |
+
"keyword": "After ",
|
430 |
+
"result": {
|
431 |
+
"status": "passed",
|
432 |
+
"duration": 2171911573
|
433 |
+
},
|
434 |
+
"hidden": true,
|
435 |
+
"embeddings": [
|
436 |
+
{
|
437 |
+
"data": "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iIiIiIiIiMjDZ+DAgUWynfy6gC5UAhjAysoKb28vPD1r4l7RHXsHe0wmE4mJSQQHB+Hv78/pM2cwZmTcVeAiIiIiIiIiIiIiIiIiIlI4hU4Ai4iIiIiIiIiIiIiIiIjIg8miuAMQEREREREREREREREREZGioQSwiIiIiIiIiIiIiIiIiMgjQglgEREREREREREREREREZFHhBLAIiIiIiIiIiIiIiIiIiKPCCWARUREREREREREREREREQeEVbFHYD8sx3Zv7u4QxARERERERERERERERF5ZKgFsIiIiIiIiIiIiIiIiIjII0IJYBERERERERERERERERGRR4QSwCIiIiIiIiIiIiIiIiIijwiNASwCmEym4g5BRERERERERERERERExMxgMNzRekoAyz+eyWTCZDLRe8+gLNM3dVtdTBGJiIiIiIiIiIiIiIjIP1lMTAxwZ0lgdQEtAqSnpxd3CCIiIiIiIiIiIiIiIiLA3eWulAAWAYxGY3GHICIiIiIiIiIiIiIiIgLcXe5KCWARERERERERERERERERkUeEEsAiIiIiIiIiIiIiIiIiIo8IJYBFRERERERERERERERERB4RSgCLiIiIiIiIiIiIiIiIiDwilAAWEREREREREREREREREXlEKAEsIiIiIiIiIiIiIiIiIvKIUAJYREREREREREREREREROQRoQSwiIiIiIiIiIiIiIiIiMgjQglgEREREREREREREREREZFHhFVxByAiIiIiIiIiIiIiIiIi8rCJjYvj4OGjBAReJikpCScnR2rX9KRJo8ewtbUttriUABb5h0hKSsJkMmFvb1/coYiIiIiIiIiIiIiIiDzUdu7ay4ZNW0hPT88y/dTps2zaso3ePXtQ16tOscSmLqBF/iGGDh3K33//Xej1li1bxieffHIPIhIREREREREREREREXn4bNm2g7W+G7G1tcHezi7LPGfnsiSnpPDLgiWcOnO2WOJTAljkHujbty+bNm3KMu3MmTN06tSJ5OTkYonJZDLd0Xr169enffv2RRyNiIiIiIiIiIiIiIjIwyckNIxNW7Zhb2/HkDcGM+TNweYkcIUKrrz77zd5tV8fDAYDy1as5saNG/c9RiWARSRP3t7edOnSpbjDEBERERERERERERERKXY7d+3FZDLh7uZGeZdyuFVwZcibg/GsXo0hbwzC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4fMHejmdbhGpHg0BLXIRREREEBISwvz58ys8KBw0aBDLli0DsL7Nf8MNN3DixAkWLVpEcnIyycnJ1rc6q2PQoEGsXbuW77//nrS0NE6dOmW9SLS3j5YtW9KuXTumTZvG0aNHSU9Pt/t230033UR2djZr166tcGyDBw9mwYIFHDx4kOPHjzNjxgx69+5NYGAgERER+Pj4sGDBAuv+64qj8+fj40N8fLx1Dtrk5GT27dtHcnIy8+bNo7S0tMoLwPDwcLZv305KSgq//vorJSUldo+xLjmbRih7YN62bVveffddTp06xa5du1iyZAmDBw+2LnPrrbeyYMEC0tPTrQ9lWrVqRWRkJG+//TYJCQmcPXu2wnxelVkeGJhMJq699lqg7KbT8oZlVUNQVterr77KuHHjePDBB0lMTCQyMpK//OUvAAwZMgSATz75hCVLlrBs2TLmzJlDSEgIhYWFPPLII/zrX//iwIEDmEymC97sjYyMZNKkSZhMJqZNm0ZWlu2L79dee43nn3+eDRs24OXlRc+ePfH398fT05PU1FTefPNNAgMDiYyMJD09nQkTJlww92q/fv2477778PDwICYmhnPnyobRqUnvzF27djF+/HgWLFhgvcm13Og988wzzJkz54J19u3bR2ZmJh4eHoSHh1vLtLN5uHHjxhQUFPDDDz+QnJxcZW+JyuzVQWC77rCwlFGz2UxRUZHDm8zq5mFnDR48mJiYGDZv3syZM2f48MMPMRqNdm8UBw4cyLx589i3bx/p6enEx8dXWY927NiRuLg4vv32W86ePVvhYWNqaioJCQkUFBTQsmVLDAYDOTk5NWojrrrqKpYtW8bJkydJS0urMHehj48PZ86csVsGLJypXxy5mG1GdfNMeUOGDCEmJoavv/6atLQ0uyNBVNUe2FPbvGkvP9kq247SWJN8bWF58ee5557jpZdesr58YhllYejQoQBMmTKFcePGcfLkSbp160azZs2IjY2lf//+PPXUU3Tt2pXmzZuzc+dOnnzySd577z0Aa0DU3nYcreusDh064ObmxubNm5kyZcoF8369+OKLvPbaa/z444/WXsdubm4MGjQINzc3Nm7cyIIFC1ixYgWzZs3C1fXCBy8WixYt4rnnnmP16tXW4frc3d3Jyclh8uTJNocHLSoqIjMzk9TUVHbs2MGaNWsq9HBxVJcC3Hzz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OHDgAG+88QazZ8+mUaNGtd7fpejw4cOMGzeuwhzxIpcL1eW/n127dvHWW2/x6aef1uk5/jNe14mISM2lpqbi4eFRo5El1QNYRJxy9uxZHnjgAXx8fLj77rt1cSpiR1ZWFkFBQezevRuDwUBUVBT33HNPnT60Li4uZsyYMX/o4C+o7viz0u8uANnZ2fj7+3PjjTfWd1IueX/GMjV37lx2795NSUkJTZo0YcyYMQr+1tJHH33EV199Rbt27XjppZcUMLiINm7cyPLly8nLy6NBgwb069eP2267rU62besacNu2bUybNo0mTZrw3HPP/WmDvyKXO9Xlv5+goCD+9re/1fk5/jNe111qNh9N4/rZ39V3Mv5Ujjx3M1ENfR0vKCLVoh7AUq/UA1hERETk8mUymfRgUkRERERERESkBmrTA1hPY0RERERE5KJQ8FdERERERERE5PffEE4IAAAgAElEQVSnJzIiIiIiIiIiIiIiIiIiIpcJBYBFRERERERERERERERERC4TCgCLiIiIiIiIiIiIiIiIiFwmFAAWEREREREREREREREREblMKAAsIiIiIiIiIiIiIiIiInKZUABYREREREREREREREREROQyoQCwiIiIiIiIiIiIiIiIiMhlQgFgEREREREREREREREREZHLhALAIiIiIiIiIiIiIiIiIiKXCQWARUREREREREREREREREQuEwoAi4iIiIiIiIiIiIiIiIhcJoz1nQCRy82ZzDwmrNnL14fOkFVQUt/JqTV/TyMDr2zMv27rSOMA7/pOjoiIiIiIiIiIiIiIiNihALBIHXvk0++JScql2NsXvC/9TvZZpSZWHUwiJyODdX8bVN/JERERERERERERERERETvqNDoVGBRE7z6963KTIpec9QcTKfbyAtdLP/gLgKsLxV5efHMwsb5TIiIiIiIiIiIiIiIiIg7UWQ/goKAGjBo1Cn9/P7w9vYjZsKGuNi1ySSk1mcDoVt/JqFtGN0rNpvpOhYiIiIiIiIiIiIiIiDhQZ10UmzRpjL+/HwDRPXrQv/9NdbVpERERERERERERERERERFxQp0FgFNSUir8Hx39xwsCe3p60rdPbzw8POo7KSIiIiIiIiIiIiIiIiIida7OhoAODQ294LPo6B4YMPBNTEy1tvXmG6/Rp/c1GI1GzmdkkJR0mjVr17FqzVrMZnON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BF/LB2ENZcFas0tZEBfAaP7fdwbKgrzWZcv/z//WqbCPcr18jQYwu1ZcTkRERERERERERERERC4LCgCL1Cs7QVhDpaCwvfXsBnOrWFexXxERERERERERERERkcuSi+NFRERERERERERERERERETkUqAAsIiIiIiIiIiIiIiIiIjIZUIBYJE6Z4CS4vpORN0qKUbjRouIiIiIiIiIiIiIiPzxKQAsUseMRhc4f+7yCQKXFEPKmbLjEhERERERERERERERkT80Y30nQORyM7h9U1btPQmnkwBzfSenDhjAAP3bhdd3QkRERERERERERERERMQBBYBF6tjse67Fz3M73/yaSEpWfn0np9ZC/T0Z0LYp0+/sUd9JEREREREREREREREREQcUABapY2EB3ix88Ib6ToaIiIiIiIiIiIiIiIj8CWlSTxERERERERERERERERGRy4QCwCIiIiIiIiIiIiIiIiIilwkFgEVERERERERERERERERELhMKAIuIiIiIiIiIiIiIiIiIXCYUABYRERERERERERERERERuUwoACwiIiIiIiIiIiIiIiIicpkwVneFtm3bcuedd1b4bOXKlcTFxdVZokREREREREREREREREREpPqq1QPYy9uLgQMHXvD5wEGD8PL2qrNEiYiIiIiIiIiIiIiIiIhI9Rmi2lxldrTQfaNH06x5c6c2eOrkSRZ++mmtE3Yx+fv7cd+99/Cfz5aQkZlZ38n5U4vd/kN9JwGz2UxxcTEFBQWUlJTUd3JERERERERERERERETkT8xoNOLp6YmbmxsGg6H66zuzUOXgb0F+PgcP/gpAu/bt8PT0tLnsH1FwcDD3j76HlatWk5GZyeTnnsHNzY0XX/lnfSdN6omlIJlMpvpOioiIiIiIiIiIiIiIiPyJubi4YDRWeyZfq2qvWZCfz7z588n8refsT9t+4uGHH64QBK6tobcP4e8TJ3DXyNEknT5d4Tt3NzdWLl3ET9t38Pq0t+pkf4lJSbU6iXJps7w54ebmVs8pERERERERERERERERESlTk96/UIMA8IGDv1qDvwAZGRkcPHCQLl27VFju+eefv2Ddf/7TuR62wcENcXMz8vhfH+KFl16r8N3wYXcQFhZKUGBgdZNu04KFi+psW3JpqmkBEhEREREREREREREREfkj+UN2ew1u2JBTiUn0v7Efc+d9zKnEJKCs9++oe0Zw6lQiDRoEVVjn5oH9efD+0TQKbsiBg3FMe/tdTp1KLFvP3Z2nxo9j0ICbKCoqJu7w4Qrrvjj5Wby8vHj2+RcBmPbPV4ju3hUMBvbvP8i0t94hMaliT2QRERERERERERERERERkT8al+qu0K5dO/z9/a3/BwQE0K5d2zpNVGBAADt+3sn2HTsZdc8I6+e33DwQs9nM4mUrCAwIsH5+fd8+PPv3p1mybAUTn/k/DIayIK7Fs3+fyI39rudfM2fzz6lvkpOdY3f/a/67jr8/O5nnJr9IQIA/zz3zdJ0en4iIiIiIiIiIiIiIiIjIxVDtHsBeXp488sijHDx4EID27dri6eV1wXLlh3uuajhoe4KCAjl+8iTfbNjIv96ezuw588jIzGTkX+5iydIVnE1PJyjof0NAP/zg/Xy2ZBmfr1oDwOvT3mbVisVERrTg3Pnz3DJoAC+9+gZffxMDQOLp0wzof6PN/f+4dZv1b3c3d/75ypRqpV9EREREREREREREREREpD7UaAhoLy9Pulaa87cu+fv7kZubR+yuPRw9lsCwO+/g4MFfCWkUzOer1tC+fTt8fX0xGAyYzWauaBVFVMuW3DdqZIXthIWG4uPjg6urK3v27XN6/w/dP5pbbh5AwwYNyM3Lw9PTE1dXV0pLS+v6UEVERERERERERERERERE6oxTAeBTJ0/SrHlzpzZ46uTJWiUIwMfHl7y8PAA+W7qcCX8bS+erO7Lqy/+Sm5dHXl4eBoMBHx8fcnJyKCkpYcGni9iw8dsK20lNSyOiRQsAjK6uTu176O1DGD1qJFOnv8ORo8eI7t6ViU8+UetjEhERERERERERERERERG52JwKAC/89NOLnY4KfH28KSgoAGDTt5t58okxdO/WhX9OexOAvPx8AHx8vMnJyeH4iZO0jIjg+IkLg88nTpykuLiEHtHdOZWY5HDfba5szb79B1gfswGAwEB/B2uIiIiIiIiIiIiIiIiIiPwx1GgI6KpY5vktP/dvTXl7e5OfXxYALikp4b33ZxHepDFnziQDUPDbd74+vqSQyiefLuKfr7xIatpZtu/4GQ8Pdzw8PFkfs4HcvDyWLFvOE2Mfw8PDnUOH4omKamlz38eOJTCg/430v6kfJ0+eomVkZK2PR0RERERERERERERERETk91CrAHBAgD+3Dh5CeHh4tb6zx9PTExcXF/J/6+ULELNhU4Vl8n/rHezr61P2/cZvwWDgsUce5K7hQ8nMzOSbmE3WXrwzZ88lIzOLEXffRcMGDcjIzODnnb9Yh5kub+WqNUREtODvT43H39+f7Jwcfo07hMlkqtZxyB9PfHx8fSfhknTFFVfY/E7nVOfnYtK5rUjnQ6rDXn4RERERERERERGRy5shqs1V5pqufO+99xARUbGHrKUHsL3vRCxit//wu+0rPj6exo0b/277uxycOXPGYdDpzxxkcHT8ynM150ze+zOdW50PqQ5H+UVEREREREREREQuby61WblJk4q9e0tKSpz6TkRERERERERERERERERE6l6tAsBnzpyu8P+pxESnvhMRERERERERERERERERkbpXqwDw2i/XcuLEcYqKijh+PIH/rv3Sqe9ERERERERERERERERERKTuGWuzckZmJv/5z6JqfyciIiIiIiIiIiIiIiIiInWvVj2ARURERERERERERERERETkj0MBYBERERERERERERERERGRy4QCwCIiIiIiIiIiIiIiIiIilwkFgEVERERERERERERERERELhMKAIuIiIiIiIiIiIiIiIiIXCYUABaRP7S4uDhmzJjBF198AYDZbGbx4sVMmTKFvLy8ek7d7yspKYlt27aRkpJS30kR4Pjx42zZsoXz58/Xd1JERERERERERERERKwUABa5SEpLS0lJSakySHn+/PkLgkanTp1i8uTJLFiw4PdK4h/Sxx9/THh4OHPmzAFg+fLlvPDCC2zfvh0oO6+PP/44//rXvygqKqpyncvVihUrWLJkic0A8NatW/nHP/7B999/X2f7vBjbvFz85z//YeXKlWRkZNR3Uv5w7NV/lzLV3SIiIiIiIiIiInIpMNZ3AkT+qNLS0li3bh3Hjh0jJyeHgIAAOnbsyODBgzEaHRedN998k+TkZMaNG8cVV1xh/XzFihX88MMPDBw4kJtvvtn6eUJCAjk5ORw4cOCiHM8fwZtvvsnHH3/MuXPnKCkpoWHDhnTu3JknnniCPn36ALBp0yZycnLYsGEDjz32mFPbrck6f0S1zXNxcXEUFhYSFxdH37596yRNF2Ob9SUrK4uYmBj2799PVlYWfn5+tGnThgEDBtCgQYP6Tl692L17Nz/88AOJiYmUlpYSFBREhw4dGDRoEO7u7jXerq3672Ir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YGAgzZo1Y+/evUyaNOmc/RaLhbfeegtvb288PT0doUXlypUv9raUmS+++IKff/6Z5ORkx7Sv9957b5FtGzduDNjD2tGjR/Phhx/SqFEjIiIi6NOnDxs2bCh1/4MHD2bixIkcPXrUMdVqeSvJM3exwsLC2LNnDxkZGdhsNlq0aIG/v3+hUZRvv/224xkGCo1yL4127dqxZMkSkpKSLtuI7otx11138cknn5CcnMxXX31VaJ+rqytDhw497/Ft2rRh+fLlnDp1irfeegsfHx9SU1MLtbnQZ8LVJDQ0lObNm7Nnzx7CwsIICwtz7DOZTDRs2JDQ0FAiIyNZunQpGzduJDs7u9A5fvzxR+Lj4/Hz83OshVzwhwXFff717duX6dOnM2/ePJYsWUJubi4Affv2veRrysvL4+effyY3NxeDwVBoxHFB4H2h96hHjx5s27aNffv28corr+Dq6oqTkxNvvvlmiT+727Rpw4oVK0hISOD1118H7J/HVatWpW3btiW6lvPdWxEREREREREREZELuegAeNy4cSVqN2HChIvtQqTceHh40Lp1a6KiosjIyMDDw4Nq1arRs2dP6tatC9jXrnR1dWXJkiWcPHkSs9lMcHCwYxRrz549SU5OJjw8nKysLPz8/LDZbDRs2JDbbruNVatWObZf7AjP+++/n5UrVxIdHY2rqyvHjh0jOTkZJycnsrOzCQkJITY2lvT0dPz9/enatWuh6W+vtFq1ahEQEEBSUhLp6el4eXnRunVrBg8ezBNPPFHkMbfeeisjR45k+vTpjgBk8uTJjB49msjISMeIvdLw8vJi1apVfPjhhxw4cIDg4GBH+Fpe67KW5Jm7WH5+fpjNZkwmE61ateKuu+46p02VKlU4efIklSpVYuDAgQQHB19UX66urowaNYply5Zx8uRJ/Pz82LJlC3Bp681eqsDAQMaMGcOSJUuIjIwkLS0NLy8vGjZsyM0333zBadGdnZ155pln+PPPP4mIiCAtLQ1PT0+CgoIcI2Uv9JlwNTEYDDz44IP8/fffbNmyhVOnTmGz2fDz86NRo0bYbDY6depEeno669evJzMzE3d390Jrjvv7+xMfH09cXBxeXl507tyZm2++GSj+869geujFixeTlJRElSpV6N27d4mD0fOxWq107NiRffv2kZKSgtFoJCAggPbt2ztG0V7oPapevToj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iIiIiIiIiIiIiIhIBaEAWERERERERERERERERESkglAALCIiIiIiIiIiIiIiIiJSQSgAFhERERERERERERERERGpIBQAi4iIiIiIiIiIiIiIiIhUEAqARUREREREREREREREREQqCAXAIiIiIiIiIiIiIiIiIiIVhAJgkYtks9lITEwscfu0tDSys7MvY0VSkRxJziI6Kau8yxARERERERERERERkWuMAmCRixQWFsb48eOL3Ge1WrFarYW2Pfnkkxw+fPhKlFZqiw6cpN0X6wh4eykj5+9lT0I6jT9eTWxazhWvxZJvw5JvK7Rt8Ixt/G9t1BWvpTyNnB/B3H0J5V2GiIiIiIiIiIiIiIhcY5zKuwCRsjZ27FgOHDiA0WjEz8+PRo0aMXjwYGrVqlWm/dhstiK3m81mhg0bxvvvv1/mfV4O2WYrj8/dw2s9GzCoWTWcjAYs+fnc3zqYSh4uV7SWXEs+we+tYM2jnWga6O3YfkezIGr7u1/RWkRERERERERERERERK5FCoClwklOTubBBx/k+uuvJyUlhRUrVvD666/z6aef4uvre9n7t9lsWCyWy95PWTmSnE1qjpkH2gTjZDQ4to/tXv+K12LDRp41/5ztd7esfsVrERERERERERERERERuRYpAJYKycPDA19fX3x9fXnggQdYvHgx+/bto1OnTuTl5TFjxgzWrl2LzWaje/fuDBs2DKPRSFxcHG+++SbJycn4+/tz++2307t3bwByc3OZOnUqa9euxdnZmcqVK5+3hlGjRgEQGhrK66+/DsDkyZNJSkrCw8ODO++8k759+zraL1++nLlz55KWlkazZs144oknigysw+PSGL0wgvD4dPzcnPjujlC61anEjtg0Xl6yj70nM6jt586rPRrQu2EVAN5eeZDf9sRxKiMPJ5OBQc2q8V7vxrg5mcix2APXSu8sBeDBNsE827kOrSet5eiYnvi5O2PNt/G/tVF8tzWGtBwLgV6uDGkRxPieDVh+6DSPztlF9JieAORYrFR9dzkbnuhM00BvPlkfzdTtx4hLz8XTxUT4Mzew9OBpXly8j/RcCw0qe/J+78Z0qRXguMbrvgoDoHudSvw5vB13/bKd1kE+jlD6112xfLQuirj0XNpU9+F/fZrSsLLnBa/1bPP2JfD2qoPEp+cCcFP9ylTzdmXO3gQSs/K4qUFlvryt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VFQUn0/63PF63Lhxhfb//fffrF279pKL+mzSZKZ8+xXTpn7H1J+mExsbh7ePN+3btmHyV98yc9Zs7hx0O++8MZ55CxbSonkz+va+hRfHjr/kvkti7fowoqKi+d/ECfww9ScSk5IJCa7B2nVhnDx16oLHx8bGkZaWzkMP3MeCRYupHhTEn38t4O4hd7J7917APs11SkrK5b4UEREREREREREREREREalAymwN4LIKfwGOHT/BfQ89xmOPPMhjDz+Ij483aWnp7NqzF1c3V+LjE3jsyWd4ecwoPnz//zh16hSvvv4Wa9YWPWV0WcvPz+fxESN5cfRzvDj6OYxGEydiY9kRvqtEAXCe2cw7E9/nmaeeoPsNXTlyNIawjZu4udeNPPX4o5gtFvbvP8hbEyZegasRERERERERERERERERkYrCUK9xi9ItpnuWghHAZRn+yn/L9k1XJrQXERERERERERERERER+S8o1RrARVH4KyIiIiIiIiIiIiIiIiJydbikAFjhr4iIiIiIiIiIiIiIiIjI1eOSAmCFvyIiIiIiIiIiIiIiIiIiV49LngJaRERERERERERERERERESuDgqARUREREREREREREREREQqCAXAIiIiIiIiIiIiIiIiIiIVhAJgEREREREREREREREREZEKQgGwiIiIiIiIiIiIiIiIiEgFoQBYRERERERERERERERERKSCUAAsIiIiIiIiIiIiIiIiIlJBKAAWEREREREREREREREREakgFACLiIiIiIiIiIiIiIiIiFQQCoBFRERERERERERERERERCoIBcAiIiIiIiIiIiIiIiIiIhWEAmARERERERERERERERERkQpCAbCIiIiIiIiIiIiIiIiISAWhAFhEREREREREREREREREpIJQACwiIiIiIiIiIiIiIiIiUkEoABYRERERERERERERERERqSCcyrsAkbJms9nKuwQR+Q8wGAyXfA59XomIiIiIiIiIiIgIlM3vnAsoAJYKpSBMyczMLOdKRKQi8/T0xGazXdI/yPq8EhEREREREREREREom985n00BsFQ4BaGKn59fOVciIhVRSkpKmf1DrM8rERERERERERERkf+2svydcwGnw/3Gl9nJRK4GmlJVRC63sg6ARUREREREREREROS/q6wDYGOZnUlERERERERERERERERERMqVAmARERERERERERERERERkQpCAbCIiIiIiIiIiIiIiIiISAWhAFhEREREREREREREREREpIJQACwiIiIiIiIiIiIiIiIiUkEoABYRERERERERERERERERqSCcLtTAADxxXT36NgnCzeni8uJsi5VF++L5asNhbBd1BhERERERERERERERERERuZALBsAv9mjExH6hl9zRrU2r4+3qxPur91/yuURERERERERERERERERE5FwXDIDvDA0ps84GtwxRACwO97asUd4liIiIiIiIiIiIiIiIXNPi03N4cdE+lh48SXqupbzL+U/zdnXipgaB/K9PE6p5u5VbHRcMgL1cL9ikxMryXHJtu7dlDSYPaF7eZYiIiIiIiIiIiIiIiFzTnvp1AyvjszF7eIPnxS3nKmUj3ZrPX/vjyEhNYc6jPcqtDj0FcsUp/BURERERERERERERESkbyyPjMLt7gEmxX7kzGTG7e7AiMq5cyyjVk5CZd+6w8UOnMzianFVmBU3o05zY124tUdvDY/vydu+yCxKdjAbGdG/E3jG3kPveIBLfGsDiR6+nXbB/mfXxX1fRw9+jR2P4868FbN+xs8j9ZrOFtevC+HHajCtcWfk5dDiKKT9NZ8myFcW2udB9ExERERERERERERGRollt+eDkXN5lSAEnZ/t7Uo5KFQDXeGu+IwQ+lmIPfe/9eRNL98fz3aZonpmzg0OnMwBYsj+eEX9sZ098aqkK2hWbSpCPG1U8XR3bGgd6s3PUTbSu7ufY5u3qRJ0AT8JjU0p1/uIYDfDng114t28LFkfGM2hqGE/N3k50UibO+ouJMlHRw1+AH36cxvg33mbHzl1F7k9MSmLEyFF8/sWXV7iysjPutTe54cZb2Llrd4naL1q8lI8/ncTO8KLvCVz4vomIiIiIiIiIiIiIiEjJlGpRXh9XJw6ezsDH1Znm/1vCyie7sflYEve1q8W3G6N4oH0d7v9lM3893JUX5+/i/f6hPDRzC5tH9ipxH+Fx9kC3ZXVflh88CcCgFsG0rO7H4JYh7Igt2O+HwQA7T9hf+7s788UdbbitWXWy8qxMDjvM28sisNpsAJgMBsbf1JQnO9fD08XEvL2xjPhjO8nZZgAeaFebvk2C6PfdWhZGxjvqmRl+zPH9hfr4YUh7uterQqCXK5l5VqZtO0pmnoXhbWtR3cedzTFJDJ2+gdi0nItq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XuHraAInV9sqZePpArLRWPxoX3vcs55Fafd0hVIBWEREREREREREREREROS6YDh/HfO8WxCXNvYCMS+67z8aiuVynnHn5GzAXgh2drGtfLaervDaV/KevUK5lNhXwVm/pVEBWERERERERERERERERESuMQbbds7Gq3clb3mpACwiIiIiIiIiIiIiIiIi16areCVveTm0WD+hsnOQ69qdlZ2AiIiIiIiIiIiIiIjIVcwA5kJwcKzsRARs/xaVvMrYeOEuIiIiIiIiIiIiIiIiInIlcjAZIDXldOFRKpW5EE6ewMFUuSVYbQEtIiIiIiIiIiIiIiIicpXq3qgai/bGQnwcYK3sdK5zBjDAbQ2qVmoWKgCLiIiIiIiIiIiIiIiIXKU+6dsGT2cHVh48wcnMvMpO57oW5OnM7fWrMrZni0rNQwVgERERERERERERERERkatUkJcr0+5rV9lpyBVEZwCLiIiIiIiIiIiIiIiIiFwjVAAWEREREREREREREREREblGaAtouWYlJCRUdgoicg1ycXGp7BREREREREREREREREqlArBcs8LDwys7BRG5BsXHx1d2CiIiIiIiIiIiIiIipdIW0CIiIiIiIiIiIiIiIiIi1wgVgEVERERERERERERERERErhEqAIuIiIiIiIiIiIiIiIiIXCNUABYRERERERERERERERERuUY4VHYCIiIi17uEhITKTkFEREREREREREREKoGLi0uFx1QBWEREpJKFh4dXdgoiIiLlkpqairOzc2WnISIiIiIiInLVSktLq/CYV8QW0F6eXpWdgoiIiIiIiJRRampqZacgIiIiIiIiIv9Q6QXgJk2a8OBDD1Z2GiIiIiIiIiIiIiIiIiIiV71ybwEdGhrKbbfdRo2aNXEwGYmNjWPt2rUcPny4IvMTEREREREREREREREREZGLVK4VwLVr1+ahhx8iMzOTr2bPZvr0GcTGxjF48CCaNWta0TmKiIiIiIiIiIiIiIiIiMhFKNcK4F69erF71y4WLFhgvxYbG4vFYiaiR0/27N1HkdnMf+65h5o1a+Lh5kbksSi+/OJLHBwciOgRQdOmzTAXFpKenl4sdvUaNYiIiCCoShWSkhL5+eeFxMfHA5QYLyIigmbNm+Ps5MTRo0eZPXv2JTwOEREREREREREREREREZGrV5kLwH7+fgQEBDB/3rxz2rZu3UanTp2pWaMGkZGR1K9fj0U/L+TQkSM4OToC0K1bN8Jq1eLLL2aSm5tHx44dqFUrDAAPD0+GDB7MqtWrmfPnn7Rr3457772X8ePHY7FYzolXt15dmjdvzrSpU8nIzMTT0/MSH4eIiIiIiIiIiIiIiIiIyNWrzFtAe3jYiqzpGRnntJ255u7uZr+Wlp5OdlYWqampADRv0YIVK1YSExNLcnIyhw8fsfdt3qI56Rnp/PHHH2RnZ7Ny5Sp8fHwIqhJUYrz83DwcHR3x8/cnLy+PpKSkst6OiIiIiIiIiIiIiIiIiMg1o8wrgLOyMgHw9vI6Z/tmby8vALKzc0oc6+zsjIuzs70Y/E9eXp4EBlZhzJgx9mtWrHh6eXIi4cQ5/aNjYvh54UK6d+9ORI8IVixfwe7du8t6SyIiIiIiIiIiIiIiIiIi14QyF4BTTqVw8mQiLVu1Ijomplhby9atyMzKIjo6usSx+fn55OTmEBgYaD/X92zpqenEn4hn8meTLzqfnTt2sHPHDpo3b07//v2Ji4/jVPKpst2UiIiIiIiIiIiIiIiIiMg1oMxbQAMsWDCfZs2b0at3L6rXqEG10Gp07dqFTh06sPCnnzCbzaWO3bplC126dqF2ndp4enrgdXrVMMDu3bupUqUKnTt3wtfXFx9fH6pWDSk1lre3D0FBQTg5OZKQcBKw4ursWp5bEhERERERERERERERERG56pV5BTBATEwsM6ZN57bbb2fokCEYjQbi4+P56qs5HDp06LxjV6xchdlcRJ/effD28iI3L5fDR44CkJGZwRczZtKtezc6dOyE1Wph3779LPjxxxJjVQ2pSp/evXF3dyMrO5u1a38nNi62PLckIiIiIiIiIiIiIiIiInLVM7Ro295a2UnI9Wv1ssUVGs9qtWKxWMjNzSUkpPTV4yIi5RUfH4+rqytGoxGDwVDuOPp9JSIi14LIyEiCg4MrOw0RERERERGRq1ZaWlqFfOZ8tnJtAS0iIiIiIiIiIiIiIiIiIlceFYBFRERERERERERERERERK4RKgCL/AsyMzM5evRoqe1ms5m0tLTLmJGIiIiIiIiIiIiIiIhcD1QAFrlIubm53HvvvezcufOCfRcuXMj06dNLbZ80aRIzZsyoyPREREREREREREREREREcKjsBESuNAMHDiQxMbHYtX79+vHwww/To0cPQkNDL3kOq9V6zrXc3Fx69epVYn9/f3++/fbbS55XRERERERERERERERErm0qAIuU4LHHHqNz58729y4uLhgMBu6///5/bU4XFxe+/vprACIjI3nllVf44osvcHZ2xmQy/WvziohIyQoKCnBycqrsNERERERERERERETKRFtAi5TA3d0dPz8/+x83NzcA7rrrLnbt2gXYCgNTpkxhwIAB9O/fn6lTp2KxWEqMl5iYyKhRo4iIiGDQoEH8+eef5/QxGAwEBgYSGBiIr68vYFv5GxgYiJ+fHwMHDmTJkiX2/osXL2b48OEAzJo1i4EDBxIREcHAgQOZNGkSOTk59r5JSUm88cYb9OnTh8GDB7NixYqKeVAicl3LyMigT797aHlTe9asXVfZ6RSze89ebul4O3d0v4v4+BNlGvvV3G/ofEd32tzS6YJ9n3nuBe66uz+ffT6tvKmKiIiIiIiIiIiIVCitABYpp1mzZrFt2zY+/PBDzGYzL730EtWrV6d79+7F+lksFl599VVCQkKYMmUKubm5TJgwoczzderUic2bNxMREQHAzp07adu2LQCHDx+mbdu23HPPPSQmJjJhwgTGjRvHK6+8gtVq5X//+x9BQUHMmDGDv/76i7Fjx9KgQYMK2c5aRC6/pctWMHvu1xw5GklGRgYBAQG0adWSYUMGc0OjhhU617Fjx9m1Zy+pqakMGVx8F4Sdu3azd99+ABYtXkLnTh0qdO7StG3fmVOnUkps8/Dw4M+tG/ht2QoSk5IgCdZv2MiAfv930fGPHY8mNi4OV1fXC/ZdvOQ3AG7t1PGi44uIiIiIiIiIiIj8m7QCWKQEEyZMoE+fPvY/mZmZxdotFgsLFy7kgQceoEaNGoSHh9OlSxc2bdp0TqyjR48SGRnJs88+S40aNahfvz5169Ytc06dO3dm69atZGdnY7Va+fPPP2nTpo293cfHhypVqtC4cWNGjBjB2rVrycjI4MCBA/z111888cQT+Pv70759e+rVq8eWLVvK/mBEpNJNm/EFTzzzXzZv2capUykUFpo5cSKBnxct5nh0TIXPN37CRJ57YTSz53x9Tlurli245eabqB4aSv8yFFgvh149I6hTO5wbmzS+bIVpERERERERERERkSuBVgCLlGDIkCF06PB3wcDd3b1Ye3Z2Nnl5ebz99tsYDAYArFZriYXdpKQkXFxc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axe8vH0oKiri+LFj/Prrr6SkpADg7uFBz549qVO7Nnl5eWzdupXf160DqxVvbx/69+9HYJUquDg7s2btGmJjY3F3c+Ott94CYMXy5axes4aIiAiaNW+Os5MTR48eZfbs2RXzxERERERERERERERERERErlCXfAawg8lEs2bNcTA5UJCfD8Adt99O3Xp1mT59BiYHEw8MHkxSUhLbt23H39+fwkIzEz/9FEdHR2677TaGDh3KJ598gtlsZuB995Kbm8fnn3+Ol7cX/fr1p7CgkI2bNuLu4U5YWBjjPhpHQaFtruCqVcnOyeG9994DwFJURN16dWnevDnTpk4lIzMTT0/PS71NEREREREREREREREREZErXrkLwHf17EmPHhE4OzlhNJo4cOAARyMjMRgMtG3blvnz55OcnATAzp07aVC/Adu3bQcgvyCf1NRUAObNm8eoF0dRv359kpOTqVmzFu+88y5ZWZkkJyezbu3vtG7Tho2bNtrnPpVyyv46uKrt7yKz2X4tPzcPR0dH/Pz9SUxKIi8vr7y3KSIiIiIiIiIiIiIiIiJy1Sh3AXjFyhXs3b2Xtje1pW69unz11VcAOLu64uzszH8GDMB6uq8BiDsRX2Ics9lMakoqvn6+FBUVkV+QT1ZWpr09OSUZXz+fMuUWHRPDzwsX0r17dyJ6RLBi+Qp2795dntsUEREREREREREREREREblqlLsAnJubR0ZmBitXraJ+g/rcfMvNbNywkbzcXPLy8/nuu285dPDQBeMYDAa8vb3IyMgkNS0NZydnPD09yMzMAiDAL4DUlLRSx5sLzTiYTOdc37ljBzt37KB58+b079+fuPg4TiWfKiGCiIiIiIhcDZKSknB0dMTHp2xfEBURERERERERuZ4YLzWApaiIRT8vomvXrvj6+gK24mu3O++kZs2aeHp5EhJSFVdXF/sYP19fatasia+vL3d2uxOj0cTBAwc4mZDA8eho+vS5m4CAAMJrh9OhU0e2bN1c6vwpKSk4OTnRqFEjfHx9CAgIxNvbh6CgIJycHElIOAlYcXV2vdRbFRERERGRcjpx4gSvvvoqhYWF5Y7x8ccf24+SuRRfffUVy5cvv+Q4FamgoKCyUxARERERERGRa0S5VwCf7Xj0cY4cOUK37t345utv+PW33+jS5Q769euHl5cX6RnpfPvtd+TGxQFgNJno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ly9frgpgketISkoKdnZ2WFhYmJcdro+6/L061zc+Pr7aMqMiIiK/l3PLdl/q8y4mJgYvL6+rGJmIiIiIiIhI45Kbm9sgz5zPpwpgkTqYOXMmcXFx2NnZ0bt3bx577DEsLat+jZKSkpg+fTopKSm0atWKJ598krZt2wJVVS0ffvghW7ZswWQyMXToUKZPn46FRe37UYqIiIiIiIiIiIiIiIjUhxLAInUwa9Ys3N3dSUlJYf78+XTo0MFcKWxpacljjz2Gh4cHa9asYc6cOSxbtowmTZrw3//+l3379vH6669TXl7O3Llz8fPzq7H3nIiIiIiIiIiIiIiIiMiVUPmhSB20adMGFxcXOnToQPfu3YmJiTGf8/LyIiAgAB8fH2bMmIHBYGDPnj1UVlaydu1a7r//flq0aEHr1q0ZOnQo4eHh1/BOREREREREREREREREpDFSBbDIZSooKOCtt97i4MGDlJWVYTAYGDx4cK19LSws8PT0JDMzkzNnzlBSUsKLL75oXrvdZDKZl4cWERERERERERERERERaShKAItcpmXLlpGVlcWHH36Ig4MDr7zyygX7lpWVkZaWhpeXF46OjtjZ2TFv3jx69ux5FSMWERERERERERERERGRG40SwCK1KCwsJCMjw3xsb29PZWUlBoOBsrIyysvLzdW85xQXF5Oenk5paSkff/wx9vb2BAUFATBs2DDef/997O3t8fHxITs725wcbtKkCampqeTn5+Pk5HRV71NEREREREREREREREQaFyWARWoRFhZGWFiY+fjuu+/m3nvv5ZVXXmHq1KmUlZXh7OzMhAkTAPDx8aGoqIhp06ZhZWVFx44deeWVV7C1tQXgoYce4qOPPuLVV18lKysLd3d3nn32WRwdHenXrx8bN24kLCyM2bNnX5P7FRERERERERERERERkcbB0K1nH9PVvKCl0Uh5RUX1NktLysvLzcctW7bk7rvv5q233qKkpORqhidX2dYN6xp0PpPJRGVlJcXFxfj4+DTo3CIiACkpKdjZ2WFhYVFjJYC6qMvfq3N94+Pj8fPzq/c1RURELldiYiItW7a85OddTEwMXl5eVzEyERERERERkcYlNze3QZ45n69eFcCdOnVk4MBBuLu7UVJylpSUFD5dHpBLiQAAIABJREFUvrxGYve3pk+fzpEjRwgPDze3DR48CA9PTz7/7HNzW3Z2Fnv37aXk7Nn6hCciIiIiIiIiIiIiIiIickOqcwLYvak7d999N9+vX8/J4yexs7fD09PzkslfAKNlzcsZLS1rZLMLCgrZumVrXUMTEREREREREREREREREbmh1TkB7OHhiQnYE76HiooKyIakpCTzeWcnJ0aGhNCmdWvOFBWxZctmDh36xXx+1KhRjBo1isrKCp599jkAOnXsxAsvvADA0iVLKasoZ+ajjzJv3jwApk6dSjOvZjSxs6eopISftv7I7vDd5jk7duzIsGHDcHF2pqikhLTUVD766CMAgoODCezaFRtra6Kjo1m2bFnd3yURERERERERERERERERketAnRPAifEJFBeXcF/ofWzcsIGUlNRq5yfdew+52TkseGshvr5+TJp0N4lJSWRlZgGwbt069vz8MwbTr1sPHz16lC9WrACgorwcn+bNq83ZomULvv56DXExsbTyb8XEiROJi4sjNS2V1q1bM3HiRL5es4aYU6fwb+3PuHF3AtD25rZ07dqV95YuJb+gAEdHx7rertxgYmJirnUIInIVtW7d+lqHICIiIiIiIiIiIiLSoOqcAD5TdIZ3Fy9iwICBTHtwOllZmfzwww/ERMfg6+uLn68fnyz7hDNFZzh+7BjJySm0u7kduzJ3AVBZWUlFeXm1OU2YarT9VkF+PvkF+Rw+fJg+ffvQqlUrUtNS6dWrJ7/8coiDBw4AkJOdax5ztrgEKysr3NzdSc/IoKSkpK63Kzegpk2bNtgm2yLyx2QymcjMzLzWYYiIiIiIiIiIiIiINLg6J4ABcnPz+Prrr1m3bh39+vXl/vvvJ2xxGI5OThgMBmb/bfavnQ0QFxfbUPECcKbgDHb2dgC4uLlx+Lwlps+XkJjImrVrGTFiBMEjg9m0cROHDx9u0Fik8bGyssLCwkJJYJFGymQyUVlZea3DEBERERERERERERH5XdQrAXxOWVkZmzdvoWu3brRp24aY6BgqKyt48cUXOXv2bI3+5eVlWBqrX7K8rLxG26VUmn59cF+Ql4+zi/MF+x48cICDBw7QtWtX7rrrLpJTks3LUYvUxmg0YjQalQAWaaRMJlPVHvbXqcTExGsdgoiIiIiIiIiIiIj8gdU5Aezj442XtzeJCYlUVFTQyr8VTk5OpJ9OJyU1lbS0dMbdOY4tW7ZQUlSCi5srCfHxAGRlZtGufTuOHI3AwcGRlNRUsrKy6NmzJ82aNaOyspKSkuI6xXMkIoKRo0YReTKS1NQ0Wrf2N59zdnbB1taGnJxs0tJOAybsbOzqestyAzIYDEoAi8gfisFgwNfXV9XLIiJyVWhFHBEREREREZHrV50TwLa2dnTv3p3g4JFYGo1kZ+fwzTffEBkZCcDHy5YRHBLMg9OmYW1jQ2ZGFmFh71JRUcG2bduYOHEiTzzxBPn5BXzwwQccOXqU9h3a8/CMGZSVlfH111+Tn59/2fEcPHQIZxdnxo0bh7WNDdk52eYksrePN2PHjKFJE3sKz5zhp5+2kZScVNdblhvM+Q+69NBLpHExmUzA9fm7bTAYsLS0NN+DiIjI70lfiBQRERERERG5fhm69exzXT9JtrGxoUmTJhQVFWFjY8PAgQOwt7fn008/u9ahyWXYumFdg853bm/P4uJifHx86jw+JiYGPz8/8xLQeugl0riYTCbzEtCJiYm0bt26znOkpKRgZ2d3xZVRdf17pcSviIhcC5f6rIuJicHLy+sqRSMiIiIiIiLS+OTm5jbIM+fzXdEewH8Evr6+3HnnOBwdHCkuKSYmOoa1a7+91mGJiIg0KH0hRUREREREREREREQux3WfAI6Ojua1116/1mGIiIiIiIiIiIiIiIiIiFxzFtc6ABERERERERERERERERERaRhKAIuIiIiIiIiIiIiIiIiINBJKAIuIiIiIiIiIiIiIiIiINBLX/R7AIiIiNwKTyXStQxARkRuQwWC41iGIiIiIiIiISB0pASwiIvIHdy75Gxsbe40jERGRG4m/vz8mk0lJYBEREREREZHrjBLAIiIi14FzSWA/P79rHImIiNwIEhMTlfwVERERERERuU5pD2AREZHrgJaAFhGRq02fPSIiIiIiIiLXJyWARUREREREREREREREREQaCSWARUREREREREREREREREQaCSWARUREREREREREREREREQaCSWARUREREREREREREREREQaCSWARUREREREREREREREREQaCSWARUREREREREREREREREQaCSWARUREREREREREREREREQaCSWARUREREREREREREREREQaiQZPAFtYWGBhcfnT1rW/iIiIiIiIiIiIiIiIiIjUzrI+gzp16sjAgYNwd3ejpOQsKSkpfLp8OQDPPfcc7yxeRPrp9Etf3Gis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i9b+NffdrI3BYLjodesiqEd32rT2JzLqFM+/+Aot/PzIyclh3NjR9Ojerd7zisjlGTBgwAWXMl6wYIH59Ztvvml+7e/vz/PPPw9AUlIS48aNY9SoUezatYvo6Gg8PDwAcHBw4OmnnzaPCw0NJTQ09IKxTJ8+vdZ2Hx8f8+sRI6pXx86cOdP82tXVlccff/yC858/38KFC6u1XWjsyy+/bH7du3dvevfuDcCwYcMYNmzYJa9VF10DOjfofCIiIiIiIiJyfVECWEREGj0lf2vau+9AtePy8jJeefFfLHhrEV+v/ZaKigqaeXoS+L8kQmVFJcdOnGBX+B5cXV245+67GDdmNEajkVdf+hf/eP4l9u7bj7ubG3l5eXWK5WLXrQsrK0s+WLqY195YyLYdO4mJjcPH2xuj0VjnuUTk6iotLWXlypUkJCRgZWVFx44dmTJlyrUOS0RERERERETkumTo1rOPnobLNbN1w7oGnc9kMlFZWUlxcXG1Co/LFRMTg5+fH0ajEYPBYF5aVESuX+eSv1D1N2LGjBksWrSIxMTEWpfzvJSUlBTs7OywsLC4or8Rdfl7da5vfHx8tWVGRUREfi/nlu2+1OddTEwMXl5eVzEyERERERERkcYlNze3QZ45n6/2TfFEREQagfOTv7Udi4iIiIiIiIiIiIg0NloCWuQ3zl8iVsvFily/frvs8/nH+t0WERERERERERERkcZKCWCRWig5JHL9CwsLq/a7fO5Yv98iIiIiIiIiIiIi0pgpASzyG0lJSdc6BBEREREREREREREREZF6UQJY5DytW7e+1iGIiIiIiIiIiIiIiIiI1JvFtQ5AREREREREREREREREREQahhLAIiIiIiIiIiIiIiIiIiKNhBLAIiIiIiIiIiIiIiIiIiKNhBLAIiIiIiIiIiIiIiIiIiKNhBLAIiIiIiIiIiIiIiIiIiKNhBLAIiIiIiIiIiIiIiIiIiKNhBLAIiIiIiIiIiIiIiIiIiKNxFVPAFsajb/r/C1btmT27NnY2tr+rtcREREREREREREREREREfmjsazPoKf/+jSuLq7V2vbt28dXX3110XHTp0/nyJEjhIeH1+eylyU7O4u9+/ZScvbs73YNEREREREREREREREREZE/onolgAG+XfctEYePmI/LykovOcZoWe/LXbaCgkK2btn6u19HRETkWkhM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3AsvvFDtePny5ebX2dnZhIWF1Riz/vv1rP9+fY32HTt2sGPHDvNxSnIy8+bNA+DE8eO8fPx4jTHn9wEoLCzg888/rzXW3/YF+L9//p/59Zv/frPWcXJj+G3SFaoqfSMiImjVqhWHDx9m06ZNPPHEEwDY29uTmppKTk4Oqamp7Nmzh+7du9eYt2XLluzcuZNevXphb29PVlYWbdu2xc3NjUOHDuHl5cUvv/xCdnY2rq6uQFUl72233Wae49SpUwwfPrzG3BeLISIiAn9/f8rKyigtLcXZ2Rl3d3esra1Zv349vXv35syZM5w9e7ZG4joyMhI7OztatGhRrf3kyZOMHTu2WtupU6fw8fGpVuF85MgRWrdujZ1dVRV9586dcXV1JSgoCKhKtjf/35c3IiMjsbe3x8nJiaKiIqCqIr+wsJAvvviCiRMnmvcKFhERERERERERERERkerqXQEs0thFRUUxYsSIam333HMP//3vf5kzZw6+vr489thj5krV3r17ExERwfz58/Hz86Nr165YWFjUmHfQoEEkJyfz+uuvYzAY6NGjB23btjXPvXPnTrp370779u0pLS3l9OnTFBQUmCt+z+3r+9vk9MViKCgo4JtvviE5ORlra2sCAgIYMmQI1tbWPPjgg6xatYrvvvsOZ2dnRo8eXSMBfG5P3vPvJyMjg+zs7BqVurXt33vs2DECAwPNx+cqj89JSEigffv25vFFRUXV9hru2rUrQ4YMISoqyryPsciNxmQyXbqTiIhIA/vtliMiIiIiIiIi8sdn6Nazj54oyzWzdcO6Bp3PZDJRWVlJcXFxtaWQRUQaSkpKCnZ2dlhYWFzRQ/G6/L06l/yNjY2t9/VERETqyt/fH7h4EjgmJqbalikiIiIiIiIiUje5ubkN8sz5fKoAFhERuQ6cSwL7+fld40hERORGkJiYiMlkUgWwiIiIiIiIyHWo5vq0IiIi8oejJaBFRORq02ePiIiIiIiIyPVJCWARERERERERERERERERkUZCCWARERERERERERERERERkUZCCWARERERERERERERERERkUZCCWARERERERERERERERERkUZCCWARERERERERERERERERkUZCCWARERERERERERERERERkUZCCWARERERERERERERERERkUZCCWARERERERERERERERERkUZCCWARERERERER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RASRkZGlEreIiIiIiIiIiIiIiIjceVQBLFIEY8eO5cCBA+bXzzzzDMuWLeO7777DaDTi5ORE5cqVi91v+/btSUtLY82aNURGRmJvb8+oUaPw8PAozfBFRERERERERERERETkDmFo3rq9qayDkDvXji0/lmp/JpOJvLw8MjIycHd3L9W+RUQAoqKisLGxwWg0lrj6H4r3eXW5bXh4OF5eXiUeU0REpKgiIhZG/PAAACAASURBVCKoWbPmDX/fhYSE4ObmdgsjExERERERESlfkpKSSuWe85U0BbSIiIiIiIiIiIiIiIiISDmhBLCIiIiIiIiIiIiIiIiISDmhBLCIiIiIiIiIiIiIiIiISDmhBLCIiIiIiIiIiIiIiIiISDlhUdYBiPzXhISElHUIInIL1apVq6xDEBEREREREREREREpNUoAixTC2dkZg8FQ1mGIyL/IZDJx4cKFsg5DRERERERERERERKRUKQEsUghLS0uMRqOSwCLllMlkIi8vr6zDEBEREREREREREREpdUoAixSiQoUKVKhQQQlgkXLKZDKRm5tb1mGIiIiIiIiIiIiIiJQ6JYBFrsFgMCgBLCIiIiIiIiIiIiIiIrcVJYBFCnFl4ldJYJHyxWQyAbfvz3ZERERZhyAiIiIiIiIiIiIi/2FKAIuIiNwGDAYDnp6eWrtYRERuCaPReNs+LCUiIiIiIiJyp7NITk4u6xhERETkBgwGAxYWFuYKZhERkX+TlkMRERERERERuX2pAlhEROQ/zmAwYDKZdDNeRERuOf3eEREREREREbn9KAEsIiJyG9ANeBEREREREREREREpCmNZByAiIiIiIiIiIiIiIiIiIqVDCWARERERERERERERERERkXJCCWARERERERERERERERERkXJCCWARERERERERERERERERkXLC4mY7cHBwoG3bdpw5c5rQ0NDSiElERET+wWQylXUIIiJyBzIYDGUdgoiIiIiIiIgUU4kTwBYWFrRp04Z72rbFytKSli1bcObMGbZu20ZSYmJpxigiInJHu5z81YNWIiJyK3l7e2MymZQEFhEREREREbnNlCgBbGFhQY+ePfFr0qTA9rp161KrVi0OHjrE7l27yMrKKpUgRURE7nSXk8BeXl5lHImIiNwJIiIilPwVERERERERuU0VKwHs6uZK927dcXR05Pddu/jr1Ck6deqMq6vL/zq0sOCeNm3w9fXltx2/cfz4sVIPujSNGDaEP06c5I+AE2UdioiIyDVpCmgREbnVlAAWERERERERuT0Zi9LI1taWXr16MWb0GLy8vHBwcKB3r17cf//97Nr1O5s2bSQ5KbnAMfZ2dvTp05vHxjyGV43/brXSqJHDqVEK8bVs3gwPd/dSiEhEREREREREREREREREpGSKVAHs6OhIBYsKV213dnZm8ODBRESc44cfN+Hq5ka7tu2xsbE2t8nOycGAARtbGzIuZhQpqAWvz6F9u3uwsLAgMSmJyMgoNv6wme82/vCfrYBaung+r815ncioqLIORURERERERERERERERETuUEVKAA8fMYID/vv57LM1tG3bjtq1axfY7+XlyfDhIzh9+jTr1n1J3Xp18fGuxa7duzEYDPTu1Zvfdv7GqVOnihSUq6sLO3ftZu0X67CxsaWZXxOemzyJu2rW4K23lxf/LEVERERERERERERERERE7gBFSgBbWVrS/t72NGvenN27d3PgwAE6duyIh4dHgXb16tXDw9OTzz5bQ3BwCPd17nxVm6KKjY0j4MSfABw4eAgbGxse6NuLt95eTsMG9Zkw7km877oLBwd7ftj8M6/PX4TRaOSx0SMZPKA/1tbW7NqzhzcXLiE1NdXc74ODBvDoyOHY2toScOIkFa2szPtGPfIwfXr15MFhj5i3/fDdej797Au++vobAGp538ULz02mUcMGpKWl8+77H/Ldxh8AmDfrVebNehWAHn0HYGFhwYvPT8WviS+mvDx++mUr8xctKdH1kFvrykrz/2rVuYjcHP1si4iIiIiIiIiIiEh5VKQE8GV2drZ0796NxKREdv62k/3799OpYyecqjqRlZ3Nwf37CQ4J5v77ulCnTu0bd1gMGRkZWP2drK1Vy5uGDRrw8muzuXjxIpmXLgEwfuwTPNC3D++sWElySgpPPDaatxfPZ/T/jQWgT68eTJk0gY9Wr+HEyT9p4tuIu1s0L3IMzs5VWfX+Cg4fOcoLM17F0sqS6OgY8/6l76xg7/4DACQlJTNn5svY29sz9fkZmEx5WFgU63JLGVNySKT80s+3iIiIiIiIiIiIiJRXJcpIVnGsQv/+/YmJjmHLti1UtKpIUlISzVu0YMSIRzAajTcdmMFgwMLCAgd7e5o3a8rgQf3Z93dyFSArO4vfd+8x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snXrVn7++Wfi4uKIvuIzo1atWjRs2JA333yT4OBg4uPjizzmP3Xs2JEtW7Zw6NAhEhISOH78+DVjvd77qqhq166Nt7c3ixYtIjQ0lAsXLpjXNgaws7MjOjqalJSUG57n5s2bee+990oci4iIiIiIiIiIiIiIlJ0iVQC3bt2mwOuQkBC2b//1Xwlo4pRp19y3+tO1rP50rfl1YHAwL8x49ZrtL2Vl8cyzz11zf1JyMi++MrPQfedj45g09flrHttv4JCrth05epyRY54otP0PP/7EDz/+VGDbP9smJiVdM56t235l67Z/55rL/6SlpfHTTz/x7rvvmte4HT9+PK1btyY3N5fDhw8zefJk0tPTsbOzM68NDNCtWzc+/vhj+vXrh6WlJZBfBTp//nzef/991q1bh9FopH379kydOrXAuEajkTlz5rB8+XKef/55MjMz6datG888U3CN6n965plnWLZsGd999x1GoxEnJ6ciTevr4eHByy+/zKpVq/j444+56667MBgM5srR//u//2P16tXMnz+f+Ph4qlatyssvv4yDgwNr1qzhxIkTGI1GfHx8mDRp0k3HNXToUObNm8eYMWNwdnZmwYIF143hRq43fsuWLXnhhRdYu3Ytb7/9NhUrVqR+/fpYW1tjMBiYOXMm7733Hi+88ALp6elUqVKFQYMG3XDMf+rSpQuxsbEsXLiQjIwMqlevXmhlbrt27a77viqqy++hFStWMG3aNDIyMvD09OSdd97B0tKSDh06sHXrVlauXMm0adOue56hoaGcOXOm2DGIiIiIiIiIiIiIiEjZM/jU9zXdqNGE8ROoVLkSeXl5HDlylK1btxSoFiwLr770AjY2NtdMAPfp3ZOJ48fStWe/WxyZFMeR/btLtT+TyUReXh4ZGRm4u7uXat/liclkIiwsDGdnZ3Jzc9m7dy+rV6/m888/x8KiyEuDy3Wkp6eTnJxMpUqVuHjxImvXriUlJYVXX732Qytye4iKisLGxgaj0VjkqvvCFOfz6nLb8PBwvLy8SjymiIhIUUVERFCzZs0b/r4LCQnBzc3tFkYmIiIiIiIiUr4kJSWVyj3nKxUp0/P5l59Ty9uHsLBQ4uLiSmVgESk7ycnJzJ07l+joaCwtLfHx8WHWrFlK/pai06dPs2jRIhISErC3t6dp06ZMmDChrMMSEREREREREREREZFy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dmXatGnUq1ePJk2akPTPjgql0alTJz7//HPq1q1L3bp1yc7OxsrKimrVquHo6Ehubi5RUVH4+/vTtWtXli9fjqurKzVr1izVrhMVgcFgwGw268N4ERG54fR3R0RERERERKTiKXYAnJaWyurVq69nLdfNqtW/sGr1L+VdBmvP23M405pWVXJp5JBHgF0eTtb5oW94tjWHM63ZfMFW2z6LyHV16tQpYmNjGTt2LF5eXgWudezYkdDQUHr16sULL7zA999/z8cff0x6ejqurq706NEDgGbNmvHMM8+watUqFixYgJ2dHXXr1sXe/tq/vNK6dWvS09P56aefiI+Pp0qVKgwYMIBq1arh5+dH27ZtmTFjBh999BEDBw7E1taWr7/+muTkZJycnCxnB1dW+gBeRERERERERERERIrDULdB04qzlFcqnb07Q8t0PLPZjMlkIiMjgxo1apTp2CI3sz///JPGjRuXdxkVyqFDh2jZsmWJ+8XExODo6FjqsxH1+0pERCqDsLAwfH19y7sMERERERERkQorJSWlTD5zvpRVmYwiIiIiIiIiIiIiIiIiIiLlTgGwiIiIiIiIiIiIiIiIiEgloQBYRERERERERERERERERKSSsCnvAkREROTqzGZzeZcgIiK3oLI6e0hEREREREREbhwFwCIiIje5i+Gv0Wgs50pERORWEhgYiNlsVggsIiIiIiIiUsEoABYRqQSsrKzIzMzEwcGhvEupEDIzM7G2ti7vMkrkYgjs7+9fzpWIiMitICoqSuGviIiIiIiISAWlM4BFRCoBg8FAfHw8mZmZ5V3KTS8zM5OEhIQK94G2toAWEZEbTX97RERERERERComrQAWEakEXF1dOXfuHEajEZPJVN7l3NSsrKwwGAy4urqWdykiIiIiIiIiIiIiImVOAbCISCXg7++PwWDg/PnzCoCvwsrKCldXV/z8/Mq7FBERERERERERERGRMqcAWESkErC1tSUwMLC8yxARERERERERERERkXKmM4BFRERERERERERERERERCoJBcAiIiIiIiIiIiIiIiIiIpWEAmARERERERERERERERERkUpCAbCIiIiIiIiIiIiIiIiISCWhAFhEREREREREREREREREpJJQACwiIiIiIiIiIiIiIiIiUknYlHaAzp0707x5EBis2L1rF9u2bSuLukRERERERERE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IiIiIiIiIlI2FACLiIiIiIiIiIiIiIiIiFQSCoBFRERERERERERERERERCoJBcAiIiIiIiIiIiIiIiIiIpWEAmARERERERERERERERERkUpCAbCIiIiIiIiIiIiIiIiISCWhAFhEREREREREREREREREpJJQACwiIiIiIiIiIiIiIiIiUkkoABYRERERERERERERERERqSQUAIuIiIiIiIiIiIiIiIiIVBIKgEVEREREREREREREREREKgmb8i5AREREii8qKqq8SxARERERERERERGRm5gCYBERkQrAYDDg5+eHyWQq71JEROQWYGVlhcFgKO8yREREREREROQaKAAWERGpAAwGAzY2NpjN5vIuRUREbgEGg0EBsIiIiIiIiEgFpQBYRETkJmcwGDCbzfowXkREbjj93RERERERERGpeBQAi4iIVAD6AF5EREREREREREREiqPMAmAbGxs6tO9Ao8YNcXZxZc+e3Wz8fWNZDS8iIiIiIiIiIiIiIiIiIldhVRaD2NraMGzYMDp26oinpxcR4RFs3rS5LIYucx7u7rz31uv4VK1a3qWIiIiIiIiIiIiIiIiIiJSpMgmAg4O7UL16dQBOnDjJypUryMvLK4uhy5ybmyvd7rkLe3u78i5FRERERERERERERERERKRMlckW0E2bNrU8Do8ILxT+3nnnnezYsaNYY301fzZNmzQu8tofm0MZ//Kkay9URERERERERERERERERKQSK3UAbGtjS5UqTpbn3e65B1OeiT17dgPQp08fGjdqVOwA+ONPZ+Ds7AzAqBFPk5qayreLlgCQlJRU2nJFREQqJLPZXN4liIjILchgMJR3CSIiIiIiIiJSQqUOgHNyc8jIyMTR0cHS1r37vVhZGfDx8SEoKIjklORij3f4yFHL46EP3c+5c+fZtXtPgXvu6tqZ50YMp1o1H44eP8G7Uz4iLMxouV6nTiCTXnqRBrffRnx8AjPnzuf3jZuKnK9aNR8mvvQiQc2aYjaZWPu/9Xz4ybRi1ysiInK9XQx/jUbjVe4UEREpO4GBgZjNZoXAIiIiIiIiIhVMqQNgD08P8vJyAIcC7d26dbM8PnzocGmnsWjfri3vv/0GXy9YxIGDh+jTqwdfzpvF4Acf4ezZJDw9Pfhy3ix27NzFV98upGmTxrz/9huMnfAKW7cVXoU8ZvRInJ2defGlSZjNJmxsymRXbBERkTJ1MQT29/cv50pERORWEBUVpfBXREREREREpIIqVdoZGBjIwAEDcHB0vOw98fHxbA3dWpppCnjysWH8uu435s7/EoDtO3axculiHn5gCJ/NnscDQwZx/vx5Jr32FiaTia3bdlDNx4enHn+0yADYy9OTiIhI9vy5t8xqFBERKWvaAlpERG40BcAiIiIiIiIiFZPVtXZs1aoVDz74YIHwNy0tjcyMDADS0zPYvWsX337zLTm5OaWv9B9169bhz71/WZ6bTCb2/f039erVBeC2evXY9/cBTCaT5Z4//9pHvbp1ihzvu6XL6d7tbubPnkGXzp3KrE4RERERERERERERERERkRutxCuArays6NGjOy1a3FGgPSszk0WLFnHmzBls7ezIyc4usyIvZeDK30A3GAwlWiX1x6YtDHrwER4cMph33niVbdt3MmHiq6UtU0RERERERERERERERETkhivRCmBHJ0cefvjhQuGvyWTih59+4syZMwDXLfwFOBUWRovmQZbnVlZWBDVrxqkwIwAnT4XRPKgpVlb//9JatggizBgOgCUbvmQrs7i4eKZ9NosXX55E1y7B+NWscd3qFxERERERERERERERERG5Xoq9AtjDw5OHHn4QD3ePQtc2bNhA2KlTZVrY5XyzYDEfTXmHmNhYDhw8RL/evfD09OD7pSsAWLp8JYMH9eedN15l1ZpfaNqkMb16dGfCK/mrepOSkzGbzfS49x4WLv6ebnd3JS4+gbS0NFq2aEFubi7nL1y4Ia9FRERERERERERERERERKQsFTsA7tOnF/Z29mwNDSWoeRDOzi4A7Nu3j127dl23Av9tc+hWJr/xNiOfeZrHhj3CsWPHeXrEcyQkJgKQeOYMw58dzcvjx/LJh++TmJjI5NffYtOWUAAuXLjA5199w4NDBrP6l1+5s01r2re/Ezs7O6KiTvPqG29z/rwCYBERERERERERERERERGpeAx1GzQt1oG548e/yN/7/mbd+vUEBwfTqVMnIiMjWLz4O0wm0/WuUyqpvTtDy7sEEZFyYTabMZlMZGRkUKPGlY8euHhvREQE/v7+N6hCERG5lUVFRVG7dm2srKwwXHJ8zr+FhYXh6+t7AysTERERERERqVxSUlJwdHS86r+Dl0SxVwBHR8fQtFkzABo3aUJySjIrVq5U+CsiIiIiIiIiIiIiIiIicpOwKu6Nq1evJiYmlqDmzTlzJpEl331PRnrG9axNRERERERERERERERERERKoNgrgM+fP8+SJd9dz1pERERERERERERERERERKQUir0CWEREREREREREREREREREbm4KgEVEREREpEJITEwkJSWlvMsQEREREREREbmpKQAWEREREZHrLjY2lldffZWcnJxrHmPatGkkJyeXupaFCxeyfv36Uo9TlrKzs8u7BBERERERERGpJIp9BrCIiIiIiMjVnDp1ip9//pnTp09jZWVFmzZtGDx4ME5OTnTu3BlbW9trGvfs2bOkpqbi7+9f7D6TJ08mJCSE22+/vUD77bffTs2aNa+pjktNmjSJc+fOFWofOXIkjRo1KvY4P/zwAzY2NvTr16/UNYmIiIiIiIiIKAAWERGRcrfih5949Y23eeThB5n08vhi90tITOTBoY9Sq1Ytvvli7nWsUESK48KFC8yePZu+ffvy6KOPcuHCBTIzMwFwc3PjnnvuueaxIyIi8Pf3x8ameP8Kk5SUxLlz56hdu3aha23atLnmOi41adIkAJYtW4aTkxN9+vQBwNHRsUTjnDhxgh49epRJTSIiIiIiIiIiCoBFRERuEY8//Sw7du4q8lrH9u34fO7MG1zR/1u1eg0A9/XtXehaZmYmX3z9Lb+sXcfp6NM4OTnRuFFDRo98FicnR2Lj4snMzMJsNrN5y1Y+mjqNe7vdw/OjRlxzPYMffISs7Gx+/mHZNY8hciuKjo7GxsaGLl26APwfe/cdn+PZ/nH8c2fJThAEiSRir1i1JRRFxAytKqr6tFqKtlot1fV7qlVarVG0uh7q0Roddo2qvSmRiJUpQzYiIev+/ZG6n6YJElSI7/v1ykvu6zrP8zquy0siOe7jOClfvrzp3IIFC6hfvz5+fn5s3LiRvXv3kpqaSuXKlRk5ciRVqlQBICoqilWrVhEeHo65uTmBgYG0bt2asLAwPD09AcjJyWHt2rXs2bOHvLw8AgIC8PX1LRBLREQEVatWxdrausDxqKgo5s2bx7Rp00hOTmbJkiXExMSQl5eHn5+fKYl74cIFVqxYQXBwMI6OjgwbNgxvb+8Ca9na2gJw7tw5/P39Ta+Lmlu5cmXeeustJkyYgJubG9999x2Wlpb079+fmJgYFi5cCMDcuaX3tVhEREREREREygYlgEVERB4QjRs1wMLcHCNGdu3eC+QnfgEaNSx+q9I7LSY2lgMHD1PTy7NQHFnZ2Yx85nmOHD2GmZkZHjVqcPnyZXbv2cfzz/6LOrUb88vKH3B0dMBgMBAXH8/ZsPBb3mP0l9Vr+XXjZlyrVCEnN4exL71CJ9+OBPbveyduVaTMq1q1KtnZ2ezYsYMOHTpgMBhM5yIjI+nZsycAO3bsIDAwEC8vL5YvX86WLVsYMmQIYWFhzJ8/n969ezNs2DAWLFhAuXLlgPyEbufOnQFYuXIlqampvPTSS8TGxrJixYpCCeDw8HC8vLwKxRgREWGqCj516hS5ublMnjyZxMREZs+eTYcOHXB0dGTu3Ln4+PgQGBjIli1b2L59e6EEMEBGRgbx8fGma+Xl5RU596mnnqJVq1Zs3bqVli1bcvr0aSZPnkxUVBTOzs68/fbbt/Xsl3y/gqDgkCLPNW7UgCceG3hb64uIiIiIiIjI/cOstAMQERGRu+Pl8WNZuGAuC+bOMh1buGAuCxfMZfzY0SQnp/DKa2/Q3q8rfl168M6/3yc9PZ2srCyat+5Aw6YPkZmZSV5eHg+182PsS68AsGnzb9Rv0oIXJ7xGeno6I54ehV+XHvi0aEOr9p14970PyMzMvG5cq9asAyCgV89C55YtX8mRo8eoXKkSq35cxrpVK9m2ZQMb1vxMi+bNSExMom/gY4x8ZnSBeV9+/S31m7Sge6++HD0WRP0mLegz4LH/PYtXX6d+kxZs3LSlwLyEhESiY2LYuXsPe/buJyIyisSkpJI/bJEHlJOTE2PGjGHbtm1Mnz6dhIQEAJKSksjMzKR69eqkpaVx8eJFGjZsiJOTE7Vr1yY9PR2AH374gX79+uHr64uDgwPnz5/Hy8uLnJwczp07h6enJ8nJyQQFBTFy5EjMzc0JCgoqss1zeHg4NWvWLHT8rwng8PBwateujZOTE7Vq1cLGxob09HQOHTqEi4sL/v7+XLx4kTNnzpiqj4taz9nZ2VTtfKO5Xbp04fDhwyxZsoQRI0ZQrlw5wsLC8PLywtzcHHNz81t+9n0DemJrW7j1tL2dHf0C/G95XRERERERERG5/ygBLCIiIuTm5jJqzDjWrt9A9erVcHRy5IflK5k46U2srKxo0+oh8vLyOB58ghOhJ0lPT+fIH0cBOBp0HADfju3JzLzCvgMHuZSejp9fR2xtbPh+2Qq+XfTdda+9es16AHoXkQDesnUbAM88PQLvmv+r5POo4V6gsvDv6tSuRWD/vvTo3g2fJo2pWtWV02fOEBMbS25uLrv37sPa2pqOHdoVmPfM0yPw69gBKysrbG1t6NCuDaP+NbKYT1FEALy9vZk0aRKurq4sWbIEyK/+dXNzw8LCgvDwcKpXr46lpSUACQkJVK5cmfj4eBITE2nbNr8zQXx8PE5OTjg5OREdHY2NjQ0VK1bk5Mn8r0FTpkxh3rx52NraMnTo0AIx5OTkEB0dXWTSNjIy0nQ8PDzc9Hl6ejoZGRlUqlSJkJAQTp06xeuvv87SpUtp2bKlqa313/290vhGcytUqICDgwM1a9Y0zYmIiCiyUrmk7O3t6FvE19F+ffyxs7O97fVFRERERERE5P6hFtAiIiLCoSN/EBxygqY+jfnvom/IycmlZ5/+bN22ncioaDr5dWTrtu0c+eOoKWmTnJzC2bBw/jh6DIPBgG+H9hiNRgBcq1Rh9swZHDx0mGFPPcO+A4d4ftQzha57LOg44RERtGzRHLfq1QudT0pOBqBGDfcS3Y9vxw5MeHGs6XXvXj354stv2LBxM40bNeTChYv49+yOjU3BarnLGRmcCA2lT4A/5ubmhJwIJT09HQcHhxJdX+RBZ25uTuPGjVm5ciWQn+S8lmj96+eQn0Dt1q0biYmJVKhQATOz/PeoRkVFmRKjsbGx1KhRA4DU1FTat2/PoEGDrnv9qKgorK2tTfsKX5ORkUFCQgKenp5cuXKF+Pj4AnG5urpSrlw5UlJSGDZsGE2bNr3pvYaHh9Ogwf/a199o7rJly3BxcSE0NJSsrCysrKyIiYm5bnK5pHyaNOLY8RCCT4SaXjdqUP+OrC0iIiIiIiIi9w9VAIuIiAjnzsUAULdOHQwGA5aWFtSu5W0618mvIwCHjhxh7/79NGvqg8FgYPuOXQQFHadJ40a4uFQstG6VKpUBuHDhQpHXvdb+uajqXwBnJycAoqPP3cbdwYB++Xv4rl23gU2bfwOgb+9ehcbZ2dry5YLPeOWlcbw0bgzfLFyg5K9IMYWEhHD48GHi4+M5c+YMGzdupHHjxkDBpO9fK2ZzcnKIiYnBy8sLOzs7UlNTSUhI4Pz58+zdu7fAnrspKSlcvXoVFxcXjh8/TnR0NKmpqRw/frxQLOHh4bi5uZGRkWH6yM3NJTIykkqVKmFra0tERAQuLi7Y29sD+ZXB1+JycXFhz549JCUlER8fT1hYWJH3bDQaC8y70dwdO3YQERHBc889R9WqVTl48KDpGVwbm/znm15uR7/e/tjYWONgb19kRbCIiIiIiIiIlH2qABYRERHc3dwAOBF6EqPRSHZODqdOnwGgerWqVK5UiWY+TThw8DAAr7w0DoxGvvr2P2RlZ/NIty5FrnutTfO1yuC/ys7OYd36X7GytKTHI12LnN+6VUsOHjrMN4u+o0O7tnh45FcAXrhwkXLlrAqNt7XNb3N6/vz5Asc9arjzcCc/fvt9G5FRUbi7udGhXdvrxmxtbV3kORG5voSEBLZu3UpaWhpOTk60aNGCXr16kZubS3R0NB4eHqbPryWDo6OjcXBwwNnZGScnJ5o2bcq0adOoUKECSUlJPPHEEwD4+PiwZ88edu7cSadOnTh16hSzZs3C3NwcHx8fGjVqVCCW8PBwTp48ycSJE03HJk+eXGj/379WIkdERNCsWTMAAgICWLRoEVOnTsXe3p4ePXoUuZ9wXFwcWVlZuLv/r0tBUXONRiNr167l5ZdfxsrKilatWrF3717atWuHr68vK1euxNramuHDh1OxYuE305SEg4M9fXr1pFw5qyL3BBYRERERERGRss/gXa9x4d/Iitwlh/ftLO0QRERKhdFoJC8vj8zMTKpVq1assZGRkQWSDLcqJyeHxs1bA3Di2CEgfw/gR4cMJ+REKA3q1+Pq1aucDQunY/t2fDF/DgCLlyzl/Q8/AmDT+lX8unEzH30yG4PBwJZf11LVtQqJiUn4dumOl6cn61at5FxMDN169qFundr8vOL7AnFs2fo7L4yfQPduXfn04w+LjDUt7QIDHx9KTEwsZmZmuLu7YWYwIzIqiqn/9xbt27YtcL0zZ8Po3X8QlpYWdPLzJSsriwVzZwFw9FgQg4eOAOCVl8fz9Ijht/0sReTOiY6Opnz58uTk5LB7927Onj3L2LFjbz5R/hHXkvZmZmY33HM9LCwMV1fXuxiZiIiIiIiISNmSlpaGjY3NTX8GLwm1gBYRERHMzc1ZMHcWPXs8Qnz8eS5cvMjAAf346MOppjG9/HtgaWlBvbp1cKtenW5d86t+27VtTVXXKtdb+rpWr1kPQMANWpQ6OzuxdNE3PDpwAJUrVSImJpaLly7S1KcJTn+2h/6rWt41mTRxAg72Dvy+bTvR0efIyMgEoF7dOjg5OVKuXDkC/2wJLSL3hqysLJYvX86UKVOYOnUqCQkJDB+uN2mIiIiIiIiIiNwKVQBLqVIFsIg8qEqzAvhecPHiRTp2fgRbO1u2b9mIpeU/tytFeEQEMz+dQ2xcPCEnQhn93DOMHf3cP3Y9EZGyQBXAIiIiIiIiInfHP1EBrD2ARURE5K7bsHEzWdnZDHik2z+a/AWIijrHnr37MZiZMfjRgTz/7L/+0euJiIiIiIiIiIiIlCYlgEVEROSue3TgAB4dOOCuXMvPtwMH9+64K9cSERERERERERERKW3aA1hEREREREREREREREREpIwoUQXw8GHDcK9Ro8QXiY6KYtHixSWeJyIiIiIiIiIiIiIiIiIixVeiCuBbSf7ezrxbUbOmF40aNih0vGXzZlSvVq3Asd69erLi+8X/+N6DIiIiIiIiIiIiIiIiIiJ3w221gJ4/f36JjhdXk0YNWfDZLLZuXMvm9av5+ot5tGvbulhzx7/wPL179Sx0fNbM6TRoUK/AsaSkZM6eDSc7O+e24hURERERERERERERERERuRfcVulrSkpKiY4Xh5OTI7NmTudE6Enefe8DDGZm1PKuyeXLGbe85vXs2befPfv23/F1RURERERERERERERERERKwx3tfbxo0X+Ijj4HwNSpU3F3d2P48CdLtEbtWrWwt7dn2kefEBUVDcDW37cXGFO/Xl0mvDiWWrW8iY2NY85nCwokcgf068OAfn0AmPzWu2za/BsA7//f27z/f28D0KN3f9q2ac34F56nW8/8sW9Ofo0WzZtS3rk8ANt37mTa9JlczshPPhsMBp4aPpSBgf1wdHAgOSWF0NBTvPbGWwC0aN6Ul8a9gJenB5cupTN3/uesWbehRPcvIiIiIiIiIiIiIiIiInKr7rnNb2NiY8nNzaW3f0/mf/EleXl5Bc5XrlSJBXNn8eMvq5g7/ws6+3VkxrT3GPDoEyQkJgKwactWvvzmPwCcP59gmjtrzjx2/5koTku7UOjaD7Vszr79B/l10xZcXaswbsxzjHn+WaZ//CkAY557loGB/Zi/YCFhEZG0b9uGQYH9TPM/+Pc7bNuxiw8/momjoyPx8QmFriEiIiIiIiIiIiIiIiIi8k+5ownga9W+U6dO5Y033rilNeLi4nn/w494+cWxdHm4Ez/9vIqfV6/l0qVLAAwZ/CgnT51i1px5APxx9BgPd/LDt2N7Vvz4MwCXLl0iLCy80NrnExOLPP5Xp8+c5eChwwBUqliRAf37Mv3jT7GztWXwo4F8Omee6TqODg6mBLClpQUODg4cPRZE0PGQW7p3EREREREREREREREREZHbcc9VAAOsWrOOLVu30eORrjw6cABDhwzmldcnE3Q8hLp1atGkcSN2/b7JNN7S0hLXKlXueBxR0edwqVgBgBo13ClXrhz7Dhwscmx2dg7//X4Zb7z+Kq0easnSH5ZzIvTkHY9JREREREREREREREREROR6bikBfCf2+r2Zy5cvs/KnX/h51RpmfTydSRNfYcjwkWRlZ7Nn735mzZ1XYPyFi5duuJ7RaCxxDFezrmJhkf+IbG1tAMjNyb3u+DnzPmfrth0MGzKY/3z1OZ/M/oylPywv8XVFRERERERERERERERERG6FWWkHcDO5ubkcOHQId7fqAERERFLLuyYxsbFEREaZPlJTUwG4nH4ZB3v7QuukX+d4cUVFncNoNNKoUYMbjjseHMJrb7zFt4uXMGTwo7d8PRERERERERERERERERGRkrqlCuA7sdfv9fg0aUyvnt3Zt/8gl9LTqV6tKoMHDeTQ4T8A+H75SgL792XGB1P5edVqsrKy8fCoYaq0PXHyFCOfHEqXzp3IzcslKSmZ48EhnDx1mv59exMbG4eLS0X27S+6lfP1JCYlsXHzFl4cOxpjXh6XLqXTu1dP03kzMzMef2wgQUHBANSpVYu0/hbvcQAAIABJREFUtLQ79FRERERERERERERERERERG7utvYAdi5fvkTHiyMrK4tKLi689upL2NvZk5KSwrYdO5n3+UIA4uLiGfnsaCZOeJH33n2Lq1ezOHM2jB+WryQvL48ff/qFhg3qMWXSq1y5cpUvvvqG48EhfDrnM95643VmTHuPxKRkwsIjShzbB9Nn8tK4Mbw64UVyc3KJjYsnLy8PAEcHBx7p2oXRo54hOyeHkydP839Tp93ycxARESlKdHR0aYcgIiIiIiIiIiIiIvcwg3e9xsXeHPd2qn2nTp16y3PvVY8NCmTI4EH0DRxc2qHctw7v21naIYiIlAqj0UheXh6ZmZlUq1btpmONRiM5OTmmNx6JiIj8k8zMzLCwsMBgMGAwGK47LiwsDFdX17sYmYiIiIiIiEjZkpaWho2NDWZmZjf8GbwkSlQBHB0VhXuNGiW+SHRUVInn3Iu6d+tKRkYGqWlpuLtV58lhQ9i46bfSDktERB4ABoMBCwsLjMZiv29LRETklt0s8SsiIiIiIiIi964SJYAXLV78T8VxX2jWtAl+HTvg6OhAYlISq9eu56tvFpV2WCIiUsYZDAaMRqN+GS8iInedvu+IiIiIiIiI3H9K1AJa5E5TC2gReVCVpAW0iIjIvUotoEVERERERERuzz/RAtrsjqwiIiIiIiIiIiIiIiIiIiKlTglgEREREREREREREREREZEyQglgEREREREREREREREREZEyQglgEREREREREREREREREZEywqK0AxAREZGbMxqNpR2CiIg8gAwGQ2mHICIiIiIiIiIlpASwiIjIPe5a8jc8PLyUIxERkQeJl5cXRqNRSWARERERERGR+4wSwCIiIveBa0lgd3f3Uo5EREQeBNHR0Ur+ioiIiIiIiNyntAewiIjIfUAtoEVE5G7T9x4RERERERGR+5MSwCIiIiIiIiIiIiIiIiIiZYQSwCIiIiIiIiIiIiIiIiIiZYQSwCIiIiIiIiIiIiIiIiIiZYQSwCIiIiIiIiIiIiIiIiIiZYQSwCIiIiIiIiIiIiIiIiIiZYQSwCIiIiIiIiIiIiIiIiIiZYQSwCIiIiIiIiIiIiIiIiIiZYQSwCIiIiIiIiIiIiIiIiIiZYQSwCIiIiIiIiIiIiIiIiIiZYTF7Uz2rumFd01PKjg7k5uXR1paGidPnyUq+tydik9ERERERERERERERERERIrplhLA1atVZVD/PlSpUrnQuYc7+RIbF8/qdb8SERl12wGKiIiIiIiIiIiIiIiIiEjxlLgFdPOmTXjumaeKTP5eU62qK/8aMZSHWjS7reBuhY2NNVVdqxSIxdra+q7HISIiIiIiZZ/RaCQ7O7vY47Oysv7BaERERERERERESpgA9qjhzoC+AViYm990rLm5Of16+1Pbu+YtB3cr2rZ6iO7dHja9HjPqaSq5VLyrMYiIiIiISNmRk5PDzz//zFtvvcWLL77I+++/T0xMDADTp0/n9OnTxVrnxx9/ZMOGDf9kqCIiIiIiIiIixW8BbWFuzuCB/TG/QfL3wKEjBap+zczM6Nvbn5mz55GXl1eiwKpXq0qXzr54edTAzMyMxKRktm7fSXBIaInWERERkfvDxElTWL12PbNnzqBb14dvPkFE5C5Zu3YtJ0+e5JlnnsHW1pbIyEgqV65MZmYm586dw9PTs1jrnD59mh49evzD0YqIiIiIiIjIg67YCeDGjRrg7OxU5LnUtDR+WrWW02fCCrV9rlihPA3r1yUo+ESxg/Ku6cWIoY9z7Hgwi5cu49KldKpVrUpm5pViryEiIiKFHTx0mLnzPick9CRmZgZqenkx+rln6NCuLfM/X8jKn1fxzpuT6dCubbHWe2H8BI4cPcbWjWuxsrK65bgyMjLZ/NvvODo64ufXsdD5uLh4PlvwBTt37SE5JYUK5cvTsmVzJr06AZd/sNPHtu07mTHzUx7p1pVxY577x64jIve2s2fP0qZNG9zd3QGoWDH/686ZM2cwGo1MnDgRKysrPvroI8zMzNi3bx9bt24lPj4ee3t7xo8fj5OTEzExMSxcuBCAV155BTc3N9auXcuePXvIy8sjICAAX1/fUrtPERERERERESkbip0Arlu7VqFjRqORfQcOsWHjFq7eYC+renXrlCgB3DegJ8dDQlj+4y+mY4lJyabPq1erSkDPR3B1rUJKSiqbfvud0JPFa7s2+tmRuFapTFZWFsdDQlm1dgN5eXk0qFeXR7p2xsnJkdzcXCIio1m3YSMpqWkA9OrRjWZNm1DOyoozZ8P5z5LvAfBwd8O/RzeqVKlMQkIiv6xZT0xsXKHrduvSiWY+jbG3s+PKlascOnKUihXLm1pk7953gE1bfgfy22d37/owTZs0AuDw0WP8uuk3jEYjDRvU45EunXF0sMfC0pLIyCiW//gLFy5ewtzcnPfenswncxeQkJAIwPPPPMUfx46zZ9+BYj9/EREpmxISExk1ZhwZGZnUq1sHS0tLQk+eMnXpOH3mLDExsSXq2vHHsWOkpKRgNBpvK7aNm7eQmZlJnwB/rCwtC5yLPneOwU+MICU1lXLlyuFRw53EpGR+37ad995587auezNx8fGcDQsv0f6eIlL2eHh4sG/fPho1amRK/gKEh4fTqlUrnnjiCQwGA2ZmZvz666/s3LmTwYMH4+DgwMyZMylfvjwRERE4Ozvz9ttvA/n/5//hhx9ITU3lpZdeIjY2lhUrVtxyAnjJ9ysICg4p8lzjRg144rGBt7SuiIiIiIiIiNx/ir0HcMWKFQq8Tk5J5ctvFvPLmvU3TP4WNfeGYyuUp5JLRfYdOFzkeTtbW/41YihnwyKY/dkX7N67nycGD6Kqa5Virf/jL2v48OPZLPrvDzRu2ICmPo1N183JyWH2Z1+w8OtF5Obm8vSIoVhYWFCnljfNm/rwxVf/Yer0T1j36yYA7O3tGDHscYKCQ5jxyVzOhkUw5LFAzMwKP9Zqrq6EnDjJhx/PZsXPq/Dt0Ja0tIvMmb+Qpct/pFPH9tRwrw5At4f9qFOrJgu/WcTXi5bQtEkjWjTzAaCCszNZWVl8MmcBsz/7HIDevXoW+/mKiMiDK+h4MBkZmTRsUJ+fli9l2X8Xsev3TbRv26bAuFGjx1G/SQumvP1/AIyfMJGH2vnRqFkruvXswy+r1xZau+lD7ajfpAWr1qwDIDjkBMNHPkOLNh3w7xPIT7+svmFs1+b1CfAvdG7GzFmkpKbSpnUrtm3ewJqfV7B3x2/8uGwpNjY2AKxb/yt9BjxGizYdGDh4KDt37zHNf/nV16nfpAXbd+4C8quW6zdpwb4DB0lPT2fE06Pw69IDnxZtaNW+E+++9wGZmZkFYvjy62+p36QF3Xv1JSs7m4fa+VG/SQtSUlMB+H7ZCuo3acHUD6bf8D5F5P7Ut29fvL29ef/99wvs4RsREYG3tzfm5uaYmZmRmprKpk2bGDt2LA0bNiQhIQF3d3csLCwICwvDy8sLc3NzzM3NSU5OJigoiJEjR2Jubk5QUBAeHh63HmNAT2xtbQodt7ezo18RX1tFREREREREpOwqdgLYYDAUeB0XF098QkKx5lrcYN/gv7OzswMg7cKFIs/7NG7IpfTLbN66jdS0NA4dOUpo6KlCraevJ/58ApczMoiKjuHUmTO4Vq5sOnc1K4vUtDTOJySy/MdfsC5nTd06tbhy9QqWlhZUKF+eK1eumKqRmzf1Ie3CBXbu3sfly/kxOTs5UaVypSKvnXnlCpczMjh1+iyxcfFcuHiRlNQ0Tp0+S1z8edyqVcNgMNCm9UNs2rqNxKRk4s8ncPiPY9SrW8e0TlZ2NhcvXSIxKZmdu/fh5VGjWPcuIiIPtjq1a2FpaUFwyAlenjiJ3Xv2YW1tjfnfvk93aNeWwP59afnn91Z7OzvatW1Nl4c7EX/+PJPffIdzMTEF5vTr25vA/n2p4e5OXPx5Rjw9imNBwXTy8yUzM5PJb77Dvv1Fd6M4n5DA3n37cXdzo3mzpgXO5eTksG3bDgAmTZyAk5MjkP//Eo8a+a1YN//2OxNem0xcfDwtmzfn9JmzPPv8WIKOB9/0mWRmXmHfgYNcSk/Hz68jtjY2fL9sBd8u+q7Qswvs35ce3bthZWnJw53yK/S279gJwM5d+Qnnbt263PSaInL/sbCwIDAwkBdffJGNGzdy8uRJjEYjEREReHl5mcYdPnyYWrVqUfnPnzHCwsLw9vYGKDT25MmTpKenM2XKFObNm4etrS1Dhw695Rjt7e3oW8QbQ/v18cfOzvaW1xURERERERGR+0+xW0BfvHSJ6lQ1vW7UsD4eNdz5efVaQkJP3XRucV2ruHF0cCAtrXAS2NnZmeTklALHkpJTcK1SudDYv7OxsaZvr57U8vYy/bL78B/Hihybk5NDaloaFcuXJzgklJ/XrMe/R1cC/LuzcctWjgUF4+hgT+VKlfj3W5NM84xGI44ODsTFn79hLBmZmQVaXF65coVy5crlf1hZMXjQALjWTtNgICamcFtpgPTLl03v9L+WojdgKHKsiIg82Nzd3Jg98yM+/PgT1m/YyPoNG/Gu6cVHH75f4I1Gw4Y+jm+H9qbXU/8vv11pVlYWU6fNYNmKHwk9eRq36tVNY96ZMoly5coB8PGnc0i/fJkxzz/L8Cce549jQYwaPY416zbQutVDheJavWYdRqOR3gGFExeX0tPJ+rP98rWE798tXvJfAGbO+ICO7duxfOVPvPXueyxespTpH7xXrGfjWqUKs2fO4OChwwx76hn2HTjE86OeMZ337diBCS+ONb3uHeDPqjXr2LBxMz0e6cauPXupUrkyLZsX7w1pInJ/cnd3p0KFCiQlJVGpUiWuXLlClSr/60SUlpZGhQr/634UFRVF165dAYiJiaFTp06mc6mpqbRv355Bgwbdsfh8mjTi2PEQgk+Eml43alD/jq0vIiIiIiIiIveHYieAz4ZFUP8vvxwGcHCwZ9iQxzhyNIjV6zaQmXnlunOLKzEpmbQLF2nZvClR0ecKnU9NS6Ne3doFjrlUrEBqWtpN1+7SyTd/H64588nIyOTRwH7XHWswGHBydOTCxfzk9eEjRzl85CjNmzbhscB+xMTGceHiRWLj4vns86+KfX/XGI3GAlXV115fuXKFK1ev8v3yHzl56kyx1rkmJzeXrKwsHB3tOV/M6mwREXmwdPLrSCe/jhw+8geff/k123fs4tXX32D1T8uLHJ+Rkck7/57K5t9+JzMz07TNQdbVq9e9Rvyfb4L6bP4XfDb/C9PxuPj4Isf/8mf7597+hRPAdnZ2mJubk5ubS3T0OWrV8i40JvpcfjVy/bp1AWhQvx4A5/48zrXvt8XYprjKn28ou3CdTiTXtGvTmurVq7Fr915WrVnHlStXGDpkcJHbQIjI/Ss3N5fNmzdTp04d7Ozs+OOPP0hNTaVOnTqmvcHPnz/P1atXcXNzo3z58uzbt4/U1FTCw8OJiYnByckJyH+DaVJSEo6OjlhaWuLi4sK6deto06YN9vb2xMTE0KhRo9uOuV9vf8IiIrAwtyiyIlhEREREREREyr5i/5byaNBxsq6z128zn8a8+MJz1KtTu9C5rKwsjgYdL1FQ6zZsokUzH/oG9MTTowYVK1agbu1aeNf04tjxEBzs7eja2Y/yzs60aOZDvXp1OHj4DyC/krZCeWdTVeyVK1epXi2/ctlgMIABzM3y9936a/IU8vfX9fSoQXlnZ7p3exgzMzNCT53GycmRKpUrY2VlSfz5/MSqjbU1R48FU7mSC519O1De2RlnZyeqVXUt0b0W5fCRo/To9jCeHjVwsLenWlVXbGysizU3PDKKju3aUsmlIk6OjlhZWd12PCIiUnZce4NQ82ZNeeuN1wEIC48gNzcXW9v8FqEJCYmm8ctX/sjqtevp5NuBb79cgH+P7gXWs/tzzrXvj4Dp+26fAH++/epz08erL79YKJ4ToSc5c+YsTRo3wtOz8N6XVpaWtGie3xZ6xsxZXM7IMJ2LP5+faK7h5gbk7zv81z+rVasGgJNjftvo6yWg/+ram7Ou/R/h2jM5f75gZw8zMzOGPj6YnJwcPvxoJgaDgUGB/W+6vojcXy5dusTp06eZO3cu06dP58SJE4wePZpKlSpRuXJlGjZsyPTp01myZAlXr16lTZs22NnZ8e6773LgwAEaNmxoShT7+vqycuVK5syZQ1JSEi1btqRWrVrMmjWLadOmcexY0Z2JSsrBwZ4+vXrSv2+vIvcEFhEREREREZGyr9gVwOnpl/l9x24e6dKpyPOODg48OXRwoeO/79hNevrlEgUVFBxC2oUL9OjWhaeGPY6ZmRnJySns2rufs2HhfPntdwT0fIQO7duQnJzCkqXLiY3L/6XuseAQmjVtgn/3rqz4aTW/bdtBt4c7cfpsGL9v38WgAX2ZMH4M5ubmZGRmsHPXXtN1zczN6Nfbn/LOTsSfT+DrRfm/yKnp6UH/Pr2ws7Ml/fJlft++k3MxsQB89Z/v6PlIV3w7tsOYl8fxkFB+/GVNie7379b9upluXToxaEAfHB0cuHDxEkuXrSQms+g20H/1y+r1BPYLYMxz/wLg4sWLxaqOFhGRsu/IH0d54smnqVO7Fo6ODoSF53fo8GncCHNzcxo2qM/Kn35h1tx57Ny1B3d3N9O+9uERkezZu5/YuILfixrUr0dU9DleeHECXp4ePNL1Yfr368M3/1nM6rXrORcTi5OjI7FxccyYNrVQTL+sXgvkJ4uv58VxLzBi5LNs37mLdr5dqOHuxuWMDOLi4tm0fhVDhwxm34GDvPLaZHx8GnPgwCEAnhjyGABtWj/E98tWMHPWXPbs3c+x48V/Y9q1auINGzdx5epVsrKyWDB3FgCPDhzAF19+TWpaGn6+Hajh7lbsdUXk/uDs7MwLL7xQ5DmDwcCoUaMKHR83blyR47t370737gXfRDNs2DCGDRt2+4H+TTOfxnd8TRERERERERG5fxi86zUuRkPE/xk6eBANG9Qr1tjgkFC++77olpL3mo7t2lCvXh0Wfr2otEN5oBzet7O0QxARKRVGo5G8vDwyMzNNlao3GxsZGYm7e9H74BZH0PFg5ny2gOCQE1y8dIkK5cvTulVLXn5xLK5VqnD16lX+b+o01v+6CaPRSGe/jnzw3rv8+/0P2fr7dlLT0rCxscbdzY03J79Gi+bNiImNZfKb73Dkj6NYW9vwwvPPMnzoEI4FHWfGzFkEHQ/GmJeHp6cH7//7HRr+ZS/K3NxcOnXrSVraBbZt2UCF8uWvG/vx4BDmf/4lh44cISMjg0qVKlG3dm1eeXk8Nb08WbVmHQu//paYmFi8PD14YfQoOvv5mp7fgi++5Luly7h48SKOjo7UcK/Ov995CydHR3y7dMfL05N1q1ZyLiaGbj37ULdObX5e8T0Ai777L58v/JpL6Zdwd3Nj+dLvTFV1o0aPY/vOXXwxfw4d27e75b8bEZF7TXR0NB4eHpiZmRXYuubvwsLCcHW9/S5IIiIiIiIiIg+qtLQ0bGxsbvozeEmUOAFsMBjo0e1h2rdtjbm5eZFjcnNz2bVnHxs2/VaozfK9Sgng0qEEsIg8qEojAXyv2b5zF6NGj6Ozny/z5nxS2uGUyPgJE8nMyGTHrt20bNGcxd8sLO2QRETuKCWARURERERERO6OfyIBXOwW0NcYjUbWb9zC/kNHaNWyOXVreeNc3jk/wNQ0Tp45y/6Dh0lOTrkjAd4tO3bvZcfuvTcfKCIiInfEqtXrAOh9g/bP96KUlBQOHT5Cevpl2rVtzQfvvVvaIYmIiIiIiIiIiIiYlLgCWOROUgWwiDyoVAEsIiL3MlUAi4iIiIiIiNwd/0QFsNkdWUVEREREREREREREREREREqdEsAiIiIiIiIiIiIiIiIiImWEEsAiIiIiIiIiIiIiIiIiImWEEsAiIiIiIiIiIiIiIiIiImWEEsAiIiIiIiIiIiIiIiIiImWEEsAiIiIiIiIiIiIiIiIiImWEEsAiIiIiIiIiIiIiIiIiImWEEsAiIiIiIiIiIiIiIiIiImWEEsAiIiIiIiIiIiIiIiIiImWEEsAiIiIiIiIiIiIiIiIiImWEEsAiIiIiIiIiIiIiIiIiImWEEsAiIiIiIiIiIiIiIiIiImWERWkHICIiIsUXHR1d2iGIiIiIiIiIiIiIyD1MCWAREZH7gMFgwM3Njby8vNIORUREHgBmZmYYDIbSDkNEREREREREboESwCIiIvcBg8GAhYUFRqOxtEMREZEHgMFgUAJYRERERERE5D6lBLCIiMg9zmAwYDQa9ct4ERG56/R9R0REREREROT+owSwiIjIfUC/gBcRERERERERERGR4jAr7QBEREREREREREREREREROTOUAJYRERERERERERERERERKSMUAJYRERERERERERERERERKSMUAJYRERERERERERERERERKSMsCjtAEREROTmjEZjaYcgIiIPIIPBUNohiIiIiIiIiEgJKQEsIiJyj7uW/A0PDy/lSERE5EHi5eWF0WhUElhERERERETkPqMEsIiIyH3gWhLY3d29lCMREZEHQXR0tJK/IiIiIiIiIvcp7QEsIiJyH1ALaBERudv0vUdERERERETk/qQEsIiIiIiIiIiIiIiIiIhIGaEEsIiIiIiIiIiIiIiIiIhIGaEEsIiIiIiIiIiIiIiIiIhIGaEEsIiIiIiIiIiIiIiIiIhIGaEEsIiIiIiIiIiIiIiIiIhIGaEEsIiIiIiIiIiIiIiIiIhIGaEEsIiIiIiIiIiIiIiIiIhIGaEEsIiIiIiIiIiIiIiIiIhIGaEEsIiIiIiIiIiIiIiIiIhIGaEEsIiIiIiIiIiIiIiIiIhIGaEEsIiIiIiI3BcSExNJS0sr7TBERERERERERO5pSgCLiIiIiMg/Li4ujjfffJPs7OxbXuPTTz8lNTX1tmNZvHgxmzZtuu117qSsrKzSDkFEREREREREygiL0g5AREREpDiysrOxsrQs7TBE5CbOnj3L6tWrOXfuHGZmZrRq1YqBAwdia2uLn58flrf47zg5OZn09HTc3d2LPWfKlCkMGzaMunXrFjhet25dqlevfktx/NUbb7zBhQsXCh0fPXo0DRo0KPY6P/74IxYWFvTp0+e2YxIRERERERERUQJYRERE7nnde/XlwsWL7N2x9ZbXmDhpCqvXrmf2zBl06/rwHYxORK65dOkS8+bNo3fv3jz55JNcunSJK1euAODk5ETXrl1vee3IyEjc3d2xsCjejzApKSlcuHABDw+PQudatWp1y3H81RtvvAHAsmXLsLW1JSAgAAAbG5sSrXP69Gl69OhxR2ISEREREREREVECWERE5AES0G8g4RGR5OXl4ezshFv16vTt3YvHHxuEubn5La/7wvgJHDl6jK0b12JlZXUHI84XFX0Oe3v7W56fkZHJ5t9+x9HRET+/jqbjiYlJ+HbpXuScAP+ezJj2Hs+9MJ5t23cy55OP6NqlM2+9+x6/rF5LVlYWtrY2uFapwsOdO/HUk0OpUL58kWsNHDyUq1lZrP5x2S3fg8j9ICYmBgsLCzp16gRA+b/8m1iwYAH169fHz8+PjRs3snfvXlJTU6lcuTIjR46kSpUqAERFRbFq1SrCw8MxNzcnMDCQ1q1bExYWhqenJwA5OTmsXbuWPXv2kJeXR0BAAL6+vgViiYiIoGrVqlhbWxc4HhUVxbx585g2bRrJycksWbKEmJgY8vLy8PPzMyVxL1y4wIoVKwgODsbR0ZFhw4bh7e1dYC1bW1sAzp07h7+/v+l1UXMrV67MW2+9xYQJE3Bzc+O7777D0tKS/v37ExMTw8KFCwGYO3fuHfm7EBEREREREZEHlxLAIiIiD5DYuHjy8vLw7dCezCuZ/HH0GFOnhRAff55XXh5/y+v+cewYKSkpGI3GOxjtnbNx8xYyMzPpE+BfoI10uXJWdOncyfQ6/fJl9u0/AIC3t1eRayUkJpKVlUWjhg0o7+zM0aDjfPn1t+zdt5/lSxcXGPvL6rX8unEzrlWqkJObw9iXXqGTb0cC+/f9B+5SpPRVrVqV7OxsduzYQYcOHTAYDKZzkZGR9OzZE4AdO3YQGBiIl5cXy5cvZ8uWLQwZMoSwsDDmz59P7969GTZsGAsWLKBcuXJAfkK3c+fOAKxcuZLU1FReeuklYmNjWbFiRaEEcHh4OF5ehf8dR0REmKqCT506RW5uLpMnTyYxMZHZs2fToUMHHB0dmTt3Lj4+PgQGBrJlyxa2b99eKAEMkJGRQXx8vOlaeXl5Rc596qmnaNWqFVu3bqVly5acPn2ayZMnExUVhbOzM2+//fZtPfsl368gKDikyHONGzXgiccG3tb6IiIiIiIiInL/MCvtAEREROTumzHtPRZ9vZDpH7wHwK+btgCQnZ3D7M8W0K1nH1q178SoMeOIjIwyzfvP4iU83L0XTVq05uHuvdi+Y1eBdZs+1I76TVqwas06AC5evMib7/yb1h060/Shdjw9ajQAyckpvPLaG7T364pflx688+/3SU9PN61z+sxZnnz6WVq06UCPgH6F4g8OOcHwkc/Qok0H/PsE8tMvq294v9fi6RPgX+C4o6Mjc2d9zNxZHzPn049wcMivMu7erSuj/jXyhmuO+tdIvpg/hzU/LcfMzIzjwSHExsYVGJOQkEh0TAw7d+9hz979RERGkZiUdMN1Re5nTk5OjBkzhm3btjF9+nQSEhIASEpKIjMzk+rVq5OWlsbFixdp2LAhTk5O1K5d2/Tv/4cffqBfv374+vri4ODA+fPn8fLyIicnh3PnzuHp6UlycjJBQUGMHDkSc3NzgoKCimzzHB4eTs2aNQsd/2sCODw8nNq1a+Pk5EStWrWwsbEhPT2dQ4cO4eLigr+/PxcvXuTMmTOm6uOi1nN2djZVO99obpd23ixbAAAgAElEQVQuXTh8+DBLlixhxIgRlCtXjrCwMLy8vDA3N7+tTgx9A3pia1u49bS9nR39/va1T0RERERERETKNiWARUREHmB5uXkApiq9GTM/Zf7n+W1IG9Sry/Ydu3jy6VGkp6cTciKUaTNmkpWVxcAB/WnYoD6VKrkUWK9f394E9u9LDXd3jEYjz40Zz4off6ZihQq0b9sGt+rVyc3NZdSYcaxdv4Hq1avh6OTID8tXMnHSmwBkZWXx3Avj2X/gEA3q18f1z7aw18TFn2fE06M4FhRMJz9fMjMzmfzmO6bK3b87n5DA3n37cXdzo3mzptd9Ft8uWsLmLVupVcub9//9ToHKxRvJzcs1ff73Oc88PQK/jh2wsrLC1taGDu3a3DSxLHK/8/b2ZtKkSbi6urJkyRIgv/rXzc0NCwsLwsPDqV69OpZ/VuMnJCRQuXJl4uPjSUxMpG3btgDEx8fj5OSEk5MT0dHR2NjYULFiRU6ePEl6ejpTpkxh3rx52NraMnTo0AIx5OTkEB0dXWTSNjIy0nQ8PDzc9Hl6ejoZGRlUqlSJkJAQTp06xeuvv87SpUtp2bKlqa313/290vhGcytUqICDgwM1a9Y0zYmIiCiyUrmk7O3t6NurZ6Hj/fr4Y2dne9vri4iIiIiIiMj9Qy2gRUREHkDjXp5Ieno6J0JPAtCje1eys3P4ftlyrK2tWb50Mc7OTrz6+hTWrFvPho2bqfVn61NnJyd6dO9Gq5YtCq37zpRJpnatBw4e5sjRY9StU5sV33+HhUX+fzv2HzxEcMgJmvo05r+LviEnJ5eeffqzddt2IqOiiYqOJjY2jtYPteTbrz4HoH6T/13rv98vI/3yZcY8/yzDn3icP44FMWr0ONas20DrVg8Vimn1mnUYjUZ6BxROjFwTHHKCT2bPwcbGhtkzpxdZRfd38z5fyLeLl3AiNJS8vDx8mjSmalXXAmMuZ2RwIjSUPgH+mJubE3IilPT0dBwcHG66vsj9zNzcnMaNG7Ny5UogP8l5LdH6188hP4HarVs3EhMTqVChAmZm+e9RjYqKMiVGY2NjqVGjBgCpqam0b9+eQYMGXff6UVFRWFtbm/YVviYjI4OEhAQ8PT25cuUK8fHxBeJydXWlXLlypKSkMGzYMJo2vf6bRv4af4MGDUyvbzR32bJluLi4EBoaSlZWFlZWVsTExFw3uVxSPk0acex4CMEnQk2vGzWof0fWFhEREREREZH7hyqARUREHkD79h8gJjaWhg3qM2XSRMa/MJr48/FkZ+dQraorzs5OANSvXxeAc+diaOrTmGFPPE5EZBRPjnyWAY8OISIi8rrXiIqOBsCnSWNT8vfaWgB169TBYDBgaWlB7VrepnMJCYkAeHoWbukKEB9/HoDP5n9B6w6dGTV6HABx8fFFjv/lz/bPvf2LTgBnZWfz+pS3yc7OYdLECXhdp83r350IPUlo6Elcq1ThmadHMH/up4XG2Nna8uWCz3jlpXG8NG4M3yxcoOSvlFkhISEcPnyY+Ph4zpw5w8aNG2ncuDFQMOn714rZnJwcYmJi8PLyws7OjtTUVBISEjh//jx79+4tsOduSkoKV69excXFhePHjxMdHU1qairHjx8vFEt4eDhubm5kZGSYPnJzc4mMjKRSpUrY2toSERGBi4sL9vb5rd8jIyNNcbm4uLBnzx6SkpKIj48nLCysyHs2Go0F5t1o7o4dO4iIiOC5556jatWqHDx40PQMro1NTk6+rb8DgH69/bGxscbB3r7IimARERERERERKftUASwiIvIA2rdzK46OjgWOuVZxxdLSgpjYOFJSU6lQvjzBIScAqFatKgCTX3uFf418ki++/IYlS39g5uy5zJ45AztbW5KTU4g/n4BHDXcAqlSpDOQnSvPy8kxVfe5ubqbjRqOR7JwcTp0+A0D1alUxM8tvoxx0PLjAvGuq/xlLnwB/BvTvazru7ORU6D5PhJ7kzJmzNGnc6LoJ5QVffMWZM2fp0K4tgwL7F/cRMueTj+japfNNxxkMBqytrYu9rsj9KiEhga1bt5KWloaTkxMtWrSgV69e5ObmEh0djYeHh+nza8ng6OhoHBwccHZ2xsnJiaZNmzJt2jQqVKhAUlISTzzxBAA+Pj7s2bOHnTt30qlTJ06dOsWsWbMwNzfHx8eHRo0aFYglPDyckydPMnHiRNOxyZMnF9r/96+VyBERETRr1gyAgIAAFi1axNSpU7G3t6dHjx5F7iccFxdHVlYW7u7upmNFzTUajaxdu5aXX34ZKysrWrVqxd69e2nXrh2+vr6sXLkSa2trhg8fTsWKFW/r78HBwZ4+vXpSrpxVsboZiIiIiIiIiEjZY/Cu19hY2kHIg+vwvp2lHYKISKkwGo3k5eWRmZlJtWrVijU2MjKyQJLhVjRv3YHMzMwiE8AA73/4EYuXLKVqVVeqVa3KocNHcHGpyNqfVxAccoLZn83Hu2ZN4uLj2b1nH7169uCjD6fy0iuv5beJruWNl6cHj3R9mO7dutFv4GOEhUdQ08sTjxo1SLtwgcXfLOTRIcMJORFKg/r1uHr1KmfDwunYvh1fzJ9DdnYOAx4bwpkzZ6lVy5uaXp5s3LQFe3t7DuzeRmRUNH36DyI7J4dmTX1wcnQkNi6OGdOmmiqJr5k2Yyb/WbyEKZMm8sTjjxW63+hz5wjoO5Cs7GwaNWxAxYoVTOc8atRg0sQJPPfCeLZt32lK+P79tYjcGdHR0ZQvX56cnBx2797N2bNnGTt2bGmH9cC6lrQ3MzO74Z7oYWFhuLq6Xve8iIiIiIiIiNxYWloaNjY2N/0ZvCRUASwiIiImr7w8HlsbG1avW8/JU6fp0K4tr0+cgKOjI1euXiU5OZWg42uwsbHBz7cDE14ca5qXkprKkT+Ocv58Ai2bN8PS0oKvvpjHtOkz2bV7DzGxcXh61CA7O5sFc2fxwYyP2bfvAGbmZgwc0I9XXx4PgKWlBQvnz2H6x59y4OAhtvz2O5UqueDTJL+VrEcNdxZ/+yUzZs4i6Hgwxrw8PD09yMrKKnAvubm5rF2/AQsLC3r2eKTI+z1zNoys7GwAjgeHFDjXUPtmitw1WVlZLF++nKioKCwtLWnYsCHDhw8v7bBERERERERERO5LqgCWUqUKYBF5UJVWBfCDZPvOXYwaPY7Ofr7Mm/NJaYcjInJfUQWwiIiIiIiIyN3xT1QAm918iIiIiMj9Z9XqdQD0DvAv5UhERERERERERERE7h4lgEVERKRM+ujDqZw4doie3f+fvTuPs7qq/wf+uncWZtgFlB1EUBAXXDNL0xZzX0pL+6rfzCzNvlqp2de0stSyLH+mVmbZbvlVy4pMc880NXMXwSUWQVCRfZhh1vv748IEQa7kwOX5fDzGmc9yznnfO8hc7mvOOXt1dSkAAAAAAG8aATAAAAAAAABAhRAAAwAAAAAAAFQIATAAAAAAAABAhRAAAwAAAAAAAFQIATAAAAAAAABAhRAAAwAAAAAAAFQIATAAAAAAAABAhRAAAwAAAAAAAFQIATAAAAAAAABAhRAAAwAAAAAAAFQIATAAAAAAAABAhRAAAwAAAAAAAFSI6q4uAAB49WbOnNnVJQAAAAAAsA4TAAPAeqBQKGTYsGHp6Ojo6lIA2AAUi8UUCoWuLgMAAAB4HQTAALAeKBQKqa6uTqlU6upSANgAFAoFATAAAACspwTAALCOKxQKKZVK3owH4E3n5w4AAACsfwTAALAe8AY8AAAAAACvRrGrCwAAAAAAAABg7RAAAwAAAAAAAFQIATAAAAAAAABAhRAAAwAAAAAAAFSI6q4uAAB4ZaVSqatLAGADVCgUuroEAAAA4DUSAAPAOm5F+Dtt2rQurgSADcmoUaNSKpWEwAAAALCeEQADwHpgRQg8fPjwLq4EgA3BzJkzhb8AAACwnrIHMACsBywBDcCbzc8eAAAAWD8JgAEAAAAAAAAqhAAYAAAAAAAAoEIIgAEAAAAAAAAqhAAYAAAAAAAAoEIIgAEAAAAAAAAqhAAYAAAAAAAAoEIIgAEAAAAAAAAqhAAYAAAAAAAAoEIIgAEAAAAAAAAqhAAYAAAAAAAAoEIIgAEAANYBc+fO7eoSAAAAgAogAAYAAFgHXHTRRV1dAgAAAFABqru6AABg3dLe3p5isZhCodDVpQCst84888wsWrRotfMnnnhixo8fv9r5efPmpaGh4c0oDQAAAKhwAmAAoNMnTvp0/vrXe3PLjX/IxhsP6OpyANZbZ555ZpLk6quvTvfu3XPAAQckSerr69d4/4wZMzJ8+PA3rT4AAACgcgmAAWADcsAhh2Xa9Bnp6OhI3759Mmzo0Bx84P750OEfSFVVVWbMmJmW1tauLjNJcsef/5JPnPTpXPStr2fvvd7T1eUAvCbdu3dPksyaNSv77bdf5/GiRYty7bXXZtKkSendu3eOPvrojB49OlOnTs2mm27alSUDAAAAFUIADAAbkNlznk9HR0fesdvb07SsKQ8/8mjOO/+JPP/8CzntlE91dXmdjjjqmOy5x+4pFouZOm16PvCho3P1L39mWWpgvdLY2Jjnn38+o0aNSpJ0dHTk0ksvzYQJE3LooYfm1ltvzZ133pnRo0dn+vTpeec73/m6x7ryqmvz2KQn1nhtm63H58jDD3vdfQMAAADrl2JXFwAAvPkuOP/c/OxHP8g3vnZukuRPN9+6yvWDDz08E3Z8a4457oQ8O3NW5/l58+bntM+dmbfv8Z7s8e59cvY5X+3cs7KhoSHHfPT47PHufTJhx7fmLW/fM18+92tpamrqbH/9DTfmwPd9IDu+dbd86Ohj8vAjj61W20svzUtHR0eu+fV1nZ8LhUJenDv3P/FUAPzHTJ8+PX379s1GG22UJHnggQcyYMCA7Lffflm8eHGeeeaZbLrppmlra8usWbPe0Azggw/YN927r768dM8ePXLIAfu97n4BAACA9Y8AGAA2YB3tHUmy2szaLbbYPKNHb5b7/nZ/vvjlckjc3t6e4z95cq6/4cYMHTokvfv0zv9d8+ucfsYXkiRNTcty3/1/z5KGhuyxx+7pXl+fq66+Nj/52S+SJLfefkdO+9yZaWhYmj33eEcmT3kqx3/y5CxcuGiVsQcM6J/zvvKlFAqFjBg+LEly7pe/mIGbbPIffS4A1rZp06Z1zv5NkieeeCJPPfVU/vd//ze/+tWvstNOO2XPPffMzJkzU19fn/79+7/usXr27JGD9993tfOHHLRfevTo/rr7BQAAANY/loAGgA3QyaecnoaGhkye8mSSZJ+9V91j94KvnZs+fXrnLW/fM39/4MF0dHTkgYcezqQnJme7Cdvklz/7cdra2rPvQe/L7X++MzOenZnu9eWZZ4MGDszFF16Qvz/wYI7+yMdy3/0P5BPHfyyX//DHSZKvnvOlbDV+y4wYNiyX/eCK/OXuv+bAfwktpk6blsaljfn+dy/Ox088KU8/80y22HzMm/DMAKw906ZNy/jx4zuP58+fn6OPPjrbbbfdKvfNnj07I0aMeMPjTdh26zz6+BOZNHlK5/HW47d8w/0CAAAA6xcBMABsgO772/3p27dPthq/ZQ4+cP8c8cHV94asra1Nv34bZc6c57N06dLMmvVckmTsFlukUCikpqY6m48Zneeem51Zs55bLaAdOLA8Y3fRovIM3xdeeDFJcuzHT1zlvtlz5qw29t57vSe7v/3t6d69PrfeeP0alzUFWJeVSqXMmDEj+++/f+e5AQMG5J577smwYcPS1taWxsbGbLbZZknK4XBzc3O6dev2hsY95MD9MnX69FRXVa9xRjAAAABQ+QTAALABuu+u29O7d+9XvG/F0tClUinDh5WXY5485cmUSqW0trXlqaefSZIMHTL4ZdsmyZDBg/LCiy/m9FM/k/Hjx3XeN3zo0DWOvSL0Ff4C66M5c+akpaUlw4cP7zx3wAEH5Gc/+1nOO++89OzZM/vss08222yzTJgwIffcc0/uuuuuvPvd735D4/bq1TMH7b9vunWr9fcnAAAAbKAEwADAq7LD9hMyfstxefSxx3PYEUelubk5s2fPye5vf1s23XRk5s596WXbH3H4B/LQI4/mku9elh233y7FqmLmzZufa6/6xZv0CADePEOGDMm3v/3tVc5ttNFG+dSnPrXavT179sxpp5221sbefsI2a60vAAAAYP1T7OoCAID1Q1VVVS679NvZd5/35vnnX8iixYtz2PsPyTe/ft6ran/QAfvl6189J0MGD8q9f7s/DzzwUOrq6rJs2bL/cOUAAAAAABuOwuhx25S6ugg2XA/ed1dXlwDQJUqlUjo6OtLU1JQhQ4a8qntnzJixylKiAPCfMnPmzIwcOTLFYrFzSf81mTp1agYNGvQmVgYAAACVZeHChamvr3/Ff4O/FmYAAwAAAAAAAFQIATAAAAAAAABAhRAAAwAAAAAAAFQIATAAAAAAAABAhRAAAwAAAAAAAFQIATAAAAAAAABAhRAAAwAAAAAAAFQIATAAAAAAAABAhRAAAwAAAAAAAFQIATAAAAAAAABAhRAAAwAAAAAAAFQIATAAAAAAAABAhRAAAwAAAAAAAFQIATAAAAAAAABAhaju6gIAgFdv5syZXV0CAAAAAADrMAEwAKwHCoVChg0blo6Ojq4uBYANQLFYTKFQ6OoyAAAAgNdBAAwA64FCoZDq6uqUSqWuLgWADUChUBAAAwAAwHpKAAwA67hCoZBSqeTNeADedH7uAAAAwPpHAAwA6wFvwAMAAAAA8GoUu7oAAAAAAAAAANYOATAAAAAAAABAhRAAAwAAAAAAAFQIATAAAAAAAABAhaju6gIAgFdWKpW6ugQANkCFQqGrSwAAAABeIwEwAKzjVoS/06ZN6+JKANiQjBo1KqVSSQgMAAAA6xkBMACsB1aEwMOHD+/iSgDYEMycOVP4CwAAAOspewADwHrAEtAAvNn87AEAAID1kwAYAAAAAAAAoEIIgAEAAAAAAAAqhAAYAAAAAAAAoEIIgAEAAAAAAAAqhAAYAAAAAAAAoEIIgAEAAAAAAAAqhAAYAAAAAAAAoEIIgAEAAAAAAAAqhAAYAAAAAAAAoEIIgAEAAAAAAAAqhAAYAABgHTB37tyuLgEAAACoAAJgAACALtDR0ZFzzz03//jHP5IkF110URdXBAAAAFSC6q4uAACofB0dHXlp3rxssvHGa6W/ltbW1NbUrPFae3t7kqSqqmqtjAVs2F588cV85StfWeXc6NGj85nPfOYN910sFrPzzjtn8ODBmTdvXhoaGt5wnwAAAAACYABgrTvmuBPy7LPP5qorf5rqqqq8a+8DMmTw4Pzx979+Q/3+6v+uyYXfvjT/84mP58NHH7na9f8984u54cabctWVP82W48a+obEAkmT69OkZNmxYTj755M5z1dVr759Re++9d5JkypQpGT58+FrrFwAAANhwCYABYAOywy67pampabXzN9/w+wwbOnStjFEqlfLUU09nwcKFWbhwUTbq2zfNzc1rpe958+e/7Ay52XPmpKW1da2M9UYcdsRRaW5pycTfXN3VpQBv0LRp0zJy5Mh07959tWtXXHFFpk2blqampuy8885pbGzMpEmT0qdPn3zkIx/pDHQXLlyYiRMnZtKkSVm2bFl23333HHroobnlllsyffr0HHfccZk6dWo23XTTN/vhAQAAABVIAAwAG6B37P721FT/cwnl+rr6tdZ3oVDIr6/+ZZYsWZItNh+TuXNfWmt9r+t+N/H6/OmmWzJo4MC0tbflpM+clj3fsXsOfd/BXV0a8DpNnTo173jHO1Y7P3fu3Dz++OM588wz09jYmG9+85s54IADcsghh+T666/Pn/70pxx33HFZsmRJvvnNb2bbbbfNqaeemokTJ6a+vvx37owZMzpD3+nTp+ed73zn667zyquuzWOTnljjtW22Hp8jDz/sdfcNAAAArF8EwACwAbrga+emd+/eq5xraGjIyaecnn/8Y2rmL1iQvn375NBDDs7Djz6WRx59LH379MmpnzkpB+y3b5LkU6eenr/ec1+ampoyeNCg/M+Jx+fgA/dPknz04ydm2vTpufPWP71iLVf8+Kf58c9+kQULFqZvnz5538EH5jOf+p9UVVWlo6Mjl11+RX79299lwYKF6d2r1yptFy9enPPOvyB33nV3ioViWtvaVrl+yXcvy0233JY5s+ckSf7nxBNyzH8fmetvuDGXXX5FZs+Zky02H5PPnXZqtpuwTZLkpz+/Mj/9xS/z0ksvZcCAATn7rM/nHbu/PTNnzcrZ53w1Dz/yaIrFquyw/YR8/zsXrzLeiy/OzcznnsvMmbNSKpUyYsTwzH1pwwnAodI0Nzdn9uzZue666/L73/8+SfKud70re++9d2bMmJERI0ZkwIABSZLu3btn7Nix6devX8aNG5e77747SXLDDTdk7Nix+eAHP5gkmTVrVnbdddck5QB4jz32SFtbW2bNmvWGZgAffMC++ce0aWlsXHWVh549euSQA/Z73f0CAAAA6x8BMABsgM446+xU15RfBkzYdpsc++Gj09S0LPfce1/q6+uz5x675957/5bv//BH2XjjAdl5xx3yl7v/mjPOOju77LxzNt54QHr26JG37bpLkuS22/+cz3/h7Oy4w3aveSnpurq6bLXllundu3fu/us9ueInP8sWW2yegw7YL/93za9zyXcvy0Z9++btb3trHn7k0VXafukr5+XGm27JqE03zahNR+bue+5d5foNN96cadOn52277pJCoZBhw4bm1tvvyGmfOzODBg7Mnnu8I7fedkeO/+TJ+dMffpvZc+bk/AsuTP/+/XLY+9+XuS+9lI03Loc753/jwvz1nvuyxzt2y8BNNumcwbeyj330mCxavDhXX/ubVFUVs9vb3prjjzv2NT0fwLpjxowZqampyRlnnJFisZgknUtBr7xk87Jly9LQ0JB+/folKc8OHjBgQEqlUu6///6cdNJJScq/aDN37tyMGjUqixYtyoIFCzJ8+PDMnDkz9fX16d+//+uutWfPHjl4/33zq2t+s8r5Qw7aLz16rL58NQAAAFC5BMAAsAG67Y4//9trgwYOzCX/75v5yc+uzNe/eWH233fvfO60U/LJk0/JbXf8OZOemJw999g9533lS0mSlpaWnHf+Bbn62t9kypNPv+YA+MgPHZ4jP3R4Wlpbc/Mtt+a0z52ZSU9MzkEH7JffTbw+SfLtCy/IzjvtkEu/9/1853uXJykHLjfedEt6dO+ea6/6Rbp3r89/H/ux3P/3B1cb4/xzv9IZ5B5+5IeTJF8950vZavyWGTFsWC77wRX5y91/zfBhw5Ikffv0yT5775W37LRjZx8tLS1JkvHjxuXooz6Ujfr2XW2cpY2NmTxlSg46YL9UVVXliclT0tDQkF7/MnMZWD9MmzYto0ePXmMwO3369Oy1115JykHxgAEDOv9fnz59erbddtssW7YsTU1NncHws88+m8GDB6euri5PPvlkhgwZkm7dumX27NkZMWLEG653wrZb59HHn8ikyVM6j7cev+Ub7hcAAABYvwiAAWADdN9dt6+2BPS/GjhwkyRJQ8PSVY6XNDSksbEpZ59zXm657Y40NTV1zoxraW5+zbV87/If5pdXXZ2XXprX2c+yZcuSJC+++GKSZNSmI1dr9+LyvYUHDtwk3bu/+j2MX3ih3OexHz9xlfOz58zJgfvvm6OP/FB+edXV+fCxH8+W48bmwm98LZtuOjKnfPqkzJw1K9+7/If50U9/no9/9CM58YSPrdJHj+7d88PLvpPm5c9DbW1t52MC1j/Tpk3LpptumsbGxs5ztbW1KZVKee655zJq1Kgk5cB3xWzgUqmU6dOn5+CDD05dXV3q6+vz2GOPZcyYMbnzzjvTp0+fJKvu/5sk8+fPT3Nzc7p16/aGaj7kwP0ydfr0VFdV5+D9931DfQEAAADrJ+9IAgBrVCiUP5dKpeXHhc7ja379m0y8/obs+Y7d8pMfXpb99tn73/azIgBtblk9HJ485clcfOn30rdv31z+vUtyyqdPWuX64MGDk2S1pZ+TZNDATVIsFjPrudmZO/fV77M7ZPCgJMnpp34mP7ni+50fBy7f2/jznzstt910fY780OGZPOXJXHjxpUmSLceNzR9//5t8/7sXp99GfXPJdy/LU08/s1r/hUIhdXV1qaurE/7Cem769Om54YYbcvrpp3d+PP3003n22WfTq1ev9F2+EsCMGTM6w+AXXnghbW1tGTx4cAqFQg477LD87ne/y0UXXZQhQ4aktra2s++RI8u/3DJhwoR069Ytd9111xuuuVevnjlo/33zvoP3f02/HAMAAABUDjOAAWADdOrpn09VdVXn8REfOCxbvYZlQquqym2nTZ+Re+79W2bPmfNv7+3bt0/q6+sze/acnPGFs/O1c85erZ8FCxbknnvvy0svzVul7X8d8YE8+NDD+ewZZ2XXXd6S6TOe7bxWW1ubw95/SK6+9jc59Igjs92EbfP0M/94xdqPOPwDeeiRR3PJdy/Ljttvl2JVMfPmzc+1V/0i99x7Xy7+zvcyerPNMuf558vj1JTDmpM+fWqqqqrTp0/vNDY1JUlqaryUgkp2/vnn/9tr5557bufXH//4xzu/HjRoUC688MLO41122SW77LLLau1PPvnkzq979uyZ00477Y2W22n7Cdustb4AAACA9Y93LQFgA3TXX+9Z5Xi3t7/tNQXAHzj0fZny5FO5/Y47c/kVP059fV3GbrF55zLRK6uqqso5Z5+VC799aebPm7/KtS02H5PPnvrp/Oqqa/KzX/wqVVVVGTlieDbffEySZP9990lra1t+9JOf5+577k11dVU2HzMmmy6fNff5z52Wvn375IYbb85tt/85PXv2yHYTtkmfl1ne+qAD9kuSXP7DH+Xev92fbvS8cAAAACAASURBVLW1GTdubJYtW5Zlzc2ZN29BHnv8D6mvr88e79gtpy6fldza1pZ777s/y5qbM3TI4Jz8yU9k1ErLtwIAAAAArAsKo8dtU+rqIthwPXjfG1/mDmB9VCqV0tHRkaampgwZ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",
|
438 |
+
"mime_type": "image/png"
|
439 |
+
}
|
440 |
+
],
|
441 |
+
"match": {
|
442 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/common.js:35"
|
443 |
+
}
|
444 |
+
}
|
445 |
+
],
|
446 |
+
"tags": [
|
447 |
+
{
|
448 |
+
"name": "@flexible-checkout-fields",
|
449 |
+
"line": 1
|
450 |
+
}
|
451 |
+
],
|
452 |
+
"type": "scenario"
|
453 |
+
}
|
454 |
+
],
|
455 |
+
"id": "tracker-message-flexible-checkout-fields-tests",
|
456 |
+
"keyword": "Feature",
|
457 |
+
"line": 2,
|
458 |
+
"name": "Tracker message Flexible Checkout Fields tests",
|
459 |
+
"tags": [
|
460 |
+
{
|
461 |
+
"name": "@flexible-checkout-fields",
|
462 |
+
"line": 1
|
463 |
+
}
|
464 |
+
],
|
465 |
+
"uri": "/tmp/tests/test-acceptance/features/tests_scenario/flexible-checkout-fields/trackerMessageIsVisibleWhenActivatePluginFlexibleCheckoutFieldsTests.feature"
|
466 |
+
}
|
467 |
+
]
|
flexible-checkout-fields.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
Plugin Name: Flexible Checkout Fields
|
4 |
Plugin URI: https://www.wpdesk.net/products/flexible-checkout-fields-pro-woocommerce/
|
5 |
Description: Manage your WooCommerce checkout fields. Change order, labels, placeholders and add new fields.
|
6 |
-
Version: 1.6.
|
7 |
Author: WP Desk
|
8 |
Author URI: https://www.wpdesk.net/
|
9 |
Text Domain: flexible-checkout-fields
|
@@ -33,7 +33,7 @@
|
|
33 |
|
34 |
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
|
35 |
|
36 |
-
$plugin_version = '1.6.
|
37 |
define( 'FLEXIBLE_CHECKOUT_FIELDS_VERSION', $plugin_version );
|
38 |
|
39 |
|
@@ -64,9 +64,11 @@
|
|
64 |
|
65 |
require_once( 'classes/tracker.php' );
|
66 |
|
|
|
|
|
67 |
class Flexible_Checkout_Fields_Plugin extends WPDesk_Plugin_1_8 {
|
68 |
|
69 |
-
protected $script_version = '1.6.
|
70 |
|
71 |
protected $fields = array();
|
72 |
|
@@ -974,10 +976,19 @@
|
|
974 |
|
975 |
add_action( 'plugins_loaded', 'flexible_chekout_fields_plugins_loaded', 9 );
|
976 |
function flexible_chekout_fields_plugins_loaded() {
|
977 |
-
if ( !
|
978 |
-
|
979 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
980 |
}
|
|
|
|
|
|
|
981 |
}
|
982 |
|
983 |
function flexible_checkout_fields() {
|
3 |
Plugin Name: Flexible Checkout Fields
|
4 |
Plugin URI: https://www.wpdesk.net/products/flexible-checkout-fields-pro-woocommerce/
|
5 |
Description: Manage your WooCommerce checkout fields. Change order, labels, placeholders and add new fields.
|
6 |
+
Version: 1.6.6
|
7 |
Author: WP Desk
|
8 |
Author URI: https://www.wpdesk.net/
|
9 |
Text Domain: flexible-checkout-fields
|
33 |
|
34 |
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
|
35 |
|
36 |
+
$plugin_version = '1.6.6';
|
37 |
define( 'FLEXIBLE_CHECKOUT_FIELDS_VERSION', $plugin_version );
|
38 |
|
39 |
|
64 |
|
65 |
require_once( 'classes/tracker.php' );
|
66 |
|
67 |
+
require_once( __DIR__ . '/vendor/autoload.php' );
|
68 |
+
|
69 |
class Flexible_Checkout_Fields_Plugin extends WPDesk_Plugin_1_8 {
|
70 |
|
71 |
+
protected $script_version = '1.6.6';
|
72 |
|
73 |
protected $fields = array();
|
74 |
|
976 |
|
977 |
add_action( 'plugins_loaded', 'flexible_chekout_fields_plugins_loaded', 9 );
|
978 |
function flexible_chekout_fields_plugins_loaded() {
|
979 |
+
if ( ! function_exists( 'should_enable_wpdesk_tracker' ) ) {
|
980 |
+
function should_enable_wpdesk_tracker() {
|
981 |
+
$tracker_enabled = true;
|
982 |
+
if ( ! empty( $_SERVER['SERVER_ADDR'] ) && $_SERVER['SERVER_ADDR'] === '127.0.0.1' ) {
|
983 |
+
$tracker_enabled = false;
|
984 |
+
}
|
985 |
+
|
986 |
+
return apply_filters( 'wpdesk_tracker_enabled', $tracker_enabled );
|
987 |
+
}
|
988 |
}
|
989 |
+
|
990 |
+
$tracker_factory = new WPDesk_Tracker_Factory();
|
991 |
+
$tracker_factory->create_tracker( basename( dirname( __FILE__ ) ) );
|
992 |
}
|
993 |
|
994 |
function flexible_checkout_fields() {
|
inc/wpdesk-tracker/class-wpdesk-tracker-factory.php
ADDED
@@ -0,0 +1,91 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Factory' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Can create and build tracker instance.
|
20 |
+
*
|
21 |
+
* Class WPDesk_Tracker_Factory
|
22 |
+
*/
|
23 |
+
class WPDesk_Tracker_Factory {
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Static tracker instance, single for application.
|
27 |
+
*
|
28 |
+
* @var WPDesk_Tracker
|
29 |
+
*/
|
30 |
+
private static $tracker;
|
31 |
+
|
32 |
+
/**
|
33 |
+
* Builds tracker instance.
|
34 |
+
*
|
35 |
+
* @param string $basename Plugin basename.
|
36 |
+
*
|
37 |
+
* @return WPDesk_Tracker built tracker.
|
38 |
+
*/
|
39 |
+
private function build_tracker( $basename ) {
|
40 |
+
$sender = new WPDesk_Tracker_Sender_Wordpress_To_WPDesk();
|
41 |
+
$sender = new WPDesk_Tracker_Sender_Logged( $sender );
|
42 |
+
|
43 |
+
$tracker = new WPDesk_Tracker(
|
44 |
+
$basename,
|
45 |
+
$sender
|
46 |
+
);
|
47 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_Gateways() );
|
48 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_Identification() );
|
49 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_Identification_Gdpr() );
|
50 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_Jetpack() );
|
51 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_License_Emails() );
|
52 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_Orders() );
|
53 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_Orders_Country() );
|
54 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_Orders_Month() );
|
55 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_Plugins() );
|
56 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_Products() );
|
57 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_Products_Variations() );
|
58 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_Server() );
|
59 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_Settings() );
|
60 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_Shipping_Classes() );
|
61 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_Shipping_Methods() );
|
62 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_Shipping_Methods_Zones() );
|
63 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_Templates() );
|
64 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_Theme() );
|
65 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_User_Agent() );
|
66 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_Users() );
|
67 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_Wordpress() );
|
68 |
+
|
69 |
+
$tracker->init();
|
70 |
+
|
71 |
+
return $tracker;
|
72 |
+
}
|
73 |
+
|
74 |
+
/**
|
75 |
+
* Creates tracker instance.
|
76 |
+
*
|
77 |
+
* @param string $basename Plugin basename.
|
78 |
+
*
|
79 |
+
* @return WPDesk_Tracker created tracker.
|
80 |
+
*/
|
81 |
+
public function create_tracker( $basename ) {
|
82 |
+
if ( empty( self::$tracker ) ) {
|
83 |
+
self::$tracker = $this->build_tracker( $basename );
|
84 |
+
}
|
85 |
+
|
86 |
+
return self::$tracker;
|
87 |
+
}
|
88 |
+
}
|
89 |
+
|
90 |
+
}
|
91 |
+
|
inc/wpdesk-tracker/class-wpdesk-tracker.php
CHANGED
@@ -2,86 +2,108 @@
|
|
2 |
/**
|
3 |
* WP Desk Tracker
|
4 |
*
|
5 |
-
* @class
|
6 |
-
* @version
|
7 |
-
* @package
|
8 |
-
* @category
|
9 |
-
* @author
|
10 |
*/
|
11 |
|
12 |
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
-
|
14 |
}
|
15 |
|
16 |
-
if ( !class_exists( 'WPDesk_Tracker' ) ) {
|
17 |
|
18 |
class WPDesk_Tracker {
|
19 |
|
20 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21 |
|
22 |
-
|
|
|
|
|
|
|
23 |
|
24 |
-
|
|
|
|
|
|
|
25 |
|
26 |
-
|
|
|
|
|
|
|
27 |
|
28 |
-
public
|
|
|
|
|
|
|
29 |
|
30 |
/**
|
31 |
-
*
|
32 |
-
*
|
|
|
33 |
*/
|
34 |
-
|
35 |
-
|
|
|
36 |
|
37 |
/**
|
38 |
* Hook into cron event.
|
39 |
*/
|
40 |
-
public
|
41 |
-
|
42 |
-
add_action( '
|
43 |
-
add_action( '
|
44 |
-
add_action( '
|
45 |
-
add_action( '
|
46 |
-
add_action( '
|
47 |
-
add_action( '
|
48 |
-
add_action( '
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
add_action( '
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
add_filter( '
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
|
|
|
|
|
|
|
|
68 |
|
69 |
global $pagenow;
|
70 |
if ( 'plugins.php' === $pagenow ) {
|
71 |
-
add_action( 'admin_footer', array(
|
72 |
}
|
73 |
-
|
74 |
}
|
75 |
|
76 |
-
public
|
77 |
-
$
|
78 |
-
if ( apply_filters( 'wpdesk_tracker_use_testdata', false ) ) {
|
79 |
-
$api_url = self::$test_api_url;
|
80 |
-
}
|
81 |
-
return $api_url;
|
82 |
}
|
83 |
|
84 |
-
|
|
|
85 |
if ( apply_filters( 'wpdesk_tracker_use_testdata', false ) && apply_filters( 'wpdesk_tracker_show_testdata', false ) ) {
|
86 |
include( 'views/tracker-styles.php' );
|
87 |
}
|
@@ -90,7 +112,7 @@ if ( !class_exists( 'WPDesk_Tracker' ) ) {
|
|
90 |
/**
|
91 |
* @param WP_Admin_Bar $wp_admin_bar
|
92 |
*/
|
93 |
-
public
|
94 |
if ( apply_filters( 'wpdesk_tracker_use_testdata', false ) && apply_filters( 'wpdesk_tracker_show_testdata', false ) ) {
|
95 |
$args = array(
|
96 |
'id' => 'my_page',
|
@@ -102,17 +124,17 @@ if ( !class_exists( 'WPDesk_Tracker' ) ) {
|
|
102 |
}
|
103 |
|
104 |
|
105 |
-
public
|
106 |
$options = get_option( 'wpdesk_helper_options' );
|
107 |
-
if ( !is_array( $options ) ) {
|
108 |
$options = array();
|
109 |
}
|
110 |
if ( empty( $options['wpdesk_tracker_agree'] ) ) {
|
111 |
$options['wpdesk_tracker_agree'] = '0';
|
112 |
}
|
113 |
$wpdesk_tracker_agree = $options['wpdesk_tracker_agree'];
|
114 |
-
$wp_next_scheduled
|
115 |
-
if ( $wpdesk_tracker_agree == '1' &&
|
116 |
wp_schedule_event( time(), 'daily', 'wpdesk_tracker_send_event' );
|
117 |
}
|
118 |
if ( $wpdesk_tracker_agree == '0' && $wp_next_scheduled ) {
|
@@ -120,12 +142,12 @@ if ( !class_exists( 'WPDesk_Tracker' ) ) {
|
|
120 |
}
|
121 |
}
|
122 |
|
123 |
-
public
|
124 |
-
$wpdesk_translation = load_plugin_textdomain( 'wpdesk-tracker',
|
125 |
}
|
126 |
|
127 |
-
public
|
128 |
-
if ( !is_network_admin() &&
|
129 |
$plugins = array(
|
130 |
'wpdesk-helper/wpdesk-helper.php' => 'wpdesk-helper/wpdesk-helper.php'
|
131 |
);
|
@@ -134,22 +156,22 @@ if ( !class_exists( 'WPDesk_Tracker' ) ) {
|
|
134 |
}
|
135 |
}
|
136 |
|
137 |
-
public
|
138 |
$screen = get_current_screen();
|
139 |
if ( $screen->id == 'admin_page_wpdesk_tracker' || $screen->id == 'admin_page_wpdesk_tracker_deactivate' ) {
|
140 |
-
wp_register_style( 'wpdesk-helper-tracker', plugin_dir_url( __FILE__ ) . 'assets/css/tracker.css', array(),
|
141 |
wp_enqueue_style( 'wpdesk-helper-tracker' );
|
142 |
}
|
143 |
}
|
144 |
|
145 |
-
public
|
146 |
add_submenu_page(
|
147 |
null,
|
148 |
'WP Desk Tracker',
|
149 |
'WP Desk Tracker',
|
150 |
'manage_options',
|
151 |
'wpdesk_tracker',
|
152 |
-
array(
|
153 |
);
|
154 |
add_submenu_page(
|
155 |
null,
|
@@ -157,18 +179,18 @@ if ( !class_exists( 'WPDesk_Tracker' ) ) {
|
|
157 |
'Deactivate plugin',
|
158 |
'manage_options',
|
159 |
'wpdesk_tracker_deactivate',
|
160 |
-
array(
|
161 |
);
|
162 |
}
|
163 |
|
164 |
-
public
|
165 |
-
|
166 |
}
|
167 |
|
168 |
|
169 |
-
public
|
170 |
$option = get_option( 'wpdesk_helper_options' );
|
171 |
-
if (
|
172 |
add_option( 'wpdesk_helper_options', array() );
|
173 |
}
|
174 |
$type = '';
|
@@ -176,8 +198,8 @@ if ( !class_exists( 'WPDesk_Tracker' ) ) {
|
|
176 |
$type = $_REQUEST['type'];
|
177 |
}
|
178 |
if ( $type == 'allow' ) {
|
179 |
-
$options = get_option('wpdesk_helper_options', array() );
|
180 |
-
if ( !is_array( $options ) ) {
|
181 |
$options = array();
|
182 |
}
|
183 |
update_option( 'wpdesk_helper_options', $options );
|
@@ -186,115 +208,90 @@ if ( !class_exists( 'WPDesk_Tracker' ) ) {
|
|
186 |
update_option( 'wpdesk_helper_options', $options );
|
187 |
}
|
188 |
if ( $type == 'dismiss' ) {
|
189 |
-
$options = get_option('wpdesk_helper_options', array() );
|
190 |
-
if ( !is_array( $options ) ) {
|
191 |
$options = array();
|
192 |
}
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
self::$request_coupon = true;
|
200 |
-
$options = get_option('wpdesk_helper_options', array() );
|
201 |
-
if ( !is_array( $options ) ) {
|
202 |
-
$options = array();
|
203 |
-
}
|
204 |
-
update_option( 'wpdesk_helper_options', $options );
|
205 |
-
delete_option( 'wpdesk_tracker_notice' );
|
206 |
-
$options['wpdesk_tracker_agree'] = '1';
|
207 |
-
update_option( 'wpdesk_helper_options', $options );
|
208 |
-
}
|
209 |
-
if ( $type == 'dismiss_coupon' ) {
|
210 |
-
self::$dismiss_coupon = true;
|
211 |
-
$options = get_option('wpdesk_helper_options', array() );
|
212 |
-
if ( !is_array( $options ) ) {
|
213 |
-
$options = array();
|
214 |
}
|
215 |
-
remove_action( 'update_option_wpdesk_helper_options', array( __CLASS__, 'update_option_wpdesk_helper_options' ), 10, 3 );
|
216 |
-
unset( $options['wpdesk_tracker_agree'] );
|
217 |
-
update_option( 'wpdesk_helper_options', $options );
|
218 |
-
add_action( 'update_option_wpdesk_helper_options', array( __CLASS__, 'update_option_wpdesk_helper_options' ), 10, 3 );
|
219 |
-
delete_option( 'wpdesk_tracker_notice' );
|
220 |
-
$options['wpdesk_tracker_agree'] = '0';
|
221 |
-
update_option( 'wpdesk_helper_options', $options );
|
222 |
-
update_option( 'wpdesk_tracker_notice', 'dismiss_all' );
|
223 |
}
|
224 |
}
|
225 |
|
226 |
-
public
|
227 |
if ( empty( $old_value ) ) {
|
228 |
$old_value = array( 'wpdesk_tracker_agree' => '-1' );
|
229 |
}
|
230 |
-
if ( !isset( $old_value['wpdesk_tracker_agree'] ) ) {
|
231 |
$old_value['wpdesk_tracker_agree'] = '-1';
|
232 |
}
|
233 |
if ( empty( $value ) ) {
|
234 |
$value = array( 'wpdesk_tracker_agree' => '-1' );
|
235 |
}
|
236 |
-
if ( !isset( $value['wpdesk_tracker_agree'] ) ) {
|
237 |
$value['wpdesk_tracker_agree'] = '-1';
|
238 |
}
|
239 |
if ( $old_value['wpdesk_tracker_agree'] != '1' ) {
|
240 |
if ( $value['wpdesk_tracker_agree'] == '1' ) {
|
241 |
-
|
242 |
}
|
243 |
}
|
244 |
if ( $old_value['wpdesk_tracker_agree'] != '0' ) {
|
245 |
if ( $value['wpdesk_tracker_agree'] == '0' ) {
|
246 |
-
|
247 |
update_option( 'wpdesk_tracker_notice', 'dismiss_all' );
|
248 |
}
|
249 |
}
|
250 |
}
|
251 |
|
252 |
-
public
|
253 |
if ( apply_filters( 'wpdesk_tracker_do_not_ask', false ) ) {
|
254 |
-
if ( !is_array( $value ) ) {
|
255 |
$value = array();
|
256 |
}
|
257 |
$value['wpdesk_tracker_agree'] = 1;
|
258 |
}
|
|
|
259 |
return $value;
|
260 |
}
|
261 |
|
262 |
-
public
|
263 |
if ( apply_filters( 'wpdesk_tracker_do_not_ask', false ) ) {
|
264 |
-
$default
|
265 |
$default['wpdesk_tracker_agree'] = 1;
|
266 |
}
|
|
|
267 |
return $default;
|
268 |
}
|
269 |
|
270 |
-
public
|
271 |
-
if ( !
|
272 |
return;
|
273 |
}
|
274 |
-
$screen
|
275 |
-
$options = get_option('wpdesk_helper_options', array() );
|
276 |
-
if ( !is_array( $options ) ) {
|
277 |
$options = array();
|
278 |
}
|
279 |
if ( get_option( 'wpdesk_tracker_notice', '0' ) != 'dismiss_all' ) {
|
280 |
if ( empty( $options['wpdesk_tracker_agree'] ) || $options['wpdesk_tracker_agree'] == '0' ) {
|
281 |
-
$coupon_avaliable = false;
|
282 |
-
if ( get_option( 'wpdesk_tracker_notice', '0' ) == '1' ) {
|
283 |
-
$coupon_avaliable = true;
|
284 |
-
}
|
285 |
if ( in_array( $screen->id, apply_filters( 'wpdesk_tracker_notice_screens', array() ) ) ) {
|
286 |
-
$user
|
287 |
-
$username
|
288 |
$terms_url = get_locale() == 'pl_PL' ? 'https://www.wpdesk.pl/dane-uzytkowania/' : 'https://www.wpdesk.net/usage-tracking/';
|
289 |
-
$shop_url
|
290 |
include( 'views/tracker-notice.php' );
|
291 |
}
|
292 |
}
|
293 |
}
|
294 |
if ( $screen->id == 'plugins' ) {
|
295 |
if ( isset( $_GET['wpdesk_tracker_opt_out'] ) ) {
|
296 |
-
$options = get_option('wpdesk_helper_options', array() );
|
297 |
-
if ( !is_array( $options ) ) {
|
298 |
$options = array();
|
299 |
}
|
300 |
delete_option( 'wpdesk_tracker_notice' );
|
@@ -305,180 +302,77 @@ if ( !class_exists( 'WPDesk_Tracker' ) ) {
|
|
305 |
}
|
306 |
}
|
307 |
|
308 |
-
public
|
309 |
-
$user
|
310 |
-
$username
|
311 |
$allow_url = admin_url( 'admin.php?page=wpdesk_tracker' );
|
312 |
$allow_url = add_query_arg( 'plugin', $_GET['plugin'], $allow_url );
|
313 |
-
$skip_url
|
314 |
$allow_url = add_query_arg( 'allow', '1', $allow_url );
|
315 |
-
$skip_url
|
316 |
$terms_url = get_locale() == 'pl_PL' ? 'https://www.wpdesk.pl/dane-uzytkowania/' : 'https://www.wpdesk.net/usage-tracking/';
|
317 |
include( 'views/tracker-connect.php' );
|
318 |
}
|
319 |
|
320 |
-
public
|
321 |
-
$user
|
322 |
-
$username
|
323 |
-
$plugin
|
324 |
$active_plugins = get_plugins();
|
325 |
-
$plugin_name
|
326 |
include( 'views/tracker-deactivate.php' );
|
327 |
}
|
328 |
|
329 |
-
public
|
330 |
if ( isset( $_GET['page'] ) && $_GET['page'] == 'wpdesk_tracker' ) {
|
331 |
if ( isset( $_GET['plugin'] ) && isset( $_GET['allow'] ) ) {
|
332 |
-
$options = get_option('wpdesk_helper_options', array() );
|
333 |
-
if ( !is_array( $options ) ) {
|
334 |
$options = array();
|
335 |
}
|
336 |
if ( $_GET['allow'] == '0' ) {
|
337 |
-
remove_action( 'update_option_wpdesk_helper_options', array(
|
|
|
|
|
|
|
338 |
unset( $options['wpdesk_tracker_agree'] );
|
339 |
update_option( 'wpdesk_helper_options', $options );
|
340 |
-
add_action( 'update_option_wpdesk_helper_options', array(
|
|
|
|
|
|
|
341 |
$options['wpdesk_tracker_agree'] = '0';
|
342 |
update_option( 'wpdesk_helper_options', $options );
|
343 |
update_option( 'wpdesk_tracker_notice', '1' );
|
344 |
-
}
|
345 |
-
|
346 |
-
|
|
|
|
|
347 |
unset( $options['wpdesk_tracker_agree'] );
|
348 |
update_option( 'wpdesk_helper_options', $options );
|
349 |
-
add_action( 'update_option_wpdesk_helper_options', array(
|
|
|
|
|
|
|
350 |
delete_option( 'wpdesk_tracker_notice' );
|
351 |
update_option( 'wpdesk_tracker_agree', '1' );
|
352 |
$options['wpdesk_tracker_agree'] = '1';
|
353 |
update_option( 'wpdesk_helper_options', $options );
|
354 |
}
|
355 |
-
wp_redirect(admin_url( 'plugins.php' ) );
|
356 |
exit();
|
357 |
}
|
358 |
}
|
359 |
}
|
360 |
|
361 |
-
public
|
362 |
-
|
363 |
-
$license_emails_email = array();
|
364 |
-
$license_emails = array();
|
365 |
-
if ( ! isset( $wpdesk_helper_plugins ) ) $wpdesk_helper_plugins = array();
|
366 |
-
foreach ( $wpdesk_helper_plugins as $key => $plugin ) {
|
367 |
-
if ( isset( $plugin['api_manager'] ) ) {
|
368 |
-
$api_manager = $plugin['api_manager'];
|
369 |
-
if ( isset( $api_manager->options[$api_manager->activation_email] ) ) {
|
370 |
-
$license_emails_email[ $api_manager->options[ $api_manager->activation_email ] ] = $api_manager->options[ $api_manager->activation_email ];
|
371 |
-
}
|
372 |
-
}
|
373 |
-
}
|
374 |
-
foreach ( $license_emails_email as $email ) {
|
375 |
-
$license_emails[] = $email;
|
376 |
-
}
|
377 |
-
$data['license_emails'] = $license_emails;
|
378 |
-
return $data;
|
379 |
-
}
|
380 |
-
|
381 |
-
public static function wpdesk_tracker_data_shipping_country_per_order( $data ) {
|
382 |
-
global $wpdb;
|
383 |
-
$query = $wpdb->get_results("
|
384 |
-
SELECT m.meta_value AS shipping_country, p.post_status AS post_status , COUNT(p.ID) AS orders
|
385 |
-
FROM {$wpdb->postmeta} m, {$wpdb->posts} p
|
386 |
-
WHERE p.ID = m.post_id
|
387 |
-
AND m.meta_key = '_shipping_country'
|
388 |
-
GROUP BY shipping_country, post_status ORDER BY orders DESC"
|
389 |
-
);
|
390 |
-
$data['shipping_country_per_order'] = array();
|
391 |
-
if ( $query ) {
|
392 |
-
foreach ( $query as $row ) {
|
393 |
-
if ( !isset( $data['shipping_country_per_order'][$row->shipping_country] ) ) {
|
394 |
-
$data['shipping_country_per_order'][$row->shipping_country] = array();
|
395 |
-
}
|
396 |
-
$data['shipping_country_per_order'][$row->shipping_country][$row->post_status] = $row->orders;
|
397 |
-
}
|
398 |
-
}
|
399 |
-
return $data;
|
400 |
-
}
|
401 |
-
|
402 |
-
public static function wpdesk_tracker_data_shipping_classes( $data ) {
|
403 |
-
$data['number_of_shipping_classes'] = 0;
|
404 |
-
$shipping_classes = WC()->shipping()->get_shipping_classes();
|
405 |
-
if ( is_array( $shipping_classes ) ) {
|
406 |
-
$data['number_of_shipping_classes'] = count( $shipping_classes );
|
407 |
-
}
|
408 |
-
return $data;
|
409 |
-
}
|
410 |
-
|
411 |
-
public static function wpdesk_tracker_data_product_variations( $data ) {
|
412 |
-
$data['number_of_variations'] = 0;
|
413 |
-
$number_of_variations = wp_count_posts( 'product_variation' );
|
414 |
-
$data['number_of_variations'] = $number_of_variations;
|
415 |
-
return $data;
|
416 |
-
}
|
417 |
-
|
418 |
-
public static function wpdesk_tracker_data_orders_per_month( $data ) {
|
419 |
-
global $wpdb;
|
420 |
-
$query = $wpdb->get_results("
|
421 |
-
SELECT min(post_date) min, max(post_date) max, TIMESTAMPDIFF(MONTH, min(post_date), max(post_date) )+1 months
|
422 |
-
FROM {$wpdb->posts} p
|
423 |
-
WHERE p.post_type = 'shop_order'
|
424 |
-
AND p.post_status = 'wc-completed'
|
425 |
-
"
|
426 |
-
);
|
427 |
-
$data['orders_per_month'] = array();
|
428 |
-
if ( $query ) {
|
429 |
-
foreach ( $query as $row ) {
|
430 |
-
$data['orders_per_month']['first'] = $row->min;
|
431 |
-
$data['orders_per_month']['last'] = $row->max;
|
432 |
-
$data['orders_per_month']['months'] = $row->months;
|
433 |
-
if ( $row->months != 0 ) {
|
434 |
-
if ( isset( $data['orders'] ) && isset( $data['orders']['wc-completed'] ) ) {
|
435 |
-
$data['orders_per_month']['per_month'] = floatval($data['orders']['wc-completed'])/floatval($row->months);
|
436 |
-
}
|
437 |
-
}
|
438 |
-
}
|
439 |
-
}
|
440 |
-
return $data;
|
441 |
-
}
|
442 |
|
443 |
-
public static function wpdesk_tracker_data_shipping_methods_in_zones( $data ) {
|
444 |
-
if ( class_exists( 'WC_Shipping_Zones' )) {
|
445 |
-
$other_zones = WC_Shipping_Zones::get_zones();
|
446 |
-
$zones = array();
|
447 |
-
foreach ( $other_zones as $zone ) {
|
448 |
-
$zones[] = WC_Shipping_Zones::get_zone_by( 'zone_id', $zone['zone_id'] );
|
449 |
-
}
|
450 |
-
$zones[] = WC_Shipping_Zones::get_zone_by();
|
451 |
-
$data['shipping_methods_by_title'] = array();
|
452 |
-
$data['shipping_zones_by_name'] = array();
|
453 |
-
foreach ( $zones as $zone ) {
|
454 |
-
if ( empty( $data['shipping_zones_by_name'][$zone->get_zone_name()] ) ) {
|
455 |
-
$data['shipping_zones_by_name'][$zone->get_zone_name()] = 1;
|
456 |
-
}
|
457 |
-
else {
|
458 |
-
$data['shipping_zones_by_name'][$zone->get_zone_name()]++;
|
459 |
-
}
|
460 |
-
foreach ( $zone->get_shipping_methods() as $shipping_method ) {
|
461 |
-
if ( empty( $data['shipping_methods_by_title'][$shipping_method->method_title] ) ) {
|
462 |
-
$data['shipping_methods_by_title'][$shipping_method->method_title] = 1;
|
463 |
-
}
|
464 |
-
else {
|
465 |
-
$data['shipping_methods_by_title'][$shipping_method->method_title]++;
|
466 |
-
}
|
467 |
-
}
|
468 |
-
}
|
469 |
-
}
|
470 |
return $data;
|
471 |
}
|
472 |
|
473 |
-
public
|
474 |
-
|
475 |
-
$data['message_version'] = self::$message_version;
|
476 |
-
|
477 |
-
return $data;
|
478 |
-
}
|
479 |
-
|
480 |
-
public static function send_deactivation_data() {
|
481 |
-
|
482 |
$params = array();
|
483 |
|
484 |
$params['click_action'] = 'plugin_deactivation';
|
@@ -489,31 +383,20 @@ if ( !class_exists( 'WPDesk_Tracker' ) ) {
|
|
489 |
|
490 |
$params['reason'] = $_REQUEST['reason'];
|
491 |
|
492 |
-
if ( !empty( $_REQUEST['additional_info'] ) ) {
|
493 |
$params['additional_info'] = $_REQUEST['additional_info'];
|
494 |
}
|
495 |
|
496 |
-
$
|
497 |
-
'method' => 'POST',
|
498 |
-
'timeout' => 5,
|
499 |
-
'redirection' => 5,
|
500 |
-
'httpversion' => '1.0',
|
501 |
-
'blocking' => false,
|
502 |
-
'headers' => array( 'user-agent' => 'WPDeskTracker' ),
|
503 |
-
'body' => json_encode( $params ),
|
504 |
-
'cookies' => array(),
|
505 |
-
)
|
506 |
-
);
|
507 |
}
|
508 |
|
509 |
-
|
510 |
/**
|
511 |
* Decide whether to send tracking data or not.
|
512 |
*
|
513 |
* @param boolean $override
|
514 |
*/
|
515 |
-
public
|
516 |
-
$options = get_option('wpdesk_helper_options', array() );
|
517 |
if ( empty( $options ) ) {
|
518 |
$options = array();
|
519 |
}
|
@@ -523,7 +406,7 @@ if ( !class_exists( 'WPDesk_Tracker' ) ) {
|
|
523 |
if ( empty( $click_action ) && $options['wpdesk_tracker_agree'] == '0' ) {
|
524 |
return;
|
525 |
}
|
526 |
-
if ( !
|
527 |
return;
|
528 |
}
|
529 |
// Dont trigger this on AJAX Requests
|
@@ -532,13 +415,13 @@ if ( !class_exists( 'WPDesk_Tracker' ) ) {
|
|
532 |
}
|
533 |
if ( ! apply_filters( 'wpdesk_tracker_send_override', $override ) ) {
|
534 |
// Send a maximum of once per week by default.
|
535 |
-
$last_send =
|
536 |
if ( $last_send && $last_send > apply_filters( 'wpdesk_tracker_last_send_interval', strtotime( '-1 week' ) ) ) {
|
537 |
return;
|
538 |
}
|
539 |
} else {
|
540 |
// Make sure there is at least a 1 hour delay between override sends, we dont want duplicate calls due to double clicking links.
|
541 |
-
$last_send =
|
542 |
if ( empty( $click_action ) && $last_send && $last_send > strtotime( '-1 hours' ) ) {
|
543 |
return;
|
544 |
}
|
@@ -548,398 +431,82 @@ if ( !class_exists( 'WPDesk_Tracker' ) ) {
|
|
548 |
update_option( 'wpdesk_tracker_last_send', time() );
|
549 |
|
550 |
if ( empty( $click_action ) || $click_action == 'agree' ) {
|
551 |
-
$params =
|
552 |
|
553 |
if ( isset( $params['active_plugins'] ) ) {
|
554 |
-
foreach ( $params['active_plugins'] as $plugin
|
555 |
-
$option_name
|
556 |
$activation_date = get_option( $option_name, '' );
|
557 |
if ( $activation_date != '' ) {
|
558 |
-
$params['active_plugins'][$plugin]['activation_date'] = $activation_date;
|
559 |
}
|
560 |
}
|
561 |
}
|
562 |
|
563 |
-
if ( !empty( $click_action ) ) {
|
564 |
$params['click_action'] = 'agree';
|
565 |
}
|
566 |
-
|
567 |
-
|
568 |
-
$params['click_action'] = 'agree_coupon';
|
569 |
-
}
|
570 |
-
}
|
571 |
-
else {
|
572 |
-
$params = array( 'click_action' => 'no' );
|
573 |
-
if ( self::$dismiss_coupon ) {
|
574 |
-
$params = array(
|
575 |
-
'click_action' => 'no_coupon',
|
576 |
-
);
|
577 |
-
$params['message_version'] = self::$message_version;
|
578 |
-
}
|
579 |
$params['url'] = home_url();
|
580 |
}
|
581 |
|
582 |
$params['localhost'] = 'no';
|
583 |
-
if ( !empty( $_SERVER['SERVER_ADDR'] ) && $_SERVER['SERVER_ADDR'] == '127.0.0.1' ) {
|
584 |
$params['localhost'] = 'yes';
|
585 |
}
|
586 |
|
587 |
-
$
|
588 |
-
'method' => 'POST',
|
589 |
-
'timeout' => 5,
|
590 |
-
'redirection' => 5,
|
591 |
-
'httpversion' => '1.0',
|
592 |
-
'blocking' => false,
|
593 |
-
'headers' => array( 'user-agent' => 'WPDeskTracker' ),
|
594 |
-
'body' => json_encode( $params ),
|
595 |
-
'cookies' => array(),
|
596 |
-
)
|
597 |
-
);
|
598 |
-
|
599 |
}
|
600 |
|
601 |
-
/**
|
602 |
-
* Get the last time tracking data was sent.
|
603 |
-
* @return int|bool
|
604 |
-
*/
|
605 |
-
private static function get_last_send_time() {
|
606 |
-
return apply_filters( 'wpdesk_tracker_last_send_time', get_option( 'wpdesk_tracker_last_send', false ) );
|
607 |
-
}
|
608 |
|
609 |
/**
|
610 |
-
*
|
611 |
-
*
|
612 |
-
|
613 |
-
|
614 |
-
|
615 |
-
|
616 |
-
// General site info
|
617 |
-
$data['url'] = home_url();
|
618 |
-
$data['email'] = apply_filters( 'wpdesk_tracker_admin_email', get_option( 'admin_email' ) );
|
619 |
-
$data['theme'] = self::get_theme_info();
|
620 |
-
|
621 |
-
// WordPress Info
|
622 |
-
$data['wp'] = self::get_wordpress_info();
|
623 |
-
|
624 |
-
// Server Info
|
625 |
-
$data['server'] = self::get_server_info();
|
626 |
-
|
627 |
-
// Plugin info
|
628 |
-
$all_plugins = self::get_all_plugins();
|
629 |
-
$data['active_plugins'] = $all_plugins['active_plugins'];
|
630 |
-
$data['inactive_plugins'] = $all_plugins['inactive_plugins'];
|
631 |
-
|
632 |
-
// Jetpack & WooCommerce Connect
|
633 |
-
$data['jetpack_version'] = defined( 'JETPACK__VERSION' ) ? JETPACK__VERSION : 'none';
|
634 |
-
$data['jetpack_connected'] = ( class_exists( 'Jetpack' ) && is_callable( 'Jetpack::is_active' ) && Jetpack::is_active() ) ? 'yes' : 'no';
|
635 |
-
$data['jetpack_is_staging'] = ( class_exists( 'Jetpack' ) && is_callable( 'Jetpack::is_staging_site' ) && Jetpack::is_staging_site() ) ? 'yes' : 'no';
|
636 |
-
$data['connect_installed'] = class_exists( 'WC_Connect_Loader' ) ? 'yes' : 'no';
|
637 |
-
$data['connect_active'] = ( class_exists( 'WC_Connect_Loader' ) && wp_next_scheduled( 'wc_connect_fetch_service_schemas' ) ) ? 'yes' : 'no';
|
638 |
-
|
639 |
-
// Store count info
|
640 |
-
$data['users'] = self::get_user_counts();
|
641 |
-
$data['products'] = self::get_product_counts();
|
642 |
-
$data['orders'] = self::get_order_counts();
|
643 |
-
|
644 |
-
// Payment gateway info
|
645 |
-
$data['gateways'] = self::get_active_payment_gateways();
|
646 |
-
|
647 |
-
// Shipping method info
|
648 |
-
$data['shipping_methods'] = self::get_active_shipping_methods();
|
649 |
-
|
650 |
-
// Get all WooCommerce options info
|
651 |
-
$data['settings'] = self::get_all_woocommerce_options_values();
|
652 |
-
|
653 |
-
// Template overrides
|
654 |
-
$data['template_overrides'] = self::get_all_template_overrides();
|
655 |
-
|
656 |
-
// Template overrides
|
657 |
-
$data['admin_user_agents'] = self::get_admin_user_agents();
|
658 |
-
|
659 |
-
return apply_filters( 'wpdesk_tracker_data', $data );
|
660 |
-
}
|
661 |
-
|
662 |
-
/**
|
663 |
-
* Get the current theme info, theme name and version.
|
664 |
-
* @return array
|
665 |
-
*/
|
666 |
-
public static function get_theme_info() {
|
667 |
-
$theme_data = wp_get_theme();
|
668 |
-
$theme_child_theme = is_child_theme() ? 'Yes' : 'No';
|
669 |
-
$theme_wc_support = ( ! current_theme_supports( 'woocommerce' ) && ! in_array( $theme_data->template, wc_get_core_supported_themes() ) ) ? 'No' : 'Yes';
|
670 |
-
|
671 |
-
return array( 'name' => $theme_data->Name,
|
672 |
-
'version' => $theme_data->Version,
|
673 |
-
'child_theme' => $theme_child_theme,
|
674 |
-
'wc_support' => $theme_wc_support
|
675 |
-
);
|
676 |
-
}
|
677 |
-
|
678 |
-
/**
|
679 |
-
* Get WordPress related data.
|
680 |
-
* @return array
|
681 |
-
*/
|
682 |
-
private static function get_wordpress_info() {
|
683 |
-
$wp_data = array();
|
684 |
-
|
685 |
-
$memory = wc_let_to_num( WP_MEMORY_LIMIT );
|
686 |
-
|
687 |
-
if ( function_exists( 'memory_get_usage' ) ) {
|
688 |
-
$system_memory = wc_let_to_num( @ini_get( 'memory_limit' ) );
|
689 |
-
$memory = max( $memory, $system_memory );
|
690 |
-
}
|
691 |
-
|
692 |
-
$wp_data['memory_limit'] = size_format( $memory );
|
693 |
-
$wp_data['debug_mode'] = ( defined( 'WP_DEBUG' ) && WP_DEBUG ) ? 'Yes' : 'No';
|
694 |
-
$wp_data['locale'] = get_locale();
|
695 |
-
$wp_data['version'] = get_bloginfo( 'version' );
|
696 |
-
$wp_data['multisite'] = is_multisite() ? 'Yes' : 'No';
|
697 |
-
|
698 |
-
return $wp_data;
|
699 |
-
}
|
700 |
-
|
701 |
-
/**
|
702 |
-
* Get server related info.
|
703 |
-
* @return array
|
704 |
-
*/
|
705 |
-
private static function get_server_info() {
|
706 |
-
$server_data = array();
|
707 |
-
|
708 |
-
if ( isset( $_SERVER['SERVER_SOFTWARE'] ) && ! empty( $_SERVER['SERVER_SOFTWARE'] ) ) {
|
709 |
-
$server_data['software'] = $_SERVER['SERVER_SOFTWARE'];
|
710 |
-
}
|
711 |
-
|
712 |
-
if ( function_exists( 'phpversion' ) ) {
|
713 |
-
$server_data['php_version'] = phpversion();
|
714 |
-
}
|
715 |
-
|
716 |
-
if ( function_exists( 'ini_get' ) ) {
|
717 |
-
$server_data['php_post_max_size'] = size_format( wc_let_to_num( ini_get( 'post_max_size' ) ) );
|
718 |
-
$server_data['php_time_limt'] = ini_get( 'max_execution_time' );
|
719 |
-
$server_data['php_max_input_vars'] = ini_get( 'max_input_vars' );
|
720 |
-
$server_data['php_suhosin'] = extension_loaded( 'suhosin' ) ? 'Yes' : 'No';
|
721 |
-
}
|
722 |
-
|
723 |
-
global $wpdb;
|
724 |
-
$server_data['mysql_version'] = $wpdb->db_version();
|
725 |
-
|
726 |
-
$server_data['php_max_upload_size'] = size_format( wp_max_upload_size() );
|
727 |
-
$server_data['php_default_timezone'] = date_default_timezone_get();
|
728 |
-
$server_data['php_soap'] = class_exists( 'SoapClient' ) ? 'Yes' : 'No';
|
729 |
-
$server_data['php_fsockopen'] = function_exists( 'fsockopen' ) ? 'Yes' : 'No';
|
730 |
-
$server_data['php_curl'] = function_exists( 'curl_init' ) ? 'Yes' : 'No';
|
731 |
-
|
732 |
-
return $server_data;
|
733 |
-
}
|
734 |
-
|
735 |
-
/**
|
736 |
-
* Get all plugins grouped into activated or not.
|
737 |
-
* @return array
|
738 |
-
*/
|
739 |
-
private static function get_all_plugins() {
|
740 |
-
// Ensure get_plugins function is loaded
|
741 |
-
if ( ! function_exists( 'get_plugins' ) ) {
|
742 |
-
include ABSPATH . '/wp-admin/includes/plugin.php';
|
743 |
-
}
|
744 |
-
|
745 |
-
$plugins = get_plugins();
|
746 |
-
$active_plugins_keys = get_option( 'active_plugins', array() );
|
747 |
-
$active_plugins = array();
|
748 |
-
|
749 |
-
foreach ( $plugins as $k => $v ) {
|
750 |
-
// Take care of formatting the data how we want it.
|
751 |
-
$formatted = array();
|
752 |
-
$formatted['name'] = strip_tags( $v['Name'] );
|
753 |
-
if ( isset( $v['Version'] ) ) {
|
754 |
-
$formatted['version'] = strip_tags( $v['Version'] );
|
755 |
-
}
|
756 |
-
if ( isset( $v['Author'] ) ) {
|
757 |
-
$formatted['author'] = strip_tags( $v['Author'] );
|
758 |
-
}
|
759 |
-
if ( isset( $v['Network'] ) ) {
|
760 |
-
$formatted['network'] = strip_tags( $v['Network'] );
|
761 |
-
}
|
762 |
-
if ( isset( $v['PluginURI'] ) ) {
|
763 |
-
$formatted['plugin_uri'] = strip_tags( $v['PluginURI'] );
|
764 |
-
}
|
765 |
-
if ( in_array( $k, $active_plugins_keys ) ) {
|
766 |
-
// Remove active plugins from list so we can show active and inactive separately
|
767 |
-
unset( $plugins[ $k ] );
|
768 |
-
$active_plugins[ $k ] = $formatted;
|
769 |
-
} else {
|
770 |
-
$plugins[ $k ] = $formatted;
|
771 |
-
}
|
772 |
-
}
|
773 |
-
|
774 |
-
return array( 'active_plugins' => $active_plugins, 'inactive_plugins' => $plugins );
|
775 |
-
}
|
776 |
-
|
777 |
-
/**
|
778 |
-
* Get user totals based on user role.
|
779 |
-
* @return array
|
780 |
-
*/
|
781 |
-
private static function get_user_counts() {
|
782 |
-
$user_count = array();
|
783 |
-
$user_count_data = count_users();
|
784 |
-
$user_count['total'] = $user_count_data['total_users'];
|
785 |
-
|
786 |
-
// Get user count based on user role
|
787 |
-
foreach ( $user_count_data['avail_roles'] as $role => $count ) {
|
788 |
-
$user_count[ $role ] = $count;
|
789 |
-
}
|
790 |
-
|
791 |
-
return $user_count;
|
792 |
-
}
|
793 |
-
|
794 |
-
/**
|
795 |
-
* Get product totals based on product type.
|
796 |
-
* @return array
|
797 |
-
*/
|
798 |
-
private static function get_product_counts() {
|
799 |
-
$product_count = array();
|
800 |
-
$product_count_data = wp_count_posts( 'product' );
|
801 |
-
$product_count['total'] = $product_count_data->publish;
|
802 |
-
|
803 |
-
$product_statuses = get_terms( 'product_type', array( 'hide_empty' => 0 ) );
|
804 |
-
foreach ( $product_statuses as $product_status ) {
|
805 |
-
$product_count[ $product_status->name ] = $product_status->count;
|
806 |
-
}
|
807 |
-
|
808 |
-
return $product_count;
|
809 |
-
}
|
810 |
-
|
811 |
-
/**
|
812 |
-
* Get order counts based on order status.
|
813 |
-
* @return array
|
814 |
*/
|
815 |
-
private
|
816 |
-
|
817 |
-
|
818 |
-
|
819 |
-
|
820 |
-
|
821 |
}
|
822 |
-
|
823 |
-
return $order_count;
|
824 |
}
|
825 |
|
826 |
/**
|
827 |
-
* Get
|
828 |
-
* @return
|
829 |
*/
|
830 |
-
private
|
831 |
-
|
832 |
-
$gateways = WC()->payment_gateways->payment_gateways();
|
833 |
-
foreach ( $gateways as $id => $gateway ) {
|
834 |
-
if ( isset( $gateway->enabled ) && 'yes' === $gateway->enabled ) {
|
835 |
-
$active_gateways[ $id ] = array( 'title' => $gateway->title, 'supports' => $gateway->supports );
|
836 |
-
}
|
837 |
-
}
|
838 |
-
|
839 |
-
return $active_gateways;
|
840 |
}
|
841 |
|
842 |
/**
|
843 |
-
* Get a list of all active shipping methods.
|
844 |
* @return array
|
845 |
*/
|
846 |
-
private
|
847 |
-
$
|
848 |
-
|
849 |
-
|
850 |
-
|
851 |
-
$active_methods[ $id ] = array( 'title' => $shipping_method->title,
|
852 |
-
'tax_status' => $shipping_method->tax_status
|
853 |
-
);
|
854 |
}
|
855 |
}
|
856 |
|
857 |
-
return $
|
858 |
-
}
|
859 |
-
|
860 |
-
/**
|
861 |
-
* Get all options starting with woocommerce_ prefix.
|
862 |
-
* @return array
|
863 |
-
*/
|
864 |
-
private static function get_all_woocommerce_options_values() {
|
865 |
-
return array(
|
866 |
-
'version' => WC()->version,
|
867 |
-
'currency' => get_woocommerce_currency(),
|
868 |
-
'base_location' => WC()->countries->get_base_country(),
|
869 |
-
'selling_locations' => WC()->countries->get_allowed_countries(),
|
870 |
-
'api_enabled' => get_option( 'woocommerce_api_enabled' ),
|
871 |
-
'weight_unit' => get_option( 'woocommerce_weight_unit' ),
|
872 |
-
'dimension_unit' => get_option( 'woocommerce_dimension_unit' ),
|
873 |
-
'download_method' => get_option( 'woocommerce_file_download_method' ),
|
874 |
-
'download_require_login' => get_option( 'woocommerce_downloads_require_login' ),
|
875 |
-
'calc_taxes' => get_option( 'woocommerce_calc_taxes' ),
|
876 |
-
'coupons_enabled' => get_option( 'woocommerce_enable_coupons' ),
|
877 |
-
'guest_checkout' => get_option( 'woocommerce_enable_guest_checkout' ),
|
878 |
-
'secure_checkout' => get_option( 'woocommerce_force_ssl_checkout' ),
|
879 |
-
'enable_signup_and_login_from_checkout' => get_option( 'woocommerce_enable_signup_and_login_from_checkout' ),
|
880 |
-
'enable_myaccount_registration' => get_option( 'woocommerce_enable_myaccount_registration' ),
|
881 |
-
'registration_generate_username' => get_option( 'woocommerce_registration_generate_username' ),
|
882 |
-
'registration_generate_password' => get_option( 'woocommerce_registration_generate_password' ),
|
883 |
-
);
|
884 |
}
|
885 |
|
886 |
/**
|
887 |
-
*
|
888 |
* @return array
|
889 |
*/
|
890 |
-
private
|
891 |
-
$
|
892 |
-
$template_paths = apply_filters( 'woocommerce_template_overrides_scan_paths', array( 'WooCommerce' => WC()->plugin_path() . '/templates/' ) );
|
893 |
-
$scanned_files = array();
|
894 |
-
|
895 |
-
require_once( WC()->plugin_path() . '/includes/admin/class-wc-admin-status.php' );
|
896 |
-
|
897 |
-
foreach ( $template_paths as $plugin_name => $template_path ) {
|
898 |
-
$scanned_files[ $plugin_name ] = WC_Admin_Status::scan_template_files( $template_path );
|
899 |
-
}
|
900 |
-
|
901 |
-
foreach ( $scanned_files as $plugin_name => $files ) {
|
902 |
-
foreach ( $files as $file ) {
|
903 |
-
if ( file_exists( get_stylesheet_directory() . '/' . $file ) ) {
|
904 |
-
$theme_file = get_stylesheet_directory() . '/' . $file;
|
905 |
-
} elseif ( file_exists( get_stylesheet_directory() . '/woocommerce/' . $file ) ) {
|
906 |
-
$theme_file = get_stylesheet_directory() . '/woocommerce/' . $file;
|
907 |
-
} elseif ( file_exists( get_template_directory() . '/' . $file ) ) {
|
908 |
-
$theme_file = get_template_directory() . '/' . $file;
|
909 |
-
} elseif ( file_exists( get_template_directory() . '/woocommerce/' . $file ) ) {
|
910 |
-
$theme_file = get_template_directory() . '/woocommerce/' . $file;
|
911 |
-
} else {
|
912 |
-
$theme_file = false;
|
913 |
-
}
|
914 |
|
915 |
-
|
916 |
-
$override_data[] = basename( $theme_file );
|
917 |
-
}
|
918 |
-
}
|
919 |
-
}
|
920 |
-
|
921 |
-
return $override_data;
|
922 |
-
}
|
923 |
-
|
924 |
-
/**
|
925 |
-
* When an admin user logs in, there user agent is tracked in user meta and collected here.
|
926 |
-
* @return array
|
927 |
-
*/
|
928 |
-
private static function get_admin_user_agents() {
|
929 |
-
return array_filter( (array) get_option( 'woocommerce_tracker_ua', array() ) );
|
930 |
}
|
931 |
}
|
932 |
|
933 |
}
|
934 |
-
|
935 |
-
if ( !function_exists( 'wpdesk_tracker_enabled' ) ) {
|
936 |
-
function wpdesk_tracker_enabled() {
|
937 |
-
$tracker_enabled = true;
|
938 |
-
if ( !empty( $_SERVER['SERVER_ADDR'] ) && $_SERVER['SERVER_ADDR'] == '127.0.0.1' ) {
|
939 |
-
$tracker_enabled = false;
|
940 |
-
}
|
941 |
-
return apply_filters( 'wpdesk_tracker_enabled', $tracker_enabled );
|
942 |
-
// add_filter( 'wpdesk_tracker_enabled', '__return_true' );
|
943 |
-
// add_filter( 'wpdesk_tracker_do_not_ask', '__return_true' );
|
944 |
-
}
|
945 |
-
}
|
2 |
/**
|
3 |
* WP Desk Tracker
|
4 |
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
*/
|
11 |
|
12 |
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
}
|
15 |
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker' ) ) {
|
17 |
|
18 |
class WPDesk_Tracker {
|
19 |
|
20 |
+
/**
|
21 |
+
* @var string
|
22 |
+
*/
|
23 |
+
private $script_version = '11';
|
24 |
+
|
25 |
+
/**
|
26 |
+
* @var string
|
27 |
+
*/
|
28 |
+
private $plugin_basename = '';
|
29 |
|
30 |
+
/**
|
31 |
+
* @var string
|
32 |
+
*/
|
33 |
+
private $message_version = '4';
|
34 |
|
35 |
+
/**
|
36 |
+
* @var WPDesk_Tracker_Data_Provider[]
|
37 |
+
*/
|
38 |
+
private $providers = [];
|
39 |
|
40 |
+
/**
|
41 |
+
* @var WPDesk_Tracker_Sender
|
42 |
+
*/
|
43 |
+
private $sender;
|
44 |
|
45 |
+
public function __construct( $plugin_basename, WPDesk_Tracker_Sender $sender ) {
|
46 |
+
$this->plugin_basename = $plugin_basename;
|
47 |
+
$this->set_sender( $sender );
|
48 |
+
}
|
49 |
|
50 |
/**
|
51 |
+
* Setter for object that sends data.
|
52 |
+
*
|
53 |
+
* @param WPDesk_Tracker_Sender $sender Object that can send payloads.
|
54 |
*/
|
55 |
+
public function set_sender( WPDesk_Tracker_Sender $sender ) {
|
56 |
+
$this->sender = $sender;
|
57 |
+
}
|
58 |
|
59 |
/**
|
60 |
* Hook into cron event.
|
61 |
*/
|
62 |
+
public function init() {
|
63 |
+
add_action( 'plugins_loaded', array( $this, 'load_plugin_text_domain' ) );
|
64 |
+
add_action( 'admin_init', array( $this, 'init_schedule' ) );
|
65 |
+
add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ), 100 );
|
66 |
+
add_action( 'wpdesk_tracker_send_event', array( $this, 'send_tracking_data' ) );
|
67 |
+
add_action( 'admin_menu', array( $this, 'admin_menu' ) );
|
68 |
+
add_action( 'admin_init', array( $this, 'admin_init' ) );
|
69 |
+
add_action( 'admin_notices', array( $this, 'admin_notices' ) );
|
70 |
+
add_action( 'wp_ajax_wpdesk_tracker_notice_handler', array(
|
71 |
+
$this,
|
72 |
+
'wp_ajax_wpdesk_tracker_notice_handler'
|
73 |
+
) );
|
74 |
+
add_action( 'wp_ajax_wpdesk_tracker_deactivation_handler', array(
|
75 |
+
$this,
|
76 |
+
'wp_ajax_wpdesk_tracker_deactivation_handler'
|
77 |
+
) );
|
78 |
+
|
79 |
+
add_action( 'update_option_wpdesk_helper_options', array(
|
80 |
+
$this,
|
81 |
+
'update_option_wpdesk_helper_options'
|
82 |
+
), 10, 3 );
|
83 |
+
add_filter( 'option_wpdesk_helper_options', array( $this, 'option_wpdesk_helper_options' ), 10, 2 );
|
84 |
+
add_filter( 'default_option_wpdesk_helper_options', array(
|
85 |
+
$this,
|
86 |
+
'default_option_wpdesk_helper_options'
|
87 |
+
), 10, 3 );
|
88 |
+
|
89 |
+
add_filter( 'wpdesk_tracker_data', array( $this, 'wpdesk_tracker_message_version' ) );
|
90 |
+
|
91 |
+
add_action( 'admin_bar_menu', array( $this, 'admin_bar_menu' ), 999 );
|
92 |
+
add_action( 'wp_head', array( $this, 'wp_head' ), 999 );
|
93 |
+
add_action( 'admin_head', array( $this, 'wp_head' ), 999 );
|
94 |
|
95 |
global $pagenow;
|
96 |
if ( 'plugins.php' === $pagenow ) {
|
97 |
+
add_action( 'admin_footer', array( $this, 'admin_footer' ) );
|
98 |
}
|
|
|
99 |
}
|
100 |
|
101 |
+
public function add_data_provider( WPDesk_Tracker_Data_Provider $provider ) {
|
102 |
+
$this->providers[] = $provider;
|
|
|
|
|
|
|
|
|
103 |
}
|
104 |
|
105 |
+
|
106 |
+
public function wp_head() {
|
107 |
if ( apply_filters( 'wpdesk_tracker_use_testdata', false ) && apply_filters( 'wpdesk_tracker_show_testdata', false ) ) {
|
108 |
include( 'views/tracker-styles.php' );
|
109 |
}
|
112 |
/**
|
113 |
* @param WP_Admin_Bar $wp_admin_bar
|
114 |
*/
|
115 |
+
public function admin_bar_menu( $wp_admin_bar ) {
|
116 |
if ( apply_filters( 'wpdesk_tracker_use_testdata', false ) && apply_filters( 'wpdesk_tracker_show_testdata', false ) ) {
|
117 |
$args = array(
|
118 |
'id' => 'my_page',
|
124 |
}
|
125 |
|
126 |
|
127 |
+
public function init_schedule() {
|
128 |
$options = get_option( 'wpdesk_helper_options' );
|
129 |
+
if ( ! is_array( $options ) ) {
|
130 |
$options = array();
|
131 |
}
|
132 |
if ( empty( $options['wpdesk_tracker_agree'] ) ) {
|
133 |
$options['wpdesk_tracker_agree'] = '0';
|
134 |
}
|
135 |
$wpdesk_tracker_agree = $options['wpdesk_tracker_agree'];
|
136 |
+
$wp_next_scheduled = wp_next_scheduled( 'wpdesk_tracker_send_event' );
|
137 |
+
if ( $wpdesk_tracker_agree == '1' && ! $wp_next_scheduled ) {
|
138 |
wp_schedule_event( time(), 'daily', 'wpdesk_tracker_send_event' );
|
139 |
}
|
140 |
if ( $wpdesk_tracker_agree == '0' && $wp_next_scheduled ) {
|
142 |
}
|
143 |
}
|
144 |
|
145 |
+
public function load_plugin_text_domain() {
|
146 |
+
$wpdesk_translation = load_plugin_textdomain( 'wpdesk-tracker', false, $this->plugin_basename . '/inc/wpdesk-tracker/lang' );
|
147 |
}
|
148 |
|
149 |
+
public function admin_footer() {
|
150 |
+
if ( ! is_network_admin() && should_enable_wpdesk_tracker() && ! apply_filters( 'wpdesk_tracker_do_not_ask', false ) ) {
|
151 |
$plugins = array(
|
152 |
'wpdesk-helper/wpdesk-helper.php' => 'wpdesk-helper/wpdesk-helper.php'
|
153 |
);
|
156 |
}
|
157 |
}
|
158 |
|
159 |
+
public function admin_enqueue_scripts() {
|
160 |
$screen = get_current_screen();
|
161 |
if ( $screen->id == 'admin_page_wpdesk_tracker' || $screen->id == 'admin_page_wpdesk_tracker_deactivate' ) {
|
162 |
+
wp_register_style( 'wpdesk-helper-tracker', plugin_dir_url( __FILE__ ) . 'assets/css/tracker.css', array(), $this->script_version, 'all' );
|
163 |
wp_enqueue_style( 'wpdesk-helper-tracker' );
|
164 |
}
|
165 |
}
|
166 |
|
167 |
+
public function admin_menu() {
|
168 |
add_submenu_page(
|
169 |
null,
|
170 |
'WP Desk Tracker',
|
171 |
'WP Desk Tracker',
|
172 |
'manage_options',
|
173 |
'wpdesk_tracker',
|
174 |
+
array( $this, 'wpdesk_tracker_page' )
|
175 |
);
|
176 |
add_submenu_page(
|
177 |
null,
|
179 |
'Deactivate plugin',
|
180 |
'manage_options',
|
181 |
'wpdesk_tracker_deactivate',
|
182 |
+
array( $this, 'wpdesk_tracker_deactivate' )
|
183 |
);
|
184 |
}
|
185 |
|
186 |
+
public function wp_ajax_wpdesk_tracker_deactivation_handler() {
|
187 |
+
$this->send_deactivation_data();
|
188 |
}
|
189 |
|
190 |
|
191 |
+
public function wp_ajax_wpdesk_tracker_notice_handler() {
|
192 |
$option = get_option( 'wpdesk_helper_options' );
|
193 |
+
if ( ! $option ) {
|
194 |
add_option( 'wpdesk_helper_options', array() );
|
195 |
}
|
196 |
$type = '';
|
198 |
$type = $_REQUEST['type'];
|
199 |
}
|
200 |
if ( $type == 'allow' ) {
|
201 |
+
$options = get_option( 'wpdesk_helper_options', array() );
|
202 |
+
if ( ! is_array( $options ) ) {
|
203 |
$options = array();
|
204 |
}
|
205 |
update_option( 'wpdesk_helper_options', $options );
|
208 |
update_option( 'wpdesk_helper_options', $options );
|
209 |
}
|
210 |
if ( $type == 'dismiss' ) {
|
211 |
+
$options = get_option( 'wpdesk_helper_options', array() );
|
212 |
+
if ( ! is_array( $options ) ) {
|
213 |
$options = array();
|
214 |
}
|
215 |
+
if (get_option('wpdesk_tracker_notice', '0') === '2') {
|
216 |
+
update_option( 'wpdesk_tracker_notice', 'dismiss_all' );
|
217 |
+
$options['wpdesk_tracker_agree'] = '0';
|
218 |
+
update_option( 'wpdesk_helper_options', $options );
|
219 |
+
} else {
|
220 |
+
update_option( 'wpdesk_tracker_notice', '2' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
221 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
222 |
}
|
223 |
}
|
224 |
|
225 |
+
public function update_option_wpdesk_helper_options( $old_value, $value, $option ) {
|
226 |
if ( empty( $old_value ) ) {
|
227 |
$old_value = array( 'wpdesk_tracker_agree' => '-1' );
|
228 |
}
|
229 |
+
if ( ! isset( $old_value['wpdesk_tracker_agree'] ) ) {
|
230 |
$old_value['wpdesk_tracker_agree'] = '-1';
|
231 |
}
|
232 |
if ( empty( $value ) ) {
|
233 |
$value = array( 'wpdesk_tracker_agree' => '-1' );
|
234 |
}
|
235 |
+
if ( ! isset( $value['wpdesk_tracker_agree'] ) ) {
|
236 |
$value['wpdesk_tracker_agree'] = '-1';
|
237 |
}
|
238 |
if ( $old_value['wpdesk_tracker_agree'] != '1' ) {
|
239 |
if ( $value['wpdesk_tracker_agree'] == '1' ) {
|
240 |
+
$this->send_tracking_data( true, 'agree' );
|
241 |
}
|
242 |
}
|
243 |
if ( $old_value['wpdesk_tracker_agree'] != '0' ) {
|
244 |
if ( $value['wpdesk_tracker_agree'] == '0' ) {
|
245 |
+
$this->send_tracking_data( true, 'no' );
|
246 |
update_option( 'wpdesk_tracker_notice', 'dismiss_all' );
|
247 |
}
|
248 |
}
|
249 |
}
|
250 |
|
251 |
+
public function option_wpdesk_helper_options( $value, $option ) {
|
252 |
if ( apply_filters( 'wpdesk_tracker_do_not_ask', false ) ) {
|
253 |
+
if ( ! is_array( $value ) ) {
|
254 |
$value = array();
|
255 |
}
|
256 |
$value['wpdesk_tracker_agree'] = 1;
|
257 |
}
|
258 |
+
|
259 |
return $value;
|
260 |
}
|
261 |
|
262 |
+
public function default_option_wpdesk_helper_options( $default, $option = null, $passed_default = null ) {
|
263 |
if ( apply_filters( 'wpdesk_tracker_do_not_ask', false ) ) {
|
264 |
+
$default = array();
|
265 |
$default['wpdesk_tracker_agree'] = 1;
|
266 |
}
|
267 |
+
|
268 |
return $default;
|
269 |
}
|
270 |
|
271 |
+
public function admin_notices() {
|
272 |
+
if ( ! should_enable_wpdesk_tracker() ) {
|
273 |
return;
|
274 |
}
|
275 |
+
$screen = get_current_screen();
|
276 |
+
$options = get_option( 'wpdesk_helper_options', array() );
|
277 |
+
if ( ! is_array( $options ) ) {
|
278 |
$options = array();
|
279 |
}
|
280 |
if ( get_option( 'wpdesk_tracker_notice', '0' ) != 'dismiss_all' ) {
|
281 |
if ( empty( $options['wpdesk_tracker_agree'] ) || $options['wpdesk_tracker_agree'] == '0' ) {
|
|
|
|
|
|
|
|
|
282 |
if ( in_array( $screen->id, apply_filters( 'wpdesk_tracker_notice_screens', array() ) ) ) {
|
283 |
+
$user = wp_get_current_user();
|
284 |
+
$username = $user->first_name ? $user->first_name : $user->user_login;
|
285 |
$terms_url = get_locale() == 'pl_PL' ? 'https://www.wpdesk.pl/dane-uzytkowania/' : 'https://www.wpdesk.net/usage-tracking/';
|
286 |
+
$shop_url = get_locale() == 'pl_PL' ? 'https://www.wpdesk.pl/' : 'https://www.wpdesk.net/';
|
287 |
include( 'views/tracker-notice.php' );
|
288 |
}
|
289 |
}
|
290 |
}
|
291 |
if ( $screen->id == 'plugins' ) {
|
292 |
if ( isset( $_GET['wpdesk_tracker_opt_out'] ) ) {
|
293 |
+
$options = get_option( 'wpdesk_helper_options', array() );
|
294 |
+
if ( ! is_array( $options ) ) {
|
295 |
$options = array();
|
296 |
}
|
297 |
delete_option( 'wpdesk_tracker_notice' );
|
302 |
}
|
303 |
}
|
304 |
|
305 |
+
public function wpdesk_tracker_page() {
|
306 |
+
$user = wp_get_current_user();
|
307 |
+
$username = $user->first_name ? $user->first_name : $user->user_login;
|
308 |
$allow_url = admin_url( 'admin.php?page=wpdesk_tracker' );
|
309 |
$allow_url = add_query_arg( 'plugin', $_GET['plugin'], $allow_url );
|
310 |
+
$skip_url = $allow_url;
|
311 |
$allow_url = add_query_arg( 'allow', '1', $allow_url );
|
312 |
+
$skip_url = add_query_arg( 'allow', '0', $skip_url );
|
313 |
$terms_url = get_locale() == 'pl_PL' ? 'https://www.wpdesk.pl/dane-uzytkowania/' : 'https://www.wpdesk.net/usage-tracking/';
|
314 |
include( 'views/tracker-connect.php' );
|
315 |
}
|
316 |
|
317 |
+
public function wpdesk_tracker_deactivate() {
|
318 |
+
$user = wp_get_current_user();
|
319 |
+
$username = $user->first_name;
|
320 |
+
$plugin = $_GET['plugin'];
|
321 |
$active_plugins = get_plugins();
|
322 |
+
$plugin_name = $active_plugins[ $plugin ]['Name'];
|
323 |
include( 'views/tracker-deactivate.php' );
|
324 |
}
|
325 |
|
326 |
+
public function admin_init() {
|
327 |
if ( isset( $_GET['page'] ) && $_GET['page'] == 'wpdesk_tracker' ) {
|
328 |
if ( isset( $_GET['plugin'] ) && isset( $_GET['allow'] ) ) {
|
329 |
+
$options = get_option( 'wpdesk_helper_options', array() );
|
330 |
+
if ( ! is_array( $options ) ) {
|
331 |
$options = array();
|
332 |
}
|
333 |
if ( $_GET['allow'] == '0' ) {
|
334 |
+
remove_action( 'update_option_wpdesk_helper_options', array(
|
335 |
+
$this,
|
336 |
+
'update_option_wpdesk_helper_options'
|
337 |
+
), 10, 3 );
|
338 |
unset( $options['wpdesk_tracker_agree'] );
|
339 |
update_option( 'wpdesk_helper_options', $options );
|
340 |
+
add_action( 'update_option_wpdesk_helper_options', array(
|
341 |
+
$this,
|
342 |
+
'update_option_wpdesk_helper_options'
|
343 |
+
), 10, 3 );
|
344 |
$options['wpdesk_tracker_agree'] = '0';
|
345 |
update_option( 'wpdesk_helper_options', $options );
|
346 |
update_option( 'wpdesk_tracker_notice', '1' );
|
347 |
+
} else {
|
348 |
+
remove_action( 'update_option_wpdesk_helper_options', array(
|
349 |
+
$this,
|
350 |
+
'update_option_wpdesk_helper_options'
|
351 |
+
), 10, 3 );
|
352 |
unset( $options['wpdesk_tracker_agree'] );
|
353 |
update_option( 'wpdesk_helper_options', $options );
|
354 |
+
add_action( 'update_option_wpdesk_helper_options', array(
|
355 |
+
$this,
|
356 |
+
'update_option_wpdesk_helper_options'
|
357 |
+
), 10, 3 );
|
358 |
delete_option( 'wpdesk_tracker_notice' );
|
359 |
update_option( 'wpdesk_tracker_agree', '1' );
|
360 |
$options['wpdesk_tracker_agree'] = '1';
|
361 |
update_option( 'wpdesk_helper_options', $options );
|
362 |
}
|
363 |
+
wp_redirect( admin_url( 'plugins.php' ) );
|
364 |
exit();
|
365 |
}
|
366 |
}
|
367 |
}
|
368 |
|
369 |
+
public function wpdesk_tracker_message_version( $data ) {
|
370 |
+
$data['message_version'] = $this->message_version;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
371 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
372 |
return $data;
|
373 |
}
|
374 |
|
375 |
+
public function send_deactivation_data() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
376 |
$params = array();
|
377 |
|
378 |
$params['click_action'] = 'plugin_deactivation';
|
383 |
|
384 |
$params['reason'] = $_REQUEST['reason'];
|
385 |
|
386 |
+
if ( ! empty( $_REQUEST['additional_info'] ) ) {
|
387 |
$params['additional_info'] = $_REQUEST['additional_info'];
|
388 |
}
|
389 |
|
390 |
+
$this->send_payload_to_wpdesk( $params );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
391 |
}
|
392 |
|
|
|
393 |
/**
|
394 |
* Decide whether to send tracking data or not.
|
395 |
*
|
396 |
* @param boolean $override
|
397 |
*/
|
398 |
+
public function send_tracking_data( $override = false, $click_action = null ) {
|
399 |
+
$options = get_option( 'wpdesk_helper_options', array() );
|
400 |
if ( empty( $options ) ) {
|
401 |
$options = array();
|
402 |
}
|
406 |
if ( empty( $click_action ) && $options['wpdesk_tracker_agree'] == '0' ) {
|
407 |
return;
|
408 |
}
|
409 |
+
if ( ! should_enable_wpdesk_tracker() ) {
|
410 |
return;
|
411 |
}
|
412 |
// Dont trigger this on AJAX Requests
|
415 |
}
|
416 |
if ( ! apply_filters( 'wpdesk_tracker_send_override', $override ) ) {
|
417 |
// Send a maximum of once per week by default.
|
418 |
+
$last_send = $this->get_last_send_time();
|
419 |
if ( $last_send && $last_send > apply_filters( 'wpdesk_tracker_last_send_interval', strtotime( '-1 week' ) ) ) {
|
420 |
return;
|
421 |
}
|
422 |
} else {
|
423 |
// Make sure there is at least a 1 hour delay between override sends, we dont want duplicate calls due to double clicking links.
|
424 |
+
$last_send = $this->get_last_send_time();
|
425 |
if ( empty( $click_action ) && $last_send && $last_send > strtotime( '-1 hours' ) ) {
|
426 |
return;
|
427 |
}
|
431 |
update_option( 'wpdesk_tracker_last_send', time() );
|
432 |
|
433 |
if ( empty( $click_action ) || $click_action == 'agree' ) {
|
434 |
+
$params = $this->get_tracking_data();
|
435 |
|
436 |
if ( isset( $params['active_plugins'] ) ) {
|
437 |
+
foreach ( $params['active_plugins'] as $plugin => $plugin_data ) {
|
438 |
+
$option_name = 'plugin_activation_' . $plugin;
|
439 |
$activation_date = get_option( $option_name, '' );
|
440 |
if ( $activation_date != '' ) {
|
441 |
+
$params['active_plugins'][ $plugin ]['activation_date'] = $activation_date;
|
442 |
}
|
443 |
}
|
444 |
}
|
445 |
|
446 |
+
if ( ! empty( $click_action ) ) {
|
447 |
$params['click_action'] = 'agree';
|
448 |
}
|
449 |
+
} else {
|
450 |
+
$params = array( 'click_action' => 'no' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
451 |
$params['url'] = home_url();
|
452 |
}
|
453 |
|
454 |
$params['localhost'] = 'no';
|
455 |
+
if ( ! empty( $_SERVER['SERVER_ADDR'] ) && $_SERVER['SERVER_ADDR'] == '127.0.0.1' ) {
|
456 |
$params['localhost'] = 'yes';
|
457 |
}
|
458 |
|
459 |
+
$this->send_payload_to_wpdesk( $params );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
460 |
}
|
461 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
462 |
|
463 |
/**
|
464 |
+
* Sends payload to WPDesk servers.
|
465 |
+
*
|
466 |
+
* @param array $payload Payload to sent.
|
467 |
+
*
|
468 |
+
* @return bool If sending was successfull.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
469 |
*/
|
470 |
+
private function send_payload_to_wpdesk( array $payload ) {
|
471 |
+
try {
|
472 |
+
$this->sender->send_payload( $payload );
|
473 |
+
return true;
|
474 |
+
} catch (WPDesk_Tracker_Sender_Exception_WpError $e) {
|
475 |
+
return false;
|
476 |
}
|
|
|
|
|
477 |
}
|
478 |
|
479 |
/**
|
480 |
+
* Get the last time tracking data was sent.
|
481 |
+
* @return int|bool
|
482 |
*/
|
483 |
+
private function get_last_send_time() {
|
484 |
+
return apply_filters( 'wpdesk_tracker_last_send_time', get_option( 'wpdesk_tracker_last_send', false ) );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
485 |
}
|
486 |
|
487 |
/**
|
|
|
488 |
* @return array
|
489 |
*/
|
490 |
+
private function get_data_from_providers() {
|
491 |
+
$data = array();
|
492 |
+
if ( ! empty( $this->providers ) ) {
|
493 |
+
foreach ( $this->providers as $provider ) {
|
494 |
+
$data = array_merge( $data, $provider->get_data() );
|
|
|
|
|
|
|
495 |
}
|
496 |
}
|
497 |
|
498 |
+
return $data;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
499 |
}
|
500 |
|
501 |
/**
|
502 |
+
* Get all the tracking data.
|
503 |
* @return array
|
504 |
*/
|
505 |
+
private function get_tracking_data() {
|
506 |
+
$data = $this->get_data_from_providers();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
507 |
|
508 |
+
return apply_filters( 'wpdesk_tracker_data', $data );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
509 |
}
|
510 |
}
|
511 |
|
512 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-gateways.php
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_Gateways' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_Gateways
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_Gateways implements WPDesk_Tracker_Data_Provider {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Get a list of all active payment gateways.
|
25 |
+
*
|
26 |
+
* @return array Data provided to tracker.
|
27 |
+
*/
|
28 |
+
public function get_data() {
|
29 |
+
$active_gateways = array();
|
30 |
+
$gateways = WC()->payment_gateways->payment_gateways();
|
31 |
+
foreach ( $gateways as $id => $gateway ) {
|
32 |
+
if ( isset( $gateway->enabled ) && 'yes' === $gateway->enabled ) {
|
33 |
+
$active_gateways[ $id ] = array( 'title' => $gateway->title, 'supports' => $gateway->supports );
|
34 |
+
}
|
35 |
+
}
|
36 |
+
|
37 |
+
return ['gateways' => $active_gateways];
|
38 |
+
}
|
39 |
+
|
40 |
+
}
|
41 |
+
|
42 |
+
}
|
43 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-identification-gdpr.php
ADDED
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_Identification_Gdpr' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_Identification_Gdpr
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_Identification_Gdpr implements WPDesk_Tracker_Data_Provider {
|
22 |
+
const DATA_KEY_DOMAIN_HASH = 'domain_hash';
|
23 |
+
|
24 |
+
const DATA_KEY_UNIQUE_HASH = 'unique_hash';
|
25 |
+
|
26 |
+
const DATA_KEY_EMAIL_HASH = 'email_hash';
|
27 |
+
|
28 |
+
const WPDESK_TRACKER_UNIQUE_HASH_OPTION_NAME = 'wpdesk_tracker_unique_hash';
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Hash unique for wordpress instance.
|
32 |
+
*
|
33 |
+
* @return string
|
34 |
+
*/
|
35 |
+
private function get_unique_hash() {
|
36 |
+
$hash = get_option( self::WPDESK_TRACKER_UNIQUE_HASH_OPTION_NAME, false );
|
37 |
+
if ( ! $hash ) {
|
38 |
+
$hash = md5( uniqid() . NONCE_SALT );
|
39 |
+
update_option( self::WPDESK_TRACKER_UNIQUE_HASH_OPTION_NAME, $hash );
|
40 |
+
}
|
41 |
+
|
42 |
+
return $hash;
|
43 |
+
}
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Get info that allows anonymous data rollup.
|
47 |
+
*
|
48 |
+
* @return array Data provided to tracker.
|
49 |
+
*/
|
50 |
+
public function get_data() {
|
51 |
+
$data = [];
|
52 |
+
$data[ self::DATA_KEY_DOMAIN_HASH ] = md5( home_url() . NONCE_SALT );
|
53 |
+
$data[ self::DATA_KEY_UNIQUE_HASH ] = $this->get_unique_hash();
|
54 |
+
$data[ self::DATA_KEY_EMAIL_HASH ] = md5( apply_filters( 'wpdesk_tracker_admin_email', get_option( 'admin_email' ) ) . NONCE_SALT );
|
55 |
+
|
56 |
+
return $data;
|
57 |
+
}
|
58 |
+
|
59 |
+
}
|
60 |
+
|
61 |
+
}
|
62 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-identification.php
ADDED
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_Identification' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_Identification
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_Identification implements WPDesk_Tracker_Data_Provider {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Get info that allows session identification.
|
25 |
+
*
|
26 |
+
* @return array Data provided to tracker.
|
27 |
+
*/
|
28 |
+
public function get_data() {
|
29 |
+
$data = [];
|
30 |
+
$data['url'] = home_url();
|
31 |
+
$data['email'] = apply_filters( 'wpdesk_tracker_admin_email', get_option( 'admin_email' ) );
|
32 |
+
|
33 |
+
return $data;
|
34 |
+
}
|
35 |
+
|
36 |
+
}
|
37 |
+
|
38 |
+
}
|
39 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-jetpack.php
ADDED
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_Jetpack' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_Jetpack
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_Jetpack implements WPDesk_Tracker_Data_Provider {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Info about jetpack.
|
25 |
+
*
|
26 |
+
* @return array Data provided to tracker.
|
27 |
+
*/
|
28 |
+
public function get_data() {
|
29 |
+
$data = [];
|
30 |
+
$data['jetpack_version'] = defined( 'JETPACK__VERSION' ) ? JETPACK__VERSION : 'none';
|
31 |
+
$data['jetpack_connected'] = ( class_exists( 'Jetpack' ) && is_callable( 'Jetpack::is_active' ) && Jetpack::is_active() ) ? 'yes' : 'no';
|
32 |
+
$data['jetpack_is_staging'] = ( class_exists( 'Jetpack' ) && is_callable( 'Jetpack::is_staging_site' ) && Jetpack::is_staging_site() ) ? 'yes' : 'no';
|
33 |
+
$data['connect_installed'] = class_exists( 'WC_Connect_Loader' ) ? 'yes' : 'no';
|
34 |
+
$data['connect_active'] = ( class_exists( 'WC_Connect_Loader' ) && wp_next_scheduled( 'wc_connect_fetch_service_schemas' ) ) ? 'yes' : 'no';
|
35 |
+
|
36 |
+
return $data;
|
37 |
+
}
|
38 |
+
|
39 |
+
}
|
40 |
+
|
41 |
+
}
|
42 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-license-emails.php
ADDED
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_License_Emails' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_License_Emails
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_License_Emails implements WPDesk_Tracker_Data_Provider {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Info about license emails from api manager.
|
25 |
+
*
|
26 |
+
* @return array Data provided to tracker.
|
27 |
+
*/
|
28 |
+
public function get_data() {
|
29 |
+
global $wpdesk_helper_plugins;
|
30 |
+
$license_emails_email = array();
|
31 |
+
$license_emails = array();
|
32 |
+
if ( ! isset( $wpdesk_helper_plugins ) ) {
|
33 |
+
$wpdesk_helper_plugins = array();
|
34 |
+
}
|
35 |
+
foreach ( $wpdesk_helper_plugins as $key => $plugin ) {
|
36 |
+
if ( isset( $plugin['api_manager'] ) ) {
|
37 |
+
$api_manager = $plugin['api_manager'];
|
38 |
+
if ( isset( $api_manager->options[ $api_manager->activation_email ] ) ) {
|
39 |
+
$license_emails_email[ $api_manager->options[ $api_manager->activation_email ] ] = $api_manager->options[ $api_manager->activation_email ];
|
40 |
+
}
|
41 |
+
}
|
42 |
+
}
|
43 |
+
foreach ( $license_emails_email as $email ) {
|
44 |
+
$license_emails[] = $email;
|
45 |
+
}
|
46 |
+
$data['license_emails'] = $license_emails;
|
47 |
+
|
48 |
+
return $data;
|
49 |
+
}
|
50 |
+
|
51 |
+
}
|
52 |
+
|
53 |
+
}
|
54 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-orders-country.php
ADDED
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_Orders_Country' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_Orders_Country
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_Orders_Country implements WPDesk_Tracker_Data_Provider {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Info about shipping coutry per order.
|
25 |
+
*
|
26 |
+
* @return array Data provided to tracker.
|
27 |
+
*/
|
28 |
+
public function get_data() {
|
29 |
+
global $wpdb;
|
30 |
+
$query = $wpdb->get_results( "
|
31 |
+
SELECT m.meta_value AS shipping_country, p.post_status AS post_status , COUNT(p.ID) AS orders
|
32 |
+
FROM {$wpdb->postmeta} m, {$wpdb->posts} p
|
33 |
+
WHERE p.ID = m.post_id
|
34 |
+
AND m.meta_key = '_shipping_country'
|
35 |
+
GROUP BY shipping_country, post_status ORDER BY orders DESC"
|
36 |
+
);
|
37 |
+
$data['shipping_country_per_order'] = array();
|
38 |
+
if ( $query ) {
|
39 |
+
foreach ( $query as $row ) {
|
40 |
+
if ( ! isset( $data['shipping_country_per_order'][ $row->shipping_country ] ) ) {
|
41 |
+
$data['shipping_country_per_order'][ $row->shipping_country ] = array();
|
42 |
+
}
|
43 |
+
$data['shipping_country_per_order'][ $row->shipping_country ][ $row->post_status ] = $row->orders;
|
44 |
+
}
|
45 |
+
}
|
46 |
+
|
47 |
+
return $data;
|
48 |
+
}
|
49 |
+
|
50 |
+
}
|
51 |
+
|
52 |
+
}
|
53 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-orders-month.php
ADDED
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_Orders_Month' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_Orders_Month
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_Orders_Month implements WPDesk_Tracker_Data_Provider {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Info about orders per month.
|
25 |
+
*
|
26 |
+
* @return array Data provided to tracker.
|
27 |
+
*/
|
28 |
+
public function get_data() {
|
29 |
+
global $wpdb;
|
30 |
+
$query = $wpdb->get_results( "
|
31 |
+
SELECT min(post_date) min, max(post_date) max, TIMESTAMPDIFF(MONTH, min(post_date), max(post_date) )+1 months
|
32 |
+
FROM {$wpdb->posts} p
|
33 |
+
WHERE p.post_type = 'shop_order'
|
34 |
+
AND p.post_status = 'wc-completed'
|
35 |
+
"
|
36 |
+
);
|
37 |
+
$data['orders_per_month'] = array();
|
38 |
+
if ( $query ) {
|
39 |
+
foreach ( $query as $row ) {
|
40 |
+
$data['orders_per_month']['first'] = $row->min;
|
41 |
+
$data['orders_per_month']['last'] = $row->max;
|
42 |
+
$data['orders_per_month']['months'] = $row->months;
|
43 |
+
if ( $row->months != 0 ) {
|
44 |
+
if ( isset( $data['orders'] ) && isset( $data['orders']['wc-completed'] ) ) {
|
45 |
+
$data['orders_per_month']['per_month'] = floatval( $data['orders']['wc-completed'] ) / floatval( $row->months );
|
46 |
+
}
|
47 |
+
}
|
48 |
+
}
|
49 |
+
}
|
50 |
+
|
51 |
+
return $data;
|
52 |
+
}
|
53 |
+
|
54 |
+
}
|
55 |
+
|
56 |
+
}
|
57 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-orders.php
ADDED
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_Orders' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_Orders
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_Orders implements WPDesk_Tracker_Data_Provider {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Get order counts based on order status.
|
25 |
+
*
|
26 |
+
* @return array Data provided to tracker.
|
27 |
+
*/
|
28 |
+
public function get_data() {
|
29 |
+
$order_count = array();
|
30 |
+
$order_count_data = wp_count_posts( 'shop_order' );
|
31 |
+
|
32 |
+
foreach ( wc_get_order_statuses() as $status_slug => $status_name ) {
|
33 |
+
$order_count[ $status_slug ] = $order_count_data->{$status_slug};
|
34 |
+
}
|
35 |
+
|
36 |
+
return ['orders' => $order_count];
|
37 |
+
}
|
38 |
+
|
39 |
+
}
|
40 |
+
|
41 |
+
}
|
42 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-plugins.php
ADDED
@@ -0,0 +1,84 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_Plugins
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_Plugins implements WPDesk_Tracker_Data_Provider {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Get all plugins grouped into activated or not.
|
25 |
+
*
|
26 |
+
* @return array
|
27 |
+
*/
|
28 |
+
private function get_all_plugins() {
|
29 |
+
// Ensure get_plugins function is loaded
|
30 |
+
if ( ! function_exists( 'get_plugins' ) ) {
|
31 |
+
include ABSPATH . '/wp-admin/includes/plugin.php';
|
32 |
+
}
|
33 |
+
|
34 |
+
$plugins = get_plugins();
|
35 |
+
$active_plugins_keys = get_option( 'active_plugins', array() );
|
36 |
+
$active_plugins = array();
|
37 |
+
|
38 |
+
foreach ( $plugins as $k => $v ) {
|
39 |
+
// Take care of formatting the data how we want it.
|
40 |
+
$formatted = array();
|
41 |
+
$formatted['name'] = strip_tags( $v['Name'] );
|
42 |
+
if ( isset( $v['Version'] ) ) {
|
43 |
+
$formatted['version'] = strip_tags( $v['Version'] );
|
44 |
+
}
|
45 |
+
if ( isset( $v['Author'] ) ) {
|
46 |
+
$formatted['author'] = strip_tags( $v['Author'] );
|
47 |
+
}
|
48 |
+
if ( isset( $v['Network'] ) ) {
|
49 |
+
$formatted['network'] = strip_tags( $v['Network'] );
|
50 |
+
}
|
51 |
+
if ( isset( $v['PluginURI'] ) ) {
|
52 |
+
$formatted['plugin_uri'] = strip_tags( $v['PluginURI'] );
|
53 |
+
}
|
54 |
+
if ( in_array( $k, $active_plugins_keys ) ) {
|
55 |
+
// Remove active plugins from list so we can show active and inactive separately
|
56 |
+
unset( $plugins[ $k ] );
|
57 |
+
$active_plugins[ $k ] = $formatted;
|
58 |
+
} else {
|
59 |
+
$plugins[ $k ] = $formatted;
|
60 |
+
}
|
61 |
+
}
|
62 |
+
|
63 |
+
return array( 'active_plugins' => $active_plugins, 'inactive_plugins' => $plugins );
|
64 |
+
}
|
65 |
+
|
66 |
+
/**
|
67 |
+
* Provides data
|
68 |
+
*
|
69 |
+
* @return array Data provided to tracker.
|
70 |
+
*/
|
71 |
+
public function get_data() {
|
72 |
+
$data = [];
|
73 |
+
|
74 |
+
$all_plugins = $this->get_all_plugins();
|
75 |
+
$data['active_plugins'] = $all_plugins['active_plugins'];
|
76 |
+
$data['inactive_plugins'] = $all_plugins['inactive_plugins'];
|
77 |
+
|
78 |
+
return $data;
|
79 |
+
}
|
80 |
+
|
81 |
+
}
|
82 |
+
|
83 |
+
}
|
84 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-products-variations.php
ADDED
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_Products_Variations' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_Products_Variations
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_Products_Variations implements WPDesk_Tracker_Data_Provider {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Info about numer of variations.
|
25 |
+
*
|
26 |
+
* @return array Data provided to tracker.
|
27 |
+
*/
|
28 |
+
public function get_data() {
|
29 |
+
$data['number_of_variations'] = 0;
|
30 |
+
$number_of_variations = wp_count_posts( 'product_variation' );
|
31 |
+
$data['number_of_variations'] = $number_of_variations;
|
32 |
+
|
33 |
+
return $data;
|
34 |
+
}
|
35 |
+
|
36 |
+
}
|
37 |
+
|
38 |
+
}
|
39 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-products.php
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_Products' ) ) {
|
17 |
+
/**
|
18 |
+
* Class WPDesk_Tracker_Data_Provider_Products
|
19 |
+
*/
|
20 |
+
class WPDesk_Tracker_Data_Provider_Products implements WPDesk_Tracker_Data_Provider {
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Get product totals based on product type.
|
24 |
+
*
|
25 |
+
* @return array Data provided to tracker.
|
26 |
+
*/
|
27 |
+
public function get_data() {
|
28 |
+
$product_count = array();
|
29 |
+
$product_count_data = wp_count_posts( 'product' );
|
30 |
+
$product_count['total'] = $product_count_data->publish;
|
31 |
+
|
32 |
+
$product_statuses = get_terms( 'product_type', array( 'hide_empty' => 0 ) );
|
33 |
+
foreach ( $product_statuses as $product_status ) {
|
34 |
+
$product_count[ $product_status->name ] = $product_status->count;
|
35 |
+
}
|
36 |
+
|
37 |
+
return ['products' => $product_count];
|
38 |
+
}
|
39 |
+
|
40 |
+
}
|
41 |
+
|
42 |
+
}
|
43 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-server.php
ADDED
@@ -0,0 +1,61 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_Server' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_Server
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_Server implements WPDesk_Tracker_Data_Provider {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Info about bawic server data.
|
25 |
+
*
|
26 |
+
* @return array Data provided to tracker.
|
27 |
+
*/
|
28 |
+
public function get_data() {
|
29 |
+
$server_data = array();
|
30 |
+
|
31 |
+
if ( isset( $_SERVER['SERVER_SOFTWARE'] ) && ! empty( $_SERVER['SERVER_SOFTWARE'] ) ) {
|
32 |
+
$server_data['software'] = $_SERVER['SERVER_SOFTWARE'];
|
33 |
+
}
|
34 |
+
|
35 |
+
if ( function_exists( 'phpversion' ) ) {
|
36 |
+
$server_data['php_version'] = phpversion();
|
37 |
+
}
|
38 |
+
|
39 |
+
if ( function_exists( 'ini_get' ) ) {
|
40 |
+
$server_data['php_post_max_size'] = size_format( wc_let_to_num( ini_get( 'post_max_size' ) ) );
|
41 |
+
$server_data['php_time_limt'] = ini_get( 'max_execution_time' );
|
42 |
+
$server_data['php_max_input_vars'] = ini_get( 'max_input_vars' );
|
43 |
+
$server_data['php_suhosin'] = extension_loaded( 'suhosin' ) ? 'Yes' : 'No';
|
44 |
+
}
|
45 |
+
|
46 |
+
global $wpdb;
|
47 |
+
$server_data['mysql_version'] = $wpdb->db_version();
|
48 |
+
|
49 |
+
$server_data['php_max_upload_size'] = size_format( wp_max_upload_size() );
|
50 |
+
$server_data['php_default_timezone'] = date_default_timezone_get();
|
51 |
+
$server_data['php_soap'] = class_exists( 'SoapClient' ) ? 'Yes' : 'No';
|
52 |
+
$server_data['php_fsockopen'] = function_exists( 'fsockopen' ) ? 'Yes' : 'No';
|
53 |
+
$server_data['php_curl'] = function_exists( 'curl_init' ) ? 'Yes' : 'No';
|
54 |
+
|
55 |
+
return ['server' => $server_data];
|
56 |
+
}
|
57 |
+
|
58 |
+
}
|
59 |
+
|
60 |
+
}
|
61 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-settings.php
ADDED
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_Settings' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_Settings
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_Settings implements WPDesk_Tracker_Data_Provider {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Get all options starting with woocommerce_ prefix.
|
25 |
+
*
|
26 |
+
* @return array Data provided to tracker.
|
27 |
+
*/
|
28 |
+
public function get_data() {
|
29 |
+
return [
|
30 |
+
'settings' => array(
|
31 |
+
'version' => WC()->version,
|
32 |
+
'currency' => get_woocommerce_currency(),
|
33 |
+
'base_location' => WC()->countries->get_base_country(),
|
34 |
+
'selling_locations' => WC()->countries->get_allowed_countries(),
|
35 |
+
'api_enabled' => get_option( 'woocommerce_api_enabled' ),
|
36 |
+
'weight_unit' => get_option( 'woocommerce_weight_unit' ),
|
37 |
+
'dimension_unit' => get_option( 'woocommerce_dimension_unit' ),
|
38 |
+
'download_method' => get_option( 'woocommerce_file_download_method' ),
|
39 |
+
'download_require_login' => get_option( 'woocommerce_downloads_require_login' ),
|
40 |
+
'calc_taxes' => get_option( 'woocommerce_calc_taxes' ),
|
41 |
+
'coupons_enabled' => get_option( 'woocommerce_enable_coupons' ),
|
42 |
+
'guest_checkout' => get_option( 'woocommerce_enable_guest_checkout' ),
|
43 |
+
'secure_checkout' => get_option( 'woocommerce_force_ssl_checkout' ),
|
44 |
+
'enable_signup_and_login_from_checkout' => get_option( 'woocommerce_enable_signup_and_login_from_checkout' ),
|
45 |
+
'enable_myaccount_registration' => get_option( 'woocommerce_enable_myaccount_registration' ),
|
46 |
+
'registration_generate_username' => get_option( 'woocommerce_registration_generate_username' ),
|
47 |
+
'registration_generate_password' => get_option( 'woocommerce_registration_generate_password' ),
|
48 |
+
)
|
49 |
+
];
|
50 |
+
}
|
51 |
+
|
52 |
+
}
|
53 |
+
|
54 |
+
}
|
55 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-shipping-classes.php
ADDED
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_Shipping_Classes' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_Shipping_Classes
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_Shipping_Classes implements WPDesk_Tracker_Data_Provider {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Info about number of shipping classes
|
25 |
+
*
|
26 |
+
* @return array Data provided to tracker.
|
27 |
+
*/
|
28 |
+
public function get_data() {
|
29 |
+
$data['number_of_shipping_classes'] = 0;
|
30 |
+
$shipping_classes = WC()->shipping()->get_shipping_classes();
|
31 |
+
if ( is_array( $shipping_classes ) ) {
|
32 |
+
$data['number_of_shipping_classes'] = count( $shipping_classes );
|
33 |
+
}
|
34 |
+
|
35 |
+
return $data;
|
36 |
+
}
|
37 |
+
|
38 |
+
}
|
39 |
+
|
40 |
+
}
|
41 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-shipping-methods-zones.php
ADDED
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_Shipping_Methods_Zones' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_Shipping_Methods_Zones
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_Shipping_Methods_Zones implements WPDesk_Tracker_Data_Provider {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Info about shipping methods in zones and by title.
|
25 |
+
*
|
26 |
+
* @return array Data provided to tracker.
|
27 |
+
*/
|
28 |
+
public function get_data() {
|
29 |
+
if ( class_exists( 'WC_Shipping_Zones' ) ) {
|
30 |
+
$other_zones = WC_Shipping_Zones::get_zones();
|
31 |
+
$zones = array();
|
32 |
+
foreach ( $other_zones as $zone ) {
|
33 |
+
$zones[] = WC_Shipping_Zones::get_zone_by( 'zone_id', $zone['zone_id'] );
|
34 |
+
}
|
35 |
+
$zones[] = WC_Shipping_Zones::get_zone_by();
|
36 |
+
$data['shipping_methods_by_title'] = array();
|
37 |
+
$data['shipping_zones_by_name'] = array();
|
38 |
+
foreach ( $zones as $zone ) {
|
39 |
+
if ( empty( $data['shipping_zones_by_name'][ $zone->get_zone_name() ] ) ) {
|
40 |
+
$data['shipping_zones_by_name'][ $zone->get_zone_name() ] = 1;
|
41 |
+
} else {
|
42 |
+
$data['shipping_zones_by_name'][ $zone->get_zone_name() ] ++;
|
43 |
+
}
|
44 |
+
foreach ( $zone->get_shipping_methods() as $shipping_method ) {
|
45 |
+
if ( empty( $data['shipping_methods_by_title'][ $shipping_method->method_title ] ) ) {
|
46 |
+
$data['shipping_methods_by_title'][ $shipping_method->method_title ] = 1;
|
47 |
+
} else {
|
48 |
+
$data['shipping_methods_by_title'][ $shipping_method->method_title ] ++;
|
49 |
+
}
|
50 |
+
}
|
51 |
+
}
|
52 |
+
}
|
53 |
+
|
54 |
+
return $data;
|
55 |
+
}
|
56 |
+
|
57 |
+
}
|
58 |
+
|
59 |
+
}
|
60 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-shipping-methods.php
ADDED
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_Shipping_Methods' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_Shipping_Methods
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_Shipping_Methods implements WPDesk_Tracker_Data_Provider {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Get a list of all active shipping methods.
|
25 |
+
*
|
26 |
+
* @return array Data provided to tracker.
|
27 |
+
*/
|
28 |
+
public function get_data() {
|
29 |
+
|
30 |
+
$active_methods = array();
|
31 |
+
$shipping_methods = WC()->shipping->get_shipping_methods();
|
32 |
+
foreach ( $shipping_methods as $id => $shipping_method ) {
|
33 |
+
if ( isset( $shipping_method->enabled ) && 'yes' === $shipping_method->enabled ) {
|
34 |
+
$active_methods[ $id ] = array(
|
35 |
+
'title' => $shipping_method->title,
|
36 |
+
'tax_status' => $shipping_method->tax_status
|
37 |
+
);
|
38 |
+
}
|
39 |
+
}
|
40 |
+
|
41 |
+
return ['shipping_methods' => $active_methods];
|
42 |
+
}
|
43 |
+
|
44 |
+
}
|
45 |
+
|
46 |
+
}
|
47 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-templates.php
ADDED
@@ -0,0 +1,65 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_Templates' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_Templates
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_Templates implements WPDesk_Tracker_Data_Provider {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Look for any template override and return filenames.
|
25 |
+
*
|
26 |
+
* @return array Data provided to tracker.
|
27 |
+
*/
|
28 |
+
public function get_data() {
|
29 |
+
$override_data = array();
|
30 |
+
$template_paths = apply_filters( 'woocommerce_template_overrides_scan_paths', array( 'WooCommerce' => WC()->plugin_path() . '/templates/' ) );
|
31 |
+
$scanned_files = array();
|
32 |
+
|
33 |
+
require_once( WC()->plugin_path() . '/includes/admin/class-wc-admin-status.php' );
|
34 |
+
|
35 |
+
foreach ( $template_paths as $plugin_name => $template_path ) {
|
36 |
+
$scanned_files[ $plugin_name ] = WC_Admin_Status::scan_template_files( $template_path );
|
37 |
+
}
|
38 |
+
|
39 |
+
foreach ( $scanned_files as $plugin_name => $files ) {
|
40 |
+
foreach ( $files as $file ) {
|
41 |
+
if ( file_exists( get_stylesheet_directory() . '/' . $file ) ) {
|
42 |
+
$theme_file = get_stylesheet_directory() . '/' . $file;
|
43 |
+
} elseif ( file_exists( get_stylesheet_directory() . '/woocommerce/' . $file ) ) {
|
44 |
+
$theme_file = get_stylesheet_directory() . '/woocommerce/' . $file;
|
45 |
+
} elseif ( file_exists( get_template_directory() . '/' . $file ) ) {
|
46 |
+
$theme_file = get_template_directory() . '/' . $file;
|
47 |
+
} elseif ( file_exists( get_template_directory() . '/woocommerce/' . $file ) ) {
|
48 |
+
$theme_file = get_template_directory() . '/woocommerce/' . $file;
|
49 |
+
} else {
|
50 |
+
$theme_file = false;
|
51 |
+
}
|
52 |
+
|
53 |
+
if ( false !== $theme_file ) {
|
54 |
+
$override_data[] = basename( $theme_file );
|
55 |
+
}
|
56 |
+
}
|
57 |
+
}
|
58 |
+
|
59 |
+
return ['template_overrides' => $override_data];
|
60 |
+
}
|
61 |
+
|
62 |
+
}
|
63 |
+
|
64 |
+
}
|
65 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-theme.php
ADDED
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_Theme' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_Theme
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_Theme implements WPDesk_Tracker_Data_Provider {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Get the current theme info, theme name and version.
|
25 |
+
*
|
26 |
+
* @return array Data provided to tracker.
|
27 |
+
*/
|
28 |
+
public function get_data() {
|
29 |
+
$theme_data = wp_get_theme();
|
30 |
+
$theme_child_theme = is_child_theme() ? 'Yes' : 'No';
|
31 |
+
|
32 |
+
return [
|
33 |
+
'theme' => array(
|
34 |
+
'name' => $theme_data->Name,
|
35 |
+
'version' => $theme_data->Version,
|
36 |
+
'child_theme' => $theme_child_theme,
|
37 |
+
)
|
38 |
+
];
|
39 |
+
}
|
40 |
+
|
41 |
+
}
|
42 |
+
|
43 |
+
}
|
44 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-user-agent.php
ADDED
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_User_Agent' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_User_Agent
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_User_Agent implements WPDesk_Tracker_Data_Provider {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* When an admin user logs in, there user agent is tracked in user meta and collected here.
|
25 |
+
*
|
26 |
+
* @return array Data provided to tracker.
|
27 |
+
*/
|
28 |
+
public function get_data() {
|
29 |
+
return [ 'admin_user_agents' => array_filter( (array) get_option( 'woocommerce_tracker_ua', array() ) ) ];
|
30 |
+
}
|
31 |
+
|
32 |
+
}
|
33 |
+
|
34 |
+
}
|
35 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-users.php
ADDED
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_Users' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_Users
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_Users implements WPDesk_Tracker_Data_Provider {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Get user totals based on user role.
|
25 |
+
*
|
26 |
+
* @return array Data provided to tracker.
|
27 |
+
*/
|
28 |
+
public function get_data() {
|
29 |
+
$user_count = array();
|
30 |
+
$user_count_data = count_users();
|
31 |
+
$user_count['total'] = $user_count_data['total_users'];
|
32 |
+
|
33 |
+
// Get user count based on user role
|
34 |
+
foreach ( $user_count_data['avail_roles'] as $role => $count ) {
|
35 |
+
$user_count[ $role ] = $count;
|
36 |
+
}
|
37 |
+
|
38 |
+
return ['users' => $user_count];
|
39 |
+
}
|
40 |
+
|
41 |
+
}
|
42 |
+
|
43 |
+
}
|
44 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-wordpress.php
ADDED
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_Wordpress' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_Wordpress
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_Wordpress implements WPDesk_Tracker_Data_Provider {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Get WordPress related data.
|
25 |
+
*
|
26 |
+
* @return array Data provided to tracker.
|
27 |
+
*/
|
28 |
+
public function get_data() {
|
29 |
+
$wp_data = array();
|
30 |
+
|
31 |
+
$memory = wc_let_to_num( WP_MEMORY_LIMIT );
|
32 |
+
|
33 |
+
if ( function_exists( 'memory_get_usage' ) ) {
|
34 |
+
$system_memory = wc_let_to_num( @ini_get( 'memory_limit' ) );
|
35 |
+
$memory = max( $memory, $system_memory );
|
36 |
+
}
|
37 |
+
|
38 |
+
$wp_data['memory_limit'] = size_format( $memory );
|
39 |
+
$wp_data['debug_mode'] = ( defined( 'WP_DEBUG' ) && WP_DEBUG ) ? 'Yes' : 'No';
|
40 |
+
$wp_data['locale'] = get_locale();
|
41 |
+
$wp_data['version'] = get_bloginfo( 'version' );
|
42 |
+
$wp_data['multisite'] = is_multisite() ? 'Yes' : 'No';
|
43 |
+
|
44 |
+
return ['wp' => $wp_data];
|
45 |
+
}
|
46 |
+
|
47 |
+
}
|
48 |
+
|
49 |
+
}
|
50 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider.php
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider' ) ) {
|
17 |
+
|
18 |
+
interface WPDesk_Tracker_Data_Provider {
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Provides data
|
22 |
+
*
|
23 |
+
* @return array Data provided to tracker.
|
24 |
+
*/
|
25 |
+
public function get_data();
|
26 |
+
|
27 |
+
}
|
28 |
+
|
29 |
+
}
|
30 |
+
|
inc/wpdesk-tracker/sender/Exception/class-wpdesk-tracker-sender-exception-wperror.php
ADDED
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
}
|
6 |
+
|
7 |
+
if ( ! class_exists( 'WPDesk_Tracker_Sender_Exception_WpError' ) ) {
|
8 |
+
|
9 |
+
class WPDesk_Tracker_Sender_Exception_WpError extends RuntimeException {
|
10 |
+
public function __construct( $message = "", WP_Error $wp_error ) {
|
11 |
+
$message = $message . ' WP_Error: ' . $wp_error->get_error_message();
|
12 |
+
parent::__construct( $message, $wp_error->get_error_code() );
|
13 |
+
}
|
14 |
+
}
|
15 |
+
|
16 |
+
}
|
17 |
+
|
inc/wpdesk-tracker/sender/class-wpdesk-tracker-sender-logged.php
ADDED
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
}
|
6 |
+
|
7 |
+
if ( ! class_exists( 'WPDesk_Tracker_Sender_Logged' ) ) {
|
8 |
+
|
9 |
+
class WPDesk_Tracker_Sender_Logged implements WPDesk_Tracker_Sender {
|
10 |
+
|
11 |
+
const LOGGER_SOURCE = 'wpdesk-sender';
|
12 |
+
|
13 |
+
/**
|
14 |
+
* Decorated sender.
|
15 |
+
*
|
16 |
+
* @var WPDesk_Tracker_Sender
|
17 |
+
*/
|
18 |
+
private $sender;
|
19 |
+
|
20 |
+
/**
|
21 |
+
* WPDesk_Tracker_Sender_Logged constructor.
|
22 |
+
*
|
23 |
+
* @param WPDesk_Tracker_Sender $sender Sender to decorate.
|
24 |
+
*/
|
25 |
+
|
26 |
+
public function __construct(WPDesk_Tracker_Sender $sender) {
|
27 |
+
$this->sender = $sender;
|
28 |
+
}
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Sends payload logging payload and the response.
|
32 |
+
*
|
33 |
+
* @param array $payload Payload to send.
|
34 |
+
*
|
35 |
+
* @throws WPDesk_Tracker_Sender_Exception_WpError Error if send failed.
|
36 |
+
*
|
37 |
+
* @return array If succeeded. Array containing 'headers', 'body', 'response', 'cookies', 'filename'.
|
38 |
+
*/
|
39 |
+
public function send_payload(array $payload) {
|
40 |
+
if (class_exists('WPDesk_Logger_Factory')) {
|
41 |
+
WPDesk_Logger_Factory::log_message("Sender payload: " . json_encode($payload), self::LOGGER_SOURCE, WPDesk_Logger::DEBUG);
|
42 |
+
try {
|
43 |
+
$response = $this->sender->send_payload($payload);
|
44 |
+
WPDesk_Logger_Factory::log_message('Sender response: ' . json_encode($response), self::LOGGER_SOURCE, WPDesk_Logger::DEBUG);
|
45 |
+
return $response;
|
46 |
+
} catch (WPDesk_Tracker_Sender_Exception_WpError $exception) {
|
47 |
+
WPDesk_Logger_Factory::log_exception($exception);
|
48 |
+
throw $exception;
|
49 |
+
}
|
50 |
+
} else {
|
51 |
+
return $this->sender->send_payload($payload);
|
52 |
+
}
|
53 |
+
}
|
54 |
+
}
|
55 |
+
}
|
56 |
+
|
inc/wpdesk-tracker/sender/class-wpdesk-tracker-sender-wordpress-to-wpdesk.php
ADDED
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
}
|
6 |
+
|
7 |
+
if ( ! class_exists( 'WPDesk_Tracker_Sender_Wordpress_To_WPDesk' ) ) {
|
8 |
+
|
9 |
+
class WPDesk_Tracker_Sender_Wordpress_To_WPDesk implements WPDesk_Tracker_Sender {
|
10 |
+
|
11 |
+
/**
|
12 |
+
* URL to the WP Desk Tracker API endpoint.
|
13 |
+
* @var string
|
14 |
+
*/
|
15 |
+
private $api_url = 'https://data.wpdesk.org/?track=1';
|
16 |
+
|
17 |
+
private $test_api_url = 'https://testdata.wpdesk.org/?track=1';
|
18 |
+
|
19 |
+
private function get_api_url() {
|
20 |
+
$api_url = $this->api_url;
|
21 |
+
if ( apply_filters( 'wpdesk_tracker_use_testdata', false ) ) {
|
22 |
+
$api_url = $this->test_api_url;
|
23 |
+
}
|
24 |
+
|
25 |
+
return $api_url;
|
26 |
+
}
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Sends payload to predefined receiver.
|
30 |
+
*
|
31 |
+
* @param array $payload Payload to send.
|
32 |
+
*
|
33 |
+
* @throws WPDesk_Tracker_Sender_Exception_WpError Error if send failed.
|
34 |
+
*
|
35 |
+
* @return array If succeeded. Array containing 'headers', 'body', 'response', 'cookies', 'filename'.
|
36 |
+
*/
|
37 |
+
public function send_payload( array $payload ) {
|
38 |
+
$response = wp_remote_post( $this->get_api_url(), array(
|
39 |
+
'method' => 'POST',
|
40 |
+
'timeout' => 5,
|
41 |
+
'redirection' => 5,
|
42 |
+
'httpversion' => '1.0',
|
43 |
+
'blocking' => false,
|
44 |
+
'headers' => array( 'user-agent' => 'WPDeskTracker' ),
|
45 |
+
'body' => json_encode( $payload ),
|
46 |
+
'cookies' => array(),
|
47 |
+
)
|
48 |
+
);
|
49 |
+
|
50 |
+
if ( $response instanceof WP_Error ) {
|
51 |
+
throw new WPDesk_Tracker_Sender_Exception_WpError( 'Payload send error', $response );
|
52 |
+
} else {
|
53 |
+
return $response;
|
54 |
+
}
|
55 |
+
}
|
56 |
+
|
57 |
+
}
|
58 |
+
|
59 |
+
}
|
60 |
+
|
inc/wpdesk-tracker/sender/class-wpdesk-tracker-sender.php
ADDED
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
}
|
6 |
+
|
7 |
+
if ( ! class_exists( 'WPDesk_Tracker_Sender' ) ) {
|
8 |
+
|
9 |
+
interface WPDesk_Tracker_Sender {
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Sends payload to predefined receiver.
|
13 |
+
*
|
14 |
+
* @param array $payload Payload to send.
|
15 |
+
*
|
16 |
+
* @return array If succeeded. Array containing 'headers', 'body', 'response', 'cookies', 'filename'.
|
17 |
+
*/
|
18 |
+
public function send_payload( array $payload );
|
19 |
+
|
20 |
+
}
|
21 |
+
|
22 |
+
}
|
23 |
+
|
inc/wpdesk-tracker/views/tracker-connect.php
CHANGED
@@ -5,7 +5,7 @@
|
|
5 |
|
6 |
<p>
|
7 |
<?php printf ( __( 'Hey %s,', 'wpdesk-tracker'), $username ); ?><br/>
|
8 |
-
<?php _e( 'Please help us improve our plugins! If you opt-in, we will collect some non-sensitive data and usage information. If you skip this, that\'s okay! All plugins will work just fine.', 'wpdesk-tracker' ); ?>
|
9 |
</p>
|
10 |
</div>
|
11 |
|
@@ -24,7 +24,7 @@
|
|
24 |
<i class="dashicons dashicons-admin-settings"></i>
|
25 |
<div>
|
26 |
<span><?php _e( 'Your Site Overview', 'wpdesk-tracker' ); ?></span>
|
27 |
-
<p><?php _e( '
|
28 |
</div>
|
29 |
</li>
|
30 |
<li id="permission-events" class="permission events">
|
@@ -38,14 +38,7 @@
|
|
38 |
<i class="dashicons dashicons-store"></i>
|
39 |
<div>
|
40 |
<span><?php _e( 'Your Store Overview', 'wpdesk-tracker' ); ?></span>
|
41 |
-
<p><?php _e( '
|
42 |
-
</div>
|
43 |
-
</li>
|
44 |
-
<li id="permission-notices" class="permission notices">
|
45 |
-
<i class="dashicons dashicons-testimonial"></i>
|
46 |
-
<div>
|
47 |
-
<span><?php _e( 'Admin Updates', 'wpdesk-tracker' ); ?></span>
|
48 |
-
<p><?php _e( 'Announcements, updates, marketing, no spam and easy opt-out', 'wpdesk-tracker' ); ?></p>
|
49 |
</div>
|
50 |
</li>
|
51 |
</ul>
|
5 |
|
6 |
<p>
|
7 |
<?php printf ( __( 'Hey %s,', 'wpdesk-tracker'), $username ); ?><br/>
|
8 |
+
<?php _e( 'Please help us improve our plugins! If you opt-in, we will collect some non-sensitive data and usage information anonymously. If you skip this, that\'s okay! All plugins will work just fine.', 'wpdesk-tracker' ); ?>
|
9 |
</p>
|
10 |
</div>
|
11 |
|
24 |
<i class="dashicons dashicons-admin-settings"></i>
|
25 |
<div>
|
26 |
<span><?php _e( 'Your Site Overview', 'wpdesk-tracker' ); ?></span>
|
27 |
+
<p><?php _e( 'WP version, PHP info', 'wpdesk-tracker' ); ?></p>
|
28 |
</div>
|
29 |
</li>
|
30 |
<li id="permission-events" class="permission events">
|
38 |
<i class="dashicons dashicons-store"></i>
|
39 |
<div>
|
40 |
<span><?php _e( 'Your Store Overview', 'wpdesk-tracker' ); ?></span>
|
41 |
+
<p><?php _e( 'Anonymized and non-sensitive store usage information', 'wpdesk-tracker' ); ?></p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
42 |
</div>
|
43 |
</li>
|
44 |
</ul>
|
inc/wpdesk-tracker/views/tracker-notice.php
CHANGED
@@ -1,62 +1,17 @@
|
|
1 |
<?php if ( ! defined( 'ABSPATH' ) ) { exit; } ?>
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
); ?>
|
14 |
-
</p>
|
15 |
-
<p>
|
16 |
-
<button id="wpdesk_tracker_allow_coupon_button_notice" class="button button-primary"><?php _e( 'Allow', 'wpdesk-tracker' ); ?></button>
|
17 |
-
</p>
|
18 |
-
</div>
|
19 |
-
<?php else : ?>
|
20 |
-
<div id="wpdesk_tracker_notice" class="updated notice wpdesk_tracker_notice is-dismissible">
|
21 |
-
<p>
|
22 |
-
<?php printf ( __( 'Hey %s,', 'wpdesk-tracker'), $username ); ?><br/>
|
23 |
-
<?php _e( 'Please help us improve our plugins! If you opt-in, we will collect some non-sensitive data and usage information. If you skip this, that\'s okay! All plugins will work just fine.', 'wpdesk-tracker'); ?>
|
24 |
-
<a href="<?php echo $terms_url; ?>" target="_blank"><?php _e( 'Find out more »', 'wpdesk-tracker' ); ?></a>
|
25 |
-
</p>
|
26 |
-
<p>
|
27 |
-
<button id="wpdesk_tracker_allow_button_notice" class="button button-primary"><?php _e( 'Allow', 'wpdesk-tracker' ); ?></button>
|
28 |
-
</p>
|
29 |
-
</div>
|
30 |
-
<?php endif; ?>
|
31 |
|
32 |
<script type="text/javascript">
|
33 |
-
jQuery(document).on('click', '#wpdesk_tracker_notice_coupon .notice-dismiss',function(e){
|
34 |
-
e.preventDefault();
|
35 |
-
console.log('dismiss');
|
36 |
-
jQuery.ajax( '<?php echo admin_url('admin-ajax.php'); ?>',
|
37 |
-
{
|
38 |
-
type: 'POST',
|
39 |
-
data: {
|
40 |
-
action: 'wpdesk_tracker_notice_handler',
|
41 |
-
type: 'dismiss_coupon',
|
42 |
-
}
|
43 |
-
}
|
44 |
-
);
|
45 |
-
})
|
46 |
-
jQuery(document).on('click', '#wpdesk_tracker_allow_coupon_button_notice',function(e){
|
47 |
-
e.preventDefault();
|
48 |
-
console.log('allow');
|
49 |
-
jQuery.ajax( '<?php echo admin_url('admin-ajax.php'); ?>',
|
50 |
-
{
|
51 |
-
type: 'POST',
|
52 |
-
data: {
|
53 |
-
action: 'wpdesk_tracker_notice_handler',
|
54 |
-
type: 'allow_coupon',
|
55 |
-
}
|
56 |
-
}
|
57 |
-
);
|
58 |
-
jQuery('#wpdesk_tracker_notice_coupon').hide();
|
59 |
-
});
|
60 |
jQuery(document).on('click', '#wpdesk_tracker_notice .notice-dismiss',function(e){
|
61 |
e.preventDefault();
|
62 |
console.log('dismiss');
|
1 |
<?php if ( ! defined( 'ABSPATH' ) ) { exit; } ?>
|
2 |
+
|
3 |
+
<div id="wpdesk_tracker_notice" class="updated notice wpdesk_tracker_notice is-dismissible">
|
4 |
+
<p>
|
5 |
+
<?php printf ( __( 'Hey %s,', 'wpdesk-tracker'), $username ); ?><br/>
|
6 |
+
<?php _e( 'We need your help to improve <strong>WP Desk plugins</strong>, so they are more useful for you and the rest of <strong>30,000+ users</strong>. By collecting data on how you use our plugins, you will help us a lot. We will not collect any sensitive data, so you can feel safe.', 'wpdesk-tracker'); ?>
|
7 |
+
<a href="<?php echo $terms_url; ?>" target="_blank"><?php _e( 'Find out more »', 'wpdesk-tracker' ); ?></a>
|
8 |
+
</p>
|
9 |
+
<p>
|
10 |
+
<button id="wpdesk_tracker_allow_button_notice" class="button button-primary"><?php _e( 'Allow', 'wpdesk-tracker' ); ?></button>
|
11 |
+
</p>
|
12 |
+
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
|
14 |
<script type="text/javascript">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15 |
jQuery(document).on('click', '#wpdesk_tracker_notice .notice-dismiss',function(e){
|
16 |
e.preventDefault();
|
17 |
console.log('dismiss');
|
lang/flexible-checkout-fields-pl_PL.mo
CHANGED
Binary file
|
lang/flexible-checkout-fields-pl_PL.po
CHANGED
@@ -1,15 +1,15 @@
|
|
1 |
msgid ""
|
2 |
msgstr ""
|
3 |
"Project-Id-Version: WooCommerce Flexible Checkout Fields\n"
|
4 |
-
"POT-Creation-Date: 2018-
|
5 |
-
"PO-Revision-Date: 2018-
|
6 |
"Last-Translator: Piotr Jabłonowski <piotr.jablonowski@wpdesk.net>\n"
|
7 |
"Language-Team: Maciej Swoboda <maciej.swoboda@gmail.com>\n"
|
8 |
"Language: pl_PL\n"
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
12 |
-
"X-Generator: Poedit 2.0.
|
13 |
"X-Poedit-Basepath: ..\n"
|
14 |
"X-Poedit-WPHeader: flexible-checkout-fields.php\n"
|
15 |
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
|
@@ -21,27 +21,32 @@ msgstr ""
|
|
21 |
"X-Poedit-SearchPath-0: .\n"
|
22 |
"X-Poedit-SearchPathExcluded-0: *.js\n"
|
23 |
|
24 |
-
#: classes/display-options.php:
|
25 |
msgid "Additional Information"
|
26 |
msgstr "Dodatkowe informacje"
|
27 |
|
28 |
-
#: classes/filed-validation.php:
|
|
|
|
|
|
|
|
|
|
|
29 |
msgid "Default"
|
30 |
msgstr "Domyślna"
|
31 |
|
32 |
-
#: classes/filed-validation.php:
|
33 |
msgid "None"
|
34 |
msgstr "Brak"
|
35 |
|
36 |
-
#: classes/filed-validation.php:
|
37 |
msgid "Email"
|
38 |
msgstr "Email"
|
39 |
|
40 |
-
#: classes/filed-validation.php:
|
41 |
msgid "Phone"
|
42 |
msgstr "Numer telefonu"
|
43 |
|
44 |
-
#: classes/filed-validation.php:
|
45 |
msgid "Post code"
|
46 |
msgstr "Kod pocztowy"
|
47 |
|
@@ -69,7 +74,7 @@ msgstr ""
|
|
69 |
"Notatka do twojego zamówienia, np. informacje o dostarczeniu przesyłki."
|
70 |
|
71 |
#: classes/settings.php:147 classes/views/settings-settings.php:11
|
72 |
-
#: classes/wpdesk/class-plugin.php:209 flexible-checkout-fields.php:
|
73 |
msgid "Settings"
|
74 |
msgstr "Ustawienia"
|
75 |
|
@@ -77,16 +82,16 @@ msgstr "Ustawienia"
|
|
77 |
msgid "Custom Sections"
|
78 |
msgstr "Dodatkowe sekcje"
|
79 |
|
80 |
-
#: classes/settings.php:
|
81 |
#, php-format
|
82 |
msgid "You cannot use this field name: %s, for field: %s."
|
83 |
msgstr "Nie możesz użyć tej nazwy pola: %s dla pola: %s."
|
84 |
|
85 |
-
#: classes/tracker.php:
|
86 |
msgid "Opt-in"
|
87 |
msgstr "Opt-in"
|
88 |
|
89 |
-
#: classes/tracker.php:
|
90 |
msgid "Opt-out"
|
91 |
msgstr "Opt-out"
|
92 |
|
@@ -103,128 +108,129 @@ msgstr ""
|
|
103 |
"Jeśli chcesz używać Flexible Checkout Fields za darmo, prosimy %sdodaj swoją "
|
104 |
"opinię%s. Pomożesz nam wspierać darmową wersję. Dziękujemy."
|
105 |
|
106 |
-
#: classes/views/settings-fields.php:
|
107 |
msgid "Thank You Page"
|
108 |
msgstr "Strona podziękowania"
|
109 |
|
110 |
-
#: classes/views/settings-fields.php:
|
111 |
msgid "My Account - address"
|
112 |
msgstr "Moje konto - adres"
|
113 |
|
114 |
-
#: classes/views/settings-fields.php:
|
115 |
msgid "My Account - order"
|
116 |
msgstr "Moje konto - zamówienie"
|
117 |
|
118 |
-
#: classes/views/settings-fields.php:
|
119 |
msgid "Emails"
|
120 |
msgstr "E-maile"
|
121 |
|
122 |
-
#: classes/views/settings-fields.php:
|
123 |
msgid "Settings resetted."
|
124 |
msgstr "Ustawienia zostały zresetowane."
|
125 |
|
126 |
-
#: classes/views/settings-fields.php:
|
127 |
msgid "Settings saved."
|
128 |
msgstr "Ustawienia zostały zapisane."
|
129 |
|
130 |
-
#: classes/views/settings-fields.php:
|
131 |
msgid "Add New Field"
|
132 |
msgstr "Dodaj nowe pole"
|
133 |
|
134 |
-
#: classes/views/settings-fields.php:
|
135 |
-
#: classes/views/settings-fields.php:
|
136 |
msgid "Field Type"
|
137 |
msgstr "Typ pola"
|
138 |
|
139 |
-
#: classes/views/settings-fields.php:
|
140 |
-
#: classes/views/settings-fields.php:
|
141 |
msgid "Label"
|
142 |
msgstr "Etykieta"
|
143 |
|
144 |
-
#: classes/views/settings-fields.php:
|
145 |
-
#: classes/views/settings-fields.php:
|
146 |
msgid "You can use HTML."
|
147 |
msgstr "Możesz używać HTML."
|
148 |
|
149 |
-
#: classes/views/settings-fields.php:
|
150 |
-
|
151 |
-
|
|
|
152 |
|
153 |
-
#: classes/views/settings-fields.php:
|
154 |
#, php-format
|
155 |
msgid "Meta name: %s."
|
156 |
msgstr "Nazwa meta: %s."
|
157 |
|
158 |
-
#: classes/views/settings-fields.php:
|
159 |
msgid "This field is available in the PRO version."
|
160 |
msgstr "To pole jest dostępne w wersji PRO."
|
161 |
|
162 |
-
#: classes/views/settings-fields.php:
|
163 |
msgid "Upgrade to PRO now →"
|
164 |
msgstr "Zaktualizuj do PRO →"
|
165 |
|
166 |
-
#: classes/views/settings-fields.php:
|
167 |
msgid "Section"
|
168 |
msgstr "Sekcja"
|
169 |
|
170 |
-
#: classes/views/settings-fields.php:
|
171 |
msgid "Save changes after adding a field."
|
172 |
msgstr "Zapisz zmiany po dodaniu pola."
|
173 |
|
174 |
-
#: classes/views/settings-fields.php:
|
175 |
msgid "Add Field"
|
176 |
msgstr "Dodaj pole"
|
177 |
|
178 |
-
#: classes/views/settings-fields.php:
|
179 |
msgid "Edit Section"
|
180 |
msgstr "Edytuj sekcję"
|
181 |
|
182 |
-
#: classes/views/settings-fields.php:
|
183 |
#: classes/views/settings-settings.php:35
|
184 |
msgid "Save Changes"
|
185 |
msgstr "Zapisz zmiany"
|
186 |
|
187 |
-
#: classes/views/settings-fields.php:
|
188 |
msgid "Section Fields"
|
189 |
msgstr "Pola sekcji"
|
190 |
|
191 |
-
#: classes/views/settings-fields.php:
|
192 |
msgid "Edit"
|
193 |
msgstr "Edytuj"
|
194 |
|
195 |
-
#: classes/views/settings-fields.php:
|
196 |
msgid "General"
|
197 |
msgstr "Główne"
|
198 |
|
199 |
-
#: classes/views/settings-fields.php:
|
200 |
msgid "Appearance"
|
201 |
msgstr "Wygląd"
|
202 |
|
203 |
-
#: classes/views/settings-fields.php:
|
204 |
msgid "Display On"
|
205 |
msgstr "Wyświetlanie"
|
206 |
|
207 |
-
#: classes/views/settings-fields.php:
|
208 |
msgid "Enable Field"
|
209 |
msgstr "Pokaż pole"
|
210 |
|
211 |
-
#: classes/views/settings-fields.php:
|
212 |
msgid "Required Field"
|
213 |
msgstr "Pole wymagane"
|
214 |
|
215 |
-
#: classes/views/settings-fields.php:
|
216 |
msgid "Validation"
|
217 |
msgstr "Walidacja"
|
218 |
|
219 |
-
#: classes/views/settings-fields.php:
|
220 |
msgid "For Post Code validation works only with country."
|
221 |
msgstr "Dla walidacji kodu pocztowego musi być wybrany kraj."
|
222 |
|
223 |
-
#: classes/views/settings-fields.php:
|
224 |
msgid "Options"
|
225 |
msgstr "Opcje"
|
226 |
|
227 |
-
#: classes/views/settings-fields.php:
|
228 |
msgid ""
|
229 |
"Format: <code>Value : Name</code>. Value will be in the code, name will be "
|
230 |
"visible to the user. One option per line. Example:<br /><code>woman : I am a "
|
@@ -235,41 +241,41 @@ msgstr ""
|
|
235 |
"Przykład:<br /><code>kobieta : Jestem kobietą</code><br /><code>mezczyzna : "
|
236 |
"Jestem mężczyzną</code>"
|
237 |
|
238 |
-
#: classes/views/settings-fields.php:
|
239 |
-
#: classes/views/settings-fields.php:
|
240 |
msgid "Placeholder"
|
241 |
msgstr "Placeholder"
|
242 |
|
243 |
-
#: classes/views/settings-fields.php:
|
244 |
msgid "This field is address locale dependent and cannot be modified."
|
245 |
-
msgstr "Nazwa tego pola nie może
|
246 |
|
247 |
-
#: classes/views/settings-fields.php:
|
248 |
msgid "CSS Class"
|
249 |
msgstr "Klasa CSS"
|
250 |
|
251 |
-
#: classes/views/settings-fields.php:
|
252 |
msgid "Delete Field"
|
253 |
msgstr "Usuń pole"
|
254 |
|
255 |
-
#: classes/views/settings-fields.php:
|
256 |
msgid "Reset Section Settings"
|
257 |
msgstr "Resetuj ustawienia sekcji"
|
258 |
|
259 |
-
#: classes/views/settings-fields.php:
|
260 |
#, php-format
|
261 |
msgid "Invalid field name: %s. The name already exists."
|
262 |
msgstr "Błędna nazwa pola: %s. Ta nazwa już istnieje."
|
263 |
|
264 |
-
#: classes/views/settings-fields.php:
|
265 |
msgid "Field name can not be empty!"
|
266 |
msgstr "Nazwa pola nie może być pusta!"
|
267 |
|
268 |
-
#: classes/views/settings-fields.php:
|
269 |
msgid "Field name can not be number!"
|
270 |
msgstr "Nazwa pola nie może być numerem!"
|
271 |
|
272 |
-
#: classes/views/settings-fields.php:
|
273 |
msgid ""
|
274 |
"Invalid field name. Field name can contains only lower case letters, digits "
|
275 |
"and _ (underline) character!"
|
@@ -277,23 +283,15 @@ msgstr ""
|
|
277 |
"Błędna nazwa pola. Nazwa pola może zawierać jedynie małe litery, cyfry oraz "
|
278 |
"_ (znak podkreślenia)!"
|
279 |
|
280 |
-
#: classes/views/settings-fields.php:
|
281 |
-
msgid "Changing this field..."
|
282 |
-
msgstr "Zmiana pola..."
|
283 |
-
|
284 |
-
#: classes/views/settings-fields.php:667
|
285 |
-
msgid "Name"
|
286 |
-
msgstr "Nazwa"
|
287 |
-
|
288 |
-
#: classes/views/settings-fields.php:669
|
289 |
msgid "Meta name: "
|
290 |
msgstr "Meta name: "
|
291 |
|
292 |
-
#: classes/views/settings-fields.php:
|
293 |
msgid "Field label can not be empty!"
|
294 |
msgstr "Etykieta pola nie może być pusta!"
|
295 |
|
296 |
-
#: classes/views/settings-fields.php:
|
297 |
#, php-format
|
298 |
msgid ""
|
299 |
"Do you really want to delete this field: %s? Deleting a field remove it from "
|
@@ -302,7 +300,7 @@ msgstr ""
|
|
302 |
"Czy na pewno chcesz usunąć to pole: %s? Doprowadzi to do usunięcia pola "
|
303 |
"również we wszystkich zamówieniach."
|
304 |
|
305 |
-
#: classes/views/settings-fields.php:
|
306 |
msgid ""
|
307 |
"Do you really want to reset section settings?. Resetting a section remove "
|
308 |
"all added fields from orders."
|
@@ -374,11 +372,11 @@ msgstr ""
|
|
374 |
"Klucz licencyjny wtyczki %s%s%s nie został aktywowany, więc wtyczka jest "
|
375 |
"nieaktywna! %sKliknij tutaj%s, aby aktywować klucz licencyjny wtyczki."
|
376 |
|
377 |
-
#: classes/wpdesk/class-plugin.php:196 flexible-checkout-fields.php:
|
378 |
msgid "Support"
|
379 |
msgstr "Wsparcie"
|
380 |
|
381 |
-
#: classes/wpdesk/class-plugin.php:202 flexible-checkout-fields.php:
|
382 |
msgid "Docs"
|
383 |
msgstr "Docs"
|
384 |
|
@@ -427,107 +425,105 @@ msgid ""
|
|
427 |
"The callback function used for the <strong>%s</strong> setting is missing."
|
428 |
msgstr "Brakuje funkcji callback użytej w ustawieniu <strong>%s</strong>."
|
429 |
|
430 |
-
#: flexible-checkout-fields.php:
|
431 |
msgid "Billing"
|
432 |
msgstr "Płatność"
|
433 |
|
434 |
-
#: flexible-checkout-fields.php:
|
435 |
msgid "Shipping"
|
436 |
msgstr "Wysyłka"
|
437 |
|
438 |
-
#: flexible-checkout-fields.php:
|
439 |
msgid "Order"
|
440 |
msgstr "Zamówienie"
|
441 |
|
442 |
-
#: flexible-checkout-fields.php:
|
443 |
msgid "Single Line Text"
|
444 |
msgstr "Pojedyncza linia (input)"
|
445 |
|
446 |
-
#: flexible-checkout-fields.php:
|
447 |
msgid "Paragraph Text"
|
448 |
msgstr "Obszar tekstowy (textarea)"
|
449 |
|
450 |
-
#: flexible-checkout-fields.php:
|
451 |
msgid "Checkbox"
|
452 |
msgstr "Wybór (checkbox)"
|
453 |
|
454 |
-
#: flexible-checkout-fields.php:
|
455 |
msgid "Radio button"
|
456 |
msgstr "Wybór (radio)"
|
457 |
|
458 |
-
#: flexible-checkout-fields.php:
|
459 |
msgid "Select (Drop Down)"
|
460 |
msgstr "Lista rozwijana (select)"
|
461 |
|
462 |
-
#: flexible-checkout-fields.php:
|
463 |
msgid "Date"
|
464 |
msgstr "Data"
|
465 |
|
466 |
-
#: flexible-checkout-fields.php:
|
467 |
msgid "Time"
|
468 |
msgstr "Czas"
|
469 |
|
470 |
-
#: flexible-checkout-fields.php:
|
471 |
msgid "Color Picker"
|
472 |
msgstr "Wybór koloru"
|
473 |
|
474 |
-
#: flexible-checkout-fields.php:
|
475 |
msgid "Headline"
|
476 |
msgstr "Nagłówek"
|
477 |
|
478 |
-
#: flexible-checkout-fields.php:
|
479 |
msgid "HTML"
|
480 |
msgstr "HTML"
|
481 |
|
482 |
-
#: flexible-checkout-fields.php:
|
483 |
msgid "File Upload"
|
484 |
msgstr "Przesyłanie pliku"
|
485 |
|
486 |
-
#: flexible-checkout-fields.php:
|
487 |
msgid "Uploading file..."
|
488 |
msgstr "Przesyłanie plik..."
|
489 |
|
490 |
-
#: flexible-checkout-fields.php:
|
491 |
msgid "Close"
|
492 |
msgstr "Zamknij"
|
493 |
|
494 |
-
#: flexible-checkout-fields.php:
|
495 |
msgid "Today"
|
496 |
msgstr "Dzisiaj"
|
497 |
|
498 |
-
#: flexible-checkout-fields.php:
|
499 |
msgid "Next"
|
500 |
msgstr "Następny"
|
501 |
|
502 |
-
#: flexible-checkout-fields.php:
|
503 |
msgid "Previous"
|
504 |
msgstr "Poprzedni"
|
505 |
|
506 |
-
#: flexible-checkout-fields.php:
|
507 |
msgid "Upgrade"
|
508 |
msgstr "Kup PRO"
|
509 |
|
510 |
-
#: flexible-checkout-fields.php:
|
511 |
msgid "Advanced"
|
512 |
msgstr "Zaawansowane"
|
513 |
|
514 |
#: inc/wpdesk-tracker/views/tracker-connect.php:7
|
515 |
#: inc/wpdesk-tracker/views/tracker-notice.php:5
|
516 |
-
#: inc/wpdesk-tracker/views/tracker-notice.php:22
|
517 |
#, php-format
|
518 |
msgid "Hey %s,"
|
519 |
msgstr "Hej %s,"
|
520 |
|
521 |
#: inc/wpdesk-tracker/views/tracker-connect.php:8
|
522 |
-
#: inc/wpdesk-tracker/views/tracker-notice.php:23
|
523 |
msgid ""
|
524 |
"Please help us improve our plugins! If you opt-in, we will collect some non-"
|
525 |
-
"sensitive data and usage information. If you skip this, that's
|
526 |
-
"plugins will work just fine."
|
527 |
msgstr ""
|
528 |
"Proszę pomóż nam udoskonalić nasze wtyczki! Jeśli się zgodzisz, będziemy "
|
529 |
-
"zbierać niewrażliwe dane użytkowania. Jeśli pominiesz ten krok, w
|
530 |
-
"Wszystkie wtyczki będą działać."
|
531 |
|
532 |
#: inc/wpdesk-tracker/views/tracker-connect.php:13
|
533 |
msgid "Allow & Continue →"
|
@@ -546,8 +542,8 @@ msgid "Your Site Overview"
|
|
546 |
msgstr "Dane witryny"
|
547 |
|
548 |
#: inc/wpdesk-tracker/views/tracker-connect.php:27
|
549 |
-
msgid "
|
550 |
-
msgstr "
|
551 |
|
552 |
#: inc/wpdesk-tracker/views/tracker-connect.php:33
|
553 |
msgid "Plugin Usage"
|
@@ -562,21 +558,11 @@ msgid "Your Store Overview"
|
|
562 |
msgstr "Dane sklepu"
|
563 |
|
564 |
#: inc/wpdesk-tracker/views/tracker-connect.php:41
|
565 |
-
msgid "
|
566 |
-
msgstr "Tylko niewrażliwe dane o użytkowaniu sklepu"
|
567 |
|
568 |
#: inc/wpdesk-tracker/views/tracker-connect.php:47
|
569 |
-
|
570 |
-
msgstr "Powiadomienia"
|
571 |
-
|
572 |
-
#: inc/wpdesk-tracker/views/tracker-connect.php:48
|
573 |
-
msgid "Announcements, updates, marketing, no spam and easy opt-out"
|
574 |
-
msgstr ""
|
575 |
-
"Ważne powiadomienia, uaktualnienia, marketing, żadnego spamu i łatwa "
|
576 |
-
"rezygnacja"
|
577 |
-
|
578 |
-
#: inc/wpdesk-tracker/views/tracker-connect.php:54
|
579 |
-
#: inc/wpdesk-tracker/views/tracker-notice.php:24
|
580 |
msgid "Find out more »"
|
581 |
msgstr "Dowiedz się więcej »"
|
582 |
|
@@ -641,28 +627,20 @@ msgstr "Anuluj"
|
|
641 |
msgid "Submit & Deactivate"
|
642 |
msgstr "Wyślij i dezaktywuj"
|
643 |
|
644 |
-
#: inc/wpdesk-tracker/views/tracker-notice.php:
|
645 |
-
#, php-format
|
646 |
msgid ""
|
647 |
"We need your help to improve <strong>WP Desk plugins</strong>, so they are "
|
648 |
-
"more useful for you and the rest of <strong>
|
649 |
"collecting data on how you use our plugins, you will help us a lot. We will "
|
650 |
-
"not collect any sensitive data, so you can feel safe.
|
651 |
-
"your consent, we will send you a <strong>discount coupon</strong> for %sWP "
|
652 |
-
"Desk plugins%s, which you can use yourself or share with others. %sFind out "
|
653 |
-
"more »%s"
|
654 |
msgstr ""
|
655 |
"Potrzebujemy Twojej pomocy, aby dalej rozwijać <strong>wtyczki WP Desk</"
|
656 |
"strong> i były one jeszcze bardziej pomocne dla Ciebie i pozostałych ponad "
|
657 |
-
"<strong>
|
658 |
"korzystasz z naszych wtyczek bardzo nam w tym pomożesz. Nie będziemy zbierać "
|
659 |
-
"żadnych danych wrażliwych, więc możesz czuć się bezpiecznie.
|
660 |
-
"Twoją zgodę otrzymasz <strong>kupon rabatowy</strong> na %swtyczki WP Desk"
|
661 |
-
"%s, który możesz wykorzystać sam lub podzielić się z innymi. %sDowiedz się "
|
662 |
-
"więcej »%s"
|
663 |
|
664 |
-
#: inc/wpdesk-tracker/views/tracker-notice.php:
|
665 |
-
#: inc/wpdesk-tracker/views/tracker-notice.php:27
|
666 |
msgid "Allow"
|
667 |
msgstr "Pozwól"
|
668 |
|
@@ -704,6 +682,20 @@ msgstr "WP Desk"
|
|
704 |
msgid "https://www.wpdesk.net/"
|
705 |
msgstr "https://www.wpdesk.pl/"
|
706 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
707 |
#~ msgid ""
|
708 |
#~ "An Unexpected HTTP Error occurred during the API request.</p> <p><a href="
|
709 |
#~ "\"?\" onclick=\"document.location.reload(); return false;\">Try again</a>"
|
@@ -895,9 +887,6 @@ msgstr "https://www.wpdesk.pl/"
|
|
895 |
#~ "Przeczytaj <a href=\"https://www.wpdesk.pl/docs/woocommerce-checkout-"
|
896 |
#~ "fields-docs/\" target=\"_blank\">instrukcję konfiguracji →</a>"
|
897 |
|
898 |
-
#~ msgid "<strong>%s</strong> is required field."
|
899 |
-
#~ msgstr "<strong>%s</strong> jest wymaganym polem."
|
900 |
-
|
901 |
#~ msgid "Attachments"
|
902 |
#~ msgstr "Załączniki"
|
903 |
|
1 |
msgid ""
|
2 |
msgstr ""
|
3 |
"Project-Id-Version: WooCommerce Flexible Checkout Fields\n"
|
4 |
+
"POT-Creation-Date: 2018-06-25 13:02+0200\n"
|
5 |
+
"PO-Revision-Date: 2018-06-25 13:05+0200\n"
|
6 |
"Last-Translator: Piotr Jabłonowski <piotr.jablonowski@wpdesk.net>\n"
|
7 |
"Language-Team: Maciej Swoboda <maciej.swoboda@gmail.com>\n"
|
8 |
"Language: pl_PL\n"
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
12 |
+
"X-Generator: Poedit 2.0.8\n"
|
13 |
"X-Poedit-Basepath: ..\n"
|
14 |
"X-Poedit-WPHeader: flexible-checkout-fields.php\n"
|
15 |
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
|
21 |
"X-Poedit-SearchPath-0: .\n"
|
22 |
"X-Poedit-SearchPathExcluded-0: *.js\n"
|
23 |
|
24 |
+
#: classes/display-options.php:106 classes/user-profile.php:135
|
25 |
msgid "Additional Information"
|
26 |
msgstr "Dodatkowe informacje"
|
27 |
|
28 |
+
#: classes/filed-validation.php:30
|
29 |
+
#, php-format
|
30 |
+
msgid "%s is a required field."
|
31 |
+
msgstr "%s jest wymaganym polem."
|
32 |
+
|
33 |
+
#: classes/filed-validation.php:64
|
34 |
msgid "Default"
|
35 |
msgstr "Domyślna"
|
36 |
|
37 |
+
#: classes/filed-validation.php:65
|
38 |
msgid "None"
|
39 |
msgstr "Brak"
|
40 |
|
41 |
+
#: classes/filed-validation.php:66
|
42 |
msgid "Email"
|
43 |
msgstr "Email"
|
44 |
|
45 |
+
#: classes/filed-validation.php:67
|
46 |
msgid "Phone"
|
47 |
msgstr "Numer telefonu"
|
48 |
|
49 |
+
#: classes/filed-validation.php:68
|
50 |
msgid "Post code"
|
51 |
msgstr "Kod pocztowy"
|
52 |
|
74 |
"Notatka do twojego zamówienia, np. informacje o dostarczeniu przesyłki."
|
75 |
|
76 |
#: classes/settings.php:147 classes/views/settings-settings.php:11
|
77 |
+
#: classes/wpdesk/class-plugin.php:209 flexible-checkout-fields.php:914
|
78 |
msgid "Settings"
|
79 |
msgstr "Ustawienia"
|
80 |
|
82 |
msgid "Custom Sections"
|
83 |
msgstr "Dodatkowe sekcje"
|
84 |
|
85 |
+
#: classes/settings.php:287
|
86 |
#, php-format
|
87 |
msgid "You cannot use this field name: %s, for field: %s."
|
88 |
msgstr "Nie możesz użyć tej nazwy pola: %s dla pola: %s."
|
89 |
|
90 |
+
#: classes/tracker.php:166
|
91 |
msgid "Opt-in"
|
92 |
msgstr "Opt-in"
|
93 |
|
94 |
+
#: classes/tracker.php:170
|
95 |
msgid "Opt-out"
|
96 |
msgstr "Opt-out"
|
97 |
|
108 |
"Jeśli chcesz używać Flexible Checkout Fields za darmo, prosimy %sdodaj swoją "
|
109 |
"opinię%s. Pomożesz nam wspierać darmową wersję. Dziękujemy."
|
110 |
|
111 |
+
#: classes/views/settings-fields.php:15
|
112 |
msgid "Thank You Page"
|
113 |
msgstr "Strona podziękowania"
|
114 |
|
115 |
+
#: classes/views/settings-fields.php:16
|
116 |
msgid "My Account - address"
|
117 |
msgstr "Moje konto - adres"
|
118 |
|
119 |
+
#: classes/views/settings-fields.php:17
|
120 |
msgid "My Account - order"
|
121 |
msgstr "Moje konto - zamówienie"
|
122 |
|
123 |
+
#: classes/views/settings-fields.php:18
|
124 |
msgid "Emails"
|
125 |
msgstr "E-maile"
|
126 |
|
127 |
+
#: classes/views/settings-fields.php:37
|
128 |
msgid "Settings resetted."
|
129 |
msgstr "Ustawienia zostały zresetowane."
|
130 |
|
131 |
+
#: classes/views/settings-fields.php:41 classes/views/settings-settings.php:8
|
132 |
msgid "Settings saved."
|
133 |
msgstr "Ustawienia zostały zapisane."
|
134 |
|
135 |
+
#: classes/views/settings-fields.php:49
|
136 |
msgid "Add New Field"
|
137 |
msgstr "Dodaj nowe pole"
|
138 |
|
139 |
+
#: classes/views/settings-fields.php:53 classes/views/settings-fields.php:380
|
140 |
+
#: classes/views/settings-fields.php:703
|
141 |
msgid "Field Type"
|
142 |
msgstr "Typ pola"
|
143 |
|
144 |
+
#: classes/views/settings-fields.php:65 classes/views/settings-fields.php:306
|
145 |
+
#: classes/views/settings-fields.php:677
|
146 |
msgid "Label"
|
147 |
msgstr "Etykieta"
|
148 |
|
149 |
+
#: classes/views/settings-fields.php:70 classes/views/settings-fields.php:314
|
150 |
+
#: classes/views/settings-fields.php:679
|
151 |
msgid "You can use HTML."
|
152 |
msgstr "Możesz używać HTML."
|
153 |
|
154 |
+
#: classes/views/settings-fields.php:74 classes/views/settings-fields.php:323
|
155 |
+
#: classes/views/settings-fields.php:683
|
156 |
+
msgid "Name"
|
157 |
+
msgstr "Nazwa"
|
158 |
|
159 |
+
#: classes/views/settings-fields.php:78 classes/views/settings-fields.php:336
|
160 |
#, php-format
|
161 |
msgid "Meta name: %s."
|
162 |
msgstr "Nazwa meta: %s."
|
163 |
|
164 |
+
#: classes/views/settings-fields.php:86
|
165 |
msgid "This field is available in the PRO version."
|
166 |
msgstr "To pole jest dostępne w wersji PRO."
|
167 |
|
168 |
+
#: classes/views/settings-fields.php:86
|
169 |
msgid "Upgrade to PRO now →"
|
170 |
msgstr "Zaktualizuj do PRO →"
|
171 |
|
172 |
+
#: classes/views/settings-fields.php:91
|
173 |
msgid "Section"
|
174 |
msgstr "Sekcja"
|
175 |
|
176 |
+
#: classes/views/settings-fields.php:105
|
177 |
msgid "Save changes after adding a field."
|
178 |
msgstr "Zapisz zmiany po dodaniu pola."
|
179 |
|
180 |
+
#: classes/views/settings-fields.php:110
|
181 |
msgid "Add Field"
|
182 |
msgstr "Dodaj pole"
|
183 |
|
184 |
+
#: classes/views/settings-fields.php:131
|
185 |
msgid "Edit Section"
|
186 |
msgstr "Edytuj sekcję"
|
187 |
|
188 |
+
#: classes/views/settings-fields.php:136 classes/views/settings-fields.php:507
|
189 |
#: classes/views/settings-settings.php:35
|
190 |
msgid "Save Changes"
|
191 |
msgstr "Zapisz zmiany"
|
192 |
|
193 |
+
#: classes/views/settings-fields.php:148
|
194 |
msgid "Section Fields"
|
195 |
msgstr "Pola sekcji"
|
196 |
|
197 |
+
#: classes/views/settings-fields.php:218 classes/views/settings-fields.php:634
|
198 |
msgid "Edit"
|
199 |
msgstr "Edytuj"
|
200 |
|
201 |
+
#: classes/views/settings-fields.php:226 classes/views/settings-fields.php:641
|
202 |
msgid "General"
|
203 |
msgstr "Główne"
|
204 |
|
205 |
+
#: classes/views/settings-fields.php:228 classes/views/settings-fields.php:642
|
206 |
msgid "Appearance"
|
207 |
msgstr "Wygląd"
|
208 |
|
209 |
+
#: classes/views/settings-fields.php:230 classes/views/settings-fields.php:643
|
210 |
msgid "Display On"
|
211 |
msgstr "Wyświetlanie"
|
212 |
|
213 |
+
#: classes/views/settings-fields.php:264 classes/views/settings-fields.php:666
|
214 |
msgid "Enable Field"
|
215 |
msgstr "Pokaż pole"
|
216 |
|
217 |
+
#: classes/views/settings-fields.php:300 classes/views/settings-fields.php:673
|
218 |
msgid "Required Field"
|
219 |
msgstr "Pole wymagane"
|
220 |
|
221 |
+
#: classes/views/settings-fields.php:342 classes/views/settings-fields.php:689
|
222 |
msgid "Validation"
|
223 |
msgstr "Walidacja"
|
224 |
|
225 |
+
#: classes/views/settings-fields.php:353 classes/views/settings-fields.php:697
|
226 |
msgid "For Post Code validation works only with country."
|
227 |
msgstr "Dla walidacji kodu pocztowego musi być wybrany kraj."
|
228 |
|
229 |
+
#: classes/views/settings-fields.php:366
|
230 |
msgid "Options"
|
231 |
msgstr "Opcje"
|
232 |
|
233 |
+
#: classes/views/settings-fields.php:373
|
234 |
msgid ""
|
235 |
"Format: <code>Value : Name</code>. Value will be in the code, name will be "
|
236 |
"visible to the user. One option per line. Example:<br /><code>woman : I am a "
|
241 |
"Przykład:<br /><code>kobieta : Jestem kobietą</code><br /><code>mezczyzna : "
|
242 |
"Jestem mężczyzną</code>"
|
243 |
|
244 |
+
#: classes/views/settings-fields.php:416 classes/views/settings-fields.php:711
|
245 |
+
#: classes/views/settings-fields.php:750 classes/views/settings-fields.php:829
|
246 |
msgid "Placeholder"
|
247 |
msgstr "Placeholder"
|
248 |
|
249 |
+
#: classes/views/settings-fields.php:426
|
250 |
msgid "This field is address locale dependent and cannot be modified."
|
251 |
+
msgstr "Nazwa tego pola nie może być edytowana."
|
252 |
|
253 |
+
#: classes/views/settings-fields.php:443 classes/views/settings-fields.php:715
|
254 |
msgid "CSS Class"
|
255 |
msgstr "Klasa CSS"
|
256 |
|
257 |
+
#: classes/views/settings-fields.php:491 classes/views/settings-fields.php:737
|
258 |
msgid "Delete Field"
|
259 |
msgstr "Usuń pole"
|
260 |
|
261 |
+
#: classes/views/settings-fields.php:510
|
262 |
msgid "Reset Section Settings"
|
263 |
msgstr "Resetuj ustawienia sekcji"
|
264 |
|
265 |
+
#: classes/views/settings-fields.php:537
|
266 |
#, php-format
|
267 |
msgid "Invalid field name: %s. The name already exists."
|
268 |
msgstr "Błędna nazwa pola: %s. Ta nazwa już istnieje."
|
269 |
|
270 |
+
#: classes/views/settings-fields.php:549
|
271 |
msgid "Field name can not be empty!"
|
272 |
msgstr "Nazwa pola nie może być pusta!"
|
273 |
|
274 |
+
#: classes/views/settings-fields.php:553
|
275 |
msgid "Field name can not be number!"
|
276 |
msgstr "Nazwa pola nie może być numerem!"
|
277 |
|
278 |
+
#: classes/views/settings-fields.php:557
|
279 |
msgid ""
|
280 |
"Invalid field name. Field name can contains only lower case letters, digits "
|
281 |
"and _ (underline) character!"
|
283 |
"Błędna nazwa pola. Nazwa pola może zawierać jedynie małe litery, cyfry oraz "
|
284 |
"_ (znak podkreślenia)!"
|
285 |
|
286 |
+
#: classes/views/settings-fields.php:685
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
287 |
msgid "Meta name: "
|
288 |
msgstr "Meta name: "
|
289 |
|
290 |
+
#: classes/views/settings-fields.php:762
|
291 |
msgid "Field label can not be empty!"
|
292 |
msgstr "Etykieta pola nie może być pusta!"
|
293 |
|
294 |
+
#: classes/views/settings-fields.php:844
|
295 |
#, php-format
|
296 |
msgid ""
|
297 |
"Do you really want to delete this field: %s? Deleting a field remove it from "
|
300 |
"Czy na pewno chcesz usunąć to pole: %s? Doprowadzi to do usunięcia pola "
|
301 |
"również we wszystkich zamówieniach."
|
302 |
|
303 |
+
#: classes/views/settings-fields.php:886
|
304 |
msgid ""
|
305 |
"Do you really want to reset section settings?. Resetting a section remove "
|
306 |
"all added fields from orders."
|
372 |
"Klucz licencyjny wtyczki %s%s%s nie został aktywowany, więc wtyczka jest "
|
373 |
"nieaktywna! %sKliknij tutaj%s, aby aktywować klucz licencyjny wtyczki."
|
374 |
|
375 |
+
#: classes/wpdesk/class-plugin.php:196 flexible-checkout-fields.php:917
|
376 |
msgid "Support"
|
377 |
msgstr "Wsparcie"
|
378 |
|
379 |
+
#: classes/wpdesk/class-plugin.php:202 flexible-checkout-fields.php:916
|
380 |
msgid "Docs"
|
381 |
msgstr "Docs"
|
382 |
|
425 |
"The callback function used for the <strong>%s</strong> setting is missing."
|
426 |
msgstr "Brakuje funkcji callback użytej w ustawieniu <strong>%s</strong>."
|
427 |
|
428 |
+
#: flexible-checkout-fields.php:205
|
429 |
msgid "Billing"
|
430 |
msgstr "Płatność"
|
431 |
|
432 |
+
#: flexible-checkout-fields.php:211
|
433 |
msgid "Shipping"
|
434 |
msgstr "Wysyłka"
|
435 |
|
436 |
+
#: flexible-checkout-fields.php:217
|
437 |
msgid "Order"
|
438 |
msgstr "Zamówienie"
|
439 |
|
440 |
+
#: flexible-checkout-fields.php:232
|
441 |
msgid "Single Line Text"
|
442 |
msgstr "Pojedyncza linia (input)"
|
443 |
|
444 |
+
#: flexible-checkout-fields.php:236
|
445 |
msgid "Paragraph Text"
|
446 |
msgstr "Obszar tekstowy (textarea)"
|
447 |
|
448 |
+
#: flexible-checkout-fields.php:244 flexible-checkout-fields.php:249
|
449 |
msgid "Checkbox"
|
450 |
msgstr "Wybór (checkbox)"
|
451 |
|
452 |
+
#: flexible-checkout-fields.php:254
|
453 |
msgid "Radio button"
|
454 |
msgstr "Wybór (radio)"
|
455 |
|
456 |
+
#: flexible-checkout-fields.php:259
|
457 |
msgid "Select (Drop Down)"
|
458 |
msgstr "Lista rozwijana (select)"
|
459 |
|
460 |
+
#: flexible-checkout-fields.php:264
|
461 |
msgid "Date"
|
462 |
msgstr "Data"
|
463 |
|
464 |
+
#: flexible-checkout-fields.php:269
|
465 |
msgid "Time"
|
466 |
msgstr "Czas"
|
467 |
|
468 |
+
#: flexible-checkout-fields.php:274
|
469 |
msgid "Color Picker"
|
470 |
msgstr "Wybór koloru"
|
471 |
|
472 |
+
#: flexible-checkout-fields.php:279
|
473 |
msgid "Headline"
|
474 |
msgstr "Nagłówek"
|
475 |
|
476 |
+
#: flexible-checkout-fields.php:284
|
477 |
msgid "HTML"
|
478 |
msgstr "HTML"
|
479 |
|
480 |
+
#: flexible-checkout-fields.php:289
|
481 |
msgid "File Upload"
|
482 |
msgstr "Przesyłanie pliku"
|
483 |
|
484 |
+
#: flexible-checkout-fields.php:368
|
485 |
msgid "Uploading file..."
|
486 |
msgstr "Przesyłanie plik..."
|
487 |
|
488 |
+
#: flexible-checkout-fields.php:400
|
489 |
msgid "Close"
|
490 |
msgstr "Zamknij"
|
491 |
|
492 |
+
#: flexible-checkout-fields.php:401
|
493 |
msgid "Today"
|
494 |
msgstr "Dzisiaj"
|
495 |
|
496 |
+
#: flexible-checkout-fields.php:404
|
497 |
msgid "Next"
|
498 |
msgstr "Następny"
|
499 |
|
500 |
+
#: flexible-checkout-fields.php:405
|
501 |
msgid "Previous"
|
502 |
msgstr "Poprzedni"
|
503 |
|
504 |
+
#: flexible-checkout-fields.php:923
|
505 |
msgid "Upgrade"
|
506 |
msgstr "Kup PRO"
|
507 |
|
508 |
+
#: flexible-checkout-fields.php:935
|
509 |
msgid "Advanced"
|
510 |
msgstr "Zaawansowane"
|
511 |
|
512 |
#: inc/wpdesk-tracker/views/tracker-connect.php:7
|
513 |
#: inc/wpdesk-tracker/views/tracker-notice.php:5
|
|
|
514 |
#, php-format
|
515 |
msgid "Hey %s,"
|
516 |
msgstr "Hej %s,"
|
517 |
|
518 |
#: inc/wpdesk-tracker/views/tracker-connect.php:8
|
|
|
519 |
msgid ""
|
520 |
"Please help us improve our plugins! If you opt-in, we will collect some non-"
|
521 |
+
"sensitive data and usage information anonymously. If you skip this, that's "
|
522 |
+
"okay! All plugins will work just fine."
|
523 |
msgstr ""
|
524 |
"Proszę pomóż nam udoskonalić nasze wtyczki! Jeśli się zgodzisz, będziemy "
|
525 |
+
"zbierać niewrażliwe dane użytkowania anonimowo. Jeśli pominiesz ten krok, w "
|
526 |
+
"porządku! Wszystkie wtyczki będą działać."
|
527 |
|
528 |
#: inc/wpdesk-tracker/views/tracker-connect.php:13
|
529 |
msgid "Allow & Continue →"
|
542 |
msgstr "Dane witryny"
|
543 |
|
544 |
#: inc/wpdesk-tracker/views/tracker-connect.php:27
|
545 |
+
msgid "WP version, PHP info"
|
546 |
+
msgstr "Wersja WP, PHP info"
|
547 |
|
548 |
#: inc/wpdesk-tracker/views/tracker-connect.php:33
|
549 |
msgid "Plugin Usage"
|
558 |
msgstr "Dane sklepu"
|
559 |
|
560 |
#: inc/wpdesk-tracker/views/tracker-connect.php:41
|
561 |
+
msgid "Anonymized and non-sensitive store usage information"
|
562 |
+
msgstr "Tylko niewrażliwe i anonimowe dane o użytkowaniu sklepu"
|
563 |
|
564 |
#: inc/wpdesk-tracker/views/tracker-connect.php:47
|
565 |
+
#: inc/wpdesk-tracker/views/tracker-notice.php:7
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
566 |
msgid "Find out more »"
|
567 |
msgstr "Dowiedz się więcej »"
|
568 |
|
627 |
msgid "Submit & Deactivate"
|
628 |
msgstr "Wyślij i dezaktywuj"
|
629 |
|
630 |
+
#: inc/wpdesk-tracker/views/tracker-notice.php:6
|
|
|
631 |
msgid ""
|
632 |
"We need your help to improve <strong>WP Desk plugins</strong>, so they are "
|
633 |
+
"more useful for you and the rest of <strong>30,000+ users</strong>. By "
|
634 |
"collecting data on how you use our plugins, you will help us a lot. We will "
|
635 |
+
"not collect any sensitive data, so you can feel safe."
|
|
|
|
|
|
|
636 |
msgstr ""
|
637 |
"Potrzebujemy Twojej pomocy, aby dalej rozwijać <strong>wtyczki WP Desk</"
|
638 |
"strong> i były one jeszcze bardziej pomocne dla Ciebie i pozostałych ponad "
|
639 |
+
"<strong>30 000 użytkowników</strong>. Zbierając dane na temat tego jak "
|
640 |
"korzystasz z naszych wtyczek bardzo nam w tym pomożesz. Nie będziemy zbierać "
|
641 |
+
"żadnych danych wrażliwych, więc możesz czuć się bezpiecznie."
|
|
|
|
|
|
|
642 |
|
643 |
+
#: inc/wpdesk-tracker/views/tracker-notice.php:10
|
|
|
644 |
msgid "Allow"
|
645 |
msgstr "Pozwól"
|
646 |
|
682 |
msgid "https://www.wpdesk.net/"
|
683 |
msgstr "https://www.wpdesk.pl/"
|
684 |
|
685 |
+
#~ msgid "Database Name"
|
686 |
+
#~ msgstr "Nazwa w bazie danych"
|
687 |
+
|
688 |
+
#~ msgid "Changing this field..."
|
689 |
+
#~ msgstr "Zmiana pola..."
|
690 |
+
|
691 |
+
#~ msgid "Admin Updates"
|
692 |
+
#~ msgstr "Powiadomienia"
|
693 |
+
|
694 |
+
#~ msgid "Announcements, updates, marketing, no spam and easy opt-out"
|
695 |
+
#~ msgstr ""
|
696 |
+
#~ "Ważne powiadomienia, uaktualnienia, marketing, żadnego spamu i łatwa "
|
697 |
+
#~ "rezygnacja"
|
698 |
+
|
699 |
#~ msgid ""
|
700 |
#~ "An Unexpected HTTP Error occurred during the API request.</p> <p><a href="
|
701 |
#~ "\"?\" onclick=\"document.location.reload(); return false;\">Try again</a>"
|
887 |
#~ "Przeczytaj <a href=\"https://www.wpdesk.pl/docs/woocommerce-checkout-"
|
888 |
#~ "fields-docs/\" target=\"_blank\">instrukcję konfiguracji →</a>"
|
889 |
|
|
|
|
|
|
|
890 |
#~ msgid "Attachments"
|
891 |
#~ msgstr "Załączniki"
|
892 |
|
readme.txt
CHANGED
@@ -4,7 +4,7 @@ Donate link: https://www.wpdesk.net/flexible-checkout-fields-woocommerce/
|
|
4 |
Tags: woocommerce checkout fields, woocommerce custom fields, woocommerce checkout manager, woocommerce checkout editor, woocommerce fields manager, woocommerce fields editor, woocommerce custom checkout fields, woocommerce checkout options, woocommerce checkout pro, woocommerce custom sections, woocommerce file upload
|
5 |
Requires at least: 4.5
|
6 |
Tested up to: 4.9.6
|
7 |
-
Stable tag: 1.6.
|
8 |
Requires PHP: 5.5
|
9 |
License: GPLv3 or later
|
10 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
@@ -187,6 +187,10 @@ If you are upgrading from the old WooCommerce Checkout Fields version (1.1, wooc
|
|
187 |
|
188 |
== Changelog ==
|
189 |
|
|
|
|
|
|
|
|
|
190 |
= 1.6.5 - 2018-05-25 =
|
191 |
* Fixed missing address in emails
|
192 |
|
4 |
Tags: woocommerce checkout fields, woocommerce custom fields, woocommerce checkout manager, woocommerce checkout editor, woocommerce fields manager, woocommerce fields editor, woocommerce custom checkout fields, woocommerce checkout options, woocommerce checkout pro, woocommerce custom sections, woocommerce file upload
|
5 |
Requires at least: 4.5
|
6 |
Tested up to: 4.9.6
|
7 |
+
Stable tag: 1.6.6
|
8 |
Requires PHP: 5.5
|
9 |
License: GPLv3 or later
|
10 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
187 |
|
188 |
== Changelog ==
|
189 |
|
190 |
+
= 1.6.6 - 2018-06-25 =
|
191 |
+
* Tweaked tracker data anonymization
|
192 |
+
* Fixed tracker notice
|
193 |
+
|
194 |
= 1.6.5 - 2018-05-25 =
|
195 |
* Fixed missing address in emails
|
196 |
|
vendor/autoload.php
CHANGED
@@ -4,4 +4,4 @@
|
|
4 |
|
5 |
require_once __DIR__ . '/composer/autoload_real.php';
|
6 |
|
7 |
-
return
|
4 |
|
5 |
require_once __DIR__ . '/composer/autoload_real.php';
|
6 |
|
7 |
+
return ComposerAutoloaderInit1d6967f32154d23eca6189f656cde102::getLoader();
|
vendor/composer/autoload_classmap.php
CHANGED
@@ -6,4 +6,44 @@ $vendorDir = dirname(dirname(__FILE__));
|
|
6 |
$baseDir = dirname($vendorDir);
|
7 |
|
8 |
return array(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9 |
);
|
6 |
$baseDir = dirname($vendorDir);
|
7 |
|
8 |
return array(
|
9 |
+
'Browser' => $baseDir . '/classes/wpdesk/settings-api/modules/sysinfo/browser.php',
|
10 |
+
'Flexible_Checkout_Fields_Activation_Tracker' => $baseDir . '/classes/activation-tracker.php',
|
11 |
+
'Flexible_Checkout_Fields_Disaplay_Options' => $baseDir . '/classes/display-options.php',
|
12 |
+
'Flexible_Checkout_Fields_Field_Validation' => $baseDir . '/classes/filed-validation.php',
|
13 |
+
'Flexible_Checkout_Fields_Settings' => $baseDir . '/classes/settings.php',
|
14 |
+
'Flexible_Checkout_Fields_User_Profile' => $baseDir . '/classes/user-profile.php',
|
15 |
+
'S214_Sysinfo' => $baseDir . '/classes/wpdesk/settings-api/modules/sysinfo/class.s214-sysinfo.php',
|
16 |
+
'WPDesk_Flexible_Checkout_Fields_Tracker' => $baseDir . '/classes/tracker.php',
|
17 |
+
'WPDesk_Helper_Plugin' => $baseDir . '/classes/wpdesk/class-helper.php',
|
18 |
+
'WPDesk_Plugin_1_8' => $baseDir . '/classes/wpdesk/class-plugin.php',
|
19 |
+
'WPDesk_S214_Settings_1_8' => $baseDir . '/classes/wpdesk/settings-api/class.s214-settings.php',
|
20 |
+
'WPDesk_Settings_1_8' => $baseDir . '/classes/wpdesk/class-settings.php',
|
21 |
+
'WPDesk_Tracker' => $baseDir . '/inc/wpdesk-tracker/class-wpdesk-tracker.php',
|
22 |
+
'WPDesk_Tracker_Data_Provider' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider.php',
|
23 |
+
'WPDesk_Tracker_Data_Provider_Gateways' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-gateways.php',
|
24 |
+
'WPDesk_Tracker_Data_Provider_Identification' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-identification.php',
|
25 |
+
'WPDesk_Tracker_Data_Provider_Identification_Gdpr' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-identification-gdpr.php',
|
26 |
+
'WPDesk_Tracker_Data_Provider_Jetpack' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-jetpack.php',
|
27 |
+
'WPDesk_Tracker_Data_Provider_License_Emails' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-license-emails.php',
|
28 |
+
'WPDesk_Tracker_Data_Provider_Orders' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-orders.php',
|
29 |
+
'WPDesk_Tracker_Data_Provider_Orders_Country' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-orders-country.php',
|
30 |
+
'WPDesk_Tracker_Data_Provider_Orders_Month' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-orders-month.php',
|
31 |
+
'WPDesk_Tracker_Data_Provider_Plugins' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-plugins.php',
|
32 |
+
'WPDesk_Tracker_Data_Provider_Products' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-products.php',
|
33 |
+
'WPDesk_Tracker_Data_Provider_Products_Variations' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-products-variations.php',
|
34 |
+
'WPDesk_Tracker_Data_Provider_Server' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-server.php',
|
35 |
+
'WPDesk_Tracker_Data_Provider_Settings' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-settings.php',
|
36 |
+
'WPDesk_Tracker_Data_Provider_Shipping_Classes' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-shipping-classes.php',
|
37 |
+
'WPDesk_Tracker_Data_Provider_Shipping_Methods' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-shipping-methods.php',
|
38 |
+
'WPDesk_Tracker_Data_Provider_Shipping_Methods_Zones' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-shipping-methods-zones.php',
|
39 |
+
'WPDesk_Tracker_Data_Provider_Templates' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-templates.php',
|
40 |
+
'WPDesk_Tracker_Data_Provider_Theme' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-theme.php',
|
41 |
+
'WPDesk_Tracker_Data_Provider_User_Agent' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-user-agent.php',
|
42 |
+
'WPDesk_Tracker_Data_Provider_Users' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-users.php',
|
43 |
+
'WPDesk_Tracker_Data_Provider_Wordpress' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-wordpress.php',
|
44 |
+
'WPDesk_Tracker_Factory' => $baseDir . '/inc/wpdesk-tracker/class-wpdesk-tracker-factory.php',
|
45 |
+
'WPDesk_Tracker_Sender' => $baseDir . '/inc/wpdesk-tracker/sender/class-wpdesk-tracker-sender.php',
|
46 |
+
'WPDesk_Tracker_Sender_Exception_WpError' => $baseDir . '/inc/wpdesk-tracker/sender/Exception/class-wpdesk-tracker-sender-exception-wperror.php',
|
47 |
+
'WPDesk_Tracker_Sender_Logged' => $baseDir . '/inc/wpdesk-tracker/sender/class-wpdesk-tracker-sender-logged.php',
|
48 |
+
'WPDesk_Tracker_Sender_Wordpress_To_WPDesk' => $baseDir . '/inc/wpdesk-tracker/sender/class-wpdesk-tracker-sender-wordpress-to-wpdesk.php',
|
49 |
);
|
vendor/composer/autoload_real.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
|
3 |
// autoload_real.php @generated by Composer
|
4 |
|
5 |
-
class
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
@@ -19,15 +19,15 @@ class ComposerAutoloaderInit6cb8f29f730238dc8aa2418f30cc4723
|
|
19 |
return self::$loader;
|
20 |
}
|
21 |
|
22 |
-
spl_autoload_register(array('
|
23 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
24 |
-
spl_autoload_unregister(array('
|
25 |
|
26 |
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
27 |
if ($useStaticLoader) {
|
28 |
require_once __DIR__ . '/autoload_static.php';
|
29 |
|
30 |
-
call_user_func(\Composer\Autoload\
|
31 |
} else {
|
32 |
$map = require __DIR__ . '/autoload_namespaces.php';
|
33 |
foreach ($map as $namespace => $path) {
|
2 |
|
3 |
// autoload_real.php @generated by Composer
|
4 |
|
5 |
+
class ComposerAutoloaderInit1d6967f32154d23eca6189f656cde102
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
19 |
return self::$loader;
|
20 |
}
|
21 |
|
22 |
+
spl_autoload_register(array('ComposerAutoloaderInit1d6967f32154d23eca6189f656cde102', 'loadClassLoader'), true, true);
|
23 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
24 |
+
spl_autoload_unregister(array('ComposerAutoloaderInit1d6967f32154d23eca6189f656cde102', 'loadClassLoader'));
|
25 |
|
26 |
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
27 |
if ($useStaticLoader) {
|
28 |
require_once __DIR__ . '/autoload_static.php';
|
29 |
|
30 |
+
call_user_func(\Composer\Autoload\ComposerStaticInit1d6967f32154d23eca6189f656cde102::getInitializer($loader));
|
31 |
} else {
|
32 |
$map = require __DIR__ . '/autoload_namespaces.php';
|
33 |
foreach ($map as $namespace => $path) {
|
vendor/composer/autoload_static.php
CHANGED
@@ -4,11 +4,55 @@
|
|
4 |
|
5 |
namespace Composer\Autoload;
|
6 |
|
7 |
-
class
|
8 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9 |
public static function getInitializer(ClassLoader $loader)
|
10 |
{
|
11 |
return \Closure::bind(function () use ($loader) {
|
|
|
12 |
|
13 |
}, null, ClassLoader::class);
|
14 |
}
|
4 |
|
5 |
namespace Composer\Autoload;
|
6 |
|
7 |
+
class ComposerStaticInit1d6967f32154d23eca6189f656cde102
|
8 |
{
|
9 |
+
public static $classMap = array (
|
10 |
+
'Browser' => __DIR__ . '/../..' . '/classes/wpdesk/settings-api/modules/sysinfo/browser.php',
|
11 |
+
'Flexible_Checkout_Fields_Activation_Tracker' => __DIR__ . '/../..' . '/classes/activation-tracker.php',
|
12 |
+
'Flexible_Checkout_Fields_Disaplay_Options' => __DIR__ . '/../..' . '/classes/display-options.php',
|
13 |
+
'Flexible_Checkout_Fields_Field_Validation' => __DIR__ . '/../..' . '/classes/filed-validation.php',
|
14 |
+
'Flexible_Checkout_Fields_Settings' => __DIR__ . '/../..' . '/classes/settings.php',
|
15 |
+
'Flexible_Checkout_Fields_User_Profile' => __DIR__ . '/../..' . '/classes/user-profile.php',
|
16 |
+
'S214_Sysinfo' => __DIR__ . '/../..' . '/classes/wpdesk/settings-api/modules/sysinfo/class.s214-sysinfo.php',
|
17 |
+
'WPDesk_Flexible_Checkout_Fields_Tracker' => __DIR__ . '/../..' . '/classes/tracker.php',
|
18 |
+
'WPDesk_Helper_Plugin' => __DIR__ . '/../..' . '/classes/wpdesk/class-helper.php',
|
19 |
+
'WPDesk_Plugin_1_8' => __DIR__ . '/../..' . '/classes/wpdesk/class-plugin.php',
|
20 |
+
'WPDesk_S214_Settings_1_8' => __DIR__ . '/../..' . '/classes/wpdesk/settings-api/class.s214-settings.php',
|
21 |
+
'WPDesk_Settings_1_8' => __DIR__ . '/../..' . '/classes/wpdesk/class-settings.php',
|
22 |
+
'WPDesk_Tracker' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/class-wpdesk-tracker.php',
|
23 |
+
'WPDesk_Tracker_Data_Provider' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider.php',
|
24 |
+
'WPDesk_Tracker_Data_Provider_Gateways' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-gateways.php',
|
25 |
+
'WPDesk_Tracker_Data_Provider_Identification' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-identification.php',
|
26 |
+
'WPDesk_Tracker_Data_Provider_Identification_Gdpr' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-identification-gdpr.php',
|
27 |
+
'WPDesk_Tracker_Data_Provider_Jetpack' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-jetpack.php',
|
28 |
+
'WPDesk_Tracker_Data_Provider_License_Emails' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-license-emails.php',
|
29 |
+
'WPDesk_Tracker_Data_Provider_Orders' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-orders.php',
|
30 |
+
'WPDesk_Tracker_Data_Provider_Orders_Country' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-orders-country.php',
|
31 |
+
'WPDesk_Tracker_Data_Provider_Orders_Month' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-orders-month.php',
|
32 |
+
'WPDesk_Tracker_Data_Provider_Plugins' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-plugins.php',
|
33 |
+
'WPDesk_Tracker_Data_Provider_Products' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-products.php',
|
34 |
+
'WPDesk_Tracker_Data_Provider_Products_Variations' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-products-variations.php',
|
35 |
+
'WPDesk_Tracker_Data_Provider_Server' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-server.php',
|
36 |
+
'WPDesk_Tracker_Data_Provider_Settings' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-settings.php',
|
37 |
+
'WPDesk_Tracker_Data_Provider_Shipping_Classes' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-shipping-classes.php',
|
38 |
+
'WPDesk_Tracker_Data_Provider_Shipping_Methods' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-shipping-methods.php',
|
39 |
+
'WPDesk_Tracker_Data_Provider_Shipping_Methods_Zones' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-shipping-methods-zones.php',
|
40 |
+
'WPDesk_Tracker_Data_Provider_Templates' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-templates.php',
|
41 |
+
'WPDesk_Tracker_Data_Provider_Theme' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-theme.php',
|
42 |
+
'WPDesk_Tracker_Data_Provider_User_Agent' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-user-agent.php',
|
43 |
+
'WPDesk_Tracker_Data_Provider_Users' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-users.php',
|
44 |
+
'WPDesk_Tracker_Data_Provider_Wordpress' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-wordpress.php',
|
45 |
+
'WPDesk_Tracker_Factory' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/class-wpdesk-tracker-factory.php',
|
46 |
+
'WPDesk_Tracker_Sender' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/sender/class-wpdesk-tracker-sender.php',
|
47 |
+
'WPDesk_Tracker_Sender_Exception_WpError' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/sender/Exception/class-wpdesk-tracker-sender-exception-wperror.php',
|
48 |
+
'WPDesk_Tracker_Sender_Logged' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/sender/class-wpdesk-tracker-sender-logged.php',
|
49 |
+
'WPDesk_Tracker_Sender_Wordpress_To_WPDesk' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/sender/class-wpdesk-tracker-sender-wordpress-to-wpdesk.php',
|
50 |
+
);
|
51 |
+
|
52 |
public static function getInitializer(ClassLoader $loader)
|
53 |
{
|
54 |
return \Closure::bind(function () use ($loader) {
|
55 |
+
$loader->classMap = ComposerStaticInit1d6967f32154d23eca6189f656cde102::$classMap;
|
56 |
|
57 |
}, null, ClassLoader::class);
|
58 |
}
|