- SaveObject step will no replace the workplan's ingredient
parameters
, but just update it.
- Add exception on User::getUserIdentifier when email is empty
- Add non-empty-string on getUserIdentifier
- Support to Symfony 7.2
Teknoo\East\CommonBundle\Command\CreateUserCommand
use constant to return code instead of int value.
- Add some missing images types to
FileType
andReturnFile
- Migrate to
Teknoo Recipe
6. - Rename
Cookbook
toPlan
.- Old classes and interfaces are deprecated.
- Migrate to
EditablePlan
all previousCookbook
/Plan
. - Migrate the decoration about the East Foundation Plan to register the
LocaleMiddleware
andInitParametersBag
. - The parameter
teknoo.east.common.plan.default_error_template
replaceteknoo.east.common.cookbook.default_error_template
- Fix wrong file type passed to JS Source Loader to minify javascripts
- Add
SourceLoader
extension module to allow app extension to complete set of assets
- Update requirement libraries
- Use
random_bytes
instead ofuniqid
- Update dev lib requirements (issue with covering from PHP 11.4)
- API Response are trimed in
TemplateTrait
- Remove Composer unused
- Switch to PHPUnit 11
- Remove useless dependency to
symfony/templating
- Fix deprecated : replace
Symfony\Component\HttpKernel\DependencyInjection\Extension
bySymfony\Component\DependencyInjection\Extension\Extension
- Add methods
openBatch
andcloseBatch
to DBSource managers to create batch of writing operation, like transaction, but reading operations are not impacted, it's not a transaction. (This will come soon).
- Drop support of PHP 8.1
- Add sensitive parameter attribute on methods catching throwable to prevent leak.
RenderForm
step will set the response statut to 400 when the form is invalid and in api mode.
JumpIf
andJumpIfNot
support a callable for$expectedJumpValue
.- If a callable is passed, it must return a boolean and accepts the
$testValue
as parameter.
- If a callable is passed, it must return a boolean and accepts the
- Fix support of last PHPStan 1.10.64
- Use State 6.2
- Use Recipe 5+
- Improve
RecoveringAccessUserProvider
to use newPromise
feature
- Fix typo
preferRealDate
instead ofprefereRealDate
- Add steps
StartLoopingOn
andEndLooping
to perform easily looping on a collection in a recipe- The collection must be passed at runtime in
StartLoopingOn
. (you can map your ingredient to the parametercollection
)- At each call, the
StartLoopingOn
will put in the workplan the current value of the collection- If the value is an object, the workplan's key will be automatically defined from the object class
- You can set the key value during the construction of
StartLoopingOn
. It is mandatory for non objects values
- At each call, the
- The step's name of the end of the loop must be defined at the construction in the
StartLoopingOn
instance. - The step's name of the start loop must be also be defined at the construction of the
EndLooping
instance. - The "loop" (aka the
StartLoopingOn
instance) is also injected in the workplan at each loop
- The collection must be passed at runtime in
- Add
VisitableTrait
to implement easilyVisitableInterface
- Update
VisitableInterface
to accept direclty the property name and the callable as second argument without use an array
- Remove
formOptions
as empty value in Symfony's routes (useless since 2.7.1) - Add Symfony contract
FormApiAwareInterface
dedicated for form usable in a Web context and API context- A form with this contract MUST accept the option
api
, (must add indefaults
) - If a the form implements this interface, the step
FormHandling
will also injected the ingredient$api
in the form options
- A form with this contract MUST accept the option
UserType
is splitted intoUserType
andApiUserType
, the first extends the second and implementsFormApiAware
.- Password are manageable only with
UserType
- Password are manageable only with
- Add User's export feature
- Add User' Type support API
- Fix
FormHandling
step with a GET request but it has aContent-Type
to json. (According to standard, a GET request has no Content-Type, it's just to prevent)
formOptions
ingredient in now not mandatory in cookbooks.- Require
Recipe
4.6.1+
- Common
DatesService
is deprecated, use Foundation'sDatesService
instead - Common's components use Foundation's
DatesService
- In
JumpIf
, if the $testValue isStringable
, the value will be automatically cast to string - Add
JumpIfNot
to Jump to a step if a condition is not valid (contrary toJumpIf
) - Add
EmailValue
class as ValueObject compliant withObjectInterface
- Add RecoveryAccess as AuthData for User
- Add Plan interface
PrepareRecoveryAccessEndPointInterface
andPrepareRecoveryAccessEndPoint
to create and send a link to allow an user to recover its access.- Add Steps
FindUserByEmail
,PrepareRecoveryAccess
, andRemoveRecoveryAccess
for this last cookbook.
- Add Steps
- Add
NotifyUserABoutRecoveryAccessInterface
to implement in a step locked in framework to send the notificationRecoveryAccessNotification
is the default implementation of this interface in Symfony
- Add
UserWithRecoveryAccess
andRecoveringAccessUserProvider
to support this new feature with Symfony Passwordless link (with LoginLink feature and Symfony Notifier) - This provider supports also TOTP.
- Add
EmailFormType
in Symfony's Form to create a form to prompt an email.
- Support Doctrine Mongo ODM Bundle 5.x
- Fix issue in cascadin exprresion conversion
- Fix 2FA authentication with third party
- Support Symfony 7+
- Update dev lib requirements
- Support Symfony 6.4+ (7+ comming soon)
- Update dev lib requirements
- Support Symfony 6.4+ (7+ comming soon)
- Add regex supper in queries' criteria.
- Support $regex in MongoDB's queries
- Support of Doctrine ODM 2.6.1+
Add cleaning html feature available for all rendered html template
To enable this behavior, set in the route attributes, the attribute cleanHtml
to true
Or set the parameter teknoo.east.common.rendering.clean_html
to true in the DI.
The behavior is available only on environment with the ext tidy enabled (else the output is directly returned).
- JS and CSS Minifier features from specific HTTP endpoint without webpack
- Use
league/flysystem
to perform I/O operations - Use
matthiasmullie/minify
to perform minifing operations - The cookbook implements the interface
Teknoo\East\Common\Contracts\Recipe\Plan\MinifierEndPointInterface
- Routes available in
infrastructures/symfony/Resources/config/assets_routing.yaml
- Compiled file can be versioned by using
_teknoo_common_minifier_css_version
and_teknoo_common_minifier_js_version
. - By default, a compiled file is not overwritten but this behavior can be disabled by set the parameter
teknoo.east.common.assets.no_overwrite
to false - With Symfony, command
teknoo:common:minify:css
andteknoo:common:minify:js
can be used.- The cookbook implements the interface
Teknoo\East\Common\Contracts\Recipe\Plan\MinifierCommandInterface
- The cookbook implements the interface
- Use
- JS and CSS Minifier features from specific HTTP endpoint without webpack
- Use
league/flysystem
to perform I/O operations - Use
matthiasmullie/minify
to perform minifing operations - The cookbook implements the interface
Teknoo\East\Common\Contracts\Recipe\Plan\MinifierEndPointInterface
- Routes available in
infrastructures/symfony/Resources/config/assets_routing.yaml
- Compiled file can be versioned by using
_teknoo_common_minifier_css_version
and_teknoo_common_minifier_js_version
. - By default, a compiled file is not overwritten but this behavior can be disabled by set the parameter
teknoo.east.common.assets.no_overwrite
to false - With Symfony, command
teknoo:common:minify:css
andteknoo:common:minify:js
can be used.- The cookbook implements the interface
Teknoo\East\Common\Contracts\Recipe\Plan\MinifierCommandInterface
- The cookbook implements the interface
- Use
- JS and CSS Minifier features from specific HTTP endpoint without webpack
- Use
league/flysystem
to perform I/O operations - Use
matthiasmullie/minify
to perform minifing operations
- Use
- To do :
- Support version of minified assets compiled
- Add CLI command to compile offline
- Support of noOverwrite
- Fix issues with
PHPUnit 10.4+
- Fix
ThirdPartyAuthenticatedUserProvider
to be used with TOTP
- Add
Stop
special step to stop the execution of a recipe.
Render
,RenderError
,RenderList
,RenderForm
, andTemplateTrait
support api json and return the content typeapplication/json
when api is at json
- Update DeleteObjectEndPoint to support operations from API.
- Add
api
option in route_defaults
or request attribute to disable redirection and render a template defined in the optiontemplate
.
- Add
- Add
JumIf
step to implement a conditional jump according to a presence or an ingredient/variable in the workplan, or according to the value of this ingredient. - Support API call in Symfony Form's recipe step, to disable CSRF protection
- This query can be pushed in GET, POST or PUT, with
application/x-www-form-urlencoded
,multipart/form-data
orapplication/json
- This query can be pushed in GET, POST or PUT, with
- Reorder options in Symfony Routes
- Support PHP-DI 7.0+
- Support Laminas Diactoros 3.0+
- Support PHP-DI 7.0+
- Support Laminas Diactoros 3.0+
- Fix PSR4 issue with MediaTest file. (Tests can be reused in others libaries)
- Update Teknoo libs
- Require Symfony 6.3 or newer
- Update dev lib requirements
- Update copyrights
- savedObject var is also set for created object and not only for updated object
- Update dev lib requirements
- Support PHPUnit 10.1+
- Migrate phpunit.xml
- Allow psr/http-message 2
- Migrate Website Media into Common namespace
- Migrate Website LocalMiddleware into Common namespace
- Q/A
- When an object is saved entry
objectSaved
is set a true into workplan and view
- Add
LazyLoadableCollection
to create lazy collection from Common Queries. - Add
EmptyObject
.
- Fix deprecated in Doctrine ODM
- Support 2FA with TOTP (like Google Authenticator) credentials in common namespace
- Add
TOTPAuth
class asAuthDataInterface
- Add
getOneAuthData
to return a specific instance ofAuthData
- Fix bug to allow one instance of
AuthData
type per user
- Add
- Support official 2FA Bundle provided by Sheb for Symfony
- Update Users providers in Symfony Bundle to return user with
UserWithTOTPAuthInterface
and sheb's interfaces, and use its bundle out of the box without any adaptation for this bundle. - Add, in Symfony bundle, endpoints and step to enable or disable TOTP and QRCode generation :
- Plan
Enable2FA
- Plan
Disable2FA
- Plan
GenerateQRCode
- Step
EnableTOTP
- Step
DisableTOTP
- Step
GenerateQRCodeTextFORTOTP
- Step interface
BuildQrCodeInterface
to implement response with image from QRCode. - Step
ValidateTOTP
- Plan
- Add routing file
2fa_routing.yaml
.
- Remove phpcpd and upgrade phpunit.xml
- Update dev libs to support PHPUnit 10 and remove unused phploc
- Support East Foundation 6.2
DatesService
reuse Foundation's Dates Service
- Some QA fixes
- Drop support of Symfony 6.0 and Doctrine 2.x, supports SF 6.1+ and Doctrine 3+
- Add
OriginalRecipeInterface::class . ':CRUD'
in DI to allow custom Recipe for CRUD - Add
OriginalRecipeInterface::class . ':Static'
in DI to allow custom Recipe for Static
FormHandlingInterface
step is recalled inEditObjectEndPoint
before re-rendering form when the form has been successfully saved.
- Update symfony configuration for behat
- Migrate Behat's bootstrap into tests directory
- Add strict_types=1 to all tests
- Fix PSR4 error in Test namespace
- Support Recipe 4.2+
- Add
VisitableInterface
to expose indirectly internal values / attributes to an method.
- Use
getSingleResult
instead ofexecute
for single result
- Add
$hydrate
arguments to auto load all persisted objects linked to fetched main object, from the name of the relation in the main object. (Not available with the common doctrine implementation) - Implement the previous behavior on Doctrine ODM thanks to Doctrine priming reference feature.
- Add parameter
$preferRealDateOnUpdate
to methodWriterInterface::save()
to pass the real date instead of the date in cache when aTimestampableInterface
instance is passed. - Add property
PersistTrait::$preferRealDateOnUpdate
to set the default behavior for a writer about date to pass to aTimestampableInterface
instance.
- Fix composer
- Fix DatesService, update internal date instance when the real date is claimed in
passMeTheDate
- Improve exception message and code in steps
- Set exception's code when they are throwed
- Clean code and test thanks to Rector
- Update libs requirements
- Promise simplification in PaginationQuery
- Fix admin list route
- Add
NotIn
query expression - Add
BatchManipulationManagerInterface
contract, extendingManagerInterface
to define manager able to perform batch data manipulations. - Add
BatchManipulationManager
(inDoctrine\ODM
) implementingBatchManipulationManagerInterface
with fallback toManager
(inDoctrine\Common
) for individual persisting operations. - Add
UpdatingQueryInterface
contract to perform batch object updates. - Add
DeletingQueryInterface
contract to perform batch object deletes. - Add
QueryExecutorInterface
contract to translate previous queries (update and delete) to the Data layer query in adapter. - Add
QueryExecutor
in (Doctrine\ODM
) to transform east query to Doctrine ODM query.
- All cookbooks provided by Common accepts a new argument in constructorm called
defaultErrorTemplate
to set in the initial workplan theerrorTemplate
ingredient to avoid to set for each use. - This variable can be set in the DI via the special key
teknoo.east.common.cookbook.default_error_template
ListObjectEndPoint
accepts$loadListObjectWiths
in constructor to define mapping forLoadListObjects
step.EditObjectEndPoint
accepts$loadObjectWiths
in constructor to define mapping forLoadObject
step.DeleteObjectEndPoint
accepts$loadObjectWiths
in constructor to define mapping forLoadObject
step.CreateObjectEndPoint
accepts$createObjectWiths
in constructor to define mapping forCreateObject
step.
SlugPreparation
is not mandatory for cookbooksCreateObjectEndPoint
andEditObjectEndPoint
- Rename
.yml
files to.yaml
- Fix
Common\RepositoryTrait::$repository
definition - Upgrade dev libs requirements
- Fix
UserType
form to be use as subform *(misseddata_class
) option.
- Fork from
East Website 7.0.3
- Remove all CMS features (
Content
,Item
,Media
,Type
) - Remove all Doctrine translation extension
- Rename
Teknoo\East\Common
toTeknoo\East\Common
- Migrate all interfaces in
Teknoo\East\Common
toTeknoo\East\Common\Contracts
- Migrate all interfaces in
Teknoo\East\Common
toTeknoo\East\Common\Contracts
- Fork from
East Website 7.0.3
- Remove all CMS features (
Content
,Item
,Media
,Type
) - Remove all Doctrine translation extension
- Rename
Teknoo\East\Common
toTeknoo\East\Common
- Migrate all interfaces in
Teknoo\East\Common
toTeknoo\East\Common\Contracts