WP Product Review Lite - Version 3.7.4

Version Description

  • 2020-03-31
Download this release

Release Info

Developer codeinwp
Plugin Icon WP Product Review Lite
Version 3.7.4
Comparing to
See all releases

Code changes from version 3.7.3 to 3.7.4

CHANGELOG.md CHANGED
@@ -1,7 +1,7 @@
1
 
2
- ### v3.7.3 - 2020-02-24
3
  **Changes:**
4
- * Update readme file
5
 
6
  ### v3.7.3 - 2020-02-24
7
  **Changes:**
1
 
2
+ ### v3.7.4 - 2020-03-31
3
  **Changes:**
4
+ * Tested up to WordPress 5.4
5
 
6
  ### v3.7.3 - 2020-02-24
7
  **Changes:**
includes/class-wppr.php CHANGED
@@ -67,7 +67,7 @@ class WPPR {
67
  */
68
  public function __construct() {
69
  $this->plugin_name = 'wppr';
70
- $this->version = '3.7.3';
71
 
72
  $this->load_dependencies();
73
  $this->set_locale();
67
  */
68
  public function __construct() {
69
  $this->plugin_name = 'wppr';
70
+ $this->version = '3.7.4';
71
 
72
  $this->load_dependencies();
73
  $this->set_locale();
package-lock.json CHANGED
@@ -1,6 +1,6 @@
1
  {
2
  "name": "wp-product-review",
3
- "version": "3.7.3",
4
  "lockfileVersion": 1,
5
  "requires": true,
6
  "dependencies": {
@@ -265,13 +265,13 @@
265
  "dev": true
266
  },
267
  "autoprefixer": {
268
- "version": "9.7.4",
269
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.4.tgz",
270
- "integrity": "sha512-g0Ya30YrMBAEZk60lp+qfX5YQllG+S5W3GYCFvyHTvhOki0AEQJLPEcIuGRsqVwLi8FvXPVtwTGhfr38hVpm0g==",
271
  "dev": true,
272
  "requires": {
273
- "browserslist": "4.8.7",
274
- "caniuse-lite": "1.0.30001030",
275
  "chalk": "2.4.2",
276
  "normalize-range": "0.1.2",
277
  "num2fraction": "1.2.2",
@@ -429,7 +429,7 @@
429
  "is-stream": "1.1.0",
430
  "npm-run-path": "2.0.2",
431
  "p-finally": "1.0.0",
432
- "signal-exit": "3.0.2",
433
  "strip-eof": "1.0.0"
434
  }
435
  },
@@ -686,20 +686,21 @@
686
  }
687
  },
688
  "browserslist": {
689
- "version": "4.8.7",
690
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.7.tgz",
691
- "integrity": "sha512-gFOnZNYBHrEyUML0xr5NJ6edFaaKbTFX9S9kQHlYfCP0Rit/boRIz4G+Avq6/4haEKJXdGGUnoolx+5MWW2BoA==",
692
  "dev": true,
693
  "requires": {
694
- "caniuse-lite": "1.0.30001030",
695
- "electron-to-chromium": "1.3.360",
696
- "node-releases": "1.1.50"
 
697
  }
698
  },
699
  "buffer": {
700
- "version": "5.4.3",
701
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.3.tgz",
702
- "integrity": "sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A==",
703
  "dev": true,
704
  "requires": {
705
  "base64-js": "1.3.1",
@@ -764,9 +765,20 @@
764
  "dev": true,
765
  "requires": {
766
  "graceful-fs": "4.2.3",
767
- "mkdirp": "0.5.1",
768
  "object-assign": "4.1.1",
769
  "rimraf": "2.6.3"
 
 
 
 
 
 
 
 
 
 
 
770
  }
771
  },
772
  "cacheable-request": {
@@ -817,9 +829,9 @@
817
  }
818
  },
819
  "caniuse-lite": {
820
- "version": "1.0.30001030",
821
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001030.tgz",
822
- "integrity": "sha512-QGK0W4Ft/Ac+zTjEiRJfwDNATvS3fodDczBXrH42784kcfqcDKpEPfN08N0HQjrAp8He/Jw8QiSS9QRn7XAbUw==",
823
  "dev": true
824
  },
825
  "caseless": {
@@ -1088,7 +1100,7 @@
1088
  "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==",
1089
  "dev": true,
1090
  "requires": {
1091
- "buffer": "5.4.3"
1092
  }
1093
  },
1094
  "crc32-stream": {
@@ -1175,6 +1187,7 @@
1175
  "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz",
1176
  "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==",
1177
  "dev": true,
 
1178
  "requires": {
1179
  "mdn-data": "2.0.4",
1180
  "source-map": "0.6.1"
@@ -1244,13 +1257,33 @@
1244
  }
1245
  },
1246
  "csso": {
1247
- "version": "4.0.2",
1248
- "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.2.tgz",
1249
- "integrity": "sha512-kS7/oeNVXkHWxby5tHVxlhjizRCSv8QdU7hB2FpdAibDU8FjTAolhNjKNTiLzXtUrKT6HwClE81yXwEk1309wg==",
1250
  "dev": true,
1251
  "optional": true,
1252
  "requires": {
1253
- "css-tree": "1.0.0-alpha.37"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1254
  }
1255
  },
1256
  "currently-unhandled": {
@@ -1652,7 +1685,7 @@
1652
  "integrity": "sha512-jeXYwHPKbitU1l14dWlsl5Nm+b1Hsm7VX73BsrQ4RVwEcAQQIPFHTZAbVtuIGxZBrpdT2FXd8lbtrNBrzZxIsA==",
1653
  "dev": true,
1654
  "requires": {
1655
- "errlop": "2.0.0",
1656
  "semver": "6.3.0"
1657
  },
1658
  "dependencies": {
@@ -1665,9 +1698,9 @@
1665
  }
1666
  },
1667
  "electron-to-chromium": {
1668
- "version": "1.3.360",
1669
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.360.tgz",
1670
- "integrity": "sha512-RE1pv2sjQiDRRN1nI0fJ0eQHZ9le4oobu16OArnwEUV5ycAU5SNjFyvzjZ1gPUAqBa2Ud1XagtW8j3ZXfHuQHA==",
1671
  "dev": true
1672
  },
1673
  "encoding": {
@@ -1695,9 +1728,9 @@
1695
  "dev": true
1696
  },
1697
  "errlop": {
1698
- "version": "2.0.0",
1699
- "resolved": "https://registry.npmjs.org/errlop/-/errlop-2.0.0.tgz",
1700
- "integrity": "sha512-z00WIrQhtOMUnjdTG0O4f6hMG64EVccVDBy2WwgjcF8S4UB1exGYuc2OFwmdQmsJwLQVEIHWHPCz/omXXgAZHw==",
1701
  "dev": true
1702
  },
1703
  "error": {
@@ -1719,9 +1752,9 @@
1719
  }
1720
  },
1721
  "es-abstract": {
1722
- "version": "1.17.4",
1723
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz",
1724
- "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==",
1725
  "dev": true,
1726
  "requires": {
1727
  "es-to-primitive": "1.2.1",
@@ -1733,8 +1766,8 @@
1733
  "object-inspect": "1.7.0",
1734
  "object-keys": "1.1.1",
1735
  "object.assign": "4.1.0",
1736
- "string.prototype.trimleft": "2.1.1",
1737
- "string.prototype.trimright": "2.1.1"
1738
  }
1739
  },
1740
  "es-to-primitive": {
@@ -1800,7 +1833,7 @@
1800
  "is-stream": "1.1.0",
1801
  "npm-run-path": "2.0.2",
1802
  "p-finally": "1.0.0",
1803
- "signal-exit": "3.0.2",
1804
  "strip-eof": "1.0.0"
1805
  }
1806
  },
@@ -2222,7 +2255,7 @@
2222
  "console-control-strings": "1.1.0",
2223
  "has-unicode": "2.0.1",
2224
  "object-assign": "4.1.1",
2225
- "signal-exit": "3.0.2",
2226
  "string-width": "1.0.2",
2227
  "strip-ansi": "3.0.1",
2228
  "wide-align": "1.1.3"
@@ -2342,7 +2375,7 @@
2342
  "is-stream": "1.1.0",
2343
  "npm-run-path": "2.0.2",
2344
  "p-finally": "1.0.0",
2345
- "signal-exit": "3.0.2",
2346
  "strip-eof": "1.0.0"
2347
  }
2348
  },
@@ -2537,9 +2570,9 @@
2537
  "dev": true
2538
  },
2539
  "grunt": {
2540
- "version": "1.0.4",
2541
- "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.4.tgz",
2542
- "integrity": "sha512-PYsMOrOC+MsdGEkFVwMaMyc6Ob7pKmq+deg1Sjr+vvMWp35sztfwKE7qoN51V+UEtHsyNuMcGdgMLFkBHvMxHQ==",
2543
  "dev": true,
2544
  "requires": {
2545
  "coffeescript": "1.10.0",
@@ -2555,7 +2588,7 @@
2555
  "iconv-lite": "0.4.24",
2556
  "js-yaml": "3.13.1",
2557
  "minimatch": "3.0.4",
2558
- "mkdirp": "0.5.1",
2559
  "nopt": "3.0.6",
2560
  "path-is-absolute": "1.0.1",
2561
  "rimraf": "2.6.3"
@@ -3122,7 +3155,7 @@
3122
  "version": "github:codeinwp/grunt-plugin-fleet#922540b800fafe8a89d60e82699afb8073c1b7c2",
3123
  "dev": true,
3124
  "requires": {
3125
- "autoprefixer": "9.7.4",
3126
  "grunt": "1.0.4",
3127
  "grunt-cachebuster": "0.1.7",
3128
  "grunt-checktextdomain": "1.0.1",
@@ -3147,6 +3180,62 @@
3147
  "grunt-wp-readme-to-markdown": "2.0.1",
3148
  "ignore": "5.1.4",
3149
  "time-grunt": "1.4.0"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3150
  }
3151
  },
3152
  "grunt-postcss": {
@@ -3205,7 +3294,7 @@
3205
  "integrity": "sha512-mpcf8tcEtRBeMVkZpysIIDbv6sW3S0R5MO4+ysMNb7i6LNSpvyTePKWE/eOnLdfyXIuqxtP/H2Z4Mgkjl2BUBw==",
3206
  "dev": true,
3207
  "requires": {
3208
- "grunt": "1.0.4",
3209
  "semver": "6.3.0"
3210
  },
3211
  "dependencies": {
@@ -3234,7 +3323,7 @@
3234
  "integrity": "sha512-CJNbEKeBeOSAPeaJ9B8iCgSwtaG63UR9/uT46a4OsIqnFhOJpeAi138JTlvjfIbnDVoBrzvdrKJe1svveLjUtA==",
3235
  "dev": true,
3236
  "requires": {
3237
- "grunt": "1.0.4",
3238
  "node-wp-i18n": "1.2.3"
3239
  }
3240
  },
@@ -3356,9 +3445,9 @@
3356
  "dev": true
3357
  },
3358
  "hosted-git-info": {
3359
- "version": "2.8.5",
3360
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz",
3361
- "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==",
3362
  "dev": true
3363
  },
3364
  "html-comment-regex": {
@@ -4090,6 +4179,17 @@
4090
  "arrify": "1.0.1",
4091
  "multimatch": "2.1.0",
4092
  "pkg-up": "1.0.0"
 
 
 
 
 
 
 
 
 
 
 
4093
  }
4094
  },
4095
  "load-json-file": {
@@ -4124,6 +4224,24 @@
4124
  }
