Commit graph

46 commits

Author SHA1 Message Date
Máté Szabó
886b600e7e BaseTemplate: Use explicit varargs in method parameters
With the removal of HHVM support, we can now use explicit varargs
in function arguments. This patch updates the BaseTemplateclass to
do so, and also removes PhanCommentParamWithoutRealParam check suppressions,
which are now redundant.

Bug: T231710
Change-Id: If78bd1556c862a472afe3646fd362b3c6baefbe0
2019-10-05 18:27:30 +02:00
Umherirrender
268346e562 phan: Enable PhanTypeMismatchArgument issue
Bug: T231636
Depends-On: I5de4f8f32a47c3f41c990ffe2ebd091fc23d1a58
Change-Id: I34d65fe3ff1916f2af675f0b1f19641b0cdfadc0
2019-09-19 20:11:42 +02:00
James D. Forrester
ace67844ff BaseTemplate: Hard-deprecate msgWiki()
Change-Id: I547ead0a86a8491cc8a8de81bc6b473fadd04765
2019-09-13 11:39:32 -07:00
Daimona Eaytoy
b5cbb5ab3f Upgrade phan config to 0.7.1
This allows us to remove many suppressions for phan false positives.

Bug: T231636
Depends-On: I82a279e1f7b0fdefd3bb712e46c7d0665429d065
Change-Id: I5c251e9584a1ae9fb1577afcafb5001e0dcd41c7
2019-09-04 08:20:53 +00:00
Daimona Eaytoy
327e8ea416 Unsuppress phan issues part 6
Bug: T231636
Depends-On: I50377746f01749b058c39fd8229f9d566224cc43
Change-Id: I2cd24e73726394e3200a570c45d5e86b6849bfa9
2019-09-01 09:48:45 +00:00
Daimona Eaytoy
5eac6d131c Unsuppress more phan issues (part 3)
Bug: T231636
Depends-On: I78354bf5f0c831108c8f606e50c87cf6bc00d8bd
Change-Id: I58e67c2b38389df874438deada4239510d21654f
2019-08-31 16:38:55 +00:00
Isarra
0718021090 Remove 'redundant' attribute from BaseTemplate::makeListItem() links
in case this is not done in SkinTemplate::buildContentActionUrls()

Not all skins are going to use buildContentActionUrls() in the first
place, as they may not be laying out the usual action tabs as, well,
the usual action tabs. Given that this is being added in core, it
should likewise be cleaned up in core.

Bug: T214202
Change-Id: I630410aea2852f7a72fea67bbf256b3561ea0f3f
2019-08-16 16:46:32 +00:00
Dayllan Maza
c461b8d6fd Add mute preferences link to the tools menu
A link to Special:Mute is added to the tools menu on the sidebar
if the user is logged in and a registered relevant-user* is found
Mute preferences link will not be shown if $wgEnableSpecialMute is false

* From Skin::getRelevantUser: Special pages like Special:Contributions mark
  the user which  they are relevant to so that things like the toolbox can
  display the information they usually are only able to display on a
  user's userpage and talkpage.

Bug: T218270
Change-Id: I89eb8373963d28d52a026b60aa42d1c64b31b7c6
2019-07-16 17:38:47 -04:00
Derick Alangi
1981823755 Remove several methods, deprecated in 1.32
I've checked and doubled checked that these methods are no longer used
anywhere in core or extensions, hence removed them. They were hard deprecated
in MediaWiki 1.32.

* OutputPage:
  ** `::showFileCopyError()`
  ** `::showFileRenameError()`
  ** `::showFileDeleteError()`
  ** `::showFileNotFoundError()`

* ApiBase:
  ** `::truncateArray()`

* IcuCollation:
  ** `::getICUVersion()`

* HTMLForm:
  ** `::setSubmitProgressive()`

* ResourceLoaderStartUpModules:
  ** `::getStartupModules()`
  ** `::getLegacyModules()`

* BaseTemplate:
  ** `::msgHtml()`

* QuickTemplate:
  ** `::msgHtml()`

