Skip to content

<div style="display: none;" hidden="true" aria-hidden="true">Are you an LLM? You can read better optimized documentation at /changelog/Changelog.4.92.md for this page in Markdown format</div>

Home | Changelog

Version 4

version 4.92

[4.92.12] feat(rest/domains):

  • BaseModel supports sub relation filtering

  • feat: respect filters when eager loading entities.

  • Querystring for not respecting is constrain=0

  • ListRequest sets constrainRelations to Model.

  • ListRequest typehint constructor vars [4.92.12] fix: chinese payway translations [4.92.11] feat: Translations for russian, italian, spanish and chinese [4.92.10] fix: query builder _compile_wh fix for large where in arrays [4.92.10] fix: Use standard query instead of query builder where in to fix the preg match limit [4.92.10] fix: phpoffice/phpspreadsheet CVE-2025-54370 [4.92.9] feat: Implement robust recursive loading and decouple relation logic *decouple the relationship-loading logic from the controller layer - fixes critical bugs related to deep recursion)

    1. Architectural Refactor & Decoupling:
      • Centralized all relation-parsing logic into the BaseModel, making it the single source of truth for how relationships are loaded.
      • Removed the flattenRelations method from the HandlesRestfulActions trait. This decouples the Controller layer from the data-loading implementation details.
      • The Controller/Trait now only parses the request into a nested array and passes it transparently through the Service layer to the Model. This adheres to a "Smart Model, Dumb Controller" pattern, improving maintainability and reducing the surface area for bugs.
    2. Fix for OneToMany Deep Recursion (children*):
      • The loadRecursiveChildren method was rewritten from an iterative while loop to a proper recursive function.
      • This resolves the critical bug where only the last level of descendants was being attached, and now correctly builds the entire nested tree structure for relations like children.
    3. Fix for BelongsTo Deep Recursion (parent*):
      • The loadRecursiveParents method was similarly refactored to use recursion.
      • This fixes the issue where nested relations on ancestors (e.g., parent*.translations) were not being loaded beyond the immediate parent.

[4.92.9] task: allow loading relation model from di container instead of instantiating concrete class [4.92.9] fix: domain map container namespace [4.92.9] chore: remove not needed Entity::getData [4.92.8] task: Maps_model::addMapPoint returns null|string (also added typhints in signature) [4.92.8] feat: Maps_admin additional methods for allowing overriding. before add/edit record and record relations methods [4.92.8] fix: points/update return link [4.92.7] feat: Maps_admin render methods for clients (indexRender, addRender, editRender, pointRender, addPointRender, editPointRender) [4.92.7] fix: points/update view set_value for is_active checkbox [4.92.6] fix: points/{create|update} views invalid param for availableCountriesDropDown - change label for image [4.92.5] fix: Maps_admin::edit and Maps::edit_point page titles [4.92.4] fix: checking for invalid master record in Maps_admin:edit [4.92.4] task: update Maps_admin::edit_point rendering of mui fields to pass array of indexed records to avoid having to set up extra fields on overrides [4.92.4] fix: Maps_model getAdminRecord and getPoint methods checking result before calling row or result [4.92.4] refactor: Maps_admin gets post and mui post data from separate methods to allow easier field overriding, map location upload file to separate method [4.92.4] fix: error render setups request in base controller currentCurrency property which is declared in front controller and not in admin controller. [4.92.4] fix: Map\Entity typehint property [4.92.3] feat(rest): read updated example and info on container / collections/ resources / entities Rest Api Modules doc * Document (files) and Slider{Group\Slider\Slide} implementation * Update Collection and Resource interface * remove the need to set model property in collections / resources and entities using DiscoversModel trait which uses naming convention to get model class. It can be overriden from DI container or by setting the model property * split domain dependency injection from rest di [4.92.2] fix(Adv_category_admin): remove xss_clean for fulltext on add and edit methods [4.92.2] feat(rest): read updated for Resource Rest Api Modules doc * Map\Map and Map\Locations implementation * refactor: moved public resource::toArray to BaseResource. Actual resource mapping is now done in protected function resource * refactor: BaseResource::{addResourceToData|addCollectionToData} to remove boilerplate code from Resource implementation [4.92.1] feat(rest): read updated Rest Api Modules doc * Relations are managed from BaseModel. app models only setup relations in defineRelations() * Supported relations are one-to-many, one-to-one, many-to-many and belongs-to * recursion in relations (ie with=children*,children*.translations) * lazyload with magic __get and __call in BaseModel * rest/**/item to get resource with ListRequest like in index(list) [4.92.0] feat: rest for subcontent and page (category). read Rest Api Modules doc

