Commit graph

548 commits

Author SHA1 Message Date
jenkins-bot
f7388feffa Merge "diff: Add inline format switch when Wikidiff2 is installed" 2023-06-26 02:03:41 +00:00
Umherirrender
25029b2739 diff: Change from WikiPage::getParserOutput to ParserOutputAccess
- Allows to reuse the RevisionRecord and not reloading in
  WikiPage::getParserOutput from the RevisionStore
- Allows to pass ParserOutputAccess::OPT_NO_AUDIENCE_CHECK to get a
  ParserOutput also for revision deleted content, where a check
  against RevisionRecord::FOR_PUBLIC would reject the content
- Allows to show error message when render does not work

Bug: T212316
Change-Id: Id3c2de3e5cf796f5a9b213bd7bd94c9291014eb5
2023-06-26 11:58:58 +10:00
Tim Starling
8983c9d862 diff: Move SlotDiffRenderer::getTablePrefix() parts assembly up to DifferenceEngine
getTablePrefix() is used to show the inline legend and inline switcher.
It is not yet part of a released stable interface.

Theoretically there may be multiple text slots on a page, and we don't
want multiple inline legends. There was already a fragment assembly
system, for the benefit of hook handlers, so move that up to the page
level, so that it can also deduplicate prefix fragments coming from
each slot.

Add tests.

Bug: T324759
Change-Id: I9baa5c24128c63bc318ba13e83a024843f4ab15e
2023-06-26 11:28:59 +10:00
hmonroy
360182a566 diff: Add inline format switch when Wikidiff2 is installed
Add a switch that allows toggling between inline and two-column format
when Wikidiff2 is installed.

Inline toggle should also support no-JS toggling

The legend should toggle when switching from table to inline after the
first load.

Introduced a temporary feature flag to show this inline toggle so that
we can merge and easily continue the improvements. It will be removed
when ready for production.

Bug: T336712
Bug: T330229
Change-Id: Ie6a48e495f2bb299d8b984e7c40363d534c7915b
2023-06-26 10:31:54 +10:00
Gergő Tisza
a9e0562cfb Improve handling of diffs between incompatible content models
When the old and new content object for a slot cannot be compared,
show an error message for that slot only, instead of throwing an
exception.

Bug: T214217
Change-Id: I6e982df358f85ca78f0448b3a93ded3f40676310
2023-06-23 19:09:59 +00:00
Tim Starling
512806564d Do not generate diffs for slots with identical content
When the old and new revisions have identical content in a given slot,
do not include the relevant SlotDiffRenderer in the return value of
DifferenceEngine::getSlotDiffRenderers(), so that the relevant table
prefixes and modules will be omitted.

Also:

* In TextSlotDiffRenderer::getTextDiff(), return an empty string when
  the inputs are equal, instead of invoking the diff engine. Previously,
  the inline format would produce a <tr> element in this case, causing
  the diff-empty message to be omitted.
* Clarify the doc comment up the stack, indicating SlotDiffRenderer may
  return zero <tr> tags, it doesn't have to be one or more.
* Fix the documented return type of getSlotContents() so that @var is
  not needed in the caller.
* Don't convert the return value of SlotDiffRenderer::getDiff() to
  boolean. It's always a string so compare it to the empty string.

Note that the cache key for inline empty diffs will change, because
TextSlotDiffRenderer::getExtraCacheKeys() is not called anymore for
empty diffs.

Bug: T338670
Change-Id: I0774ba0b159ac43ec214403cf2d06740f6d067cd
2023-06-21 14:46:19 +10:00
Bartosz Dziewoński
36e54eb3e6 DifferenceEngine: Fix "No difference" notice on cached diffs
Also, HTML-escape the cache key in the output. In the current
implementation it is HTML-safe, but it could change.

Bug: T228761
Change-Id: I23406266fef4906cdf0a281f7058b66b30680f0d
2023-06-13 23:54:17 +00:00
Daimona Eaytoy
4d5cd3a84f Replace deprecated MWException
Bug: T328220
Change-Id: I66be7a6dd752d6b9c254beb65f4eb5ace3c89776
2023-06-09 17:21:12 +02:00
Sam Wilson
1eb586013c diff: Add legend and tooltips to inline diff display
Add a legend at the top of the inline diff display, showing the
meanings of the colours of the inserted and deleted highlighting.
Also add the same text as tooltips on the highlighted elements.

The legend is added as part of a new area above the diff table
that can be modified via a new TextSlotDiffRendererTablePrefix
hook, so that extensions can add other buttons etc. there as
required.

This is a follow-up to the previous attempt, which added the
legend in DifferenceEngine::showDiff() and was called from
too many places. This patch moves it to be called in
DifferenceEngine::showDiffPage().

Bug: T324759
Change-Id: I2a3c67bcfa47313dee597e602a62073e4e298cd2
Follow-up: I6de30bf79eb5ac262285951792782b870d075e00
2023-05-31 15:43:28 +10:00
Samtar
2ba3afbd47
Revert "diff: Add legend and tooltips to inline diff display"
This reverts commit 19eb61de66.

Reason for revert: Reworking

