From 1ee88d583646ccf0b014e48469631da22bf44582 Mon Sep 17 00:00:00 2001 From: Matias Griese Date: Mon, 20 Aug 2018 10:51:58 +0300 Subject: [PATCH 1/7] Updated deprecated Twig code so it works in both in Twig 1.34+ and Twig 2.4+ --- CHANGELOG.md | 6 ++++++ system/src/Grav/Common/Twig/Node/TwigNodeScript.php | 6 +++--- system/src/Grav/Common/Twig/Node/TwigNodeStyle.php | 6 +++--- system/src/Grav/Common/Twig/Node/TwigNodeSwitch.php | 8 +++++++- .../src/Grav/Common/Twig/Node/TwigNodeTryCatch.php | 7 ++++++- .../Twig/TokenParser/TwigTokenParserScript.php | 2 +- .../Common/Twig/TokenParser/TwigTokenParserStyle.php | 2 +- .../Twig/TokenParser/TwigTokenParserTryCatch.php | 2 +- system/src/Grav/Common/Twig/Twig.php | 12 ++++++------ 9 files changed, 34 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 16feced8d..ccdbe3405 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +# v1.5.1 +## mm/dd/2018 + +1. [](#improved) + * Updated deprecated Twig code so it works in both in Twig 1.34+ and Twig 2.4+ + # v1.5.0 ## 08/17/2018 diff --git a/system/src/Grav/Common/Twig/Node/TwigNodeScript.php b/system/src/Grav/Common/Twig/Node/TwigNodeScript.php index 35ca20f7a..c1c02580d 100644 --- a/system/src/Grav/Common/Twig/Node/TwigNodeScript.php +++ b/system/src/Grav/Common/Twig/Node/TwigNodeScript.php @@ -14,7 +14,7 @@ class TwigNodeScript extends \Twig_Node implements \Twig_NodeOutputInterface /** * TwigNodeScript constructor. - * @param \Twig_NodeInterface|null $body + * @param \Twig_Node|null $body * @param \Twig_Node_Expression|null $file * @param \Twig_Node_Expression|null $group * @param \Twig_Node_Expression|null $priority @@ -23,12 +23,12 @@ class TwigNodeScript extends \Twig_Node implements \Twig_NodeOutputInterface * @param string|null $tag */ public function __construct( - \Twig_NodeInterface $body = null, + \Twig_Node $body = null, \Twig_Node_Expression $file = null, \Twig_Node_Expression $group = null, \Twig_Node_Expression $priority = null, \Twig_Node_Expression $attributes = null, - $lineno, + $lineno = 0, $tag = null ) { diff --git a/system/src/Grav/Common/Twig/Node/TwigNodeStyle.php b/system/src/Grav/Common/Twig/Node/TwigNodeStyle.php index 8c0b3b87c..726e5a69b 100644 --- a/system/src/Grav/Common/Twig/Node/TwigNodeStyle.php +++ b/system/src/Grav/Common/Twig/Node/TwigNodeStyle.php @@ -14,18 +14,18 @@ class TwigNodeStyle extends \Twig_Node implements \Twig_NodeOutputInterface /** * TwigNodeAssets constructor. - * @param \Twig_NodeInterface|null $body + * @param \Twig_Node|null $body * @param \Twig_Node_Expression|null $attributes * @param int $lineno * @param null $tag */ public function __construct( - \Twig_NodeInterface $body = null, + \Twig_Node $body = null, \Twig_Node_Expression $file = null, \Twig_Node_Expression $group = null, \Twig_Node_Expression $priority = null, \Twig_Node_Expression $attributes = null, - $lineno, + $lineno = 0, $tag = null ) { diff --git a/system/src/Grav/Common/Twig/Node/TwigNodeSwitch.php b/system/src/Grav/Common/Twig/Node/TwigNodeSwitch.php index 1630e5eae..97824cf03 100644 --- a/system/src/Grav/Common/Twig/Node/TwigNodeSwitch.php +++ b/system/src/Grav/Common/Twig/Node/TwigNodeSwitch.php @@ -10,7 +10,13 @@ namespace Grav\Common\Twig\Node; class TwigNodeSwitch extends \Twig_Node implements \Twig_NodeOutputInterface { - public function __construct(\Twig_NodeInterface $value, \Twig_NodeInterface $cases, \Twig_NodeInterface $default = null, $lineno, $tag = null) + public function __construct( + \Twig_Node $value, + \Twig_Node $cases, + \Twig_Node $default = null, + $lineno = 0, + $tag = null + ) { parent::__construct(array('value' => $value, 'cases' => $cases, 'default' => $default), array(), $lineno, $tag); } diff --git a/system/src/Grav/Common/Twig/Node/TwigNodeTryCatch.php b/system/src/Grav/Common/Twig/Node/TwigNodeTryCatch.php index e37c31992..ecfcdab61 100644 --- a/system/src/Grav/Common/Twig/Node/TwigNodeTryCatch.php +++ b/system/src/Grav/Common/Twig/Node/TwigNodeTryCatch.php @@ -10,7 +10,12 @@ namespace Grav\Common\Twig\Node; class TwigNodeTryCatch extends \Twig_Node { - public function __construct(\Twig_NodeInterface $try, \Twig_NodeInterface $catch = null, $lineno, $tag = null) + public function __construct( + \Twig_Node $try, + \Twig_Node $catch = null, + $lineno = 0, + $tag = null + ) { parent::__construct(array('try' => $try, 'catch' => $catch), array(), $lineno, $tag); } diff --git a/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserScript.php b/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserScript.php index 98c72e21b..fd87b1bce 100644 --- a/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserScript.php +++ b/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserScript.php @@ -27,7 +27,7 @@ class TwigTokenParserScript extends \Twig_TokenParser * * @param \Twig_Token $token A Twig_Token instance * - * @return \Twig_NodeInterface A Twig_NodeInterface instance + * @return \Twig_Node A Twig_Node instance */ public function parse(\Twig_Token $token) { diff --git a/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserStyle.php b/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserStyle.php index f207686bd..0c09ed40c 100644 --- a/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserStyle.php +++ b/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserStyle.php @@ -26,7 +26,7 @@ class TwigTokenParserStyle extends \Twig_TokenParser * * @param \Twig_Token $token A Twig_Token instance * - * @return \Twig_NodeInterface A Twig_NodeInterface instance + * @return \Twig_Node A Twig_Node instance */ public function parse(\Twig_Token $token) { diff --git a/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserTryCatch.php b/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserTryCatch.php index d639c57a0..b20586136 100644 --- a/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserTryCatch.php +++ b/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserTryCatch.php @@ -28,7 +28,7 @@ class TwigTokenParserTryCatch extends \Twig_TokenParser * * @param \Twig_Token $token A Twig_Token instance * - * @return \Twig_NodeInterface A Twig_NodeInterface instance + * @return \Twig_Node A Twig_Node instance */ public function parse(\Twig_Token $token) { diff --git a/system/src/Grav/Common/Twig/Twig.php b/system/src/Grav/Common/Twig/Twig.php index a69c1623d..c276aafcf 100644 --- a/system/src/Grav/Common/Twig/Twig.php +++ b/system/src/Grav/Common/Twig/Twig.php @@ -125,10 +125,10 @@ class Twig if ($config->get('system.twig.undefined_functions')) { $this->twig->registerUndefinedFunctionCallback(function ($name) { if (function_exists($name)) { - return new \Twig_Function_Function($name); + return new \Twig_SimpleFunction($name, $name); } - return new \Twig_Function_Function(function () { + return new \Twig_SimpleFunction($name, function () { }); }); } @@ -136,10 +136,10 @@ class Twig if ($config->get('system.twig.undefined_filters')) { $this->twig->registerUndefinedFilterCallback(function ($name) { if (function_exists($name)) { - return new \Twig_Filter_Function($name); + return new \Twig_SimpleFilter($name, $name); } - return new \Twig_Filter_Function(function () { + return new \Twig_SimpleFilter($name, function () { }); }); } @@ -148,7 +148,7 @@ class Twig // set default date format if set in config if ($config->get('system.pages.dateformat.long')) { - $this->twig->getExtension('core')->setDateFormat($config->get('system.pages.dateformat.long')); + $this->twig->getExtension('Twig_Extension_Core')->setDateFormat($config->get('system.pages.dateformat.long')); } // enable the debug extension if required if ($config->get('system.twig.debug')) { @@ -162,7 +162,7 @@ class Twig $pages = $this->grav['pages']; // Set some standard variables for twig - $this->twig_vars = $this->twig_vars + [ + $this->twig_vars += [ 'config' => $config, 'system' => $config->get('system'), 'theme' => $config->get('theme'), From 2734b2f605807c6174cf149fca1daa8eb914a159 Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Tue, 21 Aug 2018 14:09:25 -0600 Subject: [PATCH 2/7] Broken handling of user folder in Grav URI object #2151 --- CHANGELOG.md | 6 ++++++ system/src/Grav/Common/Uri.php | 5 ----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 16feced8d..3b5963dad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +# v1.5.1 +## mm/dd/2018 + +1. [](#bugfix) + * Broken handling of user folder in Grav URI object [2151](https://github.com/getgrav/grav/issues/2151) + # v1.5.0 ## 08/17/2018 diff --git a/system/src/Grav/Common/Uri.php b/system/src/Grav/Common/Uri.php index 4bb6bc7b1..35e9d3b3f 100644 --- a/system/src/Grav/Common/Uri.php +++ b/system/src/Grav/Common/Uri.php @@ -1336,11 +1336,6 @@ class Uri $scriptPath = str_replace('\\', '/', $_SERVER['PHP_SELF']); $rootPath = str_replace(' ', '%20', rtrim(substr($scriptPath, 0, strpos($scriptPath, 'index.php')), '/')); - // check if userdir in the path and workaround PHP bug with PHP_SELF - if (strpos($this->uri, '/~') !== false && strpos($scriptPath, '/~') === false) { - $rootPath = substr($this->uri, 0, strpos($this->uri, '/', 1)) . $rootPath; - } - return $rootPath; } From 6b224823f15126ef2d43dc786cb0d23765f5993f Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Tue, 21 Aug 2018 14:09:33 -0600 Subject: [PATCH 3/7] typo --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3b5963dad..0f9d98c9c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ ## mm/dd/2018 1. [](#bugfix) - * Broken handling of user folder in Grav URI object [2151](https://github.com/getgrav/grav/issues/2151) + * Broken handling of user folder in Grav URI object [#2151](https://github.com/getgrav/grav/issues/2151) # v1.5.0 ## 08/17/2018 From 6cc6e518782b164cae24d7286713e75152ea6549 Mon Sep 17 00:00:00 2001 From: Matias Griese Date: Wed, 22 Aug 2018 20:59:00 +0300 Subject: [PATCH 4/7] Added static `Grav\Common\Yaml` class which should be used instead of `Symfony\Component\Yaml\Yaml` --- CHANGELOG.md | 2 ++ system/src/Grav/Common/Yaml.php | 47 +++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 system/src/Grav/Common/Yaml.php diff --git a/CHANGELOG.md b/CHANGELOG.md index 8178f4ff4..181fa52df 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ # v1.5.1 ## mm/dd/2018 +1. [](#new) + * Added static `Grav\Common\Yaml` class which should be used instead of `Symfony\Component\Yaml\Yaml` 1. [](#improved) * Updated deprecated Twig code so it works in both in Twig 1.34+ and Twig 2.4+ 1. [](#bugfix) diff --git a/system/src/Grav/Common/Yaml.php b/system/src/Grav/Common/Yaml.php new file mode 100644 index 000000000..b67a23d7d --- /dev/null +++ b/system/src/Grav/Common/Yaml.php @@ -0,0 +1,47 @@ +decode($data); + } + + public static function dump($data) + { + if (null === static::$yaml) { + static::init(); + } + + return static::$yaml->encode($data); + } + + private static function init() + { + $config = [ + 'inline' => 5, + 'indent' => 2, + 'native' => true, + 'compat' => true + ]; + + static::$yaml = new YamlFormatter($config); + } +} From 41f488f8da3f11f8445b9232cb9a84656d50b885 Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Wed, 22 Aug 2018 12:42:45 -0600 Subject: [PATCH 5/7] Switch to Grav YAML wrapper that supports native and fallback YAML libs --- CHANGELOG.md | 1 + system/src/Grav/Common/Data/Validation.php | 16 ++-------------- system/src/Grav/Common/Page/Media.php | 2 +- system/src/Grav/Common/Page/Page.php | 4 +--- system/src/Grav/Common/Twig/TwigExtension.php | 7 ++++--- system/src/Grav/Common/Yaml.php | 4 ++-- .../Framework/File/Formatter/YamlFormatter.php | 6 +++--- 7 files changed, 14 insertions(+), 26 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 181fa52df..13f8ce034 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ * Added static `Grav\Common\Yaml` class which should be used instead of `Symfony\Component\Yaml\Yaml` 1. [](#improved) * Updated deprecated Twig code so it works in both in Twig 1.34+ and Twig 2.4+ + * Switched to new Grav Yaml class to support Native + Fallback YAML libraries 1. [](#bugfix) * Broken handling of user folder in Grav URI object [#2151](https://github.com/getgrav/grav/issues/2151) diff --git a/system/src/Grav/Common/Data/Validation.php b/system/src/Grav/Common/Data/Validation.php index 3d982b749..78eac54ec 100644 --- a/system/src/Grav/Common/Data/Validation.php +++ b/system/src/Grav/Common/Data/Validation.php @@ -10,8 +10,7 @@ namespace Grav\Common\Data; use Grav\Common\Grav; use Grav\Common\Utils; -use Symfony\Component\Yaml\Exception\ParseException; -use Symfony\Component\Yaml\Yaml; +use Grav\Common\Yaml; use RocketTheme\Toolbox\Compat\Yaml\Yaml as FallbackYaml; class Validation @@ -649,19 +648,8 @@ class Validation return $value; } - try { - return (array) Yaml::parse($value); - } catch (ParseException $e) { - // If YAML compatibility mode is set on, fall back to older YAML parser. - if (Grav::instance()['config']->get('system.strict_mode.yaml_compat', true)) { - try { - return (array) FallbackYaml::parse($value); - } catch (ParseException $e2) { - } - } + return (array) Yaml::parse($value); - return $value; - } } /** diff --git a/system/src/Grav/Common/Page/Media.php b/system/src/Grav/Common/Page/Media.php index 841e667b1..e714f7b79 100644 --- a/system/src/Grav/Common/Page/Media.php +++ b/system/src/Grav/Common/Page/Media.php @@ -9,11 +9,11 @@ namespace Grav\Common\Page; use Grav\Common\Grav; +use Grav\Common\Yaml; use Grav\Common\Page\Medium\AbstractMedia; use Grav\Common\Page\Medium\GlobalMedia; use Grav\Common\Page\Medium\MediumFactory; use RocketTheme\Toolbox\File\File; -use Symfony\Component\Yaml\Yaml; class Media extends AbstractMedia { diff --git a/system/src/Grav/Common/Page/Page.php b/system/src/Grav/Common/Page/Page.php index b1c8b9775..d79dc8746 100644 --- a/system/src/Grav/Common/Page/Page.php +++ b/system/src/Grav/Common/Page/Page.php @@ -15,7 +15,6 @@ use Grav\Common\Data\Blueprint; use Grav\Common\File\CompiledYamlFile; use Grav\Common\Filesystem\Folder; use Grav\Common\Grav; -use Grav\Common\Language\Language; use Grav\Common\Markdown\Parsedown; use Grav\Common\Markdown\ParsedownExtra; use Grav\Common\Page\Interfaces\PageInterface; @@ -23,10 +22,9 @@ use Grav\Common\Media\Traits\MediaTrait; use Grav\Common\Taxonomy; use Grav\Common\Uri; use Grav\Common\Utils; +use Grav\Common\Yaml; use RocketTheme\Toolbox\Event\Event; use RocketTheme\Toolbox\File\MarkdownFile; -use Symfony\Component\Yaml\Exception\ParseException; -use Symfony\Component\Yaml\Yaml; define('PAGE_ORDER_PREFIX_REGEX', '/^[0-9]+\./u'); diff --git a/system/src/Grav/Common/Twig/TwigExtension.php b/system/src/Grav/Common/Twig/TwigExtension.php index 3152656dc..fbcea7cc5 100644 --- a/system/src/Grav/Common/Twig/TwigExtension.php +++ b/system/src/Grav/Common/Twig/TwigExtension.php @@ -18,11 +18,11 @@ use Grav\Common\Twig\TokenParser\TwigTokenParserTryCatch; use Grav\Common\Twig\TokenParser\TwigTokenParserMarkdown; use Grav\Common\User\User; use Grav\Common\Utils; +use Grav\Common\Yaml; use Grav\Common\Markdown\Parsedown; use Grav\Common\Markdown\ParsedownExtra; use Grav\Common\Helpers\Base32; use RocketTheme\Toolbox\ResourceLocator\UniformResourceLocator; -use Symfony\Component\Yaml\Yaml; class TwigExtension extends \Twig_Extension implements \Twig_Extension_GlobalsInterface { @@ -1297,11 +1297,12 @@ class TwigExtension extends \Twig_Extension implements \Twig_Extension_GlobalsIn * Dump/Encode data into YAML format * * @param $data + * @param $inline integer number of levels of inline syntax * @return mixed */ - public function yamlEncodeFilter($data) + public function yamlEncodeFilter($data, $inline = 10) { - return Yaml::dump($data, 10); + return Yaml::dump($data, $inline); } /** diff --git a/system/src/Grav/Common/Yaml.php b/system/src/Grav/Common/Yaml.php index b67a23d7d..2c43f73ab 100644 --- a/system/src/Grav/Common/Yaml.php +++ b/system/src/Grav/Common/Yaml.php @@ -24,13 +24,13 @@ abstract class Yaml return static::$yaml->decode($data); } - public static function dump($data) + public static function dump($data, $inline = null, $indent = null) { if (null === static::$yaml) { static::init(); } - return static::$yaml->encode($data); + return static::$yaml->encode($data, $inline, $indent); } private static function init() diff --git a/system/src/Grav/Framework/File/Formatter/YamlFormatter.php b/system/src/Grav/Framework/File/Formatter/YamlFormatter.php index 858fbea5f..c5fd1fa24 100644 --- a/system/src/Grav/Framework/File/Formatter/YamlFormatter.php +++ b/system/src/Grav/Framework/File/Formatter/YamlFormatter.php @@ -58,13 +58,13 @@ class YamlFormatter implements FormatterInterface /** * {@inheritdoc} */ - public function encode($data) + public function encode($data, $inline = null, $indent = null) { try { return (string) YamlParser::dump( $data, - $this->config['inline'], - $this->config['indent'], + $inline ?: $this->config['inline'], + $indent ?: $this->config['indent'], YamlParser::DUMP_EXCEPTION_ON_INVALID_TYPE ); } catch (DumpException $e) { From 5ac518f3111a831b639a532d864a8b4357b3aa33 Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Wed, 22 Aug 2018 12:54:45 -0600 Subject: [PATCH 6/7] cast inline/indent to int --- system/src/Grav/Framework/File/Formatter/YamlFormatter.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/system/src/Grav/Framework/File/Formatter/YamlFormatter.php b/system/src/Grav/Framework/File/Formatter/YamlFormatter.php index c5fd1fa24..21454ae49 100644 --- a/system/src/Grav/Framework/File/Formatter/YamlFormatter.php +++ b/system/src/Grav/Framework/File/Formatter/YamlFormatter.php @@ -63,8 +63,8 @@ class YamlFormatter implements FormatterInterface try { return (string) YamlParser::dump( $data, - $inline ?: $this->config['inline'], - $indent ?: $this->config['indent'], + $inline ? (int) $inline : $this->config['inline'], + $indent ? (int) $indent : $this->config['indent'], YamlParser::DUMP_EXCEPTION_ON_INVALID_TYPE ); } catch (DumpException $e) { From 05863276ef7cfccca9e197a9e70ae731964b7d45 Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Thu, 23 Aug 2018 13:02:37 -0600 Subject: [PATCH 7/7] prepare for release --- CHANGELOG.md | 2 +- system/defines.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 13f8ce034..23ea6acb0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,5 @@ # v1.5.1 -## mm/dd/2018 +## 08/23/2018 1. [](#new) * Added static `Grav\Common\Yaml` class which should be used instead of `Symfony\Component\Yaml\Yaml` diff --git a/system/defines.php b/system/defines.php index fe02c9e72..8caf4c9ec 100644 --- a/system/defines.php +++ b/system/defines.php @@ -8,7 +8,7 @@ // Some standard defines define('GRAV', true); -define('GRAV_VERSION', '1.5.0'); +define('GRAV_VERSION', '1.5.1'); define('GRAV_TESTING', false); define('DS', '/');