Flexible Checkout Fields for WooCommerce – WooCommerce Checkout Manager - Version 2.4.0

Version Description

  • 2020-03-06 =
  • Added additional request sanitization
  • Tweaked remote calling css files
Download this release

Release Info

Developer wpdesk
Plugin Icon wp plugin Flexible Checkout Fields for WooCommerce – WooCommerce Checkout Manager
Version 2.4.0
Comparing to
See all releases

Code changes from version 2.3.4 to 2.4.0

Files changed (91) hide show
  1. assets/css/jquery-ui.css +474 -0
  2. assets/css/jquery-ui.min.css +4 -0
  3. classes/class-flexible-checkout-fields-plugin.php +15 -32
  4. classes/user-profile.php +1 -1
  5. composer.lock +405 -264
  6. flexible-checkout-fields.php +4 -4
  7. readme.txt +5 -1
  8. vendor/autoload.php +1 -1
  9. vendor/composer/autoload_classmap.php +12 -4
  10. vendor/composer/autoload_real.php +4 -4
  11. vendor/composer/autoload_static.php +16 -8
  12. vendor/composer/installed.json +7 -7
  13. vendor/psr/log/Psr/Log/LoggerInterface.php +2 -0
  14. vendor/psr/log/Psr/Log/LoggerTrait.php +2 -0
  15. vendor/psr/log/Psr/Log/NullLogger.php +2 -0
  16. vendor/psr/log/Psr/Log/Test/LoggerInterfaceTest.php +3 -1
  17. vendor/psr/log/Psr/Log/Test/TestLogger.php +1 -0
  18. vendor/psr/log/composer.json +1 -1
  19. vendor_prefixed/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php +2 -1
  20. vendor_prefixed/monolog/monolog/src/Monolog/Formatter/HtmlFormatter.php +3 -2
  21. vendor_prefixed/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php +5 -2
  22. vendor_prefixed/monolog/monolog/src/Monolog/Formatter/LineFormatter.php +1 -1
  23. vendor_prefixed/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php +1 -1
  24. vendor_prefixed/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php +4 -106
  25. vendor_prefixed/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php +5 -4
  26. vendor_prefixed/monolog/monolog/src/Monolog/Handler/BufferHandler.php +16 -0
  27. vendor_prefixed/monolog/monolog/src/Monolog/Handler/ChromePHPHandler.php +3 -2
  28. vendor_prefixed/monolog/monolog/src/Monolog/Handler/CubeHandler.php +3 -2
  29. vendor_prefixed/monolog/monolog/src/Monolog/Handler/FilterHandler.php +38 -10
  30. vendor_prefixed/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php +39 -13
  31. vendor_prefixed/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php +2 -1
  32. vendor_prefixed/monolog/monolog/src/Monolog/Handler/IFTTTHandler.php +2 -1
  33. vendor_prefixed/monolog/monolog/src/Monolog/Handler/NewRelicHandler.php +2 -1
  34. vendor_prefixed/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php +2 -1
  35. vendor_prefixed/monolog/monolog/src/Monolog/Handler/RedisHandler.php +2 -1
  36. vendor_prefixed/monolog/monolog/src/Monolog/Handler/SamplingHandler.php +36 -10
  37. vendor_prefixed/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php +6 -1
  38. vendor_prefixed/monolog/monolog/src/Monolog/Handler/SlackHandler.php +2 -1
  39. vendor_prefixed/monolog/monolog/src/Monolog/Handler/SlackWebhookHandler.php +2 -1
  40. vendor_prefixed/monolog/monolog/src/Monolog/Logger.php +7 -2
  41. vendor_prefixed/monolog/monolog/src/Monolog/Utils.php +114 -0
  42. vendor_prefixed/wpdesk/wp-basic-requirements/composer.json +7 -0
  43. vendor_prefixed/wpdesk/wp-basic-requirements/lang/wp-basic-requirements-pl_PL.mo +0 -0
  44. vendor_prefixed/wpdesk/wp-basic-requirements/src/Basic_Requirement_Checker.php +108 -9
  45. vendor_prefixed/wpdesk/wp-basic-requirements/src/Basic_Requirement_Checker_Factory.php +5 -28
  46. vendor_prefixed/wpdesk/wp-builder/src/Plugin/AbstractPlugin.php +114 -45
  47. vendor_prefixed/wpdesk/wp-builder/src/Plugin/Activateable.php +20 -0
  48. vendor_prefixed/wpdesk/wp-builder/src/Plugin/ActivationAware.php +1 -1
  49. vendor_prefixed/wpdesk/wp-builder/src/Plugin/Conditional.php +20 -0
  50. vendor_prefixed/wpdesk/wp-builder/src/Plugin/Deactivateable.php +20 -0
  51. vendor_prefixed/wpdesk/wp-builder/src/Plugin/Hookable.php +1 -1
  52. vendor_prefixed/wpdesk/wp-builder/src/Plugin/HookableParent.php +7 -1
  53. vendor_prefixed/wpdesk/wp-builder/src/Plugin/SlimPlugin.php +19 -0
  54. vendor_prefixed/wpdesk/wp-builder/src/Storage/StorageFactory.php +1 -1
  55. vendor_prefixed/wpdesk/wp-builder/src/Storage/WordpressFilterStorage.php +41 -0
  56. vendor_prefixed/wpdesk/wp-notice/src/WPDesk/Notice/AjaxHandler.php +2 -2
  57. vendor_prefixed/wpdesk/wp-plugin-flow/composer.json +12 -4
  58. vendor_prefixed/wpdesk/wp-plugin-flow/lang/wp-plugin-flow-pl_PL.mo +0 -0
  59. vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/BuilderTrait.php +69 -0
  60. vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/{HelperInstanceAsFilter.php → HelperInstanceAsFilterTrait.php} +11 -2
  61. vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/InitializationStrategy.php +15 -3
  62. vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/{PluginDisablerByFile.php → PluginDisablerByFileTrait.php} +1 -1
  63. vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/Simple/SimpleFactory.php +1 -1
  64. vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/Simple/SimpleFreeStrategy.php +32 -13
  65. vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/Simple/{SimpleStrategy.php → SimplePaidStrategy.php} +39 -16
  66. vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/{TrackerInstanceAsFilter.php → TrackerInstanceAsFilterTrait.php} +1 -1
  67. vendor_prefixed/wpdesk/wp-plugin-flow/src/PluginBootstrap.php +45 -37
  68. vendor_prefixed/wpdesk/wp-wpdesk-helper/composer.json +10 -2
  69. vendor_prefixed/wpdesk/wp-wpdesk-helper/lang/wpdesk-helper-pl_PL.mo +0 -0
  70. vendor_prefixed/wpdesk/wp-wpdesk-helper/lang/wpdesk-tracker-pl_PL.mo +0 -0
  71. vendor_prefixed/wpdesk/wp-wpdesk-helper/src/HelperRemoveNotice.php +58 -0
  72. vendor_prefixed/wpdesk/wp-wpdesk-helper/src/Integration/LogsIntegration.php +5 -5
  73. vendor_prefixed/wpdesk/wp-wpdesk-helper/src/Integration/TrackerIntegration.php +4 -4
  74. vendor_prefixed/wpdesk/wp-wpdesk-helper/src/Page/LibraryDebugPage.php +1 -1
  75. vendor_prefixed/wpdesk/wp-wpdesk-helper/src/Page/SettingsPage.php +2 -2
  76. vendor_prefixed/wpdesk/wp-wpdesk-helper/src/PrefixedHelperAsLibrary.php +14 -24
  77. vendor_prefixed/wpdesk/wp-wpdesk-license/composer.json +7 -0
  78. vendor_prefixed/wpdesk/wp-wpdesk-license/src/ApiManager/class-wc-api-manager-menu.php +2 -17
  79. vendor_prefixed/wpdesk/wp-wpdesk-license/src/ApiManager/class-wc-api-manager.php +14 -2
  80. vendor_prefixed/wpdesk/wp-wpdesk-license/src/ApiManager/class-wc-plugin-update.php +19 -14
  81. vendor_prefixed/wpdesk/wp-wpdesk-license/src/InstalledPlugins.php +2 -1
  82. vendor_prefixed/wpdesk/wp-wpdesk-license/src/Page/License/Action/LicenseActivation.php +13 -16
  83. vendor_prefixed/wpdesk/wp-wpdesk-license/src/Page/License/Action/LicenseDeactivation.php +1 -1
  84. vendor_prefixed/wpdesk/wp-wpdesk-license/src/Page/License/views/class-wpdesk-helper-list-table.php +4 -4
  85. vendor_prefixed/wpdesk/wp-wpdesk-license/src/Page/License/views/license-actions.php +6 -6
  86. vendor_prefixed/wpdesk/wp-wpdesk-license/src/Page/License/views/licenses.php +13 -2
  87. vendor_prefixed/wpdesk/wp-wpdesk-license/src/Page/LicensePage.php +5 -5
  88. vendor_prefixed/wpdesk/wp-wpdesk-license/src/ServerAddressRepository.php +77 -0
  89. vendor_prefixed/wpdesk/wp-wpdesk-tracker/composer.json +7 -0
  90. vendor_prefixed/wpdesk/wp-wpdesk-tracker/src/class-wpdesk-tracker.php +11 -16
  91. vendor_prefixed/wpdesk/wp-wpdesk-tracker/src/lang/wpdesk-tracker-pl_PL.mo +0 -0
assets/css/jquery-ui.css ADDED
@@ -0,0 +1,474 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*! jQuery UI - v1.9.2 - 2012-11-23
2
+ * http://jqueryui.com
3
+ * Includes: jquery.ui.core.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css, jquery.ui.theme.css
4
+ * Copyright 2012 jQuery Foundation and other contributors; Licensed MIT */
5
+
6
+ /* Layout helpers
7
+ ----------------------------------*/
8
+ .ui-helper-hidden { display: none; }
9
+ .ui-helper-hidden-accessible { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; }
10
+ .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
11
+ .ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; }
12
+ .ui-helper-clearfix:after { clear: both; }
13
+ .ui-helper-clearfix { zoom: 1; }
14
+ .ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
15
+
16
+
17
+ /* Interaction Cues
18
+ ----------------------------------*/
19
+ .ui-state-disabled { cursor: default !important; }
20
+
21
+
22
+ /* Icons
23
+ ----------------------------------*/
24
+
25
+ /* states and images */
26
+ .ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
27
+
28
+
29
+ /* Misc visuals
30
+ ----------------------------------*/
31
+
32
+ /* Overlays */
33
+ .ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
34
+
35
+ .ui-accordion .ui-accordion-header { display: block; cursor: pointer; position: relative; margin-top: 2px; padding: .5em .5em .5em .7em; zoom: 1; }
36
+ .ui-accordion .ui-accordion-icons { padding-left: 2.2em; }
37
+ .ui-accordion .ui-accordion-noicons { padding-left: .7em; }
38
+ .ui-accordion .ui-accordion-icons .ui-accordion-icons { padding-left: 2.2em; }
39
+ .ui-accordion .ui-accordion-header .ui-accordion-header-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
40
+ .ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; overflow: auto; zoom: 1; }
41
+
42
+ .ui-autocomplete {
43
+ position: absolute;
44
+ top: 0;
45
+ left: 0;
46
+ cursor: default;
47
+ }
48
+
49
+ /* workarounds */
50
+ * html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
51
+
52
+ .ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
53
+ .ui-button, .ui-button:link, .ui-button:visited, .ui-button:hover, .ui-button:active { text-decoration: none; }
54
+ .ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
55
+ button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
56
+ .ui-button-icons-only { width: 3.4em; }
57
+ button.ui-button-icons-only { width: 3.7em; }
58
+
59
+ /*button text element */
60
+ .ui-button .ui-button-text { display: block; line-height: 1.4; }
61
+ .ui-button-text-only .ui-button-text { padding: .4em 1em; }
62
+ .ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
63
+ .ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
64
+ .ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
65
+ .ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
66
+ /* no icon support for input elements, provide padding by default */
67
+ input.ui-button { padding: .4em 1em; }
68
+
69
+ /*button icon element(s) */
70
+ .ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
71
+ .ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
72
+ .ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
73
+ .ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
74
+ .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
75
+
76
+ /*button sets*/
77
+ .ui-buttonset { margin-right: 7px; }
78
+ .ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
79
+
80
+ /* workarounds */
81
+ button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
82
+
83
+ .ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
84
+ .ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
85
+ .ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
86
+ .ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
87
+ .ui-datepicker .ui-datepicker-prev { left:2px; }
88
+ .ui-datepicker .ui-datepicker-next { right:2px; }
89
+ .ui-datepicker .ui-datepicker-prev-hover { left:1px; }
90
+ .ui-datepicker .ui-datepicker-next-hover { right:1px; }
91
+ .ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
92
+ .ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
93
+ .ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
94
+ .ui-datepicker select.ui-datepicker-month-year {width: 100%;}
95
+ .ui-datepicker select.ui-datepicker-month,
96
+ .ui-datepicker select.ui-datepicker-year { width: 49%;}
97
+ .ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
98
+ .ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
99
+ .ui-datepicker td { border: 0; padding: 1px; }
100
+ .ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
101
+ .ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
102
+ .ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
103
+ .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
104
+
105
+ /* with multiple calendars */
106
+ .ui-datepicker.ui-datepicker-multi { width:auto; }
107
+ .ui-datepicker-multi .ui-datepicker-group { float:left; }
108
+ .ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
109
+ .ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
110
+ .ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
111
+ .ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
112
+ .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
113
+ .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
114
+ .ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
115
+ .ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }
116
+
117
+ /* RTL support */
118
+ .ui-datepicker-rtl { direction: rtl; }
119
+ .ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
120
+ .ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
121
+ .ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
122
+ .ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
123
+ .ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
124
+ .ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
125
+ .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
126
+ .ui-datepicker-rtl .ui-datepicker-group { float:right; }
127
+ .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
128
+ .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
129
+
130
+ /* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
131
+ .ui-datepicker-cover {
132
+ position: absolute; /*must have*/
133
+ z-index: -1; /*must have*/
134
+ filter: mask(); /*must have*/
135
+ top: -4px; /*must have*/
136
+ left: -4px; /*must have*/
137
+ width: 200px; /*must have*/
138
+ height: 200px; /*must have*/
139
+ }
140
+ .ui-dialog { position: absolute; top: 0; left: 0; padding: .2em; width: 300px; overflow: hidden; }
141
+ .ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; }
142
+ .ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; }
143
+ .ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
144
+ .ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
145
+ .ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
146
+ .ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
147
+ .ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
148
+ .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
149
+ .ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
150
+ .ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
151
+ .ui-draggable .ui-dialog-titlebar { cursor: move; }
152
+
153
+ .ui-menu { list-style:none; padding: 2px; margin: 0; display:block; outline: none; }
154
+ .ui-menu .ui-menu { margin-top: -3px; position: absolute; }
155
+ .ui-menu .ui-menu-item { margin: 0; padding: 0; zoom: 1; width: 100%; }
156
+ .ui-menu .ui-menu-divider { margin: 5px -2px 5px -2px; height: 0; font-size: 0; line-height: 0; border-width: 1px 0 0 0; }
157
+ .ui-menu .ui-menu-item a { text-decoration: none; display: block; padding: 2px .4em; line-height: 1.5; zoom: 1; font-weight: normal; }
158
+ .ui-menu .ui-menu-item a.ui-state-focus,
159
+ .ui-menu .ui-menu-item a.ui-state-active { font-weight: normal; margin: -1px; }
160
+
161
+ .ui-menu .ui-state-disabled { font-weight: normal; margin: .4em 0 .2em; line-height: 1.5; }
162
+ .ui-menu .ui-state-disabled a { cursor: default; }
163
+
164
+ /* icon support */
165
+ .ui-menu-icons { position: relative; }
166
+ .ui-menu-icons .ui-menu-item a { position: relative; padding-left: 2em; }
167
+
168
+ /* left-aligned */
169
+ .ui-menu .ui-icon { position: absolute; top: .2em; left: .2em; }
170
+
171
+ /* right-aligned */
172
+ .ui-menu .ui-menu-icon { position: static; float: right; }
173
+
174
+ .ui-progressbar { height:2em; text-align: left; overflow: hidden; }
175
+ .ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
176
+ .ui-resizable { position: relative;}
177
+ .ui-resizable-handle { position: absolute;font-size: 0.1px; display: block; }
178
+ .ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
179
+ .ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
180
+ .ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
181
+ .ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
182
+ .ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
183
+ .ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
184
+ .ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
185
+ .ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
186
+ .ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}
187
+ .ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
188
+
189
+ .ui-slider { position: relative; text-align: left; }
190
+ .ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
191
+ .ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
192
+
193
+ .ui-slider-horizontal { height: .8em; }
194
+ .ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
195
+ .ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
196
+ .ui-slider-horizontal .ui-slider-range-min { left: 0; }
197
+ .ui-slider-horizontal .ui-slider-range-max { right: 0; }
198
+
199
+ .ui-slider-vertical { width: .8em; height: 100px; }
200
+ .ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
201
+ .ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
202
+ .ui-slider-vertical .ui-slider-range-min { bottom: 0; }
203
+ .ui-slider-vertical .ui-slider-range-max { top: 0; }
204
+ .ui-spinner { position:relative; display: inline-block; overflow: hidden; padding: 0; vertical-align: middle; }
205
+ .ui-spinner-input { border: none; background: none; padding: 0; margin: .2em 0; vertical-align: middle; margin-left: .4em; margin-right: 22px; }
206
+ .ui-spinner-button { width: 16px; height: 50%; font-size: .5em; padding: 0; margin: 0; text-align: center; position: absolute; cursor: default; display: block; overflow: hidden; right: 0; }
207
+ .ui-spinner a.ui-spinner-button { border-top: none; border-bottom: none; border-right: none; } /* more specificity required here to overide default borders */
208
+ .ui-spinner .ui-icon { position: absolute; margin-top: -8px; top: 50%; left: 0; } /* vertical centre icon */
209
+ .ui-spinner-up { top: 0; }
210
+ .ui-spinner-down { bottom: 0; }
211
+
212
+ /* TR overrides */
213
+ .ui-spinner .ui-icon-triangle-1-s {
214
+ /* need to fix icons sprite */
215
+ background-position:-65px -16px;
216
+ }
217
+
218
+ .ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
219
+ .ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
220
+ .ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 0; margin: 1px .2em 0 0; border-bottom: 0; padding: 0; white-space: nowrap; }
221
+ .ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
222
+ .ui-tabs .ui-tabs-nav li.ui-tabs-active { margin-bottom: -1px; padding-bottom: 1px; }
223
+ .ui-tabs .ui-tabs-nav li.ui-tabs-active a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-tabs-loading a { cursor: text; }
224
+ .ui-tabs .ui-tabs-nav li a, .ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
225
+ .ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
226
+
227
+ .ui-tooltip {
228
+ padding: 8px;
229
+ position: absolute;
230
+ z-index: 9999;
231
+ max-width: 300px;
232
+ -webkit-box-shadow: 0 0 5px #aaa;
233
+ box-shadow: 0 0 5px #aaa;
234
+ }
235
+ /* Fades and background-images don't work well together in IE6, drop the image */
236
+ * html .ui-tooltip {
237
+ background-image: none;
238
+ }
239
+ body .ui-tooltip { border-width: 2px; }
240
+
241
+ /* Component containers
242
+ ----------------------------------*/
243
+ .ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; }
244
+ .ui-widget .ui-widget { font-size: 1em; }
245
+ .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; }
246
+ .ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; }
247
+ .ui-widget-content a { color: #222222; }
248
+ .ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; }
249
+ .ui-widget-header a { color: #222222; }
250
+
251
+ /* Interaction states
252
+ ----------------------------------*/
253
+ .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; }
254
+ .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; }
255
+ .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
256
+ .ui-state-hover a, .ui-state-hover a:hover, .ui-state-hover a:link, .ui-state-hover a:visited { color: #212121; text-decoration: none; }
257
+ .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
258
+ .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; }
259
+
260
+ /* Interaction Cues
261
+ ----------------------------------*/
262
+ .ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; }
263
+ .ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
264
+ .ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; }
265
+ .ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; }
266
+ .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; }
267
+ .ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
268
+ .ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
269
+ .ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
270
+ .ui-state-disabled .ui-icon { filter:Alpha(Opacity=35); } /* For IE8 - See #6059 */
271
+
272
+ /* Icons
273
+ ----------------------------------*/
274
+
275
+ /* states and images */
276
+ .ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
277
+ .ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
278
+ .ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
279
+ .ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); }
280
+ .ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
281
+ .ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
282
+ .ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
283
+ .ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
284
+
285
+ /* positioning */
286
+ .ui-icon-carat-1-n { background-position: 0 0; }
287
+ .ui-icon-carat-1-ne { background-position: -16px 0; }
288
+ .ui-icon-carat-1-e { background-position: -32px 0; }
289
+ .ui-icon-carat-1-se { background-position: -48px 0; }
290
+ .ui-icon-carat-1-s { background-position: -64px 0; }
291
+ .ui-icon-carat-1-sw { background-position: -80px 0; }
292
+ .ui-icon-carat-1-w { background-position: -96px 0; }
293
+ .ui-icon-carat-1-nw { background-position: -112px 0; }
294
+ .ui-icon-carat-2-n-s { background-position: -128px 0; }
295
+ .ui-icon-carat-2-e-w { background-position: -144px 0; }
296
+ .ui-icon-triangle-1-n { background-position: 0 -16px; }
297
+ .ui-icon-triangle-1-ne { background-position: -16px -16px; }
298
+ .ui-icon-triangle-1-e { background-position: -32px -16px; }
299
+ .ui-icon-triangle-1-se { background-position: -48px -16px; }
300
+ .ui-icon-triangle-1-s { background-position: -64px -16px; }
301
+ .ui-icon-triangle-1-sw { background-position: -80px -16px; }
302
+ .ui-icon-triangle-1-w { background-position: -96px -16px; }
303
+ .ui-icon-triangle-1-nw { background-position: -112px -16px; }
304
+ .ui-icon-triangle-2-n-s { background-position: -128px -16px; }
305
+ .ui-icon-triangle-2-e-w { background-position: -144px -16px; }
306
+ .ui-icon-arrow-1-n { background-position: 0 -32px; }
307
+ .ui-icon-arrow-1-ne { background-position: -16px -32px; }
308
+ .ui-icon-arrow-1-e { background-position: -32px -32px; }
309
+ .ui-icon-arrow-1-se { background-position: -48px -32px; }
310
+ .ui-icon-arrow-1-s { background-position: -64px -32px; }
311
+ .ui-icon-arrow-1-sw { background-position: -80px -32px; }
312
+ .ui-icon-arrow-1-w { background-position: -96px -32px; }
313
+ .ui-icon-arrow-1-nw { background-position: -112px -32px; }
314
+ .ui-icon-arrow-2-n-s { background-position: -128px -32px; }
315
+ .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
316
+ .ui-icon-arrow-2-e-w { background-position: -160px -32px; }
317
+ .ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
318
+ .ui-icon-arrowstop-1-n { background-position: -192px -32px; }
319
+ .ui-icon-arrowstop-1-e { background-position: -208px -32px; }
320
+ .ui-icon-arrowstop-1-s { background-position: -224px -32px; }
321
+ .ui-icon-arrowstop-1-w { background-position: -240px -32px; }
322
+ .ui-icon-arrowthick-1-n { background-position: 0 -48px; }
323
+ .ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
324
+ .ui-icon-arrowthick-1-e { background-position: -32px -48px; }
325
+ .ui-icon-arrowthick-1-se { background-position: -48px -48px; }
326
+ .ui-icon-arrowthick-1-s { background-position: -64px -48px; }
327
+ .ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
328
+ .ui-icon-arrowthick-1-w { background-position: -96px -48px; }
329
+ .ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
330
+ .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
331
+ .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
332
+ .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
333
+ .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
334
+ .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
335
+ .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
336
+ .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
337
+ .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
338
+ .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
339
+ .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
340
+ .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
341
+ .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
342
+ .ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
343
+ .ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
344
+ .ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
345
+ .ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
346
+ .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
347
+ .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
348
+ .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
349
+ .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
350
+ .ui-icon-arrow-4 { background-position: 0 -80px; }
351
+ .ui-icon-arrow-4-diag { background-position: -16px -80px; }
352
+ .ui-icon-extlink { background-position: -32px -80px; }
353
+ .ui-icon-newwin { background-position: -48px -80px; }
354
+ .ui-icon-refresh { background-position: -64px -80px; }
355
+ .ui-icon-shuffle { background-position: -80px -80px; }
356
+ .ui-icon-transfer-e-w { background-position: -96px -80px; }
357
+ .ui-icon-transferthick-e-w { background-position: -112px -80px; }
358
+ .ui-icon-folder-collapsed { background-position: 0 -96px; }
359
+ .ui-icon-folder-open { background-position: -16px -96px; }
360
+ .ui-icon-document { background-position: -32px -96px; }
361
+ .ui-icon-document-b { background-position: -48px -96px; }
362
+ .ui-icon-note { background-position: -64px -96px; }
363
+ .ui-icon-mail-closed { background-position: -80px -96px; }
364
+ .ui-icon-mail-open { background-position: -96px -96px; }
365
+ .ui-icon-suitcase { background-position: -112px -96px; }
366
+ .ui-icon-comment { background-position: -128px -96px; }
367
+ .ui-icon-person { background-position: -144px -96px; }
368
+ .ui-icon-print { background-position: -160px -96px; }
369
+ .ui-icon-trash { background-position: -176px -96px; }
370
+ .ui-icon-locked { background-position: -192px -96px; }
371
+ .ui-icon-unlocked { background-position: -208px -96px; }
372
+ .ui-icon-bookmark { background-position: -224px -96px; }
373
+ .ui-icon-tag { background-position: -240px -96px; }
374
+ .ui-icon-home { background-position: 0 -112px; }
375
+ .ui-icon-flag { background-position: -16px -112px; }
376
+ .ui-icon-calendar { background-position: -32px -112px; }
377
+ .ui-icon-cart { background-position: -48px -112px; }
378
+ .ui-icon-pencil { background-position: -64px -112px; }
379
+ .ui-icon-clock { background-position: -80px -112px; }
380
+ .ui-icon-disk { background-position: -96px -112px; }
381
+ .ui-icon-calculator { background-position: -112px -112px; }
382
+ .ui-icon-zoomin { background-position: -128px -112px; }
383
+ .ui-icon-zoomout { background-position: -144px -112px; }
384
+ .ui-icon-search { background-position: -160px -112px; }
385
+ .ui-icon-wrench { background-position: -176px -112px; }
386
+ .ui-icon-gear { background-position: -192px -112px; }
387
+ .ui-icon-heart { background-position: -208px -112px; }
388
+ .ui-icon-star { background-position: -224px -112px; }
389
+ .ui-icon-link { background-position: -240px -112px; }
390
+ .ui-icon-cancel { background-position: 0 -128px; }
391
+ .ui-icon-plus { background-position: -16px -128px; }
392
+ .ui-icon-plusthick { background-position: -32px -128px; }
393
+ .ui-icon-minus { background-position: -48px -128px; }
394
+ .ui-icon-minusthick { background-position: -64px -128px; }
395
+ .ui-icon-close { background-position: -80px -128px; }
396
+ .ui-icon-closethick { background-position: -96px -128px; }
397
+ .ui-icon-key { background-position: -112px -128px; }
398
+ .ui-icon-lightbulb { background-position: -128px -128px; }
399
+ .ui-icon-scissors { background-position: -144px -128px; }
400
+ .ui-icon-clipboard { background-position: -160px -128px; }
401
+ .ui-icon-copy { background-position: -176px -128px; }
402
+ .ui-icon-contact { background-position: -192px -128px; }
403
+ .ui-icon-image { background-position: -208px -128px; }
404
+ .ui-icon-video { background-position: -224px -128px; }
405
+ .ui-icon-script { background-position: -240px -128px; }
406
+ .ui-icon-alert { background-position: 0 -144px; }
407
+ .ui-icon-info { background-position: -16px -144px; }
408
+ .ui-icon-notice { background-position: -32px -144px; }
409
+ .ui-icon-help { background-position: -48px -144px; }
410
+ .ui-icon-check { background-position: -64px -144px; }
411
+ .ui-icon-bullet { background-position: -80px -144px; }
412
+ .ui-icon-radio-on { background-position: -96px -144px; }
413
+ .ui-icon-radio-off { background-position: -112px -144px; }
414
+ .ui-icon-pin-w { background-position: -128px -144px; }
415
+ .ui-icon-pin-s { background-position: -144px -144px; }
416
+ .ui-icon-play { background-position: 0 -160px; }
417
+ .ui-icon-pause { background-position: -16px -160px; }
418
+ .ui-icon-seek-next { background-position: -32px -160px; }
419
+ .ui-icon-seek-prev { background-position: -48px -160px; }
420
+ .ui-icon-seek-end { background-position: -64px -160px; }
421
+ .ui-icon-seek-start { background-position: -80px -160px; }
422
+ /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
423
+ .ui-icon-seek-first { background-position: -80px -160px; }
424
+ .ui-icon-stop { background-position: -96px -160px; }
425
+ .ui-icon-eject { background-position: -112px -160px; }
426
+ .ui-icon-volume-off { background-position: -128px -160px; }
427
+ .ui-icon-volume-on { background-position: -144px -160px; }
428
+ .ui-icon-power { background-position: 0 -176px; }
429
+ .ui-icon-signal-diag { background-position: -16px -176px; }
430
+ .ui-icon-signal { background-position: -32px -176px; }
431
+ .ui-icon-battery-0 { background-position: -48px -176px; }
432
+ .ui-icon-battery-1 { background-position: -64px -176px; }
433
+ .ui-icon-battery-2 { background-position: -80px -176px; }
434
+ .ui-icon-battery-3 { background-position: -96px -176px; }
435
+ .ui-icon-circle-plus { background-position: 0 -192px; }
436
+ .ui-icon-circle-minus { background-position: -16px -192px; }
437
+ .ui-icon-circle-close { background-position: -32px -192px; }
438
+ .ui-icon-circle-triangle-e { background-position: -48px -192px; }
439
+ .ui-icon-circle-triangle-s { background-position: -64px -192px; }
440
+ .ui-icon-circle-triangle-w { background-position: -80px -192px; }
441
+ .ui-icon-circle-triangle-n { background-position: -96px -192px; }
442
+ .ui-icon-circle-arrow-e { background-position: -112px -192px; }
443
+ .ui-icon-circle-arrow-s { background-position: -128px -192px; }
444
+ .ui-icon-circle-arrow-w { background-position: -144px -192px; }
445
+ .ui-icon-circle-arrow-n { background-position: -160px -192px; }
446
+ .ui-icon-circle-zoomin { background-position: -176px -192px; }
447
+ .ui-icon-circle-zoomout { background-position: -192px -192px; }
448
+ .ui-icon-circle-check { background-position: -208px -192px; }
449
+ .ui-icon-circlesmall-plus { background-position: 0 -208px; }
450
+ .ui-icon-circlesmall-minus { background-position: -16px -208px; }
451
+ .ui-icon-circlesmall-close { background-position: -32px -208px; }
452
+ .ui-icon-squaresmall-plus { background-position: -48px -208px; }
453
+ .ui-icon-squaresmall-minus { background-position: -64px -208px; }
454
+ .ui-icon-squaresmall-close { background-position: -80px -208px; }
455
+ .ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
456
+ .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
457
+ .ui-icon-grip-solid-vertical { background-position: -32px -224px; }
458
+ .ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
459
+ .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
460
+ .ui-icon-grip-diagonal-se { background-position: -80px -224px; }
461
+
462
+
463
+ /* Misc visuals
464
+ ----------------------------------*/
465
+
466
+ /* Corner radius */
467
+ .ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; }
468
+ .ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; }
469
+ .ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
470
+ .ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
471
+
472
+ /* Overlays */
473
+ .ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .3;filter:Alpha(Opacity=30); }
474
+ .ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .3;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }
assets/css/jquery-ui.min.css ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ /*! jQuery UI - v1.9.2 - 2012-11-23
2
+ * http://jqueryui.com
3
+ * Includes: jquery.ui.core.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css, jquery.ui.theme.css
4
+ * Copyright 2012 jQuery Foundation and other contributors; Licensed MIT */.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{zoom:1}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-state-disabled{cursor:default !important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:absolute;top:0;left:0;width:100%;height:100%}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin-top:2px;padding:.5em .5em .5em .7em;zoom:1}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-noicons{padding-left:.7em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto;zoom:1}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}* html .ui-autocomplete{width:1px}.ui-button{display:inline-block;position:relative;padding:0;margin-right:.1em;cursor:pointer;text-align:center;zoom:1;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:1.4}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month-year{width:100%}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current{float:right}.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker-cover{position:absolute;z-index:-1;filter:mask();top:-4px;left:-4px;width:200px;height:200px}.ui-dialog{position:absolute;top:0;left:0;padding:.2em;width:300px;overflow:hidden}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 16px .1em 0}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:19px;margin:-10px 0 0 0;padding:1px;height:18px}.ui-dialog .ui-dialog-titlebar-close span{display:block;margin:1px}.ui-dialog .ui-dialog-titlebar-close:hover,.ui-dialog .ui-dialog-titlebar-close:focus{padding:0}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:0;overflow:auto;zoom:1}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin:.5em 0 0 0;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:14px;height:14px;right:3px;bottom:3px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{list-style:none;padding:2px;margin:0;display:block;outline:0}.ui-menu .ui-menu{margin-top:-3px;position:absolute}.ui-menu .ui-menu-item{margin:0;padding:0;zoom:1;width:100%}.ui-menu .ui-menu-divider{margin:5px -2px 5px -2px;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:2px .4em;line-height:1.5;zoom:1;font-weight:normal}.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a.ui-state-active{font-weight:normal;margin:-1px}.ui-menu .ui-state-disabled{font-weight:normal;margin:.4em 0 .2em;line-height:1.5}.ui-menu .ui-state-disabled a{cursor:default}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item a{position:relative;padding-left:2em}.ui-menu .ui-icon{position:absolute;top:.2em;left:.2em}.ui-menu .ui-menu-icon{position:static;float:right}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:0;background:0;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:0;border-bottom:0;border-right:0}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em;zoom:1}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav li a{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-tabs-loading a{cursor:text}.ui-tabs .ui-tabs-nav li a,.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:0}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}* html .ui-tooltip{background-image:none}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px;background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-state-default .ui-icon{background-image:url(images/ui-icons_888888_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-active .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_2e83ff_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_cd0a0a_256x240.png)}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;-khtml-border-top-left-radius:4px;border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;-khtml-border-top-right-radius:4px;border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;-khtml-border-bottom-left-radius:4px;border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;-khtml-border-bottom-right-radius:4px;border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);-moz-border-radius:8px;-khtml-border-radius:8px;-webkit-border-radius:8px;border-radius:8px}
classes/class-flexible-checkout-fields-plugin.php CHANGED
@@ -897,47 +897,31 @@ class Flexible_Checkout_Fields_Plugin extends \FcfVendor\WPDesk\PluginBuilder\Pl
897
  return $this->getCheckoutUserFields( $fields, 'order' );
898
  }
899
 
 
 
 
 
 
900
  function updateCheckoutFields( $order_id ) {
901
- $shippingNotOverwrite = array(
902
- 'shipping_address_1',
903
- 'shipping_address_2',
904
- 'shipping_address_2',
905
- 'shipping_city',
906
- 'shipping_company',
907
- 'shipping_country',
908
- 'shipping_first_name',
909
- 'shipping_last_name',
910
- 'shipping_postcode',
911
- 'shipping_state',
912
- );
913
-
914
  $settings = $this->get_settings();
915
  if ( ! empty( $settings ) ) {
916
- $keys = array_flip(
917
- array_merge(
918
- array_keys( isset( $settings['billing'] ) ? $settings['billing'] : array() ),
919
- array_keys( isset( $settings['shipping'] ) ? $settings['shipping'] : array() ),
920
- array_keys( isset( $settings['order'] ) ? $settings['order'] : array() )
921
- )
922
  );
923
 
924
-
925
  foreach ( $_POST as $key => $value ) {
926
-
927
- $save = true;
928
- if ( empty( $_POST['ship_to_different_address'] ) ) {
929
- $save = ! in_array( $key, $shippingNotOverwrite );
930
- }
931
- if ( $save ) {
932
- if ( array_key_exists( $key, $keys ) ) {
933
- update_post_meta( $order_id, '_' . $key, $value );
934
  }
935
  }
936
  }
937
  }
938
 
939
  do_action( 'flexible_checkout_fields_checkout_update_order_meta', $order_id );
940
-
941
  }
942
 
943
  public static function flexible_checkout_fields_section_settings( $key, $settings ) {
@@ -985,8 +969,7 @@ class Flexible_Checkout_Fields_Plugin extends \FcfVendor\WPDesk\PluginBuilder\Pl
985
  }
986
 
987
  if ( isset( $current_screen ) && 'woocommerce_page_inspire_checkout_fields_settings' === $current_screen->id ) {
988
- wp_enqueue_style( 'jquery-ui-style',
989
- '//ajax.googleapis.com/ajax/libs/jqueryui/' . '1.9.2' . '/themes/smoothness/jquery-ui.css' );
990
  wp_enqueue_script( 'jquery-tiptip' );
991
  }
992
  wp_enqueue_style( 'inspire_checkout_fields_admin_style', trailingslashit( $this->get_plugin_assets_url() ) . 'css/admin' . $suffix . '.css', array(), $this->scripts_version );
@@ -1010,7 +993,7 @@ class Flexible_Checkout_Fields_Plugin extends \FcfVendor\WPDesk\PluginBuilder\Pl
1010
  $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
1011
  if ( is_checkout() || is_account_page() ) {
1012
  if ( $this->get_setting_value( 'css_disable' ) != 1 ) {
1013
- wp_enqueue_style( 'jquery-ui-style', '//ajax.googleapis.com/ajax/libs/jqueryui/' . '1.9.2' . '/themes/smoothness/jquery-ui.css' );
1014
  }
1015
 
1016
  wp_enqueue_style( 'inspire_checkout_fields_public_style', trailingslashit( $this->get_plugin_assets_url() ) . 'css/front' . $suffix . '.css', array(), $this->scripts_version );
897
  return $this->getCheckoutUserFields( $fields, 'order' );
898
  }
899
 
900
+ /**
901
+ * Update fields on checkout.
902
+ *
903
+ * @param $order_id
904
+ */
905
  function updateCheckoutFields( $order_id ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
906
  $settings = $this->get_settings();
907
  if ( ! empty( $settings ) ) {
908
+ $fields = array_merge(
909
+ isset( $settings['billing'] ) ? $settings['billing'] : array(),
910
+ isset( $settings['shipping'] ) ? $settings['shipping'] : array(),
911
+ isset( $settings['order'] ) ? $settings['order'] : array()
 
 
912
  );
913
 
 
914
  foreach ( $_POST as $key => $value ) {
915
+ if ( isset( $fields[ $key ] ) ) {
916
+ $fcf_field = new Flexible_Checkout_Fields_Field( $fields[ $key ], $this );
917
+ if ( $fcf_field->is_custom_field() ) {
918
+ update_post_meta( $order_id, '_' . $key, sanitize_text_field( wp_unslash( $value ) ) );
 
 
 
 
919
  }
920
  }
921
  }
922
  }
923
 
924
  do_action( 'flexible_checkout_fields_checkout_update_order_meta', $order_id );
 
925
  }
926
 
927
  public static function flexible_checkout_fields_section_settings( $key, $settings ) {
969
  }
970
 
971
  if ( isset( $current_screen ) && 'woocommerce_page_inspire_checkout_fields_settings' === $current_screen->id ) {
972
+ wp_enqueue_style( 'jquery-ui-style', trailingslashit( $this->get_plugin_assets_url() ) . 'css/jquery-ui' . $suffix . '.css', array(), $this->scripts_version );
 
973
  wp_enqueue_script( 'jquery-tiptip' );
974
  }
975
  wp_enqueue_style( 'inspire_checkout_fields_admin_style', trailingslashit( $this->get_plugin_assets_url() ) . 'css/admin' . $suffix . '.css', array(), $this->scripts_version );
993
  $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
994
  if ( is_checkout() || is_account_page() ) {
995
  if ( $this->get_setting_value( 'css_disable' ) != 1 ) {
996
+ wp_enqueue_style( 'jquery-ui-style', trailingslashit( $this->get_plugin_assets_url() ) . 'css/jquery-ui' . $suffix . '.css', array(), $this->scripts_version );
997
  }
998
 
999
  wp_enqueue_style( 'inspire_checkout_fields_public_style', trailingslashit( $this->get_plugin_assets_url() ) . 'css/front' . $suffix . '.css', array(), $this->scripts_version );
classes/user-profile.php CHANGED
@@ -178,7 +178,7 @@ class Flexible_Checkout_Fields_User_Profile {
178
  if ( ! $fcf_field->is_field_excluded_for_user() ) {
179
  $value = '';
180
  if ( isset( $_POST[ $field_name ] ) ) {
181
- $value = wp_unslash( $_POST[ $field_name ] );
182
  }
183
  update_user_meta( $user_id, $field_name, $value );
184
  }
178
  if ( ! $fcf_field->is_field_excluded_for_user() ) {
179
  $value = '';
180
  if ( isset( $_POST[ $field_name ] ) ) {
181
+ $value = sanitize_text_field( wp_unslash( $_POST[ $field_name ] ) );
182
  }
183
  update_user_meta( $user_id, $field_name, $value );
184
  }
composer.lock CHANGED
@@ -8,16 +8,16 @@
8
  "packages": [
9
  {
10
  "name": "psr/log",
11
- "version": "1.1.0",
12
  "source": {
13
  "type": "git",
14
  "url": "https://github.com/php-fig/log.git",
15
- "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd"
16
  },
17
  "dist": {
18
  "type": "zip",
19
- "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
20
- "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
21
  "shasum": ""
22
  },
23
  "require": {
@@ -26,7 +26,7 @@
26
  "type": "library",
27
  "extra": {
28
  "branch-alias": {
29
- "dev-master": "1.0.x-dev"
30
  }
31
  },
32
  "autoload": {
@@ -51,7 +51,7 @@
51
  "psr",
52
  "psr-3"
53
  ],
54
- "time": "2018-11-20T15:27:04+00:00"
55
  },
56
  {
57
  "name": "wpdesk/wp-wpdesk-helper-override",
@@ -175,16 +175,16 @@
175
  },
176
  {
177
  "name": "behat/gherkin",
178
- "version": "v4.6.0",
179
  "source": {
180
  "type": "git",
181
  "url": "https://github.com/Behat/Gherkin.git",
182
- "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07"
183
  },
184
  "dist": {
185
  "type": "zip",
186
- "url": "https://api.github.com/repos/Behat/Gherkin/zipball/ab0a02ea14893860bca00f225f5621d351a3ad07",
187
- "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07",
188
  "shasum": ""
189
  },
190
  "require": {
@@ -230,7 +230,7 @@
230
  "gherkin",
231
  "parser"
232
  ],
233
- "time": "2019-01-16T14:22:17+00:00"
234
  },
235
  {
236
  "name": "codeception/codeception",
@@ -330,16 +330,16 @@
330
  },
331
  {
332
  "name": "codeception/phpunit-wrapper",
333
- "version": "6.0.17",
334
  "source": {
335
  "type": "git",
336
  "url": "https://github.com/Codeception/phpunit-wrapper.git",
337
- "reference": "4394f87d6f2b18bf67cc9984845d0a3e257ccc9f"
338
  },
339
  "dist": {
340
  "type": "zip",
341
- "url": "https://api.github.com/repos/Codeception/phpunit-wrapper/zipball/4394f87d6f2b18bf67cc9984845d0a3e257ccc9f",
342
- "reference": "4394f87d6f2b18bf67cc9984845d0a3e257ccc9f",
343
  "shasum": ""
344
  },
345
  "require": {
@@ -372,7 +372,7 @@
372
  }
373
  ],
374
  "description": "PHPUnit classes used by Codeception",
375
- "time": "2019-08-18T15:48:56+00:00"
376
  },
377
  {
378
  "name": "codeception/stub",
@@ -406,16 +406,16 @@
406
  },
407
  {
408
  "name": "composer/ca-bundle",
409
- "version": "1.2.5",
410
  "source": {
411
  "type": "git",
412
  "url": "https://github.com/composer/ca-bundle.git",
413
- "reference": "62e8fc2dc550e5d6d8c9360c7721662670f58149"
414
  },
415
  "dist": {
416
  "type": "zip",
417
- "url": "https://api.github.com/repos/composer/ca-bundle/zipball/62e8fc2dc550e5d6d8c9360c7721662670f58149",
418
- "reference": "62e8fc2dc550e5d6d8c9360c7721662670f58149",
419
  "shasum": ""
420
  },
421
  "require": {
@@ -458,20 +458,20 @@
458
  "ssl",
459
  "tls"
460
  ],
461
- "time": "2019-12-11T14:44:42+00:00"
462
  },
463
  {
464
  "name": "composer/composer",
465
- "version": "1.9.1",
466
  "source": {
467
  "type": "git",
468
  "url": "https://github.com/composer/composer.git",
469
- "reference": "bb01f2180df87ce7992b8331a68904f80439dd2f"
470
  },
471
  "dist": {
472
  "type": "zip",
473
- "url": "https://api.github.com/repos/composer/composer/zipball/bb01f2180df87ce7992b8331a68904f80439dd2f",
474
- "reference": "bb01f2180df87ce7992b8331a68904f80439dd2f",
475
  "shasum": ""
476
  },
477
  "require": {
@@ -538,28 +538,27 @@
538
  "dependency",
539
  "package"
540
  ],
541
- "time": "2019-11-01T16:20:17+00:00"
542
  },
543
  {
544
  "name": "composer/semver",
545
- "version": "1.5.0",
546
  "source": {
547
  "type": "git",
548
  "url": "https://github.com/composer/semver.git",
549
- "reference": "46d9139568ccb8d9e7cdd4539cab7347568a5e2e"
550
  },
551
  "dist": {
552
  "type": "zip",
553
- "url": "https://api.github.com/repos/composer/semver/zipball/46d9139568ccb8d9e7cdd4539cab7347568a5e2e",
554
- "reference": "46d9139568ccb8d9e7cdd4539cab7347568a5e2e",
555
  "shasum": ""
556
  },
557
  "require": {
558
  "php": "^5.3.2 || ^7.0"
559
  },
560
  "require-dev": {
561
- "phpunit/phpunit": "^4.5 || ^5.0.5",
562
- "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0"
563
  },
564
  "type": "library",
565
  "extra": {
@@ -600,20 +599,20 @@
600
  "validation",
601
  "versioning"
602
  ],
603
- "time": "2019-03-19T17:25:45+00:00"
604
  },
605
  {
606
  "name": "composer/spdx-licenses",
607
- "version": "1.5.2",
608
  "source": {
609
  "type": "git",
610
  "url": "https://github.com/composer/spdx-licenses.git",
611
- "reference": "7ac1e6aec371357df067f8a688c3d6974df68fa5"
612
  },
613
  "dist": {
614
  "type": "zip",
615
- "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/7ac1e6aec371357df067f8a688c3d6974df68fa5",
616
- "reference": "7ac1e6aec371357df067f8a688c3d6974df68fa5",
617
  "shasum": ""
618
  },
619
  "require": {
@@ -660,20 +659,20 @@
660
  "spdx",
661
  "validator"
662
  ],
663
- "time": "2019-07-29T10:31:59+00:00"
664
  },
665
  {
666
  "name": "composer/xdebug-handler",
667
- "version": "1.4.0",
668
  "source": {
669
  "type": "git",
670
  "url": "https://github.com/composer/xdebug-handler.git",
671
- "reference": "cbe23383749496fe0f373345208b79568e4bc248"
672
  },
673
  "dist": {
674
  "type": "zip",
675
- "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/cbe23383749496fe0f373345208b79568e4bc248",
676
- "reference": "cbe23383749496fe0f373345208b79568e4bc248",
677
  "shasum": ""
678
  },
679
  "require": {
@@ -704,7 +703,7 @@
704
  "Xdebug",
705
  "performance"
706
  ],
707
- "time": "2019-11-06T16:40:04+00:00"
708
  },
709
  {
710
  "name": "cweagans/composer-patches",
@@ -916,12 +915,12 @@
916
  "version": "1.7.1",
917
  "source": {
918
  "type": "git",
919
- "url": "https://github.com/facebook/php-webdriver.git",
920
  "reference": "e43de70f3c7166169d0f14a374505392734160e5"
921
  },
922
  "dist": {
923
  "type": "zip",
924
- "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/e43de70f3c7166169d0f14a374505392734160e5",
925
  "reference": "e43de70f3c7166169d0f14a374505392734160e5",
926
  "shasum": ""
927
  },
@@ -969,6 +968,7 @@
969
  "selenium",
970
  "webdriver"
971
  ],
 
972
  "time": "2019-06-13T08:02:18+00:00"
973
  },
974
  {
@@ -1151,16 +1151,16 @@
1151
  },
1152
  {
1153
  "name": "guzzlehttp/guzzle",
1154
- "version": "6.5.0",
1155
  "source": {
1156
  "type": "git",
1157
  "url": "https://github.com/guzzle/guzzle.git",
1158
- "reference": "dbc2bc3a293ed6b1ae08a3651e2bfd213d19b6a5"
1159
  },
1160
  "dist": {
1161
  "type": "zip",
1162
- "url": "https://api.github.com/repos/guzzle/guzzle/zipball/dbc2bc3a293ed6b1ae08a3651e2bfd213d19b6a5",
1163
- "reference": "dbc2bc3a293ed6b1ae08a3651e2bfd213d19b6a5",
1164
  "shasum": ""
1165
  },
1166
  "require": {
@@ -1214,7 +1214,7 @@
1214
  "rest",
1215
  "web service"
1216
  ],
1217
- "time": "2019-12-07T18:20:45+00:00"
1218
  },
1219
  {
1220
  "name": "guzzlehttp/promises",
@@ -2145,16 +2145,16 @@
2145
  },
2146
  {
2147
  "name": "lucatume/wp-browser",
2148
- "version": "2.2.32",
2149
  "source": {
2150
  "type": "git",
2151
  "url": "https://github.com/lucatume/wp-browser.git",
2152
- "reference": "64b06c6612bc4c8a3a0d6d95996fe6676f259220"
2153
  },
2154
  "dist": {
2155
  "type": "zip",
2156
- "url": "https://api.github.com/repos/lucatume/wp-browser/zipball/64b06c6612bc4c8a3a0d6d95996fe6676f259220",
2157
- "reference": "64b06c6612bc4c8a3a0d6d95996fe6676f259220",
2158
  "shasum": ""
2159
  },
2160
  "require": {
@@ -2177,7 +2177,7 @@
2177
  },
2178
  "require-dev": {
2179
  "erusev/parsedown": "^1.7",
2180
- "lucatume/codeception-snapshot-assertions": "^0.2.2",
2181
  "mikey179/vfsstream": "^1.6",
2182
  "phpstan/phpstan": "^0.11.15",
2183
  "phpstan/phpstan-shim": "^0.11.15",
@@ -2215,20 +2215,129 @@
2215
  "codeception",
2216
  "wordpress"
2217
  ],
2218
- "time": "2019-11-26T11:25:03+00:00"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2219
  },
2220
  {
2221
  "name": "mck89/peast",
2222
- "version": "v1.10",
2223
  "source": {
2224
  "type": "git",
2225
  "url": "https://github.com/mck89/peast.git",
2226
- "reference": "ce12201132d953a13f41565c82122a5fe2616837"
2227
  },
2228
  "dist": {
2229
  "type": "zip",
2230
- "url": "https://api.github.com/repos/mck89/peast/zipball/ce12201132d953a13f41565c82122a5fe2616837",
2231
- "reference": "ce12201132d953a13f41565c82122a5fe2616837",
2232
  "shasum": ""
2233
  },
2234
  "require": {
@@ -2240,7 +2349,7 @@
2240
  "type": "library",
2241
  "extra": {
2242
  "branch-alias": {
2243
- "dev-master": "1.10.0-dev"
2244
  }
2245
  },
2246
  "autoload": {
@@ -2260,7 +2369,7 @@
2260
  }
2261
  ],
2262
  "description": "Peast is PHP library that generates AST for JavaScript code",
2263
- "time": "2019-11-22T18:07:58+00:00"
2264
  },
2265
  {
2266
  "name": "mikemclin/laravel-wp-password",
@@ -2393,16 +2502,16 @@
2393
  },
2394
  {
2395
  "name": "monolog/monolog",
2396
- "version": "1.25.1",
2397
  "source": {
2398
  "type": "git",
2399
  "url": "https://github.com/Seldaek/monolog.git",
2400
- "reference": "70e65a5470a42cfec1a7da00d30edb6e617e8dcf"
2401
  },
2402
  "dist": {
2403
  "type": "zip",
2404
- "url": "https://api.github.com/repos/Seldaek/monolog/zipball/70e65a5470a42cfec1a7da00d30edb6e617e8dcf",
2405
- "reference": "70e65a5470a42cfec1a7da00d30edb6e617e8dcf",
2406
  "shasum": ""
2407
  },
2408
  "require": {
@@ -2467,7 +2576,7 @@
2467
  "logging",
2468
  "psr-3"
2469
  ],
2470
- "time": "2019-09-06T13:49:17+00:00"
2471
  },
2472
  {
2473
  "name": "mustache/mustache",
@@ -2852,33 +2961,33 @@
2852
  },
2853
  {
2854
  "name": "phpspec/prophecy",
2855
- "version": "1.8.1",
2856
  "source": {
2857
  "type": "git",
2858
  "url": "https://github.com/phpspec/prophecy.git",
2859
- "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76"
2860
  },
2861
  "dist": {
2862
  "type": "zip",
2863
- "url": "https://api.github.com/repos/phpspec/prophecy/zipball/1927e75f4ed19131ec9bcc3b002e07fb1173ee76",
2864
- "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76",
2865
  "shasum": ""
2866
  },
2867
  "require": {
2868
  "doctrine/instantiator": "^1.0.2",
2869
  "php": "^5.3|^7.0",
2870
- "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
2871
- "sebastian/comparator": "^1.1|^2.0|^3.0",
2872
- "sebastian/recursion-context": "^1.0|^2.0|^3.0"
2873
  },
2874
  "require-dev": {
2875
- "phpspec/phpspec": "^2.5|^3.2",
2876
  "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
2877
  },
2878
  "type": "library",
2879
  "extra": {
2880
  "branch-alias": {
2881
- "dev-master": "1.8.x-dev"
2882
  }
2883
  },
2884
  "autoload": {
@@ -2911,7 +3020,7 @@
2911
  "spy",
2912
  "stub"
2913
  ],
2914
- "time": "2019-06-13T12:50:23+00:00"
2915
  },
2916
  {
2917
  "name": "phpunit/php-code-coverage",
@@ -4007,16 +4116,16 @@
4007
  },
4008
  {
4009
  "name": "seld/phar-utils",
4010
- "version": "1.0.1",
4011
  "source": {
4012
  "type": "git",
4013
  "url": "https://github.com/Seldaek/phar-utils.git",
4014
- "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a"
4015
  },
4016
  "dist": {
4017
  "type": "zip",
4018
- "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/7009b5139491975ef6486545a39f3e6dad5ac30a",
4019
- "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a",
4020
  "shasum": ""
4021
  },
4022
  "require": {
@@ -4045,22 +4154,22 @@
4045
  ],
4046
  "description": "PHAR file format utilities, for when PHP phars you up",
4047
  "keywords": [
4048
- "phra"
4049
  ],
4050
- "time": "2015-10-13T18:44:15+00:00"
4051
  },
4052
  {
4053
  "name": "symfony/browser-kit",
4054
- "version": "v3.4.36",
4055
  "source": {
4056
  "type": "git",
4057
  "url": "https://github.com/symfony/browser-kit.git",
4058
- "reference": "2e4c991e27a97a8c27745720b030ff85a5cebdf6"
4059
  },
4060
  "dist": {
4061
  "type": "zip",
4062
- "url": "https://api.github.com/repos/symfony/browser-kit/zipball/2e4c991e27a97a8c27745720b030ff85a5cebdf6",
4063
- "reference": "2e4c991e27a97a8c27745720b030ff85a5cebdf6",
4064
  "shasum": ""
4065
  },
4066
  "require": {
@@ -4104,20 +4213,20 @@
4104
  ],
4105
  "description": "Symfony BrowserKit Component",
4106
  "homepage": "https://symfony.com",
4107
- "time": "2019-10-24T15:33:53+00:00"
4108
  },
4109
  {
4110
  "name": "symfony/console",
4111
- "version": "v3.4.36",
4112
  "source": {
4113
  "type": "git",
4114
  "url": "https://github.com/symfony/console.git",
4115
- "reference": "1ee23b3b659b06c622f2bd2492a229e416eb4586"
4116
  },
4117
  "dist": {
4118
  "type": "zip",
4119
- "url": "https://api.github.com/repos/symfony/console/zipball/1ee23b3b659b06c622f2bd2492a229e416eb4586",
4120
- "reference": "1ee23b3b659b06c622f2bd2492a229e416eb4586",
4121
  "shasum": ""
4122
  },
4123
  "require": {
@@ -4176,20 +4285,20 @@
4176
  ],
4177
  "description": "Symfony Console Component",
4178
  "homepage": "https://symfony.com",
4179
- "time": "2019-12-01T10:04:45+00:00"
4180
  },
4181
  {
4182
  "name": "symfony/css-selector",
4183
- "version": "v3.4.36",
4184
  "source": {
4185
  "type": "git",
4186
  "url": "https://github.com/symfony/css-selector.git",
4187
- "reference": "f819f71ae3ba6f396b4c015bd5895de7d2f1f85f"
4188
  },
4189
  "dist": {
4190
  "type": "zip",
4191
- "url": "https://api.github.com/repos/symfony/css-selector/zipball/f819f71ae3ba6f396b4c015bd5895de7d2f1f85f",
4192
- "reference": "f819f71ae3ba6f396b4c015bd5895de7d2f1f85f",
4193
  "shasum": ""
4194
  },
4195
  "require": {
@@ -4229,20 +4338,20 @@
4229
  ],
4230
  "description": "Symfony CssSelector Component",
4231
  "homepage": "https://symfony.com",
4232
- "time": "2019-10-01T11:57:37+00:00"
4233
  },
4234
  {
4235
  "name": "symfony/debug",
4236
- "version": "v3.4.36",
4237
  "source": {
4238
  "type": "git",
4239
  "url": "https://github.com/symfony/debug.git",
4240
- "reference": "f72e33fdb1170b326e72c3157f0cd456351dd086"
4241
  },
4242
  "dist": {
4243
  "type": "zip",
4244
- "url": "https://api.github.com/repos/symfony/debug/zipball/f72e33fdb1170b326e72c3157f0cd456351dd086",
4245
- "reference": "f72e33fdb1170b326e72c3157f0cd456351dd086",
4246
  "shasum": ""
4247
  },
4248
  "require": {
@@ -4285,20 +4394,20 @@
4285
  ],
4286
  "description": "Symfony Debug Component",
4287
  "homepage": "https://symfony.com",
4288
- "time": "2019-10-24T15:33:53+00:00"
4289
  },
4290
  {
4291
  "name": "symfony/dom-crawler",
4292
- "version": "v3.4.36",
4293
  "source": {
4294
  "type": "git",
4295
  "url": "https://github.com/symfony/dom-crawler.git",
4296
- "reference": "6bcffd2eabc4ca087faaaf54e26c8ff3a40284f3"
4297
  },
4298
  "dist": {
4299
  "type": "zip",
4300
- "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/6bcffd2eabc4ca087faaaf54e26c8ff3a40284f3",
4301
- "reference": "6bcffd2eabc4ca087faaaf54e26c8ff3a40284f3",
4302
  "shasum": ""
4303
  },
4304
  "require": {
@@ -4342,20 +4451,20 @@
4342
  ],
4343
  "description": "Symfony DomCrawler Component",
4344
  "homepage": "https://symfony.com",
4345
- "time": "2019-10-24T15:33:53+00:00"
4346
  },
4347
  {
4348
  "name": "symfony/event-dispatcher",
4349
- "version": "v3.4.36",
4350
  "source": {
4351
  "type": "git",
4352
  "url": "https://github.com/symfony/event-dispatcher.git",
4353
- "reference": "f9031c22ec127d4a2450760f81a8677fe8a10177"
4354
  },
4355
  "dist": {
4356
  "type": "zip",
4357
- "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f9031c22ec127d4a2450760f81a8677fe8a10177",
4358
- "reference": "f9031c22ec127d4a2450760f81a8677fe8a10177",
4359
  "shasum": ""
4360
  },
4361
  "require": {
@@ -4405,20 +4514,20 @@
4405
  ],
4406
  "description": "Symfony EventDispatcher Component",
4407
  "homepage": "https://symfony.com",
4408
- "time": "2019-10-24T15:33:53+00:00"
4409
  },
4410
  {
4411
  "name": "symfony/filesystem",
4412
- "version": "v3.4.36",
4413
  "source": {
4414
  "type": "git",
4415
  "url": "https://github.com/symfony/filesystem.git",
4416
- "reference": "00cdad0936d06fab136944bc2342b762b1c3a4a2"
4417
  },
4418
  "dist": {
4419
  "type": "zip",
4420
- "url": "https://api.github.com/repos/symfony/filesystem/zipball/00cdad0936d06fab136944bc2342b762b1c3a4a2",
4421
- "reference": "00cdad0936d06fab136944bc2342b762b1c3a4a2",
4422
  "shasum": ""
4423
  },
4424
  "require": {
@@ -4455,20 +4564,20 @@
4455
  ],
4456
  "description": "Symfony Filesystem Component",
4457
  "homepage": "https://symfony.com",
4458
- "time": "2019-11-25T16:36:22+00:00"
4459
  },
4460
  {
4461
  "name": "symfony/finder",
4462
- "version": "v3.4.36",
4463
  "source": {
4464
  "type": "git",
4465
  "url": "https://github.com/symfony/finder.git",
4466
- "reference": "290ae21279b37bfd287cdcce640d51204e84afdf"
4467
  },
4468
  "dist": {
4469
  "type": "zip",
4470
- "url": "https://api.github.com/repos/symfony/finder/zipball/290ae21279b37bfd287cdcce640d51204e84afdf",
4471
- "reference": "290ae21279b37bfd287cdcce640d51204e84afdf",
4472
  "shasum": ""
4473
  },
4474
  "require": {
@@ -4504,20 +4613,20 @@
4504
  ],
4505
  "description": "Symfony Finder Component",
4506
  "homepage": "https://symfony.com",
4507
- "time": "2019-11-17T21:55:15+00:00"
4508
  },
4509
  {
4510
  "name": "symfony/polyfill-ctype",
4511
- "version": "v1.12.0",
4512
  "source": {
4513
  "type": "git",
4514
  "url": "https://github.com/symfony/polyfill-ctype.git",
4515
- "reference": "550ebaac289296ce228a706d0867afc34687e3f4"
4516
  },
4517
  "dist": {
4518
  "type": "zip",
4519
- "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/550ebaac289296ce228a706d0867afc34687e3f4",
4520
- "reference": "550ebaac289296ce228a706d0867afc34687e3f4",
4521
  "shasum": ""
4522
  },
4523
  "require": {
@@ -4529,7 +4638,7 @@
4529
  "type": "library",
4530
  "extra": {
4531
  "branch-alias": {
4532
- "dev-master": "1.12-dev"
4533
  }
4534
  },
4535
  "autoload": {
@@ -4562,20 +4671,20 @@
4562
  "polyfill",
4563
  "portable"
4564
  ],
4565
- "time": "2019-08-06T08:03:45+00:00"
4566
  },
4567
  {
4568
  "name": "symfony/polyfill-mbstring",
4569
- "version": "v1.13.1",
4570
  "source": {
4571
  "type": "git",
4572
  "url": "https://github.com/symfony/polyfill-mbstring.git",
4573
- "reference": "7b4aab9743c30be783b73de055d24a39cf4b954f"
4574
  },
4575
  "dist": {
4576
  "type": "zip",
4577
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7b4aab9743c30be783b73de055d24a39cf4b954f",
4578
- "reference": "7b4aab9743c30be783b73de055d24a39cf4b954f",
4579
  "shasum": ""
4580
  },
4581
  "require": {
@@ -4587,7 +4696,7 @@
4587
  "type": "library",
4588
  "extra": {
4589
  "branch-alias": {
4590
- "dev-master": "1.13-dev"
4591
  }
4592
  },
4593
  "autoload": {
@@ -4621,20 +4730,20 @@
4621
  "portable",
4622
  "shim"
4623
  ],
4624
- "time": "2019-11-27T14:18:11+00:00"
4625
  },
4626
  {
4627
  "name": "symfony/process",
4628
- "version": "v3.4.36",
4629
  "source": {
4630
  "type": "git",
4631
  "url": "https://github.com/symfony/process.git",
4632
- "reference": "9a4545c01e1e4f473492bd52b71e574dcc401ca2"
4633
  },
4634
  "dist": {
4635
  "type": "zip",
4636
- "url": "https://api.github.com/repos/symfony/process/zipball/9a4545c01e1e4f473492bd52b71e574dcc401ca2",
4637
- "reference": "9a4545c01e1e4f473492bd52b71e574dcc401ca2",
4638
  "shasum": ""
4639
  },
4640
  "require": {
@@ -4670,20 +4779,20 @@
4670
  ],
4671
  "description": "Symfony Process Component",
4672
  "homepage": "https://symfony.com",
4673
- "time": "2019-11-28T10:05:51+00:00"
4674
  },
4675
  {
4676
  "name": "symfony/yaml",
4677
- "version": "v3.4.31",
4678
  "source": {
4679
  "type": "git",
4680
  "url": "https://github.com/symfony/yaml.git",
4681
- "reference": "3dc414b7db30695bae671a1d86013d03f4ae9834"
4682
  },
4683
  "dist": {
4684
  "type": "zip",
4685
- "url": "https://api.github.com/repos/symfony/yaml/zipball/3dc414b7db30695bae671a1d86013d03f4ae9834",
4686
- "reference": "3dc414b7db30695bae671a1d86013d03f4ae9834",
4687
  "shasum": ""
4688
  },
4689
  "require": {
@@ -4729,7 +4838,7 @@
4729
  ],
4730
  "description": "Symfony Yaml Component",
4731
  "homepage": "https://symfony.com",
4732
- "time": "2019-08-20T13:31:17+00:00"
4733
  },
4734
  {
4735
  "name": "vlucas/phpdotenv",
@@ -4838,31 +4947,29 @@
4838
  },
4839
  {
4840
  "name": "webmozart/assert",
4841
- "version": "1.5.0",
4842
  "source": {
4843
  "type": "git",
4844
  "url": "https://github.com/webmozart/assert.git",
4845
- "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4"
4846
  },
4847
  "dist": {
4848
  "type": "zip",
4849
- "url": "https://api.github.com/repos/webmozart/assert/zipball/88e6d84706d09a236046d686bbea96f07b3a34f4",
4850
- "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4",
4851
  "shasum": ""
4852
  },
4853
  "require": {
4854
  "php": "^5.3.3 || ^7.0",
4855
  "symfony/polyfill-ctype": "^1.8"
4856
  },
 
 
 
4857
  "require-dev": {
4858
  "phpunit/phpunit": "^4.8.36 || ^7.5.13"
4859
  },
4860
  "type": "library",
4861
- "extra": {
4862
- "branch-alias": {
4863
- "dev-master": "1.3-dev"
4864
- }
4865
- },
4866
  "autoload": {
4867
  "psr-4": {
4868
  "Webmozart\\Assert\\": "src/"
@@ -4884,7 +4991,7 @@
4884
  "check",
4885
  "validate"
4886
  ],
4887
- "time": "2019-08-24T08:43:50+00:00"
4888
  },
4889
  {
4890
  "name": "wp-cli/cache-command",
@@ -5148,16 +5255,16 @@
5148
  },
5149
  {
5150
  "name": "wp-cli/cron-command",
5151
- "version": "v2.0.3",
5152
  "source": {
5153
  "type": "git",
5154
  "url": "https://github.com/wp-cli/cron-command.git",
5155
- "reference": "b6d0c8ff69cc56d5316a35a7a2fcc314c4069585"
5156
  },
5157
  "dist": {
5158
  "type": "zip",
5159
- "url": "https://api.github.com/repos/wp-cli/cron-command/zipball/b6d0c8ff69cc56d5316a35a7a2fcc314c4069585",
5160
- "reference": "b6d0c8ff69cc56d5316a35a7a2fcc314c4069585",
5161
  "shasum": ""
5162
  },
5163
  "require": {
@@ -5182,7 +5289,8 @@
5182
  "cron event run",
5183
  "cron event schedule",
5184
  "cron schedule",
5185
- "cron schedule list"
 
5186
  ]
5187
  },
5188
  "autoload": {
@@ -5206,20 +5314,20 @@
5206
  ],
5207
  "description": "Tests, runs, and deletes WP-Cron events; manages WP-Cron schedules.",
5208
  "homepage": "https://github.com/wp-cli/cron-command",
5209
- "time": "2019-04-24T07:31:46+00:00"
5210
  },
5211
  {
5212
  "name": "wp-cli/db-command",
5213
- "version": "v2.0.5",
5214
  "source": {
5215
  "type": "git",
5216
  "url": "https://github.com/wp-cli/db-command.git",
5217
- "reference": "119cf31491577d0a79ad42021dfeb8ac1138342b"
5218
  },
5219
  "dist": {
5220
  "type": "zip",
5221
- "url": "https://api.github.com/repos/wp-cli/db-command/zipball/119cf31491577d0a79ad42021dfeb8ac1138342b",
5222
- "reference": "119cf31491577d0a79ad42021dfeb8ac1138342b",
5223
  "shasum": ""
5224
  },
5225
  "require": {
@@ -5276,7 +5384,7 @@
5276
  ],
5277
  "description": "Performs basic database operations using credentials stored in wp-config.php.",
5278
  "homepage": "https://github.com/wp-cli/db-command",
5279
- "time": "2019-11-12T05:05:58+00:00"
5280
  },
5281
  {
5282
  "name": "wp-cli/embed-command",
@@ -5549,16 +5657,16 @@
5549
  },
5550
  {
5551
  "name": "wp-cli/eval-command",
5552
- "version": "v2.0.5",
5553
  "source": {
5554
  "type": "git",
5555
  "url": "https://github.com/wp-cli/eval-command.git",
5556
- "reference": "945aaebc761a694cf302985088ef6b19a4567643"
5557
  },
5558
  "dist": {
5559
  "type": "zip",
5560
- "url": "https://api.github.com/repos/wp-cli/eval-command/zipball/945aaebc761a694cf302985088ef6b19a4567643",
5561
- "reference": "945aaebc761a694cf302985088ef6b19a4567643",
5562
  "shasum": ""
5563
  },
5564
  "require": {
@@ -5599,7 +5707,7 @@
5599
  ],
5600
  "description": "Executes arbitrary PHP code or files.",
5601
  "homepage": "https://github.com/wp-cli/eval-command",
5602
- "time": "2019-11-12T01:36:20+00:00"
5603
  },
5604
  {
5605
  "name": "wp-cli/export-command",
@@ -5661,16 +5769,16 @@
5661
  },
5662
  {
5663
  "name": "wp-cli/extension-command",
5664
- "version": "v2.0.7",
5665
  "source": {
5666
  "type": "git",
5667
  "url": "https://github.com/wp-cli/extension-command.git",
5668
- "reference": "e397cf208c0df679656a87041bf34129e7e3d922"
5669
  },
5670
  "dist": {
5671
  "type": "zip",
5672
- "url": "https://api.github.com/repos/wp-cli/extension-command/zipball/e397cf208c0df679656a87041bf34129e7e3d922",
5673
- "reference": "e397cf208c0df679656a87041bf34129e7e3d922",
5674
  "shasum": ""
5675
  },
5676
  "require": {
@@ -5744,20 +5852,20 @@
5744
  ],
5745
  "description": "Manages plugins and themes, including installs, activations, and updates.",
5746
  "homepage": "https://github.com/wp-cli/extension-command",
5747
- "time": "2019-11-08T20:23:53+00:00"
5748
  },
5749
  {
5750
  "name": "wp-cli/i18n-command",
5751
- "version": "v2.2.1",
5752
  "source": {
5753
  "type": "git",
5754
  "url": "https://github.com/wp-cli/i18n-command.git",
5755
- "reference": "6a0582103ecf4a28b3086eac55a9fe590bd3dc96"
5756
  },
5757
  "dist": {
5758
  "type": "zip",
5759
- "url": "https://api.github.com/repos/wp-cli/i18n-command/zipball/6a0582103ecf4a28b3086eac55a9fe590bd3dc96",
5760
- "reference": "6a0582103ecf4a28b3086eac55a9fe590bd3dc96",
5761
  "shasum": ""
5762
  },
5763
  "require": {
@@ -5801,7 +5909,7 @@
5801
  ],
5802
  "description": "Provides internationalization tools for WordPress projects.",
5803
  "homepage": "https://github.com/wp-cli/i18n-command",
5804
- "time": "2019-11-12T06:57:35+00:00"
5805
  },
5806
  {
5807
  "name": "wp-cli/import-command",
@@ -6099,16 +6207,16 @@
6099
  },
6100
  {
6101
  "name": "wp-cli/package-command",
6102
- "version": "v2.0.5",
6103
  "source": {
6104
  "type": "git",
6105
  "url": "https://github.com/wp-cli/package-command.git",
6106
- "reference": "52fea16f3cec0577b9c417a19ebc0f328c38d853"
6107
  },
6108
  "dist": {
6109
  "type": "zip",
6110
- "url": "https://api.github.com/repos/wp-cli/package-command/zipball/52fea16f3cec0577b9c417a19ebc0f328c38d853",
6111
- "reference": "52fea16f3cec0577b9c417a19ebc0f328c38d853",
6112
  "shasum": ""
6113
  },
6114
  "require": {
@@ -6156,7 +6264,7 @@
6156
  ],
6157
  "description": "Lists, installs, and removes WP-CLI packages.",
6158
  "homepage": "https://github.com/wp-cli/package-command",
6159
- "time": "2019-04-24T09:34:35+00:00"
6160
  },
6161
  {
6162
  "name": "wp-cli/php-cli-tools",
@@ -6329,16 +6437,16 @@
6329
  },
6330
  {
6331
  "name": "wp-cli/scaffold-command",
6332
- "version": "v2.0.7",
6333
  "source": {
6334
  "type": "git",
6335
  "url": "https://github.com/wp-cli/scaffold-command.git",
6336
- "reference": "fe73e6f71c2a03908bb5ceac17a0e408544a868a"
6337
  },
6338
  "dist": {
6339
  "type": "zip",
6340
- "url": "https://api.github.com/repos/wp-cli/scaffold-command/zipball/fe73e6f71c2a03908bb5ceac17a0e408544a868a",
6341
- "reference": "fe73e6f71c2a03908bb5ceac17a0e408544a868a",
6342
  "shasum": ""
6343
  },
6344
  "require": {
@@ -6388,20 +6496,20 @@
6388
  ],
6389
  "description": "Generates code for post types, taxonomies, blocks, plugins, child themes, etc.",
6390
  "homepage": "https://github.com/wp-cli/scaffold-command",
6391
- "time": "2019-11-12T11:32:15+00:00"
6392
  },
6393
  {
6394
  "name": "wp-cli/search-replace-command",
6395
- "version": "v2.0.5",
6396
  "source": {
6397
  "type": "git",
6398
  "url": "https://github.com/wp-cli/search-replace-command.git",
6399
- "reference": "d53ae0715d3701ef22826d5c7b46973a1b24e472"
6400
  },
6401
  "dist": {
6402
  "type": "zip",
6403
- "url": "https://api.github.com/repos/wp-cli/search-replace-command/zipball/d53ae0715d3701ef22826d5c7b46973a1b24e472",
6404
- "reference": "d53ae0715d3701ef22826d5c7b46973a1b24e472",
6405
  "shasum": ""
6406
  },
6407
  "require": {
@@ -6444,7 +6552,7 @@
6444
  ],
6445
  "description": "Searches/replaces strings in the database.",
6446
  "homepage": "https://github.com/wp-cli/search-replace-command",
6447
- "time": "2019-11-12T01:29:55+00:00"
6448
  },
6449
  {
6450
  "name": "wp-cli/server-command",
@@ -6612,20 +6720,20 @@
6612
  },
6613
  {
6614
  "name": "wp-cli/widget-command",
6615
- "version": "v2.0.2",
6616
  "source": {
6617
  "type": "git",
6618
  "url": "https://github.com/wp-cli/widget-command.git",
6619
- "reference": "58a1b2d2221cee852eb8a589535aaadb1217bb74"
6620
  },
6621
  "dist": {
6622
  "type": "zip",
6623
- "url": "https://api.github.com/repos/wp-cli/widget-command/zipball/58a1b2d2221cee852eb8a589535aaadb1217bb74",
6624
- "reference": "58a1b2d2221cee852eb8a589535aaadb1217bb74",
6625
  "shasum": ""
6626
  },
6627
  "require": {
6628
- "wp-cli/wp-cli": "^2"
6629
  },
6630
  "require-dev": {
6631
  "wp-cli/extension-command": "^1.2 || ^2",
@@ -6671,26 +6779,25 @@
6671
  ],
6672
  "description": "Adds, moves, and removes widgets; lists sidebars.",
6673
  "homepage": "https://github.com/wp-cli/widget-command",
6674
- "time": "2019-04-25T00:25:21+00:00"
6675
  },
6676
  {
6677
  "name": "wp-cli/wp-cli",
6678
- "version": "v2.4.0",
6679
  "source": {
6680
  "type": "git",
6681
  "url": "https://github.com/wp-cli/wp-cli.git",
6682
- "reference": "74c949c74708e3a88ad0add70f3236c8675dfd85"
6683
  },
6684
  "dist": {
6685
  "type": "zip",
6686
- "url": "https://api.github.com/repos/wp-cli/wp-cli/zipball/74c949c74708e3a88ad0add70f3236c8675dfd85",
6687
- "reference": "74c949c74708e3a88ad0add70f3236c8675dfd85",
6688
  "shasum": ""
6689
  },
6690
  "require": {
6691
- "cweagans/composer-patches": "^1.6",
6692
  "ext-curl": "*",
6693
- "mustache/mustache": "~2.4",
6694
  "php": "^5.4 || ^7.0",
6695
  "rmccue/requests": "~1.6",
6696
  "symfony/finder": ">2.7",
@@ -6717,11 +6824,6 @@
6717
  "extra": {
6718
  "branch-alias": {
6719
  "dev-master": "2.4.x-dev"
6720
- },
6721
- "patches": {
6722
- "mustache/mustache": {
6723
- "Avoid notices on PHP 7.4+": "https://patch-diff.githubusercontent.com/raw/bobthecow/mustache.php/pull/349.patch"
6724
- }
6725
  }
6726
  },
6727
  "autoload": {
@@ -6739,7 +6841,7 @@
6739
  "cli",
6740
  "wordpress"
6741
  ],
6742
- "time": "2019-11-12T15:26:05+00:00"
6743
  },
6744
  {
6745
  "name": "wp-cli/wp-cli-bundle",
@@ -6854,16 +6956,16 @@
6854
  },
6855
  {
6856
  "name": "wpdesk/wp-basic-requirements",
6857
- "version": "3.0.3.1",
6858
  "source": {
6859
  "type": "git",
6860
  "url": "https://gitlab.com/wpdesk/wp-basic-requirements.git",
6861
- "reference": "b9517207f48858d68c307b7c064116f92afb4bde"
6862
  },
6863
  "dist": {
6864
  "type": "zip",
6865
- "url": "https://gitlab.com/api/v4/projects/wpdesk%2Fwp-basic-requirements/repository/archive.zip?sha=b9517207f48858d68c307b7c064116f92afb4bde",
6866
- "reference": "b9517207f48858d68c307b7c064116f92afb4bde",
6867
  "shasum": ""
6868
  },
6869
  "require": {
@@ -6879,6 +6981,13 @@
6879
  "wp-coding-standards/wpcs": "^0.14.1"
6880
  },
6881
  "type": "library",
 
 
 
 
 
 
 
6882
  "notification-url": "https://packagist.org/downloads/",
6883
  "authors": [
6884
  {
@@ -6886,20 +6995,20 @@
6886
  "email": "krzysiek@wpdesk.pl"
6887
  }
6888
  ],
6889
- "time": "2019-09-20T09:54:34+00:00"
6890
  },
6891
  {
6892
  "name": "wpdesk/wp-builder",
6893
- "version": "1.3.2",
6894
  "source": {
6895
  "type": "git",
6896
  "url": "https://gitlab.com/wpdesk/wp-builder.git",
6897
- "reference": "455dd537c65ab474b2223320d295834c55b8925c"
6898
  },
6899
  "dist": {
6900
  "type": "zip",
6901
- "url": "https://gitlab.com/api/v4/projects/wpdesk%2Fwp-builder/repository/archive.zip?sha=455dd537c65ab474b2223320d295834c55b8925c",
6902
- "reference": "455dd537c65ab474b2223320d295834c55b8925c",
6903
  "shasum": ""
6904
  },
6905
  "require": {
@@ -6929,20 +7038,20 @@
6929
  "email": "krzysiek@wpdesk.pl"
6930
  }
6931
  ],
6932
- "time": "2019-09-18T14:51:51+00:00"
6933
  },
6934
  {
6935
  "name": "wpdesk/wp-codeception",
6936
- "version": "1.4.8",
6937
  "source": {
6938
  "type": "git",
6939
  "url": "https://gitlab.com/wpdesk/wp-codeception.git",
6940
- "reference": "34160e0bd07330ad1e9203e78a072ecae20b5b98"
6941
  },
6942
  "dist": {
6943
  "type": "zip",
6944
- "url": "https://gitlab.com/api/v4/projects/wpdesk%2Fwp-codeception/repository/archive.zip?sha=34160e0bd07330ad1e9203e78a072ecae20b5b98",
6945
- "reference": "34160e0bd07330ad1e9203e78a072ecae20b5b98",
6946
  "shasum": ""
6947
  },
6948
  "require": {
@@ -6988,7 +7097,7 @@
6988
  "codeception",
6989
  "wordpress"
6990
  ],
6991
- "time": "2019-12-13T15:48:39+00:00"
6992
  },
6993
  {
6994
  "name": "wpdesk/wp-logs",
@@ -7036,16 +7145,16 @@
7036
  },
7037
  {
7038
  "name": "wpdesk/wp-notice",
7039
- "version": "3.1.1",
7040
  "source": {
7041
  "type": "git",
7042
  "url": "https://gitlab.com/wpdesk/wp-notice.git",
7043
- "reference": "fe4d0a5f10613d98483cf28e25d9f8071c442d98"
7044
  },
7045
  "dist": {
7046
  "type": "zip",
7047
- "url": "https://gitlab.com/api/v4/projects/wpdesk%2Fwp-notice/repository/archive.zip?sha=fe4d0a5f10613d98483cf28e25d9f8071c442d98",
7048
- "reference": "fe4d0a5f10613d98483cf28e25d9f8071c442d98",
7049
  "shasum": ""
7050
  },
7051
  "require": {
@@ -7086,37 +7195,45 @@
7086
  "notice",
7087
  "wordpress"
7088
  ],
7089
- "time": "2019-07-30T13:07:37+00:00"
7090
  },
7091
  {
7092
  "name": "wpdesk/wp-plugin-flow",
7093
- "version": "2.1.0",
7094
  "source": {
7095
  "type": "git",
7096
  "url": "https://gitlab.com/wpdesk/wp-plugin-flow.git",
7097
- "reference": "2a95c2930027aa056f9890dc86d31d43847abf18"
7098
  },
7099
  "dist": {
7100
  "type": "zip",
7101
- "url": "https://gitlab.com/api/v4/projects/wpdesk%2Fwp-plugin-flow/repository/archive.zip?sha=2a95c2930027aa056f9890dc86d31d43847abf18",
7102
- "reference": "2a95c2930027aa056f9890dc86d31d43847abf18",
7103
  "shasum": ""
7104
  },
7105
  "require": {
7106
  "php": ">=5.6",
7107
  "wpdesk/wp-basic-requirements": "^3",
7108
- "wpdesk/wp-builder": "^1.3.2",
7109
- "wpdesk/wp-wpdesk-helper": "^2.0.3",
7110
- "wpdesk/wp-wpdesk-license": "^2.4",
7111
  "wpdesk/wp-wpdesk-tracker": "^2.0.4"
7112
  },
7113
  "require-dev": {
7114
  "10up/wp_mock": "^0.2",
7115
  "phpunit/phpunit": "<7",
7116
  "squizlabs/php_codesniffer": "^3.4.2",
7117
- "wp-coding-standards/wpcs": "^0.14.1"
 
7118
  },
7119
  "type": "library",
 
 
 
 
 
 
 
7120
  "autoload": {
7121
  "classmap": [
7122
  "src"
@@ -7129,25 +7246,27 @@
7129
  "email": "krzysiek@wpdesk.pl"
7130
  }
7131
  ],
7132
- "time": "2019-09-18T14:57:24+00:00"
7133
  },
7134
  {
7135
  "name": "wpdesk/wp-wpdesk-composer",
7136
- "version": "2.3.1",
7137
  "source": {
7138
  "type": "git",
7139
  "url": "https://gitlab.com/wpdesk/wp-wpdesk-composer.git",
7140
- "reference": "64a8f0d75369125dd4c2c2747262185d2dbbd886"
7141
  },
7142
  "dist": {
7143
  "type": "zip",
7144
- "url": "https://gitlab.com/api/v4/projects/wpdesk%2Fwp-wpdesk-composer/repository/archive.zip?sha=64a8f0d75369125dd4c2c2747262185d2dbbd886",
7145
- "reference": "64a8f0d75369125dd4c2c2747262185d2dbbd886",
7146
  "shasum": ""
7147
  },
7148
  "require": {
7149
  "composer-plugin-api": "^1.1",
7150
  "ext-json": "*",
 
 
7151
  "php": ">=5.6"
7152
  },
7153
  "require-dev": {
@@ -7169,28 +7288,29 @@
7169
  "email": "krzysiek@wpdesk.pl"
7170
  }
7171
  ],
7172
- "time": "2019-09-12T11:21:38+00:00"
7173
  },
7174
  {
7175
  "name": "wpdesk/wp-wpdesk-helper",
7176
- "version": "2.0.3",
7177
  "source": {
7178
  "type": "git",
7179
  "url": "https://gitlab.com/wpdesk/wp-wpdesk-helper.git",
7180
- "reference": "8bff0b7807c3af022e42b407e41ea2f2982f58ae"
7181
  },
7182
  "dist": {
7183
  "type": "zip",
7184
- "url": "https://gitlab.com/api/v4/projects/wpdesk%2Fwp-wpdesk-helper/repository/archive.zip?sha=8bff0b7807c3af022e42b407e41ea2f2982f58ae",
7185
- "reference": "8bff0b7807c3af022e42b407e41ea2f2982f58ae",
7186
  "shasum": ""
7187
  },
7188
  "require": {
7189
  "php": ">=5.6",
 
7190
  "wpdesk/wp-builder": "^1.2",
7191
  "wpdesk/wp-logs": "^1.6.0",
7192
  "wpdesk/wp-notice": "^3.1.1",
7193
- "wpdesk/wp-wpdesk-license": "^2.3.2",
7194
  "wpdesk/wp-wpdesk-tracker": "^2.0.4"
7195
  },
7196
  "require-dev": {
@@ -7202,6 +7322,13 @@
7202
  "wp-coding-standards/wpcs": "^0.14.1"
7203
  },
7204
  "type": "library",
 
 
 
 
 
 
 
7205
  "autoload": {
7206
  "psr-4": {
7207
  "WPDesk\\Helper\\": "src/"
@@ -7214,20 +7341,20 @@
7214
  "email": "krzysiek@wpdesk.pl"
7215
  }
7216
  ],
7217
- "time": "2019-08-17T15:23:53+00:00"
7218
  },
7219
  {
7220
  "name": "wpdesk/wp-wpdesk-license",
7221
- "version": "2.4",
7222
  "source": {
7223
  "type": "git",
7224
  "url": "https://gitlab.com/wpdesk/wp-wpdesk-license.git",
7225
- "reference": "992778321025e8f2cb4d85c83150cc757cfa619c"
7226
  },
7227
  "dist": {
7228
  "type": "zip",
7229
- "url": "https://gitlab.com/api/v4/projects/wpdesk%2Fwp-wpdesk-license/repository/archive.zip?sha=992778321025e8f2cb4d85c83150cc757cfa619c",
7230
- "reference": "992778321025e8f2cb4d85c83150cc757cfa619c",
7231
  "shasum": ""
7232
  },
7233
  "require": {
@@ -7245,6 +7372,13 @@
7245
  "wp-coding-standards/wpcs": "^0.14.1"
7246
  },
7247
  "type": "library",
 
 
 
 
 
 
 
7248
  "autoload": {
7249
  "classmap": [
7250
  "src/ApiManager"
@@ -7260,20 +7394,20 @@
7260
  "email": "krzysiek@wpdesk.pl"
7261
  }
7262
  ],
7263
- "time": "2019-09-18T14:35:26+00:00"
7264
  },
7265
  {
7266
  "name": "wpdesk/wp-wpdesk-tracker",
7267
- "version": "2.0.4",
7268
  "source": {
7269
  "type": "git",
7270
  "url": "https://gitlab.com/wpdesk/wp-wpdesk-tracker.git",
7271
- "reference": "47b1e4f97f7e129649b8cc8c2ae51d2bed7b24f1"
7272
  },
7273
  "dist": {
7274
  "type": "zip",
7275
- "url": "https://gitlab.com/api/v4/projects/wpdesk%2Fwp-wpdesk-tracker/repository/archive.zip?sha=47b1e4f97f7e129649b8cc8c2ae51d2bed7b24f1",
7276
- "reference": "47b1e4f97f7e129649b8cc8c2ae51d2bed7b24f1",
7277
  "shasum": ""
7278
  },
7279
  "require": {
@@ -7288,6 +7422,13 @@
7288
  "wp-coding-standards/wpcs": "^0.14.1"
7289
  },
7290
  "type": "library",
 
 
 
 
 
 
 
7291
  "autoload": {
7292
  "classmap": [
7293
  "src/"
@@ -7300,7 +7441,7 @@
7300
  "email": "krzysiek@wpdesk.pl"
7301
  }
7302
  ],
7303
- "time": "2019-08-17T11:23:37+00:00"
7304
  },
7305
  {
7306
  "name": "zordius/lightncandy",
8
  "packages": [
9
  {
10
  "name": "psr/log",
11
+ "version": "1.1.2",
12
  "source": {
13
  "type": "git",
14
  "url": "https://github.com/php-fig/log.git",
15
+ "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801"
16
  },
17
  "dist": {
18
  "type": "zip",
19
+ "url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801",
20
+ "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801",
21
  "shasum": ""
22
  },
23
  "require": {
26
  "type": "library",
27
  "extra": {
28
  "branch-alias": {
29
+ "dev-master": "1.1.x-dev"
30
  }
31
  },
32
  "autoload": {
51
  "psr",
52
  "psr-3"
53
  ],
54
+ "time": "2019-11-01T11:05:21+00:00"
55
  },
56
  {
57
  "name": "wpdesk/wp-wpdesk-helper-override",
175
  },
176
  {
177
  "name": "behat/gherkin",
178
+ "version": "v4.6.1",
179
  "source": {
180
  "type": "git",
181
  "url": "https://github.com/Behat/Gherkin.git",
182
+ "reference": "25bdcaf37898b4a939fa3031d5d753ced97e4759"
183
  },
184
  "dist": {
185
  "type": "zip",
186
+ "url": "https://api.github.com/repos/Behat/Gherkin/zipball/25bdcaf37898b4a939fa3031d5d753ced97e4759",
187
+ "reference": "25bdcaf37898b4a939fa3031d5d753ced97e4759",
188
  "shasum": ""
189
  },
190
  "require": {
230
  "gherkin",
231
  "parser"
232
  ],
233
+ "time": "2020-02-27T11:29:57+00:00"
234
  },
235
  {
236
  "name": "codeception/codeception",
330
  },
331
  {
332
  "name": "codeception/phpunit-wrapper",
333
+ "version": "6.0.18",
334
  "source": {
335
  "type": "git",
336
  "url": "https://github.com/Codeception/phpunit-wrapper.git",
337
+ "reference": "bc6e12f2e6990d22b55c63fbbb3a6f86292b945b"
338
  },
339
  "dist": {
340
  "type": "zip",
341
+ "url": "https://api.github.com/repos/Codeception/phpunit-wrapper/zipball/bc6e12f2e6990d22b55c63fbbb3a6f86292b945b",
342
+ "reference": "bc6e12f2e6990d22b55c63fbbb3a6f86292b945b",
343
  "shasum": ""
344
  },
345
  "require": {
372
  }
373
  ],
374
  "description": "PHPUnit classes used by Codeception",
375
+ "time": "2020-01-03T08:01:34+00:00"
376
  },
377
  {
378
  "name": "codeception/stub",
406
  },
407
  {
408
  "name": "composer/ca-bundle",
409
+ "version": "1.2.6",
410
  "source": {
411
  "type": "git",
412
  "url": "https://github.com/composer/ca-bundle.git",
413
+ "reference": "47fe531de31fca4a1b997f87308e7d7804348f7e"
414
  },
415
  "dist": {
416
  "type": "zip",
417
+ "url": "https://api.github.com/repos/composer/ca-bundle/zipball/47fe531de31fca4a1b997f87308e7d7804348f7e",
418
+ "reference": "47fe531de31fca4a1b997f87308e7d7804348f7e",
419
  "shasum": ""
420
  },
421
  "require": {
458
  "ssl",
459
  "tls"
460
  ],
461
+ "time": "2020-01-13T10:02:55+00:00"
462
  },
463
  {
464
  "name": "composer/composer",
465
+ "version": "1.9.3",
466
  "source": {
467
  "type": "git",
468
  "url": "https://github.com/composer/composer.git",
469
+ "reference": "1291a16ce3f48bfdeca39d64fca4875098af4d7b"
470
  },
471
  "dist": {
472
  "type": "zip",
473
+ "url": "https://api.github.com/repos/composer/composer/zipball/1291a16ce3f48bfdeca39d64fca4875098af4d7b",
474
+ "reference": "1291a16ce3f48bfdeca39d64fca4875098af4d7b",
475
  "shasum": ""
476
  },
477
  "require": {
538
  "dependency",
539
  "package"
540
  ],
541
+ "time": "2020-02-04T11:58:49+00:00"
542
  },
543
  {
544
  "name": "composer/semver",
545
+ "version": "1.5.1",
546
  "source": {
547
  "type": "git",
548
  "url": "https://github.com/composer/semver.git",
549
+ "reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de"
550
  },
551
  "dist": {
552
  "type": "zip",
553
+ "url": "https://api.github.com/repos/composer/semver/zipball/c6bea70230ef4dd483e6bbcab6005f682ed3a8de",
554
+ "reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de",
555
  "shasum": ""
556
  },
557
  "require": {
558
  "php": "^5.3.2 || ^7.0"
559
  },
560
  "require-dev": {
561
+ "phpunit/phpunit": "^4.5 || ^5.0.5"
 
562
  },
563
  "type": "library",
564
  "extra": {
599
  "validation",
600
  "versioning"
601
  ],
602
+ "time": "2020-01-13T12:06:48+00:00"
603
  },
604
  {
605
  "name": "composer/spdx-licenses",
606
+ "version": "1.5.3",
607
  "source": {
608
  "type": "git",
609
  "url": "https://github.com/composer/spdx-licenses.git",
610
+ "reference": "0c3e51e1880ca149682332770e25977c70cf9dae"
611
  },
612
  "dist": {
613
  "type": "zip",
614
+ "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/0c3e51e1880ca149682332770e25977c70cf9dae",
615
+ "reference": "0c3e51e1880ca149682332770e25977c70cf9dae",
616
  "shasum": ""
617
  },
618
  "require": {
659
  "spdx",
660
  "validator"
661
  ],
662
+ "time": "2020-02-14T07:44:31+00:00"
663
  },
664
  {
665
  "name": "composer/xdebug-handler",
666
+ "version": "1.4.1",
667
  "source": {
668
  "type": "git",
669
  "url": "https://github.com/composer/xdebug-handler.git",
670
+ "reference": "1ab9842d69e64fb3a01be6b656501032d1b78cb7"
671
  },
672
  "dist": {
673
  "type": "zip",
674
+ "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/1ab9842d69e64fb3a01be6b656501032d1b78cb7",
675
+ "reference": "1ab9842d69e64fb3a01be6b656501032d1b78cb7",
676
  "shasum": ""
677
  },
678
  "require": {
703
  "Xdebug",
704
  "performance"
705
  ],
706
+ "time": "2020-03-01T12:26:26+00:00"
707
  },
708
  {
709
  "name": "cweagans/composer-patches",
915
  "version": "1.7.1",
916
  "source": {
917
  "type": "git",
918
+ "url": "https://github.com/php-webdriver/php-webdriver-archive.git",
919
  "reference": "e43de70f3c7166169d0f14a374505392734160e5"
920
  },
921
  "dist": {
922
  "type": "zip",
923
+ "url": "https://api.github.com/repos/php-webdriver/php-webdriver-archive/zipball/e43de70f3c7166169d0f14a374505392734160e5",
924
  "reference": "e43de70f3c7166169d0f14a374505392734160e5",
925
  "shasum": ""
926
  },
968
  "selenium",
969
  "webdriver"
970
  ],
971
+ "abandoned": "php-webdriver/webdriver",
972
  "time": "2019-06-13T08:02:18+00:00"
973
  },
974
  {
1151
  },
1152
  {
1153
  "name": "guzzlehttp/guzzle",
1154
+ "version": "6.5.2",
1155
  "source": {
1156
  "type": "git",
1157
  "url": "https://github.com/guzzle/guzzle.git",
1158
+ "reference": "43ece0e75098b7ecd8d13918293029e555a50f82"
1159
  },
1160
  "dist": {
1161
  "type": "zip",
1162
+ "url": "https://api.github.com/repos/guzzle/guzzle/zipball/43ece0e75098b7ecd8d13918293029e555a50f82",
1163
+ "reference": "43ece0e75098b7ecd8d13918293029e555a50f82",
1164
  "shasum": ""
1165
  },
1166
  "require": {
1214
  "rest",
1215
  "web service"
1216
  ],
1217
+ "time": "2019-12-23T11:57:10+00:00"
1218
  },
1219
  {
1220
  "name": "guzzlehttp/promises",
2145
  },
2146
  {
2147
  "name": "lucatume/wp-browser",
2148
+ "version": "2.2.37",
2149
  "source": {
2150
  "type": "git",
2151
  "url": "https://github.com/lucatume/wp-browser.git",
2152
+ "reference": "8c4b6428f220dd159df0855f06c75957a6c5859b"
2153
  },
2154
  "dist": {
2155
  "type": "zip",
2156
+ "url": "https://api.github.com/repos/lucatume/wp-browser/zipball/8c4b6428f220dd159df0855f06c75957a6c5859b",
2157
+ "reference": "8c4b6428f220dd159df0855f06c75957a6c5859b",
2158
  "shasum": ""
2159
  },
2160
  "require": {
2177
  },
2178
  "require-dev": {
2179
  "erusev/parsedown": "^1.7",
2180
+ "lucatume/codeception-snapshot-assertions": "^0.2",
2181
  "mikey179/vfsstream": "^1.6",
2182
  "phpstan/phpstan": "^0.11.15",
2183
  "phpstan/phpstan-shim": "^0.11.15",
2215
  "codeception",
2216
  "wordpress"
2217
  ],
2218
+ "time": "2020-02-21T13:28:14+00:00"
2219
+ },
2220
+ {
2221
+ "name": "matthiasmullie/minify",
2222
+ "version": "1.3.63",
2223
+ "source": {
2224
+ "type": "git",
2225
+ "url": "https://github.com/matthiasmullie/minify.git",
2226
+ "reference": "9ba1b459828adc13430f4dd6c49dae4950dc4117"
2227
+ },
2228
+ "dist": {
2229
+ "type": "zip",
2230
+ "url": "https://api.github.com/repos/matthiasmullie/minify/zipball/9ba1b459828adc13430f4dd6c49dae4950dc4117",
2231
+ "reference": "9ba1b459828adc13430f4dd6c49dae4950dc4117",
2232
+ "shasum": ""
2233
+ },
2234
+ "require": {
2235
+ "ext-pcre": "*",
2236
+ "matthiasmullie/path-converter": "~1.1",
2237
+ "php": ">=5.3.0"
2238
+ },
2239
+ "require-dev": {
2240
+ "friendsofphp/php-cs-fixer": "~2.0",
2241
+ "matthiasmullie/scrapbook": "~1.0",
2242
+ "phpunit/phpunit": "~4.8"
2243
+ },
2244
+ "suggest": {
2245
+ "psr/cache-implementation": "Cache implementation to use with Minify::cache"
2246
+ },
2247
+ "bin": [
2248
+ "bin/minifycss",
2249
+ "bin/minifyjs"
2250
+ ],
2251
+ "type": "library",
2252
+ "autoload": {
2253
+ "psr-4": {
2254
+ "MatthiasMullie\\Minify\\": "src/"
2255
+ }
2256
+ },
2257
+ "notification-url": "https://packagist.org/downloads/",
2258
+ "license": [
2259
+ "MIT"
2260
+ ],
2261
+ "authors": [
2262
+ {
2263
+ "name": "Matthias Mullie",
2264
+ "email": "minify@mullie.eu",
2265
+ "homepage": "http://www.mullie.eu",
2266
+ "role": "Developer"
2267
+ }
2268
+ ],
2269
+ "description": "CSS & JavaScript minifier, in PHP. Removes whitespace, strips comments, combines files (incl. @import statements and small assets in CSS files), and optimizes/shortens a few common programming patterns.",
2270
+ "homepage": "http://www.minifier.org",
2271
+ "keywords": [
2272
+ "JS",
2273
+ "css",
2274
+ "javascript",
2275
+ "minifier",
2276
+ "minify"
2277
+ ],
2278
+ "time": "2020-01-21T20:21:08+00:00"
2279
+ },
2280
+ {
2281
+ "name": "matthiasmullie/path-converter",
2282
+ "version": "1.1.3",
2283
+ "source": {
2284
+ "type": "git",
2285
+ "url": "https://github.com/matthiasmullie/path-converter.git",
2286
+ "reference": "e7d13b2c7e2f2268e1424aaed02085518afa02d9"
2287
+ },
2288
+ "dist": {
2289
+ "type": "zip",
2290
+ "url": "https://api.github.com/repos/matthiasmullie/path-converter/zipball/e7d13b2c7e2f2268e1424aaed02085518afa02d9",
2291
+ "reference": "e7d13b2c7e2f2268e1424aaed02085518afa02d9",
2292
+ "shasum": ""
2293
+ },
2294
+ "require": {
2295
+ "ext-pcre": "*",
2296
+ "php": ">=5.3.0"
2297
+ },
2298
+ "require-dev": {
2299
+ "phpunit/phpunit": "~4.8"
2300
+ },
2301
+ "type": "library",
2302
+ "autoload": {
2303
+ "psr-4": {
2304
+ "MatthiasMullie\\PathConverter\\": "src/"
2305
+ }
2306
+ },
2307
+ "notification-url": "https://packagist.org/downloads/",
2308
+ "license": [
2309
+ "MIT"
2310
+ ],
2311
+ "authors": [
2312
+ {
2313
+ "name": "Matthias Mullie",
2314
+ "email": "pathconverter@mullie.eu",
2315
+ "homepage": "http://www.mullie.eu",
2316
+ "role": "Developer"
2317
+ }
2318
+ ],
2319
+ "description": "Relative path converter",
2320
+ "homepage": "http://github.com/matthiasmullie/path-converter",
2321
+ "keywords": [
2322
+ "converter",
2323
+ "path",
2324
+ "paths",
2325
+ "relative"
2326
+ ],
2327
+ "time": "2019-02-05T23:41:09+00:00"
2328
  },
2329
  {
2330
  "name": "mck89/peast",
2331
+ "version": "v1.10.1",
2332
  "source": {
2333
  "type": "git",
2334
  "url": "https://github.com/mck89/peast.git",
2335
+ "reference": "461fbe96212ac1b511f527fd11b942e976429398"
2336
  },
2337
  "dist": {
2338
  "type": "zip",
2339
+ "url": "https://api.github.com/repos/mck89/peast/zipball/461fbe96212ac1b511f527fd11b942e976429398",
2340
+ "reference": "461fbe96212ac1b511f527fd11b942e976429398",
2341
  "shasum": ""
2342
  },
2343
  "require": {
2349
  "type": "library",
2350
  "extra": {
2351
  "branch-alias": {
2352
+ "dev-master": "1.10.1-dev"
2353
  }
2354
  },
2355
  "autoload": {
2369
  }
2370
  ],
2371
  "description": "Peast is PHP library that generates AST for JavaScript code",
2372
+ "time": "2019-12-22T16:46:42+00:00"
2373
  },
2374
  {
2375
  "name": "mikemclin/laravel-wp-password",
2502
  },
2503
  {
2504
  "name": "monolog/monolog",
2505
+ "version": "1.25.3",
2506
  "source": {
2507
  "type": "git",
2508
  "url": "https://github.com/Seldaek/monolog.git",
2509
+ "reference": "fa82921994db851a8becaf3787a9e73c5976b6f1"
2510
  },
2511
  "dist": {
2512
  "type": "zip",
2513
+ "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fa82921994db851a8becaf3787a9e73c5976b6f1",
2514
+ "reference": "fa82921994db851a8becaf3787a9e73c5976b6f1",
2515
  "shasum": ""
2516
  },
2517
  "require": {
2576
  "logging",
2577
  "psr-3"
2578
  ],
2579
+ "time": "2019-12-20T14:15:16+00:00"
2580
  },
2581
  {
2582
  "name": "mustache/mustache",
2961
  },
2962
  {
2963
  "name": "phpspec/prophecy",
2964
+ "version": "v1.10.3",
2965
  "source": {
2966
  "type": "git",
2967
  "url": "https://github.com/phpspec/prophecy.git",
2968
+ "reference": "451c3cd1418cf640de218914901e51b064abb093"
2969
  },
2970
  "dist": {
2971
  "type": "zip",
2972
+ "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
2973
+ "reference": "451c3cd1418cf640de218914901e51b064abb093",
2974
  "shasum": ""
2975
  },
2976
  "require": {
2977
  "doctrine/instantiator": "^1.0.2",
2978
  "php": "^5.3|^7.0",
2979
+ "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
2980
+ "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
2981
+ "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
2982
  },
2983
  "require-dev": {
2984
+ "phpspec/phpspec": "^2.5 || ^3.2",
2985
  "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
2986
  },
2987
  "type": "library",
2988
  "extra": {
2989
  "branch-alias": {
2990
+ "dev-master": "1.10.x-dev"
2991
  }
2992
  },
2993
  "autoload": {
3020
  "spy",
3021
  "stub"
3022
  ],
3023
+ "time": "2020-03-05T15:02:03+00:00"
3024
  },
3025
  {
3026
  "name": "phpunit/php-code-coverage",
4116
  },
4117
  {
4118
  "name": "seld/phar-utils",
4119
+ "version": "1.1.0",
4120
  "source": {
4121
  "type": "git",
4122
  "url": "https://github.com/Seldaek/phar-utils.git",
4123
+ "reference": "8800503d56b9867d43d9c303b9cbcc26016e82f0"
4124
  },
4125
  "dist": {
4126
  "type": "zip",
4127
+ "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/8800503d56b9867d43d9c303b9cbcc26016e82f0",
4128
+ "reference": "8800503d56b9867d43d9c303b9cbcc26016e82f0",
4129
  "shasum": ""
4130
  },
4131
  "require": {
4154
  ],
4155
  "description": "PHAR file format utilities, for when PHP phars you up",
4156
  "keywords": [
4157
+ "phar"
4158
  ],
4159
+ "time": "2020-02-14T15:25:33+00:00"
4160
  },
4161
  {
4162
  "name": "symfony/browser-kit",
4163
+ "version": "v3.4.38",
4164
  "source": {
4165
  "type": "git",
4166
  "url": "https://github.com/symfony/browser-kit.git",
4167
+ "reference": "ede0c5fa204586e3fa51053fbea9cea8a5a3ee8b"
4168
  },
4169
  "dist": {
4170
  "type": "zip",
4171
+ "url": "https://api.github.com/repos/symfony/browser-kit/zipball/ede0c5fa204586e3fa51053fbea9cea8a5a3ee8b",
4172
+ "reference": "ede0c5fa204586e3fa51053fbea9cea8a5a3ee8b",
4173
  "shasum": ""
4174
  },
4175
  "require": {
4213
  ],
4214
  "description": "Symfony BrowserKit Component",
4215
  "homepage": "https://symfony.com",
4216
+ "time": "2020-01-01T11:03:25+00:00"
4217
  },
4218
  {
4219
  "name": "symfony/console",
4220
+ "version": "v3.4.38",
4221
  "source": {
4222
  "type": "git",
4223
  "url": "https://github.com/symfony/console.git",
4224
+ "reference": "6827023c5872bea44b29d145de693b21981cf4cd"
4225
  },
4226
  "dist": {
4227
  "type": "zip",
4228
+ "url": "https://api.github.com/repos/symfony/console/zipball/6827023c5872bea44b29d145de693b21981cf4cd",
4229
+ "reference": "6827023c5872bea44b29d145de693b21981cf4cd",
4230
  "shasum": ""
4231
  },
4232
  "require": {
4285
  ],
4286
  "description": "Symfony Console Component",
4287
  "homepage": "https://symfony.com",
4288
+ "time": "2020-02-15T13:27:16+00:00"
4289
  },
4290
  {
4291
  "name": "symfony/css-selector",
4292
+ "version": "v3.4.38",
4293
  "source": {
4294
  "type": "git",
4295
  "url": "https://github.com/symfony/css-selector.git",
4296
+ "reference": "ee9b946e7223b11257329a054c64396b19d619e1"
4297
  },
4298
  "dist": {
4299
  "type": "zip",
4300
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/ee9b946e7223b11257329a054c64396b19d619e1",
4301
+ "reference": "ee9b946e7223b11257329a054c64396b19d619e1",
4302
  "shasum": ""
4303
  },
4304
  "require": {
4338
  ],
4339
  "description": "Symfony CssSelector Component",
4340
  "homepage": "https://symfony.com",
4341
+ "time": "2020-02-04T08:04:52+00:00"
4342
  },
4343
  {
4344
  "name": "symfony/debug",
4345
+ "version": "v3.4.38",
4346
  "source": {
4347
  "type": "git",
4348
  "url": "https://github.com/symfony/debug.git",
4349
+ "reference": "a99278d50af8a9164219da38d61fb161a7f6e0a6"
4350
  },
4351
  "dist": {
4352
  "type": "zip",
4353
+ "url": "https://api.github.com/repos/symfony/debug/zipball/a99278d50af8a9164219da38d61fb161a7f6e0a6",
4354
+ "reference": "a99278d50af8a9164219da38d61fb161a7f6e0a6",
4355
  "shasum": ""
4356
  },
4357
  "require": {
4394
  ],
4395
  "description": "Symfony Debug Component",
4396
  "homepage": "https://symfony.com",
4397
+ "time": "2020-02-03T15:10:40+00:00"
4398
  },
4399
  {
4400
  "name": "symfony/dom-crawler",
4401
+ "version": "v3.4.38",
4402
  "source": {
4403
  "type": "git",
4404
  "url": "https://github.com/symfony/dom-crawler.git",
4405
+ "reference": "5ea08fead7392bc5bfe83fb8a289ac9b72cb689e"
4406
  },
4407
  "dist": {
4408
  "type": "zip",
4409
+ "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/5ea08fead7392bc5bfe83fb8a289ac9b72cb689e",
4410
+ "reference": "5ea08fead7392bc5bfe83fb8a289ac9b72cb689e",
4411
  "shasum": ""
4412
  },
4413
  "require": {
4451
  ],
4452
  "description": "Symfony DomCrawler Component",
4453
  "homepage": "https://symfony.com",
4454
+ "time": "2020-02-26T17:12:32+00:00"
4455
  },
4456
  {
4457
  "name": "symfony/event-dispatcher",
4458
+ "version": "v3.4.38",
4459
  "source": {
4460
  "type": "git",
4461
  "url": "https://github.com/symfony/event-dispatcher.git",
4462
+ "reference": "2f67a869aef3eecf42e7f8be4a8b86c92308686c"
4463
  },
4464
  "dist": {
4465
  "type": "zip",
4466
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/2f67a869aef3eecf42e7f8be4a8b86c92308686c",
4467
+ "reference": "2f67a869aef3eecf42e7f8be4a8b86c92308686c",
4468
  "shasum": ""
4469
  },
4470
  "require": {
4514
  ],
4515
  "description": "Symfony EventDispatcher Component",
4516
  "homepage": "https://symfony.com",
4517
+ "time": "2020-02-04T08:04:52+00:00"
4518
  },
4519
  {
4520
  "name": "symfony/filesystem",
4521
+ "version": "v3.4.38",
4522
  "source": {
4523
  "type": "git",
4524
  "url": "https://github.com/symfony/filesystem.git",
4525
+ "reference": "0a0d3b4bda11aa3a0464531c40e681e184e75628"
4526
  },
4527
  "dist": {
4528
  "type": "zip",
4529
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/0a0d3b4bda11aa3a0464531c40e681e184e75628",
4530
+ "reference": "0a0d3b4bda11aa3a0464531c40e681e184e75628",
4531
  "shasum": ""
4532
  },
4533
  "require": {
4564
  ],
4565
  "description": "Symfony Filesystem Component",
4566
  "homepage": "https://symfony.com",
4567
+ "time": "2020-01-17T08:50:08+00:00"
4568
  },
4569
  {
4570
  "name": "symfony/finder",
4571
+ "version": "v3.4.38",
4572
  "source": {
4573
  "type": "git",
4574
  "url": "https://github.com/symfony/finder.git",
4575
+ "reference": "5ec813ccafa8164ef21757e8c725d3a57da59200"
4576
  },
4577
  "dist": {
4578
  "type": "zip",
4579
+ "url": "https://api.github.com/repos/symfony/finder/zipball/5ec813ccafa8164ef21757e8c725d3a57da59200",
4580
+ "reference": "5ec813ccafa8164ef21757e8c725d3a57da59200",
4581
  "shasum": ""
4582
  },
4583
  "require": {
4613
  ],
4614
  "description": "Symfony Finder Component",
4615
  "homepage": "https://symfony.com",
4616
+ "time": "2020-02-14T07:34:21+00:00"
4617
  },
4618
  {
4619
  "name": "symfony/polyfill-ctype",
4620
+ "version": "v1.14.0",
4621
  "source": {
4622
  "type": "git",
4623
  "url": "https://github.com/symfony/polyfill-ctype.git",
4624
+ "reference": "fbdeaec0df06cf3d51c93de80c7eb76e271f5a38"
4625
  },
4626
  "dist": {
4627
  "type": "zip",
4628
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/fbdeaec0df06cf3d51c93de80c7eb76e271f5a38",
4629
+ "reference": "fbdeaec0df06cf3d51c93de80c7eb76e271f5a38",
4630
  "shasum": ""
4631
  },
4632
  "require": {
4638
  "type": "library",
4639
  "extra": {
4640
  "branch-alias": {
4641
+ "dev-master": "1.14-dev"
4642
  }
4643
  },
4644
  "autoload": {
4671
  "polyfill",
4672
  "portable"
4673
  ],
4674
+ "time": "2020-01-13T11:15:53+00:00"
4675
  },
4676
  {
4677
  "name": "symfony/polyfill-mbstring",
4678
+ "version": "v1.14.0",
4679
  "source": {
4680
  "type": "git",
4681
  "url": "https://github.com/symfony/polyfill-mbstring.git",
4682
+ "reference": "34094cfa9abe1f0f14f48f490772db7a775559f2"
4683
  },
4684
  "dist": {
4685
  "type": "zip",
4686
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/34094cfa9abe1f0f14f48f490772db7a775559f2",
4687
+ "reference": "34094cfa9abe1f0f14f48f490772db7a775559f2",
4688
  "shasum": ""
4689
  },
4690
  "require": {
4696
  "type": "library",
4697
  "extra": {
4698
  "branch-alias": {
4699
+ "dev-master": "1.14-dev"
4700
  }
4701
  },
4702
  "autoload": {
4730
  "portable",
4731
  "shim"
4732
  ],
4733
+ "time": "2020-01-13T11:15:53+00:00"
4734
  },
4735
  {
4736
  "name": "symfony/process",
4737
+ "version": "v3.4.38",
4738
  "source": {
4739
  "type": "git",
4740
  "url": "https://github.com/symfony/process.git",
4741
+ "reference": "b03b02dcea26ba4c65c16a73bab4f00c186b13da"
4742
  },
4743
  "dist": {
4744
  "type": "zip",
4745
+ "url": "https://api.github.com/repos/symfony/process/zipball/b03b02dcea26ba4c65c16a73bab4f00c186b13da",
4746
+ "reference": "b03b02dcea26ba4c65c16a73bab4f00c186b13da",
4747
  "shasum": ""
4748
  },
4749
  "require": {
4779
  ],
4780
  "description": "Symfony Process Component",
4781
  "homepage": "https://symfony.com",
4782
+ "time": "2020-02-04T08:04:52+00:00"
4783
  },
4784
  {
4785
  "name": "symfony/yaml",
4786
+ "version": "v3.4.38",
4787
  "source": {
4788
  "type": "git",
4789
  "url": "https://github.com/symfony/yaml.git",
4790
+ "reference": "bc63e15160866e8730a1f738541b194c401f72bf"
4791
  },
4792
  "dist": {
4793
  "type": "zip",
4794
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/bc63e15160866e8730a1f738541b194c401f72bf",
4795
+ "reference": "bc63e15160866e8730a1f738541b194c401f72bf",
4796
  "shasum": ""
4797
  },
4798
  "require": {
4838
  ],
4839
  "description": "Symfony Yaml Component",
4840
  "homepage": "https://symfony.com",
4841
+ "time": "2020-01-16T19:04:26+00:00"
4842
  },
4843
  {
4844
  "name": "vlucas/phpdotenv",
4947
  },
4948
  {
4949
  "name": "webmozart/assert",
4950
+ "version": "1.7.0",
4951
  "source": {
4952
  "type": "git",
4953
  "url": "https://github.com/webmozart/assert.git",
4954
+ "reference": "aed98a490f9a8f78468232db345ab9cf606cf598"
4955
  },
4956
  "dist": {
4957
  "type": "zip",
4958
+ "url": "https://api.github.com/repos/webmozart/assert/zipball/aed98a490f9a8f78468232db345ab9cf606cf598",
4959
+ "reference": "aed98a490f9a8f78468232db345ab9cf606cf598",
4960
  "shasum": ""
4961
  },
4962
  "require": {
4963
  "php": "^5.3.3 || ^7.0",
4964
  "symfony/polyfill-ctype": "^1.8"
4965
  },
4966
+ "conflict": {
4967
+ "vimeo/psalm": "<3.6.0"
4968
+ },
4969
  "require-dev": {
4970
  "phpunit/phpunit": "^4.8.36 || ^7.5.13"
4971
  },
4972
  "type": "library",
 
 
 
 
 
4973
  "autoload": {
4974
  "psr-4": {
4975
  "Webmozart\\Assert\\": "src/"
4991
  "check",
4992
  "validate"
4993
  ],
4994
+ "time": "2020-02-14T12:15:55+00:00"
4995
  },
4996
  {
4997
  "name": "wp-cli/cache-command",
5255
  },
5256
  {
5257
  "name": "wp-cli/cron-command",
5258
+ "version": "v2.0.4",
5259
  "source": {
5260
  "type": "git",
5261
  "url": "https://github.com/wp-cli/cron-command.git",
5262
+ "reference": "184ce82dfd6e7284a73f039ae39cf51a5f73174e"
5263
  },
5264
  "dist": {
5265
  "type": "zip",
5266
+ "url": "https://api.github.com/repos/wp-cli/cron-command/zipball/184ce82dfd6e7284a73f039ae39cf51a5f73174e",
5267
+ "reference": "184ce82dfd6e7284a73f039ae39cf51a5f73174e",
5268
  "shasum": ""
5269
  },
5270
  "require": {
5289
  "cron event run",
5290
  "cron event schedule",
5291
  "cron schedule",
5292
+ "cron schedule list",
5293
+ "cron event unschedule"
5294
  ]
5295
  },
5296
  "autoload": {
5314
  ],
5315
  "description": "Tests, runs, and deletes WP-Cron events; manages WP-Cron schedules.",
5316
  "homepage": "https://github.com/wp-cli/cron-command",
5317
+ "time": "2019-12-17T17:53:36+00:00"
5318
  },
5319
  {
5320
  "name": "wp-cli/db-command",
5321
+ "version": "v2.0.6",
5322
  "source": {
5323
  "type": "git",
5324
  "url": "https://github.com/wp-cli/db-command.git",
5325
+ "reference": "8e3cd46987241ed97ddb7f682b3505dff8d6dce4"
5326
  },
5327
  "dist": {
5328
  "type": "zip",
5329
+ "url": "https://api.github.com/repos/wp-cli/db-command/zipball/8e3cd46987241ed97ddb7f682b3505dff8d6dce4",
5330
+ "reference": "8e3cd46987241ed97ddb7f682b3505dff8d6dce4",
5331
  "shasum": ""
5332
  },
5333
  "require": {
5384
  ],
5385
  "description": "Performs basic database operations using credentials stored in wp-config.php.",
5386
  "homepage": "https://github.com/wp-cli/db-command",
5387
+ "time": "2020-01-28T16:39:32+00:00"
5388
  },
5389
  {
5390
  "name": "wp-cli/embed-command",
5657
  },
5658
  {
5659
  "name": "wp-cli/eval-command",
5660
+ "version": "v2.0.6",
5661
  "source": {
5662
  "type": "git",
5663
  "url": "https://github.com/wp-cli/eval-command.git",
5664
+ "reference": "d379732f9899387a6a631ccea5116b3da6f16300"
5665
  },
5666
  "dist": {
5667
  "type": "zip",
5668
+ "url": "https://api.github.com/repos/wp-cli/eval-command/zipball/d379732f9899387a6a631ccea5116b3da6f16300",
5669
+ "reference": "d379732f9899387a6a631ccea5116b3da6f16300",
5670
  "shasum": ""
5671
  },
5672
  "require": {
5707
  ],
5708
  "description": "Executes arbitrary PHP code or files.",
5709
  "homepage": "https://github.com/wp-cli/eval-command",
5710
+ "time": "2020-02-06T11:24:47+00:00"
5711
  },
5712
  {
5713
  "name": "wp-cli/export-command",
5769
  },
5770
  {
5771
  "name": "wp-cli/extension-command",
5772
+ "version": "v2.0.8",
5773
  "source": {
5774
  "type": "git",
5775
  "url": "https://github.com/wp-cli/extension-command.git",
5776
+ "reference": "3f55805356ccc502f38a24f224b8943f181d4813"
5777
  },
5778
  "dist": {
5779
  "type": "zip",
5780
+ "url": "https://api.github.com/repos/wp-cli/extension-command/zipball/3f55805356ccc502f38a24f224b8943f181d4813",
5781
+ "reference": "3f55805356ccc502f38a24f224b8943f181d4813",
5782
  "shasum": ""
5783
  },
5784
  "require": {
5852
  ],
5853
  "description": "Manages plugins and themes, including installs, activations, and updates.",
5854
  "homepage": "https://github.com/wp-cli/extension-command",
5855
+ "time": "2020-02-24T02:53:35+00:00"
5856
  },
5857
  {
5858
  "name": "wp-cli/i18n-command",
5859
+ "version": "v2.2.2",
5860
  "source": {
5861
  "type": "git",
5862
  "url": "https://github.com/wp-cli/i18n-command.git",
5863
+ "reference": "2804c5246d9338da59951737b03c54d257be8e47"
5864
  },
5865
  "dist": {
5866
  "type": "zip",
5867
+ "url": "https://api.github.com/repos/wp-cli/i18n-command/zipball/2804c5246d9338da59951737b03c54d257be8e47",
5868
+ "reference": "2804c5246d9338da59951737b03c54d257be8e47",
5869
  "shasum": ""
5870
  },
5871
  "require": {
5909
  ],
5910
  "description": "Provides internationalization tools for WordPress projects.",
5911
  "homepage": "https://github.com/wp-cli/i18n-command",
5912
+ "time": "2019-12-13T09:00:43+00:00"
5913
  },
5914
  {
5915
  "name": "wp-cli/import-command",
6207
  },
6208
  {
6209
  "name": "wp-cli/package-command",
6210
+ "version": "v2.0.6",
6211
  "source": {
6212
  "type": "git",
6213
  "url": "https://github.com/wp-cli/package-command.git",
6214
+ "reference": "92a0d7f2f4b54ad2aeff2292baaa96ba8f93f37a"
6215
  },
6216
  "dist": {
6217
  "type": "zip",
6218
+ "url": "https://api.github.com/repos/wp-cli/package-command/zipball/92a0d7f2f4b54ad2aeff2292baaa96ba8f93f37a",
6219
+ "reference": "92a0d7f2f4b54ad2aeff2292baaa96ba8f93f37a",
6220
  "shasum": ""
6221
  },
6222
  "require": {
6264
  ],
6265
  "description": "Lists, installs, and removes WP-CLI packages.",
6266
  "homepage": "https://github.com/wp-cli/package-command",
6267
+ "time": "2020-01-28T12:55:09+00:00"
6268
  },
6269
  {
6270
  "name": "wp-cli/php-cli-tools",
6437
  },
6438
  {
6439
  "name": "wp-cli/scaffold-command",
6440
+ "version": "v2.0.8",
6441
  "source": {
6442
  "type": "git",
6443
  "url": "https://github.com/wp-cli/scaffold-command.git",
6444
+ "reference": "4814acbdf3d7af499530cc1ae1e82f3ed9f12674"
6445
  },
6446
  "dist": {
6447
  "type": "zip",
6448
+ "url": "https://api.github.com/repos/wp-cli/scaffold-command/zipball/4814acbdf3d7af499530cc1ae1e82f3ed9f12674",
6449
+ "reference": "4814acbdf3d7af499530cc1ae1e82f3ed9f12674",
6450
  "shasum": ""
6451
  },
6452
  "require": {
6496
  ],
6497
  "description": "Generates code for post types, taxonomies, blocks, plugins, child themes, etc.",
6498
  "homepage": "https://github.com/wp-cli/scaffold-command",
6499
+ "time": "2019-11-25T13:26:31+00:00"
6500
  },
6501
  {
6502
  "name": "wp-cli/search-replace-command",
6503
+ "version": "v2.0.6",
6504
  "source": {
6505
  "type": "git",
6506
  "url": "https://github.com/wp-cli/search-replace-command.git",
6507
+ "reference": "f446ca1f90144b496dbacb373868118ba40df028"
6508
  },
6509
  "dist": {
6510
  "type": "zip",
6511
+ "url": "https://api.github.com/repos/wp-cli/search-replace-command/zipball/f446ca1f90144b496dbacb373868118ba40df028",
6512
+ "reference": "f446ca1f90144b496dbacb373868118ba40df028",
6513
  "shasum": ""
6514
  },
6515
  "require": {
6552
  ],
6553
  "description": "Searches/replaces strings in the database.",
6554
  "homepage": "https://github.com/wp-cli/search-replace-command",
6555
+ "time": "2019-12-13T09:13:20+00:00"
6556
  },
6557
  {
6558
  "name": "wp-cli/server-command",
6720
  },
6721
  {
6722
  "name": "wp-cli/widget-command",
6723
+ "version": "v2.1.0",
6724
  "source": {
6725
  "type": "git",
6726
  "url": "https://github.com/wp-cli/widget-command.git",
6727
+ "reference": "ddbc2c3e9966fae8de05a3200b04e0faf42fe06f"
6728
  },
6729
  "dist": {
6730
  "type": "zip",
6731
+ "url": "https://api.github.com/repos/wp-cli/widget-command/zipball/ddbc2c3e9966fae8de05a3200b04e0faf42fe06f",
6732
+ "reference": "ddbc2c3e9966fae8de05a3200b04e0faf42fe06f",
6733
  "shasum": ""
6734
  },
6735
  "require": {
6736
+ "wp-cli/wp-cli": "^2.4"
6737
  },
6738
  "require-dev": {
6739
  "wp-cli/extension-command": "^1.2 || ^2",
6779
  ],
6780
  "description": "Adds, moves, and removes widgets; lists sidebars.",
6781
  "homepage": "https://github.com/wp-cli/widget-command",
6782
+ "time": "2020-01-18T02:17:30+00:00"
6783
  },
6784
  {
6785
  "name": "wp-cli/wp-cli",
6786
+ "version": "v2.4.1",
6787
  "source": {
6788
  "type": "git",
6789
  "url": "https://github.com/wp-cli/wp-cli.git",
6790
+ "reference": "ceb18598e79befa9b2a37a51efbb34910628988b"
6791
  },
6792
  "dist": {
6793
  "type": "zip",
6794
+ "url": "https://api.github.com/repos/wp-cli/wp-cli/zipball/ceb18598e79befa9b2a37a51efbb34910628988b",
6795
+ "reference": "ceb18598e79befa9b2a37a51efbb34910628988b",
6796
  "shasum": ""
6797
  },
6798
  "require": {
 
6799
  "ext-curl": "*",
6800
+ "mustache/mustache": "~2.13",
6801
  "php": "^5.4 || ^7.0",
6802
  "rmccue/requests": "~1.6",
6803
  "symfony/finder": ">2.7",
6824
  "extra": {
6825
  "branch-alias": {
6826
  "dev-master": "2.4.x-dev"
 
 
 
 
 
6827
  }
6828
  },
6829
  "autoload": {
6841
  "cli",
6842
  "wordpress"
6843
  ],
6844
+ "time": "2020-02-18T08:15:37+00:00"
6845
  },
6846
  {
6847
  "name": "wp-cli/wp-cli-bundle",
6956
  },
6957
  {
6958
  "name": "wpdesk/wp-basic-requirements",
6959
+ "version": "3.2.2",
6960
  "source": {
6961
  "type": "git",
6962
  "url": "https://gitlab.com/wpdesk/wp-basic-requirements.git",
6963
+ "reference": "abf5fb85ac47324b8f4d5cc4088f89e0bda52d9d"
6964
  },
6965
  "dist": {
6966
  "type": "zip",
6967
+ "url": "https://gitlab.com/api/v4/projects/wpdesk%2Fwp-basic-requirements/repository/archive.zip?sha=abf5fb85ac47324b8f4d5cc4088f89e0bda52d9d",
6968
+ "reference": "abf5fb85ac47324b8f4d5cc4088f89e0bda52d9d",
6969
  "shasum": ""
6970
  },
6971
  "require": {
6981
  "wp-coding-standards/wpcs": "^0.14.1"
6982
  },
6983
  "type": "library",
6984
+ "extra": {
6985
+ "text-domain": "wp-basic-requirements",
6986
+ "translations-folder": "lang",
6987
+ "po-files": {
6988
+ "pl_PL": "wp-basic-requirements-pl_PL.po"
6989
+ }
6990
+ },
6991
  "notification-url": "https://packagist.org/downloads/",
6992
  "authors": [
6993
  {
6995
  "email": "krzysiek@wpdesk.pl"
6996
  }
6997
  ],
6998
+ "time": "2019-12-17T13:58:01+00:00"
6999
  },
7000
  {
7001
  "name": "wpdesk/wp-builder",
7002
+ "version": "1.4.1",
7003
  "source": {
7004
  "type": "git",
7005
  "url": "https://gitlab.com/wpdesk/wp-builder.git",
7006
+ "reference": "707313bffb1e36dcda20140dfe431dcb1ece60df"
7007
  },
7008
  "dist": {
7009
  "type": "zip",
7010
+ "url": "https://gitlab.com/api/v4/projects/wpdesk%2Fwp-builder/repository/archive.zip?sha=707313bffb1e36dcda20140dfe431dcb1ece60df",
7011
+ "reference": "707313bffb1e36dcda20140dfe431dcb1ece60df",
7012
  "shasum": ""
7013
  },
7014
  "require": {
7038
  "email": "krzysiek@wpdesk.pl"
7039
  }
7040
  ],
7041
+ "time": "2019-11-20T08:08:49+00:00"
7042
  },
7043
  {
7044
  "name": "wpdesk/wp-codeception",
7045
+ "version": "1.4.15",
7046
  "source": {
7047
  "type": "git",
7048
  "url": "https://gitlab.com/wpdesk/wp-codeception.git",
7049
+ "reference": "bef3b7eeb1aaf371914c8aa6da6ae133a71cb237"
7050
  },
7051
  "dist": {
7052
  "type": "zip",
7053
+ "url": "https://gitlab.com/api/v4/projects/wpdesk%2Fwp-codeception/repository/archive.zip?sha=bef3b7eeb1aaf371914c8aa6da6ae133a71cb237",
7054
+ "reference": "bef3b7eeb1aaf371914c8aa6da6ae133a71cb237",
7055
  "shasum": ""
7056
  },
7057
  "require": {
7097
  "codeception",
7098
  "wordpress"
7099
  ],
7100
+ "time": "2020-02-25T09:56:49+00:00"
7101
  },
7102
  {
7103
  "name": "wpdesk/wp-logs",
7145
  },
7146
  {
7147
  "name": "wpdesk/wp-notice",
7148
+ "version": "3.1.3",
7149
  "source": {
7150
  "type": "git",
7151
  "url": "https://gitlab.com/wpdesk/wp-notice.git",
7152
+ "reference": "bd062f56852a6206ae23f0c635ee7c97aa553438"
7153
  },
7154
  "dist": {
7155
  "type": "zip",
7156
+ "url": "https://gitlab.com/api/v4/projects/wpdesk%2Fwp-notice/repository/archive.zip?sha=bd062f56852a6206ae23f0c635ee7c97aa553438",
7157
+ "reference": "bd062f56852a6206ae23f0c635ee7c97aa553438",
7158
  "shasum": ""
7159
  },
7160
  "require": {
7195
  "notice",
7196
  "wordpress"
7197
  ],
7198
+ "time": "2020-03-06T11:09:25+00:00"
7199
  },
7200
  {
7201
  "name": "wpdesk/wp-plugin-flow",
7202
+ "version": "2.4.0",
7203
  "source": {
7204
  "type": "git",
7205
  "url": "https://gitlab.com/wpdesk/wp-plugin-flow.git",
7206
+ "reference": "3d3e2103711ebe91e77829b75366dfe8e103b745"
7207
  },
7208
  "dist": {
7209
  "type": "zip",
7210
+ "url": "https://gitlab.com/api/v4/projects/wpdesk%2Fwp-plugin-flow/repository/archive.zip?sha=3d3e2103711ebe91e77829b75366dfe8e103b745",
7211
+ "reference": "3d3e2103711ebe91e77829b75366dfe8e103b745",
7212
  "shasum": ""
7213
  },
7214
  "require": {
7215
  "php": ">=5.6",
7216
  "wpdesk/wp-basic-requirements": "^3",
7217
+ "wpdesk/wp-builder": "^1.4",
7218
+ "wpdesk/wp-wpdesk-helper": "^2.1",
7219
+ "wpdesk/wp-wpdesk-license": "^2.6",
7220
  "wpdesk/wp-wpdesk-tracker": "^2.0.4"
7221
  },
7222
  "require-dev": {
7223
  "10up/wp_mock": "^0.2",
7224
  "phpunit/phpunit": "<7",
7225
  "squizlabs/php_codesniffer": "^3.4.2",
7226
+ "wp-coding-standards/wpcs": "^0.14.1",
7227
+ "wpdesk/wp-wpdesk-composer": "^2.3"
7228
  },
7229
  "type": "library",
7230
+ "extra": {
7231
+ "text-domain": "wp-plugin-flow",
7232
+ "translations-folder": "lang",
7233
+ "po-files": {
7234
+ "pl_PL": "pl_PL.po"
7235
+ }
7236
+ },
7237
  "autoload": {
7238
  "classmap": [
7239
  "src"
7246
  "email": "krzysiek@wpdesk.pl"
7247
  }
7248
  ],
7249
+ "time": "2019-11-13T13:20:09+00:00"
7250
  },
7251
  {
7252
  "name": "wpdesk/wp-wpdesk-composer",
7253
+ "version": "2.6.1",
7254
  "source": {
7255
  "type": "git",
7256
  "url": "https://gitlab.com/wpdesk/wp-wpdesk-composer.git",
7257
+ "reference": "19b905b5f64a3612ef1b7d0a75501a66a235064e"
7258
  },
7259
  "dist": {
7260
  "type": "zip",
7261
+ "url": "https://gitlab.com/api/v4/projects/wpdesk%2Fwp-wpdesk-composer/repository/archive.zip?sha=19b905b5f64a3612ef1b7d0a75501a66a235064e",
7262
+ "reference": "19b905b5f64a3612ef1b7d0a75501a66a235064e",
7263
  "shasum": ""
7264
  },
7265
  "require": {
7266
  "composer-plugin-api": "^1.1",
7267
  "ext-json": "*",
7268
+ "gettext/gettext": "^4",
7269
+ "matthiasmullie/minify": "^1.3",
7270
  "php": ">=5.6"
7271
  },
7272
  "require-dev": {
7288
  "email": "krzysiek@wpdesk.pl"
7289
  }
7290
  ],
7291
+ "time": "2020-03-03T10:58:26+00:00"
7292
  },
7293
  {
7294
  "name": "wpdesk/wp-wpdesk-helper",
7295
+ "version": "2.3.4",
7296
  "source": {
7297
  "type": "git",
7298
  "url": "https://gitlab.com/wpdesk/wp-wpdesk-helper.git",
7299
+ "reference": "5a56f8d850220929b3cd3d41d73f9aabe054f21f"
7300
  },
7301
  "dist": {
7302
  "type": "zip",
7303
+ "url": "https://gitlab.com/api/v4/projects/wpdesk%2Fwp-wpdesk-helper/repository/archive.zip?sha=5a56f8d850220929b3cd3d41d73f9aabe054f21f",
7304
+ "reference": "5a56f8d850220929b3cd3d41d73f9aabe054f21f",
7305
  "shasum": ""
7306
  },
7307
  "require": {
7308
  "php": ">=5.6",
7309
+ "wpdesk/wp-basic-requirements": "^3",
7310
  "wpdesk/wp-builder": "^1.2",
7311
  "wpdesk/wp-logs": "^1.6.0",
7312
  "wpdesk/wp-notice": "^3.1.1",
7313
+ "wpdesk/wp-wpdesk-license": "^2.6",
7314
  "wpdesk/wp-wpdesk-tracker": "^2.0.4"
7315
  },
7316
  "require-dev": {
7322
  "wp-coding-standards/wpcs": "^0.14.1"
7323
  },
7324
  "type": "library",
7325
+ "extra": {
7326
+ "text-domain": "wpdesk-helper-textdomain",
7327
+ "translations-folder": "lang",
7328
+ "po-files": {
7329
+ "pl_PL": "wpdesk-helper-pl_PL.po"
7330
+ }
7331
+ },
7332
  "autoload": {
7333
  "psr-4": {
7334
  "WPDesk\\Helper\\": "src/"
7341
  "email": "krzysiek@wpdesk.pl"
7342
  }
7343
  ],
7344
+ "time": "2020-01-22T18:34:24+00:00"
7345
  },
7346
  {
7347
  "name": "wpdesk/wp-wpdesk-license",
7348
+ "version": "2.8.0",
7349
  "source": {
7350
  "type": "git",
7351
  "url": "https://gitlab.com/wpdesk/wp-wpdesk-license.git",
7352
+ "reference": "d386ad95b89844547e97e472128bb10d8216a7e1"
7353
  },
7354
  "dist": {
7355
  "type": "zip",
7356
+ "url": "https://gitlab.com/api/v4/projects/wpdesk%2Fwp-wpdesk-license/repository/archive.zip?sha=d386ad95b89844547e97e472128bb10d8216a7e1",
7357
+ "reference": "d386ad95b89844547e97e472128bb10d8216a7e1",
7358
  "shasum": ""
7359
  },
7360
  "require": {
7372
  "wp-coding-standards/wpcs": "^0.14.1"
7373
  },
7374
  "type": "library",
7375
+ "extra": {
7376
+ "text-domain": "wp-wpdesk-license",
7377
+ "translations-folder": "lang",
7378
+ "po-files": {
7379
+ "pl_PL": "wp-wpdesk-license-pl_PL.po"
7380
+ }
7381
+ },
7382
  "autoload": {
7383
  "classmap": [
7384
  "src/ApiManager"
7394
  "email": "krzysiek@wpdesk.pl"
7395
  }
7396
  ],
7397
+ "time": "2020-03-06T11:13:06+00:00"
7398
  },
7399
  {
7400
  "name": "wpdesk/wp-wpdesk-tracker",
7401
+ "version": "2.1.2",
7402
  "source": {
7403
  "type": "git",
7404
  "url": "https://gitlab.com/wpdesk/wp-wpdesk-tracker.git",
7405
+ "reference": "de6363eee5ff8677e3f8610b592eb5acdd969a8c"
7406
  },
7407
  "dist": {
7408
  "type": "zip",
7409
+ "url": "https://gitlab.com/api/v4/projects/wpdesk%2Fwp-wpdesk-tracker/repository/archive.zip?sha=de6363eee5ff8677e3f8610b592eb5acdd969a8c",
7410
+ "reference": "de6363eee5ff8677e3f8610b592eb5acdd969a8c",
7411
  "shasum": ""
7412
  },
7413
  "require": {
7422
  "wp-coding-standards/wpcs": "^0.14.1"
7423
  },
7424
  "type": "library",
7425
+ "extra": {
7426
+ "text-domain": "wpdesk-tracker",
7427
+ "translations-folder": "lang",
7428
+ "po-files": {
7429
+ "pl_PL": "wpdesk-tracker-pl_PL.po"
7430
+ }
7431
+ },
7432
  "autoload": {
7433
  "classmap": [
7434
  "src/"
7441
  "email": "krzysiek@wpdesk.pl"
7442
  }
7443
  ],
7444
+ "time": "2020-03-06T11:13:37+00:00"
7445
  },
7446
  {
7447
  "name": "zordius/lightncandy",
flexible-checkout-fields.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Flexible Checkout Fields
4
  Plugin URI: https://www.wpdesk.net/products/flexible-checkout-fields-pro-woocommerce/
5
  Description: Manage your WooCommerce checkout fields. Change order, labels, placeholders and add new fields.
6
- Version: 2.3.4
7
  Author: WP Desk
8
  Author URI: https://www.wpdesk.net/
9
  Text Domain: flexible-checkout-fields
@@ -11,7 +11,7 @@
11
  Requires at least: 4.6
12
  Tested up to: 5.3.2
13
  WC requires at least: 3.1.0
14
- WC tested up to: 3.9.2
15
  Requires PHP: 5.6
16
 
17
  Copyright 2017 WP Desk Ltd.
@@ -37,8 +37,8 @@ if ( ! defined( 'ABSPATH' ) ) {
37
 
38
 
39
  /* THESE TWO VARIABLES CAN BE CHANGED AUTOMATICALLY */
40
- $plugin_version = '2.3.4';
41
- $plugin_release_timestamp = '2020-02-26 09:45';
42
 
43
  define( 'FLEXIBLE_CHECKOUT_FIELDS_VERSION', $plugin_version );
44
 
3
  Plugin Name: Flexible Checkout Fields
4
  Plugin URI: https://www.wpdesk.net/products/flexible-checkout-fields-pro-woocommerce/
5
  Description: Manage your WooCommerce checkout fields. Change order, labels, placeholders and add new fields.
6
+ Version: 2.4.0
7
  Author: WP Desk
8
  Author URI: https://www.wpdesk.net/
9
  Text Domain: flexible-checkout-fields
11
  Requires at least: 4.6
12
  Tested up to: 5.3.2
13
  WC requires at least: 3.1.0
14
+ WC tested up to: 3.9.3
15
  Requires PHP: 5.6
16
 
17
  Copyright 2017 WP Desk Ltd.
37
 
38
 
39
  /* THESE TWO VARIABLES CAN BE CHANGED AUTOMATICALLY */
40
+ $plugin_version = '2.4.0';
41
+ $plugin_release_timestamp = '2020-03-06 16:53';
42
 
43
  define( 'FLEXIBLE_CHECKOUT_FIELDS_VERSION', $plugin_version );
44
 
readme.txt CHANGED
@@ -5,7 +5,7 @@ Donate link: https://www.wpdesk.net/flexible-checkout-fields-woocommerce/
5
  Tags: woocommerce checkout fields, woocommerce custom fields, woocommerce checkout manager, woocommerce checkout editor, woocommerce fields manager, woocommerce fields editor, woocommerce custom checkout fields, woocommerce checkout options, woocommerce checkout pro, woocommerce custom sections, woocommerce file upload
6
  Requires at least: 4.5
7
  Tested up to: 5.3.2
8
- Stable tag: 2.3.4
9
  Requires PHP: 5.6
10
  License: GPLv3 or later
11
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
@@ -193,6 +193,10 @@ If you are upgrading from the old WooCommerce Checkout Fields version (1.1, wooc
193
 
194
  == Changelog ==
195
 
 
 
 
 
196
  = 2.3.4 - 2020-02-25 =
197
  * Fixed attibute/value escaping in admin panel and on checkout page
198
  * Added additional security hardenings
5
  Tags: woocommerce checkout fields, woocommerce custom fields, woocommerce checkout manager, woocommerce checkout editor, woocommerce fields manager, woocommerce fields editor, woocommerce custom checkout fields, woocommerce checkout options, woocommerce checkout pro, woocommerce custom sections, woocommerce file upload
6
  Requires at least: 4.5
7
  Tested up to: 5.3.2
8
+ Stable tag: 2.4.0
9
  Requires PHP: 5.6
10
  License: GPLv3 or later
11
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
193
 
194
  == Changelog ==
195
 
196
+ = 2.4.0 - 2020-03-06 =
197
+ * Added additional request sanitization
198
+ * Tweaked remote calling css files
199
+
200
  = 2.3.4 - 2020-02-25 =
201
  * Fixed attibute/value escaping in admin panel and on checkout page
202
  * Added additional security hardenings
vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
- return ComposerAutoloaderInit5d9b591879aa2d09adfbf96a5fca0b73::getLoader();
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInit74dfe271bcd624105a31c1687a00b316::getLoader();
vendor/composer/autoload_classmap.php CHANGED
@@ -115,6 +115,7 @@ return array(
115
  'FcfVendor\\WPDesk\\Composer\\Codeception\\Plugin' => $baseDir . '/vendor_prefixed/wpdesk/wp-codeception/src/WPDesk/Composer/Plugin.php',
116
  'FcfVendor\\WPDesk\\Helper\\Debug\\LibraryDebug' => $baseDir . '/vendor_prefixed/wpdesk/wp-wpdesk-helper/src/Debug/LibraryDebug.php',
117
  'FcfVendor\\WPDesk\\Helper\\HelperAsLibrary' => $baseDir . '/vendor_prefixed/wpdesk/wp-wpdesk-helper-override/src/Helper/HelperAsLibrary.php',
 
118
  'FcfVendor\\WPDesk\\Helper\\HelperRemover' => $baseDir . '/vendor_prefixed/wpdesk/wp-wpdesk-helper/src/HelperRemover.php',
119
  'FcfVendor\\WPDesk\\Helper\\Integration\\LicenseIntegration' => $baseDir . '/vendor_prefixed/wpdesk/wp-wpdesk-helper/src/Integration/LicenseIntegration.php',
120
  'FcfVendor\\WPDesk\\Helper\\Integration\\LogsIntegration' => $baseDir . '/vendor_prefixed/wpdesk/wp-wpdesk-helper/src/Integration/LogsIntegration.php',
@@ -132,6 +133,7 @@ return array(
132
  'FcfVendor\\WPDesk\\License\\Page\\License\\Action\\LicenseDeactivation' => $baseDir . '/vendor_prefixed/wpdesk/wp-wpdesk-license/src/Page/License/Action/LicenseDeactivation.php',
133
  'FcfVendor\\WPDesk\\License\\Page\\License\\Action\\Nothing' => $baseDir . '/vendor_prefixed/wpdesk/wp-wpdesk-license/src/Page/License/Action/Nothing.php',
134
  'FcfVendor\\WPDesk\\License\\PluginRegistrator' => $baseDir . '/vendor_prefixed/wpdesk/wp-wpdesk-license/src/PluginRegistrator.php',
 
135
  'FcfVendor\\WPDesk\\Logger\\BasicLoggerFactory' => $baseDir . '/vendor_prefixed/wpdesk/wp-logs/src/BasicLoggerFactory.php',
136
  'FcfVendor\\WPDesk\\Logger\\LoggerFacade' => $baseDir . '/vendor_prefixed/wpdesk/wp-logs/src/LoggerFacade.php',
137
  'FcfVendor\\WPDesk\\Logger\\LoggerFactory' => $baseDir . '/vendor_prefixed/wpdesk/wp-logs/src/LoggerFactory.php',
@@ -150,27 +152,33 @@ return array(
150
  'FcfVendor\\WPDesk\\PluginBuilder\\Builder\\InfoActivationBuilder' => $baseDir . '/vendor_prefixed/wpdesk/wp-builder/src/Builder/InfoActivationBuilder.php',
151
  'FcfVendor\\WPDesk\\PluginBuilder\\Builder\\InfoBuilder' => $baseDir . '/vendor_prefixed/wpdesk/wp-builder/src/Builder/InfoBuilder.php',
152
  'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\AbstractPlugin' => $baseDir . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/AbstractPlugin.php',
 
153
  'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\ActivationAware' => $baseDir . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/ActivationAware.php',
154
  'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\ActivationTracker' => $baseDir . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/ActivationTracker.php',
 
 
155
  'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\Hookable' => $baseDir . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/Hookable.php',
156
  'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\HookableCollection' => $baseDir . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/HookableCollection.php',
157
  'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\HookableParent' => $baseDir . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/HookableParent.php',
158
  'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\HookablePluginDependant' => $baseDir . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/HookablePluginDependant.php',
159
  'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\PluginAccess' => $baseDir . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/PluginAccess.php',
 
160
  'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\TemplateLoad' => $baseDir . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/TemplateLoad.php',
161
  'FcfVendor\\WPDesk\\PluginBuilder\\Storage\\Exception\\ClassAlreadyExists' => $baseDir . '/vendor_prefixed/wpdesk/wp-builder/src/Storage/Exception/ClassAlreadyExists.php',
162
  'FcfVendor\\WPDesk\\PluginBuilder\\Storage\\Exception\\ClassNotExists' => $baseDir . '/vendor_prefixed/wpdesk/wp-builder/src/Storage/Exception/ClassNotExists.php',
163
  'FcfVendor\\WPDesk\\PluginBuilder\\Storage\\PluginStorage' => $baseDir . '/vendor_prefixed/wpdesk/wp-builder/src/Storage/PluginStorage.php',
164
  'FcfVendor\\WPDesk\\PluginBuilder\\Storage\\StaticStorage' => $baseDir . '/vendor_prefixed/wpdesk/wp-builder/src/Storage/StaticStorage.php',
165
  'FcfVendor\\WPDesk\\PluginBuilder\\Storage\\StorageFactory' => $baseDir . '/vendor_prefixed/wpdesk/wp-builder/src/Storage/StorageFactory.php',
 
 
166
  'FcfVendor\\WPDesk\\Plugin\\Flow\\Initialization\\InitializationFactory' => $baseDir . '/vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/InitializationFactory.php',
167
  'FcfVendor\\WPDesk\\Plugin\\Flow\\Initialization\\InitializationStrategy' => $baseDir . '/vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/InitializationStrategy.php',
168
- 'FcfVendor\\WPDesk\\Plugin\\Flow\\Initialization\\PluginDisablerByFile' => $baseDir . '/vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/PluginDisablerByFile.php',
169
- 'FcfVendor\\WPDesk\\Plugin\\Flow\\Initialization\\Simple\\HelperInstanceAsFilter' => $baseDir . '/vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/HelperInstanceAsFilter.php',
170
  'FcfVendor\\WPDesk\\Plugin\\Flow\\Initialization\\Simple\\SimpleFactory' => $baseDir . '/vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/Simple/SimpleFactory.php',
171
  'FcfVendor\\WPDesk\\Plugin\\Flow\\Initialization\\Simple\\SimpleFreeStrategy' => $baseDir . '/vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/Simple/SimpleFreeStrategy.php',
172
- 'FcfVendor\\WPDesk\\Plugin\\Flow\\Initialization\\Simple\\SimpleStrategy' => $baseDir . '/vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/Simple/SimpleStrategy.php',
173
- 'FcfVendor\\WPDesk\\Plugin\\Flow\\Initialization\\Simple\\TrackerInstanceAsFilter' => $baseDir . '/vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/TrackerInstanceAsFilter.php',
174
  'FcfVendor\\WPDesk\\Plugin\\Flow\\PluginBootstrap' => $baseDir . '/vendor_prefixed/wpdesk/wp-plugin-flow/src/PluginBootstrap.php',
175
  'FcfVendor\\WPDesk_API_KEY' => $baseDir . '/vendor_prefixed/wpdesk/wp-wpdesk-license/src/ApiManager/class-wc-key-api.php',
176
  'FcfVendor\\WPDesk_API_MENU' => $baseDir . '/vendor_prefixed/wpdesk/wp-wpdesk-license/src/ApiManager/class-wc-api-manager-menu.php',
115
  'FcfVendor\\WPDesk\\Composer\\Codeception\\Plugin' => $baseDir . '/vendor_prefixed/wpdesk/wp-codeception/src/WPDesk/Composer/Plugin.php',
116
  'FcfVendor\\WPDesk\\Helper\\Debug\\LibraryDebug' => $baseDir . '/vendor_prefixed/wpdesk/wp-wpdesk-helper/src/Debug/LibraryDebug.php',
117
  'FcfVendor\\WPDesk\\Helper\\HelperAsLibrary' => $baseDir . '/vendor_prefixed/wpdesk/wp-wpdesk-helper-override/src/Helper/HelperAsLibrary.php',
118
+ 'FcfVendor\\WPDesk\\Helper\\HelperRemoveInfo' => $baseDir . '/vendor_prefixed/wpdesk/wp-wpdesk-helper/src/HelperRemoveNotice.php',
119
  'FcfVendor\\WPDesk\\Helper\\HelperRemover' => $baseDir . '/vendor_prefixed/wpdesk/wp-wpdesk-helper/src/HelperRemover.php',
120
  'FcfVendor\\WPDesk\\Helper\\Integration\\LicenseIntegration' => $baseDir . '/vendor_prefixed/wpdesk/wp-wpdesk-helper/src/Integration/LicenseIntegration.php',
121
  'FcfVendor\\WPDesk\\Helper\\Integration\\LogsIntegration' => $baseDir . '/vendor_prefixed/wpdesk/wp-wpdesk-helper/src/Integration/LogsIntegration.php',
133
  'FcfVendor\\WPDesk\\License\\Page\\License\\Action\\LicenseDeactivation' => $baseDir . '/vendor_prefixed/wpdesk/wp-wpdesk-license/src/Page/License/Action/LicenseDeactivation.php',
134
  'FcfVendor\\WPDesk\\License\\Page\\License\\Action\\Nothing' => $baseDir . '/vendor_prefixed/wpdesk/wp-wpdesk-license/src/Page/License/Action/Nothing.php',
135
  'FcfVendor\\WPDesk\\License\\PluginRegistrator' => $baseDir . '/vendor_prefixed/wpdesk/wp-wpdesk-license/src/PluginRegistrator.php',
136
+ 'FcfVendor\\WPDesk\\License\\ServerAddressRepository' => $baseDir . '/vendor_prefixed/wpdesk/wp-wpdesk-license/src/ServerAddressRepository.php',
137
  'FcfVendor\\WPDesk\\Logger\\BasicLoggerFactory' => $baseDir . '/vendor_prefixed/wpdesk/wp-logs/src/BasicLoggerFactory.php',
138
  'FcfVendor\\WPDesk\\Logger\\LoggerFacade' => $baseDir . '/vendor_prefixed/wpdesk/wp-logs/src/LoggerFacade.php',
139
  'FcfVendor\\WPDesk\\Logger\\LoggerFactory' => $baseDir . '/vendor_prefixed/wpdesk/wp-logs/src/LoggerFactory.php',
152
  'FcfVendor\\WPDesk\\PluginBuilder\\Builder\\InfoActivationBuilder' => $baseDir . '/vendor_prefixed/wpdesk/wp-builder/src/Builder/InfoActivationBuilder.php',
153
  'FcfVendor\\WPDesk\\PluginBuilder\\Builder\\InfoBuilder' => $baseDir . '/vendor_prefixed/wpdesk/wp-builder/src/Builder/InfoBuilder.php',
154
  'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\AbstractPlugin' => $baseDir . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/AbstractPlugin.php',
155
+ 'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\Activateable' => $baseDir . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/Activateable.php',
156
  'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\ActivationAware' => $baseDir . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/ActivationAware.php',
157
  'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\ActivationTracker' => $baseDir . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/ActivationTracker.php',
158
+ 'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\Conditional' => $baseDir . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/Conditional.php',
159
+ 'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\Deactivateable' => $baseDir . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/Deactivateable.php',
160
  'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\Hookable' => $baseDir . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/Hookable.php',
161
  'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\HookableCollection' => $baseDir . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/HookableCollection.php',
162
  'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\HookableParent' => $baseDir . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/HookableParent.php',
163
  'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\HookablePluginDependant' => $baseDir . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/HookablePluginDependant.php',
164
  'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\PluginAccess' => $baseDir . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/PluginAccess.php',
165
+ 'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\SlimPlugin' => $baseDir . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/SlimPlugin.php',
166
  'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\TemplateLoad' => $baseDir . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/TemplateLoad.php',
167
  'FcfVendor\\WPDesk\\PluginBuilder\\Storage\\Exception\\ClassAlreadyExists' => $baseDir . '/vendor_prefixed/wpdesk/wp-builder/src/Storage/Exception/ClassAlreadyExists.php',
168
  'FcfVendor\\WPDesk\\PluginBuilder\\Storage\\Exception\\ClassNotExists' => $baseDir . '/vendor_prefixed/wpdesk/wp-builder/src/Storage/Exception/ClassNotExists.php',
169
  'FcfVendor\\WPDesk\\PluginBuilder\\Storage\\PluginStorage' => $baseDir . '/vendor_prefixed/wpdesk/wp-builder/src/Storage/PluginStorage.php',
170
  'FcfVendor\\WPDesk\\PluginBuilder\\Storage\\StaticStorage' => $baseDir . '/vendor_prefixed/wpdesk/wp-builder/src/Storage/StaticStorage.php',
171
  'FcfVendor\\WPDesk\\PluginBuilder\\Storage\\StorageFactory' => $baseDir . '/vendor_prefixed/wpdesk/wp-builder/src/Storage/StorageFactory.php',
172
+ 'FcfVendor\\WPDesk\\PluginBuilder\\Storage\\WordpressFilterStorage' => $baseDir . '/vendor_prefixed/wpdesk/wp-builder/src/Storage/WordpressFilterStorage.php',
173
+ 'FcfVendor\\WPDesk\\Plugin\\Flow\\Initialization\\BuilderTrait' => $baseDir . '/vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/BuilderTrait.php',
174
  'FcfVendor\\WPDesk\\Plugin\\Flow\\Initialization\\InitializationFactory' => $baseDir . '/vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/InitializationFactory.php',
175
  'FcfVendor\\WPDesk\\Plugin\\Flow\\Initialization\\InitializationStrategy' => $baseDir . '/vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/InitializationStrategy.php',
176
+ 'FcfVendor\\WPDesk\\Plugin\\Flow\\Initialization\\PluginDisablerByFileTrait' => $baseDir . '/vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/PluginDisablerByFileTrait.php',
177
+ 'FcfVendor\\WPDesk\\Plugin\\Flow\\Initialization\\Simple\\HelperInstanceAsFilterTrait' => $baseDir . '/vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/HelperInstanceAsFilterTrait.php',
178
  'FcfVendor\\WPDesk\\Plugin\\Flow\\Initialization\\Simple\\SimpleFactory' => $baseDir . '/vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/Simple/SimpleFactory.php',
179
  'FcfVendor\\WPDesk\\Plugin\\Flow\\Initialization\\Simple\\SimpleFreeStrategy' => $baseDir . '/vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/Simple/SimpleFreeStrategy.php',
180
+ 'FcfVendor\\WPDesk\\Plugin\\Flow\\Initialization\\Simple\\SimplePaidStrategy' => $baseDir . '/vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/Simple/SimplePaidStrategy.php',
181
+ 'FcfVendor\\WPDesk\\Plugin\\Flow\\Initialization\\Simple\\TrackerInstanceAsFilterTrait' => $baseDir . '/vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/TrackerInstanceAsFilterTrait.php',
182
  'FcfVendor\\WPDesk\\Plugin\\Flow\\PluginBootstrap' => $baseDir . '/vendor_prefixed/wpdesk/wp-plugin-flow/src/PluginBootstrap.php',
183
  'FcfVendor\\WPDesk_API_KEY' => $baseDir . '/vendor_prefixed/wpdesk/wp-wpdesk-license/src/ApiManager/class-wc-key-api.php',
184
  'FcfVendor\\WPDesk_API_MENU' => $baseDir . '/vendor_prefixed/wpdesk/wp-wpdesk-license/src/ApiManager/class-wc-api-manager-menu.php',
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInit5d9b591879aa2d09adfbf96a5fca0b73
6
  {
7
  private static $loader;
8
 
@@ -19,15 +19,15 @@ class ComposerAutoloaderInit5d9b591879aa2d09adfbf96a5fca0b73
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInit5d9b591879aa2d09adfbf96a5fca0b73', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit5d9b591879aa2d09adfbf96a5fca0b73', '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\ComposerStaticInit5d9b591879aa2d09adfbf96a5fca0b73::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 ComposerAutoloaderInit74dfe271bcd624105a31c1687a00b316
6
  {
7
  private static $loader;
8
 
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInit74dfe271bcd624105a31c1687a00b316', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit74dfe271bcd624105a31c1687a00b316', '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\ComposerStaticInit74dfe271bcd624105a31c1687a00b316::getInitializer($loader));
31
  } else {
32
  $map = require __DIR__ . '/autoload_namespaces.php';
33
  foreach ($map as $namespace => $path) {
vendor/composer/autoload_static.php CHANGED
@@ -4,7 +4,7 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInit5d9b591879aa2d09adfbf96a5fca0b73
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
  'P' =>
@@ -130,6 +130,7 @@ class ComposerStaticInit5d9b591879aa2d09adfbf96a5fca0b73
130
  'FcfVendor\\WPDesk\\Composer\\Codeception\\Plugin' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-codeception/src/WPDesk/Composer/Plugin.php',
131
  'FcfVendor\\WPDesk\\Helper\\Debug\\LibraryDebug' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-wpdesk-helper/src/Debug/LibraryDebug.php',
132
  'FcfVendor\\WPDesk\\Helper\\HelperAsLibrary' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-wpdesk-helper-override/src/Helper/HelperAsLibrary.php',
 
133
  'FcfVendor\\WPDesk\\Helper\\HelperRemover' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-wpdesk-helper/src/HelperRemover.php',
134
  'FcfVendor\\WPDesk\\Helper\\Integration\\LicenseIntegration' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-wpdesk-helper/src/Integration/LicenseIntegration.php',
135
  'FcfVendor\\WPDesk\\Helper\\Integration\\LogsIntegration' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-wpdesk-helper/src/Integration/LogsIntegration.php',
@@ -147,6 +148,7 @@ class ComposerStaticInit5d9b591879aa2d09adfbf96a5fca0b73
147
  'FcfVendor\\WPDesk\\License\\Page\\License\\Action\\LicenseDeactivation' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-wpdesk-license/src/Page/License/Action/LicenseDeactivation.php',
148
  'FcfVendor\\WPDesk\\License\\Page\\License\\Action\\Nothing' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-wpdesk-license/src/Page/License/Action/Nothing.php',
149
  'FcfVendor\\WPDesk\\License\\PluginRegistrator' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-wpdesk-license/src/PluginRegistrator.php',
 
150
  'FcfVendor\\WPDesk\\Logger\\BasicLoggerFactory' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-logs/src/BasicLoggerFactory.php',
151
  'FcfVendor\\WPDesk\\Logger\\LoggerFacade' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-logs/src/LoggerFacade.php',
152
  'FcfVendor\\WPDesk\\Logger\\LoggerFactory' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-logs/src/LoggerFactory.php',
@@ -165,27 +167,33 @@ class ComposerStaticInit5d9b591879aa2d09adfbf96a5fca0b73
165
  'FcfVendor\\WPDesk\\PluginBuilder\\Builder\\InfoActivationBuilder' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-builder/src/Builder/InfoActivationBuilder.php',
166
  'FcfVendor\\WPDesk\\PluginBuilder\\Builder\\InfoBuilder' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-builder/src/Builder/InfoBuilder.php',
167
  'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\AbstractPlugin' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/AbstractPlugin.php',
 
168
  'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\ActivationAware' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/ActivationAware.php',
169
  'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\ActivationTracker' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/ActivationTracker.php',
 
 
170
  'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\Hookable' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/Hookable.php',
171
  'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\HookableCollection' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/HookableCollection.php',
172
  'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\HookableParent' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/HookableParent.php',
173
  'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\HookablePluginDependant' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/HookablePluginDependant.php',
174
  'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\PluginAccess' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/PluginAccess.php',
 
175
  'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\TemplateLoad' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/TemplateLoad.php',
176
  'FcfVendor\\WPDesk\\PluginBuilder\\Storage\\Exception\\ClassAlreadyExists' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-builder/src/Storage/Exception/ClassAlreadyExists.php',
177
  'FcfVendor\\WPDesk\\PluginBuilder\\Storage\\Exception\\ClassNotExists' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-builder/src/Storage/Exception/ClassNotExists.php',
178
  'FcfVendor\\WPDesk\\PluginBuilder\\Storage\\PluginStorage' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-builder/src/Storage/PluginStorage.php',
179
  'FcfVendor\\WPDesk\\PluginBuilder\\Storage\\StaticStorage' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-builder/src/Storage/StaticStorage.php',
180
  'FcfVendor\\WPDesk\\PluginBuilder\\Storage\\StorageFactory' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-builder/src/Storage/StorageFactory.php',
 
 
181
  'FcfVendor\\WPDesk\\Plugin\\Flow\\Initialization\\InitializationFactory' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/InitializationFactory.php',
182
  'FcfVendor\\WPDesk\\Plugin\\Flow\\Initialization\\InitializationStrategy' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/InitializationStrategy.php',
183
- 'FcfVendor\\WPDesk\\Plugin\\Flow\\Initialization\\PluginDisablerByFile' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/PluginDisablerByFile.php',
184
- 'FcfVendor\\WPDesk\\Plugin\\Flow\\Initialization\\Simple\\HelperInstanceAsFilter' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/HelperInstanceAsFilter.php',
185
  'FcfVendor\\WPDesk\\Plugin\\Flow\\Initialization\\Simple\\SimpleFactory' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/Simple/SimpleFactory.php',
186
  'FcfVendor\\WPDesk\\Plugin\\Flow\\Initialization\\Simple\\SimpleFreeStrategy' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/Simple/SimpleFreeStrategy.php',
187
- 'FcfVendor\\WPDesk\\Plugin\\Flow\\Initialization\\Simple\\SimpleStrategy' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/Simple/SimpleStrategy.php',
188
- 'FcfVendor\\WPDesk\\Plugin\\Flow\\Initialization\\Simple\\TrackerInstanceAsFilter' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/TrackerInstanceAsFilter.php',
189
  'FcfVendor\\WPDesk\\Plugin\\Flow\\PluginBootstrap' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-plugin-flow/src/PluginBootstrap.php',
190
  'FcfVendor\\WPDesk_API_KEY' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-wpdesk-license/src/ApiManager/class-wc-key-api.php',
191
  'FcfVendor\\WPDesk_API_MENU' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-wpdesk-license/src/ApiManager/class-wc-api-manager-menu.php',
@@ -267,9 +275,9 @@ class ComposerStaticInit5d9b591879aa2d09adfbf96a5fca0b73
267
  public static function getInitializer(ClassLoader $loader)
268
  {
269
  return \Closure::bind(function () use ($loader) {
270
- $loader->prefixLengthsPsr4 = ComposerStaticInit5d9b591879aa2d09adfbf96a5fca0b73::$prefixLengthsPsr4;
271
- $loader->prefixDirsPsr4 = ComposerStaticInit5d9b591879aa2d09adfbf96a5fca0b73::$prefixDirsPsr4;
272
- $loader->classMap = ComposerStaticInit5d9b591879aa2d09adfbf96a5fca0b73::$classMap;
273
 
274
  }, null, ClassLoader::class);
275
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInit74dfe271bcd624105a31c1687a00b316
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
  'P' =>
130
  'FcfVendor\\WPDesk\\Composer\\Codeception\\Plugin' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-codeception/src/WPDesk/Composer/Plugin.php',
131
  'FcfVendor\\WPDesk\\Helper\\Debug\\LibraryDebug' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-wpdesk-helper/src/Debug/LibraryDebug.php',
132
  'FcfVendor\\WPDesk\\Helper\\HelperAsLibrary' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-wpdesk-helper-override/src/Helper/HelperAsLibrary.php',
133
+ 'FcfVendor\\WPDesk\\Helper\\HelperRemoveInfo' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-wpdesk-helper/src/HelperRemoveNotice.php',
134
  'FcfVendor\\WPDesk\\Helper\\HelperRemover' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-wpdesk-helper/src/HelperRemover.php',
135
  'FcfVendor\\WPDesk\\Helper\\Integration\\LicenseIntegration' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-wpdesk-helper/src/Integration/LicenseIntegration.php',
136
  'FcfVendor\\WPDesk\\Helper\\Integration\\LogsIntegration' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-wpdesk-helper/src/Integration/LogsIntegration.php',
148
  'FcfVendor\\WPDesk\\License\\Page\\License\\Action\\LicenseDeactivation' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-wpdesk-license/src/Page/License/Action/LicenseDeactivation.php',
149
  'FcfVendor\\WPDesk\\License\\Page\\License\\Action\\Nothing' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-wpdesk-license/src/Page/License/Action/Nothing.php',
150
  'FcfVendor\\WPDesk\\License\\PluginRegistrator' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-wpdesk-license/src/PluginRegistrator.php',
151
+ 'FcfVendor\\WPDesk\\License\\ServerAddressRepository' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-wpdesk-license/src/ServerAddressRepository.php',
152
  'FcfVendor\\WPDesk\\Logger\\BasicLoggerFactory' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-logs/src/BasicLoggerFactory.php',
153
  'FcfVendor\\WPDesk\\Logger\\LoggerFacade' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-logs/src/LoggerFacade.php',
154
  'FcfVendor\\WPDesk\\Logger\\LoggerFactory' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-logs/src/LoggerFactory.php',
167
  'FcfVendor\\WPDesk\\PluginBuilder\\Builder\\InfoActivationBuilder' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-builder/src/Builder/InfoActivationBuilder.php',
168
  'FcfVendor\\WPDesk\\PluginBuilder\\Builder\\InfoBuilder' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-builder/src/Builder/InfoBuilder.php',
169
  'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\AbstractPlugin' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/AbstractPlugin.php',
170
+ 'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\Activateable' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/Activateable.php',
171
  'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\ActivationAware' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/ActivationAware.php',
172
  'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\ActivationTracker' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/ActivationTracker.php',
173
+ 'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\Conditional' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/Conditional.php',
174
+ 'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\Deactivateable' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/Deactivateable.php',
175
  'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\Hookable' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/Hookable.php',
176
  'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\HookableCollection' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/HookableCollection.php',
177
  'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\HookableParent' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/HookableParent.php',
178
  'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\HookablePluginDependant' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/HookablePluginDependant.php',
179
  'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\PluginAccess' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/PluginAccess.php',
180
+ 'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\SlimPlugin' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/SlimPlugin.php',
181
  'FcfVendor\\WPDesk\\PluginBuilder\\Plugin\\TemplateLoad' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-builder/src/Plugin/TemplateLoad.php',
182
  'FcfVendor\\WPDesk\\PluginBuilder\\Storage\\Exception\\ClassAlreadyExists' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-builder/src/Storage/Exception/ClassAlreadyExists.php',
183
  'FcfVendor\\WPDesk\\PluginBuilder\\Storage\\Exception\\ClassNotExists' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-builder/src/Storage/Exception/ClassNotExists.php',
184
  'FcfVendor\\WPDesk\\PluginBuilder\\Storage\\PluginStorage' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-builder/src/Storage/PluginStorage.php',
185
  'FcfVendor\\WPDesk\\PluginBuilder\\Storage\\StaticStorage' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-builder/src/Storage/StaticStorage.php',
186
  'FcfVendor\\WPDesk\\PluginBuilder\\Storage\\StorageFactory' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-builder/src/Storage/StorageFactory.php',
187
+ 'FcfVendor\\WPDesk\\PluginBuilder\\Storage\\WordpressFilterStorage' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-builder/src/Storage/WordpressFilterStorage.php',
188
+ 'FcfVendor\\WPDesk\\Plugin\\Flow\\Initialization\\BuilderTrait' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/BuilderTrait.php',
189
  'FcfVendor\\WPDesk\\Plugin\\Flow\\Initialization\\InitializationFactory' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/InitializationFactory.php',
190
  'FcfVendor\\WPDesk\\Plugin\\Flow\\Initialization\\InitializationStrategy' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/InitializationStrategy.php',
191
+ 'FcfVendor\\WPDesk\\Plugin\\Flow\\Initialization\\PluginDisablerByFileTrait' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/PluginDisablerByFileTrait.php',
192
+ 'FcfVendor\\WPDesk\\Plugin\\Flow\\Initialization\\Simple\\HelperInstanceAsFilterTrait' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/HelperInstanceAsFilterTrait.php',
193
  'FcfVendor\\WPDesk\\Plugin\\Flow\\Initialization\\Simple\\SimpleFactory' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/Simple/SimpleFactory.php',
194
  'FcfVendor\\WPDesk\\Plugin\\Flow\\Initialization\\Simple\\SimpleFreeStrategy' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/Simple/SimpleFreeStrategy.php',
195
+ 'FcfVendor\\WPDesk\\Plugin\\Flow\\Initialization\\Simple\\SimplePaidStrategy' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/Simple/SimplePaidStrategy.php',
196
+ 'FcfVendor\\WPDesk\\Plugin\\Flow\\Initialization\\Simple\\TrackerInstanceAsFilterTrait' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/TrackerInstanceAsFilterTrait.php',
197
  'FcfVendor\\WPDesk\\Plugin\\Flow\\PluginBootstrap' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-plugin-flow/src/PluginBootstrap.php',
198
  'FcfVendor\\WPDesk_API_KEY' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-wpdesk-license/src/ApiManager/class-wc-key-api.php',
199
  'FcfVendor\\WPDesk_API_MENU' => __DIR__ . '/../..' . '/vendor_prefixed/wpdesk/wp-wpdesk-license/src/ApiManager/class-wc-api-manager-menu.php',
275
  public static function getInitializer(ClassLoader $loader)
276
  {
277
  return \Closure::bind(function () use ($loader) {
278
+ $loader->prefixLengthsPsr4 = ComposerStaticInit74dfe271bcd624105a31c1687a00b316::$prefixLengthsPsr4;
279
+ $loader->prefixDirsPsr4 = ComposerStaticInit74dfe271bcd624105a31c1687a00b316::$prefixDirsPsr4;
280
+ $loader->classMap = ComposerStaticInit74dfe271bcd624105a31c1687a00b316::$classMap;
281
 
282
  }, null, ClassLoader::class);
283
  }
vendor/composer/installed.json CHANGED
@@ -1,27 +1,27 @@
1
  [
2
  {
3
  "name": "psr/log",
4
- "version": "1.1.0",
5
- "version_normalized": "1.1.0.0",
6
  "source": {
7
  "type": "git",
8
  "url": "https://github.com/php-fig/log.git",
9
- "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd"
10
  },
11
  "dist": {
12
  "type": "zip",
13
- "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
14
- "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
15
  "shasum": ""
16
  },
17
  "require": {
18
  "php": ">=5.3.0"
19
  },
20
- "time": "2018-11-20T15:27:04+00:00",
21
  "type": "library",
22
  "extra": {
23
  "branch-alias": {
24
- "dev-master": "1.0.x-dev"
25
  }
26
  },
27
  "installation-source": "dist",
1
  [
2
  {
3
  "name": "psr/log",
4
+ "version": "1.1.2",
5
+ "version_normalized": "1.1.2.0",
6
  "source": {
7
  "type": "git",
8
  "url": "https://github.com/php-fig/log.git",
9
+ "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801"
10
  },
11
  "dist": {
12
  "type": "zip",
13
+ "url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801",
14
+ "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801",
15
  "shasum": ""
16
  },
17
  "require": {
18
  "php": ">=5.3.0"
19
  },
20
+ "time": "2019-11-01T11:05:21+00:00",
21
  "type": "library",
22
  "extra": {
23
  "branch-alias": {
24
+ "dev-master": "1.1.x-dev"
25
  }
26
  },
27
  "installation-source": "dist",
vendor/psr/log/Psr/Log/LoggerInterface.php CHANGED
@@ -118,6 +118,8 @@ interface LoggerInterface
118
  * @param array $context
119
  *
120
  * @return void
 
 
121
  */
122
  public function log($level, $message, array $context = array());
123
  }
118
  * @param array $context
119
  *
120
  * @return void
121
+ *
122
+ * @throws \Psr\Log\InvalidArgumentException
123
  */
124
  public function log($level, $message, array $context = array());
125
  }
vendor/psr/log/Psr/Log/LoggerTrait.php CHANGED
@@ -135,6 +135,8 @@ trait LoggerTrait
135
  * @param array $context
136
  *
137
  * @return void
 
 
138
  */
139
  abstract public function log($level, $message, array $context = array());
140
  }
135
  * @param array $context
136
  *
137
  * @return void
138
+ *
139
+ * @throws \Psr\Log\InvalidArgumentException
140
  */
141
  abstract public function log($level, $message, array $context = array());
142
  }
vendor/psr/log/Psr/Log/NullLogger.php CHANGED
@@ -20,6 +20,8 @@ class NullLogger extends AbstractLogger
20
  * @param array $context
21
  *
22
  * @return void
 
 
23
  */
24
  public function log($level, $message, array $context = array())
25
  {
20
  * @param array $context
21
  *
22
  * @return void
23
+ *
24
+ * @throws \Psr\Log\InvalidArgumentException
25
  */
26
  public function log($level, $message, array $context = array())
27
  {
vendor/psr/log/Psr/Log/Test/LoggerInterfaceTest.php CHANGED
@@ -4,6 +4,7 @@ namespace Psr\Log\Test;
4
 
5
  use Psr\Log\LoggerInterface;
6
  use Psr\Log\LogLevel;
 
7
 
8
  /**
9
  * Provides a base test class for ensuring compliance with the LoggerInterface.
@@ -11,7 +12,7 @@ use Psr\Log\LogLevel;
11
  * Implementors can extend the class and implement abstract methods to run this
12
  * as part of their test suite.
13
  */
14
- abstract class LoggerInterfaceTest extends \PHPUnit_Framework_TestCase
15
  {
16
  /**
17
  * @return LoggerInterface
@@ -140,5 +141,6 @@ class DummyTest
140
  {
141
  public function __toString()
142
  {
 
143
  }
144
  }
4
 
5
  use Psr\Log\LoggerInterface;
6
  use Psr\Log\LogLevel;
7
+ use PHPUnit\Framework\TestCase;
8
 
9
  /**
10
  * Provides a base test class for ensuring compliance with the LoggerInterface.
12
  * Implementors can extend the class and implement abstract methods to run this
13
  * as part of their test suite.
14
  */
15
+ abstract class LoggerInterfaceTest extends TestCase
16
  {
17
  /**
18
  * @return LoggerInterface
141
  {
142
  public function __toString()
143
  {
144
+ return 'DummyTest';
145
  }
146
  }
vendor/psr/log/Psr/Log/Test/TestLogger.php CHANGED
@@ -142,5 +142,6 @@ class TestLogger extends AbstractLogger
142
  public function reset()
143
  {
144
  $this->records = [];
 
145
  }
146
  }
142
  public function reset()
143
  {
144
  $this->records = [];
145
+ $this->recordsByLevel = [];
146
  }
147
  }
vendor/psr/log/composer.json CHANGED
@@ -20,7 +20,7 @@
20
  },
21
  "extra": {
22
  "branch-alias": {
23
- "dev-master": "1.0.x-dev"
24
  }
25
  }
26
  }
20
  },
21
  "extra": {
22
  "branch-alias": {
23
+ "dev-master": "1.1.x-dev"
24
  }
25
  }
26
  }
vendor_prefixed/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php CHANGED
@@ -10,6 +10,7 @@
10
  */
11
  namespace FcfVendor\Monolog\Formatter;
12
 
 
13
  /**
14
  * Class FluentdFormatter
15
  *
@@ -59,7 +60,7 @@ class FluentdFormatter implements \FcfVendor\Monolog\Formatter\FormatterInterfac
59
  $message['level'] = $record['level'];
60
  $message['level_name'] = $record['level_name'];
61
  }
62
- return \json_encode(array($tag, $record['datetime']->getTimestamp(), $message));
63
  }
64
  public function formatBatch(array $records)
65
  {
10
  */
11
  namespace FcfVendor\Monolog\Formatter;
12
 
13
+ use FcfVendor\Monolog\Utils;
14
  /**
15
  * Class FluentdFormatter
16
  *
60
  $message['level'] = $record['level'];
61
  $message['level_name'] = $record['level_name'];
62
  }
63
+ return \FcfVendor\Monolog\Utils::jsonEncode(array($tag, $record['datetime']->getTimestamp(), $message));
64
  }
65
  public function formatBatch(array $records)
66
  {
vendor_prefixed/monolog/monolog/src/Monolog/Formatter/HtmlFormatter.php CHANGED
@@ -11,6 +11,7 @@
11
  namespace FcfVendor\Monolog\Formatter;
12
 
13
  use FcfVendor\Monolog\Logger;
 
14
  /**
15
  * Formats incoming records into an HTML table
16
  *
@@ -111,8 +112,8 @@ class HtmlFormatter extends \FcfVendor\Monolog\Formatter\NormalizerFormatter
111
  }
112
  $data = $this->normalize($data);
113
  if (\version_compare(\PHP_VERSION, '5.4.0', '>=')) {
114
- return \json_encode($data, \JSON_PRETTY_PRINT | \JSON_UNESCAPED_SLASHES | \JSON_UNESCAPED_UNICODE);
115
  }
116
- return \str_replace('\\/', '/', \json_encode($data));
117
  }
118
  }
11
  namespace FcfVendor\Monolog\Formatter;
12
 
13
  use FcfVendor\Monolog\Logger;
14
+ use FcfVendor\Monolog\Utils;
15
  /**
16
  * Formats incoming records into an HTML table
17
  *
112
  }
113
  $data = $this->normalize($data);
114
  if (\version_compare(\PHP_VERSION, '5.4.0', '>=')) {
115
+ return \FcfVendor\Monolog\Utils::jsonEncode($data, \JSON_PRETTY_PRINT | \JSON_UNESCAPED_SLASHES | \JSON_UNESCAPED_UNICODE, \true);
116
  }
117
+ return \str_replace('\\/', '/', \FcfVendor\Monolog\Utils::jsonEncode($data, null, \true));
118
  }
119
  }
vendor_prefixed/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php CHANGED
@@ -128,7 +128,7 @@ class JsonFormatter extends \FcfVendor\Monolog\Formatter\NormalizerFormatter
128
  if ($depth > 9) {
129
  return 'Over 9 levels deep, aborting normalization';
130
  }
131
- if (\is_array($data) || $data instanceof \Traversable) {
132
  $normalized = array();
133
  $count = 1;
134
  foreach ($data as $key => $value) {
@@ -143,6 +143,9 @@ class JsonFormatter extends \FcfVendor\Monolog\Formatter\NormalizerFormatter
143
  if ($data instanceof \Exception || $data instanceof \Throwable) {
144
  return $this->normalizeException($data);
145
  }
 
 
 
146
  return $data;
147
  }
148
  /**
@@ -159,7 +162,7 @@ class JsonFormatter extends \FcfVendor\Monolog\Formatter\NormalizerFormatter
159
  if (!$e instanceof \Exception && !$e instanceof \Throwable) {
160
  throw new \InvalidArgumentException('Exception/Throwable expected, got ' . \gettype($e) . ' / ' . \FcfVendor\Monolog\Utils::getClass($e));
161
  }
162
- $data = array('class' => \FcfVendor\Monolog\Utils::getClass($e), 'message' => $e->getMessage(), 'code' => $e->getCode(), 'file' => $e->getFile() . ':' . $e->getLine());
163
  if ($this->includeStacktraces) {
164
  $trace = $e->getTrace();
165
  foreach ($trace as $frame) {
128
  if ($depth > 9) {
129
  return 'Over 9 levels deep, aborting normalization';
130
  }
131
+ if (\is_array($data)) {
132
  $normalized = array();
133
  $count = 1;
134
  foreach ($data as $key => $value) {
143
  if ($data instanceof \Exception || $data instanceof \Throwable) {
144
  return $this->normalizeException($data);
145
  }
146
+ if (\is_resource($data)) {
147
+ return parent::normalize($data);
148
+ }
149
  return $data;
150
  }
151
  /**
162
  if (!$e instanceof \Exception && !$e instanceof \Throwable) {
163
  throw new \InvalidArgumentException('Exception/Throwable expected, got ' . \gettype($e) . ' / ' . \FcfVendor\Monolog\Utils::getClass($e));
164
  }
165
+ $data = array('class' => \FcfVendor\Monolog\Utils::getClass($e), 'message' => $e->getMessage(), 'code' => (int) $e->getCode(), 'file' => $e->getFile() . ':' . $e->getLine());
166
  if ($this->includeStacktraces) {
167
  $trace = $e->getTrace();
168
  foreach ($trace as $frame) {
vendor_prefixed/monolog/monolog/src/Monolog/Formatter/LineFormatter.php CHANGED
@@ -135,7 +135,7 @@ class LineFormatter extends \FcfVendor\Monolog\Formatter\NormalizerFormatter
135
  if (\version_compare(\PHP_VERSION, '5.4.0', '>=')) {
136
  return $this->toJson($data, \true);
137
  }
138
- return \str_replace('\\/', '/', @\json_encode($data));
139
  }
140
  protected function replaceNewlines($str)
141
  {
135
  if (\version_compare(\PHP_VERSION, '5.4.0', '>=')) {
136
  return $this->toJson($data, \true);
137
  }
138
+ return \str_replace('\\/', '/', $this->toJson($data, \true));
139
  }
140
  protected function replaceNewlines($str)
141
  {
vendor_prefixed/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php CHANGED
@@ -73,7 +73,7 @@ class MongoDBFormatter implements \FcfVendor\Monolog\Formatter\FormatterInterfac
73
  }
74
  protected function formatException(\Exception $exception, $nestingLevel)
75
  {
76
- $formattedException = array('class' => \FcfVendor\Monolog\Utils::getClass($exception), 'message' => $exception->getMessage(), 'code' => $exception->getCode(), 'file' => $exception->getFile() . ':' . $exception->getLine());
77
  if ($this->exceptionTraceAsString === \true) {
78
  $formattedException['trace'] = $exception->getTraceAsString();
79
  } else {
73
  }
74
  protected function formatException(\Exception $exception, $nestingLevel)
75
  {
76
+ $formattedException = array('class' => \FcfVendor\Monolog\Utils::getClass($exception), 'message' => $exception->getMessage(), 'code' => (int) $exception->getCode(), 'file' => $exception->getFile() . ':' . $exception->getLine());
77
  if ($this->exceptionTraceAsString === \true) {
78
  $formattedException['trace'] = $exception->getTraceAsString();
79
  } else {
vendor_prefixed/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php CHANGED
@@ -104,7 +104,7 @@ class NormalizerFormatter implements \FcfVendor\Monolog\Formatter\FormatterInter
104
  if (!$e instanceof \Exception && !$e instanceof \Throwable) {
105
  throw new \InvalidArgumentException('Exception/Throwable expected, got ' . \gettype($e) . ' / ' . \FcfVendor\Monolog\Utils::getClass($e));
106
  }
107
- $data = array('class' => \FcfVendor\Monolog\Utils::getClass($e), 'message' => $e->getMessage(), 'code' => $e->getCode(), 'file' => $e->getFile() . ':' . $e->getLine());
108
  if ($e instanceof \SoapFault) {
109
  if (isset($e->faultcode)) {
110
  $data['faultcode'] = $e->faultcode;
@@ -112,8 +112,8 @@ class NormalizerFormatter implements \FcfVendor\Monolog\Formatter\FormatterInter
112
  if (isset($e->faultactor)) {
113
  $data['faultactor'] = $e->faultactor;
114
  }
115
- if (isset($e->detail)) {
116
- $data['detail'] = $e->detail;
117
  }
118
  }
119
  $trace = $e->getTrace();
@@ -137,108 +137,6 @@ class NormalizerFormatter implements \FcfVendor\Monolog\Formatter\FormatterInter
137
  */
138
  protected function toJson($data, $ignoreErrors = \false)
139
  {
140
- // suppress json_encode errors since it's twitchy with some inputs
141
- if ($ignoreErrors) {
142
- return @$this->jsonEncode($data);
143
- }
144
- $json = $this->jsonEncode($data);
145
- if ($json === \false) {
146
- $json = $this->handleJsonError(\json_last_error(), $data);
147
- }
148
- return $json;
149
- }
150
- /**
151
- * @param mixed $data
152
- * @return string JSON encoded data or null on failure
153
- */
154
- private function jsonEncode($data)
155
- {
156
- if (\version_compare(\PHP_VERSION, '5.4.0', '>=')) {
157
- return \json_encode($data, \JSON_UNESCAPED_SLASHES | \JSON_UNESCAPED_UNICODE);
158
- }
159
- return \json_encode($data);
160
- }
161
- /**
162
- * Handle a json_encode failure.
163
- *
164
- * If the failure is due to invalid string encoding, try to clean the
165
- * input and encode again. If the second encoding attempt fails, the
166
- * inital error is not encoding related or the input can't be cleaned then
167
- * raise a descriptive exception.
168
- *
169
- * @param int $code return code of json_last_error function
170
- * @param mixed $data data that was meant to be encoded
171
- * @throws \RuntimeException if failure can't be corrected
172
- * @return string JSON encoded data after error correction
173
- */
174
- private function handleJsonError($code, $data)
175
- {
176
- if ($code !== \JSON_ERROR_UTF8) {
177
- $this->throwEncodeError($code, $data);
178
- }
179
- if (\is_string($data)) {
180
- $this->detectAndCleanUtf8($data);
181
- } elseif (\is_array($data)) {
182
- \array_walk_recursive($data, array($this, 'detectAndCleanUtf8'));
183
- } else {
184
- $this->throwEncodeError($code, $data);
185
- }
186
- $json = $this->jsonEncode($data);
187
- if ($json === \false) {
188
- $this->throwEncodeError(\json_last_error(), $data);
189
- }
190
- return $json;
191
- }
192
- /**
193
- * Throws an exception according to a given code with a customized message
194
- *
195
- * @param int $code return code of json_last_error function
196
- * @param mixed $data data that was meant to be encoded
197
- * @throws \RuntimeException
198
- */
199
- private function throwEncodeError($code, $data)
200
- {
201
- switch ($code) {
202
- case \JSON_ERROR_DEPTH:
203
- $msg = 'Maximum stack depth exceeded';
204
- break;
205
- case \JSON_ERROR_STATE_MISMATCH:
206
- $msg = 'Underflow or the modes mismatch';
207
- break;
208
- case \JSON_ERROR_CTRL_CHAR:
209
- $msg = 'Unexpected control character found';
210
- break;
211
- case \JSON_ERROR_UTF8:
212
- $msg = 'Malformed UTF-8 characters, possibly incorrectly encoded';
213
- break;
214
- default:
215
- $msg = 'Unknown error';
216
- }
217
- throw new \RuntimeException('JSON encoding failed: ' . $msg . '. Encoding: ' . \var_export($data, \true));
218
- }
219
- /**
220
- * Detect invalid UTF-8 string characters and convert to valid UTF-8.
221
- *
222
- * Valid UTF-8 input will be left unmodified, but strings containing
223
- * invalid UTF-8 codepoints will be reencoded as UTF-8 with an assumed
224
- * original encoding of ISO-8859-15. This conversion may result in
225
- * incorrect output if the actual encoding was not ISO-8859-15, but it
226
- * will be clean UTF-8 output and will not rely on expensive and fragile
227
- * detection algorithms.
228
- *
229
- * Function converts the input in place in the passed variable so that it
230
- * can be used as a callback for array_walk_recursive.
231
- *
232
- * @param mixed &$data Input to check and convert if needed
233
- * @private
234
- */
235
- public function detectAndCleanUtf8(&$data)
236
- {
237
- if (\is_string($data) && !\preg_match('//u', $data)) {
238
- $data = \preg_replace_callback('/[\\x80-\\xFF]+/', function ($m) {
239
- return \utf8_encode($m[0]);
240
- }, $data);
241
- $data = \str_replace(array('¤', '¦', '¨', '´', '¸', '¼', '½', '¾'), array('€', 'Š', 'š', 'Ž', 'ž', 'Œ', 'œ', 'Ÿ'), $data);
242
- }
243
  }
244
  }
104
  if (!$e instanceof \Exception && !$e instanceof \Throwable) {
105
  throw new \InvalidArgumentException('Exception/Throwable expected, got ' . \gettype($e) . ' / ' . \FcfVendor\Monolog\Utils::getClass($e));
106
  }
107
+ $data = array('class' => \FcfVendor\Monolog\Utils::getClass($e), 'message' => $e->getMessage(), 'code' => (int) $e->getCode(), 'file' => $e->getFile() . ':' . $e->getLine());
108
  if ($e instanceof \SoapFault) {
109
  if (isset($e->faultcode)) {
110
  $data['faultcode'] = $e->faultcode;
112
  if (isset($e->faultactor)) {
113
  $data['faultactor'] = $e->faultactor;
114
  }
115
+ if (isset($e->detail) && (\is_string($e->detail) || \is_object($e->detail) || \is_array($e->detail))) {
116
+ $data['detail'] = \is_string($e->detail) ? $e->detail : \reset($e->detail);
117
  }
118
  }
119
  $trace = $e->getTrace();
137
  */
138
  protected function toJson($data, $ignoreErrors = \false)
139
  {
140
+ return \FcfVendor\Monolog\Utils::jsonEncode($data, null, $ignoreErrors);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
141
  }
142
  }
vendor_prefixed/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php CHANGED
@@ -141,17 +141,18 @@ class BrowserConsoleHandler extends \FcfVendor\Monolog\Handler\AbstractProcessin
141
  }
142
  private static function handleStyles($formatted)
143
  {
144
- $args = array(static::quote('font-weight: normal'));
145
  $format = '%c' . $formatted;
146
  \preg_match_all('/\\[\\[(.*?)\\]\\]\\{([^}]*)\\}/s', $format, $matches, \PREG_OFFSET_CAPTURE | \PREG_SET_ORDER);
147
  foreach (\array_reverse($matches) as $match) {
148
- $args[] = static::quote(static::handleCustomStyles($match[2][0], $match[1][0]));
149
  $args[] = '"font-weight: normal"';
 
150
  $pos = $match[0][1];
151
  $format = \substr($format, 0, $pos) . '%c' . $match[1][0] . '%c' . \substr($format, $pos + \strlen($match[0][0]));
152
  }
153
- \array_unshift($args, static::quote($format));
154
- return $args;
 
155
  }
156
  private static function handleCustomStyles($style, $string)
157
  {
141
  }
142
  private static function handleStyles($formatted)
143
  {
144
+ $args = array();
145
  $format = '%c' . $formatted;
146
  \preg_match_all('/\\[\\[(.*?)\\]\\]\\{([^}]*)\\}/s', $format, $matches, \PREG_OFFSET_CAPTURE | \PREG_SET_ORDER);
147
  foreach (\array_reverse($matches) as $match) {
 
148
  $args[] = '"font-weight: normal"';
149
+ $args[] = static::quote(static::handleCustomStyles($match[2][0], $match[1][0]));
150
  $pos = $match[0][1];
151
  $format = \substr($format, 0, $pos) . '%c' . $match[1][0] . '%c' . \substr($format, $pos + \strlen($match[0][0]));
152
  }
153
+ $args[] = static::quote('font-weight: normal');
154
+ $args[] = static::quote($format);
155
+ return \array_reverse($args);
156
  }
157
  private static function handleCustomStyles($style, $string)
158
  {
vendor_prefixed/monolog/monolog/src/Monolog/Handler/BufferHandler.php CHANGED
@@ -12,6 +12,7 @@ namespace FcfVendor\Monolog\Handler;
12
 
13
  use FcfVendor\Monolog\Logger;
14
  use FcfVendor\Monolog\ResettableInterface;
 
15
  /**
16
  * Buffers all records until closing the handler and then pass them as batch.
17
  *
@@ -109,4 +110,19 @@ class BufferHandler extends \FcfVendor\Monolog\Handler\AbstractHandler
109
  $this->handler->reset();
110
  }
111
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
112
  }
12
 
13
  use FcfVendor\Monolog\Logger;
14
  use FcfVendor\Monolog\ResettableInterface;
15
+ use FcfVendor\Monolog\Formatter\FormatterInterface;
16
  /**
17
  * Buffers all records until closing the handler and then pass them as batch.
18
  *
110
  $this->handler->reset();
111
  }
112
  }
113
+ /**
114
+ * {@inheritdoc}
115
+ */
116
+ public function setFormatter(\FcfVendor\Monolog\Formatter\FormatterInterface $formatter)
117
+ {
118
+ $this->handler->setFormatter($formatter);
119
+ return $this;
120
+ }
121
+ /**
122
+ * {@inheritdoc}
123
+ */
124
+ public function getFormatter()
125
+ {
126
+ return $this->handler->getFormatter();
127
+ }
128
  }
vendor_prefixed/monolog/monolog/src/Monolog/Handler/ChromePHPHandler.php CHANGED
@@ -12,6 +12,7 @@ namespace FcfVendor\Monolog\Handler;
12
 
13
  use FcfVendor\Monolog\Formatter\ChromePHPFormatter;
14
  use FcfVendor\Monolog\Logger;
 
15
  /**
16
  * Handler sending logs to the ChromePHP extension (http://www.chromephp.com/)
17
  *
@@ -110,13 +111,13 @@ class ChromePHPHandler extends \FcfVendor\Monolog\Handler\AbstractProcessingHand
110
  }
111
  self::$json['request_uri'] = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '';
112
  }
113
- $json = @\json_encode(self::$json);
114
  $data = \base64_encode(\utf8_encode($json));
115
  if (\strlen($data) > 3 * 1024) {
116
  self::$overflowed = \true;
117
  $record = array('message' => 'Incomplete logs, chrome header size limit reached', 'context' => array(), 'level' => \FcfVendor\Monolog\Logger::WARNING, 'level_name' => \FcfVendor\Monolog\Logger::getLevelName(\FcfVendor\Monolog\Logger::WARNING), 'channel' => 'monolog', 'datetime' => new \DateTime(), 'extra' => array());
118
  self::$json['rows'][\count(self::$json['rows']) - 1] = $this->getFormatter()->format($record);
119
- $json = @\json_encode(self::$json);
120
  $data = \base64_encode(\utf8_encode($json));
121
  }
122
  if (\trim($data) !== '') {
12
 
13
  use FcfVendor\Monolog\Formatter\ChromePHPFormatter;
14
  use FcfVendor\Monolog\Logger;
15
+ use FcfVendor\Monolog\Utils;
16
  /**
17
  * Handler sending logs to the ChromePHP extension (http://www.chromephp.com/)
18
  *
111
  }
112
  self::$json['request_uri'] = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '';
113
  }
114
+ $json = \FcfVendor\Monolog\Utils::jsonEncode(self::$json, null, \true);
115
  $data = \base64_encode(\utf8_encode($json));
116
  if (\strlen($data) > 3 * 1024) {
117
  self::$overflowed = \true;
118
  $record = array('message' => 'Incomplete logs, chrome header size limit reached', 'context' => array(), 'level' => \FcfVendor\Monolog\Logger::WARNING, 'level_name' => \FcfVendor\Monolog\Logger::getLevelName(\FcfVendor\Monolog\Logger::WARNING), 'channel' => 'monolog', 'datetime' => new \DateTime(), 'extra' => array());
119
  self::$json['rows'][\count(self::$json['rows']) - 1] = $this->getFormatter()->format($record);
120
+ $json = \FcfVendor\Monolog\Utils::jsonEncode(self::$json, null, \true);
121
  $data = \base64_encode(\utf8_encode($json));
122
  }
123
  if (\trim($data) !== '') {
vendor_prefixed/monolog/monolog/src/Monolog/Handler/CubeHandler.php CHANGED
@@ -11,6 +11,7 @@
11
  namespace FcfVendor\Monolog\Handler;
12
 
13
  use FcfVendor\Monolog\Logger;
 
14
  /**
15
  * Logs to Cube.
16
  *
@@ -98,9 +99,9 @@ class CubeHandler extends \FcfVendor\Monolog\Handler\AbstractProcessingHandler
98
  $data['data'] = $record['context'];
99
  $data['data']['level'] = $record['level'];
100
  if ($this->scheme === 'http') {
101
- $this->writeHttp(\json_encode($data));
102
  } else {
103
- $this->writeUdp(\json_encode($data));
104
  }
105
  }
106
  private function writeUdp($data)
11
  namespace FcfVendor\Monolog\Handler;
12
 
13
  use FcfVendor\Monolog\Logger;
14
+ use FcfVendor\Monolog\Utils;
15
  /**
16
  * Logs to Cube.
17
  *
99
  $data['data'] = $record['context'];
100
  $data['data']['level'] = $record['level'];
101
  if ($this->scheme === 'http') {
102
+ $this->writeHttp(\FcfVendor\Monolog\Utils::jsonEncode($data));
103
  } else {
104
+ $this->writeUdp(\FcfVendor\Monolog\Utils::jsonEncode($data));
105
  }
106
  }
107
  private function writeUdp($data)
vendor_prefixed/monolog/monolog/src/Monolog/Handler/FilterHandler.php CHANGED
@@ -11,6 +11,7 @@
11
  namespace FcfVendor\Monolog\Handler;
12
 
13
  use FcfVendor\Monolog\Logger;
 
14
  /**
15
  * Simple handler wrapper that filters records based on a list of levels
16
  *
@@ -40,7 +41,7 @@ class FilterHandler extends \FcfVendor\Monolog\Handler\AbstractHandler
40
  */
41
  protected $bubble;
42
  /**
43
- * @param callable|HandlerInterface $handler Handler or factory callable($record, $this).
44
  * @param int|array $minLevelOrList A list of levels to accept or a minimum level if maxLevel is provided
45
  * @param int $maxLevel Maximum level to accept, only used if $minLevelOrList is not an array
46
  * @param bool $bubble Whether the messages that are handled can bubble up the stack or not
@@ -93,19 +94,12 @@ class FilterHandler extends \FcfVendor\Monolog\Handler\AbstractHandler
93
  if (!$this->isHandling($record)) {
94
  return \false;
95
  }
96
- // The same logic as in FingersCrossedHandler
97
- if (!$this->handler instanceof \FcfVendor\Monolog\Handler\HandlerInterface) {
98
- $this->handler = \call_user_func($this->handler, $record, $this);
99
- if (!$this->handler instanceof \FcfVendor\Monolog\Handler\HandlerInterface) {
100
- throw new \RuntimeException("The factory callable should return a HandlerInterface");
101
- }
102
- }
103
  if ($this->processors) {
104
  foreach ($this->processors as $processor) {
105
  $record = \call_user_func($processor, $record);
106
  }
107
  }
108
- $this->handler->handle($record);
109
  return \false === $this->bubble;
110
  }
111
  /**
@@ -119,6 +113,40 @@ class FilterHandler extends \FcfVendor\Monolog\Handler\AbstractHandler
119
  $filtered[] = $record;
120
  }
121
  }
122
- $this->handler->handleBatch($filtered);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
123
  }
124
  }
11
  namespace FcfVendor\Monolog\Handler;
12
 
13
  use FcfVendor\Monolog\Logger;
14
+ use FcfVendor\Monolog\Formatter\FormatterInterface;
15
  /**
16
  * Simple handler wrapper that filters records based on a list of levels
17
  *
41
  */
42
  protected $bubble;
43
  /**
44
+ * @param callable|HandlerInterface $handler Handler or factory callable($record|null, $filterHandler).
45
  * @param int|array $minLevelOrList A list of levels to accept or a minimum level if maxLevel is provided
46
  * @param int $maxLevel Maximum level to accept, only used if $minLevelOrList is not an array
47
  * @param bool $bubble Whether the messages that are handled can bubble up the stack or not
94
  if (!$this->isHandling($record)) {
95
  return \false;
96
  }
 
 
 
 
 
 
 
97
  if ($this->processors) {
98
  foreach ($this->processors as $processor) {
99
  $record = \call_user_func($processor, $record);
100
  }
101
  }
102
+ $this->getHandler($record)->handle($record);
103
  return \false === $this->bubble;
104
  }
105
  /**
113
  $filtered[] = $record;
114
  }
115
  }
116
+ if (\count($filtered) > 0) {
117
+ $this->getHandler($filtered[\count($filtered) - 1])->handleBatch($filtered);
118
+ }
119
+ }
120
+ /**
121
+ * Return the nested handler
122
+ *
123
+ * If the handler was provided as a factory callable, this will trigger the handler's instantiation.
124
+ *
125
+ * @return HandlerInterface
126
+ */
127
+ public function getHandler(array $record = null)
128
+ {
129
+ if (!$this->handler instanceof \FcfVendor\Monolog\Handler\HandlerInterface) {
130
+ $this->handler = \call_user_func($this->handler, $record, $this);
131
+ if (!$this->handler instanceof \FcfVendor\Monolog\Handler\HandlerInterface) {
132
+ throw new \RuntimeException("The factory callable should return a HandlerInterface");
133
+ }
134
+ }
135
+ return $this->handler;
136
+ }
137
+ /**
138
+ * {@inheritdoc}
139
+ */
140
+ public function setFormatter(\FcfVendor\Monolog\Formatter\FormatterInterface $formatter)
141
+ {
142
+ $this->getHandler()->setFormatter($formatter);
143
+ return $this;
144
+ }
145
+ /**
146
+ * {@inheritdoc}
147
+ */
148
+ public function getFormatter()
149
+ {
150
+ return $this->getHandler()->getFormatter();
151
  }
152
  }
vendor_prefixed/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php CHANGED
@@ -14,6 +14,7 @@ use FcfVendor\Monolog\Handler\FingersCrossed\ErrorLevelActivationStrategy;
14
  use FcfVendor\Monolog\Handler\FingersCrossed\ActivationStrategyInterface;
15
  use FcfVendor\Monolog\Logger;
16
  use FcfVendor\Monolog\ResettableInterface;
 
17
  /**
18
  * Buffers all records until a certain level is reached
19
  *
@@ -36,7 +37,7 @@ class FingersCrossedHandler extends \FcfVendor\Monolog\Handler\AbstractHandler
36
  protected $stopBuffering;
37
  protected $passthruLevel;
38
  /**
39
- * @param callable|HandlerInterface $handler Handler or factory callable($record, $fingersCrossedHandler).
40
  * @param int|ActivationStrategyInterface $activationStrategy Strategy which determines when this handler takes action
41
  * @param int $bufferSize How many entries should be buffered at most, beyond that the oldest items are removed from the buffer.
42
  * @param bool $bubble Whether the messages that are handled can bubble up the stack or not
@@ -79,14 +80,7 @@ class FingersCrossedHandler extends \FcfVendor\Monolog\Handler\AbstractHandler
79
  if ($this->stopBuffering) {
80
  $this->buffering = \false;
81
  }
82
- if (!$this->handler instanceof \FcfVendor\Monolog\Handler\HandlerInterface) {
83
- $record = \end($this->buffer) ?: null;
84
- $this->handler = \call_user_func($this->handler, $record, $this);
85
- if (!$this->handler instanceof \FcfVendor\Monolog\Handler\HandlerInterface) {
86
- throw new \RuntimeException("The factory callable should return a HandlerInterface");
87
- }
88
- }
89
- $this->handler->handleBatch($this->buffer);
90
  $this->buffer = array();
91
  }
92
  /**
@@ -108,7 +102,7 @@ class FingersCrossedHandler extends \FcfVendor\Monolog\Handler\AbstractHandler
108
  $this->activate();
109
  }
110
  } else {
111
- $this->handler->handle($record);
112
  }
113
  return \false === $this->bubble;
114
  }
@@ -123,8 +117,8 @@ class FingersCrossedHandler extends \FcfVendor\Monolog\Handler\AbstractHandler
123
  {
124
  $this->flushBuffer();
125
  parent::reset();
126
- if ($this->handler instanceof \FcfVendor\Monolog\ResettableInterface) {
127
- $this->handler->reset();
128
  }
129
  }
130
  /**
@@ -148,10 +142,42 @@ class FingersCrossedHandler extends \FcfVendor\Monolog\Handler\AbstractHandler
148
  return $record['level'] >= $level;
149
  });
150
  if (\count($this->buffer) > 0) {
151
- $this->handler->handleBatch($this->buffer);
152
  }
153
  }
154
  $this->buffer = array();
155
  $this->buffering = \true;
156
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
157
  }
14
  use FcfVendor\Monolog\Handler\FingersCrossed\ActivationStrategyInterface;
15
  use FcfVendor\Monolog\Logger;
16
  use FcfVendor\Monolog\ResettableInterface;
17
+ use FcfVendor\Monolog\Formatter\FormatterInterface;
18
  /**
19
  * Buffers all records until a certain level is reached
20
  *
37
  protected $stopBuffering;
38
  protected $passthruLevel;
39
  /**
40
+ * @param callable|HandlerInterface $handler Handler or factory callable($record|null, $fingersCrossedHandler).
41
  * @param int|ActivationStrategyInterface $activationStrategy Strategy which determines when this handler takes action
42
  * @param int $bufferSize How many entries should be buffered at most, beyond that the oldest items are removed from the buffer.
43
  * @param bool $bubble Whether the messages that are handled can bubble up the stack or not
80
  if ($this->stopBuffering) {
81
  $this->buffering = \false;
82
  }
83
+ $this->getHandler(\end($this->buffer) ?: null)->handleBatch($this->buffer);
 
 
 
 
 
 
 
84
  $this->buffer = array();
85
  }
86
  /**
102
  $this->activate();
103
  }
104
  } else {
105
+ $this->getHandler($record)->handle($record);
106
  }
107
  return \false === $this->bubble;
108
  }
117
  {
118
  $this->flushBuffer();
119
  parent::reset();
120
+ if ($this->getHandler() instanceof \FcfVendor\Monolog\ResettableInterface) {
121
+ $this->getHandler()->reset();
122
  }
123
  }
124
  /**
142
  return $record['level'] >= $level;
143
  });
144
  if (\count($this->buffer) > 0) {
145
+ $this->getHandler(\end($this->buffer) ?: null)->handleBatch($this->buffer);
146
  }
147
  }
148
  $this->buffer = array();
149
  $this->buffering = \true;
150
  }
151
+ /**
152
+ * Return the nested handler
153
+ *
154
+ * If the handler was provided as a factory callable, this will trigger the handler's instantiation.
155
+ *
156
+ * @return HandlerInterface
157
+ */
158
+ public function getHandler(array $record = null)
159
+ {
160
+ if (!$this->handler instanceof \FcfVendor\Monolog\Handler\HandlerInterface) {
161
+ $this->handler = \call_user_func($this->handler, $record, $this);
162
+ if (!$this->handler instanceof \FcfVendor\Monolog\Handler\HandlerInterface) {
163
+ throw new \RuntimeException("The factory callable should return a HandlerInterface");
164
+ }
165
+ }
166
+ return $this->handler;
167
+ }
168
+ /**
169
+ * {@inheritdoc}
170
+ */
171
+ public function setFormatter(\FcfVendor\Monolog\Formatter\FormatterInterface $formatter)
172
+ {
173
+ $this->getHandler()->setFormatter($formatter);
174
+ return $this;
175
+ }
176
+ /**
177
+ * {@inheritdoc}
178
+ */
179
+ public function getFormatter()
180
+ {
181
+ return $this->getHandler()->getFormatter();
182
+ }
183
  }
vendor_prefixed/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php CHANGED
@@ -11,6 +11,7 @@
11
  namespace FcfVendor\Monolog\Handler;
12
 
13
  use FcfVendor\Monolog\Logger;
 
14
  use FcfVendor\Monolog\Formatter\FlowdockFormatter;
15
  use FcfVendor\Monolog\Formatter\FormatterInterface;
16
  /**
@@ -93,7 +94,7 @@ class FlowdockHandler extends \FcfVendor\Monolog\Handler\SocketHandler
93
  */
94
  private function buildContent($record)
95
  {
96
- return \json_encode($record['formatted']['flowdock']);
97
  }
98
  /**
99
  * Builds the header of the API Call
11
  namespace FcfVendor\Monolog\Handler;
12
 
13
  use FcfVendor\Monolog\Logger;
14
+ use FcfVendor\Monolog\Utils;
15
  use FcfVendor\Monolog\Formatter\FlowdockFormatter;
16
  use FcfVendor\Monolog\Formatter\FormatterInterface;
17
  /**
94
  */
95
  private function buildContent($record)
96
  {
97
+ return \FcfVendor\Monolog\Utils::jsonEncode($record['formatted']['flowdock']);
98
  }
99
  /**
100
  * Builds the header of the API Call
vendor_prefixed/monolog/monolog/src/Monolog/Handler/IFTTTHandler.php CHANGED
@@ -11,6 +11,7 @@
11
  namespace FcfVendor\Monolog\Handler;
12
 
13
  use FcfVendor\Monolog\Logger;
 
14
  /**
15
  * IFTTTHandler uses cURL to trigger IFTTT Maker actions
16
  *
@@ -44,7 +45,7 @@ class IFTTTHandler extends \FcfVendor\Monolog\Handler\AbstractProcessingHandler
44
  public function write(array $record)
45
  {
46
  $postData = array("value1" => $record["channel"], "value2" => $record["level_name"], "value3" => $record["message"]);
47
- $postString = \json_encode($postData);
48
  $ch = \curl_init();
49
  \curl_setopt($ch, \CURLOPT_URL, "https://maker.ifttt.com/trigger/" . $this->eventName . "/with/key/" . $this->secretKey);
50
  \curl_setopt($ch, \CURLOPT_POST, \true);
11
  namespace FcfVendor\Monolog\Handler;
12
 
13
  use FcfVendor\Monolog\Logger;
14
+ use FcfVendor\Monolog\Utils;
15
  /**
16
  * IFTTTHandler uses cURL to trigger IFTTT Maker actions
17
  *
45
  public function write(array $record)
46
  {
47
  $postData = array("value1" => $record["channel"], "value2" => $record["level_name"], "value3" => $record["message"]);
48
+ $postString = \FcfVendor\Monolog\Utils::jsonEncode($postData);
49
  $ch = \curl_init();
50
  \curl_setopt($ch, \CURLOPT_URL, "https://maker.ifttt.com/trigger/" . $this->eventName . "/with/key/" . $this->secretKey);
51
  \curl_setopt($ch, \CURLOPT_POST, \true);
vendor_prefixed/monolog/monolog/src/Monolog/Handler/NewRelicHandler.php CHANGED
@@ -11,6 +11,7 @@
11
  namespace FcfVendor\Monolog\Handler;
12
 
13
  use FcfVendor\Monolog\Logger;
 
14
  use FcfVendor\Monolog\Formatter\NormalizerFormatter;
15
  /**
16
  * Class to record a log on a NewRelic application.
@@ -165,7 +166,7 @@ class NewRelicHandler extends \FcfVendor\Monolog\Handler\AbstractProcessingHandl
165
  if (null === $value || \is_scalar($value)) {
166
  \newrelic_add_custom_parameter($key, $value);
167
  } else {
168
- \newrelic_add_custom_parameter($key, @\json_encode($value));
169
  }
170
  }
171
  /**
11
  namespace FcfVendor\Monolog\Handler;
12
 
13
  use FcfVendor\Monolog\Logger;
14
+ use FcfVendor\Monolog\Utils;
15
  use FcfVendor\Monolog\Formatter\NormalizerFormatter;
16
  /**
17
  * Class to record a log on a NewRelic application.
166
  if (null === $value || \is_scalar($value)) {
167
  \newrelic_add_custom_parameter($key, $value);
168
  } else {
169
+ \newrelic_add_custom_parameter($key, \FcfVendor\Monolog\Utils::jsonEncode($value, null, \true));
170
  }
171
  }
172
  /**
vendor_prefixed/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php CHANGED
@@ -13,6 +13,7 @@ namespace FcfVendor\Monolog\Handler;
13
  use Exception;
14
  use FcfVendor\Monolog\Formatter\LineFormatter;
15
  use FcfVendor\Monolog\Logger;
 
16
  use FcfVendor\PhpConsole\Connector;
17
  use FcfVendor\PhpConsole\Handler;
18
  use FcfVendor\PhpConsole\Helper;
@@ -191,7 +192,7 @@ class PHPConsoleHandler extends \FcfVendor\Monolog\Handler\AbstractProcessingHan
191
  $tags = $this->getRecordTags($record);
192
  $message = $record['message'];
193
  if ($record['context']) {
194
- $message .= ' ' . \json_encode($this->connector->getDumper()->dump(\array_filter($record['context'])));
195
  }
196
  $this->connector->getDebugDispatcher()->dispatchDebug($message, $tags, $this->options['classesPartialsTraceIgnore']);
197
  }
13
  use Exception;
14
  use FcfVendor\Monolog\Formatter\LineFormatter;
15
  use FcfVendor\Monolog\Logger;
16
+ use FcfVendor\Monolog\Utils;
17
  use FcfVendor\PhpConsole\Connector;
18
  use FcfVendor\PhpConsole\Handler;
19
  use FcfVendor\PhpConsole\Helper;
192
  $tags = $this->getRecordTags($record);
193
  $message = $record['message'];
194
  if ($record['context']) {
195
+ $message .= ' ' . \FcfVendor\Monolog\Utils::jsonEncode($this->connector->getDumper()->dump(\array_filter($record['context'])), null, \true);
196
  }
197
  $this->connector->getDebugDispatcher()->dispatchDebug($message, $tags, $this->options['classesPartialsTraceIgnore']);
198
  }
vendor_prefixed/monolog/monolog/src/Monolog/Handler/RedisHandler.php CHANGED
@@ -66,7 +66,8 @@ class RedisHandler extends \FcfVendor\Monolog\Handler\AbstractProcessingHandler
66
  protected function writeCapped(array $record)
67
  {
68
  if ($this->redisClient instanceof \Redis) {
69
- $this->redisClient->multi()->rpush($this->redisKey, $record["formatted"])->ltrim($this->redisKey, -$this->capSize, -1)->exec();
 
70
  } else {
71
  $redisKey = $this->redisKey;
72
  $capSize = $this->capSize;
66
  protected function writeCapped(array $record)
67
  {
68
  if ($this->redisClient instanceof \Redis) {
69
+ $mode = \defined('\\Redis::MULTI') ? \Redis::MULTI : 1;
70
+ $this->redisClient->multi($mode)->rpush($this->redisKey, $record["formatted"])->ltrim($this->redisKey, -$this->capSize, -1)->exec();
71
  } else {
72
  $redisKey = $this->redisKey;
73
  $capSize = $this->capSize;
vendor_prefixed/monolog/monolog/src/Monolog/Handler/SamplingHandler.php CHANGED
@@ -10,6 +10,7 @@
10
  */
11
  namespace FcfVendor\Monolog\Handler;
12
 
 
13
  /**
14
  * Sampling handler
15
  *
@@ -35,7 +36,7 @@ class SamplingHandler extends \FcfVendor\Monolog\Handler\AbstractHandler
35
  */
36
  protected $factor;
37
  /**
38
- * @param callable|HandlerInterface $handler Handler or factory callable($record, $fingersCrossedHandler).
39
  * @param int $factor Sample factor
40
  */
41
  public function __construct($handler, $factor)
@@ -49,25 +50,50 @@ class SamplingHandler extends \FcfVendor\Monolog\Handler\AbstractHandler
49
  }
50
  public function isHandling(array $record)
51
  {
52
- return $this->handler->isHandling($record);
53
  }
54
  public function handle(array $record)
55
  {
56
  if ($this->isHandling($record) && \mt_rand(1, $this->factor) === 1) {
57
- // The same logic as in FingersCrossedHandler
58
- if (!$this->handler instanceof \FcfVendor\Monolog\Handler\HandlerInterface) {
59
- $this->handler = \call_user_func($this->handler, $record, $this);
60
- if (!$this->handler instanceof \FcfVendor\Monolog\Handler\HandlerInterface) {
61
- throw new \RuntimeException("The factory callable should return a HandlerInterface");
62
- }
63
- }
64
  if ($this->processors) {
65
  foreach ($this->processors as $processor) {
66
  $record = \call_user_func($processor, $record);
67
  }
68
  }
69
- $this->handler->handle($record);
70
  }
71
  return \false === $this->bubble;
72
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
73
  }
10
  */
11
  namespace FcfVendor\Monolog\Handler;
12
 
13
+ use FcfVendor\Monolog\Formatter\FormatterInterface;
14
  /**
15
  * Sampling handler
16
  *
36
  */
37
  protected $factor;
38
  /**
39
+ * @param callable|HandlerInterface $handler Handler or factory callable($record|null, $samplingHandler).
40
  * @param int $factor Sample factor
41
  */
42
  public function __construct($handler, $factor)
50
  }
51
  public function isHandling(array $record)
52
  {
53
+ return $this->getHandler($record)->isHandling($record);
54
  }
55
  public function handle(array $record)
56
  {
57
  if ($this->isHandling($record) && \mt_rand(1, $this->factor) === 1) {
 
 
 
 
 
 
 
58
  if ($this->processors) {
59
  foreach ($this->processors as $processor) {
60
  $record = \call_user_func($processor, $record);
61
  }
62
  }
63
+ $this->getHandler($record)->handle($record);
64
  }
65
  return \false === $this->bubble;
66
  }
67
+ /**
68
+ * Return the nested handler
69
+ *
70
+ * If the handler was provided as a factory callable, this will trigger the handler's instantiation.
71
+ *
72
+ * @return HandlerInterface
73
+ */
74
+ public function getHandler(array $record = null)
75
+ {
76
+ if (!$this->handler instanceof \FcfVendor\Monolog\Handler\HandlerInterface) {
77
+ $this->handler = \call_user_func($this->handler, $record, $this);
78
+ if (!$this->handler instanceof \FcfVendor\Monolog\Handler\HandlerInterface) {
79
+ throw new \RuntimeException("The factory callable should return a HandlerInterface");
80
+ }
81
+ }
82
+ return $this->handler;
83
+ }
84
+ /**
85
+ * {@inheritdoc}
86
+ */
87
+ public function setFormatter(\FcfVendor\Monolog\Formatter\FormatterInterface $formatter)
88
+ {
89
+ $this->getHandler()->setFormatter($formatter);
90
+ return $this;
91
+ }
92
+ /**
93
+ * {@inheritdoc}
94
+ */
95
+ public function getFormatter()
96
+ {
97
+ return $this->getHandler()->getFormatter();
98
+ }
99
  }
vendor_prefixed/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php CHANGED
@@ -11,6 +11,7 @@
11
  namespace FcfVendor\Monolog\Handler\Slack;
12
 
13
  use FcfVendor\Monolog\Logger;
 
14
  use FcfVendor\Monolog\Formatter\NormalizerFormatter;
15
  use FcfVendor\Monolog\Formatter\FormatterInterface;
16
  /**
@@ -164,9 +165,13 @@ class SlackRecord
164
  {
165
  $normalized = $this->normalizerFormatter->format($fields);
166
  $prettyPrintFlag = \defined('JSON_PRETTY_PRINT') ? \JSON_PRETTY_PRINT : 128;
 
 
 
 
167
  $hasSecondDimension = \count(\array_filter($normalized, 'is_array'));
168
  $hasNonNumericKeys = !\count(\array_filter(\array_keys($normalized), 'is_numeric'));
169
- return $hasSecondDimension || $hasNonNumericKeys ? \json_encode($normalized, $prettyPrintFlag) : \json_encode($normalized);
170
  }
171
  /**
172
  * Sets the formatter
11
  namespace FcfVendor\Monolog\Handler\Slack;
12
 
13
  use FcfVendor\Monolog\Logger;
14
+ use FcfVendor\Monolog\Utils;
15
  use FcfVendor\Monolog\Formatter\NormalizerFormatter;
16
  use FcfVendor\Monolog\Formatter\FormatterInterface;
17
  /**
165
  {
166
  $normalized = $this->normalizerFormatter->format($fields);
167
  $prettyPrintFlag = \defined('JSON_PRETTY_PRINT') ? \JSON_PRETTY_PRINT : 128;
168
+ $flags = 0;
169
+ if (\PHP_VERSION_ID >= 50400) {
170
+ $flags = \JSON_UNESCAPED_SLASHES | \JSON_UNESCAPED_UNICODE;
171
+ }
172
  $hasSecondDimension = \count(\array_filter($normalized, 'is_array'));
173
  $hasNonNumericKeys = !\count(\array_filter(\array_keys($normalized), 'is_numeric'));
174
+ return $hasSecondDimension || $hasNonNumericKeys ? \FcfVendor\Monolog\Utils::jsonEncode($normalized, $prettyPrintFlag | $flags) : \FcfVendor\Monolog\Utils::jsonEncode($normalized, $flags);
175
  }
176
  /**
177
  * Sets the formatter
vendor_prefixed/monolog/monolog/src/Monolog/Handler/SlackHandler.php CHANGED
@@ -12,6 +12,7 @@ namespace FcfVendor\Monolog\Handler;
12
 
13
  use FcfVendor\Monolog\Formatter\FormatterInterface;
14
  use FcfVendor\Monolog\Logger;
 
15
  use FcfVendor\Monolog\Handler\Slack\SlackRecord;
16
  /**
17
  * Sends notifications through Slack API
@@ -94,7 +95,7 @@ class SlackHandler extends \FcfVendor\Monolog\Handler\SocketHandler
94
  $dataArray = $this->slackRecord->getSlackData($record);
95
  $dataArray['token'] = $this->token;
96
  if (!empty($dataArray['attachments'])) {
97
- $dataArray['attachments'] = \json_encode($dataArray['attachments']);
98
  }
99
  return $dataArray;
100
  }
12
 
13
  use FcfVendor\Monolog\Formatter\FormatterInterface;
14
  use FcfVendor\Monolog\Logger;
15
+ use FcfVendor\Monolog\Utils;
16
  use FcfVendor\Monolog\Handler\Slack\SlackRecord;
17
  /**
18
  * Sends notifications through Slack API
95
  $dataArray = $this->slackRecord->getSlackData($record);
96
  $dataArray['token'] = $this->token;
97
  if (!empty($dataArray['attachments'])) {
98
+ $dataArray['attachments'] = \FcfVendor\Monolog\Utils::jsonEncode($dataArray['attachments']);
99
  }
100
  return $dataArray;
101
  }
vendor_prefixed/monolog/monolog/src/Monolog/Handler/SlackWebhookHandler.php CHANGED
@@ -12,6 +12,7 @@ namespace FcfVendor\Monolog\Handler;
12
 
13
  use FcfVendor\Monolog\Formatter\FormatterInterface;
14
  use FcfVendor\Monolog\Logger;
 
15
  use FcfVendor\Monolog\Handler\Slack\SlackRecord;
16
  /**
17
  * Sends notifications through Slack Webhooks
@@ -65,7 +66,7 @@ class SlackWebhookHandler extends \FcfVendor\Monolog\Handler\AbstractProcessingH
65
  protected function write(array $record)
66
  {
67
  $postData = $this->slackRecord->getSlackData($record);
68
- $postString = \json_encode($postData);
69
  $ch = \curl_init();
70
  $options = array(\CURLOPT_URL => $this->webhookUrl, \CURLOPT_POST => \true, \CURLOPT_RETURNTRANSFER => \true, \CURLOPT_HTTPHEADER => array('Content-type: application/json'), \CURLOPT_POSTFIELDS => $postString);
71
  if (\defined('CURLOPT_SAFE_UPLOAD')) {
12
 
13
  use FcfVendor\Monolog\Formatter\FormatterInterface;
14
  use FcfVendor\Monolog\Logger;
15
+ use FcfVendor\Monolog\Utils;
16
  use FcfVendor\Monolog\Handler\Slack\SlackRecord;
17
  /**
18
  * Sends notifications through Slack Webhooks
66
  protected function write(array $record)
67
  {
68
  $postData = $this->slackRecord->getSlackData($record);
69
+ $postString = \FcfVendor\Monolog\Utils::jsonEncode($postData);
70
  $ch = \curl_init();
71
  $options = array(\CURLOPT_URL => $this->webhookUrl, \CURLOPT_POST => \true, \CURLOPT_RETURNTRANSFER => \true, \CURLOPT_HTTPHEADER => array('Content-type: application/json'), \CURLOPT_POSTFIELDS => $postString);
72
  if (\defined('CURLOPT_SAFE_UPLOAD')) {
vendor_prefixed/monolog/monolog/src/Monolog/Logger.php CHANGED
@@ -449,8 +449,13 @@ class Logger implements \Psr\Log\LoggerInterface, \FcfVendor\Monolog\ResettableI
449
  */
450
  public static function toMonologLevel($level)
451
  {
452
- if (\is_string($level) && \defined(__CLASS__ . '::' . \strtoupper($level))) {
453
- return \constant(__CLASS__ . '::' . \strtoupper($level));
 
 
 
 
 
454
  }
455
  return $level;
456
  }
449
  */
450
  public static function toMonologLevel($level)
451
  {
452
+ if (\is_string($level)) {
453
+ // Contains chars of all log levels and avoids using strtoupper() which may have
454
+ // strange results depending on locale (for example, "i" will become "İ")
455
+ $upper = \strtr($level, 'abcdefgilmnortuwy', 'ABCDEFGILMNORTUWY');
456
+ if (\defined(__CLASS__ . '::' . $upper)) {
457
+ return \constant(__CLASS__ . '::' . $upper);
458
+ }
459
  }
460
  return $level;
461
  }
vendor_prefixed/monolog/monolog/src/Monolog/Utils.php CHANGED
@@ -20,4 +20,118 @@ class Utils
20
  $class = \get_class($object);
21
  return 'c' === $class[0] && 0 === \strpos($class, "class@anonymous\0") ? \get_parent_class($class) . '@anonymous' : $class;
22
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
  }
20
  $class = \get_class($object);
21
  return 'c' === $class[0] && 0 === \strpos($class, "class@anonymous\0") ? \get_parent_class($class) . '@anonymous' : $class;
22
  }
23
+ /**
24
+ * Return the JSON representation of a value
25
+ *
26
+ * @param mixed $data
27
+ * @param int $encodeFlags flags to pass to json encode, defaults to JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE
28
+ * @param bool $ignoreErrors whether to ignore encoding errors or to throw on error, when ignored and the encoding fails, "null" is returned which is valid json for null
29
+ * @throws \RuntimeException if encoding fails and errors are not ignored
30
+ * @return string
31
+ */
32
+ public static function jsonEncode($data, $encodeFlags = null, $ignoreErrors = \false)
33
+ {
34
+ if (null === $encodeFlags && \version_compare(\PHP_VERSION, '5.4.0', '>=')) {
35
+ $encodeFlags = \JSON_UNESCAPED_SLASHES | \JSON_UNESCAPED_UNICODE;
36
+ }
37
+ if ($ignoreErrors) {
38
+ $json = @\json_encode($data, $encodeFlags);
39
+ if (\false === $json) {
40
+ return 'null';
41
+ }
42
+ return $json;
43
+ }
44
+ $json = \json_encode($data, $encodeFlags);
45
+ if (\false === $json) {
46
+ $json = self::handleJsonError(\json_last_error(), $data);
47
+ }
48
+ return $json;
49
+ }
50
+ /**
51
+ * Handle a json_encode failure.
52
+ *
53
+ * If the failure is due to invalid string encoding, try to clean the
54
+ * input and encode again. If the second encoding attempt fails, the
55
+ * inital error is not encoding related or the input can't be cleaned then
56
+ * raise a descriptive exception.
57
+ *
58
+ * @param int $code return code of json_last_error function
59
+ * @param mixed $data data that was meant to be encoded
60
+ * @param int $encodeFlags flags to pass to json encode, defaults to JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE
61
+ * @throws \RuntimeException if failure can't be corrected
62
+ * @return string JSON encoded data after error correction
63
+ */
64
+ public static function handleJsonError($code, $data, $encodeFlags = null)
65
+ {
66
+ if ($code !== \JSON_ERROR_UTF8) {
67
+ self::throwEncodeError($code, $data);
68
+ }
69
+ if (\is_string($data)) {
70
+ self::detectAndCleanUtf8($data);
71
+ } elseif (\is_array($data)) {
72
+ \array_walk_recursive($data, array('Monolog\\Utils', 'detectAndCleanUtf8'));
73
+ } else {
74
+ self::throwEncodeError($code, $data);
75
+ }
76
+ if (null === $encodeFlags && \version_compare(\PHP_VERSION, '5.4.0', '>=')) {
77
+ $encodeFlags = \JSON_UNESCAPED_SLASHES | \JSON_UNESCAPED_UNICODE;
78
+ }
79
+ $json = \json_encode($data, $encodeFlags);
80
+ if ($json === \false) {
81
+ self::throwEncodeError(\json_last_error(), $data);
82
+ }
83
+ return $json;
84
+ }
85
+ /**
86
+ * Throws an exception according to a given code with a customized message
87
+ *
88
+ * @param int $code return code of json_last_error function
89
+ * @param mixed $data data that was meant to be encoded
90
+ * @throws \RuntimeException
91
+ */
92
+ private static function throwEncodeError($code, $data)
93
+ {
94
+ switch ($code) {
95
+ case \JSON_ERROR_DEPTH:
96
+ $msg = 'Maximum stack depth exceeded';
97
+ break;
98
+ case \JSON_ERROR_STATE_MISMATCH:
99
+ $msg = 'Underflow or the modes mismatch';
100
+ break;
101
+ case \JSON_ERROR_CTRL_CHAR:
102
+ $msg = 'Unexpected control character found';
103
+ break;
104
+ case \JSON_ERROR_UTF8:
105
+ $msg = 'Malformed UTF-8 characters, possibly incorrectly encoded';
106
+ break;
107
+ default:
108
+ $msg = 'Unknown error';
109
+ }
110
+ throw new \RuntimeException('JSON encoding failed: ' . $msg . '. Encoding: ' . \var_export($data, \true));
111
+ }
112
+ /**
113
+ * Detect invalid UTF-8 string characters and convert to valid UTF-8.
114
+ *
115
+ * Valid UTF-8 input will be left unmodified, but strings containing
116
+ * invalid UTF-8 codepoints will be reencoded as UTF-8 with an assumed
117
+ * original encoding of ISO-8859-15. This conversion may result in
118
+ * incorrect output if the actual encoding was not ISO-8859-15, but it
119
+ * will be clean UTF-8 output and will not rely on expensive and fragile
120
+ * detection algorithms.
121
+ *
122
+ * Function converts the input in place in the passed variable so that it
123
+ * can be used as a callback for array_walk_recursive.
124
+ *
125
+ * @param mixed &$data Input to check and convert if needed
126
+ * @private
127
+ */
128
+ public static function detectAndCleanUtf8(&$data)
129
+ {
130
+ if (\is_string($data) && !\preg_match('//u', $data)) {
131
+ $data = \preg_replace_callback('/[\\x80-\\xFF]+/', function ($m) {
132
+ return \utf8_encode($m[0]);
133
+ }, $data);
134
+ $data = \str_replace(array('¤', '¦', '¨', '´', '¸', '¼', '½', '¾'), array('€', 'Š', 'š', 'Ž', 'ž', 'Œ', 'œ', 'Ÿ'), $data);
135
+ }
136
+ }
137
  }
vendor_prefixed/wpdesk/wp-basic-requirements/composer.json CHANGED
@@ -25,6 +25,13 @@
25
  "tests"
26
  ]
27
  },
 
 
 
 
 
 
 
28
  "scripts": {
29
  "phpcs": "phpcs",
30
  "phpunit-unit": "phpunit --configuration phpunit-unit.xml --coverage-text --colors=never",
25
  "tests"
26
  ]
27
  },
28
+ "extra": {
29
+ "text-domain": "wp-basic-requirements",
30
+ "translations-folder": "lang",
31
+ "po-files": {
32
+ "pl_PL": "wp-basic-requirements-pl_PL.po"
33
+ }
34
+ },
35
  "scripts": {
36
  "phpcs": "phpcs",
37
  "phpunit-unit": "phpunit --configuration phpunit-unit.xml --coverage-text --colors=never",
vendor_prefixed/wpdesk/wp-basic-requirements/lang/wp-basic-requirements-pl_PL.mo DELETED
Binary file
vendor_prefixed/wpdesk/wp-basic-requirements/src/Basic_Requirement_Checker.php CHANGED
@@ -14,8 +14,15 @@ if (!\class_exists('FcfVendor\\WPDesk_Basic_Requirement_Checker')) {
14
  {
15
  const EXTENSION_NAME_OPENSSL = 'openssl';
16
  const HOOK_ADMIN_NOTICES_ACTION = 'admin_notices';
 
 
17
  const PLUGIN_INFO_KEY_NICE_NAME = 'nice_name';
18
  const PLUGIN_INFO_KEY_NAME = 'name';
 
 
 
 
 
19
  /** @var string */
20
  protected $plugin_name;
21
  /** @var string */
@@ -30,6 +37,8 @@ if (!\class_exists('FcfVendor\\WPDesk_Basic_Requirement_Checker')) {
30
  private $min_openssl_version = null;
31
  /** @var array */
32
  protected $plugin_require;
 
 
33
  /** @var array */
34
  private $module_require;
35
  /** @var array */
@@ -100,12 +109,16 @@ if (!\class_exists('FcfVendor\\WPDesk_Basic_Requirement_Checker')) {
100
  /**
101
  * @param string $plugin_name Name in wp format dir/file.php
102
  * @param string $nice_plugin_name Nice plugin name for better looks in notice
 
103
  *
104
  * @return $this
105
  */
106
- public function add_plugin_require($plugin_name, $nice_plugin_name = null)
107
  {
108
- $this->plugin_require[$plugin_name] = array(self::PLUGIN_INFO_KEY_NAME => $plugin_name, self::PLUGIN_INFO_KEY_NICE_NAME => $nice_plugin_name === null ? $plugin_name : $nice_plugin_name);
 
 
 
109
  return $this;
110
  }
111
  /**
@@ -119,7 +132,7 @@ if (!\class_exists('FcfVendor\\WPDesk_Basic_Requirement_Checker')) {
119
  */
120
  public function add_plugin_repository_require($plugin_name, $version, $nice_plugin_name = null)
121
  {
122
- $this->plugin_require[$plugin_name] = array(self::PLUGIN_INFO_KEY_NAME => $plugin_name, 'version' => $version, 'repository_url' => 'http://downloads.wordpress.org/plugin/' . \dirname($plugin_name) . '.latest-stable.zip', self::PLUGIN_INFO_KEY_NICE_NAME => $nice_plugin_name === null ? $plugin_name : $nice_plugin_name);
123
  return $this;
124
  }
125
  /**
@@ -179,6 +192,9 @@ if (!\class_exists('FcfVendor\\WPDesk_Basic_Requirement_Checker')) {
179
  $notices = $this->append_plugin_require_notices($notices);
180
  $notices = $this->append_module_require_notices($notices);
181
  $notices = $this->append_settings_require_notices($notices);
 
 
 
182
  return $notices;
183
  }
184
  /**
@@ -247,6 +263,65 @@ if (!\class_exists('FcfVendor\\WPDesk_Basic_Requirement_Checker')) {
247
  {
248
  return \defined('OPENSSL_VERSION_NUMBER') && \OPENSSL_VERSION_NUMBER > (int) $required_version;
249
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
250
  /**
251
  * @param array $notices
252
  *
@@ -279,7 +354,10 @@ if (!\class_exists('FcfVendor\\WPDesk_Basic_Requirement_Checker')) {
279
  private function prepare_plugin_repository_install_url($plugin_info)
280
  {
281
  $slug = \basename($plugin_info[self::PLUGIN_INFO_KEY_NAME]);
282
- $install_url = \wp_nonce_url(\self_admin_url('update.php?action=install-plugin&plugin=' . $slug), 'install-plugin_' . $slug);
 
 
 
283
  \add_filter('plugins_api', function ($api, $action, $args) use($plugin_info, $slug) {
284
  if ('plugin_information' !== $action || \false !== $api || !isset($args->slug) || $slug !== $args->slug) {
285
  return $api;
@@ -309,7 +387,10 @@ if (!\class_exists('FcfVendor\\WPDesk_Basic_Requirement_Checker')) {
309
  $install_url = $this->prepare_plugin_repository_install_url($plugin_info);
310
  return $this->prepare_notice_message(\sprintf(\wp_kses(\__('The &#8220;%s&#8221; plugin requires free %s plugin. <a href="%s">Install %s →</a>', $this->get_text_domain()), array('a' => array('href' => array()))), $this->plugin_name, $nice_name, \esc_url($install_url), $nice_name));
311
  }
312
- $activate_url = 'plugins.php?action=activate&plugin=' . \urlencode($plugin_info[self::PLUGIN_INFO_KEY_NAME]) . '&plugin_status=all&paged=1&s&_wpnonce=' . \urlencode(\wp_create_nonce('activate-plugin_' . $name));
 
 
 
313
  return $this->prepare_notice_message(\sprintf(\wp_kses(\__('The &#8220;%s&#8221; plugin requires activating %s plugin. <a href="%s">Activate %s →</a>', $this->get_text_domain()), array('a' => array('href' => array()))), $this->plugin_name, $nice_name, \esc_url(\admin_url($activate_url)), $nice_name));
314
  }
315
  return null;
@@ -338,10 +419,8 @@ if (!\class_exists('FcfVendor\\WPDesk_Basic_Requirement_Checker')) {
338
  */
339
  public static function is_wp_plugin_installed($plugin_file)
340
  {
341
- if (!\function_exists('get_plugins')) {
342
- require_once \ABSPATH . '/wp-admin/includes/plugin.php';
343
- }
344
- return \array_key_exists($plugin_file, \get_plugins());
345
  }
346
  /**
347
  * @param array $notices
@@ -430,8 +509,28 @@ if (!\class_exists('FcfVendor\\WPDesk_Basic_Requirement_Checker')) {
430
  {
431
  if (isset($this->plugin_file)) {
432
  \deactivate_plugins(\plugin_basename($this->plugin_file));
 
433
  }
434
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
435
  /**
436
  * Should be called as WordPress action
437
  *
14
  {
15
  const EXTENSION_NAME_OPENSSL = 'openssl';
16
  const HOOK_ADMIN_NOTICES_ACTION = 'admin_notices';
17
+ const HOOK_PLUGIN_DEACTIVATED_ACTION = 'deactivated_plugin';
18
+ const HOOK_PLUGIN_ACTIVATED_ACTION = 'activated_plugin';
19
  const PLUGIN_INFO_KEY_NICE_NAME = 'nice_name';
20
  const PLUGIN_INFO_KEY_NAME = 'name';
21
+ const PLUGIN_INFO_VERSION = 'version';
22
+ const PLUGIN_INFO_FAKE_REQUIRED_MINIMUM_VERSION = '0.0';
23
+ const PLUGIN_INFO_APPEND_PLUGIN_DATA = 'required_version';
24
+ const PLUGIN_INFO_TRANSIENT_NAME = 'require_plugins_data';
25
+ const PLUGIN_INFO_TRANSIENT_EXPIRATION_TIME = 16;
26
  /** @var string */
27
  protected $plugin_name;
28
  /** @var string */
37
  private $min_openssl_version = null;
38
  /** @var array */
39
  protected $plugin_require;
40
+ /** @var bool */
41
+ protected $should_check_plugin_versions = \false;
42
  /** @var array */
43
  private $module_require;
44
  /** @var array */
109
  /**
110
  * @param string $plugin_name Name in wp format dir/file.php
111
  * @param string $nice_plugin_name Nice plugin name for better looks in notice
112
+ * @param string $plugin_require_version required plugin minimum version
113
  *
114
  * @return $this
115
  */
116
+ public function add_plugin_require($plugin_name, $nice_plugin_name = null, $plugin_require_version = null)
117
  {
118
+ if ($plugin_require_version) {
119
+ $this->should_check_plugin_versions = \true;
120
+ }
121
+ $this->plugin_require[$plugin_name] = array(self::PLUGIN_INFO_KEY_NAME => $plugin_name, self::PLUGIN_INFO_KEY_NICE_NAME => $nice_plugin_name === null ? $plugin_name : $nice_plugin_name, self::PLUGIN_INFO_VERSION => $plugin_require_version === null ? self::PLUGIN_INFO_FAKE_REQUIRED_MINIMUM_VERSION : $plugin_require_version);
122
  return $this;
123
  }
124
  /**
132
  */
133
  public function add_plugin_repository_require($plugin_name, $version, $nice_plugin_name = null)
134
  {
135
+ $this->plugin_require[$plugin_name] = array(self::PLUGIN_INFO_KEY_NAME => $plugin_name, self::PLUGIN_INFO_VERSION => $version, 'repository_url' => 'http://downloads.wordpress.org/plugin/' . \dirname($plugin_name) . '.latest-stable.zip', self::PLUGIN_INFO_KEY_NICE_NAME => $nice_plugin_name === null ? $plugin_name : $nice_plugin_name);
136
  return $this;
137
  }
138
  /**
192
  $notices = $this->append_plugin_require_notices($notices);
193
  $notices = $this->append_module_require_notices($notices);
194
  $notices = $this->append_settings_require_notices($notices);
195
+ if ($this->should_check_plugin_versions) {
196
+ $notices = $this->check_minimum_require_plugins_version_and_append_notices($notices);
197
+ }
198
  return $notices;
199
  }
200
  /**
263
  {
264
  return \defined('OPENSSL_VERSION_NUMBER') && \OPENSSL_VERSION_NUMBER > (int) $required_version;
265
  }
266
+ /**
267
+ * @param $notices array
268
+ *
269
+ * @return array
270
+ */
271
+ private function check_minimum_require_plugins_version_and_append_notices($notices)
272
+ {
273
+ $required_plugins = $this->retrieve_required_plugins_data();
274
+ if (\count($required_plugins) > 0) {
275
+ foreach ($required_plugins as $plugin) {
276
+ if (\version_compare($plugin['Version'], $plugin[self::PLUGIN_INFO_APPEND_PLUGIN_DATA], '<')) {
277
+ $notices[] = $this->prepare_notice_message(\sprintf(\__('The &#8220;%s&#8221; plugin requires at least %s version of %s to work correctly. Please update it', $this->get_text_domain()), \esc_html($this->plugin_name), $plugin[self::PLUGIN_INFO_APPEND_PLUGIN_DATA], $plugin['Name']));
278
+ }
279
+ }
280
+ }
281
+ return $notices;
282
+ }
283
+ /**
284
+ * Check the plugins directory and retrieve all plugin files with plugin data.
285
+ *
286
+ * @return array In format [ 'plugindir/pluginfile.php' => ['Name' => 'Plugin Name', 'Version' => '1.0.1', ...], ]
287
+ */
288
+ private static function retrieve_plugins_data_in_transient()
289
+ {
290
+ $plugins = \get_transient(self::PLUGIN_INFO_TRANSIENT_NAME);
291
+ if ($plugins === \false) {
292
+ if (!\function_exists('get_plugins')) {
293
+ require_once \ABSPATH . '/wp-admin/includes/plugin.php';
294
+ }
295
+ $plugins = \function_exists('get_plugins') ? \get_plugins() : array();
296
+ \set_transient(self::PLUGIN_INFO_TRANSIENT_NAME, $plugins, self::PLUGIN_INFO_TRANSIENT_EXPIRATION_TIME);
297
+ }
298
+ return $plugins;
299
+ }
300
+ /**
301
+ * Check the plugins directory and retrieve all required plugin files with plugin data.
302
+ *
303
+ * @return array In format [ 'plugindir/pluginfile.php' => ['Name' => 'Plugin Name', 'Version' => '1.0.1', 'required_version' => '1.0.2']... ]
304
+ */
305
+ private function retrieve_required_plugins_data()
306
+ {
307
+ $require_plugins = array();
308
+ $plugins = self::retrieve_plugins_data_in_transient();
309
+ if (\is_array($plugins)) {
310
+ if (\count($plugins) > 0) {
311
+ if (!empty($this->plugin_require)) {
312
+ foreach ($this->plugin_require as $plugin) {
313
+ $plugin_file_name = $plugin[self::PLUGIN_INFO_KEY_NAME];
314
+ $plugin_version = $plugin[self::PLUGIN_INFO_VERSION];
315
+ if (self::is_wp_plugin_active($plugin_file_name)) {
316
+ $require_plugins[$plugin_file_name] = $plugins[$plugin_file_name];
317
+ $require_plugins[$plugin_file_name][self::PLUGIN_INFO_APPEND_PLUGIN_DATA] = $plugin_version;
318
+ }
319
+ }
320
+ }
321
+ }
322
+ }
323
+ return $require_plugins;
324
+ }
325
  /**
326
  * @param array $notices
327
  *
354
  private function prepare_plugin_repository_install_url($plugin_info)
355
  {
356
  $slug = \basename($plugin_info[self::PLUGIN_INFO_KEY_NAME]);
357
+ $install_url = \self_admin_url('update.php?action=install-plugin&plugin=' . $slug);
358
+ if (\function_exists('wp_nonce_url') && \function_exists('wp_create_nonce')) {
359
+ $install_url = \wp_nonce_url($install_url, 'install-plugin_' . $slug);
360
+ }
361
  \add_filter('plugins_api', function ($api, $action, $args) use($plugin_info, $slug) {
362
  if ('plugin_information' !== $action || \false !== $api || !isset($args->slug) || $slug !== $args->slug) {
363
  return $api;
387
  $install_url = $this->prepare_plugin_repository_install_url($plugin_info);
388
  return $this->prepare_notice_message(\sprintf(\wp_kses(\__('The &#8220;%s&#8221; plugin requires free %s plugin. <a href="%s">Install %s →</a>', $this->get_text_domain()), array('a' => array('href' => array()))), $this->plugin_name, $nice_name, \esc_url($install_url), $nice_name));
389
  }
390
+ $activate_url = 'plugins.php?action=activate&plugin=' . \urlencode($plugin_info[self::PLUGIN_INFO_KEY_NAME]) . '&plugin_status=all&paged=1&s';
391
+ if (\function_exists('wp_create_nonce')) {
392
+ $activate_url .= '&_wpnonce=' . \urlencode(\wp_create_nonce('activate-plugin_' . $name));
393
+ }
394
  return $this->prepare_notice_message(\sprintf(\wp_kses(\__('The &#8220;%s&#8221; plugin requires activating %s plugin. <a href="%s">Activate %s →</a>', $this->get_text_domain()), array('a' => array('href' => array()))), $this->plugin_name, $nice_name, \esc_url(\admin_url($activate_url)), $nice_name));
395
  }
396
  return null;
419
  */
420
  public static function is_wp_plugin_installed($plugin_file)
421
  {
422
+ $plugins_data = self::retrieve_plugins_data_in_transient();
423
+ return \array_key_exists($plugin_file, (array) $plugins_data);
 
 
424
  }
425
  /**
426
  * @param array $notices
509
  {
510
  if (isset($this->plugin_file)) {
511
  \deactivate_plugins(\plugin_basename($this->plugin_file));
512
+ \delete_transient(self::PLUGIN_INFO_TRANSIENT_NAME);
513
  }
514
  }
515
+ /**
516
+ * Triggers the transient delete after plugin deactivated
517
+ *
518
+ *@return void
519
+ */
520
+ public function transient_delete_on_plugin_version_changed()
521
+ {
522
+ \add_action(self::HOOK_PLUGIN_DEACTIVATED_ACTION, array($this, 'handle_transient_delete_action'));
523
+ \add_action(self::HOOK_PLUGIN_ACTIVATED_ACTION, array($this, 'handle_transient_delete_action'));
524
+ }
525
+ /**
526
+ * Handles the transient delete
527
+ *
528
+ * @return void
529
+ */
530
+ public function handle_transient_delete_action()
531
+ {
532
+ \delete_transient(self::PLUGIN_INFO_TRANSIENT_NAME);
533
+ }
534
  /**
535
  * Should be called as WordPress action
536
  *
vendor_prefixed/wpdesk/wp-basic-requirements/src/Basic_Requirement_Checker_Factory.php CHANGED
@@ -25,7 +25,7 @@ class WPDesk_Basic_Requirement_Checker_Factory
25
  */
26
  public function create_requirement_checker($plugin_file, $plugin_name, $text_domain = null)
27
  {
28
- return new \FcfVendor\WPDesk_Basic_Requirement_Checker($plugin_file, $plugin_name, $this->initialize_translations($text_domain), null, null);
29
  }
30
  /**
31
  * Creates a requirement checker according to given requirements array info.
@@ -39,11 +39,13 @@ class WPDesk_Basic_Requirement_Checker_Factory
39
  */
40
  public function create_from_requirement_array($plugin_file, $plugin_name, $requirements, $text_domain = null)
41
  {
42
- $requirements_checker = new \FcfVendor\WPDesk_Basic_Requirement_Checker_With_Update_Disable($plugin_file, $plugin_name, $this->initialize_translations($text_domain), $requirements['php'], $requirements['wp']);
43
  if (isset($requirements['plugins'])) {
44
  foreach ($requirements['plugins'] as $requirement) {
45
- $requirements_checker->add_plugin_require($requirement['name'], $requirement['nice_name']);
 
46
  }
 
47
  }
48
  if (isset($requirements['repo_plugins'])) {
49
  foreach ($requirements['repo_plugins'] as $requirement) {
@@ -57,29 +59,4 @@ class WPDesk_Basic_Requirement_Checker_Factory
57
  }
58
  return $requirements_checker;
59
  }
60
- /**
61
- * Tries to initialize translations for requirement checker. If not given then default library translation is used.
62
- *
63
- * @param string|null $text_domain
64
- *
65
- * @return string
66
- */
67
- private function initialize_translations($text_domain = null)
68
- {
69
- if ($text_domain === null) {
70
- $text_domain = self::LIBRARY_TEXT_DOMAIN;
71
- if (\function_exists('determine_locale')) {
72
- $locale = \determine_locale();
73
- } else {
74
- // before WP 5.0 compatibility
75
- $locale = \get_locale();
76
- }
77
- $locale = \apply_filters('plugin_locale', $locale, self::LIBRARY_TEXT_DOMAIN);
78
- $lang_mo_file = __DIR__ . '/../lang/' . self::LIBRARY_TEXT_DOMAIN . '-' . $locale . '.mo';
79
- if (\file_exists($lang_mo_file)) {
80
- \load_textdomain(self::LIBRARY_TEXT_DOMAIN, $lang_mo_file);
81
- }
82
- }
83
- return $text_domain;
84
- }
85
  }
25
  */
26
  public function create_requirement_checker($plugin_file, $plugin_name, $text_domain = null)
27
  {
28
+ return new \FcfVendor\WPDesk_Basic_Requirement_Checker($plugin_file, $plugin_name, $text_domain, null, null);
29
  }
30
  /**
31
  * Creates a requirement checker according to given requirements array info.
39
  */
40
  public function create_from_requirement_array($plugin_file, $plugin_name, $requirements, $text_domain = null)
41
  {
42
+ $requirements_checker = new \FcfVendor\WPDesk_Basic_Requirement_Checker_With_Update_Disable($plugin_file, $plugin_name, $text_domain, $requirements['php'], $requirements['wp']);
43
  if (isset($requirements['plugins'])) {
44
  foreach ($requirements['plugins'] as $requirement) {
45
+ $version = isset($requirement['version']) ? $requirement['version'] : null;
46
+ $requirements_checker->add_plugin_require($requirement['name'], $requirement['nice_name'], $version);
47
  }
48
+ $requirements_checker->transient_delete_on_plugin_version_changed();
49
  }
50
  if (isset($requirements['repo_plugins'])) {
51
  foreach ($requirements['repo_plugins'] as $requirement) {
59
  }
60
  return $requirements_checker;
61
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62
  }
vendor_prefixed/wpdesk/wp-builder/src/Plugin/AbstractPlugin.php CHANGED
@@ -3,28 +3,53 @@
3
  namespace FcfVendor\WPDesk\PluginBuilder\Plugin;
4
 
5
  /**
6
- * Base plugin class for WP Desk plugins.
7
  *
8
- * *************************************************************
9
- * * Important! This class should be not modified! *
10
- * * This class is loaded at startup from first loaded plugin! *
11
- * *************************************************************
12
  *
13
- * @author Grzegorz, Dyszczo
14
  *
 
 
 
15
  */
16
- abstract class AbstractPlugin implements \FcfVendor\WPDesk_Translable
17
  {
18
- /** @var \WPDesk_Plugin_Info */
 
 
 
 
19
  protected $plugin_info;
20
- /** @var string */
 
 
 
 
21
  protected $plugin_namespace;
22
- /** @var string */
 
 
 
 
23
  protected $plugin_url;
24
- /** @var string */
 
 
 
 
25
  protected $docs_url;
26
- /** @var string */
 
 
 
 
27
  protected $settings_url;
 
 
 
 
 
 
28
  /**
29
  * AbstractPlugin constructor.
30
  *
@@ -34,27 +59,34 @@ abstract class AbstractPlugin implements \FcfVendor\WPDesk_Translable
34
  {
35
  $this->plugin_info = $plugin_info;
36
  $this->plugin_namespace = \strtolower($plugin_info->get_plugin_dir());
37
- }
38
- public function init()
39
- {
40
  $this->init_base_variables();
41
- $this->hooks();
42
  }
 
 
 
 
 
 
 
43
  public function init_base_variables()
44
  {
45
- $this->plugin_url = \plugin_dir_url($this->plugin_info->get_plugin_dir());
46
  }
47
  /**
 
 
 
 
 
48
  * @return void
49
  */
50
- protected function hooks()
51
  {
52
- \add_action('admin_enqueue_scripts', [$this, 'admin_enqueue_scripts']);
53
- \add_action('wp_enqueue_scripts', [$this, 'wp_enqueue_scripts']);
54
- \add_action('plugins_loaded', [$this, 'load_plugin_text_domain']);
55
- \add_filter('plugin_action_links_' . \plugin_basename($this->get_plugin_file_path()), [$this, 'links_filter']);
56
  }
57
  /**
 
 
58
  * @return string
59
  */
60
  public function get_plugin_file_path()
@@ -62,71 +94,108 @@ abstract class AbstractPlugin implements \FcfVendor\WPDesk_Translable
62
  return $this->plugin_info->get_plugin_file_name();
63
  }
64
  /**
65
- * @return $this
 
 
66
  */
67
- public function get_plugin()
68
  {
69
- return $this;
70
  }
71
  /**
72
- * @return void
 
 
73
  */
74
- public function load_plugin_text_domain()
75
  {
76
- \load_plugin_textdomain($this->get_text_domain(), \false, $this->get_namespace() . '/lang/');
77
  }
78
  /**
 
 
79
  * @return string
80
  */
81
- public function get_text_domain()
82
  {
83
- return $this->plugin_info->get_text_domain();
84
  }
85
  /**
 
 
86
  * @return string
87
  */
88
- public function get_namespace()
89
- {
90
- return $this->plugin_namespace;
91
- }
92
  public function get_plugin_assets_url()
93
  {
94
  return \esc_url(\trailingslashit($this->get_plugin_url() . 'assets'));
95
  }
96
  /**
 
 
97
  *
98
- * @return string
99
  */
100
- public function get_plugin_url()
101
  {
102
- return \esc_url(\trailingslashit($this->plugin_url));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
103
  }
 
 
 
 
 
104
  public function admin_enqueue_scripts()
105
  {
106
  }
 
 
 
 
 
107
  public function wp_enqueue_scripts()
108
  {
109
  }
110
  /**
111
- * action_links function.
112
- *
113
- * @access public
114
  *
115
- * @param mixed $links
116
  *
117
- * @return array
118
  */
119
  public function links_filter($links)
120
  {
121
  $support_link = \get_locale() === 'pl_PL' ? 'https://www.wpdesk.pl/support/' : 'https://www.wpdesk.net/support';
122
- $plugin_links = ['<a href="' . $support_link . '">' . \__('Support', $this->get_text_domain()) . '</a>'];
 
 
 
123
  $links = \array_merge($plugin_links, $links);
124
  if ($this->docs_url) {
125
- $plugin_links = ['<a href="' . $this->docs_url . '">' . \__('Docs', $this->get_text_domain()) . '</a>'];
126
  $links = \array_merge($plugin_links, $links);
127
  }
128
  if ($this->settings_url) {
129
- $plugin_links = ['<a href="' . $this->settings_url . '">' . \__('Settings', $this->get_text_domain()) . '</a>'];
130
  $links = \array_merge($plugin_links, $links);
131
  }
132
  return $links;
3
  namespace FcfVendor\WPDesk\PluginBuilder\Plugin;
4
 
5
  /**
6
+ * Base plugin with most basic functionalities used by every WPDesk plugin.
7
  *
 
 
 
 
8
  *
9
+ * Known issues:
10
  *
11
+ * The class name is too generic but can't be changed as it would introduce a major incompatibility for most of the plugins.
12
+ * The $plugin_url, $docs_url and most other fields should be removed as they only litter the place but for compatibility reasons we can't do it right now.
13
+ * Hook methods should be moved to external classes but for compatibility reasons we can't do it right now.
14
  */
15
+ abstract class AbstractPlugin extends \FcfVendor\WPDesk\PluginBuilder\Plugin\SlimPlugin
16
  {
17
+ /**
18
+ * Most info about plugin internals.
19
+ *
20
+ * @var \WPDesk_Plugin_Info
21
+ */
22
  protected $plugin_info;
23
+ /**
24
+ * Unique string for this plugin in [a-z_]+ format.
25
+ *
26
+ * @var string
27
+ */
28
  protected $plugin_namespace;
29
+ /**
30
+ * Absolute URL to the plugin dir.
31
+ *
32
+ * @var string
33
+ */
34
  protected $plugin_url;
35
+ /**
36
+ * Absolute URL to the plugin docs.
37
+ *
38
+ * @var string
39
+ */
40
  protected $docs_url;
41
+ /**
42
+ * Absolute URL to the plugin settings url.
43
+ *
44
+ * @var string
45
+ */
46
  protected $settings_url;
47
+ /**
48
+ * Support URL.
49
+ *
50
+ * @var string
51
+ */
52
+ protected $support_url;
53
  /**
54
  * AbstractPlugin constructor.
55
  *
59
  {
60
  $this->plugin_info = $plugin_info;
61
  $this->plugin_namespace = \strtolower($plugin_info->get_plugin_dir());
62
+ $this->plugin_url = $this->plugin_info->get_plugin_url();
 
 
63
  $this->init_base_variables();
 
64
  }
65
+ /**
66
+ * Initialize internal state of the plugin.
67
+ *
68
+ * @return void
69
+ * @deprecated Just use __construct to initialize plugin internal state.
70
+ *
71
+ */
72
  public function init_base_variables()
73
  {
 
74
  }
75
  /**
76
+ * Initializes plugin external state.
77
+ *
78
+ * The plugin internal state is initialized in the constructor and the plugin should be internally consistent after creation.
79
+ * The external state includes hooks execution, communication with other plugins, integration with WC etc.
80
+ *
81
  * @return void
82
  */
83
+ public function init()
84
  {
85
+ $this->hooks();
 
 
 
86
  }
87
  /**
88
+ * Returns absolute path to the plugin dir.
89
+ *
90
  * @return string
91
  */
92
  public function get_plugin_file_path()
94
  return $this->plugin_info->get_plugin_file_name();
95
  }
96
  /**
97
+ * Returns plugin text domain.
98
+ *
99
+ * @return string
100
  */
101
+ public function get_text_domain()
102
  {
103
+ return $this->plugin_info->get_text_domain();
104
  }
105
  /**
106
+ * Returns unique string for plugin in [a-z_]+ format. Can be used as plugin id in various places like plugin slug etc.
107
+ *
108
+ * @return string
109
  */
110
+ public function get_namespace()
111
  {
112
+ return $this->plugin_namespace;
113
  }
114
  /**
115
+ * Returns plugin absolute URL.
116
+ *
117
  * @return string
118
  */
119
+ public function get_plugin_url()
120
  {
121
+ return \esc_url(\trailingslashit($this->plugin_url));
122
  }
123
  /**
124
+ * Returns plugin absolute URL to dir with front end assets.
125
+ *
126
  * @return string
127
  */
 
 
 
 
128
  public function get_plugin_assets_url()
129
  {
130
  return \esc_url(\trailingslashit($this->get_plugin_url() . 'assets'));
131
  }
132
  /**
133
+ * @return $this
134
+ * @deprecated For backward compatibility.
135
  *
 
136
  */
137
+ public function get_plugin()
138
  {
139
+ return $this;
140
+ }
141
+ /**
142
+ * Integrate with WordPress and with other plugins using action/filter system.
143
+ *
144
+ * @return void
145
+ */
146
+ protected function hooks()
147
+ {
148
+ \add_action('admin_enqueue_scripts', [$this, 'admin_enqueue_scripts']);
149
+ \add_action('wp_enqueue_scripts', [$this, 'wp_enqueue_scripts']);
150
+ \add_action('plugins_loaded', [$this, 'load_plugin_text_domain']);
151
+ \add_filter('plugin_action_links_' . \plugin_basename($this->get_plugin_file_path()), [$this, 'links_filter']);
152
+ }
153
+ /**
154
+ * Initialize plugin test domain. This is a hook function. Do not execute directly.
155
+ *
156
+ * @return void
157
+ */
158
+ public function load_plugin_text_domain()
159
+ {
160
+ \load_plugin_textdomain($this->get_text_domain(), \false, $this->get_namespace() . '/lang/');
161
  }
162
+ /**
163
+ * Append JS scripts in the WordPress admin panel. This is a hook function. Do not execute directly.
164
+ *
165
+ * @return void
166
+ */
167
  public function admin_enqueue_scripts()
168
  {
169
  }
170
+ /**
171
+ * Append JS scripts in WordPress. This is a hook function. Do not execute directly.
172
+ *
173
+ * @return void
174
+ */
175
  public function wp_enqueue_scripts()
176
  {
177
  }
178
  /**
179
+ * Initialize plugin admin links. This is a hook function. Do not execute directly.
 
 
180
  *
181
+ * @param string[] $links
182
  *
183
+ * @return string[]
184
  */
185
  public function links_filter($links)
186
  {
187
  $support_link = \get_locale() === 'pl_PL' ? 'https://www.wpdesk.pl/support/' : 'https://www.wpdesk.net/support';
188
+ if ($this->support_url) {
189
+ $support_link = $this->support_url;
190
+ }
191
+ $plugin_links = ['<a target="_blank" href="' . $support_link . '">' . \__('Support', $this->get_text_domain()) . '</a>'];
192
  $links = \array_merge($plugin_links, $links);
193
  if ($this->docs_url) {
194
+ $plugin_links = ['<a target="_blank" href="' . $this->docs_url . '">' . \__('Docs', $this->get_text_domain()) . '</a>'];
195
  $links = \array_merge($plugin_links, $links);
196
  }
197
  if ($this->settings_url) {
198
+ $plugin_links = ['<a target="_blank" href="' . $this->settings_url . '">' . \__('Settings', $this->get_text_domain()) . '</a>'];
199
  $links = \array_merge($plugin_links, $links);
200
  }
201
  return $links;
vendor_prefixed/wpdesk/wp-builder/src/Plugin/Activateable.php ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace FcfVendor\WPDesk\PluginBuilder\Plugin;
4
+
5
+ /**
6
+ * Tag the plugin with this ingterface to hook it to the WordPress activation hook.
7
+ *
8
+ * Note: works from plugin flow ^2.2.
9
+ *
10
+ * @package WPDesk\PluginBuilder\Plugin
11
+ */
12
+ interface Activateable
13
+ {
14
+ /**
15
+ * Plugin activated in WordPress. Do not execute directly.
16
+ *
17
+ * @return void
18
+ */
19
+ public function activate();
20
+ }
vendor_prefixed/wpdesk/wp-builder/src/Plugin/ActivationAware.php CHANGED
@@ -3,7 +3,7 @@
3
  namespace FcfVendor\WPDesk\PluginBuilder\Plugin;
4
 
5
  /**
6
- * It means that this class is should know about subscription activation
7
  *
8
  * @package WPDesk\PluginBuilder\Plugin
9
  */
3
  namespace FcfVendor\WPDesk\PluginBuilder\Plugin;
4
 
5
  /**
6
+ * It means that this class is should know about SUBSCRIPTION activation
7
  *
8
  * @package WPDesk\PluginBuilder\Plugin
9
  */
vendor_prefixed/wpdesk/wp-builder/src/Plugin/Conditional.php ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace FcfVendor\WPDesk\PluginBuilder\Plugin;
4
+
5
+ /**
6
+ * Something that can be instantiated/hooked conditionally.
7
+ *
8
+ * @see https://github.com/mwpd/basic-scaffold/blob/master/src/Infrastructure/Conditional.php by Alain Schlesser
9
+ *
10
+ * @package WPDesk\PluginBuilder\Plugin
11
+ */
12
+ interface Conditional
13
+ {
14
+ /**
15
+ * Check whether the conditional object is currently needed.
16
+ *
17
+ * @return bool Whether the conditional object is needed.
18
+ */
19
+ public static function is_needed();
20
+ }
vendor_prefixed/wpdesk/wp-builder/src/Plugin/Deactivateable.php ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace FcfVendor\WPDesk\PluginBuilder\Plugin;
4
+
5
+ /**
6
+ * Tag the plugin with this ingterface to hook it to the WordPress deactivation hook.
7
+ *
8
+ * Note: works from plugin flow ^2.2.
9
+ *
10
+ * @package WPDesk\PluginBuilder\Plugin
11
+ */
12
+ interface Deactivateable
13
+ {
14
+ /**
15
+ * Plugin deactivate in WordPress. Do not execute directly.
16
+ *
17
+ * @return void
18
+ */
19
+ public function deactivate();
20
+ }
vendor_prefixed/wpdesk/wp-builder/src/Plugin/Hookable.php CHANGED
@@ -7,7 +7,7 @@ interface Hookable
7
  /**
8
  * Init hooks (actions and filters).
9
  *
10
- * @return null
11
  */
12
  public function hooks();
13
  }
7
  /**
8
  * Init hooks (actions and filters).
9
  *
10
+ * @return void
11
  */
12
  public function hooks();
13
  }
vendor_prefixed/wpdesk/wp-builder/src/Plugin/HookableParent.php CHANGED
@@ -45,7 +45,13 @@ trait HookableParent
45
  {
46
  /** @var Hookable $hookable_object $hookable_object */
47
  foreach ($this->hookable_objects as $hookable_object) {
48
- $hookable_object->hooks();
 
 
 
 
 
 
49
  }
50
  }
51
  }
45
  {
46
  /** @var Hookable $hookable_object $hookable_object */
47
  foreach ($this->hookable_objects as $hookable_object) {
48
+ if ($hookable_object instanceof \FcfVendor\WPDesk\PluginBuilder\Plugin\Conditional) {
49
+ if ($hookable_object::is_needed()) {
50
+ $hookable_object->hooks();
51
+ }
52
+ } else {
53
+ $hookable_object->hooks();
54
+ }
55
  }
56
  }
57
  }
vendor_prefixed/wpdesk/wp-builder/src/Plugin/SlimPlugin.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace FcfVendor\WPDesk\PluginBuilder\Plugin;
4
+
5
+ /**
6
+ * Most clean plugin class with only most important details.
7
+ */
8
+ abstract class SlimPlugin implements \FcfVendor\WPDesk_Translatable
9
+ {
10
+ /**
11
+ * Initializes plugin external state.
12
+ *
13
+ * The plugin internal state is initialized in the constructor and the plugin should be internally consistent after creation.
14
+ * The external state includes hooks execution, communication with other plugins, integration with WC etc.
15
+ *
16
+ * @return void
17
+ */
18
+ public abstract function init();
19
+ }
vendor_prefixed/wpdesk/wp-builder/src/Storage/StorageFactory.php CHANGED
@@ -9,6 +9,6 @@ class StorageFactory
9
  */
10
  public function create_storage()
11
  {
12
- return new \FcfVendor\WPDesk\PluginBuilder\Storage\StaticStorage();
13
  }
14
  }
9
  */
10
  public function create_storage()
11
  {
12
+ return new \FcfVendor\WPDesk\PluginBuilder\Storage\WordpressFilterStorage();
13
  }
14
  }
vendor_prefixed/wpdesk/wp-builder/src/Storage/WordpressFilterStorage.php ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace FcfVendor\WPDesk\PluginBuilder\Storage;
4
+
5
+ use FcfVendor\WPDesk\PluginBuilder\Plugin\AbstractPlugin;
6
+ /**
7
+ * Can store plugin instances in WordPress filter system.
8
+ *
9
+ * @package WPDesk\PluginBuilder\Storage
10
+ */
11
+ class WordpressFilterStorage implements \FcfVendor\WPDesk\PluginBuilder\Storage\PluginStorage
12
+ {
13
+ const STORAGE_FILTER_NAME = 'wpdesk_plugin_instances';
14
+ /**
15
+ * @param string $class
16
+ * @param AbstractPlugin $object
17
+ */
18
+ public function add_to_storage($class, $object)
19
+ {
20
+ \add_filter(self::STORAGE_FILTER_NAME, static function ($plugins) use($class, $object) {
21
+ if (isset($plugins[$class])) {
22
+ throw new \FcfVendor\WPDesk\PluginBuilder\Storage\Exception\ClassAlreadyExists("Class {$class} already exists");
23
+ }
24
+ $plugins[$class] = $object;
25
+ return $plugins;
26
+ });
27
+ }
28
+ /**
29
+ * @param string $class
30
+ *
31
+ * @return AbstractPlugin
32
+ */
33
+ public function get_from_storage($class)
34
+ {
35
+ $plugins = \apply_filters(self::STORAGE_FILTER_NAME, []);
36
+ if (isset($plugins[$class])) {
37
+ return $plugins[$class];
38
+ }
39
+ throw new \FcfVendor\WPDesk\PluginBuilder\Storage\Exception\ClassNotExists("Class {$class} not exists in storage");
40
+ }
41
+ }
vendor_prefixed/wpdesk/wp-notice/src/WPDesk/Notice/AjaxHandler.php CHANGED
@@ -67,9 +67,9 @@ class AjaxHandler implements \FcfVendor\WPDesk\PluginBuilder\Plugin\HookablePlug
67
  public function processAjaxNoticeDismiss()
68
  {
69
  if (isset($_POST[self::POST_FIELD_NOTICE_NAME])) {
70
- $noticeName = $_POST[self::POST_FIELD_NOTICE_NAME];
71
  if (isset($_POST[self::POST_FIELD_SOURCE])) {
72
- $source = $_POST[self::POST_FIELD_SOURCE];
73
  } else {
74
  $source = null;
75
  }
67
  public function processAjaxNoticeDismiss()
68
  {
69
  if (isset($_POST[self::POST_FIELD_NOTICE_NAME])) {
70
+ $noticeName = \sanitize_text_field($_POST[self::POST_FIELD_NOTICE_NAME]);
71
  if (isset($_POST[self::POST_FIELD_SOURCE])) {
72
+ $source = \sanitize_text_field($_POST[self::POST_FIELD_SOURCE]);
73
  } else {
74
  $source = null;
75
  }
vendor_prefixed/wpdesk/wp-plugin-flow/composer.json CHANGED
@@ -9,16 +9,17 @@
9
  "require": {
10
  "php": ">=5.6",
11
  "wpdesk\/wp-basic-requirements": "^3",
12
- "wpdesk\/wp-builder": "^1.3.2",
13
- "wpdesk\/wp-wpdesk-license": "^2.4",
14
- "wpdesk\/wp-wpdesk-helper": "^2.0.3",
15
  "wpdesk\/wp-wpdesk-tracker": "^2.0.4"
16
  },
17
  "require-dev": {
18
  "phpunit\/phpunit": "<7",
19
  "wp-coding-standards\/wpcs": "^0.14.1",
20
  "squizlabs\/php_codesniffer": "^3.4.2",
21
- "10up\/wp_mock": "^0.2"
 
22
  },
23
  "autoload": {
24
  "classmap": [
@@ -31,6 +32,13 @@
31
  "tests\/Stub"
32
  ]
33
  },
 
 
 
 
 
 
 
34
  "scripts": {
35
  "phpunit-unit": "phpunit --configuration phpunit-unit.xml --coverage-text --colors=never",
36
  "phpunit-unit-fast": "phpunit --configuration phpunit-unit.xml --no-coverage",
9
  "require": {
10
  "php": ">=5.6",
11
  "wpdesk\/wp-basic-requirements": "^3",
12
+ "wpdesk\/wp-builder": "^1.4",
13
+ "wpdesk\/wp-wpdesk-license": "^2.6",
14
+ "wpdesk\/wp-wpdesk-helper": "^2.1",
15
  "wpdesk\/wp-wpdesk-tracker": "^2.0.4"
16
  },
17
  "require-dev": {
18
  "phpunit\/phpunit": "<7",
19
  "wp-coding-standards\/wpcs": "^0.14.1",
20
  "squizlabs\/php_codesniffer": "^3.4.2",
21
+ "10up\/wp_mock": "^0.2",
22
+ "wpdesk\/wp-wpdesk-composer": "^2.3"
23
  },
24
  "autoload": {
25
  "classmap": [
32
  "tests\/Stub"
33
  ]
34
  },
35
+ "extra": {
36
+ "text-domain": "wp-plugin-flow",
37
+ "translations-folder": "lang",
38
+ "po-files": {
39
+ "pl_PL": "pl_PL.po"
40
+ }
41
+ },
42
  "scripts": {
43
  "phpunit-unit": "phpunit --configuration phpunit-unit.xml --coverage-text --colors=never",
44
  "phpunit-unit-fast": "phpunit --configuration phpunit-unit.xml --no-coverage",
vendor_prefixed/wpdesk/wp-plugin-flow/lang/wp-plugin-flow-pl_PL.mo DELETED
Binary file
vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/BuilderTrait.php ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace FcfVendor\WPDesk\Plugin\Flow\Initialization;
4
+
5
+ use FcfVendor\WPDesk\PluginBuilder\Plugin\Activateable;
6
+ use FcfVendor\WPDesk\PluginBuilder\Plugin\Deactivateable;
7
+ use FcfVendor\WPDesk\PluginBuilder\Plugin\SlimPlugin;
8
+ use FcfVendor\WPDesk\PluginBuilder\Storage\StorageFactory;
9
+ /**
10
+ * Helps with plugin building concepts.
11
+ *
12
+ * @package WPDesk\Plugin\Flow\Initialization
13
+ */
14
+ trait BuilderTrait
15
+ {
16
+ /**
17
+ * Build plugin from info.
18
+ *
19
+ * @param \WPDesk_Plugin_Info $plugin_info
20
+ *
21
+ * @return SlimPlugin
22
+ */
23
+ private function build_plugin(\FcfVendor\WPDesk_Plugin_Info $plugin_info)
24
+ {
25
+ $class_name = \apply_filters('wp_builder_plugin_class', $plugin_info->get_class_name());
26
+ /** @var SlimPlugin $plugin */
27
+ $plugin = new $class_name($plugin_info);
28
+ return $plugin;
29
+ }
30
+ /**
31
+ * Initialize WP register hooks that have to be fire before any other.
32
+ *
33
+ * @param \WPDesk_Plugin_Info $plugin_info
34
+ * @param SlimPlugin $plugin
35
+ *
36
+ * @return SlimPlugin
37
+ */
38
+ private function init_register_hooks(\FcfVendor\WPDesk_Plugin_Info $plugin_info, \FcfVendor\WPDesk\PluginBuilder\Plugin\SlimPlugin $plugin)
39
+ {
40
+ if ($plugin instanceof \FcfVendor\WPDesk\PluginBuilder\Plugin\Activateable) {
41
+ \register_activation_hook($plugin_info->get_plugin_file_name(), [$plugin, 'activate']);
42
+ }
43
+ if ($plugin instanceof \FcfVendor\WPDesk\PluginBuilder\Plugin\Deactivateable) {
44
+ \register_deactivation_hook($plugin_info->get_plugin_file_name(), [$plugin, 'deactivate']);
45
+ }
46
+ return $plugin;
47
+ }
48
+ /**
49
+ * Store plugin for others to use.
50
+ *
51
+ * @param SlimPlugin $plugin
52
+ */
53
+ private function store_plugin(\FcfVendor\WPDesk\PluginBuilder\Plugin\SlimPlugin $plugin)
54
+ {
55
+ $storageFactory = new \FcfVendor\WPDesk\PluginBuilder\Storage\StorageFactory();
56
+ $storageFactory->create_storage()->add_to_storage(\get_class($plugin), $plugin);
57
+ }
58
+ /**
59
+ * Init integration layer of the plugin.
60
+ *
61
+ * @param SlimPlugin $plugin
62
+ */
63
+ private function init_plugin(\FcfVendor\WPDesk\PluginBuilder\Plugin\SlimPlugin $plugin)
64
+ {
65
+ \do_action('wp_builder_before_plugin_init', $plugin);
66
+ $plugin->init();
67
+ \do_action('wp_builder_before_init', $plugin);
68
+ }
69
+ }
vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/{HelperInstanceAsFilter.php → HelperInstanceAsFilterTrait.php} RENAMED
@@ -8,10 +8,19 @@ use FcfVendor\WPDesk\Helper\PrefixedHelperAsLibrary;
8
  *
9
  * @package WPDesk\Plugin\Flow\Initialization\Simple
10
  */
11
- trait HelperInstanceAsFilter
12
  {
13
  /** @var \WPDesk\Helper\PrefixedHelperAsLibrary */
14
  private static $helper_instance;
 
 
 
 
 
 
 
 
 
15
  /**
16
  * Returns filter action name for helper instance
17
  *
@@ -52,6 +61,6 @@ trait HelperInstanceAsFilter
52
  \do_action('wpdesk_helper_started', self::$helper_instance, $this->plugin_info);
53
  return self::$helper_instance;
54
  }
55
- });
56
  }
57
  }
8
  *
9
  * @package WPDesk\Plugin\Flow\Initialization\Simple
10
  */
11
+ trait HelperInstanceAsFilterTrait
12
  {
13
  /** @var \WPDesk\Helper\PrefixedHelperAsLibrary */
14
  private static $helper_instance;
15
+ /**
16
+ * Returns version of the helper. Inc when helper is changed and should be instantiated fist.
17
+ *
18
+ * @return int
19
+ */
20
+ private function get_helper_version()
21
+ {
22
+ return 2;
23
+ }
24
  /**
25
  * Returns filter action name for helper instance
26
  *
61
  \do_action('wpdesk_helper_started', self::$helper_instance, $this->plugin_info);
62
  return self::$helper_instance;
63
  }
64
+ }, 10 - $this->get_helper_version());
65
  }
66
  }
vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/InitializationStrategy.php CHANGED
@@ -2,14 +2,26 @@
2
 
3
  namespace FcfVendor\WPDesk\Plugin\Flow\Initialization;
4
 
5
- use FcfVendor\WPDesk\PluginBuilder\Plugin\AbstractPlugin;
6
  /**
7
  * Interface for initialization strategy for plugin. How to initialize it?
8
  */
9
  interface InitializationStrategy
10
  {
11
  /**
12
- * @return AbstractPlugin
 
 
 
 
13
  */
14
- public function run();
 
 
 
 
 
 
 
 
15
  }
2
 
3
  namespace FcfVendor\WPDesk\Plugin\Flow\Initialization;
4
 
5
+ use FcfVendor\WPDesk\PluginBuilder\Plugin\SlimPlugin;
6
  /**
7
  * Interface for initialization strategy for plugin. How to initialize it?
8
  */
9
  interface InitializationStrategy
10
  {
11
  /**
12
+ * Run tasks that prepares plugin to work. Have to run before plugin loaded.
13
+ *
14
+ * @param \WPDesk_Plugin_Info $plugin_info
15
+ *
16
+ * @return SlimPlugin
17
  */
18
+ public function run_before_init(\FcfVendor\WPDesk_Plugin_Info $plugin_info);
19
+ /**
20
+ * Run task that integrates plugin with other dependencies. Can be run in plugins_loaded.
21
+ *
22
+ * @param \WPDesk_Plugin_Info $plugin_info
23
+ *
24
+ * @return SlimPlugin
25
+ */
26
+ public function run_init(\FcfVendor\WPDesk_Plugin_Info $plugin_info);
27
  }
vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/{PluginDisablerByFile.php → PluginDisablerByFileTrait.php} RENAMED
@@ -5,7 +5,7 @@ namespace FcfVendor\WPDesk\Plugin\Flow\Initialization;
5
  /**
6
  * Can disable shared plugin before it's loaded using plugin filename
7
  */
8
- class PluginDisablerByFile
9
  {
10
  /** @var string */
11
  private $plugin_file;
5
  /**
6
  * Can disable shared plugin before it's loaded using plugin filename
7
  */
8
+ class PluginDisablerByFileTrait
9
  {
10
  /** @var string */
11
  private $plugin_file;
vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/Simple/SimpleFactory.php CHANGED
@@ -30,6 +30,6 @@ class SimpleFactory implements \FcfVendor\WPDesk\Plugin\Flow\Initialization\Init
30
  if ($this->free) {
31
  return new \FcfVendor\WPDesk\Plugin\Flow\Initialization\Simple\SimpleFreeStrategy($info);
32
  }
33
- return new \FcfVendor\WPDesk\Plugin\Flow\Initialization\Simple\SimpleStrategy($info);
34
  }
35
  }
30
  if ($this->free) {
31
  return new \FcfVendor\WPDesk\Plugin\Flow\Initialization\Simple\SimpleFreeStrategy($info);
32
  }
33
+ return new \FcfVendor\WPDesk\Plugin\Flow\Initialization\Simple\SimplePaidStrategy($info);
34
  }
35
  }
vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/Simple/SimpleFreeStrategy.php CHANGED
@@ -2,36 +2,55 @@
2
 
3
  namespace FcfVendor\WPDesk\Plugin\Flow\Initialization\Simple;
4
 
 
 
5
  use FcfVendor\WPDesk\Plugin\Flow\Initialization\InitializationStrategy;
6
- use FcfVendor\WPDesk\PluginBuilder\BuildDirector\LegacyBuildDirector;
7
- use FcfVendor\WPDesk\PluginBuilder\Builder\InfoBuilder;
8
- use FcfVendor\WPDesk\PluginBuilder\Plugin\AbstractPlugin;
9
  /**
10
  * Initialize free plugin
11
  * - just build it already
12
  */
13
  class SimpleFreeStrategy implements \FcfVendor\WPDesk\Plugin\Flow\Initialization\InitializationStrategy
14
  {
15
- use HelperInstanceAsFilter;
16
- use TrackerInstanceAsFilter;
 
17
  /** @var \WPDesk_Plugin_Info */
18
- protected $plugin_info;
 
 
19
  public function __construct(\FcfVendor\WPDesk_Plugin_Info $plugin_info)
20
  {
21
  $this->plugin_info = $plugin_info;
22
  }
23
  /**
24
- * Initializes and builds plugin
25
  *
26
- * @return AbstractPlugin
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
  */
28
- public function run()
29
  {
 
 
 
30
  $this->prepare_helper_action();
31
  $this->prepare_tracker_action();
32
- $builder = new \FcfVendor\WPDesk\PluginBuilder\Builder\InfoBuilder($this->plugin_info);
33
- $build_director = new \FcfVendor\WPDesk\PluginBuilder\BuildDirector\LegacyBuildDirector($builder);
34
- $build_director->build_plugin();
35
- return $build_director->get_plugin();
36
  }
37
  }
2
 
3
  namespace FcfVendor\WPDesk\Plugin\Flow\Initialization\Simple;
4
 
5
+ use FcfVendor\WPDesk\Plugin\Flow\Initialization\ActivationTrait;
6
+ use FcfVendor\WPDesk\Plugin\Flow\Initialization\BuilderTrait;
7
  use FcfVendor\WPDesk\Plugin\Flow\Initialization\InitializationStrategy;
8
+ use FcfVendor\WPDesk\PluginBuilder\Plugin\SlimPlugin;
 
 
9
  /**
10
  * Initialize free plugin
11
  * - just build it already
12
  */
13
  class SimpleFreeStrategy implements \FcfVendor\WPDesk\Plugin\Flow\Initialization\InitializationStrategy
14
  {
15
+ use HelperInstanceAsFilterTrait;
16
+ use TrackerInstanceAsFilterTrait;
17
+ use BuilderTrait;
18
  /** @var \WPDesk_Plugin_Info */
19
+ private $plugin_info;
20
+ /** @var SlimPlugin */
21
+ private $plugin;
22
  public function __construct(\FcfVendor\WPDesk_Plugin_Info $plugin_info)
23
  {
24
  $this->plugin_info = $plugin_info;
25
  }
26
  /**
27
+ * Run tasks that prepares plugin to work. Have to run before plugin loaded.
28
  *
29
+ * @param \WPDesk_Plugin_Info $plugin_info
30
+ *
31
+ * @return SlimPlugin
32
+ */
33
+ public function run_before_init(\FcfVendor\WPDesk_Plugin_Info $plugin_info)
34
+ {
35
+ $this->plugin = $this->build_plugin($plugin_info);
36
+ $this->init_register_hooks($plugin_info, $this->plugin);
37
+ }
38
+ /**
39
+ * Run task that integrates plugin with other dependencies. Can be run in plugins_loaded.
40
+ *
41
+ * @param \WPDesk_Plugin_Info $plugin_info
42
+ *
43
+ * @return SlimPlugin
44
  */
45
+ public function run_init(\FcfVendor\WPDesk_Plugin_Info $plugin_info)
46
  {
47
+ if (!$this->plugin) {
48
+ $this->plugin = $this->build_plugin($plugin_info);
49
+ }
50
  $this->prepare_helper_action();
51
  $this->prepare_tracker_action();
52
+ $this->store_plugin($this->plugin);
53
+ $this->init_plugin($this->plugin);
54
+ return $this->plugin;
 
55
  }
56
  }
vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/Simple/{SimpleStrategy.php → SimplePaidStrategy.php} RENAMED
@@ -5,42 +5,65 @@ namespace FcfVendor\WPDesk\Plugin\Flow\Initialization\Simple;
5
  use FcfVendor\WPDesk\Helper\HelperRemover;
6
  use FcfVendor\WPDesk\Helper\PrefixedHelperAsLibrary;
7
  use FcfVendor\WPDesk\License\PluginRegistrator;
8
- use FcfVendor\WPDesk\Plugin\Flow\Initialization\PluginDisablerByFile;
 
 
9
  use FcfVendor\WPDesk\Plugin\Flow\Initialization\InitializationStrategy;
10
- use FcfVendor\WPDesk\PluginBuilder\BuildDirector\LegacyBuildDirector;
11
- use FcfVendor\WPDesk\PluginBuilder\Builder\InfoActivationBuilder;
12
- use FcfVendor\WPDesk\PluginBuilder\Plugin\AbstractPlugin;
13
  /**
14
  * Initialize standard paid plugin
15
  * - register to helper
16
  * - initialize helper
17
  * - build with info about plugin active flag
18
  */
19
- class SimpleStrategy implements \FcfVendor\WPDesk\Plugin\Flow\Initialization\InitializationStrategy
20
  {
21
- use HelperInstanceAsFilter;
22
- use TrackerInstanceAsFilter;
 
23
  /** @var \WPDesk_Plugin_Info */
24
- protected $plugin_info;
 
 
25
  public function __construct(\FcfVendor\WPDesk_Plugin_Info $plugin_info)
26
  {
27
  $this->plugin_info = $plugin_info;
28
  }
29
  /**
30
- * Initializes and builds plugin
31
  *
32
- * @return AbstractPlugin
 
 
33
  */
34
- public function run()
35
  {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
  $this->prepare_tracker_action();
37
  $registrator = $this->register_plugin();
38
  $this->init_helper();
39
  $is_plugin_subscription_active = $registrator instanceof \FcfVendor\WPDesk\License\PluginRegistrator && $registrator->is_active();
40
- $builder = new \FcfVendor\WPDesk\PluginBuilder\Builder\InfoActivationBuilder($this->plugin_info, $is_plugin_subscription_active);
41
- $build_director = new \FcfVendor\WPDesk\PluginBuilder\BuildDirector\LegacyBuildDirector($builder);
42
- $build_director->build_plugin();
43
- return $build_director->get_plugin();
 
 
44
  }
45
  /**
46
  * Register plugin for subscriptions and updates
@@ -105,6 +128,6 @@ class SimpleStrategy implements \FcfVendor\WPDesk\Plugin\Flow\Initialization\Ini
105
  */
106
  private function try_suppress_original_helper_load()
107
  {
108
- (new \FcfVendor\WPDesk\Plugin\Flow\Initialization\PluginDisablerByFile('wpdesk-helper/wpdesk-helper.php'))->disable();
109
  }
110
  }
5
  use FcfVendor\WPDesk\Helper\HelperRemover;
6
  use FcfVendor\WPDesk\Helper\PrefixedHelperAsLibrary;
7
  use FcfVendor\WPDesk\License\PluginRegistrator;
8
+ use FcfVendor\WPDesk\Plugin\Flow\Initialization\ActivationTrait;
9
+ use FcfVendor\WPDesk\Plugin\Flow\Initialization\BuilderTrait;
10
+ use FcfVendor\WPDesk\Plugin\Flow\Initialization\PluginDisablerByFileTrait;
11
  use FcfVendor\WPDesk\Plugin\Flow\Initialization\InitializationStrategy;
12
+ use FcfVendor\WPDesk\PluginBuilder\Plugin\ActivationAware;
13
+ use FcfVendor\WPDesk\PluginBuilder\Plugin\SlimPlugin;
 
14
  /**
15
  * Initialize standard paid plugin
16
  * - register to helper
17
  * - initialize helper
18
  * - build with info about plugin active flag
19
  */
20
+ class SimplePaidStrategy implements \FcfVendor\WPDesk\Plugin\Flow\Initialization\InitializationStrategy
21
  {
22
+ use HelperInstanceAsFilterTrait;
23
+ use TrackerInstanceAsFilterTrait;
24
+ use BuilderTrait;
25
  /** @var \WPDesk_Plugin_Info */
26
+ private $plugin_info;
27
+ /** @var SlimPlugin */
28
+ private $plugin;
29
  public function __construct(\FcfVendor\WPDesk_Plugin_Info $plugin_info)
30
  {
31
  $this->plugin_info = $plugin_info;
32
  }
33
  /**
34
+ * Run tasks that prepares plugin to work. Have to run before plugin loaded.
35
  *
36
+ * @param \WPDesk_Plugin_Info $plugin_info
37
+ *
38
+ * @return SlimPlugin
39
  */
40
+ public function run_before_init(\FcfVendor\WPDesk_Plugin_Info $plugin_info)
41
  {
42
+ $this->plugin = $this->build_plugin($plugin_info);
43
+ $this->init_register_hooks($plugin_info, $this->plugin);
44
+ }
45
+ /**
46
+ * Run task that integrates plugin with other dependencies. Can be run in plugins_loaded.
47
+ *
48
+ * @param \WPDesk_Plugin_Info $plugin_info
49
+ *
50
+ * @return SlimPlugin
51
+ */
52
+ public function run_init(\FcfVendor\WPDesk_Plugin_Info $plugin_info)
53
+ {
54
+ if (!$this->plugin) {
55
+ $this->plugin = $this->build_plugin($plugin_info);
56
+ }
57
  $this->prepare_tracker_action();
58
  $registrator = $this->register_plugin();
59
  $this->init_helper();
60
  $is_plugin_subscription_active = $registrator instanceof \FcfVendor\WPDesk\License\PluginRegistrator && $registrator->is_active();
61
+ if ($this->plugin instanceof \FcfVendor\WPDesk\PluginBuilder\Plugin\ActivationAware && $is_plugin_subscription_active) {
62
+ $this->plugin->set_active();
63
+ }
64
+ $this->store_plugin($this->plugin);
65
+ $this->init_plugin($this->plugin);
66
+ return $this->plugin;
67
  }
68
  /**
69
  * Register plugin for subscriptions and updates
128
  */
129
  private function try_suppress_original_helper_load()
130
  {
131
+ (new \FcfVendor\WPDesk\Plugin\Flow\Initialization\PluginDisablerByFileTrait('wpdesk-helper/wpdesk-helper.php'))->disable();
132
  }
133
  }
vendor_prefixed/wpdesk/wp-plugin-flow/src/Initialization/{TrackerInstanceAsFilter.php → TrackerInstanceAsFilterTrait.php} RENAMED
@@ -7,7 +7,7 @@ namespace FcfVendor\WPDesk\Plugin\Flow\Initialization\Simple;
7
  *
8
  * @package WPDesk\Plugin\Flow\Initialization\Simple\
9
  */
10
- trait TrackerInstanceAsFilter
11
  {
12
  /** @var \WPDesk_Tracker_Interface */
13
  private static $tracker_instance;
7
  *
8
  * @package WPDesk\Plugin\Flow\Initialization\Simple\
9
  */
10
+ trait TrackerInstanceAsFilterTrait
11
  {
12
  /** @var \WPDesk_Tracker_Interface */
13
  private static $tracker_instance;
vendor_prefixed/wpdesk/wp-plugin-flow/src/PluginBootstrap.php CHANGED
@@ -40,15 +40,15 @@ final class PluginBootstrap
40
  /**
41
  * WPDesk_Plugin_Bootstrap constructor.
42
  *
43
- * @param string $plugin_version
44
- * @param string $plugin_release_timestamp
45
- * @param string $plugin_name
46
- * @param string $plugin_class_name
47
- * @param string $plugin_text_domain
48
- * @param string $plugin_dir
49
- * @param string $plugin_file
50
- * @param array $requirements
51
- * @param string $product_id
52
  * @param InitializationFactory $build_factory
53
  */
54
  public function __construct($plugin_version, $plugin_release_timestamp, $plugin_name, $plugin_class_name, $plugin_text_domain, $plugin_dir, $plugin_file, array $requirements, $product_id, \FcfVendor\WPDesk\Plugin\Flow\Initialization\InitializationFactory $build_factory)
@@ -69,42 +69,50 @@ final class PluginBootstrap
69
  */
70
  public function run()
71
  {
72
- $this->init_translations();
73
- \add_action('plugins_loaded', [$this, 'action_check_requirements_and_load'], self::PRIORITY_BEFORE_SHARED_CLASS_LOADER);
 
 
 
 
 
 
 
 
 
 
 
 
 
74
  }
75
  /**
76
- * Adds text domain used in a library
 
 
77
  */
78
- private function init_translations()
79
  {
80
- if (\function_exists('determine_locale')) {
81
- $locale = \determine_locale();
82
- } else {
83
- // before WP 5.0 compatibility
84
- $locale = \get_locale();
85
- }
86
- $locale = \apply_filters('plugin_locale', $locale, self::LIBRARY_TEXT_DOMAIN);
87
- $lang_mo_file = __DIR__ . '/../../lang/' . self::LIBRARY_TEXT_DOMAIN . '-' . $locale . '.mo';
88
- if (\file_exists($lang_mo_file)) {
89
- \load_textdomain(self::LIBRARY_TEXT_DOMAIN, $lang_mo_file);
90
- }
91
  }
92
  /**
93
- * Hook to check if plugin requirements passes and plugin can be initialized
94
  */
95
- public function action_check_requirements_and_load()
96
  {
97
- $requirements_checker = $this->create_requirements_checker();
98
- if (!$requirements_checker->are_requirements_met()) {
99
- $requirements_checker->render_notices();
100
- return;
101
- }
102
- $plugin_info = $this->get_plugin_info();
103
- if (\apply_filters('wpdesk_can_initialize_plugin', \true, $plugin_info)) {
104
- $strategy = $this->initialization_factory->create_initialization_strategy($plugin_info);
105
- $plugin = $strategy->run();
106
- \do_action('wpdesk_plugin_initialized', $plugin, $plugin_info);
107
  }
 
108
  }
109
  /**
110
  * Factory method creates requirement checker to run the checks
@@ -115,7 +123,7 @@ final class PluginBootstrap
115
  {
116
  /** @var \WPDesk_Requirement_Checker_Factory $requirements_checker_factory */
117
  $requirements_checker_factory = new \FcfVendor\WPDesk_Basic_Requirement_Checker_Factory();
118
- return $requirements_checker_factory->create_from_requirement_array(__FILE__, $this->plugin_name, $this->requirements);
119
  }
120
  /**
121
  * Factory method creates \WPDesk_Plugin_Info to bootstrap info about plugin in one place
40
  /**
41
  * WPDesk_Plugin_Bootstrap constructor.
42
  *
43
+ * @param string $plugin_version
44
+ * @param string $plugin_release_timestamp
45
+ * @param string $plugin_name
46
+ * @param string $plugin_class_name
47
+ * @param string $plugin_text_domain
48
+ * @param string $plugin_dir
49
+ * @param string $plugin_file
50
+ * @param array $requirements
51
+ * @param string $product_id
52
  * @param InitializationFactory $build_factory
53
  */
54
  public function __construct($plugin_version, $plugin_release_timestamp, $plugin_name, $plugin_class_name, $plugin_text_domain, $plugin_dir, $plugin_file, array $requirements, $product_id, \FcfVendor\WPDesk\Plugin\Flow\Initialization\InitializationFactory $build_factory)
69
  */
70
  public function run()
71
  {
72
+ $plugin_info = $this->get_plugin_info();
73
+ $this->init_translations($plugin_info);
74
+ $strategy = $this->initialization_factory->create_initialization_strategy($plugin_info);
75
+ $requirements_checker = $this->create_requirements_checker();
76
+ if ($requirements_checker->are_requirements_met()) {
77
+ $strategy->run_before_init($plugin_info);
78
+ }
79
+ $this->add_activation_hook_for_save_activation_date();
80
+ \add_action('plugins_loaded', static function () use($strategy, $requirements_checker, $plugin_info) {
81
+ if ($requirements_checker->are_requirements_met()) {
82
+ $strategy->run_init($plugin_info);
83
+ } else {
84
+ $requirements_checker->render_notices();
85
+ }
86
+ }, self::PRIORITY_BEFORE_SHARED_CLASS_LOADER);
87
  }
88
  /**
89
+ * Initialize activated_plugin action.
90
+ * Action stores plugin activation date.
91
+ * Example option name: plugin_activation_flexible-shipping/flexible-shipping.php
92
  */
93
+ private function add_activation_hook_for_save_activation_date()
94
  {
95
+ \add_action('activated_plugin', static function ($plugin_file, $network_wide = \false) {
96
+ if (!$network_wide) {
97
+ $option_name = 'plugin_activation_' . $plugin_file;
98
+ $activation_date = \get_option($option_name, '');
99
+ if ('' === $activation_date) {
100
+ $activation_date = \current_time('mysql');
101
+ \update_option($option_name, $activation_date);
102
+ }
103
+ }
104
+ });
 
105
  }
106
  /**
107
+ * Adds text domain used in a library
108
  */
109
+ private function init_translations(\FcfVendor\WPDesk_Plugin_Info $plugin_info)
110
  {
111
+ $lang_dir = 'lang';
112
+ if (\method_exists($plugin_info, 'get_language_dir')) {
113
+ $lang_dir = $plugin_info->get_language_dir();
 
 
 
 
 
 
 
114
  }
115
+ \load_plugin_textdomain($plugin_info->get_text_domain(), \false, \basename($plugin_info->get_plugin_dir()) . "/{$lang_dir}/");
116
  }
117
  /**
118
  * Factory method creates requirement checker to run the checks
123
  {
124
  /** @var \WPDesk_Requirement_Checker_Factory $requirements_checker_factory */
125
  $requirements_checker_factory = new \FcfVendor\WPDesk_Basic_Requirement_Checker_Factory();
126
+ return $requirements_checker_factory->create_from_requirement_array(__FILE__, $this->plugin_name, $this->requirements, $this->plugin_text_domain);
127
  }
128
  /**
129
  * Factory method creates \WPDesk_Plugin_Info to bootstrap info about plugin in one place
vendor_prefixed/wpdesk/wp-wpdesk-helper/composer.json CHANGED
@@ -9,10 +9,11 @@
9
  "require": {
10
  "php": ">=5.6",
11
  "wpdesk\/wp-logs": "^1.6.0",
12
- "wpdesk\/wp-wpdesk-license": "^2.3.2",
13
  "wpdesk\/wp-wpdesk-tracker": "^2.0.4",
14
  "wpdesk\/wp-builder": "^1.2",
15
- "wpdesk\/wp-notice": "^3.1.1"
 
16
  },
17
  "require-dev": {
18
  "phpunit\/phpunit": "<7",
@@ -32,6 +33,13 @@
32
  "tests\/"
33
  ]
34
  },
 
 
 
 
 
 
 
35
  "scripts": {
36
  "test": "echo composer is alive",
37
  "phpcs": "phpcs",
9
  "require": {
10
  "php": ">=5.6",
11
  "wpdesk\/wp-logs": "^1.6.0",
12
+ "wpdesk\/wp-wpdesk-license": "^2.6",
13
  "wpdesk\/wp-wpdesk-tracker": "^2.0.4",
14
  "wpdesk\/wp-builder": "^1.2",
15
+ "wpdesk\/wp-notice": "^3.1.1",
16
+ "wpdesk\/wp-basic-requirements": "^3"
17
  },
18
  "require-dev": {
19
  "phpunit\/phpunit": "<7",
33
  "tests\/"
34
  ]
35
  },
36
+ "extra": {
37
+ "text-domain": "wpdesk-helper-textdomain",
38
+ "translations-folder": "lang",
39
+ "po-files": {
40
+ "pl_PL": "wpdesk-helper-pl_PL.po"
41
+ }
42
+ },
43
  "scripts": {
44
  "test": "echo composer is alive",
45
  "phpcs": "phpcs",
vendor_prefixed/wpdesk/wp-wpdesk-helper/lang/wpdesk-helper-pl_PL.mo DELETED
Binary file
vendor_prefixed/wpdesk/wp-wpdesk-helper/lang/wpdesk-tracker-pl_PL.mo DELETED
Binary file
vendor_prefixed/wpdesk/wp-wpdesk-helper/src/HelperRemoveNotice.php ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace FcfVendor\WPDesk\Helper;
4
+
5
+ use FcfVendor\WPDesk\Notice\Notice;
6
+ /**
7
+ * Know if helper is active/installed and can show notices about it
8
+ *
9
+ * @package WPDesk\Helper
10
+ */
11
+ class HelperRemoveInfo
12
+ {
13
+ private $plugin_file = 'wpdesk-helper/wpdesk-helper.php';
14
+ /**
15
+ * Is helper active? We should disable
16
+ *
17
+ * @return bool
18
+ */
19
+ public function is_helper_active()
20
+ {
21
+ return \FcfVendor\WPDesk_Basic_Requirement_Checker::is_wp_plugin_active($this->plugin_file);
22
+ }
23
+ /**
24
+ * Is helper installed? We should delete
25
+ *
26
+ * @return bool
27
+ */
28
+ public function is_helper_installed()
29
+ {
30
+ return \FcfVendor\WPDesk_Basic_Requirement_Checker::is_wp_plugin_installed($this->plugin_file);
31
+ }
32
+ /**
33
+ * Show notice with disable helper info and url
34
+ *
35
+ * @return void
36
+ */
37
+ public function show_deactivate_helper_notice()
38
+ {
39
+ $remove_url = \self_admin_url('plugins.php?action=deactivate&plugin=' . $this->plugin_file);
40
+ if (\function_exists('wp_nonce_url') && \function_exists('wp_create_nonce')) {
41
+ $remove_url = \wp_nonce_url($remove_url, 'deactivate-plugin_' . $this->plugin_file);
42
+ }
43
+ new \FcfVendor\WPDesk\Notice\Notice(\sprintf(\__('We recommend to <a href="%s">deactivate and remove</a> the "WP Desk Helper" plugin as it is no longer required by WP Desk plugins', 'wpdesk-helper-textdomain'), $remove_url));
44
+ }
45
+ /**
46
+ * Show notice with remove helper info and url
47
+ *
48
+ * @return void
49
+ */
50
+ public function show_remove_helper_notice()
51
+ {
52
+ $remove_url = \self_admin_url('plugins.php?action=delete-selected&amp;checked[]=' . $this->plugin_file);
53
+ if (\function_exists('wp_nonce_url') && \function_exists('wp_create_nonce')) {
54
+ $remove_url = \wp_nonce_url($remove_url, 'bulk-plugins');
55
+ }
56
+ new \FcfVendor\WPDesk\Notice\Notice(\sprintf(\__('We recommend to <a href="%s">remove</a> the "WP Desk Helper" plugin as it is no longer required by WP Desk plugins', 'wpdesk-helper-textdomain'), $remove_url));
57
+ }
58
+ }
vendor_prefixed/wpdesk/wp-wpdesk-helper/src/Integration/LogsIntegration.php CHANGED
@@ -33,8 +33,8 @@ class LogsIntegration implements \FcfVendor\WPDesk\PluginBuilder\Plugin\Hookable
33
  }
34
  private function handle_page_settings_logs_section()
35
  {
36
- \add_settings_section('wpdesk_helper_debug', \__('Debug', 'wpdesk-helper'), null, $this->settings_page->get_page_name());
37
- \add_settings_field(self::DEBUG_LOG_SETTING_KEY, \__('WP Desk Debug Log', 'wpdesk-helper'), function () {
38
  $this->handle_render_page_settings_log_section();
39
  }, $this->settings_page->get_page_name(), 'wpdesk_helper_debug');
40
  }
@@ -57,11 +57,11 @@ class LogsIntegration implements \FcfVendor\WPDesk\PluginBuilder\Plugin\Hookable
57
  <label for="wpdesk_helper_options[<?php
58
  echo self::DEBUG_LOG_SETTING_KEY;
59
  ?>]"><?php
60
- \_e('Enable', 'wpdesk-helper');
61
  ?></label>
62
  <p class="description" id="admin-email-description">
63
  <?php
64
- echo \sprintf(\__('Writes error log to %s.', 'wpdesk-helper'), '<a target="_blank" href="' . \content_url('uploads/wpdesk-logs/wpdesk_debug.log') . '">' . \content_url('uploads/wpdesk-logs/wpdesk_debug.log') . '</a>');
65
  ?>
66
  </p>
67
  <?php
@@ -89,7 +89,7 @@ class LogsIntegration implements \FcfVendor\WPDesk\PluginBuilder\Plugin\Hookable
89
  if (\apply_filters('wpdesk_helper_show_log_notices_library', \true)) {
90
  new \FcfVendor\WPDesk\Notice\Notice(\sprintf(
91
  // Translators: link.
92
- \__('WP Desk Debug Log is enabled. %1$sPlease disable it after testing%2$s.', 'wpdesk-helper'),
93
  '<a href="' . \admin_url('admin.php?page=wpdesk-helper-settings') . '">',
94
  '</a>'
95
  ), \FcfVendor\WPDesk\Notice\Notice::NOTICE_TYPE_INFO);
33
  }
34
  private function handle_page_settings_logs_section()
35
  {
36
+ \add_settings_section('wpdesk_helper_debug', \__('Debug', 'wpdesk-helper-textdomain'), null, $this->settings_page->get_page_name());
37
+ \add_settings_field(self::DEBUG_LOG_SETTING_KEY, \__('WP Desk Debug Log', 'wpdesk-helper-textdomain'), function () {
38
  $this->handle_render_page_settings_log_section();
39
  }, $this->settings_page->get_page_name(), 'wpdesk_helper_debug');
40
  }
57
  <label for="wpdesk_helper_options[<?php
58
  echo self::DEBUG_LOG_SETTING_KEY;
59
  ?>]"><?php
60
+ \_e('Enable', 'wpdesk-helper-textdomain');
61
  ?></label>
62
  <p class="description" id="admin-email-description">
63
  <?php
64
+ echo \sprintf(\__('Writes error log to %s.', 'wpdesk-helper-textdomain'), '<a target="_blank" href="' . \content_url('uploads/wpdesk-logs/wpdesk_debug.log') . '">' . \content_url('uploads/wpdesk-logs/wpdesk_debug.log') . '</a>');
65
  ?>
66
  </p>
67
  <?php
89
  if (\apply_filters('wpdesk_helper_show_log_notices_library', \true)) {
90
  new \FcfVendor\WPDesk\Notice\Notice(\sprintf(
91
  // Translators: link.
92
+ \__('WP Desk Debug Log is enabled. %1$sPlease disable it after testing%2$s.', 'wpdesk-helper-textdomain'),
93
  '<a href="' . \admin_url('admin.php?page=wpdesk-helper-settings') . '">',
94
  '</a>'
95
  ), \FcfVendor\WPDesk\Notice\Notice::NOTICE_TYPE_INFO);
vendor_prefixed/wpdesk/wp-wpdesk-helper/src/Integration/TrackerIntegration.php CHANGED
@@ -48,8 +48,8 @@ class TrackerIntegration implements \FcfVendor\WPDesk\PluginBuilder\Plugin\Hooka
48
  */
49
  private function handle_page_settings_track_section()
50
  {
51
- \add_settings_section('wpdesk_helper_tracking', \__('Plugin usage tracking', 'wpdesk-helper'), null, $this->settings_page->get_page_name());
52
- \add_settings_field('wpdesk_tracker_agree', \__('Allow WP Desk to track plugin usage', 'wpdesk-helper'), function () {
53
  $this->handle_render_page_settings_track_section();
54
  }, $this->settings_page->get_page_name(), 'wpdesk_helper_tracking');
55
  }
@@ -68,12 +68,12 @@ class TrackerIntegration implements \FcfVendor\WPDesk\PluginBuilder\Plugin\Hooka
68
  \checked(1, $options['wpdesk_tracker_agree'], \true);
69
  ?>>
70
  <label for="wpdesk_helper_options[wpdesk_tracker_agree]"><?php
71
- \_e('Enable', 'wpdesk-helper');
72
  ?></label>
73
  <p class="description" id="admin-email-description">
74
  <?php
75
  $terms_url = \get_locale() === 'pl_PL' ? 'https://www.wpdesk.pl/dane-uzytkowania/' : 'https://www.wpdesk.net/usage-tracking/';
76
- \printf(\__('No sensitive data is tracked, %sread more%s.', 'wpdesk-helper'), '<a target="_blank" href="' . $terms_url . '">', '</a>');
77
  ?>
78
  </p>
79
  <?php
48
  */
49
  private function handle_page_settings_track_section()
50
  {
51
+ \add_settings_section('wpdesk_helper_tracking', \__('Plugin usage tracking', 'wpdesk-helper-textdomain'), null, $this->settings_page->get_page_name());
52
+ \add_settings_field('wpdesk_tracker_agree', \__('Allow WP Desk to track plugin usage', 'wpdesk-helper-textdomain'), function () {
53
  $this->handle_render_page_settings_track_section();
54
  }, $this->settings_page->get_page_name(), 'wpdesk_helper_tracking');
55
  }
68
  \checked(1, $options['wpdesk_tracker_agree'], \true);
69
  ?>>
70
  <label for="wpdesk_helper_options[wpdesk_tracker_agree]"><?php
71
+ \_e('Enable', 'wpdesk-helper-textdomain');
72
  ?></label>
73
  <p class="description" id="admin-email-description">
74
  <?php
75
  $terms_url = \get_locale() === 'pl_PL' ? 'https://www.wpdesk.pl/dane-uzytkowania/' : 'https://www.wpdesk.net/usage-tracking/';
76
+ \printf(\__('No sensitive data is tracked, %sread more%s.', 'wpdesk-helper-textdomain'), '<a target="_blank" href="' . $terms_url . '">', '</a>');
77
  ?>
78
  </p>
79
  <?php
vendor_prefixed/wpdesk/wp-wpdesk-helper/src/Page/LibraryDebugPage.php CHANGED
@@ -26,7 +26,7 @@ class LibraryDebugPage implements \FcfVendor\WPDesk\PluginBuilder\Plugin\Hookabl
26
  if ($menu_visible) {
27
  $parent_slug = 'wpdesk-helper';
28
  }
29
- \add_submenu_page($parent_slug, \__('Library report', 'wpdesk-helper'), \__('Library report', 'wpdesk-helper'), 'manage_options', 'wpdesk-helper-library-report', function () {
30
  $this->handle_render_library_report_page();
31
  });
32
  }, self::PRIOTITY_LONG_AFTER_ALL_IS_LOADED);
26
  if ($menu_visible) {
27
  $parent_slug = 'wpdesk-helper';
28
  }
29
+ \add_submenu_page($parent_slug, \__('Library report', 'wpdesk-helper-textdomain'), \__('Library report', 'wpdesk-helper-textdomain'), 'manage_options', 'wpdesk-helper-library-report', function () {
30
  $this->handle_render_library_report_page();
31
  });
32
  }, self::PRIOTITY_LONG_AFTER_ALL_IS_LOADED);
vendor_prefixed/wpdesk/wp-wpdesk-helper/src/Page/SettingsPage.php CHANGED
@@ -43,7 +43,7 @@ class SettingsPage implements \FcfVendor\WPDesk\PluginBuilder\Plugin\Hookable
43
  */
44
  private function handle_add_settings_menu()
45
  {
46
- \add_submenu_page('wpdesk-helper', \__('Settings', 'wpdesk-helper'), \__('Settings', 'wpdesk-helper'), 'manage_options', 'wpdesk-helper-settings', function () {
47
  $this->handle_render_wpdesk_helper_settings();
48
  });
49
  }
@@ -55,7 +55,7 @@ class SettingsPage implements \FcfVendor\WPDesk\PluginBuilder\Plugin\Hookable
55
  ?>
56
  <div class="wrap">
57
  <h1><?php
58
- \_e('WP Desk Helper Settings', 'wpdesk-helper');
59
  ?></h1>
60
  <form method="post" action="options.php">
61
  <?php
43
  */
44
  private function handle_add_settings_menu()
45
  {
46
+ \add_submenu_page('wpdesk-helper', \__('Settings', 'wpdesk-helper-textdomain'), \__('Settings', 'wpdesk-helper-textdomain'), 'manage_options', 'wpdesk-helper-settings', function () {
47
  $this->handle_render_wpdesk_helper_settings();
48
  });
49
  }
55
  ?>
56
  <div class="wrap">
57
  <h1><?php
58
+ \_e('WP Desk Helper Settings', 'wpdesk-helper-textdomain');
59
  ?></h1>
60
  <form method="post" action="options.php">
61
  <?php
vendor_prefixed/wpdesk/wp-wpdesk-helper/src/PrefixedHelperAsLibrary.php CHANGED
@@ -19,7 +19,7 @@ use FcfVendor\WPDesk\PluginBuilder\Plugin\Hookable;
19
  */
20
  class PrefixedHelperAsLibrary implements \FcfVendor\WPDesk\PluginBuilder\Plugin\Hookable
21
  {
22
- const LIBRARY_TEXT_DOMAIN = 'wpdesk-helper';
23
  const MAIN_WPDESK_MENU_POSITION = 99.99941337;
24
  const PRIORITY_AFTER_WPDESK_MENU_REMOVAL = 15;
25
  const PRIORITY_AFTER_ALL = 200;
@@ -47,9 +47,20 @@ class PrefixedHelperAsLibrary implements \FcfVendor\WPDesk\PluginBuilder\Plugin\
47
  });
48
  return $is_loaded;
49
  }
 
 
 
 
 
 
 
 
 
 
 
 
50
  private function initialize()
51
  {
52
- $this->init_translations();
53
  $this->add_wpdesk_menu();
54
  $subscription_integration = new \FcfVendor\WPDesk\Helper\Integration\LicenseIntegration();
55
  $subscription_integration->hooks();
@@ -66,28 +77,7 @@ class PrefixedHelperAsLibrary implements \FcfVendor\WPDesk\PluginBuilder\Plugin\
66
  $library_debug_info = new \FcfVendor\WPDesk\Helper\Debug\LibraryDebug();
67
  (new \FcfVendor\WPDesk\Helper\Page\LibraryDebugPage($library_debug_info))->hooks();
68
  self::$logger->pushProcessor(new \FcfVendor\WPDesk\Helper\Logs\LibraryInfoProcessor($library_debug_info));
69
- }
70
- /**
71
- * Adds text domain used in a library
72
- */
73
- private function init_translations()
74
- {
75
- if (\function_exists('determine_locale')) {
76
- $locale = \determine_locale();
77
- } else {
78
- // before WP 5.0 compatibility
79
- $locale = \get_locale();
80
- }
81
- $locale = \apply_filters('plugin_locale', $locale, self::LIBRARY_TEXT_DOMAIN);
82
- $mo_file_tracker = __DIR__ . '/../lang/' . self::LIBRARY_TEXT_DOMAIN . '-' . $locale . '.mo';
83
- if (\file_exists($mo_file_tracker)) {
84
- \load_textdomain(self::LIBRARY_TEXT_DOMAIN, $mo_file_tracker);
85
- }
86
- $tracker_domain = 'wpdesk-tracker';
87
- $mo_file_tracker = __DIR__ . '/../lang/' . $tracker_domain . '-' . $locale . '.mo';
88
- if (\file_exists($mo_file_tracker)) {
89
- \load_textdomain($tracker_domain, $mo_file_tracker);
90
- }
91
  }
92
  /**
93
  * Adds WP Desk to main menu
19
  */
20
  class PrefixedHelperAsLibrary implements \FcfVendor\WPDesk\PluginBuilder\Plugin\Hookable
21
  {
22
+ const LIBRARY_TEXT_DOMAIN = 'wpdesk-helper-textdomain';
23
  const MAIN_WPDESK_MENU_POSITION = 99.99941337;
24
  const PRIORITY_AFTER_WPDESK_MENU_REMOVAL = 15;
25
  const PRIORITY_AFTER_ALL = 200;
47
  });
48
  return $is_loaded;
49
  }
50
+ /**
51
+ * Show info about installed helper plugin
52
+ */
53
+ private function show_notices_about_old_helper()
54
+ {
55
+ $helper_info = new \FcfVendor\WPDesk\Helper\HelperRemoveInfo();
56
+ if ($helper_info->is_helper_active()) {
57
+ $helper_info->show_deactivate_helper_notice();
58
+ } elseif ($helper_info->is_helper_installed()) {
59
+ $helper_info->show_remove_helper_notice();
60
+ }
61
+ }
62
  private function initialize()
63
  {
 
64
  $this->add_wpdesk_menu();
65
  $subscription_integration = new \FcfVendor\WPDesk\Helper\Integration\LicenseIntegration();
66
  $subscription_integration->hooks();
77
  $library_debug_info = new \FcfVendor\WPDesk\Helper\Debug\LibraryDebug();
78
  (new \FcfVendor\WPDesk\Helper\Page\LibraryDebugPage($library_debug_info))->hooks();
79
  self::$logger->pushProcessor(new \FcfVendor\WPDesk\Helper\Logs\LibraryInfoProcessor($library_debug_info));
80
+ $this->show_notices_about_old_helper();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
81
  }
82
  /**
83
  * Adds WP Desk to main menu
vendor_prefixed/wpdesk/wp-wpdesk-license/composer.json CHANGED
@@ -29,6 +29,13 @@
29
  }
30
  },
31
  "autoload-dev": {},
 
 
 
 
 
 
 
32
  "scripts": {
33
  "phpunit-unit": "phpunit --configuration phpunit-unit.xml --coverage-text --colors=never",
34
  "phpunit-unit-fast": "phpunit --configuration phpunit-unit.xml --no-coverage",
29
  }
30
  },
31
  "autoload-dev": {},
32
+ "extra": {
33
+ "text-domain": "wp-wpdesk-license",
34
+ "translations-folder": "lang",
35
+ "po-files": {
36
+ "pl_PL": "wp-wpdesk-license-pl_PL.po"
37
+ }
38
+ },
39
  "scripts": {
40
  "phpunit-unit": "phpunit --configuration phpunit-unit.xml --coverage-text --colors=never",
41
  "phpunit-unit-fast": "phpunit --configuration phpunit-unit.xml --no-coverage",
vendor_prefixed/wpdesk/wp-wpdesk-license/src/ApiManager/class-wc-api-manager-menu.php CHANGED
@@ -23,28 +23,13 @@ if (!\class_exists('FcfVendor\\WPDesk_API_MENU')) {
23
  public function __construct($api_manager)
24
  {
25
  $this->api_manager = $api_manager;
26
- \add_action('admin_menu', [$this, 'add_menu'], 100);
27
- // add_action( 'admin_init', array( $this, 'load_settings' ) );
28
- }
29
- // Add option page menu
30
- public function add_menu()
31
- {
32
- /*
33
- add_submenu_page( 'wpdesk-helper',
34
- __( $this->api_manager->settings_menu_title, $this->api_manager->text_domain ),
35
- __( $this->api_manager->settings_menu_title, $this->api_manager->text_domain ),
36
- 'manage_options',
37
- $this->api_manager->activation_tab_key,
38
- array( $this, 'config_page')
39
- );
40
- */
41
  }
42
  // Draw option page
43
  public function config_page()
44
  {
45
  $settings_tabs = [$this->api_manager->activation_tab_key => \__($this->api_manager->menu_tab_activation_title, $this->api_manager->text_domain), $this->api_manager->deactivation_tab_key => \__($this->api_manager->menu_tab_deactivation_title, $this->api_manager->text_domain)];
46
- $current_tab = isset($_GET['tab']) ? $_GET['tab'] : $this->api_manager->activation_tab_key;
47
- $tab = isset($_GET['tab']) ? $_GET['tab'] : $this->api_manager->activation_tab_key;
48
  ?>
49
  <div class='wrap'>
50
  <?php
23
  public function __construct($api_manager)
24
  {
25
  $this->api_manager = $api_manager;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
  }
27
  // Draw option page
28
  public function config_page()
29
  {
30
  $settings_tabs = [$this->api_manager->activation_tab_key => \__($this->api_manager->menu_tab_activation_title, $this->api_manager->text_domain), $this->api_manager->deactivation_tab_key => \__($this->api_manager->menu_tab_deactivation_title, $this->api_manager->text_domain)];
31
+ $current_tab = isset($_GET['tab']) ? \sanitize_key($_GET['tab']) : $this->api_manager->activation_tab_key;
32
+ $tab = isset($_GET['tab']) ? \sanitize_key($_GET['tab']) : $this->api_manager->activation_tab_key;
33
  ?>
34
  <div class='wrap'>
35
  <?php
vendor_prefixed/wpdesk/wp-wpdesk-license/src/ApiManager/class-wc-api-manager.php CHANGED
@@ -42,7 +42,7 @@ if (!\class_exists('FcfVendor\\WPDesk_API_Manager_With_Update_Flag')) {
42
  * http://markjaquith.wordpress.com/2011/10/06/translating-wordpress-plugins-and-themes-dont-get-clever/
43
  * http://ottopress.com/2012/internationalization-youre-probably-doing-it-wrong/
44
  */
45
- public $text_domain = 'wpdesk-helper';
46
  /**
47
  * @var string
48
  */
@@ -191,13 +191,25 @@ if (!\class_exists('FcfVendor\\WPDesk_API_Manager_With_Update_Flag')) {
191
  /**
192
  * Check for software updates
193
  */
194
- if ($hook_to_updates && \get_option($this->activated_key, '0') == 'Activated') {
195
  if (!empty($options) && $options !== \false) {
196
  $this->update_check($this->upgrade_url, $this->plugin_name, $this->product_id, $this->options[$this->api_key], $this->options[$this->activation_email], $this->renew_license_url, $this->instance_id, $this->domain, $this->software_version, $this->plugin_or_theme, $this->text_domain);
197
  }
 
198
  }
199
  }
200
  }
 
 
 
 
 
 
 
 
 
 
 
201
  public function create_instance_id()
202
  {
203
  require_once 'class-wc-api-manager-passwords.php';
42
  * http://markjaquith.wordpress.com/2011/10/06/translating-wordpress-plugins-and-themes-dont-get-clever/
43
  * http://ottopress.com/2012/internationalization-youre-probably-doing-it-wrong/
44
  */
45
+ public $text_domain = 'wp-wpdesk-license';
46
  /**
47
  * @var string
48
  */
191
  /**
192
  * Check for software updates
193
  */
194
+ if ($hook_to_updates) {
195
  if (!empty($options) && $options !== \false) {
196
  $this->update_check($this->upgrade_url, $this->plugin_name, $this->product_id, $this->options[$this->api_key], $this->options[$this->activation_email], $this->renew_license_url, $this->instance_id, $this->domain, $this->software_version, $this->plugin_or_theme, $this->text_domain);
197
  }
198
+ $this->add_not_possible_update_message();
199
  }
200
  }
201
  }
202
+ /**
203
+ * Adds message to plugins page when plugin is not activated with info about subscription.
204
+ */
205
+ private function add_not_possible_update_message()
206
+ {
207
+ \add_action('in_plugin_update_message-' . $this->plugin_name, function (array $plugin_data, \stdClass $response) {
208
+ if (isset($response, $response->package) && empty($response->package)) {
209
+ echo \sprintf(\__(" <a target='_blank' href='%s'>Enter a valid subscription key for automatic updates.</a>", 'wp-wpdesk-license'), \admin_url('admin.php?page=wpdesk-licenses'));
210
+ }
211
+ }, 10, 2);
212
+ }
213
  public function create_instance_id()
214
  {
215
  require_once 'class-wc-api-manager-passwords.php';
vendor_prefixed/wpdesk/wp-wpdesk-license/src/ApiManager/class-wc-plugin-update.php CHANGED
@@ -206,23 +206,26 @@ if (!\class_exists('FcfVendor\\WPDesk_Update_API_Check')) {
206
  }
207
  return \false;
208
  }
209
- $response = \unserialize(\wp_remote_retrieve_body($request));
210
- /**
211
- * For debugging errors from the API
212
- * For errors like: unserialize(): Error at offset 0 of 170 bytes
213
- * Comment out $response above first
214
- */
215
- // $response = wp_remote_retrieve_body( $request );
216
- // print_r($response); exit;
217
  if (\is_object($response)) {
218
  if (isset($response->sections)) {
219
  $response->sections['description'] = \apply_filters('the_content', isset($response->sections['description_base64']) ? \base64_decode($response->sections['description_base64']) : '');
220
- $response->sections['installation'] = \apply_filters('the_content', isset($response->sections['installation']) ? $response->sections['installation'] : '');
221
- $response->sections['faq'] = \apply_filters('the_content', isset($response->sections['faq']) ? $response->sections['faq'] : '');
222
- $response->sections['screenshots'] = \apply_filters('the_content', isset($response->sections['screenshots']) ? $response->sections['screenshots'] : '');
223
- $content = \apply_filters('the_content', isset($response->sections['changelog']) ? $response->sections['changelog'] : '');
224
- $response->sections['changelog'] = $content;
225
- $response->sections['other_notes'] = \apply_filters('the_content', isset($response->sections['other_notes']) ? $response->sections['other_notes'] : '');
 
 
 
 
 
 
 
 
 
226
  }
227
  if (isset($response->author)) {
228
  $response->author = "<a href='http://www.wpdesk.pl'>{$response->author}</a>";
@@ -232,6 +235,8 @@ if (!\class_exists('FcfVendor\\WPDesk_Update_API_Check')) {
232
  } else {
233
  if (\class_exists('FcfVendor\\WPDesk_Logger_Factory')) {
234
  \FcfVendor\WPDesk_Logger_Factory::log_message_backtrace('Response is not an object', \FcfVendor\WPDesk_Logger::DEBUG, \debug_backtrace());
 
 
235
  }
236
  return \false;
237
  }
206
  }
207
  return \false;
208
  }
209
+ $raw_response = \wp_remote_retrieve_body($request);
210
+ $response = @\unserialize($raw_response);
 
 
 
 
 
 
211
  if (\is_object($response)) {
212
  if (isset($response->sections)) {
213
  $response->sections['description'] = \apply_filters('the_content', isset($response->sections['description_base64']) ? \base64_decode($response->sections['description_base64']) : '');
214
+ if (isset($response->sections['installation'])) {
215
+ $response->sections['installation'] = \apply_filters('the_content', $response->sections['installation']);
216
+ }
217
+ if (isset($response->sections['faq'])) {
218
+ $response->sections['faq'] = \apply_filters('the_content', $response->sections['faq']);
219
+ }
220
+ if (isset($response->sections['screenshots'])) {
221
+ $response->sections['screenshots'] = \apply_filters('the_content', $response->sections['screenshots']);
222
+ }
223
+ if (isset($response->sections['changelog'])) {
224
+ $response->sections['changelog'] = \apply_filters('the_content', $response->sections['changelog']);
225
+ }
226
+ if (isset($response->sections['other_notes'])) {
227
+ $response->sections['other_notes'] = \apply_filters('the_content', $response->sections['other_notes']);
228
+ }
229
  }
230
  if (isset($response->author)) {
231
  $response->author = "<a href='http://www.wpdesk.pl'>{$response->author}</a>";
235
  } else {
236
  if (\class_exists('FcfVendor\\WPDesk_Logger_Factory')) {
237
  \FcfVendor\WPDesk_Logger_Factory::log_message_backtrace('Response is not an object', \FcfVendor\WPDesk_Logger::DEBUG, \debug_backtrace());
238
+ } else {
239
+ \error_log("Unserialize error. Please send this report to support@wpdesk.net. Request: {$request}. Raw Response: {$raw_response}");
240
  }
241
  return \false;
242
  }
vendor_prefixed/wpdesk/wp-wpdesk-license/src/InstalledPlugins.php CHANGED
@@ -45,8 +45,9 @@ class InstalledPlugins
45
  if (isset($wpdesk_helper_plugin['title'])) {
46
  $menu_title = $wpdesk_helper_plugin['title'];
47
  }
 
48
  $plugins[$key] = $wpdesk_helper_plugin;
49
- $plugins[$key][self::KEY_API_MANAGER] = new \FcfVendor\WPDesk_API_Manager_With_Update_Flag($upgrade_url = '', $version = $wpdesk_helper_plugin['version'], $name = $wpdesk_helper_plugin['plugin'], $product_id = $wpdesk_helper_plugin['product_id'], $menu_title, $title = $menu_title, $plugin_file = \basename($wpdesk_helper_plugin['plugin']), $plugin_dir = \dirname($wpdesk_helper_plugin['plugin']), $config_uri, $hook_to_updates);
50
  $plugins[$key][self::KEY_ACTIVATION_STATUS] = \get_option($plugins[$key][self::KEY_API_MANAGER]->activated_key, 'Deactivated');
51
  }
52
  return $plugins;
45
  if (isset($wpdesk_helper_plugin['title'])) {
46
  $menu_title = $wpdesk_helper_plugin['title'];
47
  }
48
+ $addressRepository = new \FcfVendor\WPDesk\License\ServerAddressRepository($wpdesk_helper_plugin['product_id']);
49
  $plugins[$key] = $wpdesk_helper_plugin;
50
+ $plugins[$key][self::KEY_API_MANAGER] = new \FcfVendor\WPDesk_API_Manager_With_Update_Flag($upgrade_url = $addressRepository->get_default_update_url(), $version = $wpdesk_helper_plugin['version'], $name = $wpdesk_helper_plugin['plugin'], $product_id = $wpdesk_helper_plugin['product_id'], $menu_title, $title = $menu_title, $plugin_file = \basename($wpdesk_helper_plugin['plugin']), $plugin_dir = \dirname($wpdesk_helper_plugin['plugin']), $config_uri, $hook_to_updates);
51
  $plugins[$key][self::KEY_ACTIVATION_STATUS] = \get_option($plugins[$key][self::KEY_API_MANAGER]->activated_key, 'Deactivated');
52
  }
53
  return $plugins;
vendor_prefixed/wpdesk/wp-wpdesk-license/src/Page/License/Action/LicenseActivation.php CHANGED
@@ -3,6 +3,7 @@
3
  namespace FcfVendor\WPDesk\License\Page\License\Action;
4
 
5
  use FcfVendor\WPDesk\License\Page\Action;
 
6
  use FcfVendor\WPDesk_API_Manager_With_Update_Flag;
7
  /**
8
  * Can activate plugin license.
@@ -11,12 +12,6 @@ use FcfVendor\WPDesk_API_Manager_With_Update_Flag;
11
  */
12
  class LicenseActivation implements \FcfVendor\WPDesk\License\Page\Action
13
  {
14
- /**
15
- * Upgrade URLs.
16
- *
17
- * @var array
18
- */
19
- private $upgrade_urls = ['pl' => 'https://www.wpdesk.pl', 'net' => 'https://www.wpdesk.net', 'fs' => 'https://flexibleshipping.com'];
20
  /**
21
  * Plugin data.
22
  *
@@ -30,10 +25,11 @@ class LicenseActivation implements \FcfVendor\WPDesk\License\Page\Action
30
  */
31
  public function execute(array $plugin)
32
  {
33
- $activation_email = \trim($_POST['activation_email']);
34
- $api_key = \trim($_POST['api_key']);
 
35
  $this->plugin_data = $plugin;
36
- $this->activate_license($activation_email, $api_key);
37
  }
38
  /**
39
  * Get api manager from plugin data.
@@ -92,8 +88,8 @@ class LicenseActivation implements \FcfVendor\WPDesk\License\Page\Action
92
  * Activate and save data.
93
  *
94
  * @param WPDesk_API_Manager_With_Update_Flag $plugin_api_manager Api manager.
95
- * @param string $activation_email Activation email.
96
- * @param string $api_key Api key.
97
  */
98
  private function activate_and_save_data($plugin_api_manager, $activation_email, $api_key)
99
  {
@@ -133,7 +129,7 @@ class LicenseActivation implements \FcfVendor\WPDesk\License\Page\Action
133
  */
134
  private function show_unknown_error()
135
  {
136
- \add_settings_error('api_key_check_text', 'api_key_check_error', \__('Connection failed to the Subscription Key API server. Try again later.', 'wpdesk-helper'), 'error');
137
  }
138
  /**
139
  * Show activation message.
@@ -142,20 +138,21 @@ class LicenseActivation implements \FcfVendor\WPDesk\License\Page\Action
142
  */
143
  private function show_activation_message(array $activate_results)
144
  {
145
- \add_settings_error('activate_text', 'activate_msg', \__('Plugin activated. ', 'wpdesk-helper') . "{$activate_results['message']}.", 'updated');
146
  }
147
  /**
148
  * Activate license.
149
  *
150
  * @param string $activation_email Activation email.
151
- * @param string $api_key Api key.
 
152
  */
153
- public function activate_license($activation_email, $api_key)
154
  {
155
  $plugin_api_manager = $this->get_api_manager_from_plugin_data();
156
  $activation_args = ['email' => $activation_email, 'licence_key' => $api_key];
157
  $activate_results = ['activated' => \false];
158
- foreach ($this->upgrade_urls as $upgrade_url) {
159
  $plugin_api_manager->upgrade_url = $upgrade_url;
160
  $activate_raw_response = $plugin_api_manager->key()->activate($activation_args);
161
  $activate_results = \json_decode($activate_raw_response, \true);
3
  namespace FcfVendor\WPDesk\License\Page\License\Action;
4
 
5
  use FcfVendor\WPDesk\License\Page\Action;
6
+ use FcfVendor\WPDesk\License\ServerAddressRepository;
7
  use FcfVendor\WPDesk_API_Manager_With_Update_Flag;
8
  /**
9
  * Can activate plugin license.
12
  */
13
  class LicenseActivation implements \FcfVendor\WPDesk\License\Page\Action
14
  {
 
 
 
 
 
 
15
  /**
16
  * Plugin data.
17
  *
25
  */
26
  public function execute(array $plugin)
27
  {
28
+ $activation_email = \sanitize_email(\trim($_POST['activation_email']));
29
+ $api_key = \sanitize_text_field(\trim($_POST['api_key']));
30
+ $product_id = $plugin['product_id'];
31
  $this->plugin_data = $plugin;
32
+ $this->activate_license($activation_email, $api_key, new \FcfVendor\WPDesk\License\ServerAddressRepository($product_id));
33
  }
34
  /**
35
  * Get api manager from plugin data.
88
  * Activate and save data.
89
  *
90
  * @param WPDesk_API_Manager_With_Update_Flag $plugin_api_manager Api manager.
91
+ * @param string $activation_email Activation email.
92
+ * @param string $api_key Api key.
93
  */
94
  private function activate_and_save_data($plugin_api_manager, $activation_email, $api_key)
95
  {
129
  */
130
  private function show_unknown_error()
131
  {
132
+ \add_settings_error('api_key_check_text', 'api_key_check_error', \__('Connection failed to the Subscription Key API server. Try again later.', 'wp-wpdesk-license'), 'error');
133
  }
134
  /**
135
  * Show activation message.
138
  */
139
  private function show_activation_message(array $activate_results)
140
  {
141
+ \add_settings_error('activate_text', 'activate_msg', \__('Plugin activated. ', 'wp-wpdesk-license') . "{$activate_results['message']}.", 'updated');
142
  }
143
  /**
144
  * Activate license.
145
  *
146
  * @param string $activation_email Activation email.
147
+ * @param string $api_key Api key.
148
+ * @param ServerAddressRepository $address_repository Repository of server addresses to check for activation
149
  */
150
+ public function activate_license($activation_email, $api_key, \FcfVendor\WPDesk\License\ServerAddressRepository $address_repository)
151
  {
152
  $plugin_api_manager = $this->get_api_manager_from_plugin_data();
153
  $activation_args = ['email' => $activation_email, 'licence_key' => $api_key];
154
  $activate_results = ['activated' => \false];
155
+ foreach ($address_repository->get_server_urls() as $upgrade_url) {
156
  $plugin_api_manager->upgrade_url = $upgrade_url;
157
  $activate_raw_response = $plugin_api_manager->key()->activate($activation_args);
158
  $activate_results = \json_decode($activate_raw_response, \true);
vendor_prefixed/wpdesk/wp-wpdesk-license/src/Page/License/Action/LicenseDeactivation.php CHANGED
@@ -28,7 +28,7 @@ class LicenseDeactivation implements \FcfVendor\WPDesk\License\Page\Action
28
  \update_option($plugin['api_manager']->data_key, $merge_options);
29
  \update_option($plugin['api_manager']->activated_key, 'Deactivated');
30
  \delete_option($plugin['api_manager']->upgrade_url_key);
31
- \add_settings_error('wc_am_deactivate_text', 'deactivate_msg', \__('Plugin subscription deactivated. ', 'wpdesk-helper') . "{$activate_results['activations_remaining']}.", 'updated');
32
  $deactivated = \true;
33
  $plugin_wpdesk_name = $plugin['plugin'];
34
  $plugin_product_id = $plugin['product_id'];
28
  \update_option($plugin['api_manager']->data_key, $merge_options);
29
  \update_option($plugin['api_manager']->activated_key, 'Deactivated');
30
  \delete_option($plugin['api_manager']->upgrade_url_key);
31
+ \add_settings_error('wc_am_deactivate_text', 'deactivate_msg', \__('Plugin subscription deactivated. ', 'wp-wpdesk-license') . "{$activate_results['activations_remaining']}.", 'updated');
32
  $deactivated = \true;
33
  $plugin_wpdesk_name = $plugin['plugin'];
34
  $plugin_product_id = $plugin['product_id'];
vendor_prefixed/wpdesk/wp-wpdesk-license/src/Page/License/views/class-wpdesk-helper-list-table.php CHANGED
@@ -24,7 +24,7 @@ class WPDesk_Helper_List_Table extends \WP_List_Table
24
  }
25
  public function no_items()
26
  {
27
- echo \wpautop(\__('No WP Desk plugins found.', 'wpdesk-helper'));
28
  }
29
  public function column_default($item, $column_name)
30
  {
@@ -36,7 +36,7 @@ class WPDesk_Helper_List_Table extends \WP_List_Table
36
  }
37
  public function get_columns()
38
  {
39
- $columns = ['product_name' => \__('Plugin', 'wpdesk-helper'), 'product_status' => \__('Subscription Status', 'wpdesk-helper'), 'product_license' => \__('Subscription Data', 'wpdesk-helper')];
40
  return $columns;
41
  }
42
  public function column_plugin_data($item)
@@ -53,9 +53,9 @@ class WPDesk_Helper_List_Table extends \WP_List_Table
53
  }
54
  public function column_product_status($item)
55
  {
56
- $status = \__('Deactivated', 'wpdesk-helper');
57
  if ($item['activation_status'] == 'Activated') {
58
- $status = \__('Activated', 'wpdesk-helper');
59
  }
60
  return $status;
61
  }
24
  }
25
  public function no_items()
26
  {
27
+ echo \wpautop(\__('No WP Desk plugins found.', 'wp-wpdesk-license'));
28
  }
29
  public function column_default($item, $column_name)
30
  {
36
  }
37
  public function get_columns()
38
  {
39
+ $columns = ['product_name' => \__('Plugin', 'wp-wpdesk-license'), 'product_status' => \__('Subscription Status', 'wp-wpdesk-license'), 'product_license' => \__('Subscription Data', 'wp-wpdesk-license')];
40
  return $columns;
41
  }
42
  public function column_plugin_data($item)
53
  }
54
  public function column_product_status($item)
55
  {
56
+ $status = \__('Deactivated', 'wp-wpdesk-license');
57
  if ($item['activation_status'] == 'Activated') {
58
+ $status = \__('Activated', 'wp-wpdesk-license');
59
  }
60
  return $status;
61
  }
vendor_prefixed/wpdesk/wp-wpdesk-license/src/Page/License/views/license-actions.php CHANGED
@@ -11,9 +11,9 @@ if (!\defined('ABSPATH')) {
11
  <table class="wpdesk_helper_key_table">
12
  <tr>
13
  <td><?php
14
- \_e('Key:', 'wpdesk-helper');
15
  ?></td>
16
- <td><input class="wpdesk_helper_input" name="api_key" size="55" type="text"
17
  value="<?php
18
  echo $api_key;
19
  ?>" <?php
@@ -22,9 +22,9 @@ echo $disabled;
22
  </tr>
23
  <tr>
24
  <td><?php
25
- \_e('Email:', 'wpdesk-helper');
26
  ?></td>
27
- <td><input class="wpdesk_helper_input" name="activation_email" size="55" type="email"
28
  value="<?php
29
  echo $activation_email;
30
  ?>" <?php
@@ -38,13 +38,13 @@ echo $disabled;
38
  if ($activation_status == 'Deactivated') {
39
  ?>
40
  <button class="wpdesk_helper_button button button-primary"><?php
41
- \_e('Activate', 'wpdesk-helper');
42
  ?></button>
43
  <?php
44
  } else {
45
  ?>
46
  <button class="wpdesk_helper_button button"><?php
47
- \_e('Deactivate', 'wpdesk-helper');
48
  ?></button>
49
  <?php
50
  }
11
  <table class="wpdesk_helper_key_table">
12
  <tr>
13
  <td><?php
14
+ \_e('Key:', 'wp-wpdesk-license');
15
  ?></td>
16
+ <td><input class="wpdesk_helper_input" name="api_key" type="text"
17
  value="<?php
18
  echo $api_key;
19
  ?>" <?php
22
  </tr>
23
  <tr>
24
  <td><?php
25
+ \_e('Email:', 'wp-wpdesk-license');
26
  ?></td>
27
+ <td><input class="wpdesk_helper_input" name="activation_email" type="email"
28
  value="<?php
29
  echo $activation_email;
30
  ?>" <?php
38
  if ($activation_status == 'Deactivated') {
39
  ?>
40
  <button class="wpdesk_helper_button button button-primary"><?php
41
+ \_e('Activate', 'wp-wpdesk-license');
42
  ?></button>
43
  <?php
44
  } else {
45
  ?>
46
  <button class="wpdesk_helper_button button"><?php
47
+ \_e('Deactivate', 'wp-wpdesk-license');
48
  ?></button>
49
  <?php
50
  }
vendor_prefixed/wpdesk/wp-wpdesk-license/src/Page/License/views/licenses.php CHANGED
@@ -7,13 +7,24 @@ if (!\defined('ABSPATH')) {
7
  }
8
  // Exit if accessed directly
9
  ?>
 
 
 
 
 
 
 
 
 
 
 
10
  <div class="wrap">
11
  <?php
12
  /* screen_icon(); */
13
  ?>
14
 
15
  <h1><?php
16
- \_e('WP Desk Subscriptions', 'wpdesk-helper');
17
  ?></h1>
18
 
19
  <p class="mb0">
@@ -23,7 +34,7 @@ if (\get_locale() === 'pl_PL') {
23
  } else {
24
  $url = 'https://www.wpdesk.net/my-account/';
25
  }
26
- $link = \sprintf(\__('Get your subscription keys <a href="%s" target="_blank">here</a>. You can activate/deactivate API keys <strong>unlimited times on different domains</strong> as long as you have an active subscription.', 'wpdesk-helper'), \esc_url($url));
27
  echo $link;
28
  ?>
29
  </p>
7
  }
8
  // Exit if accessed directly
9
  ?>
10
+ <style>
11
+ #product_license {
12
+ width: 500px;
13
+ }
14
+
15
+ .wpdesk_helper_key_table,
16
+ .wpdesk_helper_input {
17
+ width: 100%;
18
+ }
19
+ </style>
20
+
21
  <div class="wrap">
22
  <?php
23
  /* screen_icon(); */
24
  ?>
25
 
26
  <h1><?php
27
+ \_e('WP Desk Subscriptions', 'wp-wpdesk-license');
28
  ?></h1>
29
 
30
  <p class="mb0">
34
  } else {
35
  $url = 'https://www.wpdesk.net/my-account/';
36
  }
37
+ $link = \sprintf(\__('Get your subscription keys <a href="%s" target="_blank">here</a>. You can activate/deactivate API keys <strong>unlimited times on different domains</strong> as long as you have an active subscription.', 'wp-wpdesk-license'), \esc_url($url));
38
  echo $link;
39
  ?>
40
  </p>
vendor_prefixed/wpdesk/wp-wpdesk-license/src/Page/LicensePage.php CHANGED
@@ -38,7 +38,7 @@ class LicensePage implements \FcfVendor\WPDesk\PluginBuilder\Plugin\Hookable
38
  */
39
  public function handle_add_page_submenu_item()
40
  {
41
- \add_submenu_page('wpdesk-helper', \__('Subscriptions', 'wpdesk-helper'), \__('Subscriptions', 'wpdesk-helper'), 'manage_options', self::PAGE_SLUG, [$this, 'handle_render_wpdesk_licenses_page']);
42
  }
43
  /**
44
  * Renders license page.
@@ -52,7 +52,7 @@ class LicensePage implements \FcfVendor\WPDesk\PluginBuilder\Plugin\Hookable
52
  $wpdesk_helper_plugins = [];
53
  }
54
  if (isset($_POST['plugin']) && $_POST['action']) {
55
- $this->execute_plugin_action($_POST['plugin'], $_POST['action']);
56
  }
57
  $plugins = $this->plugin_database->get_plugins_activation_info();
58
  /** @noinspection PhpUnusedLocalVariableInspection */
@@ -106,7 +106,7 @@ class LicensePage implements \FcfVendor\WPDesk\PluginBuilder\Plugin\Hookable
106
  public function handle_api_hide_message()
107
  {
108
  if (\wp_verify_nonce($_REQUEST['nonce'], 'wpdesk-api-ajax-notification-nonce')) {
109
- if (\update_option('wpdesk_api_message_close', $_REQUEST['value'])) {
110
  die('1');
111
  }
112
  die('0');
@@ -121,8 +121,8 @@ class LicensePage implements \FcfVendor\WPDesk\PluginBuilder\Plugin\Hookable
121
  {
122
  $screen = \get_current_screen();
123
  if (isset($screen) && \in_array($screen->base, ['toplevel_page_wpdesk-helper', 'wp-desk_page_wpdesk-licenses', 'wp-desk-1_page_wpdesk-licenses'], \true)) {
124
- \wp_register_style('wpdesk-helper', \plugins_url('wpdesk-helper/assets/css/admin-settings.css'), [], $this->scripts_version);
125
- \wp_enqueue_style('wpdesk-helper');
126
  }
127
  }
128
  }
38
  */
39
  public function handle_add_page_submenu_item()
40
  {
41
+ \add_submenu_page('wpdesk-helper', \__('Subscriptions', 'wp-wpdesk-license'), \__('Subscriptions', 'wp-wpdesk-license'), 'manage_options', self::PAGE_SLUG, [$this, 'handle_render_wpdesk_licenses_page']);
42
  }
43
  /**
44
  * Renders license page.
52
  $wpdesk_helper_plugins = [];
53
  }
54
  if (isset($_POST['plugin']) && $_POST['action']) {
55
+ $this->execute_plugin_action(\sanitize_text_field($_POST['plugin']), \sanitize_key($_POST['action']));
56
  }
57
  $plugins = $this->plugin_database->get_plugins_activation_info();
58
  /** @noinspection PhpUnusedLocalVariableInspection */
106
  public function handle_api_hide_message()
107
  {
108
  if (\wp_verify_nonce($_REQUEST['nonce'], 'wpdesk-api-ajax-notification-nonce')) {
109
+ if (\update_option('wpdesk_api_message_close', \sanitize_key($_REQUEST['value']))) {
110
  die('1');
111
  }
112
  die('0');
121
  {
122
  $screen = \get_current_screen();
123
  if (isset($screen) && \in_array($screen->base, ['toplevel_page_wpdesk-helper', 'wp-desk_page_wpdesk-licenses', 'wp-desk-1_page_wpdesk-licenses'], \true)) {
124
+ \wp_register_style(self::PAGE_SLUG, \plugins_url('wpdesk-helper/assets/css/admin-settings.css'), [], $this->scripts_version);
125
+ \wp_enqueue_style(self::PAGE_SLUG);
126
  }
127
  }
128
  }
vendor_prefixed/wpdesk/wp-wpdesk-license/src/ServerAddressRepository.php ADDED
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace FcfVendor\WPDesk\License;
4
+
5
+ /**
6
+ * Provides server urls to check for upgrade/activation
7
+ *
8
+ * @package WPDesk\License
9
+ */
10
+ class ServerAddressRepository
11
+ {
12
+ /** @var string */
13
+ private $product_id;
14
+ /**
15
+ * @param string $product_id Product if of a plugin. Retrieve from plugin_info
16
+ */
17
+ public function __construct($product_id)
18
+ {
19
+ $this->product_id = $product_id;
20
+ }
21
+ /**
22
+ * Returns default server to ping ie. when checking if upgrade is available but is not yet activated
23
+ *
24
+ * @return string
25
+ */
26
+ public function get_default_update_url()
27
+ {
28
+ $urls = $this->get_server_urls();
29
+ return \reset($urls);
30
+ }
31
+ /**
32
+ * Return list of servers to check for update
33
+ *
34
+ * @return string[] Full URL with protocol. Without ending /
35
+ */
36
+ public function get_server_urls()
37
+ {
38
+ // PL version should be default for most plugins
39
+ $servers = ['https://www.wpdesk.pl', 'https://www.wpdesk.net', 'https://shopmagic.app'];
40
+ if ($this->is_magic_plugin($this->product_id)) {
41
+ $servers = \array_reverse($servers);
42
+ // set magic server as first to check
43
+ }
44
+ $servers[] = 'https://flexibleshipping.com';
45
+ if ($this->is_shipping_plugin($this->product_id)) {
46
+ $servers = \array_reverse($servers);
47
+ // set fs server as first to check
48
+ }
49
+ return $servers;
50
+ }
51
+ /**
52
+ * Is product id of a ShopMagic Plugin?
53
+ *
54
+ * @param string $product_id
55
+ *
56
+ * @return bool
57
+ */
58
+ private function is_magic_plugin($product_id)
59
+ {
60
+ return \stripos($product_id, 'ShopMagic') !== \false;
61
+ }
62
+ /**
63
+ * Is product id of a Flexible Shipping plugin?
64
+ *
65
+ * @param string $product_id
66
+ *
67
+ * @return bool
68
+ */
69
+ private function is_shipping_plugin($product_id)
70
+ {
71
+ $plugins = ['DHL', 'UPS', 'FedEx', 'Royal', 'Hermes', 'DPD', 'Flexible Shipping'];
72
+ // if one of the $plugins phrase found in product_id
73
+ return \count(\array_filter($plugins, static function ($plugin) use($product_id) {
74
+ return \stripos($product_id, $plugin) !== \false;
75
+ })) > 0;
76
+ }
77
+ }
vendor_prefixed/wpdesk/wp-wpdesk-tracker/composer.json CHANGED
@@ -30,6 +30,13 @@
30
  "tests\/"
31
  ]
32
  },
 
 
 
 
 
 
 
33
  "scripts": {
34
  "test": "echo composer is alive",
35
  "phpcs": "phpcs",
30
  "tests\/"
31
  ]
32
  },
33
+ "extra": {
34
+ "text-domain": "wpdesk-tracker",
35
+ "translations-folder": "lang",
36
+ "po-files": {
37
+ "pl_PL": "wpdesk-tracker-pl_PL.po"
38
+ }
39
+ },
40
  "scripts": {
41
  "test": "echo composer is alive",
42
  "phpcs": "phpcs",
vendor_prefixed/wpdesk/wp-wpdesk-tracker/src/class-wpdesk-tracker.php CHANGED
@@ -62,7 +62,6 @@ if (!\class_exists('FcfVendor\\WPDesk_Tracker')) {
62
  */
63
  public function init_hooks()
64
  {
65
- \add_action('plugins_loaded', array($this, 'load_plugin_text_domain'));
66
  \add_action('admin_init', array($this, 'init_schedule'));
67
  \add_action('admin_enqueue_scripts', array($this, 'admin_enqueue_scripts'), 100);
68
  \add_action('wpdesk_tracker_send_event', array($this, 'send_tracking_data'));
@@ -121,10 +120,6 @@ if (!\class_exists('FcfVendor\\WPDesk_Tracker')) {
121
  \wp_clear_scheduled_hook('wpdesk_tracker_send_event');
122
  }
123
  }
124
- public function load_plugin_text_domain()
125
- {
126
- $wpdesk_translation = \load_plugin_textdomain('wpdesk-tracker', \false, $this->plugin_basename . '/inc/wpdesk-tracker/lang');
127
- }
128
  /**
129
  * @return bool
130
  */
@@ -165,9 +160,9 @@ if (!\class_exists('FcfVendor\\WPDesk_Tracker')) {
165
  }
166
  $type = '';
167
  if (isset($_REQUEST['type'])) {
168
- $type = $_REQUEST['type'];
169
  }
170
- if ($type == 'allow') {
171
  $options = \get_option('wpdesk_helper_options', array());
172
  if (!\is_array($options)) {
173
  $options = array();
@@ -177,7 +172,7 @@ if (!\class_exists('FcfVendor\\WPDesk_Tracker')) {
177
  $options['wpdesk_tracker_agree'] = '1';
178
  \update_option('wpdesk_helper_options', $options);
179
  }
180
- if ($type == 'dismiss') {
181
  $options = \get_option('wpdesk_helper_options', array());
182
  if (!\is_array($options)) {
183
  $options = array();
@@ -256,7 +251,7 @@ if (!\class_exists('FcfVendor\\WPDesk_Tracker')) {
256
  }
257
  }
258
  }
259
- if ($screen->id == 'plugins') {
260
  if (isset($_GET['wpdesk_tracker_opt_out'])) {
261
  $options = \get_option('wpdesk_helper_options', array());
262
  if (!\is_array($options)) {
@@ -274,7 +269,7 @@ if (!\class_exists('FcfVendor\\WPDesk_Tracker')) {
274
  $user = \wp_get_current_user();
275
  $username = $user->first_name ? $user->first_name : $user->user_login;
276
  $allow_url = \admin_url('admin.php?page=wpdesk_tracker');
277
- $allow_url = \add_query_arg('plugin', $_GET['plugin'], $allow_url);
278
  $skip_url = $allow_url;
279
  $allow_url = \add_query_arg('allow', '1', $allow_url);
280
  $skip_url = \add_query_arg('allow', '0', $skip_url);
@@ -285,14 +280,14 @@ if (!\class_exists('FcfVendor\\WPDesk_Tracker')) {
285
  {
286
  $user = \wp_get_current_user();
287
  $username = $user->first_name;
288
- $plugin = $_GET['plugin'];
289
  $active_plugins = \get_plugins();
290
  $plugin_name = $active_plugins[$plugin]['Name'];
291
  include 'views/tracker-deactivate.php';
292
  }
293
  public function admin_init()
294
  {
295
- if (isset($_GET['page']) && $_GET['page'] == 'wpdesk_tracker') {
296
  if (isset($_GET['plugin']) && isset($_GET['allow'])) {
297
  $options = \get_option('wpdesk_helper_options', array());
298
  if (!\is_array($options)) {
@@ -330,11 +325,11 @@ if (!\class_exists('FcfVendor\\WPDesk_Tracker')) {
330
  {
331
  $params = array();
332
  $params['click_action'] = 'plugin_deactivation';
333
- $params['plugin'] = $_REQUEST['plugin'];
334
- $params['plugin_name'] = $_REQUEST['plugin_name'];
335
- $params['reason'] = $_REQUEST['reason'];
336
  if (!empty($_REQUEST['additional_info'])) {
337
- $params['additional_info'] = $_REQUEST['additional_info'];
338
  }
339
  $this->send_payload_to_wpdesk(\apply_filters('wpdesk_tracker_deactivation_data', $params));
340
  }
62
  */
63
  public function init_hooks()
64
  {
 
65
  \add_action('admin_init', array($this, 'init_schedule'));
66
  \add_action('admin_enqueue_scripts', array($this, 'admin_enqueue_scripts'), 100);
67
  \add_action('wpdesk_tracker_send_event', array($this, 'send_tracking_data'));
120
  \wp_clear_scheduled_hook('wpdesk_tracker_send_event');
121
  }
122
  }
 
 
 
 
123
  /**
124
  * @return bool
125
  */
160
  }
161
  $type = '';
162
  if (isset($_REQUEST['type'])) {
163
+ $type = \sanitize_key($_REQUEST['type']);
164
  }
165
+ if ($type === 'allow') {
166
  $options = \get_option('wpdesk_helper_options', array());
167
  if (!\is_array($options)) {
168
  $options = array();
172
  $options['wpdesk_tracker_agree'] = '1';
173
  \update_option('wpdesk_helper_options', $options);
174
  }
175
+ if ($type === 'dismiss') {
176
  $options = \get_option('wpdesk_helper_options', array());
177
  if (!\is_array($options)) {
178
  $options = array();
251
  }
252
  }
253
  }
254
+ if ($screen->id === 'plugins') {
255
  if (isset($_GET['wpdesk_tracker_opt_out'])) {
256
  $options = \get_option('wpdesk_helper_options', array());
257
  if (!\is_array($options)) {
269
  $user = \wp_get_current_user();
270
  $username = $user->first_name ? $user->first_name : $user->user_login;
271
  $allow_url = \admin_url('admin.php?page=wpdesk_tracker');
272
+ $allow_url = \add_query_arg('plugin', \sanitize_text_field($_GET['plugin']), $allow_url);
273
  $skip_url = $allow_url;
274
  $allow_url = \add_query_arg('allow', '1', $allow_url);
275
  $skip_url = \add_query_arg('allow', '0', $skip_url);
280
  {
281
  $user = \wp_get_current_user();
282
  $username = $user->first_name;
283
+ $plugin = \sanitize_text_field($_GET['plugin']);
284
  $active_plugins = \get_plugins();
285
  $plugin_name = $active_plugins[$plugin]['Name'];
286
  include 'views/tracker-deactivate.php';
287
  }
288
  public function admin_init()
289
  {
290
+ if (isset($_GET['page']) && $_GET['page'] === 'wpdesk_tracker') {
291
  if (isset($_GET['plugin']) && isset($_GET['allow'])) {
292
  $options = \get_option('wpdesk_helper_options', array());
293
  if (!\is_array($options)) {
325
  {
326
  $params = array();
327
  $params['click_action'] = 'plugin_deactivation';
328
+ $params['plugin'] = \sanitize_text_field($_REQUEST['plugin']);
329
+ $params['plugin_name'] = \sanitize_text_field($_REQUEST['plugin_name']);
330
+ $params['reason'] = \sanitize_text_field($_REQUEST['reason']);
331
  if (!empty($_REQUEST['additional_info'])) {
332
+ $params['additional_info'] = \sanitize_text_field($_REQUEST['additional_info']);
333
  }
334
  $this->send_payload_to_wpdesk(\apply_filters('wpdesk_tracker_deactivation_data', $params));
335
  }
vendor_prefixed/wpdesk/wp-wpdesk-tracker/src/lang/wpdesk-tracker-pl_PL.mo DELETED
Binary file