Change-Id: I2bc524254d10d6612c5b0a7db95dd6af5f60ccaa
Depends-On: I5c3d7df530eb6fc09ba380d42a81b17511861308
Depends-On: I60784afa0d47e22acd9e8a981092784c84b250eb
2023-05-18 15:50:59 +01:00
Sam Wilson
2d8b724e4e diff: Only show inline legend for text slot
To avoid showing it on other content types, such
as PageSlotDiffRenderer in ProofreadPage.

Bug: T336481
Change-Id: Ibe453fc9e8f4eea5de9c66e1446286174eb3ad17
2023-05-17 07:51:24 +08:00
Sam Wilson
19eb61de66 diff: Add legend and tooltips to inline diff display
Add a legend at the top of the inline diff display, showing the
meanings of the colours of the inserted and deleted highlighting.
Also add the same text as tooltips on the highlighted elements.

The legend is added as part of a new area above the diff table
that can be modified via a new DifferenceEngineBeforeDiffTable
hook, so that extensions can add other buttons etc. there as
required.

Bug: T324759
Change-Id: I6de30bf79eb5ac262285951792782b870d075e00
2023-04-28 11:27:10 +08:00
jenkins-bot
5b272dde21 Merge "Add GENDER support for 'diff-multi-sameuser'" 2023-04-17 22:35:09 +00:00
Jon Harald Søby
20e447eb8e Add GENDER support for 'diff-multi-sameuser'
Bug: T271030
Change-Id: I8ac6ebcb34c606acd1ecb4b160508bf265ef57c6
2023-04-17 23:41:11 +02:00
MusikAnimal
4aa7adf482 ApiComparePages: expose 'difftype' param if wikidiff2 is installed
Bug: T334011
Change-Id: Ia2242d352f23588f90143d10c16fba885f64ac63
2023-04-11 19:49:11 -04:00
Sam Wilson
231849c701 Add lists of class names for dynamic diff classes
This duplicates what's done in resources/src/mediawiki.action/mediawiki.action.edit.preview.js
for easier searching.

Change-Id: Iecac1b242f461d3e10cf2b9ad8e1c0d950ef9dfa
2023-03-16 14:48:38 +08:00
James D. Forrester
ad06527fb4 Reorg: Namespace the Title class
This is moderately messy.

Process was principally:

* xargs rg --files-with-matches '^use Title;' | grep 'php$' | \
  xargs -P 1 -n 1 sed -i -z 's/use Title;/use MediaWiki\\Title\\Title;/1'
* rg --files-without-match 'MediaWiki\\Title\\Title;' . | grep 'php$' | \
  xargs rg --files-with-matches 'Title\b' | \
  xargs -P 1 -n 1 sed -i -z 's/\nuse /\nuse MediaWiki\\Title\\Title;\nuse /1'
* composer fix

Then manual fix-ups for a few files that don't have any use statements.

Bug: T166010
Follows-Up: Ia5d8cb759dc3bc9e9bbe217d0fb109e2f8c4101a
Change-Id: If8fc9d0d95fc1a114021e282a706fc3e7da3524b
2023-03-02 08:46:53 -05:00
Amir Sarabadani
7d8768e931 Reorg: Move HTML-related classes out of includes/ to Html/
Bug: T321882
Change-Id: I5dc1f7e9c303cd3f5b9dd7010d6bb470d8400a18
2023-02-16 20:40:01 +01:00
jenkins-bot
38a241252a Merge "docs: Add missing StubUserLang type to some @param/@return" 2023-02-03 23:45:03 +00:00
jenkins-bot
3eb74515fd Merge "OutputPage: Call setSections() from addParserOutputMetadata()" 2023-01-16 22:23:22 +00:00
Umherirrender
1af3e211eb docs: Add missing StubUserLang type to some @param/@return
Change-Id: Ic1f192c7a21e529113fd7d537a79b2e4f8983b9c
2023-01-12 19:04:20 +01:00
thiemowmde
e25503c6a3 diff: Update incomplete PHPDoc type in DifferenceEngine
Change-Id: Ib1591246d20ad63f0e64756054816352d9bdede4
2023-01-10 20:37:49 +00:00
jenkins-bot
293f8dfba8 Merge "Make use of ??= in more places" 2022-12-21 00:33:46 +00:00
Bartosz Dziewoński
0945f6976c OutputPage: Call setSections() from addParserOutputMetadata()
Remove calls elsewhere which now became redundant.

Bug: T325562
Bug: T325600
Change-Id: I1611f3bdea46a729ecf9daf699d761b018d49b55
2022-12-20 01:08:23 +01:00
Umherirrender
82466b0594 diff: Handle timestamp correct for suppressed revisions
- No linking when the user cannot see the suppressed revision
- Double-strike the timestamp (b6f148b)

Bug: T325450
Change-Id: If94e9655d72e59a2b9d5147c5c2338e98f0ad163
2022-12-17 23:17:16 +01:00
DannyS712
c1db64b808 Make use of ??= in more places
New feature from PHP 7.4

