Loading src/Asset/S3fsCssOptimizer.php +12 −4 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ namespace Drupal\s3fs\Asset; use Drupal\Core\Asset\CssOptimizer; use Drupal\Core\Config\ConfigFactoryInterface; use Drupal\Core\File\FileUrlGeneratorInterface; /** * Optimizes a CSS asset. Loading @@ -22,10 +23,12 @@ class S3fsCssOptimizer extends CssOptimizer { * * @param \Drupal\Core\Config\ConfigFactoryInterface $configFactory * Drupal service config.factory. * @param \Drupal\Core\File\FileUrlGeneratorInterface $file_url_generator * The file URL generator service. */ public function __construct(ConfigFactoryInterface $configFactory) { if (method_exists(CssOptimizer::class, '__construct')) { parent::__construct(); public function __construct(ConfigFactoryInterface $configFactory, FileUrlGeneratorInterface $file_url_generator = NULL) { if ($file_url_generator !== NULL) { parent::__construct($file_url_generator); } $this->configFactory = $configFactory; } Loading Loading @@ -56,7 +59,12 @@ class S3fsCssOptimizer extends CssOptimizer { $path = preg_replace('`(^|/)(?!\.\./)([^/]+)/\.\./`', '$1', $path); } if (property_exists($this, 'fileUrlGenerator') && $this->fileUrlGenerator != NULL) { $url = $this->fileUrlGenerator->generateAbsoluteString($path); } else { $url = file_create_url($path); } if ($useCssjsHost && !empty($cssjsHost)) { global $base_url; Loading src/EventSubscriber/S3fsAdvAggSubscriber.php +20 −2 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ namespace Drupal\s3fs\EventSubscriber; use Drupal\advagg\Asset\AssetOptimizationEvent; use Drupal\Core\Config\ConfigFactoryInterface; use Drupal\Core\File\FileUrlGeneratorInterface; use Drupal\s3fs\Asset\S3fsCssOptimizer; use Symfony\Component\EventDispatcher\EventSubscriberInterface; Loading @@ -26,14 +27,26 @@ class S3fsAdvAggSubscriber implements EventSubscriberInterface { */ protected $rewriteFileURIBasePath; /** * The file_url_generator service. * * @var \Drupal\Core\File\FileUrlGeneratorInterface|null */ protected $fileUrlGenerator = NULL; /** * Construct the optimizer instance. * * @param \Drupal\Core\Config\ConfigFactoryInterface $configFactory * The optimizer. * @param \Drupal\Core\File\FileUrlGeneratorInterface $file_url_generator * The file URL generator service. */ public function __construct(ConfigFactoryInterface $configFactory) { public function __construct(ConfigFactoryInterface $configFactory, FileUrlGeneratorInterface $file_url_generator = NULL) { $this->configFactory = $configFactory; if ($file_url_generator !== NULL) { $this->fileUrlGenerator = $file_url_generator; } } /** Loading Loading @@ -95,7 +108,12 @@ class S3fsAdvAggSubscriber implements EventSubscriberInterface { // phpcs:disable public function rewriteFileURI($matches) { // phpcs:enable $reWriter = new S3fsCssOptimizer($this->configFactory); if ($this->fileUrlGenerator !== NULL) { $reWriter = new S3fsCssOptimizer($this->configFactory, $this->fileUrlGenerator); } else { $reWriter = new S3fsCssOptimizer($this->configFactory, NULL); } $reWriter->rewriteFileURIBasePath = $this->rewriteFileURIBasePath; return $reWriter->rewriteFileURI($matches); } Loading src/S3fsServiceProvider.php +13 −0 Original line number Diff line number Diff line Loading @@ -33,12 +33,19 @@ class S3fsServiceProvider extends ServiceProviderBase { ->setArguments([ new Reference('config.factory'), ]); if ($container->hasDefinition('file_url_generator')) { // @todo Move up to setArguments above when D9.3 is minimally supported version. $container->getDefinition('asset.css.optimizer') ->addArgument(new Reference('file_url_generator')); } } if (Settings::get('s3fs.use_s3_for_private') && $container->hasDefinition('stream_wrapper.private')) { // Replace the private stream wrapper with S3fsStream. $container->getDefinition('stream_wrapper.private') ->setClass('Drupal\s3fs\StreamWrapper\PrivateS3fsStream'); } } Loading @@ -54,6 +61,12 @@ class S3fsServiceProvider extends ServiceProviderBase { ->register('s3fs.advagg.css_subscriber', 'Drupal\s3fs\EventSubscriber\S3fsAdvAggSubscriber') ->addTag('event_subscriber') ->setArguments([new Reference('config.factory')]); if ($container->hasDefinition('file_url_generator')) { // @todo Move to setArguments above when D9.3 is minimally supported versions. $container->getDefinition('s3fs.advagg.css_subscriber') ->addArgument(new Reference('file_url_generator')); } } } Loading tests/fixtures/S3fsCssOptimizerMock.php +2 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,8 @@ if (!function_exists('file_create_url')) { * * @return string * file_create_url mocked. * * @todo Remove when D9.3 becomes minimum supported version. */ function file_create_url($path) { global $base_url; Loading tests/src/Unit/S3fsCssOptimizerTest.php +38 −12 Original line number Diff line number Diff line Loading @@ -2,7 +2,6 @@ namespace Drupal\Tests\s3fs\Unit; use Drupal\Core\DependencyInjection\ContainerBuilder; use Drupal\Tests\UnitTestCase; use Drupal\s3fs\Asset\S3fsCssOptimizer; Loading @@ -15,25 +14,31 @@ require_once __DIR__ . '/../../fixtures/S3fsCssOptimizerMock.php'; */ class S3fsCssOptimizerTest extends UnitTestCase { /** * D9.3+ file_url_generator service mock. * * @var \Drupal\Core\File\FileUrlGeneratorInterface|\PHPUnit\Framework\MockObject\MockObject|null */ protected $fileUrlGeneratorServiceMock = NULL; /** * {@inheritdoc} */ public function setUp() { parent::setUp(); // D9.3 we need to mock the FileUrlGenerator service. if (interface_exists('\Drupal\Core\File\FileUrlGeneratorInterface')) { \Drupal::unsetContainer(); $container = new ContainerBuilder(); $fileUrlGeneratorServiceMock = $this->getMockBuilder('\Drupal\Core\File\FileUrlGeneratorInterface') $this->fileUrlGeneratorServiceMock = $this->getMockBuilder('\Drupal\Core\File\FileUrlGeneratorInterface') ->disableOriginalConstructor() ->getMock(); $fileUrlGeneratorServiceMock->expects($this->any()) $this->fileUrlGeneratorServiceMock->expects($this->any()) ->method('generateAbsoluteString') ->will( $this->returnCallback(function ($arg) { return $arg; return 'http://www.example.org' . $arg; }) ); $container->set('file_url_generator', $fileUrlGeneratorServiceMock); \Drupal::setContainer($container); } } Loading @@ -51,7 +56,14 @@ class S3fsCssOptimizerTest extends UnitTestCase { ], ]); $cssOptimizer = new S3fsCssOptimizer($configFactory); if ($this->fileUrlGeneratorServiceMock !== NULL) { $cssOptimizer = new S3fsCssOptimizer($configFactory, $this->fileUrlGeneratorServiceMock); } else { // @todo Remove when D9.3 is minimally supported version. $cssOptimizer = new S3fsCssOptimizer($configFactory, NULL); } $cssOptimizer->rewriteFileURIBasePath = ''; $this->assertEquals( Loading Loading @@ -82,7 +94,14 @@ class S3fsCssOptimizerTest extends UnitTestCase { ], ]); $cssOptimizer = new S3fsCssOptimizer($configFactory); if ($this->fileUrlGeneratorServiceMock !== NULL) { $cssOptimizer = new S3fsCssOptimizer($configFactory, $this->fileUrlGeneratorServiceMock); } else { // @todo Remove when D9.3 is minimally supported version. $cssOptimizer = new S3fsCssOptimizer($configFactory, NULL); } $cssOptimizer->rewriteFileURIBasePath = ''; $this->assertEquals( Loading @@ -104,7 +123,14 @@ class S3fsCssOptimizerTest extends UnitTestCase { ], ]); $cssOptimizer = new S3fsCssOptimizer($configFactory); if ($this->fileUrlGeneratorServiceMock !== NULL) { $cssOptimizer = new S3fsCssOptimizer($configFactory, $this->fileUrlGeneratorServiceMock); } else { // @todo Remove when D9.3 is minimally supported version. $cssOptimizer = new S3fsCssOptimizer($configFactory, NULL); } $cssOptimizer->rewriteFileURIBasePath = ''; $this->assertEquals( Loading Loading
src/Asset/S3fsCssOptimizer.php +12 −4 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ namespace Drupal\s3fs\Asset; use Drupal\Core\Asset\CssOptimizer; use Drupal\Core\Config\ConfigFactoryInterface; use Drupal\Core\File\FileUrlGeneratorInterface; /** * Optimizes a CSS asset. Loading @@ -22,10 +23,12 @@ class S3fsCssOptimizer extends CssOptimizer { * * @param \Drupal\Core\Config\ConfigFactoryInterface $configFactory * Drupal service config.factory. * @param \Drupal\Core\File\FileUrlGeneratorInterface $file_url_generator * The file URL generator service. */ public function __construct(ConfigFactoryInterface $configFactory) { if (method_exists(CssOptimizer::class, '__construct')) { parent::__construct(); public function __construct(ConfigFactoryInterface $configFactory, FileUrlGeneratorInterface $file_url_generator = NULL) { if ($file_url_generator !== NULL) { parent::__construct($file_url_generator); } $this->configFactory = $configFactory; } Loading Loading @@ -56,7 +59,12 @@ class S3fsCssOptimizer extends CssOptimizer { $path = preg_replace('`(^|/)(?!\.\./)([^/]+)/\.\./`', '$1', $path); } if (property_exists($this, 'fileUrlGenerator') && $this->fileUrlGenerator != NULL) { $url = $this->fileUrlGenerator->generateAbsoluteString($path); } else { $url = file_create_url($path); } if ($useCssjsHost && !empty($cssjsHost)) { global $base_url; Loading
src/EventSubscriber/S3fsAdvAggSubscriber.php +20 −2 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ namespace Drupal\s3fs\EventSubscriber; use Drupal\advagg\Asset\AssetOptimizationEvent; use Drupal\Core\Config\ConfigFactoryInterface; use Drupal\Core\File\FileUrlGeneratorInterface; use Drupal\s3fs\Asset\S3fsCssOptimizer; use Symfony\Component\EventDispatcher\EventSubscriberInterface; Loading @@ -26,14 +27,26 @@ class S3fsAdvAggSubscriber implements EventSubscriberInterface { */ protected $rewriteFileURIBasePath; /** * The file_url_generator service. * * @var \Drupal\Core\File\FileUrlGeneratorInterface|null */ protected $fileUrlGenerator = NULL; /** * Construct the optimizer instance. * * @param \Drupal\Core\Config\ConfigFactoryInterface $configFactory * The optimizer. * @param \Drupal\Core\File\FileUrlGeneratorInterface $file_url_generator * The file URL generator service. */ public function __construct(ConfigFactoryInterface $configFactory) { public function __construct(ConfigFactoryInterface $configFactory, FileUrlGeneratorInterface $file_url_generator = NULL) { $this->configFactory = $configFactory; if ($file_url_generator !== NULL) { $this->fileUrlGenerator = $file_url_generator; } } /** Loading Loading @@ -95,7 +108,12 @@ class S3fsAdvAggSubscriber implements EventSubscriberInterface { // phpcs:disable public function rewriteFileURI($matches) { // phpcs:enable $reWriter = new S3fsCssOptimizer($this->configFactory); if ($this->fileUrlGenerator !== NULL) { $reWriter = new S3fsCssOptimizer($this->configFactory, $this->fileUrlGenerator); } else { $reWriter = new S3fsCssOptimizer($this->configFactory, NULL); } $reWriter->rewriteFileURIBasePath = $this->rewriteFileURIBasePath; return $reWriter->rewriteFileURI($matches); } Loading
src/S3fsServiceProvider.php +13 −0 Original line number Diff line number Diff line Loading @@ -33,12 +33,19 @@ class S3fsServiceProvider extends ServiceProviderBase { ->setArguments([ new Reference('config.factory'), ]); if ($container->hasDefinition('file_url_generator')) { // @todo Move up to setArguments above when D9.3 is minimally supported version. $container->getDefinition('asset.css.optimizer') ->addArgument(new Reference('file_url_generator')); } } if (Settings::get('s3fs.use_s3_for_private') && $container->hasDefinition('stream_wrapper.private')) { // Replace the private stream wrapper with S3fsStream. $container->getDefinition('stream_wrapper.private') ->setClass('Drupal\s3fs\StreamWrapper\PrivateS3fsStream'); } } Loading @@ -54,6 +61,12 @@ class S3fsServiceProvider extends ServiceProviderBase { ->register('s3fs.advagg.css_subscriber', 'Drupal\s3fs\EventSubscriber\S3fsAdvAggSubscriber') ->addTag('event_subscriber') ->setArguments([new Reference('config.factory')]); if ($container->hasDefinition('file_url_generator')) { // @todo Move to setArguments above when D9.3 is minimally supported versions. $container->getDefinition('s3fs.advagg.css_subscriber') ->addArgument(new Reference('file_url_generator')); } } } Loading
tests/fixtures/S3fsCssOptimizerMock.php +2 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,8 @@ if (!function_exists('file_create_url')) { * * @return string * file_create_url mocked. * * @todo Remove when D9.3 becomes minimum supported version. */ function file_create_url($path) { global $base_url; Loading
tests/src/Unit/S3fsCssOptimizerTest.php +38 −12 Original line number Diff line number Diff line Loading @@ -2,7 +2,6 @@ namespace Drupal\Tests\s3fs\Unit; use Drupal\Core\DependencyInjection\ContainerBuilder; use Drupal\Tests\UnitTestCase; use Drupal\s3fs\Asset\S3fsCssOptimizer; Loading @@ -15,25 +14,31 @@ require_once __DIR__ . '/../../fixtures/S3fsCssOptimizerMock.php'; */ class S3fsCssOptimizerTest extends UnitTestCase { /** * D9.3+ file_url_generator service mock. * * @var \Drupal\Core\File\FileUrlGeneratorInterface|\PHPUnit\Framework\MockObject\MockObject|null */ protected $fileUrlGeneratorServiceMock = NULL; /** * {@inheritdoc} */ public function setUp() { parent::setUp(); // D9.3 we need to mock the FileUrlGenerator service. if (interface_exists('\Drupal\Core\File\FileUrlGeneratorInterface')) { \Drupal::unsetContainer(); $container = new ContainerBuilder(); $fileUrlGeneratorServiceMock = $this->getMockBuilder('\Drupal\Core\File\FileUrlGeneratorInterface') $this->fileUrlGeneratorServiceMock = $this->getMockBuilder('\Drupal\Core\File\FileUrlGeneratorInterface') ->disableOriginalConstructor() ->getMock(); $fileUrlGeneratorServiceMock->expects($this->any()) $this->fileUrlGeneratorServiceMock->expects($this->any()) ->method('generateAbsoluteString') ->will( $this->returnCallback(function ($arg) { return $arg; return 'http://www.example.org' . $arg; }) ); $container->set('file_url_generator', $fileUrlGeneratorServiceMock); \Drupal::setContainer($container); } } Loading @@ -51,7 +56,14 @@ class S3fsCssOptimizerTest extends UnitTestCase { ], ]); $cssOptimizer = new S3fsCssOptimizer($configFactory); if ($this->fileUrlGeneratorServiceMock !== NULL) { $cssOptimizer = new S3fsCssOptimizer($configFactory, $this->fileUrlGeneratorServiceMock); } else { // @todo Remove when D9.3 is minimally supported version. $cssOptimizer = new S3fsCssOptimizer($configFactory, NULL); } $cssOptimizer->rewriteFileURIBasePath = ''; $this->assertEquals( Loading Loading @@ -82,7 +94,14 @@ class S3fsCssOptimizerTest extends UnitTestCase { ], ]); $cssOptimizer = new S3fsCssOptimizer($configFactory); if ($this->fileUrlGeneratorServiceMock !== NULL) { $cssOptimizer = new S3fsCssOptimizer($configFactory, $this->fileUrlGeneratorServiceMock); } else { // @todo Remove when D9.3 is minimally supported version. $cssOptimizer = new S3fsCssOptimizer($configFactory, NULL); } $cssOptimizer->rewriteFileURIBasePath = ''; $this->assertEquals( Loading @@ -104,7 +123,14 @@ class S3fsCssOptimizerTest extends UnitTestCase { ], ]); $cssOptimizer = new S3fsCssOptimizer($configFactory); if ($this->fileUrlGeneratorServiceMock !== NULL) { $cssOptimizer = new S3fsCssOptimizer($configFactory, $this->fileUrlGeneratorServiceMock); } else { // @todo Remove when D9.3 is minimally supported version. $cssOptimizer = new S3fsCssOptimizer($configFactory, NULL); } $cssOptimizer->rewriteFileURIBasePath = ''; $this->assertEquals( Loading