Commit graph

236 commits

Author SHA1 Message Date
Umherirrender
c259c37033 Add various null checks when null is not possible to use as argument
Also check for false if needed

Found by phan strict checks

Change-Id: I298204653dfb788515a87978dd8705b6e4f9c775
2022-03-14 17:17:17 +00:00
Umherirrender
6ea3d6ac2c Add explicit casts between scalar types
php internal functions like floor/round/ceil documented to return
float, most cases the result is used as int, added casts

Found by phan strict checks

Change-Id: I92daeb0f7be8a0566fd9258f66ed3aced9a7b792
2022-03-08 16:59:01 +00:00
Func
06f1306537 Revert "htmlform: Replace some uses of isHidden to isDisabled"
This reverts commit a745a87216.

Reason for revert: logspam on use cases out side the scope of HTMLForm

Bug: T302512
Change-Id: Idcf1c7db89b4456308d57915ffd0dcc41ee577ad
2022-02-28 15:05:45 +00:00
Func
a745a87216 htmlform: Replace some uses of isHidden to isDisabled
After its logic is refactored, we have more faith to use isDisabled() in these cases, which matches the original semantics of isHidden().

Change-Id: I1aece7c691307ac8bb3770e6dc4b8e2877e4d65c
2022-02-20 15:17:49 +00:00
jenkins-bot
c6e9511266 Merge "Add dropdown menu to "Tag filter" fields" 2022-02-19 00:49:39 +00:00
Func
3722dc30d6 HTMLMultiSelectField: Add forced-on options to the output of filter
Forced-on options (selected as default but disabled) should always in
the loaded data, like what HTMLCheckMatrix do.

Change-Id: I342928eca01ae8a9f34ee7156a515524c3a0d9dd
2022-02-09 07:32:12 +00:00
Bartosz Dziewoński
28dd577667 Add dropdown menu to "Tag filter" fields
* Re-use the methods that generate the dropdown for the input in fancy
  recent changes / watchlist filters interface.

