Skip to content

Releases: Universal-Omega/DynamicPageList4

4.0.5

05 Feb 23:57
bb6f788

Choose a tag to compare

What's Changed

  • Fixes collation issue when using LOWER with REGEXP by @jayktaylor.
  • Preserve case for userdateformat parameter by @SomeMWDev.
  • $wgDplSettings is deprecated, use new $wgDPL* settings by @Universal-Omega.
    • Setting $wgDplSettings in LocalSettings.php will still work for temporary backward compatibility, and will just set it's equivalent version of the new configuration option.
    • Usage of $wgDplSettings now emits deprecation warnings if used.

New Contributors

Full Changelog: 4.0.4...4.0.5

4.0.4

23 Jan 17:24
e196f04

Choose a tag to compare

What's Changed

  • If the alwaysCacheResults config is enabled, then ignore a decreased cacheperiod. cacheperiod will still work for increasing the cache but it can not be decreased. This is to prevent bypassing the config by setting a very low cacheperiod.
  • Fixes namespace and notnamespace to only skip invalid namespaces and not prevent any from being used if any invalid namespace is found at all.

Full Changelog: 4.0.3...4.0.4

4.0.3

16 Jan 21:21
8497856

Choose a tag to compare

What's Changed

  • Fixes performance issue caused by version 4.0.1.
  • Replaced class namespace deprecated in MediaWiki 1.44.
  • Fixed PHP fatal error when moving some pages under certain conditions.

Full Changelog: 4.0.2...4.0.3

4.0.2

13 Jan 23:58
ee86dbf

Choose a tag to compare

NOTE: it is not recommended to upgrade to this version yet, due to some performance impact caused by version 4.0.1.

What's Changed

  • Removes the use of dpl_clview. Running update.php will automatically drop the view.
  • Fixes issues with the use of _none_ to get uncategorized pages.

Full Changelog: 4.0.1...4.0.2

4.0.1

13 Jan 22:51
b552c82

Choose a tag to compare

NOTE: it is not recommended to upgrade to this version, due to some performance impact caused by this release.

What's Changed

  • Drops support for MediaWiki 1.43.
  • Fix a bug with the usage of distinct in queries.
  • Support categorylinks migration for MediaWiki 1.45.

Full Changelog: 4.0.0...4.0.1

4.0.0

04 Jan 23:10
c50712c

Choose a tag to compare

After months of development, this is finally the stable release of DynamicPageList4.

Version 4.0.0

The extension was nearly completely rewritten, as such it has been rebranded as DynamicPageList4 as well. There could also be other changes not mentioned here as well, but major changes should be mentioned here.

  • Converted all queries to use MediaWiki's QueryBuilder
    • Has better performance and security
    • More maintainable
    • Fixes many bugs with queries
  • openreferences is fixed so it actually gives the openreferences conflict error rather than a query error for openreferences = missing.
  • ordermethod = pagesel gives a new error message rather than a query error when not using any of the supported options with it.
  • Fixed some instances of column reference "page_title" is ambiguous.
  • Added support for linksfrom, linksto, usedby, and uses to be used together at the same time. Previously mixing them would either give errors or return no results.
  • Added more support for PostgresSQL and SQLite for many more parameters (such as ignorecase) that previously only worked on MySQL and MariaDB.
  • Fixed a bug where order method was set to the wrong type when using intersection-like tags which caused fatals.
  • Fixed compatability with FlaggedRevs — qualitypages and stablepages now function again. They have not worked for a very long time. This was fixed by replacing the check for efLoadFlaggedRevs functions with checking by using ExtensionRegistry.
  • Fixed ordercollation (very long time bug). Additionally, the ordercollation parameter now accepts just charsets rather than full collation as well (only when using MySQL or MariaDB though). ordercollation is now also compatible with SQLite for a small subset of default collations available in SQLite (BINARY, NOCASE, and RTRIM). Most collations should work properly for MySQL/MariaDB and PostgreSQL as well now.
  • Added support for using regular expressions (REGEXP) on PostgreSQL.
  • openreferences now correctly produces the expected conflict error instead of a query error when misused.
  • Fixed handling of catheadings and catnotheadings (via + and - in category=). Previously, category=+ would error and category=- could yield unpredictable results.
  • Updated symbols within %ARGS% to avoid parser conflicts. This resolves several bugs with template expansion.
  • Configuration fetching is now more reliable and uses MediaWiki's built-in mechanisms.
  • Fix for counts when using includesubpages = false: subpage exclusion has been moved from the Parse class (which runs after the query) to be handled directly within the query itself.
  • Fixes for bizarre corner cases where PHP's DateTime parser interpreted invalid zero-based timestamps in... interesting ways.
  • Support for PostgreSQL in all the timestamp queries.
  • %EDITSUMMARY% now correctly retrieves revision comments again.
    • This feature had been broken since MediaWiki 1.35 due to changes in how rev_comment_id and comment_text are stored. The fix restores full functionality of this.
  • Spaces in namespace names are now automatically replaced with underscores to ensure compatibility and avoid malformed queries.
  • Fixed addexternallink, linkstoexternal, and %EXTERNALLINK%.
    • NOTE: This restores linkstoexternal behavior to how it used to be and removes linkstoexternaldomain and linkstoexternalpath.
  • Improved table alias usage.
  • Refactored parameter handling to replace __call() magic with processParameter().
  • Fixed the message used in articleCountMessage.
  • Fixed issue with colspan.
  • Added compatability with the Video extension.
  • [Performance] Removed tables from FOUND_ROWS.
  • [Performance] Optimized query for ordermethod=lastedit.
  • [Performance] Only parse image URLs for %IMAGE% if needed.
  • Use strict_types
  • Don't let titleText become null if match fails. This fixes exceptions if regex is invalid in replaceintitle.
  • Escape category links in gallery. Fixes creating a gallery with category pages adding every category in the gallery to the page.
  • Fixed multiple bugs in reset and eliminate parameters.
  • Fixed catching DBQueryError, and improved query exception handling, adding a new exception type, QueryException to more reliably and explicitly catch proper query errors.
  • Fixed nottitlematch bug where only the first pattern is excluded.
  • Added validation for regex in replaceintitle to avoid potential PHP warnings for invalid regex.
  • Added more PHPUnit and Parser tests.

