Commit graph

1198 commits

Author SHA1 Message Date
jenkins-bot
65906da2c2 Merge "MCR: provide MultiContentSave hook to replace PageContentSave" 2020-03-30 17:09:45 +00:00
Edward Chernenko
9cf8427865 MCR: provide MultiContentSave hook to replace PageContentSave
Old hook PageContentSave only received the main slot of the article.
In order for extensions to intercept changes in all slots, they should
receive a RevisionSlots object with new content.

PageContentSave hook is still preserved for backward compatibility.

Note: parameters $iswatch and $section (from PageContentSave) are
not added into the new hook, because they are obsolete in the old hook.

Note: new hook also doesn't unnecessarily pass-by-reference (T193950),
which was an issue with the old hook.

Bug: T205982
Change-Id: I55455639c5ff6ccbf3917d85c1ab0dac847ec853
2020-03-27 23:06:33 +03:00
C. Scott Ananian
a3c9621ad0 Deprecate unusual uses of the ParserGetVariableValueSwitch hook
Ensure that the value returned is always also added to the cache, since
we (eventually) want to remove the hook's access to
$parser->mVarCache.  Also don't allow monkeying with the value passed
as $magicWordId, even though it's a reference.

Code search:
https://codesearch.wmflabs.org/deployed/?q=ParserGetVariableValueSwitch&i=nope&files=&repos=

Bug: T236813
Depends-On: Ia12faefada7e4cf04f1a6b12b3ed1703bf28e437
Depends-On: Ia9e2e00c6b7d0e62cbe80c3b124165b691b1ff3d
Depends-On: I1e48fa47b8723958d543a69aaf9b62b872200dc5
Depends-On: If9a0885a8664c22473ade712364c2dd0a5c04e0b
Change-Id: I3d6b281f8e4e0bf68eefbf9767047527b4573b79
2020-03-27 08:59:21 -04:00
C. Scott Ananian
99f6b82995 Deprecate the ParserGetVariableValueVarCache hook
We don't want to expose the internal caching mechanism of the parser.
There are no uses in deployed WMF code:

https://codesearch.wmflabs.org/deployed/?q=ParserGetVariableValueVarCache&i=nope&files=&repos=

Bug: T236813
Change-Id: I1b0a5cf7d32be86a45d7231940360e2bfce7275f
2020-03-26 18:47:30 -04:00
Daimona Eaytoy
c1d6e8b0b9 page: Remove the ArticleAfterFetchContentObject hook
Deprecated since 1.32, and no longer used anywhere.
It is referenced in ApprovedRevs, but conditional on a MW < 1.35
context only.


Change-Id: I415927f198473ae3e795fac8c4811690424f167a
2020-03-20 01:40:01 +00:00
jenkins-bot
7c0c182b5b Merge "Reconcile differences between arguments in hooks.txt and at the call site" 2020-03-09 15:35:08 +00:00
Tim Starling
eb6c5f70d9 Add ParserPreSaveTransformComplete hook
This is needed to migrate an extension (AutoWIGO2) that uses ArticleSave
to a version of MW after that hook was removed. The extension was using
ArticleSave to do its own PST processing, which probably doesn't work
with PageContentSave, and wasn't really the right way to do it in the
first place. Surprisingly, there were no useful hooks in PST or its
callers.

Change-Id: If1b3d7ea130a2b77609afe206eedc8445e1ab9f9
2020-03-08 09:52:09 +11:00
Tim Starling
30d5810572 Reconcile differences between arguments in hooks.txt and at the call site
The interface generator script now flags any differences between the
argument list at the call site and the documented arguments. Resolve all
such differences.

* In AlternateEditPreview, $parserOutput is a reference, and a
  WMF-deployed extension replaces it.
* In DeleteUnknownPreferences, fix missing "$" in &$where
* In LocalisationCacheRecache, document the unused parameter, as is the
  convention elsewhere in the file.
* In NewRevisionFromEditComplete, make all callers pass a $tags
  variable, and document the fact that there are multiple callers.
* In PageContentInsertComplete, document legacy references
* In PageContentSave, document the fact that $flags and $status are
  references. I made them legacy references, since although replacement
  will have an effect, no extension relies on this and it is not
  documented on the Manual:Hooks page.
