Commit graph

253 commits

Author SHA1 Message Date
James D. Forrester
94ece673b2 Namespace TitleValue under \MediaWiki\Title
One of the big ones, so doing this alone.

Bug: T166010
Change-Id: I4c901d5c32696d8334ec30cede7d9b6f3d8d645e
2023-09-18 18:24:39 +01:00
Amir Sarabadani
f4e68e055f Reorg: Move Status to MediaWiki\Status\
This class is used heavily basically everywhere, moving it to Utils
wouldn't make much sense. Also with this change, we can move
StatusValue to MediaWiki\Status as well.

Bug: T321882
Depends-On: I5f89ecf27ce1471a74f31c6018806461781213c3
Change-Id: I04c1dcf5129df437589149f0f3e284974d7c98fa
2023-08-25 15:44:17 +02:00
jenkins-bot
b888daea79 Merge "HTMLForm: Dispatch field formatting explicitly instead of guessing method names" 2023-07-11 11:47:02 +00:00
jenkins-bot
df8078f2d7 Merge "HTMLForm: Extract a formatField() helper method" 2023-07-11 11:46:55 +00:00
jenkins-bot
fb44c696a5 Merge "htmlform: Use more compact PHP features in places" 2023-07-10 18:39:58 +00:00
Bartosz Dziewoński
27a1d1151a HTMLForm: Dispatch field formatting explicitly instead of guessing method names
I've never liked how HTMLForm guesses the method names that return
each field's HTML based on the $displayFormat property, for example
`$displayFormat === 'div'` resulting in using `->getDiv()`. Recently
this mechanism resulted in CodexHTMLForm lying about its display
format to get the desired result. Instead, explicitly switch based
on the display format and call the appropriate method, and override
this in subclasses when using subclasses.

Change-Id: I91b802ac63622e3b592be589d89ea11117a616f8
2023-07-10 18:53:50 +02:00
Bartosz Dziewoński
daa623f886 HTMLForm: Extract a formatField() helper method
This is mostly so that I can add nice type hints. (But also, this is
one of the main things that this class does, I think it deserves its
own method instead of being sandwiched in that ugly loop.)

Change-Id: I621b839a8079cee1198c4250686e378ff7006c75
2023-07-10 18:35:25 +02:00
thiemowmde
918aed5f77 htmlform: Use more compact PHP features in places
Some of these classes are really huge, up to 2000 lines and more. I
hope this makes the source code a little more readable.

Change-Id: I3d4b2a042a34c14e6ea0ea30ea31ca53448d8d59
2023-07-07 13:11:05 +02:00
Jon Robson
51c6fe6167 Login page: Use Codex CSS components
Changes:
* Use Codex markup instead of mediawiki ui markup
* We limit what can be customized by the skin
* Current rules for touch area and snapping of
inputs is moved from Minerva into core so other skins
benefit from the styling
* A placeholder text is adding to the "real name" field.
* Introduce CodexHTMLForm

Bug: T182050
Change-Id: I834cc0e07fc1e705753df6866a5eeda2ac77fb8e
2023-07-06 17:20:17 -07:00
Func
13e7861123 HTMLForm: Allow conditional prefilling even without identifier
Special:Logs is prefilling fields manually by the `default` param
for compatibility with links without `wpFormIdentifier` set.
That disabled the validation built in HTMLForm, since we would
give up when the default value is invalid.

Prefilling fields and trying submit should be fine if the caller
is sure that the page only contains that GET form.

Bug: T338042
Change-Id: I047d2546d3dacc672304dab1e362c08992e68308
2023-06-14 03:41:28 +08:00
Marius Hoch
dc87b69568 Allow setting "notices" for OOUI form fields
We need this in Wikibase to nicely indicate why
a certain form field cannot be used.