New Features

  • Added new configuration option to support overriding the parameter defaults, $wgDplSettings['overrideParameterDefaults'].

  • Added support for string replacements in replaceintitle. This previously only supported regex replacements, now it will fallback to string replacements if there is no valid regex.

  • Added support for display titles:

    • New format option: %DISPLAYTITLE% (falls back to %TITLE% if no display title is set; available only when using the title parameter).
    • New order method: ordermethod=displaytitle (automatically falls back to sorting by title when no display title exists).
  • namespace and notnamespace now accepts more options (only if they do not conflict with other existing namespace names):

    • Case-insensitive main is now accepted for the main namespace.
    • Namespace IDs (rather than just namespace names) work for all namespaces.
  • Support for a wide range of relative timestamps (e.g., "last week", "in 2 hours", "1 month ago").
    Previously only a few relative timestamps where supported, now anything supported by PHPs strtotime is supported.

  • Gallery Mode Enhancements:

    • Properly supports retrieving PageImages when using mode=gallery on non-file namespace pages, if the PageImages extension is installed.
    • Now pulls directly from the PageImages extension instead of relying on page_props, allowing access to both page_image and page_image_free.
    • Added support for mode=gallery when using Intersection compatibility mode (i.e., <DynamicPageList> tags).
    • Improves support for %IMAGE%:
      It no longer relies on stock /images/ directories and instead dynamically resolves images based on whatever file backend is in use.
    • Introduces two new parameters: imagewidth and imageheight, to control the size of images within galleries.
    • Introduces another new parameter: gallerymode.
      This sets the mode= attribute in the generated <gallery> tag. Defaults to traditional, but supports all standard modes:
      • traditional
      • nolines
      • packed
      • packed-hover
      • packed-overlay
      • slideshow

    For more on supported gallery modes, see:
    https://www.mediawiki.org/wiki/Help:Images#Gallery_syntax

BREAKING CHANGES

Previously, using & in a category name would incorrectly be interpreted as a logical AND separator between multiple categories, instead of being treated as a literal character in the category name. This meant that querying for categories containing an actual & (like "Cats & Dogs") would fail to match any pages.

This behavior has been fixed:

  • To perform a logical AND between categories, you now must explicitly use <&>.
  • A literal & in category names will now be treated correctly as part of the name.

Previously, underscores (_) in LIKE-style patterns (like in titlematch and nottitlematch) were implicitly treated as single-character wildcards. This made it impossible to reliably match literal underscores (which also represent spaces), and caused patterns to match more broadly than intended.

This behavior has been fixed:

  • A single-character wildcard must now be written explicitly as [_].
  • Each [_] represents exactly one character (for example, [_][_][_] matches three characters).
  • A bare _ is now treated as a literal underscore and will no longer act as a wildcard.

NOTE: We do it with brackets, because brackets are disallowed title characters, so they won't cause issues in the future with some edge-cases since no title can actually contain them. For similar reasons in the future, the same or similar method may be needed for % in order to allow better matching of literal % in titles, but that is a change that will break much more uses so will be done differently, perhaps keeping existing behavior but adding some other substitution to match literal %. For now, matching literal % remains unsupported or unreliable.


