What's new in EzyPlatform 1.3.9?

This release introduces payment-required media support, extends media access control on the Web, improves APIs and performance, and provides new extension points for payment validation plugins.
  1. Added payment-required media support
    EzyPlatform now supports marking media as paymentRequired, with the status stored using the payment_required metadata key. This enables the platform to identify media that can only be accessed after a successful payment.
  2. Extended media APIs and models
    The MediaDetailsModel, AdminMediaDetailsResponse, and MediaDetailsResponse models now include the paymentRequired field, allowing both the Admin API and Web API to indicate whether a media item requires payment.
  3. Support for updating payment-required status
    Both UpdateMediaRequest and UpdateMediaIncludeUrlRequest have been extended with two new fields: updatePaymentRequired and paymentRequired. These fields allow clients to update the payment-required status when editing media.
  4. Extended MediaService APIs
    MediaService now provides saveMediaPaymentRequired(...) and isPaymentRequiredByMediaId(...) for storing and retrieving the payment-required status of media items.
  5. Improved Admin media management
    The Admin Media Details dialog now includes a Payment Required checkbox, allowing administrators to enable or disable payment protection directly while editing media.
  6. Added a new Website setting
    Website Settings now include the Allow users to update media payment requirement option. When disabled, the Web API automatically ignores any attempt by users to update the paymentRequired status.
  7. Enhanced media access control
    When users download media through the Website, the platform now checks whether the media requires payment. If payment is required and the user is not authenticated, an authentication error is returned. If the user is authenticated, the platform publishes the validate_user_payment_required event, allowing external plugins or applications to implement their own payment validation logic before granting access.
  8. Extended MediaDownloadEvent
    MediaDownloadEvent now includes RequestArguments, giving event handlers additional request context when validating media access. A corresponding WebValidateUserPaymentRequiredEventSchemaFetcher has also been added to describe the schema of the validate_user_payment_required event.
  9. Added SaveMetaRequest
    Introduced the new SaveMetaRequest together with its converter to SaveMetaModel, providing a more consistent and extensible way to save metadata.
  10. Improved login redirection
    WebGlobalExceptionHandler now uses WebViews.redirectToLogin(...) for login redirection, ensuring a consistent authentication flow throughout the platform.
  11. Optimized Media Details performance
    AdminMediaModelDecorator.decorate(...) has been optimized by loading the owner admin, owner user, and media duration in parallel, reducing response time when displaying media details.
  12. Updated multilingual resources
    Added translations for the new labels allow_user_update_media_payment_required and payment_required in Vietnamese, Japanese, Korean, and Chinese.
  13. Compatibility and test improvements
    Updated com.mysql.cj.jdbc.Driver.acceptsURL(...) by removing the throws SQLException declaration. In addition, MediaControllerServiceTest has been updated to verify that the paymentRequired status is correctly returned when retrieving media details.