mirror of
https://github.com/getgrav/grav.git
synced 2026-03-04 19:41:36 +01:00
Merge branch 'release/1.3.3'
This commit is contained in:
@@ -2,7 +2,8 @@ language: php
|
||||
php:
|
||||
- '5.5'
|
||||
- '5.6'
|
||||
- '7.0'
|
||||
- '7.0.21'
|
||||
- '7.1'
|
||||
branches:
|
||||
only:
|
||||
- develop
|
||||
|
||||
23
CHANGELOG.md
23
CHANGELOG.md
@@ -1,3 +1,26 @@
|
||||
# v1.3.3
|
||||
## 09/07/2017
|
||||
|
||||
1. [](#new)
|
||||
* Added support for 2-Factor Authentication in admin profile
|
||||
* Added `gaussianBlur` media method [#1623](https://github.com/getgrav/grav/pull/1623)
|
||||
* Added new `|chunk_split()`, `|basename`, and `|dirname` Twig filter
|
||||
* Added new `tl` Twig filter/function to support specific translations [#1618](https://github.com/getgrav/grav/issues/1618)
|
||||
1. [](#improved)
|
||||
* User `authorization` now requires a check for `authenticated` - REQUIRED: `Login v2.4.0`
|
||||
* Added options to `Page::summary()` to support size without HTML tags [#1554](https://github.com/getgrav/grav/issues/1554)
|
||||
* Forced `natsort` on plugins to ensure consistent plugin load ordering across platforms [#1614](https://github.com/getgrav/grav/issues/1614)
|
||||
* Use new `multilevel` field to handle Asset Collections [#1201](https://github.com/getgrav/grav-plugin-admin/issues/1201)
|
||||
* Added support for redis `password` option [#1620](https://github.com/getgrav/grav/issues/1620)
|
||||
* Use 302 rather than 301 redirects by default [#1619](https://github.com/getgrav/grav/issues/1619)
|
||||
* GPM Installer will try to load alphanumeric version of the class if no standard class found [#1630](https://github.com/getgrav/grav/issues/1630)
|
||||
* Add current page position to `User` class [#1632](https://github.com/getgrav/grav/issues/1632)
|
||||
* Added option to enable case insensitive URLs [#1638](https://github.com/getgrav/grav/issues/1638)
|
||||
* Updated vendor libraries
|
||||
* Updated `travis.yml` to add support for PHP 7.1 as well as 7.0.21 for test suite
|
||||
1. [](#bugfix)
|
||||
* Fixed UTF8 2 character support in `Page::summary()` [#1554](https://github.com/getgrav/grav/issues/1554)
|
||||
|
||||
# v1.3.2
|
||||
## 08/16/2017
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2014 Grav
|
||||
Copyright (c) 2017 Grav
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
@@ -15,12 +15,12 @@
|
||||
"symfony/event-dispatcher": "~2.8",
|
||||
"symfony/var-dumper": "~2.8",
|
||||
"symfony/polyfill-iconv": "~1.0",
|
||||
"doctrine/cache": "~1.5",
|
||||
"doctrine/cache": "1.6.*",
|
||||
"doctrine/collections": "1.3",
|
||||
"filp/whoops": "~2.0",
|
||||
"matthiasmullie/minify": "^1.3",
|
||||
"monolog/monolog": "~1.0",
|
||||
"gregwar/image": "~2.0",
|
||||
"gregwar/image": "2.*",
|
||||
"donatj/phpuseragentparser": "~0.3",
|
||||
"pimple/pimple": "~3.0",
|
||||
"rockettheme/toolbox": "~1.0",
|
||||
|
||||
146
composer.lock
generated
146
composer.lock
generated
@@ -4,7 +4,7 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "550adaab2ad1daea868cb5568ccbe19d",
|
||||
"content-hash": "093b6264edbdec148beb6ee2461a5e72",
|
||||
"packages": [
|
||||
{
|
||||
"name": "antoligy/dom-string-iterators",
|
||||
@@ -641,16 +641,16 @@
|
||||
},
|
||||
{
|
||||
"name": "maximebf/debugbar",
|
||||
"version": "1.13.1",
|
||||
"version": "v1.14.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/maximebf/php-debugbar.git",
|
||||
"reference": "afee79a236348e39a44cb837106b7c5b4897ac2a"
|
||||
"reference": "e23a98f2d65607d8aa6c7b409a513f8fdf4acdde"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/afee79a236348e39a44cb837106b7c5b4897ac2a",
|
||||
"reference": "afee79a236348e39a44cb837106b7c5b4897ac2a",
|
||||
"url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/e23a98f2d65607d8aa6c7b409a513f8fdf4acdde",
|
||||
"reference": "e23a98f2d65607d8aa6c7b409a513f8fdf4acdde",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -669,7 +669,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.13-dev"
|
||||
"dev-master": "1.14-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -698,7 +698,7 @@
|
||||
"debug",
|
||||
"debugbar"
|
||||
],
|
||||
"time": "2017-01-05T08:46:19+00:00"
|
||||
"time": "2017-08-17T07:17:00+00:00"
|
||||
},
|
||||
{
|
||||
"name": "miljar/php-exif",
|
||||
@@ -981,16 +981,16 @@
|
||||
},
|
||||
{
|
||||
"name": "rockettheme/toolbox",
|
||||
"version": "1.3.5",
|
||||
"version": "1.3.7",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/rockettheme/toolbox.git",
|
||||
"reference": "1be0986127007c9691345729607f94ba0e8a5120"
|
||||
"reference": "670ad362eb948d14ebc589b957965cf178674a33"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/rockettheme/toolbox/zipball/1be0986127007c9691345729607f94ba0e8a5120",
|
||||
"reference": "1be0986127007c9691345729607f94ba0e8a5120",
|
||||
"url": "https://api.github.com/repos/rockettheme/toolbox/zipball/670ad362eb948d14ebc589b957965cf178674a33",
|
||||
"reference": "670ad362eb948d14ebc589b957965cf178674a33",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1025,7 +1025,7 @@
|
||||
"php",
|
||||
"rockettheme"
|
||||
],
|
||||
"time": "2017-05-22T13:09:53+00:00"
|
||||
"time": "2017-08-28T20:31:35+00:00"
|
||||
},
|
||||
{
|
||||
"name": "seld/cli-prompt",
|
||||
@@ -1077,16 +1077,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/console",
|
||||
"version": "v2.8.26",
|
||||
"version": "v2.8.27",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/console.git",
|
||||
"reference": "32a3c6b3398de5db8ed381f4ef92970c59c2fcdd"
|
||||
"reference": "c0807a2ca978e64d8945d373a9221a5c35d1a253"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/console/zipball/32a3c6b3398de5db8ed381f4ef92970c59c2fcdd",
|
||||
"reference": "32a3c6b3398de5db8ed381f4ef92970c59c2fcdd",
|
||||
"url": "https://api.github.com/repos/symfony/console/zipball/c0807a2ca978e64d8945d373a9221a5c35d1a253",
|
||||
"reference": "c0807a2ca978e64d8945d373a9221a5c35d1a253",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1134,7 +1134,7 @@
|
||||
],
|
||||
"description": "Symfony Console Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2017-07-29T21:26:04+00:00"
|
||||
"time": "2017-08-27T14:29:03+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/debug",
|
||||
@@ -1195,7 +1195,7 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/event-dispatcher",
|
||||
"version": "v2.8.26",
|
||||
"version": "v2.8.27",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/event-dispatcher.git",
|
||||
@@ -1255,16 +1255,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-iconv",
|
||||
"version": "v1.4.0",
|
||||
"version": "v1.5.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-iconv.git",
|
||||
"reference": "ae1347fa81423b67dbc232c8c111facb367ff8b9"
|
||||
"reference": "1ea0e08453819ecc7130e1fb0ee10862c2f33ed0"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/ae1347fa81423b67dbc232c8c111facb367ff8b9",
|
||||
"reference": "ae1347fa81423b67dbc232c8c111facb367ff8b9",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/1ea0e08453819ecc7130e1fb0ee10862c2f33ed0",
|
||||
"reference": "1ea0e08453819ecc7130e1fb0ee10862c2f33ed0",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1276,7 +1276,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.4-dev"
|
||||
"dev-master": "1.5-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -1310,20 +1310,20 @@
|
||||
"portable",
|
||||
"shim"
|
||||
],
|
||||
"time": "2017-06-09T08:25:21+00:00"
|
||||
"time": "2017-06-14T15:44:48+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-mbstring",
|
||||
"version": "v1.4.0",
|
||||
"version": "v1.5.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
||||
"reference": "f29dca382a6485c3cbe6379f0c61230167681937"
|
||||
"reference": "7c8fae0ac1d216eb54349e6a8baa57d515fe8803"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/f29dca382a6485c3cbe6379f0c61230167681937",
|
||||
"reference": "f29dca382a6485c3cbe6379f0c61230167681937",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7c8fae0ac1d216eb54349e6a8baa57d515fe8803",
|
||||
"reference": "7c8fae0ac1d216eb54349e6a8baa57d515fe8803",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1335,7 +1335,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.4-dev"
|
||||
"dev-master": "1.5-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -1369,20 +1369,20 @@
|
||||
"portable",
|
||||
"shim"
|
||||
],
|
||||
"time": "2017-06-09T14:24:12+00:00"
|
||||
"time": "2017-06-14T15:44:48+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/var-dumper",
|
||||
"version": "v2.8.26",
|
||||
"version": "v2.8.27",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/var-dumper.git",
|
||||
"reference": "e9337f23b1c080df301d25b8891ecf1607b0b72f"
|
||||
"reference": "83ebf3e92c0b2231fa63b8e584a2a3d3cd9876ef"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/e9337f23b1c080df301d25b8891ecf1607b0b72f",
|
||||
"reference": "e9337f23b1c080df301d25b8891ecf1607b0b72f",
|
||||
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/83ebf3e92c0b2231fa63b8e584a2a3d3cd9876ef",
|
||||
"reference": "83ebf3e92c0b2231fa63b8e584a2a3d3cd9876ef",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1437,11 +1437,11 @@
|
||||
"debug",
|
||||
"dump"
|
||||
],
|
||||
"time": "2017-07-26T06:29:15+00:00"
|
||||
"time": "2017-08-27T14:29:03+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/yaml",
|
||||
"version": "v2.8.26",
|
||||
"version": "v2.8.27",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/yaml.git",
|
||||
@@ -2194,22 +2194,22 @@
|
||||
},
|
||||
{
|
||||
"name": "phpspec/prophecy",
|
||||
"version": "v1.7.0",
|
||||
"version": "v1.7.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpspec/prophecy.git",
|
||||
"reference": "93d39f1f7f9326d746203c7c056f300f7f126073"
|
||||
"reference": "c9b8c6088acd19d769d4cc0ffa60a9fe34344bd6"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpspec/prophecy/zipball/93d39f1f7f9326d746203c7c056f300f7f126073",
|
||||
"reference": "93d39f1f7f9326d746203c7c056f300f7f126073",
|
||||
"url": "https://api.github.com/repos/phpspec/prophecy/zipball/c9b8c6088acd19d769d4cc0ffa60a9fe34344bd6",
|
||||
"reference": "c9b8c6088acd19d769d4cc0ffa60a9fe34344bd6",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"doctrine/instantiator": "^1.0.2",
|
||||
"php": "^5.3|^7.0",
|
||||
"phpdocumentor/reflection-docblock": "^2.0|^3.0.2",
|
||||
"phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
|
||||
"sebastian/comparator": "^1.1|^2.0",
|
||||
"sebastian/recursion-context": "^1.0|^2.0|^3.0"
|
||||
},
|
||||
@@ -2220,7 +2220,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.6.x-dev"
|
||||
"dev-master": "1.7.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -2253,7 +2253,7 @@
|
||||
"spy",
|
||||
"stub"
|
||||
],
|
||||
"time": "2017-03-02T20:05:34+00:00"
|
||||
"time": "2017-09-04T11:05:03+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpunit/php-code-coverage",
|
||||
@@ -3100,20 +3100,20 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/browser-kit",
|
||||
"version": "v3.3.6",
|
||||
"version": "v3.3.8",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/browser-kit.git",
|
||||
"reference": "8079a6b3668ef15cdbf73a4c7d31081abb8bb5f0"
|
||||
"reference": "aee7120b058c268363e606ff5fe8271da849a1b5"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/browser-kit/zipball/8079a6b3668ef15cdbf73a4c7d31081abb8bb5f0",
|
||||
"reference": "8079a6b3668ef15cdbf73a4c7d31081abb8bb5f0",
|
||||
"url": "https://api.github.com/repos/symfony/browser-kit/zipball/aee7120b058c268363e606ff5fe8271da849a1b5",
|
||||
"reference": "aee7120b058c268363e606ff5fe8271da849a1b5",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.5.9",
|
||||
"php": "^5.5.9|>=7.0.8",
|
||||
"symfony/dom-crawler": "~2.8|~3.0"
|
||||
},
|
||||
"require-dev": {
|
||||
@@ -3153,24 +3153,24 @@
|
||||
],
|
||||
"description": "Symfony BrowserKit Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2017-07-12T13:03:20+00:00"
|
||||
"time": "2017-07-29T21:54:42+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/css-selector",
|
||||
"version": "v3.3.6",
|
||||
"version": "v3.3.8",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/css-selector.git",
|
||||
"reference": "4d882dced7b995d5274293039370148e291808f2"
|
||||
"reference": "c5f5263ed231f164c58368efbce959137c7d9488"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/css-selector/zipball/4d882dced7b995d5274293039370148e291808f2",
|
||||
"reference": "4d882dced7b995d5274293039370148e291808f2",
|
||||
"url": "https://api.github.com/repos/symfony/css-selector/zipball/c5f5263ed231f164c58368efbce959137c7d9488",
|
||||
"reference": "c5f5263ed231f164c58368efbce959137c7d9488",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.5.9"
|
||||
"php": "^5.5.9|>=7.0.8"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
@@ -3206,24 +3206,24 @@
|
||||
],
|
||||
"description": "Symfony CssSelector Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2017-05-01T15:01:29+00:00"
|
||||
"time": "2017-07-29T21:54:42+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/dom-crawler",
|
||||
"version": "v3.3.6",
|
||||
"version": "v3.3.8",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/dom-crawler.git",
|
||||
"reference": "fc2c588ce376e9fe04a7b8c79e3ec62fe32d95b1"
|
||||
"reference": "d15dfaf71b65bf3affb80900470caf4451a8217e"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/dom-crawler/zipball/fc2c588ce376e9fe04a7b8c79e3ec62fe32d95b1",
|
||||
"reference": "fc2c588ce376e9fe04a7b8c79e3ec62fe32d95b1",
|
||||
"url": "https://api.github.com/repos/symfony/dom-crawler/zipball/d15dfaf71b65bf3affb80900470caf4451a8217e",
|
||||
"reference": "d15dfaf71b65bf3affb80900470caf4451a8217e",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.5.9",
|
||||
"php": "^5.5.9|>=7.0.8",
|
||||
"symfony/polyfill-mbstring": "~1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
@@ -3262,24 +3262,24 @@
|
||||
],
|
||||
"description": "Symfony DomCrawler Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2017-05-25T23:10:31+00:00"
|
||||
"time": "2017-08-15T13:31:09+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/finder",
|
||||
"version": "v3.3.6",
|
||||
"version": "v3.3.8",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/finder.git",
|
||||
"reference": "baea7f66d30854ad32988c11a09d7ffd485810c4"
|
||||
"reference": "b2260dbc80f3c4198f903215f91a1ac7fe9fe09e"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/finder/zipball/baea7f66d30854ad32988c11a09d7ffd485810c4",
|
||||
"reference": "baea7f66d30854ad32988c11a09d7ffd485810c4",
|
||||
"url": "https://api.github.com/repos/symfony/finder/zipball/b2260dbc80f3c4198f903215f91a1ac7fe9fe09e",
|
||||
"reference": "b2260dbc80f3c4198f903215f91a1ac7fe9fe09e",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.5.9"
|
||||
"php": "^5.5.9|>=7.0.8"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
@@ -3311,24 +3311,24 @@
|
||||
],
|
||||
"description": "Symfony Finder Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2017-06-01T21:01:25+00:00"
|
||||
"time": "2017-07-29T21:54:42+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/process",
|
||||
"version": "v3.3.6",
|
||||
"version": "v3.3.8",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/process.git",
|
||||
"reference": "07432804942b9f6dd7b7377faf9920af5f95d70a"
|
||||
"reference": "b7666e9b438027a1ea0e1ee813ec5042d5d7f6f0"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/process/zipball/07432804942b9f6dd7b7377faf9920af5f95d70a",
|
||||
"reference": "07432804942b9f6dd7b7377faf9920af5f95d70a",
|
||||
"url": "https://api.github.com/repos/symfony/process/zipball/b7666e9b438027a1ea0e1ee813ec5042d5d7f6f0",
|
||||
"reference": "b7666e9b438027a1ea0e1ee813ec5042d5d7f6f0",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.5.9"
|
||||
"php": "^5.5.9|>=7.0.8"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
@@ -3360,7 +3360,7 @@
|
||||
],
|
||||
"description": "Symfony Process Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2017-07-13T13:05:09+00:00"
|
||||
"time": "2017-07-29T21:54:42+00:00"
|
||||
},
|
||||
{
|
||||
"name": "webmozart/assert",
|
||||
|
||||
@@ -22,15 +22,15 @@ form:
|
||||
help: PLUGIN_ADMIN.HOME_PAGE_HELP
|
||||
|
||||
home.hide_in_urls:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.HIDE_HOME_IN_URLS
|
||||
help: PLUGIN_ADMIN.HIDE_HOME_IN_URLS_HELP
|
||||
highlight: 0
|
||||
options:
|
||||
1: PLUGIN_ADMIN.YES
|
||||
0: PLUGIN_ADMIN.NO
|
||||
validate:
|
||||
type: bool
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.HIDE_HOME_IN_URLS
|
||||
help: PLUGIN_ADMIN.HIDE_HOME_IN_URLS_HELP
|
||||
highlight: 0
|
||||
options:
|
||||
1: PLUGIN_ADMIN.YES
|
||||
0: PLUGIN_ADMIN.NO
|
||||
validate:
|
||||
type: bool
|
||||
|
||||
|
||||
pages.theme:
|
||||
@@ -616,6 +616,12 @@ form:
|
||||
help: PLUGIN_ADMIN.REDIS_PORT_HELP
|
||||
placeholder: "6379"
|
||||
|
||||
cache.redis.password:
|
||||
type: text
|
||||
size: small
|
||||
label: PLUGIN_ADMIN.REDIS_PASSWORD
|
||||
|
||||
|
||||
|
||||
twig:
|
||||
type: section
|
||||
@@ -806,10 +812,12 @@ form:
|
||||
type: bool
|
||||
|
||||
assets.collections:
|
||||
type: array
|
||||
type: multilevel
|
||||
label: PLUGIN_ADMIN.COLLECTIONS
|
||||
placeholder_key: collection_name
|
||||
placeholder_value: collection_path
|
||||
validate:
|
||||
type: array
|
||||
|
||||
errors:
|
||||
type: section
|
||||
@@ -1155,6 +1163,17 @@ form:
|
||||
validate:
|
||||
type: bool
|
||||
|
||||
case_insensitive_urls:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.CASE_INSENSITIVE_URLS
|
||||
highlight: 0
|
||||
help: PLUGIN_ADMIN.CASE_INSENSITIVE_URLS_HELP
|
||||
options:
|
||||
1: PLUGIN_ADMIN.YES
|
||||
0: PLUGIN_ADMIN.NO
|
||||
validate:
|
||||
type: bool
|
||||
|
||||
param_sep:
|
||||
type: select
|
||||
size: medium
|
||||
|
||||
@@ -66,6 +66,37 @@ form:
|
||||
default: 'en'
|
||||
help: PLUGIN_ADMIN.LANGUAGE_HELP
|
||||
|
||||
twofa_check:
|
||||
type: conditional
|
||||
condition: config.plugins.admin.twofa_enabled
|
||||
|
||||
fields:
|
||||
|
||||
twofa:
|
||||
title: PLUGIN_ADMIN.2FA_TITLE
|
||||
type: section
|
||||
underline: true
|
||||
|
||||
twofa_enabled:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.2FA_ENABLED
|
||||
classes: twofa-toggle
|
||||
highlight: 1
|
||||
default: 0
|
||||
options:
|
||||
1: PLUGIN_ADMIN.YES
|
||||
0: PLUGIN_ADMIN.NO
|
||||
validate:
|
||||
type: bool
|
||||
|
||||
|
||||
twofa_secret:
|
||||
type: 2fa_secret
|
||||
outerclasses: 'twofa-secret'
|
||||
label: PLUGIN_ADMIN.2FA_SECRET
|
||||
sublabel: PLUGIN_ADMIN.2FA_SECRET_HELP
|
||||
|
||||
|
||||
security:
|
||||
title: PLUGIN_ADMIN.ACCESS_LEVELS
|
||||
type: section
|
||||
|
||||
@@ -58,8 +58,8 @@ pages:
|
||||
etag: false # Set the etag header tag
|
||||
vary_accept_encoding: false # Add `Vary: Accept-Encoding` header
|
||||
redirect_default_route: false # Automatically redirect to a page's default route
|
||||
redirect_default_code: 301 # Default code to use for redirects
|
||||
redirect_trailing_slash: true # Handle automatically or 301 redirect a trailing / URL
|
||||
redirect_default_code: 302 # Default code to use for redirects
|
||||
redirect_trailing_slash: true # Handle automatically or 302 redirect a trailing / URL
|
||||
ignore_files: [.DS_Store] # Files to ignore in Pages
|
||||
ignore_folders: [.git, .idea] # Folders to ignore in Pages
|
||||
ignore_hidden: true # Ignore all Hidden files and folders
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
// Some standard defines
|
||||
define('GRAV', true);
|
||||
define('GRAV_VERSION', '1.3.2');
|
||||
define('GRAV_VERSION', '1.3.3');
|
||||
//define('GRAV_TESTING', true);
|
||||
define('DS', '/');
|
||||
|
||||
|
||||
@@ -240,6 +240,7 @@ class Cache extends Getters
|
||||
case 'redis':
|
||||
$redis = new \Redis();
|
||||
$socket = $this->config->get('system.cache.redis.socket', false);
|
||||
$password = $this->config->get('system.cache.redis.password', false);
|
||||
|
||||
if ($socket) {
|
||||
$redis->connect($socket);
|
||||
@@ -248,6 +249,11 @@ class Cache extends Getters
|
||||
$this->config->get('system.cache.redis.port', 6379));
|
||||
}
|
||||
|
||||
// Authenticate with password if set
|
||||
if ($password && !$redis->auth($password)) {
|
||||
throw new \RedisException('Redis authentication failed');
|
||||
}
|
||||
|
||||
$driver = new DoctrineCache\RedisCache();
|
||||
$driver->setRedis($redis);
|
||||
break;
|
||||
|
||||
@@ -238,6 +238,12 @@ class Installer
|
||||
return $class_name;
|
||||
}
|
||||
|
||||
$class_name_alphanumeric = preg_replace('/[^a-zA-Z0-9]+/', '', $class_name);
|
||||
|
||||
if (class_exists($class_name_alphanumeric)) {
|
||||
return $class_name_alphanumeric;
|
||||
}
|
||||
|
||||
return $installer;
|
||||
}
|
||||
|
||||
|
||||
@@ -174,7 +174,7 @@ class Grav extends Container
|
||||
}
|
||||
|
||||
if ($code === null) {
|
||||
$code = $this['config']->get('system.pages.redirect_default_code', 301);
|
||||
$code = $this['config']->get('system.pages.redirect_default_code', 302);
|
||||
}
|
||||
|
||||
if (isset($this['session'])) {
|
||||
|
||||
@@ -51,7 +51,7 @@ class ImageMedium extends Medium
|
||||
'resize', 'forceResize', 'cropResize', 'crop', 'zoomCrop',
|
||||
'negate', 'brightness', 'contrast', 'grayscale', 'emboss',
|
||||
'smooth', 'sharp', 'edge', 'colorize', 'sepia', 'enableProgressive',
|
||||
'rotate', 'flip', 'fixOrientation'
|
||||
'rotate', 'flip', 'fixOrientation', 'gaussianBlur'
|
||||
];
|
||||
|
||||
/**
|
||||
|
||||
@@ -116,7 +116,7 @@ class Page
|
||||
* Initializes the page instance variables based on a file
|
||||
*
|
||||
* @param \SplFileInfo $file The file information for the .md file that the page represents
|
||||
* @param string $extension
|
||||
* @param string $extension
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
@@ -331,7 +331,8 @@ class Page
|
||||
$frontmatter_file = $this->path . '/' . $this->folder . '/frontmatter.yaml';
|
||||
if (file_exists($frontmatter_file)) {
|
||||
$frontmatter_data = (array)Yaml::parse(file_get_contents($frontmatter_file));
|
||||
$this->header = (object)array_replace_recursive($frontmatter_data, (array)$this->header);
|
||||
$this->header = (object)array_replace_recursive($frontmatter_data,
|
||||
(array)$this->header);
|
||||
}
|
||||
// Process frontmatter with Twig if enabled
|
||||
if (Grav::instance()['config']->get('system.pages.frontmatter.process_twig') === true) {
|
||||
@@ -485,9 +486,11 @@ class Page
|
||||
*
|
||||
* @param int $size Max summary size.
|
||||
*
|
||||
* @param boolean $textOnly Only count text size.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function summary($size = null)
|
||||
public function summary($size = null, $textOnly = false)
|
||||
{
|
||||
$config = (array)Grav::instance()['config']->get('site.summary');
|
||||
if (isset($this->header->summary)) {
|
||||
@@ -501,11 +504,12 @@ class Page
|
||||
|
||||
// Set up variables to process summary from page or from custom summary
|
||||
if ($this->summary === null) {
|
||||
$content = $this->content();
|
||||
$content = $textOnly ? strip_tags($this->content()) : $this->content();
|
||||
$summary_size = $this->summary_size;
|
||||
} else {
|
||||
$content = $this->summary;
|
||||
$summary_size = mb_strlen($this->summary);
|
||||
$content = strip_tags($this->summary);
|
||||
// Use mb_strwidth to deal with the 2 character widths characters
|
||||
$summary_size = mb_strwidth($content, 'utf-8');
|
||||
}
|
||||
|
||||
// Return calculated summary based on summary divider's position
|
||||
@@ -514,7 +518,12 @@ class Page
|
||||
if (!in_array($format, ['short', 'long'])) {
|
||||
return $content;
|
||||
} elseif (($format === 'short') && isset($summary_size)) {
|
||||
return mb_substr($content, 0, $summary_size);
|
||||
// Use mb_strimwidth to slice the string
|
||||
if (mb_strwidth($content, 'utf8') > $summary_size) {
|
||||
return mb_strimwidth($content, 0, $summary_size);
|
||||
} else {
|
||||
return $content;
|
||||
}
|
||||
}
|
||||
|
||||
// Get summary size from site config's file
|
||||
@@ -530,6 +539,15 @@ class Page
|
||||
$size = 300;
|
||||
}
|
||||
|
||||
// Only return string but not html, wrap whatever html tag you want when using
|
||||
if ($textOnly) {
|
||||
if (mb_strwidth($content, 'utf-8') <= $size) {
|
||||
return $content;
|
||||
}
|
||||
|
||||
return mb_strimwidth($content, 0, $size, '...', 'utf-8');
|
||||
}
|
||||
|
||||
$summary = Utils::truncateHTML($content, $size);
|
||||
|
||||
return html_entity_decode($summary);
|
||||
@@ -590,7 +608,7 @@ class Page
|
||||
|
||||
|
||||
$process_markdown = $this->shouldProcess('markdown');
|
||||
$process_twig = $this->shouldProcess('twig') || $this->modularTwig() ;
|
||||
$process_twig = $this->shouldProcess('twig') || $this->modularTwig();
|
||||
|
||||
$cache_enable = isset($this->header->cache_enable) ? $this->header->cache_enable : $config->get('system.cache.enabled',
|
||||
true);
|
||||
@@ -801,7 +819,7 @@ class Page
|
||||
* Get value from a page variable (used mostly for creating edit forms).
|
||||
*
|
||||
* @param string $name Variable name.
|
||||
* @param mixed $default
|
||||
* @param mixed $default
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
@@ -1078,7 +1096,7 @@ class Page
|
||||
public function toArray()
|
||||
{
|
||||
return [
|
||||
'header' => (array)$this->header(),
|
||||
'header' => (array)$this->header(),
|
||||
'content' => (string)$this->value('content')
|
||||
];
|
||||
}
|
||||
@@ -1486,9 +1504,9 @@ class Page
|
||||
foreach ($value as $property => $prop_value) {
|
||||
$prop_key = $key . ":" . $property;
|
||||
$this->metadata[$prop_key] = [
|
||||
'name' => $prop_key,
|
||||
'name' => $prop_key,
|
||||
'property' => $prop_key,
|
||||
'content' => htmlspecialchars($prop_value, ENT_QUOTES, 'UTF-8')
|
||||
'content' => htmlspecialchars($prop_value, ENT_QUOTES, 'UTF-8')
|
||||
];
|
||||
}
|
||||
} else {
|
||||
@@ -1497,7 +1515,7 @@ class Page
|
||||
if (in_array($key, $header_tag_http_equivs)) {
|
||||
$this->metadata[$key] = [
|
||||
'http_equiv' => $key,
|
||||
'content' => htmlspecialchars($value, ENT_QUOTES, 'UTF-8')
|
||||
'content' => htmlspecialchars($value, ENT_QUOTES, 'UTF-8')
|
||||
];
|
||||
} elseif ($key == 'charset') {
|
||||
$this->metadata[$key] = ['charset' => htmlspecialchars($value, ENT_QUOTES, 'UTF-8')];
|
||||
@@ -1505,7 +1523,10 @@ class Page
|
||||
// if it's a social metadata with separator, render as property
|
||||
$separator = strpos($key, ':');
|
||||
$hasSeparator = $separator && $separator < strlen($key) - 1;
|
||||
$entry = ['name' => $key, 'content' => htmlspecialchars($value, ENT_QUOTES, 'UTF-8')];
|
||||
$entry = [
|
||||
'name' => $key,
|
||||
'content' => htmlspecialchars($value, ENT_QUOTES, 'UTF-8')
|
||||
];
|
||||
|
||||
if ($hasSeparator) {
|
||||
$entry['property'] = $key;
|
||||
@@ -1589,6 +1610,7 @@ class Page
|
||||
* Returns the canonical URL for a page
|
||||
*
|
||||
* @param bool $include_lang
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function canonical($include_lang = true)
|
||||
@@ -1603,6 +1625,7 @@ class Page
|
||||
* @param bool $canonical true to return the canonical URL
|
||||
* @param bool $include_lang
|
||||
* @param bool $raw_route
|
||||
*
|
||||
* @return string The url.
|
||||
*/
|
||||
public function url($include_host = false, $canonical = false, $include_lang = true, $raw_route = false)
|
||||
@@ -2246,6 +2269,23 @@ class Page
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the item in the current position.
|
||||
*
|
||||
* @param string $path the path the item
|
||||
*
|
||||
* @return Integer the index of the current page.
|
||||
*/
|
||||
public function currentPosition()
|
||||
{
|
||||
$collection = $this->parent()->collection('content', false);
|
||||
if ($collection instanceof Collection) {
|
||||
return $collection->currentPosition($this->path());
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether or not this page is the currently active page requested via the URL.
|
||||
@@ -2327,7 +2367,7 @@ class Page
|
||||
* Helper method to return an ancestor page.
|
||||
*
|
||||
* @param string $url The url of the page
|
||||
* @param bool $lookup Name of the parent folder
|
||||
* @param bool $lookup Name of the parent folder
|
||||
*
|
||||
* @return \Grav\Common\Page\Page page you were looking for if it exists
|
||||
*/
|
||||
@@ -2343,7 +2383,7 @@ class Page
|
||||
* Helper method to return an ancestor page to inherit from. The current
|
||||
* page object is returned.
|
||||
*
|
||||
* @param string $field Name of the parent folder
|
||||
* @param string $field Name of the parent folder
|
||||
*
|
||||
* @return Page
|
||||
*/
|
||||
@@ -2355,11 +2395,12 @@ class Page
|
||||
|
||||
return $inherited;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to return an ancestor field only to inherit from. The
|
||||
* first occurrence of an ancestor field will be returned if at all.
|
||||
*
|
||||
* @param string $field Name of the parent folder
|
||||
* @param string $field Name of the parent folder
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
@@ -2373,7 +2414,7 @@ class Page
|
||||
/**
|
||||
* Method that contains shared logic for inherited() and inheritedField()
|
||||
*
|
||||
* @param string $field Name of the parent folder
|
||||
* @param string $field Name of the parent folder
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
@@ -2383,11 +2424,12 @@ class Page
|
||||
|
||||
/** @var Pages $pages */
|
||||
$inherited = $pages->inherited($this->route, $field);
|
||||
$inheritedParams = (array) $inherited->value('header.' . $field);
|
||||
$currentParams = (array) $this->value('header.' . $field);
|
||||
if($inheritedParams && is_array($inheritedParams)) {
|
||||
$inheritedParams = (array)$inherited->value('header.' . $field);
|
||||
$currentParams = (array)$this->value('header.' . $field);
|
||||
if ($inheritedParams && is_array($inheritedParams)) {
|
||||
$currentParams = array_replace_recursive($inheritedParams, $currentParams);
|
||||
}
|
||||
|
||||
return [$inherited, $currentParams];
|
||||
}
|
||||
|
||||
@@ -2395,7 +2437,7 @@ class Page
|
||||
* Helper method to return a page.
|
||||
*
|
||||
* @param string $url the url of the page
|
||||
* @param bool $all
|
||||
* @param bool $all
|
||||
*
|
||||
* @return \Grav\Common\Page\Page page you were looking for if it exists
|
||||
*/
|
||||
@@ -2411,7 +2453,7 @@ class Page
|
||||
* Get a collection of pages in the current context.
|
||||
*
|
||||
* @param string|array $params
|
||||
* @param boolean $pagination
|
||||
* @param boolean $pagination
|
||||
*
|
||||
* @return Collection
|
||||
* @throws \InvalidArgumentException
|
||||
@@ -2747,7 +2789,7 @@ class Page
|
||||
|
||||
// Reorder all moved pages.
|
||||
foreach ($siblings as $slug => $page) {
|
||||
$order = intval(trim($page->order(),'.'));
|
||||
$order = intval(trim($page->order(), '.'));
|
||||
$counter++;
|
||||
|
||||
if ($order) {
|
||||
|
||||
@@ -27,13 +27,18 @@ class Plugins extends Iterator
|
||||
$locator = Grav::instance()['locator'];
|
||||
|
||||
$iterator = $locator->getIterator('plugins://');
|
||||
foreach ($iterator as $directory) {
|
||||
|
||||
$plugins = [];
|
||||
foreach($iterator as $directory) {
|
||||
if (!$directory->isDir()) {
|
||||
continue;
|
||||
}
|
||||
$plugins[] = $directory->getBasename();
|
||||
}
|
||||
|
||||
$plugin = $directory->getBasename();
|
||||
natsort($plugins);
|
||||
|
||||
foreach ($plugins as $plugin) {
|
||||
$this->add($this->loadPlugin($plugin));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,6 +67,8 @@ class TwigExtension extends \Twig_Extension
|
||||
new \Twig_SimpleFilter('*ize', [$this, 'inflectorFilter']),
|
||||
new \Twig_SimpleFilter('absolute_url', [$this, 'absoluteUrlFilter']),
|
||||
new \Twig_SimpleFilter('contains', [$this, 'containsFilter']),
|
||||
new \Twig_SimpleFilter('chunk_split', [$this, 'chunkSplitFilter']),
|
||||
|
||||
new \Twig_SimpleFilter('defined', [$this, 'definedDefaultFilter']),
|
||||
new \Twig_SimpleFilter('ends_with', [$this, 'endsWithFilter']),
|
||||
new \Twig_SimpleFilter('fieldName', [$this, 'fieldNameFilter']),
|
||||
@@ -90,12 +92,14 @@ class TwigExtension extends \Twig_Extension
|
||||
new \Twig_SimpleFilter('sort_by_key', [$this, 'sortByKeyFilter']),
|
||||
new \Twig_SimpleFilter('starts_with', [$this, 'startsWithFilter']),
|
||||
new \Twig_SimpleFilter('t', [$this, 'translate']),
|
||||
new \Twig_SimpleFilter('tl', [$this, 'translateLanguage']),
|
||||
new \Twig_SimpleFilter('ta', [$this, 'translateArray']),
|
||||
new \Twig_SimpleFilter('truncate', ['\Grav\Common\Utils', 'truncate']),
|
||||
new \Twig_SimpleFilter('truncate_html', ['\Grav\Common\Utils', 'truncateHTML']),
|
||||
new \Twig_SimpleFilter('json_decode', [$this, 'jsonDecodeFilter']),
|
||||
new \Twig_SimpleFilter('array_unique', 'array_unique'),
|
||||
|
||||
new \Twig_SimpleFilter('basename', 'basenameFilter'),
|
||||
new \Twig_SimpleFilter('dirname', 'dirnameFilter'),
|
||||
];
|
||||
}
|
||||
|
||||
@@ -125,6 +129,7 @@ class TwigExtension extends \Twig_Extension
|
||||
new \Twig_SimpleFunction('regex_replace', [$this, 'regexReplace']),
|
||||
new \Twig_SimpleFunction('string', [$this, 'stringFunc']),
|
||||
new \Twig_simpleFunction('t', [$this, 'translate']),
|
||||
new \Twig_simpleFunction('tl', [$this, 'translateLanguage']),
|
||||
new \Twig_simpleFunction('ta', [$this, 'translateArray']),
|
||||
new \Twig_SimpleFunction('url', [$this, 'urlFunc']),
|
||||
new \Twig_SimpleFunction('json_decode', [$this, 'jsonDecodeFilter']),
|
||||
@@ -377,6 +382,19 @@ class TwigExtension extends \Twig_Extension
|
||||
return $array;
|
||||
}
|
||||
|
||||
/**
|
||||
* Wrapper for chunk_split() function
|
||||
*
|
||||
* @param $value
|
||||
* @param $chars
|
||||
* @param string $split
|
||||
* @return string
|
||||
*/
|
||||
public function chunkSplitFilter($value, $chars, $split = '-')
|
||||
{
|
||||
return chunk_split($value, $chars, $split);
|
||||
}
|
||||
|
||||
/**
|
||||
* determine if a string contains another
|
||||
*
|
||||
@@ -595,6 +613,20 @@ class TwigExtension extends \Twig_Extension
|
||||
return $this->grav['language']->translate(func_get_args());
|
||||
}
|
||||
|
||||
/**
|
||||
* Translate Strings
|
||||
*
|
||||
* @param $args
|
||||
* @param array|null $languages
|
||||
* @param bool $array_support
|
||||
* @param bool $html_out
|
||||
* @return mixed
|
||||
*/
|
||||
public function translateLanguage($args, array $languages = null, $array_support = false, $html_out = false)
|
||||
{
|
||||
return $this->grav['language']->translate($args, $languages, $array_support, $html_out);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $key
|
||||
* @param $index
|
||||
@@ -1082,4 +1114,20 @@ class TwigExtension extends \Twig_Extension
|
||||
{
|
||||
return pathinfo($var);
|
||||
}
|
||||
|
||||
/**
|
||||
* Simple wrapper for basename()
|
||||
*
|
||||
* @param $var
|
||||
* @return string
|
||||
*/
|
||||
public function basenameFilter($var)
|
||||
{
|
||||
return basename($var);
|
||||
}
|
||||
|
||||
public function dirnameFilter($var)
|
||||
{
|
||||
return dirname($var);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -286,6 +286,11 @@ class Uri
|
||||
|
||||
$this->url = $this->base . $this->uri;
|
||||
|
||||
// if case insensitive urls is enabled, lowercase the url
|
||||
if( $grav['config']->get('system.case_insensitive_urls') ){
|
||||
$this->url = strtolower($this->url);
|
||||
}
|
||||
|
||||
// get any params and remove them
|
||||
$uri = str_replace($this->root, '', $this->url);
|
||||
|
||||
@@ -295,9 +300,9 @@ class Uri
|
||||
$uri = str_replace($setup_base, '', $uri);
|
||||
}
|
||||
|
||||
// If configured to, redirect trailing slash URI's with a 301 redirect
|
||||
// If configured to, redirect trailing slash URI's with a 302 redirect
|
||||
if ($config->get('system.pages.redirect_trailing_slash', false) && $uri != '/' && Utils::endsWith($uri, '/')) {
|
||||
$grav->redirect(str_replace($this->root, '', rtrim($uri, '/')), 301);
|
||||
$grav->redirect(str_replace($this->root, '', rtrim($uri, '/')), 302);
|
||||
}
|
||||
|
||||
// process params
|
||||
|
||||
@@ -197,6 +197,10 @@ class User extends Data
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!$this->authenticated) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (isset($this->state) && $this->state !== 'enabled') {
|
||||
return false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user