MailChimp for WordPress - Version 4.8.7

Version Description

Download this release

Release Info

Developer DvanKooten
Plugin Icon 128x128 MailChimp for WordPress
Version 4.8.7
Comparing to
See all releases

Code changes from version 4.8.6 to 4.8.7

CHANGELOG.md CHANGED
@@ -1,6 +1,18 @@
1
  Changelog
2
  =========
3
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  #### 4.8.6 - Jun 24, 2021
5
 
6
  - Add nonce field to button for dismissing notice asking for plugin review.
1
  Changelog
2
  =========
3
 
4
+ #### 4.8.7 - Mar 2, 2022
5
+
6
+ - Fix PHP 8.1 deprecation warnings in `MC4WP_Container` class.
7
+ - Fix name of action hook that fires before Mailchimp settings rows are displayed on the settings page. Thanks [LoonSongSoftware](https://github.com/LoonSongSoftware).
8
+ - Improve WPML compatibility. Thanks [Sumit Singh](https://github.com/5um17).
9
+ - Fix deprecated function for AMP integration.
10
+ - Only allow unfiltered HTML if user has `unfiltered_html` capability. Please read the below.
11
+
12
+ Despite extensive testing, we may have missed some more obscure HTML elements or attributes from our whitelist.
13
+ If you notice that some of your form HTML is stripped after saving your form, please get in touch with our support team and provide the HTML you attempted to save.
14
+
15
+
16
  #### 4.8.6 - Jun 24, 2021
17
 
18
  - Add nonce field to button for dismissing notice asking for plugin review.
includes/class-container.php CHANGED
@@ -68,6 +68,7 @@ class MC4WP_Container implements ArrayAccess {
68
  * <p>
69
  * The return value will be casted to boolean if non-boolean was returned.
70
  */
 
71
  public function offsetExists( $offset ) {
72
  return $this->has( $offset );
73
  }
@@ -83,6 +84,7 @@ class MC4WP_Container implements ArrayAccess {
83
  *
84
  * @return mixed Can return all value types.
85
  */
 
86
  public function offsetGet( $offset ) {
87
  return $this->get( $offset );
88
  }
@@ -101,6 +103,7 @@ class MC4WP_Container implements ArrayAccess {
101
  *
102
  * @return void
103
  */
 
104
  public function offsetSet( $offset, $value ) {
105
  $this->services[ $offset ] = $value;
106
  }
@@ -116,6 +119,7 @@ class MC4WP_Container implements ArrayAccess {
116
  *
117
  * @return void
118
  */
 
119
  public function offsetUnset( $offset ) {
120
  unset( $this->services[ $offset ] );
121
  }
68
  * <p>
69
  * The return value will be casted to boolean if non-boolean was returned.
70
  */
71
+ #[\ReturnTypeWillChange]
72
  public function offsetExists( $offset ) {
73
  return $this->has( $offset );
74
  }
84
  *
85
  * @return mixed Can return all value types.
86
  */
87
+ #[\ReturnTypeWillChange]
88
  public function offsetGet( $offset ) {
89
  return $this->get( $offset );
90
  }
103
  *
104
  * @return void
105
  */
106
+ #[\ReturnTypeWillChange]
107
  public function offsetSet( $offset, $value ) {
108
  $this->services[ $offset ] = $value;
109
  }
119
  *
120
  * @return void
121
  */
122
+ #[\ReturnTypeWillChange]
123
  public function offsetUnset( $offset ) {
124
  unset( $this->services[ $offset ] );
125
  }
includes/forms/class-admin.php CHANGED
@@ -220,7 +220,7 @@ class MC4WP_Forms_Admin {
220
  * @param array $data
221
  * @return array
222
  */
223
- public function sanitize_form_data( $data ) {
224
  $raw_data = $data;
225
 
226
  // strip <form> tags from content
@@ -244,6 +244,94 @@ class MC4WP_Forms_Admin {
244
 
245
  $data['settings']['lists'] = array_filter( (array) $data['settings']['lists'] );
246
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
247
  /**
248
  * Filters the form data just before it is saved.
249
  *
220
  * @param array $data
221
  * @return array
222
  */
223
+ public function sanitize_form_data( array $data ) {
224
  $raw_data = $data;
225
 
226
  // strip <form> tags from content
244
 
245
  $data['settings']['lists'] = array_filter( (array) $data['settings']['lists'] );
246
 
247
+ // if current user can not post unfiltered HTML, run HTML through whitelist using wp_kses
248
+ if ( ! current_user_can( 'unfiltered_html' ) ) {
249
+ $always_allowed_attr = array_fill_keys(
250
+ array(
251
+ 'aria-describedby',
252
+ 'aria-details',
253
+ 'aria-label',
254
+ 'aria-labelledby',
255
+ 'aria-hidden',
256
+ 'class',
257
+ 'id',
258
+ 'style',
259
+ 'title',
260
+ 'role',
261
+ 'data-*',
262
+ 'tabindex',
263
+ ),
264
+ true
265
+ );
266
+ $input_allowed_attr = array_merge(
267
+ $always_allowed_attr,
268
+ array_fill_keys(
269
+ array(
270
+ 'type',
271
+ 'required',
272
+ 'placeholder',
273
+ 'value',
274
+ 'name',
275
+ 'step',
276
+ 'min',
277
+ 'max',
278
+ 'checked',
279
+ 'width',
280
+ 'autocomplete',
281
+ 'autofocus',
282
+ 'minlength',
283
+ 'maxlength',
284
+ 'size',
285
+ 'pattern',
286
+ 'disabled',
287
+ 'readonly',
288
+ ),
289
+ true
290
+ )
291
+ );
292
+
293
+ $allowed = array(
294
+ 'p' => $always_allowed_attr,
295
+ 'label' => array_merge( $always_allowed_attr, array( 'for' => true ) ),
296
+ 'input' => $input_allowed_attr,
297
+ 'button' => $input_allowed_attr,
298
+ 'fieldset' => $always_allowed_attr,
299
+ 'legend' => $always_allowed_attr,
300
+ 'ul' => $always_allowed_attr,
301
+ 'ol' => $always_allowed_attr,
302
+ 'li' => $always_allowed_attr,
303
+ 'select' => array_merge( $input_allowed_attr, array( 'multiple' => true ) ),
304
+ 'option' => array_merge( $input_allowed_attr, array( 'selected' => true ) ),
305
+ 'optgroup' => array(
306
+ 'disabled' => true,
307
+ 'label' => true,
308
+ ),
309
+ 'textarea' => array_merge(
310
+ $input_allowed_attr,
311
+ array(
312
+ 'rows' => true,
313
+ 'cols' => true,
314
+ )
315
+ ),
316
+ 'div' => $always_allowed_attr,
317
+ 'strong' => $always_allowed_attr,
318
+ 'em' => $always_allowed_attr,
319
+ 'span' => $always_allowed_attr,
320
+ 'a' => array_merge( $always_allowed_attr, array( 'href' => true ) ),
321
+ 'img' => array_merge(
322
+ $always_allowed_attr,
323
+ array(
324
+ 'src' => true,
325
+ 'alt' => '',
326
+ )
327
+ ),
328
+ );
329
+ $data['content'] = wp_kses( $data['content'], $allowed );
330
+ foreach ( $data['messages'] as $key => $message ) {
331
+ $data['messages'][ $key ] = wp_kses( $data['messages'][ $key ], $allowed );
332
+ }
333
+ }
334
+
335
  /**
336
  * Filters the form data just before it is saved.
337
  *
includes/forms/class-form-amp.php CHANGED
@@ -22,7 +22,7 @@ class MC4WP_Form_AMP {
22
  * @return string Modified $content.
23
  */
24
  public function add_response_templates( $content, $form ) {
25
- if ( ! function_exists( 'is_amp_endpoint' ) || ! is_amp_endpoint() ) {
26
  return $content;
27
  }
28
 
@@ -65,7 +65,7 @@ class MC4WP_Form_AMP {
65
  * @return array Modified $attributes.
66
  */
67
  public function add_amp_request( $attributes ) {
68
- if ( function_exists( 'is_amp_endpoint' ) && is_amp_endpoint() ) {
69
  $attributes['action-xhr'] = get_rest_url( null, 'mc4wp/v1/form' );
70
  }
71
 
@@ -79,7 +79,7 @@ class MC4WP_Form_AMP {
79
  * @return bool Modified $load_scripts.
80
  */
81
  public function suppress_scripts( $load_scripts ) {
82
- if ( function_exists( 'is_amp_endpoint' ) && is_amp_endpoint() ) {
83
  return false;
84
  }
85
 
22
  * @return string Modified $content.
23
  */
24
  public function add_response_templates( $content, $form ) {
25
+ if ( ! function_exists( 'amp_is_request' ) || ! amp_is_request() ) {
26
  return $content;
27
  }
28
 
65
  * @return array Modified $attributes.
66
  */
67
  public function add_amp_request( $attributes ) {
68
+ if ( function_exists( 'amp_is_request' ) && amp_is_request() ) {
69
  $attributes['action-xhr'] = get_rest_url( null, 'mc4wp/v1/form' );
70
  }
71
 
79
  * @return bool Modified $load_scripts.
80
  */
81
  public function suppress_scripts( $load_scripts ) {
82
+ if ( function_exists( 'amp_is_request' ) && amp_is_request() ) {
83
  return false;
84
  }
85
 
includes/forms/views/tabs/form-settings.php CHANGED
@@ -8,7 +8,7 @@
8
 
9
  <?php
10
  /** @ignore */
11
- do_action( 'mc4wp_admin_form_after_mailchimp_settings_rows', $opts, $form );
12
  ?>
13
 
14
  <tr valign="top">
8
 
9
  <?php
10
  /** @ignore */
11
+ do_action( 'mc4wp_admin_form_before_mailchimp_settings_rows', $opts, $form );
12
  ?>
13
 
14
  <tr valign="top">
languages/mailchimp-for-wp.pot CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2021 mailchimp-for-wp
2
  # This file is distributed under the same license as the mailchimp-for-wp package.
3
  msgid ""
4
  msgstr ""
@@ -405,23 +405,23 @@ msgstr ""
405
  msgid "Form"
406
  msgstr ""
407
 
408
- #: includes/forms/class-admin.php:161, includes/forms/class-admin.php:280
409
  msgid "Form saved."
410
  msgstr ""
411
 
412
- #: includes/forms/class-admin.php:389
413
  msgid "Form not found."
414
  msgstr ""
415
 
416
- #: includes/forms/class-admin.php:391
417
  msgid "Go back"
418
  msgstr ""
419
 
420
- #: includes/forms/class-admin.php:454, includes/forms/class-widget.php:31
421
  msgid "Mailchimp Sign-Up Form"
422
  msgstr ""
423
 
424
- #: includes/forms/class-admin.php:458
425
  msgid "Select the form to show"
426
  msgstr ""
427
 
1
+ # Copyright (C) 2022 mailchimp-for-wp
2
  # This file is distributed under the same license as the mailchimp-for-wp package.
3
  msgid ""
4
  msgstr ""
405
  msgid "Form"
406
  msgstr ""
407
 
408
+ #: includes/forms/class-admin.php:161, includes/forms/class-admin.php:368
409
  msgid "Form saved."
410
  msgstr ""
411
 
412
+ #: includes/forms/class-admin.php:477
413
  msgid "Form not found."
414
  msgstr ""
415
 
416
+ #: includes/forms/class-admin.php:479
417
  msgid "Go back"
418
  msgstr ""
419
 
420
+ #: includes/forms/class-admin.php:542, includes/forms/class-widget.php:31
421
  msgid "Mailchimp Sign-Up Form"
422
  msgstr ""
423
 
424
+ #: includes/forms/class-admin.php:546
425
  msgid "Select the form to show"
426
  msgstr ""
427
 
mailchimp-for-wp.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: MC4WP: Mailchimp for WordPress
4
  Plugin URI: https://www.mc4wp.com/#utm_source=wp-plugin&utm_medium=mailchimp-for-wp&utm_campaign=plugins-page
5
  Description: Mailchimp for WordPress by ibericode. Adds various highly effective sign-up methods to your site.
6
- Version: 4.8.6
7
  Author: ibericode
8
  Author URI: https://ibericode.com/
9
  Text Domain: mailchimp-for-wp
@@ -45,7 +45,7 @@ function _mc4wp_load_plugin() {
45
  }
46
 
47
  // bootstrap the core plugin
48
- define( 'MC4WP_VERSION', '4.8.6' );
49
  define( 'MC4WP_PLUGIN_DIR', __DIR__ );
50
  define( 'MC4WP_PLUGIN_FILE', __FILE__ );
51
 
3
  Plugin Name: MC4WP: Mailchimp for WordPress
4
  Plugin URI: https://www.mc4wp.com/#utm_source=wp-plugin&utm_medium=mailchimp-for-wp&utm_campaign=plugins-page
5
  Description: Mailchimp for WordPress by ibericode. Adds various highly effective sign-up methods to your site.
6
+ Version: 4.8.7
7
  Author: ibericode
8
  Author URI: https://ibericode.com/
9
  Text Domain: mailchimp-for-wp
45
  }
46
 
47
  // bootstrap the core plugin
48
+ define( 'MC4WP_VERSION', '4.8.7' );
49
  define( 'MC4WP_PLUGIN_DIR', __DIR__ );
50
  define( 'MC4WP_PLUGIN_FILE', __FILE__ );
51
 
readme.txt CHANGED
@@ -3,8 +3,8 @@ Contributors: Ibericode, DvanKooten, hchouhan, lapzor
3
  Donate link: https://www.mc4wp.com/#utm_source=wp-plugin-repo&utm_medium=mailchimp-for-wp&utm_campaign=donate-link
4
  Tags: mailchimp, mc4wp, email, marketing, newsletter, subscribe, widget, mc4wp, contact form 7, woocommerce, buddypress, ibericode, mailchimp form
5
  Requires at least: 4.6
6
- Tested up to: 5.8
7
- Stable tag: 4.8.6
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
  Requires PHP: 5.3
@@ -197,6 +197,18 @@ The plugin provides various filter & action hooks that allow you to modify or ex
197
  == Changelog ==
198
 
199
 
 
 
 
 
 
 
 
 
 
 
 
 
200
  #### 4.8.6 - Jun 24, 2021
201
 
202
  - Add nonce field to button for dismissing notice asking for plugin review.
3
  Donate link: https://www.mc4wp.com/#utm_source=wp-plugin-repo&utm_medium=mailchimp-for-wp&utm_campaign=donate-link
4
  Tags: mailchimp, mc4wp, email, marketing, newsletter, subscribe, widget, mc4wp, contact form 7, woocommerce, buddypress, ibericode, mailchimp form
5
  Requires at least: 4.6
6
+ Tested up to: 6.0
7
+ Stable tag: 4.8.7
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
  Requires PHP: 5.3
197
  == Changelog ==
198
 
199
 
200
+ #### 4.8.7 - Mar 2, 2022
201
+
202
+ - Fix PHP 8.1 deprecation warnings in `MC4WP_Container` class.
203
+ - Fix name of action hook that fires before Mailchimp settings rows are displayed on the settings page. Thanks [LoonSongSoftware](https://github.com/LoonSongSoftware).
204
+ - Improve WPML compatibility. Thanks [Sumit Singh](https://github.com/5um17).
205
+ - Fix deprecated function for AMP integration.
206
+ - Only allow unfiltered HTML if user has `unfiltered_html` capability. Please read the below.
207
+
208
+ Despite extensive testing, we may have missed some more obscure HTML elements or attributes from our whitelist.
209
+ If you notice that some of your form HTML is stripped after saving your form, please get in touch with our support team and provide the HTML you attempted to save.
210
+
211
+
212
  #### 4.8.6 - Jun 24, 2021
213
 
214
  - Add nonce field to button for dismissing notice asking for plugin review.
vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
- return ComposerAutoloaderInit7d7fbc3e69cedef6a7cf1727ea8778eb::getLoader();
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInit2932d1ab0d50021582953f784790b57f::getLoader();
vendor/composer/ClassLoader.php CHANGED
@@ -42,21 +42,75 @@ namespace Composer\Autoload;
42
  */
43
  class ClassLoader
44
  {
 
 
 
45
  // PSR-4
 
 
 
 
46
  private $prefixLengthsPsr4 = array();
 
 
 
 
47
  private $prefixDirsPsr4 = array();
 
 
 
 
48
  private $fallbackDirsPsr4 = array();
49
 
50
  // PSR-0
 
 
 
 
51
  private $prefixesPsr0 = array();
 
 
 
 
52
  private $fallbackDirsPsr0 = array();
53
 
 
54
  private $useIncludePath = false;
 
 
 
 
 
55
  private $classMap = array();
 
 
56
  private $classMapAuthoritative = false;
 
 
 
 
 
57
  private $missingClasses = array();
 
 
58
  private $apcuPrefix;
59
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
  public function getPrefixes()
61
  {
62
  if (!empty($this->prefixesPsr0)) {
@@ -66,28 +120,47 @@ class ClassLoader
66
  return array();
67
  }
68
 
 
 
 
 
69
  public function getPrefixesPsr4()
70
  {
71
  return $this->prefixDirsPsr4;
72
  }
73
 
 
 
 
 
74
  public function getFallbackDirs()
75
  {
76
  return $this->fallbackDirsPsr0;
77
  }
78
 
 
 
 
 
79
  public function getFallbackDirsPsr4()
80
  {
81
  return $this->fallbackDirsPsr4;
82
  }
83
 
 
 
 
 
84
  public function getClassMap()
85
  {
86
  return $this->classMap;
87
  }
88
 
89
  /**
90
- * @param array $classMap Class to filename map
 
 
 
91
  */
92
  public function addClassMap(array $classMap)
93
  {
@@ -102,9 +175,11 @@ class ClassLoader
102
  * Registers a set of PSR-0 directories for a given prefix, either
103
  * appending or prepending to the ones previously set for this prefix.
104
  *
105
- * @param string $prefix The prefix
106
- * @param array|string $paths The PSR-0 root directories
107
- * @param bool $prepend Whether to prepend the directories
 
 
108
  */
109
  public function add($prefix, $paths, $prepend = false)
110
  {
@@ -147,11 +222,13 @@ class ClassLoader
147
  * Registers a set of PSR-4 directories for a given namespace, either
148
  * appending or prepending to the ones previously set for this namespace.
149
  *
150
- * @param string $prefix The prefix/namespace, with trailing '\\'
151
- * @param array|string $paths The PSR-4 base directories
152
- * @param bool $prepend Whether to prepend the directories
153
  *
154
  * @throws \InvalidArgumentException
 
 
155
  */
156
  public function addPsr4($prefix, $paths, $prepend = false)
157
  {
@@ -195,8 +272,10 @@ class ClassLoader
195
  * Registers a set of PSR-0 directories for a given prefix,
196
  * replacing any others previously set for this prefix.
197
  *
198
- * @param string $prefix The prefix
199
- * @param array|string $paths The PSR-0 base directories
 
 
200
  */
201
  public function set($prefix, $paths)
202
  {
@@ -211,10 +290,12 @@ class ClassLoader
211
  * Registers a set of PSR-4 directories for a given namespace,
212
  * replacing any others previously set for this namespace.
213
  *
214
- * @param string $prefix The prefix/namespace, with trailing '\\'
215
- * @param array|string $paths The PSR-4 base directories
216
  *
217
  * @throws \InvalidArgumentException
 
 
218
  */
219
  public function setPsr4($prefix, $paths)
220
  {
@@ -234,6 +315,8 @@ class ClassLoader
234
  * Turns on searching the include path for class files.
235
  *
236
  * @param bool $useIncludePath
 
 
237
  */
238
  public function setUseIncludePath($useIncludePath)
239
  {
@@ -256,6 +339,8 @@ class ClassLoader
256
  * that have not been registered with the class map.
257
  *
258
  * @param bool $classMapAuthoritative
 
 
259
  */
260
  public function setClassMapAuthoritative($classMapAuthoritative)
261
  {
@@ -276,6 +361,8 @@ class ClassLoader
276
  * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
277
  *
278
  * @param string|null $apcuPrefix
 
 
279
  */
280
  public function setApcuPrefix($apcuPrefix)
281
  {
@@ -296,25 +383,44 @@ class ClassLoader
296
  * Registers this instance as an autoloader.
297
  *
298
  * @param bool $prepend Whether to prepend the autoloader or not
 
 
299
  */
300
  public function register($prepend = false)
301
  {
302
  spl_autoload_register(array($this, 'loadClass'), true, $prepend);
 
 
 
 
 
 
 
 
 
 
 
303
  }
304
 
305
  /**
306
  * Unregisters this instance as an autoloader.
 
 
307
  */
308
  public function unregister()
309
  {
310
  spl_autoload_unregister(array($this, 'loadClass'));
 
 
 
 
311
  }
312
 
313
  /**
314
  * Loads the given class or interface.
315
  *
316
  * @param string $class The name of the class
317
- * @return bool|null True if loaded, null otherwise
318
  */
319
  public function loadClass($class)
320
  {
@@ -323,6 +429,8 @@ class ClassLoader
323
 
324
  return true;
325
  }
 
 
326
  }
327
 
328
  /**
@@ -367,6 +475,21 @@ class ClassLoader
367
  return $file;
368
  }
369
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
370
  private function findFileWithExtension($class, $ext)
371
  {
372
  // PSR-4 lookup
@@ -438,6 +561,10 @@ class ClassLoader
438
  * Scope isolated include.
439
  *
440
  * Prevents access to $this/self from included files.
 
 
 
 
441
  */
442
  function includeFile($file)
443
  {
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)) {
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
  {
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
  {
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
  {
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
  {
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
  {
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
  {
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
  {
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
  {
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
  {
429
 
430
  return true;
431
  }
432
+
433
+ return null;
434
  }
435
 
436
  /**
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
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
  {
vendor/composer/InstalledVersions.php CHANGED
@@ -1,219 +1,350 @@
1
  <?php
2
 
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
 
13
  namespace Composer;
14
 
 
15
  use Composer\Semver\VersionParser;
16
 
17
-
18
-
19
-
20
-
21
-
 
 
22
  class InstalledVersions
23
  {
24
- private static $installed = array (
25
- 'root' =>
26
- array (
27
- 'pretty_version' => 'dev-master',
28
- 'version' => 'dev-master',
29
- 'aliases' =>
30
- array (
31
- ),
32
- 'reference' => '1324b22452155c771a4d1215704ef4c098772b0b',
33
- 'name' => 'ibericode/mailchimp-for-wordpress',
34
- ),
35
- 'versions' =>
36
- array (
37
- 'ibericode/mailchimp-for-wordpress' =>
38
- array (
39
- 'pretty_version' => 'dev-master',
40
- 'version' => 'dev-master',
41
- 'aliases' =>
42
- array (
43
- ),
44
- 'reference' => '1324b22452155c771a4d1215704ef4c098772b0b',
45
- ),
46
- ),
47
- );
48
-
49
-
50
-
51
-
52
-
53
-
54
-
55
- public static function getInstalledPackages()
56
- {
57
- return array_keys(self::$installed['versions']);
58
- }
59
-
60
-
61
-
62
-
63
-
64
-
65
-
66
-
67
-
68
- public static function isInstalled($packageName)
69
- {
70
- return isset(self::$installed['versions'][$packageName]);
71
- }
72
-
73
-
74
-
75
-
76
-
77
-
78
-
79
-
80
-
81
-
82
-
83
-
84
-
85
-
86
- public static function satisfies(VersionParser $parser, $packageName, $constraint)
87
- {
88
- $constraint = $parser->parseConstraints($constraint);
89
- $provided = $parser->parseConstraints(self::getVersionRanges($packageName));
90
-
91
- return $provided->matches($constraint);
92
- }
93
-
94
-
95
-
96
-
97
-
98
-
99
-
100
-
101
-
102
-
103
- public static function getVersionRanges($packageName)
104
- {
105
- if (!isset(self::$installed['versions'][$packageName])) {
106
- throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
107
- }
108
-
109
- $ranges = array();
110
- if (isset(self::$installed['versions'][$packageName]['pretty_version'])) {
111
- $ranges[] = self::$installed['versions'][$packageName]['pretty_version'];
112
- }
113
- if (array_key_exists('aliases', self::$installed['versions'][$packageName])) {
114
- $ranges = array_merge($ranges, self::$installed['versions'][$packageName]['aliases']);
115
- }
116
- if (array_key_exists('replaced', self::$installed['versions'][$packageName])) {
117
- $ranges = array_merge($ranges, self::$installed['versions'][$packageName]['replaced']);
118
- }
119
- if (array_key_exists('provided', self::$installed['versions'][$packageName])) {
120
- $ranges = array_merge($ranges, self::$installed['versions'][$packageName]['provided']);
121
- }
122
-
123
- return implode(' || ', $ranges);
124
- }
125
-
126
-
127
-
128
-
129
-
130
- public static function getVersion($packageName)
131
- {
132
- if (!isset(self::$installed['versions'][$packageName])) {
133
- throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
134
- }
135
-
136
- if (!isset(self::$installed['versions'][$packageName]['version'])) {
137
- return null;
138
- }
139
-
140
- return self::$installed['versions'][$packageName]['version'];
141
- }
142
-
143
-
144
-
145
-
146
-
147
- public static function getPrettyVersion($packageName)
148
- {
149
- if (!isset(self::$installed['versions'][$packageName])) {
150
- throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
151
- }
152
-
153
- if (!isset(self::$installed['versions'][$packageName]['pretty_version'])) {
154
- return null;
155
- }
156
-
157
- return self::$installed['versions'][$packageName]['pretty_version'];
158
- }
159
-
160
-
161
-
162
-
163
-
164
- public static function getReference($packageName)
165
- {
166
- if (!isset(self::$installed['versions'][$packageName])) {
167
- throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
168
- }
169
-
170
- if (!isset(self::$installed['versions'][$packageName]['reference'])) {
171
- return null;
172
- }
173
-
174
- return self::$installed['versions'][$packageName]['reference'];
175
- }
176
-
177
-
178
-
179
-
180
-
181
- public static function getRootPackage()
182
- {
183
- return self::$installed['root'];
184
- }
185
-
186
-
187
-
188
-
189
-
190
-
191
-
192
- public static function getRawData()
193
- {
194
- return self::$installed;
195
- }
196
-
197
-
198
-
199
-
200
-
201
-
202
-
203
-
204
-
205
-
206
-
207
-
208
-
209
-
210
-
211
-
212
-
213
-
214
-
215
- public static function reload($data)
216
- {
217
- self::$installed = $data;
218
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
219
  }
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
  class InstalledVersions
26
  {
27
+ /**
28
+ * @var mixed[]|null
29
+ * @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}|array{}|null
30
+ */
31
+ private static $installed;
32
+
33
+ /**
34
+ * @var bool|null
35
+ */
36
+ private static $canGetVendors;
37
+
38
+ /**
39
+ * @var array[]
40
+ * @psalm-var array<string, array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
41
+ */
42
+ private static $installedByVendor = array();
43
+
44
+ /**
45
+ * Returns a list of all package names which are present, either by being installed, replaced or provided
46
+ *
47
+ * @return string[]
48
+ * @psalm-return list<string>
49
+ */
50
+ public static function getInstalledPackages()
51
+ {
52
+ $packages = array();
53
+ foreach (self::getInstalled() as $installed) {
54
+ $packages[] = array_keys($installed['versions']);
55
+ }
56
+
57
+ if (1 === \count($packages)) {
58
+ return $packages[0];
59
+ }
60
+
61
+ return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
62
+ }
63
+
64
+ /**
65
+ * Returns a list of all package names with a specific type e.g. 'library'
66
+ *
67
+ * @param string $type
68
+ * @return string[]
69
+ * @psalm-return list<string>
70
+ */
71
+ public static function getInstalledPackagesByType($type)
72
+ {
73
+ $packagesByType = array();
74
+
75
+ foreach (self::getInstalled() as $installed) {
76
+ foreach ($installed['versions'] as $name => $package) {
77
+ if (isset($package['type']) && $package['type'] === $type) {
78
+ $packagesByType[] = $name;
79
+ }
80
+ }
81
+ }
82
+
83
+ return $packagesByType;
84
+ }
85
+
86
+ /**
87
+ * Checks whether the given package is installed
88
+ *
89
+ * This also returns true if the package name is provided or replaced by another package
90
+ *
91
+ * @param string $packageName
92
+ * @param bool $includeDevRequirements
93
+ * @return bool
94
+ */
95
+ public static function isInstalled($packageName, $includeDevRequirements = true)
96
+ {
97
+ foreach (self::getInstalled() as $installed) {
98
+ if (isset($installed['versions'][$packageName])) {
99
+ return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']);
100
+ }
101
+ }
102
+
103
+ return false;
104
+ }
105
+
106
+ /**
107
+ * Checks whether the given package satisfies a version constraint
108
+ *
109
+ * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:
110
+ *
111
+ * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')
112
+ *
113
+ * @param VersionParser $parser Install composer/semver to have access to this class and functionality
114
+ * @param string $packageName
115
+ * @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
116
+ * @return bool
117
+ */
118
+ public static function satisfies(VersionParser $parser, $packageName, $constraint)
119
+ {
120
+ $constraint = $parser->parseConstraints($constraint);
121
+ $provided = $parser->parseConstraints(self::getVersionRanges($packageName));
122
+
123
+ return $provided->matches($constraint);
124
+ }
125
+
126
+ /**
127
+ * Returns a version constraint representing all the range(s) which are installed for a given package
128
+ *
129
+ * It is easier to use this via isInstalled() with the $constraint argument if you need to check
130
+ * whether a given version of a package is installed, and not just whether it exists
131
+ *
132
+ * @param string $packageName
133
+ * @return string Version constraint usable with composer/semver
134
+ */
135
+ public static function getVersionRanges($packageName)
136
+ {
137
+ foreach (self::getInstalled() as $installed) {
138
+ if (!isset($installed['versions'][$packageName])) {
139
+ continue;
140
+ }
141
+
142
+ $ranges = array();
143
+ if (isset($installed['versions'][$packageName]['pretty_version'])) {
144
+ $ranges[] = $installed['versions'][$packageName]['pretty_version'];
145
+ }
146
+ if (array_key_exists('aliases', $installed['versions'][$packageName])) {
147
+ $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
148
+ }
149
+ if (array_key_exists('replaced', $installed['versions'][$packageName])) {
150
+ $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
151
+ }
152
+ if (array_key_exists('provided', $installed['versions'][$packageName])) {
153
+ $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
154
+ }
155
+
156
+ return implode(' || ', $ranges);
157
+ }
158
+
159
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
160
+ }
161
+
162
+ /**
163
+ * @param string $packageName
164
+ * @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
165
+ */
166
+ public static function getVersion($packageName)
167
+ {
168
+ foreach (self::getInstalled() as $installed) {
169
+ if (!isset($installed['versions'][$packageName])) {
170
+ continue;
171
+ }
172
+
173
+ if (!isset($installed['versions'][$packageName]['version'])) {
174
+ return null;
175
+ }
176
+
177
+ return $installed['versions'][$packageName]['version'];
178
+ }
179
+
180
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
181
+ }
182
+
183
+ /**
184
+ * @param string $packageName
185
+ * @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
186
+ */
187
+ public static function getPrettyVersion($packageName)
188
+ {
189
+ foreach (self::getInstalled() as $installed) {
190
+ if (!isset($installed['versions'][$packageName])) {
191
+ continue;
192
+ }
193
+
194
+ if (!isset($installed['versions'][$packageName]['pretty_version'])) {
195
+ return null;
196
+ }
197
+
198
+ return $installed['versions'][$packageName]['pretty_version'];
199
+ }
200
+
201
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
202
+ }
203
+
204
+ /**
205
+ * @param string $packageName
206
+ * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference
207
+ */
208
+ public static function getReference($packageName)
209
+ {
210
+ foreach (self::getInstalled() as $installed) {
211
+ if (!isset($installed['versions'][$packageName])) {
212
+ continue;
213
+ }
214
+
215
+ if (!isset($installed['versions'][$packageName]['reference'])) {
216
+ return null;
217
+ }
218
+
219
+ return $installed['versions'][$packageName]['reference'];
220
+ }
221
+
222
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
223
+ }
224
+
225
+ /**
226
+ * @param string $packageName
227
+ * @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.
228
+ */
229
+ public static function getInstallPath($packageName)
230
+ {
231
+ foreach (self::getInstalled() as $installed) {
232
+ if (!isset($installed['versions'][$packageName])) {
233
+ continue;
234
+ }
235
+
236
+ return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;
237
+ }
238
+
239
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
240
+ }
241
+
242
+ /**
243
+ * @return array
244
+ * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}
245
+ */
246
+ public static function getRootPackage()
247
+ {
248
+ $installed = self::getInstalled();
249
+
250
+ return $installed[0]['root'];
251
+ }
252
+
253
+ /**
254
+ * Returns the raw installed.php data for custom implementations
255
+ *
256
+ * @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.
257
+ * @return array[]
258
+ * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}
259
+ */
260
+ public static function getRawData()
261
+ {
262
+ @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);
263
+
264
+ if (null === self::$installed) {
265
+ // only require the installed.php file if this file is loaded from its dumped location,
266
+ // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
267
+ if (substr(__DIR__, -8, 1) !== 'C') {
268
+ self::$installed = include __DIR__ . '/installed.php';
269
+ } else {
270
+ self::$installed = array();
271
+ }
272
+ }
273
+
274
+ return self::$installed;
275
+ }
276
+
277
+ /**
278
+ * Returns the raw data of all installed.php which are currently loaded for custom implementations
279
+ *
280
+ * @return array[]
281
+ * @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
282
+ */
283
+ public static function getAllRawData()
284
+ {
285
+ return self::getInstalled();
286
+ }
287
+
288
+ /**
289
+ * Lets you reload the static array from another file
290
+ *
291
+ * This is only useful for complex integrations in which a project needs to use
292
+ * this class but then also needs to execute another project's autoloader in process,
293
+ * and wants to ensure both projects have access to their version of installed.php.
294
+ *
295
+ * A typical case would be PHPUnit, where it would need to make sure it reads all
296
+ * the data it needs from this class, then call reload() with
297
+ * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure
298
+ * the project in which it runs can then also use this class safely, without
299
+ * interference between PHPUnit's dependencies and the project's dependencies.
300
+ *
301
+ * @param array[] $data A vendor/composer/installed.php data set
302
+ * @return void
303
+ *
304
+ * @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data
305
+ */
306
+ public static function reload($data)
307
+ {
308
+ self::$installed = $data;
309
+ self::$installedByVendor = array();
310
+ }
311
+
312
+ /**
313
+ * @return array[]
314
+ * @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
315
+ */
316
+ private static function getInstalled()
317
+ {
318
+ if (null === self::$canGetVendors) {
319
+ self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
320
+ }
321
+
322
+ $installed = array();
323
+
324
+ if (self::$canGetVendors) {
325
+ foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
326
+ if (isset(self::$installedByVendor[$vendorDir])) {
327
+ $installed[] = self::$installedByVendor[$vendorDir];
328
+ } elseif (is_file($vendorDir.'/composer/installed.php')) {
329
+ $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php';
330
+ if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
331
+ self::$installed = $installed[count($installed) - 1];
332
+ }
333
+ }
334
+ }
335
+ }
336
+
337
+ if (null === self::$installed) {
338
+ // only require the installed.php file if this file is loaded from its dumped location,
339
+ // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
340
+ if (substr(__DIR__, -8, 1) !== 'C') {
341
+ self::$installed = require __DIR__ . '/installed.php';
342
+ } else {
343
+ self::$installed = array();
344
+ }
345
+ }
346
+ $installed[] = self::$installed;
347
+
348
+ return $installed;
349
+ }
350
  }
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInit7d7fbc3e69cedef6a7cf1727ea8778eb
6
  {
7
  private static $loader;
8
 
@@ -24,15 +24,15 @@ class ComposerAutoloaderInit7d7fbc3e69cedef6a7cf1727ea8778eb
24
 
25
  require __DIR__ . '/platform_check.php';
26
 
27
- spl_autoload_register(array('ComposerAutoloaderInit7d7fbc3e69cedef6a7cf1727ea8778eb', 'loadClassLoader'), true, true);
28
- self::$loader = $loader = new \Composer\Autoload\ClassLoader();
29
- spl_autoload_unregister(array('ComposerAutoloaderInit7d7fbc3e69cedef6a7cf1727ea8778eb', 'loadClassLoader'));
30
 
31
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
32
  if ($useStaticLoader) {
33
  require __DIR__ . '/autoload_static.php';
34
 
35
- call_user_func(\Composer\Autoload\ComposerStaticInit7d7fbc3e69cedef6a7cf1727ea8778eb::getInitializer($loader));
36
  } else {
37
  $map = require __DIR__ . '/autoload_namespaces.php';
38
  foreach ($map as $namespace => $path) {
@@ -53,23 +53,28 @@ class ComposerAutoloaderInit7d7fbc3e69cedef6a7cf1727ea8778eb
53
  $loader->register(true);
54
 
55
  if ($useStaticLoader) {
56
- $includeFiles = Composer\Autoload\ComposerStaticInit7d7fbc3e69cedef6a7cf1727ea8778eb::$files;
57
  } else {
58
  $includeFiles = require __DIR__ . '/autoload_files.php';
59
  }
60
  foreach ($includeFiles as $fileIdentifier => $file) {
61
- composerRequire7d7fbc3e69cedef6a7cf1727ea8778eb($fileIdentifier, $file);
62
  }
63
 
64
  return $loader;
65
  }
66
  }
67
 
68
- function composerRequire7d7fbc3e69cedef6a7cf1727ea8778eb($fileIdentifier, $file)
 
 
 
 
 
69
  {
70
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
71
- require $file;
72
-
73
  $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
 
 
74
  }
75
  }
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInit2932d1ab0d50021582953f784790b57f
6
  {
7
  private static $loader;
8
 
24
 
25
  require __DIR__ . '/platform_check.php';
26
 
27
+ spl_autoload_register(array('ComposerAutoloaderInit2932d1ab0d50021582953f784790b57f', 'loadClassLoader'), true, true);
28
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
29
+ spl_autoload_unregister(array('ComposerAutoloaderInit2932d1ab0d50021582953f784790b57f', 'loadClassLoader'));
30
 
31
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
32
  if ($useStaticLoader) {
33
  require __DIR__ . '/autoload_static.php';
34
 
35
+ call_user_func(\Composer\Autoload\ComposerStaticInit2932d1ab0d50021582953f784790b57f::getInitializer($loader));
36
  } else {
37
  $map = require __DIR__ . '/autoload_namespaces.php';
38
  foreach ($map as $namespace => $path) {
53
  $loader->register(true);
54
 
55
  if ($useStaticLoader) {
56
+ $includeFiles = Composer\Autoload\ComposerStaticInit2932d1ab0d50021582953f784790b57f::$files;
57
  } else {
58
  $includeFiles = require __DIR__ . '/autoload_files.php';
59
  }
60
  foreach ($includeFiles as $fileIdentifier => $file) {
61
+ composerRequire2932d1ab0d50021582953f784790b57f($fileIdentifier, $file);
62
  }
63
 
64
  return $loader;
65
  }
66
  }
67
 
68
+ /**
69
+ * @param string $fileIdentifier
70
+ * @param string $file
71
+ * @return void
72
+ */
73
+ function composerRequire2932d1ab0d50021582953f784790b57f($fileIdentifier, $file)
74
  {
75
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
 
 
76
  $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
77
+
78
+ require $file;
79
  }
80
  }
vendor/composer/autoload_static.php CHANGED
@@ -4,7 +4,7 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInit7d7fbc3e69cedef6a7cf1727ea8778eb
8
  {
9
  public static $files = array (
10
  'fca581ae5268210490253d58378748c5' => __DIR__ . '/../..' . '/includes/functions.php',
@@ -87,7 +87,7 @@ class ComposerStaticInit7d7fbc3e69cedef6a7cf1727ea8778eb
87
  public static function getInitializer(ClassLoader $loader)
88
  {
89
  return \Closure::bind(function () use ($loader) {
90
- $loader->classMap = ComposerStaticInit7d7fbc3e69cedef6a7cf1727ea8778eb::$classMap;
91
 
92
  }, null, ClassLoader::class);
93
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInit2932d1ab0d50021582953f784790b57f
8
  {
9
  public static $files = array (
10
  'fca581ae5268210490253d58378748c5' => __DIR__ . '/../..' . '/includes/functions.php',
87
  public static function getInitializer(ClassLoader $loader)
88
  {
89
  return \Closure::bind(function () use ($loader) {
90
+ $loader->classMap = ComposerStaticInit2932d1ab0d50021582953f784790b57f::$classMap;
91
 
92
  }, null, ClassLoader::class);
93
  }
vendor/composer/installed.php CHANGED
@@ -1,24 +1,23 @@
1
- <?php return array (
2
- 'root' =>
3
- array (
4
- 'pretty_version' => 'dev-master',
5
- 'version' => 'dev-master',
6
- 'aliases' =>
7
- array (
 
 
 
8
  ),
9
- 'reference' => '1324b22452155c771a4d1215704ef4c098772b0b',
10
- 'name' => 'ibericode/mailchimp-for-wordpress',
11
- ),
12
- 'versions' =>
13
- array (
14
- 'ibericode/mailchimp-for-wordpress' =>
15
- array (
16
- 'pretty_version' => 'dev-master',
17
- 'version' => 'dev-master',
18
- 'aliases' =>
19
- array (
20
- ),
21
- 'reference' => '1324b22452155c771a4d1215704ef4c098772b0b',
22
  ),
23
- ),
24
  );
1
+ <?php return array(
2
+ 'root' => array(
3
+ 'pretty_version' => 'dev-master',
4
+ 'version' => 'dev-master',
5
+ 'type' => 'wordpress-plugin',
6
+ 'install_path' => __DIR__ . '/../../',
7
+ 'aliases' => array(),
8
+ 'reference' => 'fb703fd7eccff30181852e68089c308e92d21272',
9
+ 'name' => 'ibericode/mailchimp-for-wordpress',
10
+ 'dev' => false,
11
  ),
12
+ 'versions' => array(
13
+ 'ibericode/mailchimp-for-wordpress' => array(
14
+ 'pretty_version' => 'dev-master',
15
+ 'version' => 'dev-master',
16
+ 'type' => 'wordpress-plugin',
17
+ 'install_path' => __DIR__ . '/../../',
18
+ 'aliases' => array(),
19
+ 'reference' => 'fb703fd7eccff30181852e68089c308e92d21272',
20
+ 'dev_requirement' => false,
21
+ ),
 
 
 
22
  ),
 
23
  );
wpml-config.xml CHANGED
@@ -3,7 +3,7 @@
3
  <custom-type translate="1">mc4wp-form</custom-type>
4
  </custom-types>
5
  <custom-fields>
6
- <custom-field action="copy">_mc4wp_settings</custom-field>
7
  <custom-field action="translate">text_subscribed</custom-field>
8
  <custom-field action="translate">text_error</custom-field>
9
  <custom-field action="translate">text_invalid_email</custom-field>
3
  <custom-type translate="1">mc4wp-form</custom-type>
4
  </custom-types>
5
  <custom-fields>
6
+ <custom-field action="copy-once">_mc4wp_settings</custom-field>
7
  <custom-field action="translate">text_subscribed</custom-field>
8
  <custom-field action="translate">text_error</custom-field>
9
  <custom-field action="translate">text_invalid_email</custom-field>