4125
  }
4126
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4127
  "lodash": {
4128
  "version": "4.17.15",
4129
  "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
@@ -4155,7 +4273,7 @@
4155
  "dev": true,
4156
  "requires": {
4157
  "currently-unhandled": "0.4.1",
4158
- "signal-exit": "3.0.2"
4159
  }
4160
  },
4161
  "lowercase-keys": {
@@ -4235,7 +4353,8 @@
4235
  "version": "2.0.4",
4236
  "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz",
4237
  "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==",
4238
- "dev": true
 
4239
  },
4240
  "meow": {
4241
  "version": "3.7.0",
@@ -4247,7 +4366,7 @@
4247
  "decamelize": "1.2.0",
4248
  "loud-rejection": "1.6.0",
4249
  "map-obj": "1.0.1",
4250
- "minimist": "1.2.0",
4251
  "normalize-package-data": "2.5.0",
4252
  "object-assign": "4.1.1",
4253
  "read-pkg-up": "1.0.1",
@@ -4314,9 +4433,9 @@
4314
  }
4315
  },
4316
  "minimist": {
4317
- "version": "1.2.0",
4318
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
4319
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
4320
  "dev": true
4321
  },
4322
  "mixin-deep": {
@@ -4341,21 +4460,17 @@
4341
  }
4342
  },
4343
  "mkdirp": {
4344
- "version": "0.5.1",
4345
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
4346
- "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
 
 
 
 
 
 
4347
  "dev": true,
4348
- "requires": {
4349
- "minimist": "0.0.8"
4350
- },
4351
- "dependencies": {
4352
- "minimist": {
4353
- "version": "0.0.8",
4354
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
4355
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
4356
- "dev": true
4357
- }
4358
- }
4359
  },
4360
  "ms": {
4361
  "version": "2.0.0",
@@ -4402,9 +4517,9 @@
4402
  }
4403
  },
4404
  "napi-build-utils": {
4405
- "version": "1.0.1",
4406
- "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.1.tgz",
4407
- "integrity": "sha512-boQj1WFgQH3v4clhu3mTNfP+vOBxorDlE8EKiMjUlLG3C4qAESnn9AxIOkFgTR2c9LtzNjPrjS60cT27ZKBhaA==",
4408
  "dev": true,
4409
  "optional": true
4410
  },
@@ -4425,21 +4540,10 @@
4425
  }
4426
  },
4427
  "node-releases": {
4428
- "version": "1.1.50",
4429
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.50.tgz",
4430
- "integrity": "sha512-lgAmPv9eYZ0bGwUYAKlr8MG6K4CvWliWqnkcT2P8mMAgVrH3lqfBPorFlxiG1pHQnqmavJZ9vbMXUTNyMLbrgQ==",
4431
- "dev": true,
4432
- "requires": {
4433
- "semver": "6.3.0"
4434
- },
4435
- "dependencies": {
4436
- "semver": {
4437
- "version": "6.3.0",
4438
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
4439
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
4440
- "dev": true
4441
- }
4442
- }
4443
  },
4444
  "node-uuid": {
4445
  "version": "1.4.0",
@@ -4457,9 +4561,20 @@
4457
  "gettext-parser": "3.1.1",
4458
  "glob": "7.0.6",
4459
  "lodash": "4.17.15",
4460
- "minimist": "1.2.0",
4461
- "mkdirp": "0.5.1",
4462
  "tmp": "0.0.33"
 
 
 
 
 
 
 
 
 
 
 
4463
  }
4464
  },
4465
  "noop-logger": {
@@ -4484,7 +4599,7 @@
4484
  "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
4485
  "dev": true,
4486
  "requires": {
4487
- "hosted-git-info": "2.8.5",
4488
  "resolve": "1.15.1",
4489
  "semver": "5.7.1",
4490
  "validate-npm-package-license": "3.0.4"
@@ -4681,7 +4796,7 @@
4681
  "optional": true,
4682
  "requires": {
4683
  "define-properties": "1.1.3",
4684
- "es-abstract": "1.17.4"
4685
  }
4686
  },
4687
  "object.pick": {
@@ -4701,7 +4816,7 @@
4701
  "optional": true,
4702
  "requires": {
4703
  "define-properties": "1.1.3",
4704
- "es-abstract": "1.17.4",
4705
  "function-bind": "1.1.1",
4706
  "has": "1.0.3"
4707
  }
@@ -4773,6 +4888,24 @@
4773
  "dev": true,
4774
  "optional": true
4775
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4776
  "p-map": {
4777
  "version": "1.2.0",
4778
  "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz",
@@ -4811,6 +4944,12 @@
4811
  "p-finally": "1.0.0"
4812
  }
4813
  },
 
 
 
 
 
 
4814
  "parse-json": {
4815
  "version": "2.2.0",
4816
  "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
@@ -4910,12 +5049,23 @@
4910
  }
4911
  },
4912
  "pkg-up": {
4913
- "version": "1.0.0",
4914
- "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-1.0.0.tgz",
4915
- "integrity": "sha1-Pgj7RhUlxEIWJKM7n35tCvWwWiY=",
4916
  "dev": true,
4917
  "requires": {
4918
- "find-up": "1.1.2"
 
 
 
 
 
 
 
 
 
 
 
4919
  }
4920
  },
4921
  "plur": {
@@ -4971,18 +5121,30 @@
4971
  "detect-libc": "1.0.3",
4972
  "expand-template": "2.0.3",
4973
  "github-from-package": "0.0.0",
4974
- "minimist": "1.2.0",
4975
- "mkdirp": "0.5.1",
4976
- "napi-build-utils": "1.0.1",
4977
  "node-abi": "2.15.0",
4978
  "noop-logger": "0.1.1",
4979
  "npmlog": "4.1.2",
4980
  "pump": "3.0.0",
4981
  "rc": "1.2.8",
4982
  "simple-get": "3.1.0",
4983
- "tar-fs": "2.0.0",
4984
  "tunnel-agent": "0.6.0",
4985
  "which-pm-runs": "1.0.0"
 
 
 
 
 
 
 
 
 
 
 
 
4986
  }
4987
  },
4988
  "prepend-http": {
@@ -5036,9 +5198,9 @@
5036
  "dev": true
5037
  },
5038
  "psl": {
5039
- "version": "1.7.0",
5040
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz",
5041
- "integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==",
5042
  "dev": true
5043
  },
5044
  "pump": {
@@ -5065,9 +5227,9 @@
5065
  "optional": true
5066
  },
5067
  "qs": {
5068
- "version": "6.9.1",
5069
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.1.tgz",
5070
- "integrity": "sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA==",
5071
  "dev": true
5072
  },
5073
  "query-string": {
@@ -5109,7 +5271,7 @@
5109
  "requires": {
5110
  "deep-extend": "0.6.0",
5111
  "ini": "1.3.5",
5112
- "minimist": "1.2.0",
5113
  "strip-json-comments": "2.0.1"
5114
  }
5115
  },
@@ -5442,9 +5604,9 @@
5442
  "dev": true
5443
  },
5444
  "signal-exit": {
5445
- "version": "3.0.2",
5446
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
5447
- "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
5448
  "dev": true
5449
  },
5450
  "simple-concat": {
@@ -5792,24 +5954,46 @@
5792
  "strip-ansi": "3.0.1"
5793
  }
5794
  },
 
 
 
 
 
 
 
 
 
 
5795
  "string.prototype.trimleft": {
5796
- "version": "2.1.1",
5797
- "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz",
5798
- "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==",
5799
  "dev": true,
5800
  "requires": {
5801
  "define-properties": "1.1.3",
5802
- "function-bind": "1.1.1"
 
5803
  }
5804
  },
5805
  "string.prototype.trimright": {
5806
- "version": "2.1.1",
5807
- "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz",
5808
- "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==",
5809
  "dev": true,
5810
  "requires": {
5811
  "define-properties": "1.1.3",
5812
- "function-bind": "1.1.1"
 
 
 
 
 
 
 
 
 
 
 
5813
  }
5814
  },
5815
  "string_decoder": {
@@ -5900,36 +6084,50 @@
5900
  "css-select": "2.1.0",
5901
  "css-select-base-adapter": "0.1.1",
5902
  "css-tree": "1.0.0-alpha.37",
5903
- "csso": "4.0.2",
5904
  "js-yaml": "3.13.1",
5905
- "mkdirp": "0.5.1",
5906
  "object.values": "1.1.1",
5907
  "sax": "1.2.4",
5908
  "stable": "0.1.8",
5909
  "unquote": "1.1.1",
5910
  "util.promisify": "1.0.1"
 
 
 
 
 
 
 
 
 
 
 
 
5911
  }
5912
  },
5913
  "tar-fs": {
5914
- "version": "2.0.0",
5915
- "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.0.tgz",
5916
- "integrity": "sha512-vaY0obB6Om/fso8a8vakQBzwholQ7v5+uy+tF3Ozvxv1KNezmVQAiWtcNmMHFSFPqL3dJA8ha6gdtFbfX9mcxA==",
5917
  "dev": true,
5918
  "optional": true,
5919
  "requires": {
5920
  "chownr": "1.1.4",
5921
- "mkdirp": "0.5.1",
5922
  "pump": "3.0.0",
5923
- "tar-stream": "2.1.0"
5924
  },
5925
  "dependencies": {
5926
  "bl": {
5927
- "version": "3.0.0",
5928
- "resolved": "https://registry.npmjs.org/bl/-/bl-3.0.0.tgz",
5929
- "integrity": "sha512-EUAyP5UHU5hxF8BPT0LKW8gjYLhq1DQIcneOX/pL/m2Alo+OYDQAJlHq+yseMP50Os2nHXOSic6Ss3vSQeyf4A==",
5930
  "dev": true,
5931
  "optional": true,
5932
  "requires": {
 
 
5933
  "readable-stream": "3.6.0"
5934
  }
5935
  },
@@ -5945,13 +6143,13 @@
5945
  }
5946
  },
5947
  "tar-stream": {
5948
- "version": "2.1.0",
5949
- "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.0.tgz",
5950
- "integrity": "sha512-+DAn4Nb4+gz6WZigRzKEZl1QuJVOLtAwwF+WUxy1fJ6X63CaGaUAxJRD2KEn1OMfcbCjySTYpNC6WmfQoIEOdw==",
5951
  "dev": true,
5952
  "optional": true,
5953
  "requires": {
5954
- "bl": "3.0.0",
5955
  "end-of-stream": "1.4.4",
5956
  "fs-constants": "1.0.0",
5957
  "inherits": "2.0.4",
@@ -6068,7 +6266,7 @@
6068
  "faye-websocket": "0.10.0",
6069
  "livereload-js": "2.4.0",
6070
  "object-assign": "4.1.1",
6071
- "qs": "6.9.1"
6072
  },
6073
  "dependencies": {
6074
  "debug": {
@@ -6151,7 +6349,7 @@
6151
  "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
6152
  "dev": true,
6153
  "requires": {
6154
- "psl": "1.7.0",
6155
  "punycode": "2.1.1"
6156
  }
6157
  },
@@ -6200,7 +6398,7 @@
6200
  "integrity": "sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==",
6201
  "dev": true,
6202
  "requires": {
6203
- "buffer": "5.4.3",
6204
  "through": "2.3.8"
6205
  }
6206
  },
@@ -6336,7 +6534,7 @@
6336
  "optional": true,
6337
  "requires": {
6338
  "define-properties": "1.1.3",
6339
- "es-abstract": "1.17.4",
6340
  "has-symbols": "1.0.1",
6341
  "object.getownpropertydescriptors": "2.1.0"
6342
  }
1
  {
2
  "name": "wp-product-review",
3
+ "version": "3.7.4",
4
  "lockfileVersion": 1,
5
  "requires": true,
6
  "dependencies": {
265
  "dev": true
266
  },
267
  "autoprefixer": {
268
+ "version": "9.7.5",
269
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.5.tgz",
270
+ "integrity": "sha512-URo6Zvt7VYifomeAfJlMFnYDhow1rk2bufwkbamPEAtQFcL11moLk4PnR7n9vlu7M+BkXAZkHFA0mIcY7tjQFg==",
271
  "dev": true,
272
  "requires": {
273
+ "browserslist": "4.11.1",
274
+ "caniuse-lite": "1.0.30001038",
275
  "chalk": "2.4.2",
276
  "normalize-range": "0.1.2",
277
  "num2fraction": "1.2.2",
429
  "is-stream": "1.1.0",
430
  "npm-run-path": "2.0.2",
431
  "p-finally": "1.0.0",
432
+ "signal-exit": "3.0.3",
433
  "strip-eof": "1.0.0"
434
  }
435
  },
686
  }
687
  },