* In PageContentSaveComplete, document $wikiPage, $user, $flags and
  $status as legacy references. Replacement of $status was broken
  by If610c68f4912e89 (MW 1.32), but I confirmed that no extensions
  in CodeSearch are currently affected.
* In ParserGetVariableValueSwitch, document $frame as a legacy reference
* In WatchArticleComplete and UnwatchArticleComplete, SpecialEditWatchlist
  was passing $user by value where as the other callers were passing it
  by reference. Passed by reference. It was already marked legacy.

Bug: T240307

Change-Id: I33f69ebdb5242982fd7986d9877959d2d33149b9
2020-03-06 15:49:15 +11:00
DannyS712
2962e56f01 Remove UserIsHidden hook, deprecated and unused
Bug: T247019
Change-Id: Icb2703d20aed1d684cd897537cba71d5e1633541
2020-03-05 19:31:46 +00:00
jenkins-bot
6512ef160c Merge "Introduce an expiry to WatchedItem" 2020-03-04 18:33:07 +00:00
MusikAnimal
bb56abfba0 Introduce an expiry to WatchedItem
Includes the new $wgWatchlistExpiry feature flag.

Consumers of WatchedItem and WatchedItemStore have not been changed to
make use of expiries, this along with associated UI changes will be done
in a separate patch.

Bug: T245213
Change-Id: Ifff5e56e0222bb325cf796e0aa3d88825820d1fd
2020-03-04 11:32:19 -05:00
Tim Starling
a37adeff89 Annotate hook parameters that are references for legacy reasons.
In hooks.txt, annotate all parameters that are references for legacy
reasons with [&] instead of &.

This will be the canonical source of this information. After T240307
is complete, assignment through the reference (replacement) will have no
effect. So if any parameters are incorrectly annotated with [&],
extensions will break.

These changes are final, since T240307 will make it impossible to change
the reference type of an existing hook. The only recourse will be add a
new hook without the reference.

Full review notes:
* FileDeleteComplete: A case of inappropriate non-object references
  introduced by analogy: the local variables are not consulted after the
  hook is called. CodeSearch reveals that handlers already use non-ref
  params, presumably due to T193950
* BeforeInitialize: Replacing the title here would have some effect, but
  it is fetched from the context and not written back, so the result would
  be inconsistent. Inadvisable.
* InitializeArticleMaybeRedirect: $target and $article are certainly
  replaceable, but not the request-sourced variables $title and $request.
  The correct way to redirect is to use $target.
* IsTrustedProxy: $ip inappropriate scalar reference
* ResourceLoaderRegisterModules: The contract is pretty clear here,
  replacement would be difficult
* ActionBeforeFormDisplay: replacement seems inadvisable; no handlers in
  codesearch
* PageHistoryBeforeList: inadvisable, no callers replace
* UnwatchArticleComplete: $user was called with & but undocumented
* APIAfterExecute: seems safe from codesearch
* APIQueryGeneratorAfterExecute: no handlers
* User::mailPasswordInternal: handlers do not use ref params
* FetchChangesList: replacement would have no effect
* ParserFirstCallInit, ParserClearState, ParserBeforeStrip,
  ParserAfterStrip, ParserAfterParse, ParserBeforeInternalParse,
  InternalParseBeforeSanitize, InternalParseBeforeLinks, ParserBeforeTidy,
  ParserAfterTidy, ParserGetVariableValueVarCache,
  ParserGetVariableValueTs, ParserGetVariableValueSwitch,
  BeforeParserrenderImageGallery: undocumented reference
* BeforeParserrenderImageGallery: replacement seems inadvisable after
  mutation. No handlers.
* RevisionInsertComplete: undocumented reference
* SkinTemplateOutputPageBeforeExec: $tpl replacement would be
  inadvisable after mutation. CodeSearch shows many callers, I haven't
  reviewed them all, but a sampling shows $tpl->set() being the usual
  pattern
* SpecialPageBeforeFormDisplay: CodeSearch confirms this is harmless
* BlockIp: did CodeSearch to confirm that neither variable is replaced
* SpecialMovepageAfterMove: did CodeSearch
* UnblockUser: no handlers
* UndeleteForm::showRevision: extensions/Video actually tries to replace
  it, but forgot to declare the parameter as a reference. Filed T246408.
* ArticleEditUpdates: $editInfo is unused after the hook call
* PageContentSave: undocumented ref params. $mainContent is unused after
  hook call.
