Releases: textpattern/textpattern
Releases · textpattern/textpattern
v4.9.0
- Feature release with support for PHP 8.5, MySQL 8.4, new functionality, security enhancements, improvements, and bug fixes.
- Changed: Minimum system requirements increased to PHP 5.6 (PHP 8.2+ recommended, preferably with ongoing vendor support).
- Changed: Minimum system requirements increased to MySQL 5.5 (MySQL 8.0+ recommended, preferably with ongoing vendor support).
- Fixed: Remove 'br' tags from article image markup where >1 image is supplied (thanks, @jools-r).
- Fixed: Pre+post textfilter callbacks were switched.
- Fixed: Plugins import Textpack strings correctly.
- Fixed: Prefs (multi-)select options.
- Fixed: Improved support for images with EXIF orientation metadata (thanks, @jools-r).
- Fixed: Avoid directory traversal when uploading plugins (thanks, @BG1).
- Fixed: Compiled plugins upload on PHP 5.6.
- Fixed: Windows-generated .zip plugins installable on UNIX/Linux.
- Fixed: Restored empty 'height' and 'width' attributes behaviour of
<txp:image />. - Fixed: Self-closing tag output for html5 doctype to silence validator (thanks, @jools-r).
- Fixed: Ignore search in individual article mode.
- Fixed: Take RFC 2616 mail headers setting into account for separator.
- Fixed: Sandboxed article/body/excerpt preview (thanks, @grozdniyandy).
- Added: Support for PHP 8.2, PHP 8.3.1+, PHP 8.4, and PHP 8.5.
- Added: Full article previews directly from the Write panel.
- Added: Filter articles by image.
- Added: Admin Theme prefs.
- Added: Automatic, dynamic thumbnail generation (tags and back-end).
- Added: SVG image support (thanks, osadl and @jools-r).
- Added: Activity indicator for extended duration file/image upload processes.
- Added: Multi-edit for changing author language.
- Added: In-use asset counters to the Users panel.
- Added: Reload language packs from disk.
- Added: Shift+Space shortcut for 'Tab' indent in textareas.
- Added: Input length tooltip when appropriate.
- Added: PHPMailer for third-party SMTP delivery. See Admin>Preferences>Mail.
- Added:
<txp:date />tag. - Added:
<txp:if_article_status />tag. - Added:
<txp:if_items_count />tag. - Added: Global 'variable' attribute.
- Added: Global 'offset' attribute can be set by URL parameters.
- Added: 'parent' attribute to
<txp:category />. - Added: 'inline' value to 'format' attribute of
<txp:css />(thanks, @jools-r). - Added: 'alias' attribute to
<txp:evaluate />. - Added: Ability to serve files via 'type' attribute to
<txp:file_download />. - Added: 'exclude' attribute to
<txp:file_download_list />and<txp:linklist />. - Added: Site production status values to 'process' attribute of
<txp:hide />. - Added: 'level' attribute to
<txp:if_category />. - Added: 'match', 'separator' attribute capability to
<txp:if_yield />. - Added: 'exclude', 'month' and 'time' attributes to
<txp:images />. - Added: 'lang' attribute to
<txp:page_url />. - Added: 'target' attribute to
<txp:popup />. - Added: 'filter' attribute to
<txp:section_list />and<txp:if_section />. - Added: Plugins can be uploaded from a URL by dragging to upload textarea.
- Added: Plugin compilation directly from the Plugins panel.
- Added: Plugin export to .zip.
- Added: Compiled plugins can be uploaded via Browse... feature.
- Added: Compatible plugin upgrades directly from the Plugins panel.
- Added: Create and install new plugins directly from the Plugins panel.
- Added: Plugin multi-edit option: revert to last installed code content.
- Added: All plugin metadata exposed in the Plugin Edit panel.
- Added: Latest text translations. Thank you to all our translators.
- Added: Punjabi, Slovenian and Urdu (Pakistani dialect) language support.
- Added: Trailing slash URL preference.
- Added: File download header preference.
- Added: Option to define a Content Security Policy header for the Textpattern admin-side via
config.php. - Added: Support for aggregate window functions in compatible MySQL versions.
- Added: metaWeblog.newMediaObject for image upload over the MovableType API (thanks, @Melonking906).
- Changed: Pending articles may be displayed on the site.
- Changed: Theme page maximum size increased from 64KB to 16MB.
- Changed: Allow content dates prior to 01-01-1970, and beyond 03:14:07 UTC on 19 Jan 2038. Refer to Epochalypse/Year 2038 problem for info. Adjustments for non-Gregorian (AD) dates are performed.
- Changed: Display/edit 'modified' date on Files panel.
- Changed: Refactored article Save panel (thanks @jools-r, @phiw13, and @cara-tm).
- Changed: File Edit panel has the ability to rename and delete files, and change the download counter value (thanks, adi).
- Changed: Image Edit panel has the ability to delete images.
- Changed: Image Edit panel includes published date/time, which can be altered.
- Changed: Pre-flight check visibility toggle.
- Changed: In-use languages can not be deleted.
- Changed: Deprecate
<txp:search_result_count />. Use `<txp:items_count /> instead. - Changed: Section-aware default search.
- Changed: Image tags can take HTML attributes.
- Changed: Enhancements to 'br' tag HTML5 compliance (thanks, @jools-r).
- Changed: Enhancements to SVG handling relating to non-px dimensions (thanks, @jools-r).
- Changed: Enhancements to 'extension' and 'size' attributes of
<txp:images />. - Changed: Enhancements to RPC functionality (thanks, @Melonking906).
- Changed: Admin-theme checksums computed independently. Unused admin themes can be deleted and will no longer trigger Diagnostics alert.
- Changed: Multi-site scaffold optimisations.
- Changed: Wildcards in file/image/link category queries.
- Changed:
<txp:header />tag requires 'form' privilege. - Changed: Articles may use external URLs directly.
- Changed: Some language keys renamed to avoid invalid name clashes.
- Changed: Do not generate empty syndication feeds for feedless sections.
- Changed: Removed 'noopener' from target="_blank" links (now default behaviour in all supported browsers) (thanks, @phiw13).
- Changed: Removed 'aria-label' attributes where 'title' already exists.
- Changed: Checksums use Tiger-192,3 instead of MD5. Fewer potential clashes.
- Changed: Allow PHP scripting options off by default, and Diagnostics warning.
- Changed: Plugins of all types trigger verify step (with improved security).
- Changed: Extend character set that can be used in tag/attribute names.
- Changed: Less collision-prone custom fields name processing.
- Changed: Category & section description field sizes increased to 1023 characters.
- Changed: Introduce primary keys for all database tables, replacing some old indexes.
- Developer: Permitted concurrent logins. See Advanced Prefs.
- Developer: Removed duplicate pluggable_ui callback for article_ui›categories (thanks, @jools-r).
- Developer: Added pophelp support in plugin 'lang' directory.
- Developer: Articles (list) panel callbacks:
articles>fields and articles>from to manipulate the query
articles>controls to affect the button area
articles_ui>list.row (pluggable_ui) for adding table data
articles>steps for plugins to register custom panel-level functionality. - Developer: Add pre+post article_submit callbacks on article post/save.
- Developer: Add getAtts($tag) method for fetching tag attributes.
- Developer: Reintroduce extend_col_1 markup area on Write panel.
- Developer: Add lifecycle>loaded callback for plugins run from cache.
- Developer: Introduce UI class library for building interface components.
- Developer: Tag registration is now mandatory.
- Developer: Some of the lesser-used tags are loaded on demand from their class
to save memory. Plugins must call them via processTags() function. - Developer: Add safe_exists() function to database layer.
- Developer: Move $thisversion and $txp_is_dev to constants.php.
- Developer: 'Visitor logs' panel is now bound to the new 'lore' event name
(was: 'log') to prevent conflicts with privacy filters. - Developer: File upload callbacks (file_uploaded and files_uploaded pre+post).
- Developer: Activation emails can be skipped via hidden notify="skip" field.
- Developer: Can add &checksums=1 on Diagnostics panel URL to verify checksums.
- Vendors: Textile 4.1.4. (thanks, @gocom).
- Vendors: DOMPurify 3.3.1.
- Vendors: jQuery 3.7.1.
- Vendors: jQuery UI 1.14.1.
- Vendors: PHPMailer 6.12.0.
- Vendors: PrismJS 1.30.0.
- Vendors: UglifyJS 3.19.3.
v4.9.0-beta.2
- Added: Full article previews directly from the Write panel.
- Added: Site status values to 'process' attribute of
<txp:hide />. - Added: 'inline' value to 'format' attribute of
<txp:css />(thanks, jools-r). - Added: 'target' attribute to
<txp:popup />. - Added: 'match', 'separator' attribute capability to
<txp:if_yield />. - Added: Ability to serve files via 'type' attribute to
<txp:file_download />. - Added: Plugin compilation directly from the Plugins panel.
- Changed: Refactored article Save panel (thanks jools-r, phiw13, and cara-tm).
- Changed: Wildcards in file/image/link category queries.
- Changed: Enhancements to RPC functionality (thanks, Melonking906).
- Changed: Multi-site scaffold optimisations.
- Changed: Pre-flight check visibility toggle.
- Changed: Articles may use external URLs directly.
- Changed: A few language keys renamed to avoid invalid name clashes.
- Developer: Add pre+post article_submit callbacks on article post/save.
- Developer: Add getAtts($tag) method for fetching tag attributes.
- Developer: Reintroduce extend_col_1 markup area on Write panel.
- Developer: Add lifecycle>loaded callback for plugins run from cache.
- Fixed: Pre+post textfilter callbacks were switched.
- Fixed: Plugins import Textpack strings properly.
- Fixed: Prefs (multi-)select options (UI Library).
- Vendors: DOMPurify 3.2.4.
- Vendors: jQuery UI 1.14.1.
- Vendors: PHPMailer 6.9.3.
- Vendors: PrismJS 1.30.0.
- Vendors: Textile 4.1.2. (thanks, gocom).
- Vendors: UglifyJS 3.19.3.
v4.9.0-beta.1
First beta release of Textpattern 4.9.0 (beta.1)
- Feature release with support for PHP 8.4.0+, new functionality, security enhancements, general improvements and bug fixes.
- Changed: Minimum system requirements increased to PHP 5.6 (PHP 8.2+ recommended).
- Changed: Minimum system requirements increased to MySQL 5.5 (MySQL 8.0+ recommended).
- Changed: Removed 'noopener' from target="_blank" links (now default behaviour in all supported browsers) (thanks, phiw13).
- Changed: Removed 'aria-label' attributes where 'title' already exists.
- Changed: Deprecate
<txp:search_result_count />. Use<txp:items_count />instead. - Fixed: Improved support for images with EXIF orientation metadata (thanks, jools-r).
- Fixed: Avoid directory traversal when uploading plugins (thanks, bg1).
- Fixed: Compiled plugins upload on PHP 5.
- Fixed: Windows-generated zip plugins installable on Linux.
- Fixed: Restored empty 'height' and 'width' attributes behaviour of
<txp:image />. - Fixed: Self-closing tag output for html5 doctype to silence validator (thanks, jools-r).
- Fixed: Ignore search in individual article mode.
- Fixed: Take rfc2616 mail headers setting into account for separator.
- Fixed: Sandboxed article/body/excerpt preview (thanks, grozdniyandy).
- Added: Support for PHP 8.2, PHP 8.3.1+ and PHP 8.4.0+.
- Added: SVG image support (thanks, osadl and jools-r).
- Added: Option to define a Content Security Policy header for the Textpattern admin-side via config.php.
- Added: PHPMailer for third-party SMTP delivery. See Admin>Preferences>Mail.
- Added: Multi-edit for changing author language.
- Added: Plugins can be uploaded from a URL by dragging to upload textarea.
- Added: Compiled plugins can be uploaded via Browse... feature.
- Added: Compatible plugin upgrades directly from the Plugins panel.
- Added: Create and install new plugins directly from the Plugins panel.
- Added: Plugin multi-edit option: revert to last installed code content.
- Added: All plugin metadata exposed in the Plugin Edit panel.
- Added: Plugin (zip-only) export feature.
- Added: Support for aggregate window functions in compatible MySQL versions.
- Added: Trailing slash URL preference.
- Added: File download header preference.
- Added: In-use asset counters to the Users panel.
- Added: 'filter' attribute to
<txp:section_list />and<txp:if_section />. - Added: 'level' attribute to
<txp:if_category />. - Added: Activity indicator for long upload processes.
- Added: metaWeblog.newMediaObject for image upload over the MovableType API (thanks, Melonking906).
- Added: Global 'offset' can be set by URL parameters.
- Added: 'lang' attribute to
<txp:page_url />. - Added:
<txp:if_items_count />tag. - Added: Reload language packs from disk.
- Added: Shift+Space shortcut for 'Tab' indent in textareas.
- Added: Input length tooltip when appropriate.
- Added:
<txp:date />tag. - Added: Global 'variable' attribute.
- Added: 'alias' attribute to
<txp:evaluate />. - Added: 'parent' attribute to
<txp:category />. - Changed: Plugins of all types trigger verify step (with improved security).
- Changed: File Edit panel has the ability to rename and delete files, and change the download counter value (thanks, adi).
- Changed: Image Edit panel has the ability to delete images.
- Changed: In-use languages can not be deleted.
- Changed: Image tags can take HTML attributes.
- Changed: Less collision-prone custom fields name processing.
- Changed: Do not generate empty syndication feeds for feedless sections.
- Changed: Allow PHP scripting options off by default, and Diagnostics warning.
- Changed: Introduce primary keys for all database tables, replacing some old indexes.
- Changed: Category & section description field sizes increased to 1023.
- Changed:
<txp:header />tag requires 'form' privilege. - Changed: Section-aware default search.
- Changed: Extend character set that can be used in tag/attribute names.
- Developer: Introduce UI class library for building interface components.
- Developer: Tag registration is now mandatory.
- Developer: Some of the lesser-used tags are loaded on demand from their class to save memory. Plugins must call them via processTags() function.
- Developer: Add safe_exists() function to database layer.
- Developer: Move $thisversion and $txp_is_dev to constants.php.
- Developer: 'Visitor logs' panel is now bound to the new 'lore' event name (was: 'log') to prevent conflicts with privacy filters.
- Developer: File upload callbacks (file_uploaded and files_uploaded pre+post).
- Developer: Activation emails can be skipped via hidden notify="skip" field.
- Vendors: DOMPurify 3.0.6.
- Vendors: jQuery 3.7.1.
- Vendors: jQuery UI 1.13.3.
- Vendors: PHPMailer 6.9.1.
- Vendors: PrismJS 1.29.0.
- Vendors: Textile 4.1.1. (thanks, gocom).
- Vendors: UglifyJS 3.19.0.
v4.8.8
- Maintenance release with support for PHP 8.1, security enhancements, general improvements and bug fixes.
- Security: Fix reported cross-site scripting issue relating to article preview CSRF token (many thanks, Paul Ritchie at Pentest Limited).
- Fixed: More robust numeric searches.
- Fixed: Improved query efficiency of category operations.
- Fixed: Required parameters after optional in tag builder (thanks, @phiw13).
- Fixed: Admin-side pagination when sorting by non-unique values.
- Added: PHP 8.1 support.
- Added: Natural search mode.
- Added: Random form selection.
- Added: Support for AVIF image format, on PHP 8.1 or higher.
- Added: Global
limit,offsetandsortattributes. - Added:
url_titleattribute to<txp:article[_custom] />. - Added:
rangeattribute to<txp:article_image />. - Added:
dateandtimeattributes to<txp:if_expired />. - Added:
calendarattribute to<txp:posted />and similar tags. - Added: Substring extraction via
escapeattribute. - Added:
<txp:items_count />tag. - Added: Expanded conditional
matchattribute with comparison operators. - Added:
UTCis now a permitted time zone. - Added: Custom date formats.
- Changed:
<txp:category_list />withchildren>1 attribute behaviour. - Changed: Global
escapeattribute operates at the items level in lists. - Changed: Multi-site plugins directory defaults to
site/admin/plugins. - Accessibility: Additional
aria-labelattributes for some internal links. - Internal: Removed
FOUND_ROWS()which is deprecated in MySQL 8.0.17. - Internal: Prefer
is_readable()andis_file()tofile_exists(). - Developer: Added plugin lifecycle events
upgradedanddowngraded. - Developer: Export new article IDs on duplicate.
- PrismJS 1.26.0.
v4.8.8-beta.1
First beta release of Textpattern 4.8.8 (aka Textpattern 4.8.8-beta.1).
- Maintenance release with support for PHP 8.1, security enhancements, general
improvements and bug fixes. - Security: to be advised (many thanks, Paul Ritchie at Pentest Limited).
- Fixed: More robust numeric searches.
- Fixed: Improved query efficiency of category operations.
- Fixed: Required parameters after optional in tag builder (thanks, phiw13).
- Fixed: Admin-side pagination when sorting by non-unique values.
- Added: Natural search mode.
- Added: Random form selection.
- Added: Support for AVIF image format, on PHP 8.1 or higher.
- Added: Global
limit,offsetandsortattributes. - Added:
url_titleattribute to<txp:article[_custom] />. - Added:
rangeattribute to<txp:article_image />. - Added:
dateandtimeattributes to<txp:if_expired />. - Added:
calendarattribute to<txp:posted />and similar tags. - Added: Substring extraction via
escapeattribute. - Added:
<txp:items_count />tag. - Added: Expanded conditional 'match' attribute with comparison operators.
- Added:
UTCis now a permitted time zone. - Added: Custom date formats.
- Changed:
<txp:category_list />withchildren>1 attribute behaviour. - Changed: Global
escapeattribute operates at the items level in lists. - Accessibility: Additional
aria-labelattributes for some internal links. - Internal: Removed
FOUND_ROWS()which is deprecated in MySQL 8.0.17. - Internal: Prefer
is_readable()andis_file()tofile_exists(). - Developer: Added plugin lifecycle events
upgradedanddowngraded. - Developer: Export new article IDs on duplicate.
- PrismJS 1.24.1.
Final cut of Textpattern 4.8.8 expected 2022 Q1.
v4.8.7
High priority maintenance release to address functionality and setup issues discovered after 4.8.6 release.
- Fixed: Users panel throws error due to missing DB prefix (thanks, prbt2016).
- Removed: Database user
GRANTcheck during initial setup, which broke some installations. - Changed: Context check priority in tags.
v4.8.6
DO NOT USE IN PRODUCTION - issues discovered after release, use 4.8.7 instead.
Textpattern CMS maintenance release including improvements for PHP 8.0, bug fixes and minor tweaks.
Headlines
- Fixed regression in override form usage in lists (thanks, Christian Rapp).
- Fixed undefined $article warning when accessing non-existent articles.
- Fixed error with <txp:output_form /> tag on empty forms (thanks, Adi).
- Fixed low-privilege users can save immediately after duplicating articles.
- Latest text translations. Thank you to all our translators.
- Option to create database during setup.
- Permission (grants) verification during setup.
Tag modifications
- Articles can be filtered by keywords more easily.
- Added:
idattribute to<txp:if_different />tag. - Added:
dboption to the globalescapeattribute. <txp:variable trim>trims its own output (thanks, cara-tm).<txp:link_to_next/prev>can return URL or container.<txp:page_url>and<txp:if_request>tags are more flexible.- Boost power of txp:article(_custom) grouping by date.
- Deprecate
<txp:search_result_date />. Use<txp:posted />instead. - Remove deprecated break attribute from search_result_excerpt tag.
Back-end tweaks
- 'Assign sections' from Themes panel only selects its own sections.
- No Edit options in Write panel without appropriate privileges.
- No disabled update buttons on Languages panel (thanks, phiw13).
- Search improved when handling numbers. Comparators can also be used for numeric searches.
Developer goodies
- Permit
step=falseto hook into explicit empty step callbacks andstep=nullto indicate 'any step'. - Permit
$preto be any text. Opens up arbitrary callback grouping. - New
articles>multi_edit.$methodcallback on Articles list panel. - User panel callbacks:
user>fieldsanduser>fromto manipulate the query
user>controlsto affect the button area
user_ui>list.row(pluggable_ui) for adding table data
user>stepsfor plugins to register custom panel-level functionality - Diagnostics panel callbacks
diag>stepsanddiag_ui>levelfor custom plugin steps and functionality.
v4.8.5
Textpattern CMS maintenance release including improvements for PHP 8.0 and bug fixes.
PHP compatibility
- Fixed: Database connection issue for new installations on PHP 8.0.
- Fixed: libxml_disable_entity_loader() deprecation warning on PHP 8.0.
- Fixed: Undefined array key/offset warnings on PHP 8.0.
- Fixed: System temp directory notice on PHP 8.0.
User interface & user experience
- Fixed: Custom field ordering on Write panel.
- Fixed: Diagnostics panel strings no longer have 'Help' appended, and the textarea is rendered fully in English to aid support requests.
- Fixed: RSS/Atom feeds display correct titles (thanks, jrmartin).
Tags and attributes
- Added: <txp:image_info type="mime" />.
- Added: More aggregators in <txp:article /> fields attribute.
- Added: Global break, replace and trim attributes.
- Added: breakby and breakform attributes for all content types.
- Added: Import attributes in <txp:php /> as PHP variables.
- Added: root attribute of <txp:page_url /> to create relative URLs.
- Changed: <txp:header /> attributes are unset by default. Ensure any name attributes are set before updating to avoid issues with custom headers.
- Changed: <txp:article_custom /> can paginate content using pageby attribute.
- Changed: <txp:images /> outputs full-size images if thumbs don't exist and <txp:images thumbnail="0" /> displays full-size images as expected.
- Changed: txp:images accepts <txp:else />.
- Changed: txp:variable default attribute can be used during assignment (thanks, cara-tm).
Images
- Added: Support for WebP image format, on PHP 7.1 or higher.
Language support, translations and internationalisation
- Added: Latest text translations. Thank you to all our translators.
- Added: Support for Fulah language translation.
- Added: Locale for en, and improved locale fallbacks.
- Changed: Better i18n handling for 'ago'.
Other stuff
- Fixed: Draft/hidden/pending articles output 404 Not Found status as they should.
- Added: SSL version verification on Diagnostics panel during update checks.
- Changed: Expose secondpass Advanced pref for testing.
- Changed: Plugin load warning includes version number.
- Changed: Comments off by default on new installations.
- Changed: If allowed, <txp:php /> is processed in forms even in article body.
- Changed: Copy Editors are allowed to use <txp:php /> (they were able to do it in forms anyway).
Developer
- Fixed: Form processing on 'pretext_end' callback.
- Developer: New pre-pretext_end callback.
- Developer: New txp.image>types callback.
v4.8.4
Textpattern CMS maintenance release 4.8.4.
Compatibility
- Support for PHP 8.0
User interface (UI) and user experience (UX)
- Fixed: Write panel JS error when override forms were switched off (thanks, GugUser).
- Fixed: Default publishing section is not updated on section delete/rename.
- Added: Additional public-side language strings, primarily for themes.
- Changed: Override forms can be of any type, not just article. See prefs.
- Changed: Admin-side theme name references are appended with the theme version number.
- Changed: Improved keyboard focus within responsive tables (to allow scrolling via arrow keys).
Tags
- Added: Tags syntax extension to allow for custom processing order.
- Added: ‘fields’ attribute to .
Internationalisation (i18n)
- Added: Latest translations. Thank you to all translators for your hard work.
Libraries and other internals
- PrismJS 1.22.0.
v4.8.3
Textpattern CMS maintenance release 4.8.3. Changes:
Plugins
- Fixed: A bug in 4.8.2 that can break some legacy plugins (thanks, Yiannis).
User interface (UI) and user experience (UX)
- Fixed: Improved upgrade path for Textpattern prior to version 4.5.0.
- Fixed: Correctly label ‘Allow commenter images in comments’ pref.
- Fixed: Reload private prefs on preferences save (thanks, phiw13).
- Fixed: More notifications on list panels if there were no assets recorded.
- Added: Instantly refresh admin theme on change.
Themes
- Changed: Theme styles are now optional.
Tags
- Added: ‘loading’ attribute for <txp:article_image />, <txp:image /> and <txp:thumbnail /> tags.
Internationalisation (i18n)
- Added: Latest translations. Thank you to all translators for your hard work.
Libraries and other internals
- PrismJS 1.21.0.