* Use ComboBoxInputWidget for the OOUI version, and `<datalist>` for
  the plain HTML version, to add a dropdown menu while still using a
  text field, in case the dropdown is missing items (it's cached) or
  for easy copy-paste.

Bug: T27909
Change-Id: Iad60fb8d9a14e2c67fe9ba365e2ec0768bf5c2da
2022-02-07 23:22:40 +00:00
Func
b67c796285 HTMLFormFieldCloner: Provide methods to access the chain of cloners
Needed by follow-up changes, make sure cond-state logic works.

Change-Id: If852a9d13fc7a0d4d67f5c54633d7b8b171b7245
2022-02-03 17:25:15 +08:00
Tim Starling
ca71e69fc6 Try not to discard Excimer timeout exceptions
Don't catch and discard exceptions from the RequestTimeout library,
except when the exception is properly handled and the code seems to be
trying to wrap things up.

In most cases the exception is rethrown. Ideally it should instead be
done by narrowing the catch, and this was feasible in a few cases. But
sometimes the exception being caught is an instance of the base class
(notably DateTime::__construct()). Often Exception is the root of the
hierarchy of exceptions being thrown and so is the obvious catch-all.

Notes on specific callers:

* In the case of ResourceLoader::respond(), exceptions were caught for API
  correctness, but processing continued. I added an outer try block for
  timeout handling so that termination would be more prompt.
* In LCStoreCDB the Exception being caught was Cdb\Exception not
  \Exception. I added an alias to avoid confusion.
* In ImageGallery I added a special exception class.
* In Message::__toString() the rationale for catching disappears
  in PHP 7.4.0+, so I added a PHP version check.
* In PoolCounterRedis, let the shutdown function do its thing, but
  rethrow the exception for logging.

Change-Id: I4c3770b9efc76a1ce42ed9f59329c36de04d657c
2022-02-02 16:27:44 +11:00
Func
bf6a654379 HTMLFormFieldCloner: Cache form fields for further use
Follow-up changes will use fields more frequently, cache them would be better.

Change-Id: I99dd488a684937b01713663e63d5c3ca68772ef0
2022-01-31 16:19:44 +00:00
jenkins-bot
d5f143d618 Merge "Add cond-state classes in the server-side" 2022-01-11 22:58:44 +00:00
TChin
47adb6d65a Refactor global variables to use MediaWikiServices instead
Automatically refactors wg prefixed globals to use MediaWikiServices config using Rector. Doesn't include files that set globals or files that fail CI.

Rector Gist: https://gist.github.com/tchin25/7cc54f6d23aedef010b22e4dfbead228

* This patch uses a modified source code rector library for our specific use case and the rector will have different effects without it.

A writeup for future reference is here: https://meta.wikimedia.org/wiki/User:TChin_(WMF)/Using_Rector_On_MediaWiki

Change-Id: I1a691f01cd82e60bf41207d32501edb4b9835e37
2022-01-10 13:55:53 -05:00
Func
2f3b8a4c9b Add cond-state classes in the server-side
There is only one use case of cond-state classes passed to the client-side, and it can be done more natively.

Change-Id: Ib6835bb334bd65c6176f0a5c3881b20265901af9
2022-01-07 22:14:23 +01:00
Siddharth VP
061ee25f7e Fix typos in comments (E-H)
Change-Id: I0748e0d5962fa909fdd6b7fcae4ab259bde4cdf1
2021-12-30 18:14:43 +05:30
jenkins-bot
9fc104a053 Merge "Allow placeholder to be set for multiselect fields in dropdown mode" 2021-12-16 20:54:58 +00:00
jenkins-bot
5a46f9c44d Merge "Add support for conditional disable fields in HTMLForm" 2021-12-13 22:50:53 +00:00
Func
361954801e Add support for conditional disable fields in HTMLForm
Provide a native method to disable fields in particular condition.

Bug: T272302
Change-Id: I8f46dedc2945cf3b7ef5419b0a54534ded8b6d5b
2021-12-11 01:39:42 +00:00
Func
81351f6eba Allow placeholder to be set for multiselect fields in dropdown mode
Change-Id: I5d9c15c776e7da6ca1832f5981e6423bc501bab6
2021-12-09 03:03:04 +00:00
Alexander Vorwerk
3aa5b6643b Use LanguageNameUtils constants instead of strings
Change-Id: I8521d00675008da0d7c8c768ab75352212653c66
2021-12-05 22:13:34 +01:00
Reedy
2a2bb1e9bd Remove or replace usages of "sane"
Bug: T254646
Change-Id: I096b2cf738a1395a14f1d47bcbed0c2c686c2581
2021-11-22 13:35:17 +00:00
Martin Urbanec
408999928d
HTMLTitleTextField: Remove B&C code
Bug: T288181
Change-Id: Iec9225d0f0fe47dd972f6c302ca803e65b8232a7
2021-09-22 00:48:59 -07:00
Umherirrender
44fd53fee3 Using @return never documentation on always-throw-function
This helps phan to detect unreachable code and also impossible types
after the functions.
It helps phan to avoid false positives for array keys
when the keys are checked before

Bug: T240141
Change-Id: I895f70e82b3053a46cd44135b15437e6f82a07b2
2021-09-07 17:29:03 +02:00
Umherirrender
07b499fbcf build: Update mediawiki/mediawiki-phan-config to 0.11.0
Addition and remove of suppression needs to be done with the version
update.

Change-Id: I3288b3cefa744b507eadebb67b8ab08c86517c1c
2021-09-07 17:19:05 +02:00
jenkins-bot
1c623e395d Merge "Remove unneeded explicit true/false inside conditions" 2021-08-18 17:40:58 +00:00
Umherirrender
244ea7c0b5 Simplify else-branches after continue/break
When the if branch continues the loop,
than the next branch does not need to be an else branch

Change-Id: Ia158709b7fd2ea811f1049cf8f53ed12c89719e3
2021-08-17 22:51:43 +02:00
Umherirrender
864068d000 Remove unneeded explicit true/false inside conditions
The non-strict conditions in if/while are true/false without the check.

In some situation the true/false is removed, because it is known to be a
bool (by is_bool check or type hint)

Change-Id: I5ca4c4771af25d2e785e82732df204a73653886e
2021-08-17 21:52:34 +02:00
Kunal Mehta
a85f569dd1 Revert "Use CsrfTokenSet as CSRF token source"
This reverts commit 0d75fdb4f7.

Bug: T287542
Change-Id: Iedd3461869f973f8d621a39e6ad4674cbb577551
2021-08-05 15:48:26 -07:00
Gergő Tisza
16f3b8c4c0 Make HTMLTitleTextField interwiki option tri-state
Make the 'interwiki' option temporarily accept null as well as true/false
(and default to null instead of false) so form fields which disallow
interwiki titles can avoid deprecation warnings. This also includes
implementing the new error message.

The idea is that for the duration of the deprecation process, form fields
can be set explicitly to interwiki => false (which will eventually become
the default). It would be super annoying to have to do this for all
title fields, but this way it's only needed for fields where users actually
submit interwiki titles with some frequency.

Also improve the logic for legacy fields (which do not set the option
either way): since these (while emitting a warning) allow an interwiki
title, it does not make sense to apply namespace etc. checks to that
title.

Bug: T288155
Change-Id: Ic00f4a0f27747b5ff0893b4c01f42f68a99771ab
2021-08-04 21:24:16 -07:00
libraryupgrader
5357695270 build: Updating dependencies
composer:
* mediawiki/mediawiki-codesniffer: 36.0.0 → 37.0.0
  The following sniffs now pass and were enabled:
  * Generic.ControlStructures.InlineControlStructure
  * MediaWiki.PHPUnit.AssertCount.NotUsed

npm:
* svgo: 2.3.0 → 2.3.1
  * https://npmjs.com/advisories/1754 (CVE-2021-33587)

Change-Id: I2a9bbee2fecbf7259876d335f565ece4b3622426
2021-07-22 03:36:05 +00:00
Petr Pchelko
0d75fdb4f7 Use CsrfTokenSet as CSRF token source
Change-Id: I079d2c802d9b48d6abf7f37fa9ef7dafac631345
2021-07-12 14:19:15 -07:00
Bartosz Dziewoński
0feccb0cb1 Rename CSS class 'mw-htmlform-field-autoinfuse' to fit the convention
Rename to 'mw-htmlform-autoinfuse'. This avoids the 'mw-htmlform-field-'
prefix normally only used by HTMLFormField subclasses, and matches the
'mw-htmlform-autoinfuse-lazy' class used in related code.

Bug: T278036
Change-Id: I4a73ec6d5993a7e4f10ef8523eef594a70c9abcc
2021-06-19 15:57:43 +02:00
Gergő Tisza
e1088ba0d5 HTMLTitleTextField: include field name in deprecation warning
Follows up I1bed0aa90dab8c872e915148923a5d78c9dee2f3.

Bug: T279886
Change-Id: I52adea0ce3242e784a8fa1b34a9eb5de913b16b2
2021-06-13 13:58:24 +02:00
Vlad.shapik
9763c48d17 Reapply "Hard Deprecate User ::getCanonicalName, ::isUsableName, ::isCreatableName""
This reverts commit ecf826a2ee.

Reason for revert: need to edit the patch and then it will be GTG in order to finish hard deprecating of User ::getCanonicalName, ::isUsableName, ::isCreatableName

Change-Id: I2f57f56728fcbeada96dc2228f07dc8bcaa5d4f6
2021-05-31 16:01:36 +03:00
Martin Urbanec
10c539ce32 HTMLTitleTextField: Support interwiki titles
Some forms (namely Special:EditGrowthConfig) need to make sure
title exists if possible, but also need to support interwiki
titles.

Bug: T279886
Change-Id: I1bed0aa90dab8c872e915148923a5d78c9dee2f3
2021-05-24 19:05:41 +00:00
Ppchelko
ecf826a2ee Revert "Hard Deprecate User ::getCanonicalName, ::isUsableName, ::isCreatableName"
This reverts commit b491279268.

Reason for revert: caused CentralAuth tests to fail.

Change-Id: Icb3ed094578df427622e0da2a7462645adcc3d6f
2021-05-05 02:14:47 +00:00
vladshapik
b491279268 Hard Deprecate User ::getCanonicalName, ::isUsableName, ::isCreatableName
Bug: T275030
Change-Id: I60689ee6519c2dbd6d000afa8ac05c3e6b7895d2
2021-05-04 21:20:50 +03:00
Martin Urbanec
cad5a10681 [docs] Note that namespace ID is to be used in HTMLTitleTextField's namespace param
Change-Id: Ic529180307389e894de10909803e470bb452b6bb
2021-05-03 17:23:01 +02:00
jenkins-bot
ad9661c4b8 Merge "Add HTMLTagMultiselectField" 2021-03-26 16:37:37 +00:00
STran
ee93d068d2 Add HTMLTagMultiselectField
Implements HTMLTagMultiselectField, a form field that instantiates
TagMultiselectWidget, the PHP representation of the OOUI's js-based
widget of the same name with the implemented parameters:
* allowArbitrary
* allowedValues

Bug: T278317
Change-Id: I3a6a30506d493be4185f917c577b3837fffd8ae1
2021-03-26 08:15:38 -07:00
tsepothoabala
4646731af6 De-duplicate equivalent IP ranges in HTMLUsersMultiselectField
Bug: T278338
Change-Id: I6143aecec51777e46ab9a8e80fd794c6433abe7c
2021-03-26 11:08:28 +02:00
jenkins-bot
aa3da2101c Merge "HTMLFormField: Use non namespaced class name rather than static::class" 2021-03-23 21:36:43 +00:00
Reedy
5bb8d031c0 HTMLFormField: Use non namespaced class name rather than static::class
Bug: T277414
Change-Id: I9ba76522932147df098abef48b2a076c2aa81aac
2021-03-19 18:19:20 +00:00
tsepothoabala
e29a8f150d Normalise IP addresses in HTMLUsersMultiselectField
Normalise IP addresses in HTMLUsersMultiselectField, to avoid adding multiple equivalent IP addresses

Bug: T275394
Change-Id: I3cbc26cb7c98ddc94bc3effc6bd2ab7108e970f8
2021-03-17 15:37:27 +02:00
Thalia
505433c502 HTMLUsersMultiselectField: Keep IP addresses while normalizing
Fixes a bug introduced in c12af6e168
where invalid usernames are normalized out.

Nonexistent usernames will still fail the validation step, including
IP addresses if the field has been set up not to accept them.

Bug: T274568
Change-Id: I229afdfff2144fd4db8d49825262010f58f1fe54
2021-02-22 14:00:06 +00:00
Bartosz Dziewoński
58087fb737 HTMLMultiSelectField: Reject nested arrays early
Users can pass multidimensional arrays in query parameters to PHP
(e.g. ?foo[a][b]=bar). While filterDataForSubmit() ensured that anyone
using HTMLMultiSelectField in their form did not see them, internal
code here did not handle them correctly when validating the values and
generating the inputs, resulting in warnings deep in other code.

Use is_scalar instead of is_string in case default values somewhere
are integers or other non-string types.

Bug: T274955
Change-Id: I072a722ed025d687bfe755261a9896457f68f2ef
2021-02-19 00:24:38 +01:00
STran
c12af6e168 Normalize and de-dupe usernames in HTMLUsersMultiselectField
In no-js, there is no on the fly normalization of usernames in
HTMLUsersMultiselectField so both "User A" and "User_A" are
valid representations of "User A" (the canonical representation).

It's also possible to add the same user multiple times with no-js
and this will be considered valid and count toward the max limit.

These are not problems with js enabled since there will be an api
call for every new entry and that call both filters for selected users
and only returns canonical names.

This patchset reproduces that functionality in the PHP layer so that
no-js functions like the infused widget.

Bug: T274568
Change-Id: Ie78c8f37fa8a38b67eeaa6de098e41df2dac3e3e
2021-02-16 14:37:23 -08:00
jenkins-bot
5ea464b234 Merge "Use static closures where safe to use" 2021-02-14 23:05:48 +00:00
Umherirrender
8de3b7d324 Use static closures where safe to use
This is micro-optimization of closure code to avoid binding the closure
to $this where it is not needed.

Created by I25a17fb22b6b669e817317a0f45051ae9c608208

Change-Id: I0ffc6200f6c6693d78a3151cb8cea7dce7c21653
2021-02-11 00:13:52 +00:00
Thiemo Kreuz
947a8cfc00 Use ?? instead of isset/array_key_exists where possible
This patch touches all uncontroversial (I hope) places where a chain
of isset(), array_key_exist() and the ternary ?: operator can be
replaced with the much shorter ?? feature from PHP 7.

?? does the same. It checks if the element before the ?? is set and
not null. When this check fails, the element after the ?? is used.

Change-Id: Id612e2782ae928164b26b6f0de676c6c7d8302f3
2021-02-10 20:32:25 +01:00
STran
55ef87aa9c Pass along the disabled/readonly attributes to HTMLDateTimeField
Bug: T273335
Change-Id: I57fca9666cc013fd8fa2b64f09218da8e7e950c6
2021-02-02 07:24:01 -08:00