* WatchAction:
  ** `::getUnwatchToken()`

Bug: T220656
Change-Id: Ic1a723a991f4ff63fcb5f045ddcda18d1f8c3c68
2019-05-09 11:36:44 -07:00
Reedy
c13fee87d4 Collapse some nested if statements
Change-Id: I9a97325d738d09370d29d35d5254bc0dadc57ff4
2019-04-04 19:02:22 +00:00
Thiemo Kreuz
8ec90547df Soft deprecate QuickTemplate::msgWiki()
This method just should not exist. It does have a bad name that does not
say much about what it does and how it is supposed to be used. And it
does horrible things: it accesses the global $wgOut, which currently
results in test failures, see
https://integration.wikimedia.org/ci/job/quibble-vendor-mysql-php70-docker/15200/console

Note how it was marked as @private, which is honorable, but doesn't
work for multiple reasons. First, an overload exists in the BaseTemplate
subclass. Second, calls from external code exist. Third, if it would be
really private, it could as well be deleted, because there is no private
caller.

Luckily the number of callers is extremely close to zero, see
https://codesearch.wmflabs.org/search/?q=>msgWiki%5C(

A patch for the Collection extension already exists.

Change-Id: I8d2c14f10fbf314735d1aa82bdc8edfb4fa9a0dd
2019-02-01 13:25:18 -08:00
Fomafix
43244db9a2 Use PHP 7 '??' operator instead of if-then-else
Change-Id: If9d4be5d88c8927f63cbb84dfc8181baf62ea3eb
2018-10-21 21:46:46 +02:00
Brian Wolff
f05bf40540 Deprecate QuickTemplate::msgHtml & fix phan-taint-warning in includes/skins
QuickTemplate::msgHtml() (And the weird override that does the
same thing a different way - BaseTemplate::msgHtml()) are inherently
unsafe as they echo out a raw html message. This is strongly
discouraged in modern code. According to codeSearch tool, nothing
uses these methods, and there is a "@private" annotation on the
QuickTemplate::msgHtml() docblock. Thus hard deprecating it.

Change-Id: I4e9e157e922a36787adef4d0bf7608605c27f0c4
2018-09-21 17:27:43 -07:00
Umherirrender
130ec2523d Fix PhanTypeMismatchDeclaredParam
Auto fix MediaWiki.Commenting.FunctionComment.DefaultNullTypeParam sniff

Change-Id: I865323fd0295aabd06f3e3c75e0e5043fb31069e
2018-07-07 00:34:30 +00:00
Max Semenik
1e680456b4 Get rid of call_user_func(_array)(), part 3
Also cleaned up nearby code in a couple places.

Change-Id: Ibf44ee7c0ceb739d7e79406e4ff39303c316e285
2018-06-10 02:21:24 +00:00
Max Semenik
6e956d55aa Replace call_user_func_array(), part 2
Uses new PHP 5.6 syntax like ...parameter unpacking and
calling anything looking like a callback to make the code more readable.
There are much more occurrences but this commit is intentionally limited
to an easily reviewable size.

In one occurrence, a simple conditional instead of trickery was much more readable.

This patch finishes all the easy stuf in the core, the remainder is either unobvious
or would result in smaller readability gains. It will be carefully dealt with in
further commits.

Change-Id: I79a16c48bfb98b75e5b99f2f6f4fa07b3ae02c5b
2018-06-07 20:19:26 -07:00
Bartosz Dziewoński
485f66f174 Use PHP 7 '??' operator instead of '?:' with 'isset()' where convenient
Find: /isset\(\s*([^()]+?)\s*\)\s*\?\s*\1\s*:\s*/
Replace with: '\1 ?? '

(Everywhere except includes/PHPVersionCheck.php)
(Then, manually fix some line length and indentation issues)

Then manually reviewed the replacements for cases where confusing
operator precedence would result in incorrect results
(fixing those in I478db046a1cc162c6767003ce45c9b56270f3372).