688
  "browserslist": {
689
+ "version": "4.11.1",
690
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.11.1.tgz",
691
+ "integrity": "sha512-DCTr3kDrKEYNw6Jb9HFxVLQNaue8z+0ZfRBRjmCunKDEXEBajKDj2Y+Uelg+Pi29OnvaSGwjOsnRyNEkXzHg5g==",
692
  "dev": true,
693
  "requires": {
694
+ "caniuse-lite": "1.0.30001038",
695
+ "electron-to-chromium": "1.3.391",
696
+ "node-releases": "1.1.53",
697
+ "pkg-up": "2.0.0"
698
  }
699
  },
700
  "buffer": {
701
+ "version": "5.5.0",
702
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.5.0.tgz",
703
+ "integrity": "sha512-9FTEDjLjwoAkEwyMGDjYJQN2gfRgOKBKRfiglhvibGbpeeU/pQn1bJxQqm32OD/AIeEuHxU9roxXxg34Byp/Ww==",
704
  "dev": true,
705
  "requires": {
706
  "base64-js": "1.3.1",
765
  "dev": true,
766
  "requires": {
767
  "graceful-fs": "4.2.3",
768
+ "mkdirp": "0.5.4",
769
  "object-assign": "4.1.1",
770
  "rimraf": "2.6.3"
771
+ },
772
+ "dependencies": {
773
+ "mkdirp": {
774
+ "version": "0.5.4",
775
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz",
776
+ "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==",
777
+ "dev": true,
778
+ "requires": {
779
+ "minimist": "1.2.5"
780
+ }
781
+ }
782
  }
783
  },
784
  "cacheable-request": {
829
  }
830
  },
831
  "caniuse-lite": {
832
+ "version": "1.0.30001038",
833
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001038.tgz",
834
+ "integrity": "sha512-zii9quPo96XfOiRD4TrfYGs+QsGZpb2cGiMAzPjtf/hpFgB6zCPZgJb7I1+EATeMw/o+lG8FyRAnI+CWStHcaQ==",
835
  "dev": true
836
  },
837
  "caseless": {
1100
  "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==",
1101
  "dev": true,
1102
  "requires": {
1103
+ "buffer": "5.5.0"
1104
  }
1105
  },
1106
  "crc32-stream": {
1187
  "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz",
1188
  "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==",
1189
  "dev": true,
1190
+ "optional": true,
1191
  "requires": {
1192
  "mdn-data": "2.0.4",
1193
  "source-map": "0.6.1"
1257
  }
1258
  },
1259
  "csso": {
1260
+ "version": "4.0.3",
1261
+ "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz",
1262
+ "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==",
1263
  "dev": true,
1264
  "optional": true,
1265
  "requires": {
1266
+ "css-tree": "1.0.0-alpha.39"
1267
+ },
1268
+ "dependencies": {
1269
+ "css-tree": {
1270
+ "version": "1.0.0-alpha.39",
1271
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz",
1272
+ "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==",
1273
+ "dev": true,
1274
+ "optional": true,
1275
+ "requires": {
1276
+ "mdn-data": "2.0.6",
1277
+ "source-map": "0.6.1"
1278
+ }
1279
+ },
1280
+ "mdn-data": {
1281
+ "version": "2.0.6",
1282
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz",
1283
+ "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==",
1284
+ "dev": true,
1285
+ "optional": true
1286
+ }
1287
  }
1288
  },
1289
  "currently-unhandled": {
1685
  "integrity": "sha512-jeXYwHPKbitU1l14dWlsl5Nm+b1Hsm7VX73BsrQ4RVwEcAQQIPFHTZAbVtuIGxZBrpdT2FXd8lbtrNBrzZxIsA==",
1686
  "dev": true,
1687
  "requires": {
1688
+ "errlop": "2.1.0",
1689
  "semver": "6.3.0"
1690
  },
1691
  "dependencies": {
1698
  }
1699
  },
1700
  "electron-to-chromium": {
1701
+ "version": "1.3.391",
1702
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.391.tgz",
1703
+ "integrity": "sha512-WOi6loSnDmfICOqGRrgeK7bZeWDAbGjCptDhI5eyJAqSzWfoeRuOOU1rOTZRL29/9AaxTndZB6Uh8YrxRfZJqw==",
1704
  "dev": true
1705
  },
1706
  "encoding": {
1728
  "dev": true
1729
  },
1730
  "errlop": {
1731
+ "version": "2.1.0",
1732
+ "resolved": "https://registry.npmjs.org/errlop/-/errlop-2.1.0.tgz",
1733
+ "integrity": "sha512-sEmQX03aJkWsqTPDYaymq3ROJmKxMHhFS4UN8fWwr5ZiRtw3p61QHRk2QQj68DiaTIXWujJP+uEUS1Zx3spxlw==",
1734
  "dev": true
1735
  },
1736
  "error": {
1752
  }
1753
  },
1754
  "es-abstract": {
1755
+ "version": "1.17.5",
1756
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz",
1757
+ "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==",
1758
  "dev": true,
1759
  "requires": {
1760
  "es-to-primitive": "1.2.1",
1766
  "object-inspect": "1.7.0",
1767
  "object-keys": "1.1.1",
1768
  "object.assign": "4.1.0",
1769
+ "string.prototype.trimleft": "2.1.2",
1770
+ "string.prototype.trimright": "2.1.2"
1771
  }
1772
  },
1773
  "es-to-primitive": {
1833
  "is-stream": "1.1.0",
1834
  "npm-run-path": "2.0.2",
1835
  "p-finally": "1.0.0",
1836
+ "signal-exit": "3.0.3",
1837
  "strip-eof": "1.0.0"
1838
  }
1839
  },
2255
  "console-control-strings": "1.1.0",
2256
  "has-unicode": "2.0.1",
2257
  "object-assign": "4.1.1",
2258
+ "signal-exit": "3.0.3",
2259
  "string-width": "1.0.2",
2260
  "strip-ansi": "3.0.1",
2261
  "wide-align": "1.1.3"
2375
  "is-stream": "1.1.0",
2376
  "npm-run-path": "2.0.2",
2377
  "p-finally": "1.0.0",
2378
+ "signal-exit": "3.0.3",
2379
  "strip-eof": "1.0.0"
2380
  }
2381
  },
2570
  "dev": true
2571
  },
2572
  "grunt": {
2573
+ "version": "1.1.0",
2574
+ "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.1.0.tgz",
2575
+ "integrity": "sha512-+NGod0grmviZ7Nzdi9am7vuRS/h76PcWDsV635mEXF0PEQMUV6Kb+OjTdsVxbi0PZmfQOjCMKb3w8CVZcqsn1g==",
2576
  "dev": true,
2577
  "requires": {
2578
  "coffeescript": "1.10.0",
2588
  "iconv-lite": "0.4.24",
2589
  "js-yaml": "3.13.1",
2590
  "minimatch": "3.0.4",
2591
+ "mkdirp": "1.0.3",
2592
  "nopt": "3.0.6",
2593
  "path-is-absolute": "1.0.1",
2594
  "rimraf": "2.6.3"
3155
  "version": "github:codeinwp/grunt-plugin-fleet#922540b800fafe8a89d60e82699afb8073c1b7c2",
3156
  "dev": true,
3157
  "requires": {
3158
+ "autoprefixer": "9.7.5",
3159
  "grunt": "1.0.4",
3160
  "grunt-cachebuster": "0.1.7",
3161
  "grunt-checktextdomain": "1.0.1",
3180
  "grunt-wp-readme-to-markdown": "2.0.1",
3181
  "ignore": "5.1.4",
3182
  "time-grunt": "1.4.0"
3183
+ },
3184
+ "dependencies": {
3185
+ "grunt": {
3186
+ "version": "1.0.4",
3187
+ "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.4.tgz",
3188
+ "integrity": "sha512-PYsMOrOC+MsdGEkFVwMaMyc6Ob7pKmq+deg1Sjr+vvMWp35sztfwKE7qoN51V+UEtHsyNuMcGdgMLFkBHvMxHQ==",
3189
+ "dev": true,
3190
+ "requires": {
3191
+ "coffeescript": "1.10.0",
3192
+ "dateformat": "1.0.12",
3193
+ "eventemitter2": "0.4.14",
3194
+ "exit": "0.1.2",
3195
+ "findup-sync": "0.3.0",
3196
+ "glob": "7.0.6",
3197
+ "grunt-cli": "1.2.0",
3198
+ "grunt-known-options": "1.1.1",
3199
+ "grunt-legacy-log": "2.0.0",
3200
+ "grunt-legacy-util": "1.1.1",
3201
+ "iconv-lite": "0.4.24",
3202
+ "js-yaml": "3.13.1",
3203
+ "minimatch": "3.0.4",
3204
+ "mkdirp": "0.5.4",
3205
+ "nopt": "3.0.6",
3206
+ "path-is-absolute": "1.0.1",
3207
+ "rimraf": "2.6.3"
3208
+ },
3209
+ "dependencies": {
3210
+ "grunt-cli": {
3211
+ "version": "1.2.0",
3212
+ "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.2.0.tgz",
3213
+ "integrity": "sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg=",
3214
+ "dev": true,
3215
+ "requires": {
3216
+ "findup-sync": "0.3.0",
3217
+ "grunt-known-options": "1.1.1",
3218
+ "nopt": "3.0.6",
3219
+ "resolve": "1.1.7"
3220
+ }
3221
+ }
3222
+ }
3223
+ },
3224
+ "mkdirp": {
3225
+ "version": "0.5.4",
3226
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz",
3227
+ "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==",
3228
+ "dev": true,
3229
+ "requires": {
3230
+ "minimist": "1.2.5"
3231
+ }
3232
+ },
3233
+ "resolve": {
3234
+ "version": "1.1.7",
3235
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
3236
+ "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
3237
+ "dev": true
3238
+ }
3239
  }
3240
  },
3241
  "grunt-postcss": {
3294
  "integrity": "sha512-mpcf8tcEtRBeMVkZpysIIDbv6sW3S0R5MO4+ysMNb7i6LNSpvyTePKWE/eOnLdfyXIuqxtP/H2Z4Mgkjl2BUBw==",
3295
  "dev": true,
3296
  "requires": {
3297
+ "grunt": "1.1.0",
3298
  "semver": "6.3.0"
3299
  },
3300
  "dependencies": {
3323
  "integrity": "sha512-CJNbEKeBeOSAPeaJ9B8iCgSwtaG63UR9/uT46a4OsIqnFhOJpeAi138JTlvjfIbnDVoBrzvdrKJe1svveLjUtA==",
3324
  "dev": true,
3325
  "requires": {
3326
+ "grunt": "1.1.0",
3327
  "node-wp-i18n": "1.2.3"
3328
  }
3329
  },
3445
  "dev": true
3446
  },
3447
  "hosted-git-info": {
3448
+ "version": "2.8.8",
3449
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
3450
+ "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==",
3451
  "dev": true
3452
  },
3453
  "html-comment-regex": {
4179
  "arrify": "1.0.1",
4180
  "multimatch": "2.1.0",
4181
  "pkg-up": "1.0.0"
4182
+ },
4183
+ "dependencies": {
4184
+ "pkg-up": {
4185
+ "version": "1.0.0",
4186
+ "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-1.0.0.tgz",
4187
+ "integrity": "sha1-Pgj7RhUlxEIWJKM7n35tCvWwWiY=",
4188
+ "dev": true,
4189
+ "requires": {
4190
+ "find-up": "1.1.2"
4191
+ }
4192
+ }
4193
  }
4194
  },
