From 99c6a7813407b61ce22326dbb5484c2f413a572b Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Mon, 28 Oct 2019 15:40:06 -0600 Subject: [PATCH 1/2] ixed exception caused by missing template type based on `Accept:` header #2705 --- CHANGELOG.md | 1 + system/src/Grav/Common/Twig/Twig.php | 40 +++++++++++++++------------- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3d70b9902..ef0c89f72 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ * Updated built-in `composer.phar` to latest `1.9.0` * Updated vendor libraries 1. [](#bugfix) + * Fixed exception caused by missing template type based on `Accept:` header [#2705](https://github.com/getgrav/grav/issues/2705) * Fixed `Page::untranslatedLanguages()` not being symmetrical to `Page::translatedLanguages()` * Fixed `Flex Pages` not calling `onPageProcessed` event when cached * Fixed phpstan issues in Framework up to level 7 diff --git a/system/src/Grav/Common/Twig/Twig.php b/system/src/Grav/Common/Twig/Twig.php index 63e769061..2984d6652 100644 --- a/system/src/Grav/Common/Twig/Twig.php +++ b/system/src/Grav/Common/Twig/Twig.php @@ -290,17 +290,15 @@ class Twig $twig_vars['page'] = $item; $twig_vars['media'] = $item->media(); $twig_vars['header'] = $item->header(); - $local_twig = clone $this->twig; $output = ''; + try { // Process Modular Twig if ($item->modularTwig()) { $twig_vars['content'] = $content; - $extension = $item->templateFormat(); - $extension = $extension ? ".{$extension}.twig" : TEMPLATE_EXT; - $template = $item->template() . $extension; + $template = $this->getPageTwigTemplate($item); $output = $content = $local_twig->render($template, $twig_vars); } @@ -310,8 +308,9 @@ class Twig $this->setTemplate($name, $content); $output = $local_twig->render($name, $twig_vars); } + } catch (LoaderError $e) { - throw new \RuntimeException($e->getRawMessage(), 404, $e); + throw new \RuntimeException($e->getRawMessage(), 400, $e); } return $output; @@ -394,7 +393,6 @@ class Twig $twig_vars['header'] = $page->header(); $twig_vars['media'] = $page->media(); $twig_vars['content'] = $content; - $ext = '.' . ($format ?: 'html') . TWIG_EXT; // determine if params are set, if so disable twig cache $params = $this->grav['uri']->params(null, true); @@ -403,23 +401,13 @@ class Twig } // Get Twig template layout - $template = $this->template($page->template() . $ext); + $template = $this->getPageTwigTemplate($page, $format); try { $output = $this->twig->render($template, $vars + $twig_vars); } catch (LoaderError $e) { $error_msg = $e->getMessage(); - // Try html version of this template if initial template was NOT html - if ($ext !== '.html' . TWIG_EXT) { - try { - $page->templateFormat('html'); - $output = $this->twig->render($page->template() . '.html' . TWIG_EXT, $vars + $twig_vars); - } catch (LoaderError $e) { - throw new \RuntimeException($error_msg, 400, $e); - } - } else { - throw new \RuntimeException($error_msg, 400, $e); - } + throw new \RuntimeException($error_msg, 400, $e); } return $output; @@ -460,6 +448,22 @@ class Twig return $this->template ?? $template; } + public function getPageTwigTemplate($page, $format = null) + { + $template = $page->template(); + $extension = $format ?: $page->templateFormat(); + $twig_extension = $extension ? '.'. $extension .TWIG_EXT : TEMPLATE_EXT; + $template_file = $this->template($page->template() . $twig_extension); + + if ($this->twig->getLoader()->exists($template_file)) { + return $template_file; + } else { + // Default to HTML + $page->templateFormat('html'); + return $template . TEMPLATE_EXT; + } + } + /** * Overrides the autoescape setting * From 4e227fcae5e484d10eee3fb420c8c023abc93830 Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Mon, 28 Oct 2019 15:40:17 -0600 Subject: [PATCH 2/2] minor vendor updates --- composer.json | 2 +- composer.lock | 53 ++++++++++++++++++++++++++------------------------- 2 files changed, 28 insertions(+), 27 deletions(-) diff --git a/composer.json b/composer.json index 16baadf62..f7e9f01de 100644 --- a/composer.json +++ b/composer.json @@ -45,7 +45,7 @@ "donatj/phpuseragentparser": "~0.10", "pimple/pimple": "~3.2", "rockettheme/toolbox": "~1.4", - "maximebf/debugbar": "~1.15", + "maximebf/debugbar": "~1.0", "league/climate": "^3.4", "antoligy/dom-string-iterators": "^1.0", "miljar/php-exif": "^0.6.4", diff --git a/composer.lock b/composer.lock index d4fa80cb1..31b16f8e2 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "651a29a09418144e8b0d47bade1e807f", + "content-hash": "991d112eb1e4ebdb5e78e295c4034918", "packages": [ { "name": "antoligy/dom-string-iterators", @@ -108,16 +108,16 @@ }, { "name": "doctrine/cache", - "version": "v1.8.0", + "version": "v1.8.1", "source": { "type": "git", "url": "https://github.com/doctrine/cache.git", - "reference": "d768d58baee9a4862ca783840eca1b9add7a7f57" + "reference": "d4374ae95b36062d02ef310100ed33d78738d76c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/d768d58baee9a4862ca783840eca1b9add7a7f57", - "reference": "d768d58baee9a4862ca783840eca1b9add7a7f57", + "url": "https://api.github.com/repos/doctrine/cache/zipball/d4374ae95b36062d02ef310100ed33d78738d76c", + "reference": "d4374ae95b36062d02ef310100ed33d78738d76c", "shasum": "" }, "require": { @@ -152,6 +152,10 @@ "MIT" ], "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, { "name": "Roman Borschel", "email": "roman@code-factory.org" @@ -160,10 +164,6 @@ "name": "Benjamin Eberlei", "email": "kontakt@beberlei.de" }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, { "name": "Jonathan Wage", "email": "jonwage@gmail.com" @@ -179,7 +179,7 @@ "cache", "caching" ], - "time": "2018-08-21T18:01:43+00:00" + "time": "2019-10-28T09:31:32+00:00" }, { "name": "doctrine/collections", @@ -1690,16 +1690,16 @@ }, { "name": "psr/log", - "version": "1.1.0", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd" + "reference": "bf73deb2b3b896a9d9c75f3f0d88185d2faa27e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", - "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", + "url": "https://api.github.com/repos/php-fig/log/zipball/bf73deb2b3b896a9d9c75f3f0d88185d2faa27e2", + "reference": "bf73deb2b3b896a9d9c75f3f0d88185d2faa27e2", "shasum": "" }, "require": { @@ -1708,7 +1708,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.1.x-dev" } }, "autoload": { @@ -1733,7 +1733,7 @@ "psr", "psr-3" ], - "time": "2018-11-20T15:27:04+00:00" + "time": "2019-10-25T08:06:51+00:00" }, { "name": "psr/simple-cache", @@ -3906,16 +3906,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.2.4", + "version": "v4.2.5", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "97e59c7a16464196a8b9c77c47df68e4a39a45c4" + "reference": "b76bbc3c51f22c570648de48e8c2d941ed5e2cf2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/97e59c7a16464196a8b9c77c47df68e4a39a45c4", - "reference": "97e59c7a16464196a8b9c77c47df68e4a39a45c4", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/b76bbc3c51f22c570648de48e8c2d941ed5e2cf2", + "reference": "b76bbc3c51f22c570648de48e8c2d941ed5e2cf2", "shasum": "" }, "require": { @@ -3923,6 +3923,7 @@ "php": ">=7.0" }, "require-dev": { + "ircmaxell/php-yacc": "0.0.4", "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0" }, "bin": [ @@ -3953,7 +3954,7 @@ "parser", "php" ], - "time": "2019-09-01T07:51:21+00:00" + "time": "2019-10-25T18:33:07+00:00" }, { "name": "ocramius/package-versions", @@ -4747,16 +4748,16 @@ }, { "name": "phpunit/phpunit", - "version": "7.5.16", + "version": "7.5.17", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "316afa6888d2562e04aeb67ea7f2017a0eb41661" + "reference": "4c92a15296e58191a4cd74cff3b34fc8e374174a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/316afa6888d2562e04aeb67ea7f2017a0eb41661", - "reference": "316afa6888d2562e04aeb67ea7f2017a0eb41661", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/4c92a15296e58191a4cd74cff3b34fc8e374174a", + "reference": "4c92a15296e58191a4cd74cff3b34fc8e374174a", "shasum": "" }, "require": { @@ -4827,7 +4828,7 @@ "testing", "xunit" ], - "time": "2019-09-14T09:08:39+00:00" + "time": "2019-10-28T10:37:36+00:00" }, { "name": "sebastian/code-unit-reverse-lookup",