Change-Id: I33b421c8cb11cdd4ce896488c9ff5313f03a38cf
2018-05-30 18:06:13 -07:00
Timo Tijhof
03db2f5b3c Enable merging of WrappedStringList between 'bottomscripts' and 'reportime'
* Fix ResourceLoaderClientHtml to return what it was documented to
  return, a WrappedStringList. It accidentally used the wrong join()
  method, causing it to create a plain string too early.

* Update method documentations from ClientHtml::getBodyHtml to
  BaseTemplate::getTrail for 'bottomscripts', and from
  ResourceLoader::makeInlineScript for 'reporttime'.

* Update BaseTemplate::getTrail to join by new line instead of native string
  concatenation.

This by itself would suffice for the most common case, but in order
to also account for the possibility of extensions using hooks for
'SkinAfterBottomScripts' that concatenate, update bottomScripts()
to pass a plain string to the hook and merge it later.

Change-Id: If0d227cb9db67229a27d489c082db790ea8e3840
2018-05-24 14:23:17 +01:00
Bartosz Dziewoński
bdf40d7cca BaseTemplate: Remove code for unused 'ispermalink' toolbox item
This code path is never used.

When introduced in 2005 (bf0d92d5 / rSVN10709), the "Permanent link"
item in the MonoBook sidebar was a link to an oldid only when viewing
the latest version of an article (using the ID 't-permalink'), and
otherwise it was a greyed out link to nowhere to indicate you're
already viewing a permanent link (using the ID 't-ispermalink').

Later, in 2007, when the behavior of "Cite this page" item (now part
of the CiteThisPage extension) was corrected for old revisions
(1a60bd4c / rSVN21819), the "greying out" of the permalink was removed
to be consistent with the new item. Only half of the feature was
removed though: permalink was no longer a link to nowhere, but the
code in MonoBook to make permalinks that are links to nowhere greyed
out (by using different ID) stayed.

This code was then dutifully preserved when BaseTemplate, MonoBook was
rewritten, and then through several refactorings.

I think we can safely remove it. Leftover styles in MonoBook are being
removed in I58aca1f4255df14d6289e167e180dad31b546a8c.

Change-Id: I2fb3d7e0ecb3bbbd0c09774e2d86f86502a48bf1
2018-03-27 21:45:57 +02:00
Timo Tijhof
7f281e2db4 skins: Deprecate MediaWikiI18N::translate()
Remove all usage of $tpl->translator->translate() with wfMessage()->text(),
which does the same thing, given the deprecated $tpl->translator->set()
and $tpl->setTranslator() methods have no callers.

These new wfMessage() callers should probably be changed to context calls
via BaseTemplate::msg() or Skin::msg() at some point, but I'm reserving that
for a separate commit given wfMessage() is what MediaWikiI18N::translate()
currently does - to reduce risk of unrelated behaviour changes.

While `$tpl->setTranslator` and `MediaWikiI18N::set` ($tpl->translator->set)
have no known callers in Wikimedia Git, the `$tpl->translator->translate`
method does have a handful of calls (although less than three, and not in
bundled or WMF-deployed repos). As such, proceeding with hard-deprecation.

Bug: T186090
Change-Id: I93d503de5515298288852ec4c150959fd688786b
2018-02-02 23:53:19 +00:00
Albert221
a9cbe0c847 Add text to tab links telling if they do exist
And changed a little bit signature of Linker::titleAttrib
and Linker::tooltipAndAcceskeyAttribs. Added $options
parameter to the second one and made $options parameter
satisfied by passing an array with options, because there
is one more now: 'nonexisting' which tells to add text
about the thing that the page does not exist to its tooltip.

Bug: T19099
Change-Id: Ia76dd6db363f6add5efb8955be9e23a1f8e8476f
2018-01-08 16:42:01 +00:00
Huji Lee
e74bfe13f6 Require indentation of CASE statements in PHP code
Bug: T182546
Change-Id: I91a9555893a08e4ec58da97c6cc4d1e70000ff6b
2017-12-10 22:07:50 -05:00
jenkins-bot
a8a5f03b3b Merge "BaseTemplate: Handle $this->data['language_urls'] === false specially" 2017-08-13 20:19:19 +00:00
Umherirrender
ace44e2064 Use correct variable name in @param documentation
For some varargs a variable name is added with suffix ,... as seen for
many other varargs

