Meta Box - Version 5.6.14

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 Icon 128x128 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 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
- -webkit-border-radius: 0;
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
- .ui-datepicker thead {
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
- /* timepicker button */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
- /* Other Datepicker Color Schemes */
129
- /* Blue */
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
- /* Light */
214
- .admin-color-light .ui-datepicker .ui-datepicker-header,
215
- .admin-color-light .ui-timepicker-div .ui-widget-header,
216
- .admin-color-light .ui-datepicker .ui-datepicker-header .ui-state-hover,
217
- .admin-color-light .ui-datepicker thead {
218
- background: #e5e5e5;
 
 
219
  }
220
- .admin-color-light .ui-datepicker td {
221
- background: #fff;
 
 
 
 
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+kKfR4AAAHcRJREFUeNrsXWuM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');
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.12.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:Alpha(Opacity=0); /* support: IE8 */
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.12.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.12.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: default;
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.12.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: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
- filter:Alpha(Opacity=35); /* support: IE8 */
183
  background-image: none;
184
  }
185
  .ui-state-disabled .ui-icon {
186
- filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
187
  }
188
 
189
  /* Icons
@@ -224,7 +224,10 @@ a.ui-button:active,
224
  }
225
 
226
  /* positioning */
227
- .ui-icon-blank { background-position: 16px 16px; }
 
 
 
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: Alpha(Opacity=30)/*{opacityFilterOverlay}*/; /* support: IE8 */
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 = RWMB_Helpers_Array::ensure( $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( 'RWMB_Helpers_Array::ensure', $meta ) : [ $meta ];
189
  }
190
  } elseif ( $field['multiple'] ) {
191
- $meta = RWMB_Helpers_Array::ensure( $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.12.1/themes/base
49
  $url = RWMB_CSS_URL . 'jqueryui';
50
- wp_register_style( 'jquery-ui-core', "$url/core.css", [], '1.12.1' );
51
- wp_register_style( 'jquery-ui-theme', "$url/theme.css", [], '1.12.1' );
52
- wp_register_style( 'jquery-ui-datepicker', "$url/datepicker.css", [ 'jquery-ui-core', 'jquery-ui-theme' ], '1.12.1' );
53
- wp_register_style( 'jquery-ui-slider', "$url/slider.css", [ 'jquery-ui-core', 'jquery-ui-theme' ], '1.12.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 RWMB_Helpers_Array::map( $meta, __CLASS__ . '::from_timestamp', $field );
167
  }
168
 
169
  if ( $field['save_format'] && $meta ) {
170
- return RWMB_Helpers_Array::map( $meta, __CLASS__ . '::from_save_format', $field );
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' => empty( $field['format'] ) ? 'yy-mm-dd' : $field['format'],
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 = RWMB_Helpers_Array::flatten( (array) $meta );
19
- $meta = array_unique( array_filter( array_map( 'absint', $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 protected static function query( $meta, array $field ) : array;
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
- protected 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
  // 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
- protected static function query( $meta, array $field ) : array {
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.12.1' );
9
- wp_register_style( 'jquery-ui-theme', "$url/theme.css", [], '1.12.1' );
10
- wp_register_style( 'jquery-ui-slider', "$url/slider.css", [ 'jquery-ui-core', 'jquery-ui-theme' ], '1.12.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 = $field['clone'] ? array_map( 'wp_parse_id_list', $meta ) : wp_parse_id_list( $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
- protected 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
  // 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 = array_unique( array_map( 'intval', array_filter( $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
- protected 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
  // 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
- * Array helper functions.
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.13' );
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 RWMB_Update_Option();
98
- $update_checker = new RWMB_Update_Checker( $update_option );
99
  $update_checker->init();
100
- $update_settings = new RWMB_Update_Settings( $update_checker, $update_option );
101
  $update_settings->init();
102
- $update_notification = new RWMB_Update_Notification( $update_checker, $update_option );
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
- RWMB_Helpers_Array::change_key( $meta_box, 'pages', 'post_types' );
290
 
291
  // Make sure the post type is an array and is sanitized.
292
- $meta_box['post_types'] = array_map( 'sanitize_key', RWMB_Helpers_Array::from_csv( $meta_box['post_types'] ) );
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() : bool {
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
- RWMB_Helpers_Array::change_key( $atts, 'post_id', 'object_id' );
15
- RWMB_Helpers_Array::change_key( $atts, 'meta_key', 'id' );
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
- $( e.target ).find( '.rwmb-date' ).each( transform );
 
 
 
 
 
 
 
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
- $( e.target ).find( '.rwmb-datetime' ).each( transform );
 
 
 
 
 
 
 
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 = function 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.13
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.13
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
- class RWMB_Update_Checker {
 
 
 
 
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 RWMB_Update_Notification {
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 RWMB_Update_Option {
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
- class RWMB_Update_Settings {
 
 
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
+ );