Change-Id: Ifa7a9bc7b2ec415ad7ecb23f4c1776f51f58fd6b
2022-12-17 01:10:13 +00:00
Umherirrender
f65e6bb488 Replace deprecated Linker::commentBlock/revComment
Bug: T324906
Change-Id: I8cf96c3b7a03127ce1243f7a7e849b6d5a5d3dfa
2022-12-11 01:33:56 +01:00
Amir Sarabadani
2d60ba0c63 Reorg: Move DummyLinker and Linker to linker/
This feels like a no-brainer unless I'm missing something obvious

Bug: T321882
Change-Id: Id49c3d0dd6ea4593211048850856b5b8e05a8fb3
2022-12-08 06:38:17 +01:00
Tim Starling
540bddfb1f When content is marked bad, show an error, don't pretend it is empty
It misrepresents the users contribution to show empty text for a
revision when in fact the revision contained some text which we later
lost.

Also, errors from SqlBlobStore::fetchBlobs() did not stop a cache entry
from being written, so a subsequent cache hit would show the bad
revision as empty.

So, in Storage:
* Add BadBlobException, which is thrown by the Storage layer to
  indicate that a revision is marked as bad.
* Have SqlBlobStore::getBlobStore() return an error for bad blobs
  instead of an empty string.
* Duplicate the check for flags=error into SqlBlobStore::expandBlob().
  This avoids an unnecessary cache fetch, and avoids making
  decompressData() throw on error, which would be a b/c break.
* In SqlBlobStore::getBlob(), suppress the cache when there was an
  error.

In Revision:
* Add BadRevisionException, to wrap BadBlobException in the Revision
  layer.
* Return null from RevisionRecord::getContent() on a broader set of
  errors. Make it mostly non-throwing.
* Add RevisionRecord::getContentOrThrow() which returns a non-nullable
  Content.
* Note that SlotRecord::getContent() returns a non-nullable Content so
  now throws in more cases.

In the UI:
* In Article::view(), catch the exception and show an error message.
* In DifferenceEngine, catch the exception and make a suitable error
  message available via getRevisionLoadErrors(). In the diff page, show
  the error message in a box.
* In ApiComparePages and the legacy rvdiffto, show a warning.
* In RawAction, show a 404 by analogy with other error cases.
* In EditPage, there was already handling for $content=null with an
  appropriate error message (missing-revision-content). But having
  $this->textbox1 = null caused PHP 8.1 deprecation warnings, so I fixed
  that.
* In EditPage undo, there was already handling for null content, but I
  improved the error message: "does not exist or was deleted" seems more
  appropriate than "conflicting intermediate edits".

Change-Id: Idd1278d6d756ef37d64addb7b5f3be30747ea603
2022-12-05 22:03:45 +00:00
Reedy
0cb2c3c106 Fix casing of class and function name usages
Bug: T253628
Change-Id: I5c64f436d3cf757390b751ce3e34bfc7872bc176
2022-12-04 19:09:30 +00:00
jenkins-bot
1f39f2892c Merge "Really drop DifferenceEngine::getDiffBodyCacheKey" 2022-11-17 14:09:34 +00:00
jenkins-bot
381c1f0822 Merge "Track reason for rendering in more detail." 2022-11-17 12:44:01 +00:00
Matěj Suchánek
755e86c8fb Really drop DifferenceEngine::getDiffBodyCacheKey
In 81f69c2, I have only removed the callers. The method is
now dead code and should have been removed as well.

Change-Id: I556ed5398435f4d3a5f400e07e4819dd16e0df06
2022-11-17 12:24:09 +00:00
Matěj Suchánek
81f69c23dc Remove DifferenceEngine::getDiffBodyCacheKey
It has been deprecated since 1.31 and it is unused.

Change-Id: Ia2473ba8b5e68b884ec0ee0464147c3a063eb45e
2022-11-16 16:08:29 +01:00
daniel
0820a7701f Track reason for rendering in more detail.
When setting causeAgent for jobs, be specific.
When creating parserOptions, call setRenderReason.

This allows us to capture statistics on what actions cause jobs,
renders, and cache writes.

Change-Id: Iaef64beadce1489bebb6bb00855c3ba6013a29d8
2022-11-15 15:32:03 +00:00
Matěj Suchánek
b9b1bcc5bc Remove DifferenceEngine::textDiff
It has been deprecated since 1.32 and it is unused.

Change-Id: I30563b714ba2ca2a4c2789186cd64db8274a17df
2022-11-09 16:41:54 +00:00
Tim Starling
0077c5da15 Use short array destructuring instead of list()
Introduced in PHP 7.1. Because it's shorter and looks nice.

I used regex replacement.

Change-Id: I0555e199d126cd44501f859cb4589f8bd49694da
2022-10-21 15:33:37 +11:00
Daimona Eaytoy
350e9b88c1 Fixes for the phan upgrade, part 1
Mainly, document some parameters as non-empty-array so that phan knows
the list of arguments won't be empty when unpacking.

In EditPage, account for hooks potentially unsetting the copyright
notice.

Also rewrite some code in LogPager, so it's hopefully easier for phan to
understand what's going on.

Change-Id: Ic0638571554424098d0743db32dd46723a08e103
2022-10-08 13:08:47 +00:00
C. Scott Ananian
c0c220e93d Use default ParserOutput::getText() options for injectTOC
We rely on the default settings for `skin` and `injectTOC` set by
OutputPage::addParserOutputText(), and so no longer need to explicitly
initialize these from the skin options.

