From bc25e94cc7d6165bea6ec63384d11a02011c1427 Mon Sep 17 00:00:00 2001 From: Victor Macko Date: Mon, 9 Dec 2019 10:47:06 +0000 Subject: [PATCH 1/5] Updated to support Symfony 5.0 & Twig 3.0 --- Datatable/AbstractDatatable.php | 6 +++--- Datatable/Column/AbstractColumn.php | 4 ++-- Datatable/Column/ColumnBuilder.php | 4 ++-- Datatable/DatatableFactory.php | 4 ++-- Tests/DatatableTest.php | 4 ++-- Twig/DatatableTwigExtension.php | 32 ++++++++++++++--------------- composer.json | 12 +++++------ 7 files changed, 33 insertions(+), 33 deletions(-) mode change 100644 => 100755 Datatable/AbstractDatatable.php mode change 100644 => 100755 Datatable/Column/AbstractColumn.php mode change 100644 => 100755 Datatable/Column/ColumnBuilder.php mode change 100644 => 100755 Datatable/DatatableFactory.php mode change 100644 => 100755 Tests/DatatableTest.php mode change 100644 => 100755 Twig/DatatableTwigExtension.php mode change 100644 => 100755 composer.json diff --git a/Datatable/AbstractDatatable.php b/Datatable/AbstractDatatable.php old mode 100644 new mode 100755 index 1acb48fd..bea38108 --- a/Datatable/AbstractDatatable.php +++ b/Datatable/AbstractDatatable.php @@ -20,7 +20,7 @@ use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; use Symfony\Component\Translation\TranslatorInterface; -use Twig_Environment; +use Twig\Environment; abstract class AbstractDatatable implements DatatableInterface { @@ -62,7 +62,7 @@ abstract class AbstractDatatable implements DatatableInterface /** * The Twig Environment. * - * @var Twig_Environment + * @var Environment */ protected $twig; @@ -154,7 +154,7 @@ public function __construct( TranslatorInterface $translator, RouterInterface $router, EntityManagerInterface $em, - Twig_Environment $twig + Environment $twig ) { $this->validateName(); diff --git a/Datatable/Column/AbstractColumn.php b/Datatable/Column/AbstractColumn.php old mode 100644 new mode 100755 index f598addc..6a389bd3 --- a/Datatable/Column/AbstractColumn.php +++ b/Datatable/Column/AbstractColumn.php @@ -19,7 +19,7 @@ use Sg\DatatablesBundle\Datatable\OptionsTrait; use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\Routing\RouterInterface; -use Twig_Environment; +use Twig\Environment; abstract class AbstractColumn implements ColumnInterface { @@ -915,7 +915,7 @@ public function getTwig() /** * @return $this */ - public function setTwig(Twig_Environment $twig) + public function setTwig(Environment $twig) { $this->twig = $twig; diff --git a/Datatable/Column/ColumnBuilder.php b/Datatable/Column/ColumnBuilder.php old mode 100644 new mode 100755 index 48c277ea..99c7ac4d --- a/Datatable/Column/ColumnBuilder.php +++ b/Datatable/Column/ColumnBuilder.php @@ -17,7 +17,7 @@ use Exception; use Sg\DatatablesBundle\Datatable\Factory; use Symfony\Component\Routing\RouterInterface; -use Twig_Environment; +use Twig\Environment; class ColumnBuilder { @@ -88,7 +88,7 @@ class ColumnBuilder /** * @param string $datatableName */ - public function __construct(ClassMetadata $metadata, Twig_Environment $twig, RouterInterface $router, $datatableName, EntityManagerInterface $em) + public function __construct(ClassMetadata $metadata, Environment $twig, RouterInterface $router, $datatableName, EntityManagerInterface $em) { $this->metadata = $metadata; $this->twig = $twig; diff --git a/Datatable/DatatableFactory.php b/Datatable/DatatableFactory.php old mode 100644 new mode 100755 index 54812332..4bfed892 --- a/Datatable/DatatableFactory.php +++ b/Datatable/DatatableFactory.php @@ -17,7 +17,7 @@ use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; use Symfony\Component\Translation\TranslatorInterface; -use Twig_Environment; +use Twig\Environment; class DatatableFactory { @@ -69,7 +69,7 @@ public function __construct( TranslatorInterface $translator, RouterInterface $router, EntityManagerInterface $em, - Twig_Environment $twig + Environment $twig ) { $this->authorizationChecker = $authorizationChecker; $this->securityToken = $securityToken; diff --git a/Tests/DatatableTest.php b/Tests/DatatableTest.php old mode 100644 new mode 100755 index 360134aa..21c18e31 --- a/Tests/DatatableTest.php +++ b/Tests/DatatableTest.php @@ -17,7 +17,7 @@ use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; use Symfony\Component\Translation\TranslatorInterface; -use Twig_Environment; +use Twig\Environment; /** * @internal @@ -38,7 +38,7 @@ public function testCreate() /** @noinspection PhpUndefinedMethodInspection */ $router = $this->createMock(RouterInterface::class); /** @noinspection PhpUndefinedMethodInspection */ - $twig = $this->createMock(Twig_Environment::class); + $twig = $this->createMock(Environment::class); /** @noinspection PhpUndefinedMethodInspection */ $em = $this->getMockBuilder(EntityManager::class) diff --git a/Twig/DatatableTwigExtension.php b/Twig/DatatableTwigExtension.php old mode 100644 new mode 100755 index be96e101..7bf7b97f --- a/Twig/DatatableTwigExtension.php +++ b/Twig/DatatableTwigExtension.php @@ -18,12 +18,12 @@ use Sg\DatatablesBundle\Datatable\Filter\FilterInterface; use Symfony\Component\PropertyAccess\PropertyAccess; use Symfony\Component\PropertyAccess\PropertyAccessor; -use Twig_Environment; -use Twig_Extension; -use Twig_SimpleFilter; -use Twig_SimpleFunction; +use Twig\Environment; +use Twig\Extension\AbstractExtension; +use Twig\TwigFilter; +use Twig\TwigFunction; -class DatatableTwigExtension extends Twig_Extension +class DatatableTwigExtension extends AbstractExtension { /** * The PropertyAccessor. @@ -55,27 +55,27 @@ public function getName() public function getFunctions() { return [ - new Twig_SimpleFunction( + new TwigFunction( 'sg_datatables_render', [$this, 'datatablesRender'], ['is_safe' => ['html'], 'needs_environment' => true] ), - new Twig_SimpleFunction( + new TwigFunction( 'sg_datatables_render_html', [$this, 'datatablesRenderHtml'], ['is_safe' => ['html'], 'needs_environment' => true] ), - new Twig_SimpleFunction( + new TwigFunction( 'sg_datatables_render_js', [$this, 'datatablesRenderJs'], ['is_safe' => ['html'], 'needs_environment' => true] ), - new Twig_SimpleFunction( + new TwigFunction( 'sg_datatables_render_filter', [$this, 'datatablesRenderFilter'], ['is_safe' => ['html'], 'needs_environment' => true] ), - new Twig_SimpleFunction( + new TwigFunction( 'sg_datatables_render_multiselect_actions', [$this, 'datatablesRenderMultiselectActions'], ['is_safe' => ['html'], 'needs_environment' => true] @@ -89,7 +89,7 @@ public function getFunctions() public function getFilters() { return [ - new Twig_SimpleFilter('sg_datatables_bool_var', [$this, 'boolVar']), + new TwigFilter('sg_datatables_bool_var', [$this, 'boolVar']), ]; } @@ -102,7 +102,7 @@ public function getFilters() * * @return string */ - public function datatablesRender(Twig_Environment $twig, DatatableInterface $datatable) + public function datatablesRender(Environment $twig, DatatableInterface $datatable) { return $twig->render( '@SgDatatables/datatable/datatable.html.twig', @@ -117,7 +117,7 @@ public function datatablesRender(Twig_Environment $twig, DatatableInterface $dat * * @return string */ - public function datatablesRenderHtml(Twig_Environment $twig, DatatableInterface $datatable) + public function datatablesRenderHtml(Environment $twig, DatatableInterface $datatable) { return $twig->render( '@SgDatatables/datatable/datatable_html.html.twig', @@ -132,7 +132,7 @@ public function datatablesRenderHtml(Twig_Environment $twig, DatatableInterface * * @return string */ - public function datatablesRenderJs(Twig_Environment $twig, DatatableInterface $datatable) + public function datatablesRenderJs(Environment $twig, DatatableInterface $datatable) { return $twig->render( '@SgDatatables/datatable/datatable_js.html.twig', @@ -149,7 +149,7 @@ public function datatablesRenderJs(Twig_Environment $twig, DatatableInterface $d * * @return string */ - public function datatablesRenderFilter(Twig_Environment $twig, DatatableInterface $datatable, ColumnInterface $column, $position) + public function datatablesRenderFilter(Environment $twig, DatatableInterface $datatable, ColumnInterface $column, $position) { /** @var FilterInterface $filter */ $filter = $this->accessor->getValue($column, 'filter'); @@ -181,7 +181,7 @@ public function datatablesRenderFilter(Twig_Environment $twig, DatatableInterfac * * @return string */ - public function datatablesRenderMultiselectActions(Twig_Environment $twig, ColumnInterface $multiselectColumn, $pipeline) + public function datatablesRenderMultiselectActions(Environment $twig, ColumnInterface $multiselectColumn, $pipeline) { $parameters = []; $values = []; diff --git a/composer.json b/composer.json old mode 100644 new mode 100755 index f3acd27e..390860e0 --- a/composer.json +++ b/composer.json @@ -21,12 +21,12 @@ "php": ">=7.1", "doctrine/orm": "^2.5", "friendsofsymfony/jsrouting-bundle": "^1.6|^2.0", - "symfony/framework-bundle": "^3.4|^4.1", - "symfony/options-resolver": "^3.4|^4.1", - "symfony/property-access": "^3.4|^4.1", - "symfony/security": "^3.4|^4.1", - "symfony/translation": "^3.4|^4.1", - "twig/twig": "^2.9" + "symfony/framework-bundle": "^3.4|^4.1|^5.0", + "symfony/options-resolver": "^3.4|^4.1|^5.0", + "symfony/property-access": "^3.4|^4.1|^5.0", + "symfony/security": "^3.4|^4.1|^5.0", + "symfony/translation": "^3.4|^4.1|^5.0", + "twig/twig": "^2.9|^3.0" }, "require-dev": { "phpunit/phpunit": "5.7.*", From f0cad586c7db84fb82db15362fc843f9c77585f9 Mon Sep 17 00:00:00 2001 From: Victor Macko Date: Tue, 7 Jan 2020 02:08:29 +0000 Subject: [PATCH 2/5] Updated with additional dependencies (previously assumed would be included in other packages), and backward compatibility with translator interface. Also updated travis CI --- .travis.yml | 8 ++++++-- Datatable/AbstractDatatable.php | 9 +++++++-- Datatable/DatatableFactory.php | 9 +++++++-- Tests/DatatableTest.php | 2 +- composer.json | 7 ++++++- 5 files changed, 27 insertions(+), 8 deletions(-) mode change 100644 => 100755 .travis.yml diff --git a/.travis.yml b/.travis.yml old mode 100644 new mode 100755 index 5d1112dd..681adc0e --- a/.travis.yml +++ b/.travis.yml @@ -12,11 +12,15 @@ matrix: - php: 7.2 env: DEPENDENCIES=beta SYMFONY_REQUIRE="3.4.*" - php: 7.2 - env: DEPENDENCIES=beta SYMFONY_REQUIRE="4.3.*" + env: DEPENDENCIES=beta SYMFONY_REQUIRE="4.4.*" + - php: 7.2 + env: DEPENDENCIES=beta SYMFONY_REQUIRE="5.0.*" - php: 7.3 env: DEPENDENCIES=beta SYMFONY_REQUIRE="3.4.*" - php: 7.3 - env: DEPENDENCIES=beta SYMFONY_REQUIRE="4.3.*" + env: DEPENDENCIES=beta SYMFONY_REQUIRE="4.4.*" + - php: 7.3 + env: DEPENDENCIES=beta SYMFONY_REQUIRE="5.0.*" - php: hhvm allow_failures: - php: hhvm diff --git a/Datatable/AbstractDatatable.php b/Datatable/AbstractDatatable.php index bea38108..97e31ad8 100755 --- a/Datatable/AbstractDatatable.php +++ b/Datatable/AbstractDatatable.php @@ -19,7 +19,8 @@ use Symfony\Component\Routing\RouterInterface; use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; -use Symfony\Component\Translation\TranslatorInterface; +use Symfony\Component\Translation\TranslatorInterface as LegacyTranslatorInterface; +use Symfony\Contracts\Translation\TranslatorInterface; use Twig\Environment; abstract class AbstractDatatable implements DatatableInterface @@ -151,7 +152,7 @@ abstract class AbstractDatatable implements DatatableInterface public function __construct( AuthorizationCheckerInterface $authorizationChecker, TokenStorageInterface $securityToken, - TranslatorInterface $translator, + object $translator, RouterInterface $router, EntityManagerInterface $em, Environment $twig @@ -166,6 +167,10 @@ public function __construct( $this->authorizationChecker = $authorizationChecker; $this->securityToken = $securityToken; + + if (!($translator instanceof LegacyTranslatorInterface) && !($translator instanceof TranslatorInterface)) { + throw new \InvalidArgumentException(sprintf('The $translator argument of %s must be an instance of %s or %s, a %s was given.', static::class, LegacyTranslatorInterface::class, TranslatorInterface::class, get_class($translator))); + } $this->translator = $translator; $this->router = $router; $this->em = $em; diff --git a/Datatable/DatatableFactory.php b/Datatable/DatatableFactory.php index 4bfed892..54fd5597 100755 --- a/Datatable/DatatableFactory.php +++ b/Datatable/DatatableFactory.php @@ -16,7 +16,8 @@ use Symfony\Component\Routing\RouterInterface; use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; -use Symfony\Component\Translation\TranslatorInterface; +use Symfony\Component\Translation\TranslatorInterface as LegacyTranslatorInterface; +use Symfony\Contracts\Translation\TranslatorInterface; use Twig\Environment; class DatatableFactory @@ -66,13 +67,17 @@ class DatatableFactory public function __construct( AuthorizationCheckerInterface $authorizationChecker, TokenStorageInterface $securityToken, - TranslatorInterface $translator, + object $translator, RouterInterface $router, EntityManagerInterface $em, Environment $twig ) { $this->authorizationChecker = $authorizationChecker; $this->securityToken = $securityToken; + + if (!($translator instanceof LegacyTranslatorInterface) && !($translator instanceof TranslatorInterface)) { + throw new \InvalidArgumentException(sprintf('The $translator argument of %s must be an instance of %s or %s, a %s was given.', static::class, LegacyTranslatorInterface::class, TranslatorInterface::class, get_class($translator))); + } $this->translator = $translator; $this->router = $router; $this->em = $em; diff --git a/Tests/DatatableTest.php b/Tests/DatatableTest.php index 21c18e31..1486d20d 100755 --- a/Tests/DatatableTest.php +++ b/Tests/DatatableTest.php @@ -16,7 +16,7 @@ use Symfony\Component\Routing\RouterInterface; use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; -use Symfony\Component\Translation\TranslatorInterface; +use Symfony\Contracts\Translation\TranslatorInterface; use Twig\Environment; /** diff --git a/composer.json b/composer.json index 390860e0..dfd4cc64 100755 --- a/composer.json +++ b/composer.json @@ -21,10 +21,15 @@ "php": ">=7.1", "doctrine/orm": "^2.5", "friendsofsymfony/jsrouting-bundle": "^1.6|^2.0", + "symfony/config": "^3.4|^4.1|^5.0", + "symfony/dependency-injection": "^3.4|^4.1|^5.0", + "symfony/http-foundation": "^3.4|^4.1|^5.0", + "symfony/http-kernel": "^3.4|^4.1|^5.0", "symfony/framework-bundle": "^3.4|^4.1|^5.0", "symfony/options-resolver": "^3.4|^4.1|^5.0", "symfony/property-access": "^3.4|^4.1|^5.0", - "symfony/security": "^3.4|^4.1|^5.0", + "symfony/routing": "^3.4|^4.1|^5.0", + "symfony/security": "^3.4|^4.1", "symfony/translation": "^3.4|^4.1|^5.0", "twig/twig": "^2.9|^3.0" }, From 526beffbdf7f1718229217e725fd9170b1a003e6 Mon Sep 17 00:00:00 2001 From: Victor Macko Date: Tue, 7 Jan 2020 03:45:40 +0000 Subject: [PATCH 3/5] Updated to use security-core package specifically --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index dfd4cc64..5609891d 100755 --- a/composer.json +++ b/composer.json @@ -29,7 +29,7 @@ "symfony/options-resolver": "^3.4|^4.1|^5.0", "symfony/property-access": "^3.4|^4.1|^5.0", "symfony/routing": "^3.4|^4.1|^5.0", - "symfony/security": "^3.4|^4.1", + "symfony/security-core": "^3.4|^4.1|^5.0", "symfony/translation": "^3.4|^4.1|^5.0", "twig/twig": "^2.9|^3.0" }, From cb26da3324608ea3db5e221a946d10487c5d8b36 Mon Sep 17 00:00:00 2001 From: Victor Macko Date: Tue, 7 Jan 2020 04:12:00 +0000 Subject: [PATCH 4/5] Updated PHPUnit (so a later version of symfony/yaml can also be used) --- Tests/Column/ArrayColumnTest.php | 2 +- Tests/Response/DatatableQueryBuilderTest.php | 2 +- composer.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) mode change 100644 => 100755 Tests/Column/ArrayColumnTest.php mode change 100644 => 100755 Tests/Response/DatatableQueryBuilderTest.php diff --git a/Tests/Column/ArrayColumnTest.php b/Tests/Column/ArrayColumnTest.php old mode 100644 new mode 100755 index 9a7423f9..4394d004 --- a/Tests/Column/ArrayColumnTest.php +++ b/Tests/Column/ArrayColumnTest.php @@ -31,7 +31,7 @@ public function testArrayToString() $arrayColumn = new ArrayColumn(); $result = $this->callMethod($arrayColumn, 'arrayToString', [['a', 'b' => ['d' => new \DateTime()]]]); static::assertNotEmpty($result); - static::assertInternalType('string', $result); + static::assertIsString($result); } /** diff --git a/Tests/Response/DatatableQueryBuilderTest.php b/Tests/Response/DatatableQueryBuilderTest.php old mode 100644 new mode 100755 index 0cd77230..3838469e --- a/Tests/Response/DatatableQueryBuilderTest.php +++ b/Tests/Response/DatatableQueryBuilderTest.php @@ -67,7 +67,7 @@ final class DatatableQueryBuilderTest extends \PHPUnit\Framework\TestCase /** * {@inheritdoc} */ - protected function setUp() + protected function setUp(): void { $this->entityManager = $this->prophesize(EntityManagerInterface::class); $this->classMetadataFactory = $this->prophesize(ClassMetadataFactory::class); diff --git a/composer.json b/composer.json index 5609891d..276fb278 100755 --- a/composer.json +++ b/composer.json @@ -34,7 +34,7 @@ "twig/twig": "^2.9|^3.0" }, "require-dev": { - "phpunit/phpunit": "5.7.*", + "phpunit/phpunit": "^7.5|^8.5", "friendsofphp/php-cs-fixer": "^2.15" }, "autoload": { From 8ff49d571f44d4c5bec4182cc99ff5300b63a308 Mon Sep 17 00:00:00 2001 From: Victor Macko Date: Tue, 7 Jan 2020 06:47:01 +0000 Subject: [PATCH 5/5] Updated to remove type-hint, and use AbstractController instead --- Controller/DatatableController.php | 4 ++-- Datatable/AbstractDatatable.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) mode change 100644 => 100755 Controller/DatatableController.php diff --git a/Controller/DatatableController.php b/Controller/DatatableController.php old mode 100644 new mode 100755 index 3cdc99b2..0c6c55b2 --- a/Controller/DatatableController.php +++ b/Controller/DatatableController.php @@ -14,7 +14,7 @@ use DateTime; use Doctrine\DBAL\Types\Type; use Exception; -use Symfony\Bundle\FrameworkBundle\Controller\Controller; +use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\PropertyAccess\PropertyAccess; @@ -22,7 +22,7 @@ use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Security\Core\Exception\AccessDeniedException; -class DatatableController extends Controller +class DatatableController extends AbstractController { //------------------------------------------------- // Actions diff --git a/Datatable/AbstractDatatable.php b/Datatable/AbstractDatatable.php index 97e31ad8..49483ae5 100755 --- a/Datatable/AbstractDatatable.php +++ b/Datatable/AbstractDatatable.php @@ -152,7 +152,7 @@ abstract class AbstractDatatable implements DatatableInterface public function __construct( AuthorizationCheckerInterface $authorizationChecker, TokenStorageInterface $securityToken, - object $translator, + $translator, RouterInterface $router, EntityManagerInterface $em, Environment $twig