Page MenuHomePhabricator
Search Advanced Search
Use the application-specific Advanced Search to set additional search criteria: Tasks, Commits. (More information)
    • Task
    • ·Closed
    **Steps to replicate the issue** (include links if applicable): * Navigate to https://pl.wikipedia.org/wiki/Specjalna:Wk%C5%82ad/Gytha * See the subtitle "Dla użytkownika Gytha" **What happens?**: Gytha is a woman, so she should be referred to as "użytkowniczki" (not "użytkownika" which is masculine) in this message. As can be seen on TranslateWiki (https://translatewiki.net/w/i.php?title=MediaWiki:Contributions-subtitle/pl&action=edit) this message uses $3 parameter to discern the user's gender. However, the user name is passed as second parameter (compare with lang qqx: https://pl.wikipedia.org/wiki/Specjalna:Wk%C5%82ad/Gytha?uselang=qqx). **What should have happened instead?**: The `{{GENDER:}}` in the interface message should work properly, showing "użytkowniczki" for women. **Software version** (skip for WMF-hosted wikis like Wikipedia): plwiki **Other information** (browser name/version, screenshots, etc.): This is not an issue with this particular translation. Rather, the original English message should use `{{GENDER:$2}}` or there should actually be a third parameter passed with the user name. {F36863616}
    • Task
    • ·Closed
    **Steps to replicate the issue** (include links if applicable): 1. Visit https://zh.wikipedia.org/wiki/Special:%E5%88%A0%E9%99%A4%E7%9A%84%E8%B4%A1%E7%8C%AE?uselang=en using a non-admin account. * Observe the error message text. **What happens?**: `You do not have permission to view a page's deleted history, for the following reason:` **What should have happened instead?**: `You do not have permission to view deleted user contributions, for the following reason:` **Software version** (skip for WMF-hosted wikis like Wikipedia): **Other information** (browser name/version, screenshots, etc.): The reason for this is most likely because the error message is the same as the error message on another page.
    • Task
    In https://gerrit.wikimedia.org/r/c/mediawiki/core/+/867732 we generalized history tools for usage on other similar pages to support adding the thanks link (T51541). During review it was noted that we could improve how this code is organized and how data is passed around. Some possible improvements: * https://gerrit.wikimedia.org/r/c/mediawiki/core/+/874949 - [] Reduce complexity of constructor * https://gerrit.wikimedia.org/r/c/mediawiki/core/+/874950 - [] Rename PagerTools to ChangeTools - [] Update associated classes - [] Replace mw-history-undo class with something more generic.
    • Task
    • ·Closed
    A duplicate help link is now appearing inside the panel * https://en.wikipedia.beta.wmflabs.org/wiki/Special:Contributions {F36819171} # Developer notes Bug is limited to projects that have made use of https://en.wikipedia.org/wiki/MediaWiki:Sp-contributions-explain
    • Task
    • ·Closed
    **Steps to replicate the issue** (include links if applicable): * Open Special:AllPages and profile the request using your favorite tool. **What happens?**: One DB query is made per page displayed in the list. **What should have happened instead?**: The page should utilize prefetched data to warm LinkCache and avoid redundant queries per page.
    • Task
    • ·Closed
    **Feature summary** (what you would like to be able to do and where): Want to link to Special:Log/create of the current user name **Use case(s)** (list the steps that you performed to discover that problem, and describe the actual underlying problem which you want to solve. Do not describe only a solution): Allow the current user to see what pages the user have created, similiar to Special:MyContributions linking to all the contributions on Special:Contributions for the current user **Benefits** (why should this be implemented?): On every user page is a link to Special:Log to see the log entries performed by the user, linking to the logs of the current user could be useful in meta area of wikis
    • Task
    • ·Closed
    **Steps to replicate the issue** (include links if applicable): * Go to API sandbox and try anything with a `limit` type parameter, e.g. [[ https://en.wikipedia.org/wiki/Special:ApiSandbox#action=query&list=allrevisions | Special:ApiSandbox#action=query&list=allrevisions ]] **What happens?**: {F36356494} **What should have happened instead?**: {F36356497} **Software version** (skip for WMF-hosted wikis like Wikipedia): Since commit 737020513d67fc80c2ebf16ca6d9c3d0616ff1ae **Other information** (browser name/version, screenshots, etc.):
    • Task
    • ·Closed
    One UX wart of MediaWiki that survived for a surprisingly long time is that there is no explicit way of starting a new article. If you want to edit an existing article, there is a relatively easy-to-discover edit button; if you want to create an article that's referenced from the current article but doesn't exist, there's the red link mechanism; but if you want to start a new article without a red link, there's nothing. You need to either manually edit the URL, or type the article name in the search box and then click the red link on the search result page (sometimes - T163423, T316400), or go to your sandbox (if the wiki is configured to show a sandbox link in your user menu) and add a red link to it; none of those options are even remotely intuitive. The [[https://www.mediawiki.org/wiki/Extension:InputBox|Inputbox]] extension adds the functionality to insert a small form into a wiki page, where you can type in the page name and then it sends you to edit that page, and sometimes editors add that to various help pages, but there is nothing similar built into the software and so whether the user finds the right help page (or whether that wiki even has one) is very hit and miss. {T322740} adds a "New page" option to the contribution menu, presumably to fix this issue, but then the place it links to is just a set of red links someone else put together, which isn't very useful (T327063). It should instead link to a special page which is basically just a prompt to enter the name of the article, and then it sends you to edit it. Over time that could include all kinds of features, there has been a lot of discussion to figure out how an "article wizard" should look like and various wiki communities collected lots of good ideas (see e.g. [[https://en.wikipedia.org/wiki/User:Sdkb/sandbox/Vision_for_a_better_Article_Wizard|Sdkb's proposal]] or T156442), but we should probably start small. An MVP Special:NewArticle could look something like this: ``` [interface message that can be customized by the community] [textfield for article title][submit button] [another interface message that can be customized by the community] ``` with some logic to warn the user if the given title, or something very close to it, already exists; on submit, it would just open the given page in the default editor, with [[https://en.wikinews.org/wiki/Help:Creating_and_using_editintro_and_preload_templates|preload and editintro]] support. Related: * {T131284}
    • Task
    **Feature summary** (what you would like to be able to do and where): Be able to sort special:allpages by pages' {{DEFAULTSORT}} values **Benefits** (why should this be implemented?): Would allow the listing of pages by their "True" alphabetical order, I.e. people by surname, minus articles, etc.
    • Task
    • ·Closed
    **Steps to replicate the issue** (include links if applicable): * Go to https://translatewiki.net/wiki/Special:MyLanguage/Project_list **What happens?**: You see a page with error: ``` [1ed3e341128a47cd2d91fd56] 2023-01-06 10:39:52: Fatal exception of type "TypeError" ``` **What should have happened instead?**: Redirect to home page **Software version** (skip for WMF-hosted wikis like Wikipedia): * MediaWiki - 1.40.0-alpha * PHP - 7.4.33 (fpm-fcgi) **Other information** (browser name/version, screenshots, etc.): Stacktrace: ``` [2023-01-06T10:35:35.542411+00:00] exception.ERROR: [6161efb29c13633d3a34e94e] /wiki/Special:MyLanguage/Project_list TypeError: Argument 1 passed to Language::equals() must be an instance of Language, instance of MediaWiki\StubObject\StubUserLang given, called in /srv/mediawiki/tags/2023-01-04_14:36:20/includes/specials/SpecialMyLanguage.php on line 168 {"exception":"[object] (TypeError(code: 0): Argument 1 passed to Language::equals() must be an instance of Language, instance of MediaWiki\\StubObject\\StubUserLang given, called in /srv/mediawiki/tags/2023-01-04_14:36:20/includes/specials/SpecialMyLanguage.php on line 168 at /srv/mediawiki/tags/2023-01-04_14:36:20/includes/language/Language.php:4359) [stacktrace] #0 /srv/mediawiki/tags/2023-01-04_14:36:20/includes/specials/SpecialMyLanguage.php(168): Language->equals() #1 /srv/mediawiki/tags/2023-01-04_14:36:20/includes/specials/SpecialMyLanguage.php(106): SpecialMyLanguage->findTitleInternal() #2 /srv/mediawiki/tags/2023-01-04_14:36:20/includes/specials/SpecialMyLanguage.php(84): SpecialMyLanguage->findTitle() #3 /srv/mediawiki/tags/2023-01-04_14:36:20/includes/MediaWiki.php(276): SpecialMyLanguage->getRedirect() #4 /srv/mediawiki/tags/2023-01-04_14:36:20/includes/MediaWiki.php(916): MediaWiki->performRequest() #5 /srv/mediawiki/tags/2023-01-04_14:36:20/includes/MediaWiki.php(571): MediaWiki->main() #6 /srv/mediawiki/tags/2023-01-04_14:36:20/index.php(50): MediaWiki->run() #7 /srv/mediawiki/tags/2023-01-04_14:36:20/index.php(46): wfIndexMain() #8 {main} ","exception_url":"/wiki/Special:MyLanguage/Project_list","reqId":"6161efb29c13633d3a34e94e","caught_by":"entrypoint"} [] ``` Without the `Special:MyLanguage` the URL redirects to the main page This appears to be reproducible locally also if you create the following page: ``` #REDIRECT[[Special:MainPage]] ``` And try to navigate to it with `Special:MyLanguage`
    • Task
    In T51541 we added the thanks link to various special pages. In https://gerrit.wikimedia.org/r/c/mediawiki/core/+/867732 @tgr suggested the new functionality should be pulled out into a service. > Best practice is to not do non-trivial work in the constructor. Moreover, I don't think the usage pattern of create object - call toHTML - discard object makes that much sense. The object has some service dependencies. Injecting those dependencies shouldn't be the concern of the pagers (otherwise when the dependencies change for some reasons, all the pagers need to be updated), it should be handled by the service wiring. > So IMO this should be a service, LinkRenderer and HookRunner should be passed to the constructor, the other arguments should be passed to its main method, and the object should be reused between lines. The clickjacking flag will need a different handling (since services should not have externally-visible state) - either an output parameter, or maybe pass in OutputPage and have this class call setPreventClickjacking() on it.
    • Task
    After https://gerrit.wikimedia.org/r/c/mediawiki/core/+/867732 the HistoryTools hook now runs in contributions page, recent changes and watchlist as well as the history page. It should be renamed to ChangeTools to match the new name in I76b8e78a018e6624191b606d6e1b4139c2871e6a # TODO [] Add new hook [] Modify existing callers of HistoryTools to use the new ChangeTools hook [] Deprecate HistoryTools hook # Sign off steps [] Open new tickets for removing the old hook.
    • Task
    • ·Closed
    **Feature summary** [[Special:SpecialPages]] is a very long page with multiple headings, and so needs a table of contents. An example implementation is given here: https://teflpedia.com/MediaWiki:Specialpages-summary giving: https://teflpedia.com/Special:SpecialPages Note I've also moved the legend from the bottom to the top, as it makes more sense there.
    • Task
    • ·Closed
    **Feature summary** [[Special:Version]] is a very long page with multiple headings, and so needs a table of contents. An example implementation is given here: https://teflpedia.com/MediaWiki:Version-summary Giving.. https://teflpedia.com/Special:Version
    • Task
    **Steps to replicate the issue** (include links if applicable): * Go to [[Special:MediaStatistics]] * Right click and view source. * search for `name=` or `id=` attributes on or near `<h2>` headings. **What happens?**: There's no html anchor tags associated with the headings, so no table of contents can be generated, even though there are quite a few headings. **What should have happened instead?**: Headings should have html anchor tags. **Software version** (skip for WMF-hosted wikis like Wikipedia): 1.35 **Other information** (browser name/version, screenshots, etc.):
    • Task
    • ·Closed
    **Steps to replicate the issue** (include links if applicable): * Edit [[MediaWiki:statistics-summary]] so it contains some text. * Go to [[Special:Statistics]] to see if the system message appears **What happens?**: The system message [[MediaWiki:statistics-summary]] doesn't appear **What should have happened instead?**: The system message [[MediaWiki:statistics-summary]] should have appeared. **Software version** (skip for WMF-hosted wikis like Wikipedia): 1.35 **Other information** (browser name/version, screenshots, etc.): URLS for demonstration are: https://teflpedia.com/MediaWiki:Statistics-summary and https://teflpedia.com/Special:Statistics
    • Task
    • ·Closed
    **Steps to replicate the issue** (include links if applicable): * Go to https://www.mediawiki.org/wiki/Special:WhatLinksHere?target=In%7Cvalid **What happens?**: * The given "Page:" is invalid, but Special:WhatLinksHere does not show the message "The requested page title contains invalid characters: "|"." (title-invalid-characters) **What should have happened instead?**: * Expected the message "The requested page title contains invalid characters: "|"." (title-invalid-characters) as red text The special page is using the class `HTMLTitleTextField` which has such support, but it seems the error message is not shown on GET or POST requests (or no validation is done from HTMLForm) **Software version** (skip for WMF-hosted wikis like Wikipedia): **Other information** (browser name/version, screenshots, etc.):
    • Task
    **Feature summary** (what you would like to be able to do and where): If `Help` is a translated page with "Ayuda" as a translated page title in Spanish and `Yes` is a translatable page... I would like to be able to write `[[Special:MyLanguage/Help]]` on `Yes` and when it renders on the English page it shows: [[ https://ok.ok | Help]] Then, when I'm translating the wikitext of `Yes` into Spanish, it will show me that `[[Special:MyLanguage/Help]]` has a Spanish translation of the page title and I do not have to provide a translation as a piped link and can just put `[[Special:MyLanguage/Help]]` where the link should be located in the translation. Then, when I've viewing the translated Spanish `Yes` page, the translated page title [[ https://ok.ok | Ayuda]] will render. **Use case(s)** (list the steps that you performed to discover that problem, and describe the actual underlying problem which you want to solve. Do not describe only a solution): Requiring that editors provide a piped link label every time they use `Special:MyLanguage` when the link label they want to use is the same as the page title is annoying and should be unnecessary. For example, we shouldn't require editors to write `[[Special:MyLanguage/Help|Help]]` when they could just write `[[Special:MyLanguage/Help]]` and it should show the same thing. Likewise, it is also unecessary for translators to provide a translation of a page title that already has a translation. For example, we shouldn't require translators to write `[[Special:MyLanguage/Help|Ayuda]]` when the translated page title of `Help` is already `Ayuda`. They should be able to just write `[[Special:MyLanguage/Help]]`. **Benefits** (why should this be implemented?): - Easier editing and translation. - Less wikitext required. - Synchronization in translations.
    • Task
    • ·Closed
    //This feature was voted [[https://meta.wikimedia.org/wiki/Community_Wishlist_Survey_2022/Miscellaneous/Show_edit_count_at_Special:Contributions| #45 on the 2022 Community Wishlist Survey]].// **Problem:** Edit counts are hard to determine unless you know about external tools and user scripts that show this information, or if you explicitly state how many edits you have on your userpage. Attempting to paginate through a user's contributions to count their edits can take a very long time if they have a very high edit count. **Proposed solution:** Show a user's edit count at Special:Contributions, similar to how it is done on mobile web. Note that some discussion around this in the past has been to introduce a new magic word; this feature is //not// that.
    • Task
    **Steps to replicate the issue** (include links if applicable): Try to visit https://www.wikidata.org/w/index.php?title=Special%3AContributions&target=Dexbot&namespace=all&tagfilter=&newOnly=1&start=&end=&limit=50 **What happens?**: ``` To avoid creating high database load, this query was aborted because the duration exceeded the limit. If you are reading many items at once, try doing multiple smaller operations instead. [d56b7106-8534-43bb-8f7d-1d533c19d24b] 2022-11-28 16:39:39: Fatal exception of type "Wikimedia\Rdbms\DBQueryTimeoutError" ``` **What should have happened instead?**: The list of new pages created by the bot should be displayed **Other information** (browser name/version, screenshots, etc.): According to https://xtools.wmflabs.org/sc/www.wikidata.org/Dexbot Dexbot has 24.5 million edits on Wikidata. I'm not sure if that is the reason this happens.
    • Task
    During 1.39 we have added the SpecialContributeSkinsDisabled feature flag (later renamed to SpecialContributeSkinsEnabled) as a temporary stopgap that controls whether the tabs are shown at the top of the Special:Contributions page. We would like to remove this prior to the 1.40 release so that we do not have to support it in future MediaWiki releases. At time of writing this flag is enabled on the beta cluster for Minerva skin: https://en.wikipedia.beta.wmflabs.org/wiki/Special:Contributions/Jdlrobson {F35778908} {F35778901} Without the feature flag, the menu will automatically show up on Vector 2022 and Minerva skins (as well as any third party skins which make use of this special menu for special pages). Background: T319327#8376355
    • Task
    • ·Closed
    **Steps to replicate the issue** (include links if applicable): * Go to https://en.wikipedia.org/wiki/Special:WhatLinksHere/Template:Collection.description **What happens?**: * See JavaScript page in result **What should have happened instead?**: JavaScript content model pages can't transclude pages (AFAIK) so shouldn't be showing up here. Editors currently have to workaround this by appending ```<nowiki>``` comments to the JavaScript pages. **Other information** (browser name/version, screenshots, etc.): Context: https://en.wikipedia.org/w/index.php?title=User_talk:Jdlrobson&type=revision&diff=1120161784&oldid=1066879576&diffmode=source Presumably when content is saved with content model JavaScript, the pagelink table is updated and shouldn't be
    • Task
    • ·Closed
    ==== Error ==== * mwversion: `1.40.0-wmf.7` * reqId: `98017ff4-1964-4d1f-a5bd-dd7b0cbcfa73` * [[ https://logstash.wikimedia.org/goto/ef4a4a58dcc6dd75179b5b6661f653c5 | Find reqId in Logstash ]] ```name=normalized_message [{reqId}] {exception_url} PHP Notice: Array to string conversion ``` ```name=exception.trace,lines=11 from /srv/mediawiki/php-1.40.0-wmf.7/includes/pager/RangeChronologicalPager.php(53) #0 /srv/mediawiki/php-1.40.0-wmf.7/includes/pager/RangeChronologicalPager.php(53): MWExceptionHandler::handleError(integer, string, string, integer, array) #1 /srv/mediawiki/php-1.40.0-wmf.7/includes/specials/pagers/NewFilesPager.php(82): RangeChronologicalPager->getDateRangeCond(string, string) #2 /srv/mediawiki/php-1.40.0-wmf.7/includes/specials/SpecialNewFiles.php(133): NewFilesPager->__construct(DerivativeContext, MediaWiki\Permissions\GroupPermissionsLookup, MediaWiki\Cache\LinkBatchFactory, MediaWiki\Linker\LinkRenderer, Wikimedia\Rdbms\LoadBalancer, FormOptions) #3 /srv/mediawiki/php-1.40.0-wmf.7/includes/specialpage/SpecialPage.php(701): SpecialNewFiles->execute(NULL) #4 /srv/mediawiki/php-1.40.0-wmf.7/includes/specialpage/SpecialPageFactory.php(1451): SpecialPage->run(NULL) #5 /srv/mediawiki/php-1.40.0-wmf.7/includes/MediaWiki.php(316): MediaWiki\SpecialPage\SpecialPageFactory->executePath(string, RequestContext) #6 /srv/mediawiki/php-1.40.0-wmf.7/includes/MediaWiki.php(904): MediaWiki->performRequest() #7 /srv/mediawiki/php-1.40.0-wmf.7/includes/MediaWiki.php(562): MediaWiki->main() #8 /srv/mediawiki/php-1.40.0-wmf.7/index.php(50): MediaWiki->run() #9 /srv/mediawiki/php-1.40.0-wmf.7/index.php(46): wfIndexMain() #10 /srv/mediawiki/w/index.php(3): require(string) #11 {main} ``` ```name=normalized_message [{reqId}] {exception_url} Wikimedia\Rdbms\DBQueryError: Error 1054: Unknown column 'Array' in 'where clause' Function: IndexPager::buildQueryInfo (NewFilesPager) Query: SELECT /*! STRAIGHT_JOIN */ img_name,img_timestamp,actor_user,actor_name FROM `ima ``` ```name=exception.trace,lines=18 from /srv/mediawiki/php-1.40.0-wmf.7/includes/libs/rdbms/database/Database.php(1558) #0 /srv/mediawiki/php-1.40.0-wmf.7/includes/libs/rdbms/database/Database.php(1542): Wikimedia\Rdbms\Database->getQueryException(string, integer, string, string) #1 /srv/mediawiki/php-1.40.0-wmf.7/includes/libs/rdbms/database/Database.php(1516): Wikimedia\Rdbms\Database->getQueryExceptionAndLog(string, integer, string, string) #2 /srv/mediawiki/php-1.40.0-wmf.7/includes/libs/rdbms/database/Database.php(892): Wikimedia\Rdbms\Database->reportQueryError(string, integer, string, string, boolean) #3 /srv/mediawiki/php-1.40.0-wmf.7/includes/libs/rdbms/database/Database.php(1648): Wikimedia\Rdbms\Database->query(string, string, integer) #4 /srv/mediawiki/php-1.40.0-wmf.7/includes/libs/rdbms/database/DBConnRef.php(119): Wikimedia\Rdbms\Database->select(array, array, array, string, array, array) #5 /srv/mediawiki/php-1.40.0-wmf.7/includes/libs/rdbms/database/DBConnRef.php(338): Wikimedia\Rdbms\DBConnRef->__call(string, array) #6 /srv/mediawiki/php-1.40.0-wmf.7/includes/pager/IndexPager.php(460): Wikimedia\Rdbms\DBConnRef->select(array, array, array, string, array, array) #7 /srv/mediawiki/php-1.40.0-wmf.7/includes/pager/IndexPager.php(277): IndexPager->reallyDoQuery(string, integer, boolean) #8 /srv/mediawiki/php-1.40.0-wmf.7/includes/pager/IndexPager.php(564): IndexPager->doQuery() #9 /srv/mediawiki/php-1.40.0-wmf.7/includes/specials/SpecialNewFiles.php(141): IndexPager->getBody() #10 /srv/mediawiki/php-1.40.0-wmf.7/includes/specialpage/SpecialPage.php(701): SpecialNewFiles->execute(NULL) #11 /srv/mediawiki/php-1.40.0-wmf.7/includes/specialpage/SpecialPageFactory.php(1451): SpecialPage->run(NULL) #12 /srv/mediawiki/php-1.40.0-wmf.7/includes/MediaWiki.php(316): MediaWiki\SpecialPage\SpecialPageFactory->executePath(string, RequestContext) #13 /srv/mediawiki/php-1.40.0-wmf.7/includes/MediaWiki.php(904): MediaWiki->performRequest() #14 /srv/mediawiki/php-1.40.0-wmf.7/includes/MediaWiki.php(562): MediaWiki->main() #15 /srv/mediawiki/php-1.40.0-wmf.7/index.php(50): MediaWiki->run() #16 /srv/mediawiki/php-1.40.0-wmf.7/index.php(46): wfIndexMain() #17 /srv/mediawiki/w/index.php(3): require(string) #18 {main} ``` ==== Notes ==== Observed initially on mediawikiwiki and commonswiki after deployment of `1.40.0-wmf.7` to groups 0 & 1. I also reproduced it on wikibooks (group 1). The page fails to render and shows an error. Error reproduces consistently by specifying one of `From date` or `To date` fields in the `Special:NewFiles` page. For example: https://commons.wikimedia.org/wiki/Special:NewFiles?end=2019-05-14 The code seems to be putting together a DB query with a non-existent column `Array`. T321551 was logged recently and might be indirectly related.
    • Task
    • ·Closed
    ==== Error ==== * mwversion: `1.40.0-wmf.7` * reqId: `98017ff4-1964-4d1f-a5bd-dd7b0cbcfa73` * [[ https://logstash.wikimedia.org/app/dashboards#/view/AXFV7JE83bOlOASGccsT?_g=(time:(from:'2022-10-24T08:18:09.000Z',to:'2022-10-25T11:08:09.279Z'))&_a=(query:(query_string:(query:'reqId:%2298017ff4-1964-4d1f-a5bd-dd7b0cbcfa73%22'))) | Find reqId in Logstash ]] ```name=normalized_message [{reqId}] {exception_url} PHP Warning: Invalid argument supplied for foreach() ``` ```name=exception.trace,lines=10 from /srv/mediawiki/php-1.40.0-wmf.7/includes/pager/AlphabeticPager.php(51) #0 /srv/mediawiki/php-1.40.0-wmf.7/includes/pager/AlphabeticPager.php(51): MWExceptionHandler::handleError(integer, string, string, integer, array) #1 /srv/mediawiki/php-1.40.0-wmf.7/includes/specials/SpecialProtectedtitles.php(84): AlphabeticPager->getNavigationBar() #2 /srv/mediawiki/php-1.40.0-wmf.7/includes/specialpage/SpecialPage.php(701): SpecialProtectedtitles->execute(NULL) #3 /srv/mediawiki/php-1.40.0-wmf.7/includes/specialpage/SpecialPageFactory.php(1451): SpecialPage->run(NULL) #4 /srv/mediawiki/php-1.40.0-wmf.7/includes/MediaWiki.php(316): MediaWiki\SpecialPage\SpecialPageFactory->executePath(string, RequestContext) #5 /srv/mediawiki/php-1.40.0-wmf.7/includes/MediaWiki.php(904): MediaWiki->performRequest() #6 /srv/mediawiki/php-1.40.0-wmf.7/includes/MediaWiki.php(562): MediaWiki->main() #7 /srv/mediawiki/php-1.40.0-wmf.7/index.php(50): MediaWiki->run() #8 /srv/mediawiki/php-1.40.0-wmf.7/index.php(46): wfIndexMain() #9 /srv/mediawiki/w/index.php(3): require(string) #10 {main} ``` ==== Notes ==== Observed on mediawikiwiki after deployment of `1.40.0-wmf.7` to group 0. Reproduces consistently by hitting the `Special:ProtectedTitles` page: https://www.mediawiki.org/wiki/Special:ProtectedTitles Main rendering of the page doesn't seem affected. Other special pages don't seem affected.
    • Task
    • ·Closed
    ==== Error ==== * mwversion: `1.40.0-wmf.6` * reqId: `7990957f-608e-473a-8ef2-c3d976d1be1d` * [[ https://logstash.wikimedia.org/app/dashboards#/view/AXFV7JE83bOlOASGccsT?_g=(time:(from:'2022-10-20T15:38:17.000Z',to:'2022-10-22T15:38:17.000Z'))&_a=(query:(query_string:(query:'reqId:%227990957f-608e-473a-8ef2-c3d976d1be1d%22'))) | Find reqId in Logstash ]] ```name=normalized_message [{reqId}] {exception_url} MWException: HTML attribute value can not contain a list of values ``` ```name=exception.trace,lines=10 from /srv/mediawiki/php-1.40.0-wmf.6/includes/Html.php(556) #0 /srv/mediawiki/php-1.40.0-wmf.6/includes/Html.php(310): Html::expandAttributes(array) #1 /srv/mediawiki/php-1.40.0-wmf.6/includes/Html.php(215): Html::openElement(string, array) #2 /srv/mediawiki/php-1.40.0-wmf.6/includes/Html.php(240): Html::rawElement(string, array, string) #3 /srv/mediawiki/php-1.40.0-wmf.6/includes/Html.php(710): Html::element(string, array) #4 /srv/mediawiki/php-1.40.0-wmf.6/includes/Html.php(852): Html::input(string, array, string, array) #5 /srv/mediawiki/php-1.40.0-wmf.6/includes/htmlform/HTMLForm.php(1396): Html::hidden(string, array, array) #6 /srv/mediawiki/php-1.40.0-wmf.6/includes/htmlform/HTMLForm.php(1294): HTMLForm->getHiddenFields() #7 /srv/mediawiki/php-1.40.0-wmf.6/includes/htmlform/HTMLForm.php(1245): HTMLForm->getHTML(string) #8 /srv/mediawiki/php-1.40.0-wmf.6/includes/specials/pagers/ImageListPager.php(564): HTMLForm->displayForm(string) #9 /srv/mediawiki/php-1.40.0-wmf.6/includes/specials/SpecialListFiles.php(124): ImageListPager->getForm() #10 /srv/mediawiki/php-1.40.0-wmf.6/includes/specialpage/SpecialPage.php(701): SpecialListFiles->execute(NULL) #11 /srv/mediawiki/php-1.40.0-wmf.6/includes/specialpage/SpecialPageFactory.php(1451): SpecialPage->run(NULL) #12 /srv/mediawiki/php-1.40.0-wmf.6/includes/MediaWiki.php(316): MediaWiki\SpecialPage\SpecialPageFactory->executePath(string, RequestContext) #13 /srv/mediawiki/php-1.40.0-wmf.6/includes/MediaWiki.php(904): MediaWiki->performRequest() #14 /srv/mediawiki/php-1.40.0-wmf.6/includes/MediaWiki.php(562): MediaWiki->main() #15 /srv/mediawiki/php-1.40.0-wmf.6/index.php(50): MediaWiki->run() #16 /srv/mediawiki/php-1.40.0-wmf.6/index.php(46): wfIndexMain() #17 /srv/mediawiki/w/index.php(3): require(string) #18 {main} ``` ==== Impact ==== ==== Notes ==== Four such requests happened at the same time all targeting `aawiki`, I suspect it is part of a penetration testing script similar to T321267 or T321133. They all had the same url path: `/wiki/Special:ListFiles?acx[[%24{98991*97996}]]xca&limit=20&user=<someusername>` A couple additional one tried to do some JavaScript injection.
    • Task
    On Special:Contribute, the 'new page' card shows a link to Special:WantedPages, which in dewiki looks like this: https://de.wikipedia.org/wiki/Spezial:Gew%C3%BCnschte_Seiten - only maintenance links that are not helpful for contributing and are clearly not topics that have been requested. Adding this doesn't make sense and it's likely to cause confusion. There should be a way either to: - change the link target (specify the page that should be linked in a message, for dewiki https://de.wikipedia.org/wiki/Wikipedia:Artikelw%C3%BCnsche for example) - hide the card (add identifiers to html output for access through css)
    • Task
    • ·Closed
    ==== Error ==== * mwversion: `1.40.0-wmf.6` * reqId: `7b998b13-54ef-46bb-8a16-42bdef4db867` * [[ https://logstash.wikimedia.org/app/dashboards#/view/AXFV7JE83bOlOASGccsT?_g=(time:(from:'2022-10-17T20:58:06.000Z',to:'2022-10-18T20:59:37.266Z'))&_a=(query:(query_string:(query:'reqId:%227b998b13-54ef-46bb-8a16-42bdef4db867%22'))) | Find reqId in Logstash ]] ```name=normalized_message [{reqId}] {exception_url} PHP Notice: Array to string conversion ``` ```name=exception.trace,lines=10 from /srv/mediawiki/php-1.40.0-wmf.6/includes/libs/rdbms/database/DatabaseMysqli.php(226) #0 /srv/mediawiki/php-1.40.0-wmf.6/includes/libs/rdbms/database/DatabaseMysqli.php(226): MWExceptionHandler::handleError(integer, string, string, integer, array) #1 /srv/mediawiki/php-1.40.0-wmf.6/includes/libs/rdbms/database/DatabaseMysqlBase.php(439): Wikimedia\Rdbms\DatabaseMysqli->mysqlRealEscapeString(array) #2 /srv/mediawiki/php-1.40.0-wmf.6/includes/libs/rdbms/database/Database.php(1857): Wikimedia\Rdbms\DatabaseMysqlBase->strencode(array) #3 /srv/mediawiki/php-1.40.0-wmf.6/includes/libs/rdbms/platform/SQLPlatform.php(250): Wikimedia\Rdbms\Database->addQuotes(array) #4 /srv/mediawiki/php-1.40.0-wmf.6/includes/libs/rdbms/platform/SQLPlatform.php(722): Wikimedia\Rdbms\Platform\SQLPlatform->makeList(array, integer) #5 /srv/mediawiki/php-1.40.0-wmf.6/includes/libs/rdbms/database/Database.php(3789): Wikimedia\Rdbms\Platform\SQLPlatform->selectSQLText(array, array, array, string, array, array) #6 /srv/mediawiki/php-1.40.0-wmf.6/includes/libs/rdbms/database/DatabaseMysqlBase.php(1254): Wikimedia\Rdbms\Database->selectSQLText(array, array, array, string, array, array) #7 /srv/mediawiki/php-1.40.0-wmf.6/includes/libs/rdbms/database/Database.php(1641): Wikimedia\Rdbms\DatabaseMysqlBase->selectSQLText(array, array, array, string, array, array) #8 /srv/mediawiki/php-1.40.0-wmf.6/includes/libs/rdbms/database/DBConnRef.php(103): Wikimedia\Rdbms\Database->select(array, array, array, string, array, array) #9 /srv/mediawiki/php-1.40.0-wmf.6/includes/libs/rdbms/database/DBConnRef.php(325): Wikimedia\Rdbms\DBConnRef->__call(string, array) #10 /srv/mediawiki/php-1.40.0-wmf.6/includes/pager/IndexPager.php(460): Wikimedia\Rdbms\DBConnRef->select(array, array, array, string, array, array) #11 /srv/mediawiki/php-1.40.0-wmf.6/includes/pager/IndexPager.php(282): IndexPager->reallyDoQuery(string, integer, boolean) #12 /srv/mediawiki/php-1.40.0-wmf.6/includes/pager/IndexPager.php(564): IndexPager->doQuery() #13 /srv/mediawiki/php-1.40.0-wmf.6/includes/specials/SpecialNewFiles.php(137): IndexPager->getBody() #14 /srv/mediawiki/php-1.40.0-wmf.6/includes/specialpage/SpecialPage.php(701): SpecialNewFiles->execute(NULL) #15 /srv/mediawiki/php-1.40.0-wmf.6/includes/specialpage/SpecialPageFactory.php(1451): SpecialPage->run(NULL) #16 /srv/mediawiki/php-1.40.0-wmf.6/includes/MediaWiki.php(316): MediaWiki\SpecialPage\SpecialPageFactory->executePath(string, RequestContext) #17 /srv/mediawiki/php-1.40.0-wmf.6/includes/MediaWiki.php(904): MediaWiki->performRequest() #18 /srv/mediawiki/php-1.40.0-wmf.6/includes/MediaWiki.php(562): MediaWiki->main() #19 /srv/mediawiki/php-1.40.0-wmf.6/index.php(50): MediaWiki->run() #20 /srv/mediawiki/php-1.40.0-wmf.6/index.php(46): wfIndexMain() #21 /srv/mediawiki/w/index.php(3): require(string) #22 {main} ``` ==== Impact ==== ==== Notes ==== Bit of a spike (~24), noticed during UTC late deployment window, seems to be confined to `hzwiki`
    • Task
    • ·Closed
    While logged-in with `KHarlan_(WMF)` I get an infinite redirect when attempt to visit Special:Contribute in Minerva (m subdomain) or on desktop (Vector 2022). {F35568893} Seemingly this is the problematic code in SpecialContribute.php: ```lang=php $target = $par ?? $request->getVal( 'target', '' ); $titleLocalUrl = static::getTitleFor( 'Contribute', $this->getUser()->getName() )->getLocalUrl(); if ( $target !== $this->getUser()->getName() ) { $this->getOutput()->redirect( $titleLocalUrl ); } ``` # QA Go to https://m.mediawiki.org/wiki/Special:Contribute == QA Results - Prod | **AC** | **Status** | **Details** | | ----- | ----- | ----- | | 1 | ✅ | T320804#8343928 |
    • Task
    === Description As far as I can tell this issue is specific to Vector 2022: the view filter links on History pages are getting :visited link styling. {F35568881 width=500} === To-do Remove visited link styling from view filter links
    • Task
    The `SpecialStatsAddExtra` hook lets you add statistics to `Special:Statistics` as follows: ``` public static function onSpecialStatsAddExtra( &$extraStats, RequestContext $context ) { $extraStats['some-message'] = 333; } ``` The string used to index `$extraStats` is however directly passed to `wfMessage()`, meaning it's not possible to dynamically generate multiple statistics using a system message like e.g. `number of $1`, which seems like an oversight. Since `Message`s cannot be used as an indexing key, this would require a somewhat different API ... perhaps `$extraStats[] = [wfMessage('my-message', $myParam), 333];`.
    • Task
    • ·Closed
    **Steps to replicate the issue** (include links if applicable): 链接可以参考[[https://zh.wikipedia.org/w/index.php?title=Special:%E7%94%A8%E6%88%B7%E8%B4%A1%E7%8C%AE&end=2022-10-01&namespace=all&start=2022-07-24&tagfilter=&target=%2Aangys%2A&offset=20220725033354&limit=500| 该用户的贡献页 ]] 在用户贡献页面选定起始日和截止日后,若筛选所得到的内容超过500个,起始日的限制会失效,即筛选内容包含编辑时间在起始日之前的编辑 **What should have happened instead?**: 上述筛选内容应当不包含起始日之前的编辑 **Software version** (skip for WMF-hosted wikis like Wikipedia): 1.35.1(我自己搭建的Wiki)。同时,Wikipedia也有该问题(参考上述链接) **Other information** (browser name/version, screenshots, etc.): 浏览器:Chrome/105.0.5195.127 截图:{F35542060} (The following is translated by google) **Steps to replicate the issue** (include links if applicable): The link can refer to [[https://en.wikipedia.org/w/index.php?title=Special:%E7%94%A8%E6%88%B7%E8%B4%A1%E7%8C%AE&end= 2022-10-01&namespace=all&start=2022-07-24&tagfilter=&target=%2Aangys%2A&offset=20220725033354&limit=500| This user's contribution page]] After the start date and end date are selected on the User Contribution page, if more than 500 pieces of content are obtained from the filter, the limit on the start date will become invalid, that is, the filter content includes edits whose editing time is before the start date. **What should have happened instead?**: The above filters should not include edits prior to the start date **Software version** (skip for WMF-hosted wikis like Wikipedia): 1.35.1 (wiki I built myself). At the same time, Wikipedia also has this problem (refer to the above link) **Other information** (browser name/version, screenshots, etc.): Browser: Chrome/105.0.5195.127 Screenshot: {F35542060}
    • Task
    • ·Closed
    **Steps to replicate the issue** (include links if applicable): * go to Special:ExpandTemplates (e.g. on wikipedia) * Put in the following wikitext (This assumes File:Smartphone.jpg is a redirect, which it is on commons) ``` <gallery showfilename=1> File:Smartphone.jpg </gallery> ``` * Click view **What happens?**: Exception because getCaptionHtml typehints it takes a Language object, and StubUserLangObj is not an instance of Language. ``` [89a51c5635a4b74afbd2ff67] /w/index.php/Special:ExpandTemplates TypeError: Argument 2 passed to TraditionalImageGallery::getCaptionHtml() must be an instance of Language, instance of StubUserLang given, called in /var/www/html/w/includes/gallery/TraditionalImageGallery.php on line 226 Backtrace: from /var/www/html/w/includes/gallery/TraditionalImageGallery.php(254) #0 /var/www/html/w/includes/gallery/TraditionalImageGallery.php(226): TraditionalImageGallery->getCaptionHtml() #1 /var/www/html/w/includes/parser/Parser.php(5276): TraditionalImageGallery->toHTML() #2 /var/www/html/w/includes/parser/CoreTagHooks.php(176): Parser->renderImageGallery() #3 /var/www/html/w/includes/parser/Parser.php(4012): CoreTagHooks::gallery() #4 /var/www/html/w/includes/parser/PPFrame_Hash.php(354): Parser->extensionSubstitution() #5 /var/www/html/w/includes/parser/Parser.php(2944): PPFrame_Hash->expand() #6 /var/www/html/w/includes/parser/Parser.php(1599): Parser->replaceVariables() #7 /var/www/html/w/includes/parser/Parser.php(713): Parser->internalParse() #8 /var/www/html/w/includes/specials/SpecialExpandTemplates.php(242): Parser->parse() #9 /var/www/html/w/includes/specials/SpecialExpandTemplates.php(128): SpecialExpandTemplates->generateHtml() #10 /var/www/html/w/includes/specialpage/SpecialPage.php(701): SpecialExpandTemplates->execute() #11 /var/www/html/w/includes/specialpage/SpecialPageFactory.php(1428): SpecialPage->run() #12 /var/www/html/w/includes/MediaWiki.php(316): MediaWiki\SpecialPage\SpecialPageFactory->executePath() #13 /var/www/html/w/includes/MediaWiki.php(904): MediaWiki->performRequest() #14 /var/www/html/w/includes/MediaWiki.php(562): MediaWiki->main() #15 /var/www/html/w/index.php(50): MediaWiki->run() #16 /var/www/html/w/index.php(46): wfIndexMain() #17 {main} ``` The language object in question is coming from `$this->mParser->getTargetLanguage()` **What should have happened instead?**: Gallery should render (Like it does on a normal save page). I'm not sure if `$this->mParser->getTargetLanguage()` should never return a stub, or if methods should not type hint Language, or if we should explicitly call StubObject::unstub. The whole stub object thing seems a lot less sensible in a world where we don't have globals everywhere.
    • Task
    • ·Closed
    **Feature summary** (what you would like to be able to do and where): https://en.wikipedia.org/wiki/Special:ListGroupRights displays the technical names of **rights** such as autopatrol. But it currently hides the technical names of **user groups** such as autoreviewer. Instead it says "Autopatrolled". My feature request is to add the technical names somewhere on this page, perhaps in parentheses by the alias. So for example: `Autopatrolled (autoreviewer) (list of members)` **Use case(s)** (list the steps that you performed to discover that problem, and describe the actual underlying problem which you want to solve. Do not describe only a solution): Looking up user group names when programming other things. For example, if I want to write some JavaScript to check if someone is autopatrolled, then I can look at this list and figure out I need "autoreviewer" to do something like `if ( mw.config.get('wgUserGroups').indexOf('autoreviewer') !== -1 )` **Benefits** (why should this be implemented?): Unbury useful information for programmers. I currently look by hoving over the link "list of members" and looking at the URL Before: {F35528234} After: {F35528232}
    • Task
    • ·Closed
    ==== Error ==== * mwversion: `1.40.0-wmf.1` * reqId: `a2df7ece-22a0-493f-b61b-b0718dfb603d` * [[ https://logstash.wikimedia.org/app/dashboards#/view/AXFV7JE83bOlOASGccsT?_g=(time:(from:'2022-09-16T10:27:10.000Z',to:'2022-09-18T10:27:10.000Z'))&_a=(query:(query_string:(query:'reqId:%22a2df7ece-22a0-493f-b61b-b0718dfb603d%22'))) | Find reqId in Logstash ]] ```name=normalized_message [{reqId}] {exception_url} TypeError: Argument 2 passed to ChangeTagsRevisionList::updateChangeTagsOnAll() must be of the type array, null given, called in /srv/mediawiki/php-1.40.0-wmf.1/includes/specials/SpecialEditTags.php on line 440 ``` ```name=exception.trace,lines=10 from /srv/mediawiki/php-1.40.0-wmf.1/includes/changetags/ChangeTagsRevisionList.php(86) #0 /srv/mediawiki/php-1.40.0-wmf.1/includes/specials/SpecialEditTags.php(440): ChangeTagsRevisionList->updateChangeTagsOnAll(array, NULL, NULL, string, User) #1 /srv/mediawiki/php-1.40.0-wmf.1/includes/specials/SpecialEditTags.php(158): SpecialEditTags->submit() #2 /srv/mediawiki/php-1.40.0-wmf.1/includes/specialpage/SpecialPage.php(701): SpecialEditTags->execute(NULL) #3 /srv/mediawiki/php-1.40.0-wmf.1/includes/specialpage/SpecialPageFactory.php(1428): SpecialPage->run(NULL) #4 /srv/mediawiki/php-1.40.0-wmf.1/includes/MediaWiki.php(316): MediaWiki\SpecialPage\SpecialPageFactory->executePath(string, RequestContext) #5 /srv/mediawiki/php-1.40.0-wmf.1/includes/MediaWiki.php(904): MediaWiki->performRequest() #6 /srv/mediawiki/php-1.40.0-wmf.1/includes/MediaWiki.php(562): MediaWiki->main() #7 /srv/mediawiki/php-1.40.0-wmf.1/index.php(50): MediaWiki->run() #8 /srv/mediawiki/php-1.40.0-wmf.1/index.php(46): wfIndexMain() #9 /srv/mediawiki/w/index.php(3): require(string) #10 {main} ``` ==== Impact ==== ==== Notes ==== Surfaced by {T311567}. Reported in https://fi.wikipedia.org/w/index.php?title=Wikipedia:Kahvihuone_(tekniikka)&diff=20792152&oldid=20790507&diffmode=visual
    • Task
    • ·Closed
    ==== Error ==== * mwversion: `1.39.0-wmf.28` * reqId: `657d3a1c-c86a-473c-a424-8971ff19b8f9` * [[ https://logstash.wikimedia.org/app/dashboards#/view/AXFV7JE83bOlOASGccsT?_g=(time:(from:'2022-09-14T15:36:51.000Z',to:'2022-09-15T15:39:42.809Z'))&_a=(query:(query_string:(query:'reqId:%22657d3a1c-c86a-473c-a424-8971ff19b8f9%22'))) | Find reqId in Logstash ]] ```name=normalized_message [{reqId}] {exception_url} TypeError: Argument 1 passed to JsonConfig\JCDataContent::getLocalizedData() must be an instance of Language, instance of StubUserLang given, called in /srv/mediawiki/php-1.39.0-wmf.28/extensions/JsonConfig/includes/JCLuaLibrar ``` ```name=exception.trace,lines=10 from /srv/mediawiki/php-1.39.0-wmf.28/extensions/JsonConfig/includes/JCDataContent.php(52) #0 /srv/mediawiki/php-1.39.0-wmf.28/extensions/JsonConfig/includes/JCLuaLibrary.php(79): JsonConfig\JCDataContent->getLocalizedData(StubUserLang) #1 /srv/mediawiki/php-1.39.0-wmf.28/extensions/Scribunto/includes/engines/LuaSandbox/LuaSandboxCallback.php(31): JsonConfig\JCLuaLibrary->get(string, NULL) #2 [internal function]: MediaWiki\Extension\Scribunto\Engines\LuaSandbox\LuaSandboxCallback->__call(string, array) #3 /srv/mediawiki/php-1.39.0-wmf.28/extensions/Scribunto/includes/engines/LuaSandbox/LuaSandboxInterpreter.php(127): LuaSandboxFunction->call(LuaSandboxFunction) #4 /srv/mediawiki/php-1.39.0-wmf.28/extensions/Scribunto/includes/engines/LuaCommon/LuaEngine.php(302): MediaWiki\Extension\Scribunto\Engines\LuaSandbox\LuaSandboxInterpreter->callFunction(LuaSandboxFunction, LuaSandboxFunction) #5 /srv/mediawiki/php-1.39.0-wmf.28/extensions/Scribunto/includes/engines/LuaCommon/LuaModule.php(71): Scribunto_LuaEngine->executeFunctionChunk(LuaSandboxFunction, PPTemplateFrame_Hash) #6 /srv/mediawiki/php-1.39.0-wmf.28/extensions/Scribunto/includes/Hooks.php(146): Scribunto_LuaModule->invoke(string, PPTemplateFrame_Hash) #7 /srv/mediawiki/php-1.39.0-wmf.28/includes/parser/Parser.php(3442): MediaWiki\Extension\Scribunto\Hooks::invokeHook(Parser, PPTemplateFrame_Hash, array) #8 /srv/mediawiki/php-1.39.0-wmf.28/includes/parser/Parser.php(3125): Parser->callParserFunction(PPTemplateFrame_Hash, string, array) #9 /srv/mediawiki/php-1.39.0-wmf.28/includes/parser/PPFrame_Hash.php(276): Parser->braceSubstitution(array, PPTemplateFrame_Hash) #10 /srv/mediawiki/php-1.39.0-wmf.28/includes/parser/Parser.php(3033): PPFrame_Hash->expand(PPNode_Hash_Tree) #11 /srv/mediawiki/php-1.39.0-wmf.28/includes/parser/PPFrame_Hash.php(276): Parser->braceSubstitution(array, PPTemplateFrame_Hash) #12 /srv/mediawiki/php-1.39.0-wmf.28/includes/parser/Parser.php(3316): PPFrame_Hash->expand(PPNode_Hash_Tree) #13 /srv/mediawiki/php-1.39.0-wmf.28/includes/parser/PPFrame_Hash.php(276): Parser->braceSubstitution(array, PPFrame_Hash) #14 /srv/mediawiki/php-1.39.0-wmf.28/includes/parser/Parser.php(2954): PPFrame_Hash->expand(PPNode_Hash_Tree, integer) #15 /srv/mediawiki/php-1.39.0-wmf.28/includes/parser/Parser.php(1609): Parser->replaceVariables(string) #16 /srv/mediawiki/php-1.39.0-wmf.28/includes/parser/Parser.php(881): Parser->internalParse(string, boolean, boolean) #17 /srv/mediawiki/php-1.39.0-wmf.28/extensions/Cite/src/ReferencesFormatter.php(73): Parser->recursiveTagParse(string) #18 /srv/mediawiki/php-1.39.0-wmf.28/extensions/Cite/src/Cite.php(499): Cite\ReferencesFormatter->formatReferences(Parser, array, boolean, boolean) #19 /srv/mediawiki/php-1.39.0-wmf.28/extensions/Cite/src/Cite.php(471): Cite\Cite->formatReferences(Parser, string, NULL) #20 /srv/mediawiki/php-1.39.0-wmf.28/extensions/Cite/src/Cite.php(418): Cite\Cite->guardedReferences(Parser, NULL, array) #21 /srv/mediawiki/php-1.39.0-wmf.28/extensions/Cite/src/Hooks/CiteParserTagHooks.php(72): Cite\Cite->references(Parser, NULL, array) #22 /srv/mediawiki/php-1.39.0-wmf.28/includes/parser/Parser.php(4022): Cite\Hooks\CiteParserTagHooks::references(NULL, array, Parser, PPFrame_Hash) #23 /srv/mediawiki/php-1.39.0-wmf.28/includes/parser/PPFrame_Hash.php(354): Parser->extensionSubstitution(array, PPFrame_Hash, boolean) #24 /srv/mediawiki/php-1.39.0-wmf.28/includes/parser/Parser.php(2954): PPFrame_Hash->expand(PPNode_Hash_Tree, integer) #25 /srv/mediawiki/php-1.39.0-wmf.28/includes/parser/Parser.php(1609): Parser->replaceVariables(string) #26 /srv/mediawiki/php-1.39.0-wmf.28/includes/parser/Parser.php(723): Parser->internalParse(string) #27 /srv/mediawiki/php-1.39.0-wmf.28/includes/specials/SpecialExpandTemplates.php(242): Parser->parse(string, Title, ParserOptions) #28 /srv/mediawiki/php-1.39.0-wmf.28/includes/specials/SpecialExpandTemplates.php(128): SpecialExpandTemplates->generateHtml(Title, string) #29 /srv/mediawiki/php-1.39.0-wmf.28/includes/specialpage/SpecialPage.php(701): SpecialExpandTemplates->execute(NULL) #30 /srv/mediawiki/php-1.39.0-wmf.28/includes/specialpage/SpecialPageFactory.php(1428): SpecialPage->run(NULL) #31 /srv/mediawiki/php-1.39.0-wmf.28/includes/MediaWiki.php(316): MediaWiki\SpecialPage\SpecialPageFactory->executePath(string, RequestContext) #32 /srv/mediawiki/php-1.39.0-wmf.28/includes/MediaWiki.php(904): MediaWiki->performRequest() #33 /srv/mediawiki/php-1.39.0-wmf.28/includes/MediaWiki.php(562): MediaWiki->main() #34 /srv/mediawiki/php-1.39.0-wmf.28/index.php(50): MediaWiki->run() #35 /srv/mediawiki/php-1.39.0-wmf.28/index.php(46): wfIndexMain() #36 /srv/mediawiki/w/index.php(3): require(string) #37 {main} ``` ==== Notes ==== * two occurrences in the past 7 days * both dewiki
    • Task
    Special:Contributions, Special:DeletedContributions, Special:NewPages, and some other special pages allow to show results either in all namespaces, or in one of the namespaces enabled, or (using Invert selection) in all namespaces except the selected one. But it might be sometimes needed to view the user's contribs, for example, in all talk namespaces. Instead of a dropdown box, introduce checkboxes for namespaces. According to [[ https://www.mediawiki.org/wiki/Edit_Review_Improvements/New_filters_for_edit_review | New Filters for Edit Review ]] (if enabled), on pages like Recent Changes, Watchlist and Related Changes, you can select multiple namespaces to search by.
    • Task
    Current problem https://commons.wikimedia.org/wiki/Special:NewFiles All media types are selected by default. If I want some specific types, I have to de-select unwanted types one by one. Feature request Add an "Inverse select" button. With that button, I can deselect everything at once. Or I could deselect my wanted types (e.g. Videos and Audio), then I "inverse select", then only my wanted types would be selected.
    • Task
    **Steps to replicate the issue** (include links if applicable): * Open Special:ListUsers * Enter a username * Select "Sort by creation date" * Click "Show" Example link, on prod enwiki: https://en.wikipedia.org/wiki/Special:ListUsers?username=Purple+haze&group=&creationSort=1&wpsubmit=&wpFormIdentifier=mw-listusers-form&limit=50 **What happens?**: A list of users sorted by creation date, starting from the oldest account. **What should have happened instead?**: A list of users sorted by creation date, starting from the user specified **Software version** (skip for WMF-hosted wikis like Wikipedia): -- **Other information** (browser name/version, screenshots, etc.): backend, replicates anywhere
    • Task
    Prior moving extensions to using HookHandlers, when `$wgSpecialVersionShowHooks = true` you get a table of all registered hooks. When you move them to HookHandlers, you don't. It would be possible to work out that it's the function on the interface on the end of the specified class... Which would probably require reflection to get this done... Maybe we should just deprecate (and remove?) this functionality?
    • Task
    **Steps to replicate the issue** (include links if applicable): Load the system messages for the the language `no`: https://no.wikipedia.org/wiki/Special:AllMessages?filter=modified&lang=no **What happens?**: It shows the system messages in `nb` instead of `no`. Although there is a system message in language `no`: https://no.wikipedia.org/wiki/MediaWiki:Maintenance-all-question-title/no **What should have happened instead?**: It should show the system messages in the selected language code, even if this is a dummy or a deprecated language code. This allows to detect messages in deprecated language codes.
    • Task
    IndexPager assumes that offsets from the querystring are always strings and treats them as such when building the query, see [[https://gerrit.wikimedia.org/g/mediawiki/core/+/84aeadd3c7796da7104d58f8e1e94ace5efe35e2/includes/pager/IndexPager.php#497 | code ]]. This works just fine with MySQL, but not with SQLite. If the //thing// that those values are compared to is not a string, the comparison will evaluate to false in SQLite because the operands have different types. This leads to issues such as T312054, where the query is something like: ```lang=sql select * from (select count(*) as n from foo) tmp where n = X ``` `X` is the value from the querystring, and since it is a string, the comparison will always be false, see [[http://sqlfiddle.com/#!7/28afb/2 | this snippet ]]. In principle, I can think of 3 places where this could be fixed: - In the subclass, casting the first operand (the one that is not from the querystring) to the appropriate value. This looks wrong though, especially in cases like the example above where we'd be casting the result of `count()` to string, whereas the conversion should be the other way around. - In IndexPager. Note that you have no way to determine the intended type for a value from the querystring; for instance, timestamps are numeric but they are stored as strings in the database. - At the database level. Unfortunately, I don't think this is possible in SQLite, because that's just the way it works. Newer versions have a strict type (see T289521), but I don't think it would enable autocasts in comparisons. So I would propose adding a new method to IndexPager, e.g., ```lang=php protected function processQueryOffsets( array &$offsets ): void { // The default implementation does nothing, subclasses should override the method. } ``` that is called after the [[https://gerrit.wikimedia.org/g/mediawiki/core/+/84aeadd3c7796da7104d58f8e1e94ace5efe35e2/includes/pager/IndexPager.php#497 | explode() ]] and is passed an array of `offset_name => offset_value_from_querystring`. Each subclass should know the intended type of each offset and could cast it accordingly. Alternatives are welcome, too.
    • Task
    • ·Closed
    Note two very similar stack traces when visiting Special:MergeHistories ``` ( ! ) Deprecated: htmlspecialchars(): Passing null to parameter #1 ($string) of type string is deprecated in /var/www/wiki/mediawiki/core/includes/parser/Sanitizer.php on line 858 Call Stack # Time Memory Function Location 1 0.0001 365304 {main}( ) .../index.php:0 2 0.0391 4029800 wfIndexMain( ) .../index.php:46 3 0.0391 4029912 MediaWiki->run( ) .../index.php:50 4 0.0391 4029912 MediaWiki->main( ) .../MediaWiki.php:568 5 0.0395 4047208 MediaWiki->performRequest( ) .../MediaWiki.php:911 6 0.0525 4695976 MediaWiki\SpecialPage\SpecialPageFactory->executePath( $path = class Title { private $mTextform = 'MergeHistory'; private $mUrlform = 'MergeHistory'; private $mDbkeyform = 'MergeHistory'; private $mNamespace = -1; private $mInterwiki = ''; private $mLocalInterwiki = FALSE; private $mFragment = ''; public $mArticleID = 0; protected $mLatestID = FALSE; private $mContentModel = FALSE; private $mForcedContentModel = FALSE; private $mEstimateRevisions = NULL; public $prefixedText = NULL; protected $mLength = -1; public $mRedirect = NULL; private $mHasSubpages = NULL; private $mPageLanguage = NULL; private $mDbPageLanguage = FALSE; private $mTitleValue = NULL; private $mIsBigDeletion = NULL; private $mIsValid = TRUE; private $mInstanceCacheKey = NULL; protected $deprecatedPublicProperties = ['mTextform' => [...], 'mUrlform' => [...], 'mDbkeyform' => [...], 'mNamespace' => [...], 'mInterwiki' => [...], 'mFragment' => [...]]; private $dynamicPropertiesAccessDeprecated = FALSE }, $context = class RequestContext { private $request = class WebRequest { protected $data = [...]; protected $queryAndPathParams = [...]; protected $queryParams = [...]; protected $headers = [...]; private $response = class WebResponse { ... }; private $ip = '10.13.37.22'; protected $requestTime = 1659578744.4126; protected $protocol = 'https'; protected $sessionId = class MediaWiki\Session\SessionId { ... }; protected $markedAsSafe = FALSE }; private $title = class Title { private $mTextform = 'MergeHistory'; private $mUrlform = 'MergeHistory'; private $mDbkeyform = 'MergeHistory'; private $mNamespace = -1; private $mInterwiki = ''; private $mLocalInterwiki = FALSE; private $mFragment = ''; public $mArticleID = 0; protected $mLatestID = FALSE; private $mContentModel = FALSE; private $mForcedContentModel = FALSE; private $mEstimateRevisions = NULL; public $prefixedText = 'Special:MergeHistory'; protected $mLength = -1; public $mRedirect = NULL; private $mHasSubpages = NULL; private $mPageLanguage = NULL; private $mDbPageLanguage = FALSE; private $mTitleValue = NULL; private $mIsBigDeletion = NULL; private $mIsValid = NULL; private $mInstanceCacheKey = NULL; protected $deprecatedPublicProperties = [...]; private $dynamicPropertiesAccessDeprecated = FALSE }; private $wikipage = NULL; private $action = NULL; private $output = class OutputPage { private ${ContextSource}context = ...; protected $mMetatags = [...]; protected $mLinktags = [...]; protected $mCanonicalUrl = FALSE; private $mPageTitle = 'Merge page histories'; private $displayTitle = NULL; private $cacheIsFinal = FALSE; public $mBodytext = '<p>This page lets you merge revisions of the history of one source page into a newer page.\nMake sure that this change will maintain historical page continuity.\n</p>'; private $mHTMLtitle = 'Merge page histories - ReedyDevWiki'; private $mIsArticle = FALSE; private $mIsArticleRelated = FALSE; private $mHasCopyright = FALSE; private $mPrintable = FALSE; private $mSections = [...]; private $mSubtitle = [...]; public $mRedirect = ''; protected $mStatusCode = NULL; protected $mLastModified = ''; protected $mCategoryLinks = [...]; protected $mCategories = [...]; protected $mIndicators = [...]; private $mLanguageLinks = [...]; private $mScripts = ''; protected $mInlineStyles = ''; public $mPageLinkTitle = ''; protected $mAdditionalHtmlClasses = [...]; protected $mHeadItems = [...]; protected $mAdditionalBodyClasses = [...]; protected $mModules = [...]; protected $mModuleStyles = [...]; protected $mResourceLoader = NULL; private $rlClient = NULL; private $rlClientContext = NULL; private $rlExemptStyleModules = NULL; protected $mJsConfigVars = [...]; protected $mTemplateIds = [...]; protected $mImageTimeKeys = [...]; public $mRedirectCode = ''; protected $mFeedLinksAppendQuery = NULL; protected $mAllowedModules = [...]; protected $mDoNothing = FALSE; protected $mParserOptions = NULL; private $mFeedLinks = [...]; protected $mEnableClientCache = TRUE; private $mArticleBodyOnly = FALSE; protected $mNewSectionLink = FALSE; protected $mHideNewSectionLink = FALSE; public $mNoGallery = FALSE; protected $mCdnMaxage = 0; protected $mCdnMaxageLimit = INF; protected $mPreventClickjacking = TRUE; private $mRevisionId = NULL; private $mRevisionTimestamp = NULL; protected $mFileVersion = NULL; protected $styles = [...]; private $mIndexPolicy = 'noindex'; private $mFollowPolicy = 'nofollow'; private $mRobotsOptions = [...]; private $mVaryHeader = [...]; private $mRedirectedFrom = NULL; private $mProperties = [...]; private $mTarget = NULL; private $mEnableTOC = FALSE; private $copyrightUrl = NULL; private $limitReportJSData = [...]; private $contentOverrides = [...]; private $contentOverrideCallbacks = [...]; private $mLinkHeader = [...]; private $CSP = class ContentSecurityPolicy { ... } }; private $user = class User { public $mId = 1; public $mName = 'Reedy'; public $mActorId = 1; public $mRealName = 'Sam'; public $mEmail = 'sam@reedyboy.net'; public $mTouched = '20220716173926'; protected $mQuickTouched = NULL; protected $mToken = 'a47668ca62955a1c7c36284542d16f8d'; public $mEmailAuthenticated = '20220708234337'; protected $mEmailToken = '\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000'; protected $mEmailTokenExpires = NULL; protected $mRegistration = '20110131194049'; protected $mLoadedItems = TRUE; public $mFrom = 'session'; protected $mDatePreference = NULL; private $mBlockedby = -1; protected $mHash = FALSE; protected $mBlockreason = NULL; protected $mGlobalBlock = NULL; protected $mLocked = NULL; private $mHideName = NULL; private $mRequest = class WebRequest { ... }; private $mBlock = NULL; private $mBlockedFromCreateAccount = FALSE; protected $queryFlagsUsed = 0; private $mThisAsAuthority = class MediaWiki\Permissions\UserAuthority { ... }; private $isTemp = NULL }; private $authority = NULL; private $lang = class Language { public $mCode = 'en-gb'; public $mMagicExtensions = [...]; private $mHtmlCode = NULL; public $dateFormatStrings = [...]; public $mExtendedSpecialPageAliases = [...]; protected $namespaceNames = [...]; protected $mNamespaceIds = NULL; protected $namespaceAliases = NULL; private $transformData = [...]; private $namespaceInfo = class NamespaceInfo { ... }; private $localisationCache = class LocalisationCache { ... }; private $langNameUtils = class MediaWiki\Languages\LanguageNameUtils { ... }; private $langFallback = class MediaWiki\Languages\LanguageFallback { ... }; private $grammarTransformCache = NULL; private $converterFactory = class MediaWiki\Languages\LanguageConverterFactory { ... }; private $hookContainer = class MediaWiki\HookContainer\HookContainer { ... }; private $hookRunner = class MediaWiki\HookContainer\HookRunner { ... }; private $config = class GlobalVarConfig { ... } }; private $skin = class MediaWiki\Skins\Vector\SkinVectorLegacy { private ${ContextSource}context = ...; private ${Skin}defaultLinkOptions = [...]; protected $skinname = 'vector'; protected $options = [...]; protected $mRelevantTitle = NULL; private ${Skin}mRelevantUser = FALSE; private ${Skin}languageLinks = NULL; private ${Skin}sidebar = NULL; private ${Skin}componentRegistry = class MediaWiki\Skin\SkinComponentRegistry { ... }; public $template = NULL; public $thispage = NULL; public $titletxt = NULL; public $userpage = NULL; public $thisquery = NULL; public $loggedin = NULL; public $username = NULL; public $userpageUrlDetails = NULL; private ${SkinTemplate}isTempUser = NULL; private ${SkinTemplate}isNamedUser = NULL; private ${SkinTemplate}templateContextSet = FALSE; private ${SkinTemplate}contentNavigationCached = NULL; private ${SkinMustache}templateParser = NULL; private ${MediaWiki\Skins\Vector\SkinVector}languages = NULL }; private $timing = NULL; private $config = class GlobalVarConfig { private $prefix = 'wg' }; private $languageRecursion = FALSE }, $including = ???, $linkRenderer = ??? ) .../MediaWiki.php:316 7 0.0526 4700072 SpecialPage->run( $subPage = NULL ) .../SpecialPageFactory.php:1423 8 0.0596 4817664 SpecialMergeHistory->execute( $par = NULL ) .../SpecialPage.php:690 9 0.0761 6475160 SpecialMergeHistory->showMergeForm( ) .../SpecialMergeHistory.php:157 10 0.0790 6570448 Xml::input( $name = 'target', $size = 30, $value = NULL, $attribs = ['id' => 'target'] ) .../SpecialMergeHistory.php:208 11 0.0790 6571200 Xml::element( $element = 'input', $attribs = ['name' => 'target', 'size' => 30, 'value' => NULL, 'id' => 'target'], $contents = ???, $allowShortTag = ??? ) .../Xml.php:295 12 0.0790 6571232 Xml::expandAttributes( $attribs = ['name' => 'target', 'size' => 30, 'value' => NULL, 'id' => 'target'] ) .../Xml.php:48 13 0.0790 6571328 Sanitizer::encodeAttribute( $text = NULL ) .../Xml.php:75 14 0.0790 6571328 htmlspecialchars( $string = NULL, $flags = 3 ) .../Sanitizer.php:858 ( ! ) Deprecated: htmlspecialchars(): Passing null to parameter #1 ($string) of type string is deprecated in /var/www/wiki/mediawiki/core/includes/parser/Sanitizer.php on line 858 Call Stack # Time Memory Function Location 1 0.0001 365304 {main}( ) .../index.php:0 2 0.0391 4029800 wfIndexMain( ) .../index.php:46 3 0.0391 4029912 MediaWiki->run( ) .../index.php:50 4 0.0391 4029912 MediaWiki->main( ) .../MediaWiki.php:568 5 0.0395 4047208 MediaWiki->performRequest( ) .../MediaWiki.php:911 6 0.0525 4695976 MediaWiki\SpecialPage\SpecialPageFactory->executePath( $path = class Title { private $mTextform = 'MergeHistory'; private $mUrlform = 'MergeHistory'; private $mDbkeyform = 'MergeHistory'; private $mNamespace = -1; private $mInterwiki = ''; private $mLocalInterwiki = FALSE; private $mFragment = ''; public $mArticleID = 0; protected $mLatestID = FALSE; private $mContentModel = FALSE; private $mForcedContentModel = FALSE; private $mEstimateRevisions = NULL; public $prefixedText = NULL; protected $mLength = -1; public $mRedirect = NULL; private $mHasSubpages = NULL; private $mPageLanguage = NULL; private $mDbPageLanguage = FALSE; private $mTitleValue = NULL; private $mIsBigDeletion = NULL; private $mIsValid = TRUE; private $mInstanceCacheKey = NULL; protected $deprecatedPublicProperties = ['mTextform' => [...], 'mUrlform' => [...], 'mDbkeyform' => [...], 'mNamespace' => [...], 'mInterwiki' => [...], 'mFragment' => [...]]; private $dynamicPropertiesAccessDeprecated = FALSE }, $context = class RequestContext { private $request = class WebRequest { protected $data = [...]; protected $queryAndPathParams = [...]; protected $queryParams = [...]; protected $headers = [...]; private $response = class WebResponse { ... }; private $ip = '10.13.37.22'; protected $requestTime = 1659578744.4126; protected $protocol = 'https'; protected $sessionId = class MediaWiki\Session\SessionId { ... }; protected $markedAsSafe = FALSE }; private $title = class Title { private $mTextform = 'MergeHistory'; private $mUrlform = 'MergeHistory'; private $mDbkeyform = 'MergeHistory'; private $mNamespace = -1; private $mInterwiki = ''; private $mLocalInterwiki = FALSE; private $mFragment = ''; public $mArticleID = 0; protected $mLatestID = FALSE; private $mContentModel = FALSE; private $mForcedContentModel = FALSE; private $mEstimateRevisions = NULL; public $prefixedText = 'Special:MergeHistory'; protected $mLength = -1; public $mRedirect = NULL; private $mHasSubpages = NULL; private $mPageLanguage = NULL; private $mDbPageLanguage = FALSE; private $mTitleValue = NULL; private $mIsBigDeletion = NULL; private $mIsValid = NULL; private $mInstanceCacheKey = NULL; protected $deprecatedPublicProperties = [...]; private $dynamicPropertiesAccessDeprecated = FALSE }; private $wikipage = NULL; private $action = NULL; private $output = class OutputPage { private ${ContextSource}context = ...; protected $mMetatags = [...]; protected $mLinktags = [...]; protected $mCanonicalUrl = FALSE; private $mPageTitle = 'Merge page histories'; private $displayTitle = NULL; private $cacheIsFinal = FALSE; public $mBodytext = '<p>This page lets you merge revisions of the history of one source page into a newer page.\nMake sure that this change will maintain historical page continuity.\n</p>'; private $mHTMLtitle = 'Merge page histories - ReedyDevWiki'; private $mIsArticle = FALSE; private $mIsArticleRelated = FALSE; private $mHasCopyright = FALSE; private $mPrintable = FALSE; private $mSections = [...]; private $mSubtitle = [...]; public $mRedirect = ''; protected $mStatusCode = NULL; protected $mLastModified = ''; protected $mCategoryLinks = [...]; protected $mCategories = [...]; protected $mIndicators = [...]; private $mLanguageLinks = [...]; private $mScripts = ''; protected $mInlineStyles = ''; public $mPageLinkTitle = ''; protected $mAdditionalHtmlClasses = [...]; protected $mHeadItems = [...]; protected $mAdditionalBodyClasses = [...]; protected $mModules = [...]; protected $mModuleStyles = [...]; protected $mResourceLoader = NULL; private $rlClient = NULL; private $rlClientContext = NULL; private $rlExemptStyleModules = NULL; protected $mJsConfigVars = [...]; protected $mTemplateIds = [...]; protected $mImageTimeKeys = [...]; public $mRedirectCode = ''; protected $mFeedLinksAppendQuery = NULL; protected $mAllowedModules = [...]; protected $mDoNothing = FALSE; protected $mParserOptions = NULL; private $mFeedLinks = [...]; protected $mEnableClientCache = TRUE; private $mArticleBodyOnly = FALSE; protected $mNewSectionLink = FALSE; protected $mHideNewSectionLink = FALSE; public $mNoGallery = FALSE; protected $mCdnMaxage = 0; protected $mCdnMaxageLimit = INF; protected $mPreventClickjacking = TRUE; private $mRevisionId = NULL; private $mRevisionTimestamp = NULL; protected $mFileVersion = NULL; protected $styles = [...]; private $mIndexPolicy = 'noindex'; private $mFollowPolicy = 'nofollow'; private $mRobotsOptions = [...]; private $mVaryHeader = [...]; private $mRedirectedFrom = NULL; private $mProperties = [...]; private $mTarget = NULL; private $mEnableTOC = FALSE; private $copyrightUrl = NULL; private $limitReportJSData = [...]; private $contentOverrides = [...]; private $contentOverrideCallbacks = [...]; private $mLinkHeader = [...]; private $CSP = class ContentSecurityPolicy { ... } }; private $user = class User { public $mId = 1; public $mName = 'Reedy'; public $mActorId = 1; public $mRealName = 'Sam'; public $mEmail = 'sam@reedyboy.net'; public $mTouched = '20220716173926'; protected $mQuickTouched = NULL; protected $mToken = 'a47668ca62955a1c7c36284542d16f8d'; public $mEmailAuthenticated = '20220708234337'; protected $mEmailToken = '\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000'; protected $mEmailTokenExpires = NULL; protected $mRegistration = '20110131194049'; protected $mLoadedItems = TRUE; public $mFrom = 'session'; protected $mDatePreference = NULL; private $mBlockedby = -1; protected $mHash = FALSE; protected $mBlockreason = NULL; protected $mGlobalBlock = NULL; protected $mLocked = NULL; private $mHideName = NULL; private $mRequest = class WebRequest { ... }; private $mBlock = NULL; private $mBlockedFromCreateAccount = FALSE; protected $queryFlagsUsed = 0; private $mThisAsAuthority = class MediaWiki\Permissions\UserAuthority { ... }; private $isTemp = NULL }; private $authority = NULL; private $lang = class Language { public $mCode = 'en-gb'; public $mMagicExtensions = [...]; private $mHtmlCode = NULL; public $dateFormatStrings = [...]; public $mExtendedSpecialPageAliases = [...]; protected $namespaceNames = [...]; protected $mNamespaceIds = NULL; protected $namespaceAliases = NULL; private $transformData = [...]; private $namespaceInfo = class NamespaceInfo { ... }; private $localisationCache = class LocalisationCache { ... }; private $langNameUtils = class MediaWiki\Languages\LanguageNameUtils { ... }; private $langFallback = class MediaWiki\Languages\LanguageFallback { ... }; private $grammarTransformCache = NULL; private $converterFactory = class MediaWiki\Languages\LanguageConverterFactory { ... }; private $hookContainer = class MediaWiki\HookContainer\HookContainer { ... }; private $hookRunner = class MediaWiki\HookContainer\HookRunner { ... }; private $config = class GlobalVarConfig { ... } }; private $skin = class MediaWiki\Skins\Vector\SkinVectorLegacy { private ${ContextSource}context = ...; private ${Skin}defaultLinkOptions = [...]; protected $skinname = 'vector'; protected $options = [...]; protected $mRelevantTitle = NULL; private ${Skin}mRelevantUser = FALSE; private ${Skin}languageLinks = NULL; private ${Skin}sidebar = NULL; private ${Skin}componentRegistry = class MediaWiki\Skin\SkinComponentRegistry { ... }; public $template = NULL; public $thispage = NULL; public $titletxt = NULL; public $userpage = NULL; public $thisquery = NULL; public $loggedin = NULL; public $username = NULL; public $userpageUrlDetails = NULL; private ${SkinTemplate}isTempUser = NULL; private ${SkinTemplate}isNamedUser = NULL; private ${SkinTemplate}templateContextSet = FALSE; private ${SkinTemplate}contentNavigationCached = NULL; private ${SkinMustache}templateParser = NULL; private ${MediaWiki\Skins\Vector\SkinVector}languages = NULL }; private $timing = NULL; private $config = class GlobalVarConfig { private $prefix = 'wg' }; private $languageRecursion = FALSE }, $including = ???, $linkRenderer = ??? ) .../MediaWiki.php:316 7 0.0526 4700072 SpecialPage->run( $subPage = NULL ) .../SpecialPageFactory.php:1423 8 0.0596 4817664 SpecialMergeHistory->execute( $par = NULL ) .../SpecialPage.php:690 9 0.0761 6475160 SpecialMergeHistory->showMergeForm( ) .../SpecialMergeHistory.php:157 10 0.0796 6575040 Xml::input( $name = 'dest', $size = 30, $value = NULL, $attribs = ['id' => 'dest'] ) .../SpecialMergeHistory.php:211 11 0.0797 6575792 Xml::element( $element = 'input', $attribs = ['name' => 'dest', 'size' => 30, 'value' => NULL, 'id' => 'dest'], $contents = ???, $allowShortTag = ??? ) .../Xml.php:295 12 0.0797 6575824 Xml::expandAttributes( $attribs = ['name' => 'dest', 'size' => 30, 'value' => NULL, 'id' => 'dest'] ) .../Xml.php:48 13 0.0797 6575912 Sanitizer::encodeAttribute( $text = NULL ) .../Xml.php:75 14 0.0797 6575912 htmlspecialchars( $string = NULL, $flags = 3 ) .../Sanitizer.php:858 ```
    • Task
    • ·Closed
    ``` ( ! ) Deprecated: preg_match(): Passing null to parameter #2 ($subject) of type string is deprecated in /var/www/wiki/mediawiki/core/includes/specials/SpecialMergeHistory.php on line 121 Call Stack # Time Memory Function Location 1 0.0001 365304 {main}( ) .../index.php:0 2 0.0391 4029800 wfIndexMain( ) .../index.php:46 3 0.0391 4029912 MediaWiki->run( ) .../index.php:50 4 0.0391 4029912 MediaWiki->main( ) .../MediaWiki.php:568 5 0.0395 4047208 MediaWiki->performRequest( ) .../MediaWiki.php:911 6 0.0525 4695976 MediaWiki\SpecialPage\SpecialPageFactory->executePath( $path = class Title { private $mTextform = 'MergeHistory'; private $mUrlform = 'MergeHistory'; private $mDbkeyform = 'MergeHistory'; private $mNamespace = -1; private $mInterwiki = ''; private $mLocalInterwiki = FALSE; private $mFragment = ''; public $mArticleID = 0; protected $mLatestID = FALSE; private $mContentModel = FALSE; private $mForcedContentModel = FALSE; private $mEstimateRevisions = NULL; public $prefixedText = NULL; protected $mLength = -1; public $mRedirect = NULL; private $mHasSubpages = NULL; private $mPageLanguage = NULL; private $mDbPageLanguage = FALSE; private $mTitleValue = NULL; private $mIsBigDeletion = NULL; private $mIsValid = TRUE; private $mInstanceCacheKey = NULL; protected $deprecatedPublicProperties = ['mTextform' => [...], 'mUrlform' => [...], 'mDbkeyform' => [...], 'mNamespace' => [...], 'mInterwiki' => [...], 'mFragment' => [...]]; private $dynamicPropertiesAccessDeprecated = FALSE }, $context = class RequestContext { private $request = class WebRequest { protected $data = [...]; protected $queryAndPathParams = [...]; protected $queryParams = [...]; protected $headers = [...]; private $response = class WebResponse { ... }; private $ip = '10.13.37.22'; protected $requestTime = 1659578744.4126; protected $protocol = 'https'; protected $sessionId = class MediaWiki\Session\SessionId { ... }; protected $markedAsSafe = FALSE }; private $title = class Title { private $mTextform = 'MergeHistory'; private $mUrlform = 'MergeHistory'; private $mDbkeyform = 'MergeHistory'; private $mNamespace = -1; private $mInterwiki = ''; private $mLocalInterwiki = FALSE; private $mFragment = ''; public $mArticleID = 0; protected $mLatestID = FALSE; private $mContentModel = FALSE; private $mForcedContentModel = FALSE; private $mEstimateRevisions = NULL; public $prefixedText = NULL; protected $mLength = -1; public $mRedirect = NULL; private $mHasSubpages = NULL; private $mPageLanguage = NULL; private $mDbPageLanguage = FALSE; private $mTitleValue = NULL; private $mIsBigDeletion = NULL; private $mIsValid = NULL; private $mInstanceCacheKey = NULL; protected $deprecatedPublicProperties = [...]; private $dynamicPropertiesAccessDeprecated = FALSE }; private $wikipage = NULL; private $action = NULL; private $output = class OutputPage { private ${ContextSource}context = ...; protected $mMetatags = [...]; protected $mLinktags = [...]; protected $mCanonicalUrl = FALSE; private $mPageTitle = ''; private $displayTitle = NULL; private $cacheIsFinal = FALSE; public $mBodytext = ''; private $mHTMLtitle = ''; private $mIsArticle = FALSE; private $mIsArticleRelated = TRUE; private $mHasCopyright = FALSE; private $mPrintable = FALSE; private $mSections = [...]; private $mSubtitle = [...]; public $mRedirect = ''; protected $mStatusCode = NULL; protected $mLastModified = ''; protected $mCategoryLinks = [...]; protected $mCategories = [...]; protected $mIndicators = [...]; private $mLanguageLinks = [...]; private $mScripts = ''; protected $mInlineStyles = ''; public $mPageLinkTitle = ''; protected $mAdditionalHtmlClasses = [...]; protected $mHeadItems = [...]; protected $mAdditionalBodyClasses = [...]; protected $mModules = [...]; protected $mModuleStyles = [...]; protected $mResourceLoader = NULL; private $rlClient = NULL; private $rlClientContext = NULL; private $rlExemptStyleModules = NULL; protected $mJsConfigVars = [...]; protected $mTemplateIds = [...]; protected $mImageTimeKeys = [...]; public $mRedirectCode = ''; protected $mFeedLinksAppendQuery = NULL; protected $mAllowedModules = [...]; protected $mDoNothing = FALSE; protected $mParserOptions = NULL; private $mFeedLinks = [...]; protected $mEnableClientCache = TRUE; private $mArticleBodyOnly = FALSE; protected $mNewSectionLink = FALSE; protected $mHideNewSectionLink = FALSE; public $mNoGallery = FALSE; protected $mCdnMaxage = 0; protected $mCdnMaxageLimit = INF; protected $mPreventClickjacking = TRUE; private $mRevisionId = NULL; private $mRevisionTimestamp = NULL; protected $mFileVersion = NULL; protected $styles = [...]; private $mIndexPolicy = 'index'; private $mFollowPolicy = 'follow'; private $mRobotsOptions = [...]; private $mVaryHeader = [...]; private $mRedirectedFrom = NULL; private $mProperties = [...]; private $mTarget = NULL; private $mEnableTOC = FALSE; private $copyrightUrl = NULL; private $limitReportJSData = [...]; private $contentOverrides = [...]; private $contentOverrideCallbacks = [...]; private $mLinkHeader = [...]; private $CSP = class ContentSecurityPolicy { ... } }; private $user = class User { public $mId = 1; public $mName = 'Reedy'; public $mActorId = 1; public $mRealName = 'Sam'; public $mEmail = 'sam@reedyboy.net'; public $mTouched = '20220716173926'; protected $mQuickTouched = NULL; protected $mToken = 'a47668ca62955a1c7c36284542d16f8d'; public $mEmailAuthenticated = '20220708234337'; protected $mEmailToken = '\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000'; protected $mEmailTokenExpires = NULL; protected $mRegistration = '20110131194049'; protected $mLoadedItems = TRUE; public $mFrom = 'session'; protected $mDatePreference = NULL; private $mBlockedby = -1; protected $mHash = FALSE; protected $mBlockreason = NULL; protected $mGlobalBlock = NULL; protected $mLocked = NULL; private $mHideName = NULL; private $mRequest = class WebRequest { ... }; private $mBlock = NULL; private $mBlockedFromCreateAccount = FALSE; protected $queryFlagsUsed = 0; private $mThisAsAuthority = class MediaWiki\Permissions\UserAuthority { ... }; private $isTemp = NULL }; private $authority = NULL; private $lang = NULL; private $skin = class MediaWiki\Skins\Vector\SkinVectorLegacy { private ${ContextSource}context = ...; private ${Skin}defaultLinkOptions = [...]; protected $skinname = 'vector'; protected $options = [...]; protected $mRelevantTitle = NULL; private ${Skin}mRelevantUser = FALSE; private ${Skin}languageLinks = NULL; private ${Skin}sidebar = NULL; private ${Skin}componentRegistry = class MediaWiki\Skin\SkinComponentRegistry { ... }; public $template = NULL; public $thispage = NULL; public $titletxt = NULL; public $userpage = NULL; public $thisquery = NULL; public $loggedin = NULL; public $username = NULL; public $userpageUrlDetails = NULL; private ${SkinTemplate}isTempUser = NULL; private ${SkinTemplate}isNamedUser = NULL; private ${SkinTemplate}templateContextSet = FALSE; private ${SkinTemplate}contentNavigationCached = NULL; private ${SkinMustache}templateParser = NULL; private ${MediaWiki\Skins\Vector\SkinVector}languages = NULL }; private $timing = NULL; private $config = class GlobalVarConfig { private $prefix = 'wg' }; private $languageRecursion = FALSE }, $including = ???, $linkRenderer = ??? ) .../MediaWiki.php:316 7 0.0526 4700072 SpecialPage->run( $subPage = NULL ) .../SpecialPageFactory.php:1423 8 0.0596 4817664 SpecialMergeHistory->execute( $par = NULL ) .../SpecialPage.php:690 9 0.0606 4820824 SpecialMergeHistory->loadRequestParams( ) .../SpecialMergeHistory.php:145 10 0.0606 4820824 preg_match( $pattern = '/[0-9]{14}/', $subject = NULL ) .../SpecialMergeHistory.php:121 ```
    • Task
    • ·Closed
    1. https://en.wikipedia.org/w/index.php?title=Special:LinkSearch 2. Enter `https://php.net` 3. submit "Search". **Actual**: https://en.wikipedia.org/w/index.php?title=Special%3ALinkSearch&target=https%3A%2F%2Fphp.net&title=Special%3ALinkSearch {F35348972 height=200} **Expected**: https://en.wikipedia.org/w/index.php?title=Special:LinkSearch&target=https%3A%2F%2Fphp.net
    • Task
    For a few days now, some special pages have been displayed incorrectly in Vector-2022 (got the same mistake using Safari & Chrome) I first noticed at bug at https://de.wikipedia.org/wiki/Spezial:Logbuch/spamblacklist – for some reason there is no page break, instead you need to scroll to the right {F35335153} {F35335152} This can be replicated at other wikis, e.g. https://en.wikipedia.org/wiki/Special:Log?type=spamblacklist&user=&page=&wpdate=&tagfilter=&wpfilters%5B%5D=newusers {F35335230} Similar bug at https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=agg-Affiliates&language=de&filter=%21translated&action=translate {F35335169} {F35335168} {F35335167} Probably related: Some buttons at abuse filter are displaced as well https://de.wikipedia.org/wiki/Spezial:Missbrauchsfilter/6 {F35335174} **What should have happened instead?**: As far as I know, most pages and most special pages are displayed correctly (e.g. https://de.wikipedia.org/wiki/Spezial:Logbuch/newusers) {F35335144}
    • Task
    • ·Closed
    Use the ApiSandbox to make a `list` request with a `continue` param, //e.g.//: https://en.wikipedia.beta.wmflabs.org/wiki/Special:ApiSandbox#action=query&format=json&list=alllinks&allimit=5 Press "make request"; see that a reasonable set of data comes back with a `alcontinue` parameter set. Press "continue"; see that a new reasonable set of data comes back, with a new `alcontinue` parameter set. Press "continue"; see that you get a form entry error ("Some fields are invalid") rather than the data you wanted, and the contents of the form have been blanked. Additionally in the JS console I see: ``` VM208:411 Uncaught TypeError: Cannot read properties of null (reading 'data') at OoUiDropdownWidget.<anonymous> (<anonymous>:234:945) at OO.EventEmitter.emit (<anonymous>:411:656) at OO.ui.SelectWidget.selectItem (load.php?lang=en&modules=jquery%2Coojs-ui-core%2Coojs-ui-widgets%7Coojs-ui.styles.icons-editing-advanced&skin=vector&version=6pux1:241:165) at OoUiDropdownWidget.setApiValue (<anonymous>:226:228) at OoUiDropdownWidget.<anonymous> (<anonymous>:261:879) at Function.each (load.php?lang=en&modules=jquery%2Coojs-ui-core%2Coojs-ui-widgets%7Coojs-ui.styles.icons-editing-advanced&skin=vector&version=6pux1:5:356) at ApiSandbox.PageLayout.loadQueryParams (<anonymous>:261:753) at Object.updateUI (<anonymous>:239:841) at Object.sendRequest (<anonymous>:241:280) at <anonymous>:246:226 ```
    • Task
    • ·Closed
    **Feature summary** (what you would like to be able to do and where): Requesting we add "Namespace number" to the table/info that is generated when a user clicks "Page information" in the toolbox. This page is located at the article's URL + &action=info **Use case(s)** (list the steps that you performed to discover that problem, and describe the actual underlying problem which you want to solve. Do not describe only a solution): **Benefits** (why should this be implemented?): On my localhost wiki, I was checking the page information to get the Page ID to do some SQL database queries. I also need the namespace number. If someone is checking the Page ID, they likely need the namespace number, these two pieces of data go together. This would save me and other developers a step. Not sure what to tag this. It isn't technically a #Mediawiki-Special-pages. {F35327694}
    • Task
    • ·Closed
    Currently special pages render a single "Special" tab. This appears in all skins, but position varies based on skin. |{F35321980}|{F35321978}| Going forward to support the work in T286466 we would like to add SpecialPage::getSubpages. This method returns an array of sub pages that can be rendered by the skin in the UI. It works similar to `getSubpagesForPrefixSearch` but will usually be a subset of the pages returned by `getSubpagesForPrefixSearch` and in many cases will be an empty list. # Specification [x] The feature is opt in. Skins like Vector can continue to work as before [x] A new method SpecialPage::getRelatedNavigationLinks will be added to describe tabs. A page with no sub page will be described by an empty string. eg. `return ['Special:Watchlist', 'Special:Watchlist/raw'];` on Special:Watchlist would generate two tabs - one link to Special:Watchlist and one to Special:Watchlist/raw. An empty array will mean no tabs should be rendered. By default, the return value will be empty (e.g. no tabs) [x] A new method SpecialPage::getShortDescription will be added - this will allow special pages to define a label to describe the page that will be rendered as the text of the associated tab. By default it will use `subpagetab-<special page name>-<subpage>`. For example Special:Watchlist/raw would be described by `subpagetab-watchlist-raw`. It will be stable to override this to change the label. [x] A new menu will be made available to skins in Skin:: buildContentNavigationUrlsInternal called "associatedPages". This can be used instead of the existing namespace key, but also contain definitions for subpages. This ensures the change is backwards compatible. # Sign off steps [] It's important at least one of the special pages in core use this feature. We're targetting the Special:Contributions page as the first consumer (see T286466)
    • Task
    **Steps to replicate the issue** (include links if applicable): * Browse a wiki using a mobile device and choose desktop view * Go to for example https://en.wikipedia.org/wiki/Special:Log * Press the "All public logs" dropdown menu so that all log options are dropped down * Zoom in on all the logs or just scroll down the page **What happens?**: On enwiki: Zooming in or scrolling down, at first all text disappears but the borders of the dropdown window are still visable. So it's basically a big white square. Zooming in or scrolling down even more, the entire window with its borders is removed and you can now display what is behind it. On test2wiki: The first stage - the text being removed and just a big white square is displayed - didn't reproduce here. It looked find until this point. Zooming in or scrolling down even more however and it was the same problem as on enwiki, that is, the entire dropdown menu disappeared and you could see what's behind it. **What should have happened instead?**: Nothing except that the page is zoomed or scrolled down. **Software version** (skip for WMF-hosted wikis like Wikipedia): This was found using a mobile device with desktop view. Both the Safari and Chrome apps gave the same results. iOS on iPhone SE (2nd generation). Using a PC I couldn't reproduce this.
    • Task
    • ·Closed
    **Steps to replicate the issue** (include links if applicable): * Make sure PageTriage is installed * Make sure you are a new page patroller or admin * Find an unreviewed page * Page Curation toolbar will open * Click the trash can (deletion menu) * Choose any deletion option (CSD, PROD, AFD) * Click "Mark for deletion" **What happens?**: * Action is logged in two logs: Deletion tag log, and Page curation log **What should have happened instead?**: * Action should only be logged in Page curation log **Software version** (skip for WMF-hosted wikis like Wikipedia): **Other information** (browser name/version, screenshots, etc.): Split from T49891 I was originally thinking this was a wontfix, but I changed my mind. PageTriage writes exactly the same log entry to two logs: pagetriage-deletion/deletion, and pagetriage-curation/deletion. No other PageTriage actions write to two logs... other actions simply go into pagetriage-curation, which has 5 log_actions to choose from. I'm going to write a patch that stops writing to Deletion tag log, and also hides the Deletion tag log. I've advertised this possible removal at [[ https://en.wikipedia.org/wiki/Wikipedia_talk:New_pages_patrol/Reviewers#Does_anybody_use_Special:Log_-%3E_Deletion_Tag_Log? | NPP ]] and [[ https://en.wikipedia.org/wiki/Wikipedia:Village_pump_(technical)#Discussion_at_Wikipedia_talk:New_pages_patrol/Reviewers_%C2%A7_Does_anybody_use_Special:Log_-%3E_Deletion_Tag_Log? | VPT ]]. No objections. Not much response in general, I think this log is unused. The goal is to clean up double log entries like this: {F35319417} The only other place that "pagetriage-deletion" is found in our codebases is in [[ https://gerrit.wikimedia.org/g/operations/puppet/+/30ce51de11310f9771c7240d519d850ce4864cc2/modules/profile/templates/wmcs/db/wikireplicas/maintain-views.yaml#210 | this file ]], where I think it is used to allow the replica databases to display rows containing log_type=pagetriage-deletion. I think this is OK to leave, in case anyone wants to run queries on the data.
    • Task
    • ·Closed
    **Steps to replicate the issue** (include links if applicable): * Go to the "Wikibase" section on Special:SpecialPages on wikidata.org, using the Hebrew user interface: https://www.wikidata.org/wiki/Special:SpecialPages?uselang=he#mw-specialpagesgroup-wikibase **What happens?**: * The first item in the list includes `&quot;`. **What should have happened instead?**: * The first item in the list must not include `&quot;`, and must look like "דו"ח אילוצים". **Other information** (browser name/version, screenshots, etc.): The source message is [[ https://translatewiki.net/wiki/MediaWiki:Wbqc-constraintreport/he | wbqc-constraintreport/he ]]. It includes a usual double quotation mark, `"`, and the full message is דו"ח אילוצים. This is a correct translation: in Hebrew, double quotation marks are often used in the middle of the word. It looks like this quotation mark is escaped. This is unnecessary. On the same page, a link to Special:ChangeEmail appears. This Hebrew message ([[ https://translatewiki.net/wiki/MediaWiki:Changeemail/he | changeemail ]]) also includes the double quotation mark in the word דוא"ל, and it's displayed correctly. So, strangely enough, it looks like this bug is unique to #wikibase-quality-constraints. I tried reproducing it on my local wiki. I didn't install Wikibase (it's complicated...), and simply tried adding the quotation marks to the title of other special pages from core MediaWiki and other extensions. They were displayed correctly. So perhaps there's some extra security setting on wikidata.org or in this particular extension, which forces escaping where it's not supposed to be necessary, but I might be wrong.
    • Task
    • ·Closed
    **Feature summary**: From Project:Support_desk: Is it possible to make the third page featured in DoubleRedirects for each double redirect listed also show the section the second page redirects to? https://www.mediawiki.org/w/index.php?title=Topic:Wz1utvl5yqkalufx&topic_showPostId=wz1utvl5yuictye5#flow-post-wz1utvl5yuictye5
    • Task
    **List of steps to reproduce** (step by step, including full links if applicable): * Open [[ https://pt.wikipedia.org/wiki/Especial:P%C3%A1ginas_afluentes?target=Lista+de+bairros+de+Parna%C3%ADba&namespace= | this link ]] * Look at the list. There are currently 10 pages listed, none of which are redirects. On this page, there are no active filters. * Click "Hide Links" -> "Go" **What happens?**: * A redirect will appear, which did not appear in the complete list with no filter selected. **What should have happened instead?**: * In the default listing, all links should be displayed, including the redirect. **Software version (if not a Wikimedia wiki), browser information, screenshots, other information, etc.**: {F35310636} {F35310635} * Apparently this bug came up after T117754, but it's not sure.
    • Task
    • ·Closed
    **List of steps to reproduce** (step by step, including full links if applicable): *Access "Special:WhatLinksHere". ex) https://ja.wikipedia.org/wiki/%E7%89%B9%E5%88%A5:%E3%83%AA%E3%83%B3%E3%82%AF%E5%85%83 ex) https://en.wikipedia.org/wiki/Special:WhatLinksHere **What happens?**: *"Invert Selection", which should be on the right side, is hidden in the Namespace pull-down. Reproduce with jawiki, enwiki and jawn. **What should have happened instead?**: The width of the pulldown is probably incorrectly specified. **Software version (if not a Wikimedia wiki), browser information, screenshots, other information, etc.**: OS:Windows10 Browser: Firefox 102.0 and Chorome 103.0.5060.114 Skin: All skins. (Vector legacy, Vector, MinervaNeus, MonoBook and Timeless){F35309814}
    • Task
    Similarly to T283039 before, Special:Whatlinkshere shows a "View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)" navbar regardless of whether or not there are any pages to switch to. Example at https://en.wikipedia.org/wiki/Special:WhatLinksHere/Template:Unencyoclopedic: {F35308572}
    • Task
    **Feature summary** (what you would like to be able to do and where): Hi, I think you should be able to discuss Special Pages, this is a great idea for several reasons: 1) It would allow the creation of a consensus without being off-topic. 2) There is no reason why shouldn't be, all other namespaces have one, even MediaWiki which is also a "special" namespace. 3) Unique functionality: where else would I put a question about a Special Page? Here? Village Pump? Teahouse? Jimbo Wales' Talk Page? **Use case(s)** (list the steps that you performed to discover that problem, and describe the actual underlying problem which you want to solve. Do not describe only a solution): [See above] **Benefits** (why should this be implemented?): [See above]
    • Task
    • ·Closed
    **List of steps to reproduce** (step by step, including full links if applicable): * Go to https://www.mediawiki.org/wiki/Special:Contributions * Type in as user name "In<valid" * Submit **What happens?**: Nothing, the form is shown again **What should have happened instead?**: Show a error message that the user is invalid. The server side does not generate a message at the moment. It would be nice if the javascript side could check also for such invalid characters like the HTMLTitleTextField does and make the field border red while typing (Seen on Special:NewSection for example) **Software version (if not a Wikimedia wiki), browser information, screenshots, other information, etc.**: master The used `HTMLUserTextField` calls `User::newFromName` with rigor NONE/false, which makes the check for `htmlform-user-not-valid` always true. Needs another check to do the validation and also support IPs and IP ranges.
    • Task
    The global function `wfReadOnly` was replaced by `ReadOnlyMode` service (T283978 - https://gerrit.wikimedia.org/r/c/mediawiki/core/+/806923). This was not done using DI on the `SpecialPage` base class, it is using the global service container due to dependencies on the database and installer, where the `SpecialPageFactory` service is created as part of the `ParserFactory` service to provide i18n messages. This needs a solution to allow DI for the read only mode. A possible solution could be to make the database optional on the read only mode and not provding in installer, see this patch set for a solution - https://gerrit.wikimedia.org/r/c/mediawiki/core/+/806923/2 Another solution could be a service override in the installer with a "NeverReadOnlyMode", because read only on the installer or upgrader could have some impacts (see T151833 or T203914) This gets unrelated, when T206602 gets fixed
    • Task
    • ·Closed
    ``` ( ! ) Deprecated: preg_match(): Passing null to parameter #2 ($subject) of type string is deprecated in /var/www/wiki/mediawiki/core/includes/parser/Parser.php on line 2319 Call Stack # Time Memory Function Location 1 0.0000 361720 {main}( ) .../index.php:0 2 0.0336 3578696 wfIndexMain( ) .../index.php:46 3 0.0336 3578808 MediaWiki->run( ) .../index.php:50 4 0.0336 3578808 MediaWiki->main( ) .../MediaWiki.php:569 5 0.0341 3592832 MediaWiki->performRequest( ) .../MediaWiki.php:913 6 0.0389 3718512 MediaWiki\SpecialPage\SpecialPageFactory->executePath( $path = class Title { private $mTextform = 'LinkSearch'; private $mUrlform = 'LinkSearch'; private $mDbkeyform = 'LinkSearch'; private $mNamespace = -1; private $mInterwiki = ''; private $mLocalInterwiki = FALSE; private $mFragment = ''; public $mArticleID = 0; protected $mLatestID = FALSE; private $mContentModel = FALSE; private $mForcedContentModel = FALSE; private $mEstimateRevisions = NULL; public $prefixedText = NULL; protected $mLength = -1; public $mRedirect = NULL; private $mHasSubpages = NULL; private $mPageLanguage = NULL; private $mDbPageLanguage = FALSE; private $mTitleValue = NULL; private $mIsBigDeletion = NULL; private $mIsValid = TRUE; private $mInstanceCacheKey = NULL; protected $deprecatedPublicProperties = ['mTextform' => [...], 'mUrlform' => [...], 'mDbkeyform' => [...], 'mNamespace' => [...], 'mInterwiki' => [...], 'mFragment' => [...]]; private $dynamicPropertiesAccessDeprecated = FALSE }, $context = class RequestContext { private $request = class WebRequest { protected $data = [...]; protected $queryAndPathParams = [...]; protected $queryParams = [...]; protected $headers = [...]; private $response = class WebResponse { ... }; private $ip = '10.13.37.22'; protected $requestTime = 1656457521.9487; protected $protocol = 'http'; protected $sessionId = class MediaWiki\Session\SessionId { ... }; protected $markedAsSafe = FALSE }; private $title = class Title { private $mTextform = 'LinkSearch'; private $mUrlform = 'LinkSearch'; private $mDbkeyform = 'LinkSearch'; private $mNamespace = -1; private $mInterwiki = ''; private $mLocalInterwiki = FALSE; private $mFragment = ''; public $mArticleID = 0; protected $mLatestID = FALSE; private $mContentModel = FALSE; private $mForcedContentModel = FALSE; private $mEstimateRevisions = NULL; public $prefixedText = NULL; protected $mLength = -1; public $mRedirect = NULL; private $mHasSubpages = NULL; private $mPageLanguage = NULL; private $mDbPageLanguage = FALSE; private $mTitleValue = NULL; private $mIsBigDeletion = NULL; private $mIsValid = NULL; private $mInstanceCacheKey = NULL; protected $deprecatedPublicProperties = [...]; private $dynamicPropertiesAccessDeprecated = FALSE }; private $wikipage = NULL; private $action = NULL; private $output = class OutputPage { private ${ContextSource}context = ...; protected $mMetatags = [...]; protected $mLinktags = [...]; protected $mCanonicalUrl = FALSE; private $mPageTitle = 'External links search'; private $displayTitle = NULL; private $cacheIsFinal = FALSE; public $mBodytext = ''; private $mHTMLtitle = 'External links search - ReedyDevWiki'; private $mIsArticle = FALSE; private $mIsArticleRelated = FALSE; private $mHasCopyright = FALSE; private $mPrintable = FALSE; private $mSections = [...]; private $mSubtitle = [...]; public $mRedirect = ''; protected $mStatusCode = NULL; protected $mLastModified = ''; protected $mCategoryLinks = [...]; protected $mCategories = [...]; protected $mIndicators = [...]; private $mLanguageLinks = [...]; private $mScripts = ''; protected $mInlineStyles = ''; public $mPageLinkTitle = ''; protected $mAdditionalHtmlClasses = [...]; protected $mHeadItems = [...]; protected $mAdditionalBodyClasses = [...]; protected $mModules = [...]; protected $mModuleStyles = [...]; protected $mResourceLoader = NULL; private $rlClient = NULL; private $rlClientContext = NULL; private $rlExemptStyleModules = NULL; protected $mJsConfigVars = [...]; protected $mTemplateIds = [...]; protected $mImageTimeKeys = [...]; public $mRedirectCode = ''; protected $mFeedLinksAppendQuery = NULL; protected $mAllowedModules = [...]; protected $mDoNothing = FALSE; protected $mParserOptions = NULL; private $mFeedLinks = [...]; protected $mEnableClientCache = TRUE; private $mArticleBodyOnly = FALSE; protected $mNewSectionLink = FALSE; protected $mHideNewSectionLink = FALSE; public $mNoGallery = FALSE; protected $mCdnMaxage = 0; protected $mCdnMaxageLimit = INF; protected $mPreventClickjacking = FALSE; private $mRevisionId = NULL; private $mRevisionTimestamp = NULL; protected $mFileVersion = NULL; protected $styles = [...]; private $mIndexPolicy = 'noindex'; private $mFollowPolicy = 'nofollow'; private $mRobotsOptions = [...]; private $mVaryHeader = [...]; private $mRedirectedFrom = NULL; private $mProperties = [...]; private $mTarget = NULL; private $mEnableTOC = FALSE; private $copyrightUrl = NULL; private $limitReportJSData = [...]; private $contentOverrides = [...]; private $contentOverrideCallbacks = [...]; private $mLinkHeader = [...]; private $CSP = class ContentSecurityPolicy { ... } }; private $user = class User { public $mId = 0; public $mName = FALSE; public $mActorId = NULL; public $mRealName = ''; public $mEmail = ''; public $mTouched = '1'; protected $mQuickTouched = NULL; protected $mToken = NULL; public $mEmailAuthenticated = NULL; protected $mEmailToken = ''; protected $mEmailTokenExpires = NULL; protected $mRegistration = '20220628230521'; protected $mLoadedItems = TRUE; public $mFrom = 'session'; protected $mDatePreference = NULL; private $mBlockedby = -1; protected $mHash = FALSE; protected $mBlockreason = NULL; protected $mGlobalBlock = NULL; protected $mLocked = NULL; private $mHideName = NULL; private $mRequest = class WebRequest { ... }; private $mBlock = NULL; private $mBlockedFromCreateAccount = FALSE; protected $queryFlagsUsed = 0; private $mThisAsAuthority = class MediaWiki\Permissions\UserAuthority { ... }; private $isTemp = NULL }; private $authority = NULL; private $lang = class Language { public $mCode = 'en-gb'; public $mMagicExtensions = [...]; private $mHtmlCode = NULL; public $dateFormatStrings = [...]; public $mExtendedSpecialPageAliases = [...]; protected $namespaceNames = [...]; protected $mNamespaceIds = NULL; protected $namespaceAliases = NULL; private $transformData = [...]; private $namespaceInfo = class NamespaceInfo { ... }; private $localisationCache = class LocalisationCache { ... }; private $langNameUtils = class MediaWiki\Languages\LanguageNameUtils { ... }; private $langFallback = class MediaWiki\Languages\LanguageFallback { ... }; private $grammarTransformCache = NULL; private $converterFactory = class MediaWiki\Languages\LanguageConverterFactory { ... }; private $hookContainer = class MediaWiki\HookContainer\HookContainer { ... }; private $hookRunner = class MediaWiki\HookContainer\HookRunner { ... }; private $config = class GlobalVarConfig { ... } }; private $skin = class MediaWiki\Skins\Vector\SkinVectorLegacy { private ${ContextSource}context = ...; private ${Skin}defaultLinkOptions = [...]; protected $skinname = 'vector'; protected $options = [...]; protected $mRelevantTitle = NULL; private ${Skin}mRelevantUser = FALSE; private ${Skin}languageLinks = NULL; private ${Skin}sidebar = NULL; private ${Skin}componentRegistry = class MediaWiki\Skin\SkinComponentRegistry { ... }; public $template = NULL; public $thispage = NULL; public $titletxt = NULL; public $userpage = NULL; public $thisquery = NULL; public $loggedin = NULL; public $username = NULL; public $userpageUrlDetails = NULL; private ${SkinTemplate}isTempUser = NULL; private ${SkinTemplate}isNamedUser = NULL; private ${SkinTemplate}templateContextSet = FALSE; private ${SkinTemplate}contentNavigationCached = NULL; private ${SkinMustache}templateParser = NULL; private ${MediaWiki\Skins\Vector\SkinVector}languages = NULL }; private $timing = NULL; private $config = class GlobalVarConfig { private $prefix = 'wg' }; private $languageRecursion = FALSE }, $including = ???, $linkRenderer = ??? ) .../MediaWiki.php:316 7 0.0389 3722544 SpecialPage->run( $subPage = NULL ) .../SpecialPageFactory.php:1418 8 0.0400 3767904 SpecialLinkSearch->execute( $par = NULL ) .../SpecialPage.php:690 9 0.0604 5177032 Parser::normalizeLinkUrl( $url = NULL ) .../SpecialLinkSearch.php:86 10 0.0604 5177064 preg_match( $pattern = '<^(?:[a-z][a-z0-9+.-]*:)?//(?:(?:[a-z0-9\\-._~!$&\'()*+,;=:]|%[0-9a-f]{2})*@)?\\[((?:[0-9a-f:]|%3[0-A]|%[46][1-6])+)\\](?:[:/?#].*|)$>i', $subject = NULL, $matches = NULL ) .../Parser.php:2319 ```
    • Task
    • ·Closed
    ``` ( ! ) Deprecated: preg_replace_callback(): Passing null to parameter #3 ($subject) of type array|string is deprecated in /var/www/wiki/mediawiki/core/includes/parser/Parser.php on line 2333 Call Stack # Time Memory Function Location 1 0.0000 361720 {main}( ) .../index.php:0 2 0.0336 3578696 wfIndexMain( ) .../index.php:46 3 0.0336 3578808 MediaWiki->run( ) .../index.php:50 4 0.0336 3578808 MediaWiki->main( ) .../MediaWiki.php:569 5 0.0341 3592832 MediaWiki->performRequest( ) .../MediaWiki.php:913 6 0.0389 3718512 MediaWiki\SpecialPage\SpecialPageFactory->executePath( $path = class Title { private $mTextform = 'LinkSearch'; private $mUrlform = 'LinkSearch'; private $mDbkeyform = 'LinkSearch'; private $mNamespace = -1; private $mInterwiki = ''; private $mLocalInterwiki = FALSE; private $mFragment = ''; public $mArticleID = 0; protected $mLatestID = FALSE; private $mContentModel = FALSE; private $mForcedContentModel = FALSE; private $mEstimateRevisions = NULL; public $prefixedText = NULL; protected $mLength = -1; public $mRedirect = NULL; private $mHasSubpages = NULL; private $mPageLanguage = NULL; private $mDbPageLanguage = FALSE; private $mTitleValue = NULL; private $mIsBigDeletion = NULL; private $mIsValid = TRUE; private $mInstanceCacheKey = NULL; protected $deprecatedPublicProperties = ['mTextform' => [...], 'mUrlform' => [...], 'mDbkeyform' => [...], 'mNamespace' => [...], 'mInterwiki' => [...], 'mFragment' => [...]]; private $dynamicPropertiesAccessDeprecated = FALSE }, $context = class RequestContext { private $request = class WebRequest { protected $data = [...]; protected $queryAndPathParams = [...]; protected $queryParams = [...]; protected $headers = [...]; private $response = class WebResponse { ... }; private $ip = '10.13.37.22'; protected $requestTime = 1656457521.9487; protected $protocol = 'http'; protected $sessionId = class MediaWiki\Session\SessionId { ... }; protected $markedAsSafe = FALSE }; private $title = class Title { private $mTextform = 'LinkSearch'; private $mUrlform = 'LinkSearch'; private $mDbkeyform = 'LinkSearch'; private $mNamespace = -1; private $mInterwiki = ''; private $mLocalInterwiki = FALSE; private $mFragment = ''; public $mArticleID = 0; protected $mLatestID = FALSE; private $mContentModel = FALSE; private $mForcedContentModel = FALSE; private $mEstimateRevisions = NULL; public $prefixedText = NULL; protected $mLength = -1; public $mRedirect = NULL; private $mHasSubpages = NULL; private $mPageLanguage = NULL; private $mDbPageLanguage = FALSE; private $mTitleValue = NULL; private $mIsBigDeletion = NULL; private $mIsValid = NULL; private $mInstanceCacheKey = NULL; protected $deprecatedPublicProperties = [...]; private $dynamicPropertiesAccessDeprecated = FALSE }; private $wikipage = NULL; private $action = NULL; private $output = class OutputPage { private ${ContextSource}context = ...; protected $mMetatags = [...]; protected $mLinktags = [...]; protected $mCanonicalUrl = FALSE; private $mPageTitle = 'External links search'; private $displayTitle = NULL; private $cacheIsFinal = FALSE; public $mBodytext = ''; private $mHTMLtitle = 'External links search - ReedyDevWiki'; private $mIsArticle = FALSE; private $mIsArticleRelated = FALSE; private $mHasCopyright = FALSE; private $mPrintable = FALSE; private $mSections = [...]; private $mSubtitle = [...]; public $mRedirect = ''; protected $mStatusCode = NULL; protected $mLastModified = ''; protected $mCategoryLinks = [...]; protected $mCategories = [...]; protected $mIndicators = [...]; private $mLanguageLinks = [...]; private $mScripts = ''; protected $mInlineStyles = ''; public $mPageLinkTitle = ''; protected $mAdditionalHtmlClasses = [...]; protected $mHeadItems = [...]; protected $mAdditionalBodyClasses = [...]; protected $mModules = [...]; protected $mModuleStyles = [...]; protected $mResourceLoader = NULL; private $rlClient = NULL; private $rlClientContext = NULL; private $rlExemptStyleModules = NULL; protected $mJsConfigVars = [...]; protected $mTemplateIds = [...]; protected $mImageTimeKeys = [...]; public $mRedirectCode = ''; protected $mFeedLinksAppendQuery = NULL; protected $mAllowedModules = [...]; protected $mDoNothing = FALSE; protected $mParserOptions = NULL; private $mFeedLinks = [...]; protected $mEnableClientCache = TRUE; private $mArticleBodyOnly = FALSE; protected $mNewSectionLink = FALSE; protected $mHideNewSectionLink = FALSE; public $mNoGallery = FALSE; protected $mCdnMaxage = 0; protected $mCdnMaxageLimit = INF; protected $mPreventClickjacking = FALSE; private $mRevisionId = NULL; private $mRevisionTimestamp = NULL; protected $mFileVersion = NULL; protected $styles = [...]; private $mIndexPolicy = 'noindex'; private $mFollowPolicy = 'nofollow'; private $mRobotsOptions = [...]; private $mVaryHeader = [...]; private $mRedirectedFrom = NULL; private $mProperties = [...]; private $mTarget = NULL; private $mEnableTOC = FALSE; private $copyrightUrl = NULL; private $limitReportJSData = [...]; private $contentOverrides = [...]; private $contentOverrideCallbacks = [...]; private $mLinkHeader = [...]; private $CSP = class ContentSecurityPolicy { ... } }; private $user = class User { public $mId = 0; public $mName = FALSE; public $mActorId = NULL; public $mRealName = ''; public $mEmail = ''; public $mTouched = '1'; protected $mQuickTouched = NULL; protected $mToken = NULL; public $mEmailAuthenticated = NULL; protected $mEmailToken = ''; protected $mEmailTokenExpires = NULL; protected $mRegistration = '20220628230521'; protected $mLoadedItems = TRUE; public $mFrom = 'session'; protected $mDatePreference = NULL; private $mBlockedby = -1; protected $mHash = FALSE; protected $mBlockreason = NULL; protected $mGlobalBlock = NULL; protected $mLocked = NULL; private $mHideName = NULL; private $mRequest = class WebRequest { ... }; private $mBlock = NULL; private $mBlockedFromCreateAccount = FALSE; protected $queryFlagsUsed = 0; private $mThisAsAuthority = class MediaWiki\Permissions\UserAuthority { ... }; private $isTemp = NULL }; private $authority = NULL; private $lang = class Language { public $mCode = 'en-gb'; public $mMagicExtensions = [...]; private $mHtmlCode = NULL; public $dateFormatStrings = [...]; public $mExtendedSpecialPageAliases = [...]; protected $namespaceNames = [...]; protected $mNamespaceIds = NULL; protected $namespaceAliases = NULL; private $transformData = [...]; private $namespaceInfo = class NamespaceInfo { ... }; private $localisationCache = class LocalisationCache { ... }; private $langNameUtils = class MediaWiki\Languages\LanguageNameUtils { ... }; private $langFallback = class MediaWiki\Languages\LanguageFallback { ... }; private $grammarTransformCache = NULL; private $converterFactory = class MediaWiki\Languages\LanguageConverterFactory { ... }; private $hookContainer = class MediaWiki\HookContainer\HookContainer { ... }; private $hookRunner = class MediaWiki\HookContainer\HookRunner { ... }; private $config = class GlobalVarConfig { ... } }; private $skin = class MediaWiki\Skins\Vector\SkinVectorLegacy { private ${ContextSource}context = ...; private ${Skin}defaultLinkOptions = [...]; protected $skinname = 'vector'; protected $options = [...]; protected $mRelevantTitle = NULL; private ${Skin}mRelevantUser = FALSE; private ${Skin}languageLinks = NULL; private ${Skin}sidebar = NULL; private ${Skin}componentRegistry = class MediaWiki\Skin\SkinComponentRegistry { ... }; public $template = NULL; public $thispage = NULL; public $titletxt = NULL; public $userpage = NULL; public $thisquery = NULL; public $loggedin = NULL; public $username = NULL; public $userpageUrlDetails = NULL; private ${SkinTemplate}isTempUser = NULL; private ${SkinTemplate}isNamedUser = NULL; private ${SkinTemplate}templateContextSet = FALSE; private ${SkinTemplate}contentNavigationCached = NULL; private ${SkinMustache}templateParser = NULL; private ${MediaWiki\Skins\Vector\SkinVector}languages = NULL }; private $timing = NULL; private $config = class GlobalVarConfig { private $prefix = 'wg' }; private $languageRecursion = FALSE }, $including = ???, $linkRenderer = ??? ) .../MediaWiki.php:316 7 0.0389 3722544 SpecialPage->run( $subPage = NULL ) .../SpecialPageFactory.php:1418 8 0.0400 3767904 SpecialLinkSearch->execute( $par = NULL ) .../SpecialPage.php:690 9 0.0604 5177032 Parser::normalizeLinkUrl( $url = NULL ) .../SpecialLinkSearch.php:86 10 0.0614 5213344 preg_replace_callback( $pattern = '/[\\x00-\\x20"<>\\[\\\\\\]^`{|}\\x7F-\\xFF]/', $callback = class Closure { virtual $closure = "Parser::{closure}", public $parameter = ['$m' => '<required>'] }, $subject = NULL ) .../Parser.php:2333 ```
    • Task
    • ·Closed
    Visit Special:NewPages. The "Hide redirects" link is not clickable, which means I cannot patrol redirects. This happens on both Chinese Wikipedia and English Wikipedia, logged in and out. {F35270090}
    • Task
    • ·Closed
    The `mediawiki.special` module contains a number of style files for various special pages. The `mediawiki.special.version` module contains a single style file for Special:Version, and that file is fairly small, similar in size to the others already in the bundle. I propose merging them to reduce the overall size of the module registry.
    • Task
    • ·Closed
    Probably because there are no rights grantes to this group.
    • Task
    Hello, The interface of the Special:WhatLinksHere options has recently changed for the switch to OOjs (T117754). The result is not very happy on fr.wiki ([[ https://fr.wikipedia.org/wiki/Spécial:Pages_liées/Modèle:CAN-d | see exemple ]]). We have additionals "see only ..." links that are added by the system message [[ https://fr.wikipedia.org/wiki/MediaWiki:Linkshere | w:fr:MediaWiki:Linkshere ]]. They avoid multiple clicks. The problem is that with the new form in its drop-down box, we keep these links visible all the time, while the options form is collapsed by default. The visual result is not very understandable. I looked page with `?uselang=qqx` ([[ https://fr.wikipedia.org/wiki/Spécial:Pages_liées/Modèle:CAN-d?uselang=qqx | see ]]), but I couldn't find any generic system message available within the dropdown box where we could put these links (and any other on-wiki customization). Would it be possible to have a new customizable system message in the dropdown box? (Ideally located between the checkboxes and the submit button). Thank you. (sorry for my bad English)
    • Task
    Hello, The interface of the Special:WhatLinksHere options has recently changed for the switch to OOjs (T117754). The result is not very happy, not to mention that the result is not very understandable on fr.wiki ([[ https://fr.wikipedia.org/wiki/Sp%C3%A9cial:Pages_li%C3%A9es/Mod%C3%A8le:CAN-d | exemple ]]) (we have additional "see only ..." links that are added by the system message [[ https://fr.wikipedia.org/wiki/MediaWiki:Linkshere | w:fr:MediaWiki:Linkshere ]]). But I'll have another ticket opened for that. My problem is that the box with the options is collapsed by default, and the interface does not remember the last (un)collapsed state of this box. But I use the filters options every day (sometimes dozens of times) for templates maintenance. It's really annoying that every time you replace the old HTML forms (which were working fine), they become completely fat and obese, and end up in a drop-down box (which is obese itself too, even folded). But when on top of that the interface doesn't remember the last state (un)collapsed, it's a real pain! So I would like the last (un)collapsed state of the box to be kept for the next consultation of the Spécial:WhatLinksHere page. Thank you. (sorry for my bad English)
    • Task
    **Feature summary** (what you would like to be able to do and where): On the results of Special:WhatLinksHere the UI isn't very clear that the collapsed box contains controls. Improve this label to indicate as such. **Use case(s)** (list the steps that you performed to discover that problem, and describe the actual underlying problem which you want to solve. Do not describe only a solution): * For users looking at results of a Special:WhatLinksHere output, for example at (https://test.wikipedia.org/wiki/Special:WhatLinksHere/Main_Page) there is no indication in the hidden box that it contains controls for filtering the output of this page. Prior to the recent OOUI change, the filter controls were present uncollapsed so didn't need introduction. **Benefits** (why should this be implemented?): Make it clear that this hidden area contains interface controls. **Notes** This page was recently converted to OOUI in T117754. Suggest changing this to an explicit message for the title, such as is seen in other similar results pages for (e.g. History, Contributions). Perhaps use whatlinkshere-fieldset-title and default the label to "Filter WhatLinksHere".
    • Task
    • ·Closed
    According to the research at https://colinmorris.github.io/blog/unpopular-wiki-articles the current setup of random page is not actually random, since there are non-uniform gaps in the random values assigned to articles that has a statistical effect on the probability that any given page will be returned by random page. Could this process be made more random? **Proposed solution:** At page updates (caused by edits, purges, template change caused reparses), we flip a coin and at 10% of the time, we change the value of page_random at the same time of changing page_touched).
    • Task
    **List of steps to reproduce** (step by step, including full links if applicable): * Go to https://uk.wikipedia.org/wiki/Спеціальна:Неперевірені_сторінки and select any other namespace than the article namespace. **What happens?**: It shows none. **What should have happened instead?**: It should show a list of unreviewed pages for the selected namespace **Software version (if not a Wikimedia wiki), browser information, screenshots, other information, etc.**:
    • Task
    • ·Closed
    ==== Error ==== * mwversion: `1.39.0-wmf.12` * reqId: `df11306d-1ea0-4329-8ca1-3a0876841e32` * [[ https://logstash.wikimedia.org/app/dashboards#/view/AXFV7JE83bOlOASGccsT?_g=(time:(from:'2022-05-18T17:20:12.000Z',to:'2022-05-19T15:27:13.335Z'))&_a=(query:(query_string:(query:'reqId:%22df11306d-1ea0-4329-8ca1-3a0876841e32%22'))) | Find reqId in Logstash ]] ```name=normalized_message [{reqId}] {exception_url} UploadStashFileNotFoundException: La chiave "<filename>.gif" non è stata trovata nello stash ``` ```name=exception.trace,lines=10 from /srv/mediawiki/php-1.39.0-wmf.12/includes/upload/UploadStash.php(133) #0 /srv/mediawiki/php-1.39.0-wmf.12/includes/upload/UploadStash.php(175): UploadStash->getFile(string) #1 /srv/mediawiki/php-1.39.0-wmf.12/includes/upload/UploadFromStash.php(102): UploadStash->getMetadata(string) #2 /srv/mediawiki/php-1.39.0-wmf.12/includes/upload/UploadFromStash.php(129): UploadFromStash->initialize(string, string) #3 /srv/mediawiki/php-1.39.0-wmf.12/includes/upload/UploadBase.php(226): UploadFromStash->initializeFromRequest(WebRequest) #4 /srv/mediawiki/php-1.39.0-wmf.12/includes/specials/SpecialUpload.php(128): UploadBase::createFromRequest(WebRequest) #5 /srv/mediawiki/php-1.39.0-wmf.12/includes/specials/SpecialUpload.php(233): SpecialUpload->loadRequest() #6 /srv/mediawiki/php-1.39.0-wmf.12/includes/specialpage/SpecialPage.php(688): SpecialUpload->execute(NULL) #7 /srv/mediawiki/php-1.39.0-wmf.12/includes/specialpage/SpecialPageFactory.php(1415): SpecialPage->run(NULL) #8 /srv/mediawiki/php-1.39.0-wmf.12/includes/MediaWiki.php(316): MediaWiki\SpecialPage\SpecialPageFactory->executePath(string, RequestContext) #9 /srv/mediawiki/php-1.39.0-wmf.12/includes/MediaWiki.php(912): MediaWiki->performRequest() #10 /srv/mediawiki/php-1.39.0-wmf.12/includes/MediaWiki.php(566): MediaWiki->main() #11 /srv/mediawiki/php-1.39.0-wmf.12/index.php(50): MediaWiki->run() #12 /srv/mediawiki/php-1.39.0-wmf.12/index.php(46): wfIndexMain() #13 /srv/mediawiki/w/index.php(3): require(string) #14 {main} ``` ==== Notes ==== * Happens like once a day * Has been happening since at least 1.38.0-wmf.22 (logs don't go back further)
    • Task
    Suppose you're using TablePager to paginate some data with few unique columns. For instance, let's say that our table has `mytable_id` (unique), `mytable_name` (not unique) and `mytable_date` (not unique), and you want to allow sorting by name and date. You cannot do this by simply overriding isFieldSortable because the fields are not unique. According to the documentation in IndexPager::getIndexField(), the following should work: ```lang=php public function getIndexField(): array { return [ 'mytable_name' => [ 'mytable_name', 'mytable_id' ], 'mytable_date' => [ 'mytable_date', 'mytable_id' ], ]; } ``` but it doesn't: it always uses the first element (mytable_name), regardless of what the actual sorting is. This was also discovered and reported by @matej_suchanek at T191694#6469506. This seems to be caused by an inconsistent naming in TablePager vs IndexPager, since the former uses "sort" but the latter uses "order". #abusefilter has an example of this, and we have another in the #campaignevents extension.
    • Task
    In the #campaignevents extension we have a list of all events and their number of participants, that is built with TablePager. FTR, [[https://gerrit.wikimedia.org/g/mediawiki/extensions/CampaignEvents/+/734a6f8b374507b0690598d9bb0496f2bfdf8408/db_patches/mysql/tables-generated.sql | here ]] is the schema. The query looks like the following: ```lang=mysql SELECT event_id,event_name,event_start,event_meeting_type,COUNT(cep_id) AS `num_participants` FROM `campaign_events` LEFT JOIN `ce_participants` ON ((event_id=cep_event_id)) LEFT JOIN `ce_organizers` ON ((event_id=ceo_event_id)) WHERE event_deleted_at IS NULL AND cep_unregistered_at IS NULL AND ceo_user_id = 1 GROUP BY cep_event_id,event_id,event_name,event_start,event_meeting_type ORDER BY event_start LIMIT 51 ``` We would like to make the number of participants sortable (via TablePager::getSortableFields()), however that doesn't work in combinations with offsets. If you order by participants and go to the next page, the query will be like: ```lang=mysql SELECT event_id,event_name,event_start,event_meeting_type,COUNT(cep_id) AS `num_participants` FROM `campaign_events` LEFT JOIN `ce_participants` ON ((event_id=cep_event_id)) LEFT JOIN `ce_organizers` ON ((event_id=ceo_event_id)) WHERE event_deleted_at IS NULL AND cep_unregistered_at IS NULL AND ceo_user_id = 1 AND (((num_participants>='2'))) GROUP BY cep_event_id,event_id,event_name,event_start,event_meeting_type ORDER BY num_participants LIMIT 1 ``` However, since `num_participants` is a `COUNT`, it should be using HAVING, not WHERE.
    • Task
    Dedicated ticket for an issue I [[ https://phabricator.wikimedia.org/T188737#7894138 | posted ]] on T188737: > Redirects should be italicised on this special page as well: [[ https://en.wikipedia.org/wiki/Special:MostTranscludedPages | Special:MostTranscludedPages ]]. > > For consistency with other places, and I have an use case: > > I'm using a JavaScript that adds display of protection levels of the listed templates, so that I can review and adjust them (add forgotten protections, remove excessive protections, etc.). > Quite often, the listed templates are actually redirects (some redirects are heavily used), and when clicking on the link I end up on the canonical template. It's easy to overlook it was a redirect, and I end up modifying the protection level on the canonical template instead of the redirect.
    • Task
    • ·Closed
    **List of steps to reproduce**: * Go to [[//meta.wikimedia.org/wiki/Special:NewFiles|m:Special:NewFiles]] * Copy-and-paste `console.log(mw.config.get('wgCanonicalSpecialPageName'))` to your console **What happens?**: You get `'Newimages'`. **What should have happened instead?**: You should have got `'Newfiles'`.
    • Task
    • ·Closed
    **List of steps to reproduce**: * Go to [[//meta.wikimedia.org/wiki/Special:LinkSearch|m:Special:LinkSearch]] * Copy-and-paste `console.log(mw.config.get('wgCanonicalSpecialPageName'))` to your console **What happens?**: You get `'LinkSearch'`. **What should have happened instead?**: You should have got `'Linksearch'`. That of the majority, if not all, of other special pages are not written in CamelCase. Addendum: Also reproducable at: * Special:DisambiguationPageLinks * Special:PagesWithProp * Special:PagesWithBadges * Special:GlobalUsers * Special:OAuthListConsumers * Special:OAuthManageMyGrants * Special:OAuthConsumerRegistration * Special:GlobalGroupMembership ...and probably plenty others.
    • Task
    • ·Closed
    **Feature summary**: NOTE: TLDR: Wrap history/Special:Log's `mw-firstlink, mw-lastlink, mw-prevlink, mw-nextlink, mw-numlink` in a parent element like Special:Contribs does and wrap pseudo-links (e.g. `newest` when you are already viewing the newest revisions/log entries) in `span` elements with semantic classes. I was writing [[//en.wikipedia.org/wiki/User:NguoiDungKhongDinhDanh/AjaxLoader.js|this userscript]] when I realized [[//en.wikipedia.org/wiki/Special:Log|Special:Log]] and [[//en.wikipedia.org/wiki/Main_Page?action=history|action=history]]'s navigation links are not wrapped in any direct parent element. This makes it hard to select those links as a whole (i.e. the whole line). Here's how I see them via DevTools: ```lang="html", name="All public logs", lines="15" <div><form>etc.</form></div> (newest | <a href="..." class="mw-lastlink" title="...">oldest</a>) View (newer 100 | <a href="..." class="mw-nextlink" title="..." rel="next">older 100</a>) (<a href="..." class="mw-numlink" title="...">20</a> | <a href="..." class="mw-numlink" title="...">50</a> | <a href="..." class="mw-numlink" title="...">100</a> | <a href="..." class="mw-numlink" title="...">250</a> | <a href="..." class="mw-numlink" title="...">500</a>) <ul class="mw-logevent-loglines"> <li data-mw-logid="...">etc.</li> ... <li data-mw-logid="...">etc.</li> </ul> (same links) <div class="printfooter">etc.</div> ``` Comparing to Special:Contribs: Contribs's mw- links are wrapped into an easily selectable `p` element with an appropriate class: ```lang="html", name="User contributions for Example", lines="15" <div><form>etc.</form></div> <p class="mw-pager-navigation-bar">(newest | <a href="..." class="mw-lastlink" title="...">oldest</a>) View (newer 100 | <a href="..." class="mw-nextlink" title="..." rel="next">older 100</a>) (<a href="..." class="mw-numlink" title="...">20</a> | <a href="..." class="mw-numlink" title="...">50</a> | <a href="..." class="mw-numlink" title="...">100</a> | <a href="..." class="mw-numlink" title="...">250</a> | <a href="..." class="mw-numlink" title="...">500</a>)</p> <section class="mw-pager-body"> <h4>etc.</h4> <ul>etc.</ul> ... <h4>etc.</h4> <ul>etc.</ul> </section> (same links) <div class="mw-contributions-footer">etc.</div> <div class="printfooter">etc.</div> ``` I would also like to see the pseudo-links (i.e. `newest`, `newer 100` et. al.) be wrapped in, say, `span` elements with some semantic classes like `mw-notlink` or something like that. **Use case and benefits**: Making HTML content not look like a mess and helping me complete the script. Addendum: Navigation links of the following pages are also not wrapped: * categories * Special:ProtectedTitles * Special:ActiveUsers * Special:GlobalUsers * Special:OAuthListConsumers * Special:GlobalBlockList ...and probably plenty others.
    • Task
    Hello! When a user is blocked the system writes "Blocked" in Special:ListUsers. I would suggest when someone is Partial blocked to write "Partial blocked".
    • Task
    • ·Closed
    Edit tags should appear on Special:DeletedContributions, as they do on Special:Contributions, page histories, Special:Undelete and even the revision deletion interface already. As an example, these edits on https://commons.wikimedia.org/wiki/Special:DeletedContributions/1234qwer1234qwer4&offset=20220331085131 were made with the `VisualFileChange` tag. {F35064600} T36524 seems to already intend a tag //filter// for Special:DeletedContributions.
    • Task
    It's uncommon, but content namespaces may sometimes include some JS/JSON/CSS pages, which obviously can't have categories. One example of such pages is per-work CSS pages on Wikisource, introduced by T276067 (like these: https://it.wikisource.org/wiki/Speciale:PagineSenzaCategorie). These pages should not appear on Special:UncategorizedPages, based on their content model.
    • Task
    • ·Closed
    **List of steps to reproduce** (step by step, including full links if applicable): * Go to https://ko.wikipedia.org/wiki/Special:Contributions/2001:2d8::/32 or https://ko.wikipedia.org/wiki/Special:Contributions/2001:e60::/32 * Go to next page where the link indicates 'see previous 100 entries' **What happens?**: Sometimes, when loading IPv6 CIDR range in Korean Wikipedia, the database error occurs instead of showing the actual contributions list. Either MediaWiki internal error message or Database query error occurs with the message "Wikimedia\Rdbms\DBQueryError" (Fatal error) Note: Turning off the CIDR range related gadgets will not resolve the problem. {F35043357} **What should have happened instead?**: There should be normal contributions list for the CIDR range. **Software version (if not a Wikimedia wiki), browser information, screenshots, other information, etc.**: 1.39.0-wmf.6 (d88a0c4) 2022-04-05T06:53:32
    • Task
    If one goes to the uncategorised templates special page: * https://uk.wikipedia.org/wiki/Спеціальна:Некатегоризовані_шаблони * https://en.wikipedia.org/wiki/Special:UncategorizedTemplates One can see that those contain quite a few template styles pages. One way to distinguish those is by the fact that they have a Sanitized CSS content model, as opposed to wikitext that regular ns10 pages have. Uncategorised templates special page is routinely used to, well, look for uncategorised templates, for which being categorised is a guideline or a policy is a number of Wikimedia projects introduced to facilitate their discoverability. Template styles pages are not templates, and neither it makes sense to categorise them, nor there is a transparent way to do that, though putting a `[[Category:]]` code inside a `/* */` CSS comment does work. Some wikis might prefer to do that, but many might want to just opt those pages out of uncategorised report. Ideally there should be a configuration on what content models to include to or exclude from the report, ideally this should also extend to other uncategorised reports. As a good enough option either Sanitized CSS pages specifically, or all non-wikitext pages should be excluded from the uncategorized template special page specifically. Of course, it is now possible to obtain a list of uncategorised templates without the TemplateStyles pages by running a custom SQL query, but who would benefit from this feature would be users who do template maintenance and do not have necessary SQL knowledge or access.
    • Task
    **List of steps to reproduce** (step by step, including full links if applicable): Issue 1: * Open Special:AllMessages ( https://www.mediawiki.org/wiki/Special:AllMessages?prefix=nstab&filter=all&lang=en&limit=5000 for example), try to find "Nstab-project_talk". * Open Special:AllMessages ( https://www.mediawiki.org/wiki/Special:AllMessages?prefix=nstab&filter=all&lang=en&limit=5000 for example), look at the alleged content of "Nstab-talk". Issue 2: * Open MediaWiki:Nstab-talk ( https://www.mediawiki.org/wiki/MediaWiki:Nstab-talk for example), try to look up the default content of this system message. ---- **What happens?**: Issue 1: * Nstab-project_talk isn't listed. * Nstab-talk is displayed with an empty default value instead of "Talk". Issue 2: * Page appears empty, not matching the actual default message content which is "Talk". **What should have happened instead?**: Issue 1: * Nstab-project_talk is listed properly. * Nstab-talk is listed properly. Issue 2: * Page shows the text "Talk" even when non-existent. * Editing the page prefills the form with "Talk". ---- **Software version (if not a Wikimedia wiki), browser information, screenshots, other information, etc.**: * Issue is present in MediaWiki 1.35.5 * Issue is present in MediaWiki 1.39.0-wmf.4
    • Task
    • ·Closed
    Adding `SpecialPageFatalTest` to `@group Database` would make that test run with SQL strict mode. Currently many special pages (such as those including a pager) make database connections when loaded without parameters, some of which are not compatible with strict mode.
    • Task
    **List of steps to reproduce** (step by step, including full links if applicable): * Go to https://www.mediawiki.org/wiki/Special:SpecialPages?uselang=qqx * See that the message `specialpages-helppage` is used to define a custom link for the help page. **What happens?**: The message is not properly registered i.e., the message doesn't actually exist when you go to MediaWiki:Specialpages-helppage, empty or otherwise. The message also doesn't appear in Special:AllMessages. **What should have happened instead?**: The message should exist and be empty by default, and should be discoverable in Special:AllMessages. **Software version (if not a Wikimedia wiki), browser information, screenshots, other information, etc.**:
    • Task
    **Feature summary** (what you would like to be able to do and where): I would like to be able to have endless scrolling on pages like the contributions pages, the log pages, page histories, and the like. **Use case(s)** (list the steps that you performed to discover that problem, and describe the actual underlying problem which you want to solve. Do not describe only a solution): With the current pagination system to compare two separate revisions would take a lot of server load in a short amount of time and is greatly inefficient. Loading 5,000 items at once can take a minute at best (including page generation with those items, then rendering by the browser), even with a high-speed connection. On mobile devices, loading 5,000 items at once is impossible and creates a bunch of freezes. **Benefits** (why should this be implemented?): I see a more proper infinite scrolling solution helpful as it improves workflow greatly. A lot of modern platforms use infinite scrolling to allow for quick discovery of content. Initially I created a script that provided infinite scrolling which recently broke (https://en.wikipedia.org/wiki/User:Awesome_Aasim/infiniscroll.js) and it worked like a charm. It let me quickly find a contribution using Ctrl-F, quickly view and compare two revisions in history that are revisions apart, and quickly scroll through logs without clicking on buttons.
    • Task
    ==== Error ==== * mwversion: `1.38.0-wmf.24` * reqId: `05b13bdc-8dfd-4c8e-9da1-1f5148de683a` * [[ https://logstash.wikimedia.org/app/dashboards#/view/AXFV7JE83bOlOASGccsT?_g=(time:(from:'2022-03-02T23:00:43.000Z',to:'2022-03-03T22:13:02.128Z'))&_a=(query:(query_string:(query:'reqId:%2205b13bdc-8dfd-4c8e-9da1-1f5148de683a%22'))) | Find reqId in Logstash ]] ```name=normalized_message [{reqId}] {exception_url} Wikimedia\Rdbms\DBQueryError: Error 1969: Query execution was interrupted (max_statement_time exceeded) (db1096:3316) Function: IndexPager::buildQueryInfo (contributions page unfiltered) Query: SET STATEMENT max_statement_time=30 [query redacted] ``` ```name=exception.trace,lines=10 from /srv/mediawiki/php-1.38.0-wmf.24/includes/libs/rdbms/database/Database.php(1655) #0 /srv/mediawiki/php-1.38.0-wmf.24/includes/libs/rdbms/database/Database.php(1639): Wikimedia\Rdbms\Database->getQueryException(string, integer, string, string) #1 /srv/mediawiki/php-1.38.0-wmf.24/includes/libs/rdbms/database/Database.php(1613): Wikimedia\Rdbms\Database->getQueryExceptionAndLog(string, integer, string, string) #2 /srv/mediawiki/php-1.38.0-wmf.24/includes/libs/rdbms/database/Database.php(1207): Wikimedia\Rdbms\Database->reportQueryError(string, integer, string, string, boolean) #3 /srv/mediawiki/php-1.38.0-wmf.24/includes/libs/rdbms/database/Database.php(1859): Wikimedia\Rdbms\Database->query(string, string, integer) #4 /srv/mediawiki/php-1.38.0-wmf.24/includes/libs/rdbms/database/DBConnRef.php(69): Wikimedia\Rdbms\Database->select(array, array, array, string, array, array) #5 /srv/mediawiki/php-1.38.0-wmf.24/includes/libs/rdbms/database/DBConnRef.php(319): Wikimedia\Rdbms\DBConnRef->__call(string, array) #6 /srv/mediawiki/php-1.38.0-wmf.24/includes/specials/pagers/ContribsPager.php(303): Wikimedia\Rdbms\DBConnRef->select(array, array, array, string, array, array) #7 /srv/mediawiki/php-1.38.0-wmf.24/includes/pager/IndexPager.php(276): ContribsPager->reallyDoQuery(string, integer, boolean) #8 /srv/mediawiki/php-1.38.0-wmf.24/includes/pager/IndexPager.php(778): IndexPager->doQuery() #9 /srv/mediawiki/php-1.38.0-wmf.24/includes/specials/SpecialContributions.php(330): IndexPager->getNumRows() #10 /srv/mediawiki/php-1.38.0-wmf.24/includes/poolcounter/PoolCounterWorkViaCallback.php(74): SpecialContributions->{closure}() #11 /srv/mediawiki/php-1.38.0-wmf.24/includes/poolcounter/PoolCounterWork.php(162): PoolCounterWorkViaCallback->doWork() #12 /srv/mediawiki/php-1.38.0-wmf.24/includes/specials/SpecialContributions.php(355): PoolCounterWork->execute() #13 /srv/mediawiki/php-1.38.0-wmf.24/includes/specialpage/SpecialPage.php(671): SpecialContributions->execute(NULL) #14 /srv/mediawiki/php-1.38.0-wmf.24/includes/specialpage/SpecialPageFactory.php(1378): SpecialPage->run(NULL) #15 /srv/mediawiki/php-1.38.0-wmf.24/includes/MediaWiki.php(315): MediaWiki\SpecialPage\SpecialPageFactory->executePath(string, RequestContext) #16 /srv/mediawiki/php-1.38.0-wmf.24/includes/MediaWiki.php(910): MediaWiki->performRequest() #17 /srv/mediawiki/php-1.38.0-wmf.24/includes/MediaWiki.php(564): MediaWiki->main() #18 /srv/mediawiki/php-1.38.0-wmf.24/index.php(53): MediaWiki->run() #19 /srv/mediawiki/php-1.38.0-wmf.24/index.php(46): wfIndexMain() #20 /srv/mediawiki/w/index.php(3): require(string) #21 {main} ``` ==== Impact ==== User facing error messages for these URLs. ==== Notes ==== I'm seeing what looks like a number of variations on this in 1.38.0-wmf.24 (T300200), at least for Special:RecentChanges, Special:Contributions, and Special:Watchlist. Fairly low rate. I think this is new, trying to get a handle on that before deciding if it warrants a rollback.
    • Task
    Given some recent unpleasantness (T302047) along with past incidents (T257687), it would be nice to add some functionality to Special:Random and API:Random to reduce their efficacy in allowing certain actors a quick and easy means of finding random wiki pages. There are a number of ways this could be triggered (block activity, AF activity, a mediawiki GUI setting, etc.) and a number of ways Special:Random and API:Random could have their behavior adjusted (throttle, return a small subset of pages, noop, etc). Yes, this can be handled by writing ad-hoc code within PS.php, but it would be nice to facilitate a quicker response time that didn't involve a production deployment. And yes, there are other ways for an actor to generate a large list of random wiki pages, but the aforementioned methods are well-known and easy to use.
    • Task
    • ·Closed
    Date headings on Special:Contributions (added in T298638) don't work well for Flow edits. Steps to reproduce: # Visit https://www.mediawiki.org/wiki/Special:Contributions/Matma_Rex #* The first few edits on the list have different bullet points, apparently because they're not wrapped in `<ul>…</ul>`: {F34962257} # Run the following to display the hidden headings: `mw.util.addCSS( '.mw-index-pager-list-header { display: block !important; }' );` #* There are no headings above Flow edits: {F34962259}
    • Task
    • ·Closed
    It was reported within the OC that a member was not capable of viewing a suppressed log entry via the onwiki interface although they have the required permissions. https://meta.wikimedia.org/w/index.php?title=Special:Log&logid=45519433 is a random revision deleted log entry. {F34953810} But hitting the '(show)' button results in the following. {F34953812} This is due to Special:RevisionDelete requiring the deleterevision permission and there is no real technical implementation here which allows only viewing the log entry. It is possible to use the api, but that is quite uncomfortable.
    • Task
    As @Jdlrobson pointed out in the comments for {T298638}, currently Special:RecentChanges and Special:Watchlist insert `<h4>` date headings after `<h1>`. After T298638 goes live, a bunch of other special pages and ?action=history will also use `<h4>` for date headings. This is a common accessibility mistake that is prescribed to be avoided by most accessibility guidelines: > Skipping heading ranks can be confusing and should be avoided where possible: Make sure that a <h2> is not followed directly by an <h4>, for example. https://www.w3.org/WAI/tutorials/page-structure/headings/ > Do not skip heading levels to be more specific (for example, do not skip from <h2> to <h5>). It is permissible to skip headings in the other direction if the outline of the page calls for it (for example, from <h5> to <h2>). https://usability.yale.edu/web-accessibility/articles/headings > Do not skip a heading level from the top down. https://www.a11yproject.com/posts/how-to-accessible-heading-structure/ I would assume that `<h4>` was chosen //in the olden years// because of its (regular) font size, and not much else. However, it makes the interface less accessible. I think we should find some way to work around this (either by upping the level, adding appropriate CSS to make the text smaller, or even `aria-level="2"` I guess ¯\_(ツ)_/¯).
    • Task
    • ·Closed
    **Feature summary** (what you would like to be able to do and where): In T300185 the mobile version of the Special:Contributions was replaced with the desktop version. This led to an unexpected interface change for many users. One of the unexpected interface changes was the loss of groupings. In T298638 headers were added to the desktop contributions page to support grouping changes by date on the contributions page. https://en.m.wikipedia.beta.wmflabs.org/wiki/Special:Contributions/Jdlrobson We should display headers in both views of this page. It would be beneficial for AMC users as well as users of the old version of the page. The technical change that is required is very small. | Current view | Proposed view afrer this change | | {F34952525} |{F34952528} **Use case(s)** (list the steps that you performed to discover that problem, and describe the actual underlying problem which you want to solve. Do not describe only a solution): When going down the list of changes, I want to be able to see all the changes for a given day easily. **Benefits** (why should this be implemented?): * Better visual scanning of changes * Easier to identify changes closer together as only need to parse the time mentally. # Acceptance criteria On Minerva skin we should: [] Show the date header (.mw-index-pager-list-header) [] Style the header as we used to (using MobileFrontend styles for mobile history page) [] Hide the date inside the change row itself (mw-changeslist-date) [] Show the time (mw-changeslist-time) [] Change should not impact desktop version of contributions page [] Change should be scoped to contributions page. Change should not impact mobile version of history page. # QA Visit https://en.m.wikipedia.beta.wmflabs.org/wiki/Special:Contributions/Jdlrobson Expected: Headers are present grouping edits by date Visit https://en.wikipedia.beta.wmflabs.org/wiki/Special:Contributions/Jdlrobson Expected: Headers are **not present** grouping edits by date # Developer notes See CSS in https://en.m.wikipedia.org/wiki/User:Jdlrobson/mobilecontribs.css == QA Results - Beta | **AC** | **Status** | **Details** | | ----- | ----- | ----- | | 1 | ✅ | T301798#7818324 | | 2 | ✅ | T301798#7818324 |
    • Task
    A top wish from #community-wishlist-survey-2022 , which (strikingly) does not yet appear to be filed in Phabricator, although I found a declined task T7388 from 2006 which asked for something very similar. From the [[https://meta.wikimedia.org/wiki/Community_Wishlist_Survey_2022/Miscellaneous/Allow_filtering_of_WhatLinksHere_to_remove_links_from_templates|Wishlist proposal]]: > **Problem**: When using Special:WhatLinksHere, many of the results aren't in the body of the article, and are just from templates (especially navboxes) - this often makes finding results in the content of an article much more difficult than it needs to be. > **Who would benefit**: Editors (and readers) who use Special:WhatLinksHere. > **Proposed solution**: Special:WhatLinksHere already has (redirect) and (transclusion): add (template link), with a toggle to hide/show results that only link here from links in templates. Ideally, show the results nested in the same way that (redirect) links are - so if a template links to the article, show all articles beneath that. Some challenges: * The MediaWiki parser expands templates before even beginning to process links. Therefore, by the time links are processed, information on transclusions is lost. * Is it worth recording which transcluded template is responsible for each link? This is not asked for in the wishlist proposal. * Consideration needs to be given to what happens to links provided in parameters. For example, `{{blockquote|I really only listen to, like, [[German death reggae]] and [[Halloween]] sound effects records from the 1950s. And [[Bette Midler]].}}` Technically these links are being generated by the template, but editors would consider them just like ordinary links in the body of the page. * From a data storage standpoint, a `pl_type` bitfield could be added to the `pagelinks` table. However, it is undesirable to ALTER `pagelinks` due to its vast size on large wikis (1.5 billion rows on enwiki) - see @tstarling's comment under Option 3 in T14019#7662302.
    • Task
    • ·Closed
    **List of steps to reproduce** (step by step, including full links if applicable): * Click on "WhatLinksHere" from any Wikimedia wiki page (e.g. https://en.wikipedia.org/wiki/Special:WhatLinksHere/Main_Page). **What happens?**: Pages are sorted by namespace, and pages within the same namespace are sorted by page ID. **What should have happened instead?**: Pages are sorted by page ID regardless of their namespace, like they used to. **Software version (if not a Wikimedia wiki), browser information, screenshots, other information, etc.**: This issue at least affects Wikimedia wikis. We do not know whether it affects other wikis with the latest code for MediaWiki 1.38, regardless of whether or not the "Linter" extension (with its latest code) is installed, but those wikis are probably unaffected. This may or may not be caused by https://gerrit.wikimedia.org/r/c/mediawiki/extensions/Linter/+/755817. See https://web.archive.org/web/20220130015434/https://en.wikipedia.org/wiki/Special:WhatLinksHere/Main_Page vs https://en.wikipedia.org/wiki/Special:WhatLinksHere/Main_Page for the difference. Sorting by namespace is, in my opinion, not a good idea, because cross-namespace moves could mess up the ordering of the pages.
    • Task
    • ·Closed
    Special:MyLanguage redirects to the translation original (i.e. the page with no language suffix) if the user language is the same as the site content language, even if that particular translation original has another language. In this case, it should redirect to the /en subpage (assuming that the site content language is English) if that exists. **List of steps to reproduce** (step by step, including full links if applicable): * For the page [[https://commons.wikimedia.org/wiki/Commons:Gara_e_fotografisë_së_ushqimit_tradicional_shqiptar_-_2022|Commons:Gara_e_fotografisë_së_ushqimit_tradicional_shqiptar_-_2022]] on Commons the page language was set to `sq` (Albanian); this page was marked for translation * Switch Your interface language to English * Click by link [[https://commons.wikimedia.org/wiki/Special:MyLanguage/Commons:Gara_e_fotografisë_së_ushqimit_tradicional_shqiptar_-_2022|Special:MyLanguage/Commons:Gara_e_fotografisë_së_ushqimit_tradicional_shqiptar_-_2022]] **What happens?**: We got on base page (Albanian). **What should have happened instead?**: We should be got on translated /en subpage.
    • Task
    **Request – I would like to request that the Special:ActiveUsers special page, is updated to match user activity on sites using the MW software, on a more frequent (or possibly even, continuous) basis. This would give a better visual representation, in an accurate and up-to-date format, of how many users are actively working on the site. **Case – I was made aware of an issue on a non-WMF wiki where I act as an administrator, where a member of the site had viewed Special:ActiveUsers, and raised the query with myself as an admin, as to why there were people who she *knew* to be active on the site, who were not present in that list. I made a beeline for the mediawiki channel on IRC to raise the question there, after checking myself that there was, indeed, an issue. My understanding from discussion on the IRC channel is that the number of active users is not an accurate representation, but a rough guide sourced in two different ways, from two different parts of the software; this is noted in the fact that the number of users counted by Special:ActiveUsers, does not match the number seen by Special:Statistics – the difference between the two is (on our site at least) about 3 members. Statistics shows 22, ActiveUsers counts 25. **Benefits – Whilst it is useful that we have the information available in any form, it would be helpful to be able to see all the users who've been active in the previous 30 days, so we can get an idea of whether the site is being used by more or less people across the month. This allows us to get a better understanding of how our content is being produced and accessed, and whether we are reaching more users.
    • Task
    In history and contributions page if an edit has no edit summary, a message is shown to screen readers. This could be exposed to all users like so: {F34941670} The change could be limited to certain skins if we are unsure about that. More context: T298645#7651166
    • Task
    I was just writing a blog post covering profiling of Wikibase and MediaWiki when I found an unexpected call to SyntaxHighlight in my API call. It turns out that `jsonfm` is sent to the API even though the API sandbox shows `json` is selected. The UI displays at `format=json` {F34941629} There are no differences between the formatted options and normal options {F34941631} In my opinion this is confusing and we should - Have a default in the API sandbox of `jsonfm` - Allow users to set non formatted versions, such as `json`
    • Task
    **List of steps to reproduce** (step by step, including full links if applicable): * Make sure the wiki has at least 1 wanted page / redlink * Edit MediaWiki:Recentchangestext and insert "`{{Special:WantedPages/5}}`" * Open Special:RecentChanges * Open the "Other review tools" box * You will see something like "`(1 {{PLURAL:1|link|links}})`" next to the links Two examples where this has been done: - https://nekky-chan.com/wiki/Spezial:Letzte_Änderungen?uselang=en&safemode=1 - https://phtl.fandom.com/de/wiki/Spezial:Letzte_Änderungen?uselang=en&safemode=1 **What happens?**: There are some special pages which can be transcluded in regular wiki pages, for example Special:WantedPages. If a special page uses system messages which contain a l10n magic word (PLURAL, GENDER, GRAMMAR), the magic word will not be parsed when the page is transcluded in another page. This will result in text showing up that looks similar to following examples: - `{{PLURAL:$1|singular text|plural text}}` - `{{GENDER:$1|his|her|their}}` **What should have happened instead?**: Only the appropriate text (depending on `$1`) should show up; for above examples: - `singular text` (`$1` is `1`) - `female` (`$1` references a user who has set `How do you prefer to be described?` to `She edits wiki pages` on Special:Preferences) **Software version (if not a Wikimedia wiki), browser information, screenshots, other information, etc.**: At least since MediaWiki 1.33, reproducable on MediaWiki 1.37.1.
    • Task
    • ·Closed
    ==== Error ==== * mwversion: `1.38.0-wmf.18 (cb91132)` * reqId: `602a0e84-0cfc-4c34-b91d-b406c639f445` ```name=normalized_message [{reqId}] {exception_url} Wikimedia\Rdbms\DBQueryError: Error 1969: Query execution was interrupted (max_statement_time exceeded) (db1146:3314) Function: IndexPager::buildQueryInfo (contributions page unfiltered) Query: SET STATEMENT max_statement_time= ``` ```name=exception.trace,lines=10 from /srv/mediawiki/php-1.38.0-wmf.18/includes/libs/rdbms/database/Database.php(1799) #0 /srv/mediawiki/php-1.38.0-wmf.18/includes/libs/rdbms/database/Database.php(1783): Wikimedia\Rdbms\Database->getQueryException(string, integer, string, string) #1 /srv/mediawiki/php-1.38.0-wmf.18/includes/libs/rdbms/database/Database.php(1758): Wikimedia\Rdbms\Database->getQueryExceptionAndLog(string, integer, string, string) #2 /srv/mediawiki/php-1.38.0-wmf.18/includes/libs/rdbms/database/Database.php(1302): Wikimedia\Rdbms\Database->reportQueryError(string, integer, string, string, boolean) #3 /srv/mediawiki/php-1.38.0-wmf.18/includes/libs/rdbms/database/Database.php(2002): Wikimedia\Rdbms\Database->query(string, string, integer) #4 /srv/mediawiki/php-1.38.0-wmf.18/includes/libs/rdbms/database/DBConnRef.php(69): Wikimedia\Rdbms\Database->select(array, array, array, string, array, array) #5 /srv/mediawiki/php-1.38.0-wmf.18/includes/libs/rdbms/database/DBConnRef.php(319): Wikimedia\Rdbms\DBConnRef->__call(string, array) #6 /srv/mediawiki/php-1.38.0-wmf.18/includes/specials/pagers/ContribsPager.php(300): Wikimedia\Rdbms\DBConnRef->select(array, array, array, string, array, array) #7 /srv/mediawiki/php-1.38.0-wmf.18/includes/pager/IndexPager.php(284): ContribsPager->reallyDoQuery(string, integer, boolean) #8 /srv/mediawiki/php-1.38.0-wmf.18/includes/pager/IndexPager.php(756): IndexPager->doQuery() #9 /srv/mediawiki/php-1.38.0-wmf.18/includes/specials/SpecialContributions.php(330): IndexPager->getNumRows() #10 /srv/mediawiki/php-1.38.0-wmf.18/includes/poolcounter/PoolCounterWorkViaCallback.php(74): SpecialContributions->{closure}() #11 /srv/mediawiki/php-1.38.0-wmf.18/includes/poolcounter/PoolCounterWork.php(162): PoolCounterWorkViaCallback->doWork() #12 /srv/mediawiki/php-1.38.0-wmf.18/includes/specials/SpecialContributions.php(355): PoolCounterWork->execute() #13 /srv/mediawiki/php-1.38.0-wmf.18/includes/specialpage/SpecialPage.php(671): SpecialContributions->execute(NULL) #14 /srv/mediawiki/php-1.38.0-wmf.18/includes/specialpage/SpecialPageFactory.php(1378): SpecialPage->run(NULL) #15 /srv/mediawiki/php-1.38.0-wmf.18/includes/MediaWiki.php(314): MediaWiki\SpecialPage\SpecialPageFactory->executePath(string, RequestContext) #16 /srv/mediawiki/php-1.38.0-wmf.18/includes/MediaWiki.php(903): MediaWiki->performRequest() #17 /srv/mediawiki/php-1.38.0-wmf.18/includes/MediaWiki.php(563): MediaWiki->main() #18 /srv/mediawiki/php-1.38.0-wmf.18/index.php(53): MediaWiki->run() #19 /srv/mediawiki/php-1.38.0-wmf.18/index.php(46): wfIndexMain() #20 /srv/mediawiki/w/index.php(3): require(string) #21 {main} ``` ==== Impact ==== ==== Notes ==== I received another error message for the same request URL, which might be helpful: ``` MediaWiki internal error. Original exception: [96b4faa4-4e71-4b01-bcb6-23ef3c8600f3] 2022-01-22 14:31:42: Fatal exception of type "Wikimedia\Rdbms\DBQueryError" Exception caught inside exception handler. Set $wgShowExceptionDetails = true; at the bottom of LocalSettings.php to show detailed debugging information. ``` Target user of the query is [[https://commons.wikimedia.org/wiki/Special:Contributions/Wikimedia_Commons_Welcome|Wikimedia Commons Welcome]], which has 10356744 edits on commonswiki.
    • Task
    • ·Closed
    **Feature summary**: Add a checkbox that allows hiding translation pages to Special:PrefixIndex. **Use case(s) and benefits** For example, see [[//www.mediawiki.org/wiki/Special:PrefixIndex/Extension:AbuseFilter/|mw:Special:PrefixIndex/Extension:AbuseFilter/]]. The special page listed 117 subpages, in which only 27 should be counted as //independent// pages. The rest (i.e. 90 translation pages) made it extremely difficult for me to filter out contents that I don't need. There should be an option for users like me to directly hide them using a checkbox similar to Hide redirects and Strip prefix. == Current status == We've added a property in the `page_prop` the to distinguish translation pages, and filter them out.
    • Task
    • ·Closed
    **List of steps to reproduce** (step by step, including full links if applicable): * Visit https://en.wikipedia.org/wiki/Special:Contributions/User:Izno **What happens?**: Displays the reasonable error message that the account `User:Izno` does not exist (because it doesn't). Also displays, unreasonably, the contribs from the account `Izno`. {F34913961} **What should have happened instead?**: Should not display the edits from the account of `Izno`, which should be located only at https://en.wikipedia.org/wiki/Special:Contributions/Izno . **Software version (if not a Wikimedia wiki), browser information, screenshots, other information, etc**: 1.38.0-wmf.16 (02267f7)