You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
#196 Prefix the global names of the bundle, as required by the Symfony best practices for bundles: new cleverage_ui_process.upload_directory parameter, the upload_directory parameter is deprecated (when the application still sets it, its value is used with a deprecation, unless the new parameter is also set; new internal UploadDirectoryParameterPass); the Twig functions log_label, log_translation, log_css_class, get_last_execution_date, get_process_source, get_process_target, resolve_ui_options and the Twig filter md5 are prefixed with cleverage_ui_process_, the former names are deprecated. The former names will be removed in 4.0. Update documentation and UPGRADE.md, add tests.
#194 The tables and columns of the entities have explicit names, those created by the migrations of the bundle: the schema no longer depends on the Doctrine naming strategy of the application (the underscore_number_aware strategy is no longer a prerequisite; with the Doctrine default one, the indexes referenced missing columns). Same names with the underscore / underscore_number_aware strategies, no new migration. Update documentation, add tests.
#190 Add aliases named after their class to ProcessExecutionManager, ProcessConfigurationsManager, ProcessExecutionRepository and ProcessScheduleRepository (as the Monolog handlers): they can be autowired. Update documentation, add tests.
#192 The controllers and the HTTP value resolver are defined explicitly, without autowiring nor autoconfiguration (Symfony best practices for bundles, as cleverage/process-bundle#149): same arguments, tags and calls. The $context binding of the controllers no longer registers the AdminContextFactory service for the AdminContext $context arguments of the EasyAdmin actions (never used: EasyAdmin resolves the context first). Add tests.
#187 Composer: require PHP ^8.2 instead of >=8.2 (PHP 9 is no longer accepted before being tested), remove the authorization of the symfony/flex plugin, which is not required (the CI installs it globally), as cleverage/process-bundle#319.
#181 Fix the deprecations revealed by the tests, which now fail on deprecations: ProcessExecutionRepository::getLastProcessExecution() passes the \SortDirection enum to orderBy() when doctrine/orm accepts it (3.7 or later, where a string direction is deprecated, #152); ProcessExecutionRepository::hasLogs() counts the log records without an arbitrary join (WITH deprecated by doctrine/orm 3.7, same result); the date filters of the log records (createdAt) and of the process executions (startDate) use the single_text widget (not configuring it is deprecated by Symfony 6.4, already the default since Symfony 7.0); User::eraseCredentials() is marked #[\Deprecated], as required by Symfony 7.3 (with Symfony 6.4 and PHP 8.4 or later, which still call it, set security.erase_credentials: false to avoid the deprecation).
#180 Define the public API (Symfony BC promise, as cleverage/process-bundle#279): ProcessExecutionManager, ProcessExecutionRepository, ProcessScheduleRepository, ProcessExecuteMessage, ProcessExecutionNotification and CleverAgeUiProcessBundle are marked @final since 3.3, they will be final in 4.0: extending them triggers a deprecation with the Symfony DebugClassLoader. The entities stay open (overriding them: #37). The infrastructure classes are marked @internal: the extension, Configuration, the commands, the controllers, the EasyAdmin fields and filters, the form types, the Messenger handlers, the Monolog handlers, HttpProcessExecuteValueResolver, HttpProcessExecutionAuthenticator, ProcessExecutionStopChecker, CronScheduler, ProcessEventSubscriber and the Twig extensions, runtimes and components.
#179CleverAgeUiProcessExtension::findServices() loads the service definition files with a glob pattern instead of a Finder (same files, as cleverage/process-bundle#271). Add tests.
#172 Prefix the route names of the bundle with cleverage_ui_process_, as required by the Symfony best practices for bundles: cleverage_ui_process_login, cleverage_ui_process_logout, cleverage_ui_process_list, cleverage_ui_process_launch, cleverage_ui_process_http_execute, and the dashboard cleverage_ui_process, so that the routes generated by EasyAdmin for the CRUD pages are cleverage_ui_process_<crud>_<action>. The former names (process, process_<crud>_<action>, process_login, process_logout, process_list, process_launch, http_process_execute) are deprecated route aliases (new config/routes/deprecated_aliases.yaml, loaded by the documented import, and internal DeprecatedEasyAdminRouteAliasLoader for the routes generated by EasyAdmin), removed in 4.0; ?routeName=<former name> URLs keep working. Document that easyadmin.routes generates the routes of every dashboard. Update documentation and UPGRADE.md, add tests.
#166 Doctrine ORM 2: the entities have readonly properties (since v3.2), which the legacy proxies of ORM 2 cannot handle (Cannot unset readonly property ... from scope Proxies\__CG__\... when an entity proxy is loaded). The container compilation now fails with an explicit message when ORM 2 is used without doctrine.orm.enable_lazy_ghost_objects: true (new internal CheckDoctrineLazyGhostObjectsPass); nothing changes with ORM 3. Update documentation, add tests.
#164 Require symfony/polyfill-php83, symfony/polyfill-php84 and symfony/polyfill-php85: the functions of PHP 8.3 to 8.5 (json_validate(), array_find(), array_first()...) can be used while supporting PHP 8.2 (see CONTRIBUTING.md). Rector is configured for PHP 8.2 (was 8.5, which allowed it to introduce PHP 8.3+ functions without polyfill) with the PHP_POLYFILLS set (withPhpSets() without argument), it does not change the code. array_last() replaces end() in a test. Tests: lazy ghost proxies with Doctrine ORM 2 (now installed by the lowest dependencies job), as configured by the Symfony recipe: the legacy proxies cannot unset the readonly properties of the entities.
#158 CI: test the lowest versions allowed by composer.json (--prefer-lowest, PHP 8.2). Require symfony/scheduler ^6.4.44 || ^7.4.17 || ^8.1.5: the every expressions validation (EveryExpressionValidator) relies on the PeriodicalTrigger rejecting the intervals that do not move the run date forward or resolve to zero seconds (older versions loop forever on e.g. "yesterday", and fail with a TypeError on an invalid expression). ProcessExecutionDurationFilter: the number of seconds is cast to an integer and inlined in the DQL instead of being bound as a parameter (#111): with DBAL 3, the SQLite platform puts the SECOND intervals inside a string literal, so the parameter was never bound ("column index out of range" error on SQLite with DBAL 3).
#156LogRecord::contextIsEmpty() (deprecated since v3.1, use hasContextInfo()) triggers a deprecation at runtime with trigger_deprecation() (symfony/deprecation-contracts, now required). Add tests.
#154 Add a .gitattributes: the development files (.docker/, .github/, tests/, quality tools and PHPUnit configurations, Makefile) are no longer part of the archive installed by Composer (dist), remove the unused package.json (Webpack Encore leftover of the Symfony skeleton: no webpack.config.js, no assets/).
#149 Clean up composer.json: remove the unused symfony/dotenv, symfony/runtime, ext-ctype and ext-iconv requirements (applications relying on the bundle to install symfony/dotenv / symfony/runtime must require them, as the Symfony skeleton does); replace doctrine/common by doctrine/collections (only ArrayCollection is used); require twig/twig, symfony/twig-bundle, psr/log, doctrine/persistence, doctrine/migrations and symfony/event-dispatcher-contracts, used directly but only installed transitively; add twig/extra-bundle and symfony/property-access (used by the tests) to the dev requirements.
#150 Require symfony/monolog-bundle and monolog/monolog, used directly by the bundle (log handlers, monolog configuration prepended, monolog.logger tags) but only installed through cleverage/process-bundle, which may stop requiring MonologBundle (cleverage/process-bundle#269).
Fixes
#185Version20261005120000 migration (#97), MySQL (MariaDB shares the same code): foreign_key_checks is disabled around the change of log_record.process_execution_id to NOT NULL, the foreign key is kept as is. Without a strict SQL mode (neither STRICT_TRANS_TABLES nor STRICT_ALL_TABLES), MySQL makes the column NOT NULL with ALGORITHM=COPY, which is refused on a foreign key column while foreign_key_checks is enabled: the migration failed with "1832 Cannot change column 'process_execution_id': used in a foreign key constraint 'FK_8ECECC333DAC0075'". Same resulting schema. If the migration failed, run the migrations again after the update; if the workaround of #185 was applied (doctrine:migrations:version ... --add), there is nothing to do. CI: the migrations are also run on MySQL without a strict SQL mode.
#174 Long-running workers (Messenger, scheduler): ProcessExecutionManager implements ResetInterface (kernel.reset tag), its current and last process executions are reset between two messages; DoctrineProcessHandler drops the log records not written at the end of the previous execution on reset() (kernel.reset tag). ProcessEventSubscriber forgets the ended process execution (and closes its log file) even when it cannot be saved: the next process executed by the worker was attached to it. Add tests.
#173 Fix the hard-coded URLs: the page displayed after the login is generated from the dashboard route (was /process: wrong when the routes are imported with a prefix, or the application is served from a sub-directory), and the logo URL is built by the Asset component (base path, framework.assets.base_urls, version strategy; absolute URLs kept as is; was /<logo_path>). New ProcessDashboardController constructor argument (Symfony\Component\Asset\Packages, autowired). Require symfony/asset, used directly. Add tests.
#171 Configuration: config:dump-reference clever_age_ui_process and debug:config clever_age_ui_process no longer fail (CleverAgeUiProcessExtension::getConfiguration() gives the kernel environment to Configuration, so the PHP config builder is generated too); the options are documented with info(). The logs.database_level, logs.file_level and logs.report_increment_level options are validated when the container is compiled, an invalid level no longer makes every process execution fail at runtime (environment variables are still allowed, checked at runtime). Update documentation, add tests.
#169 Security: the configuration added by the bundle to the security extension (process_user_provider user provider, provider, login form, logout and API token authenticator of the main firewall) overrides the application one, it can now be disabled with the new security.configure_firewall option (default true, same behaviour as before; false: no security configuration is added, the application configures the provider and the firewall, e.g. a firewall dedicated to the UI). The monolog, doctrine_migrations and security configurations are skipped when the bundle is not enabled, instead of a LogicException. The documentation no longer says that these configurations are prepended (only the Messenger one is). Update documentation, add tests.