* ImageBeforeProduceHTML: $dummy is unused after hook execution. The rest
  could be altered

Bug: T193950
Change-Id: I6ddf54cb6812d2e292eca6d8e588364498c2fe73
2020-02-28 17:23:23 +11:00
DannyS712
28671f69b4 OutputPageBeforeHTML: Fix class of first parameter in docs
Its an OutputPage, not a ParserOutput

Change-Id: Icfff5e9f8f2254eec00368ec63b24a16e4746aed
2020-02-27 05:01:35 +00:00
Tim Starling
ff4606fd7c docs: Add missing BeforeResetNotificationTimestamp hook and MediaWikiPHPUnitTest::*
Change-Id: I1dd9cb61e7732a56fcb1fc94a347311d5572b761
2020-02-25 18:25:02 -08:00
Tim Starling
53247b5c5b Add missing colons to parameter declarations
There's no other way to detect parameters, since variable names are
often mentioned in the description prose, even at the start of a line.

Change-Id: Ie375ecffaae4efa268c5305ea9b1cc55a91cd813
2020-02-26 13:05:04 +11:00
Timo Tijhof
f575721a06 Update all use of $wgVersion to MW_VERSION
Follows-up I04628de4152dd5.

Bug: T212738
Change-Id: I718474ec0d9fd29ac2c05477f0f2493615d8aff5
2020-02-25 02:16:12 +00:00
DannyS712
b640be36b1 Docs: Remove reference to UploadVerification hook, removed in 1.34
Was deprecated in 1.28 and removed, so it need not be mentioned as
an alternative to `UploadVerifyFile`

Bug: T220656
Change-Id: Ic1c78a0216ca6f03099c1e8433297418f3d50172
2020-02-23 01:48:56 +00:00
DannyS712
0c303967b1 Remove double newline in hooks.txt
Change-Id: Ib2bb7ead4e4f514c9561ca050014a4582eb34d11
2020-02-13 07:54:58 +00:00
jenkins-bot
4dbc276487 Merge "Remove ArticleContentViewCustom hook, deprecated and unused" 2020-02-13 05:13:11 +00:00
James D. Forrester
cafe286e2b Deprecate the ArticleEditUpdates hook
Change-Id: Ie85a46846315999ebaab1e1b38265937f4b2c79e
2020-02-08 20:29:35 +00:00
James D. Forrester
6a7ab1ed04 Deprecate the ArticleEditUpdatesDeleteFromRecentchanges hook
Bug: T244613
Change-Id: I2bb1645a8b5d99a5a3c4425f2bc0e8c3f524d4e8
2020-02-07 15:35:08 -08:00
DannyS712
f14fad3538 Remove ArticleContentViewCustom hook, deprecated and unused
Bug: T241351
Change-Id: Ie37ed9265511e3051ea60c6898febb567d5283df
2020-02-06 19:55:16 +00:00
Thiemo Kreuz
ea01e7cfbb parser: Remove unused ParserAfterUnstrip hook
Introduced in 2015 via If83b062. Unfortunately the patch fails to mention
why the hook was introduced. A review comment asking for the missing
information was ignored.

The hook was introduced exclusively for the Cite extension, see I0e136f9.
The Cite change got reverted a few days later via I1a71854. As far as I
can tell the hook (oddly specific and underspecified anyway) was never
used again, neither for Cite nor for anything else.

Now unused: https://codesearch.wmflabs.org/search/?q=ParserAfterUnstrip

I suggest to just remove it with no deprecation phase.

My team is currently working on Cite, essentially turning it upside down.
I'm not aware of a need for this hook.

Change-Id: If68a88d7afff60385ff1e33fd13716b20d01a313
2020-01-25 09:20:52 +01:00
DannyS712
0bbe0b8fe6 Docs: Update hooks.txt to remove usage of global $wgUser
Also remove 2 refernces to $wgOut and $wgRequest

Bug: T159299
Bug: T160810
Bug: T160812
Change-Id: I267dece08d6a2224091cbcb5d29e29bd9e9d3f07
2020-01-07 19:06:04 +00:00
jdlrobson
5b044bb928 resourceloader: Introduce hooks in ResourceLoaderSiteModule
This will allow extensions/skins to alter the wiki pages that editors
can use to control styles

