Skip to content

12 October 2026

Four entries today:

  • A null date is no date, not today
  • Datasource answers a 1.9-era caller of a 1.10 request
  • Clearing a cache category works with an underscored prefix
  • Developer pages served from an area link within it

A null date is no date, not today

Fixed

  • new \Pramnos\Html\Date($name, null) stores 0. getDate() falls back to date('d/m/Y', $this->date) when the request carries nothing, and on PHP 8 date() reads null as now — so the widget answered today's midnight where 0 answers 2, "no date". An admin list passing a never-set $this->datefrom and testing getDate() < 10000 silently showed one day of rows; one showed none of 2,852 users, with nothing logged.

Datasource answers a 1.9-era caller of a 1.10 request

Fixed

  • Datasource::getList() / render() with $encode = false, for a request carrying draw, returns the 1.9 shape — sEcho/iTotalRecords/iTotalDisplayRecords/aaData — instead of draw/recordsTotal/recordsFiltered/data. A caller that asks for the array post-processes it, and one written for 1.9 found no aaData, skipped its processing — checkbox columns, links, escaping — and sent the raw rows. DataTables 1.10 reads the 1.9 names natively; sEcho carries the draw counter, since the client reads it before draw and drops a response older than its last. $encode = true is unchanged.

Documentation

  • HTML Components Guide: Date and time says what 0/null means; Post-processing the rows is new. Upgrade Guide: two rows.

Clearing a cache category works with an underscored prefix

Fixed

  • Cache::clear($category) removed nothing on an installation whose prefix contains an underscore (nk_), on every adapter. Key names are built with the prefix stripped of underscores, and the stripping happened only while naming a key; clear() names none, so a fresh instance asked the adapter for nk_ while save() had written under nk. It returned as though it had worked, and a model that writes and then clears its category went on serving the old answer until the entry expired. syncAdapter(), which every operation goes through, now hands the adapter the stripped prefix.

Fixed

  • The DevPanel, Adminer and the debug-toolbar grant built every absolute link from sURL, so served from an administration area or a secondary application they left it. At /admin/adminer the stylesheet and scripts were requested from /adminer?file=…, redirected to the home page, and the page rendered without CSS and with ? in every statistics column; /admin/devpanel pointed its tabs at /devpanel/… and the toolbar switch at /debugbar. They now use the new AdminArea::servingUrl(). "Back" still returns anywhere on the site, and treats the panel and Adminer as the panel at either base.

Added

  • AdminArea::servingUrl(): the base URL of the application serving the request — the area's inside it, sURL outside it, URL when no area is configured.

Documentation

  • Routing Guide: servingUrl(). DevPanel Guide: where its links point when served from an area.