Version Description
- 2022-12-13 =
- Improve style for date picker
- Update jQueryUI to 1.13.2
- Fix inline date field not localized
- Fix visibility for object field's query() method, which is called in MB Views and Meta Box Builder
- Fix $meta is not countable in object field's query method
- Remove return type for is_save() to be compatible with old version of MB Term Meta
- Start to use PSR-4 and Composer
Download this release
Release Info
Developer | rilwis |
Plugin | Meta Box |
Version | 5.6.14 |
Comparing to | |
See all releases |
Code changes from version 5.6.13 to 5.6.14
- css/date.css +89 -117
- css/jqueryui/core.css +3 -3
- css/jqueryui/datepicker.css +2 -2
- css/jqueryui/slider.css +3 -3
- css/jqueryui/theme.css +10 -7
- inc/field.php +5 -3
- inc/fields/datetime.php +13 -11
- inc/fields/object-choice.php +5 -3
- inc/fields/post.php +3 -1
- inc/fields/sidebar.php +1 -1
- inc/fields/slider.php +3 -3
- inc/fields/taxonomy-advanced.php +3 -1
- inc/fields/taxonomy.php +4 -2
- inc/fields/user.php +3 -1
- inc/helpers/array.php +4 -71
- inc/loader.php +8 -5
- inc/meta-box.php +5 -3
- inc/shortcode.php +4 -2
- js/date.js +8 -1
- js/datetime.js +8 -1
- js/script.js +2 -3
- meta-box.php +1 -1
- readme.txt +10 -1
- src/Support/Arr.php +147 -0
- src/Support/Data.php +366 -0
- inc/update/checker.php → src/Updater/Checker.php +6 -2
- inc/update/notification.php → src/Updater/Notification.php +6 -20
- inc/update/option.php → src/Updater/Option.php +3 -1
- inc/update/settings.php → src/Updater/Settings.php +4 -2
- vendor/autoload.php +25 -0
- vendor/composer/ClassLoader.php +572 -0
- vendor/composer/InstalledVersions.php +352 -0
- vendor/composer/LICENSE +21 -0
- vendor/composer/autoload_classmap.php +10 -0
- vendor/composer/autoload_namespaces.php +9 -0
- vendor/composer/autoload_psr4.php +10 -0
- vendor/composer/autoload_real.php +36 -0
- vendor/composer/autoload_static.php +36 -0
- vendor/composer/installed.json +5 -0
- vendor/composer/installed.php +23 -0
css/date.css
CHANGED
@@ -1,3 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
/* Fix empty block below admin footer (issue #24) */
|
2 |
#ui-datepicker-div {
|
3 |
display: none;
|
@@ -17,15 +24,10 @@
|
|
17 |
.ui-datepicker {
|
18 |
padding: 0;
|
19 |
border: 1px solid #ddd;
|
20 |
-
|
21 |
-
-moz-border-radius: 0;
|
22 |
-
border-radius: 0;
|
23 |
}
|
24 |
.ui-datepicker * {
|
25 |
padding: 0;
|
26 |
-
font-family: "Open Sans", sans-serif;
|
27 |
-
-webkit-border-radius: 0;
|
28 |
-
-moz-border-radius: 0;
|
29 |
border-radius: 0;
|
30 |
}
|
31 |
.ui-datepicker table {
|
@@ -33,28 +35,19 @@
|
|
33 |
margin: 0;
|
34 |
}
|
35 |
.ui-datepicker .ui-datepicker-header,
|
36 |
-
.ui-timepicker-div .ui-widget-header{
|
37 |
border: none;
|
38 |
-
background: #23282d;
|
39 |
-
color: #fff;
|
40 |
font-weight: normal;
|
41 |
}
|
42 |
.ui-datepicker .ui-datepicker-header .ui-state-hover {
|
43 |
-
background: #23282d;
|
44 |
border-color: transparent;
|
45 |
cursor: pointer;
|
46 |
-
-webkit-border-radius: 0;
|
47 |
-
-moz-border-radius: 0;
|
48 |
border-radius: 0;
|
49 |
}
|
50 |
-
|
51 |
-
background: #23282d;
|
52 |
-
color: #fff;
|
53 |
-
}
|
54 |
.ui-datepicker .ui-datepicker-title {
|
55 |
margin-top: .4em;
|
56 |
margin-bottom: .3em;
|
57 |
-
color: #fff;
|
58 |
font-size: 14px;
|
59 |
}
|
60 |
.ui-datepicker .ui-datepicker-prev-hover,
|
@@ -87,7 +80,6 @@
|
|
87 |
color: #fff;
|
88 |
font-weight: normal;
|
89 |
border: none;
|
90 |
-
border-top: 1px solid #32373c;
|
91 |
}
|
92 |
.ui-datepicker td {
|
93 |
background: #f1f1f1;
|
@@ -105,7 +97,6 @@
|
|
105 |
}
|
106 |
.ui-datepicker td .ui-state-active,
|
107 |
.ui-datepicker td .ui-state-hover {
|
108 |
-
background: #0073aa;
|
109 |
color: #fff;
|
110 |
}
|
111 |
.ui-datepicker td.ui-state-disabled,
|
@@ -113,7 +104,22 @@
|
|
113 |
opacity: 1;
|
114 |
color: #999;
|
115 |
}
|
116 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
117 |
.ui-timepicker-div .ui-slider-access {
|
118 |
display: inline-block;
|
119 |
}
|
@@ -122,111 +128,78 @@
|
|
122 |
margin: 0 2px;
|
123 |
border-radius: 4px;
|
124 |
}
|
125 |
-
.ui-timepicker-div .ui-slider-access button span.ui-button-icon{
|
126 |
display: inline;
|
127 |
}
|
128 |
-
|
129 |
-
|
130 |
-
.admin-color-blue .ui-datepicker .ui-datepicker-header,
|
131 |
-
.admin-color-blue .ui-timepicker-div .ui-widget-header,
|
132 |
-
.admin-color-blue .ui-datepicker .ui-datepicker-header .ui-state-hover,
|
133 |
-
.admin-color-blue .ui-datepicker thead {
|
134 |
-
background: #4796b3;
|
135 |
-
}
|
136 |
-
.admin-color-blue .ui-datepicker th {
|
137 |
-
border-color: #52accc;
|
138 |
-
}
|
139 |
-
.admin-color-blue .ui-datepicker td .ui-state-active,
|
140 |
-
.admin-color-blue .ui-datepicker td .ui-state-hover {
|
141 |
-
background: #096484;
|
142 |
-
}
|
143 |
-
/* Coffee */
|
144 |
-
.admin-color-coffee .ui-datepicker .ui-datepicker-header,
|
145 |
-
.admin-color-cofee .ui-timepicker-div .ui-widget-header,
|
146 |
-
.admin-color-coffee .ui-datepicker .ui-datepicker-header .ui-state-hover,
|
147 |
-
.admin-color-coffee .ui-datepicker thead {
|
148 |
-
background: #46403c;
|
149 |
-
}
|
150 |
-
.admin-color-coffee .ui-datepicker th {
|
151 |
-
border-color: #59524c;
|
152 |
-
}
|
153 |
-
.admin-color-coffee .ui-datepicker td .ui-state-active,
|
154 |
-
.admin-color-coffee .ui-datepicker td .ui-state-hover {
|
155 |
-
background: #c7a589;
|
156 |
-
}
|
157 |
-
/* Ectoplasm */
|
158 |
-
.admin-color-ectoplasm .ui-datepicker .ui-datepicker-header,
|
159 |
-
.admin-color-ectoplasm .ui-timepicker-div .ui-widget-header,
|
160 |
-
.admin-color-ectoplasm .ui-datepicker .ui-datepicker-header .ui-state-hover,
|
161 |
-
.admin-color-ectoplasm .ui-datepicker thead {
|
162 |
-
background: #413256;
|
163 |
-
}
|
164 |
-
.admin-color-ectoplasm .ui-datepicker th {
|
165 |
-
border-color: #523f6d;
|
166 |
-
}
|
167 |
-
.admin-color-ectoplasm .ui-datepicker td .ui-state-active,
|
168 |
-
.admin-color-ectoplasm .ui-datepicker td .ui-state-hover {
|
169 |
-
background: #a3b745;
|
170 |
-
}
|
171 |
-
/* Midnight */
|
172 |
-
.admin-color-midnight .ui-datepicker .ui-datepicker-header,
|
173 |
-
.admin-color-midnight .ui-timepicker-div .ui-widget-header,
|
174 |
-
.admin-color-midnight .ui-datepicker .ui-datepicker-header .ui-state-hover,
|
175 |
-
.admin-color-midnight .ui-datepicker thead {
|
176 |
-
background: #26292c;
|
177 |
-
}
|
178 |
-
.admin-color-midnight .ui-datepicker th {
|
179 |
-
border-color: #363b3f;
|
180 |
-
}
|
181 |
-
.admin-color-midnight .ui-datepicker td .ui-state-active,
|
182 |
-
.admin-color-midnight .ui-datepicker td .ui-state-hover {
|
183 |
-
background: #e14d43;
|
184 |
-
}
|
185 |
-
/* Ocean */
|
186 |
-
.admin-color-ocean .ui-datepicker .ui-datepicker-header,
|
187 |
-
.admin-color-ocean .ui-timepicker-div .ui-widget-header,
|
188 |
-
.admin-color-ocean .ui-datepicker .ui-datepicker-header .ui-state-hover,
|
189 |
-
.admin-color-ocean .ui-datepicker thead {
|
190 |
-
background: #627c83;
|
191 |
-
}
|
192 |
-
.admin-color-ocean .ui-datepicker th {
|
193 |
-
border-color: #738e96;
|
194 |
-
}
|
195 |
-
.admin-color-ocean .ui-datepicker td .ui-state-active,
|
196 |
-
.admin-color-ocean .ui-datepicker td .ui-state-hover {
|
197 |
-
background: #9ebaa0;
|
198 |
-
}
|
199 |
-
/* Sunrise */
|
200 |
-
.admin-color-sunrise .ui-datepicker .ui-datepicker-header,
|
201 |
-
.admin-color-sunrise .ui-timepicker-div .ui-widget-header,
|
202 |
-
.admin-color-sunrise .ui-datepicker .ui-datepicker-header .ui-state-hover,
|
203 |
-
.admin-color-sunrise .ui-datepicker thead {
|
204 |
-
background: #be3631;
|
205 |
-
}
|
206 |
-
.admin-color-sunrise .ui-datepicker th {
|
207 |
-
border-color: #cf4944;
|
208 |
-
}
|
209 |
-
.admin-color-sunrise .ui-datepicker td .ui-state-active,
|
210 |
-
.admin-color-sunrise .ui-datepicker td .ui-state-hover {
|
211 |
-
background: #dd823b;
|
212 |
}
|
213 |
-
|
214 |
-
|
215 |
-
.
|
216 |
-
.
|
217 |
-
.
|
218 |
-
|
|
|
|
|
219 |
}
|
220 |
-
.
|
221 |
-
|
|
|
|
|
|
|
|
|
222 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
223 |
.admin-color-light .ui-datepicker .ui-datepicker-next span,
|
224 |
.admin-color-light .ui-datepicker .ui-datepicker-prev span {
|
225 |
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAYAAADvl7rLAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxMUIxRjI2RjhCODYxMUUzQTEyNERCMDU1QzdBQ0EyMCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoxMUIxRjI3MDhCODYxMUUzQTEyNERCMDU1QzdBQ0EyMCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjExQjFGMjZEOEI4NjExRTNBMTI0REIwNTVDN0FDQTIwIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjExQjFGMjZFOEI4NjExRTNBMTI0REIwNTVDN0FDQTIwIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+kKfR4AAAHcRJREFUeNrsXWuM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');
|
226 |
}
|
227 |
-
.admin-color-light .ui-datepicker th {
|
228 |
-
border-color: #fff;
|
229 |
-
}
|
230 |
.admin-color-light .ui-datepicker .ui-datepicker-title,
|
231 |
.admin-color-light .ui-datepicker td .ui-state-default,
|
232 |
.admin-color-light .ui-datepicker th {
|
@@ -235,7 +208,6 @@
|
|
235 |
.admin-color-light .ui-datepicker td .ui-state-active,
|
236 |
.admin-color-light .ui-datepicker td .ui-state-hover {
|
237 |
color: #fff;
|
238 |
-
background: #888;
|
239 |
}
|
240 |
.admin-color-light .ui-datepicker td.ui-state-disabled,
|
241 |
.admin-color-light .ui-datepicker td.ui-state-disabled .ui-state-default {
|
1 |
+
body {
|
2 |
+
--mb-color-datepicker-primary: #23282d;
|
3 |
+
--mb-color-datepicker-border: #23282d;
|
4 |
+
--mb-color-datepicker-active: var(--wp-admin-theme-color, #2271b1);
|
5 |
+
--mb-color-datepicker-heading: #fff;
|
6 |
+
}
|
7 |
+
|
8 |
/* Fix empty block below admin footer (issue #24) */
|
9 |
#ui-datepicker-div {
|
10 |
display: none;
|
24 |
.ui-datepicker {
|
25 |
padding: 0;
|
26 |
border: 1px solid #ddd;
|
27 |
+
border-radius: 4px;
|
|
|
|
|
28 |
}
|
29 |
.ui-datepicker * {
|
30 |
padding: 0;
|
|
|
|
|
|
|
31 |
border-radius: 0;
|
32 |
}
|
33 |
.ui-datepicker table {
|
35 |
margin: 0;
|
36 |
}
|
37 |
.ui-datepicker .ui-datepicker-header,
|
38 |
+
.ui-timepicker-div .ui-widget-header {
|
39 |
border: none;
|
|
|
|
|
40 |
font-weight: normal;
|
41 |
}
|
42 |
.ui-datepicker .ui-datepicker-header .ui-state-hover {
|
|
|
43 |
border-color: transparent;
|
44 |
cursor: pointer;
|
|
|
|
|
45 |
border-radius: 0;
|
46 |
}
|
47 |
+
|
|
|
|
|
|
|
48 |
.ui-datepicker .ui-datepicker-title {
|
49 |
margin-top: .4em;
|
50 |
margin-bottom: .3em;
|
|
|
51 |
font-size: 14px;
|
52 |
}
|
53 |
.ui-datepicker .ui-datepicker-prev-hover,
|
80 |
color: #fff;
|
81 |
font-weight: normal;
|
82 |
border: none;
|
|
|
83 |
}
|
84 |
.ui-datepicker td {
|
85 |
background: #f1f1f1;
|
97 |
}
|
98 |
.ui-datepicker td .ui-state-active,
|
99 |
.ui-datepicker td .ui-state-hover {
|
|
|
100 |
color: #fff;
|
101 |
}
|
102 |
.ui-datepicker td.ui-state-disabled,
|
104 |
opacity: 1;
|
105 |
color: #999;
|
106 |
}
|
107 |
+
|
108 |
+
|
109 |
+
/* Month and year select dropdowns */
|
110 |
+
.ui-datepicker select.ui-datepicker-month,
|
111 |
+
.ui-datepicker select.ui-datepicker-year {
|
112 |
+
background: none;
|
113 |
+
color: inherit;
|
114 |
+
border: none;
|
115 |
+
}
|
116 |
+
|
117 |
+
/* Button pane */
|
118 |
+
.ui-datepicker .ui-datepicker-buttonpane button {
|
119 |
+
border-radius: 2px;
|
120 |
+
}
|
121 |
+
|
122 |
+
/* Timepicker */
|
123 |
.ui-timepicker-div .ui-slider-access {
|
124 |
display: inline-block;
|
125 |
}
|
128 |
margin: 0 2px;
|
129 |
border-radius: 4px;
|
130 |
}
|
131 |
+
.ui-timepicker-div .ui-slider-access button span.ui-button-icon {
|
132 |
display: inline;
|
133 |
}
|
134 |
+
.ui-timepicker-oneLine .ui-widget-header {
|
135 |
+
margin-right: -2px;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
136 |
}
|
137 |
+
|
138 |
+
/* Color schemes */
|
139 |
+
.ui-datepicker .ui-datepicker-header,
|
140 |
+
.ui-timepicker-div .ui-widget-header,
|
141 |
+
.ui-datepicker .ui-datepicker-header .ui-state-hover,
|
142 |
+
.ui-datepicker thead {
|
143 |
+
background: var(--mb-color-datepicker-primary);
|
144 |
+
color: var(--mb-color-datepicker-heading);
|
145 |
}
|
146 |
+
.ui-datepicker th {
|
147 |
+
border-top: 1px solid var(--mb-color-datepicker-border);
|
148 |
+
}
|
149 |
+
.ui-datepicker td .ui-state-active,
|
150 |
+
.ui-datepicker td .ui-state-hover {
|
151 |
+
background: var(--mb-color-datepicker-active);
|
152 |
}
|
153 |
+
.ui-datepicker .ui-datepicker-title {
|
154 |
+
color: var(--mb-color-datepicker-heading);
|
155 |
+
}
|
156 |
+
|
157 |
+
.admin-color-blue {
|
158 |
+
--mb-color-datepicker-primary: #4796b3;
|
159 |
+
--mb-color-datepicker-border: #52accc;
|
160 |
+
--mb-color-datepicker-active: #096484;
|
161 |
+
}
|
162 |
+
.admin-color-coffee {
|
163 |
+
--mb-color-datepicker-primary: #46403c;
|
164 |
+
--mb-color-datepicker-border: #59524c;
|
165 |
+
--mb-color-datepicker-active: #c7a589;
|
166 |
+
}
|
167 |
+
.admin-color-ectoplasm {
|
168 |
+
--mb-color-datepicker-primary: #413256;
|
169 |
+
--mb-color-datepicker-border: #523f6d;
|
170 |
+
--mb-color-datepicker-active: #a3b745;
|
171 |
+
}
|
172 |
+
.admin-color-midnight {
|
173 |
+
--mb-color-datepicker-primary: #26292c;
|
174 |
+
--mb-color-datepicker-border: #363b3f;
|
175 |
+
--mb-color-datepicker-active: #e14d43;
|
176 |
+
}
|
177 |
+
.admin-color-modern {
|
178 |
+
--mb-color-datepicker-primary: #1e1e1e;
|
179 |
+
--mb-color-datepicker-border: #363b3f;
|
180 |
+
--mb-color-datepicker-active: #3858e9;
|
181 |
+
}
|
182 |
+
.admin-color-ocean {
|
183 |
+
--mb-color-datepicker-primary: #627c83;
|
184 |
+
--mb-color-datepicker-border: #738e96;
|
185 |
+
--mb-color-datepicker-active: #9ebaa0;
|
186 |
+
}
|
187 |
+
.admin-color-sunrise {
|
188 |
+
--mb-color-datepicker-primary: #be3631;
|
189 |
+
--mb-color-datepicker-border: #cf4944;
|
190 |
+
--mb-color-datepicker-active: #dd823b;
|
191 |
+
}
|
192 |
+
.admin-color-light {
|
193 |
+
--mb-color-datepicker-primary: #e5e5e5;
|
194 |
+
--mb-color-datepicker-border: #f0f0f0;
|
195 |
+
--mb-color-datepicker-active: #888;
|
196 |
+
--mb-color-datepicker-heading: inherit;
|
197 |
+
}
|
198 |
+
/* Light */
|
199 |
.admin-color-light .ui-datepicker .ui-datepicker-next span,
|
200 |
.admin-color-light .ui-datepicker .ui-datepicker-prev span {
|
201 |
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAYAAADvl7rLAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxMUIxRjI2RjhCODYxMUUzQTEyNERCMDU1QzdBQ0EyMCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoxMUIxRjI3MDhCODYxMUUzQTEyNERCMDU1QzdBQ0EyMCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjExQjFGMjZEOEI4NjExRTNBMTI0REIwNTVDN0FDQTIwIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjExQjFGMjZFOEI4NjExRTNBMTI0REIwNTVDN0FDQTIwIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+kKfR4AAAHcRJREFUeNrsXWuMXsdZnuMu4CUN2S0t0a6o4sQqAaooTncrKGrUNbe2qSC2uQqpqtexbCqI0xaQEBclKUL8qts6stqNkuwWiYqbajtqS9oAuyEISrubrLmUFnBSfmRXFa12KT+cKk2GM9mZ7ng858w7l3PmnO88jzQ633e+8565vs+8M9+8MwXnnAEAMEzsQREAAAgAAIABYkx9OHXqFEoDMDFVho0yTJdhE8UxOjhz5gwsAICk/Exep1AkGAK0DY6G93L+eUblnw4gATPNqMceEsBURMVxSwhFbO8TEj838j4V8B6eQHF1RWyzDnTl3zRIIDTNsCJ6RABdMf+mM6XBjNfsDXP1wm2hkEGN+ze1eyFpngYJ9IcAYs0/vQEVkenz7X1SwRZv2xNhqeJNVRcxac5Vj0AAAcSYf13pBVMMPfS8xyhhaFpy9pqhQ6CqNOe0ZgBPAgg1/7rcC8aQQJEx7lzkGzoEqkpz7noEPOcAmhhPxjTGzcA42zR/m0jDZkSPGZPvmCFQVZqh/B3EWMfTV6CKvm2F5LJAQhYCmWlGPYIAAJAPMMQhAAAAIAAAAEAAAACAAAAAAAEAAAACAAAABAAAAAhAA/zI8+wHoMcL772BEkBsA0i1J0CsM0yIAvGa0CZ55doPIIU7uF7uIJKeEUCKBpDS6yumEW4kTPt0S+mOVf7YtG84voekHXsB9IQAUlXeZgMk0JYC2dIe6swS2vBTK79P2mMdmTZayBPQEAGkrLyUJDDdkvLb0h7ryRZCAtOZlD/F8G264TwBDRJAURNYJhLwbcSpepqU+wFs9KDcqhR1OkHa4Q7cQbTlDRjjVRa6H0BuFInKbTqQ0IpE8YYqrl7n8CgcOAHkVKK+I+d+ACj/AQ4BAAAAAQAAAAIAAAAEAAAACAAAABAAAAAgAAAAeg1sCw64IJYBFwPNt4li1Mp/DJUPBSAoQUwZ8AwKlCLOQdT5HmLlh1ZCikM6eUsyOXqUJvMRW/660hcRaUlBHDyjEqdsuzxTW+O+BJCi8lOdyRcSf5GoAaWqhJAelCcsvyKB8sQocmzeU7SBWAuorbabmjxqy3+spcrnERkPbUhFR8z3UAVIMQ7NVQbcEneRIO/UvBSW/PuWAw+U54naQJFgCFZVlgV1DiDH2LlI/K5UzNlmL55ScYtEaQ9VoFTpbbsNhHaCqdKdoh045fe0pPxFBiKJnXtIwcAx6SgSpD+VCR3bA8XmPdUkZB+sv9TzGLV135QFUHTgXTl7z5Tx5yzH0PynznvRkTJscx4lZvhHjnesw4XXFRTIP/I/qvFiJSAADBggAAAAAQAAAAIAAAAEAAAACAAAABAAAABDIwB1suvQT3WNXU3YZ6RqA6m8QtuML/Zk6N60P8rhoBs9bABdJZO2G05omadsA0Vg/DZvuKkW4lZyKY7GM9Ocwx14inm6A28Q7zVdCSGVzztKAr7pmkqYh5DyT9kGeIDy1x1QO9Vg3E1YQDmPRXceklt3OGjV91w9H6Ugiw5aAr6706Q42Ti2/FO1gZCdeTYqLBkfIoptBzEWUGia60z/UEvOVZaNTwKGNIC6sVdo5fNMSp9SAXwbQS4yrMt7G+vbiwTtILUV7Itp4r1G5gCaVP62HCtiG38KBs6xFx5FCbpo9VQ1dNv4e7qFdhBjAcWmWcA8Xj3FMe/WuYw9HWwAdZMvoZWfk4FTKUCKrb24R/2lMEFD0rtZU9Z9PCo+9nj1IlDeVZaNEkATPb5vQcb0eKkYOCQdmyy9uedbH6kIkEeUv82nfbPFNKQq981Ew+DQ4V/tMe9jDTJnFzazYJEkkGszkk2WvucqPOOf1sa9PgTYtf0D+riZSGvx4mAQoE0SAjoGLAUGABAAAAAgAAAAQAAAAIAAAAAAAQBAVnAUQfsEkMobLdSjKlWl6/GjIYUpX+6yCz0hCfUeSACpvNFCPapSnYmnxy/eN83SHFLat14s9njwgsUf8JpCgXlLaR88AVR5o/n6NKf2KQ+NX5GJz8KWlCfqhnok8kRxhypwEdgTV3kDxigwi6w7kECCOQDfjQ1iPKpsCt/WxgrcQn4pThj2aYS2k3lTmNJNPEvNrw+BxJ7KDEQQQJ0LYRs+0dNaXLEbK8QoSpHAjCwSKVauHoxnym/Kd6QYjgyKAKq80dpi4VhvuBSurLlNxqLCAuEtNvqu9cQ8sO5SHfM+qCGAbbzssyXSlFFpIRsihO4HkMqVNbbx8wQkEDoOjm30tmGQ7xCCB86rxMjWkQCD8l8NH2/AjcAKjPGlZwHviXFlTWmG6uWQwowtAuOPSXusK23oxjAxsk0ORwZNAG1MIqV6X1dcWYvM70mhwLn86aGwGYcAAAAlBAEAAAACAAAABAAAAAgAAAAQAAAAIIDRxwTD8lFgoASQ0g871LGGJ5T1fYdQ/i02On+HxZ50CwyIAGIP1kzpCDOZqXy2LEQyEamAOWR1bIAEAAoBxKyfjlnPbfbUqhee9FAUcxmpz9l6usk/aXnHlmf85r0YQk1lPW2g6QNVBMAjeyCbPzj3JBSlbLryb0dYH769vpLflnGHnCxr5t0n/3V7ErjSkmo7N2AAGCOY/TygF09hRTCL8ucYi2+zdA41VOWvKjdX+ZvbsBUV9TuNpg/YCMBstFWffUzQWK+0WMSOu32tj7q8u8qhqpenluFGTb4LTfk30fQBGwHUKV0R0fCLSDLIRSCFQQKcMBfBa4ZCrrzUlU8XdtcBBjAH4OqNQhXWd0+8mP34YuQnLbJbWh62CUpW1NwriKQTgqrt3KD4gDcBxI7fQ7elKioCi5APGfPrsqn+hiwSP2cidjs1AEOA6IZYJG7UOREzB5ALmww9PpCIAIYOKBIw2CEAAAAgAAAAQAAAAIAAAAAAAQDNYoZdvZZhpkfpF5PLe42ACeeOE8Aho8Ety3tt4/0szoc/FiKuBVa9l8BMC8q/arm/6hH3TEbyEIr+rTLcXIbLMtws740Fpj8kHzcZsjd55iNEPjZOgV9whJg8XKVLeoWcK8P7yvC0/D4h79lg+3vskOX5w2U475no32dXH8t1kvktB64jDNc75svwL2U4UfH7LWVY81ReHbMR8qsOef250KPNRKO5VPP7/jI84yCA15dhvQzj8p4ggQNl+LIkAuaZfp98VNX9JY82wCxlcIkgFyJj4s/l9aTsiFLWY1FHAExTfoEV5rcCjkog4r0HA5jRlwTGLfcuE+QWy/BgYO+3qhW0uSJPnXa8WpMHpeCrNeSxyppdn3Cpouz0MnTFr5T/Go3Y1h3vrStPlXcKmjiVqm+Hy1aROLextVlxOrY8C1kp/5dlQwldQrvX+L4Q8I7vCIzbZQG4cLiCqLj87ZxDfq2CBCg9P69ogL7nFIqy+4bl/vd4lMM18nkR33cHluUdEcO4GIIIdYcviGkpWlT+nyjD39SZa4yo9FQo5Xe9pyASwGRg2sYD0x9jAQh83kICSvk/T3yHSQIU5dcx4fhOKbvrI8pUmPtfK8Pb5fe/kveYR/6ZhYR8ymDWsKhmCcOzvsNU/l+UdVZJAqlnZqnK76O8oeaU3us826IFYJIA81R+G0n6TuLtd3ynWGD/bdy7waPnvygVfl0jBHHve8vwPLH3rduZqs0l2inM+dh3/EoZPu45b3FSG4J9Urt/xfC7ib8Btzwadp3yqjCuffbBd2nBpwdbjFR+gSmNBJTy+2zEKRReOPUckmGTtTuTL8rpB40wTig/kcfvl439G1LxD8h2xuVvoRuSznoq/r6Ka+xwNMc7/iSA+MWw+TvZ7qSiUv6VJi2AVJM04wni+VLgO2MtgCm2u+OO3utvEhv/TI08lQRe6/juakSXDHNenx+qsya+T3vO9k/BunxfyI5Eucz3y5nf4bMvxzNG/S3UKX8oAcxGmDkU5f8DqYBVv6UimSbmACjjzNkG5XVFrPvuakT63MWYTJPr7z+dJFzPuCbSeIK6/cuKK7UTWKy43+Y7QvCMhcStyv9yYXK+U9anTp1iwBXj7VsqfhfktDaQsuBar/9MT9OeqmPoG9SEoFX5z5w5k20I0HWsGdcho0Dae4tnKGUAXwAAGDBAAAAAAgAAAAQAAAAIAACATuAPZchCAOqU3NgjsUNg+i23vSeADcpHnbIYZ5bZ/bAp/+EfYtV7EXDm3qPhhEOeusCpypf8pp7IK/xRZPuZk6FtXFuG35Hh2sh3HdXCFRirUf4trcFST+gVm4gIBxB95dP9bMcD7kZ5pfhzi4U4a1qlndQUsKiRUygaUH61QMfljivK7AtGWlTaxP03svrFPue0PJtYIJShy3NygdEWOqmFJLoTzzqj+7jnllf4baNNCCVYIij9smzzy/LepNSDykU1hu6oOnxQku6C9h7KOROfNj7fHqH85oIkkf6vvFwoloVAuvLr3mirhMSLlwk/+Lrz50M3dPCRV0r3a2U4q13FfgWnPRvQjCQjteGJyzOv6mBPah4oPVVByP/nyvCjbMdF+7Yy/EMZfozRnWk423XiUTK3MvdKPpu8Qoi8+D/7BbbjonyTh7zZ+NUKvMWG26Ape9JCykWN9eYi8JOMvlJVtVmR9/NSr8XnpbqFQKbyq15vVv7WxgKLqn0EfLwM3ySJ6D/L8O9sx7tNrOJ71lP5Rd7Vzka+brm58Ndl+JEyPCaV6DFZHn8bOBzTFTJUXuCWAHmh/M8HyJk936Jn+9vybJuhFpmOGxI9o3CPluZDhpWybZsDWGDV69EVCSy00IC3ZdiSYZv5H8/1j2X4uTJ8VjaGT0r2PBeg/Oc0S6AP+Em2s/b9bdJ8FFfhTkrdYONmS2/lQ/ymvAqvCJAXPf9e5rfBy9EahXetxZ8zlN88X3KrwTmB3y3DB2p+/4B8xoV9Mqh0npblMS+HP9tVcwAnLeNZphHCWsXYtItQFsBXy/BP0pQU138LUP6Ynp+zMH/wSW3uxdcCEi6gP1+GP5VKL66/xGhuqcJj8UvamFu59CrzPUReKP6LEfL6HICv8psK/2QL1utWgHWr8Jtl+I2a30LIr5K8Xb4AIY1+SzOZ9xkm98EWFH+WoGwfb0n5Y0nAtIqo+C22sxmEmNi5Xl7Ffgq/V4YjNXJi/uY5456pdPs7LG9T/iXPcl4xlJhbFHjbUU9VJECZANT/cft7eX2zabo78q+P+VfqImvCGeh5trsT8Fci5wxC9hRci4xTWTuhyi9m+b9QMxZ+Y8PKr8qdSetHv/6MQ+45Y7z+r57x5pZf1Ig2RPkplhZlHsxGAtTZf9E+XirDu9nuZJ+YHPyI/O1xot6oMf9hXwKo2hBR78maxMmantJn+GGm1TftoT3/ag0JuP4CVD3cJa3xbHn0gLp83e8uiJ54M6IOc8nPJ1B+ZakuG0qs/w1IJW19GEclcTHp+ctl+Avt3oPyPS8Q33FaK4/aeFPvByDGiRcZAIwO5rShQR9wVPtcSYJN7QcA5QdGDSs9S6+X5QNfAAAYMEAAAAACAAAABAAAAAgAGCno7sVzRJk5drUb7s2J0uPzV2wX3MAHSQC3WhrArRnSxwfYCNQ+DI8Y9x9h/nsz3Meu9H1YJpDAj8vnjsjwOhnE8twfIsSpt533Vih/YQQdwnPxHVL+TTJwee82QvwzlrZLPVDFtReDaz8GinzsOw556g2v0yPbOgC15nulDB+W9xZlwzPdOykJ8WV9m3zMO3LgqCwzVV6qTCkLVPQ8i3cck8o/71kWKg0KYj+GZwnyIv5rLPe/VYZvMporrYj3UUk+qgz09NT51KdwBzdXkFK9WDmju5tT47Zhy/EOtZpR30BmVbtfEPJvi+Pb7thqHYDNAlDKLypJLOn9Wba7BnmdARQsamV5VCu3RQ9ZJpXeVH6qW+s+47uPG/TzUtkvy/BNSQBUPMp2l4NPsqv98ldaqIP9bNeblHlaA+buT75W6LbMp+7J6uPRyo20zBDJ0YQ4i3FaC/9DHQJ8WDM71RFH8y0pT5W50sZwgBODCwcqFJbiT3+MVXuzKYuAMoy4N7IcXtK+v8Toh2t+SPb8qpzuNZR/ifCO8Yrgg1XP+wp72ZW7P+3V4qce8inK/7Rm0jPmdzhpETF/UkjiEW3tNWzHGew1WrgCdSsBdeU/Rhx7VLFUm6Z8ivMJY3GRXX023LzH8OlYpPLbNnVhmvldhz+TCm/6DFySyu2CGPdfsMw5+KzPF77/L7A8uMby/Wvy86uJ73iP9lmQofIsvZFoBfAKsqJ0Pspa+LpG3nuk8j/Fdrboq50D4DKRE0ajU5XZxpZeLOIdvEFZah6qfOepcyh/XIZ3Wu4L99DbA5WfqoAi7fdU/PZ+tutp6Jt3KoHp4+gXtfsvyOEIdQ6gapztGsPfWPM8Z/UernrcVcO797UwB/AG+fmr2v3n9LZbNwdwQBvzPyp7fqX8B4jKYc7uVs34UuV93lE4QowsNQ/rFSb8eoDy61aE8At/0jG5pCv/QdkgC4/eVxDUAzLdeqAov8qjauhM63HUfAZ1DC3C/7GdM+5f4WF+zzK/reNMvFKGZ+X1WuNzDKjD6Ng5gBukbl+vBSaJgbuGABeloq+zK/9C8v0HYMhQ5r8qs6fZ7r8ALrzT6PFFr/k6trspxJuJY1/X7rV1eFqm/3Py+w8QlV8nsRU5Dl6RQ4ctLf/HPN71dc+0rzH75itiQ1HXCcfCVNePprd9PkwYgt3o+J3SCXKP+za8lmTKNnw8+FD/BoyBMuNNc/9Jqfx1vuVc6wXXEtWdb/nr/1psa+NefbvsPTUNWd2/qwxfZDubuW4GtCVlKt9kmcsoHJOAr2e7e2Ay7bPYTq5ug9JDjLbnpNoxK+QddbKUoewVQ4CmjwcvMsv3EdsV+b695fJ6tWa++/yjIHr3v5NEtaiRldog43/LcB1hMuzhyPRXbQ3nOpzleXb1rlLUcj2foA7Ot6k3YwwAqk3vXw+UXaohN+ZQ/lQktsaG2YF4Ab4AAAACAAAABAAAAAhAwyFGXwGocIccA5rLZ5cY/WQaAAAyE8A5I1Bwdxk+VYZ3WX57l/ztbhQ7AHSbAN5m9PyH5D1Xz3/GuGdbOXfGwxJYldbDakDenjUskLkE5TWHJuNVb2ZYRdH0gwDUARyTbHddtutQjiMe8VKfnTGuPthnfF9OoPzLRBI4ajT8owHxxb4jVl4p7IxFuV2Y9bwPdIgA9N5f92F2WQF3VTQiTnw2NZT1MZngXXMagbhIQCia6bO/6KmAse9Q8qK+xuV1MYAEZiy9+QzUZrQJQO/pJ9iVa5dPBiphKE4GxqunXy0/XQk08+cM68G1xn7R837ds/OSwOY936GU/zNsZ2XbZzQS8MUa1GQ4BDBnjP31HVWUFdDmOPg/jKsvVNqFI85hovLrPbyv8qfGeWmBnQ+QfcLxndVYbLGbrsxo5LGmkQish44TwDKhB19uMX0rMv5YpTvI3GvPbWZ+TuVXhDvB/P+KFXiL43udxRa7hHZBU3jdnXUBKtddApirMKEnCGaywFmPeKnPzrG4GXzVmCm7sKywK3fLCVX+ec/7dc8uSitm0fMd4rnHyvBWtuPd9lb5PWRbt5mEMrAAOkwAyxUmtG1zBduzF2pMSsqzrCaeUKvD15w1SSCk51+yKJrvcdWx71jSSOCypvxLnuUnTPdZwzKgzAmYlkQqywJokADWPBuGicfLcJwge1w+SzXdGaOfyZ5q2HEw0uxfMhr9UoZ3xMoXzL6vAP7KGyGMJa5Y4cP9X3LM+h7jN7ErjJjMesJTGWN6jSKCBNBbAYMigFR4Qob3ongBEGl/hgAAAIAAAAAAAQAAAAIAAAAEAAAACAAYIOZYuG9AjCyQkQBEpVF931nNO3jNd6B5LLC49fdzLHwVZows0AELQFVgLBH4koYZ30RAGlTaJyz3eEAaFE4Q5U/UpIl7lIXvseRmfCdkmOuI8nOGXZV6NwRomwjM+IQjz0FNeeYIJucy2/UADEl/yjznIFJmKKCPInOtDEOtvirZAlZBf+cAVEM+0eLYc1lrMIXWmHlNz20+G6N4ZhpClLBtxWc15ZMTGP71nABWZK/6YEtpU/EdNBrQQWZfXlpUPBvjx2+mwRex8Y8SsCS4pwSw0nJDNuOb0Ex61+YgKxoRqDmAkPSnzPNKBiIoKoKP7MGIeA/WWAEHoXYdYuWK48G5bKz3RzRa8zjn2KPCgXhz27fs5yzDqjZkgYbhOh48RYUVMAF7b26vaNZUm7JAB+cAgGFihWFfBRAAAAAgAAAAQAAAAIAAAAAAAQAAMJoEEHqyLQAAPSUAsXruHu37DTJMeLxX92C7z1MWAIBMBKBO0zXPortR3qcq8gG2swhEnAVwr5S9NUF6XQ4lJ5jdjVaFEyMuDwBeMFcCnpbXfzbur2i/HyO896ImJ5YTn2M7J/Qe0H5rAmLzi8JBIPpptaMmDwDBFoDo3eeloqohgDDf1Uk+6/J3ihWgeqxH5PPKEWY9cDjg40oqDsO8Vl71z+I6XoZVh/y1Mj79HSr4yvMI+b2WK0UeAIIsgP3yqh/ceb/2+YLswfcTeiDx3G1s51TbeTmEOCyHAuL7BxvM06sqCKQgEskrjWthvIMRFFi/vsqTxFS8k4b8JMOyWqBBC+CSvN5Z8eydxnOuIcCS1ogFEWzL6+mGen6F6yxhQl43mPsMRPHsD7Pdo9H1dzxHkL9OyutXJe8bv/4eavwAEGQBbEszfY7t/PW3pP12VPbqK/I5quIWsucXcwD7yvAoCzujnoqTZfii4/e1EZYHAC+Y+wHcKsfpasx/Qfb8BzTT/qInAajvaiOIZYIpq5vstisAABGo2g/golTy+9jOX4FK8c/Le9QZ/Lq9AAoP+aorAACJhwA6CRxG0QDA6AO+AAAAAgAAAAQAAAAIAACA4RLAHWxnDYDpiLIkf3Mht/xb2M5KQ1P+g/K3UZfve/0NXb5VmOsA7i7DGYeMePCBit9yy99Vhocc8sfL8PCIyve9/oYu3xrUOgCdAAQ7fYoo/44yfNrCfDnlf6oMnyXK/3QZHh8x+b7X39DlsxCAPgQ4YrMQmH3xzRHivSq45I+zqxcPHXfI31mRfkZ89k6P9PvIFy3Ff8Qjfmr9FQnkWab411j1sWi+8RcJ2n8RqCutDQF4TaI5oXJ9HXfq5AvNJGaaycs948+V/lTxp0h/1Tuajr8gposFps8n/iKg/Yjff1X7/tGA9mc+Kzxkn3KQY6sWAPVosMJTSaoyR5XnxliXMjZ2pYdHKHcIScRWcJE4/b7vSJl2lqD9hKSfW0jABx8xCMAHb5DKblP+zmCMdRcvVnxuAzyBhZBKgXIrcEgHkKL8U8Qb60D27kA5ofxPd1356wggtgJ4ogZ4VF6X2O5fKzENKpQEeCISaav8eKTyxhIgz0AaLgskxIL6aGD+n9JIoLPKL6BPAp71kDtLvBcqr8b+izLo96rkH/ZQpoeJ93gCeRYhzzzkz3oQCqX+eEL5ttuPWX88g/xTNcp/tosEcMFDAS4Q71XBJf+QpQE+5JD/hIcCfoJ4jyWQ5y3Ff8Ejfmr98QTyLEP83EFATcvrJMAidaU1AhD/Kx8nyBxnV/8H3QV58b/qKYL8KWb/D7bv8n2vv6HLZycAZVrOsZ39/E18SP72sMM0zSkvVliJRRYfs/z2MfnbAyMs3/f6G7p8+5MlxlJgAAAGANtKQAAABgYQAACAAAAAAAEAAAACAAAABAAAwIjD5QtgA2V9O+Tj5AEgKwEIjFvuXfZ4d255AAASDAFyKt3lBGnI2ePiSDOg1wQQq4CXtRCCcSk7nkkBq7aEokI/1BQAekcA4zXmOFWBxyPkL2skEKqAjMXtI8BZvg0pACD7EGA8Y/rGE6QhZ+/LO5AGAKjEWINj/9zyAAAEEkDKDS0hDwA9HgIAAAACAAAABAAAAAgAAAAQAAAAIAAAAEAAAAVTDAuDgB4QQBdWsYm4Z7TrKCj/Rhmm0fSArhPAtHFFzx1Hhrryb6I4ga4TwIZxHbryx/TcUH5gEBYA13rKumvTwwZXCFXejQTKjzkAoDMYc1gAhXaloCBem8RsQz1/iAVgU37MAQC9IIBQC2DaojTmtUkzeNWDqHyV34cM65QfwwAAFkCHLQAoPwALIMAC6ALWEryjSeWf8nwfAPTGAhgVhFouVOXHHAAACyBAEbsO08x3fQeAvD0d5/hHCgCGCvgCAMCA8f8CDABatG6NN+gY2wAAAABJRU5ErkJggg==');
|
202 |
}
|
|
|
|
|
|
|
203 |
.admin-color-light .ui-datepicker .ui-datepicker-title,
|
204 |
.admin-color-light .ui-datepicker td .ui-state-default,
|
205 |
.admin-color-light .ui-datepicker th {
|
208 |
.admin-color-light .ui-datepicker td .ui-state-active,
|
209 |
.admin-color-light .ui-datepicker td .ui-state-hover {
|
210 |
color: #fff;
|
|
|
211 |
}
|
212 |
.admin-color-light .ui-datepicker td.ui-state-disabled,
|
213 |
.admin-color-light .ui-datepicker td.ui-state-disabled .ui-state-default {
|
css/jqueryui/core.css
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
/*!
|
2 |
-
* jQuery UI CSS Framework 1.
|
3 |
* http://jqueryui.com
|
4 |
*
|
5 |
* Copyright jQuery Foundation and other contributors
|
@@ -50,7 +50,7 @@
|
|
50 |
left: 0;
|
51 |
position: absolute;
|
52 |
opacity: 0;
|
53 |
-
filter:
|
54 |
}
|
55 |
|
56 |
.ui-front {
|
@@ -94,4 +94,4 @@
|
|
94 |
left: 0;
|
95 |
width: 100%;
|
96 |
height: 100%;
|
97 |
-
}
|
1 |
/*!
|
2 |
+
* jQuery UI CSS Framework 1.13.2
|
3 |
* http://jqueryui.com
|
4 |
*
|
5 |
* Copyright jQuery Foundation and other contributors
|
50 |
left: 0;
|
51 |
position: absolute;
|
52 |
opacity: 0;
|
53 |
+
-ms-filter: "alpha(opacity=0)"; /* support: IE8 */
|
54 |
}
|
55 |
|
56 |
.ui-front {
|
94 |
left: 0;
|
95 |
width: 100%;
|
96 |
height: 100%;
|
97 |
+
}
|
css/jqueryui/datepicker.css
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
/*!
|
2 |
-
* jQuery UI Datepicker 1.
|
3 |
* http://jqueryui.com
|
4 |
*
|
5 |
* Copyright jQuery Foundation and other contributors
|
@@ -182,4 +182,4 @@
|
|
182 |
background-repeat: no-repeat;
|
183 |
left: .5em;
|
184 |
top: .3em;
|
185 |
-
}
|
1 |
/*!
|
2 |
+
* jQuery UI Datepicker 1.13.2
|
3 |
* http://jqueryui.com
|
4 |
*
|
5 |
* Copyright jQuery Foundation and other contributors
|
182 |
background-repeat: no-repeat;
|
183 |
left: .5em;
|
184 |
top: .3em;
|
185 |
+
}
|
css/jqueryui/slider.css
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
/*!
|
2 |
-
* jQuery UI Slider 1.
|
3 |
* http://jqueryui.com
|
4 |
*
|
5 |
* Copyright jQuery Foundation and other contributors
|
@@ -17,7 +17,7 @@
|
|
17 |
z-index: 2;
|
18 |
width: 1.2em;
|
19 |
height: 1.2em;
|
20 |
-
cursor:
|
21 |
-ms-touch-action: none;
|
22 |
touch-action: none;
|
23 |
}
|
@@ -72,4 +72,4 @@
|
|
72 |
}
|
73 |
.ui-slider-vertical .ui-slider-range-max {
|
74 |
top: 0;
|
75 |
-
}
|
1 |
/*!
|
2 |
+
* jQuery UI Slider 1.13.2
|
3 |
* http://jqueryui.com
|
4 |
*
|
5 |
* Copyright jQuery Foundation and other contributors
|
17 |
z-index: 2;
|
18 |
width: 1.2em;
|
19 |
height: 1.2em;
|
20 |
+
cursor: pointer;
|
21 |
-ms-touch-action: none;
|
22 |
touch-action: none;
|
23 |
}
|
72 |
}
|
73 |
.ui-slider-vertical .ui-slider-range-max {
|
74 |
top: 0;
|
75 |
+
}
|
css/jqueryui/theme.css
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
/*!
|
2 |
-
* jQuery UI CSS Framework 1.
|
3 |
* http://jqueryui.com
|
4 |
*
|
5 |
* Copyright jQuery Foundation and other contributors
|
@@ -172,18 +172,18 @@ a.ui-button:active,
|
|
172 |
.ui-widget-content .ui-priority-secondary,
|
173 |
.ui-widget-header .ui-priority-secondary {
|
174 |
opacity: .7;
|
175 |
-
filter:
|
176 |
font-weight: normal;
|
177 |
}
|
178 |
.ui-state-disabled,
|
179 |
.ui-widget-content .ui-state-disabled,
|
180 |
.ui-widget-header .ui-state-disabled {
|
181 |
opacity: .35;
|
182 |
-
filter:
|
183 |
background-image: none;
|
184 |
}
|
185 |
.ui-state-disabled .ui-icon {
|
186 |
-
filter:
|
187 |
}
|
188 |
|
189 |
/* Icons
|
@@ -224,7 +224,10 @@ a.ui-button:active,
|
|
224 |
}
|
225 |
|
226 |
/* positioning */
|
227 |
-
|
|
|
|
|
|
|
228 |
.ui-icon-caret-1-n { background-position: 0 0; }
|
229 |
.ui-icon-caret-1-ne { background-position: -16px 0; }
|
230 |
.ui-icon-caret-1-e { background-position: -32px 0; }
|
@@ -435,9 +438,9 @@ a.ui-button:active,
|
|
435 |
.ui-widget-overlay {
|
436 |
background: #aaaaaa/*{bgColorOverlay}*/ /*{bgImgUrlOverlay}*/ /*{bgOverlayXPos}*/ /*{bgOverlayYPos}*/ /*{bgOverlayRepeat}*/;
|
437 |
opacity: .3/*{opacityOverlay}*/;
|
438 |
-
filter:
|
439 |
}
|
440 |
.ui-widget-shadow {
|
441 |
-webkit-box-shadow: 0/*{offsetLeftShadow}*/ 0/*{offsetTopShadow}*/ 5px/*{thicknessShadow}*/ #666666/*{bgColorShadow}*/;
|
442 |
box-shadow: 0/*{offsetLeftShadow}*/ 0/*{offsetTopShadow}*/ 5px/*{thicknessShadow}*/ #666666/*{bgColorShadow}*/;
|
443 |
-
}
|
1 |
/*!
|
2 |
+
* jQuery UI CSS Framework 1.13.2
|
3 |
* http://jqueryui.com
|
4 |
*
|
5 |
* Copyright jQuery Foundation and other contributors
|
172 |
.ui-widget-content .ui-priority-secondary,
|
173 |
.ui-widget-header .ui-priority-secondary {
|
174 |
opacity: .7;
|
175 |
+
-ms-filter: "alpha(opacity=70)"; /* support: IE8 */
|
176 |
font-weight: normal;
|
177 |
}
|
178 |
.ui-state-disabled,
|
179 |
.ui-widget-content .ui-state-disabled,
|
180 |
.ui-widget-header .ui-state-disabled {
|
181 |
opacity: .35;
|
182 |
+
-ms-filter: "alpha(opacity=35)"; /* support: IE8 */
|
183 |
background-image: none;
|
184 |
}
|
185 |
.ui-state-disabled .ui-icon {
|
186 |
+
-ms-filter: "alpha(opacity=35)"; /* support: IE8 - See #6059 */
|
187 |
}
|
188 |
|
189 |
/* Icons
|
224 |
}
|
225 |
|
226 |
/* positioning */
|
227 |
+
/* Three classes needed to override `.ui-button:hover .ui-icon` */
|
228 |
+
.ui-icon-blank.ui-icon-blank.ui-icon-blank {
|
229 |
+
background-image: none;
|
230 |
+
}
|
231 |
.ui-icon-caret-1-n { background-position: 0 0; }
|
232 |
.ui-icon-caret-1-ne { background-position: -16px 0; }
|
233 |
.ui-icon-caret-1-e { background-position: -32px 0; }
|
438 |
.ui-widget-overlay {
|
439 |
background: #aaaaaa/*{bgColorOverlay}*/ /*{bgImgUrlOverlay}*/ /*{bgOverlayXPos}*/ /*{bgOverlayYPos}*/ /*{bgOverlayRepeat}*/;
|
440 |
opacity: .3/*{opacityOverlay}*/;
|
441 |
+
-ms-filter: "alpha(opacity=30)"/*{opacityFilterOverlay}*/; /* support: IE8 */
|
442 |
}
|
443 |
.ui-widget-shadow {
|
444 |
-webkit-box-shadow: 0/*{offsetLeftShadow}*/ 0/*{offsetTopShadow}*/ 5px/*{thicknessShadow}*/ #666666/*{bgColorShadow}*/;
|
445 |
box-shadow: 0/*{offsetLeftShadow}*/ 0/*{offsetTopShadow}*/ 5px/*{thicknessShadow}*/ #666666/*{bgColorShadow}*/;
|
446 |
+
}
|
inc/field.php
CHANGED
@@ -1,4 +1,6 @@
|
|
1 |
<?php
|
|
|
|
|
2 |
/**
|
3 |
* The field base class.
|
4 |
* This is the parent class of all custom fields defined by the plugin, which defines all the common methods.
|
@@ -173,7 +175,7 @@ abstract class RWMB_Field {
|
|
173 |
$meta = ! $saved || ! $field['save_field'] ? $field['std'] : $meta;
|
174 |
|
175 |
if ( $field['clone'] ) {
|
176 |
-
$meta =
|
177 |
|
178 |
// Ensure $meta is an array with values so that the foreach loop in self::show() runs properly.
|
179 |
if ( empty( $meta ) ) {
|
@@ -185,10 +187,10 @@ abstract class RWMB_Field {
|
|
185 |
|
186 |
// If users set std for a cloneable checkbox list field in the Builder, they can only set [value1, value2]. We need to transform it to [[value1, value2]].
|
187 |
// In other cases, make sure each value is an array.
|
188 |
-
$meta = is_array( $first ) ? array_map( '
|
189 |
}
|
190 |
} elseif ( $field['multiple'] ) {
|
191 |
-
$meta =
|
192 |
}
|
193 |
|
194 |
return $meta;
|
1 |
<?php
|
2 |
+
use MetaBox\Support\Arr;
|
3 |
+
|
4 |
/**
|
5 |
* The field base class.
|
6 |
* This is the parent class of all custom fields defined by the plugin, which defines all the common methods.
|
175 |
$meta = ! $saved || ! $field['save_field'] ? $field['std'] : $meta;
|
176 |
|
177 |
if ( $field['clone'] ) {
|
178 |
+
$meta = Arr::ensure( $meta );
|
179 |
|
180 |
// Ensure $meta is an array with values so that the foreach loop in self::show() runs properly.
|
181 |
if ( empty( $meta ) ) {
|
187 |
|
188 |
// If users set std for a cloneable checkbox list field in the Builder, they can only set [value1, value2]. We need to transform it to [[value1, value2]].
|
189 |
// In other cases, make sure each value is an array.
|
190 |
+
$meta = is_array( $first ) ? array_map( 'MetaBox\Support\Arr::ensure', $meta ) : [ $meta ];
|
191 |
}
|
192 |
} elseif ( $field['multiple'] ) {
|
193 |
+
$meta = Arr::ensure( $meta );
|
194 |
}
|
195 |
|
196 |
return $meta;
|
inc/fields/datetime.php
CHANGED
@@ -1,4 +1,6 @@
|
|
1 |
<?php
|
|
|
|
|
2 |
/**
|
3 |
* The date and time picker field which allows users to select both date and time via jQueryUI datetime picker.
|
4 |
*/
|
@@ -45,12 +47,12 @@ class RWMB_Datetime_Field extends RWMB_Input_Field {
|
|
45 |
];
|
46 |
|
47 |
public static function register_assets() {
|
48 |
-
// jQueryUI base theme: https://github.com/jquery/jquery-ui/tree/1.
|
49 |
$url = RWMB_CSS_URL . 'jqueryui';
|
50 |
-
wp_register_style( 'jquery-ui-core', "$url/core.css", [], '1.
|
51 |
-
wp_register_style( 'jquery-ui-theme', "$url/theme.css", [], '1.
|
52 |
-
wp_register_style( 'jquery-ui-datepicker', "$url/datepicker.css", [ 'jquery-ui-core', 'jquery-ui-theme' ], '1.
|
53 |
-
wp_register_style( 'jquery-ui-slider', "$url/slider.css", [ 'jquery-ui-core', 'jquery-ui-theme' ], '1.
|
54 |
|
55 |
// jQueryUI timepicker addon: https://github.com/trentrichardson/jQuery-Timepicker-Addon
|
56 |
wp_register_style( 'jquery-ui-timepicker', "$url/jquery-ui-timepicker-addon.min.css", [ 'rwmb-date', 'jquery-ui-slider' ], '1.6.3' );
|
@@ -63,9 +65,9 @@ class RWMB_Datetime_Field extends RWMB_Input_Field {
|
|
63 |
wp_register_script( 'jquery-ui-timepicker-slider', "$url/jquery-ui-sliderAccess.js", [ 'jquery-ui-datepicker', 'jquery-ui-slider' ], '0.3', true );
|
64 |
wp_register_script( 'jquery-ui-timepicker-i18n', "$url/jquery-ui-timepicker-addon-i18n.min.js", [ 'jquery-ui-timepicker' ], '1.6.3', true );
|
65 |
|
66 |
-
wp_register_script( 'rwmb-datetime', RWMB_JS_URL . 'datetime.js', [ 'jquery-ui-datepicker', 'jquery-ui-timepicker-i18n', 'underscore', 'jquery-ui-button', 'jquery-ui-timepicker-slider' ], RWMB_VER, true );
|
67 |
-
wp_register_script( 'rwmb-date', RWMB_JS_URL . 'date.js', [ 'jquery-ui-datepicker', 'underscore' ], RWMB_VER, true );
|
68 |
-
wp_register_script( 'rwmb-time', RWMB_JS_URL . 'time.js', [ 'jquery-ui-timepicker-i18n', 'jquery-ui-button', 'jquery-ui-timepicker-slider' ], RWMB_VER, true );
|
69 |
|
70 |
$handles = [ 'datetime', 'time' ];
|
71 |
$locale = str_replace( '_', '-', get_locale() );
|
@@ -163,11 +165,11 @@ class RWMB_Datetime_Field extends RWMB_Input_Field {
|
|
163 |
$meta = parent::meta( $post_id, $saved, $field );
|
164 |
|
165 |
if ( $field['timestamp'] ) {
|
166 |
-
return
|
167 |
}
|
168 |
|
169 |
if ( $field['save_format'] && $meta ) {
|
170 |
-
return
|
171 |
}
|
172 |
|
173 |
return $meta;
|
@@ -211,7 +213,7 @@ class RWMB_Datetime_Field extends RWMB_Input_Field {
|
|
211 |
$field['js_options'] = wp_parse_args( $field['js_options'], [
|
212 |
'timeFormat' => 'HH:mm',
|
213 |
'separator' => ' ',
|
214 |
-
'dateFormat' =>
|
215 |
'showButtonPanel' => true,
|
216 |
'changeYear' => true,
|
217 |
'yearRange' => '-100:+100',
|
1 |
<?php
|
2 |
+
use MetaBox\Support\Arr;
|
3 |
+
|
4 |
/**
|
5 |
* The date and time picker field which allows users to select both date and time via jQueryUI datetime picker.
|
6 |
*/
|
47 |
];
|
48 |
|
49 |
public static function register_assets() {
|
50 |
+
// jQueryUI base theme: https://github.com/jquery/jquery-ui/tree/1.13.2/themes/base
|
51 |
$url = RWMB_CSS_URL . 'jqueryui';
|
52 |
+
wp_register_style( 'jquery-ui-core', "$url/core.css", [], '1.13.2' );
|
53 |
+
wp_register_style( 'jquery-ui-theme', "$url/theme.css", [], '1.13.2' );
|
54 |
+
wp_register_style( 'jquery-ui-datepicker', "$url/datepicker.css", [ 'jquery-ui-core', 'jquery-ui-theme' ], '1.13.2' );
|
55 |
+
wp_register_style( 'jquery-ui-slider', "$url/slider.css", [ 'jquery-ui-core', 'jquery-ui-theme' ], '1.13.2' );
|
56 |
|
57 |
// jQueryUI timepicker addon: https://github.com/trentrichardson/jQuery-Timepicker-Addon
|
58 |
wp_register_style( 'jquery-ui-timepicker', "$url/jquery-ui-timepicker-addon.min.css", [ 'rwmb-date', 'jquery-ui-slider' ], '1.6.3' );
|
65 |
wp_register_script( 'jquery-ui-timepicker-slider', "$url/jquery-ui-sliderAccess.js", [ 'jquery-ui-datepicker', 'jquery-ui-slider' ], '0.3', true );
|
66 |
wp_register_script( 'jquery-ui-timepicker-i18n', "$url/jquery-ui-timepicker-addon-i18n.min.js", [ 'jquery-ui-timepicker' ], '1.6.3', true );
|
67 |
|
68 |
+
wp_register_script( 'rwmb-datetime', RWMB_JS_URL . 'datetime.js', [ 'jquery-ui-datepicker', 'jquery-ui-timepicker-i18n', 'underscore', 'jquery-ui-button', 'jquery-ui-timepicker-slider', 'rwmb' ], RWMB_VER, true );
|
69 |
+
wp_register_script( 'rwmb-date', RWMB_JS_URL . 'date.js', [ 'jquery-ui-datepicker', 'underscore', 'rwmb' ], RWMB_VER, true );
|
70 |
+
wp_register_script( 'rwmb-time', RWMB_JS_URL . 'time.js', [ 'jquery-ui-timepicker-i18n', 'jquery-ui-button', 'jquery-ui-timepicker-slider', 'rwmb' ], RWMB_VER, true );
|
71 |
|
72 |
$handles = [ 'datetime', 'time' ];
|
73 |
$locale = str_replace( '_', '-', get_locale() );
|
165 |
$meta = parent::meta( $post_id, $saved, $field );
|
166 |
|
167 |
if ( $field['timestamp'] ) {
|
168 |
+
return Arr::map( $meta, __CLASS__ . '::from_timestamp', $field );
|
169 |
}
|
170 |
|
171 |
if ( $field['save_format'] && $meta ) {
|
172 |
+
return Arr::map( $meta, __CLASS__ . '::from_save_format', $field );
|
173 |
}
|
174 |
|
175 |
return $meta;
|
213 |
$field['js_options'] = wp_parse_args( $field['js_options'], [
|
214 |
'timeFormat' => 'HH:mm',
|
215 |
'separator' => ' ',
|
216 |
+
'dateFormat' => $field['format'] ?? 'yy-mm-dd',
|
217 |
'showButtonPanel' => true,
|
218 |
'changeYear' => true,
|
219 |
'yearRange' => '-100:+100',
|
inc/fields/object-choice.php
CHANGED
@@ -1,4 +1,6 @@
|
|
1 |
<?php
|
|
|
|
|
2 |
/**
|
3 |
* The object choice class which allows users to select specific objects (post, user, taxonomy) in WordPress.
|
4 |
*/
|
@@ -15,8 +17,8 @@ abstract class RWMB_Object_Choice_Field extends RWMB_Choice_Field {
|
|
15 |
// Get unique saved IDs for ajax fields.
|
16 |
$meta = static::meta( $post_id, $saved, $field );
|
17 |
$meta = self::filter( 'field_meta', $meta, $field, $saved );
|
18 |
-
$meta =
|
19 |
-
$meta =
|
20 |
sort( $meta );
|
21 |
|
22 |
$field['options'] = static::query( $meta, $field );
|
@@ -24,7 +26,7 @@ abstract class RWMB_Object_Choice_Field extends RWMB_Choice_Field {
|
|
24 |
parent::show( $field, $saved, $post_id );
|
25 |
}
|
26 |
|
27 |
-
abstract
|
28 |
|
29 |
/**
|
30 |
* Get field HTML.
|
1 |
<?php
|
2 |
+
use MetaBox\Support\Arr;
|
3 |
+
|
4 |
/**
|
5 |
* The object choice class which allows users to select specific objects (post, user, taxonomy) in WordPress.
|
6 |
*/
|
17 |
// Get unique saved IDs for ajax fields.
|
18 |
$meta = static::meta( $post_id, $saved, $field );
|
19 |
$meta = self::filter( 'field_meta', $meta, $field, $saved );
|
20 |
+
$meta = Arr::flatten( (array) $meta );
|
21 |
+
$meta = array_filter( wp_parse_id_list( $meta ) );
|
22 |
sort( $meta );
|
23 |
|
24 |
$field['options'] = static::query( $meta, $field );
|
26 |
parent::show( $field, $saved, $post_id );
|
27 |
}
|
28 |
|
29 |
+
abstract public static function query( $meta, array $field ) : array;
|
30 |
|
31 |
/**
|
32 |
* Get field HTML.
|
inc/fields/post.php
CHANGED
@@ -96,13 +96,15 @@ class RWMB_Post_Field extends RWMB_Object_Choice_Field {
|
|
96 |
return $field;
|
97 |
}
|
98 |
|
99 |
-
|
100 |
$args = wp_parse_args( $field['query_args'], [
|
101 |
'no_found_rows' => true,
|
102 |
'update_post_meta_cache' => false,
|
103 |
'update_post_term_cache' => false,
|
104 |
] );
|
105 |
|
|
|
|
|
106 |
// Query only selected items.
|
107 |
if ( ! empty( $field['ajax'] ) && ! empty( $meta ) ) {
|
108 |
$args['posts_per_page'] = count( $meta );
|
96 |
return $field;
|
97 |
}
|
98 |
|
99 |
+
public static function query( $meta, array $field ) : array {
|
100 |
$args = wp_parse_args( $field['query_args'], [
|
101 |
'no_found_rows' => true,
|
102 |
'update_post_meta_cache' => false,
|
103 |
'update_post_term_cache' => false,
|
104 |
] );
|
105 |
|
106 |
+
$meta = wp_parse_id_list( (array) $meta );
|
107 |
+
|
108 |
// Query only selected items.
|
109 |
if ( ! empty( $field['ajax'] ) && ! empty( $meta ) ) {
|
110 |
$args['posts_per_page'] = count( $meta );
|
inc/fields/sidebar.php
CHANGED
@@ -13,7 +13,7 @@ class RWMB_Sidebar_Field extends RWMB_Object_Choice_Field {
|
|
13 |
return $field;
|
14 |
}
|
15 |
|
16 |
-
|
17 |
global $wp_registered_sidebars;
|
18 |
$options = [];
|
19 |
foreach ( $wp_registered_sidebars as $sidebar ) {
|
13 |
return $field;
|
14 |
}
|
15 |
|
16 |
+
public static function query( $meta, array $field ) : array {
|
17 |
global $wp_registered_sidebars;
|
18 |
$options = [];
|
19 |
foreach ( $wp_registered_sidebars as $sidebar ) {
|
inc/fields/slider.php
CHANGED
@@ -5,9 +5,9 @@
|
|
5 |
class RWMB_Slider_Field extends RWMB_Field {
|
6 |
public static function admin_enqueue_scripts() {
|
7 |
$url = RWMB_CSS_URL . 'jqueryui';
|
8 |
-
wp_register_style( 'jquery-ui-core', "$url/core.css", [], '1.
|
9 |
-
wp_register_style( 'jquery-ui-theme', "$url/theme.css", [], '1.
|
10 |
-
wp_register_style( 'jquery-ui-slider', "$url/slider.css", [ 'jquery-ui-core', 'jquery-ui-theme' ], '1.
|
11 |
|
12 |
wp_enqueue_style( 'rwmb-slider', RWMB_CSS_URL . 'slider.css', [ 'jquery-ui-slider' ], RWMB_VER );
|
13 |
wp_enqueue_script( 'rwmb-slider', RWMB_JS_URL . 'slider.js', [ 'jquery-ui-slider', 'jquery-ui-widget', 'jquery-ui-mouse', 'jquery-ui-core' ], RWMB_VER, true );
|
5 |
class RWMB_Slider_Field extends RWMB_Field {
|
6 |
public static function admin_enqueue_scripts() {
|
7 |
$url = RWMB_CSS_URL . 'jqueryui';
|
8 |
+
wp_register_style( 'jquery-ui-core', "$url/core.css", [], '1.13.2' );
|
9 |
+
wp_register_style( 'jquery-ui-theme', "$url/theme.css", [], '1.13.2' );
|
10 |
+
wp_register_style( 'jquery-ui-slider', "$url/slider.css", [ 'jquery-ui-core', 'jquery-ui-theme' ], '1.13.2' );
|
11 |
|
12 |
wp_enqueue_style( 'rwmb-slider', RWMB_CSS_URL . 'slider.css', [ 'jquery-ui-slider' ], RWMB_VER );
|
13 |
wp_enqueue_script( 'rwmb-slider', RWMB_JS_URL . 'slider.js', [ 'jquery-ui-slider', 'jquery-ui-widget', 'jquery-ui-mouse', 'jquery-ui-core' ], RWMB_VER, true );
|
inc/fields/taxonomy-advanced.php
CHANGED
@@ -1,4 +1,6 @@
|
|
1 |
<?php
|
|
|
|
|
2 |
/**
|
3 |
* Taxonomy advanced field which saves terms' IDs in the post meta in CSV format.
|
4 |
*/
|
@@ -49,7 +51,7 @@ class RWMB_Taxonomy_Advanced_Field extends RWMB_Taxonomy_Field {
|
|
49 |
return $field['multiple'] ? [] : '';
|
50 |
}
|
51 |
|
52 |
-
$meta =
|
53 |
$meta = array_filter( $meta );
|
54 |
|
55 |
return $meta;
|
1 |
<?php
|
2 |
+
use MetaBox\Support\Arr;
|
3 |
+
|
4 |
/**
|
5 |
* Taxonomy advanced field which saves terms' IDs in the post meta in CSV format.
|
6 |
*/
|
51 |
return $field['multiple'] ? [] : '';
|
52 |
}
|
53 |
|
54 |
+
$meta = Arr::map( $meta, 'wp_parse_id_list' );
|
55 |
$meta = array_filter( $meta );
|
56 |
|
57 |
return $meta;
|
inc/fields/taxonomy.php
CHANGED
@@ -106,13 +106,15 @@ class RWMB_Taxonomy_Field extends RWMB_Object_Choice_Field {
|
|
106 |
return $field;
|
107 |
}
|
108 |
|
109 |
-
|
110 |
$args = wp_parse_args( $field['query_args'], [
|
111 |
'hide_empty' => false,
|
112 |
'count' => false,
|
113 |
'update_term_meta_cache' => false,
|
114 |
] );
|
115 |
|
|
|
|
|
116 |
// Query only selected items.
|
117 |
if ( ! empty( $field['ajax'] ) && ! empty( $meta ) ) {
|
118 |
$args['include'] = $meta;
|
@@ -149,7 +151,7 @@ class RWMB_Taxonomy_Field extends RWMB_Object_Choice_Field {
|
|
149 |
public static function value( $new, $old, $post_id, $field ) {
|
150 |
$new = (array) $new;
|
151 |
$new[] = self::add_term( $field );
|
152 |
-
$new =
|
153 |
|
154 |
return $new;
|
155 |
}
|
106 |
return $field;
|
107 |
}
|
108 |
|
109 |
+
public static function query( $meta, array $field ) : array {
|
110 |
$args = wp_parse_args( $field['query_args'], [
|
111 |
'hide_empty' => false,
|
112 |
'count' => false,
|
113 |
'update_term_meta_cache' => false,
|
114 |
] );
|
115 |
|
116 |
+
$meta = wp_parse_id_list( (array) $meta );
|
117 |
+
|
118 |
// Query only selected items.
|
119 |
if ( ! empty( $field['ajax'] ) && ! empty( $meta ) ) {
|
120 |
$args['include'] = $meta;
|
151 |
public static function value( $new, $old, $post_id, $field ) {
|
152 |
$new = (array) $new;
|
153 |
$new[] = self::add_term( $field );
|
154 |
+
$new = array_filter( wp_parse_id_list( $new ) );
|
155 |
|
156 |
return $new;
|
157 |
}
|
inc/fields/user.php
CHANGED
@@ -90,13 +90,15 @@ class RWMB_User_Field extends RWMB_Object_Choice_Field {
|
|
90 |
return $field;
|
91 |
}
|
92 |
|
93 |
-
|
94 |
$display_field = $field['display_field'];
|
95 |
$args = wp_parse_args( $field['query_args'], [
|
96 |
'orderby' => $display_field,
|
97 |
'order' => 'asc',
|
98 |
] );
|
99 |
|
|
|
|
|
100 |
// Query only selected items.
|
101 |
if ( ! empty( $field['ajax'] ) && ! empty( $meta ) ) {
|
102 |
$args['include'] = $meta;
|
90 |
return $field;
|
91 |
}
|
92 |
|
93 |
+
public static function query( $meta, array $field ) : array {
|
94 |
$display_field = $field['display_field'];
|
95 |
$args = wp_parse_args( $field['query_args'], [
|
96 |
'orderby' => $display_field,
|
97 |
'order' => 'asc',
|
98 |
] );
|
99 |
|
100 |
+
$meta = wp_parse_id_list( (array) $meta );
|
101 |
+
|
102 |
// Query only selected items.
|
103 |
if ( ! empty( $field['ajax'] ) && ! empty( $meta ) ) {
|
104 |
$args['include'] = $meta;
|
inc/helpers/array.php
CHANGED
@@ -1,74 +1,7 @@
|
|
1 |
<?php
|
|
|
|
|
2 |
/**
|
3 |
-
*
|
4 |
*/
|
5 |
-
class RWMB_Helpers_Array {
|
6 |
-
/**
|
7 |
-
* New array map function that accepts more params than just values.
|
8 |
-
* Params: array|item, callback, other params.
|
9 |
-
*/
|
10 |
-
public static function map() {
|
11 |
-
$args = func_get_args();
|
12 |
-
$items = array_shift( $args );
|
13 |
-
$callback = array_shift( $args );
|
14 |
-
|
15 |
-
if ( ! is_array( $items ) ) {
|
16 |
-
array_unshift( $args, $items );
|
17 |
-
return call_user_func_array( $callback, $args );
|
18 |
-
}
|
19 |
-
|
20 |
-
return array_map(
|
21 |
-
function( $item ) use ( $callback, $args ) {
|
22 |
-
array_unshift( $args, $item );
|
23 |
-
return call_user_func_array( $callback, $args );
|
24 |
-
},
|
25 |
-
$items
|
26 |
-
);
|
27 |
-
}
|
28 |
-
|
29 |
-
/**
|
30 |
-
* Convert a comma separated string to array.
|
31 |
-
*
|
32 |
-
* @param string|array $csv Comma separated string.
|
33 |
-
*/
|
34 |
-
public static function from_csv( $csv ) : array {
|
35 |
-
return is_array( $csv ) ? $csv : array_filter( array_map( 'trim', explode( ',', $csv . ',' ) ) );
|
36 |
-
}
|
37 |
-
|
38 |
-
/**
|
39 |
-
* Change array key.
|
40 |
-
*
|
41 |
-
* @param array $array Input array.
|
42 |
-
* @param string $from From key.
|
43 |
-
* @param string $to To key.
|
44 |
-
*/
|
45 |
-
public static function change_key( &$array, $from, $to ) {
|
46 |
-
if ( isset( $array[ $from ] ) ) {
|
47 |
-
$array[ $to ] = $array[ $from ];
|
48 |
-
}
|
49 |
-
unset( $array[ $from ] );
|
50 |
-
}
|
51 |
-
|
52 |
-
/**
|
53 |
-
* Flatten an array.
|
54 |
-
* @link https://stackoverflow.com/a/1320156/371240
|
55 |
-
*/
|
56 |
-
public static function flatten( array $array ) : array {
|
57 |
-
$return = [];
|
58 |
-
array_walk_recursive(
|
59 |
-
$array,
|
60 |
-
function( $a ) use ( &$return ) {
|
61 |
-
$return[] = $a;
|
62 |
-
}
|
63 |
-
);
|
64 |
-
return $return;
|
65 |
-
}
|
66 |
-
|
67 |
-
/**
|
68 |
-
* Ensure a variable is an array.
|
69 |
-
* @param mixed $input Input value.
|
70 |
-
*/
|
71 |
-
public static function ensure( $input ) : array {
|
72 |
-
return (array) $input;
|
73 |
-
}
|
74 |
-
}
|
1 |
<?php
|
2 |
+
use MetaBox\Support\Arr;
|
3 |
+
|
4 |
/**
|
5 |
+
* No longer needed. Keep it here for backward compatibility.
|
6 |
*/
|
7 |
+
class RWMB_Helpers_Array extends Arr {}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/loader.php
CHANGED
@@ -7,7 +7,7 @@
|
|
7 |
class RWMB_Loader {
|
8 |
protected function constants() {
|
9 |
// Script version, used to add version for scripts and styles.
|
10 |
-
define( 'RWMB_VER', '5.6.
|
11 |
|
12 |
list( $path, $url ) = self::get_path( dirname( __DIR__ ) );
|
13 |
|
@@ -59,6 +59,9 @@ class RWMB_Loader {
|
|
59 |
public function init() {
|
60 |
$this->constants();
|
61 |
|
|
|
|
|
|
|
62 |
// Register autoload for classes.
|
63 |
require_once RWMB_INC_DIR . 'autoloader.php';
|
64 |
$autoloader = new RWMB_Autoloader();
|
@@ -94,12 +97,12 @@ class RWMB_Loader {
|
|
94 |
$wpml->init();
|
95 |
|
96 |
// Update.
|
97 |
-
$update_option = new
|
98 |
-
$update_checker = new
|
99 |
$update_checker->init();
|
100 |
-
$update_settings = new
|
101 |
$update_settings->init();
|
102 |
-
$update_notification = new
|
103 |
$update_notification->init();
|
104 |
|
105 |
if ( is_admin() ) {
|
7 |
class RWMB_Loader {
|
8 |
protected function constants() {
|
9 |
// Script version, used to add version for scripts and styles.
|
10 |
+
define( 'RWMB_VER', '5.6.14' );
|
11 |
|
12 |
list( $path, $url ) = self::get_path( dirname( __DIR__ ) );
|
13 |
|
59 |
public function init() {
|
60 |
$this->constants();
|
61 |
|
62 |
+
// PSR-4 autoload.
|
63 |
+
require dirname( __DIR__ ) . '/vendor/autoload.php';
|
64 |
+
|
65 |
// Register autoload for classes.
|
66 |
require_once RWMB_INC_DIR . 'autoloader.php';
|
67 |
$autoloader = new RWMB_Autoloader();
|
97 |
$wpml->init();
|
98 |
|
99 |
// Update.
|
100 |
+
$update_option = new \MetaBox\Updater\Option();
|
101 |
+
$update_checker = new \MetaBox\Updater\Checker( $update_option );
|
102 |
$update_checker->init();
|
103 |
+
$update_settings = new \MetaBox\Updater\Settings( $update_checker, $update_option );
|
104 |
$update_settings->init();
|
105 |
+
$update_notification = new \MetaBox\Updater\Notification( $update_checker, $update_option );
|
106 |
$update_notification->init();
|
107 |
|
108 |
if ( is_admin() ) {
|
inc/meta-box.php
CHANGED
@@ -1,4 +1,6 @@
|
|
1 |
<?php
|
|
|
|
|
2 |
/**
|
3 |
* A class to rapid develop meta boxes for custom & built in content types
|
4 |
*
|
@@ -286,10 +288,10 @@ class RW_Meta_Box {
|
|
286 |
* Use 'post_types' for better understanding and fallback to 'pages' for previous versions.
|
287 |
* @since 4.4.1
|
288 |
*/
|
289 |
-
|
290 |
|
291 |
// Make sure the post type is an array and is sanitized.
|
292 |
-
$meta_box['post_types'] = array_map( 'sanitize_key',
|
293 |
|
294 |
return $meta_box;
|
295 |
}
|
@@ -315,7 +317,7 @@ class RW_Meta_Box {
|
|
315 |
* Check if meta box is saved before.
|
316 |
* This helps to save empty value in meta fields (text, check box, etc.) and set the correct default values.
|
317 |
*/
|
318 |
-
public function is_saved()
|
319 |
foreach ( $this->fields as $field ) {
|
320 |
if ( empty( $field['id'] ) ) {
|
321 |
continue;
|
1 |
<?php
|
2 |
+
use MetaBox\Support\Arr;
|
3 |
+
|
4 |
/**
|
5 |
* A class to rapid develop meta boxes for custom & built in content types
|
6 |
*
|
288 |
* Use 'post_types' for better understanding and fallback to 'pages' for previous versions.
|
289 |
* @since 4.4.1
|
290 |
*/
|
291 |
+
Arr::change_key( $meta_box, 'pages', 'post_types' );
|
292 |
|
293 |
// Make sure the post type is an array and is sanitized.
|
294 |
+
$meta_box['post_types'] = array_map( 'sanitize_key', Arr::from_csv( $meta_box['post_types'] ) );
|
295 |
|
296 |
return $meta_box;
|
297 |
}
|
317 |
* Check if meta box is saved before.
|
318 |
* This helps to save empty value in meta fields (text, check box, etc.) and set the correct default values.
|
319 |
*/
|
320 |
+
public function is_saved() {
|
321 |
foreach ( $this->fields as $field ) {
|
322 |
if ( empty( $field['id'] ) ) {
|
323 |
continue;
|
inc/shortcode.php
CHANGED
@@ -1,4 +1,6 @@
|
|
1 |
<?php
|
|
|
|
|
2 |
class RWMB_Shortcode {
|
3 |
public function init() {
|
4 |
add_shortcode( 'rwmb_meta', [ $this, 'register_shortcode' ] );
|
@@ -11,8 +13,8 @@ class RWMB_Shortcode {
|
|
11 |
'attribute' => '',
|
12 |
'render_shortcodes' => 'true',
|
13 |
] );
|
14 |
-
|
15 |
-
|
16 |
|
17 |
if ( empty( $atts['id'] ) ) {
|
18 |
return '';
|
1 |
<?php
|
2 |
+
use MetaBox\Support\Arr;
|
3 |
+
|
4 |
class RWMB_Shortcode {
|
5 |
public function init() {
|
6 |
add_shortcode( 'rwmb_meta', [ $this, 'register_shortcode' ] );
|
13 |
'attribute' => '',
|
14 |
'render_shortcodes' => 'true',
|
15 |
] );
|
16 |
+
Arr::change_key( $atts, 'post_id', 'object_id' );
|
17 |
+
Arr::change_key( $atts, 'meta_key', 'id' );
|
18 |
|
19 |
if ( empty( $atts['id'] ) ) {
|
20 |
return '';
|
js/date.js
CHANGED
@@ -70,7 +70,14 @@
|
|
70 |
}
|
71 |
|
72 |
function init( e ) {
|
73 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
74 |
}
|
75 |
|
76 |
rwmb.$document
|
70 |
}
|
71 |
|
72 |
function init( e ) {
|
73 |
+
/**
|
74 |
+
* WordPress sets localized data for jQuery UI datepicker at document ready.
|
75 |
+
* Using setTimeout to ensure the code runs after the localized data is set.
|
76 |
+
* @link https://wordpress.org/support/topic/inline-date-field-not-localization/
|
77 |
+
*/
|
78 |
+
setTimeout( () => {
|
79 |
+
$( e.target ).find( '.rwmb-date' ).each( transform );
|
80 |
+
}, 0 );
|
81 |
}
|
82 |
|
83 |
rwmb.$document
|
js/datetime.js
CHANGED
@@ -79,7 +79,14 @@
|
|
79 |
}
|
80 |
|
81 |
function init( e ) {
|
82 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
83 |
}
|
84 |
|
85 |
setTimeI18n();
|
79 |
}
|
80 |
|
81 |
function init( e ) {
|
82 |
+
/**
|
83 |
+
* WordPress sets localized data for jQuery UI datepicker at document ready.
|
84 |
+
* Using setTimeout to ensure the code runs after the localized data is set.
|
85 |
+
* @link https://wordpress.org/support/topic/inline-date-field-not-localization/
|
86 |
+
*/
|
87 |
+
setTimeout( () => {
|
88 |
+
$( e.target ).find( '.rwmb-datetime' ).each( transform );
|
89 |
+
}, 0 );
|
90 |
}
|
91 |
|
92 |
setTimeI18n();
|
js/script.js
CHANGED
@@ -11,13 +11,12 @@ window.rwmb = window.rwmb || {};
|
|
11 |
rwmb.isGutenberg = document.body.classList.contains( 'block-editor-page' );
|
12 |
|
13 |
// Generate unique ID.
|
14 |
-
rwmb.uniqid =
|
15 |
-
return Math.random().toString( 36 ).substr( 2 );
|
16 |
-
}
|
17 |
|
18 |
// Trigger a custom ready event for all scripts to hook to.
|
19 |
// Used for static DOM and dynamic DOM (loaded in MB Blocks extension for Gutenberg).
|
20 |
rwmb.$document = $( document );
|
|
|
21 |
$( function() {
|
22 |
rwmb.$document.trigger( 'mb_ready' );
|
23 |
} );
|
11 |
rwmb.isGutenberg = document.body.classList.contains( 'block-editor-page' );
|
12 |
|
13 |
// Generate unique ID.
|
14 |
+
rwmb.uniqid = () => Math.random().toString( 36 ).substr( 2 );
|
|
|
|
|
15 |
|
16 |
// Trigger a custom ready event for all scripts to hook to.
|
17 |
// Used for static DOM and dynamic DOM (loaded in MB Blocks extension for Gutenberg).
|
18 |
rwmb.$document = $( document );
|
19 |
+
|
20 |
$( function() {
|
21 |
rwmb.$document.trigger( 'mb_ready' );
|
22 |
} );
|
meta-box.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
* Plugin Name: Meta Box
|
4 |
* Plugin URI: https://metabox.io
|
5 |
* Description: Create custom meta boxes and custom fields in WordPress.
|
6 |
-
* Version: 5.6.
|
7 |
* Author: MetaBox.io
|
8 |
* Author URI: https://metabox.io
|
9 |
* License: GPL2+
|
3 |
* Plugin Name: Meta Box
|
4 |
* Plugin URI: https://metabox.io
|
5 |
* Description: Create custom meta boxes and custom fields in WordPress.
|
6 |
+
* Version: 5.6.14
|
7 |
* Author: MetaBox.io
|
8 |
* Author URI: https://metabox.io
|
9 |
* License: GPL2+
|
readme.txt
CHANGED
@@ -5,7 +5,7 @@ Tags: meta box, custom fields, custom post types, custom taxonomies, cpt, meta b
|
|
5 |
Requires at least: 4.8
|
6 |
Requires PHP: 7.0
|
7 |
Tested up to: 6.1.1
|
8 |
-
Stable tag: 5.6.
|
9 |
License: GPLv2 or later
|
10 |
|
11 |
Meta Box plugin is a powerful, professional developer toolkit to create custom meta boxes and custom fields for your custom post types in WordPress.
|
@@ -177,6 +177,15 @@ To getting started with the plugin, please read the [Quick Start Guide](https://
|
|
177 |
|
178 |
== Changelog ==
|
179 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
180 |
= 5.6.13 - 2022-12-08 =
|
181 |
- Fix name for adding form enctype to match with MB Term Meta extension
|
182 |
- Fix return type for RWMB_Helpers_Array::map()
|
5 |
Requires at least: 4.8
|
6 |
Requires PHP: 7.0
|
7 |
Tested up to: 6.1.1
|
8 |
+
Stable tag: 5.6.14
|
9 |
License: GPLv2 or later
|
10 |
|
11 |
Meta Box plugin is a powerful, professional developer toolkit to create custom meta boxes and custom fields for your custom post types in WordPress.
|
177 |
|
178 |
== Changelog ==
|
179 |
|
180 |
+
= 5.6.14 - 2022-12-13 =
|
181 |
+
- Improve style for date picker
|
182 |
+
- Update jQueryUI to 1.13.2
|
183 |
+
- Fix inline date field not localized
|
184 |
+
- Fix visibility for object field's query() method, which is called in MB Views and Meta Box Builder
|
185 |
+
- Fix $meta is not countable in object field's query method
|
186 |
+
- Remove return type for is_save() to be compatible with old version of MB Term Meta
|
187 |
+
- Start to use PSR-4 and Composer
|
188 |
+
|
189 |
= 5.6.13 - 2022-12-08 =
|
190 |
- Fix name for adding form enctype to match with MB Term Meta extension
|
191 |
- Fix return type for RWMB_Helpers_Array::map()
|
src/Support/Arr.php
ADDED
@@ -0,0 +1,147 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
namespace MetaBox\Support;
|
3 |
+
|
4 |
+
class Arr {
|
5 |
+
/**
|
6 |
+
* New array map function that accepts more params than just values.
|
7 |
+
* Params: array|item, callback, other params.
|
8 |
+
*/
|
9 |
+
public static function map() {
|
10 |
+
$args = func_get_args();
|
11 |
+
$items = array_shift( $args );
|
12 |
+
$callback = array_shift( $args );
|
13 |
+
|
14 |
+
if ( ! is_array( $items ) ) {
|
15 |
+
array_unshift( $args, $items );
|
16 |
+
return call_user_func_array( $callback, $args );
|
17 |
+
}
|
18 |
+
|
19 |
+
return array_map(
|
20 |
+
function( $item ) use ( $callback, $args ) {
|
21 |
+
array_unshift( $args, $item );
|
22 |
+
return call_user_func_array( $callback, $args );
|
23 |
+
},
|
24 |
+
$items
|
25 |
+
);
|
26 |
+
}
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Convert a comma separated string to array.
|
30 |
+
*
|
31 |
+
* @param array|string $csv Comma separated string.
|
32 |
+
*/
|
33 |
+
public static function from_csv( $csv ) : array {
|
34 |
+
return is_array( $csv ) ? $csv : array_filter( array_map( 'trim', explode( ',', $csv . ',' ) ) );
|
35 |
+
}
|
36 |
+
|
37 |
+
/**
|
38 |
+
* Change array key.
|
39 |
+
*
|
40 |
+
* @param array $array Input array.
|
41 |
+
* @param string $from From key.
|
42 |
+
* @param string $to To key.
|
43 |
+
*/
|
44 |
+
public static function change_key( &$array, $from, $to ) {
|
45 |
+
if ( isset( $array[ $from ] ) ) {
|
46 |
+
$array[ $to ] = $array[ $from ];
|
47 |
+
}
|
48 |
+
unset( $array[ $from ] );
|
49 |
+
}
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Ensure a variable is an array.
|
53 |
+
*/
|
54 |
+
public static function ensure( $input ) : array {
|
55 |
+
return (array) $input;
|
56 |
+
}
|
57 |
+
|
58 |
+
/**
|
59 |
+
* Flatten an array.
|
60 |
+
* @link https://stackoverflow.com/a/1320156/371240
|
61 |
+
*/
|
62 |
+
public static function flatten( array $array ) : array {
|
63 |
+
$return = [];
|
64 |
+
array_walk_recursive(
|
65 |
+
$array,
|
66 |
+
function( $a ) use ( &$return ) {
|
67 |
+
$return[] = $a;
|
68 |
+
}
|
69 |
+
);
|
70 |
+
return $return;
|
71 |
+
}
|
72 |
+
|
73 |
+
/**
|
74 |
+
* Convert flatten collection (with dot notation) to multiple dimensional array
|
75 |
+
*
|
76 |
+
* @param collection $collection Collection to be flatten.
|
77 |
+
* @return array
|
78 |
+
*/
|
79 |
+
public static function unflatten( $collection ) {
|
80 |
+
$collection = (array) $collection;
|
81 |
+
$output = [];
|
82 |
+
|
83 |
+
foreach ( $collection as $key => $value ) {
|
84 |
+
self::set( $output, $key, $value );
|
85 |
+
|
86 |
+
if ( is_array( $value ) && ! strpos( $key, '.' ) ) {
|
87 |
+
$nested = self::unflatten( $value );
|
88 |
+
$output[ $key ] = $nested;
|
89 |
+
}
|
90 |
+
}
|
91 |
+
|
92 |
+
return $output;
|
93 |
+
}
|
94 |
+
|
95 |
+
/**
|
96 |
+
* Set array element value with dot notation.
|
97 |
+
*/
|
98 |
+
public static function set( &$array, $key, $value ) {
|
99 |
+
if ( is_null( $key ) ) {
|
100 |
+
$array = $value;
|
101 |
+
return $array;
|
102 |
+
}
|
103 |
+
|
104 |
+
// Do not parse email value.
|
105 |
+
if ( is_email( $key ) ) {
|
106 |
+
$array[ $key ] = $value;
|
107 |
+
return;
|
108 |
+
}
|
109 |
+
|
110 |
+
$keys = explode( '.', $key );
|
111 |
+
|
112 |
+
while ( count( $keys ) > 1 ) {
|
113 |
+
$key = array_shift( $keys );
|
114 |
+
|
115 |
+
// If the key doesn't exist at this depth, we will just create an empty array
|
116 |
+
// to hold the next value, allowing us to create the arrays to hold final
|
117 |
+
// values at the correct depth. Then we'll keep digging into the array.
|
118 |
+
if ( ! isset( $array[ $key ] ) || ! is_array( $array[ $key ] ) ) {
|
119 |
+
$array[ $key ] = [];
|
120 |
+
}
|
121 |
+
|
122 |
+
$array =& $array[ $key ];
|
123 |
+
}
|
124 |
+
|
125 |
+
$array[ array_shift( $keys ) ] = $value;
|
126 |
+
}
|
127 |
+
|
128 |
+
/**
|
129 |
+
* Get array element value with dot notation.
|
130 |
+
*/
|
131 |
+
public static function get( $array, $key, $default = null ) {
|
132 |
+
if ( is_null( $key ) ) {
|
133 |
+
return $array;
|
134 |
+
}
|
135 |
+
|
136 |
+
$keys = explode( '.', $key );
|
137 |
+
foreach ( $keys as $key ) {
|
138 |
+
if ( isset( $array[ $key ] ) ) {
|
139 |
+
$array = $array[ $key ];
|
140 |
+
} else {
|
141 |
+
return $default;
|
142 |
+
}
|
143 |
+
}
|
144 |
+
|
145 |
+
return $array;
|
146 |
+
}
|
147 |
+
}
|
src/Support/Data.php
ADDED
@@ -0,0 +1,366 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
namespace MetaBox\Support;
|
3 |
+
|
4 |
+
class Data {
|
5 |
+
public static function get_post_types() {
|
6 |
+
$unsupported = [
|
7 |
+
// WordPress built-in post types.
|
8 |
+
'customize_changeset',
|
9 |
+
'custom_css',
|
10 |
+
'nav_menu_item',
|
11 |
+
'oembed_cache',
|
12 |
+
'revision',
|
13 |
+
'user_request',
|
14 |
+
'wp_block',
|
15 |
+
'wp_template',
|
16 |
+
'wp_template_part',
|
17 |
+
'wp_global_styles',
|
18 |
+
'wp_navigation',
|
19 |
+
'wp_template',
|
20 |
+
'wp_template_part',
|
21 |
+
'wp_global_styles',
|
22 |
+
|
23 |
+
// Meta Box post types.
|
24 |
+
'mb-post-type',
|
25 |
+
'mb-taxonomy',
|
26 |
+
'mb-relationship',
|
27 |
+
'mb-settings-page',
|
28 |
+
'mb-views',
|
29 |
+
'meta-box',
|
30 |
+
|
31 |
+
// Elementor post types.
|
32 |
+
'elementor_library',
|
33 |
+
'elementor_font',
|
34 |
+
'elementor_icons',
|
35 |
+
'elementor_snippet',
|
36 |
+
];
|
37 |
+
$post_types = get_post_types( [], 'objects' );
|
38 |
+
$post_types = array_diff_key( $post_types, array_flip( $unsupported ) );
|
39 |
+
|
40 |
+
return $post_types;
|
41 |
+
}
|
42 |
+
|
43 |
+
public static function get_taxonomies() {
|
44 |
+
$unsupported = [
|
45 |
+
'link_category',
|
46 |
+
'nav_menu',
|
47 |
+
'post_format',
|
48 |
+
'wp_theme',
|
49 |
+
'wp_template_part_area',
|
50 |
+
'mb-views-category',
|
51 |
+
];
|
52 |
+
$taxonomies = get_taxonomies( [], 'objects' );
|
53 |
+
$taxonomies = array_diff_key( $taxonomies, array_flip( $unsupported ) );
|
54 |
+
|
55 |
+
return $taxonomies;
|
56 |
+
}
|
57 |
+
|
58 |
+
public static function get_dashicons() {
|
59 |
+
return [
|
60 |
+
'admin-appearance',
|
61 |
+
'admin-collapse',
|
62 |
+
'admin-comments',
|
63 |
+
'admin-generic',
|
64 |
+
'admin-home',
|
65 |
+
'admin-links',
|
66 |
+
'admin-media',
|
67 |
+
'admin-network',
|
68 |
+
'admin-page',
|
69 |
+
'admin-plugins',
|
70 |
+
'admin-post',
|
71 |
+
'admin-settings',
|
72 |
+
'admin-site',
|
73 |
+
'admin-site-alt',
|
74 |
+
'admin-site-alt2',
|
75 |
+
'admin-tools',
|
76 |
+
'admin-users',
|
77 |
+
'admin-customizer',
|
78 |
+
'admin-multisite',
|
79 |
+
'album',
|
80 |
+
'align-center',
|
81 |
+
'align-left',
|
82 |
+
'align-none',
|
83 |
+
'align-right',
|
84 |
+
'align-full-width',
|
85 |
+
'align-pull-left',
|
86 |
+
'align-pull-right',
|
87 |
+
'align-wide',
|
88 |
+
'analytics',
|
89 |
+
'archive',
|
90 |
+
'arrow-down-alt2',
|
91 |
+
'arrow-down-alt',
|
92 |
+
'arrow-down',
|
93 |
+
'arrow-left-alt2',
|
94 |
+
'arrow-left-alt',
|
95 |
+
'arrow-left',
|
96 |
+
'arrow-right-alt2',
|
97 |
+
'arrow-right-alt',
|
98 |
+
'arrow-right',
|
99 |
+
'arrow-up-alt2',
|
100 |
+
'arrow-up-alt',
|
101 |
+
'arrow-up',
|
102 |
+
'art',
|
103 |
+
'awards',
|
104 |
+
'amazon',
|
105 |
+
'airplane',
|
106 |
+
'backup',
|
107 |
+
'book-alt',
|
108 |
+
'book',
|
109 |
+
'block-default',
|
110 |
+
'button',
|
111 |
+
'building',
|
112 |
+
'businessman',
|
113 |
+
'bell',
|
114 |
+
'beer',
|
115 |
+
'bank',
|
116 |
+
'car',
|
117 |
+
'calendar-alt',
|
118 |
+
'calendar',
|
119 |
+
'camera',
|
120 |
+
'camera-alt',
|
121 |
+
'carrot',
|
122 |
+
'cart',
|
123 |
+
'calculator',
|
124 |
+
'category',
|
125 |
+
'chart-area',
|
126 |
+
'chart-bar',
|
127 |
+
'chart-line',
|
128 |
+
'chart-pie',
|
129 |
+
'clipboard',
|
130 |
+
'clock',
|
131 |
+
'columns',
|
132 |
+
'cover-image',
|
133 |
+
'cloud',
|
134 |
+
'cloud-saved',
|
135 |
+
'cloud-upload',
|
136 |
+
'controls-back',
|
137 |
+
'controls-forward',
|
138 |
+
'controls-pause',
|
139 |
+
'controls-play',
|
140 |
+
'controls-repeat',
|
141 |
+
'controls-skipback',
|
142 |
+
'controls-skipforward',
|
143 |
+
'controls-volumeoff',
|
144 |
+
'controls-volumeon',
|
145 |
+
'coffee',
|
146 |
+
'dashboard',
|
147 |
+
'database-add',
|
148 |
+
'database-export',
|
149 |
+
'database-import',
|
150 |
+
'database-remove',
|
151 |
+
'database-view',
|
152 |
+
'database',
|
153 |
+
'desktop',
|
154 |
+
'dismiss',
|
155 |
+
'download',
|
156 |
+
'drumstick',
|
157 |
+
'ellipsis',
|
158 |
+
'embed-audio',
|
159 |
+
'embed-generic',
|
160 |
+
'embed-photo',
|
161 |
+
'embed-post',
|
162 |
+
'embed-video',
|
163 |
+
'editor-aligncenter',
|
164 |
+
'editor-alignleft',
|
165 |
+
'editor-alignright',
|
166 |
+
'editor-bold',
|
167 |
+
'editor-break',
|
168 |
+
'editor-code',
|
169 |
+
'editor-contract',
|
170 |
+
'editor-customchar',
|
171 |
+
'editor-distractionfree',
|
172 |
+
'editor-expand',
|
173 |
+
'editor-help',
|
174 |
+
'editor-indent',
|
175 |
+
'editor-insertmore',
|
176 |
+
'editor-italic',
|
177 |
+
'editor-justify',
|
178 |
+
'editor-kitchensink',
|
179 |
+
'editor-ol',
|
180 |
+
'editor-outdent',
|
181 |
+
'editor-paragraph',
|
182 |
+
'editor-paste-text',
|
183 |
+
'editor-paste-word',
|
184 |
+
'editor-quote',
|
185 |
+
'editor-removeformatting',
|
186 |
+
'editor-rtl',
|
187 |
+
'editor-spellcheck',
|
188 |
+
'editor-strikethrough',
|
189 |
+
'editor-textcolor',
|
190 |
+
'editor-ul',
|
191 |
+
'editor-underline',
|
192 |
+
'editor-unlink',
|
193 |
+
'editor-video',
|
194 |
+
'edit',
|
195 |
+
'edit-page',
|
196 |
+
'email-alt',
|
197 |
+
'email',
|
198 |
+
'excerpt-view',
|
199 |
+
'exerpt-view',
|
200 |
+
'external',
|
201 |
+
'exit',
|
202 |
+
'facebook-alt',
|
203 |
+
'facebook',
|
204 |
+
'feedback',
|
205 |
+
'flag',
|
206 |
+
'format-aside',
|
207 |
+
'format-audio',
|
208 |
+
'format-chat',
|
209 |
+
'format-gallery',
|
210 |
+
'format-image',
|
211 |
+
'format-links',
|
212 |
+
'format-quote',
|
213 |
+
'format-standard',
|
214 |
+
'format-status',
|
215 |
+
'format-video',
|
216 |
+
'forms',
|
217 |
+
'filter',
|
218 |
+
'food',
|
219 |
+
'fullscreen-alt',
|
220 |
+
'fullscreen-exit-alt',
|
221 |
+
'games',
|
222 |
+
'googleplus',
|
223 |
+
'google',
|
224 |
+
'grid-view',
|
225 |
+
'groups',
|
226 |
+
'hammer',
|
227 |
+
'heart',
|
228 |
+
'heading',
|
229 |
+
'html',
|
230 |
+
'hourglass',
|
231 |
+
'id-alt',
|
232 |
+
'id',
|
233 |
+
'info-outline',
|
234 |
+
'insert-after',
|
235 |
+
'insert-before',
|
236 |
+
'insert',
|
237 |
+
'images-alt2',
|
238 |
+
'images-alt',
|
239 |
+
'image-crop',
|
240 |
+
'image-flip-horizontal',
|
241 |
+
'image-flip-vertical',
|
242 |
+
'image-rotate-left',
|
243 |
+
'image-rotate-right',
|
244 |
+
'index-card',
|
245 |
+
'info',
|
246 |
+
'leftright',
|
247 |
+
'lightbulb',
|
248 |
+
'list-view',
|
249 |
+
'location-alt',
|
250 |
+
'location',
|
251 |
+
'lock',
|
252 |
+
'linkedin',
|
253 |
+
'marker',
|
254 |
+
'media-archive',
|
255 |
+
'media-audio',
|
256 |
+
'media-code',
|
257 |
+
'media-default',
|
258 |
+
'media-document',
|
259 |
+
'media-interactive',
|
260 |
+
'media-spreadsheet',
|
261 |
+
'media-text',
|
262 |
+
'media-video',
|
263 |
+
'megaphone',
|
264 |
+
'menu',
|
265 |
+
'menu-alt',
|
266 |
+
'menu-alt2',
|
267 |
+
'menu-alt3',
|
268 |
+
'microphone',
|
269 |
+
'migrate',
|
270 |
+
'minus',
|
271 |
+
'money',
|
272 |
+
'money-alt',
|
273 |
+
'nametag',
|
274 |
+
'networking',
|
275 |
+
'no-alt',
|
276 |
+
'no',
|
277 |
+
'open-folder',
|
278 |
+
'palmtree',
|
279 |
+
'performance',
|
280 |
+
'phone',
|
281 |
+
'playlist-audio',
|
282 |
+
'playlist-video',
|
283 |
+
'plus-alt',
|
284 |
+
'plus',
|
285 |
+
'portfolio',
|
286 |
+
'post-status',
|
287 |
+
'post-trash',
|
288 |
+
'pressthis',
|
289 |
+
'products',
|
290 |
+
'plugins-checked',
|
291 |
+
'pinterest',
|
292 |
+
'podio',
|
293 |
+
'printer',
|
294 |
+
'pdf',
|
295 |
+
'pets',
|
296 |
+
'privacy',
|
297 |
+
'randomize',
|
298 |
+
'redo',
|
299 |
+
'rss',
|
300 |
+
'remove',
|
301 |
+
'reddit',
|
302 |
+
'superhero',
|
303 |
+
'superhero-alt',
|
304 |
+
'spotify',
|
305 |
+
'schedule',
|
306 |
+
'screenoptions',
|
307 |
+
'search',
|
308 |
+
'share1',
|
309 |
+
'share-alt2',
|
310 |
+
'share-alt',
|
311 |
+
'share',
|
312 |
+
'shield-alt',
|
313 |
+
'shield',
|
314 |
+
'slides',
|
315 |
+
'shortcode',
|
316 |
+
'smartphone',
|
317 |
+
'smiley',
|
318 |
+
'sort',
|
319 |
+
'sos',
|
320 |
+
'star-empty',
|
321 |
+
'star-filled',
|
322 |
+
'star-half',
|
323 |
+
'store',
|
324 |
+
'saved',
|
325 |
+
'tablet',
|
326 |
+
'twitch',
|
327 |
+
'table-col-after',
|
328 |
+
'table-col-before',
|
329 |
+
'table-col-delete',
|
330 |
+
'table-row-after',
|
331 |
+
'table-row-before',
|
332 |
+
'table-row-delete',
|
333 |
+
'tagcloud',
|
334 |
+
'tag',
|
335 |
+
'testimonial',
|
336 |
+
'text',
|
337 |
+
'tickets-alt',
|
338 |
+
'tickets',
|
339 |
+
'translation',
|
340 |
+
'trash',
|
341 |
+
'twitter',
|
342 |
+
'undo',
|
343 |
+
'universal-access-alt',
|
344 |
+
'universal-access',
|
345 |
+
'update',
|
346 |
+
'upload',
|
347 |
+
'vault',
|
348 |
+
'video-alt2',
|
349 |
+
'video-alt3',
|
350 |
+
'video-alt',
|
351 |
+
'visibility',
|
352 |
+
'xing',
|
353 |
+
'youtube',
|
354 |
+
'whatsapp',
|
355 |
+
'welcome-add-page',
|
356 |
+
'welcome-comments',
|
357 |
+
'welcome-edit-page',
|
358 |
+
'welcome-learn-more',
|
359 |
+
'welcome-view-site',
|
360 |
+
'welcome-widgets-menus',
|
361 |
+
'welcome-write-blog',
|
362 |
+
'wordpress-alt',
|
363 |
+
'wordpress',
|
364 |
+
];
|
365 |
+
}
|
366 |
+
}
|
inc/update/checker.php → src/Updater/Checker.php
RENAMED
@@ -1,9 +1,13 @@
|
|
1 |
<?php
|
2 |
-
|
|
|
|
|
|
|
|
|
3 |
private $api_url = 'https://metabox.io/wp-json/buse2/updater/';
|
4 |
private $option;
|
5 |
|
6 |
-
public function __construct( $option ) {
|
7 |
$this->option = $option;
|
8 |
}
|
9 |
|
1 |
<?php
|
2 |
+
namespace MetaBox\Updater;
|
3 |
+
|
4 |
+
use stdClass;
|
5 |
+
|
6 |
+
class Checker {
|
7 |
private $api_url = 'https://metabox.io/wp-json/buse2/updater/';
|
8 |
private $option;
|
9 |
|
10 |
+
public function __construct( Option $option ) {
|
11 |
$this->option = $option;
|
12 |
}
|
13 |
|
inc/update/notification.php → src/Updater/Notification.php
RENAMED
@@ -1,13 +1,11 @@
|
|
1 |
<?php
|
|
|
|
|
2 |
/**
|
3 |
* This class notifies users to enter or update license key.
|
4 |
*/
|
5 |
-
class
|
6 |
-
|
7 |
-
* The update option object.
|
8 |
-
*
|
9 |
-
* @var object
|
10 |
-
*/
|
11 |
private $option;
|
12 |
|
13 |
/**
|
@@ -17,20 +15,8 @@ class RWMB_Update_Notification {
|
|
17 |
*/
|
18 |
private $settings_page;
|
19 |
|
20 |
-
/**
|
21 |
-
* The update checker object.
|
22 |
-
*
|
23 |
-
* @var object
|
24 |
-
*/
|
25 |
-
private $checker;
|
26 |
|
27 |
-
|
28 |
-
* Constructor.
|
29 |
-
*
|
30 |
-
* @param object $checker Update checker object.
|
31 |
-
* @param object $option Update option object.
|
32 |
-
*/
|
33 |
-
public function __construct( $checker, $option ) {
|
34 |
$this->checker = $checker;
|
35 |
$this->option = $option;
|
36 |
|
@@ -153,7 +139,7 @@ class RWMB_Update_Notification {
|
|
153 |
* Auto re-enable the notification every 2 weeks after it's dismissed.
|
154 |
*/
|
155 |
private function is_dismissed() : bool {
|
156 |
-
$time = $this->option->get( 'notification_dismissed_time' );
|
157 |
|
158 |
return $this->option->get( 'notification_dismissed' ) && time() - $time < 14 * DAY_IN_SECONDS;
|
159 |
}
|
1 |
<?php
|
2 |
+
namespace MetaBox\Updater;
|
3 |
+
|
4 |
/**
|
5 |
* This class notifies users to enter or update license key.
|
6 |
*/
|
7 |
+
class Notification {
|
8 |
+
private $checker;
|
|
|
|
|
|
|
|
|
9 |
private $option;
|
10 |
|
11 |
/**
|
15 |
*/
|
16 |
private $settings_page;
|
17 |
|
|
|
|
|
|
|
|
|
|
|
|
|
18 |
|
19 |
+
public function __construct( Checker $checker, Option $option ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
20 |
$this->checker = $checker;
|
21 |
$this->option = $option;
|
22 |
|
139 |
* Auto re-enable the notification every 2 weeks after it's dismissed.
|
140 |
*/
|
141 |
private function is_dismissed() : bool {
|
142 |
+
$time = $this->option->get( 'notification_dismissed_time', 0 );
|
143 |
|
144 |
return $this->option->get( 'notification_dismissed' ) && time() - $time < 14 * DAY_IN_SECONDS;
|
145 |
}
|
inc/update/option.php → src/Updater/Option.php
RENAMED
@@ -1,8 +1,10 @@
|
|
1 |
<?php
|
|
|
|
|
2 |
/**
|
3 |
* This class handles getting and saving the updater option.
|
4 |
*/
|
5 |
-
class
|
6 |
/**
|
7 |
* Option name.
|
8 |
*
|
1 |
<?php
|
2 |
+
namespace MetaBox\Updater;
|
3 |
+
|
4 |
/**
|
5 |
* This class handles getting and saving the updater option.
|
6 |
*/
|
7 |
+
class Option {
|
8 |
/**
|
9 |
* Option name.
|
10 |
*
|
inc/update/settings.php → src/Updater/Settings.php
RENAMED
@@ -1,10 +1,12 @@
|
|
1 |
<?php
|
2 |
-
|
|
|
|
|
3 |
private $option;
|
4 |
private $checker;
|
5 |
private $fake_api_key;
|
6 |
|
7 |
-
public function __construct( $checker, $option ) {
|
8 |
$this->checker = $checker;
|
9 |
$this->option = $option;
|
10 |
$this->fake_api_key = 'Please do not steal this license key';
|
1 |
<?php
|
2 |
+
namespace MetaBox\Updater;
|
3 |
+
|
4 |
+
class Settings {
|
5 |
private $option;
|
6 |
private $checker;
|
7 |
private $fake_api_key;
|
8 |
|
9 |
+
public function __construct( Checker $checker, Option $option ) {
|
10 |
$this->checker = $checker;
|
11 |
$this->option = $option;
|
12 |
$this->fake_api_key = 'Please do not steal this license key';
|
vendor/autoload.php
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// autoload.php @generated by Composer
|
4 |
+
|
5 |
+
if (PHP_VERSION_ID < 50600) {
|
6 |
+
if (!headers_sent()) {
|
7 |
+
header('HTTP/1.1 500 Internal Server Error');
|
8 |
+
}
|
9 |
+
$err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL;
|
10 |
+
if (!ini_get('display_errors')) {
|
11 |
+
if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
|
12 |
+
fwrite(STDERR, $err);
|
13 |
+
} elseif (!headers_sent()) {
|
14 |
+
echo $err;
|
15 |
+
}
|
16 |
+
}
|
17 |
+
trigger_error(
|
18 |
+
$err,
|
19 |
+
E_USER_ERROR
|
20 |
+
);
|
21 |
+
}
|
22 |
+
|
23 |
+
require_once __DIR__ . '/composer/autoload_real.php';
|
24 |
+
|
25 |
+
return ComposerAutoloaderInit5fa278c5276588f761367822a3d405ce::getLoader();
|
vendor/composer/ClassLoader.php
ADDED
@@ -0,0 +1,572 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of Composer.
|
5 |
+
*
|
6 |
+
* (c) Nils Adermann <naderman@naderman.de>
|
7 |
+
* Jordi Boggiano <j.boggiano@seld.be>
|
8 |
+
*
|
9 |
+
* For the full copyright and license information, please view the LICENSE
|
10 |
+
* file that was distributed with this source code.
|
11 |
+
*/
|
12 |
+
|
13 |
+
namespace Composer\Autoload;
|
14 |
+
|
15 |
+
/**
|
16 |
+
* ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
|
17 |
+
*
|
18 |
+
* $loader = new \Composer\Autoload\ClassLoader();
|
19 |
+
*
|
20 |
+
* // register classes with namespaces
|
21 |
+
* $loader->add('Symfony\Component', __DIR__.'/component');
|
22 |
+
* $loader->add('Symfony', __DIR__.'/framework');
|
23 |
+
*
|
24 |
+
* // activate the autoloader
|
25 |
+
* $loader->register();
|
26 |
+
*
|
27 |
+
* // to enable searching the include path (eg. for PEAR packages)
|
28 |
+
* $loader->setUseIncludePath(true);
|
29 |
+
*
|
30 |
+
* In this example, if you try to use a class in the Symfony\Component
|
31 |
+
* namespace or one of its children (Symfony\Component\Console for instance),
|
32 |
+
* the autoloader will first look for the class under the component/
|
33 |
+
* directory, and it will then fallback to the framework/ directory if not
|
34 |
+
* found before giving up.
|
35 |
+
*
|
36 |
+
* This class is loosely based on the Symfony UniversalClassLoader.
|
37 |
+
*
|
38 |
+
* @author Fabien Potencier <fabien@symfony.com>
|
39 |
+
* @author Jordi Boggiano <j.boggiano@seld.be>
|
40 |
+
* @see https://www.php-fig.org/psr/psr-0/
|
41 |
+
* @see https://www.php-fig.org/psr/psr-4/
|
42 |
+
*/
|
43 |
+
class ClassLoader
|
44 |
+
{
|
45 |
+
/** @var ?string */
|
46 |
+
private $vendorDir;
|
47 |
+
|
48 |
+
// PSR-4
|
49 |
+
/**
|
50 |
+
* @var array[]
|
51 |
+
* @psalm-var array<string, array<string, int>>
|
52 |
+
*/
|
53 |
+
private $prefixLengthsPsr4 = array();
|
54 |
+
/**
|
55 |
+
* @var array[]
|
56 |
+
* @psalm-var array<string, array<int, string>>
|
57 |
+
*/
|
58 |
+
private $prefixDirsPsr4 = array();
|
59 |
+
/**
|
60 |
+
* @var array[]
|
61 |
+
* @psalm-var array<string, string>
|
62 |
+
*/
|
63 |
+
private $fallbackDirsPsr4 = array();
|
64 |
+
|
65 |
+
// PSR-0
|
66 |
+
/**
|
67 |
+
* @var array[]
|
68 |
+
* @psalm-var array<string, array<string, string[]>>
|
69 |
+
*/
|
70 |
+
private $prefixesPsr0 = array();
|
71 |
+
/**
|
72 |
+
* @var array[]
|
73 |
+
* @psalm-var array<string, string>
|
74 |
+
*/
|
75 |
+
private $fallbackDirsPsr0 = array();
|
76 |
+
|
77 |
+
/** @var bool */
|
78 |
+
private $useIncludePath = false;
|
79 |
+
|
80 |
+
/**
|
81 |
+
* @var string[]
|
82 |
+
* @psalm-var array<string, string>
|
83 |
+
*/
|
84 |
+
private $classMap = array();
|
85 |
+
|
86 |
+
/** @var bool */
|
87 |
+
private $classMapAuthoritative = false;
|
88 |
+
|
89 |
+
/**
|
90 |
+
* @var bool[]
|
91 |
+
* @psalm-var array<string, bool>
|
92 |
+
*/
|
93 |
+
private $missingClasses = array();
|
94 |
+
|
95 |
+
/** @var ?string */
|
96 |
+
private $apcuPrefix;
|
97 |
+
|
98 |
+
/**
|
99 |
+
* @var self[]
|
100 |
+
*/
|
101 |
+
private static $registeredLoaders = array();
|
102 |
+
|
103 |
+
/**
|
104 |
+
* @param ?string $vendorDir
|
105 |
+
*/
|
106 |
+
public function __construct($vendorDir = null)
|
107 |
+
{
|
108 |
+
$this->vendorDir = $vendorDir;
|
109 |
+
}
|
110 |
+
|
111 |
+
/**
|
112 |
+
* @return string[]
|
113 |
+
*/
|
114 |
+
public function getPrefixes()
|
115 |
+
{
|
116 |
+
if (!empty($this->prefixesPsr0)) {
|
117 |
+
return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
|
118 |
+
}
|
119 |
+
|
120 |
+
return array();
|
121 |
+
}
|
122 |
+
|
123 |
+
/**
|
124 |
+
* @return array[]
|
125 |
+
* @psalm-return array<string, array<int, string>>
|
126 |
+
*/
|
127 |
+
public function getPrefixesPsr4()
|
128 |
+
{
|
129 |
+
return $this->prefixDirsPsr4;
|
130 |
+
}
|
131 |
+
|
132 |
+
/**
|
133 |
+
* @return array[]
|
134 |
+
* @psalm-return array<string, string>
|
135 |
+
*/
|
136 |
+
public function getFallbackDirs()
|
137 |
+
{
|
138 |
+
return $this->fallbackDirsPsr0;
|
139 |
+
}
|
140 |
+
|
141 |
+
/**
|
142 |
+
* @return array[]
|
143 |
+
* @psalm-return array<string, string>
|
144 |
+
*/
|
145 |
+
public function getFallbackDirsPsr4()
|
146 |
+
{
|
147 |
+
return $this->fallbackDirsPsr4;
|
148 |
+
}
|
149 |
+
|
150 |
+
/**
|
151 |
+
* @return string[] Array of classname => path
|
152 |
+
* @psalm-return array<string, string>
|
153 |
+
*/
|
154 |
+
public function getClassMap()
|
155 |
+
{
|
156 |
+
return $this->classMap;
|
157 |
+
}
|
158 |
+
|
159 |
+
/**
|
160 |
+
* @param string[] $classMap Class to filename map
|
161 |
+
* @psalm-param array<string, string> $classMap
|
162 |
+
*
|
163 |
+
* @return void
|
164 |
+
*/
|
165 |
+
public function addClassMap(array $classMap)
|
166 |
+
{
|
167 |
+
if ($this->classMap) {
|
168 |
+
$this->classMap = array_merge($this->classMap, $classMap);
|
169 |
+
} else {
|
170 |
+
$this->classMap = $classMap;
|
171 |
+
}
|
172 |
+
}
|
173 |
+
|
174 |
+
/**
|
175 |
+
* Registers a set of PSR-0 directories for a given prefix, either
|
176 |
+
* appending or prepending to the ones previously set for this prefix.
|
177 |
+
*
|
178 |
+
* @param string $prefix The prefix
|
179 |
+
* @param string[]|string $paths The PSR-0 root directories
|
180 |
+
* @param bool $prepend Whether to prepend the directories
|
181 |
+
*
|
182 |
+
* @return void
|
183 |
+
*/
|
184 |
+
public function add($prefix, $paths, $prepend = false)
|
185 |
+
{
|
186 |
+
if (!$prefix) {
|
187 |
+
if ($prepend) {
|
188 |
+
$this->fallbackDirsPsr0 = array_merge(
|
189 |
+
(array) $paths,
|
190 |
+
$this->fallbackDirsPsr0
|
191 |
+
);
|
192 |
+
} else {
|
193 |
+
$this->fallbackDirsPsr0 = array_merge(
|
194 |
+
$this->fallbackDirsPsr0,
|
195 |
+
(array) $paths
|
196 |
+
);
|
197 |
+
}
|
198 |
+
|
199 |
+
return;
|
200 |
+
}
|
201 |
+
|
202 |
+
$first = $prefix[0];
|
203 |
+
if (!isset($this->prefixesPsr0[$first][$prefix])) {
|
204 |
+
$this->prefixesPsr0[$first][$prefix] = (array) $paths;
|
205 |
+
|
206 |
+
return;
|
207 |
+
}
|
208 |
+
if ($prepend) {
|
209 |
+
$this->prefixesPsr0[$first][$prefix] = array_merge(
|
210 |
+
(array) $paths,
|
211 |
+
$this->prefixesPsr0[$first][$prefix]
|
212 |
+
);
|
213 |
+
} else {
|
214 |
+
$this->prefixesPsr0[$first][$prefix] = array_merge(
|
215 |
+
$this->prefixesPsr0[$first][$prefix],
|
216 |
+
(array) $paths
|
217 |
+
);
|
218 |
+
}
|
219 |
+
}
|
220 |
+
|
221 |
+
/**
|
222 |
+
* Registers a set of PSR-4 directories for a given namespace, either
|
223 |
+
* appending or prepending to the ones previously set for this namespace.
|
224 |
+
*
|
225 |
+
* @param string $prefix The prefix/namespace, with trailing '\\'
|
226 |
+
* @param string[]|string $paths The PSR-4 base directories
|
227 |
+
* @param bool $prepend Whether to prepend the directories
|
228 |
+
*
|
229 |
+
* @throws \InvalidArgumentException
|
230 |
+
*
|
231 |
+
* @return void
|
232 |
+
*/
|
233 |
+
public function addPsr4($prefix, $paths, $prepend = false)
|
234 |
+
{
|
235 |
+
if (!$prefix) {
|
236 |
+
// Register directories for the root namespace.
|
237 |
+
if ($prepend) {
|
238 |
+
$this->fallbackDirsPsr4 = array_merge(
|
239 |
+
(array) $paths,
|
240 |
+
$this->fallbackDirsPsr4
|
241 |
+
);
|
242 |
+
} else {
|
243 |
+
$this->fallbackDirsPsr4 = array_merge(
|
244 |
+
$this->fallbackDirsPsr4,
|
245 |
+
(array) $paths
|
246 |
+
);
|
247 |
+
}
|
248 |
+
} elseif (!isset($this->prefixDirsPsr4[$prefix])) {
|
249 |
+
// Register directories for a new namespace.
|
250 |
+
$length = strlen($prefix);
|
251 |
+
if ('\\' !== $prefix[$length - 1]) {
|
252 |
+
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
|
253 |
+
}
|
254 |
+
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
|
255 |
+
$this->prefixDirsPsr4[$prefix] = (array) $paths;
|
256 |
+
} elseif ($prepend) {
|
257 |
+
// Prepend directories for an already registered namespace.
|
258 |
+
$this->prefixDirsPsr4[$prefix] = array_merge(
|
259 |
+
(array) $paths,
|
260 |
+
$this->prefixDirsPsr4[$prefix]
|
261 |
+
);
|
262 |
+
} else {
|
263 |
+
// Append directories for an already registered namespace.
|
264 |
+
$this->prefixDirsPsr4[$prefix] = array_merge(
|
265 |
+
$this->prefixDirsPsr4[$prefix],
|
266 |
+
(array) $paths
|
267 |
+
);
|
268 |
+
}
|
269 |
+
}
|
270 |
+
|
271 |
+
/**
|
272 |
+
* Registers a set of PSR-0 directories for a given prefix,
|
273 |
+
* replacing any others previously set for this prefix.
|
274 |
+
*
|
275 |
+
* @param string $prefix The prefix
|
276 |
+
* @param string[]|string $paths The PSR-0 base directories
|
277 |
+
*
|
278 |
+
* @return void
|
279 |
+
*/
|
280 |
+
public function set($prefix, $paths)
|
281 |
+
{
|
282 |
+
if (!$prefix) {
|
283 |
+
$this->fallbackDirsPsr0 = (array) $paths;
|
284 |
+
} else {
|
285 |
+
$this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
|
286 |
+
}
|
287 |
+
}
|
288 |
+
|
289 |
+
/**
|
290 |
+
* Registers a set of PSR-4 directories for a given namespace,
|
291 |
+
* replacing any others previously set for this namespace.
|
292 |
+
*
|
293 |
+
* @param string $prefix The prefix/namespace, with trailing '\\'
|
294 |
+
* @param string[]|string $paths The PSR-4 base directories
|
295 |
+
*
|
296 |
+
* @throws \InvalidArgumentException
|
297 |
+
*
|
298 |
+
* @return void
|
299 |
+
*/
|
300 |
+
public function setPsr4($prefix, $paths)
|
301 |
+
{
|
302 |
+
if (!$prefix) {
|
303 |
+
$this->fallbackDirsPsr4 = (array) $paths;
|
304 |
+
} else {
|
305 |
+
$length = strlen($prefix);
|
306 |
+
if ('\\' !== $prefix[$length - 1]) {
|
307 |
+
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
|
308 |
+
}
|
309 |
+
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
|
310 |
+
$this->prefixDirsPsr4[$prefix] = (array) $paths;
|
311 |
+
}
|
312 |
+
}
|
313 |
+
|
314 |
+
/**
|
315 |
+
* Turns on searching the include path for class files.
|
316 |
+
*
|
317 |
+
* @param bool $useIncludePath
|
318 |
+
*
|
319 |
+
* @return void
|
320 |
+
*/
|
321 |
+
public function setUseIncludePath($useIncludePath)
|
322 |
+
{
|
323 |
+
$this->useIncludePath = $useIncludePath;
|
324 |
+
}
|
325 |
+
|
326 |
+
/**
|
327 |
+
* Can be used to check if the autoloader uses the include path to check
|
328 |
+
* for classes.
|
329 |
+
*
|
330 |
+
* @return bool
|
331 |
+
*/
|
332 |
+
public function getUseIncludePath()
|
333 |
+
{
|
334 |
+
return $this->useIncludePath;
|
335 |
+
}
|
336 |
+
|
337 |
+
/**
|
338 |
+
* Turns off searching the prefix and fallback directories for classes
|
339 |
+
* that have not been registered with the class map.
|
340 |
+
*
|
341 |
+
* @param bool $classMapAuthoritative
|
342 |
+
*
|
343 |
+
* @return void
|
344 |
+
*/
|
345 |
+
public function setClassMapAuthoritative($classMapAuthoritative)
|
346 |
+
{
|
347 |
+
$this->classMapAuthoritative = $classMapAuthoritative;
|
348 |
+
}
|
349 |
+
|
350 |
+
/**
|
351 |
+
* Should class lookup fail if not found in the current class map?
|
352 |
+
*
|
353 |
+
* @return bool
|
354 |
+
*/
|
355 |
+
public function isClassMapAuthoritative()
|
356 |
+
{
|
357 |
+
return $this->classMapAuthoritative;
|
358 |
+
}
|
359 |
+
|
360 |
+
/**
|
361 |
+
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
|
362 |
+
*
|
363 |
+
* @param string|null $apcuPrefix
|
364 |
+
*
|
365 |
+
* @return void
|
366 |
+
*/
|
367 |
+
public function setApcuPrefix($apcuPrefix)
|
368 |
+
{
|
369 |
+
$this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
|
370 |
+
}
|
371 |
+
|
372 |
+
/**
|
373 |
+
* The APCu prefix in use, or null if APCu caching is not enabled.
|
374 |
+
*
|
375 |
+
* @return string|null
|
376 |
+
*/
|
377 |
+
public function getApcuPrefix()
|
378 |
+
{
|
379 |
+
return $this->apcuPrefix;
|
380 |
+
}
|
381 |
+
|
382 |
+
/**
|
383 |
+
* Registers this instance as an autoloader.
|
384 |
+
*
|
385 |
+
* @param bool $prepend Whether to prepend the autoloader or not
|
386 |
+
*
|
387 |
+
* @return void
|
388 |
+
*/
|
389 |
+
public function register($prepend = false)
|
390 |
+
{
|
391 |
+
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
|
392 |
+
|
393 |
+
if (null === $this->vendorDir) {
|
394 |
+
return;
|
395 |
+
}
|
396 |
+
|
397 |
+
if ($prepend) {
|
398 |
+
self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
|
399 |
+
} else {
|
400 |
+
unset(self::$registeredLoaders[$this->vendorDir]);
|
401 |
+
self::$registeredLoaders[$this->vendorDir] = $this;
|
402 |
+
}
|
403 |
+
}
|
404 |
+
|
405 |
+
/**
|
406 |
+
* Unregisters this instance as an autoloader.
|
407 |
+
*
|
408 |
+
* @return void
|
409 |
+
*/
|
410 |
+
public function unregister()
|
411 |
+
{
|
412 |
+
spl_autoload_unregister(array($this, 'loadClass'));
|
413 |
+
|
414 |
+
if (null !== $this->vendorDir) {
|
415 |
+
unset(self::$registeredLoaders[$this->vendorDir]);
|
416 |
+
}
|
417 |
+
}
|
418 |
+
|
419 |
+
/**
|
420 |
+
* Loads the given class or interface.
|
421 |
+
*
|
422 |
+
* @param string $class The name of the class
|
423 |
+
* @return true|null True if loaded, null otherwise
|
424 |
+
*/
|
425 |
+
public function loadClass($class)
|
426 |
+
{
|
427 |
+
if ($file = $this->findFile($class)) {
|
428 |
+
includeFile($file);
|
429 |
+
|
430 |
+
return true;
|
431 |
+
}
|
432 |
+
|
433 |
+
return null;
|
434 |
+
}
|
435 |
+
|
436 |
+
/**
|
437 |
+
* Finds the path to the file where the class is defined.
|
438 |
+
*
|
439 |
+
* @param string $class The name of the class
|
440 |
+
*
|
441 |
+
* @return string|false The path if found, false otherwise
|
442 |
+
*/
|
443 |
+
public function findFile($class)
|
444 |
+
{
|
445 |
+
// class map lookup
|
446 |
+
if (isset($this->classMap[$class])) {
|
447 |
+
return $this->classMap[$class];
|
448 |
+
}
|
449 |
+
if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
|
450 |
+
return false;
|
451 |
+
}
|
452 |
+
if (null !== $this->apcuPrefix) {
|
453 |
+
$file = apcu_fetch($this->apcuPrefix.$class, $hit);
|
454 |
+
if ($hit) {
|
455 |
+
return $file;
|
456 |
+
}
|
457 |
+
}
|
458 |
+
|
459 |
+
$file = $this->findFileWithExtension($class, '.php');
|
460 |
+
|
461 |
+
// Search for Hack files if we are running on HHVM
|
462 |
+
if (false === $file && defined('HHVM_VERSION')) {
|
463 |
+
$file = $this->findFileWithExtension($class, '.hh');
|
464 |
+
}
|
465 |
+
|
466 |
+
if (null !== $this->apcuPrefix) {
|
467 |
+
apcu_add($this->apcuPrefix.$class, $file);
|
468 |
+
}
|
469 |
+
|
470 |
+
if (false === $file) {
|
471 |
+
// Remember that this class does not exist.
|
472 |
+
$this->missingClasses[$class] = true;
|
473 |
+
}
|
474 |
+
|
475 |
+
return $file;
|
476 |
+
}
|
477 |
+
|
478 |
+
/**
|
479 |
+
* Returns the currently registered loaders indexed by their corresponding vendor directories.
|
480 |
+
*
|
481 |
+
* @return self[]
|
482 |
+
*/
|
483 |
+
public static function getRegisteredLoaders()
|
484 |
+
{
|
485 |
+
return self::$registeredLoaders;
|
486 |
+
}
|
487 |
+
|
488 |
+
/**
|
489 |
+
* @param string $class
|
490 |
+
* @param string $ext
|
491 |
+
* @return string|false
|
492 |
+
*/
|
493 |
+
private function findFileWithExtension($class, $ext)
|
494 |
+
{
|
495 |
+
// PSR-4 lookup
|
496 |
+
$logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
|
497 |
+
|
498 |
+
$first = $class[0];
|
499 |
+
if (isset($this->prefixLengthsPsr4[$first])) {
|
500 |
+
$subPath = $class;
|
501 |
+
while (false !== $lastPos = strrpos($subPath, '\\')) {
|
502 |
+
$subPath = substr($subPath, 0, $lastPos);
|
503 |
+
$search = $subPath . '\\';
|
504 |
+
if (isset($this->prefixDirsPsr4[$search])) {
|
505 |
+
$pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
|
506 |
+
foreach ($this->prefixDirsPsr4[$search] as $dir) {
|
507 |
+
if (file_exists($file = $dir . $pathEnd)) {
|
508 |
+
return $file;
|
509 |
+
}
|
510 |
+
}
|
511 |
+
}
|
512 |
+
}
|
513 |
+
}
|
514 |
+
|
515 |
+
// PSR-4 fallback dirs
|
516 |
+
foreach ($this->fallbackDirsPsr4 as $dir) {
|
517 |
+
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
|
518 |
+
return $file;
|
519 |
+
}
|
520 |
+
}
|
521 |
+
|
522 |
+
// PSR-0 lookup
|
523 |
+
if (false !== $pos = strrpos($class, '\\')) {
|
524 |
+
// namespaced class name
|
525 |
+
$logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
|
526 |
+
. strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
|
527 |
+
} else {
|
528 |
+
// PEAR-like class name
|
529 |
+
$logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
|
530 |
+
}
|
531 |
+
|
532 |
+
if (isset($this->prefixesPsr0[$first])) {
|
533 |
+
foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
|
534 |
+
if (0 === strpos($class, $prefix)) {
|
535 |
+
foreach ($dirs as $dir) {
|
536 |
+
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
|
537 |
+
return $file;
|
538 |
+
}
|
539 |
+
}
|
540 |
+
}
|
541 |
+
}
|
542 |
+
}
|
543 |
+
|
544 |
+
// PSR-0 fallback dirs
|
545 |
+
foreach ($this->fallbackDirsPsr0 as $dir) {
|
546 |
+
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
|
547 |
+
return $file;
|
548 |
+
}
|
549 |
+
}
|
550 |
+
|
551 |
+
// PSR-0 include paths.
|
552 |
+
if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
|
553 |
+
return $file;
|
554 |
+
}
|
555 |
+
|
556 |
+
return false;
|
557 |
+
}
|
558 |
+
}
|
559 |
+
|
560 |
+
/**
|
561 |
+
* Scope isolated include.
|
562 |
+
*
|
563 |
+
* Prevents access to $this/self from included files.
|
564 |
+
*
|
565 |
+
* @param string $file
|
566 |
+
* @return void
|
567 |
+
* @private
|
568 |
+
*/
|
569 |
+
function includeFile($file)
|
570 |
+
{
|
571 |
+
include $file;
|
572 |
+
}
|
vendor/composer/InstalledVersions.php
ADDED
@@ -0,0 +1,352 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of Composer.
|
5 |
+
*
|
6 |
+
* (c) Nils Adermann <naderman@naderman.de>
|
7 |
+
* Jordi Boggiano <j.boggiano@seld.be>
|
8 |
+
*
|
9 |
+
* For the full copyright and license information, please view the LICENSE
|
10 |
+
* file that was distributed with this source code.
|
11 |
+
*/
|
12 |
+
|
13 |
+
namespace Composer;
|
14 |
+
|
15 |
+
use Composer\Autoload\ClassLoader;
|
16 |
+
use Composer\Semver\VersionParser;
|
17 |
+
|
18 |
+
/**
|
19 |
+
* This class is copied in every Composer installed project and available to all
|
20 |
+
*
|
21 |
+
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions
|
22 |
+
*
|
23 |
+
* To require its presence, you can require `composer-runtime-api ^2.0`
|
24 |
+
*
|
25 |
+
* @final
|
26 |
+
*/
|
27 |
+
class InstalledVersions
|
28 |
+
{
|
29 |
+
/**
|
30 |
+
* @var mixed[]|null
|
31 |
+
* @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null
|
32 |
+
*/
|
33 |
+
private static $installed;
|
34 |
+
|
35 |
+
/**
|
36 |
+
* @var bool|null
|
37 |
+
*/
|
38 |
+
private static $canGetVendors;
|
39 |
+
|
40 |
+
/**
|
41 |
+
* @var array[]
|
42 |
+
* @psalm-var array<string, array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
|
43 |
+
*/
|
44 |
+
private static $installedByVendor = array();
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Returns a list of all package names which are present, either by being installed, replaced or provided
|
48 |
+
*
|
49 |
+
* @return string[]
|
50 |
+
* @psalm-return list<string>
|
51 |
+
*/
|
52 |
+
public static function getInstalledPackages()
|
53 |
+
{
|
54 |
+
$packages = array();
|
55 |
+
foreach (self::getInstalled() as $installed) {
|
56 |
+
$packages[] = array_keys($installed['versions']);
|
57 |
+
}
|
58 |
+
|
59 |
+
if (1 === \count($packages)) {
|
60 |
+
return $packages[0];
|
61 |
+
}
|
62 |
+
|
63 |
+
return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
|
64 |
+
}
|
65 |
+
|
66 |
+
/**
|
67 |
+
* Returns a list of all package names with a specific type e.g. 'library'
|
68 |
+
*
|
69 |
+
* @param string $type
|
70 |
+
* @return string[]
|
71 |
+
* @psalm-return list<string>
|
72 |
+
*/
|
73 |
+
public static function getInstalledPackagesByType($type)
|
74 |
+
{
|
75 |
+
$packagesByType = array();
|
76 |
+
|
77 |
+
foreach (self::getInstalled() as $installed) {
|
78 |
+
foreach ($installed['versions'] as $name => $package) {
|
79 |
+
if (isset($package['type']) && $package['type'] === $type) {
|
80 |
+
$packagesByType[] = $name;
|
81 |
+
}
|
82 |
+
}
|
83 |
+
}
|
84 |
+
|
85 |
+
return $packagesByType;
|
86 |
+
}
|
87 |
+
|
88 |
+
/**
|
89 |
+
* Checks whether the given package is installed
|
90 |
+
*
|
91 |
+
* This also returns true if the package name is provided or replaced by another package
|
92 |
+
*
|
93 |
+
* @param string $packageName
|
94 |
+
* @param bool $includeDevRequirements
|
95 |
+
* @return bool
|
96 |
+
*/
|
97 |
+
public static function isInstalled($packageName, $includeDevRequirements = true)
|
98 |
+
{
|
99 |
+
foreach (self::getInstalled() as $installed) {
|
100 |
+
if (isset($installed['versions'][$packageName])) {
|
101 |
+
return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']);
|
102 |
+
}
|
103 |
+
}
|
104 |
+
|
105 |
+
return false;
|
106 |
+
}
|
107 |
+
|
108 |
+
/**
|
109 |
+
* Checks whether the given package satisfies a version constraint
|
110 |
+
*
|
111 |
+
* e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:
|
112 |
+
*
|
113 |
+
* Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')
|
114 |
+
*
|
115 |
+
* @param VersionParser $parser Install composer/semver to have access to this class and functionality
|
116 |
+
* @param string $packageName
|
117 |
+
* @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package
|
118 |
+
* @return bool
|
119 |
+
*/
|
120 |
+
public static function satisfies(VersionParser $parser, $packageName, $constraint)
|
121 |
+
{
|
122 |
+
$constraint = $parser->parseConstraints($constraint);
|
123 |
+
$provided = $parser->parseConstraints(self::getVersionRanges($packageName));
|
124 |
+
|
125 |
+
return $provided->matches($constraint);
|
126 |
+
}
|
127 |
+
|
128 |
+
/**
|
129 |
+
* Returns a version constraint representing all the range(s) which are installed for a given package
|
130 |
+
*
|
131 |
+
* It is easier to use this via isInstalled() with the $constraint argument if you need to check
|
132 |
+
* whether a given version of a package is installed, and not just whether it exists
|
133 |
+
*
|
134 |
+
* @param string $packageName
|
135 |
+
* @return string Version constraint usable with composer/semver
|
136 |
+
*/
|
137 |
+
public static function getVersionRanges($packageName)
|
138 |
+
{
|
139 |
+
foreach (self::getInstalled() as $installed) {
|
140 |
+
if (!isset($installed['versions'][$packageName])) {
|
141 |
+
continue;
|
142 |
+
}
|
143 |
+
|
144 |
+
$ranges = array();
|
145 |
+
if (isset($installed['versions'][$packageName]['pretty_version'])) {
|
146 |
+
$ranges[] = $installed['versions'][$packageName]['pretty_version'];
|
147 |
+
}
|
148 |
+
if (array_key_exists('aliases', $installed['versions'][$packageName])) {
|
149 |
+
$ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
|
150 |
+
}
|
151 |
+
if (array_key_exists('replaced', $installed['versions'][$packageName])) {
|
152 |
+
$ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
|
153 |
+
}
|
154 |
+
if (array_key_exists('provided', $installed['versions'][$packageName])) {
|
155 |
+
$ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
|
156 |
+
}
|
157 |
+
|
158 |
+
return implode(' || ', $ranges);
|
159 |
+
}
|
160 |
+
|
161 |
+
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
162 |
+
}
|
163 |
+
|
164 |
+
/**
|
165 |
+
* @param string $packageName
|
166 |
+
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
|
167 |
+
*/
|
168 |
+
public static function getVersion($packageName)
|
169 |
+
{
|
170 |
+
foreach (self::getInstalled() as $installed) {
|
171 |
+
if (!isset($installed['versions'][$packageName])) {
|
172 |
+
continue;
|
173 |
+
}
|
174 |
+
|
175 |
+
if (!isset($installed['versions'][$packageName]['version'])) {
|
176 |
+
return null;
|
177 |
+
}
|
178 |
+
|
179 |
+
return $installed['versions'][$packageName]['version'];
|
180 |
+
}
|
181 |
+
|
182 |
+
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
183 |
+
}
|
184 |
+
|
185 |
+
/**
|
186 |
+
* @param string $packageName
|
187 |
+
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
|
188 |
+
*/
|
189 |
+
public static function getPrettyVersion($packageName)
|
190 |
+
{
|
191 |
+
foreach (self::getInstalled() as $installed) {
|
192 |
+
if (!isset($installed['versions'][$packageName])) {
|
193 |
+
continue;
|
194 |
+
}
|
195 |
+
|
196 |
+
if (!isset($installed['versions'][$packageName]['pretty_version'])) {
|
197 |
+
return null;
|
198 |
+
}
|
199 |
+
|
200 |
+
return $installed['versions'][$packageName]['pretty_version'];
|
201 |
+
}
|
202 |
+
|
203 |
+
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
204 |
+
}
|
205 |
+
|
206 |
+
/**
|
207 |
+
* @param string $packageName
|
208 |
+
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference
|
209 |
+
*/
|
210 |
+
public static function getReference($packageName)
|
211 |
+
{
|
212 |
+
foreach (self::getInstalled() as $installed) {
|
213 |
+
if (!isset($installed['versions'][$packageName])) {
|
214 |
+
continue;
|
215 |
+
}
|
216 |
+
|
217 |
+
if (!isset($installed['versions'][$packageName]['reference'])) {
|
218 |
+
return null;
|
219 |
+
}
|
220 |
+
|
221 |
+
return $installed['versions'][$packageName]['reference'];
|
222 |
+
}
|
223 |
+
|
224 |
+
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
225 |
+
}
|
226 |
+
|
227 |
+
/**
|
228 |
+
* @param string $packageName
|
229 |
+
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.
|
230 |
+
*/
|
231 |
+
public static function getInstallPath($packageName)
|
232 |
+
{
|
233 |
+
foreach (self::getInstalled() as $installed) {
|
234 |
+
if (!isset($installed['versions'][$packageName])) {
|
235 |
+
continue;
|
236 |
+
}
|
237 |
+
|
238 |
+
return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;
|
239 |
+
}
|
240 |
+
|
241 |
+
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
242 |
+
}
|
243 |
+
|
244 |
+
/**
|
245 |
+
* @return array
|
246 |
+
* @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}
|
247 |
+
*/
|
248 |
+
public static function getRootPackage()
|
249 |
+
{
|
250 |
+
$installed = self::getInstalled();
|
251 |
+
|
252 |
+
return $installed[0]['root'];
|
253 |
+
}
|
254 |
+
|
255 |
+
/**
|
256 |
+
* Returns the raw installed.php data for custom implementations
|
257 |
+
*
|
258 |
+
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
|
259 |
+
* @return array[]
|
260 |
+
* @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}
|
261 |
+
*/
|
262 |
+
public static function getRawData()
|
263 |
+
{
|
264 |
+
@trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);
|
265 |
+
|
266 |
+
if (null === self::$installed) {
|
267 |
+
// only require the installed.php file if this file is loaded from its dumped location,
|
268 |
+
// and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
|
269 |
+
if (substr(__DIR__, -8, 1) !== 'C') {
|
270 |
+
self::$installed = include __DIR__ . '/installed.php';
|
271 |
+
} else {
|
272 |
+
self::$installed = array();
|
273 |
+
}
|
274 |
+
}
|
275 |
+
|
276 |
+
return self::$installed;
|
277 |
+
}
|
278 |
+
|
279 |
+
/**
|
280 |
+
* Returns the raw data of all installed.php which are currently loaded for custom implementations
|
281 |
+
*
|
282 |
+
* @return array[]
|
283 |
+
* @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
|
284 |
+
*/
|
285 |
+
public static function getAllRawData()
|
286 |
+
{
|
287 |
+
return self::getInstalled();
|
288 |
+
}
|
289 |
+
|
290 |
+
/**
|
291 |
+
* Lets you reload the static array from another file
|
292 |
+
*
|
293 |
+
* This is only useful for complex integrations in which a project needs to use
|
294 |
+
* this class but then also needs to execute another project's autoloader in process,
|
295 |
+
* and wants to ensure both projects have access to their version of installed.php.
|
296 |
+
*
|
297 |
+
* A typical case would be PHPUnit, where it would need to make sure it reads all
|
298 |
+
* the data it needs from this class, then call reload() with
|
299 |
+
* `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure
|
300 |
+
* the project in which it runs can then also use this class safely, without
|
301 |
+
* interference between PHPUnit's dependencies and the project's dependencies.
|
302 |
+
*
|
303 |
+
* @param array[] $data A vendor/composer/installed.php data set
|
304 |
+
* @return void
|
305 |
+
*
|
306 |
+
* @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $data
|
307 |
+
*/
|
308 |
+
public static function reload($data)
|
309 |
+
{
|
310 |
+
self::$installed = $data;
|
311 |
+
self::$installedByVendor = array();
|
312 |
+
}
|
313 |
+
|
314 |
+
/**
|
315 |
+
* @return array[]
|
316 |
+
* @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
|
317 |
+
*/
|
318 |
+
private static function getInstalled()
|
319 |
+
{
|
320 |
+
if (null === self::$canGetVendors) {
|
321 |
+
self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
|
322 |
+
}
|
323 |
+
|
324 |
+
$installed = array();
|
325 |
+
|
326 |
+
if (self::$canGetVendors) {
|
327 |
+
foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
|
328 |
+
if (isset(self::$installedByVendor[$vendorDir])) {
|
329 |
+
$installed[] = self::$installedByVendor[$vendorDir];
|
330 |
+
} elseif (is_file($vendorDir.'/composer/installed.php')) {
|
331 |
+
$installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php';
|
332 |
+
if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
|
333 |
+
self::$installed = $installed[count($installed) - 1];
|
334 |
+
}
|
335 |
+
}
|
336 |
+
}
|
337 |
+
}
|
338 |
+
|
339 |
+
if (null === self::$installed) {
|
340 |
+
// only require the installed.php file if this file is loaded from its dumped location,
|
341 |
+
// and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
|
342 |
+
if (substr(__DIR__, -8, 1) !== 'C') {
|
343 |
+
self::$installed = require __DIR__ . '/installed.php';
|
344 |
+
} else {
|
345 |
+
self::$installed = array();
|
346 |
+
}
|
347 |
+
}
|
348 |
+
$installed[] = self::$installed;
|
349 |
+
|
350 |
+
return $installed;
|
351 |
+
}
|
352 |
+
}
|
vendor/composer/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
Copyright (c) Nils Adermann, Jordi Boggiano
|
3 |
+
|
4 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
5 |
+
of this software and associated documentation files (the "Software"), to deal
|
6 |
+
in the Software without restriction, including without limitation the rights
|
7 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
8 |
+
copies of the Software, and to permit persons to whom the Software is furnished
|
9 |
+
to do so, subject to the following conditions:
|
10 |
+
|
11 |
+
The above copyright notice and this permission notice shall be included in all
|
12 |
+
copies or substantial portions of the Software.
|
13 |
+
|
14 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
15 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
16 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
17 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
18 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
19 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
20 |
+
THE SOFTWARE.
|
21 |
+
|
vendor/composer/autoload_classmap.php
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// autoload_classmap.php @generated by Composer
|
4 |
+
|
5 |
+
$vendorDir = dirname(__DIR__);
|
6 |
+
$baseDir = dirname($vendorDir);
|
7 |
+
|
8 |
+
return array(
|
9 |
+
'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
|
10 |
+
);
|
vendor/composer/autoload_namespaces.php
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// autoload_namespaces.php @generated by Composer
|
4 |
+
|
5 |
+
$vendorDir = dirname(__DIR__);
|
6 |
+
$baseDir = dirname($vendorDir);
|
7 |
+
|
8 |
+
return array(
|
9 |
+
);
|
vendor/composer/autoload_psr4.php
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// autoload_psr4.php @generated by Composer
|
4 |
+
|
5 |
+
$vendorDir = dirname(__DIR__);
|
6 |
+
$baseDir = dirname($vendorDir);
|
7 |
+
|
8 |
+
return array(
|
9 |
+
'MetaBox\\' => array($baseDir . '/src'),
|
10 |
+
);
|
vendor/composer/autoload_real.php
ADDED
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// autoload_real.php @generated by Composer
|
4 |
+
|
5 |
+
class ComposerAutoloaderInit5fa278c5276588f761367822a3d405ce
|
6 |
+
{
|
7 |
+
private static $loader;
|
8 |
+
|
9 |
+
public static function loadClassLoader($class)
|
10 |
+
{
|
11 |
+
if ('Composer\Autoload\ClassLoader' === $class) {
|
12 |
+
require __DIR__ . '/ClassLoader.php';
|
13 |
+
}
|
14 |
+
}
|
15 |
+
|
16 |
+
/**
|
17 |
+
* @return \Composer\Autoload\ClassLoader
|
18 |
+
*/
|
19 |
+
public static function getLoader()
|
20 |
+
{
|
21 |
+
if (null !== self::$loader) {
|
22 |
+
return self::$loader;
|
23 |
+
}
|
24 |
+
|
25 |
+
spl_autoload_register(array('ComposerAutoloaderInit5fa278c5276588f761367822a3d405ce', 'loadClassLoader'), true, true);
|
26 |
+
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
|
27 |
+
spl_autoload_unregister(array('ComposerAutoloaderInit5fa278c5276588f761367822a3d405ce', 'loadClassLoader'));
|
28 |
+
|
29 |
+
require __DIR__ . '/autoload_static.php';
|
30 |
+
call_user_func(\Composer\Autoload\ComposerStaticInit5fa278c5276588f761367822a3d405ce::getInitializer($loader));
|
31 |
+
|
32 |
+
$loader->register(true);
|
33 |
+
|
34 |
+
return $loader;
|
35 |
+
}
|
36 |
+
}
|
vendor/composer/autoload_static.php
ADDED
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// autoload_static.php @generated by Composer
|
4 |
+
|
5 |
+
namespace Composer\Autoload;
|
6 |
+
|
7 |
+
class ComposerStaticInit5fa278c5276588f761367822a3d405ce
|
8 |
+
{
|
9 |
+
public static $prefixLengthsPsr4 = array (
|
10 |
+
'M' =>
|
11 |
+
array (
|
12 |
+
'MetaBox\\' => 8,
|
13 |
+
),
|
14 |
+
);
|
15 |
+
|
16 |
+
public static $prefixDirsPsr4 = array (
|
17 |
+
'MetaBox\\' =>
|
18 |
+
array (
|
19 |
+
0 => __DIR__ . '/../..' . '/src',
|
20 |
+
),
|
21 |
+
);
|
22 |
+
|
23 |
+
public static $classMap = array (
|
24 |
+
'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
|
25 |
+
);
|
26 |
+
|
27 |
+
public static function getInitializer(ClassLoader $loader)
|
28 |
+
{
|
29 |
+
return \Closure::bind(function () use ($loader) {
|
30 |
+
$loader->prefixLengthsPsr4 = ComposerStaticInit5fa278c5276588f761367822a3d405ce::$prefixLengthsPsr4;
|
31 |
+
$loader->prefixDirsPsr4 = ComposerStaticInit5fa278c5276588f761367822a3d405ce::$prefixDirsPsr4;
|
32 |
+
$loader->classMap = ComposerStaticInit5fa278c5276588f761367822a3d405ce::$classMap;
|
33 |
+
|
34 |
+
}, null, ClassLoader::class);
|
35 |
+
}
|
36 |
+
}
|
vendor/composer/installed.json
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"packages": [],
|
3 |
+
"dev": true,
|
4 |
+
"dev-package-names": []
|
5 |
+
}
|
vendor/composer/installed.php
ADDED
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php return array(
|
2 |
+
'root' => array(
|
3 |
+
'name' => 'wpmetabox/meta-box',
|
4 |
+
'pretty_version' => '5.6.14',
|
5 |
+
'version' => '5.6.14.0',
|
6 |
+
'reference' => '53851069a24cbacfc90bccfd8e93be1bd98bb0b5',
|
7 |
+
'type' => 'wordpress-plugin',
|
8 |
+
'install_path' => __DIR__ . '/../../',
|
9 |
+
'aliases' => array(),
|
10 |
+
'dev' => true,
|
11 |
+
),
|
12 |
+
'versions' => array(
|
13 |
+
'wpmetabox/meta-box' => array(
|
14 |
+
'pretty_version' => '5.6.14',
|
15 |
+
'version' => '5.6.14.0',
|
16 |
+
'reference' => '53851069a24cbacfc90bccfd8e93be1bd98bb0b5',
|
17 |
+
'type' => 'wordpress-plugin',
|
18 |
+
'install_path' => __DIR__ . '/../../',
|
19 |
+
'aliases' => array(),
|
20 |
+
'dev_requirement' => false,
|
21 |
+
),
|
22 |
+
),
|
23 |
+
);
|