Bug: T237050
Change-Id: I329415b787136fcf9422a9deebfcd34f83b40f12
2020-01-06 22:52:27 +00:00
Kunal Mehta
99007e96c7 Use namespaced IPUtils class
Change-Id: I047e099a93203a59093946d336a143d899d0271f
2020-01-01 02:36:49 -08:00
jenkins-bot
2ea3adebc2 Merge "skins: Remove deprecated SkinCopyrightFooter $forContent param" 2019-11-19 21:17:56 +00:00
jenkins-bot
8d240f87a9 Merge "docs: Update hook documentation for PageContentSaveComplete" 2019-11-19 01:45:24 +00:00
jenkins-bot
cad9111aec Merge "hooks: Do not document the Parser object to be passed by ref" 2019-11-18 22:04:41 +00:00
Piotr Miazga
076993c938 skins: Remove deprecated SkinCopyrightFooter $forContent param
The $forContent parameter was deprecated six years ago and looks
like nothing else is using it (verified via codeseach.wmflabs.org)

Change-Id: I7c6093a083845a40b82e39c91006a5a0b223eab6
2019-11-18 16:16:27 -05:00
Thiemo Kreuz
17363ad381 hooks: Do not document the Parser object to be passed by ref
It does not make sense for hook handler functions to *expect* the
Parser to be passed by reference. Hook handlers not only can't do
anything with it being a reference, they should *not* use it to
replace the Parser with another one.

This is an obsolete relict from PHP 3 (?), where objects got passed as a
cloned copy, which was very expensive.

Note we can not update the Hooks::run() calls as long as a single
hook handler still *expects* a reference.

Bug: T193950
Change-Id: I5f9a3f56faec0e90a2839c064844928c3b5c9751
2019-11-18 16:47:08 +00:00
Thiemo Kreuz
210483fc16 hooks: Stop suggesting to pass objects by reference
It looks like the examples section on top of the hooks.txt file still
suggests to pass objects by reference. This is an obsolete relict from
PHP 4 and not needed any more.

Bug: T193950
Change-Id: I61bdc4a313401955943903918ff8167c2bea5aac
2019-11-18 16:45:28 +00:00
jenkins-bot
8aafbfc02f Merge "docs: Update ParserGetVariableValueSwitch documentation" 2019-11-15 04:29:59 +00:00
Umherirrender
1feb04b741 docs: Update hook documentation for PageContentSaveComplete
The hook no longer takes null, as of 4860e1d5ac (I492514413ec9c37c2f9343bb207798fc8e24a5a9).

Change-Id: I31b7768ae5bd2389b59f2aca1c55ca962a75b509
2019-11-12 18:45:21 +00:00
Thiemo Kreuz
abf62c6c78 Fix ApiQuerySiteinfo class name capitalization
Change-Id: I7e522fb34119b62c4fb59590f7ee8a45f5a4954d
2019-11-08 16:58:11 +01:00
jenkins-bot
baf3d4b803 Merge "Remove the deprecated GetBlockedStatus hook" 2019-10-21 17:11:27 +00:00
Thalia
3be681e625 Remove the deprecated GetBlockedStatus hook
Change-Id: I19d522ce32f540cc39bf482ab76f71492e4e9fd0
2019-10-21 17:16:20 +01:00
Thalia
e915f9538a Document that the GetUserBlock hook may pass null instead of a block
Change-Id: I776362564b8caff3c4ab0eb38eb5ef63034e0f51
2019-10-21 12:58:42 +01:00
Daimona Eaytoy
ad93e7ca09 Fix docs for GetUserBlock hooks
Change-Id: I93b64fb00477c0632a6fa3573800dd7609d25db0
2019-10-20 10:45:27 +02:00
jdlrobson
2bb8515286 Make Special:Contributions use OOUI
Changes:
* IP address/username is now a single label & input element combination
* Add page-specific styles in separate LESS file
* Remove no longer necessary CSS rule

Bug: T117736
Bug: T219238
Change-Id: I979078d8937898acae22bc28d5ed51da1d4ed627
2019-09-23 18:50:44 +00:00
James D. Forrester
7a15f45476 Follow-up 7960d53: Mark when the SecondaryDataUpdates and WikiPageDeletionUpdates hooks were deprecated
Change-Id: Id35cc5e1d21a62d0d6469b80b693bb654215db2a
2019-09-13 11:39:32 -07:00
Thiemo Kreuz
946f35705b docs: Update ParserGetVariableValueSwitch documentation
It never makes sense to pass a (possibly different) Parser or PPFrame
object *back* as a reference. The & are a relic from very old PHP
versions that cloned all objects before passing them. This is not
needed any more.

