]> Raphaƫl G. Git Repositories - packbundle/blobdiff - Twig/PackTokenParser.php
Add slugger util
[packbundle] / Twig / PackTokenParser.php
index 9fffebb585dce3c5051159c03a28590467a9a471..9f2bf145421fe4ba5e67b2e74c7b4614d66e3510 100644 (file)
@@ -2,8 +2,10 @@
 
 namespace Rapsys\PackBundle\Twig;
 
 
 namespace Rapsys\PackBundle\Twig;
 
-use Symfony\Component\HttpKernel\Config\FileLocator;
 use Symfony\Component\Asset\PackageInterface;
 use Symfony\Component\Asset\PackageInterface;
+use Symfony\Component\Filesystem\Exception\IOExceptionInterface;
+use Symfony\Component\Filesystem\Filesystem;
+use Symfony\Component\HttpKernel\Config\FileLocator;
 use Twig\Error\Error;
 use Twig\Node\Expression\AssignNameExpression;
 use Twig\Node\Node;
 use Twig\Error\Error;
 use Twig\Node\Expression\AssignNameExpression;
 use Twig\Node\Node;
@@ -251,46 +253,30 @@ class PackTokenParser extends AbstractTokenParser {
                        $output = $this->getLocated($output, $token->getLine(), $stream->getSourceContext());
                }
 
                        $output = $this->getLocated($output, $token->getLine(), $stream->getSourceContext());
                }
 
+               //Get filesystem
+               $filesystem = new Filesystem();
+
                //Create output dir if not present
                if (!is_dir($dir = dirname($output))) {
                        try {
                //Create output dir if not present
                if (!is_dir($dir = dirname($output))) {
                        try {
-                               //XXX: set as 0777, symfony umask (0022) will reduce rights (0755)
-                               if (mkdir($dir, 0777, true) === false) {
-                                       throw new \Exception();
-                               }
-                       } catch (\Exception $e) {
+                               //Create dir
+                               //XXX: set as 0775, symfony umask (0022) will reduce rights (0755)
+                           $filesystem->mkdir($dir, 0775);
+                       } catch (IOExceptionInterface $e) {
+                               //Throw error
                                throw new Error(sprintf('Output directory "%s" do not exists and unable to create it', $dir), $token->getLine(), $stream->getSourceContext(), $e);
                        }
                }
 
                //Send file content
                                throw new Error(sprintf('Output directory "%s" do not exists and unable to create it', $dir), $token->getLine(), $stream->getSourceContext(), $e);
                        }
                }
 
                //Send file content
-               //XXX: to avoid partial content in reverse cache we use atomic rotation write, unlink and move
                try {
                try {
-                       if (file_put_contents($output.'.new', $content) === false) {
-                               throw new \Exception();
-                       }
-               } catch(\Exception $e) {
-                       throw new Error(sprintf('Unable to write to: %s', $output.'.new'), $token->getLine(), $stream->getSourceContext(), $e);
-               }
-
-               //Remove old file
-               if (is_file($output)) {
-                       try {
-                               if (unlink($output) === false) {
-                                       throw new \Exception();
-                               }
-                       } catch (\Exception $e) {
-                               throw new Error(sprintf('Unable to unlink: %s', $output), $token->getLine(), $stream->getSourceContext(), $e);
-                       }
-               }
-
-               //Rename it
-               try {
-                       if (rename($output.'.new', $output) === false) {
-                               throw new \Exception();
-                       }
-               } catch (\Exception $e) {
-                       throw new Error(sprintf('Unable to rename: %s to %s', $output.'.new', $output), $token->getLine(), $stream->getSourceContext(), $e);
+                       //Write content to file
+                       //XXX: this call is (maybe) atomic
+                       //XXX: see https://symfony.com/doc/current/components/filesystem.html#dumpfile
+                       $filesystem->dumpFile($output, $content);
+               } catch (IOExceptionInterface $e) {
+                       //Throw error
+                       throw new Error(sprintf('Unable to write to: %s', $output), $token->getLine(), $stream->getSourceContext(), $e);
                }
 
                //Set name in context key
                }
 
                //Set name in context key
@@ -328,6 +314,9 @@ class PackTokenParser extends AbstractTokenParser {
         * @param \Exception prev   The previous exception
         *
         * @return string The resolved file path
         * @param \Exception prev   The previous exception
         *
         * @return string The resolved file path
+        *
+        * @todo Try retrive public dir from the member function BundleNameBundle::getPublicDir() return value ?
+        * @xxx see https://symfony.com/doc/current/bundles.html#overridding-the-bundle-directory-structure
         */
        public function getLocated($file, int $lineno = 0, Source $source = null, \Exception $prev = null) {
                /*TODO: add a @jquery magic feature ?
         */
        public function getLocated($file, int $lineno = 0, Source $source = null, \Exception $prev = null) {
                /*TODO: add a @jquery magic feature ?
@@ -366,7 +355,7 @@ class PackTokenParser extends AbstractTokenParser {
                //Resolve bundle prefix
                try {
                        $prefix = $this->locator->locate($bundle);
                //Resolve bundle prefix
                try {
                        $prefix = $this->locator->locate($bundle);
-                       //Catch bundle does not exist or is not enabled exception
+               //Catch bundle does not exist or is not enabled exception
                } catch(\InvalidArgumentException $e) {
                        //Fix lowercase first bundle character
                        if ($bundle[1] > 'Z' || $bundle[1] < 'A') {
                } catch(\InvalidArgumentException $e) {
                        //Fix lowercase first bundle character
                        if ($bundle[1] > 'Z' || $bundle[1] < 'A') {