Notes

[4.92.12] Run composer i in production to regenerate cached container [4.92.10] Check for overrides:

  • Product_model::getProductCodeImages
  • Product_meta_model::getByProductIds

[4.92.10] Run composer i to get updated components

  • updated components
  • aws/aws-sdk-php (3.352.6 => 3.356.24)
  • cakephp/core (4.6.1 => 4.6.2)
  • cakephp/database (4.6.1 => 4.6.2)
  • cakephp/datasource (4.6.1 => 4.6.2)
  • cakephp/utility (4.6.1 => 4.6.2)
  • dompdf/dompdf (v3.1.0 => v3.1.2)
  • guzzlehttp/guzzle (7.9.3 => 7.10.0)
  • guzzlehttp/promises (2.2.0 => 2.3.0)
  • guzzlehttp/psr7 (2.7.1 => 2.8.0)
  • matomo/device-detector (6.4.6 => 6.4.7)
  • nikic/php-parser (v5.6.0 => v5.6.1)
  • paragonie/constant_time_encoding (v3.0.0 => v3.1.2)
  • phpoption/phpoption (1.9.3 => 1.9.4)
  • phpoffice/phpspreadsheet (2.3.9 => 2.4.1)
  • phpunit/phpunit (10.5.51 => 10.5.57)
  • ramsey/uuid (4.9.0 => 4.9.1)
  • sebastian/comparator (5.0.3 => 5.0.4)
  • sebastian/exporter (5.1.2 => 5.1.4)
  • squizlabs/php_codesniffer (3.13.2 => 4.0.0)
  • symfony/console (v6.4.24 => v6.4.25)
  • symfony/dependency-injection (v6.4.24 => v6.4.25)
  • symfony/event-dispatcher (v6.4.24 => v6.4.25)
  • symfony/framework-bundle (v6.4.24 => v6.4.25)
  • symfony/http-foundation (v6.4.24 => v6.4.25)
  • symfony/http-kernel (v6.4.24 => v6.4.25)
  • symfony/monolog-bridge (v6.4.24 => v6.4.25)
  • symfony/polyfill-ctype (v1.32.0 => v1.33.0)
  • symfony/polyfill-intl-grapheme (v1.32.0 => v1.33.0)
  • symfony/polyfill-intl-normalizer (v1.32.0 => v1.33.0)
  • symfony/polyfill-mbstring (v1.32.0 => v1.33.0)
  • symfony/polyfill-php80 (v1.32.0 => v1.33.0)
  • symfony/polyfill-php83 (v1.32.0 => v1.33.0)
  • symfony/process (v6.4.24 => v6.4.25)
  • symfony/string (v6.4.24 => v6.4.25)
  • symfony/var-dumper (v6.4.24 => v6.4.25)
  • symfony/var-exporter (v6.4.24 => v6.4.25)
  • symfony/yaml (v6.4.24 => v6.4.25)

[4.92.9] Run composer i in production to regenerate cached container [4.92.9] Run composer i in production to regenerate cached container [4.92.8] Check for overrides: * Maps_model::addMapPoint * Maps_admin::{add|edit|add_point|edit_point} [4.92.7] Check for overrides: * Maps_admin::{index|add|edit|points|add_point|edit_point} [4.92.5] Check for overrides: * Maps_admin::{edit|edit_point} [4.92.4] Check for overrides: * Base_c::{error410|error_401|errorRender} * Front_c::errorRender * Maps_admin::{add|edit|delete|points|add_point|edit_point|deletePoint|deleteMap} * Maps_model::{getAdminRecord|getPoint} * maps/points/update [4.92.3] Run composer i in production to regenerate cached container [4.92.2] Check for overrides: * Category_admin::{add|edit} [4.92.0] rest is disabled by commenting rest_routes include (current feature flag)