Details
Status | Subtype | Assigned | Task | ||
---|---|---|---|---|---|
Resolved | matmarex | T376293 Remove unused raw HTML overrides for "MediaWiki:Copyright" etc. from WikimediaMessages | |||
Resolved | matmarex | T375789 Replace on-wiki raw HTML overrides for "MediaWiki:Copyright" etc. and set $wgAllowRawHtmlCopyrightMessages = false | |||
Resolved | matmarex | T45646 "MediaWiki:Copyright" message allows raw HTML |
Event Timeline
About 150 of those overrides are not used, as they override MediaWiki:Copyright, but the wiki uses MediaWiki:Wikimedia-copyright instead. The wikis have been configured this way since the migration to dual license in 2009 (rEWME6b1869934e4e: Prepping for site default overrides of copyright/TOS statements for Wikimedia…). It seems like a good opportunity for a bit of cleanup, so I'll start by deleting those.
To delete those pages, I wrote myself the following script, which I executed in my browser while logged in as "Bartosz Dziewoński (WMF)".
I also set my global preferences on that account to add pages I delete to my watchlist, and to enable all possible email notifications, to make sure I don't miss it if anyone comments about these deletions. So far I only received a lot of new user welcome messages ;)
async function doDelete( list ) { const urls = list.trim().split( /\s+/ ); for ( const url of urls ) { const apiUrl = url.replace( /\/wiki\/.+$/, '/w/api.php' ); const pageTitle = url.replace( /^.+\/wiki\//, '' ); const api = new mw.ForeignApi( apiUrl, { parameters: { assert: 'user', assertuser: mw.config.get( 'wgUserName' ) } } ); await api.postWithToken( 'csrf', { action: 'delete', title: pageTitle, reason: 'Copyright message updates ([[phab:T375789|T375789]]): Delete unused message, the copyright footer on this wiki uses [[MediaWiki:Wikimedia-copyright]] instead since the [[m:Licensing update|2009 licensing update]]' } ) .then( data => console.log( data ) ) .catch( ( code, data ) => console.log( code, data ) ); await new Promise( resolve => setTimeout( resolve, 10000 ) ); } } doDelete( ` https://af.wikipedia.org/wiki/MediaWiki:Copyright https://als.wikipedia.org/wiki/MediaWiki:Copyright https://am.wikipedia.org/wiki/መልዕክት:Copyright https://ang.wikipedia.org/wiki/MediaWiki:Copyright https://ar.wikibooks.org/wiki/ميدياويكي:Copyright https://ar.wikipedia.org/wiki/ميدياويكي:Copyright https://ar.wikiquote.org/wiki/ميدياويكي:Copyright https://ar.wikisource.org/wiki/ميدياويكي:Copyright https://ar.wikiversity.org/wiki/ميدياويكي:Copyright https://ar.wiktionary.org/wiki/ميدياويكي:Copyright https://arz.wikipedia.org/wiki/ميدياويكى:Copyright https://as.wikipedia.org/wiki/মিডিয়াৱিকি:Copyright https://bar.wikipedia.org/wiki/MediaWiki:Copyright https://be-tarask.wikipedia.org/wiki/MediaWiki:Copyright https://bg.wikipedia.org/wiki/МедияУики:Copyright https://bg.wiktionary.org/wiki/МедияУики:Copyright https://bn.wikipedia.org/wiki/মিডিয়াউইকি:Copyright https://bug.wikipedia.org/wiki/MediaWiki:Copyright https://ca.wikipedia.org/wiki/MediaWiki:Copyright https://cbk-zam.wikipedia.org/wiki/MediaWiki:Copyright https://cdo.wikipedia.org/wiki/MediaWiki:Copyright https://ceb.wikipedia.org/wiki/MediaWiki:Copyright https://co.wikipedia.org/wiki/MediaWiki:Copyright https://cs.wikipedia.org/wiki/MediaWiki:Copyright https://csb.wikipedia.org/wiki/MediaWiki:Copyright https://csb.wiktionary.org/wiki/MediaWiki:Copyright https://cy.wikipedia.org/wiki/MediaWici:Copyright https://cy.wikisource.org/wiki/MediaWici:Copyright https://cy.wiktionary.org/wiki/MediaWici:Copyright https://da.wikibooks.org/wiki/MediaWiki:Copyright https://da.wikipedia.org/wiki/MediaWiki:Copyright https://de.wikiquote.org/wiki/MediaWiki:Copyright https://de.wikisource.org/wiki/MediaWiki:Copyright https://de.wikivoyage.org/wiki/MediaWiki:Copyright https://diq.wikipedia.org/wiki/MediaWiki:Copyright https://el.wikipedia.org/wiki/MediaWiki:Copyright https://el.wikisource.org/wiki/MediaWiki:Copyright https://el.wiktionary.org/wiki/MediaWiki:Copyright https://en.wikibooks.org/wiki/MediaWiki:Copyright https://en.wikiquote.org/wiki/MediaWiki:Copyright https://en.wikisource.org/wiki/MediaWiki:Copyright https://en.wikiversity.org/wiki/MediaWiki:Copyright https://en.wikivoyage.org/wiki/MediaWiki:Copyright https://eo.wikipedia.org/wiki/MediaWiki:Copyright https://eo.wiktionary.org/wiki/MediaWiki:Copyright https://es.wikipedia.org/wiki/MediaWiki:Copyright https://es.wikiquote.org/wiki/MediaWiki:Copyright https://et.wikisource.org/wiki/MediaWiki:Copyright https://eu.wikipedia.org/wiki/MediaWiki:Copyright https://fa.wikivoyage.org/wiki/مدیاویکی:Copyright https://fi.wikipedia.org/wiki/Järjestelmäviesti:Copyright https://fiu-vro.wikipedia.org/wiki/MediaWiki:Copyright https://fo.wikipedia.org/wiki/MediaWiki:Copyright https://fr.wikipedia.org/wiki/MediaWiki:Copyright https://fr.wikivoyage.org/wiki/MediaWiki:Copyright https://fr.wiktionary.org/wiki/MediaWiki:Copyright https://frp.wikipedia.org/wiki/MediaWiki:Copyright https://fur.wikipedia.org/wiki/MediaWiki:Copyright https://ga.wikipedia.org/wiki/MediaWiki:Copyright https://ga.wiktionary.org/wiki/MediaWiki:Copyright https://gd.wiktionary.org/wiki/MediaWiki:Copyright https://gl.wiktionary.org/wiki/MediaWiki:Copyright https://gv.wikipedia.org/wiki/MediaWiki:Copyright https://he.wikipedia.org/wiki/מדיה_ויקי:Copyright https://he.wiktionary.org/wiki/מדיה_ויקי:Copyright https://hi.wikipedia.org/wiki/मीडियाविकि:Copyright https://hr.wikipedia.org/wiki/MediaWiki:Copyright https://hsb.wikipedia.org/wiki/MediaWiki:Copyright https://hu.wikipedia.org/wiki/MediaWiki:Copyright https://hy.wiktionary.org/wiki/MediaWiki:Copyright https://id.wikipedia.org/wiki/MediaWiki:Copyright https://ie.wikipedia.org/wiki/MediaWiki:Copyright https://ii.wikipedia.org/wiki/MediaWiki:Copyright https://io.wikipedia.org/wiki/MediaWiki:Copyright https://io.wiktionary.org/wiki/MediaWiki:Copyright https://it.wikiquote.org/wiki/MediaWiki:Copyright https://ka.wikipedia.org/wiki/მედიავიკი:Copyright https://kk.wiktionary.org/wiki/МедиаУики:Copyright https://kn.wikipedia.org/wiki/ಮೀಡಿಯವಿಕಿ:Copyright https://ko.wikibooks.org/wiki/미디어위키:Copyright https://ko.wikisource.org/wiki/미디어위키:Copyright https://la.wikisource.org/wiki/MediaWiki:Copyright https://li.wikipedia.org/wiki/MediaWiki:Copyright https://lij.wikipedia.org/wiki/MediaWiki:Copyright https://lmo.wikipedia.org/wiki/MediaWiki:Copyright https://lt.wikipedia.org/wiki/MediaWiki:Copyright https://map-bms.wikipedia.org/wiki/MédhiaWiki:Copyright https://mi.wikipedia.org/wiki/MediaWiki:Copyright https://mk.wikipedia.org/wiki/МедијаВики:Copyright https://mr.wikipedia.org/wiki/मिडियाविकी:Copyright https://mr.wiktionary.org/wiki/मिडियाविकी:Copyright https://nah.wikipedia.org/wiki/Huiquimedia:Copyright https://ne.wikibooks.org/wiki/मीडियाविकि:Copyright https://ne.wikipedia.org/wiki/मीडियाविकि:Copyright https://new.wikipedia.org/wiki/मिडियाविकि:Copyright https://nl.wikibooks.org/wiki/MediaWiki:Copyright https://nl.wikipedia.org/wiki/MediaWiki:Copyright https://nl.wikiquote.org/wiki/MediaWiki:Copyright https://nl.wikisource.org/wiki/MediaWiki:Copyright https://nl.wiktionary.org/wiki/MediaWiki:Copyright https://no.wikiquote.org/wiki/MediaWiki:Copyright https://no.wikisource.org/wiki/MediaWiki:Copyright https://nrm.wikipedia.org/wiki/MediaWiki:Copyright https://oc.wikipedia.org/wiki/MediaWiki:Copyright https://pl.wikibooks.org/wiki/MediaWiki:Copyright https://pl.wikipedia.org/wiki/MediaWiki:Copyright https://pl.wikiquote.org/wiki/MediaWiki:Copyright https://pl.wikisource.org/wiki/MediaWiki:Copyright https://pms.wikipedia.org/wiki/MediaWiki:Copyright https://pt.wikiquote.org/wiki/MediaWiki:Copyright https://qu.wikipedia.org/wiki/MediaWiki:Copyright https://ro.wikibooks.org/wiki/MediaWiki:Copyright https://ro.wikipedia.org/wiki/MediaWiki:Copyright https://roa-rup.wikipedia.org/wiki/MediaWiki:Copyright https://ru.wikibooks.org/wiki/MediaWiki:Copyright https://ru.wikipedia.org/wiki/MediaWiki:Copyright https://ru.wikiquote.org/wiki/MediaWiki:Copyright https://ru.wikisource.org/wiki/MediaWiki:Copyright https://ru.wikivoyage.org/wiki/MediaWiki:Copyright https://scn.wikipedia.org/wiki/MediaWiki:Copyright https://scn.wiktionary.org/wiki/MediaWiki:Copyright https://sco.wikipedia.org/wiki/MediaWiki:Copyright https://sd.wikipedia.org/wiki/ذريعات_وڪي:Copyright https://sd.wiktionary.org/wiki/ذريعات_وڪي:Copyright https://shn.wikivoyage.org/wiki/မီႇတီႇယႃႇဝီႇၶီႇ:Copyright https://sk.wikibooks.org/wiki/MediaWiki:Copyright https://sl.wikibooks.org/wiki/MediaWiki:Copyright https://sl.wiktionary.org/wiki/MediaWiki:Copyright https://sq.wiktionary.org/wiki/MediaWiki:Copyright https://st.wiktionary.org/wiki/MediaWiki:Copyright https://su.wikipedia.org/wiki/MédiaWiki:Copyright https://sv.wikipedia.org/wiki/MediaWiki:Copyright https://sv.wikisource.org/wiki/MediaWiki:Copyright https://sv.wikivoyage.org/wiki/MediaWiki:Copyright https://sv.wiktionary.org/wiki/MediaWiki:Copyright https://ta.wikipedia.org/wiki/மீடியாவிக்கி:Copyright https://ta.wiktionary.org/wiki/மீடியாவிக்கி:Copyright https://te.wikipedia.org/wiki/మీడియావికీ:Copyright https://th.wikipedia.org/wiki/มีเดียวิกิ:Copyright https://tl.wikibooks.org/wiki/MediaWiki:Copyright https://tl.wikipedia.org/wiki/MediaWiki:Copyright https://tl.wiktionary.org/wiki/MediaWiki:Copyright https://tr.wiktionary.org/wiki/MediaWiki:Copyright https://vi.wikibooks.org/wiki/MediaWiki:Copyright https://vi.wikipedia.org/wiki/MediaWiki:Copyright https://vi.wikiquote.org/wiki/MediaWiki:Copyright https://vls.wikipedia.org/wiki/MediaWiki:Copyright https://war.wikipedia.org/wiki/MedyaWiki:Copyright https://zh-classical.wikipedia.org/wiki/MediaWiki:Copyright https://zh-yue.wikipedia.org/wiki/MediaWiki:Copyright ` );
I also deleted a couple of overrides for MediaWiki:History_copyright that were empty, which is the same as the default value.
async function doDelete( list ) { const urls = list.trim().split( /\s+/ ); for ( const url of urls ) { const apiUrl = url.replace( /\/wiki\/.+$/, '/w/api.php' ); const pageTitle = url.replace( /^.+\/wiki\//, '' ); const api = new mw.ForeignApi( apiUrl, { parameters: { assert: 'user', assertuser: mw.config.get( 'wgUserName' ) } } ); await api.postWithToken( 'csrf', { action: 'delete', title: pageTitle, reason: 'Copyright message updates ([[phab:T375789|T375789]]): Delete empty message, identical to the default' } ) .then( data => console.log( data ) ) .catch( ( code, data ) => console.log( code, data ) ); await new Promise( resolve => setTimeout( resolve, 10000 ) ); } } doDelete( ` https://gu.wikipedia.org/wiki/મીડિયાવિકિ:History_copyright https://ja.wikibooks.org/wiki/MediaWiki:History_copyright https://ja.wikiquote.org/wiki/MediaWiki:History_copyright https://ka.wikipedia.org/wiki/მედიავიკი:History_copyright https://tr.wikipedia.org/wiki/MediaWiki:History_copyright https://ur.wikipedia.org/wiki/میڈیاویکی:History_copyright ` );
Next steps will have to wait until next week, after the changes from T45646 are live on all wikis. I started thinking about how to do them already.
- I could just create MediaWiki:Wikimedia-copyright-footer and delete MediaWiki:Wikimedia-copyright, but those pages often have long histories, and it would be nice to keep them.
- To do that, I could move MediaWiki:Wikimedia-copyright to MediaWiki:Wikimedia-copyright-footer and then edit it, but that means that for at least a few seconds, wrong markup will be shown in the copyright footer on all pages, and I'd like to avoid this disruption.
- After thinking about it for a bit, the ideal approach seems to be creating MediaWiki:Wikimedia-copyright-footer first, and then history-merging MediaWiki:Wikimedia-copyright into it.
I tried moving and history-merging MediaWiki: namespace pages locally, and it went alright, although I found a few bugs:
- T376398: MessageCache inconsistently treats redirects in the "MediaWiki:" namespace
- T376399: Moving a "MediaWiki:" namespace page creates a non-functional redirect
Maybe we could resolve them before proceeding. I proposed patches: https://gerrit.wikimedia.org/r/q/topic:mediawiki-ns-redirects
I also added a note to Tech News: https://meta.wikimedia.org/w/index.php?title=Tech/News/2024/41&diff=prev&oldid=27552131
I already created the new -footer page on dewiki a few days ago. I intented to proceed exactly the way you stated above, creating first and then history-merging later. Is everything ready for the change? Then I could do this for dewiki already.
Edit: Ah I think I have to wait until thursday?
That's right, the change that starts using the new messages will be deployed to dewiki on Thursday (assuming no unforeseen issues happen – please check T375657: 1.43.0-wmf.26 deployment blockers for any updates about that).
Feel free to make the updates on dewiki once that happens, and I will skip it. (I'll also skip and manually review any other projects where either the old or new messages have been edited in the meantime.)
For some reason, the script that checks legal conformity of the footer, failed with:
ERROR: Error while downloading https:///wiki/Wikipedia:Text_of_the_Creative_Commons_Attribution-ShareAlike_4.0_International_License: <urlopen error no host given>
I believe it is because the script assumes absolute URLs. Will fix it.
Change #1079973 had a related patch set uploaded (by Jcrespo; author: Jcrespo):
[operations/puppet@production] check footer legal complience: Add support for relative URLs
I wrote myself another script to do the edits. It does some ugly regexp replacements, and then displays a diff of the wikitext and the resulting parsed HTML, and either saves the changes or skips depending on whether I think the diff looks correct. The regexp replacements are not always correct, but that's okay due to the manual review.
It also generates a log of the diffs, which I will share here once I'm done editing.
function getDiffTable() { return $( '<table>' ).addClass( 'diff' ).append( $( '<col>' ).addClass( 'diff-marker' ), $( '<col>' ).addClass( 'diff-content' ), $( '<col>' ).addClass( 'diff-marker' ), $( '<col>' ).addClass( 'diff-content' ), $( '<thead>' ).append( $( '<tr>' ).addClass( 'diff-title' ).append( $( '<td>' ) .attr( 'colspan', 2 ) .addClass( 'diff-otitle diff-side-deleted' ) .text( mw.msg( 'currentrev' ) ), $( '<td>' ) .attr( 'colspan', 2 ) .addClass( 'diff-ntitle diff-side-added' ) .text( mw.msg( 'yourtext' ) ) ) ), $( '<tbody>' ) ); } function stripOuterParagraph( html ) { let m; if ( ( m = html.match( /^<p>(.*)\n?<\/p>\n?/s ) ) && !m[ 1 ].includes( '</p>' ) ) { html = m[ 1 ]; } return html; } let LOG = '<link rel="stylesheet" href="https://meta.wikimedia.org/w/load.php?lang=en&only=styles&modules=mediawiki.skinning.interface|mediawiki.diff.styles|mediawiki.codex.messagebox.styles|skins.vector.styles">\n'; async function doUpdate( list ) { await mw.loader.using( 'mediawiki.page.preview' ); await mw.loader.using( 'oojs-ui' ); const urls = list.trim().split( /\s+/ ); const titleMap = { 'Wikimedia-copyright': 'Wikimedia-copyright-footer', Copyright: 'Copyright-footer', History_copyright: 'Copyright-footer-history' }; for ( const url of urls ) { const apiUrl = url.replace( /\/wiki\/.+$/, '/w/api.php' ); const oldPageTitle = url.replace( /^.+\/wiki\//, '' ); const newPageTitle = oldPageTitle.replace( /:([^\/]+)/, ( _, t ) => ':' + titleMap[ t ] ); const $header = $( '<strong>' ).append( $( '<a>' ).attr( 'href', url ).text( url ), $( '<span>' ).text( ' → ' + newPageTitle ) ); // non-anonymous mw.ForeignApi with CentralAuth adds some overhead, so avoid it if possible const writeApi = new mw.ForeignApi( apiUrl, { parameters: { formatversion: 2, assert: 'user', assertuser: mw.config.get( 'wgUserName' ) } } ); const readApi = new mw.ForeignApi( apiUrl, { parameters: { formatversion: 2 }, anonymous: true, headers: { 'Promise-Non-Write-API-Action': 'true' } } ); const newPageMissing = ( await readApi.get( { prop: 'revisions', titles: newPageTitle } ) ).query.pages[ 0 ].missing; if ( !newPageMissing ) { await OO.ui.alert( $( '<div>' ) .append( $header ) .append( $( '<p>' ).text( 'New page already exists' ) ), { size: 'larger' } ); continue; } const oldContent = ( await readApi.get( { prop: 'revisions', titles: oldPageTitle, rvprop: 'content', rvslots: 'main' } ) ).query.pages[ 0 ].revisions[ 0 ].slots.main.content; const newContent = oldContent .replaceAll( url.replace( /\/wiki\/.+$/, '' ), '' ) .replaceAll( url.replace( /\/wiki\/.+$/, '' ).replace( 'https:', 'http:' ), '' ) .replaceAll( url.replace( /\/wiki\/.+$/, '' ).replace( 'https:', '' ), '' ) .replaceAll( /<a\b[^>]*><\/a>/g, '' ) .replaceAll( /<a\b[^>]*?\bhref=['"]*((?:https?:)?\/\/[^'" ]+).*?>([^<]+)<\/a>/g, '[$1 $2]' ) .replaceAll( /<a\b[^>]*?\bhref=['"]*\/wiki\/([^'" ]+).*?>([^<]+)<\/a>/g, ( _, $1, $2 ) => `[[${ decodeURI( $1 ).replaceAll( '_', ' ' ) }|${ $2 }]]` ) .replaceAll( /<a\b[^>]*?\bhref=['"]*(?:\{\{SERVER\}\})?\{\{localurle?:([^}]+)\}\}.*?>([^<]+)<\/a>/g, '[[$1|$2]]' ) .replaceAll( /\n\n+/g, '\n' ); if ( oldContent === newContent ) { await OO.ui.alert( $( '<div>' ) .append( $header ) .append( $( '<p>' ).text( 'No changes' ) ), { size: 'larger' } ); continue; } const oldHtml = ( await readApi.post( { action: 'expandtemplates', title: 'TEST PAGE', text: oldContent, prop: 'wikitext' } ) ).expandtemplates.wikitext; const newHtml = stripOuterParagraph( ( await readApi.post( { action: 'parse', title: 'TEST PAGE', text: newContent, prop: 'text', wrapoutputclass: '', disablelimitreport: true } ) ).parse.text ).trim(); const diffOfWikitext = ( await readApi.post( { action: 'compare', uselang: 'en', fromslots: 'main', 'fromtext-main': oldContent, 'fromcontentmodel-main': 'wikitext', toslots: 'main', 'totext-main': newContent, 'tocontentmodel-main': 'wikitext', slots: 'main' } ) ).compare.bodies.main; const diffOfHtml = ( await readApi.post( { action: 'compare', uselang: 'en', fromslots: 'main', 'fromtext-main': oldHtml, 'fromcontentmodel-main': 'wikitext', toslots: 'main', 'totext-main': newHtml, 'tocontentmodel-main': 'wikitext', slots: 'main' } ) ).compare.bodies.main; const $table = getDiffTable(); $table.find( 'tbody' ).html( diffOfWikitext ); $table.append( $( '<thead>' ).append( $( '<tr>' ).addClass( 'diff-title' ).append( $( '<td>' ) .attr( 'colspan', 2 ) .addClass( 'diff-otitle diff-side-deleted' ) .text( 'Old HTML' ), $( '<td>' ) .attr( 'colspan', 2 ) .addClass( 'diff-ntitle diff-side-added' ) .text( 'New HTML (after parsing)' ) ) ), $( '<tbody>' ).append( $( '<tr>' ).append( $( '<td>' ) .attr( 'colspan', 2 ) .html( oldHtml ), $( '<td>' ) .attr( 'colspan', 2 ) .html( newHtml ) ) ) ); $table.append( $( '<tbody>' ).html( diffOfHtml ) ); $table.css( 'background', 'white' ); const $msg = $( '<div>' ).addClass( 'diff-editfont-monospace diff-contentalign-left' ) .append( $header ) .append( $table ); const okay = await OO.ui.confirm( $msg, { size: 'larger' } ); LOG += ( mw.util.messageBox( $msg[ 0 ], okay ? 'success' : 'warning' ) ).outerHTML; if ( !okay ) { continue; } await writeApi.postWithToken( 'csrf', { action: 'edit', title: newPageTitle, text: newContent, createonly: true, summary: `Copyright message updates ([[phab:T375789|T375789]]): Migrate [[${ oldPageTitle }]] to [[${ newPageTitle }]], now using wikitext markup instead of raw HTML` } ) .then( ( data ) => console.log( data ) ) .catch( ( code, data ) => console.log( code, data ) ); await new Promise( ( resolve ) => setTimeout( resolve, 1000 ) ); await writeApi.postWithToken( 'csrf', { action: 'mergehistory', from: oldPageTitle, to: newPageTitle, reason: 'Copyright message updates ([[phab:T375789|T375789]])' } ) .then( ( data ) => console.log( data ) ) .catch( ( code, data ) => console.log( code, data ) ); } OO.ui.alert( 'All done!' ); } doUpdate( ` https://als.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://am.wikipedia.org/wiki/መልዕክት:Wikimedia-copyright https://ar.wikinews.org/wiki/ميدياويكي:Copyright https://ar.wikipedia.org/wiki/ميدياويكي:Wikimedia-copyright https://ar.wikisource.org/wiki/ميدياويكي:Wikimedia-copyright https://as.wikipedia.org/wiki/মিডিয়াৱিকি:Wikimedia-copyright https://azb.wikipedia.org/wiki/مدیاویکی:Wikimedia-copyright https://bar.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://bd.wikimedia.org/wiki/মিডিয়াউইকি:Wikimedia-copyright https://be-tarask.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://bg.wikinews.org/wiki/МедияУики:Copyright https://bg.wikipedia.org/wiki/МедияУики:History_copyright https://bg.wikipedia.org/wiki/МедияУики:Wikimedia-copyright https://bn.wikibooks.org/wiki/মিডিয়াউইকি:Wikimedia-copyright https://bn.wikipedia.org/wiki/মিডিয়াউইকি:Wikimedia-copyright https://bn.wikisource.org/wiki/মিডিয়াউইকি:Wikimedia-copyright https://bn.wiktionary.org/wiki/মিডিয়াউইকি:Wikimedia-copyright https://bs.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://ca.wikinews.org/wiki/MediaWiki:Copyright https://ca.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://cdo.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://commons.wikimedia.org/wiki/MediaWiki:Wikimedia-copyright https://cs.wikipedia.org/wiki/MediaWiki:History_copyright https://da.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://de.wikinews.org/wiki/MediaWiki:Copyright https://de.wikiquote.org/wiki/MediaWiki:Wikimedia-copyright https://de.wikisource.org/wiki/MediaWiki:Wikimedia-copyright https://de.wikivoyage.org/wiki/MediaWiki:Wikimedia-copyright https://de.wiktionary.org/wiki/MediaWiki:Wikimedia-copyright https://el.wikinews.org/wiki/MediaWiki:Copyright https://el.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://en.wikibooks.org/wiki/MediaWiki:Wikimedia-copyright https://en.wikinews.org/wiki/MediaWiki:Copyright https://en.wikinews.org/wiki/MediaWiki:Wikimedia-copyright https://en.wikiquote.org/wiki/MediaWiki:Wikimedia-copyright https://en.wikisource.org/wiki/MediaWiki:Wikimedia-copyright https://en.wikiversity.org/wiki/MediaWiki:Wikimedia-copyright https://en.wikivoyage.org/wiki/MediaWiki:Wikimedia-copyright https://en.wiktionary.org/wiki/MediaWiki:Wikimedia-copyright https://eo.wikinews.org/wiki/MediaWiki:Copyright https://es.wikinews.org/wiki/MediaWiki:Copyright https://es.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://fa.wikipedia.org/wiki/مدیاویکی:Wikimedia-copyright https://fi.wikinews.org/wiki/Järjestelmäviesti:Copyright https://fi.wikipedia.org/wiki/Järjestelmäviesti:History_copyright https://fi.wikipedia.org/wiki/Järjestelmäviesti:Wikimedia-copyright https://fr.wikibooks.org/wiki/MediaWiki:Wikimedia-copyright https://fr.wikinews.org/wiki/MediaWiki:Copyright https://fr.wikipedia.org/wiki/MediaWiki:History_copyright https://fr.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://fr.wiktionary.org/wiki/MediaWiki:Wikimedia-copyright https://frp.wikipedia.org/wiki/MediaWiki:History_copyright https://frr.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://ga.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://gl.wikibooks.org/wiki/MediaWiki:Wikimedia-copyright https://gl.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://gl.wikiquote.org/wiki/MediaWiki:Wikimedia-copyright https://gl.wikisource.org/wiki/MediaWiki:Wikimedia-copyright https://got.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://he.wikipedia.org/wiki/מדיה_ויקי:History_copyright https://he.wikiquote.org/wiki/מדיה_ויקי:History_copyright https://he.wikiquote.org/wiki/מדיה_ויקי:Wikimedia-copyright https://he.wiktionary.org/wiki/מדיה_ויקי:History_copyright https://hi.wikipedia.org/wiki/मीडियाविकि:Wikimedia-copyright https://hu.wikinews.org/wiki/MediaWiki:Copyright https://hu.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://id.wikipedia.org/wiki/MediaWiki:Copyright https://ii.wikipedia.org/wiki/MediaWiki:Copyright https://is.wikipedia.org/wiki/Melding:Wikimedia-copyright https://it.wikinews.org/wiki/MediaWiki:Copyright https://it.wikiquote.org/wiki/MediaWiki:Wikimedia-copyright https://it.wikiversity.org/wiki/MediaWiki:Wikimedia-copyright https://it.wikivoyage.org/wiki/MediaWiki:Wikimedia-copyright https://ja.wikinews.org/wiki/MediaWiki:Copyright https://ka.wikipedia.org/wiki/მედიავიკი:Wikimedia-copyright https://kk.wikipedia.org/wiki/МедиаУики:Wikimedia-copyright https://ko.wikinews.org/wiki/미디어위키:Copyright https://ko.wikipedia.org/wiki/미디어위키:Wikimedia-copyright https://ko.wikiquote.org/wiki/미디어위키:Wikimedia-copyright https://krc.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://lb.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://li.wiktionary.org/wiki/MediaWiki:Wikimedia-copyright https://lmo.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://lt.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://lv.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://mai.wikipedia.org/wiki/मेडियाविकि:Wikimedia-copyright https://map-bms.wikipedia.org/wiki/MédhiaWiki:Wikimedia-copyright https://mk.wikipedia.org/wiki/МедијаВики:Wikimedia-copyright https://mr.wikipedia.org/wiki/मिडियाविकी:Wikimedia-copyright https://ms.wikipedia.org/wiki/MediaWiki:History_copyright https://nds.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://nl.wikibooks.org/wiki/MediaWiki:Wikimedia-copyright https://nl.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://nn.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://no.wikinews.org/wiki/MediaWiki:Copyright https://nrm.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://nv.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://oc.wikipedia.org/wiki/MediaWiki:History_copyright https://oc.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://pa.wikipedia.org/wiki/ਮੀਡੀਆਵਿਕੀ:Wikimedia-copyright https://pa.wiktionary.org/wiki/ਮੀਡੀਆਵਿਕੀ:Wikimedia-copyright https://pfl.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://pl.wikinews.org/wiki/MediaWiki:Copyright https://ps.wikivoyage.org/wiki/ميډياويکي:Wikimedia-copyright https://pt.wikibooks.org/wiki/MediaWiki:Wikimedia-copyright https://pt.wikinews.org/wiki/MediaWiki:Copyright https://pt.wikipedia.org/wiki/MediaWiki:History_copyright https://pt.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://rm.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://ro.wikinews.org/wiki/MediaWiki:Copyright https://ro.wikivoyage.org/wiki/MediaWiki:Wikimedia-copyright https://ru.wikimedia.org/wiki/MediaWiki:Wikimedia-copyright https://ru.wikinews.org/wiki/MediaWiki:Copyright https://ru.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://se.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://simple.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://sk.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://sl.wikipedia.org/wiki/MediaWiki:History_copyright https://sl.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://species.wikimedia.org/wiki/MediaWiki:Wikimedia-copyright https://sq.wikinews.org/wiki/MediaWiki:Copyright https://sq.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://stq.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://sv.wikinews.org/wiki/MediaWiki:Copyright https://sv.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://ta.wikinews.org/wiki/மீடியாவிக்கி:Copyright https://test.wikidata.org/wiki/MediaWiki:Wikimedia-copyright https://th.wikinews.org/wiki/มีเดียวิกิ:Copyright https://th.wikipedia.org/wiki/มีเดียวิกิ:Wikimedia-copyright https://ti.wikipedia.org/wiki/ሜድያዊኪ:Wikimedia-copyright https://tl.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://tr.wikinews.org/wiki/MediaWiki:Copyright https://tr.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://uk.wikinews.org/wiki/MediaWiki:Copyright https://uk.wikisource.org/wiki/MediaWiki:Wikimedia-copyright https://ur.wikipedia.org/wiki/میڈیاویکی:Wikimedia-copyright https://ur.wikiquote.org/wiki/میڈیاویکی:Wikimedia-copyright https://vec.wikisource.org/wiki/MediaWiki:Wikimedia-copyright https://vi.wikibooks.org/wiki/MediaWiki:History_copyright https://vi.wikibooks.org/wiki/MediaWiki:Wikimedia-copyright https://vi.wikipedia.org/wiki/MediaWiki:History_copyright https://vi.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://vi.wikisource.org/wiki/MediaWiki:Wikimedia-copyright https://vi.wiktionary.org/wiki/MediaWiki:History_copyright https://wa.wiktionary.org/wiki/MediaWiki:Wikimedia-copyright https://wikimania2007.wikimedia.org/wiki/MediaWiki:Copyright https://www.mediawiki.org/wiki/MediaWiki:Copyright https://yo.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://zh-classical.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://zh-yue.wikipedia.org/wiki/MediaWiki:History_copyright https://zh-yue.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://zh.wikibooks.org/wiki/MediaWiki:History_copyright https://zh.wikibooks.org/wiki/MediaWiki:Wikimedia-copyright https://zh.wikinews.org/wiki/MediaWiki:Copyright https://zh.wikipedia.org/wiki/MediaWiki:History_copyright https://zh.wikipedia.org/wiki/MediaWiki:Wikimedia-copyright https://zh.wikiquote.org/wiki/MediaWiki:History_copyright https://zh.wikiquote.org/wiki/MediaWiki:Wikimedia-copyright https://zh.wikisource.org/wiki/MediaWiki:Wikimedia-copyright https://zh.wikivoyage.org/wiki/MediaWiki:Wikimedia-copyright https://zh.wiktionary.org/wiki/MediaWiki:History_copyright https://zh.wiktionary.org/wiki/MediaWiki:Wikimedia-copyright ` );
Change #1079973 merged by Jcrespo:
[operations/puppet@production] check footer legal complience: Add support for relative URLs
There are a few wikis that I wasn't able to edit (either because they're closed or due to abuse filters), a few wikis where the links to license etc. are incorrect, and a few with more complex problems. I'll update them manually or reach out to folks.
I noticed several messages where, after the recent upgrade to CC BY-SA 4.0 license, the link to license text was pointing to a page that does not exist. I corrected all of the links I found to use https://creativecommons.org/licenses/by-sa/4.0/ instead, and sent a quick email to legal@ asking if there's something better that could be done.
https://bs.wikipedia.org/w/index.php?diff=3660058
https://gl.wikipedia.org/w/index.php?diff=6864524
https://gl.wikibooks.org/w/index.php?diff=20618
https://gl.wikiquote.org/w/index.php?diff=22171
https://gl.wikisource.org/w/index.php?diff=21374
https://mk.wikipedia.org/w/index.php?diff=5283421
https://pa.wikipedia.org/w/index.php?diff=770957
I've made around 300 edits / deletions / page moves today. There are just a few of the old messages left: https://global-search.toolforge.org/?q=.*®ex=1&namespaces=8&title=(Copyright|History+copyright|Wikimedia-copyright)(%2F.*)%3F – they are either using complex markup (images and unbalanced list items), or I've been unable to edit or delete them due to abuse filters or the wiki being locked down. I will figure out what to do with them later this week.
I had to modify abuse filters to allow (auto)confirmed users to add links in their edits in order to create the new messages on a few wikis:
https://en.wiktionary.org/wiki/Special:AbuseFilter/history/32/diff/prev/1977
https://en.wikiversity.org/wiki/Special:AbuseFilter/history/16/diff/prev/441
https://sv.wikinews.org/wiki/Special:Missbruksfilter/history/1/diff/prev/2
OK, all done.
The most… interesting override I encountered was https://de.wiktionary.org/w/index.php?title=MediaWiki:Wikimedia-copyright-footer&action=edit&oldid=9979183, which is used to display "see also" ("Siehe auch") messages on German Wiktionary when it has entries for both lowercase-initial and uppercase-initial versions of the same word, e.g. https://de.wiktionary.org/wiki/Haus and https://de.wiktionary.org/wiki/haus. A piece of JavaScript (https://de.wiktionary.org/w/index.php?title=MediaWiki:Common.js&oldid=9894405#L-319) moves this message from the page footer to the top of the article. Luckily it was possible to make it work in the wikitext version too, so I didn't have to figure out how to do that better… (although it would be nice).
Several Wikinews add small icons representing the license in the footer (e.g. https://en.wikinews.org/). They all used different icons, and updating those was a bit of a chore.
Many projects also use these overrides to add non-copyright-related links to the footer, such as pageview statistics or contact links (e.g. https://th.wikipedia.org/, https://als.wikipedia.org/). I was able to automate most of these replacements, but ended up doing a few unusual ones by hand. Maybe this could be a normal MediaWiki feature, it would be easier to maintain.
There are three pages I wasn't able to edit:
- https://ge.wikimedia.org/wiki/მედიავიკი:Wikimedia-copyright – Wikimedia Georgia user group's wiki is only editable by their staff/members(?). I reached out to https://meta.wikimedia.org/wiki/User_talk:Mehman to update it.
- https://labtestwikitech.wikimedia.org/wiki/MediaWiki:Copyright – not sure who can even delete this, but this is an unused message, so it doesn't matter.
- https://id.wikipedia.org/wiki/MediaWiki:Copyright – there's an abuse filter that prevents deleting this page (probably by accident). I could probably bypass it, but I encountered an interesting bug when trying to delete it: T377384, and this is also an unused message, so keeping it as a test case for that bug seems more useful.
You can find all of the edits I made here: https://guc.toolforge.org/?by=date&user=Bartosz+Dziewoński+(WMF) (this tool does not list deletions, alas I don't think there's a convenient way to find them).
Change #1080805 had a related patch set uploaded (by Bartosz Dziewoński; author: Bartosz Dziewoński):
[operations/mediawiki-config@master] Set $wgAllowRawHtmlCopyrightMessages = false
Looks done now
- https://labtestwikitech.wikimedia.org/wiki/MediaWiki:Copyright – not sure who can even delete this, but this is an unused message, so it doesn't matter.
Change #1080805 merged by jenkins-bot:
[operations/mediawiki-config@master] Set $wgAllowRawHtmlCopyrightMessages = false
Mentioned in SAL (#wikimedia-operations) [2024-10-17T13:27:14Z] <urbanecm@deploy2002> Started scap sync-world: Backport for [[gerrit:1080805|Set $wgAllowRawHtmlCopyrightMessages = false (T375789)]], [[gerrit:1080828|tests: ensure maintenance base class has always been requierd (T377391 T357535)]]
Mentioned in SAL (#wikimedia-operations) [2024-10-17T13:29:28Z] <urbanecm@deploy2002> cscott, urbanecm, matmarex: Backport for [[gerrit:1080805|Set $wgAllowRawHtmlCopyrightMessages = false (T375789)]], [[gerrit:1080828|tests: ensure maintenance base class has always been requierd (T377391 T357535)]] synced to the testservers (https://wikitech.wikimedia.org/wiki/Mwdebug)
Mentioned in SAL (#wikimedia-operations) [2024-10-17T13:35:22Z] <urbanecm@deploy2002> Finished scap sync-world: Backport for [[gerrit:1080805|Set $wgAllowRawHtmlCopyrightMessages = false (T375789)]], [[gerrit:1080828|tests: ensure maintenance base class has always been requierd (T377391 T357535)]] (duration: 08m 07s)
{{Done}} https://labtestwikitech.wikimedia.org/w/index.php?title=Special:Log&logid=945
I had to use mwscript createAndPromote --wiki=labtestwiki --interface-admin --force --reason 'Enable editing rawhtml ([[phab:T375789]])' BryanDavis-labtest to give my labtestwiki account the ability to modify that file. No accounts on labtestwiki had the interface admin right prior to this action. This was likely an accidental loss of rights following editsitecss/editsitejs being revoked from the sysop group quite a while ago now.