The template transclusion (Extension DPL) has been replaced with a proper tracking category, Pages using DynamicPageList4. All the references and usages of Extension DPL has been removed, including the CreateTemplate maintenance script. There is now a new maintenance script, DeleteTemplate to delete the old template. It will auto run when updated using update.php.


notcategory now applies to the maxCategoryCount limitation as well. This was done because they both use queries, so the limit, designed for query limitation, should apply to both. This may break existing pages as well, so the limit may need changed in user's configuration as well.


Removed the suppresserrors parameter.

NOTE: This one was documented as deprecated and slated for removal long ago and hasn't done anything at all prior to removal.


Removed support for updating/deleting articles.

NOTE: This removed the deleterules and updaterules parameters, and all associated user rights and related code including the UpdateArticle class entirely.


Updated some config defaults, changing:

  • $wgDplSettings['allowedNamespaces'] to be an empty array ([]) instead of null.
  • $wgDplSettings['recursivePreprocess'] to be enabled by default.
  • `$wgDplSettings['maxCatego...
Read more

4.0.0-beta.1

20 Sep 17:11
d6e9206

Choose a tag to compare

4.0.0-beta.1 Pre-release
Pre-release

🚀 DynamicPageList4 - Beta 1 Release

This is the very first beta release of DynamicPageList4. This releases also fixes numerous bugs from the alpha releases. Like the last alpha release, this release also has so many changes that I can't list absolutely everything here so just decided to use GitHub's release notes generation again.


🛠️ Changes and Improvements

New Contributors

Full Changelog: 4.0.0-alpha.5...4.0.0-beta.1


📌 Notes

The codebase continues to undergo major structural improvements, and while stability is increasing, this remains an beta release. Early adopters are encouraged to test thoroughly and report any issues or regressions.


As always, if you run into any issues, please open an issue on this repository or leave a comment in the discussion for this release.

Thank you for testing DPL4!

4.0.0-alpha.5

01 Aug 17:41
64d615f

Choose a tag to compare

4.0.0-alpha.5 Pre-release
Pre-release

🚀 DynamicPageList4 - Alpha 5 Release

This is the fifth alpha release of DynamicPageList4. It is also likely the very last alpha release before it heads into beta versions. This releases fixes numerous bugs from past alpha releases, finishes the rewrite/modernization of all remaining classes, and fixes all remaining (known) broken parameters/format options/etc.... This release has so many changes that I can't list absolutely everything here so just decided to use GitHub's release notes generation.


🛠️ Changes and Improvements

  • Update some config defaults by @Universal-Omega in #428
    • NOTE: Changed the default for $wgDplSettings['allowedNamespaces'] to an empty array ([]) instead of null and changed $wgDplSettings['recursivePreprocess'] to be enabled by default.
  • Use the Html class in some places by @Universal-Omega in #429
  • Fix the message used in articleCountMessage by @Universal-Omega in #430
  • Fix issue with colspan by @Universal-Omega in #427
  • Remove unused methods from ParametersData by @Universal-Omega in #433
  • Add config option to support overriding the parameter defaults by @Universal-Omega in #432
    • NOTE: This one is $wgDplSettings['overrideParameterDefaults'].
  • Add a new gallerysize parameter by @Universal-Omega in #434
    • NOTE: This one might be removed in a future release before DPL4 stable release, in favor of two separate width and height parameters for more compatibility with intersection without having three different parameters for it.
  • Remove support for updating/deleting articles by @Universal-Omega in #436
    • NOTE: This removed the deleterules and updaterules parameters, and all associated user rights and related code including the UpdateArticle class entirely.
  • Some fixes by @Universal-Omega in #437
  • Major refactoring to lister classes by @Universal-Omega in #435
    • NOTE: This was a near-complete rewrite of basically the central part of the extension and has a chance to cause some regression, please report if so.
  • Make some properties readonly by @Universal-Omega in #439
  • Fix some regression in Lister by @Universal-Omega in #440
  • Cleanup/modernize/rename LST class by @Universal-Omega in #411
    • NOTE: This was a near-complete rewrite of one of the core features (transclusion logic) of the extension and has a chance to cause some regression, please report if so.
  • Replace parametersForRichnessLevel with a constant and make parameterRichness readonly by @Universal-Omega in #447
  • Enable some phan plugins by @Universal-Omega in #450
  • Refactor parameter handling to replace __call() magic with processParameter() by @Universal-Omega in #455
  • Remove the suppresserrors parameter by @Universal-Omega in #456
    • NOTE: This one was documented as deprecated and slated for removal long ago and hasn't done anything at all prior to removal.
  • Fix addexternallink, linkstoexternal, and %EXTERNALLINK% by @Universal-Omega in #459
    • NOTE: This restores linkstoexternal behavior to how it used to be and removes linkstoexternaldomain and linkstoexternalpath.
  • Improve table alias usage by @Universal-Omega in #463

Full Changelog: 4.0.0-alpha.4...4.0.0-alpha.5


📌 Notes

The codebase continues to undergo major structural improvements, and while stability is increasing, this remains an alpha release. Early adopters are encouraged to test thoroughly and report any issues or regressions.


As always, if you run into any issues, please open an issue on this repository or leave a comment in the discussion for this release.

Thank you for testing DPL4!

4.0.0-alpha.4

23 Jul 00:50
affcdc9

Choose a tag to compare

4.0.0-alpha.4 Pre-release
Pre-release

🚀 DynamicPageList4 - Alpha 4 Release

This is the fourth alpha release of DynamicPageList4, continuing the methodical march toward a cleaner, more reliable, and fully modernized codebase. This release includes a long-anticipated name change, broader timestamp support, major internal refactors, and numerous quality-of-life improvements.


🛠️ Changes and Improvements

  • Extension Renamed to DynamicPageList4:
    The extension's actual name has now officially been updated from DynamicPageList3 to DynamicPageList4. This change has been planned since the initial modernization efforts and reflects the current state of the project.

  • Relative Timestamp Support:

    • Support for a wide range of relative timestamps (e.g., "last week", "in 2 hours", "1 month ago").
      Previously only a few relative timestamps where supported, now anything supported by PHPs strtotime is supported.
    • Support for PostgreSQL in all the timestamp queries.
    • Fixes for bizarre corner cases where PHP's DateTime parser interpreted invalid zero-based timestamps in... creative ways.
  • Fix for the %EDITSUMMARY% format placeholder:
    %EDITSUMMARY% now correctly retrieves revision comments again.
    This feature had been broken since MediaWiki 1.35 due to changes in how rev_comment_id and comment_text are stored. The fix restores full functionality of this.

  • Gallery Mode Enhancements:

    • Properly supports retrieving PageImages when using mode=gallery on non-file namespace pages, if the PageImages extension is installed.
    • Now pulls directly from the PageImages extension instead of relying on page_props, allowing access to both page_image and page_image_free.
    • Added support for mode=gallery when using Intersection compatibility mode (i.e., <DynamicPageList> tags).
    • Improves support for %IMAGE%:
      It no longer relies on stock /images/ directories and instead dynamically resolves images based on whatever file backend is in use.
    • Introduces a new parameter: gallerymode.
      This sets the mode= attribute in the generated <gallery> tag. Defaults to traditional, but supports all standard modes:
      • traditional
      • nolines
      • packed
      • packed-hover
      • packed-overlay
      • slideshow

    For more on supported gallery modes, see:
    https://www.mediawiki.org/wiki/Help:Images#Gallery_syntax

  • Namespace Name Normalization:
    Spaces in namespace names are now automatically replaced with underscores to ensure compatibility and avoid malformed queries.

  • Modernization of More Classes:

    • Significant cleanup and refactor of the Parse class for improved readability and logic clarity.
    • Modernization of and significant cleanup of the Variables, Parameters, and ParametersData classes.

📌 Notes

This release finalizes the long-awaited full rename to DynamicPageList4. The codebase continues to undergo major structural improvements, and while stability is increasing, this remains an alpha release. Early adopters are encouraged to test thoroughly and report any issues or regressions.


There is still much more to come. As always, if you run into any issues, please open an issue on this repository or leave a comment in the discussion for this release.

Thank you for testing DPL4!

4.0.0-alpha.3

17 Jul 01:44
5c6f22f

Choose a tag to compare

4.0.0-alpha.3 Pre-release
Pre-release

🚀 DynamicPageList4 - Alpha 3 Release

This is the third alpha release of DynamicPageList4, continuing the ongoing modernization and cleanup of the extension. This release focuses on additional refactors, incremental cleanups, reliability improvements, and other modernization efforts in preparation for future stability.


🛠️ Changes and Improvements

  • Query Class Refinements:

    • Major cleanup and logic simplification, including changes to how certain queries are constructed, further improving cross-RDBMS compatibility beyond prior releases.
    • Fix for counts when using includesubpages = false: subpage exclusion has been moved from the Parse class (which runs after the query) to be handled directly within the query itself.
  • Logger Modernization:
    The internal Logger class has been fully rewritten for modernization and maintainability.

  • Major Refactoring of Article Class:
    Significant cleanup and modernization of the Article class to align with PHP 8.1+ best practices.


📌 Notes

This release is another incremental step toward a stable release. While efforts have been made to preserve compatibility, testers are encouraged to report any issues or regressions encountered.

The extension remains internally named DynamicPageList3 for compatibility. This will change in a future release.

Feedback and issue reports are appreciated to help further stabilize and enhance the extension.


There is still much more to come. Like always, if you run into any issues, please open an issue on this repository or leave a comment in the discussion for this release.

Thank you for testing DPL4!