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.113.md for this page in Markdown format</div>

Home | Changelog

Version 4

version 4.113

  • [4.113.1] feat(apifon): add optional callback_url parameter to Apifon::sendMessage() (Advisable-com/ecommercen#397)

    • Why. The last reason a client fork needed to copy src/Apifon/Apifon.php was that sendMessage() offered no way to pass a callback URL — the key members it relies on (SMS_ENDPOINT, IM_ENDPOINT, formatResponse(), RESPONSE_OK) are private, so a subclass could not add it without duplicating internals. Native support eliminates that copy.
    • The change.
      • sendMessage(string $to, string $msg, string $viberMsg, string $callbackUrl = ''): bool — the 4th param is optional with = '', so all existing 3-arg callers continue to work unchanged. When non-empty, callback_url is injected into $json['json'] before the SMS/IM branch, so it applies to both send paths.
      • The legacy SMS dispatcher ecommercen/helpers/sms_helper.php now threads $extra['callback_url'] to the apifon case in both sendSms() and sendSmsMsg(), matching the existing yuboto/yuboto_omni/routee providers (previously the apifon case passed only 3 args and ignored any configured callback URL).
    • No REST API or language-key changes.
  • [4.113.0] feat(transporter): make the carrier-tracking poll cap configurable via a DB registry key (Advisable-com/ecommercen#398)

    • Why. The carrier-tracking poll cap was hardcoded as gtcount &lt; 10 in three shared places, so a client needing more poll attempts (e.g. smile_v4 at 31) had to override the shared job and the order model — which also blocked them from adopting the modern domain job (#274).
    • The change. A single DB registry key TRANSPORTERS/MAX_POLL_COUNT (default 10), honored everywhere the cap is read, so the limit can be raised per deployment without touching shared code:
      • Seeded by a forward-only Phinx migration (idempotent INSERT ... WHERE NOT EXISTS).
      • Read in the modern Advisable\Domains\Transporter\Jobs\GetOrdersTransferStatus and the legacy AdvGetOrdersTransferStatus jobs — the cast int is interpolated into the SELECT, with a &lt; 1 → 10 fallback guard at each site.
      • Drives both gtstatus sub-filters in Adv_order_model::ordersListAdminWhere() — the in-transit (gtcount &lt; N) and poll-exhausted (gtcount = N) filters now track the same configured value, so the "exhausted" equality filter keeps matching the value the poller actually stops at when the cap is raised.
    • Tests. AdvOrderModelGtStatusPollCapTest covers the in-transit and exhausted sub-filters plus the fallback-to-10 default.
    • No REST API or language-key changes.
  • [4.113.0] fix(job): add the missing MigrateStorageToS3 short-name job wrapper (Advisable-com/ecommercen#391)

    • Why. The AdvMigrateStorageToS3 one-time storage→S3 migration job (added in 4.102.0) shipped without a short-name wrapper in application/modules/job/libraries/, unlike every other job. AdvJob dispatches with di()->has($name) ? get() : new $name(), so the documented invocations php cli.php job/MigrateStorageToS3 … and the DB-queued 'job' => 'MigrateStorageToS3' both fell through to new MigrateStorageToS3() → class-not-found (uncaught \Error on the CLI path since AdvJob::index only catches \Exception; caught + exit(1) on the queue path). Only job/AdvMigrateStorageToS3 worked.
    • The change. Added class MigrateStorageToS3 extends AdvMigrateStorageToS3 {}, matching every sibling job (e.g. SolrIndex); the short name now resolves through the composer classmap. Deliberately not registered in jobs.php commandOptions — it is a one-time ops migration with a destructive deleteSource option and should stay manual (CLI), not be offered as a schedulable job.
    • No REST API or language-key changes.

Notes

  • [4.113.0] REQUIRES php migrator.php migrate:
    • 20260629122231_add_transporters_max_poll_count_registry_key.php — seeds the TRANSPORTERS/MAX_POLL_COUNT registry key (default 10). Idempotent + forward-only. Raise the value per deployment to increase carrier-tracking poll attempts.