Some @param are swapped, because there are in the wrong order

Enable Sniff MediaWiki.Commenting.FunctionComment.ParamNameNoMatch

Change-Id: I60fec6025bce824d5c67563ab7b65ad6cd628ad8
2017-08-11 19:27:19 +02:00
Max Semenik
fd6e9ef2d4 Human-readable section ID support
It adds the ability to replace the current section ID escaping
schema (.C0.DE) with a HTML5-compliant escaping schema that is
displayed as Unicode in many modern browsers.

See the linked bug for discussion of various options that were
considered before the implementation. A few remarks:
* Because Sanitizer::escapeId() is used in a bunch of places without
  escaping, I'm deprecating it without altering its behavior.
* The bug described in comments for Parser::guessLegacySectionNameFromWikiText()
  is still there in some Edge versions that display mojibake.

Bug: T152540
Change-Id: Id304010a0342efbb7ef2d56c5b8b244f2e4fb2c5
2017-08-01 20:32:20 -07:00
Bartosz Dziewoński
305fa92fc1 Don't fill in the skin's search box on Special:Search
When viewing Special:Search, you usually see two search forms: the
small one provided by the skin (present on all pages), and the large
advanced search form generated by Special:Search.

Previously, both of these forms would be prefilled with the text that
was searched, which could lead to the user submitting the wrong form
after changing advanced search options.

After this change, the skin's search form will always start out empty.
There's no way for this to affect pages other than Special:Search,
since if the 'search' URL parameter is given, all requests are
redirected to Special:Search anyway (see MediaWiki::parseTitle()).

Bug: T106055
Change-Id: Ic6bb8af5383e7acfe4f823f563165cd60182753e
2017-05-21 00:59:59 +02:00
Bartosz Dziewoński
caa1ae0fe0 BaseTemplate: Handle $this->data['language_urls'] === false specially
Per 53ab861a2f, extensions can set this
to an empty array to have the sidebar section displayed even if it has
no items. Wikidata and UniversalLanguageSelector rely on this.

Change-Id: I79cef25d79ed25fa6d96698a121c3105870e890b
2017-05-19 23:18:47 +02:00
Isarra
38e83268df Rename BaseTemplate::clear to getClear to avoid conflicts
with Example skin and derivatives

Also it's a bit more consistent with everything else anyway.

Change-Id: I2745d51267790e93fe2b92a75e88621abbb57fd1
2017-04-05 20:35:08 +00:00
Isarra
03224faa09 Add some common functions to BaseTemplate
Breaks any skins with same-name functions with different
visibility/functionality. Should mostly only be anything
based on Example, because that had everything set to private
for some reason. Normal skin practice for most others is to
use totally different names anyway. (eg 'render...' instead
of 'get...', and visualClear output done directly)

* clear: returns a visualClear
* getFooter: calls getFooterIcons and getFooterLinks and
  handles all the output; format is common to nearly every
  skin since MonoBook
* getAfterPortlet: same as renderAfterPortlet, but doesn't
  directly print content
* getTrail: same as printTrail, but doesn't directly print
  content

Also made the existing print versions for the last two  use
the new getters.

Change-Id: I5621f585b501e47b40ae80e9cb12e6a32da72275
2017-03-26 20:41:06 +00:00
Ed Sanders
7b5a83d384 Add mw-body-content to indicators
Bug: T155863
Change-Id: I111d0fd1ead266b6dbf7ad81e6e73133b96a7127
2017-03-05 11:57:02 +00:00
Bartosz Dziewoński
ecdef925bb Miscellaneous indentation tweaks
I was bored. What? Don't look at me that way.

I mostly targetted mixed tabs and spaces, but others were not spared.
Note that some of the whitespace changes are inside HTML output,
extended regexps or SQL snippets.

