+ * Fixed broken markdown Twig tag [#2635](https://github.com/getgrav/grav/issues/2635)
+ * Force Symfony 4.2 in Grav 1.6 to remove a bunch of deprecated messages
+
+# v1.6.14
+## 08/18/2019
+
+1. [](#bugfix)
+ * Actually include fix for `system\router.php` [#2627](https://github.com/getgrav/grav/issues/2627)
+
+# v1.6.13
+## 08/16/2019
+
+1. [](#bugfix)
+ * Regression fix for `system\router.php` [#2627](https://github.com/getgrav/grav/issues/2627)
+
+# v1.6.12
+## 08/14/2019
+
+1. [](#new)
+ * Added support for custom `FormFlash` save locations
+ * Added a new `Utils::arrayLower()` method for lowercasing arrays
+ * Support new GRAV_BASEDIR environment variable [#2541](https://github.com/getgrav/grav/pull/2541)
+ * Allow users to override plugin handler priorities [#2165](https://github.com/getgrav/grav/pull/2165)
+1. [](#improved)
+ * Use new `Utils::getSupportedPageTypes()` to enforce `html,htm` at the front of the list [#2531](https://github.com/getgrav/grav/issues/2531)
+ * Updated vendor libraries
+ * Markdown filter is now page-aware so that it works with modular references [admin#1731](https://github.com/getgrav/grav-plugin-admin/issues/1731)
+ * Check of `GRAV_USER_INSTANCE` constant is already defined [#2621](https://github.com/getgrav/grav/pull/2621)
+1. [](#bugfix)
+ * Fixed some potential issues when `$grav['user']` is not set
+ * Fixed error when calling `Media::add($name, null)`
+ * Fixed `url()` returning wrong path if using stream with grav root path in it, eg: `user-data://shop` when Grav is in `/shop`
+ * Fixed `url()` not returning a path to non-existing file (`user-data://shop` => `/user/data/shop`) if it is set to fail gracefully
+ * Fixed `url()` returning false on unknown streams, such as `ftp://domain.com`, they should be treated as external URL
+ * Fixed Flex User to have permissions to save and delete his own user
+ * Fixed new Flex User creation not being possible because of username could not be given
+ * Fixed fatal error 'Expiration date must be an integer, a DateInterval or null, "double" given' [#2529](https://github.com/getgrav/grav/issues/2529)
+ * Fixed non-existing Flex object having a bad media folder
+ * Fixed collections using `page@.self:` should allow modular pages if requested
+ * Fixed an error when trying to delete a file from non-existing Flex Object
+ * Fixed `FlexObject::exists()` failing sometimes just after the object has been saved
+ * Fixed CSV formatter not encoding strings with `"` and `,` properly
+ * Fixed var order in `Validation.php` [#2610](https://github.com/getgrav/grav/issues/2610)
+
+# v1.6.11
+## 06/21/2019
+
+1. [](#new)
+ * Added `FormTrait::getAllFlashes()` method to get all the available form flash objects for the form
+ * Added creation and update timestamps to `FormFlash` objects
+1. [](#improved)
+ * Added `FormFlashInterface`, changed constructor to take `$config` array
+1. [](#bugfix)
+ * Fixed error in `ImageMedium::url()` if the image cache folder does not exist
+ * Fixed empty form flash name after file upload or form state update
+ * Fixed a bug in `Route::withParam()` method
+ * Fixed issue with `FormFlash` objects when there is no session initialized
+
+# v1.6.10
+## 06/14/2019
+
+1. [](#improved)
+ * Added **page blueprints** to `YamlLinter` CLI and Admin reports
+ * Removed `Gitter` and `Slack` [#2502](https://github.com/getgrav/grav/issues/2502)
+ * Optimizations for Plugin/Theme loading
+ * Generalized markdown classes so they can be used outside of `Page` scope with a custom `Excerpts` class instance
+ * Change minimal port number to 0 (unix socket) [#2452](https://github.com/getgrav/grav/issues/2452)
+1. [](#bugfix)
+ * Force question to install demo content in theme update [#2493](https://github.com/getgrav/grav/issues/2493)
+ * Fixed GPM errors from blueprints not being logged [#2505](https://github.com/getgrav/grav/issues/2505)
+ * Don't error when IP is invalid [#2507](https://github.com/getgrav/grav/issues/2507)
+ * Fixed regression with `bin/plugin` not listing the plugins available (1c725c0)
+ * Fixed bitwise operator in `TwigExtension::exifFunc()` [#2518](https://github.com/getgrav/grav/issues/2518)
+ * Fixed issue with lang prefix incorrectly identifying as admin [#2511](https://github.com/getgrav/grav/issues/2511)
+ * Fixed issue with `U0ils::pathPrefixedBYLanguageCode()` and trailing slash [#2510](https://github.com/getgrav/grav/issues/2511)
+ * Fixed regresssion issue of `Utils::Url()` not returning `false` on failure. Added new optional `fail_gracefully` 3rd attribute to return string that caused failure [#2524](https://github.com/getgrav/grav/issues/2524)
+
+# v1.6.9
+## 05/09/2019
+
+1. [](#new)
+ * Added `Route::withoutParams()` methods
+ * Added `Pages::setCheckMethod()` method to override page configuration in Admin Plugin
+ * Added `Cache::clearCache('invalidate')` parameter for just invalidating the cache without deleting any cached files
+ * Made `UserCollectionInderface` to extend `Countable` to get the count of existing users
+ * Fix for `avatar_url` provided by 3rd party providers
+ * Fixed non standard `lang` code lengths in `Utils` and `Session` detection
+ * Fixed saving a new object in Flex `SimpleStorage`
+ * Fixed exception in `Flex::getDirectories()` if the first parameter is set
+ * Output correct "Last Updated" in `bin/gpm info` command
+ * Checkbox getting interpreted as string, so created new `Validation::filterCheckbox()`
+ * Fixed backwards compatibility to `select` field with `selectize.create` set to true [git-sync#141](https://github.com/trilbymedia/grav-plugin-git-sync/issues/141)
+ * Fixed `YamlFormatter::decode()` to always return array [#2494](https://github.com/getgrav/grav/pull/2494)
+ * Fixed `FormTrait::render()` not providing config variable
+ * Updated `bin/grav clean` to clear `cache/compiled` and `user/config/security.yaml`
+
+# v1.6.7
+## 04/22/2019
+
+1. [](#new)
+ * Added a new `bin/grav yamllinter` CLI command to find YAML Linting issues [#2468](https://github.com/getgrav/grav/issues/2468#issuecomment-485151681)
+1. [](#improved)
+ * Improve `FormTrait` backwards compatibility with existing forms
+ * Added a new `Utils::getSubnet()` function for IPv4/IPv6 parsing [#2465](https://github.com/getgrav/grav/pull/2465)
+1. [](#bugfix)
+ * Remove disabled fields from the form schema
+ * Fix issue when excluding `inlineJs` and `inlineCss` from Assets pipeline [#2468](https://github.com/getgrav/grav/issues/2468)
+ * Fix for manually set position on external URLs [#2470](https://github.com/getgrav/grav/issues/2470)
+
+# v1.6.6
+## 04/17/2019
+
+1. [](#new)
+ * `FormInterface` now implements `RenderInterface`
+ * Added new `FormInterface::getTask()` method which reads the task from `form.task` in the blueprint
+1. [](#improved)
+ * Updated vendor libraries to latest
+1. [](#bugfix)
+ * Rollback `redirect_default_route` logic as it has issues with multi-lang [#2459](https://github.com/getgrav/grav/issues/2459)
+ * Fix potential issue with `|contains` Twig filter on PHP 7.3
+ * Fixed bug in text field filtering: return empty string if value isn't a string or number [#2460](https://github.com/getgrav/grav/issues/2460)
+ * Force Asset `priority` to be an integer and not throw error if invalid string passed [#2461](https://github.com/getgrav/grav/issues/2461)
+ * Fixed bug in text field filtering: return empty string if value isn't a string or number
+ * Fixed `FlexForm` missing getter methods for defining form variables
+
+# v1.6.5
+## 04/15/2019
+
+1. [](#bugfix)
+ * Backwards compatiblity with old `Uri::__toString()` output
+
+# v1.6.4
+## 04/15/2019
+
+1. [](#bugfix)
+ * Improved `redirect_default_route` logic as well as `Uri::toArray()` to take into account `root_path` and `extension`
+ * Rework logic to pull out excluded files from pipeline more reliably [#2445](https://github.com/getgrav/grav/issues/2445)
+ * Better logic in `Utils::normalizePath` to handle externals properly [#2216](https://github.com/getgrav/grav/issues/2216)
+ * Fixed to force all `Page::taxonomy` to be treated as strings [#2446](https://github.com/getgrav/grav/issues/2446)
+ * Fixed issue with `Grav['user']` not being available [form#332](https://github.com/getgrav/grav-plugin-form/issues/332)
+ * Updated rounding logic for `Utils::parseSize()` [#2394](https://github.com/getgrav/grav/issues/2394)
+ * Fixed Flex simple storage not being properly initialized if used with caching
+
+# v1.6.3
+## 04/12/2019
+
+1. [](#new)
+ * Added `Blueprint::addDynamicHandler()` method to allow custom dynamic handlers, for example `custom-options@: getCustomOptions`
+1. [](#bugfix)
+ * Missed a `CacheCommand` reference in `bin/grav` [#2442](https://github.com/getgrav/grav/issues/2442)
+ * Fixed issue with `Utils::normalizePath` messing with external URLs [#2216](https://github.com/getgrav/grav/issues/2216)
+ * Fix for `vUndefined` versions when upgrading
+
+# v1.6.2
+## 04/11/2019
+
+1. [](#bugfix)
+ * Revert renaming of `ClearCacheCommand` to ensure CLI GPM upgrades go smoothly
+
+# v1.6.1
+## 04/11/2019
+
+1. [](#improved)
+ * Improved CSS for the bottom filter bar of DebugBar
+1. [](#bugfix)
+ * Fixed issue with `@import` not being added to top of pipelined css [#2440](https://github.com/getgrav/grav/issues/2440)
+
+# v1.6.0
+## 04/11/2019
+
+1. [](#new)
+ * Set minimum requirements to [PHP 7.1.3](https://getgrav.org/blog/raising-php-requirements-2018)
+ * New `Scheduler` functionality for periodic jobs
+ * New `Backup` functionality with multiple backup profiles and scheduler integration
+ * Refactored `Assets Manager` to be more powerful and flexible
+ * Updated Doctrine Collections to 1.6
+ * Updated Doctrine Cache to 1.8
+ * Updated Symfony Components to 4.2
+ * Added new Cache purge functionality old cache manually via CLI/Admin as well as scheduler integration
+ * Added new `{% throw 404 'Not Found' %}` twig tag (with custom code/message)
+ * Added `Grav\Framework\File` classes for handling YAML, Markdown, JSON, INI and PHP serialized files
+ * Added `Grav\Framework\Collection\AbstractIndexCollection` class
+ * Added `Grav\Framework\Object\ObjectIndex` class
+ * Added `Grav\Framework\Flex` classes
+ * Added support for hiding form fields in blueprints by using dynamic property like `security@: admin.foobar`, `scope@: object` or `scope-ignore@: object` to any field
+ * New experimental **FlexObjects** powered `Users` for increased performance and capability (**disabled** by default)
+ * Added PSR-7 and PSR-15 classes
+ * Added `Grav\Framework\DI\Container` class
+ * Added `Grav\Framework\RequestHandler\RequestHandler` class
+ * Added `Page::httpResponseCode()` and `Page::httpHeaders()` methods
+ * New `$grav['users']` service to allow custom user classes implementing `UserInterface`
+ * Added `LogViewer` helper class and CLI command: `bin/grav logviewer`
+ * Added `select()` and `unselect()` methods to `CollectionInterface` and its base classes
+ * Added `orderBy()` and `limit()` methods to `ObjectCollectionInterface` and its base classes
+ * Added `user-data://` which is a writable stream (`user://data` is not and should be avoided)
+ * Added support for `/action:{$action}` (like task but used without nonce when only receiving data)
+ * Added `onAction.{$action}` event
+ * Added `Grav\Framework\Form\FormFlash` class to contain AJAX uploaded files in more reliable way
+ * Added `Grav\Framework\Form\FormFlashFile` class which implements `UploadedFileInterface` from PSR-7
+ * Added `Grav\Framework\Filesystem\Filesystem` class with methods to manipulate stream URLs
+ * Added new `$grav['filesystem']` service using an instance of the new `Filesystem` object
+ * Added `{% render object layout: 'default' with { variable: true } %}` for Flex objects and collections
+ * Added `$grav->setup()` to simplify CLI and custom access points
+ * Added `CsvFormatter` and `CsvFile` classes
+ * Added new system config option to `pages.hide_empty_folders` if a folder has no valid `.md` file available. Default behavior is `false` for compatibility.
+ * Added new system config option for `languages.pages_fallback_only` forcing only 'fallback' to find page content through supported languages, default behavior is to display any language found if active language is missing
+ * Added `Utils::arrayFlattenDotNotation()` and `Utils::arrayUnflattenDotNotation()` helper methods
+1. [](#improved)
+ * Add the page to onMarkdownInitialized event [#2412](https://github.com/getgrav/grav/issues/2412)
+ * Doctrine filecache is now namespaced with prefix to support purging
+ * Register all page types into `blueprint://pages` stream
+ * Removed `apc` and `xcache` support, made `apc` alias of `apcu`
+ * Support admin and regular translations via the `|t` twig filter and `t()` twig function
+ * Improved Grav Core installer/updater to run installer script
+ * Updated vendor libraries including Symfony `4.2.3`
+ * Renamed old `User` class to `Grav\Common\User\DataUser\User` with multiple improvements and small fixes
+ * `User` class now acts as a compatibility layer to older versions of Grav
+ * Deprecated `new User()`, `User::load()`, `User::find()` and `User::delete()` in favor of `$grav['users']` service
+ * `Media` constructor has now support to not to initialize the media objects
+ * Cleanly handle session corruption due to changing Flex object types
+ * Added `FlexObjectInterface::getDefaultValue()` and `FormInterface::getDefaultValue()`
+ * Added new `onPageContent()` event for every call to `Page::content()`
+ * Added trim support for text input fields `validate: trim: true`
+ * Improved `Grav\Framework\File\Formatter` classes to have abstract parent class and some useful methods
+ * Support negotiated content types set via the Request `Accept:` header
+ * Support negotiated language types set via the Request `Accept-Language:` header
+ * Cleaned up and sorted the Service `idMap`
+ * Updated `Grav` container object to implement PSR-11 `ContainerInterface`
+ * Updated Grav `Processor` classes to implement PSR-15 `MiddlewareInterface`
+ * Make `Data` class to extend `JsonSerializable`
+ * Modified debugger icon to use retina space-dude version
+ * Added missing `Video::preload()` method
+ * Set session name based on `security.salt` rather than `GRAV_ROOT` [#2242](https://github.com/getgrav/grav/issues/2242)
+ * Added option to configure list of `xss_invalid_protocols` in `Security` config [#2250](https://github.com/getgrav/grav/issues/2250)
+ * Smarter `security.salt` checking now we use `security.yaml` for other options
+ * Added apcu autoloader optimization
+ * Additional helper methods in `Language`, `Languages`, and `LanguageCodes` classes
+ * Call `onFatalException` event also on internal PHP errors
+ * Built-in PHP Webserver: log requests before handling them
+ * Added support for syslog and syslog facility logging (default: 'file')
+ * Improved usability of `System` configuration blueprint with side-tabs
+ 1. [](#bugfix)
+ * Fixed issue with `Truncator::truncateWords` and `Truncator::truncateLetters` when string not wrapped in tags [#2432](https://github.com/getgrav/grav/issues/2432)
+ * Fixed `Undefined method closure::fields()` when getting avatar for user, thanks @Romarain [#2422](https://github.com/getgrav/grav/issues/2422)
+ * Fixed cached images not being updated when source image is modified
+ * Fixed deleting last list item in the form
+ * Fixed issue with `Utils::url()` method would append extra `base_url` if URL already included it
+ * Fixed `mkdir(...)` race condition
+ * Fixed `Obtaining write lock failed on file...`
+ * Fixed potential undefined property in `onPageNotFound` event handling
+ * Fixed some potential issues/bugs found by phpstan
+ * Fixed regression in GPM packages casted to Array (ref, getgrav/grav-plugin-admin@e3fc4ce)
+ die(sprintf('You are running PHP %s, but Grav needs at least <strong>PHP %s</strong> to run.', $ver, $req));
}
}
-if (PHP_SAPI === 'cli-server') {
- if (!isset($_SERVER['PHP_CLI_ROUTER'])) {
- die("PHP webserver requires a router to run Grav, please use: <pre>php -S {$_SERVER['SERVER_NAME']}:{$_SERVER['SERVER_PORT']} system/router.php</pre>");
+ die("PHP webserver requires a router to run Grav, please use: <pre>php -S {$_SERVER['SERVER_NAME']}:{$_SERVER['SERVER_PORT']} system/router.php</pre>");
enable_media_timestamp: false # Enable media timestamps
enable_media_timestamp: false # Enable media timestamps
@@ -135,6 +147,7 @@ session:
initialize: true # Initialize session from Grav (if false, plugin needs to start the session)
initialize: true # Initialize session from Grav (if false, plugin needs to start the session)
timeout: 1800 # Timeout in seconds
timeout: 1800 # Timeout in seconds
name: grav-site # Name prefix of the session cookie. Use alphanumeric, dashes or underscores only. Do not use dots in the session name
name: grav-site # Name prefix of the session cookie. Use alphanumeric, dashes or underscores only. Do not use dots in the session name
+ uniqueness: path # Should sessions be `path` based or `security.salt` based
secure: false # Set session secure. If true, indicates that communication for this cookie must be over an encrypted transmission. Enable this only on sites that run exclusively on HTTPS
secure: false # Set session secure. If true, indicates that communication for this cookie must be over an encrypted transmission. Enable this only on sites that run exclusively on HTTPS
httponly: true # Set session HTTP only. If true, indicates that cookies should be used only over HTTP, and JavaScript modification is not allowed.
httponly: true # Set session HTTP only. If true, indicates that cookies should be used only over HTTP, and JavaScript modification is not allowed.
split: true # Sessions should be independent between site and plugins (such as admin)
split: true # Sessions should be independent between site and plugins (such as admin)
@@ -147,6 +160,10 @@ gpm:
verify_peer: true # Sometimes on some systems (Windows most commonly) GPM is unable to connect because the SSL certificate cannot be verified. Disabling this setting might help.
verify_peer: true # Sometimes on some systems (Windows most commonly) GPM is unable to connect because the SSL certificate cannot be verified. Disabling this setting might help.
official_gpm_only: true # By default GPM direct-install will only allow URLs via the official GPM proxy to ensure security
official_gpm_only: true # By default GPM direct-install will only allow URLs via the official GPM proxy to ensure security
+accounts:
+ type: data # Account type: data or flex
+ storage: file # Flex storage type: file or folder