Bug: T317333
Depends-On: Ica30569efbb5730eff5b807e8fc34beb2e13e74f
Change-Id: I5b8ecd1abf87e66bb75d7c26790f9e7c1b3a6da3
2022-09-08 15:56:14 -04:00
jenkins-bot
1fb3b92a0b Merge "OutputPage: Provide consistent info about whether the revision shown is current" 2022-08-31 13:37:23 +00:00
Bartosz Dziewoński
bbbf575f42 OutputPage: Provide consistent info about whether the revision shown is current
Previously, OutputPage::isRevisionCurrent() would check a replica
database, potentially different from the database used to fetch the
revision being displayed, according to OutputPage::getRevisionId().
Now the data for both functions is provided in the same way.

Bug: T314684
Change-Id: I266d643d1eed931df346889f43d72d42e5f4a3ba
2022-08-31 13:15:54 +00:00
Jon Robson
af9b17b660 DifferenceEngine: Should respect skin option for rendering table of contents
Bug: T311529
Change-Id: If6267f3389b166043fc94d7f952bc54122b1a378
2022-08-23 15:44:36 +00:00
Matěj Suchánek
3378c95852 Hard deprecate DifferenceEngine::textDiff
It has been deprecated since 1.32 and it is unused.

Change-Id: Icca017deb30dfc335f56ebc1ab2e6522c64e64af
2022-07-08 07:01:05 +00:00
Matěj Suchánek
07a9769501 Hard deprecate DifferenceEngine::getDiffBodyCacheKey
It has been deprecated since 1.31 and it is unused.

Change-Id: I44bc12e484b4d8ebf362c5ed3ed6052e70016453
2022-07-05 20:33:51 +02:00
Aryeh Gregor
4a52bf553f Use MainConfigNames instead of string literals, #3
This edition brought to you by:

grep -ERIn $(grep -o "'[A-Za-z0-9_]*'" includes/MainConfigNames.php | tr
"\n" '|' | sed 's/|$/\n/') includes/

I only corrected a fraction of the results provided by that command. I'm
submitting the partial patch now so it doesn't bitrot.

Bug: T305805
Change-Id: If1918c0b3d88cdf90403921e4310740e206d6962
2022-04-26 14:31:26 +03:00
Umherirrender
0c9496c3bf diff: Replace deprecated User::getOption
Bug: T296083
Change-Id: I8362cec1c48a2f096d9d93e50d79e9e5cb127236
2022-04-22 14:21:13 +02:00
Umherirrender
1f71eccf63 phan: Disable null_casts_as_any_type setting
Make phan stricter about null types by setting null_casts_as_any_type to
false (the default in mediawiki-phan-config)
Remaining false positive issues are suppressed.
The suppression and the setting change can only be done together

Bug: T242536
Bug: T301991
Change-Id: I0f295382b96fb3be8037a01c10487d9d591e7e01
2022-03-21 18:25:07 +00:00
jenkins-bot
c82ced1ba1 Merge "diff: Fix small issues and compact syntax in DifferenceEngine" 2022-02-04 15:09:28 +00:00
Thiemo Kreuz
32bbb421c7 diff: Fix small issues and compact syntax in DifferenceEngine
The purpose of all these changes is not only to make the code
shorter, but to make it more readable.

Notable:
* Fix wrong type hints.
* The `foreach ( $roles )` loop was processing everything twice.
* Inline preg_replace_callback() callbacks.

Change-Id: I2b8146946ab6966cc6f047556a0a898624af181a
2022-02-04 10:55:48 +01:00
Ammarpad
c5fc8ae96c Add default comment when there's no comment on some changeslist pages
Default comment is added to changelist rows that have no comment/edit
summary. This affects history and diff pages as well contributions page.

The default comment is hidden by default.

Bug: T298645
Change-Id: I2982a69886a90797b2a658df13db9780e88b871c
2022-01-25 12:25:55 +01:00
Umherirrender
990acaa7a2 Avoid revision 0 listed in message difference-missing-revision
For Special:Diff/prev/1234567890 the message is
2 revisions of this difference (0 and 1234567890) were not found.

The 0 is not helpful

Change-Id: I6bada64c8cffb4e653ea7a46c31fb014fd6b862f
2022-01-08 12:19:57 +01:00
Siddharth VP
191cadb6a5 Fix typos in comments (C-D)
Change-Id: I568fb93b53feb83f026d485136dd0d116d677f4f
2021-12-30 18:00:02 +05:30
Legoktm
93f79a9122 Revert "Replace deprecated methods IContextSource::getWikiPage && IContextSource::canUseWikiPage"
This reverts commit ef458e8948.

Reason for revert: Causes page tabs to disappear on Special:WhatLinksHere.

Bug: T297744
Change-Id: I0ee282a9f7a5a9b2cfdc3261d800d9e27eaf977e
2021-12-14 12:43:15 -08:00
Amir Sarabadani
3cacc7f9c3 Fix local rendering of link in diff view with action=render
We probably should move Linker::expandLocalLinks( $text ) somewhere
better.

