operations icon indicating copy to clipboard operation
operations copied to clipboard

Wiki extension request: DynamicPageListEngine

Open 1ec5 opened this issue 1 year ago • 1 comments

Sysadmin

  • [X] I am a wiki sysadmin

Extension name

DynamicPageListEngine

Extension website on mediawiki.org

https://www.mediawiki.org/wiki/Extension:DynamicPageListEngine

Minimum MediaWiki version

1.30+

Supported

  • [X] The wiki extension is listed as release status: stable
  • [ ] The extension is used on one or more Wikimedia projects
  • [X] The extension has versioned releases for the version of MediaWiki used by the OSMF, and for the latest version of MediaWiki

Purpose

Allows a wiki page to include a dynamic listing of links to other pages based on a category or other criterion. Also provides an RSS feed and integration with Lua modules for more customized presentation.

Special install instructions

No response

Uninstall instructions

No database changes. If a page uses the extension to display a dynamic page list, the list will disappear gracefully. Any dependent Lua modules could produce errors, similar to when there’s a Lua syntax error, but these errors would not cascade into server errors.

1ec5 avatar Aug 01 '24 05:08 1ec5

This is a drop-in alternative to #1126.

1ec5 avatar Aug 01 '24 05:08 1ec5

I've installed this on https://test.wiki.openstreetmap.org/ for evaluation - install appears to have worked without issues.

tomhughes avatar Apr 30 '25 21:04 tomhughes

I keep getting the following error when attempting to use mw.ext.dpl.getPagenames or mw.ext.dpl.getFullpagenames in a module and using the module on a page.

[dda9d500a96301d569a3135d] Caught exception of type Wikimedia\Rdbms\DBLanguageError

1ec5 avatar May 01 '25 06:05 1ec5

Unfortunately I can't see any more detail, or indeed any mention of that error, in either the apache or php-fpm logs.

tomhughes avatar May 01 '25 07:05 tomhughes

My previous attempt was in Scribunto’s REPL and in a template preview, but I just tried to invoke the module on the sandbox using this code:

{{#invoke:Proposals|list|status=Active}}

and all I get is this (in Vietnamese, but same message) without it saving successfully:

[08ddb832137ee28eca79007c] 2025-05-01 18:29:10: Lỗi chí tử loại “Wikimedia\Rdbms\DBLanguageError”

I don’t see any more details on the error page, but maybe in the logs this time?

1ec5 avatar May 01 '25 18:05 1ec5

This is the full trace:

[6e74be7d8c8f38b04e7fadac] /w/index.php?title=Sandbox&action=submit Wikimedia\Rdbms\DBLanguageError: Table name component contains unexpected quote or dot character

Backtrace:

from /srv/test.wiki.openstreetmap.org/w/includes/libs/rdbms/platform/SQLPlatform.php(1154)
#0 /srv/test.wiki.openstreetmap.org/w/includes/libs/rdbms/platform/SQLPlatform.php(1094): Wikimedia\Rdbms\Platform\SQLPlatform->extractTableNameComponents()
#1 /srv/test.wiki.openstreetmap.org/w/includes/libs/rdbms/platform/SQLPlatform.php(1060): Wikimedia\Rdbms\Platform\SQLPlatform->qualifiedTableComponents()
#2 /srv/test.wiki.openstreetmap.org/w/includes/libs/rdbms/platform/SQLPlatform.php(1023): Wikimedia\Rdbms\Platform\SQLPlatform->tableName()
#3 /srv/test.wiki.openstreetmap.org/w/includes/libs/rdbms/platform/SQLPlatform.php(924): Wikimedia\Rdbms\Platform\SQLPlatform->tableNameWithAlias()
#4 /srv/test.wiki.openstreetmap.org/w/includes/libs/rdbms/platform/SQLPlatform.php(711): Wikimedia\Rdbms\Platform\SQLPlatform->tableNamesWithIndexClauseOrJOIN()
#5 /srv/test.wiki.openstreetmap.org/w/includes/libs/rdbms/database/Database.php(3305): Wikimedia\Rdbms\Platform\SQLPlatform->selectSQLText()
#6 /srv/test.wiki.openstreetmap.org/w/includes/libs/rdbms/database/DatabaseMySQL.php(644): Wikimedia\Rdbms\Database->selectSQLText()
#7 /srv/test.wiki.openstreetmap.org/w/includes/libs/rdbms/database/Database.php(1337): Wikimedia\Rdbms\DatabaseMySQL->selectSQLText()
#8 /srv/test.wiki.openstreetmap.org/w/includes/libs/rdbms/database/DBConnRef.php(127): Wikimedia\Rdbms\Database->select()
#9 /srv/test.wiki.openstreetmap.org/w/includes/libs/rdbms/database/DBConnRef.php(351): Wikimedia\Rdbms\DBConnRef->__call()
#10 /srv/test.wiki.openstreetmap.org/w/extensions/DynamicPageListEngine/includes/DpleQuery.php(166): Wikimedia\Rdbms\DBConnRef->select()
#11 /srv/test.wiki.openstreetmap.org/w/extensions/DynamicPageListEngine/includes/DynamicPageListEngine.php(72): DpleQuery->execute()
#12 /srv/test.wiki.openstreetmap.org/w/extensions/DynamicPageListEngine/includes/Scribunto_LuaDynamicPageListEngineLibrary.php(94): DynamicPageListEngine->__construct()
#13 /srv/test.wiki.openstreetmap.org/w/extensions/DynamicPageListEngine/includes/Scribunto_LuaDynamicPageListEngineLibrary.php(124): Scribunto_LuaDynamicPageListEngineLibrary->getPages()
#14 /srv/test.wiki.openstreetmap.org/w/extensions/Scribunto/includes/Engines/LuaStandalone/LuaStandaloneInterpreter.php(402): Scribunto_LuaDynamicPageListEngineLibrary->getPagenames()
#15 /srv/test.wiki.openstreetmap.org/w/extensions/Scribunto/includes/Engines/LuaStandalone/LuaStandaloneInterpreter.php(373): MediaWiki\Extension\Scribunto\Engines\LuaStandalone\LuaStandaloneInterpreter->callback()
#16 /srv/test.wiki.openstreetmap.org/w/extensions/Scribunto/includes/Engines/LuaStandalone/LuaStandaloneInterpreter.php(449): MediaWiki\Extension\Scribunto\Engines\LuaStandalone\LuaStandaloneInterpreter->handleCall()
#17 /srv/test.wiki.openstreetmap.org/w/extensions/Scribunto/includes/Engines/LuaStandalone/LuaStandaloneInterpreter.php(276): MediaWiki\Extension\Scribunto\Engines\LuaStandalone\LuaStandaloneInterpreter->dispatch()
#18 /srv/test.wiki.openstreetmap.org/w/extensions/Scribunto/includes/Engines/LuaCommon/LuaEngine.php(311): MediaWiki\Extension\Scribunto\Engines\LuaStandalone\LuaStandaloneInterpreter->callFunction()
#19 /srv/test.wiki.openstreetmap.org/w/extensions/Scribunto/includes/Engines/LuaCommon/LuaModule.php(75): MediaWiki\Extension\Scribunto\Engines\LuaCommon\LuaEngine->executeFunctionChunk()
#20 /srv/test.wiki.openstreetmap.org/w/extensions/Scribunto/includes/Hooks.php(185): MediaWiki\Extension\Scribunto\Engines\LuaCommon\LuaModule->invoke()
#21 /srv/test.wiki.openstreetmap.org/w/includes/parser/Parser.php(3436): MediaWiki\Extension\Scribunto\Hooks->invokeHook()
#22 /srv/test.wiki.openstreetmap.org/w/includes/parser/Parser.php(3117): MediaWiki\Parser\Parser->callParserFunction()
#23 /srv/test.wiki.openstreetmap.org/w/includes/parser/PPFrame_Hash.php(280): MediaWiki\Parser\Parser->braceSubstitution()
#24 /srv/test.wiki.openstreetmap.org/w/includes/parser/Parser.php(2951): MediaWiki\Parser\PPFrame_Hash->expand()
#25 /srv/test.wiki.openstreetmap.org/w/includes/parser/Parser.php(1599): MediaWiki\Parser\Parser->replaceVariables()
#26 /srv/test.wiki.openstreetmap.org/w/includes/parser/Parser.php(701): MediaWiki\Parser\Parser->internalParse()
#27 /srv/test.wiki.openstreetmap.org/w/includes/content/WikitextContentHandler.php(384): MediaWiki\Parser\Parser->parse()
#28 /srv/test.wiki.openstreetmap.org/w/includes/content/ContentHandler.php(1691): MediaWiki\Content\WikitextContentHandler->fillParserOutput()
#29 /srv/test.wiki.openstreetmap.org/w/includes/content/Renderer/ContentRenderer.php(79): MediaWiki\Content\ContentHandler->getParserOutput()
#30 /srv/test.wiki.openstreetmap.org/w/includes/Revision/RenderedRevision.php(263): MediaWiki\Content\Renderer\ContentRenderer->getParserOutput()
#31 /srv/test.wiki.openstreetmap.org/w/includes/Revision/RenderedRevision.php(236): MediaWiki\Revision\RenderedRevision->getSlotParserOutputUncached()
#32 /srv/test.wiki.openstreetmap.org/w/includes/Revision/RevisionRenderer.php(239): MediaWiki\Revision\RenderedRevision->getSlotParserOutput()
#33 /srv/test.wiki.openstreetmap.org/w/includes/Revision/RevisionRenderer.php(172): MediaWiki\Revision\RevisionRenderer->combineSlotOutput()
#34 [internal function]: MediaWiki\Revision\RevisionRenderer->MediaWiki\Revision\{closure}()
#35 /srv/test.wiki.openstreetmap.org/w/includes/Revision/RenderedRevision.php(199): call_user_func()
#36 /srv/test.wiki.openstreetmap.org/w/includes/Storage/DerivedPageDataUpdater.php(1443): MediaWiki\Revision\RenderedRevision->getRevisionParserOutput()
#37 /srv/test.wiki.openstreetmap.org/w/extensions/AbuseFilter/includes/VariableGenerator/RunVariableGenerator.php(176): MediaWiki\Storage\DerivedPageDataUpdater->getParserOutputForMetaData()
#38 /srv/test.wiki.openstreetmap.org/w/extensions/AbuseFilter/includes/VariableGenerator/RunVariableGenerator.php(215): MediaWiki\Extension\AbuseFilter\VariableGenerator\RunVariableGenerator->newVariableHolderForEdit()
#39 /srv/test.wiki.openstreetmap.org/w/extensions/AbuseFilter/includes/Hooks/Handlers/FilteredActionsHandler.php(141): MediaWiki\Extension\AbuseFilter\VariableGenerator\RunVariableGenerator->getEditVars()
#40 /srv/test.wiki.openstreetmap.org/w/extensions/AbuseFilter/includes/Hooks/Handlers/FilteredActionsHandler.php(97): MediaWiki\Extension\AbuseFilter\Hooks\Handlers\FilteredActionsHandler->filterEdit()
#41 /srv/test.wiki.openstreetmap.org/w/includes/HookContainer/HookContainer.php(159): MediaWiki\Extension\AbuseFilter\Hooks\Handlers\FilteredActionsHandler->onEditFilterMergedContent()
#42 /srv/test.wiki.openstreetmap.org/w/includes/HookContainer/HookRunner.php(1514): MediaWiki\HookContainer\HookContainer->run()
#43 /srv/test.wiki.openstreetmap.org/w/includes/editpage/Constraint/EditFilterMergedContentHookConstraint.php(82): MediaWiki\HookContainer\HookRunner->onEditFilterMergedContent()
#44 /srv/test.wiki.openstreetmap.org/w/includes/editpage/Constraint/EditConstraintRunner.php(87): MediaWiki\EditPage\Constraint\EditFilterMergedContentHookConstraint->checkConstraint()
#45 /srv/test.wiki.openstreetmap.org/w/includes/editpage/EditPage.php(2441): MediaWiki\EditPage\Constraint\EditConstraintRunner->checkConstraints()
#46 /srv/test.wiki.openstreetmap.org/w/includes/editpage/EditPage.php(1798): MediaWiki\EditPage\EditPage->internalAttemptSavePrivate()
#47 /srv/test.wiki.openstreetmap.org/w/includes/editpage/EditPage.php(729): MediaWiki\EditPage\EditPage->attemptSave()
#48 /srv/test.wiki.openstreetmap.org/w/includes/actions/EditAction.php(66): MediaWiki\EditPage\EditPage->edit()
#49 /srv/test.wiki.openstreetmap.org/w/includes/actions/SubmitAction.php(38): EditAction->show()
#50 /srv/test.wiki.openstreetmap.org/w/includes/actions/ActionEntryPoint.php(733): SubmitAction->show()
#51 /srv/test.wiki.openstreetmap.org/w/includes/actions/ActionEntryPoint.php(510): MediaWiki\Actions\ActionEntryPoint->performAction()
#52 /srv/test.wiki.openstreetmap.org/w/includes/actions/ActionEntryPoint.php(146): MediaWiki\Actions\ActionEntryPoint->performRequest()
#53 /srv/test.wiki.openstreetmap.org/w/includes/MediaWikiEntryPoint.php(200): MediaWiki\Actions\ActionEntryPoint->execute()
#54 /srv/test.wiki.openstreetmap.org/w/index.php(58): MediaWiki\MediaWikiEntryPoint->run()
#55 {main}

tomhughes avatar May 01 '25 18:05 tomhughes

I wondered if that might be because we have containing quotation marks in their names, like ‘Proposals with "Approved" status’, but I tried it with a plainer category name, “Proposals without post-vote cleanup”, and I get a similar error:

[35fe0f83b69b0a4d5fdeb543] Caught exception of type Wikimedia\Rdbms\DBLanguageError

https://github.com/wikimedia/mediawiki/blob/cde427687085167b05e133689307c6e6854be700/includes/libs/rdbms/platform/SQLPlatform.php#L1154-L1155 https://github.com/wikimedia/mediawiki-extensions-DynamicPageListEngine/blob/8b67d9afc82e5ce95a7ee2fac356cab631c85a73/includes/DpleQuery.php#L116


From this discussion, I see that there’s still an outstanding patch to upgrade the extension to PHP 8 and MediaWiki v1.41. I have permission to +1 a change there, but it would need a +2 and I’m probably not the best person to review PHP code…

1ec5 avatar May 01 '25 21:05 1ec5

I'm pretty sure that patch is the fix - the problem is that DpleQuery is passing `categorylist` AS al to DBConnRef when it expects a simple table name.

tomhughes avatar May 01 '25 21:05 tomhughes