4195
  "load-json-file": {
4224
  }
4225
  }
4226
  },
4227
+ "locate-path": {
4228
+ "version": "2.0.0",
4229
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
4230
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
4231
+ "dev": true,
4232
+ "requires": {
4233
+ "p-locate": "2.0.0",
4234
+ "path-exists": "3.0.0"
4235
+ },
4236
+ "dependencies": {
4237
+ "path-exists": {
4238
+ "version": "3.0.0",
4239
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
4240
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
4241
+ "dev": true
4242
+ }
4243
+ }
4244
+ },
4245
  "lodash": {
4246
  "version": "4.17.15",
4247
  "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
4273
  "dev": true,
4274
  "requires": {
4275
  "currently-unhandled": "0.4.1",
4276
+ "signal-exit": "3.0.3"
4277
  }
4278
  },
4279
  "lowercase-keys": {
4353
  "version": "2.0.4",
4354
  "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz",
4355
  "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==",
4356
+ "dev": true,
4357
+ "optional": true
4358
  },
4359
  "meow": {
4360
  "version": "3.7.0",
4366
  "decamelize": "1.2.0",
4367
  "loud-rejection": "1.6.0",
4368
  "map-obj": "1.0.1",
4369
+ "minimist": "1.2.5",
4370
  "normalize-package-data": "2.5.0",
4371
  "object-assign": "4.1.1",
4372
  "read-pkg-up": "1.0.1",
4433
  }
4434
  },
4435
  "minimist": {
4436
+ "version": "1.2.5",
4437
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
4438
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
4439
  "dev": true
4440
  },
4441
  "mixin-deep": {
4460
  }
4461
  },
4462
  "mkdirp": {
4463
+ "version": "1.0.3",
4464
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.3.tgz",
4465
+ "integrity": "sha512-6uCP4Qc0sWsgMLy1EOqqS/3rjDHOEnsStVr/4vtAIK2Y5i2kA7lFFejYrpIyiN9w0pYf4ckeCYT9f1r1P9KX5g==",
4466
+ "dev": true
4467
+ },
4468
+ "mkdirp-classic": {
4469
+ "version": "0.5.2",
4470
+ "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.2.tgz",
4471
+ "integrity": "sha512-ejdnDQcR75gwknmMw/tx02AuRs8jCtqFoFqDZMjiNxsu85sRIJVXDKHuLYvUUPRBUtV2FpSZa9bL1BUa3BdR2g==",
4472
  "dev": true,
4473
+ "optional": true
 
 
 
 
 
 
 
 
 
 
4474
  },
4475
  "ms": {
4476
  "version": "2.0.0",
4517
  }
4518
  },
4519
  "napi-build-utils": {
4520
+ "version": "1.0.2",
4521
+ "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz",
4522
+ "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==",
4523
  "dev": true,
4524
  "optional": true
4525
  },
4540
  }
4541
  },
4542
  "node-releases": {
4543
+ "version": "1.1.53",
4544
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.53.tgz",
4545
+ "integrity": "sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ==",
4546
+ "dev": true
 
 
 
 
 
 
 
 
 
 
 
4547
  },
4548
  "node-uuid": {
4549
  "version": "1.4.0",
4561
  "gettext-parser": "3.1.1",
4562
  "glob": "7.0.6",
4563
  "lodash": "4.17.15",
4564
+ "minimist": "1.2.5",
4565
+ "mkdirp": "0.5.4",
4566
  "tmp": "0.0.33"
4567
+ },
4568
+ "dependencies": {
4569
+ "mkdirp": {
4570
+ "version": "0.5.4",
4571
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz",
4572
+ "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==",
4573
+ "dev": true,
4574
+ "requires": {
4575
+ "minimist": "1.2.5"
4576
+ }
4577
+ }
4578
  }
4579
  },
4580
  "noop-logger": {
4599
  "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
4600
  "dev": true,
4601
  "requires": {
4602
+ "hosted-git-info": "2.8.8",
4603
  "resolve": "1.15.1",
4604
  "semver": "5.7.1",
4605
  "validate-npm-package-license": "3.0.4"
4796
  "optional": true,
4797
  "requires": {
4798
  "define-properties": "1.1.3",
4799
+ "es-abstract": "1.17.5"
4800
  }
4801
  },
4802
  "object.pick": {
4816
  "optional": true,
4817
  "requires": {
4818
  "define-properties": "1.1.3",
4819
+ "es-abstract": "1.17.5",
4820
  "function-bind": "1.1.1",
4821
  "has": "1.0.3"
4822
  }
4888
  "dev": true,
4889
  "optional": true
4890
  },
4891
+ "p-limit": {
4892
+ "version": "1.3.0",
4893
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
4894
+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
4895
+ "dev": true,
4896
+ "requires": {
4897
+ "p-try": "1.0.0"
4898
+ }
4899
+ },
4900
+ "p-locate": {
4901
+ "version": "2.0.0",
4902
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
4903
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
4904
+ "dev": true,
4905
+ "requires": {
4906
+ "p-limit": "1.3.0"
4907
+ }
4908
+ },
4909
  "p-map": {
4910
  "version": "1.2.0",
4911
  "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz",
4944
  "p-finally": "1.0.0"
4945
  }
4946
  },
4947
+ "p-try": {
4948
+ "version": "1.0.0",
4949
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
4950
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
4951
+ "dev": true
4952
+ },
4953
  "parse-json": {
4954
  "version": "2.2.0",
4955
  "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
5049
  }
5050
  },
5051
  "pkg-up": {
5052
+ "version": "2.0.0",
5053
+ "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz",
5054
+ "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=",
5055
  "dev": true,
5056
  "requires": {
5057
+ "find-up": "2.1.0"
5058
+ },
5059
+ "dependencies": {
5060
+ "find-up": {
5061
+ "version": "2.1.0",
5062
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
5063
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
5064
+ "dev": true,
5065
+ "requires": {
5066
+ "locate-path": "2.0.0"
5067
+ }
5068
+ }
5069
  }
5070
  },
5071
  "plur": {
5121
  "detect-libc": "1.0.3",
5122
  "expand-template": "2.0.3",
5123
  "github-from-package": "0.0.0",
5124
+ "minimist": "1.2.5",
5125
+ "mkdirp": "0.5.4",
5126
+ "napi-build-utils": "1.0.2",
5127
  "node-abi": "2.15.0",
5128
  "noop-logger": "0.1.1",
5129
  "npmlog": "4.1.2",
5130
  "pump": "3.0.0",
5131
  "rc": "1.2.8",
5132
  "simple-get": "3.1.0",
5133
+ "tar-fs": "2.0.1",
5134
  "tunnel-agent": "0.6.0",
5135
  "which-pm-runs": "1.0.0"
5136
+ },
5137
+ "dependencies": {
5138
+ "mkdirp": {
5139
+ "version": "0.5.4",
5140
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz",
5141
+ "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==",
5142
+ "dev": true,
5143
+ "optional": true,
5144
+ "requires": {
5145
+ "minimist": "1.2.5"
5146
+ }
5147
+ }
5148
  }
5149
  },
5150
  "prepend-http": {
5198
  "dev": true
5199
  },
5200
  "psl": {
5201
+ "version": "1.8.0",
5202
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
5203
+ "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
5204
  "dev": true
5205
  },
5206
  "pump": {
5227
  "optional": true
5228
  },
5229
  "qs": {
5230
+ "version": "6.9.3",
5231
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz",
5232
+ "integrity": "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==",
5233
  "dev": true
5234
  },
5235
  "query-string": {
5271
  "requires": {
5272
  "deep-extend": "0.6.0",
5273
  "ini": "1.3.5",
5274
+ "minimist": "1.2.5",
5275
  "strip-json-comments": "2.0.1"
5276
  }
5277
  },
5604
  "dev": true
5605
  },
5606
  "signal-exit": {
5607
+ "version": "3.0.3",
5608
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
5609
+ "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
5610
  "dev": true
5611
  },
5612
  "simple-concat": {
5954
  "strip-ansi": "3.0.1"
5955
  }
5956
  },
5957
+ "string.prototype.trimend": {
5958
+ "version": "1.0.0",
5959
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.0.tgz",
5960
+ "integrity": "sha512-EEJnGqa/xNfIg05SxiPSqRS7S9qwDhYts1TSLR1BQfYUfPe1stofgGKvwERK9+9yf+PpfBMlpBaCHucXGPQfUA==",
5961
+ "dev": true,
5962
+ "requires": {
5963
+ "define-properties": "1.1.3",
5964
+ "es-abstract": "1.17.5"
5965
+ }
5966
+ },
5967
  "string.prototype.trimleft": {
5968
+ "version": "2.1.2",
5969
+ "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz",
5970
+ "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==",
5971
  "dev": true,
5972
  "requires": {
5973
  "define-properties": "1.1.3",
5974
+ "es-abstract": "1.17.5",
5975
+ "string.prototype.trimstart": "1.0.0"
5976
  }
5977
  },
5978
  "string.prototype.trimright": {
5979
+ "version": "2.1.2",
5980
+ "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz",
5981
+ "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==",
5982
  "dev": true,
5983
  "requires": {
5984
  "define-properties": "1.1.3",
5985
+ "es-abstract": "1.17.5",
5986
+ "string.prototype.trimend": "1.0.0"
5987
+ }
5988
+ },
5989
+ "string.prototype.trimstart": {
5990
+ "version": "1.0.0",
5991
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.0.tgz",
5992
+ "integrity": "sha512-iCP8g01NFYiiBOnwG1Xc3WZLyoo+RuBymwIlWncShXDDJYWN6DbnM3odslBJdgCdRlq94B5s63NWAZlcn2CS4w==",
5993
+ "dev": true,
5994
+ "requires": {
5995
+ "define-properties": "1.1.3",
5996
+ "es-abstract": "1.17.5"
5997
  }
5998
  },
5999
  "string_decoder": {
6084
  "css-select": "2.1.0",
6085
  "css-select-base-adapter": "0.1.1",
6086
  "css-tree": "1.0.0-alpha.37",
6087
+ "csso": "4.0.3",
6088
  "js-yaml": "3.13.1",
6089
+ "mkdirp": "0.5.4",
6090
  "object.values": "1.1.1",
6091
  "sax": "1.2.4",
6092
  "stable": "0.1.8",
6093
  "unquote": "1.1.1",
6094
  "util.promisify": "1.0.1"
6095
+ },
6096
+ "dependencies": {
6097
+ "mkdirp": {
6098
+ "version": "0.5.4",
6099
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz",
6100
+ "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==",
6101
+ "dev": true,
6102
+ "optional": true,
6103
+ "requires": {
6104
+ "minimist": "1.2.5"
6105
+ }
6106
+ }
6107
  }