Change-Id: I9fdb184cb41a61842819d44c9f07bd9cf435bb14
2019-09-10 10:42:34 +02:00
Thalia
bf5464614b Deprecate the GetBlockedStatus hook
This was replaced by GetUserBlock in 7a5508573a.

Handlers in production were updated to use GetUserBlock in
I952aa7d40 and Ibbcd3a239.

Bug: T229035
Change-Id: I95f9fabc6e795243cfe0a1e8737ca6abfb865538
2019-09-09 23:29:25 +01:00
Thalia
af24fc1a7a Deprecate the UserIsHidden hook
This was replaced by GetUserBlock in 7a5508573a.

Handlers in production were updated to use GetUserBlock in
Ibbcd3a239.

Bug: T228948
Change-Id: I3e6da73e595e2bd6a96600fe2a6dc68a54d06a2e
2019-09-09 20:31:02 +01:00
Jack Phoenix
495f9fa290 resourceloader: Add $conf parameter to the 'ResourceLoaderGetConfigVars' hook
Change-Id: I3cca8ce87b303ef7dfd96bfe1fdda0c51c441f6f
2019-09-07 15:30:40 +00:00
Huji Lee
0a611b47a8 Skin: Add new hook, UndeletePageToolLinks, for Special:Undelete views
This allows extensions to add further links; the particular use case
in mind is for the AbuseFilter extension, but others may want this
too.

Bug: T231055
Change-Id: I671a0479e877e6c37606b688064cb9c893717709
2019-08-23 20:51:21 +00:00
Thalia
7a5508573a Ensure block hooks keep user state consistent with realistic blocks
Several block-related hooks allow the user to be put into in a state
that is inconsistent with blocks that can actually be made:
* With UserIsHidden, User::mHideName can be set to true without there
  being a block
* With UserIsBlockedFrom, a user can be blocked from editing a page
  without there being a block
* With GetBlockedStatus, public block properties can be arbitrarily
  set on a user

These problems are mostly theoretical, but mean that it is impossible to
make some basic assumptions, e.g. that a user who is blocked from a page
must have a block. The hooks are not widely used, and with a few changes
we can make them more robust so such assumptions can be made.

This patch:
* Ensures UserIsBlockedFrom is only called if there is a block. This
  would be a breaking change if any extensions were using this to block
  an unblocked user; the intended use case is clearly for extensions to
  allow user talk page access to blocked users.
* Adds a new hook, GetUserBlockComplete, which passes the block for
  modification. This should be used instead GetBlockedStatus and
  UserIsHidden, which will be deprecated in the future.
* Allows the 'hideName' option to be passed into the AbstractBlock
  constructor so that suppressing system blocks can be made.

Bug: T228948
Bug: T229035
Change-Id: I6f145335abeb16775b08e8c7c751a01f113281e3
2019-08-21 17:38:52 +01:00
jenkins-bot
0f80b077fc Merge "Add instrumentation to Special:Mute" 2019-08-20 17:34:29 +00:00
DannyS712
b01fbfeb40 hooks.txt: Convert docs to modern extension registration style
This changes the examples in hooks.txt from using the old format of
manually entering additions into `wgHooks` to instead use the new
`"Hooks“: {}` object format.

Bug: T230397
Change-Id: I48a9986e4243eb933088d36b4bb095b345ab62fd
2019-08-20 13:56:40 +00:00
Dayllan Maza
db4aaa1a3e Add instrumentation to Special:Mute
We are already tracking pageviews and with following change we should be able
to answer the following questions:
* Of the users who land on this page, what percentage of users actually
  mute or unmute someone
* Of the users who mute a user, which option(s) did they check/uncheck in order
  to mute/unmute the user

EventLogging Schema: https://meta.wikimedia.org/wiki/Schema:SpecialMuteSubmit

Bug: T224958
Change-Id: I655dbd999fd5d3d8f792c4f53b7cc502fe05afd5
2019-08-19 15:18:11 +00:00