Change-Id: Ie206cc946459f6befcfc2d520e35ad3ea3c0f1e0
2017-02-27 19:23:54 +01:00
Brad Jorsch
fb3ae6fbe3 Replace use of &$this
Use of &$this doesn't work in PHP 7.1. For callbacks to methods like
array_map() it's completely unnecessary, while for hooks we still need
to pass a reference and so we need to copy $this into a local variable.

Bug: T153505
Change-Id: I8bbb26e248cd6f213fd0e7460d6d6935a3f9e468
2017-01-31 23:01:54 -05:00
umherirrender
34fe90ac52 Remove empty lines at end of functions
It looks like there is something missing after the last statement
Also remove some other empty lines at begin of functions, ifs or loops
while at these files

Change-Id: Ib00b5cfd31ca4dcd0c32ce33754d3c80bae70641
2016-11-05 11:55:10 +01:00
Kunal Mehta
f50b47fdd4 BaseTemplate: Make getMsg() calling pattern more like wfMessage()
wfMessage() and IContextSource::msg() allow you to pass parameters to
the message in the initial function call, which is often more convenient
for developers. Support that in BaseTemplate::getMsg() too for
standardization.

Change-Id: I2488234f431be5bab00ca4366d864c84d7ff9e03
2016-10-13 18:44:42 -07:00
James D. Forrester
1a33229b49 Toolbox: Mark RecentChangesLinked link as nofollow
Bug: T146233
Change-Id: I2dd0b3a179dc0d1d7210d98748f45e75f953d2bf
2016-09-20 17:51:31 -07:00
Amir Sarabadani
d56829dca8 Clean up array() syntax from docs, part VI
Change-Id: Ib0eea494e2065c7ab356dc45fd174544a9c1c942
2016-09-12 14:36:37 +04:30
Moriel Schottlender
88f4eca6d8 Allow 'data-*' attributes in personal tools links
We are limiting the attributes that are read and rendered for the
personal toolbar, but there are cases -- especially as tools get
more and more complex -- for needing to supply and read more information.

The use case that led to this change is the need to style Notification
badges with values in ::before and ::after pseudo-elements; these
elements need to display some prefixed content, and the best (only)
way to do that in no-js mode, is to set it up in CSS to be read
out of an attribute (using attr( xxx ); ).

This means that we need to read a specific attribute from the element,
but the only attributes allowed were insufficient. Allowing for data-*
attributes seemed not only a good solution for this specific case,
but a good idea in general for future tools that are added and
manipulate the personal toolbar links - allowing for storing information
without polluting the DOM.

Bug: T115845
Change-Id: Ic666540d70de52f337f839da0518cb83a990f5fd
2016-07-21 19:11:38 -07:00
Kunal Mehta
3f14ba7ca8 SkinTemplate: Set link classes on content_navigation tabs
Set link classes like 'mw-redirect' and 'stub' on the content_navigation
tabs.