6108
  },
6109
  "tar-fs": {
6110
+ "version": "2.0.1",
6111
+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz",
6112
+ "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==",
6113
  "dev": true,
6114
  "optional": true,
6115
  "requires": {
6116
  "chownr": "1.1.4",
6117
+ "mkdirp-classic": "0.5.2",
6118
  "pump": "3.0.0",
6119
+ "tar-stream": "2.1.2"
6120
  },
6121
  "dependencies": {
6122
  "bl": {
6123
+ "version": "4.0.2",
6124
+ "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.2.tgz",
6125
+ "integrity": "sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ==",
6126
  "dev": true,
6127
  "optional": true,
6128
  "requires": {
6129
+ "buffer": "5.5.0",
6130
+ "inherits": "2.0.4",
6131
  "readable-stream": "3.6.0"
6132
  }
6133
  },
6143
  }
6144
  },
6145
  "tar-stream": {
6146
+ "version": "2.1.2",
6147
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.2.tgz",
6148
+ "integrity": "sha512-UaF6FoJ32WqALZGOIAApXx+OdxhekNMChu6axLJR85zMMjXKWFGjbIRe+J6P4UnRGg9rAwWvbTT0oI7hD/Un7Q==",
6149
  "dev": true,
6150
  "optional": true,
6151
  "requires": {
6152
+ "bl": "4.0.2",
6153
  "end-of-stream": "1.4.4",
6154
  "fs-constants": "1.0.0",
6155
  "inherits": "2.0.4",
6266
  "faye-websocket": "0.10.0",
6267
  "livereload-js": "2.4.0",
6268
  "object-assign": "4.1.1",
6269
+ "qs": "6.9.3"
6270
  },
6271
  "dependencies": {
6272
  "debug": {
6349
  "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
6350
  "dev": true,
6351
  "requires": {
6352
+ "psl": "1.8.0",
6353
  "punycode": "2.1.1"
6354
  }
6355
  },
6398
  "integrity": "sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==",
6399
  "dev": true,
6400
  "requires": {
6401
+ "buffer": "5.5.0",
6402
  "through": "2.3.8"
6403
  }
6404
  },
6534
  "optional": true,
6535
  "requires": {
6536
  "define-properties": "1.1.3",
6537
+ "es-abstract": "1.17.5",
6538
  "has-symbols": "1.0.1",
6539
  "object.getownpropertydescriptors": "2.1.0"
6540
  }
readme.md CHANGED
@@ -3,7 +3,7 @@
3
  **Tags:** review, rating, posts, widget, review blogger, review blogging, affiliate, product reviews,plugin, google rating, product review, rating, review, star rating, user rating, wp rating, wp review, google, hreview,rich snippets,seo,snippet
4
  **Author URI:** http://themeisle.com
5
  **Requires at least:** 3.5
6
- **Tested up to:** 5.3
7
  **Stable tag:** trunk
8
  **License:** GPLv2 or later
9
  **License URI:** http://www.gnu.org/licenses/gpl-2.0.html
@@ -37,6 +37,11 @@ If you wanna learn more about the <a href="http://www.codeinwp.com/blog/fastest-
37
  - Add rich snippet ( schema ) to your posts
38
 
39
  ## Changelog ##
 
 
 
 
 
40
  ### 3.7.3 - 2020-02-24 ###
41
 
42
  * Removed PRO mentions
3
  **Tags:** review, rating, posts, widget, review blogger, review blogging, affiliate, product reviews,plugin, google rating, product review, rating, review, star rating, user rating, wp rating, wp review, google, hreview,rich snippets,seo,snippet
4
  **Author URI:** http://themeisle.com
5
  **Requires at least:** 3.5
6
+ **Tested up to:** 5.4
7
  **Stable tag:** trunk
8
  **License:** GPLv2 or later
9
  **License URI:** http://www.gnu.org/licenses/gpl-2.0.html
37
  - Add rich snippet ( schema ) to your posts
38
 
39
  ## Changelog ##
40
+ ### 3.7.4 - 2020-03-31 ###
41
+
42
+ * Tested up to WordPress 5.4
43
+
44
+
45
  ### 3.7.3 - 2020-02-24 ###
46
 
47
  * Removed PRO mentions
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: codeinwp,marius2012,marius_codeinwp,hardeepasrani,themeisle,Madali
3
  Tags: review, rating, posts, widget, review blogger, review blogging, affiliate, product reviews,plugin, google rating, product review, rating, review, star rating, user rating, wp rating, wp review, google, hreview,rich snippets,seo,snippet
4
  Author URI: http://themeisle.com
5
  Requires at least: 3.5
6
- Tested up to: 5.3
7
  Stable tag: trunk
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
@@ -37,6 +37,11 @@ If you wanna learn more about the <a href="http://www.codeinwp.com/blog/fastest-
37
  - Add rich snippet ( schema ) to your posts
38
 
39
  == Changelog ==
 
 
 
 
 
40
  = 3.7.3 - 2020-02-24 =
41
 
42
  * Removed PRO mentions
3
  Tags: review, rating, posts, widget, review blogger, review blogging, affiliate, product reviews,plugin, google rating, product review, rating, review, star rating, user rating, wp rating, wp review, google, hreview,rich snippets,seo,snippet
4
  Author URI: http://themeisle.com
5
  Requires at least: 3.5
6
+ Tested up to: 5.4
7
  Stable tag: trunk
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
37
  - Add rich snippet ( schema ) to your posts
38
 
39
  == Changelog ==
40
+ = 3.7.4 - 2020-03-31 =
41
+
42
+ * Tested up to WordPress 5.4
43
+
44
+
45
  = 3.7.3 - 2020-02-24 =
46
 
47
  * Removed PRO mentions
themeisle-hash.json CHANGED
@@ -1 +1 @@
1
- {"class-wppr-autoloader.php":"c7f7f3dd52445edb5f7367ba7b31281f","class-wppr-recursive-filter.php":"6c74b0e7c04529d797ae9689d9a44c8d","index.php":"c76772901fa1b2b14aa3ba32d7773c8a","uninstall.php":"7c6d36652e8dcf013f2c246f4a289acf","wp-product-review.php":"140f1b5231390ef2bcc6a52db3d405cf"}
1
+ {"class-wppr-autoloader.php":"c7f7f3dd52445edb5f7367ba7b31281f","class-wppr-recursive-filter.php":"6c74b0e7c04529d797ae9689d9a44c8d","index.php":"c76772901fa1b2b14aa3ba32d7773c8a","uninstall.php":"7c6d36652e8dcf013f2c246f4a289acf","wp-product-review.php":"7443a2dd49a667878e0cc6f4a706c628"}
vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer' . '/autoload_real.php';
6
 
7
- return ComposerAutoloaderInit513f5ad9e2869bb6aa9f2d439a1f9960::getLoader();
4
 
5
  require_once __DIR__ . '/composer' . '/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInit4c894ee8dfd808decba258ad196d16fb::getLoader();
vendor/autoload_52.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once dirname(__FILE__) . '/composer'.'/autoload_real_52.php';
6
 
7
- return ComposerAutoloaderInit508bf30e537dc509acef70ec18f0b4d1::getLoader();
4
 
5
  require_once dirname(__FILE__) . '/composer'.'/autoload_real_52.php';
6
 
7
+ return ComposerAutoloaderInit6a6b309ff98feaf257958011028a5c2e::getLoader();
vendor/codeinwp/themeisle-sdk/CHANGELOG.md CHANGED
@@ -1,3 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ## [3.1.8](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.7...v3.1.8) (2019-11-18)
2
 
3
 
1
+ ##### [Version 3.2.8](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.7...v3.2.8) (2020-03-24)
2
+
3
+ * change license handler method access
4
+
5
+ ##### [Version 3.2.7](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.6...v3.2.7) (2020-03-24)
6
+
7
+ * fix callback for license processing hook
8
+
9
+ ##### [Version 3.2.6](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.5...v3.2.6) (2020-03-23)
10
+
11
+ * Fix notice on license deactivation
12
+
13
+ ##### [Version 3.2.5](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.4...v3.2.5) (2020-03-23)
14
+
15
+ * always load notification manager last
16
+
17
+ ##### [Version 3.2.4](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.3...v3.2.4) (2020-03-21)
18
+
19
+ * Cast version response to array for icons
20
+
21
+ ##### [Version 3.2.3](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.2...v3.2.3) (2020-03-21)
22
+
23
+ * use product slug instead of the one from api
24
+
25
+ ##### [Version 3.2.2](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.1...v3.2.2) (2020-03-13)
26
+
27
+ * improve notice dismiss mechanism
28
+
29
+ ##### [Version 3.2.1](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.0...v3.2.1) (2020-03-05)
30
+
31
+ Fix rollback call for private products
32
+
33
+ #### [Version 3.2.0](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.9...v3.2.0) (2020-03-04)
34
+
35
+ * adds license activation/deactivation handlers for wp cli
36
+ * adds compatibility with the newest license API
37
+
38
+ ##### [Version 3.1.9](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.8...v3.1.9) (2020-02-24)
39
+
40
+ * Add integration with GitHub actions
41
+
42
  ## [3.1.8](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.7...v3.1.8) (2019-11-18)
43
 
44
 
vendor/codeinwp/themeisle-sdk/load.php CHANGED
@@ -14,7 +14,7 @@ if ( ! defined( 'ABSPATH' ) ) {
14
  return;
15
  }
16
  // Current SDK version and path.
17
- $themeisle_sdk_version = '3.1.8';
18
  $themeisle_sdk_path = dirname( __FILE__ );
19
 
20
  global $themeisle_sdk_max_version;
14
  return;
15
  }
16
  // Current SDK version and path.
17
+ $themeisle_sdk_version = '3.2.8';
18
  $themeisle_sdk_path = dirname( __FILE__ );
19
 
20
  global $themeisle_sdk_max_version;
vendor/codeinwp/themeisle-sdk/src/Loader.php CHANGED
@@ -51,11 +51,11 @@ final class Loader {
51
  'uninstall_feedback',
52
  'licenser',
53
  'endpoint',
54
- 'notification',
55
  'logger',
56
  'translate',
57
  'review',
58
  'recommendation',
 
59
 
60
  ];
61
 
@@ -75,6 +75,28 @@ final class Loader {
75
  }
76
  }
77
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
  /**
79
  * Register product into SDK.
80
  *
51
  'uninstall_feedback',
52
  'licenser',
53
  'endpoint',
 
54
  'logger',
55
  'translate',
56
  'review',
57
  'recommendation',
58
+ 'notification',
59
 
60
  ];
61
 
75
  }
76
  }
77
 
78
+ /**
79
+ * Get cache token used in API requests.
80
+ *
81
+ * @return string Cache token.
82
+ */
83
+ public static function get_cache_token() {
84
+ $cache_token = get_transient( 'themeisle_sdk_cache_token' );
85
+ if ( false === $cache_token ) {
86
+ $cache_token = wp_generate_password( 6, false );
87
+ set_transient( $cache_token, WEEK_IN_SECONDS );
88
+ }
89
+
90
+ return $cache_token;
91
+ }
92
+
93
+ /**
94
+ * Clear cache token.
95
+ */
96
+ public static function clear_cache_token() {
97
+ delete_transient( 'themeisle_sdk_cache_token' );
98
+ }
99
+
100
  /**
101
  * Register product into SDK.
102
  *
vendor/codeinwp/themeisle-sdk/src/Modules/Licenser.php CHANGED
@@ -13,6 +13,7 @@ namespace ThemeisleSDK\Modules;
13
 
14
  // Exit if accessed directly.
15
  use ThemeisleSDK\Common\Abstract_Module;
 
16
  use ThemeisleSDK\Product;
17
 
18
  if ( ! defined( 'ABSPATH' ) ) {
@@ -55,6 +56,13 @@ class Licenser extends Abstract_Module {
55
  */
