Version Description
- 2022-07-06 =
- Fix - Add allow-plugins directive and adjust phpcs GitHub workflow.
- Fix - Scheduled product not synced when status becomes "publish".
- Tweak - WooCommerce 6.7 compatibility.
- Update - Facebook Marketing API from v12.0 to v13.0.
Download this release
Release Info
Developer | automattic |
Plugin | Facebook for WooCommerce |
Version | 2.6.17 |
Comparing to | |
See all releases |
Code changes from version 2.6.16 to 2.6.17
- README.md +2 -0
- changelog.txt +6 -0
- facebook-commerce.php +16 -9
- facebook-for-woocommerce.php +3 -3
- i18n/languages/facebook-for-woocommerce.pot +17 -17
- includes/fbgraph.php +1 -1
- readme.txt +7 -1
- vendor/autoload.php +6 -1
- vendor/composer/ClassLoader.php +141 -14
- vendor/composer/InstalledVersions.php +352 -0
- vendor/composer/autoload_classmap.php +2 -1
- vendor/composer/autoload_namespaces.php +1 -1
- vendor/composer/autoload_psr4.php +1 -1
- vendor/composer/autoload_real.php +9 -26
- vendor/composer/autoload_static.php +8 -3
- vendor/composer/installed.json +231 -224
- vendor/composer/installed.php +62 -0
- vendor/composer/platform_check.php +26 -0
README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1 |
# Facebook for WooCommerce
|
2 |
|
|
|
|
|
3 |
This is the development repository for the Facebook for WooCommerce plugin.
|
4 |
|
5 |
- [WooCommerce.com product page](https://woocommerce.com/products/facebook)
|
1 |
# Facebook for WooCommerce
|
2 |
|
3 |
+
[![PHP Coding Standards](https://github.com/woocommerce/facebook-for-woocommerce/actions/workflows/php-coding-standards.yml/badge.svg)](https://github.com/woocommerce/facebook-for-woocommerce/actions/workflows/php-coding-standards.yml)
|
4 |
+
|
5 |
This is the development repository for the Facebook for WooCommerce plugin.
|
6 |
|
7 |
- [WooCommerce.com product page](https://woocommerce.com/products/facebook)
|
changelog.txt
CHANGED
@@ -1,5 +1,11 @@
|
|
1 |
*** Facebook for WooCommerce Changelog ***
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
= 2.6.16 - 2022-06-07 =
|
4 |
* Fix - Updating reference from old master branch.
|
5 |
* Tweak - WC 6.6 compatibility.
|
1 |
*** Facebook for WooCommerce Changelog ***
|
2 |
|
3 |
+
= 2.6.17 - 2022-07-06 =
|
4 |
+
* Fix - Add allow-plugins directive and adjust phpcs GitHub workflow.
|
5 |
+
* Fix - Scheduled product not synced when status becomes "publish".
|
6 |
+
* Tweak - WooCommerce 6.7 compatibility.
|
7 |
+
* Update - Facebook Marketing API from v12.0 to v13.0.
|
8 |
+
|
9 |
= 2.6.16 - 2022-06-07 =
|
10 |
* Fix - Updating reference from old master branch.
|
11 |
* Tweak - WC 6.6 compatibility.
|
facebook-commerce.php
CHANGED
@@ -362,13 +362,6 @@ class WC_Facebookcommerce_Integration extends WC_Integration {
|
|
362 |
|
363 |
add_action( 'add_meta_boxes', 'SkyVerge\WooCommerce\Facebook\Admin\Product_Sync_Meta_Box::register', 10, 1 );
|
364 |
|
365 |
-
add_action(
|
366 |
-
'transition_post_status',
|
367 |
-
array( $this, 'fb_change_product_published_status' ),
|
368 |
-
10,
|
369 |
-
3
|
370 |
-
);
|
371 |
-
|
372 |
add_action(
|
373 |
'wp_ajax_ajax_fb_toggle_visibility',
|
374 |
array( $this, 'ajax_fb_toggle_visibility' )
|
@@ -419,6 +412,14 @@ class WC_Facebookcommerce_Integration extends WC_Integration {
|
|
419 |
)
|
420 |
);
|
421 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
422 |
// Product Set hooks.
|
423 |
add_action( 'fb_wc_product_set_sync', array( $this, 'create_or_update_product_set_item' ), 99, 2 );
|
424 |
add_action( 'fb_wc_product_set_delete', array( $this, 'delete_product_set_item' ), 99 );
|
@@ -1097,7 +1098,13 @@ class WC_Facebookcommerce_Integration extends WC_Integration {
|
|
1097 |
return;
|
1098 |
}
|
1099 |
|
1100 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
1101 |
}
|
1102 |
|
1103 |
|
@@ -1116,7 +1123,7 @@ class WC_Facebookcommerce_Integration extends WC_Integration {
|
|
1116 |
*/
|
1117 |
private function should_update_visibility_for_product_status_change( $new_status, $old_status ) {
|
1118 |
|
1119 |
-
return ( $old_status === 'publish' && $new_status !== 'publish' ) || ( $old_status === 'trash' && $new_status === 'publish' );
|
1120 |
}
|
1121 |
|
1122 |
|
362 |
|
363 |
add_action( 'add_meta_boxes', 'SkyVerge\WooCommerce\Facebook\Admin\Product_Sync_Meta_Box::register', 10, 1 );
|
364 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
365 |
add_action(
|
366 |
'wp_ajax_ajax_fb_toggle_visibility',
|
367 |
array( $this, 'ajax_fb_toggle_visibility' )
|
412 |
)
|
413 |
);
|
414 |
|
415 |
+
// Update products on change of status.
|
416 |
+
add_action(
|
417 |
+
'transition_post_status',
|
418 |
+
array( $this, 'fb_change_product_published_status' ),
|
419 |
+
10,
|
420 |
+
3
|
421 |
+
);
|
422 |
+
|
423 |
// Product Set hooks.
|
424 |
add_action( 'fb_wc_product_set_sync', array( $this, 'create_or_update_product_set_item' ), 99, 2 );
|
425 |
add_action( 'fb_wc_product_set_delete', array( $this, 'delete_product_set_item' ), 99 );
|
1098 |
return;
|
1099 |
}
|
1100 |
|
1101 |
+
if ( $visibility === self::FB_SHOP_PRODUCT_VISIBLE ) {
|
1102 |
+
// - new status is 'publish' regardless of old status, sync to Facebook
|
1103 |
+
$this->on_product_publish( $product->get_id() );
|
1104 |
+
} else {
|
1105 |
+
$this->update_fb_visibility( $product, $visibility );
|
1106 |
+
}
|
1107 |
+
|
1108 |
}
|
1109 |
|
1110 |
|
1123 |
*/
|
1124 |
private function should_update_visibility_for_product_status_change( $new_status, $old_status ) {
|
1125 |
|
1126 |
+
return ( $old_status === 'publish' && $new_status !== 'publish' ) || ( $old_status === 'trash' && $new_status === 'publish' ) || ( $old_status === 'future' && $new_status === 'publish' );
|
1127 |
}
|
1128 |
|
1129 |
|
facebook-for-woocommerce.php
CHANGED
@@ -11,11 +11,11 @@
|
|
11 |
* Description: Grow your business on Facebook! Use this official plugin to help sell more of your products using Facebook. After completing the setup, you'll be ready to create ads that promote your products and you can also create a shop section on your Page where customers can browse your products on Facebook.
|
12 |
* Author: Facebook
|
13 |
* Author URI: https://www.facebook.com/
|
14 |
-
* Version: 2.6.
|
15 |
* Text Domain: facebook-for-woocommerce
|
16 |
* Tested up to: 6.0
|
17 |
* WC requires at least: 3.5.0
|
18 |
-
* WC tested up to: 6.
|
19 |
* Requires PHP: 7.0
|
20 |
*
|
21 |
* @package FacebookCommerce
|
@@ -33,7 +33,7 @@ class WC_Facebook_Loader {
|
|
33 |
/**
|
34 |
* @var string the plugin version. This must be in the main plugin file to be automatically bumped by Woorelease.
|
35 |
*/
|
36 |
-
const PLUGIN_VERSION = '2.6.
|
37 |
|
38 |
// Minimum PHP version required by this plugin.
|
39 |
const MINIMUM_PHP_VERSION = '7.0.0';
|
11 |
* Description: Grow your business on Facebook! Use this official plugin to help sell more of your products using Facebook. After completing the setup, you'll be ready to create ads that promote your products and you can also create a shop section on your Page where customers can browse your products on Facebook.
|
12 |
* Author: Facebook
|
13 |
* Author URI: https://www.facebook.com/
|
14 |
+
* Version: 2.6.17
|
15 |
* Text Domain: facebook-for-woocommerce
|
16 |
* Tested up to: 6.0
|
17 |
* WC requires at least: 3.5.0
|
18 |
+
* WC tested up to: 6.7
|
19 |
* Requires PHP: 7.0
|
20 |
*
|
21 |
* @package FacebookCommerce
|
33 |
/**
|
34 |
* @var string the plugin version. This must be in the main plugin file to be automatically bumped by Woorelease.
|
35 |
*/
|
36 |
+
const PLUGIN_VERSION = '2.6.17'; // WRCS: DEFINED_VERSION.
|
37 |
|
38 |
// Minimum PHP version required by this plugin.
|
39 |
const MINIMUM_PHP_VERSION = '7.0.0';
|
i18n/languages/facebook-for-woocommerce.pot
CHANGED
@@ -2,10 +2,10 @@
|
|
2 |
# This file is distributed under the same license as the Facebook for WooCommerce package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
-
"Project-Id-Version: Facebook for WooCommerce 2.6.
|
6 |
"Report-Msgid-Bugs-To: "
|
7 |
"https://woocommerce.com/my-account/marketplace-ticket-form/\n"
|
8 |
-
"POT-Creation-Date: 2022-06
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=utf-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
@@ -111,45 +111,45 @@ msgstr ""
|
|
111 |
msgid "Facebook Commerce and Dynamic Ads (Pixel) Extension"
|
112 |
msgstr ""
|
113 |
|
114 |
-
#: facebook-commerce.php:
|
115 |
msgid "Nothing to update for product group for %1$s"
|
116 |
msgstr ""
|
117 |
|
118 |
-
#: facebook-commerce.php:
|
119 |
#. translators: Placeholders %1$s - original error message from Facebook API
|
120 |
msgid "There was an issue connecting to the Facebook API: %1$s"
|
121 |
msgstr ""
|
122 |
|
123 |
-
#: facebook-commerce.php:
|
124 |
msgid "Your connection has expired."
|
125 |
msgstr ""
|
126 |
|
127 |
-
#: facebook-commerce.php:
|
128 |
msgid ""
|
129 |
"Please click Manage connection > Advanced Options > Update Token to refresh "
|
130 |
"your connection to Facebook."
|
131 |
msgstr ""
|
132 |
|
133 |
-
#: facebook-commerce.php:
|
134 |
#. translators: Placeholders %s - error message
|
135 |
msgid "There was an error trying to sync the products to Facebook. %s"
|
136 |
msgstr ""
|
137 |
|
138 |
-
#: facebook-commerce.php:
|
139 |
msgid "Product sync is disabled."
|
140 |
msgstr ""
|
141 |
|
142 |
-
#: facebook-commerce.php:
|
143 |
msgid "The plugin is not configured or the Catalog ID is missing."
|
144 |
msgstr ""
|
145 |
|
146 |
-
#: facebook-commerce.php:
|
147 |
msgid ""
|
148 |
"A product sync is in progress. Please wait until the sync finishes before "
|
149 |
"starting a new one."
|
150 |
msgstr ""
|
151 |
|
152 |
-
#: facebook-commerce.php:
|
153 |
msgid ""
|
154 |
"We've detected that your Facebook Product Catalog is no longer valid. This "
|
155 |
"may happen if it was deleted, but could also be a temporary error. If the "
|
@@ -157,29 +157,29 @@ msgid ""
|
|
157 |
"and setup the plugin again."
|
158 |
msgstr ""
|
159 |
|
160 |
-
#: facebook-commerce.php:
|
161 |
msgid "Hi! We're here to answer any questions you may have."
|
162 |
msgstr ""
|
163 |
|
164 |
-
#: facebook-commerce.php:
|
165 |
msgid "Facebook for WooCommerce error:"
|
166 |
msgstr ""
|
167 |
|
168 |
-
#: facebook-commerce.php:
|
169 |
msgid ""
|
170 |
"There was an error trying to retrieve information about the Facebook page: "
|
171 |
"%s"
|
172 |
msgstr ""
|
173 |
|
174 |
-
#: facebook-commerce.php:
|
175 |
msgid "Get started with Messenger Customer Chat"
|
176 |
msgstr ""
|
177 |
|
178 |
-
#: facebook-commerce.php:
|
179 |
msgid "Get started with Instagram Shopping"
|
180 |
msgstr ""
|
181 |
|
182 |
-
#: facebook-commerce.php:
|
183 |
#. translators: Placeholders %1$s - original error message from Facebook API
|
184 |
msgid "There was an issue connecting to the Facebook API: %s"
|
185 |
msgstr ""
|
2 |
# This file is distributed under the same license as the Facebook for WooCommerce package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
+
"Project-Id-Version: Facebook for WooCommerce 2.6.17\n"
|
6 |
"Report-Msgid-Bugs-To: "
|
7 |
"https://woocommerce.com/my-account/marketplace-ticket-form/\n"
|
8 |
+
"POT-Creation-Date: 2022-07-06 15:02:41+00:00\n"
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=utf-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
111 |
msgid "Facebook Commerce and Dynamic Ads (Pixel) Extension"
|
112 |
msgstr ""
|
113 |
|
114 |
+
#: facebook-commerce.php:1433
|
115 |
msgid "Nothing to update for product group for %1$s"
|
116 |
msgstr ""
|
117 |
|
118 |
+
#: facebook-commerce.php:1846
|
119 |
#. translators: Placeholders %1$s - original error message from Facebook API
|
120 |
msgid "There was an issue connecting to the Facebook API: %1$s"
|
121 |
msgstr ""
|
122 |
|
123 |
+
#: facebook-commerce.php:2171
|
124 |
msgid "Your connection has expired."
|
125 |
msgstr ""
|
126 |
|
127 |
+
#: facebook-commerce.php:2171
|
128 |
msgid ""
|
129 |
"Please click Manage connection > Advanced Options > Update Token to refresh "
|
130 |
"your connection to Facebook."
|
131 |
msgstr ""
|
132 |
|
133 |
+
#: facebook-commerce.php:2178
|
134 |
#. translators: Placeholders %s - error message
|
135 |
msgid "There was an error trying to sync the products to Facebook. %s"
|
136 |
msgstr ""
|
137 |
|
138 |
+
#: facebook-commerce.php:2201
|
139 |
msgid "Product sync is disabled."
|
140 |
msgstr ""
|
141 |
|
142 |
+
#: facebook-commerce.php:2208
|
143 |
msgid "The plugin is not configured or the Catalog ID is missing."
|
144 |
msgstr ""
|
145 |
|
146 |
+
#: facebook-commerce.php:2231
|
147 |
msgid ""
|
148 |
"A product sync is in progress. Please wait until the sync finishes before "
|
149 |
"starting a new one."
|
150 |
msgstr ""
|
151 |
|
152 |
+
#: facebook-commerce.php:2243
|
153 |
msgid ""
|
154 |
"We've detected that your Facebook Product Catalog is no longer valid. This "
|
155 |
"may happen if it was deleted, but could also be a temporary error. If the "
|
157 |
"and setup the plugin again."
|
158 |
msgstr ""
|
159 |
|
160 |
+
#: facebook-commerce.php:2772
|
161 |
msgid "Hi! We're here to answer any questions you may have."
|
162 |
msgstr ""
|
163 |
|
164 |
+
#: facebook-commerce.php:3162
|
165 |
msgid "Facebook for WooCommerce error:"
|
166 |
msgstr ""
|
167 |
|
168 |
+
#: facebook-commerce.php:3244
|
169 |
msgid ""
|
170 |
"There was an error trying to retrieve information about the Facebook page: "
|
171 |
"%s"
|
172 |
msgstr ""
|
173 |
|
174 |
+
#: facebook-commerce.php:3295
|
175 |
msgid "Get started with Messenger Customer Chat"
|
176 |
msgstr ""
|
177 |
|
178 |
+
#: facebook-commerce.php:3296
|
179 |
msgid "Get started with Instagram Shopping"
|
180 |
msgstr ""
|
181 |
|
182 |
+
#: facebook-commerce.php:3531
|
183 |
#. translators: Placeholders %1$s - original error message from Facebook API
|
184 |
msgid "There was an issue connecting to the Facebook API: %s"
|
185 |
msgstr ""
|
includes/fbgraph.php
CHANGED
@@ -26,7 +26,7 @@ if ( ! class_exists( 'WC_Facebookcommerce_Graph_API' ) ) :
|
|
26 |
*/
|
27 |
class WC_Facebookcommerce_Graph_API {
|
28 |
const GRAPH_API_URL = 'https://graph.facebook.com/';
|
29 |
-
const API_VERSION = '
|
30 |
const CURL_TIMEOUT = 500;
|
31 |
|
32 |
/**
|
26 |
*/
|
27 |
class WC_Facebookcommerce_Graph_API {
|
28 |
const GRAPH_API_URL = 'https://graph.facebook.com/';
|
29 |
+
const API_VERSION = 'v13.0';
|
30 |
const CURL_TIMEOUT = 500;
|
31 |
|
32 |
/**
|
readme.txt
CHANGED
@@ -3,7 +3,7 @@ Contributors: facebook, automattic, woothemes
|
|
3 |
Tags: facebook, shop, catalog, advertise, pixel, product
|
4 |
Requires at least: 4.4
|
5 |
Tested up to: 5.9
|
6 |
-
Stable tag: 2.6.
|
7 |
Requires PHP: 5.6 or greater
|
8 |
MySQL: 5.6 or greater
|
9 |
License: GPLv2 or later
|
@@ -39,6 +39,12 @@ When opening a bug on GitHub, please give us as many details as possible.
|
|
39 |
|
40 |
== Changelog ==
|
41 |
|
|
|
|
|
|
|
|
|
|
|
|
|
42 |
= 2.6.16 - 2022-06-07 =
|
43 |
* Fix - Updating reference from old master branch.
|
44 |
* Tweak - WC 6.6 compatibility.
|
3 |
Tags: facebook, shop, catalog, advertise, pixel, product
|
4 |
Requires at least: 4.4
|
5 |
Tested up to: 5.9
|
6 |
+
Stable tag: 2.6.17
|
7 |
Requires PHP: 5.6 or greater
|
8 |
MySQL: 5.6 or greater
|
9 |
License: GPLv2 or later
|
39 |
|
40 |
== Changelog ==
|
41 |
|
42 |
+
= 2.6.17 - 2022-07-06 =
|
43 |
+
* Fix - Add allow-plugins directive and adjust phpcs GitHub workflow.
|
44 |
+
* Fix - Scheduled product not synced when status becomes "publish".
|
45 |
+
* Tweak - WooCommerce 6.7 compatibility.
|
46 |
+
* Update - Facebook Marketing API from v12.0 to v13.0.
|
47 |
+
|
48 |
= 2.6.16 - 2022-06-07 =
|
49 |
* Fix - Updating reference from old master branch.
|
50 |
* Tweak - WC 6.6 compatibility.
|
vendor/autoload.php
CHANGED
@@ -2,6 +2,11 @@
|
|
2 |
|
3 |
// autoload.php @generated by Composer
|
4 |
|
|
|
|
|
|
|
|
|
|
|
5 |
require_once __DIR__ . '/composer/autoload_real.php';
|
6 |
|
7 |
-
return
|
2 |
|
3 |
// autoload.php @generated by Composer
|
4 |
|
5 |
+
if (PHP_VERSION_ID < 50600) {
|
6 |
+
echo '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;
|
7 |
+
exit(1);
|
8 |
+
}
|
9 |
+
|
10 |
require_once __DIR__ . '/composer/autoload_real.php';
|
11 |
|
12 |
+
return ComposerAutoloaderInit81d55c64313156042fde4f9c9a047b88::getLoader();
|
vendor/composer/ClassLoader.php
CHANGED
@@ -37,26 +37,80 @@ namespace Composer\Autoload;
|
|
37 |
*
|
38 |
* @author Fabien Potencier <fabien@symfony.com>
|
39 |
* @author Jordi Boggiano <j.boggiano@seld.be>
|
40 |
-
* @see
|
41 |
-
* @see
|
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
|
|
|
|
|
|
|
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
|
106 |
-
* @param
|
107 |
-
* @param bool
|
|
|
|
|
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
|
151 |
-
* @param
|
152 |
-
* @param bool
|
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
|
199 |
-
* @param
|
|
|
|
|
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
|
215 |
-
* @param
|
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
|
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 |
{
|
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)) {
|
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
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/autoload_classmap.php
CHANGED
@@ -2,8 +2,9 @@
|
|
2 |
|
3 |
// autoload_classmap.php @generated by Composer
|
4 |
|
5 |
-
$vendorDir = dirname(
|
6 |
$baseDir = dirname($vendorDir);
|
7 |
|
8 |
return array(
|
|
|
9 |
);
|
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
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
|
3 |
// autoload_namespaces.php @generated by Composer
|
4 |
|
5 |
-
$vendorDir = dirname(
|
6 |
$baseDir = dirname($vendorDir);
|
7 |
|
8 |
return array(
|
2 |
|
3 |
// autoload_namespaces.php @generated by Composer
|
4 |
|
5 |
+
$vendorDir = dirname(__DIR__);
|
6 |
$baseDir = dirname($vendorDir);
|
7 |
|
8 |
return array(
|
vendor/composer/autoload_psr4.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
|
3 |
// autoload_psr4.php @generated by Composer
|
4 |
|
5 |
-
$vendorDir = dirname(
|
6 |
$baseDir = dirname($vendorDir);
|
7 |
|
8 |
return array(
|
2 |
|
3 |
// autoload_psr4.php @generated by Composer
|
4 |
|
5 |
+
$vendorDir = dirname(__DIR__);
|
6 |
$baseDir = dirname($vendorDir);
|
7 |
|
8 |
return array(
|
vendor/composer/autoload_real.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
|
3 |
// autoload_real.php @generated by Composer
|
4 |
|
5 |
-
class
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
@@ -22,31 +22,14 @@ class ComposerAutoloaderInit2aefdfcf714feef810b3b48df1224bdd
|
|
22 |
return self::$loader;
|
23 |
}
|
24 |
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
call_user_func(\Composer\Autoload\ComposerStaticInit2aefdfcf714feef810b3b48df1224bdd::getInitializer($loader));
|
34 |
-
} else {
|
35 |
-
$map = require __DIR__ . '/autoload_namespaces.php';
|
36 |
-
foreach ($map as $namespace => $path) {
|
37 |
-
$loader->set($namespace, $path);
|
38 |
-
}
|
39 |
-
|
40 |
-
$map = require __DIR__ . '/autoload_psr4.php';
|
41 |
-
foreach ($map as $namespace => $path) {
|
42 |
-
$loader->setPsr4($namespace, $path);
|
43 |
-
}
|
44 |
-
|
45 |
-
$classMap = require __DIR__ . '/autoload_classmap.php';
|
46 |
-
if ($classMap) {
|
47 |
-
$loader->addClassMap($classMap);
|
48 |
-
}
|
49 |
-
}
|
50 |
|
51 |
$loader->register(true);
|
52 |
|
2 |
|
3 |
// autoload_real.php @generated by Composer
|
4 |
|
5 |
+
class ComposerAutoloaderInit81d55c64313156042fde4f9c9a047b88
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
22 |
return self::$loader;
|
23 |
}
|
24 |
|
25 |
+
require __DIR__ . '/platform_check.php';
|
26 |
+
|
27 |
+
spl_autoload_register(array('ComposerAutoloaderInit81d55c64313156042fde4f9c9a047b88', 'loadClassLoader'), true, true);
|
28 |
+
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
|
29 |
+
spl_autoload_unregister(array('ComposerAutoloaderInit81d55c64313156042fde4f9c9a047b88', 'loadClassLoader'));
|
30 |
+
|
31 |
+
require __DIR__ . '/autoload_static.php';
|
32 |
+
call_user_func(\Composer\Autoload\ComposerStaticInit81d55c64313156042fde4f9c9a047b88::getInitializer($loader));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
33 |
|
34 |
$loader->register(true);
|
35 |
|
vendor/composer/autoload_static.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
|
5 |
namespace Composer\Autoload;
|
6 |
|
7 |
-
class
|
8 |
{
|
9 |
public static $prefixLengthsPsr4 = array (
|
10 |
'S' =>
|
@@ -36,11 +36,16 @@ class ComposerStaticInit2aefdfcf714feef810b3b48df1224bdd
|
|
36 |
),
|
37 |
);
|
38 |
|
|
|
|
|
|
|
|
|
39 |
public static function getInitializer(ClassLoader $loader)
|
40 |
{
|
41 |
return \Closure::bind(function () use ($loader) {
|
42 |
-
$loader->prefixLengthsPsr4 =
|
43 |
-
$loader->prefixDirsPsr4 =
|
|
|
44 |
|
45 |
}, null, ClassLoader::class);
|
46 |
}
|
4 |
|
5 |
namespace Composer\Autoload;
|
6 |
|
7 |
+
class ComposerStaticInit81d55c64313156042fde4f9c9a047b88
|
8 |
{
|
9 |
public static $prefixLengthsPsr4 = array (
|
10 |
'S' =>
|
36 |
),
|
37 |
);
|
38 |
|
39 |
+
public static $classMap = array (
|
40 |
+
'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
|
41 |
+
);
|
42 |
+
|
43 |
public static function getInitializer(ClassLoader $loader)
|
44 |
{
|
45 |
return \Closure::bind(function () use ($loader) {
|
46 |
+
$loader->prefixLengthsPsr4 = ComposerStaticInit81d55c64313156042fde4f9c9a047b88::$prefixLengthsPsr4;
|
47 |
+
$loader->prefixDirsPsr4 = ComposerStaticInit81d55c64313156042fde4f9c9a047b88::$prefixDirsPsr4;
|
48 |
+
$loader->classMap = ComposerStaticInit81d55c64313156042fde4f9c9a047b88::$classMap;
|
49 |
|
50 |
}, null, ClassLoader::class);
|
51 |
}
|
vendor/composer/installed.json
CHANGED
@@ -1,225 +1,232 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
"
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
"
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
"
|
19 |
-
|
20 |
-
|
21 |
-
"
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
"
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
"
|
36 |
-
|
37 |
-
"
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
"
|
43 |
-
"
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
"
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
"
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
"
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
"
|
161 |
-
"
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
"
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
"
|
179 |
-
"
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
"
|
188 |
-
"
|
189 |
-
"
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
"
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
"
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
"
|
|
|
|
|
|
|
|
|
|
|
223 |
}
|
224 |
-
|
225 |
-
|
|
|
|
1 |
+
{
|
2 |
+
"packages": [
|
3 |
+
{
|
4 |
+
"name": "composer/installers",
|
5 |
+
"version": "v1.12.0",
|
6 |
+
"version_normalized": "1.12.0.0",
|
7 |
+
"source": {
|
8 |
+
"type": "git",
|
9 |
+
"url": "https://github.com/composer/installers.git",
|
10 |
+
"reference": "d20a64ed3c94748397ff5973488761b22f6d3f19"
|
11 |
+
},
|
12 |
+
"dist": {
|
13 |
+
"type": "zip",
|
14 |
+
"url": "https://api.github.com/repos/composer/installers/zipball/d20a64ed3c94748397ff5973488761b22f6d3f19",
|
15 |
+
"reference": "d20a64ed3c94748397ff5973488761b22f6d3f19",
|
16 |
+
"shasum": ""
|
17 |
+
},
|
18 |
+
"require": {
|
19 |
+
"composer-plugin-api": "^1.0 || ^2.0"
|
20 |
+
},
|
21 |
+
"replace": {
|
22 |
+
"roundcube/plugin-installer": "*",
|
23 |
+
"shama/baton": "*"
|
24 |
+
},
|
25 |
+
"require-dev": {
|
26 |
+
"composer/composer": "1.6.* || ^2.0",
|
27 |
+
"composer/semver": "^1 || ^3",
|
28 |
+
"phpstan/phpstan": "^0.12.55",
|
29 |
+
"phpstan/phpstan-phpunit": "^0.12.16",
|
30 |
+
"symfony/phpunit-bridge": "^4.2 || ^5",
|
31 |
+
"symfony/process": "^2.3"
|
32 |
+
},
|
33 |
+
"time": "2021-09-13T08:19:44+00:00",
|
34 |
+
"type": "composer-plugin",
|
35 |
+
"extra": {
|
36 |
+
"class": "Composer\\Installers\\Plugin",
|
37 |
+
"branch-alias": {
|
38 |
+
"dev-main": "1.x-dev"
|
39 |
+
}
|
40 |
+
},
|
41 |
+
"installation-source": "dist",
|
42 |
+
"autoload": {
|
43 |
+
"psr-4": {
|
44 |
+
"Composer\\Installers\\": "src/Composer/Installers"
|
45 |
+
}
|
46 |
+
},
|
47 |
+
"notification-url": "https://packagist.org/downloads/",
|
48 |
+
"license": [
|
49 |
+
"MIT"
|
50 |
+
],
|
51 |
+
"authors": [
|
52 |
+
{
|
53 |
+
"name": "Kyle Robinson Young",
|
54 |
+
"email": "kyle@dontkry.com",
|
55 |
+
"homepage": "https://github.com/shama"
|
56 |
+
}
|
57 |
+
],
|
58 |
+
"description": "A multi-framework Composer library installer",
|
59 |
+
"homepage": "https://composer.github.io/installers/",
|
60 |
+
"keywords": [
|
61 |
+
"Craft",
|
62 |
+
"Dolibarr",
|
63 |
+
"Eliasis",
|
64 |
+
"Hurad",
|
65 |
+
"ImageCMS",
|
66 |
+
"Kanboard",
|
67 |
+
"Lan Management System",
|
68 |
+
"MODX Evo",
|
69 |
+
"MantisBT",
|
70 |
+
"Mautic",
|
71 |
+
"Maya",
|
72 |
+
"OXID",
|
73 |
+
"Plentymarkets",
|
74 |
+
"Porto",
|
75 |
+
"RadPHP",
|
76 |
+
"SMF",
|
77 |
+
"Starbug",
|
78 |
+
"Thelia",
|
79 |
+
"Whmcs",
|
80 |
+
"WolfCMS",
|
81 |
+
"agl",
|
82 |
+
"aimeos",
|
83 |
+
"annotatecms",
|
84 |
+
"attogram",
|
85 |
+
"bitrix",
|
86 |
+
"cakephp",
|
87 |
+
"chef",
|
88 |
+
"cockpit",
|
89 |
+
"codeigniter",
|
90 |
+
"concrete5",
|
91 |
+
"croogo",
|
92 |
+
"dokuwiki",
|
93 |
+
"drupal",
|
94 |
+
"eZ Platform",
|
95 |
+
"elgg",
|
96 |
+
"expressionengine",
|
97 |
+
"fuelphp",
|
98 |
+
"grav",
|
99 |
+
"installer",
|
100 |
+
"itop",
|
101 |
+
"joomla",
|
102 |
+
"known",
|
103 |
+
"kohana",
|
104 |
+
"laravel",
|
105 |
+
"lavalite",
|
106 |
+
"lithium",
|
107 |
+
"magento",
|
108 |
+
"majima",
|
109 |
+
"mako",
|
110 |
+
"mediawiki",
|
111 |
+
"miaoxing",
|
112 |
+
"modulework",
|
113 |
+
"modx",
|
114 |
+
"moodle",
|
115 |
+
"osclass",
|
116 |
+
"pantheon",
|
117 |
+
"phpbb",
|
118 |
+
"piwik",
|
119 |
+
"ppi",
|
120 |
+
"processwire",
|
121 |
+
"puppet",
|
122 |
+
"pxcms",
|
123 |
+
"reindex",
|
124 |
+
"roundcube",
|
125 |
+
"shopware",
|
126 |
+
"silverstripe",
|
127 |
+
"sydes",
|
128 |
+
"sylius",
|
129 |
+
"symfony",
|
130 |
+
"tastyigniter",
|
131 |
+
"typo3",
|
132 |
+
"wordpress",
|
133 |
+
"yawik",
|
134 |
+
"zend",
|
135 |
+
"zikula"
|
136 |
+
],
|
137 |
+
"support": {
|
138 |
+
"issues": "https://github.com/composer/installers/issues",
|
139 |
+
"source": "https://github.com/composer/installers/tree/v1.12.0"
|
140 |
+
},
|
141 |
+
"funding": [
|
142 |
+
{
|
143 |
+
"url": "https://packagist.com",
|
144 |
+
"type": "custom"
|
145 |
+
},
|
146 |
+
{
|
147 |
+
"url": "https://github.com/composer",
|
148 |
+
"type": "github"
|
149 |
+
},
|
150 |
+
{
|
151 |
+
"url": "https://tidelift.com/funding/github/packagist/composer/composer",
|
152 |
+
"type": "tidelift"
|
153 |
+
}
|
154 |
+
],
|
155 |
+
"install-path": "./installers"
|
156 |
+
},
|
157 |
+
{
|
158 |
+
"name": "skyverge/wc-plugin-framework",
|
159 |
+
"version": "5.10.0",
|
160 |
+
"version_normalized": "5.10.0.0",
|
161 |
+
"source": {
|
162 |
+
"type": "git",
|
163 |
+
"url": "https://github.com/skyverge/wc-plugin-framework.git",
|
164 |
+
"reference": "e230d7c40286854e49c0cafeec3398cbf2427a64"
|
165 |
+
},
|
166 |
+
"dist": {
|
167 |
+
"type": "zip",
|
168 |
+
"url": "https://api.github.com/repos/skyverge/wc-plugin-framework/zipball/e230d7c40286854e49c0cafeec3398cbf2427a64",
|
169 |
+
"reference": "e230d7c40286854e49c0cafeec3398cbf2427a64",
|
170 |
+
"shasum": ""
|
171 |
+
},
|
172 |
+
"require-dev": {
|
173 |
+
"lucatume/wp-browser": "^2.1"
|
174 |
+
},
|
175 |
+
"time": "2020-11-06T21:25:49+00:00",
|
176 |
+
"type": "library",
|
177 |
+
"installation-source": "dist",
|
178 |
+
"description": "The official SkyVerge WooCommerce plugin framework",
|
179 |
+
"support": {
|
180 |
+
"source": "https://github.com/skyverge/wc-plugin-framework/tree/5.10.0",
|
181 |
+
"issues": "https://github.com/skyverge/wc-plugin-framework/issues"
|
182 |
+
},
|
183 |
+
"install-path": "../skyverge/wc-plugin-framework"
|
184 |
+
},
|
185 |
+
{
|
186 |
+
"name": "woocommerce/action-scheduler-job-framework",
|
187 |
+
"version": "2.0.0",
|
188 |
+
"version_normalized": "2.0.0.0",
|
189 |
+
"source": {
|
190 |
+
"type": "git",
|
191 |
+
"url": "https://github.com/woocommerce/action-scheduler-job-framework.git",
|
192 |
+
"reference": "b0b21b9cc87e476ba7f8817050b39274ea7d6732"
|
193 |
+
},
|
194 |
+
"dist": {
|
195 |
+
"type": "zip",
|
196 |
+
"url": "https://api.github.com/repos/woocommerce/action-scheduler-job-framework/zipball/b0b21b9cc87e476ba7f8817050b39274ea7d6732",
|
197 |
+
"reference": "b0b21b9cc87e476ba7f8817050b39274ea7d6732",
|
198 |
+
"shasum": ""
|
199 |
+
},
|
200 |
+
"require": {
|
201 |
+
"php": ">=7.0"
|
202 |
+
},
|
203 |
+
"require-dev": {
|
204 |
+
"woocommerce/woocommerce-sniffs": "0.1.0"
|
205 |
+
},
|
206 |
+
"time": "2021-05-20T02:32:48+00:00",
|
207 |
+
"type": "library",
|
208 |
+
"installation-source": "dist",
|
209 |
+
"autoload": {
|
210 |
+
"psr-4": {
|
211 |
+
"Automattic\\WooCommerce\\ActionSchedulerJobFramework\\": "src/"
|
212 |
+
}
|
213 |
+
},
|
214 |
+
"scripts": {
|
215 |
+
"phpcs": [
|
216 |
+
"phpcs -s -p"
|
217 |
+
]
|
218 |
+
},
|
219 |
+
"license": [
|
220 |
+
"GNU"
|
221 |
+
],
|
222 |
+
"description": "A job framework for Action Scheduler (actionscheduler.org)",
|
223 |
+
"support": {
|
224 |
+
"source": "https://github.com/woocommerce/action-scheduler-job-framework/tree/2.0.0",
|
225 |
+
"issues": "https://github.com/woocommerce/action-scheduler-job-framework/issues"
|
226 |
+
},
|
227 |
+
"install-path": "../woocommerce/action-scheduler-job-framework"
|
228 |
}
|
229 |
+
],
|
230 |
+
"dev": false,
|
231 |
+
"dev-package-names": []
|
232 |
+
}
|
vendor/composer/installed.php
ADDED
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php return array(
|
2 |
+
'root' => array(
|
3 |
+
'name' => 'facebookincubator/facebook-for-woocommerce',
|
4 |
+
'pretty_version' => 'dev-release/2.6.17',
|
5 |
+
'version' => 'dev-release/2.6.17',
|
6 |
+
'reference' => 'c3ebfdc9f950171717d585dbac3a9b3ded54495b',
|
7 |
+
'type' => 'wordpress-plugin',
|
8 |
+
'install_path' => __DIR__ . '/../../',
|
9 |
+
'aliases' => array(),
|
10 |
+
'dev' => false,
|
11 |
+
),
|
12 |
+
'versions' => array(
|
13 |
+
'composer/installers' => array(
|
14 |
+
'pretty_version' => 'v1.12.0',
|
15 |
+
'version' => '1.12.0.0',
|
16 |
+
'reference' => 'd20a64ed3c94748397ff5973488761b22f6d3f19',
|
17 |
+
'type' => 'composer-plugin',
|
18 |
+
'install_path' => __DIR__ . '/./installers',
|
19 |
+
'aliases' => array(),
|
20 |
+
'dev_requirement' => false,
|
21 |
+
),
|
22 |
+
'facebookincubator/facebook-for-woocommerce' => array(
|
23 |
+
'pretty_version' => 'dev-release/2.6.17',
|
24 |
+
'version' => 'dev-release/2.6.17',
|
25 |
+
'reference' => 'c3ebfdc9f950171717d585dbac3a9b3ded54495b',
|
26 |
+
'type' => 'wordpress-plugin',
|
27 |
+
'install_path' => __DIR__ . '/../../',
|
28 |
+
'aliases' => array(),
|
29 |
+
'dev_requirement' => false,
|
30 |
+
),
|
31 |
+
'roundcube/plugin-installer' => array(
|
32 |
+
'dev_requirement' => false,
|
33 |
+
'replaced' => array(
|
34 |
+
0 => '*',
|
35 |
+
),
|
36 |
+
),
|
37 |
+
'shama/baton' => array(
|
38 |
+
'dev_requirement' => false,
|
39 |
+
'replaced' => array(
|
40 |
+
0 => '*',
|
41 |
+
),
|
42 |
+
),
|
43 |
+
'skyverge/wc-plugin-framework' => array(
|
44 |
+
'pretty_version' => '5.10.0',
|
45 |
+
'version' => '5.10.0.0',
|
46 |
+
'reference' => 'e230d7c40286854e49c0cafeec3398cbf2427a64',
|
47 |
+
'type' => 'library',
|
48 |
+
'install_path' => __DIR__ . '/../skyverge/wc-plugin-framework',
|
49 |
+
'aliases' => array(),
|
50 |
+
'dev_requirement' => false,
|
51 |
+
),
|
52 |
+
'woocommerce/action-scheduler-job-framework' => array(
|
53 |
+
'pretty_version' => '2.0.0',
|
54 |
+
'version' => '2.0.0.0',
|
55 |
+
'reference' => 'b0b21b9cc87e476ba7f8817050b39274ea7d6732',
|
56 |
+
'type' => 'library',
|
57 |
+
'install_path' => __DIR__ . '/../woocommerce/action-scheduler-job-framework',
|
58 |
+
'aliases' => array(),
|
59 |
+
'dev_requirement' => false,
|
60 |
+
),
|
61 |
+
),
|
62 |
+
);
|
vendor/composer/platform_check.php
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// platform_check.php @generated by Composer
|
4 |
+
|
5 |
+
$issues = array();
|
6 |
+
|
7 |
+
if (!(PHP_VERSION_ID >= 70000)) {
|
8 |
+
$issues[] = 'Your Composer dependencies require a PHP version ">= 7.0.0". You are running ' . PHP_VERSION . '.';
|
9 |
+
}
|
10 |
+
|
11 |
+
if ($issues) {
|
12 |
+
if (!headers_sent()) {
|
13 |
+
header('HTTP/1.1 500 Internal Server Error');
|
14 |
+
}
|
15 |
+
if (!ini_get('display_errors')) {
|
16 |
+
if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
|
17 |
+
fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);
|
18 |
+
} elseif (!headers_sent()) {
|
19 |
+
echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
|
20 |
+
}
|
21 |
+
}
|
22 |
+
trigger_error(
|
23 |
+
'Composer detected issues in your platform: ' . implode(' ', $issues),
|
24 |
+
E_USER_ERROR
|
25 |
+
);
|
26 |
+
}
|