Skip to content

Latest commit

 

History

History
1117 lines (956 loc) · 61.8 KB

CHANGELOG.md

File metadata and controls

1117 lines (956 loc) · 61.8 KB

Change Log

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog and this project adheres to Semantic Versioning.

  • Fix FontAwesome icons on the about page
  • Add vscode settings
  • Update meta data files
  • Update PHPStan config
  • Drop PHP 8.1 support, add PHP 8.3 support
  • Update to Laravel 10
  • Update to PHPUnit 10
  • Test against MariaDB #1238

Upgrade guide : https://learn.userfrosting.com/5.1/upgrading/50-to-51

  • Fix Dockerfile - npm missing from the App Image #1242
  • Fix AppController says "safe to be deleted", but this breaks 4 routes #1241
  • Add PHP 8.3 to test suite

For detailed changelog, see : https://github.com/userfrosting/UserFrosting/releases/tag/5.0.0

Changed Requirements

  • Drop PHP 7.2 support. Gain PHP 8.0 support. PHP 8.0 is now recommended.

Dependencies upgrade

  • Replaced individual UserFrosting Assets, Cache, Config, Fortress, i18n, Session, Support and UniformResouceLocator repos with monolitic userfrosting/framework repo.
  • Upgrade all Laravel packages to ^8.x from ^5.8.
  • Upgrade vlucas/phpdotenvto ^5.3 from ^3.4.
  • Upgrade symfony/console to ^5.1 from ^4.3.
  • Upgrade phpunit/phpunit to ^9.5

New Feature

Added support for built-in PHP Server.