56
  private $product_key;
57
 
 
 
 
 
 
 
 
58
  /**
59
  * Disable wporg updates for premium products.
60
  *
@@ -233,10 +241,11 @@ class Licenser extends Abstract_Module {
233
  }
234
 
235
  if ( apply_filters( $this->product->get_key() . '_hide_license_notices', false ) ) {
236
- return;
237
  }
 
238
  $status = $this->get_license_status();
239
- $no_activations_string = apply_filters( $this->product->get_key() . '_lc_no_activations_string', 'No activations left for %s !!!. You need to upgrade your plan in order to use %s on more websites. Please ask the %s Staff for more details.' );
240
  $no_valid_string = apply_filters( $this->product->get_key() . '_lc_no_valid_string', 'In order to benefit from updates and support for %s, please add your license code from your <a href="%s" target="_blank">purchase history</a> and validate it <a href="%s">here</a>. ' );
241
 
242
  // No activations left for this license.
@@ -285,7 +294,7 @@ class Licenser extends Abstract_Module {
285
  return false;
286
  }
287
 
288
- return isset( $license_data->error ) ? ( 'no_activations_left' == $license_data->error ) : false;
289
 
290
  }
291
 
@@ -345,40 +354,26 @@ class Licenser extends Abstract_Module {
345
  */
