9use InvalidArgumentException;
31 public const TYPE =
'string_options';
41 public const ALL =
'all';
102 if ( !isset( $groupDefinition[
'isFullCoverage'] ) ) {
103 throw new InvalidArgumentException(
'You must specify isFullCoverage' );
108 parent::__construct( $groupDefinition );
110 $this->queryCallable = $groupDefinition[
'queryCallable'] ??
null;
112 if ( isset( $groupDefinition[
'default'] ) ) {
113 $this->
setDefault( $groupDefinition[
'default'] );
115 throw new InvalidArgumentException(
'You must specify a default' );
126 throw new InvalidArgumentException(
127 "Can't set the default of filter options group \"{$this->getName()}\"" .
128 ' to a value of type "' . gettype(
$defaultValue ) .
': string expected' );
156 $this->filters[$filter->
getName()] = $filter;
163 &$tables, &$fields, &$conds, &$query_options, &$join_conds,
167 if ( !$isStructuredFiltersEnabled ) {
170 if ( !$this->queryCallable ) {
174 $value = $opts[ $this->
getName() ];
175 $allowedFilterNames = [];
176 foreach ( $this->filters as $filter ) {
177 $allowedFilterNames[] = $filter->getName();
180 if ( $value === self::ALL ) {
181 $selectedValues = $allowedFilterNames;
183 $selectedValues = explode( self::SEPARATOR, strtolower( $value ) );
186 $selectedValues = array_intersect(
197 if ( count( $selectedValues ) === 0 ) {
201 sort( $selectedValues );
204 get_class( $specialPage ),
220 $output = parent::getJsData();
237class_alias( ChangesListStringOptionsFilterGroup::class,
'ChangesListStringOptionsFilterGroup' );
Special page which uses a ChangesList to show query results.
getContext()
Gets the context this SpecialPage is executed in.