Skip to content

Commit 1eebec9

Browse files
authored
feature #198 Add support for PHP 8 (pamil)
This PR was merged into the 1.0-dev branch. Discussion ---------- Related to Sylius/Sylius#12298. Commits ------- 5748c0c Add support for PHP 8
2 parents 2278677 + 5748c0c commit 1eebec9

File tree

23 files changed

+555
-36
lines changed

23 files changed

+555
-36
lines changed

.github/workflows/build.yml

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,24 +13,33 @@ jobs:
1313
tests:
1414
runs-on: ubuntu-latest
1515

16-
name: "PHP ${{ matrix.php }}, MySQL ${{ matrix.mysql }}, Sylius ${{ matrix.sylius }}"
16+
name: "PHP ${{ matrix.php }}, Symfony ${{ matrix.symfony }}, Sylius ${{ matrix.sylius }}, MySQL ${{ matrix.mysql }}"
1717

1818
strategy:
1919
fail-fast: false
2020
matrix:
21-
php: [7.4, 7.3]
22-
node: [10.x]
23-
mysql: [5.7, 8.0]
24-
symfony: [^4.4, ^5.2]
25-
sylius: [~1.8.0, ~1.9.0]
21+
php: ["8.0", "7.4", "7.3"]
22+
node: ["10.x"]
23+
mysql: ["5.7", "8.0"]
24+
symfony: ["^4.4", "^5.2"]
25+
sylius: ["~1.8.0", "~1.9.0", "~1.10@dev"]
2626

2727
exclude:
2828
-
29-
php: 7.3
30-
mysql: 8.0
29+
php: "7.3"
30+
mysql: "8.0"
3131
-
32-
sylius: ~1.8.0
33-
symfony: ^5.2
32+
sylius: "~1.8.0"
33+
symfony: "^5.2"
34+
-
35+
php: "7.3"
36+
sylius: "~1.10@dev"
37+
-
38+
php: "8.0"
39+
sylius: "~1.8.0"
40+
-
41+
php: "8.0"
42+
sylius: "~1.9.0"
3443
env:
3544
APP_ENV: test
3645
DATABASE_URL: "mysql://root:root@127.0.0.1/sylius?serverVersion=${{ matrix.mysql }}"

behat.yml.dist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ default:
66
extensions:
77
DMore\ChromeExtension\Behat\ServiceContainer\ChromeExtension: ~
88

9-
Lakion\Behat\MinkDebugExtension:
9+
FriendsOfBehat\MinkDebugExtension:
1010
directory: etc/build
1111
clean_start: false
1212
screenshot: true