Bug: T263581
Change-Id: Iac446e761a709b6ceff5bd83dfa9a80db50a08d5
2021-12-01 17:18:53 +01:00
jenkins-bot
701b77930b Merge "Use LinkRenderer instead of building link HTML manually" 2021-11-27 08:28:50 +00:00
Reedy
2a2bb1e9bd Remove or replace usages of "sane"
Bug: T254646
Change-Id: I096b2cf738a1395a14f1d47bcbed0c2c686c2581
2021-11-22 13:35:17 +00:00
Reedy
7bf779524a Remove or replace usages of "sanity"
Bug: T254646
Change-Id: I2b120f0b9c9e1dc1a6c216bfefa3f2463efe1001
2021-11-19 23:19:42 +00:00
jenkins-bot
6f210f1128 Merge "Replace deprecated methods IContextSource::getWikiPage && IContextSource::canUseWikiPage" 2021-11-19 15:09:58 +00:00
Roman Stolar
ef458e8948 Replace deprecated methods IContextSource::getWikiPage && IContextSource::canUseWikiPage
Bug: T275710
Change-Id: I74b8f76a525793bc029d9ee1f7297b46ac0a9174
2021-11-16 13:58:39 +02:00
Umherirrender
171775e07b doc: Cleanup @param documentation
No extra sign needed between variable and description

Change-Id: Iaaaf62a3ffba7967aef8c31b121121b2830b74c4
2021-11-04 22:32:39 +01:00
C. Scott Ananian
df3cc40fac Rename ParserOutput::{allow,prevent}Clickjacking() -> ::{get,set}PreventClickjacking()
This name is consist with the rest of the setter and getter methods
in ParserOutput.  Renamed the methods in OutputPage, ImageHistoryList,
ImageHistoryPseudoPager, and ContribsPager as well for consistency;
it also makes chasing down lingering references in codesearch easier.

Soft-deprecated the old name for 1.38.  Hard-deprecation will follow,
but there are a number of users in production that should be chased
down first.

Code search:

https://codesearch.https://codesearch.wmcloud.org/deployed/?q=(allow%7Cprevent)Clickjacking&i=nope&files=&excludeFiles=&repos=

Bug: T287216
Change-Id: I9822c60c180d204bd30cb4447a1120155d456da4
2021-10-01 14:13:47 -04:00
Umherirrender
769bdbf091 docs: Fix nullable documentation for class properties
Change-Id: I6d0577124d852103f485ffdc819876a13f6641c3
2021-09-24 00:54:53 +00:00
Daimona Eaytoy
25e10bb38a Rename diff-related classes for LTR compatibility
Nothing in the code expects things to be on the left/right, it was just
a naming convention. However, it caused some issues because CSSJanus
flips the attributes in the stylesheet for RTL languages.

So just use more descriptive names that also avoid issues with RTL
languages.

Bug: T290731
Change-Id: I8a383cd1e3981dc8a826ff60eee523d9f71d1d3d
2021-09-17 22:58:44 +00:00
Daimona Eaytoy
38e40047e0 Apply side lock to diff headers and empty lines, too
Bug: T288676
Change-Id: Ia39df2647db3c1d010e0b84f161b369f71d7a728
2021-08-12 18:08:57 +02:00
Daimona Eaytoy
9ef58c1d0b Lock selection to a single side in diffs
This is inspired by the github approach, with some adjustments,
simplifications and improvements. This approach should be supported by
all grade C browsers, except for Firefox 27-51. As such, it seems the
best solution until we can use the grid layout (T270775).

The boilerplate code for the new module was shamelessly stolen from
Ied858465c2e938828fc146880827acb6aa15fdd6.

Also noting here for posterity: this will NOT work in WMF servers (beta
or prod), since we use wikidiff2 to generate diffs there.

Bug: T285956
Change-Id: I0cb5f10254af78043b0f6250f7695c6b962fbf6b
2021-07-27 20:45:22 +00:00
DannyS712
47d70dbfba Post Revision-removal cleanup
Updates for the removal of the Revision class itself
and the various methods/hooks/variables removed in the
process, including:

- Update some documentation removing most references
to the Revision class and updating the MCR migration
notes to reflect the past tense for Revision methods.

- Change some capitalization from "Revision" to "revision"
to make it clear comments are about revisions in general,
not the Revision class in particular.

- Minor code tweaks including removing unused variables that
were around for the old hooks that were removed, and
removing the use of DeprecatablePropertyArray where no
longer needed for anything.

- Fix incorrect documentation for PageUpdater::getStatus(),
the status value changed a while ago to have revision-record
in addition to revision, and recently to only have the
revision-record, but ironically PageUpdater was never updated.

- Removed Parser::$mRevisionObject, used to be a Revision object
and was deprecated in 1.35, missed earlier because it was no
longer being set to Revision objects, always null.

- Add RevisionRecord typehints in DummyLinker to match those
in the corresponding Linker methods

This should be a no-op in terms of functionality.