Changes

  • Per user theme ($user->theme) is now deprecated and disabled by default. To enable back, change per_user_theme config to true (#1131). This feature will be removed in future version.
  • Bakery command execute method now requires to return an int (Symfony 4.4 upgrade : https://symfony.com/blog/new-in-symfony-4-4-console-improvements).
  • UserFrosting\Sprinkle\Core\Database\EloquentBuilder now uses Illuminate\Database\Eloquent\Concerns\QueriesRelationships Trait instead of manually implementing withSum, withAvg, withMin, withMax & withAggregate. See Laravel documentation for usage change.

Changed Requirements

  • Drop PHP 7.1 support. PHP 7.4 is now recommended.
  • Raised NodeJS version requirement from >=10.12.0 to ^12.17.0 || >=14.0.0 (#1138).
  • Raised NPM version requirement from >=6.0.0 to >=6.14.4 (#1138).

Changed Composer Dependencies

  • Updated wikimedia/composer-merge-plugin from ^1.4.0 to ^2.1.0 (#1117).

Added

  • Composer 2 support (#1117).
  • Lando support.
  • Added more SMTP options in env and setup:smtp bakery command (#1077),
  • Added new MAIL_MAILER environment variable to set mailer type.
  • Added "Native mail" to setup:mail bakery command.

Changed

  • Implement findInt (#1117).
  • Replace getenv() with env() (#1121).
  • Replaced UserFrosting\Sprinkle\Core\Bakery\Helper\NodeVersionCheck with new UserFrosting\Sprinkle\Core\Util\VersionValidator class.
  • Bakery command setup:smtp renamed to setup:mail. The old command is still available as an alias for backward compatibility.
  • Changed .php_cs to .php_cs.dist.
  • Changed phpunit.xml to phpunit.xml.dist.

Fixed

  • Replaced AdminLTE credit in default footer (old link was dead).
  • Issue with path slashes on Windows (#1133).

Removed

  • Removed deprecated UserFrosting\System\Bakery\Migration (deprecated in 4.2.0).
  • Removed deprecated UserFrosting\Tests\DatabaseTransactions (deprecated in 4.2.0).
  • Removed deprecated UserFrosting\Sprinkle\Core\Tests\ControllerTestCase (deprecated in 4.2.2).
  • Removed deprecated UserFrosting\Sprinkle\Core\Model\UFModel (deprecated in 4.1).
  • Removed deprecated UserFrosting\Sprinkle\Core\Sprunje\Sprunje::getResults (deprecated in 4.1.7).
  • Removed deprecated UserFrosting\Sprinkle\Account\Database\Models\User::exists (deprecated in 4.1.7).
  • Removed deprecated UserFrosting\Sprinkle\Core\Database\Models\Model::export (deprecated in 4.1.8).
  • Removed deprecated UserFrosting\Sprinkle\Core\Database\Models\Model::queryBuilder (deprecated in 4.1.8).
  • Removed deprecated UserFrosting\Sprinkle\Core\Database\Relations\Concerns\Unique::withLimit (deprecated in 4.1.7).
  • Removed deprecated UserFrosting\Sprinkle\Core\Database\Relations\Concerns\Unique::withOffset (deprecated in 4.1.7).
  • Removed deprecated UserFrosting\Sprinkle\Core\Error\RendererWhoopsRenderer::getResourcesPath.
  • Removed deprecated UserFrosting\Sprinkle\Core\Error\RendererWhoopsRenderer::setResourcesPath.
  • Removed deprecated Handlebar ifCond (Deprecated in 4.1).
  • Removed migration seed.
  • Removed support for migration with non static $dependencies properties.
  • Removed support for deprecated determineRedirectOnLogin service (deprecated in 4.1.10).

Changed

  • Replaced Travis with Github Actions
  • Force Composer 1.0 for Docker (#1126)
  • Update error.html.twig - add container (#1128)
  • Update some tests
  • Update Vagrant doc & config

Fixed

  • Replaced AdminLTE credit in default footer (old link was dead).
  • Lock Travis to Composer V1 to avoid error until Composer V2 support can be fixed.
  • Remove whitespace at top of page templates (#1107)
  • Deep extend when adding global query params in ufTable (#1114)
  • Check for null key in Unique::buildTertiaryDictionary (#1109)
  • Client-side assets containing glob characters causing crashes when building assets.
  • Fixed issue where merging of package dependencies would show as "undefined", resulting in debugging challenges where there are issues.

Fixed

  • Changed some private methods to protected in tests for easier extension.
  • Tentative fix for duplication of user_name in user Factories.
  • Factories now uses ::class reference instead of string.
  • Fix ExceptionHandlerTest test to speed things up.

Fixed

  • Locale matcher can fail when client provided locale identifier has incorrect casing (#1087)
  • Sprunje applyTransformations method not returning the $collections object (#1068)
  • Old assets in app/assets/browser_modules not being deleted during install (#1092)
  • Added SKIP_PERMISSION_CHECK env to skip check for local directories that needs to be write protected. This can be used for local production env testing.

Fixed

  • Fixed issue where incompatible NPM packages would be browserified, resulting in install failures.
  • Replaced deprecated Twig class.
  • Fixed issue when compiling assets for production (#1078).
  • Migration dependencies should work with and without leading \ (#1023)
  • Throttler don't count successful logins (#1073)

Changed Requirements

  • PHP 7.3 is now the recommended version, as 7.2 is already security fixes only.

Changed Composer Dependencies

  • Reset Slim version to ^3.12
  • Updated PHPUnit to 8.5 (Version 7.5 still used for PHP 7.1)

Added

  • PHP 7.4 Support & Travis environment.
  • New Locale service. Provides a list of available locales in diffeent form.
  • New BaseServicesProvider abstract class added as base for all ServiceProvider class.
  • Sprinkle Services Provider can now be autoloaded using the $servicesproviders property in the sprinkle bootstrapper class.
  • Current locale code can now be accessed from Twig using the currentLocale global variable (#1056).
  • Locale now have config & metadata file (#850)
  • Added locale:compare, locale:dictionary and locale:info Bakery commands.
  • New cli service. Returns true if current app is a CLI envrionement, false otherwise.

Changed

  • Interop\Container\ContainerInterface has been replaced with Psr\Container\ContainerInterface.
  • \UserFrosting\I18n\MessageTranslator is now \UserFrosting\I18n\Translator.
  • Translator service moved to it's own UserFrosting\Sprinkle\Core\I18n\TranslatorServicesProvider class.
  • Travis now uses Xenial instead of Trusty.
  • site.locales.available config now accept (string) identifier => (bool) enabled. Set identifier to false or null to remove it from the list.
  • Locale plural rules moved from the keys file to the new metadata files.

Fixed

  • When internationalizing, the lang attribute value of the Twig template is not set to follow changes (#982)
  • pt_Br locale identifier renamed to pt_BR.
  • Improved Docker support (#1057)
  • Improved Bakery debug command output
  • Improve ordering by activity date (#1061 & #1062; Thanks @ktecho!)
  • Updated Vagrant config and documentation
  • Fixed a bug where withTrashed in findUnique was not available when SoftDeletes trait is not included in a model.
  • CSRF global middleware is not loaded anymore if in a CLI environment. This will avoid sessions to be created for bakery and tests by default.
  • Browserified node modules not being correctly loaded.
  • Browserified node modules potentially colliding with real entrypoints.

Removed

  • localePathBuilder service removed. Task now handled by the locale and translator services.

Fixed

  • Fixed wrong version number in define
  • Locked Slim version to 3.12.2 until UF 4.4 can fix container-interop/container-interop replacement with psr/container

Added

  • Add translation for Brazilian Portuguese (locale pt_BR) - Thanks @maxwellkenned ! (#1036)
  • Add translation for Serbian (sr_RS) - Thanks @zbigcheese ! (#1035)

Changed

  • Updates to the French Locales (#1027)
  • Updates to the German Locales (#1039)
  • Updates to the Thai Locales (#1041)
  • Updates to the Greek Locales (#1042)
  • Updates to the Persian Locales (#1045)

Fixed

  • Fix issue with hidden fields in group modal (#1033)
  • User cache not flushed on model save (#1050)
  • Fix "the passwords don't match" error when editing a user password (#1034, #1038)

Deprecated

UserController:updateField now expect the new value as $_PUT[$fieldName] (where $fieldName is the name of the field you want to update, eg. $_PUT['password'] for editing password) instead of $_PUT['value']. This will only affect your code if you're not using the user widjet.

Changed

  • Update Arabic Locales (#1028)

Fixed

  • Fix typos in user creation with initial password (#1030)

Changed Requirements

  • Changed minimum PHP Version to 7.1

Changed Composer Dependencies

  • Updated Laravel Illuminate packages to 5.8
  • Updated Twig to 2.11
  • Updated PHPUnit to 7.5
  • Updated Mockery to 1.2
  • Updated nikic/php-parser to 4.2.2
  • Updated PHPMailer/PHPMailer to 6.0.7
  • Updated league/csv to 9.2.1
  • Updated symfony/console to 4.3
  • Updated vlucas/phpdotenv to 3.4.0

Changed Frontend Dependencies

  • Updated handlebar from 3.0.x to 4.1.2
  • Updated AdminLTE theme to 2.4.15 (#994; #1014; #1015)
  • Updated Font Awesome to 5.9 (#957; #870)

Added

  • Separated BakeCommand class into multiple methods to make it easier for sprinkle to add custom command to the bake command.
  • Allow null group assignment for users (#867; #964)
  • Password can now be set manually when creating new user (#1017; #763)
  • Icon picker for user and group form (#713; #1019)

Fix

  • bake command return error if account sprinkle is not included ([#944])
  • Email is case-sensitive (#881; #1012)
  • Update vulnerable handlebars@^3.0.3 to ^4.0.12 (#921)
  • Moved handlebars-helpers.js from core to admin sprinkle (#897)
  • Remove Package guzzle/guzzle is abandoned, you should avoid using it. Use guzzlehttp/guzzle instead message (#1016)

Changed

  • Account sprinkle now extend the Core BakeCommand class to add the create-admin to the general bake command. Any sprinkle already extending the Core BakeCommand might need adjustments.
  • Updated custom Eloquent relations (belongsToManyThrough, morphToManyUnique, belongsToManyUnique, morphToManyUnique, etc.) to support Laravel 5.8. See The belongsToMany Method.

Removed

  • Removed belongsToManyConstrained (deprecated in 4.1.6)
  • Remove league/flysystem-aws-s3-v3 and league/flysystem-rackspace as core dependencies (#1018)

Added

  • Config to set Domain of RememberMe Cookie (#990, #991; Thanks @xrobau !)
  • Config settings for password min/max length (#993)
  • migrate:clean bakery command (#1007)

Fixed

  • [PHPMailer] Turn off opportunistic TLS when disabled (#986, #987)
  • Migrator now ignore files that don't end in .php (#965, #998)
  • Respects CSRF_ENABLED environment variable (#976; Thanks @Poldovico !)
  • Checkbox bug on password change form (#1008)
  • On role page, users table action buttons not working (#1010)

Added

  • New group factory ('UserFrosting\Sprinkle\Account\Database\Models\Group')
  • New withController Trait, as an alternative for deprecated ControllerTestCase
  • StyleCI config
  • [Travis] SQLite in-memory DB testing
  • [Travis] enabled memcache & Redis service

Fixed

  • DefaultPermissions seed results in SQL errors (#981; #983)
  • Make group & role schema consistent between creation and edition. Prevents group and role without a name or slug to be created during edition.
  • Factories changed to make sure slugs are unique
  • Fix WithTestUser Trait returning a user with id of zero or reserve master id when a non-master user was asked. If master user already exist, will return it instead of trying to create a new one (with the same id)
  • Force close db connection on test tearDown procedure

Changed

  • Recommended PHP version is now 7.2, as 7.1 will be EOL in less than 6 months
  • Added tests coverage for all build-in controllers
  • Applied styling rules from StyleCI & updated php-cs-fixer rules to match StyleCI config

Deprecated

  • ControllerTestCase. Use withController Trait instead.

Added

  • UserFrosting\Sprinkle\Core\Database\Models\Session model for the sessions db table.
  • TEST_SESSION_HANDLER environment variable to set the session save handler to use for Testing.
  • withDatabaseSessionHandler Trait for testing. Use $this->useDatabaseSessionHandler() to use database session handler in tests.

Fixed

  • Italian translation (#950)
  • User Registration failing when trying to register two accounts with the same email address (#953)
  • Bad test case for CoreController::getAsset.
  • User Model forceDelete doesn't remove the record from the DB (#951)
  • Fix PHP Fatal error that can be thrown when registering a new User
  • Session not working with database handler (#952)
  • Remove any persistences when forceDeleting user to prevent Foreign Key Constraints issue (#963)
  • More helpful error message in checkEnvironment.php (Thanks @amosfolz; #958)
  • Hide locale select from UI if only one locale is available (Thanks @avsdev-cw; #968)
  • Download CSV filename error (#893)

Changed Requirements

  • Changed minimum Node.js version to v10.12.0
  • Changed minimum NPM version to 6.0.0

Added

  • Use locale requested by browser when possible for guests (#718)
  • Add locale drop down to registration page, with the currently applied locale selected (#718)
  • Added new filesystem service (#869)
  • Greek locale (Thanks @lenasterg!; #940)
  • Add cache facade (Ref #838)
  • Added new Seeder
  • NoCache middleware to prevent caching of routes with dynamic content
  • Bakery :
    • Added sprinkle:list Bakery Command
    • Added migrate:status Bakery Command
    • Added test:mail Bakery Command
    • Added seed Bakery command
    • New isProduction method for Bakery command to test if app is in production mode
    • Added database option for migrate and migrate:* Bakery commands
    • Added arguments to the create-admin and setup Bakery commands so it can be used in a non-interactive way (#808)
    • Extended bakery test to add Test Scope and sprinkle selection argument (#919, Thanks @ssnukala !)
  • Testing :
    • Added RefreshDatabase test Trait to use a fresh database for a test
    • Added TestDatabase test Trait to use the in memory database for a test
    • Added tests for migrator and it's components
    • Added tests for migrate Bakery command and sub-commands
    • Added withTestUser trait for helper methods when running tests requiring a user
    • Added ControllerTestCase special test case to help testing controllers
    • Improved overall test coverage and added coverage config to phpunit.xml
  • Assets :
    • Added support for npm dependencies on the frontend with auditting for known vulnerabilities
  • Database :
  • Vagrant / Docker :
    • Include Vagrant integration directly inside UF (#829)
    • Sample test environment for Docker
  • Misc :
    • Integrated improvements from v4.0.25-Alpha
    • Added code style config (.php_cs) and instructions for PHP-CS-Fixer in Readme
    • Add support for other config['mailer'] options (#872; Thanks @apple314159 !)

Changed

  • Move User registration out of the AccountController (#793)
  • Rewritten the locator service so it's better suited for sprinkle system (#853)
  • Bakery :
    • Moved Bakery commands from app/System/Bakery to the Core sprinkle and UserFrosting\Sprinkle\Core\Bakery namespace.
    • Improved route:list Bakery command from v4.1.20
    • Sprinkle list in the bakery debug command to uses the new sprinkle:list table
  • Migrations & Database :
    • migrate and migrate:* Bakery command now require confirmation before execution when in production mode.
    • Re-written the migrator. It is now detached from the console and Bakery and is now included in the Core Sprinkle ServicesProvider (#795)
    • Makes the semantic versioning part of a migration class optional. Migrations classes can now have the UserFrosting\Sprinkle\{sprinkleName}\Database\Migrations namespace, or any other sub-namespace
    • Uncomment foreign keys in core migrations (#833)
    • Move default groups, roles & permissions creation to seeds
  • Assets
    • Rewrote asset processing to minimise file sizes, drastically reduce IO, and improve maintainability
    • Rewrote frontend dependency installation to prevent duplication and detect incompatibilities
    • Rewrite AssetLoader to act as a wrapper for Assets
  • Misc :
    • Updated Docker integration
    • Moved some constants from app/defines.php to app/sprinkles/core/defines.php
    • Move route initialization from system to core sprinkle as router service is located in the core sprinkle
    • dev environment changed to debug (#653)
    • Changed deprecations to warning, and suppressed them in tests
    • routerCacheFile config now only contains filename. Locator is used to find the full path

Fixed

  • Sprinkle without a template/ folder won't cause error anymore
  • Fixed routes not available in Tests and Bakery (#854)
  • redirect failing in UserController::pageInfo when user not found (#888)
  • Fix WhoopsRenderer integration, resolving a temp fix in v4.1.21.
  • Fix Travis not running tests with the env database
  • Ignore existing package-lock.json which caused incorrect dependencies to be installed when upgrading from older versions of UserFrosting.
  • Testing :
    • Added coverage-format and coverage-path options to test Bakery command
    • Sprinkle Testscope is now case insensitive
    • Class testscope now relative to / instead of /UserFrosting/Sprinkle/ for more intuitive usage and to enable testing of non sprinkle tests
    • Detect and use the sprinkle phpunit.xml config when testing a specific sprinkle
  • SprinkleManager Improvements :
    • Added public getSprinklePath method to get path to the sprinkle directory
    • Added public getSprinkleClassNamespace method to get sprinkle base namespace
    • Added public getSprinkle method. Returns the sprinkle name as formatted in sprinkles.json file, independent of the case of the search argument.
    • Public isAvailable method now case insensitive.
    • Added public getSprinklesPath & setSprinklesPath to return or set the path to the sprinkle dir (app/sprinkles/)
    • Added JsonException if sprinkles.json doesn't contain valid json.
    • Added specific tests for sprinkleManager with 100% test coverage

Deprecated

  • Migrations should now extends UserFrosting\Sprinkle\Core\Database\Migration instead of UserFrosting\System\Bakery\Migration
  • Migrations dependencies property should now be a static property
  • Deprecated migration seed method. Database seeding should now be done using the new Seeder
  • Trait \UserFrosting\Tests\DatabaseTransactions has been deprecated. Tests should now use the \UserFrosting\Sprinkle\Core\Tests\DatabaseTransactions trait instead. (#826)

Removed

  • The console IO instance is not available anymore in migrations. Removed the io property from migration classes
  • Removed Bakery projectRoot property. Use the \UserFrosting\ROOT_DIR constant instead
  • Removed pretend option from Bakery migrate:refresh and migrate:reset commands
  • Removed UserFrosting\System\Bakery\DatabaseTest trait, use UserFrosting\Sprinkle\Core\Bakery\Helper\DatabaseTest instead.
  • Removed UserFrosting\System\Bakery\ConfirmableTrait trait, use UserFrosting\Sprinkle\Core\Bakery\Helper\ConfirmableTrait instead.

v4.1.22

  • Updated Docker README.md.
  • Replaced libpng12-dev which has been dropped since Ubuntu 16.04 with libpng-dev in PHP Dockerfile.
  • Avoid twig deprecation warning (#911; Thanks @silvioq !)

v4.1.21

v4.1.20

  • Added route:list command to list all registered routes (#903; Thanks @apple314159 !)
  • Added warning in configuration file regarding disabling registration and email verification (#900; Thanks @linkhousemedia !)

v4.1.19

  • Prevent setup to run again if already configured when using bake
  • Fix Unique::getPaginatedQuery to call to addSelect instead of select during the pre-paginated query
  • Updated Spanish Translation (Thanks @silvioq !)
  • Fix error template in WhoopsRenderer (#885; Thanks @silvioq !)

v4.1.18

  • Bakery setup wizard for SMTP config + separate SMTP setup in it's own command (#874)
  • Update Italian translations (#875)
  • Return deleted row in ufCollection event (#873)

v4.1.17-alpha

v4.1.16-alpha

  • Fix for merge bundling rule (#660)
  • Fix for undefined variable exception under strict mode in ufAlerts (#809)
  • Fix for site cache reset upon login (#828)
  • Changed global cache tag to proper prefix
  • Fix broken alert message in registration process (#843)
  • Add partial Turkish translation

v4.1.15-alpha

  • Refactor Password into a instantiable Hasher class, service, and Password facade (#827)
  • Change default hash cost back to 10 and fix legacy hash detection issue

v4.1.14-alpha

  • Fix issue with scopes being applied twice in Unique::getPaginatedQuery (userfrosting/extend-user#2)
  • Update Bower dependencies in core Sprinkle
  • Refactor the Password class to use hash_equals for legacy passwords (prevent timing-based attacks) and factor out the default cost (#814)
  • Check if require_email_verification is set in Authenticator and sign-in page (#815)
  • Factor out hardcoded sprinkles.json filename (partially addresses #813)
  • Add Farsi translations (#816)
  • ufTable: Make tableElement configurable, and check for existence (#824)
  • Put AdminLTE menu toggle button back (Revert e8a26fb and part of a46205f)

v4.1.13-alpha

  • ufTable: Implement rowTemplate for customizing how rows are rendered (#787)
  • ufTable: Support for passing callbacks for column templates instead of Handlebars templates
  • Remove explicit references to id columns (#803)
  • Fix Docker
  • Append full name to User API

v4.1.12-alpha

  • Separate out user action column from user status column
  • Improve table row menus in mobile views (#724)
  • Hide side menu toggle button in desktop sizes
  • Add chevron to user menu
  • Change "remember me" text
  • Improve table tool buttons
  • Twig extensions now implement Twig_Extension_GlobalsInterface as required by https://twig.symfony.com/doc/2.x/advanced.html#id1 (#788)
  • Display element based on permissions for group list/info pages
  • Factor the admin user creation out of migrations and into its own Bakery command (See #778)
  • Bakery clear-cache command now clears Twig and router cache (Fix #750)
  • Add Russian translations
  • Add Travis for automated test/build on push

v4.1.11-alpha

  • Updated composer/installers dependency.
  • Patch composer.json to fix illuminate/* dependencies at 5.4 for now

v4.1.10-alpha

  • Add support for PHP7 runtime errors to be handled in the same way as Exceptions
  • Implement NotFoundExceptionHandler and pass through all NotFoundExceptions to this handler.
  • Implement redirect.onAlreadyLoggedIn service (fixes #680)
  • Deprecate determineRedirectOnLogin and replace with redirect.onLogin service
  • Fix some PSR-2 compliance issues

v4.1.9-alpha

  • Fixes #780, and more efficient way to collect ids in Unique::getPaginatedQuery
  • Show "user deleted" in activities table (#782)
  • Patched version of widget-sort2Hash.js to prevent writing extraneous browser history entries (#712)
  • Improve handling of fatal/parse errors

v4.1.8-alpha

  • Normalize paths to always have a leading slash when comparing against the CSRF blacklist (#775) (possible breaking change for some environments - please see updated docs at https://learn.userfrosting.com/routes-and-controllers/client-input/csrf-guard#blacklisting-routes)
  • Set display_errors to true for development configs (#762), move php settings into a common php subkey in config files
  • ShutdownHandler no longer responsible for logging fatal errors
  • Set up PHP config values in Core.php instead of inside the config service definition.
  • Reimplement Builder::exclude to maintain a list of excluded columns, and then automatically update list of columns to fetch in get()
  • Deprecate Model::queryBuilder and Model::export
  • Update nginx config file from spdy to http2
  • Add Pagespeed block (commented out) to nginx config file
  • Make fpm-php7.0 the default CGI nginx config file

v4.1.7-alpha

  • Add the withTernary method to the Unique trait to allow loading nested child models on ternary relationships.
  • Add skip, take, limit, offset and deprecate withLimit and withOffset in Unique trait
  • Support for withPivot on Unique relationships (in tertiary models)
  • Factor out common code from PermissionUserSprunje into UserSprunje
  • Rework internals of Sprunje to make it more testable. Filters, sorts, and paginations are now applied to a clone of the original queriable object. Deprecated getResults and added getArray and getModels. Result keys can now be customized.
  • Table of user permissions on user info page
  • Simplify by combining permission-users.html.twig into options on users.html.twig
  • Add Chinese translations
  • Deprecate User::exists() (#771)
  • Add 'password' to hidden fields for User model
  • Replace hardcoded Builder with classMapper reference

v4.1.6-alpha

  • Fix missing permission check when uri_account_settings is not in role (#768)
  • Add getLastRow method and transformDropdownSelection option to ufCollection
  • Fix missing slug for permissions in "manage permissions" dropdown
  • Add "manage permissions" to role page menu
  • Factor out custom relation methods into HasRelationships trait on Model
  • Add withoutGlobalScopes to Syncable::sync
  • Add option to use forceCreate in Syncable::sync
  • Add option to use custom key in Syncable::sync
  • Complete redesign of BelongsToManyThrough - possible BC for a few people, as you now need to load the "via" models explicitly using withVia. This fixes a lot of issues with BelongsToManyThrough.
  • Deprecate BelongsToManyConstrained
  • Add MorphToManyUnique
  • Integration tests now use an in-memory sqlite database (test_integration) by default

v4.1.5-alpha

  • Spanish language support (#770)
  • Show current filter in select-menu filters (#744)
  • Cursor styling for ufCopy
  • Transition overlay for ufTables
  • Minor fix to ufTable.cleanHash
  • Correctly target pager container in Tablesorter options
  • Add table of users to role pages
  • Fix issue with links in permission users table

v4.1.4-alpha

  • Permissions rows get duplicated when upgrading from 4.0 to 4.1 (fix #759)
  • Fix migrate:rollback not running down the migration in the correct order
  • Updated type in composer.json for default sprinkles
  • Added missing french translations & more default validation messages
  • Bump Fortress version (fix #766)
  • Support SQLite in Bakery setup
  • Fix for PostgreSQL charset in Bakery (#745)

v4.1.3-alpha

  • Add Italian translations
  • Add data-priority attributes to built-in tables (#752)
  • Use this.slug to avoid conflict with helper names (#748)
  • Add block table_search to table-paginated.html.twig

v4.1.2-alpha

  • Remove call to setFilters that was causing problems with pagination (#688)
  • Update German translations and factor out some hardcoded text (#725)
  • Update French translations
  • Update Arabic translations (#733, #734, #735)

v4.1.1-alpha

  • Fixed missing template in ExceptionHandler and notFoundHandler
  • Migration rollback will throw a warning if a class is not found instead of aborting
  • Temporary fix for trouble with npm install in Windows (#742)

v4.1.0-alpha

  • Switch from pagination "plugin" to "widget" for Tablesorter. Allows us to update to the latest version of TS (fix #688, #715)
  • Implement WhoopsRenderer for pretty debug pages. See (#674)
  • Refactor error handling. Move responsibility for displayErrorDetails to handlers, and factor our ErrorRenderers. Addresses (#702)
  • Move composer.json to root directory to allow installing UF via composer create-project
  • Move sprinkles.json to app directory to make it easier to find
  • Eliminate the root theme Sprinkle. Custom styling for the root user is now handled with some Twig logic in the admin Sprinkle (#726)
  • Rename bundle.config.json -> asset-bundles.json (#726)
  • Reorganize assets (#726)
  • Heavily reorganize templates (#726)
  • Move request schema from schema/ to schema/requests/ (#726)
  • Factor out "system" classes from core Sprinkle
  • Refactor overall application lifecycle; move main lifecycle into UserFrosting\System\UserFrosting
  • SprinkleManager now better focused on a single responsibility
  • Sprinkle initializer classes now use events to hook into application lifecycle
  • Support for allowing Sprinkles to register middleware (#617)
  • Automatically load Sprinkle service providers (see #636)
  • Get rid of "implicit loading" for core Sprinkle - core is now just an ordinary Sprinkle like any other.
  • The sprinkles:// stream now represents a virtual filesystem for the root directory of each loaded sprinkle, rather than the sprinkles/ directory itself.
  • Separate out localePathBuilder from the translator service. Makes it easier to add/remove paths before actually loading the translations.
  • Only present locale options with non-null names.
  • Rebased ufTable and ufModal with new jQuery plugin template. (part of #646)
  • Removed the search bar from the Dashboard layout
  • Added Tablesorter pagination translation
  • New Translator Facade
  • New CLI tool (Bakery).
  • New migration system based on bakery CLI
  • Listable sprunjing
  • Refactor groups and user routes (Fix #721)
  • Added the config alert stream to save ufAlerts to the cache instead of sessions. Fix #633. The old session is still the default alertStream in 4.1.
  • Added support for the Redis cache driver and refactored the cache config values.
  • Added user and session cache.
  • Common log file for db queries, auth checks, smtp, errors, and debug messages (#709).
  • Use YAML as default format for request schema (#690)

See [http://learn.userfrosting.com/upgrading/40-to-41](Upgrading 4.0.x to 4.1.x documentation) for complete list of changes and breaking changes.

v4.0.25-Alpha

  • Support npm for frontend vendor assets, and deprecation of bower (#737)
  • Duplicate frontend vendor assets are no longer downloaded (#727)
  • Detect incompatibilites between frontend vendor assets (related to #727)
  • Improved reliability of generated base URL, especially when using docker
  • Fixed syntax error in Portugese translations
  • Minimise verbosity of assets build scripts when not in 'dev' mode
  • Fix to stop bower complaining about sudo when using docker
  • The assetLoader service has been deprecated, and may be removed in the future.
  • Potential breaking change: Some packages like Handlebars are organised differently at npm. If referencing vendor assets introduced by UF, make sure they are still correct.

v4.0.24-alpha

  • Fixes to nginx config file, and add location block for LE acme challenge
  • Fix JS errors when #alerts-page is not present on a page
  • Fix hardcoded User class in AdminController (#753)
  • Update message PASSWORD.FORGET.REQUEST_SENT (#749)

v4.0.23-alpha

  • Set module dependency versions to ~4.0.0 instead of ^4.0.0 (since 4.1.x will introduce breaking changes)
  • Fix bug in ufCollection

v4.0.22-alpha

  • Fix issue where 'Change User Password' popup form couldn't handle specifying a new password.
  • Display message when there are no results in ufTable

v4.0.21-alpha

  • Implement reflow and column selector for tables (#670)
  • Overhauled ufAlerts, improving efficiency, reliability, and fixed a discovered edge case that caused render to never complete. (part of #646)
  • ufAlerts will only auto-scroll when outside the viewport (even if only partially). Can be overriden with scrollWhenVisible: true. (#714)
  • Rebased ufCollection, and ufForm with new jQuery plugin template. (part of #646)
  • Misc UI update
  • Added Twig blocks
  • Fix issue with duplicate query logs when using multiple databases

v4.0.20-alpha

  • Remove pivot columns from pagination subquery in BelongsToManyThrough, to deal with MySQL's only_full_group_by warning

v4.0.19-alpha

  • Explicit column names in new user permissions relations

v4.0.18-alpha

  • Permission info page (#638)
  • New custom relationships 'BelongsToManyThrough', 'BelongsToManyUnique', 'BelongsToManyConstrained', 'HasManySyncable', 'MorphManySyncable'
  • Change implementation of User::permissions() to use BelongsToManyThrough
  • New ufForm options: setting reqParams, encType, submittingText
  • ufCollection now triggers a check for virgin rows when any control is touched
  • Fix issue with Sprunje when generating CSV with empty child collections (#697)
  • Authorizer now correctly interprets string literals (#482)
  • Authorizer now correctly interprets numeric types in access conditions. Caution: this causes the equals() callback to return true in situations where it would have (incorrectly) returned false before. For example, equals(self.group_id,2) would have returned false for users in group 2, because it was interpreting 2 as a string and then performing its strict comparison. It now (correctly) returns true. Notice that equals(self.group_id,'2'), on the other hand, will now return false.
  • User object caches permissions loaded from DB to reduce number of queries (#612)
  • Type declarations in authorization classes (#652)
  • Fix issue with Twig debug (#356)
  • Show disabled/unactivated badges on user info page

v4.0.17-alpha

  • Add IIS config file (#371)
  • New ufCollection now supports free text input mode
  • New design and layout for user, group, and role summary boxes (also fixes #703)
  • Registration page returns 404 when registration disabled (#705)

v4.0.16-alpha

  • Add Docker configuration files
  • Begin work on Bakery, the command-line debug tool
  • Lock version of tablesorter due to breaking changes
  • Fix bugs in GroupController and RoleController
  • Fix bug in URLs for redirect-on-login
  • Added UTF-8 as default mail charset

v4.0.15-alpha

  • Prevent mixed content on demo pages
  • Fixed some missing translations
  • Fixed error in ufAlerts push method
  • Fixed usage of hard coded path
  • Fixed default OS option in migration script
  • Prevents empty locale's from displaying as empty options in profile form
  • Unignore .gitkeeps of directories that need to exist

v4.0.14-alpha

  • Fix ajax.delay in ufCollection
  • Fix missing translations
  • Minor fix in French translation
  • Fix alert margin when displayed inside a modal

v4.0.13-alpha

  • Update to RememberMe 2.0 (#635)
  • Remove database checks, as they are apparently no longer needed (#655)
  • Bump dependencies

v4.0.12-alpha

  • Separate out the registration and sign-in pages (#657) BC
  • Slightly change behavior of form validation icons
  • Sprunje input validation (#640)
  • Sprunje sort/filter fields now must be explicitly listed in a whitelist (#640) BC
  • Errors from tablesorter now get displayed
  • Support for OR expressions using || in Sprunje filters (#647)

v4.0.11-alpha

  • Fix #663
  • Adding more Twig blocks
  • ufAlerts now scroll to alert location, if and only if alerts are output.
  • Updated Dutch locale
  • Minor update in French locale
  • Added comments in .env.example

v4.0.10-alpha

  • Move suggestion button outta-da-way
  • Add email to registration success message
  • Separate out some page content into smaller blocks
  • Factor out select2 options in ufCollection, into the 'dropdown' key so that any select2 option can be set

v4.0.9-alpha

  • Oops, exists needs to be static

v4.0.8-alpha

  • Autogenerate and suggestion features for usernames during account registration (partially addresses #569)
  • Restrict username characters to a-z0-9.-_
  • Require first name by default
  • Throttle registration attempts
  • Implement User::exists method
  • keyupDelay option in ufForm
  • More logging of group and role CRUD
  • Implement extra:// stream
  • Lots of missing translation keys

v4.0.7-alpha

  • Separate "profile settings" from "account settings"

v4.0.6-alpha

  • Fix throttling issue #656
  • Other miscellaneous fixes

v4.0.5-alpha

  • Allow nulling out of throttle rules (to disable)
  • Disable Google Analytics by default (but enabled in production)
  • Other miscellaneous fixes

v4.0.4-alpha

  • UfAlert style customization (See #634)
  • Translation function can now display raw placeholder using the |raw filter in the placeholder name. Other Twig filters are also avaiable. Requires latest version of the i18n component (See #621).
  • Fix the "Root account" message breaking the UI on smaller screens (See #641) - Thanks @brunomnsilva !
  • Added DB_DRIVER and DB_PORT as environment variables to allow better out-of-box database configuration support, and to provide additional protection by obscurity.
  • Normalised default values to null for environment variables in configuration.
  • Added getCallbacks public method to AuthorizationManager to enable drop-in extensions to AuthorizationManager.
  • Fixed broken links in generated asset bundles.
  • Introduced clean gulp task to act as a shotcut for removing all frontend vendor packages, all generated asset bundles, and copied assets. Accessible via npm run uf-clean.
  • Merged copy task with bundle-build.
  • Fixed missing translations
  • Added Thai translation - Thanks @popiazaza !

v4.0.3-alpha

  • Add config file for nginx (#373)
  • Add Portuguese translations (thanks to @brunomnsilva!)
  • Add Arabic (MSA) translations (thanks to @abdullah.seba!)
  • Add Dispatcher to db service to allow registering model events.
  • Specify foreign keys explicitly in all relationships.
  • Use classMapper for admin Sprunjes.

v4.0.2-alpha

  • Specify foreign key explicitly in User::activities() relationship.
  • Database checks in installer and Authenticator now respect custom database ports. (See #628)
  • Fixed edge case where 5%C would appear in generated urls.
  • Improved stability and added php version check in migrations/intall.php
  • Update ClassMapper to throw exception when class is not found
  • Fix minor errors in French locale
  • Fix translation error on the Legal page

v4.0.1-alpha

  • Bump min version of PHP to 5.6
  • Added German translation (See #625) - Thanks @X-Anonymous-Y
  • Improved Gulp Build task
  • Remove site-dev from example sprinkles.json
  • Fix some styling issues on the Dashboard and footer
  • Display group link in menu for group admins
  • Keep dashboard sidebar collapsed across page load (See #616)
  • Fixed missing translation keys inside Handlebar tables (See #624)
  • Admin panel link style in main dropdown menu (See #627)
  • Implement AuthGuard middleware
  • Handling of redirect after login (See #627#issuecomment-275607492)
  • Directly check database in installer using PDO
  • Refactor installer and how version are displayed in system info panel. Added notice when a migration is available for a sprinkle
  • Etc.

v4.0.0-alpha

Initial release of UserFrosting V4

  • The Sprinkle system, which keeps your code completely separate from the core UF codebase;
  • We're upgraded from Slim 2 to Slim 3, which is significantly different;
  • Completely redesigned database structure;
  • Initialization is now achieved through services, with the Pimple dependency injection container;
  • Composer is now a mandatory part of the installation process;
  • Bower is now used to install third-party client-side assets (Javascript/CSS packages);
  • "Groups" and "Primary Group" have been replaced by "Roles" and "Group", respectively;
  • Tables no longer need to be "registered" in any kind of initialization routine. Simply set the table names directly in your data models;
  • Twig templates have been reorganized and redesigned;
  • SB Admin has been removed and we now use the AdminLTE front-end theme;
  • Client-side code has been heavily refactored into reusable components.

v0.3.1.23

  • Also fix the occurred_at timestamp in the user_event table to allow null, for newer versions of MySQL that don't allow a zero date (see #605).

v0.3.1.22

  • Use nullableTimestamps instead of timestamps in installer, to prevent conflict with MySQL modes 'NO_ZERO_IN_DATE' and 'NO_ZERO_DATE'.

v0.3.1.21

  • Use Laravel's Schema interface to create tables and default rows, instead of constructing them with SQL

v0.3.1.20

  • Added pushAlert(),clearAlerts() in public/js/userfrosting.js and updated flashAlerts()
  • Revert changes to User::fresh() but leave comment regarding upgrading Eloquent

v0.3.1.19

  • Fix some minor error screen layout issues
  • Make User::fresh() compatible with Eloquent\Model v5.2.40+
  • Update composer require to allow for Fortress 1.x bugfixes
  • Allow database port definitions in config-userfrosting.php
  • Fix fatal error when evaluateCondition is called before the router populates current route information

v0.3.1.18

  • Add check for logging being enabled but log file not existing yet

v0.3.1.17

  • Fix occasional bug when end-of-file is reached on log file before requested number of lines is reached
  • Roll back database connection checking to fix installer routines (frostbitten)
  • UI fixes for smaller screens (frostbitten)
  • Update Gitter references to Rocket.chat
  • Clarify hotfix branch procedure for contributions

v0.3.1.16

  • Fix comment reference to \Fortress\JqueryValidationAdaptor
  • CONTRIBUTING.md - Add note about proper Pull Requests
  • French language file fixes (#565) (lcharette)
  • Add HTTP status codes to 404 errors and database errors (frostbitten)
  • Change database errors to use BaseController instead of DatabaseController (frostbitten)

v0.3.1.15

  • Fix unattached submitHandler bug in Group and Auth edit interfaces (#465)
  • Remove references to nonexistent formUserView and formGroupView (#478)
  • Gracefully handle session destruction due to missing or disabled accounts (#510)
  • Add attributeExists and relationExists for models (#520)

v0.3.1.14

  • Stop reading entire log files to avoid out-of-memory errors (#497)
  • Deploy league/csv to properly generate CSV files (#557)
  • Fix typos in language files

v0.3.1.13

  • Bump dependencies
  • userfrosting/fortress now has a release version

v0.3.1.12

  • Add sendmail support in Notification class
  • Fix problem with strict comparison in Handlebars templates and inconsistent data types among different database technologies
  • Override paths to font files for Bootstrap Glyphicons to support the UserFrosting directory structure
  • Added missing lines of Thai language (popiazaza)
  • Fix a vulnerability where users still logged in wouldn't automatically be logged out if they were disabled
  • Add option for HTTPS in .htaccess, commented out by default
  • Minor syntax fixes in public/js/userfrosting.js, widget-auth.js, widget-groups.js, and widget-users.js

v0.3.1.11

  • Composer can now include composer.json files from plugin folders (added "wikimedia/composer-merge-plugin" to composer)

v0.3.1.10

  • Select correct versions (PHP 5.x compatible) of packages in composer.json
  • Turkish language translation
  • Return User object created in AccountController::register

v0.3.1.9

v0.3.1.8

  • Finish replacing all usages of *Loader classes with Eloquent syntax
  • Installer warning for missing imagepng
  • Fix bug in CSV generation for user table

v0.3.1.7

  • Change "default theme" to "guest theme" and fix loading issues (#463). What used to be called "default theme" is now base theme, i.e. the theme to fall back to when a template file cannot be found in the current theme (user group or guest theme)
  • New public template for "nyx" theme
  • Remove trailing slash from configuration JS/CSS paths to make uniform with site.uri.public
  • Make routes for config.js and theme.css dynamically generated from configuration variables (#461)
  • Make cookie name for "remember me" use session name
  • Fix potential bug in configuration user_id's for guest, master accounts

v0.3.1.6

  • Fix exception-handling for mail server errors
  • Notify if account creation was successful, even if mail server failed.

v0.3.1.5

  • Add Romanian translation
  • Upgrade Tablesorter and pretty URLs for searched/sorted/paginated tables
  • Fix bug in default value for user secret_token

v0.3.1.4

  • .htaccess redirect trailing slash: change to only redirect GET requests
  • Natural sort order in API
  • Fix bug in table pagination
  • Fix bug in loading user primary group properties as user properties
  • Fix mailto link bug in tables
  • Warn if config file missing (#445)
  • Fix dutch error (#447)

v0.3.1.3

  • Implement CSV download feature

v0.3.1.2

  • Implement no_leading_whitespace and no_trailing_whitespace rules

v0.3.1

  • Improved initialization routine as middleware
  • Implemented "remember me" for persistent sessions - see https://github.com/gbirke/rememberme
  • Converted page templates to inheritance architecture, using Twig extends
  • Start using the .twig extension for template files
  • All content is now part of a theme, and site can be configured so that one theme is the default theme for unauthenticated users
  • User session stored via user_id, rather than the entire User object
  • Data model is now built on Eloquent, instead of in-house
  • Cleaned up some of the per-page Javascript, refactoring repetitive code
  • Implement server-side pagination
  • Upgrade to Tablesorter v2.23.4
  • Switch from DateJS to momentjs
  • Switch to jQueryValidation from FormValidation
  • Implement basic interface for modifying group authorization rules
  • User events - timestamps for things like sign-in, sign-up, password reset, etc are now stored in a user_event table
  • Wrapper class Notification for sending emails, other notifications to users
  • Remove username requirement for password reset. It is more likely that an attacker would know the user's username, than the user themselves. For the next version, we can try to implement some real multi-factor authentication.
  • When a user creates another user, they don't need to set a password. Instead, an email is sent out to the new user, with a token allowing them to set their own password.
  • Admins can manually generate a password reset request for another user, or directly change the user's password.

v0.3.0

v0.2.1

  • Implemented db-driven menu system. Menu items are pulled from the database, and can be modified via plugins.
  • Implemented backend templating of forms and tables via Bootsole.

v0.2.0 (butterflyknife)

  • Converted all DB calls to PDO.
  • Renamed "permissions" to "groups". Same concept, but using the word "group" suggests that it can be used for more than just access control.
  • Implemented "primary group" membership for users. A user can belong to multiple groups, but only one of those will be their primary group.
  • Implemented DB-driven home pages for groups. Upon login, a user will be redirected to the home_page for their primary group.
  • Implemented templated menus. Every group has a corresponding menu template in models/menu-templates. Upon login, the menu for a user's primary group is automatically loaded and rendered.
  • Implemented function-level user authorization. Whenever a function in secure_functions is called, the user_action_permits table is checked to see whether or not that user has access to the function (the action column), conditional on the boolean functions specified in the permits column.
  • Organized pages into four categories: account pages, API pages, form pages, and public pages. Public pages reside in the root directory and can be accessed by anyone. Account pages are in the account directory and are only accessible after logging in. API pages are in the api directory, and consist of all the pages that process or fetch data from the DB and interact with the frontend via AJAX/JSON. They are accessible by any logged in user, but will only perform a function if the user is authorized. Form pages are in the forms directory, and consist of pages that generate forms (for creating/updating users, groups, etc.)
  • Converted registration page to AJAX.
  • Improved installer with site configuration.

v0.1.7

  • Page scrolls back to top after AJAX submit.
  • "Website url" is automatically suffixed with "/" if necessary.
  • Fixed bad link to forgot_password.php.
  • Began implementing action authorization scheme.

v0.1.6

  • Implemented CSRF token checking for creating and updating users
  • Moved much of the nuts and bolts for generating the user-create and user-update forms to the server side, so as to streamline rendering process and require fewer requests by the client (see load_form_user.php)
  • Improved responsive layout for rendering nicely on mobile devices

v0.1.5

  • More improvements to error-handling/rendering
  • HTTPS/SSL compatible
  • Fixed bug with different table name prefixes
  • Improvements to CSRF tokens

v0.1.4

  • Updated password hashing from md5 to modern bcrypt (more secure) - thanks to contributor @r3wt
  • Included better functions for sanitizing user input, validating user ip, generating csrf (cross-site request forgery) tokens - thanks to contributor @r3wt

v0.1.3

  • Root account (user id = 1) : created upon installation, cannot be deleted or disabled.
  • Special color scheme for when logged in as root user.
  • Installer now guides user through creation of root account
  • Moved common JS and CSS includes to "includes.php"

v0.1.2

  • Improved error and exception handling
  • Added 404 error page
  • Standardized JSON interface for backend scripts
  • Front-end should now be able to catch virtually any backend error and take an appropriate action (instead of white screen of death)