52 public function validate( $name, $value, array $settings, array $options ) {
55 if ( in_array( $value, $values,
true ) ) {
57 if ( empty( $options[
'is-default'] ) &&
58 isset( $settings[self::PARAM_DEPRECATED_VALUES][$value] )
62 $message = DataMessageValue::new(
71 $this->
failure( $message, $name, $value, $settings, $options,
false );
77 $isMulti = isset( $options[
'values-list'] );
79 $this->
failureMessage(
'badvalue', [], $isMulti ?
'enummulti' :
'enumnotmulti' )
80 ->textListParams( array_map(
81 static fn ( $v ) =>
new ScalarParam( ParamType::PLAINTEXT, $v ),
84 ->numParams( count( $values ) ),
85 $name, $value, $settings, $options
90 public function checkSettings(
string $name, $settings, array $options, array $ret ): array {
91 $ret = parent::
checkSettings( $name, $settings, $options, $ret );
96 if ( !is_array( $dv ) ) {
100 $values = array_map(
function ( $v ) use ( $name, $settings, $options ) {
103 foreach ( $dv as $k => $v ) {
105 if ( !in_array( $k, $values,
true ) ) {
106 $ret[
'issues'][] =
"PARAM_DEPRECATED_VALUES contains \"$k\", which is not "
107 .
'one of the enumerated values';
108 } elseif ( $v instanceof MessageValue ) {
109 $ret[
'messages'][] = $v;
110 } elseif ( $v !==
null && $v !==
true ) {
111 $type = $v ===
false ?
'false' : ( is_object( $v ) ? get_class( $v ) : gettype( $v ) );
112 $ret[
'issues'][] =
'Values in PARAM_DEPRECATED_VALUES must be null, true, or MessageValue, '
113 .
"but value for \"$k\" is $type";
127 public function stringifyValue( $name, $value, array $settings, array $options ) {
128 if ( !is_array( $value ) ) {
129 return parent::stringifyValue( $name, $value, $settings, $options );
136 public function getParamInfo( $name, array $settings, array $options ) {
137 $info = parent::getParamInfo( $name, $settings, $options );
139 $info[
'type'] = $this->sortEnumValues(
146 if ( !empty( $settings[self::PARAM_DEPRECATED_VALUES] ) ) {
147 $deprecatedValues = array_intersect(
148 array_keys( $settings[self::PARAM_DEPRECATED_VALUES] ),
151 if ( $deprecatedValues ) {
152 $deprecatedValues = $this->sortEnumValues( $name, $deprecatedValues, $settings, $options );
153 $info[
'deprecatedvalues'] = array_values( $deprecatedValues );
161 public function getHelpInfo( $name, array $settings, array $options ) {
162 $info = parent::getHelpInfo( $name, $settings, $options );
166 $values = $this->getEnumValuesForHelp( $name, $settings, $options );
167 $count = count( $values );
169 $i = array_search(
'', $values,
true );
170 if ( $i ===
false ) {
171 $valuesParam =
new ListParam( ListType::COMMA, $values );
173 unset( $values[$i] );
174 $valuesParam = MessageValue::new(
'paramvalidator-help-type-enum-can-be-empty' )
175 ->commaListParams( $values )
176 ->numParams( count( $values ) );
180 ->params( $isMulti ? 2 : 1 )
181 ->params( $valuesParam )
182 ->numParams( $count );
200 string $name, array $values, array $settings, array $options
204 foreach ( $values as $k => $value ) {
206 if ( isset( $settings[self::PARAM_DEPRECATED_VALUES][$value] ) ) {
211 array_multisort( $flags, $values, SORT_NATURAL );
225 $values = $this->getEnumValues( $name, $settings, $options );
226 $values = $this->sortEnumValues( $name, $values, $settings, $options );