346
  public function check_license() {
347
  $status = $this->get_license_status();
348
- if ( 'not_active' == $status ) {
349
  $license_data = new \stdClass();
350
  $license_data->license = 'not_active';
351
 
352
  return $license_data;
353
  }
354
- $license = trim( $this->license_key );
355
- $api_params = array(
356
- 'edd_action' => 'check_license',
357
- 'license' => $license,
358
- 'item_name' => rawurlencode( $this->product->get_name() ),
359
- 'url' => rawurlencode( home_url() ),
360
- );
361
- // Call the custom API.
362
- $response = wp_remote_get(
363
- add_query_arg( $api_params, $this->get_api_url() ),
364
- array(
365
- 'timeout' => 15,
366
- 'sslverify' => false,
367
- )
368
- );
369
  if ( is_wp_error( $response ) ) {
370
  $license_data = new \stdClass();
371
  $license_data->license = 'valid';
372
-
373
  } else {
374
- $license_data = json_decode( wp_remote_retrieve_body( $response ) );
375
- if ( ! is_object( $license_data ) ) {
376
- $license_data = new \stdClass();
377
- $license_data->license = 'valid';
378
- }
379
  }
 
380
  $license_old = get_option( $this->product->get_key() . '_license_data', '' );
381
- if ( 'valid' == $license_old->license && ( $license_data->license != $license_old->license ) ) {
 
382
  $this->increment_failed_checks();
383
  } else {
384
  $this->reset_failed_checks();
@@ -388,22 +383,10 @@ class Licenser extends Abstract_Module {
388
  return $license_old;
389
  }
390
 
391
- if ( isset( $license_old->hide_valid ) ) {
392
- $license_data->hide_valid = true;
393
- }
394
-
395
  if ( ! isset( $license_data->key ) ) {
396
  $license_data->key = isset( $license_old->key ) ? $license_old->key : '';
397
  }
398
 
399
- if ( isset( $license_old->hide_expiration ) ) {
400
- $license_data->hide_expiration = true;
401
- }
402
-
403
- if ( isset( $license_old->hide_activation ) ) {
404
- $license_data->hide_activation = true;
405
- }
406
-
407
  return $license_data;
408
 
409
  }
@@ -445,43 +428,65 @@ class Licenser extends Abstract_Module {
445
  }
446
 
447
  /**
448
- * Activate the license remotely.
 
 
 
 
 
449
  */
450
- function activate_license() {
451
- // listen for our activate button to be clicked.
452
- if ( ! isset( $_POST[ $this->product->get_key() . '_btn_trigger' ] ) ) {
453
- return;
454
  }
455
  $status = $this->get_license_status();
456
- // retrieve the license from the database.
457
- $license = $_POST[ $this->product->get_key() . '_license' ];
458
- $api_params = array(
459
- 'license' => $license,
460
- 'item_name' => rawurlencode( $this->product->get_name() ),
461
- 'url' => rawurlencode( home_url() ),
462
- );
463
- if ( 'valid' != $status ) {
464
- // data to send in our API request.
465
- $api_params['edd_action'] = 'activate_license';
466
- } else {
467
- $api_params['edd_action'] = 'deactivate_license';
468
  }
 
 
 
 
 
 
 
 
469
  // Call the custom API.
470
- $response = wp_remote_get( add_query_arg( $api_params, $this->get_api_url() ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
471
  // make sure the response came back okay.
472
  if ( is_wp_error( $response ) ) {
473
- $this->set_error( sprintf( 'ERROR: Failed to connect to the license service. Please try again later. Reason: %s', $response->get_error_message() ) );
474
-
475
- return;
476
  }
477
 
478
  $license_data = json_decode( wp_remote_retrieve_body( $response ) );
479
 
480
  if ( ! is_object( $license_data ) ) {
481
- $this->set_error( 'ERROR: Failed to validate license. Please try again in one minute.' );
482
-
483
- return;
484
  }
 
 
 
 
 
 
485
  if ( ! isset( $license_data->license ) ) {
486
  $license_data->license = 'invalid';
487
  }
@@ -489,26 +494,50 @@ class Licenser extends Abstract_Module {
489
  if ( ! isset( $license_data->key ) ) {
490
  $license_data->key = $license;
491
  }
492
- if ( 'valid' == $license_data->license ) {
493
  $this->reset_failed_checks();
494
  }
495
 
496
- $this->set_error( '' );
497
-
498
- if ( 'deactivate_license' === $api_params['edd_action'] ) {
499
 
500
  delete_option( $this->product->get_key() . '_license_data' );
501
  delete_option( $this->product->get_key() . '_license_plan' );
502
  delete_transient( $this->product->get_key() . '_license_data' );
503
 
504
- return;
505
  }
506
  if ( isset( $license_data->plan ) ) {
507
  update_option( $this->product->get_key() . '_license_plan', $license_data->plan );
508
  }
509
  update_option( $this->product->get_key() . '_license_data', $license_data );
510
  set_transient( $this->product->get_key() . '_license_data', $license_data, 12 * HOUR_IN_SECONDS );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
511
 
 
 
 
 
 
 
 
512
  }
513
 
514
  /**
@@ -607,17 +636,16 @@ class Licenser extends Abstract_Module {
607
  * @return bool|mixed Update api response.
608
  */
609
  private function get_version_data() {
610
- $api_params = array(
611
- 'edd_action' => 'get_version',
612
- 'version' => $this->product->get_version(),
613
- 'license' => empty( $this->license_key ) ? 'free' : $this->license_key,
614
- 'name' => rawurlencode( $this->product->get_name() ),
615
- 'slug' => $this->product->get_slug(),
616
- 'author' => rawurlencode( $this->get_distributor_name() ),
617
- 'url' => rawurlencode( home_url() ),
618
- );
619
- $response = wp_remote_get(
620
- add_query_arg( $api_params, $this->get_api_url() ),
621
  array(
622
  'timeout' => 15,
623
  'sslverify' => false,
@@ -630,7 +658,15 @@ class Licenser extends Abstract_Module {
630
  if ( ! is_object( $update_data ) ) {
631
  return false;
632
  }
633
-
 
 
 
 
 
 
 
 
634
  return $update_data;
635
  }
636
 
@@ -660,7 +696,6 @@ class Licenser extends Abstract_Module {
660
  $_transient_data->response[ $this->product->get_slug() . '/' . $this->product->get_file() ] = $api_response;
661
  }
662
  }
663
-
664
  return $_transient_data;
665
  }
666
 
@@ -694,7 +729,7 @@ class Licenser extends Abstract_Module {
694
  * @return object $_data
695
  */
696
  public function plugins_api_filter( $_data, $_action = '', $_args = null ) {
697
- if ( ( 'plugin_information' != $_action ) || ! isset( $_args->slug ) || ( $_args->slug != $this->product->get_slug() ) ) {
698
  return $_data;
699
  }
700
  $api_response = $this->api_request();
@@ -757,6 +792,18 @@ class Licenser extends Abstract_Module {
757
  $this->register_license_hooks();
758
  }
759
 
 
 
 
 
 
 
 
 
 
 
 
 
760
  if ( $this->product->is_plugin() ) {
761
  add_filter(
762
  'pre_set_site_transient_update_plugins',
@@ -785,12 +832,133 @@ class Licenser extends Abstract_Module {
785
  return $this;
786
  }
787
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
788
  /**
789
  * Register license fields for the products.
790
  */
791
  public function register_license_hooks() {
792
  add_action( 'admin_init', array( $this, 'register_settings' ) );
793
- add_action( 'admin_init', array( $this, 'activate_license' ) );
794
  add_action( 'admin_init', array( $this, 'product_valid' ), 99999999 );
795
  add_action( 'admin_notices', array( $this, 'show_notice' ) );
796
  add_filter( $this->product->get_key() . '_license_status', array( $this, 'get_license_status' ) );
13
 
14
  // Exit if accessed directly.
15
  use ThemeisleSDK\Common\Abstract_Module;
16
+ use ThemeisleSDK\Loader;
17
  use ThemeisleSDK\Product;
18
 
19
  if ( ! defined( 'ABSPATH' ) ) {
56
  */
57
  private $product_key;
58
 
59
+ /**
60
+ * Holds local license object.
61
+ *
62
+ * @var null Local license object.
63
+ */
64
+ private $license_local = null;
65
+
66
  /**
67
  * Disable wporg updates for premium products.
68
  *
241
  }
242
 
243
  if ( apply_filters( $this->product->get_key() . '_hide_license_notices', false ) ) {
244
+ return false;
245
  }
246
+
247
  $status = $this->get_license_status();
248
+ $no_activations_string = apply_filters( $this->product->get_key() . '_lc_no_activations_string', 'No more activations left for %s. You need to upgrade your plan in order to use %s on more websites. If you need assistance, please get in touch with %s staff.' );
249
  $no_valid_string = apply_filters( $this->product->get_key() . '_lc_no_valid_string', 'In order to benefit from updates and support for %s, please add your license code from your <a href="%s" target="_blank">purchase history</a> and validate it <a href="%s">here</a>. ' );
250
 
251
  // No activations left for this license.
294
  return false;
295
  }
296
 
297
+ return isset( $license_data->license ) ? ( 'no_activations_left' == $license_data->license ) : false;
298
 
299
  }
300
 
354
  */
355
  public function check_license() {
356
  $status = $this->get_license_status();
357
+ if ( 'not_active' === $status ) {
358
  $license_data = new \stdClass();
359
  $license_data->license = 'not_active';
360
 
361
  return $license_data;
362
  }
363
+ $license = trim( $this->license_key );
364
+
365
+ $response = $this->do_license_process( $license, 'check' );
366
+
 
 
 
 
 
 
 
 
 
 
 
367
  if ( is_wp_error( $response ) ) {
368
  $license_data = new \stdClass();
369
  $license_data->license = 'valid';
 
370
  } else {
371
+ $license_data = $response;
 
 
 
 
372
  }
373
+
374
  $license_old = get_option( $this->product->get_key() . '_license_data', '' );
375
+
376
+ if ( 'valid' === $license_old->license && ( $license_data->license !== $license_old->license ) ) {
377
  $this->increment_failed_checks();
378
  } else {
379
  $this->reset_failed_checks();
383
  return $license_old;
384
  }
385
 
 
 
 
 
386
  if ( ! isset( $license_data->key ) ) {
387
  $license_data->key = isset( $license_old->key ) ? $license_old->key : '';
388
  }
389
 
 
 
 
 
 
 
 
 
390
  return $license_data;
391
 
392
  }
428
  }
429
 
430
  /**
431
+ * Do license activation/deactivation.
432
+ *
433
+ * @param string $license License key.
434
+ * @param string $action What do to.
435
+ *
436
+ * @return bool|\WP_Error
437
  */
438
+ public function do_license_process( $license, $action = 'toggle' ) {
439
+ if ( strlen( $license ) < 10 ) {
440
+ return new \WP_Error( 'themeisle-license-invalid-format', 'Invalid license.' );
 
441
  }
442
  $status = $this->get_license_status();
443
+
444
+ if ( 'valid' === $status && 'activate' === $action ) {
445
+ return new \WP_Error( 'themeisle-license-already-active', 'License is already active.' );
 
 
 
 
 
 
 
 
 
446
  }
447
+ if ( 'valid' !== $status && 'deactivate' === $action ) {
448
+ return new \WP_Error( 'themeisle-license-already-deactivate', 'License not active.' );
449
+ }
450
+
451
+ if ( 'toggle' === $action ) {
452
+ $action = ( 'valid' !== $status ? ( 'activate' ) : ( 'deactivate' ) );
453
+ }
454
+
455
  // Call the custom API.
456
+ if ( 'check' === $action ) {
457
+ $response = wp_remote_get( sprintf( '%slicense/check/%s/%s/%s/%s', Product::API_URL, rawurlencode( $this->product->get_name() ), $license, rawurlencode( home_url() ), Loader::get_cache_token() ) );
458
+ } else {
459
+ $response = wp_remote_post(
460
+ sprintf( '%slicense/%s/%s/%s', Product::API_URL, $action, rawurlencode( $this->product->get_name() ), $license ),
461
+ array(
462
+ 'body' => wp_json_encode(
463
+ array(
464
+ 'url' => rawurlencode( home_url() ),
465
+ )
466
+ ),
467
+ 'headers' => array(
468
+ 'Content-Type' => 'application/json',
469
+ ),
470
+ )
471
+ );
472
+ }
473
+
474
  // make sure the response came back okay.
475
  if ( is_wp_error( $response ) ) {
476
+ return new \WP_Error( 'themeisle-license-500', sprintf( 'ERROR: Failed to connect to the license service. Please try again later. Reason: %s', $response->get_error_message() ) );
 
 
477
  }
478
 
479
  $license_data = json_decode( wp_remote_retrieve_body( $response ) );
480
 
481
  if ( ! is_object( $license_data ) ) {
482
+ return new \WP_Error( 'themeisle-license-404', 'ERROR: Failed to validate license. Please try again in one minute.' );
 
 
483
  }
484
+ if ( 'check' === $action ) {
485
+ return $license_data;
486
+ }
487
+
488
+ Loader::clear_cache_token();
489
+
490
  if ( ! isset( $license_data->license ) ) {
491
  $license_data->license = 'invalid';
492
  }
494
  if ( ! isset( $license_data->key ) ) {
495
  $license_data->key = $license;
496
  }
497
+ if ( 'valid' === $license_data->license ) {
498
  $this->reset_failed_checks();
499
  }
500
 
501
+ if ( 'deactivate' === $action ) {
 
 
502
 
503
  delete_option( $this->product->get_key() . '_license_data' );
504
  delete_option( $this->product->get_key() . '_license_plan' );
505
  delete_transient( $this->product->get_key() . '_license_data' );
506
 
507
+ return true;
508
  }
509
  if ( isset( $license_data->plan ) ) {
510
  update_option( $this->product->get_key() . '_license_plan', $license_data->plan );
511
  }
512
  update_option( $this->product->get_key() . '_license_data', $license_data );
513
  set_transient( $this->product->get_key() . '_license_data', $license_data, 12 * HOUR_IN_SECONDS );
514
+ if ( 'activate' === $action && 'valid' !== $license_data->license ) {
515
+ return new \WP_Error( 'themeisle-license-invalid', 'ERROR: Invalid license provided.' );
516
+ }
517
+
518
+ return true;
519
+ }
520
+
521
+ /**
522
+ * Activate the license remotely.
523
+ */
524
+ function process_license() {
525
+ // listen for our activate button to be clicked.
526
+ if ( ! isset( $_POST[ $this->product->get_key() . '_btn_trigger' ] ) ) {
527
+ return;
528
+ }
529
+ $license = $_POST[ $this->product->get_key() . '_license' ];
530
+ $response = $this->do_license_process( $license, 'toggle' );
531
+ if ( is_wp_error( $response ) ) {
532
+ $this->set_error( $response->get_error_message() );
533
 
534
+ return;
535
+ }
536
+ if ( true === $response ) {
537
+ $this->set_error( '' );
538
+ }
539
+
540
+ return;
541
  }
542
 
543
  /**
636
  * @return bool|mixed Update api response.
637
  */
638
  private function get_version_data() {
639
+
640
+ $response = wp_remote_get(
641
+ sprintf(
642
+ '%slicense/version/%s/%s/%s/%s',
643
+ Product::API_URL,
644
+ rawurlencode( $this->product->get_name() ),
645
+ ( empty( $this->license_key ) ? 'free' : $this->license_key ),
646
+ $this->product->get_version(),
647
+ rawurlencode( home_url() )
648
+ ),
 
649
  array(
650
  'timeout' => 15,
651
  'sslverify' => false,
658
  if ( ! is_object( $update_data ) ) {
659
  return false;
660
  }
661
+ if ( isset( $update_data->slug ) ) {
662
+ $update_data->slug = $this->product->get_slug();
663
+ }
664
+ if ( isset( $update_data->icons ) ) {
665
+ $update_data->icons = (array) $update_data->icons;
666
+ }
667
+ if ( isset( $update_data->banners ) ) {
668
+ $update_data->banners = (array) $update_data->banners;
669
+ }
670
  return $update_data;
671
  }
672
 
696
  $_transient_data->response[ $this->product->get_slug() . '/' . $this->product->get_file() ] = $api_response;
697
  }
698
  }
 
699
  return $_transient_data;
700
  }
701
 
729
  * @return object $_data
730
  */
731
  public function plugins_api_filter( $_data, $_action = '', $_args = null ) {
732
+ if ( ( 'plugin_information' !== $_action ) || ! isset( $_args->slug ) || ( $_args->slug !== $this->product->get_slug() ) ) {
733
  return $_data;
734
  }
735
  $api_response = $this->api_request();
792
  $this->register_license_hooks();
793
  }
794
 
795
+ $namespace = apply_filters( 'themesle_sdk_namespace_' . md5( $product->get_basefile() ), false );
796
+
797
+ if ( false !== $namespace ) {
798
+ add_filter( 'themeisle_sdk_license_process_' . $namespace, [ $this, 'do_license_process' ], 10, 2 );
799
+ if ( defined( 'WP_CLI' ) && WP_CLI ) {
800
+ \WP_CLI::add_command( $namespace . ' activate', [ $this, 'cli_activate' ] );
801
+ \WP_CLI::add_command( $namespace . ' deactivate', [ $this, 'cli_deactivate' ] );
802
+ \WP_CLI::add_command( $namespace . ' is-active', [ $this, 'cli_is_active' ] );
803
+ }
804
+ }
805
+
806
+ add_action( 'admin_head', [ $this, 'auto_activate' ] );
807
  if ( $this->product->is_plugin() ) {
808
  add_filter(
809
  'pre_set_site_transient_update_plugins',
832
  return $this;
833
  }
834
 
835
+ /**
836
+ * Run license activation on plugin activate.
837
+ */
838
+ public function auto_activate() {
839
+ if ( ! current_user_can( 'switch_themes' ) ) {
840
+ return;
841
+ }
842
+ $status = $this->get_license_status();
843
+ if ( 'not_active' !== $status ) {
844
+ return;
845
+ }
846
+
847
+ $license_file = dirname( $this->product->get_basefile() ) . '/license.json';
848
+
849
+ global $wp_filesystem;
850
+ if ( ! is_file( $license_file ) ) {
851
+ return;
852
+ }
853
+
854
+ require_once( ABSPATH . '/wp-admin/includes/file.php' );
855
+ \WP_Filesystem();
856
+ $content = json_decode( $wp_filesystem->get_contents( $license_file ) );
857
+ if ( ! is_object( $content ) ) {
858
+ return;
859
+ }
860
+ if ( ! isset( $content->key ) ) {
861
+ return;
862
+ }
863
+ $this->license_local = $content;
864
+ $lock_key = $this->product->get_key() . '_autoactivated';
865
+
866
+ if ( 'yes' === get_option( $lock_key, '' ) ) {
867
+ return;
868
+ }
869
+ $response = $this->do_license_process( $content->key, 'activate' );
870
+
871
+ update_option( $lock_key, 'yes' );
872
+
873
+ if ( apply_filters( $this->product->get_key() . '_hide_license_notices', false ) ) {
874
+ return;
875
+ }
876
+
877
+ if ( true === $response ) {
878
+ add_action( 'admin_notices', [ $this, 'autoactivate_notice' ] );
879
+ }
880
+ }
881
+
882
+ /**
883
+ * Show auto-activate notice.
884
+ */
885
+ public function autoactivate_notice() {
886
+ ?>
887
+ <div class="notice notice-success is-dismissible">
888
+ <p><?php echo sprintf( '<strong>%s</strong> has been successfully activated using <strong>%s</strong> license !', $this->product->get_name(), str_repeat( '*', 20 ) . substr( $this->license_local->key, - 10 ) ); ?></p>
889
+ </div>
890
+ <?php
891
+ }
892
+
893
+ /**
894
+ * Activate product license on this site.
895
+ *
896
+ * ## OPTIONS
897
+ *
898
+ * @param array $args Command args.
899
+ *
900
+ * [<license-key>]
901
+ * : Product license key.
902
+ */
903
+ public function cli_activate( $args ) {
904
+ $license_key = isset( $args[0] ) ? trim( $args[0] ) : '';
905
+ $response = $this->do_license_process( $license_key, 'activate' );
906
+ if ( true !== $response ) {
907
+ \WP_CLI::error( $response->get_error_message() );
908
+
909
+ return;
910
+ }
911
+
912
+ \WP_CLI::success( 'Product successfully activated.' );
913
+ }
914
+
915
+ /**
916
+ * Deactivate product license on this site.
917
+ *
918
+ * @param array $args Command args.
919
+ *
920
+ * ## OPTIONS
921
+ *
922
+ * [<license-key>]
923
+ * : Product license key.
924
+ */
925
+ public function cli_deactivate( $args ) {
926
+ $license_key = isset( $args[0] ) ? trim( $args[0] ) : '';
927
+ $response = $this->do_license_process( $license_key, 'deactivate' );
928
+ if ( true !== $response ) {
929
+ \WP_CLI::error( $response->get_error_message() );
930
+
931
+ return;
932
+ }
933
+
934
+ \WP_CLI::success( 'Product successfully deactivated.' );
935
+ }
936
+
937
+ /**
938
+ * Checks if product has license activated.
939
+ *
940
+ * @param array $args Command args.
941
+ *
942
+ * @subcommand is-active
943
+ */
944
+ public function cli_is_active( $args ) {
945
+
946
+ $status = $this->get_license_status();
947
+ if ( 'valid' === $status ) {
948
+ \WP_CLI::halt( 0 );
949
+
950
+ return;
951
+ }
952
+
953
+ \WP_CLI::halt( 1 );
954
+ }
955
+
956
  /**
957
  * Register license fields for the products.
958
  */
959
  public function register_license_hooks() {
960
  add_action( 'admin_init', array( $this, 'register_settings' ) );
961
+ add_action( 'admin_init', array( $this, 'process_license' ) );
962
  add_action( 'admin_init', array( $this, 'product_valid' ), 99999999 );
963
  add_action( 'admin_notices', array( $this, 'show_notice' ) );
964
  add_filter( $this->product->get_key() . '_license_status', array( $this, 'get_license_status' ) );
vendor/codeinwp/themeisle-sdk/src/Modules/Notification.php CHANGED
@@ -226,7 +226,7 @@ class Notification extends Abstract_Module {
226
  /**
227
  * Get last notification details.
228
  *
229
- * @return array Last notification details.
230
  */
231
  private static function get_last_active_notification_timestamp() {
232
  $notification = self::get_notifications_metadata();
@@ -374,6 +374,10 @@ class Notification extends Abstract_Module {
374
  if ( empty( $id ) ) {
375
  wp_send_json( [] );
376
  }
 
 
 
 
377
  self::set_last_active_notification_timestamp();
378
  update_option( $id, $confirm );
379
  do_action( $id . '_process_confirm', $confirm );
226
  /**
227
  * Get last notification details.
228
  *
229
+ * @return int Last notification details.
230
  */
231
  private static function get_last_active_notification_timestamp() {
232
  $notification = self::get_notifications_metadata();
374
  if ( empty( $id ) ) {
375
  wp_send_json( [] );
376
  }
377
+ $ids = wp_list_pluck( self::$notifications, 'id' );
378
+ if ( ! in_array( $id, $ids, true ) ) {
379
+ wp_send_json( [] );
380
+ }
381
  self::set_last_active_notification_timestamp();
382
  update_option( $id, $confirm );
383
  do_action( $id . '_process_confirm', $confirm );
vendor/codeinwp/themeisle-sdk/src/Modules/Rollback.php CHANGED
@@ -167,7 +167,7 @@ class Rollback extends Abstract_Module {
167
  return '';
168
  }
169
 
170
- return sprintf( '%s?edd_action=get_versions&name=%s&url=%s&license=%s', $this->product->get_store_url(), urlencode( $this->product->get_name() ), urlencode( get_site_url() ), $license );
171
  }
172
 
173
  /**
167
  return '';
168
  }
169
 
170
+ return sprintf( '%slicense/versions/%s/%s/%s/%s', Product::API_URL, rawurlencode( $this->product->get_name() ), $license, urlencode( get_site_url() ), $this->product->get_version() );
171
  }
172
 
173
  /**
vendor/codeinwp/themeisle-sdk/src/Product.php CHANGED
@@ -106,7 +106,10 @@ class Product {
106
  * @var string $version The product version.
107
  */
108
  private $version;
109
-
 
 
 
110
  /**
111
  * ThemeIsle_SDK_Product constructor.
112
  *
106
  * @var string $version The product version.
107
  */
108
  private $version;
109
+ /**
110
+ * Root api endpoint.
111
+ */
112
+ const API_URL = 'https://api.themeisle.com/';
113
  /**
114
  * ThemeIsle_SDK_Product constructor.
115
  *
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInit513f5ad9e2869bb6aa9f2d439a1f9960
6
  {
7
  private static $loader;
8
 
@@ -19,9 +19,9 @@ class ComposerAutoloaderInit513f5ad9e2869bb6aa9f2d439a1f9960
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInit513f5ad9e2869bb6aa9f2d439a1f9960', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit513f5ad9e2869bb6aa9f2d439a1f9960', 'loadClassLoader'));
25
 
26
  $map = require __DIR__ . '/autoload_namespaces.php';
27
  foreach ($map as $namespace => $path) {
@@ -42,14 +42,14 @@ class ComposerAutoloaderInit513f5ad9e2869bb6aa9f2d439a1f9960
42
 
43
  $includeFiles = require __DIR__ . '/autoload_files.php';
44
  foreach ($includeFiles as $fileIdentifier => $file) {
45
- composerRequire513f5ad9e2869bb6aa9f2d439a1f9960($fileIdentifier, $file);
46
  }
47
 
48
  return $loader;
49
  }
50
  }
51
 
52
- function composerRequire513f5ad9e2869bb6aa9f2d439a1f9960($fileIdentifier, $file)
53
  {
54
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
55
  require $file;
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInit4c894ee8dfd808decba258ad196d16fb
6
  {
7
  private static $loader;
8
 
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInit4c894ee8dfd808decba258ad196d16fb', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit4c894ee8dfd808decba258ad196d16fb', 'loadClassLoader'));
25
 
26
  $map = require __DIR__ . '/autoload_namespaces.php';
27
  foreach ($map as $namespace => $path) {
42
 
43
  $includeFiles = require __DIR__ . '/autoload_files.php';
44
  foreach ($includeFiles as $fileIdentifier => $file) {
45
+ composerRequire4c894ee8dfd808decba258ad196d16fb($fileIdentifier, $file);
46
  }
47
 
48
  return $loader;
49
  }
50
  }
51
 
52
+ function composerRequire4c894ee8dfd808decba258ad196d16fb($fileIdentifier, $file)
53
  {
54
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
55
  require $file;
vendor/composer/autoload_real_52.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real_52.php generated by xrstf/composer-php52
4
 
5
- class ComposerAutoloaderInit508bf30e537dc509acef70ec18f0b4d1 {
6
  private static $loader;
7
 
8
  public static function loadClassLoader($class) {
@@ -19,9 +19,9 @@ class ComposerAutoloaderInit508bf30e537dc509acef70ec18f0b4d1 {
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInit508bf30e537dc509acef70ec18f0b4d1', 'loadClassLoader'), true /*, true */);
23
  self::$loader = $loader = new xrstf_Composer52_ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit508bf30e537dc509acef70ec18f0b4d1', 'loadClassLoader'));
25
 
26
  $vendorDir = dirname(dirname(__FILE__));
27
  $baseDir = dirname($vendorDir);
2
 
3
  // autoload_real_52.php generated by xrstf/composer-php52
4
 
5
+ class ComposerAutoloaderInit6a6b309ff98feaf257958011028a5c2e {
6
  private static $loader;
7
 
8
  public static function loadClassLoader($class) {
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInit6a6b309ff98feaf257958011028a5c2e', 'loadClassLoader'), true /*, true */);
23
  self::$loader = $loader = new xrstf_Composer52_ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit6a6b309ff98feaf257958011028a5c2e', 'loadClassLoader'));
25
 
26
  $vendorDir = dirname(dirname(__FILE__));
27
  $baseDir = dirname($vendorDir);
vendor/composer/installed.json CHANGED
@@ -34,17 +34,17 @@
34
  },
35
  {
36
  "name": "codeinwp/themeisle-sdk",
37
- "version": "3.1.8",
38
- "version_normalized": "3.1.8.0",
39
  "source": {
40
  "type": "git",
41
  "url": "https://github.com/Codeinwp/themeisle-sdk.git",
42
- "reference": "d036ec8dd9ad318a05af3f21222025ec6a389a42"
43
  },
44
  "dist": {
45
  "type": "zip",
46
- "url": "https://api.github.com/repos/Codeinwp/themeisle-sdk/zipball/d036ec8dd9ad318a05af3f21222025ec6a389a42",
47
- "reference": "d036ec8dd9ad318a05af3f21222025ec6a389a42",
48
  "shasum": ""
49
  },
50
  "require-dev": {
@@ -52,7 +52,7 @@
52
  "squizlabs/php_codesniffer": "^3.1",
53
  "wp-coding-standards/wpcs": "^1.0.0"
54
  },
55
- "time": "2019-11-18 12:33:19",
56
  "type": "library",
57
  "installation-source": "dist",
58
  "notification-url": "https://packagist.org/downloads/",
34
  },
35
  {
36
  "name": "codeinwp/themeisle-sdk",
37
+ "version": "3.2.8",
38
+ "version_normalized": "3.2.8.0",
39
  "source": {
40
  "type": "git",
41
  "url": "https://github.com/Codeinwp/themeisle-sdk.git",
42
+ "reference": "ce152edef1634d7c3ce75ed292efcc7a5f73806e"
43
  },
44
  "dist": {
45
  "type": "zip",
46
+ "url": "https://api.github.com/repos/Codeinwp/themeisle-sdk/zipball/ce152edef1634d7c3ce75ed292efcc7a5f73806e",
47
+ "reference": "ce152edef1634d7c3ce75ed292efcc7a5f73806e",
48
  "shasum": ""
49
  },
50
  "require-dev": {
52
  "squizlabs/php_codesniffer": "^3.1",
53
  "wp-coding-standards/wpcs": "^1.0.0"
54
  },
55
+ "time": "2020-03-24 16:54:54",
56
  "type": "library",
57
  "installation-source": "dist",
58
  "notification-url": "https://packagist.org/downloads/",
wp-product-review.php CHANGED
@@ -15,7 +15,7 @@
15
  * Plugin Name: WP Product Review Lite
16
  * Plugin URI: https://themeisle.com/plugins/wp-product-review/
17
  * Description: The highest rated and most complete review plugin, now with rich snippets support. Easily turn your basic posts into in-depth reviews.
18
- * Version: 3.7.3
19
  * Author: ThemeIsle
20
  * Author URI: https://themeisle.com/
21
  * Requires at least: 3.5
@@ -66,7 +66,7 @@ register_deactivation_hook( __FILE__, 'deactivate_wppr' );
66
  */
67
  function run_wppr() {
68
 
69
- define( 'WPPR_LITE_VERSION', '3.7.3' );
70
  define( 'WPPR_PATH', dirname( __FILE__ ) );
71
  define( 'WPPR_SLUG', 'wppr' );
72
  define( 'WPPR_UPSELL_LINK', 'https://themeisle.com/plugins/wp-product-review/' );
15
  * Plugin Name: WP Product Review Lite
16
  * Plugin URI: https://themeisle.com/plugins/wp-product-review/
17
  * Description: The highest rated and most complete review plugin, now with rich snippets support. Easily turn your basic posts into in-depth reviews.
18
+ * Version: 3.7.4
19
  * Author: ThemeIsle
20
  * Author URI: https://themeisle.com/
21
  * Requires at least: 3.5
66
  */
67
  function run_wppr() {
68
 
69
+ define( 'WPPR_LITE_VERSION', '3.7.4' );
70
  define( 'WPPR_PATH', dirname( __FILE__ ) );
71
  define( 'WPPR_SLUG', 'wppr' );
72
  define( 'WPPR_UPSELL_LINK', 'https://themeisle.com/plugins/wp-product-review/' );