composer.json

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,9 @@
55
"description": "PayPal plugin for Sylius.",
66
"license": "MIT",
77
"require": {
8-
"php": "^7.3",
8+
"php": "^7.3 || ^8.0",
99

1010
"sylius/sylius": "^1.8",
11-
"nyholm/append-query-string": "^0.1.1",
1211
"phpseclib/phpseclib": "^2.0",
1312
"sylius-labs/doctrine-migrations-extra-bundle": "^0.1.3",
1413
"doctrine/doctrine-migrations-bundle": "^3.0"
@@ -23,17 +22,17 @@
2322
"friends-of-behat/mink-extension": "^2.4",
2423
"friends-of-behat/page-object-extension": "^0.3",
2524
"friends-of-behat/suite-settings-extension": "^1.0",
25+
"friends-of-behat/mink-debug-extension": "^2.0",
2626
"friends-of-behat/symfony-extension": "^2.1",
2727
"friends-of-behat/variadic-extension": "^1.3",
2828
"friendsofsymfony/oauth-server-bundle": "^1.6 || >2.0.0-alpha.0 ^2.0@dev",
29-
"lakion/mink-debug-extension": "^1.2.3",
3029
"phpspec/phpspec": "^6.1",
31-
"phpstan/phpstan": "0.12.25",
32-
"phpstan/phpstan-doctrine": "0.12.13",
33-
"phpstan/phpstan-webmozart-assert": "0.12.4",
30+
"phpstan/phpstan": "0.12.84",
31+
"phpstan/phpstan-doctrine": "0.12.33",
32+
"phpstan/phpstan-webmozart-assert": "0.12.12",
3433
"phpunit/phpunit": "^8.5",
3534
"sensiolabs/security-checker": "^6.0",
36-
"sylius-labs/coding-standard": "^3.1",
35+
"sylius-labs/coding-standard": "^4.0",
3736
"symfony/browser-kit": "^4.4 || ^5.2",
3837
"symfony/debug-bundle": "^4.4 || ^5.2",
3938
"symfony/dotenv": "^4.4 || ^5.2",

easy-coding-standard.yml

Lines changed: 0 additions & 6 deletions
This file was deleted.

ecs.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?php
2+
3+
use PhpCsFixer\Fixer\ClassNotation\VisibilityRequiredFixer;
4+
use SlevomatCodingStandard\Sniffs\Commenting\InlineDocCommentDeclarationSniff;
5+
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
6+
use Symplify\EasyCodingStandard\ValueObject\Option;
7+
8+
return static function (ContainerConfigurator $containerConfigurator): void {
9+
$containerConfigurator->import('vendor/sylius-labs/coding-standard/ecs.php');
10+
11+
$containerConfigurator->parameters()->set(Option::SKIP, [
12+
VisibilityRequiredFixer::class => ['*Spec.php'],
13+
InlineDocCommentDeclarationSniff::class . '.MissingVariable',
14+
]);
15+
};

phpstan.neon

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,3 @@ parameters:
1414
# Test dependencies
1515
- 'tests/Application/app/**.php'
1616
- 'tests/Application/src/**.php'
17-
18-
ignoreErrors:
19-
- '/Parameter #1 $configuration of method Symfony\Component\DependencyInjection\Extension\Extension::processConfiguration() expects Symfony\Component\Config\Definition\ConfigurationInterface, Symfony\Component\Config\Definition\ConfigurationInterface|null given./'

psalm.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
<directory name="src" />
1111
<ignoreFiles>
1212
<directory name="vendor" />
13-
<file name="src/DependencyInjection/Configuration.php"/>
13+
<file name="src/DependencyInjection/Configuration.php" />
14+
<file name="src/UrlUtils.php" />
1415
</ignoreFiles>
1516
</projectFiles>
1617

src/Onboarding/Initiator/OnboardingInitiator.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use Sylius\Component\Core\Model\AdminUserInterface;
88
use Sylius\Component\Core\Model\PaymentMethodInterface;
9+
use Sylius\PayPalPlugin\UrlUtils;
910
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
1011
use Symfony\Component\Security\Core\Security;
1112

@@ -36,15 +37,15 @@ public function initiate(PaymentMethodInterface $paymentMethod): string
3637
/** @var AdminUserInterface $user */
3738
$user = $this->security->getUser();
3839

39-
return append_query_string(
40+
return UrlUtils::appendQueryString(
4041
$this->createPartnerReferralsUrl,
4142
http_build_query([
4243
'email' => $user->getEmail(),
4344
'return_url' => $this->urlGenerator->generate('sylius_admin_payment_method_create', [
4445
'factory' => 'sylius.pay_pal',
4546
], UrlGeneratorInterface::ABSOLUTE_URL),
4647
]),
47-
APPEND_QUERY_STRING_REPLACE_DUPLICATE
48+
UrlUtils::APPEND_QUERY_STRING_REPLACE_DUPLICATE
4849
);
4950
}
5051

src/Onboarding/Processor/BasicOnboardingProcessor.php

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
namespace Sylius\PayPalPlugin\Onboarding\Processor;
66

77
use GuzzleHttp\ClientInterface;
8-
use Sylius\Bundle\PayumBundle\Model\GatewayConfig;
98
use Sylius\Component\Core\Model\PaymentMethodInterface;
109
use Sylius\PayPalPlugin\Exception\PayPalPluginException;
1110
use Sylius\PayPalPlugin\Exception\PayPalWebhookAlreadyRegisteredException;
@@ -44,8 +43,6 @@ public function process(
4443
}
4544

4645
$gatewayConfig = $paymentMethod->getGatewayConfig();
47-
48-
/** @var GatewayConfig $gatewayConfig */
4946
Assert::notNull($gatewayConfig);
5047

5148
$onboardingId = (string) $request->query->get('onboarding_id');

src/UrlUtils.php

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Sylius\PayPalPlugin;
6+
7+
/**
8+
* Code copied from https://github.com/Nyholm/append_query_string.
9+
*/
10+
final class UrlUtils
11+
{
12+
public const APPEND_QUERY_STRING_IGNORE_DUPLICATE = 0;
13+
14+
public const APPEND_QUERY_STRING_REPLACE_DUPLICATE = 1;
15+
16+
public const APPEND_QUERY_STRING_SKIP_DUPLICATE = 2;
17+
18+
private function __construct()
19+
{
20+
}
21+
22+
/**
23+
* Add a query string to an existing URL.
24+
*
25+
* @param string $url The base URL. Example "https://nyholm.tech?biz=1"
26+
* @param string $queryString A string like "foo=bar&baz=2"
27+
* @param int $mode How to handle duplicate keys. See predefined constants above.
28+
*
29+
* @return string the resulting string
30+
*/
31+
public static function appendQueryString(string $url, string $queryString, int $mode = APPEND_QUERY_STRING_IGNORE_DUPLICATE): string
32+
{
33+
if ('' === $queryString) {
34+
return $url;
35+
}
36+
37+
$existing = parse_url($url, \PHP_URL_QUERY);
38+
$fragment = parse_url($url, \PHP_URL_FRAGMENT);
39+
$fragment = $fragment ? '#' . $fragment : '';
40+
41+
// Remove fragment
42+
if (false !== strrpos($url, '#')) {
43+
$url = substr($url, 0, strrpos($url, '#'));
44+
}
45+
46+
// If no existing query string
47+
if (empty($existing)) {
48+
// Check for "?" at the last character in $url
49+
$questionMark = '?';
50+
if ('?' === $url[strlen($url) - 1]) {
51+
$questionMark = '';
52+
}
53+
54+
return $url . $questionMark . $queryString . $fragment;
55+
}
56+
57+
// Remove query string from URL
58+
$result = substr($url, 0, strrpos($url, $existing) ?: 0);
59+
60+
if (self::APPEND_QUERY_STRING_IGNORE_DUPLICATE === $mode) {
61+
$result .= $existing . '&' . $queryString;
62+
} else {
63+
preg_match_all('#([^&=]+)(=[^&]+)?#si', $existing, $existingArray);
64+
preg_match_all('#([^&=]+)(=[^&]+)?#si', $queryString, $queryStringArray);
65+
if (self::APPEND_QUERY_STRING_REPLACE_DUPLICATE === $mode) {
66+
$intersect = array_intersect($existingArray[1], $queryStringArray[1]);
67+
$keyMap = array_flip($queryStringArray[1]);
68+
foreach ($intersect as $key => $paramName) {
69+
$existing = str_replace($existingArray[0][$key], $queryStringArray[0][$keyMap[$paramName]], $existing);
70+
$queryString = str_replace($queryStringArray[0][$keyMap[$paramName]], '', $queryString);
71+
}
72+
} elseif (self::APPEND_QUERY_STRING_SKIP_DUPLICATE === $mode) {
73+
$intersect = array_intersect($queryStringArray[1], $existingArray[1]);
74+
foreach ($intersect as $key => $paramName) {
75+
$queryString = str_replace($queryStringArray[0][$key], '', $queryString);
76+
}
77+
}
78+
$result .= trim((string) preg_replace('#&&+#i', '&', $existing . '&' . $queryString), '&');
79+
}
80+
81+
// add fragment
82+
return $result . $fragment;
83+
}
84+
}

0 commit comments

Comments
 (0)