Bug: T24976
Change-Id: I10b9b3f95a340ac028a53ea27ec857c12f8bef19
2016-07-18 16:17:40 +00:00
Bartosz Dziewoński
667522795b Fix trivial PHPCS violations in */skins/* directories
Due to T127238, files in various */skins/* directories are not checked
by PHPCS. Temporarily removed the exclude rule from phpcs.xml and ran:

  composer fix includes/skins/* tests/phpunit/includes/skins/* tests/phpunit/skins/*

Change-Id: I9240c1cee825920b6634903282be6252cce55686
2016-03-02 21:02:15 +01:00
Reedy
c58f8567f5 getFooterIcons returns an array
Change-Id: I4824bafbc7fd72c7b5e6b117a94d95051524190e
2016-02-08 22:24:19 +00:00
victorbarbu
6ea30d631d Allow parameters to be passed into skin tooltip messages
You can now pass parameters to toolbox links' tooltips,
by setting 'tooltip-params' key in a $nav_urls item of
SkinTemplate::buildNavUrls.

This functionality is used to add GENDER support to two
tooltip messages.

Bug: T123365
Change-Id: I45577d54bd78ba1e2ba10fb8f04367244495bfea
2016-01-12 14:39:15 +00:00
Kunal Mehta
d8ca62f278 Fix phpcs errors and warnings in includes/skins
Change-Id: I800f8fcd6c1ac16d0a0bd20799550de577306ded
2015-03-15 02:35:08 +00:00
Chad Horohoe
aa21e125a3 Remove obvious function-level profiling
Xhprof generates this data now. Custom profiling of various
sub-function units are kept.

Calls to profiler represented about 3% of page execution
time on Special:BlankPage (1.5% in/out); after this change
it's down to about 0.98% of page execution time.

Change-Id: Id9a1dc9d8f80bbd52e42226b724a1e1213d07af7
2015-01-07 11:14:24 -08:00
Aaron Schulz
e369f66d00 Replace wfRunHooks calls with direct Hooks::run calls
* This avoids the overhead of an extra function call

Change-Id: I8ee996f237fd111873ab51965bded3d91e61e4dd
2014-12-10 12:26:59 -08:00
Bartosz Dziewoński
6f5b29ff4e Implement page status indicators
Page status indicators are icons (or short text snippets) usually
displayed in the top-right corner of the page, outside of the main
content. Basically, <indicator name="foo">[[File:Foo.svg|20px]]</indicator>
may be used on a page to place the icon in the indicator area. They
are also known as top icons, page icons, heading icons or title icons.

I found the discussion on bug 23796 highly illuminating. I suggest
that everyone read it before suggesting different design choices.

I spent some time with a thesaurus pondering the name. "Emblems" and
"badges" were also considered, but the former has a much more limited
meaning and the latter is already taken by Wikidata, with a similar
but subtly different feature set. I am not aware of any naming
conflicts ;) besides new talk page message "indicator" (used by core
and Echo in some documents) and OOjs UI indicators (tiny icons like
the arrow on a dropdown form element), which shouldn't be confusing.

Potential use cases include:
* "Lock" indicators for page protection levels
* Featured/good article indicators
* Redirect shortcuts display ("WP:VPT")
* Links to help/manual for special pages
* Coordinates?… or globe icon for inline pop-up maps

Design features:
* Skin-customizable. Skins can fully control where and how indicators
  are shown, or may just do <?php echo $this->getIndicators(); ?> to
  output the default structure. By default they are not shown at all.
* Extension-customizable. Extensions can call ParserOutput::addIndicator()
  to insert an indicator from one of the numerous parser hooks.
* Wiki-customizable. In addition to just using the parser functions,
  on-wiki styles and scripts can use the provided classes and ids
  (.mw-indicator, #mw-indicator-<name>) to customize their display.

Design limitations:
* Every indicator must have a unique identifier (name). It's not
  possible to create arrays, or to have several indicators with the
  same name. In case of duplicates, the latest occurrence of the
  parser function wins.
* Indicators are displayed ordered by their names (and not occurrence
  order). This ensures consistency across pages and provides a simple
  means of ordering or grouping them.
* Indicators are not stored, tracked or accessible outside of
  ParserOutput (in particular they're not in the page_props table).
  They are intended to merely reflect the content or metadata that is
  already present on the page, and not be data themselves. If you ever
  think you need to list pages with a given status indicator, instead
  figure out what it means and use the appropriate tracking category,
  special page report, already existing page_prop, or other means.

Corresponding patch in Vector: I90a8ae15ac8275d084ea5f47b6b2684d5e6c7412.
I'll implement support in the other three skins included in the tarball
and document it on mediawiki.org after this is merged.

Bug: 23796
Change-Id: I2389ff9a5332a2b1d033eb75f0946e5241cfaaf4
2014-10-17 15:49:15 -07:00
Bartosz Dziewoński
a3bf1f610e Split SkinTemplate.php per-class
Change-Id: Id964cdc3bd362d696628d62cd34615aa1fa6b014
2014-09-24 11:54:26 +02:00