Flexible Shipping for WooCommerce - Version 2.1.5

Version Description

  • 2018-06-25 =
  • Tweaked tracker data anonymization
  • Fixed tracker notice
Download this release

Release Info

Developer jablonowski
Plugin Icon 128x128 Flexible Shipping for WooCommerce
Version 2.1.5
Comparing to
See all releases

Code changes from version 2.1.4 to 2.1.5

Files changed (49) hide show
  1. acceptance/reports/html/cucumber_reporter.html +1217 -0
  2. acceptance/reports/html/plugins_tests_report.html +1107 -0
  3. acceptance/reports/html/screenshot/After_2468.png +0 -0
  4. acceptance/reports/html/screenshot/screenShot1.png +0 -0
  5. acceptance/reports/html/screenshot/screenShot2.png +0 -0
  6. acceptance/reports/html/screenshot/screenShot3.png +0 -0
  7. acceptance/reports/html/screenshot/screenShot4.png +0 -0
  8. acceptance/reports/html/tracker_long_message_is_visible-14-1.png +0 -0
  9. acceptance/reports/json/cucumber_report.json +467 -0
  10. flexible-shipping.php +21 -9
  11. inc/wpdesk-tracker/class-wpdesk-tracker-factory.php +91 -0
  12. inc/wpdesk-tracker/class-wpdesk-tracker.php +199 -632
  13. inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-gateways.php +43 -0
  14. inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-identification-gdpr.php +62 -0
  15. inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-identification.php +39 -0
  16. inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-jetpack.php +42 -0
  17. inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-license-emails.php +54 -0
  18. inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-orders-country.php +53 -0
  19. inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-orders-month.php +57 -0
  20. inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-orders.php +42 -0
  21. inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-plugins.php +84 -0
  22. inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-products-variations.php +39 -0
  23. inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-products.php +43 -0
  24. inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-server.php +61 -0
  25. inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-settings.php +55 -0
  26. inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-shipping-classes.php +41 -0
  27. inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-shipping-methods-zones.php +60 -0
  28. inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-shipping-methods.php +47 -0
  29. inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-templates.php +65 -0
  30. inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-theme.php +44 -0
  31. inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-user-agent.php +35 -0
  32. inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-users.php +44 -0
  33. inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-wordpress.php +50 -0
  34. inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider.php +30 -0
  35. inc/wpdesk-tracker/lang/wpdesk-tracker-pl_PL.mo +0 -0
  36. inc/wpdesk-tracker/lang/wpdesk-tracker-pl_PL.po +5 -12
  37. inc/wpdesk-tracker/sender/Exception/class-wpdesk-tracker-sender-exception-wperror.php +17 -0
  38. inc/wpdesk-tracker/sender/class-wpdesk-tracker-sender-logged.php +56 -0
  39. inc/wpdesk-tracker/sender/class-wpdesk-tracker-sender-wordpress-to-wpdesk.php +60 -0
  40. inc/wpdesk-tracker/sender/class-wpdesk-tracker-sender.php +23 -0
  41. inc/wpdesk-tracker/views/tracker-connect.php +3 -10
  42. inc/wpdesk-tracker/views/tracker-notice.php +11 -56
  43. languages/flexible-shipping-pl_PL.mo +0 -0
  44. languages/flexible-shipping-pl_PL.po +30 -42
  45. readme.txt +5 -1
  46. vendor/autoload.php +1 -1
  47. vendor/composer/autoload_classmap.php +55 -0
  48. vendor/composer/autoload_real.php +4 -4
  49. vendor/composer/autoload_static.php +60 -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:16:58 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-shipping</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 Flexible shipping 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 Shipping 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-shipping"
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-shipping" 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 Shipping 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-shipping"
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-shipping" 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-shipping</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 Shippping 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-shipping"
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-shipping"
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-shipping"
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
+ 1s
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 menu "toplevel_page_woocommerce" and submenu "Settings" then open tab "Shipping"
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-shipping"
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_2468.png">
1086
+ <img class="screenshot" style="height:100%;width:100%" id="my_images" src="screenshot/After_2468.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&#x2F;svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjU5OXB4IiBoZWlnaHQ9IjE1MHB4IiB2aWV3Qm94PSIwIDAgNTk5IDE1MCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWxuczpza2V0Y2g9Imh0dHA6Ly93d3cuYm9oZW1pYW5jb2RpbmcuY29tL3NrZXRjaC9ucyI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDMuMi4yICg5OTgzKSAtIGh0dHA6Ly93d3cuYm9oZW1pYW5jb2RpbmcuY29tL3NrZXRjaCAtLT4KICAgIDx0aXRsZT5jdWN1bWJlcjwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxkZWZzPjwvZGVmcz4KICAgIDxnIGlkPSJMb2dvcyIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc2tldGNoOnR5cGU9Ik1TUGFnZSI+CiAgICAgICAgPGcgaWQ9ImN1Y3VtYmVyIiBza2V0Y2g6dHlwZT0iTVNMYXllckdyb3VwIj4KICAgICAgICAgICAgPGcgaWQ9Imc2MDUzIiBza2V0Y2g6dHlwZT0iTVNTaGFwZUdyb3VwIj4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik01MjQuNzExNzYxLDg3LjAwMTg4NzYgQzUxNy42NTI4NTksODcuMDAxODg3NiA1MTMuMTgyMjIsOTAuNTQxMTA3NCA1MDkuODg4MDY2LDk1Ljk2NzkxMTEgQzUwOS44ODgwNjYsOTQuNTUyMjIzMiA1MTAuNTkzOTU2LDkyLjkwMDU4NzIgNTEwLjU5Mzk1Niw5MS43MjA4NDczIEw1MTAuNTkzOTU2LDg5LjM2MTM2NzQgTDQ5OC44MjkxMTgsODkuMzYxMzY3NCBMNDk4LjgyOTExOCwxNDguMzQ4MzY0IEw1MTAuNTkzOTU2LDE0OC4zNDgzNjQgTDUxMC41OTM5NTYsMTE0LjM3MTg1NCBDNTEwLjU5Mzk1NiwxMDQuNjk3OTg3IDUxNS43NzA0ODUsOTguNzk5Mjg2OSA1MjQuNzExNzYxLDk4Ljc5OTI4NjkgTDUyNy4wNjQ3MjksOTguNzk5Mjg2OSBMNTI3LjA2NDcyOSw4Ny4wMDE4ODc2IEw1MjQuNzExNzYxLDg3LjAwMTg4NzYgTDUyNC43MTE3NjEsODcuMDAxODg3NiBaIiBpZD0icGF0aDU0NDMiIGZpbGw9IiMwMDAwMDAiPjwvcGF0aD4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik00Ni4zNTM0NjA1LDEwOC43MDkxMDIgQzQzLjA1OTMwNiwxMDMuNTE4MjQ3IDM4LjM1MzM3MDksOTkuOTc5MDI2OCAzMS41Mjk3NjUsOTkuOTc5MDI2OCBDMjAuNzA2MTE0NCw5OS45NzkwMjY4IDEyLjk0MTMyMTUsMTA4LjIzNzIwNiAxMi45NDEzMjE1LDExOC42MTg5MTggQzEyLjk0MTMyMTUsMTI5LjAwMDYyOSAyMC43MDYxMTQ0LDEzNy4yNTg4MDkgMzEuNTI5NzY1LDEzNy4yNTg4MDkgQzM4LjM1MzM3MDksMTM3LjI1ODgwOSA0My4wNTkzMDYsMTMzLjk1NTUzNyA0Ni4zNTM0NjA1LDEyOC43NjQ2ODEgTDU3LjE3NzExMTIsMTM1LjEzNTI3NyBDNTIuMDAwNTgyNiwxNDMuMTU3NTA4IDQyLjM1MzQxNTcsMTQ5LjA1NjIwOCAzMS41Mjk3NjUsMTQ5LjA1NjIwOCBDMTEuNTI5NTQwOSwxNDkuMDU2MjA4IDcuMTA1NDI3MzZlLTE1LDEzMy45NTU1MzcgNy4xMDU0MjczNmUtMTUsMTE4Ljg1NDg2NiBDNy4xMDU0MjczNmUtMTUsMTAzLjc1NDE5NSAxMS43NjQ4Mzc3LDg4LjY1MzUyMzUgMzEuNTI5NzY1LDg4LjY1MzUyMzUgQzQzLjc2NTE5NjIsODguNjUzNTIzNSA1MS41Mjk5ODkxLDk0LjU1MjIyMzIgNTcuMTc3MTExMiwxMDIuNTc0NDU1IEw0Ni4zNTM0NjA1LDEwOC43MDkxMDIgTDQ2LjM1MzQ2MDUsMTA4LjcwOTEwMiBaIiBpZD0icGF0aDU0NDUiIGZpbGw9IiMwMDAwMDAiPjwvcGF0aD4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik02Ny41MzAxNjg0LDkwLjA2OTIxMTQgTDc5Ljc2NTU5OTYsOTAuMDY5MjExNCBMNzkuNzY1NTk5NiwxMjIuMTU4MTM4IEM3OS43NjU1OTk2LDEzMC42NTIyNjUgODUuODgzMzE1MiwxMzYuNTUwOTY1IDkzLjY0ODEwODEsMTM2LjU1MDk2NSBDMTAxLjE3NzYwNCwxMzYuNTUwOTY1IDEwNy41MzA2MTcsMTMwLjQxNjMxNyAxMDcuNTMwNjE3LDEyMi4xNTgxMzggTDEwNy41MzA2MTcsOTAuMDY5MjExNCBMMTE5Ljc2NjA0OCw5MC4wNjkyMTE0IEwxMTkuNzY2MDQ4LDEyMy4xMDE5MyBDMTE5Ljc2NjA0OCwxMzkuMTQ2MzkzIDEwNy4yOTUzMiwxNDguODIwMjYgOTMuNjQ4MTA4MSwxNDguODIwMjYgQzgwLjAwMDg5NjQsMTQ4LjgyMDI2IDY3LjUzMDE2ODQsMTM5LjE0NjM5MyA2Ny41MzAxNjg0LDEyMy4xMDE5MyBMNjcuNTMwMTY4NCw5MC4wNjkyMTE0IEw2Ny41MzAxNjg0LDkwLjA2OTIxMTQgWiIgaWQ9InBhdGg1NDQ3IiBmaWxsPSIjMDAwMDAwIj48L3BhdGg+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTc3LjE3ODQ1NiwxMDguNzA5MTAyIEMxNzMuODg0MzAxLDEwMy41MTgyNDcgMTY5LjE3ODM2Niw5OS45NzkwMjY4IDE2Mi4zNTQ3Niw5OS45NzkwMjY4IEMxNTEuNTMxMTEsOTkuOTc5MDI2OCAxNDMuNzY2MzE3LDEwOC4yMzcyMDYgMTQzLjc2NjMxNywxMTguNjE4OTE4IEMxNDMuNzY2MzE3LDEyOS4wMDA2MjkgMTUxLjUzMTExLDEzNy4yNTg4MDkgMTYyLjM1NDc2LDEzNy4yNTg4MDkgQzE2OS4xNzgzNjYsMTM3LjI1ODgwOSAxNzMuODg0MzAxLDEzMy45NTU1MzcgMTc3LjE3ODQ1NiwxMjguNzY0NjgxIEwxODguMDAyMTA2LDEzNS4xMzUyNzcgQzE4Mi44MjU1NzgsMTQzLjE1NzUwOCAxNzMuMTc4NDExLDE0OS4wNTYyMDggMTYyLjM1NDc2LDE0OS4wNTYyMDggQzE0Mi4zNTQ1MzYsMTQ5LjA1NjIwOCAxMzAuODI0OTk1LDEzMy45NTU1MzcgMTMwLjgyNDk5NSwxMTguODU0ODY2IEMxMzAuODI0OTk1LDEwMy43NTQxOTUgMTQyLjM1NDUzNiw4OC42NTM1MjM1IDE2Mi4zNTQ3Niw4OC42NTM1MjM1IEMxNzQuNTkwMTkxLDg4LjY1MzUyMzUgMTgyLjM1NDk4NCw5NC41NTIyMjMyIDE4OC4wMDIxMDYsMTAyLjU3NDQ1NSBMMTc3LjE3ODQ1NiwxMDguNzA5MTAyIEwxNzcuMTc4NDU2LDEwOC43MDkxMDIgWiIgaWQ9InBhdGg1NDQ5IiBmaWxsPSIjMDAwMDAwIj48L3BhdGg+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTk4LjM1NTE2NCw5MC4wNjkyMTE0IEwyMTAuNTkwNTk1LDkwLjA2OTIxMTQgTDIxMC41OTA1OTUsMTIyLjE1ODEzOCBDMjEwLjU5MDU5NSwxMzAuNjUyMjY1IDIxNi43MDgzMSwxMzYuNTUwOTY1IDIyNC40NzMxMDMsMTM2LjU1MDk2NSBDMjMyLjAwMjU5OSwxMzYuNTUwOTY1IDIzOC4zNTU2MTIsMTMwLjQxNjMxNyAyMzguMzU1NjEyLDEyMi4xNTgxMzggTDIzOC4zNTU2MTIsOTAuMDY5MjExNCBMMjUwLjU5MTA0Myw5MC4wNjkyMTE0IEwyNTAuNTkxMDQzLDEyMy4xMDE5MyBDMjUwLjU5MTA0MywxMzkuMTQ2MzkzIDIzOC4xMjAzMTUsMTQ4LjgyMDI2IDIyNC40NzMxMDMsMTQ4LjgyMDI2IEMyMTAuODI1ODkyLDE0OC44MjAyNiAxOTguMzU1MTY0LDEzOS4xNDYzOTMgMTk4LjM1NTE2NCwxMjMuMTAxOTMgTDE5OC4zNTUxNjQsOTAuMDY5MjExNCBMMTk4LjM1NTE2NCw5MC4wNjkyMTE0IFoiIGlkPSJwYXRoNTQ1MSIgZmlsbD0iIzAwMDAwMCI+PC9wYXRoPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTI2NS44ODUzMzIsMTExLjU0MDQ3OCBDMjY1Ljg4NTMzMiw5Ni45MTE3MDMgMjc1LjUzMjQ5OSw4OC42NTM1MjM1IDI4Ni44MjY3NDMsODguNjUzNTIzNSBDMjk1LjUzMjcyMyw4OC42NTM1MjM1IDMwMS42NTA0MzksOTIuOTAwNTg3MiAzMDQuMDAzNDA2LDk4Ljc5OTI4NjkgTDMwNC4yMzg3MDMsOTguNzk5Mjg2OSBDMzA2LjU5MTY3LDkyLjY2NDYzOTMgMzEyLjcwOTM4Niw4OC42NTM1MjM1IDMyMS40MTUzNjYsODguNjUzNTIzNSBDMzMyLjcwOTYxLDg4LjY1MzUyMzUgMzQyLjM1Njc3Nyw5Ny4xNDc2NTEgMzQyLjM1Njc3NywxMTEuNTQwNDc4IEwzNDIuMzU2Nzc3LDE0Ny40MDQ1NzIgTDMzMC4xMjEzNDYsMTQ3LjQwNDU3MiBMMzMwLjEyMTM0NiwxMTEuNTQwNDc4IEMzMzAuMTIxMzQ2LDEwNC42OTc5ODcgMzI1Ljg4NjAwNCwxMDAuNjg2ODcxIDMyMC43MDk0NzYsMTAwLjY4Njg3MSBDMzE0LjgyNzA1NywxMDAuNjg2ODcxIDMxMC41OTE3MTUsMTA0LjIyNjA5MSAzMTAuNTkxNzE1LDExMy4xOTIxMTQgTDMxMC41OTE3MTUsMTQ3LjE2ODYyNCBMMjk4LjM1NjI4NCwxNDcuMTY4NjI0IEwyOTguMzU2Mjg0LDExMy4xOTIxMTQgQzI5OC4zNTYyODQsMTA0LjIyNjA5MSAyOTQuMTIwOTQyLDEwMC42ODY4NzEgMjg4LjIzODUyNCwxMDAuNjg2ODcxIEMyODMuMDYxOTk1LDEwMC42ODY4NzEgMjc4LjgyNjY1MywxMDQuNjk3OTg3IDI3OC44MjY2NTMsMTExLjU0MDQ3OCBMMjc4LjgyNjY1MywxNDcuMTY4NjI0IEwyNjUuODg1MzMyLDE0Ny4xNjg2MjQgTDI2NS44ODUzMzIsMTExLjU0MDQ3OCBMMjY1Ljg4NTMzMiwxMTEuNTQwNDc4IFoiIGlkPSJwYXRoNTQ1MyIgZmlsbD0iIzAwMDAwMCI+PC9wYXRoPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTM1Ny40MTU3NjksNzMuMDgwOTU2NCBMMzY5LjY1MTIwMSw3My4wODA5NTY0IEwzNjkuNjUxMjAxLDk3LjE0NzY1MSBMMzY5Ljg4NjQ5Nyw5Ny4xNDc2NTEgQzM3Mi43MTAwNTgsOTIuNDI4NjkxMyAzODAuNDc0ODUxLDg4LjY1MzUyMzUgMzg4LjQ3NDk0MSw4OC42NTM1MjM1IEM0MDMuMjk4NjM2LDg4LjY1MzUyMzUgNDE4LjEyMjMzMiw5OS43NDMwNzg5IDQxOC4xMjIzMzIsMTE4Ljg1NDg2NiBDNDE4LjEyMjMzMiwxMzcuOTY2NjUzIDQwMy4yOTg2MzYsMTQ5LjA1NjIwOCAzODguNDc0OTQxLDE0OS4wNTYyMDggQzM4MC40NzQ4NTEsMTQ5LjA1NjIwOCAzNzIuNzEwMDU4LDE0NS4yODEwNCAzNjkuODg2NDk3LDE0MC41NjIwODEgTDM2OS42NTEyMDEsMTQwLjU2MjA4MSBMMzY5LjY1MTIwMSwxNDcuNjQwNTIgTDM1Ny40MTU3NjksMTQ3LjY0MDUyIEwzNTcuNDE1NzY5LDczLjA4MDk1NjQgTDM1Ny40MTU3NjksNzMuMDgwOTU2NCBaIE0zODcuMjk4NDU3LDEwMC4yMTQ5NzUgQzM3Ny4xODA2OTcsMTAwLjIxNDk3NSAzNjkuNjUxMjAxLDEwOC4yMzcyMDYgMzY5LjY1MTIwMSwxMTguODU0ODY2IEMzNjkuNjUxMjAxLDEyOS40NzI1MjUgMzc3LjE4MDY5NywxMzcuNDk0NzU3IDM4Ny4yOTg0NTcsMTM3LjQ5NDc1NyBDMzk3LjY1MTUxNCwxMzcuNDk0NzU3IDQwNS4xODEwMSwxMjkuNDcyNTI1IDQwNS4xODEwMSwxMTguODU0ODY2IEM0MDUuMTgxMDEsMTA4LjAwMTI1OCAzOTcuNjUxNTE0LDEwMC4yMTQ5NzUgMzg3LjI5ODQ1NywxMDAuMjE0OTc1IEwzODcuMjk4NDU3LDEwMC4yMTQ5NzUgWiIgaWQ9InBhdGg1NDU1IiBmaWxsPSIjMDAwMDAwIj48L3BhdGg+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNDg0LjAwNTQyMywxMzQuODk5MzI5IEM0NzcuMTgxODE3LDE0My42Mjk0MDQgNDY3Ljc2OTk0NywxNDguODIwMjYgNDU3LjQxNjg5LDE0OC44MjAyNiBDNDM3LjQxNjY2NiwxNDguODIwMjYgNDI1Ljg4NzEyNSwxMzMuNzE5NTg5IDQyNS44ODcxMjUsMTE4LjYxODkxOCBDNDI1Ljg4NzEyNSwxMDMuNTE4MjQ3IDQzNy42NTE5NjIsODguNjUzNTIzNSA0NTcuNDE2ODksODguNjUzNTIzNSBDNDY5LjE4MTcyNyw4OC42NTM1MjM1IDQ4Ny4wNjQyODEsOTguNTYzMzM4OSA0ODcuMDY0MjgxLDEyMC43NDI0NSBMNDg3LjA2NDI4MSwxMjIuODY1OTgyIEw0MzkuNzY5NjMzLDEyMi44NjU5ODIgQzQ0MC40NzU1MjMsMTMxLjU5NjA1NyA0NDguNzEwOTEsMTM3Ljk2NjY1MyA0NTcuMTgxNTkzLDEzNy45NjY2NTMgQzQ2My43Njk5MDIsMTM3Ljk2NjY1MyA0NjkuNDE3MDI0LDEzNC42NjMzODEgNDczLjY1MjM2NiwxMjkuMDAwNjI5IEw0ODQuMDA1NDIzLDEzNC44OTkzMjkgTDQ4NC4wMDU0MjMsMTM0Ljg5OTMyOSBaIE00NzIuNzExMTc5LDExMi43MjAyMTggQzQ3MC4xMjI5MTQsMTAzLjk5MDE0MyA0NjMuNzY5OTAyLDk5LjI3MTE4MjkgNDU1Ljc2OTgxMiw5OS4yNzExODI5IEM0NDguMDA1MDIsOTkuMjcxMTgyOSA0NDEuNjUyMDA3LDEwNC4yMjYwOTEgNDM5LjUzNDMzNiwxMTIuNzIwMjE4IEw0NzIuNzExMTc5LDExMi43MjAyMTggTDQ3Mi43MTExNzksMTEyLjcyMDIxOCBaIiBpZD0icGF0aDU0NTciIGZpbGw9IiMwMDAwMDAiPjwvcGF0aD4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik01NjAuNDU4MjMzLDAuOTI3MTcwMTk3IEM1MzkuMTYyNjIxLDAuOTI3MTcwMTk3IDUyMS45MjgzODksMTguMjA5MTAxNyA1MjEuOTI4Mzg5LDM5LjU2MzY1MyBDNTIxLjkyODM4OSw1OC4zNjUwMjIgNTM1LjM2ODY1NCw3My45ODcwNjc0IDU1My4xMDUyMDksNzcuNDYyNzk4MyBMNTUzLjEwNTIwOSw4OC41MjI4NjAyIEM1NzYuMTY0NTEyLDg1LjAzNjcyNCA1OTYuNTgyMTMxLDY2LjY4MTQ2NDIgNTk4LjEwNTcxMyw0Mi41ODY3MzY2IEM1OTkuMDIyNzgyLDI4LjA4MzcyODggNTkxLjgxMTYzMSwxMy4yNzc5MTA3IDU3OS42NDk2MjQsNi4wODg1MzI0IEM1NzguOTUzMjk5LDUuNjc2OTExIDU3OC4yNDU4MzQsNS4yNjgyNzcxNiA1NzcuNTE3MjQ3LDQuOTA4NzkyNDcgQzU3Ni43NzQ4NDgsNC41NDI0OTMxMyA1NzYuMDEyNDk5LDQuMTg1NDkwMTQgNTc1LjIzNzgxLDMuODc2NTIwMDMgQzU3NC45OTE5MDEsMy43NzMzNjc4MiA1NzQuNzUwOTQ4LDMuNjc5NzkyMjYgNTc0LjUwMjUwOCwzLjU4MTU4NTA1IEM1NzMuODI1ODk1LDMuMzMxMTIyNzIgNTczLjE0MzE2OCwzLjA0OTA4MyA1NzIuNDQzNjYxLDIuODQ0MjQ3NTkgQzU2OC42NzM0MzgsMS41OTgxNDUxNiA1NjQuNjQzMTI2LDAuOTI3MTcwMTk3IDU2MC40NTgyMzMsMC45MjcxNzAxOTcgTDU2MC40NTgyMzMsMC45MjcxNzAxOTcgWiIgaWQ9InBhdGgzOTQzIiBmaWxsPSIjMDBBODE4Ij48L3BhdGg+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNTY4LjM5OTQ5OCwxNS4yMzE1MTY5IEM1NjcuMDgxNDY5LDE1LjA5NjAzMDggNTY1LjY5MzU4NSwxNS41NTU5NDU0IDU2NC43MjI5ODYsMTYuNzA2MTkxOCBDNTY0LjAxNzA5NiwxNy42NDk5ODM3IDU2My41NzU5MTUsMTguNTY0MjgyMiA1NjMuMTA1MzIxLDE5LjUwODA3NDEgQzU2MS42OTM1NCwyMi44MTEzNDYgNTYyLjE2NDEzNCwyNi4zNTA1NjU4IDU2NC4yODE4MDUsMjguOTQ1OTkzNiBDNTY3LjU3NTk1OSwyOC4yMzgxNDk2IDU3MC4zNzAxMDgsMjYuMTI5MzY0NSA1NzEuNzgxODg5LDIyLjgyNjA5MjcgQzU3Mi4yNTI0ODIsMjEuODgyMzAwOCA1NzIuNTE3MTkxLDIwLjY3MzA2NzMgNTcyLjUxNzE5MSwxOS43MjkyNzU0IEM1NzIuNjY0MjUyLDE3LjIyMjMyOCA1NzAuNTk2MjE0LDE1LjQ1NzMyNjQgNTY4LjM5OTQ5OCwxNS4yMzE1MTY5IEw1NjguMzk5NDk4LDE1LjIzMTUxNjkgWiBNNTUxLjI2Njk1MywxNS40NTI3MTgxIEM1NDkuMTE4NDkxLDE1LjY1Nzc5MDIgNTQ3LjA3NTczLDE3LjM2OTc5NTUgNTQ3LjA3NTczLDE5LjcyOTI3NTQgQzU0Ny4wNzU3MywyMC42NzMwNjczIDU0Ny4zNDA0MzgsMjEuODgyMzAwOCA1NDcuODExMDMyLDIyLjgyNjA5MjcgQzU0OS4yMjI4MTMsMjYuMTI5MzY0NSA1NTIuMjM3NTUyLDI4LjIzODE0OTYgNTU1LjUzMTcwNywyOC45NDU5OTM2IEM1NTcuNDE0MDgxLDI2LjM1MDU2NTggNTU3Ljg5OTM4LDIyLjgxMTM0NiA1NTYuNDg3NiwxOS41MDgwNzQxIEM1NTYuMDE3MDA2LDE4LjU2NDI4MjIgNTU1LjU3NTgyNSwxNy42MzUyMzcgNTU0Ljg2OTkzNSwxNi45MjczOTMgQzU1My44OTkzMzUsMTUuNzc3MTQ2NiA1NTIuNTU2MDMxLDE1LjMyOTY3NSA1NTEuMjY2OTUzLDE1LjQ1MjcxODEgTDU1MS4yNjY5NTMsMTUuNDUyNzE4MSBaIE01MzkuNzIyNzA2LDI2LjgwNzcxNSBDNTM2LjAxMjMwMSwyNi45OTg2Njc3IDUzNC4zNTQ5OTksMzEuNjc0MTQyMiA1MzcuNDQzMjY5LDM0LjEwNzM1NTggQzUzOC4zODQ0NTYsMzQuODE1MTk5OCA1MzkuMjk2MjMxLDM1LjMzMTMzNiA1NDAuMjM3NDE4LDM1LjgwMzIzMiBDNTQzLjUzMTU3MiwzNy4yMTg5MTk5IDU0Ny4zNDA0MzgsMzYuNzMyMjc3MiA1NTAuMTY0LDM0Ljg0NDY5MzMgQzU0OS40NTgxMDksMzEuNzc3MzY5NCA1NDcuMDYxMDI0LDI4Ljk2MDc0MDQgNTQzLjc2Njg2OSwyNy41NDUwNTI0IEM1NDIuNTkwMzg1LDI3LjA3MzE1NjUgNTQxLjYzNDQ5MiwyNi44MDc3MTUgNTQwLjQ1ODAwOCwyNi44MDc3MTUgQzU0MC4xOTMzLDI2Ljc3ODIyMTUgNTM5Ljk3MDA2NiwyNi43OTQ5NzM4IDUzOS43MjI3MDYsMjYuODA3NzE1IEw1MzkuNzIyNzA2LDI2LjgwNzcxNSBaIE01NzUuOTczMTEyLDQxLjExMjA2MTcgQzU3My44MTc3NTYsNDEuMDcwNTgyIDU3MS42MzQ4MjgsNDEuNzAxOTMxNiA1NjkuODcwMTAzLDQyLjg4MTY3MTYgQzU3MC41NzU5OTMsNDUuOTQ4OTk1NCA1NzIuOTczMDc5LDQ4Ljc2NTYyNDUgNTc2LjI2NzIzMyw1MC4xODEzMTI0IEM1NzcuNDQzNzE3LDUwLjY1MzIwODQgNTc4LjM5OTYxLDUwLjkxODY0OTkgNTc5LjU3NjA5NCw1MC45MTg2NDk5IEM1ODMuODExNDM1LDUxLjE1NDU5NzggNTg1Ljg4NDk4OCw0NS45MDQ3NTUxIDU4Mi41OTA4MzMsNDMuNTQ1Mjc1MyBDNTgxLjY0OTY0Niw0Mi44Mzc0MzEzIDU4MC43Mzc4NzEsNDIuMzk1MDI4OCA1NzkuNzk2Njg0LDQxLjkyMzEzMjkgQzU3OC41NjEzNzcsNDEuMzkyMjQ5OSA1NzcuMjY2MzI0LDQxLjEzNjk0NzEgNTc1Ljk3MzExMiw0MS4xMTIwNjE3IEw1NzUuOTczMTEyLDQxLjExMjA2MTcgWiBNNTQzLjg0MDM5OSw0MS4zMzMyNjI5IEM1NDIuNTQ3MTg2LDQxLjM1ODE1NTQgNTQxLjI1MjEzNSw0MS42MTM0NTExIDU0MC4wMTY4MjcsNDIuMTQ0MzM0MSBDNTM4Ljg0MDM0Myw0Mi42MTYyMzAxIDUzNy45Mjg1NjgsNDMuMTMyMzY2MyA1MzcuMjIyNjc4LDQzLjg0MDIxMDMgQzUzNC4xNjM4Miw0Ni40MzU2MzgxIDUzNi4yMjI2NjcsNTEuMzc1Nzk5MSA1NDAuNDU4MDA4LDUxLjEzOTg1MTEgQzU0MS42MzQ0OTIsNTEuMTM5ODUxMSA1NDIuODI1NjgyLDUwLjg3NDQwOTYgNTQzLjc2Njg2OSw1MC40MDI1MTM2IEM1NDcuMDYxMDI0LDQ4Ljk4NjgyNTcgNTQ5LjM5OTI4NSw0Ni4xNzAxOTY2IDU0OS44Njk4NzksNDMuMTAyODcyOCBDNTQ4LjEwNTE1Myw0MS45MjMxMzI5IDU0NS45OTU3NTUsNDEuMjkxNzg4IDU0My44NDAzOTksNDEuMzMzMjYyOSBMNTQzLjg0MDM5OSw0MS4zMzMyNjI5IFogTTU1NS43NTIyOTcsNDguNTU5MTcgQzU1Mi40NTgxNDMsNDkuMjY3MDEzOSA1NDkuNjYzOTk0LDUxLjM3NTc5OTEgNTQ4LjI1MjIxMyw1NC42NzkwNzA5IEM1NDcuNzgxNjIsNTUuNjIyODYyOCA1NDcuNTE2OTExLDU2Ljc1ODM2MjUgNTQ3LjUxNjkxMSw1Ny43MDIxNTQ1IEM1NDcuMjgxNjE0LDYxLjcxMzI3MDIgNTUyLjczNzU1OCw2My44NjYyOTU2IDU1NS4wOTA1MjUsNjAuNzk4OTcxOCBDNTU1Ljc5NjQxNiw1OS44NTUxNzk4IDU1Ni4yMzc1OTcsNTguOTQwODgxNCA1NTYuNzA4MTksNTcuOTk3MDg5NSBDNTU4LjExOTk3MSw1NC45Mjk3NjU2IDU1Ny42MzQ2NzEsNTEuMzkwNTQ1OCA1NTUuNzUyMjk3LDQ4LjU1OTE3IEw1NTUuNzUyMjk3LDQ4LjU1OTE3IFogTTU2NC41MDIzOTUsNDguNzgwMzcxMiBDNTYyLjYyMDAyMSw1MS4zNzU3OTkxIDU2Mi4xMzQ3MjIsNTQuOTE1MDE4OSA1NjMuNTQ2NTAyLDU4LjIxODI5MDcgQzU2NC4wMTcwOTYsNTkuMTYyMDgyNiA1NjQuNDU4Mjc3LDYwLjA5MTEyNzggNTY1LjE2NDE2OCw2MC43OTg5NzE4IEM1NjcuNzUyNDMyLDYzLjYzMDM0NzYgNTczLjE5MzY2OSw2MS41MzYzMDkyIDU3Mi45NTgzNzMsNTcuOTk3MDg5NSBDNTcyLjk1ODM3Myw1Ny4wNTMyOTc1IDU3Mi42OTM2NjQsNTUuODQ0MDY0MSA1NzIuMjIzMDcsNTQuOTAwMjcyMSBDNTcwLjgxMTI5LDUxLjU5NzAwMDMgNTY3Ljc5NjU1LDQ5LjQ4ODIxNTIgNTY0LjUwMjM5NSw0OC43ODAzNzEyIEw1NjQuNTAyMzk1LDQ4Ljc4MDM3MTIgWiIgaWQ9InJlY3Q0MDA1IiBmaWxsPSIjRkZGRkZGIj48L3BhdGg+CiAgICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPg&#x3D;&#x3D;" 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-shippping-tests" title="Tracker message Flexible Shippping tests">Tracker message Flexible Shippping tests</a>
429
+ <ul class="scenario-list">
430
+ <li class="failed"><a href="#S_tracker-message-flexible-shippping-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-shippping-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-flexible-shipping-tests" title="Activate Flexible shipping tests">Activate Flexible shipping tests</a>
436
+ <ul class="scenario-list">
437
+ <li class="passed"><a href="#S_activate-flexible-shipping-tests;plugin-flexible-shipping-is-active" title="Plugin Flexible Shipping is active">Plugin Flexible Shipping is active</a></li>
438
+ <li class="passed"><a href="#S_activate-flexible-shipping-tests;plugin-flexible-shipping-is-inactive" title="Plugin Flexible Shipping is inactive">Plugin Flexible Shipping 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 Shippping 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.04 s</td>
476
+ <td class="status">failed</td>
477
+ </tr>
478
+ <tr class="passed">
479
+ <td>Activate Flexible shipping 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.37 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-shippping-tests">
496
+ <h2>Feature: Tracker message Flexible Shippping tests <span class="tags">@flexible-shipping</span></h2>
497
+
498
+ <p class="filename">&#x2F;tmp&#x2F;tests&#x2F;test-acceptance&#x2F;features&#x2F;tests_scenario&#x2F;flexible-shipping&#x2F;trackerMessageIsVisibleWhenActivatePluginFlexibleShippingTest.feature</p>
499
+
500
+ <p class="story"></p>
501
+ <h3 id="S_tracker-message-flexible-shippping-tests;tracker-long-message-is-visible">
502
+ Scenario: Tracker long message is Visible
503
+ <span class="scenario-tag">@flexible-shipping</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.32 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 &quot;menu-plugins&quot; and activate plugin with slug &quot;flexible-shipping&quot;
557
+ <table class="datatable">
558
+ <!-- -->
559
+ </table>
560
+ </td>
561
+ <td>15</td>
562
+ <td class="duration">0.67 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">1.34 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 menu &quot;toplevel_page_woocommerce&quot; and submenu &quot;Settings&quot; then open tab &quot;Shipping&quot;
595
+ <table class="datatable">
596
+ <!-- -->
597
+ </table>
598
+ </td>
599
+ <td>17</td>
600
+ <td class="duration">1.42 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 &quot;long&quot; visible
614
+ <table class="datatable">
615
+ <!-- -->
616
+ </table>
617
+ </td>
618
+ <td>18</td>
619
+ <td class="duration">0.09 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 &#39;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.&#39; to include &#39;\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&#39;</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 &quot;menu-plugins&quot; and deactivate plugin with slug &quot;flexible-shipping&quot;
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-shippping-tests;tracker-message-is-visible">
655
+ Scenario: Tracker message is Visible
656
+ <span class="scenario-tag">@flexible-shipping</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.27 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 &quot;menu-plugins&quot; and activate plugin with slug &quot;flexible-shipping&quot;
710
+ <table class="datatable">
711
+ <!-- -->
712
+ </table>
713
+ </td>
714
+ <td>9</td>
715
+ <td class="duration">0.67 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 &quot;short&quot; visible
729
+ <table class="datatable">
730
+ <!-- -->
731
+ </table>
732
+ </td>
733
+ <td>10</td>
734
+ <td class="duration">0.11 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 &amp; Continue visible in tracker message
748
+ <table class="datatable">
749
+ <!-- -->
750
+ </table>
751
+ </td>
752
+ <td>11</td>
753
+ <td class="duration">0.12 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 &quot;menu-plugins&quot; and deactivate plugin with slug &quot;flexible-shipping&quot;
767
+ <table class="datatable">
768
+ <!-- -->
769
+ </table>
770
+ </td>
771
+ <td>12</td>
772
+ <td class="duration">1.02 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-flexible-shipping-tests">
790
+ <h2>Feature: Activate Flexible shipping tests <span class="tags">@flexible-shipping</span></h2>
791
+
792
+ <p class="filename">&#x2F;tmp&#x2F;tests&#x2F;test-acceptance&#x2F;features&#x2F;tests_scenario&#x2F;flexible-shipping&#x2F;activateAndDeactivateFlexibleShippingTests.feature</p>
793
+
794
+ <p class="story"></p>
795
+ <h3 id="S_activate-flexible-shipping-tests;plugin-flexible-shipping-is-active">
796
+ Scenario: Plugin Flexible Shipping is active
797
+ <span class="scenario-tag">@flexible-shipping</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.28 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 &quot;menu-plugins&quot; and activate plugin with slug &quot;flexible-shipping&quot;
851
+ <table class="datatable">
852
+ <!-- -->
853
+ </table>
854
+ </td>
855
+ <td>9</td>
856
+ <td class="duration">1.99 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 &quot;flexible-shipping&quot; is Active
870
+ <table class="datatable">
871
+ <!-- -->
872
+ </table>
873
+ </td>
874
+ <td>10</td>
875
+ <td class="duration">0.39 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-flexible-shipping-tests;plugin-flexible-shipping-is-inactive">
892
+ Scenario: Plugin Flexible Shipping is inactive
893
+ <span class="scenario-tag">@flexible-shipping</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.02 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 &quot;menu-plugins&quot; and deactivate plugin with slug &quot;flexible-shipping&quot;
947
+ <table class="datatable">
948
+ <!-- -->
949
+ </table>
950
+ </td>
951
+ <td>13</td>
952
+ <td class="duration">1.01 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 &quot;flexible-shipping&quot; is Inactive
966
+ <table class="datatable">
967
+ <!-- -->
968
+ </table>
969
+ </td>
970
+ <td>14</td>
971
+ <td class="duration">0.36 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-shipping</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">10.41 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_2468.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-flexible-shipping-tests;plugin-flexible-shipping-is-active",
6
+ "keyword": "Scenario",
7
+ "line": 8,
8
+ "name": "Plugin Flexible Shipping is active",
9
+ "steps": [
10
+ {
11
+ "arguments": [],
12
+ "keyword": "Before ",
13
+ "result": {
14
+ "status": "passed",
15
+ "duration": 3599406680
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": 282314689
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": 34143651
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-shipping\"",
52
+ "result": {
53
+ "status": "passed",
54
+ "duration": 1994588779
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-shipping\" is Active",
65
+ "result": {
66
+ "status": "passed",
67
+ "duration": 393258709
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": 2005638388
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-shipping",
90
+ "line": 1
91
+ }
92
+ ],
93
+ "type": "scenario"
94
+ },
95
+ {
96
+ "id": "activate-flexible-shipping-tests;plugin-flexible-shipping-is-inactive",
97
+ "keyword": "Scenario",
98
+ "line": 12,
99
+ "name": "Plugin Flexible Shipping is inactive",
100
+ "steps": [
101
+ {
102
+ "arguments": [],
103
+ "keyword": "Before ",
104
+ "result": {
105
+ "status": "passed",
106
+ "duration": 866650920
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": 283896978
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": 20358313
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-shipping\"",
143
+ "result": {
144
+ "status": "passed",
145
+ "duration": 1006091149
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-shipping\" is Inactive",
156
+ "result": {
157
+ "status": "passed",
158
+ "duration": 358107833
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": 1947716328
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-shipping",
181
+ "line": 1
182
+ }
183
+ ],
184
+ "type": "scenario"
185
+ }
186
+ ],
187
+ "id": "activate-flexible-shipping-tests",
188
+ "keyword": "Feature",
189
+ "line": 2,
190
+ "name": "Activate Flexible shipping tests",
191
+ "tags": [
192
+ {
193
+ "name": "@flexible-shipping",
194
+ "line": 1
195
+ }
196
+ ],
197
+ "uri": "/tmp/tests/test-acceptance/features/tests_scenario/flexible-shipping/activateAndDeactivateFlexibleShippingTests.feature"
198
+ },
199
+ {
200
+ "elements": [
201
+ {
202
+ "id": "tracker-message-flexible-shippping-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": 1062553304
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": 266135692
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": 908454
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-shipping\"",
249
+ "result": {
250
+ "status": "passed",
251
+ "duration": 666316716
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": 107457293
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": 122730481
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-shipping\"",
288
+ "result": {
289
+ "status": "passed",
290
+ "duration": 1024714441
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": 1970986080
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-shipping",
313
+ "line": 1
314
+ }
315
+ ],
316
+ "type": "scenario"
317
+ },
318
+ {
319
+ "id": "tracker-message-flexible-shippping-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": 916184383
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": 317356268
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": 21112418
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-shipping\"",
366
+ "result": {
367
+ "status": "passed",
368
+ "duration": 667289657
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": 1339171885
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 menu \"toplevel_page_woocommerce\" and submenu \"Settings\" then open tab \"Shipping\"",
392
+ "result": {
393
+ "status": "passed",
394
+ "duration": 1418840471
395
+ },
396
+ "line": 17,
397
+ "match": {
398
+ "location": "/tmp/tests/test-acceptance/features/step_definitions/menu/menuSteps.js:23"
399
+ }
400
+ },
401
+ {
402
+ "arguments": [],
403
+ "keyword": "Then ",
404
+ "name": "tracker message type \"long\" visible",
405
+ "result": {
406
+ "status": "failed",
407
+ "duration": 88741344,
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-shipping\"",
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": 2161554779
433
+ },
434
+ "hidden": true,
435
+ "embeddings": [
436
+ {
437
+ "data": "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48aNq5d+apoCuk4JYAB7e3s6depImzZtad6sOW7ubthsNvLy8jlzJoEjR44QHRODtbT0kgIXEREREREREREREREREZG6qXMCWERERERERERERERERERErk7mhg5ARERERERERERERERERETqhxLAIiIiIiIiIiIiIiIiIiLXCSWARURERERERERERERERESuE0oAi4iIiIiIiIiIiIiIiIhcJ5QAFhERERERERERERERERG5Ttg3dADyv23P9s0NHYKIiIiIiIiIiIiIiIjUk9TUVIKDgxs6jGtGXFwcjRs3rtc+VQEsIiIiIiIiIiIiIiIiIpfMZrM1dAjXpPoeNyWARURERERERERERERERESuE0oAi4iIiIiIiIiIiIiIiIhcJ5QAFhERERERERERERERERG5TigBLCIiIiIiIiIiIiIiIiJynVACWERERERERERERERERETkOqEEsIiIiIiIiIiIiIiIiIjIdUIJYBERERERERERERERERG5rpSUlHA8/mRDh9EglAAWERERERERERERERERkevKqdMJfPbVjIYOo0EoASwiIiIiIiIiIiIiIiIiV5UfflrADz8tuGD7pBf/TnTM4QaI6Nph39ABiIiIiIiIiIiIiIiIiIhcjb6d9SORUQcr3deta2ceefjBKxxRzZQAFhEREREREREREREREZFr0vadu1m3YRO5ebm0CQ7m/lF34+7mdkG7FavXsmv3XnJy83B3d6Nzp44Mvz0cJyenavsfdc+dHI2LIz+/oMJ2dzc3Rt19Z71eS33RFNAiIiIiIiIiIiIiIiIics2JOXyERUuWMeqeO3j+macpKipiccTyStueTjhDxw7tmfzsBMY8dD9H447z04JFNZ7D3d2Ne++644Lt9917F25urpd8DZeDKoBFRERERERERERERERE5KqzZ18kkQcqTr9cWlpq/LxpyzZ6h/agXds2AAy8rT/fzf6xyv7c3dzw9vbC29uLB0bdw8effsG999yJm2v1idwe3buyLzKKqOgY43WXkE4Xe1mXnRLAIiIiIiIiIiIiIiIiInLVCenYgTuGD6mw7d0P/m38nJ2dTezRY2zbscvYZrPZsBQX19h3kwB/ANLTM2pMAAPcN/Iujh0/jr2dfaUVwVcTJYBFRERERERERERERERE5Krj5ORIY1/fKvf7eHvTvl0b7hw+tM59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unZl9ZqyKayPHosjfNBtmM1m45sLoT26EXc8HqDGuCpz9FgcQ4eE4+jggKW48mm0RURERERERERERERERK529Z3MlLqrdQL4eHw8vo19q23j4Vl5svPEiRN1iwoI8PcntGd3fLy9adeuLQ/cdy+JiUl8/OlnAMTFHWfI4EEMDg/j5MlTBLdqZRwbFNiSzp1DiIs7joeHO76+vkQdjKnqVBdoEhBAn969cHF25oH7RuLu5sr3c+YCMHfeAu4bdQ9v/v1lFi9dRpfOIQwfejuTJr9cY1xV+XHefEaNvIv3332beQt+pshSRJOAAI7Hx9dlyERERERERERERERERETkf1ytE8B79uwmNLTnBVn7ESNG8POiRcbP57PZbOzZtadOQZ09m8yA/v0IG3grefn5xMef4OsZ3/LTgp8pKioCYMGixQQFBfLc3/6Kp6cnObm5xBw6jNVqxde3EY+NG0vTJgHk5eWzY+cupn/zba3OHR1zmJBOnXjnrddxsLdnf+QBHn1iPBkZGQCkpKbyx/F/4YXnnuH9d98mJSWFl159nY2bNtcYV1VSU9N47I9/4tm//ZW33niV4pISkpNTOBh9qE7jJiIiIiIiIiIiIiIiIiL/20ytO3SpekHb8wwZMoTevXvX6QQ7d+5k1apVdQ5M/jfs2b75ip8zNjZWa97VIDExsdr1ZzWGl642Y6w1gC9OTWOn+/fy0bNDrhTdazXTGDWMmsZdRERERERERORKqHUFMMCqVauUzBURERERERERERERERERuUqZGzoAERERERERERERERERERGpH0oAi4iIiIiIiIiIiIiIiIhcJ5QAFhERERERERERERERERG5TigBLCIiIiIiIiIiIiIiIiJynVACWOQ6ZrPZ2LFjB4sXL8ZisTR0OFdMfHw8mzZtIiMjo6FDuWokJCSwYMEC1q9f39ChiIjIeXJzc9myZQtr165t6FDqXXJyMjt27CAuLq6hQ6mTkpISDh48yIYNGxo6FBERERERERGROlMCWOQ6ZrVamTNnDuvWraOkpKShw7liZs2axYIFC8jMzLzkvkpLSzl79iz5+fn1EFnDmTFjBo899hgrV66sdP/evXtp3bo1v//97+vtnJejT6kfeXl5JCUlNXQY1z2LxcKpU6caOoxa27p1K88//zy//vprQ4dy3Tt16hQvvfQSM2fOBMq+pDNv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vwHo0e0hYi5cJDk5mRbNmpGVlUVCYiJpqWkkJCQydPAgNvzwI1X9/fn2uw3079ub8PCDANSpVYv4+PgbGr/cWKV937SIiIiIiIiIiIiIiIhIRbKyMj8DcmmUqgO4emB1o/P3/PlIvvrqK7Kzs+nduzc1a9bk0KFDJCUmlltwxflt2++89a/xvDDsOQYPeoqjR4/x3D9e5GJsLAB3t25Fu3Z3Y2dnx7lz53n7X+NJSMiJa8Lkqbz0wj/oeN89RJw5y/YdO3mgy/28MOw5MrOyOHr0OO9/MPmG74PcGCaTCZPJRN/fh+T7fGO3byooIhEREREREREREREREZHi5Q5OLa9OYKua9RpZNFzS1dWVZ599FicnJ86dP8+Kr74ypma2sbGhRcsW/LHzD42+lFLZs3NbuaZnMpnIzMxkwM7n8n2uDmARERERERERERERERG5FV26dAlbW9ty6wC2eARwj0cewcnJiWPHjvHt2rVkZGYa32VlZbFzx85yCUikrLKzsys6BBERERERERERERERERGLlHfflkUdwCEhIQQEBLBx40Z27dpVrgGIiIiIiIiIiIiIiIiIiEj5sKgDODExgblz5pB4E97vKyIiIiIiIiIiIiIiIiIi18eiDuBz587f6DhERERERERERERERERERKSMrCs6ABERERERERERERERERERKR/qABYRERERERERERERERERuUOoA1hERERERERERERERERE5A6hDmARERERERERERERERERkTuEOoBFRERERERERERERERERO4Q6gAWEREREREREREREREREblD2FR0ACJSeikpKZhMJpydnSs6FBERERERERERERERkTve1YQE/ty9l1Onz5CSkoKbmyt1a9eiZfOm2NvbV3R4+agDWOQ29OKLL/Lkk0/SpUuXUq23cuVK9uzZw5QpU25QZCIiIiIiIiIiIiIiIneWX7du5/uNm8jKysr3+cFDR9i4aQt9n+hFg/r1Kii6wjQFtEgJBgwYwMaNG/N9dvjwYbp27UpqamqFxGQyma5rvUaNGtG5c+dyjkZEREREREREREREROTOtGnLL6zb8AP29nY4Oznl+87TswqpaWl8sWQ5Bw8fqaAIC1MHsMjfSEhICKGhoRUdhoiIiIiIiIiIiIiIyC0vOuYCGzdtwdnZieHPDWX480ONTmA/P19GvvA8g5/q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vzje3t506tSJb7/9lvDwcOPcv6Q8a+nvC9eX765XebWvkNP5V9xvWdy+29raMnToUJ588knmz5/P22+/na9OhpyHg+Li4li4cCEuLi4lTh0LJf8elp6L56pTpw7u7u5s2bKFQ4cO8c477wA510gbN27EwcHBGFlYmuN43333MWbMGLZu3UqLFi1o2bIlH3/8MVu3biUoKMi4FisvuXm/pLJeUhtzu7SFZTmXLa4uz6u4/FvSdZu57RZVhxd8DYwl+feBBx5g7ty5xuuN6tatC2DxdVVFtP0FFXUs6tWrV6o8diOvlYorB2XJdyW53vuS5hSXjz/88ENatGhhvFM6d3rropTmmr0o1So7ElSldO2OtZWVcdxqVHHiyMWEEtdxtbfBw9GWE5eSaFk954GS47FJOWl4OGMyQXxaBmlZ13CwqVRofQebSqRfs/z1awU7lK2srIy/a3g4seFw/gfgjl9KMnscAt2deKCOLx/2aGJ2u5eS05my5QjLn2rDD0eiOX4piTWD21kct4jceGWaAlrk7yAoKAgfHx/CwsLy3Sh88MEHWbVqFYDxNH+nTp04c+YMy5YtIyYmhpiYGDFReK0AACAASURBVOOpztJ48MEHWb9+Pb/99huxsbGcO3fOOEk0t4277rqLkJAQpkyZwsmTJ4mLizP7dF+XLl1ITExk/fr1+fate/fuLFq0iEOHDhEREcGMGTNo37497u7uBAUF4ezszKJFi4ztl5eSjp+zszPHjx833kEbExNDeHg4MTExLFiwgGvXrhV5AhgQEMDOnTu5cOEChw8fJisry+w+lidLY4ScG+b169dn+vTpnDt3jr1797JixQq6d+9uLNOtWzcWLVpEXFyccVOmVq1aBAcH89FHH3H69GkuXbqU731eBeXeMMjOzubee+8Fci46c5+wLGoKytIaP348I0aMYMiQIZw/f57g4GD69u0LQI8ePQBYvHgxK1asYNWqVcybNw8fHx/S09N59tln+fTTTzl48CDZ2dmFnuwNDg5m9OjRZGdnM2XKFBISij/5njBhAuPGjWPz5s04Ojpy99134+bmhoODAxcvXuTDDz/E3d2d4OBg4uLieOWVVwq9e7Vz584MGjQIe3t7Nm3axOXLOdPoXM/ozL179zJy5EgWLVpkXOTmXuiNGTOGefPmFVonPDycq1evYm9vT0BAgFGmLc3D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EREREakiFAAWEREREREREREREREREakiFAAWEREREREREREREREREakiFAAWEREREREREREREREREakiFAAWEREREREREREREREREakiFAAWEREREREREREREREREakiFAAWEREREREREREREREREakiFAAWEREREREREREREREREakizOXdcMKECaVK9+abb5Z3FyIiIiIiIiIiIiIiIiIiUgbqASwiIiIiIiIiIiIiIiIiUkWUuwewyNXgdGIaY5bvZsXB0yRlZFd2cS6Zp4uZ/tf48d9BrfHzcqvs4oiIiIiIiIiIiIiIiEgFK1MA+MKwz5d7WOd3pr5B9+u6YjabiU9I4NSpKJb//CvLlv+M3W6/rPsWyevxhb+z+lQqVrdq4Pbv7zCflGNj2f5TpCQk8OuoAZVdHBEREREREREREREREalgV2QP4Nq1a7Fx0x98/e0iXF3daNemNS8+N4b69YJ47/0PK7t4chVZuf8kOXX8wfTvD/4CYDJidXVl1f6TlV0SERERERERERERERERuQyuyAAwwNmzMezZux+A7X/twNXVldtuvZn33v+Qju3b8erE8fj6+hBz7hxLfviRhd/8n2Pb4Pr1ePnF52nZohlp6emcPh3Np5/PZ9PmLQD4+vrwwtjRdL62IympKXy/ZJlj+9q1a/HKuBdo07oVdpuN31auZvrMWf/8CZArQo7NBmanyi5GxTI7kWO3VXYpRERERERERERERERE5DK4YgPAF0tPT8fZ2RmAE6dOMXPW+8TFJ9CmVUuefeZpdu/dx67de/D19WHe3DmE7trDuAmTsdvtvDLuBRo0qM+mzVswGAzMmjGN+IQExr0yibp1A3nhudGcOn2ades3MmbUCKpVq8YL4yZgt9swm/81p0hERERERERERERERERErnJXbHTTYDBgNpvxqFaN9u3aMviu2/lz23YAzpw5y5kzZwHYvWcv/W7sS+tWLdm1ew/3DL6T1LQ0XnplIlZrNgApySmOfHtc14369YJ46pnRpKWlsyNkJ21at+KGPr1Zt34j1X19OX48kh1/h/zzBy0iIiIiIiIiIiIiIiIicgmu2ADwffcM5r57BgOQmZnJ6rXr+e8HcwBo1LABo0Y8RbNm12C32bG4WHB3dwOgSeNG7Azd5Qj+XqxJk0a4uLiw+tfljmUmk4n9B8IA+GbRYt58bTKB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IiIictUyNGzayl5yMpHLI2TbHxWan91uJzMzk4f+ejLf8pUDl5YrP8NTcyEouISd2sBqhcx0yLGDi2tub1wjkGODzAzIzARnJzAYICsbzMbcNNk5kG0FJ+fc3rvZ2ZCVCTYbGI1gdgZX19x/59ggIxVyssHiCiYzZGWANTs3+Gtxyc2jNAHgyHDsHz9RrnMiIiIiIiIiIiIiIiIiFefs2bNYLBYMhorp5Kc5gEUulcH4v+GXsYPR9L95eM1GMLjlBmcNhtygsMV+/t8GcOZ8sPf85xxLbnDXbjufxng+PwMYbWDyyF13IdBrMoOrDQwm9f4VERERERERERERERERBYBFKoTBCKYLwde8QVhDbrDWbswN4gKY7f9bZyA3yOtIm/cz/9sm3z7y9PI1G8Buyp9ORERERERERERERERErloKAItUmGKCsIaLgsLFbVdsMLeQbRX7FRERERERERERERERkfOMJScREREREREREREREREREZF/AwWARURERERERERERERERESqCAWARYplgGxrZReiYmVb0bjRIiIiIiIiIiIiIiIiVZMCwCLFMJsMEB9XdYLA2VY4cxqzWbe+iIiIiIiIiIiIiIhIVWSu7AKIXMluaVmXZbsjIeoUYK/s4lQAAxjgxuYBlV0QERERERERERERERERuQwUABYpxkcP9MDDZRurDpzkTFJ6ZRfnktX2dKFfs0Cm39m5sosiIiIiIiIiIiIiIiIil4ECwCLFqOPlxoJHe1d2MURERERERERERERERERKRROBioiIiIiIiIiIiIiIiIhUEQoAi4iIiIiIiIiIiIiIiIhUEWUaArpBgwbcfPNAvLw8S0yblJjEL7/+wrFjx8pdOBERERERERERERERERERKb0y9QAeWMrgL4CnlycDbx5YrkKJiIiIiIiIiIiIiIiIiEjZlSkA7FnK4G95018tXFxc6Nn9OiwWS2UXRURERERERERERERERESqkDINAf1P8vH25rFhj9CrR3d8fX2Ij4/n75BQ3vvvbBISEyu7eJekUcMGzJz+FgNuvYPMzMzKLo6IiIiIiIiIiIiIiIiIVBFXZADY19eH+Z99jIuLC/MXfEXE8UhqVK9Ol86dyFDAVERERERERERERERERESkUFdkAPjZkU9Tzd2de4cMJebcOcfy5T//6vh3gwbBTBj3Ak2vacKZM2eZ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Qgu9BKQqCApIkWJHUNF1YdeKbd2fZV11bQuKCrjWVRBprvRepCNgCL0FkkB6IL3Xmd8fMSMhbQgoip/X8/g8Zm77zrnn3Lnc7z3ncOToz3MA5+T8PBz0/gP7GThwIKdOn6o2TPSFHJ2ccHR05O677sLy02cGIDE5qcb183LzcHFxASAuPp5ly5czbNgwho8YzsYNGzl06FCV9b28vCguqTpUdVpGGl7entlWRpYAACAASURBVDXuv7i4hNLSElxcnEktL2f2l18yeOgQ+vXrx+4fdrNp0yYsFkuN24qIiIiIiIiIiIiIiIiIXG0NTgDnFxSQlZlVfYHBwG1jx7Jz5046de5Et/Bw9kdGAlBWVorJ7udDFhUWUlRczMKFC4g6GVXvMc1UTb7uj4xkf2Qk3bp148477yQxKbHK8sysLBwdHHFzcyU3Nw8AX29fMjNqiLvyGBYLFWnoiiTzF59/QXBQMPfdfx9ZmVlE7IuoN04RERERERERERERERERkauhwUNAOzk54urqZv2vUaNGAPTp1RtHR0fWrl3L0iVLGTl8OI1cKpalp6UT1i4MT08PgoODMdrZsT8ykluGDqVZs2a4ubsRGNgEZ2eneo/v4eFJQEAADg72pKSkAhacHZ2rrJOaksLZuDjGjBmLr68vLVq24IYB/dn74556929nZ0doaHMcHR3JyckhP78AZxfnercTEREREREREREREREREblaGtwDeOSIkYwcMdL6d1FhIe++9y6DbhrEnK+/xmw2c/LkSWJiYxkydAhLlixh27Zt3HXXXUyZMoWcnFy++OIL1qxdy+DBN3PHHXfg7u5Odk42CxYspDAxsY6jQ5PAJowZPZpGjVzIy89n69ZtJCQmEBgUVGW9ed/MY+TIEUz+y2SKi4rZ88Nudu+uPwHs6urKmLFj8fLyorS4hFOnT7N3796GFZaIiIiIiIiIiIiIiIiIyK/AEN7rek1qK1fN5vWrruj+LBYLZrOZwsJCAgMDr+i+RURERERERERERERERK6kpKQknJ2dMRqNGAyGK7LPBg8BLSIiIiIiIiIiIiIiIiIivy1KAIuIiIiIiIiIiIiIiIiIXCOUABYRERERERERERERERERuUYoASwiIiIiIiIiIiIiIiIico1QAlhERERERERERERERERE5BqhBLCIiIiIiIiIiIiIiIiIyDVCCWARERERERERERERERERkWuEEsAiIiIiIiIiIiIiIiIiItcIJYBFRERERERERERERERERK4RSgCLiIiIiIiIiIiIiIiIiFwjlAAWEREREREREREREREREblGKAEsIiIiIiIiIiIiIiIiInKNUAJYREREREREREREREREROQaoQSwiIiIiIiIiIiIiIiIiMg1QglgEREREREREREREREREZFrhBLAIiIiIiIiIiIiIiIiIiLXCFN2dvbVjkFERERERERERERERERERK4A9QAWEREREREREREREREREblGKAEsIiIiIiIiIiIiIiIiInKNUAJYREREREREREREREREROQaoQSwiIiIiIiIiIiIiIiIiMg1QglgEREREREREREREREREZFrhBLAIiIiIiIiIiIiIiIiIiLXCNPl7sDNzY2+ffsRFXWS2NjYKxGTyBURFxd3tUMQERERERERERERERERqZXJdNnp2ur7bPCGJhO9e/emT9++ONjb06NHd6KiotiwcSNZmZlXMkYREREREREREREREREREbFBgxLAJpOJW4YNo0vnzlU+b9OmDS1atODHiAh2bN9OSUnJFQlSpCEaN258tUMQERERERERERERERERqVVaWtoV3+clJYADGgcwdMhQPD092bZ9OyeOH+fGGwcSEOD/8w5NJvr07k2nTp3YsnkLBw8euOJBX0kTxt3NoSNHOXT4yNUORURERERERERERERERETkshhatu1kqW8lFxcXbrzxRrp06YLRaLR+npaWxpYtW3B0dKD/DQPw8PSotm1KcgrrN64nPi7+ykZ+hWxYs5wPZv6HlavWXNZ+eoR3IzkllcSkpCsU2R9D5J4dV3R/FosFs9lMYWEhvr6+V3TfIiIiIiIiIiIiIiIiIldSWloazs7OGI1GDAbDFdmnTT2APT09sTPZVfvc19eXO+64g/j4BFauWkFA48b063s9zs5O1nVKy8owYMDZxZnCgkKbgpr61r+4vl8fTCYTmVlZJCYmsXzlapYuX4nFUm+++qr44L1/889/vaUEsIiIiIiIiIiIiIiIiIhcNTYlgMdPmMDe3XuYO/dr+vbtR6tWraosDwkJZvz4CZw8eZKFCxfQJqwNLUNbsH3HDgwGAyOGj2DL1i0cP37cpqACAvzZun0H38xfiLOzC926dOa5p6fQvFlTpn8469K/pYiIiIiIiIiIiIiIiIjIH4BNCWAHe3uuv+F6uoWHs2PHDvbu3cuAAQMICgqqsl5YWBhBwcHMnfs10dExDBo4sNo6tjp37jyHjxwDYO+PETg7OzP61uFM/3AW7du15fFHJhPavDlubq6sXL2Wt/79LkajkT89eD93jB2Dk5MT23fu5J1p75Obm2vd7523j2Xi/eNxcXHh8JGjODo4WJc9cN+9jBw+jDvH3Wf9bOXSb5kzdz6L/rcYgBahzfn7c0/ToX078vLy+c+nn7N0+UoA3nztFd587RUAbrl1LCaTiReef5YunTthMZtZs24D/373/QaVh4iIiIiIiIiIiIiIiIhIfWxKAFdq1MiFoUOHkJmVydYtW9mzZw83DrgRbx9vSkpL+XHPHqJjorlp0M20bt2q/h1egsLCQhx+Sta2aBFK+3btePmfr1NQUEBRcTEAj/11EqNvHcmMjz4mOyeHSX96kA/f+zcP/vmvAIwcfgvPTHmc/371NUeOHqNzpw5c1z3c5hh8fX344tOP2Be5n7+/+Ar2DvYkJ6dYl38w4yN27dkLQFZWNv969WVcXV159vkXsVjMmEyXVNwiIiIiIiIiIiIiIiIiIpekQRlJL08vxowZQ0pyCus3rsfRwZGsrCzCu3dnwoT7MBqNlx2YwWDAZDLh5upKeLeu3HH7GH74KbkKUFJawrYdO61/N3Jx4e47b+edadNZvnI1AKdPR/O/BXPp27sXu3bvYdzdd7Ji1Ro+/eJLAHbt3sPtt42xOaa777idnJwcnn/hH5SXl1dbnnr+PDExsda/fby9OXs2joh9kZf8/UVERERERERERERERERELtVldUlt3KQx99x9D0lJifj7+WOyt79ScXHPXXdwz113AFBcXMyGTZv5YMZHta7ftGkIDg4ORO4/YP0sPiGR1HPnaN26Jbt276FpSDDzF/2vwTG1btWSAwcP15j8rcm8hd/yxqv/IDgokHkLv2XL1u0NPraIiIiIiIiIiIiIiIiISH2uyJjEgYENm+e3Lus2bGTuvIXk5uZxPi2NkpKSOtc3GAwAWCy1r2M2W7Cro3dyWVkZjo4OtS43GA2YzeYal1lqOPCWrdu5/Z4J3HPnHfzrny+z64c9/O2Fl2sPUERERERERERERERERETkMlz+WM2/kIyMTE6cjCIxKane5C/A2bNxlJaWEd6ti/WzoMBAAvz9OR0dA0B0TAy9el5X6z7Op6Xj4+NDIxeXGpfHxp6la5fONQ5xnZeXj5ura7XPU1JSeX/GLJ79+4sMvLE/wUGB9X4XEREREREREREREREREZGGuCI9gH8L8gsKWPS/xTz52CMAZGfnMOnhBzkZdYpdP+wB4Iuv5jB96ttkZD7Jjp27MJlM2F8wbPXuPXspLyvj5RefZ/nK1ZjNZpydnK3LF3z7P24fO4qpb/+L5StWU1pWSnl5OXv2RnAy6hRjR99KUlIyvr4+7NkbQe9e15GSeo78/Hy6d+tGWVkZObm5v27BiIiIiIiIiIiIiIiIiMgfxjWTAAaY8dHHFBUX8fijf8HJ0ZEdu3bzzrT3rMMz79y1m2f+9gKP/XUSt40eRX5BPmfOnCUhIRGAnJxcnnn+Rf72zBSmvf0m+QX5JCYlERcXD1T05n34L4/xt2em8Obrr1BSUsLC/y1mz94I3p8xi3+8+Hemvv0vzqelExN7ht49r6Nv3944ODgQH5/Ay/98nZwcJYBFRERERERERERERERE5JdhaNm2Ux2z5lYYOGggPa/ricnUsHxxbGwsK1euJCcnp0Hby7Urcs+OK7o/i8WC2WymsLAQX1/fK7pvERERERERERERERERkSspLS0NZ2dnjEYjBoPhiuzTpozu5u83s3//AQbffDNt2rSxeecZGRls2rSJqKioBgcoIiIiIiIiIiIiIiIiIiK2sblLb1ZmJt9++y2hoaHcPPhm/P38a123uLiYnTt2svfHvZSXl1+RQEVEREREREREREREREREpG6XPKZzbGwsn3/2Od3Dw7mh/wBcXJytyywWC4cOHWLL5s3k5edf0UBFRERERERERERERERERKRuDZrU12KxELFvH0eOHqN//xsIDw8nKSmJ9evXk5KScqVjFBERERERERERERERERERGzQoAVypqKiQ9evXs+uHH8jLzb1SMYmIiIiIiIiIiIiIiIiISAMYr8ROlPwVEfl9WH4sma8j42pcNmtXDJujz//KEf12fLgzmk2nzl3tMETkAmvWrOHw4cNXOwz5BRw5coTFixdz5swZAHJycti4cSMrV668ypHVLS8vjwULFpCTk3O1Q7mmqK3/erZs2cKqVasavP2VaAOrVq3i5MmTDd7+9yYhIYH58+dflWPv37+fjRs3XpVji4hcy06ePMmnn356tcMQERGp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vY6djwyosycxwI0fb2dc12Am9w6tcz0REbl85eXlPPDAA0BFQtvWuSN/qyrnMF21ahXz58+nb9++PPLII1c7rN+1devWsXbtWqZPn361QxH5TVq0aBGpqanWkQ/+aM6dO8fTTz/NW2+9VesQ9VOmTGH48OEMGTLkF4lB1ykRERER+aNKS0vD2dkZo9HY4PnjL6YewCL1cHJyYtCgQWRlZZGQkEB+fj5t27a1ztF0ub03RH4PDiVnU2628OrGEwwPa1xr8vd0Wh7F5WYWHkwgObeIB3o0/ZUjFRGRa8GMGTOIjo4mIyMDk8nEmDFjrnZIvzu7du3CyckJd3d3UlJSWLFiBb17977aYYn8pmRnZ5OTk0NcXBwbN27kpZdeutoh/aHoOiUiIiIi8stRAljERp6enlWGJBT5I5m4aB9xWYXc0iaAj8bWPsfXzF0x/PfHs3QP9mTJ/b1xMtk2VKiIiMiFioqKyMnJISAggHvvvZfAwMCrHdLvzsmTJ9m3b591+OL+/fsrkS5ykePHj/Pxxx/j4+PDpEmTaNpULy/+mnSdEhERERH55WgIaLmqfg9DQIuIiIiIiIiIiIiIiIj8En6JIaA1dq2IiIiIiIiIiIiIiIiIyDVCCWARERERERERERERERERkWuEEsAiIiIiIiIiIiIiIiIiItcIJYBFRERERERERERERERERK4RSgCLiIiIiIiIiIiIiIiIiFwjlAAWEREREREREREREREREblGKAEsIiIiIiIiIiIiIiIiInKNUAJYREREREREREREREREROQaoQSwiIiIiIiIiIiIiIiIiMg1QglgEREREREREREREREREZFrhOlydxDgH8Atw4ZhNEJCQgIRP+4jMyvzSsQmIiIiIiIiIiIiIiIiIiKX4LISwAH+Adw7/l5cXFwACAwMomu3cNatXcOhQ4evSIAiIiIiIiIiIiIiIiIiImKbBg8B7eLiQrm5HLPFUuVzB3t7br11FGPHjsXZ2fmyAxQREREREREREREREREREdvYefsG/PNSN/Lz8+PBBx+ktLSU77//nrbt2uHg4FBtnW5du+Lo6EhZaSlGoxEHR0eKi4ttPk67tmGsWb6Y8rJy9h88dKlhyu/A5D8/dMX3abFYKCsrs/ZMFxEREREREREREREREfktKigowN7eHoPBgMFguCL7vOQewO7u7owfP55G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VnNdVVWV10eMSNeuXZIkm3XtmtdHvJGqqqqaOa++9nq6dum82v1uv+ue7L/v3vnLtVdmj9171VudAAAAAAAAAJ+3OncAFxcX54AD9s+222630vjSJUty6623ZtasWWnYqFGWVVTUW5EfV5SiT75fVJTq6upa7/f8Cy+mb78T0u+oI/ObX/4sg18akh/85GfrWiYAAAAAAADA565OHcBN12ua4447bpXwt6qqKvc/+GBmzZqVJJ9Z+Jsk748dm2236VlzXVxcnJ49euT9seOSJO+9Pzbb9Oye4uL//2rbb9szY8eNT5LUZMNF/z9InjZtev581TX5/o8uyp579M5XNtrwM6sfAAAAAAAA4LNS6w7gsrJWOfa4filrWbbKvWeeeSZj33+/Xgtbk3/efFsu+f1vMmXq1LwxanS+cdCBadWqLHfedW+S5K577suRfQ/Lb375szz82OPpvvVWOfCA/fODH6/o6p0zd26qq6tzwH775Jbb7sy+e++ZadNnZOHChdl+222zfPnyzF+w4HN5FwAAAAAAAID6VOsA+OCDD0zjRo0zaODA9NymZ5o3L02SvP766xk6dOhnVuC/GzBwUH76y1/nrG9/K6ecdELefvudfOuMczJj5swkycxZs3L6mefmRxd+N5f+8XeZOXNmfvqLX+WFFwcmSRYsWJC//v2f6XfUkXn08Sez09d2zC677JRGjRpl0qQP8rNf/jrz5wuAAQAAAAAAgP88RV26da/VB3MvvPD7GfH6iDzVv3969+6dXr16ZeLECbnttttTVVX1WddJgRo+ZOAXXQIAAAAAAAAUjFp3AE+ePCXde/RIkmy19daZWz439953n/AXAAAAAAAA4EuiuLYTH3300UyZMjU9t9kms2bNzB2335nFixZ/lrUBAAAAAAAAUAe1PgIaPguOgAYAAAAAAID6U+sOYAAAAAAAAAC+3ATAAAAAAAAAAAVCAAwAAAAAAABQIATAAAAAAAAAAAVCAAwAAAAAAABQIATAAAAAAAAAAAVCAAwAAAAAAABQIATAAAAAAAAAAAVCAAwAAAAAAABQIATAAAAAAAAAAAVCAAwAAAAAAABQIATAAAAAAAAAAAVCAAwAAAAAAABQIATAAAAAAAAAAAVCAAwAAAAAAABQIATAAAAAAAAAAAVCAAwAAAAAAABQIATAAAAAAAAAAAWipC6TTzrx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AwAAAAAAABSEAAwAAAAAAABQEAIwAAAAAAAAQEEIwAAAAAAAAAAFIQADAAAAAAAAFIQADAAAAAAAAFAQAjAAAAAAAABAQQjAAAAAAAAAAAUhAAMAAAAAAAAUhAAMAAAAAAAAUBACMAAAAAAAAEBBCMAAAAAAAAAABSEAAwAAAAAAABSEAAwAAAAAAABQEAIwAAAAAAAAQEEIwAAAAAAAAAAFIQADAAAAAAAAFIQADAAAAAAAAFAQAjAAAAAAAABAQQjAAAAAAAAAAAUhAAMAAAAAAAAUhAAMAAAAAAAAUBACMAAAAAAAAEBBCMAAAAAAAAAABSEAAwAAAAAAABSEAAwAAAAAAABQEAIwAAAAAAAAQEEIwAAAAAAAAAAFIQADAAAAAAAAFIQADAAAAAAAAFAQAjAAAAAAAABAQQjAAAAAAAAAAAUhAAMAAAAAAAAUhAAMAAAAAAAAUBACMAAAAAAAAEBBCMAAAAAAAAAABSEAAwAAAAAAABSEAAwAAAAAAABQEAIwAAAAAAAAQEEIwAAAAAAAAAAFIQADAAAAAAAAFIQADAAAAAAAAFAQAjAAAAAAAABAQQjAAAAAAAAAAAUhAAMAAAAAAAAUhAAMAAAAAAAAUBACMAAAAAAAAEBBCMAAAAAAAAAABSEAAwAAAAAAABSEAAwAAAAAAABQEAIwAAAAAAAAQEEIwAAAAAAAAAAFIQADAAAAAAAAFIQADAAAAAAAAFAQAjAAAAAAAABAQQjAAAAAAAAAAAUhAAMAAAAAAAAUhAAMAAAAAAAAUBACMAAAAAAAAEBBCMAAAAAAAAAABSEAAwAAAAAAABSEAAwAAAAAAABQEAIwAAAAAAAAQEEIwAAAAAAAAAAFIQADAAAAAAAAFIQADAAAAAAAAFAQAjAAAAAAAABAQQjAAAAAAAAAAAUhAAMAAAAAAAAUhAAMAAAAAAAAUBACMAAAAAAAAEBBCMAAAAAAAAAABSEAAwAAAAAAABSEAAwAAAAAAABQEAIwAAAAAAAAQEEIwAAAAAAAAAAFIQADAAAAAAAAFIQADAAAAAAAAFAQAjAAAAAAAABAQQjAAAAAAAAAAAUhAAMAAAAAAAAUhAAMAAAAAAAAUBACMAAAAAAAAEBBCMAAAAAAAAAABSEAAwAAAAAAABSEAAwAAAAAAABQEAIwAAAAAAAAQEEIwAAAAAAAAAAFIQADAAAAAAAAFIQADAAAAAAAAFAQAjAAAAAAAABAQQjAAAAAAAAAAAUhAAMAAAAAAAAUhAAMAAAAAAAAUBACMAAAAAAAAEBBCMAAAAAAAAAABSEAAwAAAAAAABSEAAwAAAAAAABQEAIwAAAAAAAAQEEIwAAAAAAAAAAFIQADAAAAAAAAFIQADAAAAAAAAFAQAjAAAAAAAABAQQjAAAAAAAAAAAUhAAMAAAAAAAAUhAAMAAAAAAAAUBACMAAAAAAAAEBBCMAAAAAAAAAABSEAAwAAAAAAABSEAAwAAAAAAABQEAIwAAAAAAAAQEEIwAAAAAAAAAAFIQADAAAAAAAAFIQADAAAAAAAAFAQAjAAAAAAAABAQQjAAAAAAAAAAAUhAAMAAAAAAAAUhAAMAAAAAAAAUBACMAAAAAAAAEBBCMAAAAAAAAAABSEAAwAAAAAAABSEAAwAAAAAAABQEAIwAAAAAAAAQEEIwAAAAAAAAAAFIQADAAAAAAAAFIQADAAAAAAAAFAQAjAAAAAAAABAQQjAAAAAAAAAAAUhAAMAAAAAAAAUhAAMAAAAAAAAUBACMAAAAAAAAEBBCMAAAAAAAAAABSEAAwAAAAAAABSEAAwAAAAAAABQEAIwAAAAAAAAQEEIwAAAAAAAAAAFIQADAAAAAAAAFIQADAAAAAAAAFAQAjAAAAAAAABAQQjAAAAAAAAAAAUhAAMAAAAAAAAUhAAMAAAAAAAAUBACMAAAAAAAAEBBCMAAAAAAAAAABSEAAwAAAAAAABSEAAwAAAAAAABQEAIwAAAAAAAAQEEIwAAAAAAAAAAFIQADAAAAAAAAFIQADAAAAAAAAFAQAjAAAAAAAABAQQjAAAAAAAAAAAUhAAMAAAAAAAAUhAAMAAAAAAAAUBACMAAAAAAAAEBBCMAAAAAAAAAABSEAAwAAAAAAABSEAAwAAAAAAABQEAIwAAAAAAAAQEEIwAAAAAAAAAAFIQADAAAAAAAAFIQADAAAAAAAAFAQAjAAAAAAAABAQQjAAAAAAAAAAAUhAAMAAAAAAAAUhAAMAAAAAAAAUBACMAAAAAAAAEBBCMAAAAAAAAAABSEAAwAAAAAAABSEAAwAAAAAAABQEAIwAAAAAAAAQEEIwAAAAAAAAAAFIQADAAAAAAAAFIQADAAAAAAAAFAQAjAAAAAAAABAQQjAAAAAAAAA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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-shipping",
449
+ "line": 1
450
+ }
451
+ ],
452
+ "type": "scenario"
453
+ }
454
+ ],
455
+ "id": "tracker-message-flexible-shippping-tests",
456
+ "keyword": "Feature",
457
+ "line": 2,
458
+ "name": "Tracker message Flexible Shippping tests",
459
+ "tags": [
460
+ {
461
+ "name": "@flexible-shipping",
462
+ "line": 1
463
+ }
464
+ ],
465
+ "uri": "/tmp/tests/test-acceptance/features/tests_scenario/flexible-shipping/trackerMessageIsVisibleWhenActivatePluginFlexibleShippingTest.feature"
466
+ }
467
+ ]
flexible-shipping.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Flexible Shipping
4
  Plugin URI: https://wordpress.org/plugins/flexible-shipping/
5
  Description: Create additional shipment methods in WooCommerce and enable pricing based on cart weight or total.
6
- Version: 2.1.4
7
  Author: WP Desk
8
  Author URI: https://www.wpdesk.net/
9
  Text Domain: flexible-shipping
@@ -11,7 +11,7 @@
11
  Requires at least: 4.5
12
  Tested up to: 4.9.6
13
  WC requires at least: 3.0.0
14
- WC tested up to: 3.4.2
15
 
16
  Copyright 2017 WP Desk Ltd.
17
 
@@ -36,13 +36,16 @@ if ( ! defined( 'ABSPATH' ) ) {
36
  exit;
37
  } // Exit if accessed directly
38
 
39
- $plugin_version = '2.1.4';
40
 
41
  define( 'FLEXIBLE_SHIPPING_VERSION', $plugin_version );
42
 
43
- require_once( dirname( __FILE__ ) . '/classes/wpdesk/class-requirement-checker.php' );
 
44
  require_once( 'classes/tracker.php' );
45
 
 
 
46
  $requirements_checker = new WPDesk_Requirement_Checker_1_10(
47
  __FILE__,
48
  '5.5',
@@ -51,16 +54,25 @@ $requirements_checker = new WPDesk_Requirement_Checker_1_10(
51
  );
52
 
53
  $requirements_checker
54
- ->add_plugin_require('woocommerce/woocommerce.php', 'WooCommerce' );
55
 
56
  $requirements_checker->check_requirements_and_load_plugin_deferred();
57
 
58
  add_action( 'plugins_loaded', 'flexible_shipping_plugins_loaded', 9 );
59
- if ( !function_exists( 'flexible_shipping_plugins_loaded' ) ) {
60
  function flexible_shipping_plugins_loaded() {
61
- if ( ! class_exists( 'WPDesk_Tracker' ) ) {
62
- include( 'inc/wpdesk-tracker/class-wpdesk-tracker.php' );
63
- WPDesk_Tracker::init( basename( dirname( __FILE__ ) ) );
 
 
 
 
 
 
64
  }
 
 
 
65
  }
66
  }
3
  Plugin Name: Flexible Shipping
4
  Plugin URI: https://wordpress.org/plugins/flexible-shipping/
5
  Description: Create additional shipment methods in WooCommerce and enable pricing based on cart weight or total.
6
+ Version: 2.1.5
7
  Author: WP Desk
8
  Author URI: https://www.wpdesk.net/
9
  Text Domain: flexible-shipping
11
  Requires at least: 4.5
12
  Tested up to: 4.9.6
13
  WC requires at least: 3.0.0
14
+ WC tested up to: 3.4.3
15
 
16
  Copyright 2017 WP Desk Ltd.
17
 
36
  exit;
37
  } // Exit if accessed directly
38
 
39
+ $plugin_version = '2.1.5';
40
 
41
  define( 'FLEXIBLE_SHIPPING_VERSION', $plugin_version );
42
 
43
+ require_once( __DIR__ . '/vendor/autoload.php' );
44
+
45
  require_once( 'classes/tracker.php' );
46
 
47
+ require_once( dirname( __FILE__ ) . '/classes/wpdesk/class-requirement-checker.php' );
48
+
49
  $requirements_checker = new WPDesk_Requirement_Checker_1_10(
50
  __FILE__,
51
  '5.5',
54
  );
55
 
56
  $requirements_checker
57
+ ->add_plugin_require( 'woocommerce/woocommerce.php', 'WooCommerce' );
58
 
59
  $requirements_checker->check_requirements_and_load_plugin_deferred();
60
 
61
  add_action( 'plugins_loaded', 'flexible_shipping_plugins_loaded', 9 );
62
+ if ( ! function_exists( 'flexible_shipping_plugins_loaded' ) ) {
63
  function flexible_shipping_plugins_loaded() {
64
+ if ( ! function_exists( 'should_enable_wpdesk_tracker' ) ) {
65
+ function should_enable_wpdesk_tracker() {
66
+ $tracker_enabled = true;
67
+ if ( ! empty( $_SERVER['SERVER_ADDR'] ) && $_SERVER['SERVER_ADDR'] === '127.0.0.1' ) {
68
+ $tracker_enabled = false;
69
+ }
70
+
71
+ return apply_filters( 'wpdesk_tracker_enabled', $tracker_enabled );
72
+ }
73
  }
74
+
75
+ $tracker_factory = new WPDesk_Tracker_Factory();
76
+ $tracker_factory->create_tracker( basename( dirname( __FILE__ ) ) );
77
  }
78
  }
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 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
- public static $script_version = '11';
 
 
 
 
 
 
 
 
21
 
22
- public static $request_coupon = false;
 
 
 
23
 
24
- public static $plugin_basename = '';
 
 
 
25
 
26
- public static $dismiss_coupon = false;
 
 
 
27
 
28
- public static $message_version = '3';
 
 
 
29
 
30
  /**
31
- * URL to the WP Desk Tracker API endpoint.
32
- * @var string
 
33
  */
34
- private static $api_url = 'https://data.wpdesk.org/?track=1';
35
- private static $test_api_url = 'https://testdata.wpdesk.org/?track=1';
 
36
 
37
  /**
38
  * Hook into cron event.
39
  */
40
- public static function init( $plugin_basename ) {
41
- self::$plugin_basename = $plugin_basename;
42
- add_action( 'plugins_loaded', array( __CLASS__, 'load_plugin_text_domain') );
43
- add_action( 'admin_init', array( __CLASS__, 'init_schedule') );
44
- add_action( 'admin_enqueue_scripts', array( __CLASS__, 'admin_enqueue_scripts' ), 100 );
45
- add_action( 'wpdesk_tracker_send_event', array( __CLASS__, 'send_tracking_data' ) );
46
- add_action( 'admin_menu', array( __CLASS__, 'admin_menu' ) );
47
- add_action( 'admin_init', array( __CLASS__, 'admin_init' ) );
48
- add_action( 'admin_notices', array( __CLASS__, 'admin_notices' ) );
49
- add_action( 'wp_ajax_wpdesk_tracker_notice_handler', array( __CLASS__, 'wp_ajax_wpdesk_tracker_notice_handler' ) );
50
- add_action( 'wp_ajax_wpdesk_tracker_deactivation_handler', array( __CLASS__, 'wp_ajax_wpdesk_tracker_deactivation_handler' ) );
51
-
52
- add_action( 'update_option_wpdesk_helper_options', array( __CLASS__, 'update_option_wpdesk_helper_options' ), 10, 3 );
53
- add_filter( 'option_wpdesk_helper_options', array( __CLASS__, 'option_wpdesk_helper_options' ), 10, 2 );
54
- add_filter( 'default_option_wpdesk_helper_options', array( __CLASS__, 'default_option_wpdesk_helper_options' ), 10, 3 );
55
-
56
- add_filter( 'wpdesk_tracker_data', array( __CLASS__, 'wpdesk_tracker_data_license_emails' ) );
57
- add_filter( 'wpdesk_tracker_data', array( __CLASS__, 'wpdesk_tracker_data_shipping_country_per_order' ) );
58
- add_filter( 'wpdesk_tracker_data', array( __CLASS__, 'wpdesk_tracker_data_shipping_classes' ) );
59
- add_filter( 'wpdesk_tracker_data', array( __CLASS__, 'wpdesk_tracker_data_product_variations' ) );
60
- add_filter( 'wpdesk_tracker_data', array( __CLASS__, 'wpdesk_tracker_data_orders_per_month' ) );
61
- add_filter( 'wpdesk_tracker_data', array( __CLASS__, 'wpdesk_tracker_data_shipping_methods_in_zones' ) );
62
-
63
- add_filter( 'wpdesk_tracker_data', array( __CLASS__, 'wpdesk_tracker_message_version' ) );
64
-
65
- add_action( 'admin_bar_menu', array( __CLASS__, 'admin_bar_menu' ), 999 );
66
- add_action( 'wp_head', array( __CLASS__, 'wp_head' ), 999 );
67
- add_action( 'admin_head', array( __CLASS__, 'wp_head' ), 999 );
 
 
 
 
68
 
69
  global $pagenow;
70
  if ( 'plugins.php' === $pagenow ) {
71
- add_action( 'admin_footer', array( __CLASS__, 'admin_footer' ) );
72
  }
73
-
74
  }
75
 
76
- public static function get_api_url() {
77
- $api_url = self::$api_url;
78
- if ( apply_filters( 'wpdesk_tracker_use_testdata', false ) ) {
79
- $api_url = self::$test_api_url;
80
- }
81
- return $api_url;
82
  }
83
 
84
- public static function wp_head() {
 
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 static function admin_bar_menu( $wp_admin_bar ) {
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 static function init_schedule() {
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 = wp_next_scheduled( 'wpdesk_tracker_send_event' );
115
- if ( $wpdesk_tracker_agree == '1' && !$wp_next_scheduled ) {
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 static function load_plugin_text_domain() {
124
- $wpdesk_translation = load_plugin_textdomain( 'wpdesk-tracker', FALSE, self::$plugin_basename . '/inc/wpdesk-tracker/lang' );
125
  }
126
 
127
- public static function admin_footer() {
128
- if ( !is_network_admin() && wpdesk_tracker_enabled() && !apply_filters( 'wpdesk_tracker_do_not_ask', false ) ) {
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 static function admin_enqueue_scripts() {
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(), self::$script_version, 'all' );
141
  wp_enqueue_style( 'wpdesk-helper-tracker' );
142
  }
143
  }
144
 
145
- public static function admin_menu() {
146
  add_submenu_page(
147
  null,
148
  'WP Desk Tracker',
149
  'WP Desk Tracker',
150
  'manage_options',
151
  'wpdesk_tracker',
152
- array( __CLASS__, 'wpdesk_tracker_page' )
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( __CLASS__, 'wpdesk_tracker_deactivate' )
161
  );
162
  }
163
 
164
- public static function wp_ajax_wpdesk_tracker_deactivation_handler() {
165
- self::send_deactivation_data();
166
  }
167
 
168
 
169
- public static function wp_ajax_wpdesk_tracker_notice_handler() {
170
  $option = get_option( 'wpdesk_helper_options' );
171
- if ( !$option ) {
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
- delete_option( 'wpdesk_tracker_notice' );
194
- $options['wpdesk_tracker_agree'] = '0';
195
- update_option( 'wpdesk_helper_options', $options );
196
- update_option( 'wpdesk_tracker_notice', '1' );
197
- }
198
- if ( $type == 'allow_coupon' ) {
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 static function update_option_wpdesk_helper_options( $old_value, $value, $option ) {
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
- self::send_tracking_data( true, 'agree' );
242
  }
243
  }
244
  if ( $old_value['wpdesk_tracker_agree'] != '0' ) {
245
  if ( $value['wpdesk_tracker_agree'] == '0' ) {
246
- self::send_tracking_data( true, 'no' );
247
  update_option( 'wpdesk_tracker_notice', 'dismiss_all' );
248
  }
249
  }
250
  }
251
 
252
- public static function option_wpdesk_helper_options( $value, $option ) {
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 static 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
  return $default;
268
  }
269
 
270
- public static function admin_notices() {
271
- if ( !wpdesk_tracker_enabled() ) {
272
  return;
273
  }
274
- $screen = get_current_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 = wp_get_current_user();
287
- $username = $user->first_name ? $user->first_name : $user->user_login;
288
  $terms_url = get_locale() == 'pl_PL' ? 'https://www.wpdesk.pl/dane-uzytkowania/' : 'https://www.wpdesk.net/usage-tracking/';
289
- $shop_url = get_locale() == 'pl_PL' ? 'https://www.wpdesk.pl/' : 'https://www.wpdesk.net/';
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 static function wpdesk_tracker_page() {
309
- $user = wp_get_current_user();
310
- $username = $user->first_name ? $user->first_name : $user->user_login;
311
  $allow_url = admin_url( 'admin.php?page=wpdesk_tracker' );
312
  $allow_url = add_query_arg( 'plugin', $_GET['plugin'], $allow_url );
313
- $skip_url = $allow_url;
314
  $allow_url = add_query_arg( 'allow', '1', $allow_url );
315
- $skip_url = add_query_arg( 'allow', '0', $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 static function wpdesk_tracker_deactivate() {
321
- $user = wp_get_current_user();
322
- $username = $user->first_name;
323
- $plugin = $_GET['plugin'];
324
  $active_plugins = get_plugins();
325
- $plugin_name = $active_plugins[$plugin]['Name'];
326
  include( 'views/tracker-deactivate.php' );
327
  }
328
 
329
- public static function admin_init() {
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( __CLASS__, 'update_option_wpdesk_helper_options' ), 10, 3 );
 
 
 
338
  unset( $options['wpdesk_tracker_agree'] );
339
  update_option( 'wpdesk_helper_options', $options );
340
- add_action( 'update_option_wpdesk_helper_options', array( __CLASS__, 'update_option_wpdesk_helper_options' ), 10, 3 );
 
 
 
341
  $options['wpdesk_tracker_agree'] = '0';
342
  update_option( 'wpdesk_helper_options', $options );
343
  update_option( 'wpdesk_tracker_notice', '1' );
344
- }
345
- else {
346
- remove_action( 'update_option_wpdesk_helper_options', array( __CLASS__, 'update_option_wpdesk_helper_options' ), 10, 3 );
 
 
347
  unset( $options['wpdesk_tracker_agree'] );
348
  update_option( 'wpdesk_helper_options', $options );
349
- add_action( 'update_option_wpdesk_helper_options', array( __CLASS__, 'update_option_wpdesk_helper_options' ), 10, 3 );
 
 
 
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 static function wpdesk_tracker_data_license_emails( $data ) {
362
- global $wpdesk_helper_plugins;
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 static function wpdesk_tracker_message_version( $data ) {
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
- $response = wp_remote_post( self::get_api_url(), array(
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 static function send_tracking_data( $override = false, $click_action = null ) {
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 ( ! wpdesk_tracker_enabled() ) {
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 = self::get_last_send_time();
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 = self::get_last_send_time();
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 = self::get_tracking_data();
552
 
553
  if ( isset( $params['active_plugins'] ) ) {
554
- foreach ( $params['active_plugins'] as $plugin=>$plugin_data ) {
555
- $option_name = 'plugin_activation_' . $plugin;
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
- if ( self::$request_coupon ) {
567
- $params['get_coupon'] = 1;
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
- $response = wp_remote_post( self::get_api_url(), array(
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
- * Get all the tracking data.
611
- * @return array
612
- */
613
- private static function get_tracking_data() {
614
- $data = array();
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 static function get_order_counts() {
816
- $order_count = array();
817
- $order_count_data = wp_count_posts( 'shop_order' );
818
-
819
- foreach ( wc_get_order_statuses() as $status_slug => $status_name ) {
820
- $order_count[ $status_slug ] = $order_count_data->{$status_slug};
821
  }
822
-
823
- return $order_count;
824
  }
825
 
826
  /**
827
- * Get a list of all active payment gateways.
828
- * @return array
829
  */
830
- private static function get_active_payment_gateways() {
831
- $active_gateways = array();
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 static function get_active_shipping_methods() {
847
- $active_methods = array();
848
- $shipping_methods = WC()->shipping->get_shipping_methods();
849
- foreach ( $shipping_methods as $id => $shipping_method ) {
850
- if ( isset( $shipping_method->enabled ) && 'yes' === $shipping_method->enabled ) {
851
- $active_methods[ $id ] = array( 'title' => $shipping_method->title,
852
- 'tax_status' => $shipping_method->tax_status
853
- );
854
  }
855
  }
856
 
857
- return $active_methods;
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
- * Look for any template override and return filenames.
888
  * @return array
889
  */
890
- private static function get_all_template_overrides() {
891
- $override_data = array();
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
- if ( false !== $theme_file ) {
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/lang/wpdesk-tracker-pl_PL.mo CHANGED
Binary file
inc/wpdesk-tracker/lang/wpdesk-tracker-pl_PL.po CHANGED
@@ -1,15 +1,15 @@
1
  msgid ""
2
  msgstr ""
3
  "Project-Id-Version: WP Desk Tracker\n"
4
- "POT-Creation-Date: 2018-04-19 22:51+0200\n"
5
- "PO-Revision-Date: 2018-04-19 22:53+0200\n"
6
  "Last-Translator: Piotr Jabłonowski <piotr.jablonowski@wpdesk.net>\n"
7
  "Language-Team: \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.6\n"
13
  "X-Poedit-Basepath: ../..\n"
14
  "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
15
  "|| n%100>=20) ? 1 : 2);\n"
@@ -20,13 +20,6 @@ msgstr ""
20
  "X-Poedit-SearchPath-0: .\n"
21
  "X-Poedit-SearchPathExcluded-0: wpdesk-logger.php\n"
22
 
23
- #: functions.php:67
24
- #, php-format
25
- msgid "Redirecting. If page not redirects click %s here %s."
26
- msgstr ""
27
- "Przekierowywanie. Jeśli strona nie przekierowuje cię automatycznie, kliknij "
28
- "%s tu %s."
29
-
30
  #: wpdesk-tracker/views/tracker-connect.php:7
31
  #: wpdesk-tracker/views/tracker-notice.php:5
32
  #: wpdesk-tracker/views/tracker-notice.php:22
@@ -106,7 +99,7 @@ msgid ""
106
  " If you have a moment, please let us know why you are deactivating plugin "
107
  "(anonymous feedback):"
108
  msgstr ""
109
- " Jeśli masz chwilę, prosimy daj nam znać dlaczego dezaktywowałeś wtyczkę "
110
  "(anonimowa opinia):"
111
 
112
  #: wpdesk-tracker/views/tracker-deactivate.php:16
@@ -135,7 +128,7 @@ msgstr "Nie potrzebuję już wtyczki"
135
 
136
  #: wpdesk-tracker/views/tracker-deactivate.php:59
137
  msgid "It's a temporary deactivation. I'm just debugging an issue."
138
- msgstr "Jest to tymczasowa dezaktywacja, debaguję problem."
139
 
140
  #: wpdesk-tracker/views/tracker-deactivate.php:67
141
  msgid "Other"
1
  msgid ""
2
  msgstr ""
3
  "Project-Id-Version: WP Desk Tracker\n"
4
+ "POT-Creation-Date: 2017-10-04 17:34+0200\n"
5
+ "PO-Revision-Date: 2017-10-04 17:36+0200\n"
6
  "Last-Translator: Piotr Jabłonowski <piotr.jablonowski@wpdesk.net>\n"
7
  "Language-Team: \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.3\n"
13
  "X-Poedit-Basepath: ../..\n"
14
  "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
15
  "|| n%100>=20) ? 1 : 2);\n"
20
  "X-Poedit-SearchPath-0: .\n"
21
  "X-Poedit-SearchPathExcluded-0: wpdesk-logger.php\n"
22
 
 
 
 
 
 
 
 
23
  #: wpdesk-tracker/views/tracker-connect.php:7
24
  #: wpdesk-tracker/views/tracker-notice.php:5
25
  #: wpdesk-tracker/views/tracker-notice.php:22
99
  " If you have a moment, please let us know why you are deactivating plugin "
100
  "(anonymous feedback):"
101
  msgstr ""
102
+ "Jeśli masz chwilę, prosimy daj nam znać dlaczego dezaktywowałeś wtyczkę "
103
  "(anonimowa opinia):"
104
 
105
  #: wpdesk-tracker/views/tracker-deactivate.php:16
128
 
129
  #: wpdesk-tracker/views/tracker-deactivate.php:59
130
  msgid "It's a temporary deactivation. I'm just debugging an issue."
131
+ msgstr "Jest to tymczasowa dezaktywacja, debaguję problem"
132
 
133
  #: wpdesk-tracker/views/tracker-deactivate.php:67
134
  msgid "Other"
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( 'Site URL, WP version, PHP info, admin email', 'wpdesk-tracker' ); ?></p>
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( 'Non-sensitive store usage information', 'wpdesk-tracker' ); ?></p>
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
- <?php if ( $coupon_avaliable ) : ?>
3
- <div id="wpdesk_tracker_notice_coupon" class="updated notice wpdesk_tracker_notice is-dismissible">
4
- <p>
5
- <?php printf ( __( 'Hey %s,', 'wpdesk-tracker'), $username ); ?><br/>
6
- <?php
7
- printf(
8
- __( 'We need your help to improve <strong>WP Desk plugins</strong>, so they are more useful for you and the rest of <strong>10,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. As a thank you for your consent, we will send you a <strong>discount coupon</strong> for %sWP Desk plugins%s, which you can use yourself or share with others. %sFind out more &raquo;%s', 'wpdesk-tracker' ),
9
- '<a target="_blank" href="' . $shop_url . '?utm_source=tracker&utm_medium=link&utm_campaign=tracker-coupon-message-v3">',
10
- '</a>',
11
- '<a target="_blank" href="' . $terms_url . '?utm_source=tracker&utm_medium=link&utm_campaign=tracker-shop-link">',
12
- '</a>'
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 &raquo;', '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 &raquo;', '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');
languages/flexible-shipping-pl_PL.mo CHANGED
Binary file
languages/flexible-shipping-pl_PL.po CHANGED
@@ -1,15 +1,15 @@
1
  msgid ""
2
  msgstr ""
3
  "Project-Id-Version: Flexible Shipping\n"
4
- "POT-Creation-Date: 2018-05-10 13:36+0200\n"
5
- "PO-Revision-Date: 2018-05-10 13:37+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.7\n"
13
  "X-Poedit-Basepath: ..\n"
14
  "X-Poedit-WPHeader: flexible-shipping.php\n"
15
  "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
@@ -323,11 +323,11 @@ msgstr "Przesyłka do zamówienia %s, %s"
323
  msgid "Added new shipment via metabox. Shipment ID: %s"
324
  msgstr "Dodano nową przesyłkę. Numer przesyłki: %s"
325
 
326
- #: classes/order-add-shipping.php:82
327
  msgid "Select integration"
328
  msgstr "Wybierz integrację"
329
 
330
- #: classes/order-add-shipping.php:91
331
  msgid "Add shipping"
332
  msgstr "Dodaj przesyłkę"
333
 
@@ -713,11 +713,11 @@ msgstr "Metoda wysyłki nie znaleziona."
713
  msgid "Shipping method %s updated."
714
  msgstr "Metoda wysyłki zaktualizowana: %s."
715
 
716
- #: classes/tracker.php:181
717
  msgid "Opt-in"
718
  msgstr "Opt-in"
719
 
720
- #: classes/tracker.php:185
721
  msgid "Opt-out"
722
  msgstr "Opt-out"
723
 
@@ -1029,21 +1029,19 @@ msgstr ""
1029
 
1030
  #: inc/wpdesk-tracker/views/tracker-connect.php:7
1031
  #: inc/wpdesk-tracker/views/tracker-notice.php:5
1032
- #: inc/wpdesk-tracker/views/tracker-notice.php:22
1033
  #, php-format
1034
  msgid "Hey %s,"
1035
  msgstr "Hej %s,"
1036
 
1037
  #: inc/wpdesk-tracker/views/tracker-connect.php:8
1038
- #: inc/wpdesk-tracker/views/tracker-notice.php:23
1039
  msgid ""
1040
  "Please help us improve our plugins! If you opt-in, we will collect some non-"
1041
- "sensitive data and usage information. If you skip this, that's okay! All "
1042
- "plugins will work just fine."
1043
  msgstr ""
1044
  "Proszę pomóż nam udoskonalić nasze wtyczki! Jeśli się zgodzisz, będziemy "
1045
- "zbierać niewrażliwe dane użytkowania. Jeśli pominiesz ten krok, w porządku! "
1046
- "Wszystkie wtyczki będą działać."
1047
 
1048
  #: inc/wpdesk-tracker/views/tracker-connect.php:13
1049
  msgid "Allow & Continue &rarr;"
@@ -1062,8 +1060,8 @@ msgid "Your Site Overview"
1062
  msgstr "Dane witryny"
1063
 
1064
  #: inc/wpdesk-tracker/views/tracker-connect.php:27
1065
- msgid "Site URL, WP version, PHP info, admin email"
1066
- msgstr "URL strony, wersja WP, wersja PHP, email admina"
1067
 
1068
  #: inc/wpdesk-tracker/views/tracker-connect.php:33
1069
  msgid "Plugin Usage"
@@ -1078,21 +1076,11 @@ msgid "Your Store Overview"
1078
  msgstr "Ustawienia i informacje o użytkowaniu wtyczek WP Desk"
1079
 
1080
  #: inc/wpdesk-tracker/views/tracker-connect.php:41
1081
- msgid "Non-sensitive store usage information"
1082
- msgstr "Tylko niewrażliwe dane o użytkowaniu sklepu"
1083
 
1084
  #: inc/wpdesk-tracker/views/tracker-connect.php:47
1085
- msgid "Admin Updates"
1086
- msgstr "Powiadomienia"
1087
-
1088
- #: inc/wpdesk-tracker/views/tracker-connect.php:48
1089
- msgid "Announcements, updates, marketing, no spam and easy opt-out"
1090
- msgstr ""
1091
- "Ważne powiadomienia, uaktualnienia, marketing, żadnego spamu i łatwa "
1092
- "rezygnacja"
1093
-
1094
- #: inc/wpdesk-tracker/views/tracker-connect.php:54
1095
- #: inc/wpdesk-tracker/views/tracker-notice.php:24
1096
  msgid "Find out more &raquo;"
1097
  msgstr "Dowiedz się więcej &raquo;"
1098
 
@@ -1153,28 +1141,20 @@ msgstr "Pomiń i dezaktywuj"
1153
  msgid "Submit &amp; Deactivate"
1154
  msgstr "Anuluj"
1155
 
1156
- #: inc/wpdesk-tracker/views/tracker-notice.php:8
1157
- #, php-format
1158
  msgid ""
1159
  "We need your help to improve <strong>WP Desk plugins</strong>, so they are "
1160
- "more useful for you and the rest of <strong>10,000+ users</strong>. By "
1161
  "collecting data on how you use our plugins, you will help us a lot. We will "
1162
- "not collect any sensitive data, so you can feel safe. As a thank you for "
1163
- "your consent, we will send you a <strong>discount coupon</strong> for %sWP "
1164
- "Desk plugins%s, which you can use yourself or share with others. %sFind out "
1165
- "more &raquo;%s"
1166
  msgstr ""
1167
  "Potrzebujemy Twojej pomocy, aby dalej rozwijać <strong>wtyczki WP Desk</"
1168
  "strong> i były one jeszcze bardziej pomocne dla Ciebie i pozostałych ponad "
1169
- "<strong>10 000 użytkowników</strong>. Zbierając dane na temat tego jak "
1170
  "korzystasz z naszych wtyczek bardzo nam w tym pomożesz. Nie będziemy zbierać "
1171
- "żadnych danych wrażliwych, więc możesz czuć się bezpiecznie. W zamian za "
1172
- "Twoją zgodę otrzymasz <strong>kupon rabatowy</strong> na %swtyczki WP Desk"
1173
- "%s, który możesz wykorzystać sam lub podzielić się z innymi. %sDowiedz się "
1174
- "więcej &raquo;%s"
1175
 
1176
- #: inc/wpdesk-tracker/views/tracker-notice.php:16
1177
- #: inc/wpdesk-tracker/views/tracker-notice.php:27
1178
  msgid "Allow"
1179
  msgstr "Pozwól"
1180
 
@@ -1207,6 +1187,14 @@ msgstr "WP Desk"
1207
  msgid "https://www.wpdesk.net/"
1208
  msgstr "https://www.wpdesk.pl/"
1209
 
 
 
 
 
 
 
 
 
1210
  #~ msgid "Stopping a rule"
1211
  #~ msgstr "Zatrzymywanie reguł"
1212
 
1
  msgid ""
2
  msgstr ""
3
  "Project-Id-Version: Flexible Shipping\n"
4
+ "POT-Creation-Date: 2018-06-25 13:10+0200\n"
5
+ "PO-Revision-Date: 2018-06-25 13:10+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-shipping.php\n"
15
  "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
323
  msgid "Added new shipment via metabox. Shipment ID: %s"
324
  msgstr "Dodano nową przesyłkę. Numer przesyłki: %s"
325
 
326
+ #: classes/order-add-shipping.php:84
327
  msgid "Select integration"
328
  msgstr "Wybierz integrację"
329
 
330
+ #: classes/order-add-shipping.php:93
331
  msgid "Add shipping"
332
  msgstr "Dodaj przesyłkę"
333
 
713
  msgid "Shipping method %s updated."
714
  msgstr "Metoda wysyłki zaktualizowana: %s."
715
 
716
+ #: classes/tracker.php:183
717
  msgid "Opt-in"
718
  msgstr "Opt-in"
719
 
720
+ #: classes/tracker.php:187
721
  msgid "Opt-out"
722
  msgstr "Opt-out"
723
 
1029
 
1030
  #: inc/wpdesk-tracker/views/tracker-connect.php:7
1031
  #: inc/wpdesk-tracker/views/tracker-notice.php:5
 
1032
  #, php-format
1033
  msgid "Hey %s,"
1034
  msgstr "Hej %s,"
1035
 
1036
  #: inc/wpdesk-tracker/views/tracker-connect.php:8
 
1037
  msgid ""
1038
  "Please help us improve our plugins! If you opt-in, we will collect some non-"
1039
+ "sensitive data and usage information anonymously. If you skip this, that's "
1040
+ "okay! All plugins will work just fine."
1041
  msgstr ""
1042
  "Proszę pomóż nam udoskonalić nasze wtyczki! Jeśli się zgodzisz, będziemy "
1043
+ "zbierać niewrażliwe dane użytkowania anonimowo. Jeśli pominiesz ten krok, w "
1044
+ "porządku! Wszystkie wtyczki będą działać."
1045
 
1046
  #: inc/wpdesk-tracker/views/tracker-connect.php:13
1047
  msgid "Allow & Continue &rarr;"
1060
  msgstr "Dane witryny"
1061
 
1062
  #: inc/wpdesk-tracker/views/tracker-connect.php:27
1063
+ msgid "WP version, PHP info"
1064
+ msgstr "Wersja WP, PHP info"
1065
 
1066
  #: inc/wpdesk-tracker/views/tracker-connect.php:33
1067
  msgid "Plugin Usage"
1076
  msgstr "Ustawienia i informacje o użytkowaniu wtyczek WP Desk"
1077
 
1078
  #: inc/wpdesk-tracker/views/tracker-connect.php:41
1079
+ msgid "Anonymized and non-sensitive store usage information"
1080
+ msgstr "Tylko niewrażliwe i anonimowe dane o użytkowaniu sklepu"
1081
 
1082
  #: inc/wpdesk-tracker/views/tracker-connect.php:47
1083
+ #: inc/wpdesk-tracker/views/tracker-notice.php:7
 
 
 
 
 
 
 
 
 
 
1084
  msgid "Find out more &raquo;"
1085
  msgstr "Dowiedz się więcej &raquo;"
1086
 
1141
  msgid "Submit &amp; Deactivate"
1142
  msgstr "Anuluj"
1143
 
1144
+ #: inc/wpdesk-tracker/views/tracker-notice.php:6
 
1145
  msgid ""
1146
  "We need your help to improve <strong>WP Desk plugins</strong>, so they are "
1147
+ "more useful for you and the rest of <strong>30,000+ users</strong>. By "
1148
  "collecting data on how you use our plugins, you will help us a lot. We will "
1149
+ "not collect any sensitive data, so you can feel safe."
 
 
 
1150
  msgstr ""
1151
  "Potrzebujemy Twojej pomocy, aby dalej rozwijać <strong>wtyczki WP Desk</"
1152
  "strong> i były one jeszcze bardziej pomocne dla Ciebie i pozostałych ponad "
1153
+ "<strong>30 000 użytkowników</strong>. Zbierając dane na temat tego jak "
1154
  "korzystasz z naszych wtyczek bardzo nam w tym pomożesz. Nie będziemy zbierać "
1155
+ "żadnych danych wrażliwych, więc możesz czuć się bezpiecznie."
 
 
 
1156
 
1157
+ #: inc/wpdesk-tracker/views/tracker-notice.php:10
 
1158
  msgid "Allow"
1159
  msgstr "Pozwól"
1160
 
1187
  msgid "https://www.wpdesk.net/"
1188
  msgstr "https://www.wpdesk.pl/"
1189
 
1190
+ #~ msgid "Admin Updates"
1191
+ #~ msgstr "Powiadomienia"
1192
+
1193
+ #~ msgid "Announcements, updates, marketing, no spam and easy opt-out"
1194
+ #~ msgstr ""
1195
+ #~ "Ważne powiadomienia, uaktualnienia, marketing, żadnego spamu i łatwa "
1196
+ #~ "rezygnacja"
1197
+
1198
  #~ msgid "Stopping a rule"
1199
  #~ msgstr "Zatrzymywanie reguł"
1200
 
readme.txt CHANGED
@@ -4,7 +4,7 @@ Donate link: https://www.wpdesk.net/products/flexible-shipping-pro-woocommerce/
4
  Tags: table rate, table rate shipping, woocommerce shipping, flexible shipping, woocommerce table rate shipping, cart based shipping, weight shipping, weight based shipping, totals based shipping, order based shipping, shipping zones, shipping classes
5
  Requires at least: 4.5
6
  Tested up to: 4.9.6
7
- Stable tag: 2.1.4
8
  Requires PHP: 5.5
9
  License: GPLv3 or later
10
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
@@ -171,6 +171,10 @@ If you are upgrading from the old Flexible Shipping version (1.3.2, woo-flexible
171
 
172
  == Changelog ==
173
 
 
 
 
 
174
  = 2.1.4 - 2018-06-11 =
175
  * Fixed missing metabox Add Shipment in WooCommerce 3.4
176
 
4
  Tags: table rate, table rate shipping, woocommerce shipping, flexible shipping, woocommerce table rate shipping, cart based shipping, weight shipping, weight based shipping, totals based shipping, order based shipping, shipping zones, shipping classes
5
  Requires at least: 4.5
6
  Tested up to: 4.9.6
7
+ Stable tag: 2.1.5
8
  Requires PHP: 5.5
9
  License: GPLv3 or later
10
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
171
 
172
  == Changelog ==
173
 
174
+ = 2.1.5 - 2018-06-25 =
175
+ * Tweaked tracker data anonymization
176
+ * Fixed tracker notice
177
+
178
  = 2.1.4 - 2018-06-11 =
179
  * Fixed missing metabox Add Shipment in WooCommerce 3.4
180
 
vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
- return ComposerAutoloaderInite5c7bd96112481520aa09571fa61f763::getLoader();
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInitcf82b5fb62aaabc643f4fe04648afaad::getLoader();
vendor/composer/autoload_classmap.php CHANGED
@@ -6,4 +6,59 @@ $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
+ 'S214_Sysinfo' => $baseDir . '/classes/wpdesk/settings-api/modules/sysinfo/class.s214-sysinfo.php',
11
+ 'WPDesk_Flexible_Shipping' => $baseDir . '/classes/shipping-method.php',
12
+ 'WPDesk_Flexible_Shipping_Add_Shipping' => $baseDir . '/classes/order-add-shipping.php',
13
+ 'WPDesk_Flexible_Shipping_Admin_Notices' => $baseDir . '/classes/admin-notices.php',
14
+ 'WPDesk_Flexible_Shipping_Bulk_Actions' => $baseDir . '/classes/bulk-actions.php',
15
+ 'WPDesk_Flexible_Shipping_Export' => $baseDir . '/classes/flexible-shipping-export.php',
16
+ 'WPDesk_Flexible_Shipping_Factory' => $baseDir . '/classes/flexible-shipping-factory.php',
17
+ 'WPDesk_Flexible_Shipping_Info' => $baseDir . '/classes/shipping-method-info.php',
18
+ 'WPDesk_Flexible_Shipping_Manifest' => $baseDir . '/classes/manifest/class-manifest.php',
19
+ 'WPDesk_Flexible_Shipping_Manifest_FS' => $baseDir . '/classes/manifest/class-manifest-fs.php',
20
+ 'WPDesk_Flexible_Shipping_Manifest_Interface' => $baseDir . '/classes/manifest/interface-manifest.php',
21
+ 'WPDesk_Flexible_Shipping_Multicurrency' => $baseDir . '/classes/multicurrency.php',
22
+ 'WPDesk_Flexible_Shipping_Multilingual' => $baseDir . '/classes/multilingual.php',
23
+ 'WPDesk_Flexible_Shipping_Plugin' => $baseDir . '/classes/flexible-shipping-plugin.php',
24
+ 'WPDesk_Flexible_Shipping_Shipment' => $baseDir . '/classes/shipment/class-shipment.php',
25
+ 'WPDesk_Flexible_Shipping_Shipment_Ajax' => $baseDir . '/classes/shipment/ajax.php',
26
+ 'WPDesk_Flexible_Shipping_Shipment_CPT' => $baseDir . '/classes/shipment/cpt-shipment.php',
27
+ 'WPDesk_Flexible_Shipping_Shipment_Interface' => $baseDir . '/classes/shipment/interface-shipment.php',
28
+ 'WPDesk_Flexible_Shipping_Shipping_Manifest_CPT' => $baseDir . '/classes/manifest/cpt-shipping-manifest.php',
29
+ 'WPDesk_Flexible_Shipping_Tracker' => $baseDir . '/classes/tracker.php',
30
+ 'WPDesk_Helper_Plugin' => $baseDir . '/classes/wpdesk/class-helper.php',
31
+ 'WPDesk_Plugin_1_10' => $baseDir . '/classes/wpdesk/class-plugin.php',
32
+ 'WPDesk_Plugin_Factory_1_10' => $baseDir . '/classes/wpdesk/interface-plugin-factory.php',
33
+ 'WPDesk_Requirement_Checker_1_10' => $baseDir . '/classes/wpdesk/class-requirement-checker.php',
34
+ 'WPDesk_S214_Settings_1_10' => $baseDir . '/classes/wpdesk/settings-api/class.s214-settings.php',
35
+ 'WPDesk_Settings_1_10' => $baseDir . '/classes/wpdesk/class-settings.php',
36
+ 'WPDesk_Tracker' => $baseDir . '/inc/wpdesk-tracker/class-wpdesk-tracker.php',
37
+ 'WPDesk_Tracker_Data_Provider' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider.php',
38
+ 'WPDesk_Tracker_Data_Provider_Gateways' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-gateways.php',
39
+ 'WPDesk_Tracker_Data_Provider_Identification' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-identification.php',
40
+ 'WPDesk_Tracker_Data_Provider_Identification_Gdpr' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-identification-gdpr.php',
41
+ 'WPDesk_Tracker_Data_Provider_Jetpack' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-jetpack.php',
42
+ 'WPDesk_Tracker_Data_Provider_License_Emails' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-license-emails.php',
43
+ 'WPDesk_Tracker_Data_Provider_Orders' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-orders.php',
44
+ 'WPDesk_Tracker_Data_Provider_Orders_Country' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-orders-country.php',
45
+ 'WPDesk_Tracker_Data_Provider_Orders_Month' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-orders-month.php',
46
+ 'WPDesk_Tracker_Data_Provider_Plugins' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-plugins.php',
47
+ 'WPDesk_Tracker_Data_Provider_Products' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-products.php',
48
+ 'WPDesk_Tracker_Data_Provider_Products_Variations' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-products-variations.php',
49
+ 'WPDesk_Tracker_Data_Provider_Server' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-server.php',
50
+ 'WPDesk_Tracker_Data_Provider_Settings' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-settings.php',
51
+ 'WPDesk_Tracker_Data_Provider_Shipping_Classes' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-shipping-classes.php',
52
+ 'WPDesk_Tracker_Data_Provider_Shipping_Methods' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-shipping-methods.php',
53
+ 'WPDesk_Tracker_Data_Provider_Shipping_Methods_Zones' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-shipping-methods-zones.php',
54
+ 'WPDesk_Tracker_Data_Provider_Templates' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-templates.php',
55
+ 'WPDesk_Tracker_Data_Provider_Theme' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-theme.php',
56
+ 'WPDesk_Tracker_Data_Provider_User_Agent' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-user-agent.php',
57
+ 'WPDesk_Tracker_Data_Provider_Users' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-users.php',
58
+ 'WPDesk_Tracker_Data_Provider_Wordpress' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-wordpress.php',
59
+ 'WPDesk_Tracker_Factory' => $baseDir . '/inc/wpdesk-tracker/class-wpdesk-tracker-factory.php',
60
+ 'WPDesk_Tracker_Sender' => $baseDir . '/inc/wpdesk-tracker/sender/class-wpdesk-tracker-sender.php',
61
+ 'WPDesk_Tracker_Sender_Exception_WpError' => $baseDir . '/inc/wpdesk-tracker/sender/Exception/class-wpdesk-tracker-sender-exception-wperror.php',
62
+ 'WPDesk_Tracker_Sender_Logged' => $baseDir . '/inc/wpdesk-tracker/sender/class-wpdesk-tracker-sender-logged.php',
63
+ 'WPDesk_Tracker_Sender_Wordpress_To_WPDesk' => $baseDir . '/inc/wpdesk-tracker/sender/class-wpdesk-tracker-sender-wordpress-to-wpdesk.php',
64
  );
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInite5c7bd96112481520aa09571fa61f763
6
  {
7
  private static $loader;
8
 
@@ -19,15 +19,15 @@ class ComposerAutoloaderInite5c7bd96112481520aa09571fa61f763
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInite5c7bd96112481520aa09571fa61f763', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInite5c7bd96112481520aa09571fa61f763', '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\ComposerStaticInite5c7bd96112481520aa09571fa61f763::getInitializer($loader));
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 ComposerAutoloaderInitcf82b5fb62aaabc643f4fe04648afaad
6
  {
7
  private static $loader;
8
 
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInitcf82b5fb62aaabc643f4fe04648afaad', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInitcf82b5fb62aaabc643f4fe04648afaad', '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\ComposerStaticInitcf82b5fb62aaabc643f4fe04648afaad::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,70 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInite5c7bd96112481520aa09571fa61f763
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 ComposerStaticInitcf82b5fb62aaabc643f4fe04648afaad
8
  {
9
+ public static $classMap = array (
10
+ 'Browser' => __DIR__ . '/../..' . '/classes/wpdesk/settings-api/modules/sysinfo/browser.php',
11
+ 'S214_Sysinfo' => __DIR__ . '/../..' . '/classes/wpdesk/settings-api/modules/sysinfo/class.s214-sysinfo.php',
12
+ 'WPDesk_Flexible_Shipping' => __DIR__ . '/../..' . '/classes/shipping-method.php',
13
+ 'WPDesk_Flexible_Shipping_Add_Shipping' => __DIR__ . '/../..' . '/classes/order-add-shipping.php',
14
+ 'WPDesk_Flexible_Shipping_Admin_Notices' => __DIR__ . '/../..' . '/classes/admin-notices.php',
15
+ 'WPDesk_Flexible_Shipping_Bulk_Actions' => __DIR__ . '/../..' . '/classes/bulk-actions.php',
16
+ 'WPDesk_Flexible_Shipping_Export' => __DIR__ . '/../..' . '/classes/flexible-shipping-export.php',
17
+ 'WPDesk_Flexible_Shipping_Factory' => __DIR__ . '/../..' . '/classes/flexible-shipping-factory.php',
18
+ 'WPDesk_Flexible_Shipping_Info' => __DIR__ . '/../..' . '/classes/shipping-method-info.php',
19
+ 'WPDesk_Flexible_Shipping_Manifest' => __DIR__ . '/../..' . '/classes/manifest/class-manifest.php',
20
+ 'WPDesk_Flexible_Shipping_Manifest_FS' => __DIR__ . '/../..' . '/classes/manifest/class-manifest-fs.php',
21
+ 'WPDesk_Flexible_Shipping_Manifest_Interface' => __DIR__ . '/../..' . '/classes/manifest/interface-manifest.php',
22
+ 'WPDesk_Flexible_Shipping_Multicurrency' => __DIR__ . '/../..' . '/classes/multicurrency.php',
23
+ 'WPDesk_Flexible_Shipping_Multilingual' => __DIR__ . '/../..' . '/classes/multilingual.php',
24
+ 'WPDesk_Flexible_Shipping_Plugin' => __DIR__ . '/../..' . '/classes/flexible-shipping-plugin.php',
25
+ 'WPDesk_Flexible_Shipping_Shipment' => __DIR__ . '/../..' . '/classes/shipment/class-shipment.php',
26
+ 'WPDesk_Flexible_Shipping_Shipment_Ajax' => __DIR__ . '/../..' . '/classes/shipment/ajax.php',
27
+ 'WPDesk_Flexible_Shipping_Shipment_CPT' => __DIR__ . '/../..' . '/classes/shipment/cpt-shipment.php',
28
+ 'WPDesk_Flexible_Shipping_Shipment_Interface' => __DIR__ . '/../..' . '/classes/shipment/interface-shipment.php',
29
+ 'WPDesk_Flexible_Shipping_Shipping_Manifest_CPT' => __DIR__ . '/../..' . '/classes/manifest/cpt-shipping-manifest.php',
30
+ 'WPDesk_Flexible_Shipping_Tracker' => __DIR__ . '/../..' . '/classes/tracker.php',
31
+ 'WPDesk_Helper_Plugin' => __DIR__ . '/../..' . '/classes/wpdesk/class-helper.php',
32
+ 'WPDesk_Plugin_1_10' => __DIR__ . '/../..' . '/classes/wpdesk/class-plugin.php',
33
+ 'WPDesk_Plugin_Factory_1_10' => __DIR__ . '/../..' . '/classes/wpdesk/interface-plugin-factory.php',
34
+ 'WPDesk_Requirement_Checker_1_10' => __DIR__ . '/../..' . '/classes/wpdesk/class-requirement-checker.php',
35
+ 'WPDesk_S214_Settings_1_10' => __DIR__ . '/../..' . '/classes/wpdesk/settings-api/class.s214-settings.php',
36
+ 'WPDesk_Settings_1_10' => __DIR__ . '/../..' . '/classes/wpdesk/class-settings.php',
37
+ 'WPDesk_Tracker' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/class-wpdesk-tracker.php',
38
+ 'WPDesk_Tracker_Data_Provider' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider.php',
39
+ 'WPDesk_Tracker_Data_Provider_Gateways' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-gateways.php',
40
+ 'WPDesk_Tracker_Data_Provider_Identification' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-identification.php',
41
+ 'WPDesk_Tracker_Data_Provider_Identification_Gdpr' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-identification-gdpr.php',
42
+ 'WPDesk_Tracker_Data_Provider_Jetpack' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-jetpack.php',
43
+ 'WPDesk_Tracker_Data_Provider_License_Emails' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-license-emails.php',
44
+ 'WPDesk_Tracker_Data_Provider_Orders' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-orders.php',
45
+ 'WPDesk_Tracker_Data_Provider_Orders_Country' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-orders-country.php',
46
+ 'WPDesk_Tracker_Data_Provider_Orders_Month' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-orders-month.php',
47
+ 'WPDesk_Tracker_Data_Provider_Plugins' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-plugins.php',
48
+ 'WPDesk_Tracker_Data_Provider_Products' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-products.php',
49
+ 'WPDesk_Tracker_Data_Provider_Products_Variations' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-products-variations.php',
50
+ 'WPDesk_Tracker_Data_Provider_Server' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-server.php',
51
+ 'WPDesk_Tracker_Data_Provider_Settings' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-settings.php',
52
+ 'WPDesk_Tracker_Data_Provider_Shipping_Classes' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-shipping-classes.php',
53
+ 'WPDesk_Tracker_Data_Provider_Shipping_Methods' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-shipping-methods.php',
54
+ 'WPDesk_Tracker_Data_Provider_Shipping_Methods_Zones' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-shipping-methods-zones.php',
55
+ 'WPDesk_Tracker_Data_Provider_Templates' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-templates.php',
56
+ 'WPDesk_Tracker_Data_Provider_Theme' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-theme.php',
57
+ 'WPDesk_Tracker_Data_Provider_User_Agent' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-user-agent.php',
58
+ 'WPDesk_Tracker_Data_Provider_Users' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-users.php',
59
+ 'WPDesk_Tracker_Data_Provider_Wordpress' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-wordpress.php',
60
+ 'WPDesk_Tracker_Factory' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/class-wpdesk-tracker-factory.php',
61
+ 'WPDesk_Tracker_Sender' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/sender/class-wpdesk-tracker-sender.php',
62
+ 'WPDesk_Tracker_Sender_Exception_WpError' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/sender/Exception/class-wpdesk-tracker-sender-exception-wperror.php',
63
+ 'WPDesk_Tracker_Sender_Logged' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/sender/class-wpdesk-tracker-sender-logged.php',
64
+ 'WPDesk_Tracker_Sender_Wordpress_To_WPDesk' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/sender/class-wpdesk-tracker-sender-wordpress-to-wpdesk.php',
65
+ );
66
+
67
  public static function getInitializer(ClassLoader $loader)
68
  {
69
  return \Closure::bind(function () use ($loader) {
70
+ $loader->classMap = ComposerStaticInitcf82b5fb62aaabc643f4fe04648afaad::$classMap;
71
 
72
  }, null, ClassLoader::class);
73
  }