- Rewritten architecture. Instead of a js-based router/controller architecture, the panel now uses plain server-rendered views and speeds them up with Pjax for a more reliable solution in case of js issues.
- New static sidebar for a better user experience while editing content
- Context menus for files and pages for easier editing and administration in the sidebar
- A beautiful new unified search for pages and users
- A new "style: table" option for structure fields, which will turn the display of entries into a nice table
- A new "modalsize: small|medium|large" option for structure fields, which helps to control the width of structure modals
- Far better user experience for file uploads. Files can now be dragged directly into the browser in the file views and on in page forms.
- Custom user form fields with new user blueprints. You can now add a blueprint per role to site/blueprints/users (i.e. site/blueprints/users/admin.yml) and set additional custom fields there for each role. They will be added to the user forms in the panel.
- New Add & Edit button for page creation modals, which makes it possible to just add a page and go back to where you've been or create a page and directly jump to its form to edit it.
- New datetime form field
- New page toggle modal, which makes it possible to sort a page directly from the sidebar or via context menu
- Better pagination for pages and users with new select field for each page number
- Better display of image previews in the file view
- A massive new set of unit tests
- More secure session handling with new options to control session timeouts
- Added counters for users, files and subpages
- Brute-force protection for the login screen
- New option for all custom form fields to create own routes and views. This is especially awesome if your form field needs modals or an API. Check out the structure field implementation for details.
- Movable panel folder: you can now rename the panel folder and change your rewrite rules and the panel will keep working
- Allowed localhost URLs for dynamic field options
- Translated labels fall now back to the default panel language if a user chooses an interface language which has no translation.
- Implemented "page: /" option for options queries. You can use this for example for select fields to fetch the main pages with an option query.
- Required select fields no longer have an empty first option
- Two new options (panel.info.versions and panel.info.licenses) to hide the version and license infos
- Installation now logs in the first user automatically.
- Renaming files now respects the "sanitize: false" option in blueprints
- More solid redirect architecture after form submission
- More solid CSRF protection for all forms and editing requests.
- Updated translations: Turkish, Danish, German, English, French
- Fixed modal css for less blurry modals in Chrome and Safari
- Fixed sorting bug when the date.handler option is set to strftime
- Fixed display bug in Chrome for the user account in the dashboard
- Fixed bug in autocomplete dropdowns, which prevented to add the correct tag on click
- New thumb api for images: $page->image()->resize($width, $height) and $page->image()->crop($width, $height)
- New auto HTML tag generation for images: $page->image()->html()
- Updated parsedown and parsedown extra versions with various fixes
- Sessions only start on demand
- the js() helper can now pass the async option also to an array of scripts.
- You can now check for an existing field with $page->content()->has('somefield') and also directly on the field $page->somefield()->exists()
- Preperation for user permissions for the next release.
- Fixed pages::groupBy() method. This method will now deliver reliable results!
- Pagination with invalid page numbers will now redirect to the error page
- Proper URL decoding or params
- Option to add multiple filters to a single route by using the pipe syntax
- Sessions are started only on demand
- Collection::filterBy method now supports objects as values and converts them to strings.
- More consistent units for niceSize: https://en.wikipedia.org/wiki/Metric_prefix
- New s::pull method, which gets a value from the session and removes it directly afterwards
- Used httpOnly as default for all cookies
- Updated the yaml parser
- Better groupBy method for the collection class
- More secure session handling with session fixation protection, httpOnly cookies, session ID generation, session name option, visitor fingerprinting and variable session timeouts.
- New redirect option for the pagination class
- Fixed str::slug to finally use the separator parameter