Bug: T247143
Change-Id: I03bbb94fc29085855448780b1a5ad9063911ecc4
2021-06-24 00:32:39 +00:00
Roman Stolar
dbe594a3ce Replace RecentChange::getPerformer with RecentChange::getPerformerIdentity
Preparing replace in core (DifferenceEngine.php, Article.php, ChangesListSpecialPage.php)

Bug: T276412
Change-Id: I4fd9cbd9404879d082179b68a9993e7203e43a8d
2021-05-27 11:45:17 +03:00
DannyS712
f60ea069ba Remove remaining non-test uses of Revision objects
The following methods no longer support Revision parameters:
- CategoryMembershipChange::__construct
- ContentHandler::getUndoContent
- DerivedPageDataUpdater::prepareUpdate
- DifferenceEngine::getRevisionHeader

The following methods were removed entirely:
- Title::countAuthorsBetween

The following methods return arrays that formerly include
a 'revision' key that would emit deprecation warnings when
accessed and return a Revision object. The Revision object
has been removed from the arrays, and the 'revision-record'
key should be used to get the relevant RevisionRecord instead:
- PageUpdater::doModify
- PageUpdater::doCreate
- Parser::statelessFetchTemplate

The ParserOptions `templateCallback` option is a callback
that is called in Parser::fetchTemplateAndTitle() and should
return an array - the 'revision' key to that array used to
be a Revision object and was used if no 'revision-record'
was returned - it is now ignored.

Bug: T247143
Change-Id: I163ada88d649c75697aff4fa31a3a3c0bdef78b7
2021-05-04 13:10:22 -07:00
DannyS712
7bd7d2a6c1 Remove hooks that use Revision objects
All hooks were previously hard deprecated
in 1.35. Affected hooks:
* ArticleRevisionUndeleted - use RevisionUndeleted
* ArticleRollbackComplete - use RollbackComplete
* DiffRevisionTools - use DiffTools
* DiffViewHeader - use DifferenceEngineViewHeader
* HistoryRevisionTools - use HistoryTools
* NewRevisionFromEditComplete - use RevisionFromEditComplete
* PageContentInsertComplete - use PageSaveComplete
* PageContentSaveComplete - use PageSaveComplete
* ParserFetchTemplate - use BeforeParserFetchTemplateRevisionRecord
* RevisionInsertComplete - use RevisionRecordInserted
* TitleMoveComplete - use PageMoveComplete
* TitleMoveCompleting - use PageMoveCompleting
* UndeleteShowRevision - no replacement

Includes a fix for setting the associated rev id
of page protections, which previously was only done
using $nullRevision which was a Revision object created
if any hooks needed it; those hooks were hard deprecated
and so for WMF prod the rev id was not being set.

Bug: T247143
Depends-On: Idfa345193ae99fb2f1c9a8f8d28d8d540a6e3d62
Change-Id: I519167f76a5a3c1f5410415b2721462a3dcc3ec8
2021-04-30 17:28:20 +00:00
Amir Sarabadani
b6f148bec6 Add classes to when a linked change is suppressed
This also tries to centralize adding logic of adding history-deleted
class as well. To make future changes easier.

This doesn't affect history deletion on files, recentchanges, and logs yet

Bug: T23272
Change-Id: I08f14f712479e1b170c606e2b64857f8386acd76
2021-04-29 15:28:06 +00:00
jenkins-bot
e98ae90c02 Merge "Avoid using User::getBoolOption()" 2021-03-28 02:18:21 +00:00
ZabeMath
60606a2986 Avoid using User::getBoolOption()
User::getBoolOption() is deprecated and should be replaced with UserOptionsLookup::getBoolOption()

Bug: T277600
Change-Id: Ife3c721237258d50852bbf764def74657cc70428
2021-03-27 22:51:03 +01:00
Cindy Cicalese
29862dd51d Add support for derived MCR slots
Bug: T277203
Change-Id: I1c70abc00c912b283e3e6eb2266633ae3f57673b
2021-03-18 15:34:46 -04:00
Petr Pchelko
c4f28d017b Replace some usages of User with Authority/UserIdentity
Change-Id: I7dfbf9bbd1709f5e67de7f6680a5a5ad156994fa
2021-03-04 17:20:40 -07:00
Petr Pchelko
ab7157e05e Convert DifferencesEngine to Authority
Change-Id: I5a4dbd2c73694b0df7e6781e7d3f7a60b91d5484
2021-03-01 13:38:58 -07:00
Petr Pchelko
782a46f661 Use Authority for revision audience where possible
Depends-On: I963a79d94b9e39086940a43945def7c8eff1536d
Change-Id: If99d428b391c0eaf61396565af7f38740bef6c4a
2021-02-24 10:56:50 -07:00
Matěj Suchánek
6cac207f15 Use LinkRenderer instead of building link HTML manually
Change-Id: I3e9fac92e78aa599fdaa1a6061af363cd48eb554
2021-02-12 12:35:32 +01:00
jdlrobson
ddb0c53f46 mw-warning class is replaced with warningbox
The styles can be removed as there are no caching implications here
If a skin is loading `legacy` feature or providing its own (e.g
Minerva)

Non-Wikimedia skins loading content but not legacy will lose
styling here, but that will be consistent with other message
boxes in the interface.

