- Compatible XF 2.x versions
- 2.3
What's new in XenForo 2.3.8?
Although you may be anticipating a XenForo 2.4 HYS, we invested considerable effort in 2.3.8, resulting in new functionality significant enough to deserve its own announcement. XenForo 2.3.8 will be released today!
Retina thumbnails
To ensure attachments are displayed at a much higher fidelity, especially on high-DPI displays, we now generate two versions of every thumbnail. One which matches the configured size under Options > Attachments as usual and a second which is double that size which is displayed in place of the smaller one on compatible devices, resulting in a better quality viewing experience.Null coalescing operator (??) support
To catch up with some of the slightly more recent syntax niceties in PHP we have added null coalescing operator support to XenForo template syntax:<h1>Hello {{ $foo.property ?? $bar.value ?? 'World' }}!</h1>
REST API support for Search
There are new API endpoints for performing searches and retrieving results. You can read more about the available endpoints in our REST API page.New xf:addon-list CLI command
Ever needed a quick view of which add-ons are installed and enabled while on the CLI? Yeah, me too!
php cmd.php xf:addon-list --help
Description:
Lists installed add-ons
Usage:
xf:addon-list [options]
xf-addon:list
Options:
--active Only show active add-ons
--inactive Only show inactive add-ons
--json Output as JSON
--verbose More detailed output
php cmd.php xf-addon:list
----------- ------------------------- --------- --------
Add-on ID Title Version Active
----------- ------------------------- --------- --------
XFES XenForo Enhanced Search 2.3.8 Yes
XFMG XenForo Media Gallery 2.3.8 Yes
XFS XenForo Site 3.10.0 No
----------- ------------------------- --------- --------
Total: 3 add-ons (2 active, 1 inactive)
New xf-make commands for developers
Scaffolding your next add-on has never been easier. Use the new xf-make commands to generate common code constructs with ease with much less context switching back and forth from your developer tools and the admin control panel. xf-make:extension Create a new class extension
xf-make:finder Create a new finder class
xf-make:service Create a new service class
xf-make:route Create a route and optionally its controller
xf-make:repository Create a new repository class
xf-make:template Create a template in the master style
xf-make:job Create a new job class
xf-make:cron Create a cron class and register a cron entry
xf-make:entity Create a new entity class
xf-make:controller Create a new controller class
xf-make:listener Create a listener class and register an event listener
xf-make:phrase Create a phrase in the master language
xf-make:cli-command Create a CLI command class
xf-make:stub-publish Publish stub templates to an add-on for customization.
You can pass arguments and options in explicitly or, alternatively, all commands default to "interactive" mode with no options passed:
# php cmd.php xf-make:extension
What class do you want to extend?:
> XF\Entity\ForumWatch
Which add-on is this for? []:
[XFES ] XFES - XenForo Enhanced Search
[XFMG ] XFMG - XenForo Media Gallery
> XFMG
[OK] ClassExtension created successfully.
----------------- -----------------------------------------------------------------------
Property Value
----------------- -----------------------------------------------------------------------
Extension Class XFMG\XF\Entity\ForumWatch
Base Class XF\Entity\ForumWatch
File /path/to/src/addons/XFMG/XF/Entity/ForumWatch.php
----------------- -----------------------------------------------------------------------
[OK] Class extension registered in database.
- Fix a potential denial of service bug related to pre-registration actions flooding. Thank you @vbresults!
- Fix an issue where EXIF orientation would be set when already adjusted client-side
- Fix some issues with entity type hinting
- Allow underscore word boundaries in read-only method names
- Fix empty user authorized applications list container
- Ensure language state is always restored in between generating activity summary emails
- Fix filter JS query parameter concatenation
- Allow passkey creation on local hosts
- Fix cleanUpInvalidRecords type hint
- Always coerce parse_less_color template function to hex for non-variable values
- Fix duplicate result-set hydration queries
- Return an error early when search keyword lengths are too long
- Use strict type checks when processing search input
- Only search and display posts on the profile postings tab
- Use post content filter and thread type sub-filter for member thread search
- Avoid converting SVGs to rasterised images
- Skip void method return in XF\Cli\Command\AbstractCommand::initialize
- Ensure invalid page numbers are handled correctly when viewing the watched threads list
- Add handling for null status message values when resuming jobs
- Ensure passkeys are deleted when the associated user is deleted
- Fix missing support for some webhook actions
- Add missing defaultname to xf:avatar and xf:username tags in the report_view template
- Support HTML for the summary_of_what_you_missed_recently phrase in the activity_summary email template
- Fix DKIM signing preventing List-Unsubscribe headers from being added to emails
- Require re-authentication before allowing passkey additions or modifications
- Support rebuilding unfurls when rebuilding metadata for supported content types
- Fix not being able to setup TOTP on Firefox via QR code if privacy.resistFingerprinting is enabled
- Add missing template annotation to EmbedResolver/AbstractHandler
- Update docblock hint on \XF\Repository\UserAlertRepository::fastDeleteAlertsForContent to include array of ints
- Improve add-on manager performance when coercing add-on IDs with a significant number installed
- When checking the replication status of a read server, make sure the query is properly sent to the read connection
- Support the "listitemclass" attribute when rendering checkboxes
- Try to preserve post ordering when there's an unexpected time sync issue
- Include a cache buster on direct attachment URLs
- Fix issue preventing "Handle report" button on an assigned report not revealing the save button
- Skip deleting style variation preference cookie on logout
- Throw an error if trying to rebuild search index with an invalid type
- Cache user online counts in the same request to reduce query usage
- Ensure _cascadeSave is cleared out when Entity::_saveCleanUp is called
- Guard against Request::getIp not returning a valid IP in some cases.
- Do not resolve attachment cover images for guests with no attachment permissions
- Pass criteria object to criteria_template_data event listeners
- Skip non-existent attachments when deleting from the control panel
- Set up search entity after searches have been executed
- Add JSDoc to XF.createElement
- Fix some issues with the quote plugin
- Correct some lingering links to twitter.com
- Hide additional contact heading from control panel user edit page when there are no contact user fields
- Remove pattern attribute from number inputs
- Fix DKIM signing in XF 2.3
- Fix missing trailing slash when linking to cookies explainer from privacy policy
- Workaround issue where Sign in with Apple might not return an email (#1199)
- Validate signature counter when using a passkey (#1198)
- Throw a clearer error when the current host and board URL do not match when creating or authenticating with passkeys (#1200)
- Log users in to the public forum when authenticating with passkeys via the admin panel (#1201)
- Inhibit sending push notifications to permanently removed Chrome subscriptions
- Ensure failed passkey logins count towards failed login attempts limit (#1207)
- Process Gmail inactive inbox bounce messages as a hard bounce (#1208)
- Make it easier to override PayPalRest plan parameters (#1209)
- Set tfa_trust cookie when logging in with a passkey (#1210)
- Create Finder directory if one does not exist when generating finder classes (#1211)
- Update PHPDoc for asVisitor function to better infer return types
- Reduce notification enqueuing delay when submitting posts
- Refactor delete clean up process to ensure rename and delete happens in one process
- Skip caching local URLs when using the image proxy
- Workaround potential race condition when saving bookmark labels
- Support using passkeys in place of password confirmations
- Support passing extra spam check data in the user registration service
- Add base webhook criteria classes
- Support accessing notification data in Notifier classes
- Add additional array functions to the templater
- Strip HTML tags when using the description as a title for an import from an RSS feed (#1214)
- Move XF\BbCodeRenderer\Html::