MediaWiki  master
TagsDef.php
Go to the documentation of this file.
1 <?php
2 
4 
5 use ChangeTags;
7 use MediaWiki\Message\Converter as MessageConverter;
12 
24 class TagsDef extends EnumDef {
25 
26  private ChangeTagsStore $changeTagsStore;
27 
29  private $messageConverter;
30 
31  public function __construct( Callbacks $callbacks, ChangeTagsStore $changeTagsStore ) {
32  parent::__construct( $callbacks );
33  $this->changeTagsStore = $changeTagsStore;
34  $this->messageConverter = new MessageConverter();
35  }
36 
37  public function validate( $name, $value, array $settings, array $options ) {
38  // Validate the full list of tags at once, because the caller will
39  // *probably* stop at the first exception thrown.
40  if ( isset( $options['values-list'] ) ) {
41  $ret = $value;
42  $tagsStatus = ChangeTags::canAddTagsAccompanyingChange( $options['values-list'] );
43  } else {
44  // The 'tags' type always returns an array.
45  $ret = [ $value ];
46  $tagsStatus = ChangeTags::canAddTagsAccompanyingChange( $ret );
47  }
48 
49  if ( !$tagsStatus->isGood() ) {
50  $msg = $this->messageConverter->convertMessage( $tagsStatus->getMessage() );
51  $data = [];
52  if ( $tagsStatus->value ) {
53  // Specific tags are not allowed.
54  $data['disallowedtags'] = $tagsStatus->value;
55  // @codeCoverageIgnoreStart
56  } else {
57  // All are disallowed, I guess
58  $data['disallowedtags'] = $settings['values-list'] ?? $ret;
59  }
60  // @codeCoverageIgnoreEnd
61 
62  // Only throw if $value is among the disallowed tags
63  if ( in_array( $value, $data['disallowedtags'], true ) ) {
64  throw new ValidationException(
65  DataMessageValue::new( $msg->getKey(), $msg->getParams(), 'badtags', $data ),
66  $name, $value, $settings
67  );
68  }
69  }
70 
71  return $ret;
72  }
73 
74  public function getEnumValues( $name, array $settings, array $options ) {
75  return $this->changeTagsStore->listExplicitlyDefinedTags();
76  }
77 
78 }
static canAddTagsAccompanyingChange(array $tags, Authority $performer=null, $checkBlock=true)
Is it OK to allow the user to apply all the specified tags at the same time as they edit/make the cha...
Definition: ChangeTags.php:396
Gateway class for change_tags table.
Converter between Message and MessageValue.
Definition: Converter.php:18
validate( $name, $value, array $settings, array $options)
Validate the value.
Definition: TagsDef.php:37
__construct(Callbacks $callbacks, ChangeTagsStore $changeTagsStore)
Definition: TagsDef.php:31
getEnumValues( $name, array $settings, array $options)
Get the values for enum-like parameters.
Definition: TagsDef.php:74
Value object representing a message for i18n with alternative machine-readable data.
static new( $key, $params=[], $code=null, array $data=null)
Static constructor for easier chaining of ->params() methods.
Type definition for enumeration types.
Definition: EnumDef.php:32
Error reporting for ParamValidator.
Interface defining callbacks needed by ParamValidator.
Definition: Callbacks.php:21