Bug: T269797
Change-Id: I5cfa9d83bedd2786d65d835c1f7623b7a61317c4
2020-12-09 13:27:52 -08:00
Umherirrender
692148fd62 Improve and add documentation to diff related classes
Change-Id: Ic10c700e970018fa0b9a219d96d56908b0298d71
2020-11-22 19:09:02 +00:00
Umherirrender
96cefbccfd Use existing RevisionStore in diff related context
RevisionStore includes the RevisionLookup, use the same instance

Change-Id: Ia299dae4bfb75c06ae2fca099e780ea6d2acecf5
2020-11-14 02:52:36 +01:00
Umherirrender
36b297560d Replace deprecated WikiPage::factory in DifferenceEngine
Change-Id: I2f32d9169d0bef5ed5cd433c05e2257ab7bf95f2
2020-11-11 22:36:36 +01:00
Thiemo Kreuz
1fc8d79ac6 Remove documentation that literally repeats the code
For example, documenting the method getUser() with "get the User
object" does not add any information that's not already there.
But I have to read the text first to understand that it doesn't
document anything that's not already obvious from the code.

Some of this is from a time when we had a PHPCS sniff that was
complaining when a line like `@param User $user` doesn't end
with some descriptive text. Some users started adding text like
`@param User $user The User` back then. Let's please remove
this.

Change-Id: I0ea8d051bc732466c73940de9259f87ffb86ce7a
2020-10-27 19:20:26 +00:00
Thiemo Kreuz
fd7363a1e1 Fix broken PHPDoc comments that don't start with /**
Change-Id: I8db56ff0f73873864dde260e51adcd729aa74e94
2020-07-23 16:09:41 +00:00
DannyS712
fe201ad436 Don't create Revisions for deprecated hooks if hook is not registered
Once the Revision class is hard deprecated, we will still need to
run hooks that use Revision objects; even though the hooks will be
deprecated, Revision objects still need to be created for them.

To ensure that deprecation warnings aren't triggered by creating
Revision objects in deployed code, for deprecated hooks only
create the Revision object if the hook is registered.

All hooks that pass Revision objects have already been hard deprecated.

Bug: T246284
Change-Id: I7e718551822825cd390662bb201dd13e2e527e8b
2020-07-01 03:44:36 +00:00
DannyS712
1359f1533c DifferenceEngine: Don't pass false to DiffTools hook
Bug: T256298
Change-Id: I2aeb96a63c30ed226d8d2f05a78baf37c50c6f4e
2020-06-25 01:20:03 +00:00
DannyS712
72010ca818 DifferenceEngine: Call DiffTools hook with correct parameter order
mNewRevisionRecord is meant to be the first parameter, and
mOldRevisionRecord the third, not the other way around

Bug: T256298
Change-Id: I030a9834635a85ad464e5826926c26b41a9c31b0
2020-06-24 22:05:55 +00:00
jenkins-bot
1dd24c56e8 Merge "diff: Remove unneeded false check" 2020-06-24 09:29:25 +00:00
DannyS712
5abd50b925 Add HistoryTools and DiffTools hooks
Bug: T255494
Bug: T255495
Change-Id: Ib2ab2e26a95affdd1dfa6b945f752157580ea2d3
2020-06-23 17:30:22 -07:00
Umherirrender
eb095ad311 diff: Remove unneeded false check
$difftext is always a string since
I2f8a9dbebd2290b7feafb20e2bb2a2693e18ba11
Init with empty string and than only concat is used

Change-Id: Ie606a441d8c59313505640c25406a7c59433b5cc
2020-06-22 22:36:04 +02:00
DannyS712
a5dc0331d0 Add new DifferenceEngineViewHeader hook to replace DiffViewHeader
Bug: T255769
Change-Id: I8adf51fe641c88c9b37080af065a0a9cd920de44
2020-06-18 13:25:29 +00:00
Tim Starling
47a1619027 Remove terminating line breaks from debug messages
A terminating line break has not been required in wfDebug() since 2014,
however no migration was done. Some of these line breaks found their way
into LoggerInterface::debug() calls, where they mess up the formatting
of the debug log.

So, remove terminating line breaks from wfDebug() and
LoggerInterface::debug() calls.

Also:
* Fix the stripping of leading line breaks from the log header emitted
  by Setup.php. This feature, accidentally broken in 2014, allows
  requests to be distinguished in the log file.
* Avoid using the global variable $self.
* Move the logging of the client IP back to Setup.php. It was moved to
  WebRequest in the hopes that it would not always be needed, however
  $wgRequest->getIP() is now called unconditionally a few lines up in
  Setup.php. This means that it is put in its proper place after the
  "start request" message.
* Wrap the log header code in a closure so that variables like $name do
  not leak into global scope.
* In Linker.php, remove a few instances of an unnecessary second
  parameter to wfDebug().

Change-Id: I96651d3044a95b9d210b51cb8368edc76bebbb9e
2020-06-03 12:01:16 +10:00
Tim Starling
68c433bd23 Hooks::run() call site migration
Migrate all callers of Hooks::run() to use the new
HookContainer/HookRunner system.

