Commit graph

17 commits

Author SHA1 Message Date
Bartosz Dziewoński
13289a1269 Use real type hints for services etc. in includes/block/
Mostly used find-and-replace:

Find:
/\*[\*\s]+@var (I?[A-Z](\w+)(?:Interface)?)[\s\*]+/\s*(private|protected|public) (\$[a-z]\w+;\n)((?=\s*/\*[\*\s]+@var (I?[A-Z](\w+)(?:Interface)?))\n|)
Replace with:
\3 \1 \4

More could be done, but to keep this patch reasonably sized, I only
changed the most obvious and unambiguously correct cases.

In some cases, I also removed redundant doc comments on the
constructor, and re-ordered the properties to match the constructor.

Change-Id: I819ed771c915293663856c577a481d607b76ed80
2024-07-31 08:54:31 +00:00
Matěj Suchánek
7f6385e851 Use explicit value checks where "0" is valid input
User "0", page "0" and edit summary "0" are all valid.
Treating them as empty may cause subtle inconsistencies.

Change-Id: I90a92bfb972cca840e5d8060dac3f116a22990db
2024-02-22 09:59:32 +01:00
Alexander Vorwerk
fd77427f47 Make BlockUtils a wiki-aware service
Bug: T353620
Bug: T354298
Change-Id: I46699071bbdbbde650061dece6b67a0c58444523
2024-01-03 20:05:40 +01:00
Tim Starling
3c04561049 Remove weird special case from BlockUtils::parseBlockTarget
* If a caller asks for a block and gives a string target which can't be
  a valid block, then there are no blocks for that string. It seems to
  do more harm than good to throw an exception since the string can come
  from the user. This is an alternative fix for T31797.
* In Article::getRobotPolicy(), noindex subpages of blocked user pages,
  as was requested in T13443.

Bug: T13443
Bug: T31797
Change-Id: I54c453ab202ffcfa8ebc81308de6417614c6e7e8
2023-11-29 22:25:18 -05:00
Tim Starling
d6727856fd Support new block schema
Support migration stages when reading and writing blocks.

I tried to set it up for an easy next stage, in which support for the
old schema is removed. I tried to avoid factoring out of shared code
between the two schemas, so that the old schema cases can simply be
deleted without the need to revert unnecessary abstractions.

However, I added HideUserUtils to factor out ipb_deleted queries. Code
review showed that this was already quite complex, with multiple
approaches to the problem, so it benefits from refactoring even without
the schema abstraction.

HideUserUtils is a service rather than a standalone class to support
unit tests, since unit tests do not allow global config access. When
the migration stage config is removed, it will be a service with no
constructor parameters -- an unnecessary abstraction which should
ideally be resolved at that time.

When interpreting result rows, it is possible to share code by using
field aliases. But when constructing WHERE conditions, the actual field
names need to be used, so the migration is more intrusive in
ApiQueryBlocks and SpecialBlockList, where complex conditions are used.

Bug: T346293
Bug: T51504
Bug: T349883
Change-Id: I408acf7a57b0100fe18c455fc13141277a598925
2023-11-29 13:31:42 +11:00
Tim Starling
cdbd39bfdf Blocks cleanup
* Make BlockManager internal methods private, since nothing calls them
  anymore.
* In AbstractBlock and DatabaseBlock, remove deprecated public
  properties mExpiry, mHideName, mTimestamp, mAuto and mParentBlockId.
* In BlockRestrictionStore, remove all the "instanceof Restriction"
  checks. If someone passes in something that's not a Restriction, we
  should throw, not ignore it, because we don't know the caller's
  intention. Add a type declaration to $hasher in equals() so that it
  will throw.
* Remove the "m" prefix from all private and protected properties.
  AbstractBlock is not stable to override so this is not a stable
  interface break.
* In BlockRestrictionStore::restrictionsToRemove(), use an O(N)
  algorithm.
* In BlockRestrictionStore::rowToRestriction(), use a switch instead of
  a type map, so that the calls are statically analyzable.
* In BlockUser::__construct(), fix the initialisation order issue by
  inlining the relevant logic.
* Rename variable $actionRestriction.
* In Special:Block, fix call to deprecated method getTargetAndType(),
  and hard deprecate it. @deprecated has the effect of deprecating a
  method for both internal and external callers, there's no such thing
  as an external-only deprecation. So it's necessary to rename it if you
  want to keep it as a private method.

Bug: T345683
Change-Id: If4a4a18d7b5fec825417de81302266119c215fd3
2023-09-20 09:40:52 +10:00
Tim Starling
1ee50f1a77 Blocks documentation review
* Use a consistent single-line comment style.
* Start each sentence with a capital letter.
* Use imperative mood.
* Put a space between the adjective and the noun in "hardblock" and
  "rangeblock".
* Capitalise acronyms.
* Break long lines.
* Remove excessively obvious or off-topic comments.
* Indent the non-initial lines of a multi-line @ command.
* Don't try to apply @deprecated to a parameter. Doxygen and PHPStorm
  interpret this as method deprecation.

Bug: T345683
Change-Id: I7df126f7a031dde241dd46f66e5e83722f9b383c
2023-09-06 13:48:07 +10: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
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
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
Aryeh Gregor
7b791474a5 Use MainConfigNames instead of string literals, #4
Now largely automated:

VARS=$(grep -o "'[A-Za-z0-9_]*'" includes/MainConfigNames.php | \
  tr "\n" '|' | sed "s/|$/\n/;s/'//g")
sed -i -E "s/'($VARS)'/MainConfigNames::\1/g" \
  $(grep -ERIl "'($VARS)'" includes/)

Then git add -p with lots of error-prone manual checking. Then
semi-manually add all the necessary "use" lines:

vim $(grep -L 'use MediaWiki\\MainConfigNames;' \
  $(git diff --cached --name-only --diff-filter=M HEAD^))

I didn't bother fixing lines that were over 100 characters unless they
were over 120 and triggered phpcs.

Bug: T305805
Change-Id: I74e0ab511abecb276717ad4276a124760a268147
2022-04-26 19:03:37 +03:00
Umherirrender
75fd8ace1b block: Pass int to explode and cast range in BlockUtils::validateTarget
Change-Id: I82bb41f73b48b0e07b4f4d46b9ec6bd01d1ede73
2022-02-18 22:56:36 +01: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
Alexander Vorwerk
825ac0232c Convert BlockUtils::parseBlockTarget to UserIdentity
Bug: T286490
Change-Id: Ice96180690828bcf2efd60faf6ad10d64307713d
2021-07-20 22:12:26 +02:00
DannyS712
be62daf3b3 Move AbstractBlock::parseTarget to BlockUtils
Deprecation and release notes will be done in a follow-up

Bug: T263249
Change-Id: I077f52e68adbf8f22ceaaa1cd64ba531e195deca
2020-10-07 18:52:11 +00:00
Daimona Eaytoy
3be477b424 BlockUtils: remove unused params, rename methods
Bug: T263189
Change-Id: Ife67d5fca326857fb15172862f70c89c712ada09
Follow-up: I69df8ac927fe38d64c3d8c1a8e2ed63fd12202b7
2020-10-04 23:05:23 +00:00
Martin Urbanec
81eb01bd38 Introduce BlockUtils service
Right now, this service contains only target validation,
but it will soon be expanded with additional methods, cf. T263249
or T250737 in general.

I deliberately do not update usages of this method in core in this
patch, I plan to do that in a followup patch to make reviewing easier.

Bug: T263189
Change-Id: I69df8ac927fe38d64c3d8c1a8e2ed63fd12202b7
2020-10-01 15:18:59 +02:00