Bug: T330193
Change-Id: Ic0a6f9561db41d4da218122477ce9318665929d5
2023-05-30 12:28:15 +02:00
Tim Starling
317b460500 Fix even more PHPStorm inspections (#3)
* Inappropriate @inheritDoc usage. Arguably all @inheritDoc is
  inappropriate but these are the ones PHPStorm flags as misleading
  due to the method not being inherited.
* Doc comment type does not match actual argument/return type.
* I replaced "@return void|never" with "@return void" since never means
  never, it doesn't make sense for it to be conditional. If a method
  can return (even if that is unlikely) then @return contains the type
  that it returns. "@return never" means that there is no such type
  because the method never returns.
* Incomplete/partial/broken doc tags

Change-Id: Ide86bd6d2b44387f37d234c2b059d6fbc42ec962
2023-03-25 00:30:15 +00:00
Matěj Suchánek
c231736471 Fix some typos
Bug: T201491
Change-Id: I5c9408c262f09c936525f35abfacfa92a193b791
2023-03-21 15:58:09 +01:00
jenkins-bot
4c1ae11a41 Merge "htmlform: Skip array query parameter on HtmlForm::addHiddenField" 2023-03-10 23:59:57 +00: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
Umherirrender
b1a287ca61 htmlform: Skip array query parameter on HtmlForm::addHiddenField
Also exclude them in TablePager::getHiddenFields

Bug: T321471
Change-Id: Iedcb9071e6543d08d14336a2e96711675b6f5811
2023-02-10 20:10:33 +00:00
jenkins-bot
d68e047a2d Merge "Refactor SpecialWhatLinksHere to use FormSpecialPage" 2023-02-01 22:58:05 +00:00
jenkins-bot
36f9c2e962 Merge "Avoid passing null to HTMLFormField methods" 2023-01-19 19:18:02 +00:00
Func
4727ed1a9c Refactor SpecialWhatLinksHere to use FormSpecialPage
Use cases of HTMLForm should not supply user inputs as the default
value, espacially values that can't pass validations.

Bug: T41126
Change-Id: Ia50b06e12fbe5d47165a73245e695ba75fa4faec
2023-01-11 13:10:11 +08:00
Brian Wolff
07cdef809c Deprecate creating HTMLFormFields without reference to parent form
Currently it is documented that mParent in HTMLFormField may be null.
This can happen if the form element is constructed manually via
new, instead of the normal way via HTMLForm methods.

As it stands, much of the code assumes that mParent is always set
despite the documentation. Lets mark creating form fields without
parent set as deprecated. The current situation seems like a
recipe for bugs, and after the deprecation period this would allow
us to simplify some of the HTMLFormField code.

Bug: T326456
Change-Id: Ica0740049f0a3e8ec764903c5b71825e4d628a3f
Depends-On: I15a39605e3eec8a5c265c4a331039fa906eda036
2023-01-08 18:20:16 -08:00
Func
c9dc5a0233 HTMLForm: Skip submission when got nothing from the user on GET forms
Don't throw errors when the user is only viewing these GET forms.

Change-Id: I6f6e68505152acd57ff4e9c4dd51bbd10b5e8c1d
2022-12-25 13:01:13 +00:00
Umherirrender
45e6a2b0f9 Use str_starts_with/str_ends_with/str_contains
Use the new function in conditions to avoid creating substrings or to
search the whole string

Change-Id: Ibad6b1b447a4f62cceb34359231f88ebb967a90b
2022-12-12 19:54:24 +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
Umherirrender
ea5ea60b31 Various doc fixes about false on method arguments/return types
Doc-only changes

Change-Id: I5177f582ae7ee70c357e9389fed14819faf79463
2022-11-10 19:23:46 +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
Sam Wilson
c6dc9b93ca Avoid passing null to HTMLFormField methods
The methods HTMLFormField::getDiv, getRaw, getInline, etc. all
accept a single string parameter, but here are being passed null.
This raises a deprecation warning in PHP 8.1 in some situations,
(because of deeper usages of substr() etc.).

Bug: T289926
Change-Id: Id965f42b9cb4fc617d89c26d4459c66c3c478090
2022-10-14 12:46:34 +08: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
jenkins-bot
1e60c7337a Merge "Create an HTMLForm field for selecting a timezone" 2022-09-23 18:16:06 +00:00
Daimona Eaytoy
ec09c19fba Create an HTMLForm field for selecting a timezone
This patch introduces HTMLTimezoneField, an HTMLForm field type that
allows the user to select a timezone, either from a geographic zone, by
manually entering an offset, or using the wiki/browser default. This
logic is extracted from DefaultPreferencesFactory so that it can be
reused elsewhere.

The widget itself is really just an HTMLSelectOrOtherField, it's just
the list of options and the JS logic that is special.

Bug: T309629
Change-Id: I99a00dff7e3319ce45883191daee16bec1ed68ba
2022-09-23 18:35:51 +02:00
jenkins-bot
4e3deb4d93 Merge "Remove unneeded initalize of local variables" 2022-09-22 23:41:08 +00:00
Umherirrender
eb159d8f5a Remove unneeded initalize of local variables
The variables are set conditional later, but all condition branches set
it or the variable is not used outside that scope

Change-Id: Ic9612915db507028ad4733a061d3ce9be3babfb6
2022-09-21 21:29:21 +02:00
Umherirrender
5c5498a202 Remove unused key variable from foreach loops
Change-Id: Id2d91e30a6f7cc4eb93427b50efc1c5c77f14b75
2022-09-21 21:18:43 +02:00
Gergő Tisza
8756b5c42f Allow returning StatusValue from HTMLForm submit callbacks
Callbacks are documented to return Status, but we use the two
interchangeably almost everywhere, so this eliminates an easy
mistake possibility.

(The more ideal solution would be to allow returning StatusValue
from trySubmit and associated methods, but that's way more effort.)

Change-Id: I6c54b4aceb0430530d22423f8e80ab20a88548b3
2022-08-22 20:43:20 +00:00
Isabelle Hurbain-Palatin
a2e5997a4c Make "title" the first field in a form, when needed
In a default installation of Mediawiki, the article URLs use the URL GET
parameter "title" to construct the page title (index.php?title=Foo).
When a form is submitted, that parameter is added to the form as a
hidden field. Before this patch, it's added as last element of the form,
which makes the URL confusing. For example, when running a search on the
Lint errors, the URL becomes
index.php?pagename=Test&title=Special%3ALintErrors instead of starting
with title=Special:LintErrors as one would expect.
Note that this is not an issue on wikis that set their article path to
look like /wiki/Foo: in that case, the title of the page is not set as
a hidden field.

Change-Id: Id7c0617166754010cec987158e14ac54ddc94444
2022-05-31 09:46:08 +02:00
Bartosz Dziewoński
05c9df0066 HTMLForm: Require constructor $context parameter
Using the constructor without the $context parameter was deprecated
in MediaWiki 1.38 in 97056794fc.

Bug: T308407
Change-Id: Id92adde978e70ffd6fa5d4a048d5d45c7ede4bf3
2022-05-19 18:40:53 +00: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
a80bc9dd40 htmlform: List all arguments on HTMLForm::factory instead of varargs
Show the arguments and documentation better in IDEs

Change-Id: Ib2e9d8e82146479cf3f427a9aa7b0b4d2df77954
2022-04-02 18:40:30 +02:00
Umherirrender
7aa0884029 phan: Remove PhanTypePossiblyInvalidDimOffset suppression
Make phan stricter about array keys
Remaining false positive issues are suppressed.
The suppression and the setting change can only be done together

Bug: T304887
Depends-On: I3105a5fd4826f8667b5232834defc5ec93be32a1
Depends-On: Ie9610a6e83731468311edb3ed17f80fc509de385
Change-Id: I701f12ab94478c3b8e7fd82110ade74a8e6b04ef
2022-03-28 23:26:49 +02:00
Func
ef2e948d31 HTMLForm: Add title field if the action is overridden to script path
Some use cases like HistoryAction prefer the `index.php` form to keep
consistency, so they use setAction( wfScript() ) or something similar.
But the title is missing, so they hack it with manual addHiddenField()
or add a 'title' field in the descriptor. This is not good and prevents
us to warn the use of internal fields (title, wfEditToken).

Bug: T285464
Change-Id: Iaec81a2fb49162f2fc764f143f88e887572a3a0b
2022-03-27 11:51:59 +08:00
stang
9c70df0cf6 Fix uses of (error|warning|success)box in core
Replace HTML class for boxes with "mw-message-box-" style.

Bug: T300358
Change-Id: Iddb0fd3ae859714fb03d3a6d4586f8525becaac6
2022-03-20 21:15:26 +00:00
Func
cd09bceb67 HTMLForm: Deprecate calling loadData() from outside
There is no reason to use loadData() only, and would unexpectedly skip
some necessary checks in prepareForm().
Some use cases are too old and didn't make use of the show() method
where should be available, which may be addressed in follow-up(s).

Bug: T256805
Change-Id: Ibbdc2c2c2b056342bb2c583a63546ac789b651d8
2022-03-17 04:49:53 +00:00
Reedy
107fafbf44 HTMLForm: Fix check typo
Change-Id: I101b45d1d64dfa22240c147f5763ec5e89d63206
2022-03-01 04:04:03 +00:00
Bartosz Dziewoński
97056794fc HTMLForm: Hard-deprecate constructor without $context parameter
It was supposed to become required in 1.19, according to a code
comment (typo'ed in ead9055a).

There seem to be very few uses without the parameter out there (based
on a brief look at https://codesearch.wmcloud.org/), and most of them
are in tests, so they should be easy to find and correct.

Change-Id: I161cc342d1af813c281a6d9e30fdd85bc7b07578
2022-02-03 10:31:13 -05:00
Func
0ae7dad148 HTMLForm: Pass field data instead of fields to filter
I believe there is a mistake, since DefaultPreferencesFactory::cleanSignature() uses it as field data, which is the only filter applied in the core.

Change-Id: Ic7aa509a3e5fd3a3c717259d83d5bf0a26d3556a
2022-01-15 06:05:58 +00:00
Func
9c9514a8d9 HTMLForm: Load data from default for fields that are supposed to be disabled
Data of disabled fields wouldn't be sent to the server, which needs to load data from default.

Bug: T298614
Bug: T298819
Change-Id: I58f9df384df8ecc5ebae8cac68ec2251351bc984
2022-01-13 11:54:01 +00:00
Gergő Tisza
499af9ccbe
Rename HTMLForm::[get|set|add]*Text() methods
Rename HTMLForm::[get|set|add][Pre|Post|Header|Footer]Text() to
HTMLForm::[get|set|add][Pre|Post|Header|Footer]Html() and
deprecate the old methods. Their arguments are rendered as raw
HTML so the old name was misleading.

Some of these are marked as stable to override and theoretically
the renaming could cause problems if callers are updated to the
new name while the overriding class is still using the old name,
but the only case known to codesearch is OOUIHTMLForm which is
also updated here.

Bug: T290771
Change-Id: I2c269eb6ab2b320fa2eef4ee8a226e96ad05fbe2
2022-01-02 21:51:48 -08:00
Siddharth VP
061ee25f7e Fix typos in comments (E-H)
Change-Id: I0748e0d5962fa909fdd6b7fcae4ab259bde4cdf1
2021-12-30 18:14:43 +05:30
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
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