General principles:
* Use DI if it is already used. We're not changing the way state is
  managed in this patch.
* HookContainer is always injected, not HookRunner. HookContainer
  is a service, it's a more generic interface, it is the only
  thing that provides isRegistered() which is needed in some cases,
  and a HookRunner can be efficiently constructed from it
  (confirmed by benchmark). Because HookContainer is needed
  for object construction, it is also needed by all factories.
* "Ask your friendly local base class". Big hierarchies like
  SpecialPage and ApiBase have getHookContainer() and getHookRunner()
  methods in the base class, and classes that extend that base class
  are not expected to know or care where the base class gets its
  HookContainer from.
* ProtectedHookAccessorTrait provides protected getHookContainer() and
  getHookRunner() methods, getting them from the global service
  container. The point of this is to ease migration to DI by ensuring
  that call sites ask their local friendly base class rather than
  getting a HookRunner from the service container directly.
* Private $this->hookRunner. In some smaller classes where accessor
  methods did not seem warranted, there is a private HookRunner property
  which is accessed directly. Very rarely (two cases), there is a
  protected property, for consistency with code that conventionally
  assumes protected=private, but in cases where the class might actually
  be overridden, a protected accessor is preferred over a protected
  property.
* The last resort: Hooks::runner(). Mostly for static, file-scope and
  global code. In a few cases it was used for objects with broken
  construction schemes, out of horror or laziness.

Constructors with new required arguments:
* AuthManager
* BadFileLookup
* BlockManager
* ClassicInterwikiLookup
* ContentHandlerFactory
* ContentSecurityPolicy
* DefaultOptionsManager
* DerivedPageDataUpdater
* FullSearchResultWidget
* HtmlCacheUpdater
* LanguageFactory
* LanguageNameUtils
* LinkRenderer
* LinkRendererFactory
* LocalisationCache
* MagicWordFactory
* MessageCache
* NamespaceInfo
* PageEditStash
* PageHandlerFactory
* PageUpdater
* ParserFactory
* PermissionManager
* RevisionStore
* RevisionStoreFactory
* SearchEngineConfig
* SearchEngineFactory
* SearchFormWidget
* SearchNearMatcher
* SessionBackend
* SpecialPageFactory
* UserNameUtils
* UserOptionsManager
* WatchedItemQueryService
* WatchedItemStore

Constructors with new optional arguments:
* DefaultPreferencesFactory
* Language
* LinkHolderArray
* MovePage
* Parser
* ParserCache
* PasswordReset
* Router

setHookContainer() now required after construction:
* AuthenticationProvider
* ResourceLoaderModule
* SearchEngine

Change-Id: Id442b0dbe43aba84bd5cf801d86dedc768b082c7
2020-05-30 14:23:28 +00:00
Timo Tijhof
45da13803d resources: Bundle ajax patrol and ajax rollback code
Create a small "curate"-related bundle of moderation and review
enhancements. The overlap between the two is not perfect, but the
scripts are small enough that it doesn't seem worth trying to
create separate bundles for.

Change-Id: Ibd00e0eddfafc57323b147e225ee668528dc1c1c
2020-05-28 07:22:07 +00:00
DannyS712
9571defd8e Remove DifferenceEngine::$mNewRev and $mOldRev
Public access was deprecated in 1.32. Protected access is not
covered under the deprecation policy.

Bug: T250761
Bug: T250714
Bug: T249021
Bug: T250579
Change-Id: I47adbc316236be80672416a5c363a99c3dd53400
2020-05-26 20:51:23 +00:00
Reedy
229b2c15e8 Fix a plethora of class and function call case mismatches
Bug: T231412
Change-Id: I597a25de3294a6673424f30475760280ef209a8a
2020-05-26 14:14:46 +01:00
Reedy
988174411c Fix even more PSR12.Properties.ConstantVisibility.NotFound
Change-Id: If1335359b545c36fc979676c3e88d87628f9389e
2020-05-16 00:51:31 +01:00
DannyS712
dd8553d550 Pass RevisionRecord to DifferenceEngine::getRevisionHeader
Hard deprecate using Revision objects

Bug: T249561
Change-Id: Icf543635216ed06f3448a76faa97b459aa07f8e5
2020-04-27 18:51:05 +00:00
DannyS712
511b528227 DifferenceEngine::getRevisionHeader - accept a RevisionRecord
Using Revision is not deprecated yet

Bug: T250608
Depends-On: Ic13220b3120dbecd83685ce3553c5b5a6c1e7fdd
Change-Id: I648cb62460f6ca20217a21c462e842d82ae06613
2020-04-26 23:41:47 +00:00
DannyS712
0f826d1f73 Replace uses and hard deprecate Revision::newFromTitle
Also fixed a use of ::newFromId in benchmarkParse and Parser

Bug: T249183
Change-Id: I3219a72f1085836205dc497e2236b52db24d7c16
2020-04-18 04:47:10 +00:00
DannyS712
eeef56ec49 Fix remaining uses and hard deprecate Title::(get|count)AuthorsBetween
Bug: T249561
Bug: T249183
Change-Id: Ib25de71d4870c2832e06efc46ce372695c5031fd
2020-04-18 02:03:24 +00:00