[1.59.0]
Update matomo to 5.12.0
Full Changelog
The methods setIgnoreCampaignAttributionForSources and getIgnoreCampaignAttributionForSources have been added to the JavaScript tracker. They allow setting/getting sources whose campaign values in the current URL should be ignored for attribution. Matching campaign parameters are still kept in the tracked URL/request.
Record::setAggregatedRecordTransform() lets a blob record register a callback that is applied to its aggregated table during non-day archiving, after the day blobs are aggregated together and before the table is truncated and stored. Use it together with Record::setBlobColumnAggregationOps() (marking a column 'skip') to recompute columns that cannot be summed across child periods for example a table-relative ratio, index or score so they can also be used as the sort column for truncation. It applies on both the standard blob path and the built-from-flat path (Record::setBuiltFromFlatRecord()), where the flat base record and the hierarchy rebuilt from it are each transformed on their own table. A matching optional $postAggregationTransform parameter was added to ArchiveProcessor::aggregateDataTableRecords().
The reporting menu can now be split into several top-level sections (in addition to the default "Analytics" menu). A category declares which section(s) it belongs to via Category::setGroups() (and the protected $groups property); API.getReportPagesMetadata now exposes a groups field per category. Each non-default group automatically gets a top-menu entry that opens the regular reporting single-page-app filtered to that group (the active section is carried in the URL hash), so reports stay within the same SPA and quick search. The first such section, "AI Insights", surfaces the existing AI Assistants reports.
datatable_archiving_maximum_rows_actions_flat caps the number of rows used when flat-archiving page/title Actions reports before the hierarchy is rebuilt (set to 0 to keep the legacy hierarchical-only Actions archiving). See Record::setAggregatedRecordTransform() above.
datatable_archiving_maximum_rows_ai_chatbot_content caps the number of content URLs (pages/documents) listed in the AI Chatbots Content Requests reports.
datatable_archiving_maximum_rows_ai_chatbot_favoured_pages caps the number of page URLs listed in the Human-Favoured / AI-Favoured Pages reports.
live_ai_chatbots_maximum_rows caps the number of AI chatbots listed in the real-time AI Chatbots reports.
live_ai_chatbots_top_page_urls_maximum_rows caps the number of page URLs listed in the real-time AI Chatbots top page URL reports.