MediaWiki  master
HTMLRestrictionsField.php
Go to the documentation of this file.
1 <?php
2 
14  const DEFAULT_ROWS = 5;
15 
16  public function __construct( array $params ) {
17  parent::__construct( $params );
18  if ( !$this->mLabel ) {
19  $this->mLabel = $this->msg( 'restrictionsfield-label' )->parse();
20  }
21  }
22 
23  public function getHelpText() {
24  $helpText = parent::getHelpText();
25  if ( $helpText === null ) {
26  $helpText = $this->msg( 'restrictionsfield-help' )->parse();
27  }
28  return $helpText;
29  }
30 
35  public function loadDataFromRequest( $request ) {
36  if ( !$request->getCheck( $this->mName ) ) {
37  return $this->getDefault();
38  }
39 
40  $value = rtrim( $request->getText( $this->mName ), "\r\n" );
41  $ips = $value === '' ? [] : explode( "\n", $value );
42  try {
43  return MWRestrictions::newFromArray( [ 'IPAddresses' => $ips ] );
44  } catch ( InvalidArgumentException $e ) {
45  return $value;
46  }
47  }
48 
52  public function getDefault() {
53  $default = parent::getDefault();
54  if ( $default === null ) {
55  $default = MWRestrictions::newDefault();
56  }
57  return $default;
58  }
59 
67  public function validate( $value, $alldata ) {
68  if ( $this->isHidden( $alldata ) ) {
69  return true;
70  }
71 
72  if (
73  isset( $this->mParams['required'] ) && $this->mParams['required'] !== false
74  && $value instanceof MWRestrictions && !$value->toArray()['IPAddresses']
75  ) {
76  return $this->msg( 'htmlform-required' );
77  }
78 
79  if ( is_string( $value ) ) {
80  // MWRestrictions::newFromArray failed; one of the IP ranges must be invalid
81  $status = Status::newGood();
82  foreach ( explode( "\n", $value ) as $range ) {
83  if ( !\IP::isIPAddress( $range ) ) {
84  $status->fatal( 'restrictionsfield-badip', $range );
85  }
86  }
87  if ( $status->isOK() ) {
88  $status->fatal( 'unknown-error' );
89  }
90  return $status->getMessage();
91  }
92 
93  if ( isset( $this->mValidationCallback ) ) {
94  return call_user_func( $this->mValidationCallback, $value, $alldata, $this->mParent );
95  }
96 
97  return true;
98  }
99 
104  public function getInputHTML( $value ) {
105  if ( $value instanceof MWRestrictions ) {
106  $value = implode( "\n", $value->toArray()['IPAddresses'] );
107  }
108  return parent::getInputHTML( $value );
109  }
110 
115  public function getInputOOUI( $value ) {
116  if ( $value instanceof MWRestrictions ) {
117  $value = implode( "\n", $value->toArray()['IPAddresses'] );
118  }
119  return parent::getInputOOUI( $value );
120  }
121 }
static isIPAddress( $ip)
Determine if a string is as valid IP address or network (CIDR prefix).
Definition: IP.php:77
Class for updating an MWRestrictions value (which is, currently, basically just an IP address list)...
static newFromArray(array $restrictions)
static newGood( $value=null)
Factory function for good results.
Definition: StatusValue.php:81
A class to check request restrictions expressed as a JSON object.
validate( $value, $alldata)
msg( $key,... $params)
Get a translated interface message.
toArray()
Return the restrictions as an array.
static newDefault()
isHidden( $alldata)
Test whether this field is supposed to be hidden, based on the values of the other form fields...