Commit 203dc39a authored by Administrator's avatar Administrator 💬

Update Grav to 1.5.10 (and plugins)

parent 08fa68f2
# M3P2 # v1.5.10
## 03/21/2019
- configure 1. [](#new)
- add plugins * Added new `deferred` Twig extension
- add theme textbook
-
---
Forked from here.
---
# v1.5.9 # v1.5.9
## mm/dd/2019 ## 03/20/2019
1. [](#new)
* Added new `onPageContent()` event for every call to `Page::content()`
1. [](#improved) 1. [](#improved)
* Fixed phpdoc generation * Fixed phpdoc generation
* Updated vendor libraries
* Force Toolbox v1.4.2
1. [](#bugfix)
* EXIF fix for streams
* Fix for User avatar not working due to uppercase or spaces in email [#2403](https://github.com/getgrav/grav/pull/2403)
# v1.5.8 # v1.5.8
## 02/07/2019 ## 02/07/2019
......
# M3P2 # ![](https://avatars1.githubusercontent.com/u/8237355?v=2&s=50) Grav
These are the sources of an instance of Grav tailored for the courses of M3P2. [![SensioLabsInsight](https://insight.sensiolabs.com/projects/cfd20465-d0f8-4a0a-8444-467f5b5f16ad/mini.png)](https://insight.sensiolabs.com/projects/cfd20465-d0f8-4a0a-8444-467f5b5f16ad) [![Discord](https://img.shields.io/discord/501836936584101899.svg?logo=discord&colorB=728ADA&label=Discord%20Chat)](https://chat.getgrav.org) [![Build Status](https://travis-ci.org/getgrav/grav.svg?branch=develop)](https://travis-ci.org/getgrav/grav) [![OpenCollective](https://opencollective.com/grav/backers/badge.svg)](#backers) [![OpenCollective](https://opencollective.com/grav/sponsors/badge.svg)](#sponsors)
The plugins and themes are included. Grav is a **Fast**, **Simple**, and **Flexible**, file-based Web-platform. There is **Zero** installation required. Just extract the ZIP archive, and you are already up and running. It follows similar principles to other flat-file CMS platforms, but has a different design philosophy than most. Grav comes with a powerful **Package Management System** to allow for simple installation and upgrading of plugins and themes, as well as simple updating of Grav itself.
Only the php vendors are not included.
composer install The underlying architecture of Grav is designed to use well-established and _best-in-class_ technologies to ensure that Grav is simple to use and easy to extend. Some of these key technologies include:
http://getcomposer.org/ * [Twig Templating](https://twig.sensiolabs.org/): for powerful control of the user interface
* [Markdown](https://en.wikipedia.org/wiki/Markdown): for easy content creation
* [YAML](https://yaml.org): for simple configuration
* [Parsedown](https://parsedown.org/): for fast Markdown and Markdown Extra support
* [Doctrine Cache](https://www.doctrine-project.org/projects/doctrine-orm/en/latest/reference/caching.html): layer for performance
* [Pimple Dependency Injection Container](https://pimple.sensiolabs.org/): for extensibility and maintainability
* [Symfony Event Dispatcher](https://symfony.com/doc/current/components/event_dispatcher/introduction.html): for plugin event handling
* [Symfony Console](https://symfony.com/doc/current/components/console/introduction.html): for CLI interface
* [Gregwar Image Library](https://github.com/Gregwar/Image): for dynamic image manipulation
Then try out # Requirements
bin/grav - PHP 5.6.4 or higher. Check the [required modules list](https://learn.getgrav.org/basics/requirements#php-requirements)
- Check the [Apache](https://learn.getgrav.org/basics/requirements#apache-requirements) or [IIS](https://learn.getgrav.org/basics/requirements#iis-requirements) requirements
to troubleshoot. # QuickStart
Perhaps These are the options to get Grav:
bin/grav install ### Downloading a Grav Package
You can download a **ready-built** package from the [Downloads page on https://getgrav.org](https://getgrav.org/downloads)
Add the courses from the other repository ### With Composer
bin/clone_courses.sh You can create a new project with the latest **stable** Grav release with the following command:
```
$ composer create-project getgrav/grav ~/webroot/grav
```
And run locally ### From GitHub
php -S localhost:8000 system/router.php 1. Clone the Grav repository from [https://github.com/getgrav/grav]() to a folder in the webroot of your server, e.g. `~/webroot/grav`. Launch a **terminal** or **console** and navigate to the webroot folder:
```
$ cd ~/webroot
$ git clone https://github.com/getgrav/grav.git
```
2. Install the **plugin** and **theme dependencies** by using the [Grav CLI application](https://learn.getgrav.org/advanced/grav-cli) `bin/grav`:
```
$ cd ~/webroot/grav
$ bin/grav install
```
## Upgrading vendors Check out the [install procedures](https://learn.getgrav.org/basics/installation) for more information.
Since our plugins and themes are in this repository, they are frozen. # Adding Functionality
So far, Grav itself is safe to update, as well as all plugins **but mathjax** (until they merge our MR). You can download [plugins](https://getgrav.org/downloads/plugins) or [themes](https://getgrav.org/downloads/themes) manually from the appropriate tab on the [Downloads page on https://getgrav.org](https://getgrav.org/downloads), but the preferred solution is to use the [Grav Package Manager](https://learn.getgrav.org/advanced/grav-gpm) or `GPM`:
Todo: look up .dependencies and perhaps we'll remove the plugins dir altogether from this repository. ```
$ bin/gpm index
```
The theme `textbook` is tailored for M3P2 courses. This will display all the available plugins and then you can install one or more with:
The plugin `gitlab-markdown-adapter` was expressly made for this Grav instance.
```
$ bin/gpm install <plugin/theme>
```
# Updating
To update Grav you should use the [Grav Package Manager](https://learn.getgrav.org/advanced/grav-gpm) or `GPM`: To update Grav you should use the [Grav Package Manager](https://learn.getgrav.org/advanced/grav-gpm) or `GPM`:
...@@ -53,40 +81,50 @@ To update plugins and themes: ...@@ -53,40 +81,50 @@ To update plugins and themes:
$ bin/gpm update $ bin/gpm update
``` ```
---
--- # Contributing
We appreciate any contribution to Grav, whether it is related to bugs, grammar, or simply a suggestion or improvement! Please refer to the [Contributing guide](CONTRIBUTING.md) for more guidance on this topic.
--- ## Security issues
If you discover a possible security issue related to Grav or one of its plugins, please email the core team at contact@getgrav.org and we'll address it as soon as possible.
# ![](https://avatars1.githubusercontent.com/u/8237355?v=2&s=50) Grav # Getting Started
Grav is a **Fast**, **Simple**, and **Flexible**, file-based Web-platform. * [What is Grav?](https://learn.getgrav.org/basics/what-is-grav)
It follows similar principles to other flat-file CMS platforms, but has a different design philosophy than most. * [Install](https://learn.getgrav.org/basics/installation) Grav in few seconds
Grav comes with a powerful **Package Management System** to allow for simple installation and upgrading of plugins and themes, as well as simple updating of Grav itself. * Understand the [Configuration](https://learn.getgrav.org/basics/grav-configuration)
* Take a peek at our available free [Skeletons](https://getgrav.org/downloads/skeletons)
* If you have questions, jump on our [Discord Chat Server](https://chat.getgrav.org)!
* Have fun!
The underlying architecture of Grav is designed to use well-established and _best-in-class_ technologies to ensure that Grav is simple to use and easy to extend. Some of these key technologies include: # Exploring More
* [Twig Templating](https://twig.sensiolabs.org/): for powerful control of the user interface * Have a look at our [Basic Tutorial](https://learn.getgrav.org/basics/basic-tutorial)
* [Markdown](https://en.wikipedia.org/wiki/Markdown): for easy content creation * Dive into more [advanced](https://learn.getgrav.org/advanced) functions
* [YAML](https://yaml.org): for simple configuration * Learn about the [Grav CLI](https://learn.getgrav.org/cli-console/grav-cli)
* [Parsedown](https://parsedown.org/): for fast Markdown and Markdown Extra support * Review examples in the [Grav Cookbook](https://learn.getgrav.org/cookbook)
* [Doctrine Cache](https://www.doctrine-project.org/projects/doctrine-orm/en/latest/reference/caching.html): layer for performance
* [Pimple Dependency Injection Container](https://pimple.sensiolabs.org/): for extensibility and maintainability
* [Symfony Event Dispatcher](https://symfony.com/doc/current/components/event_dispatcher/introduction.html): for plugin event handling
* [Symfony Console](https://symfony.com/doc/current/components/console/introduction.html): for CLI interface
* [Gregwar Image Library](https://github.com/Gregwar/Image): for dynamic image manipulation
# Requirements # Backers
Support Grav with a monthly donation to help us continue development. [[Become a backer](https://opencollective.com/grav#backer)]
- PHP 5.6.4 or higher. Check the [required modules list](https://learn.getgrav.org/basics/requirements#php-requirements) <img src="https://opencollective.com/grav/tiers/backers.svg?avatarHeight=36&width=600" />
- Check the [Apache](https://learn.getgrav.org/basics/requirements#apache-requirements) or [IIS](https://learn.getgrav.org/basics/requirements#iis-requirements) requirements
# Sponsors
Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/grav#sponsor)]
<img src="https://opencollective.com/grav/tiers/sponsors.svg?avatarHeight=36&width=600" />
# License # License
See [LICENSE](LICENSE.txt) See [LICENSE](LICENSE.txt)
[gitflow-model]: http://nvie.com/posts/a-successful-git-branching-model/ [gitflow-model]: http://nvie.com/posts/a-successful-git-branching-model/
[gitflow-extensions]: https://github.com/nvie/gitflow [gitflow-extensions]: https://github.com/nvie/gitflow
# Running Tests
First install the dev dependencies by running `composer update` from the Grav root.
Then `composer test` will run the Unit Tests, which should be always executed successfully on any site.
Windows users should use the `composer test-windows` command.
You can also run a single unit test file, e.g. `composer test tests/unit/Grav/Common/AssetsTest.php`
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
"gregwar/image": "2.*", "gregwar/image": "2.*",
"donatj/phpuseragentparser": "~0.3", "donatj/phpuseragentparser": "~0.3",
"pimple/pimple": "~3.2", "pimple/pimple": "~3.2",
"rockettheme/toolbox": "~1.4", "rockettheme/toolbox": "1.4.2",
"maximebf/debugbar": "~1.10", "maximebf/debugbar": "~1.10",
"ext-mbstring": "*", "ext-mbstring": "*",
"ext-openssl": "*", "ext-openssl": "*",
...@@ -36,7 +36,8 @@ ...@@ -36,7 +36,8 @@
"league/climate": "^3.2", "league/climate": "^3.2",
"antoligy/dom-string-iterators": "^1.0", "antoligy/dom-string-iterators": "^1.0",
"miljar/php-exif": "^0.6.3", "miljar/php-exif": "^0.6.3",
"composer/ca-bundle": "^1.0" "composer/ca-bundle": "^1.0",
"phive/twig-extensions-deferred": "^1.0"
}, },
"require-dev": { "require-dev": {
"codeception/codeception": "^2.1", "codeception/codeception": "^2.1",
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "544658e69ae737e742e014c6c674cc70", "content-hash": "655f3e16c1c33d89e1baf6383b2efb26",
"packages": [ "packages": [
{ {
"name": "antoligy/dom-string-iterators", "name": "antoligy/dom-string-iterators",
...@@ -52,16 +52,16 @@ ...@@ -52,16 +52,16 @@
}, },
{ {
"name": "composer/ca-bundle", "name": "composer/ca-bundle",
"version": "1.1.3", "version": "1.1.4",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/composer/ca-bundle.git", "url": "https://github.com/composer/ca-bundle.git",
"reference": "8afa52cd417f4ec417b4bfe86b68106538a87660" "reference": "558f321c52faeb4828c03e7dc0cfe39a09e09a2d"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/composer/ca-bundle/zipball/8afa52cd417f4ec417b4bfe86b68106538a87660", "url": "https://api.github.com/repos/composer/ca-bundle/zipball/558f321c52faeb4828c03e7dc0cfe39a09e09a2d",
"reference": "8afa52cd417f4ec417b4bfe86b68106538a87660", "reference": "558f321c52faeb4828c03e7dc0cfe39a09e09a2d",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
...@@ -104,7 +104,7 @@ ...@@ -104,7 +104,7 @@
"ssl", "ssl",
"tls" "tls"
], ],
"time": "2018-10-18T06:09:13+00:00" "time": "2019-01-28T09:30:10+00:00"
}, },
{ {
"name": "doctrine/cache", "name": "doctrine/cache",
...@@ -245,16 +245,16 @@ ...@@ -245,16 +245,16 @@
}, },
{ {
"name": "donatj/phpuseragentparser", "name": "donatj/phpuseragentparser",
"version": "v0.11.1", "version": "v0.13.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/donatj/PhpUserAgent.git", "url": "https://github.com/donatj/PhpUserAgent.git",
"reference": "0eab93a89a1a73a087e795abc96d5777c3d48b64" "reference": "5f2da266d2a386f9b231d4344ae37baf7a467c2d"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/donatj/PhpUserAgent/zipball/0eab93a89a1a73a087e795abc96d5777c3d48b64", "url": "https://api.github.com/repos/donatj/PhpUserAgent/zipball/5f2da266d2a386f9b231d4344ae37baf7a467c2d",
"reference": "0eab93a89a1a73a087e795abc96d5777c3d48b64", "reference": "5f2da266d2a386f9b231d4344ae37baf7a467c2d",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
...@@ -268,7 +268,7 @@ ...@@ -268,7 +268,7 @@
"type": "library", "type": "library",
"autoload": { "autoload": {
"files": [ "files": [
"Source/UserAgentParser.php" "src/UserAgentParser.php"
] ]
}, },
"notification-url": "https://packagist.org/downloads/", "notification-url": "https://packagist.org/downloads/",
...@@ -292,7 +292,7 @@ ...@@ -292,7 +292,7 @@
"user agent", "user agent",
"useragent" "useragent"
], ],
"time": "2018-10-25T20:22:53+00:00" "time": "2019-03-08T20:52:23+00:00"
}, },
{ {
"name": "erusev/parsedown", "name": "erusev/parsedown",
...@@ -489,17 +489,17 @@ ...@@ -489,17 +489,17 @@
}, },
{ {
"name": "gregwar/image", "name": "gregwar/image",
"version": "v2.0.23", "version": "v2.0.24",
"target-dir": "Gregwar/Image", "target-dir": "Gregwar/Image",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/Gregwar/Image.git", "url": "https://github.com/Gregwar/Image.git",
"reference": "25fbb91a95d41d44587ee7ca8923745b66221a7d" "reference": "52145816255dd20cb4bb115d0f9e1030c6287994"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/Gregwar/Image/zipball/25fbb91a95d41d44587ee7ca8923745b66221a7d", "url": "https://api.github.com/repos/Gregwar/Image/zipball/52145816255dd20cb4bb115d0f9e1030c6287994",
"reference": "25fbb91a95d41d44587ee7ca8923745b66221a7d", "reference": "52145816255dd20cb4bb115d0f9e1030c6287994",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
...@@ -537,7 +537,7 @@ ...@@ -537,7 +537,7 @@
"gd", "gd",
"image" "image"
], ],
"time": "2018-10-25T17:12:13+00:00" "time": "2019-01-27T15:10:06+00:00"
}, },
{ {
"name": "guzzlehttp/psr7", "name": "guzzlehttp/psr7",
...@@ -970,6 +970,49 @@ ...@@ -970,6 +970,49 @@
], ],
"time": "2018-11-05T09:00:11+00:00" "time": "2018-11-05T09:00:11+00:00"
}, },
{
"name": "phive/twig-extensions-deferred",
"version": "v1.0.2",
"source": {
"type": "git",
"url": "https://github.com/rybakit/twig-deferred-extension.git",
"reference": "5a2426d622afa74034e754ca5ea1d1ff7887627f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/rybakit/twig-deferred-extension/zipball/5a2426d622afa74034e754ca5ea1d1ff7887627f",
"reference": "5a2426d622afa74034e754ca5ea1d1ff7887627f",
"shasum": ""
},
"require": {
"twig/twig": "~1.18"
},
"type": "library",
"autoload": {
"psr-4": {
"Phive\\Twig\\Extensions\\Deferred\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Eugene Leonovich",
"email": "gen.work@gmail.com"
}
],
"description": "An extension for Twig that allows to defer block rendering",
"homepage": "https://github.com/rybakit/twig-extensions-deferred",
"keywords": [
"defer",
"extension",
"lazy",
"twig"
],
"time": "2017-03-17T21:39:21+00:00"
},
{ {
"name": "pimple/pimple", "name": "pimple/pimple",
"version": "v3.2.3", "version": "v3.2.3",
...@@ -1353,16 +1396,16 @@ ...@@ -1353,16 +1396,16 @@
}, },
{ {
"name": "symfony/console", "name": "symfony/console",
"version": "v3.4.21", "version": "v3.4.23",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/console.git", "url": "https://github.com/symfony/console.git",
"reference": "a700b874d3692bc8342199adfb6d3b99f62cc61a" "reference": "71ce77f37af0c5ffb9590e43cc4f70e426945c5e"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/a700b874d3692bc8342199adfb6d3b99f62cc61a", "url": "https://api.github.com/repos/symfony/console/zipball/71ce77f37af0c5ffb9590e43cc4f70e426945c5e",
"reference": "a700b874d3692bc8342199adfb6d3b99f62cc61a", "reference": "71ce77f37af0c5ffb9590e43cc4f70e426945c5e",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
...@@ -1374,6 +1417,9 @@ ...@@ -1374,6 +1417,9 @@
"symfony/dependency-injection": "<3.4", "symfony/dependency-injection": "<3.4",
"symfony/process": "<3.3" "symfony/process": "<3.3"
}, },
"provide": {
"psr/log-implementation": "1.0"
},
"require-dev": { "require-dev": {
"psr/log": "~1.0", "psr/log": "~1.0",
"symfony/config": "~3.3|~4.0", "symfony/config": "~3.3|~4.0",
...@@ -1383,7 +1429,7 @@ ...@@ -1383,7 +1429,7 @@
"symfony/process": "~3.3|~4.0" "symfony/process": "~3.3|~4.0"
}, },
"suggest": { "suggest": {
"psr/log-implementation": "For using the console logger", "psr/log": "For using the console logger",
"symfony/event-dispatcher": "", "symfony/event-dispatcher": "",
"symfony/lock": "", "symfony/lock": "",
"symfony/process": "" "symfony/process": ""
...@@ -1418,20 +1464,20 @@ ...@@ -1418,20 +1464,20 @@
], ],
"description": "Symfony Console Component", "description": "Symfony Console Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2019-01-04T04:42:43+00:00" "time": "2019-02-23T15:06:07+00:00"
}, },
{ {
"name": "symfony/debug", "name": "symfony/debug",
"version": "v3.4.21", "version": "v3.4.23",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/debug.git", "url": "https://github.com/symfony/debug.git",
"reference": "26d7f23b9bd0b93bee5583e4d6ca5cb1ab31b186" "reference": "8d8a9e877b3fcdc50ddecf8dcea146059753f782"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/debug/zipball/26d7f23b9bd0b93bee5583e4d6ca5cb1ab31b186", "url": "https://api.github.com/repos/symfony/debug/zipball/8d8a9e877b3fcdc50ddecf8dcea146059753f782",
"reference": "26d7f23b9bd0b93bee5583e4d6ca5cb1ab31b186", "reference": "8d8a9e877b3fcdc50ddecf8dcea146059753f782",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
...@@ -1474,20 +1520,20 @@ ...@@ -1474,20 +1520,20 @@
], ],
"description": "Symfony Debug Component", "description": "Symfony Debug Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2019-01-01T13:45:19+00:00" "time": "2019-02-24T15:45:11+00:00"
}, },
{ {
"name": "symfony/event-dispatcher", "name": "symfony/event-dispatcher",
"version": "v3.4.21", "version": "v3.4.23",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/event-dispatcher.git", "url": "https://github.com/symfony/event-dispatcher.git",
"reference": "d1cdd46c53c264a2bd42505bd0e8ce21423bd0e2" "reference": "ec625e2fff7f584eeb91754821807317b2e79236"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d1cdd46c53c264a2bd42505bd0e8ce21423bd0e2", "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/ec625e2fff7f584eeb91754821807317b2e79236",
"reference": "d1cdd46c53c264a2bd42505bd0e8ce21423bd0e2", "reference": "ec625e2fff7f584eeb91754821807317b2e79236",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
...@@ -1537,7 +1583,7 @@ ...@@ -1537,7 +1583,7 @@
], ],
"description": "Symfony EventDispatcher Component", "description": "Symfony EventDispatcher Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2019-01-01T18:08:36+00:00" "time": "2019-02-23T15:06:07+00:00"
}, },
{ {
"name": "symfony/polyfill-ctype", "name": "symfony/polyfill-ctype",
...@@ -1584,7 +1630,7 @@ ...@@ -1584,7 +1630,7 @@
}, },
{ {
"name": "Gert de Pagter", "name": "Gert de Pagter",
"email": "BackEndTea@gmail.com" "email": "backendtea@gmail.com"
} }
], ],
"description": "Symfony polyfill for ctype functions", "description": "Symfony polyfill for ctype functions",
...@@ -1717,16 +1763,16 @@ ...@@ -1717,16 +1763,16 @@
}, },
{ {
"name": "symfony/var-dumper", "name": "symfony/var-dumper",
"version": "v3.4.21", "version": "v3.4.23",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/var-dumper.git", "url": "https://github.com/symfony/var-dumper.git",
"reference": "a5f39641bb62e8b74e343467b145331273f615a2" "reference": "d34d10236300876d14291e9df85c6ef3d3bb9066"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/a5f39641bb62e8b74e343467b145331273f615a2", "url": "https://api.github.com/repos/symfony/var-dumper/zipball/d34d10236300876d14291e9df85c6ef3d3bb9066",
"reference": "a5f39641bb62e8b74e343467b145331273f615a2", "reference": "d34d10236300876d14291e9df85c6ef3d3bb9066",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
...@@ -1782,20 +1828,20 @@ ...@@ -1782,20 +1828,20 @@
"debug", "debug",
"dump" "dump"
], ],
"time": "2019-01-01T13:45:19+00:00" "time": "2019-02-23T15:06:07+00:00"
}, },
{ {
"name": "symfony/yaml", "name": "symfony/yaml",
"version": "v3.4.21", "version": "v3.4.23",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/yaml.git", "url": "https://github.com/symfony/yaml.git",
"reference": "554a59a1ccbaac238a89b19c8e551a556fd0e2ea" "reference": "57f1ce82c997f5a8701b89ef970e36bb657fd09c"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/yaml/zipball/554a59a1ccbaac238a89b19c8e551a556fd0e2ea", "url": "https://api.github.com/repos/symfony/yaml/zipball/57f1ce82c997f5a8701b89ef970e36bb657fd09c",
"reference": "554a59a1ccbaac238a89b19c8e551a556fd0e2ea", "reference": "57f1ce82c997f5a8701b89ef970e36bb657fd09c",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
...@@ -1841,20 +1887,20 @@ ...@@ -1841,20 +1887,20 @@
], ],
"description": "Symfony Yaml Component", "description": "Symfony Yaml Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2019-01-01T13:45:19+00:00" "time": "2019-02-23T15:06:07+00:00"
}, },
{ {
"name": "twig/twig", "name": "twig/twig",
"version": "v1.37.1", "version": "v1.38.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/twigphp/Twig.git", "url": "https://github.com/twigphp/Twig.git",
"reference": "66be9366c76cbf23e82e7171d47cbfa54a057a62" "reference": "874adbd9222f928f6998732b25b01b41dff15b0c"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/66be9366c76cbf23e82e7171d47cbfa54a057a62", "url": "https://api.github.com/repos/twigphp/Twig/zipball/874adbd9222f928f6998732b25b01b41dff15b0c",
"reference": "66be9366c76cbf23e82e7171d47cbfa54a057a62", "reference": "874adbd9222f928f6998732b25b01b41dff15b0c",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
...@@ -1869,7 +1915,7 @@ ...@@ -1869,7 +1915,7 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.37-dev" "dev-master": "1.38-dev"
} }
}, },
"autoload": { "autoload": {
...@@ -1907,7 +1953,7 @@ ...@@ -1907,7 +1953,7 @@
"keywords": [ "keywords": [
"templating" "templating"
], ],
"time": "2019-01-14T14:59:29+00:00" "time": "2019-03-12T18:45:24+00:00"
} }
], ],
"packages-dev": [ "packages-dev": [
...@@ -1972,16 +2018,16 @@ ...@@ -1972,16 +2018,16 @@
}, },
{ {
"name": "codeception/codeception", "name": "codeception/codeception",
"version": "2.5.2", "version": "2.5.4",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/Codeception/Codeception.git", "url": "https://github.com/Codeception/Codeception.git",
"reference": "4f89de32929fef53ca6d83b159fe329b6d484c1c" "reference": "a2ecfe2f3ad36cc29904d2d566b0d7280854e6c9"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/Codeception/Codeception/zipball/4f89de32929fef53ca6d83b159fe329b6d484c1c", "url": "https://api.github.com/repos/Codeception/Codeception/zipball/a2ecfe2f3ad36cc29904d2d566b0d7280854e6c9",
"reference": "4f89de32929fef53ca6d83b159fe329b6d484c1c", "reference": "a2ecfe2f3ad36cc29904d2d566b0d7280854e6c9",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
...@@ -2013,7 +2059,7 @@ ...@@ -2013,7 +2059,7 @@
"predis/predis": "^1.0", "predis/predis": "^1.0",
"squizlabs/php_codesniffer": "~2.0", "squizlabs/php_codesniffer": "~2.0",
"symfony/process": ">=2.7 <5.0", "symfony/process": ">=2.7 <5.0",
"vlucas/phpdotenv": "^2.4.0" "vlucas/phpdotenv": "^3.0"
}, },
"suggest": { "suggest": {
"aws/aws-sdk-php": "For using AWS Auth in REST module and Queue module", "aws/aws-sdk-php": "For using AWS Auth in REST module and Queue module",
...@@ -2060,7 +2106,7 @@ ...@@ -2060,7 +2106,7 @@
"functional testing", "functional testing",
"unit testing" "unit testing"
], ],
"time": "2019-01-02T10:28:51+00:00" "time": "2019-02-20T20:45:25+00:00"
}, },
{ {
"name": "codeception/phpunit-wrapper", "name": "codeception/phpunit-wrapper",
...@@ -3001,6 +3047,7 @@ ...@@ -3001,6 +3047,7 @@
"mock", "mock",
"xunit" "xunit"
], ],
"abandoned": true,
"time": "2015-10-02T06:51:40+00:00" "time": "2015-10-02T06:51:40+00:00"
}, },
{ {
...@@ -3377,16 +3424,16 @@ ...@@ -3377,16 +3424,16 @@
}, },
{ {
"name": "symfony/browser-kit", "name": "symfony/browser-kit",
"version": "v3.4.21", "version": "v3.4.23",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/browser-kit.git", "url": "https://github.com/symfony/browser-kit.git",
"reference": "6d98fb221a263c66b1311203fe4eed154035f508" "reference": "c0fadd368c1031109e996316e53ffeb886d37ea1"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/browser-kit/zipball/6d98fb221a263c66b1311203fe4eed154035f508", "url": "https://api.github.com/repos/symfony/browser-kit/zipball/c0fadd368c1031109e996316e53ffeb886d37ea1",
"reference": "6d98fb221a263c66b1311203fe4eed154035f508", "reference": "c0fadd368c1031109e996316e53ffeb886d37ea1",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
...@@ -3430,20 +3477,20 @@ ...@@ -3430,20 +3477,20 @@
], ],
"description": "Symfony BrowserKit Component", "description": "Symfony BrowserKit Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2019-01-01T13:45:19+00:00" "time": "2019-02-23T15:06:07+00:00"
}, },
{ {
"name": "symfony/css-selector", "name": "symfony/css-selector",
"version": "v3.4.21", "version": "v3.4.23",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/css-selector.git", "url": "https://github.com/symfony/css-selector.git",
"reference": "12f86295c46c36af9896cf21db6b6b8a1465315d" "reference": "8ca29297c29b64fb3a1a135e71cb25f67f9fdccf"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/css-selector/zipball/12f86295c46c36af9896cf21db6b6b8a1465315d", "url": "https://api.github.com/repos/symfony/css-selector/zipball/8ca29297c29b64fb3a1a135e71cb25f67f9fdccf",
"reference": "12f86295c46c36af9896cf21db6b6b8a1465315d", "reference": "8ca29297c29b64fb3a1a135e71cb25f67f9fdccf",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
...@@ -3483,20 +3530,20 @@ ...@@ -3483,20 +3530,20 @@
], ],
"description": "Symfony CssSelector Component", "description": "Symfony CssSelector Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2019-01-02T09:30:52+00:00" "time": "2019-01-16T09:39:14+00:00"
}, },
{ {
"name": "symfony/dom-crawler", "name": "symfony/dom-crawler",
"version": "v3.4.21", "version": "v3.4.23",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/dom-crawler.git", "url": "https://github.com/symfony/dom-crawler.git",
"reference": "311f666d85d1075b0a294ba1f3de4ae9307d8180" "reference": "d40023c057393fb25f7ca80af2a56ed948c45a09"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/dom-crawler/zipball/311f666d85d1075b0a294ba1f3de4ae9307d8180", "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/d40023c057393fb25f7ca80af2a56ed948c45a09",
"reference": "311f666d85d1075b0a294ba1f3de4ae9307d8180", "reference": "d40023c057393fb25f7ca80af2a56ed948c45a09",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
...@@ -3540,20 +3587,20 @@ ...@@ -3540,20 +3587,20 @@
], ],
"description": "Symfony DomCrawler Component", "description": "Symfony DomCrawler Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2019-01-01T13:45:19+00:00" "time": "2019-02-23T15:06:07+00:00"
}, },
{ {
"name": "symfony/finder", "name": "symfony/finder",
"version": "v3.4.21", "version": "v3.4.23",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/finder.git", "url": "https://github.com/symfony/finder.git",
"reference": "3f2a2ab6315dd7682d4c16dcae1e7b95c8b8555e" "reference": "fcdde4aa38f48190ce70d782c166f23930084f9b"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/finder/zipball/3f2a2ab6315dd7682d4c16dcae1e7b95c8b8555e", "url": "https://api.github.com/repos/symfony/finder/zipball/fcdde4aa38f48190ce70d782c166f23930084f9b",
"reference": "3f2a2ab6315dd7682d4c16dcae1e7b95c8b8555e", "reference": "fcdde4aa38f48190ce70d782c166f23930084f9b",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
...@@ -3589,20 +3636,20 @@ ...@@ -3589,20 +3636,20 @@
], ],
"description": "Symfony Finder Component", "description": "Symfony Finder Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2019-01-01T13:45:19+00:00" "time": "2019-02-22T14:44:53+00:00"
}, },
{ {
"name": "symfony/process", "name": "symfony/process",
"version": "v3.4.21", "version": "v3.4.23",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/process.git", "url": "https://github.com/symfony/process.git",
"reference": "0d41dd7d95ed179aed6a13393b0f4f97bfa2d25c" "reference": "009f8dda80930e89e8344a4e310b08f9ff07dd2e"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/process/zipball/0d41dd7d95ed179aed6a13393b0f4f97bfa2d25c", "url": "https://api.github.com/repos/symfony/process/zipball/009f8dda80930e89e8344a4e310b08f9ff07dd2e",
"reference": "0d41dd7d95ed179aed6a13393b0f4f97bfa2d25c", "reference": "009f8dda80930e89e8344a4e310b08f9ff07dd2e",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
...@@ -3638,7 +3685,7 @@ ...@@ -3638,7 +3685,7 @@
], ],
"description": "Symfony Process Component", "description": "Symfony Process Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2019-01-02T21:24:08+00:00" "time": "2019-01-16T13:27:11+00:00"
}, },
{ {
"name": "victorjonsson/markdowndocs", "name": "victorjonsson/markdowndocs",
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
// Some standard defines // Some standard defines
define('GRAV', true); define('GRAV', true);
define('GRAV_VERSION', '1.5.8'); define('GRAV_VERSION', '1.5.10');
define('GRAV_TESTING', false); define('GRAV_TESTING', false);
define('DS', '/'); define('DS', '/');
......
...@@ -73,6 +73,7 @@ class Media extends AbstractMedia ...@@ -73,6 +73,7 @@ class Media extends AbstractMedia
protected function init() protected function init()
{ {
$config = Grav::instance()['config']; $config = Grav::instance()['config'];
$locator = Grav::instance()['locator'];
$exif_reader = isset(Grav::instance()['exif']) ? Grav::instance()['exif']->getReader() : false; $exif_reader = isset(Grav::instance()['exif']) ? Grav::instance()['exif']->getReader() : false;
$media_types = array_keys(Grav::instance()['config']->get('media.types')); $media_types = array_keys(Grav::instance()['config']->get('media.types'));
...@@ -155,7 +156,11 @@ class Media extends AbstractMedia ...@@ -155,7 +156,11 @@ class Media extends AbstractMedia
$meta_data = $meta->getData(); $meta_data = $meta->getData();
$meta_trimmed = array_diff_key($meta_data, array_flip($this->standard_exif)); $meta_trimmed = array_diff_key($meta_data, array_flip($this->standard_exif));
if ($meta_trimmed) { if ($meta_trimmed) {
$file = File::instance($meta_path); if ($locator->isStream($meta_path)) {
$file = File::instance($locator->findResource($meta_path, true, true));
} else {
$file = File::instance($meta_path);
}
$file->save(Yaml::dump($meta_trimmed)); $file->save(Yaml::dump($meta_trimmed));
$types['meta']['file'] = $meta_path; $types['meta']['file'] = $meta_path;
} }
......
...@@ -687,6 +687,8 @@ class Page implements PageInterface ...@@ -687,6 +687,8 @@ class Page implements PageInterface
$this->content = str_replace("<p>{$delimiter}</p>", '', $this->content); $this->content = str_replace("<p>{$delimiter}</p>", '', $this->content);
} }
// Fire event when Page::content() is called
Grav::instance()->fireEvent('onPageContent', new Event(['page' => $this]));
} }
return $this->content; return $this->content;
......
...@@ -16,6 +16,7 @@ use Grav\Common\Page\Page; ...@@ -16,6 +16,7 @@ use Grav\Common\Page\Page;
use Grav\Common\Page\Pages; use Grav\Common\Page\Pages;
use RocketTheme\Toolbox\ResourceLocator\UniformResourceLocator; use RocketTheme\Toolbox\ResourceLocator\UniformResourceLocator;
use RocketTheme\Toolbox\Event\Event; use RocketTheme\Toolbox\Event\Event;
use Phive\Twig\Extensions\Deferred\DeferredExtension;
class Twig class Twig
{ {
...@@ -181,6 +182,7 @@ class Twig ...@@ -181,6 +182,7 @@ class Twig
$this->twig->addExtension(new \Twig_Extension_Debug()); $this->twig->addExtension(new \Twig_Extension_Debug());
} }
$this->twig->addExtension(new TwigExtension()); $this->twig->addExtension(new TwigExtension());
$this->twig->addExtension(new DeferredExtension());
$this->grav->fireEvent('onTwigExtensions'); $this->grav->fireEvent('onTwigExtensions');
......
enabled: true
route: /admin
cache_enabled: false
theme: grav
logo_text: M3P2
content_padding: true
twofa_enabled: false
sidebar:
activate: tab
hover_delay: 100
size: auto
dashboard:
days_of_stats: 7
widgets:
dashboard-maintenance: true
dashboard-statistics: true
dashboard-notifications: true
dashboard-feed: true
dashboard-pages: true
pages:
show_parents: both
show_modular: true
session:
timeout: 1800
warnings:
delete_page: true
edit_mode: normal
frontend_preview_target: inline
show_github_msg: true
pages_list_display_field: title
google_fonts: false
admin_icons: line-awesome
enable_auto_updates_check: true
notifications:
feed: true
dashboard: true
plugins: true
themes: true
popularity:
enabled: true
ignore:
- '/test*'
- /modular
history:
daily: '30'
monthly: '12'
visitors: '20'
pagemedia:
resize_width: 0
resize_height: 0
res_min_width: 0
res_min_height: 0
res_max_width: 0
res_max_height: 0
resize_quality: 0.8
# v1.8.20
## 03/20/2019
1. [](#improved)
* Added security field to column [#1622](https://github.com/getgrav/grav-plugin-admin/pull/1622)
# v1.8.19 # v1.8.19
## 02/13/2019 ## 02/13/2019
......
name: Admin Panel name: Admin Panel
version: 1.8.19 version: 1.8.20
description: Adds an advanced administration panel to manage your site description: Adds an advanced administration panel to manage your site
icon: empire icon: empire
author: author:
......
{% if field.fields %} {% if field.security is empty or authorize(array(field.security)) %}
<div class="form-column block pure-u-1-{{ cols }}">
{% for field in field.fields %} {% if field.fields %}
{% if field.type %} <div class="form-column block pure-u-1-{{ cols }}">
{% set value = field.name ? data.value(field.name) : data.toArray %} {% for field in field.fields %}
{% include ["forms/fields/#{field.type}/#{field.type}.html.twig", 'forms/fields/text/text.html.twig'] %} {% if field.type %}
{% endif %} {% set value = field.name ? data.value(field.name) : data.toArray %}
{% endfor %} {% include ["forms/fields/#{field.type}/#{field.type}.html.twig", 'forms/fields/text/text.html.twig'] %}
</div> {% endif %}
{% endfor %}
</div>
{% endif %}
{% endif %} {% endif %}
# v2.8.4
## 03/20/2019
1. [](#improved)
* Enable "brute force" protection by default [#195](https://github.com/getgrav/grav-plugin-login/pulls/195)
* UPdated various language translations
1. [](#bugfix)
* Set security timeouts in blueprints to use `minutes` rather than `seconds` [#194](https://github.com/getgrav/grav-plugin-login/issues/194)
* Send "notification" email to `to` address rather than `from` [#188](https://github.com/getgrav/grav-plugin-login/pulls/188)
# v2.8.3 # v2.8.3
## 01/25/2018 ## 01/25/2019
1. [](#new) 1. [](#new)
* Wrap data in `onUserLoginRegisterData` event in object to allow reference * Wrap data in `onUserLoginRegisterData` event in object to allow reference
......
...@@ -161,10 +161,10 @@ rememberme: ...@@ -161,10 +161,10 @@ rememberme:
timeout: 604800 # Timeout in seconds. Defaults to 1 week timeout: 604800 # Timeout in seconds. Defaults to 1 week
name: grav-rememberme # Name prefix of the session cookie name: grav-rememberme # Name prefix of the session cookie
max_pw_resets_count: 0 # Number of password resets in a specific time frame (0 = unlimited) max_pw_resets_count: 2 # Number of password resets in a specific time frame (0 = unlimited)
max_pw_resets_interval: 60 # Time in minutes to track password resets max_pw_resets_interval: 60 # Time in minutes to track password resets
max_login_count: 0 # Number of failed login attempts in a specific time frame (0 = unlimited) max_login_count: 5 # Number of failed login attempts in a specific time frame (0 = unlimited)
max_login_interval: 2 # Time in minutes to track login attempts max_login_interval: 10 # Time in minutes to track login attempts
user_registration: user_registration:
enabled: false # Enable User Registration Process enabled: false # Enable User Registration Process
......
name: Login name: Login
version: 2.8.3 version: 2.8.4
description: Enables user authentication and login screen. description: Enables user authentication and login screen.
icon: sign-in icon: sign-in
author: author:
...@@ -372,7 +372,7 @@ form: ...@@ -372,7 +372,7 @@ form:
size: x-small size: x-small
label: PLUGIN_LOGIN.MAX_RESETS_INTERVAL label: PLUGIN_LOGIN.MAX_RESETS_INTERVAL
help: PLUGIN_LOGIN.MAX_RESETS_INTERVAL_HELP help: PLUGIN_LOGIN.MAX_RESETS_INTERVAL_HELP
append: PLUGIN_LOGIN.SECONDS append: PLUGIN_LOGIN.MINUTES
validate: validate:
type: number type: number
min: 1 min: 1
...@@ -392,7 +392,7 @@ form: ...@@ -392,7 +392,7 @@ form:
size: x-small size: x-small
label: PLUGIN_LOGIN.MAX_LOGINS_INTERVAL label: PLUGIN_LOGIN.MAX_LOGINS_INTERVAL
help: PLUGIN_LOGIN.MAX_LOGINS_INTERVAL_HELP help: PLUGIN_LOGIN.MAX_LOGINS_INTERVAL_HELP
append: PLUGIN_LOGIN.SECONDS append: PLUGIN_LOGIN.MINUTES
validate: validate:
type: number type: number
min: 1 min: 1
...@@ -338,7 +338,7 @@ class Login ...@@ -338,7 +338,7 @@ class Login
$user->email, $user->email,
$this->grav['base_url_absolute'], $this->grav['base_url_absolute'],
]); ]);
$to = $this->config->get('plugins.email.from'); $to = $this->config->get('plugins.email.to');
if (empty($to)) { if (empty($to)) {
throw new \RuntimeException($this->language->translate('PLUGIN_LOGIN.EMAIL_NOT_CONFIGURED')); throw new \RuntimeException($this->language->translate('PLUGIN_LOGIN.EMAIL_NOT_CONFIGURED'));
...@@ -508,8 +508,8 @@ class Login ...@@ -508,8 +508,8 @@ class Login
$interval = $this->grav['config']->get('plugins.login.max_login_interval', 10); $interval = $this->grav['config']->get('plugins.login.max_login_interval', 10);
break; break;
case 'pw_resets': case 'pw_resets':
$maxCount = $this->grav['config']->get('plugins.login.max_pw_resets_count', 0); $maxCount = $this->grav['config']->get('plugins.login.max_pw_resets_count', 2);
$interval = $this->grav['config']->get('plugins.login.max_pw_resets_interval', 2); $interval = $this->grav['config']->get('plugins.login.max_pw_resets_interval', 60);
break; break;
} }
$this->rateLimiters[$context] = new RateLimiter($context, $maxCount, $interval); $this->rateLimiters[$context] = new RateLimiter($context, $maxCount, $interval);
......
...@@ -106,6 +106,7 @@ PLUGIN_LOGIN: ...@@ -106,6 +106,7 @@ PLUGIN_LOGIN:
MAX_LOGINS_INTERVAL_HELP: "The time interval for the login count value" MAX_LOGINS_INTERVAL_HELP: "The time interval for the login count value"
TOO_MANY_LOGIN_ATTEMPTS: "Too many failed login attempted in the configured time (%s minutes)" TOO_MANY_LOGIN_ATTEMPTS: "Too many failed login attempted in the configured time (%s minutes)"
SECONDS: "seconds" SECONDS: "seconds"
MINUTES: "minutes"
RESETS: "resets" RESETS: "resets"
ATTEMPTS: "attempts" ATTEMPTS: "attempts"
ROUTES: "Routes" ROUTES: "Routes"
......
...@@ -51,6 +51,7 @@ PLUGIN_LOGIN: ...@@ -51,6 +51,7 @@ PLUGIN_LOGIN:
EMAIL_FOOTER: "GetGrav.org" EMAIL_FOOTER: "GetGrav.org"
ACTIVATION_LINK_EXPIRED: "Время ссылки для активации истекло" ACTIVATION_LINK_EXPIRED: "Время ссылки для активации истекло"
USER_ACTIVATED_SUCCESSFULLY: "Пользователь успешно активирован" USER_ACTIVATED_SUCCESSFULLY: "Пользователь успешно активирован"
USER_ACTIVATED_SUCCESSFULLY_NOT_ENABLED: "Аккаунт пользователя активирован, но учетная запись просматривается"
INVALID_REQUEST: "Неверный запрос" INVALID_REQUEST: "Неверный запрос"
USER_REGISTRATION: "Регистрация пользователя" USER_REGISTRATION: "Регистрация пользователя"
USER_REGISTRATION_ENABLED_HELP: "Включить регистрацию пользователя" USER_REGISTRATION_ENABLED_HELP: "Включить регистрацию пользователя"
...@@ -127,3 +128,5 @@ PLUGIN_LOGIN: ...@@ -127,3 +128,5 @@ PLUGIN_LOGIN:
2FA_SECRET_HELP: "Сканируйте этот QR-код в свое [Приложение аутентификации](https://learn.getgrav.org/admin-panel/2fa#apps). Также рекомендуется сохранить секрет в безопасном месте, если вам прийдется переустановить приложение. Проверьте [Grav docs](https://learn.getgrav.org/admin-panel/2fa) для дополнительной информации " 2FA_SECRET_HELP: "Сканируйте этот QR-код в свое [Приложение аутентификации](https://learn.getgrav.org/admin-panel/2fa#apps). Также рекомендуется сохранить секрет в безопасном месте, если вам прийдется переустановить приложение. Проверьте [Grav docs](https://learn.getgrav.org/admin-panel/2fa) для дополнительной информации "
2FA_REGENERATE: "Сгенерировать повторно" 2FA_REGENERATE: "Сгенерировать повторно"
BTN_CANCEL: "Отмена" BTN_CANCEL: "Отмена"
MANUALLY_ENABLE: "Вручную включить"
MANUALLY_ENABLE_HELP: "При использовании «активации по электронной почте» и «уведомление по электронной почте» вы можете убедиться, что пользователь может самостоятельно активироваться, но пользователь требует ручного включения для входа в систему"
PLUGIN_LOGIN:
USERNAME: "Логін"
EMAIL: "Email"
USERNAME_EMAIL: "Логін/Email"
PASSWORD: "Пароль"
ACCESS_DENIED: "Доступ заборонено..."
LOGIN_FAILED: "Помилка входу..."
LOGIN_SUCCESSFUL: "Ви успішно увійшли в систему."
BTN_LOGIN: "Увійти"
BTN_LOGOUT: "Вийти"
BTN_FORGOT: "Забув"
BTN_REGISTER: "Реєстрація"
BTN_RESET: "Скидання пароля"
BTN_SEND_INSTRUCTIONS: "Надіслати інструкції по скиданню"
RESET_LINK_EXPIRED: "Час посилання для скидання минув, спробуйте ще раз"
RESET_PASSWORD_RESET: "Пароль був скинутий"
RESET_INVALID_LINK: "Невірне посилання скидання, спробуйте ще раз"
FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "Інструкції щодо скидання пароля були надіслані по електронній пошті"
FORGOT_FAILED_TO_EMAIL: "Не вдалося надіслати інструкції електронною поштою, повторіть спробу пізніше"
FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL: "Не вдається скинути пароль для %s, адреса електронної пошти не встановлена"
FORGOT_CANNOT_RESET_EMAIL_NO_PASSWORD: "Неможливо скинути пароль для %s, цей email пов'язаний з віддаленим обліковим записом"
FORGOT_USERNAME_DOES_NOT_EXIST: "Користувач з ім'ям <b>%s </b> не існує"
FORGOT_EMAIL_NOT_CONFIGURED: "Неможливо скинути пароль. Цей сайт не налаштований для надіслання листів"
FORGOT_EMAIL_SUBJECT: "%s Запит на скидання пароля"
FORGOT_EMAIL_BODY: "<h1>Відновлення паролю</h1><p>Шановний %1$s,</p><p>Був зроблений запит для скидання пароля від <b>%4$s</b>.</p><p><br /><a href=\"%2$s\" class=\"btn-primary\">Нажмите, чтобы сбросить пароль</a><br /><br /></p><p>Или скопируйте следующий URL-адрес в адресную строку браузера:</p> <p class=\"word-break\"><a href=\"%2$s\">%2$s</a></p> <p><br />С уважением,<br /><br />%3$s</p>"
SESSION: "&ldquo;Запам'ятати мене&rdquo;-Сесія"
REMEMBER_ME: "Запам'ятати мене"
REMEMBER_ME_HELP: "Встановлює постійний файл cookie у вашому браузері, щоб дозволити постійну аутентифікацію входу між сеансами."
REMEMBER_ME_STOLEN_COOKIE: "Хтось ще використовував вашу реєстраційну інформацію для доступу до цієї сторінки! Всі сеанси були відключені. Увійдіть до свого облікового запису та перевірте свої дані."
BUILTIN_CSS: "Використовувати вбудований CSS"
BUILTIN_CSS_HELP: "Використовувати CSS, наданий плагіном адміністратора."
ROUTE: "Шлях сторінки входу"
ROUTE_HELP: "Шлях до користувальницької сторінці входу, яку надає ваша тема"
ROUTE_REGISTER: "Шлях реєстрації"
ROUTE_REGISTER_HELP: "Шлях до користувальницької сторінці реєстрації. Заповніть, якщо ви хочете використовувати вбудовану сторінку реєстрації. Залиште його порожнім, якщо у вас є власна реєстраційна форма"
USERNAME_NOT_VALID: "Ім'я користувача має бути від 3 до 16 символів, включаючи малі літери, цифри, символи підкреслення та дефіси. Великі літери, пробіли та спеціальні символи не допускаються"
USERNAME_NOT_AVAILABLE: "Ім'я користувача %s вже існує, виберіть інше ім'я користувача"
EMAIL_NOT_AVAILABLE: "Адреса електронної пошти %s вже існує, виберіть іншу адресу електронної пошти"
PASSWORD_NOT_VALID: "Пароль повинен містити як мінімум одне число, одну прописну і малу літеру, і бути не менше 8 символів"
PASSWORDS_DO_NOT_MATCH: "Паролі не співпадають. Двічі перевірте, що ви двічі ввели той же пароль"
USER_NEEDS_EMAIL_FIELD: "Користувачеві потрібно поле електронної пошти"
EMAIL_SENDING_FAILURE: "Помилка під час надіслання листа"
ACTIVATION_EMAIL_SUBJECT: "Активуйте свій обліковий запис %s"
ACTIVATION_EMAIL_BODY: "Привіт %s, перейдіть <a href=\"%s\">сюди</a> для активації вашого облікового запису %s"
ACTIVATION_NOTICE_MSG: "Привіт %s, ваш обліковий запис створено, будь ласка перевірте електронну пошту, щоб повністю його активувати"
WELCOME_EMAIL_SUBJECT: "Ласкаво просимо в %s"
WELCOME_EMAIL_BODY: "Привіт %s, ласкаво просимо в %s!"
WELCOME_NOTICE_MSG: "Привіт %s, ваш обліковий запис був успішно створений"
NOTIFICATION_EMAIL_SUBJECT: "Новий користувач %s"
NOTIFICATION_EMAIL_BODY: "Привіт, новий користувач, зареєстрований на %s. Ім'я користувача: %s, email: %s"
EMAIL_FOOTER: "GetGrav.org"
ACTIVATION_LINK_EXPIRED: "Час посилання для активації минув"
USER_ACTIVATED_SUCCESSFULLY: "Користувач успішно активований"
USER_ACTIVATED_SUCCESSFULLY_NOT_ENABLED: "Аккаунт користувача активований, але обліковий запис проглядається"
INVALID_REQUEST: "Невірний запит"
USER_REGISTRATION: "Реєстрація користувача"
USER_REGISTRATION_ENABLED_HELP: "Включити реєстрацію користувача"
VALIDATE_PASSWORD1_AND_PASSWORD2: "Подвійна перевірка введеного пароля"
VALIDATE_PASSWORD1_AND_PASSWORD2_HELP: "Підтвердити і порівняти два різних поля для паролів з іменами `password1` і` password2`. Увімкніть це, якщо у вас є два поля пароля в реєстраційній формі"
SET_USER_DISABLED: "Встановити користувача як відключений"
SET_USER_DISABLED_HELP: "Найкраще використовувати електронну пошту «Надіслати електронну пошту активації». Додає користувача в Grav, але встановлює його як відключений"
LOGIN_AFTER_REGISTRATION: "Вхід в систему після реєстрації"
LOGIN_AFTER_REGISTRATION_HELP: "Автоматичний вхід в систему після реєстрації. Якщо потрібна активація електронної пошти, користувач буде входити в систему відразу після активації облікового запису"
SEND_ACTIVATION_EMAIL: "Надіслати лист активації"
SEND_ACTIVATION_EMAIL_HELP: "Надіслати електронного листа користувачу для активації облікового запису. Увімкніть параметр «Встановити користувача як відключений» при використанні цієї функції, щоб користувач був відключений, і для активації облікового запису буде надіслано повідомлення електронної пошти"
SEND_NOTIFICATION_EMAIL: "Надіслати повідомлення по електронній пошті"
SEND_NOTIFICATION_EMAIL_HELP: "Повідомляє адміністратору сайту про реєстрацію нового користувача. Електронна пошта буде відправлена в поле «Кому» в конфігурації плагіна електронної пошти"
SEND_WELCOME_EMAIL: "Надіслати вітальний лист"
SEND_WELCOME_EMAIL_HELP: "Надсилає електронного листа знову зареєстрованому користувачу"
DEFAULT_VALUES: "Значення за замовчуванням"
DEFAULT_VALUES_HELP: "Список назв полів і пов'язаних значень, які будуть додані в профіль користувача (файл yaml) за замовчуванням, без налаштування користувачем. Розділіть декілька значень комою, без пробілів між значеннями"
ADDITIONAL_PARAM_KEY: "Параметр"
ADDITIONAL_PARAM_VALUE: "Значення"
REGISTRATION_FIELDS: "Реєстраційні поля"
REGISTRATION_FIELDS_HELP: "Додайте поля, які будуть додані в файл yaml користувача. Поля, не перераховані тут, не будуть додані, навіть якщо вони присутні в реєстраційній формі"
REGISTRATION_FIELD_KEY: "Ім'я поля"
REDIRECT_AFTER_LOGIN: "Перенаправлення після входу в систему"
REDIRECT_AFTER_LOGIN_HELP: "Призначений для користувача маршрут для перенаправлення після входу в систему"
REDIRECT_AFTER_LOGOUT: "Перенаправлення після виходу з системи"
REDIRECT_AFTER_LOGOUT_HELP: "Призначений для користувача маршрут для перенаправлення після виходу з системи"
REDIRECT_AFTER_REGISTRATION: "Перенаправлення після реєстрації"
REDIRECT_AFTER_REGISTRATION_HELP: "Призначений для користувача маршрут для перенаправлення після реєстрації"
OPTIONS: "Опції"
EMAIL_VALIDATION_MESSAGE: "Адреса ел. пошти повинна бути дійсною"
PASSWORD_VALIDATION_MESSAGE: "Пароль повинен містити як мінімум одне число, одну прописну і малу літеру і бути не менше 8 символів"
TIMEOUT_HELP: "Встановлює тайм-аут сеансу в секундах, коли функція «Запам'ятати мене» включена і встановлена користувачем. Мінімум 604800, що означає 1 тиждень"
GROUPS_HELP: "Список груп, в які увійде новий зареєстрований користувач"
SITE_ACCESS_HELP: "Список рівнів доступу до сайту, зареєстрованих користувачів. Приклад: `login` ->` true`"
WELCOME: "Ласкаво просимо"
REDIRECT_AFTER_ACTIVATION: "Перенаправлення після активації користувача"
REDIRECT_AFTER_ACTIVATION_HELP: "Використовується, якщо користувачеві потрібно активувати обліковий запис по електронній пошті. Після активації цей маршрут буде показаний"
REGISTRATION_DISABLED: "Реєстрація відключена"
USE_PARENT_ACL_LABEL: "Використовувати батьківські правила доступу"
USE_PARENT_ACL_HELP: "Перевірте правила доступу до батьків, якщо правила не визначені"
PROTECT_PROTECTED_PAGE_MEDIA_LABEL: "Захист захищених сторінок."
PROTECT_PROTECTED_PAGE_MEDIA_HELP: "Якщо цей параметр включений, то доступ до захищеної сторінці для входу в систему також захищений паролем, і його не можна побачити, якщо він не зареєстрований"
SECURITY_TAB: "Безпека"
MAX_RESETS_COUNT: "Максимальна кількість скидання пароля"
MAX_RESETS_COUNT_HELP: "Налаштування захисту пароля від флуду (0 - не обмежена)"
MAX_RESETS_INTERVAL: "Максимальний інтервал скидання пароля"
MAX_RESETS_INTERVAL_HELP: "Інтервал часу для максимальної кількості скидання пароля"
FORGOT_CANNOT_RESET_IT_IS_BLOCKED: "Неможливо скинути пароль для %s, функція скидання пароля тимчасово відключена, спробуйте пізніше (максимум %s хвилин)"
MAX_LOGINS_COUNT: "Максимальна кількість входів"
MAX_LOGINS_COUNT_HELP: "Налаштування захисту від флуду (0 - не обмежена)"
MAX_LOGINS_INTERVAL: "Максимальний інтервал входу"
MAX_LOGINS_INTERVAL_HELP: "Часовий інтервал для значення лічильника входу"
TOO_MANY_LOGIN_ATTEMPTS: "Занадто багато невдалих спроб входу в налаштований час (%s хвилин)"
SECONDS: "секунд"
RESETS: "скидань"
ATTEMPTS: "спроб"
ROUTES: "Маршрути"
ROUTE_FORGOT: "Забули пароль"
ROUTE_RESET: "Скидання пароля"
ROUTE_PROFILE: "Профілю користувача"
ROUTE_ACTIVATE: "Активації користувача"
LOGGED_OUT: "Ви успішно вийшли з системи..."
PAGE_RESTRICTED: "Доступ обмежений, увійдіть в систему..."
DYNAMIC_VISIBILITY: "Динамічна видимість сторінки"
DYNAMIC_VISIBILITY_HELP: "Дозволяє динамічно обробляти видимість сторінки на основі правил доступу, якщо для параметра login.visibility_requires_access встановлено значення true на сторінці"
USER_IS_REMOTE_ONLY: "Цей користувач аутентифікований за допомогою віддаленого сервісу, тому профіль не може бути збережений"
2FA_TITLE: "2-факторна аутентифікація"
2FA_INSTRUCTIONS: "##### 2-факторна аутентифікація\nУ вашому обліковому запису включена **2FA**. Будь ласка, використовуйте свою **2FA** програму для введення цього **6-значного коду** для завершення процесу входу в систему."
2FA_REGEN_HINT: "Щоб відновити секрет, вам буде потрібно оновити програму для аутентифікації"
2FA_FAILED: "Неприпустимий код перевірки справжності 2-факторної аутентифікації, спробуйте ще раз...."
2FA_ENABLED: "2FA Включена"
2FA_CODE_INPUT: "000000"
2FA_SECRET: "2FA Секрет"
2FA_SECRET_HELP: "Відскануйте цей QR-код у свою [Програму аутентифікації](https://learn.getgrav.org/admin-panel/2fa#apps). Також рекомендується зберегти секрет в безпечному місці, якщо вам доведеться перевстановити програму. Перевірте [Grav docs](https://learn.getgrav.org/admin-panel/2fa) для додаткової інформації "
2FA_REGENERATE: "Згенерувати повторно"
BTN_CANCEL: "Скасування"
MANUALLY_ENABLE: "Вручну включити"
MANUALLY_ENABLE_HELP: "При використанні «активації по електронній пошті» і «повідомлення по електронній пошті» ви можете переконатися, що користувач може самостійно активуватися, але користувач вимагає ручного включення для входу в систему"
...@@ -20,10 +20,10 @@ rememberme: ...@@ -20,10 +20,10 @@ rememberme:
timeout: 604800 # Timeout in seconds. Defaults to 1 week timeout: 604800 # Timeout in seconds. Defaults to 1 week
name: grav-rememberme # Name prefix of the session cookie name: grav-rememberme # Name prefix of the session cookie
max_pw_resets_count: 0 # Number of password resets in a specific time frame (0 = unlimited) max_pw_resets_count: 2 # Number of password resets in a specific time frame (0 = unlimited)
max_pw_resets_interval: 60 # Time in minutes to track password resets max_pw_resets_interval: 60 # Time in minutes to track password resets
max_login_count: 0 # Number of failed login attempts in a specific time frame (0 = unlimited) max_login_count: 5 # Number of failed login attempts in a specific time frame (0 = unlimited)
max_login_interval: 2 # Time in minutes to track login attempts max_login_interval: 10 # Time in minutes to track login attempts
user_registration: user_registration:
enabled: false # Enable User Registration Process enabled: false # Enable User Registration Process
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment