protected $isFullCoverage;
/**
- * List of conflicting groups
+ * Array of associative arrays with conflict information. See
+ * setUnidirectionalConflict
*
- * @var array $conflictingGroups Array of associative arrays with conflict
- * information. See setUnidirectionalConflict
+ * @var array $conflictingGroups
*/
protected $conflictingGroups = [];
/**
- * List of conflicting filters
+ * Array of associative arrays with conflict information. See
+ * setUnidirectionalConflict
*
- * @var array $conflictingFilters Array of associative arrays with conflict
- * information. See setUnidirectionalConflict
+ * @var array $conflictingFilters
*/
protected $conflictingFilters = [];
* @param array $groupDefinition Configuration of group
* * $groupDefinition['name'] string Group name; use camelCase with no punctuation
* * $groupDefinition['title'] string i18n key for title (optional, can be omitted
- * * only if none of the filters in the group display in the structured UI)
+ * only if none of the filters in the group display in the structured UI)
* * $groupDefinition['type'] string A type constant from a subclass of this one
* * $groupDefinition['priority'] int Priority integer. Higher value means higher
- * * up in the group list (optional, defaults to -100).
+ * up in the group list (optional, defaults to -100).
* * $groupDefinition['filters'] array Numeric array of filter definitions, each of which
- * * is an associative array to be passed to the filter constructor. However,
- * * 'priority' is optional for the filters. Any filter that has priority unset
- * * will be put to the bottom, in the order given.
+ * is an associative array to be passed to the filter constructor. However,
+ * 'priority' is optional for the filters. Any filter that has priority unset
+ * will be put to the bottom, in the order given.
* * $groupDefinition['isFullCoverage'] bool Whether the group is full coverage;
- * * if true, this means that checking every item in the group means no
- * * changes list entries are filtered out.
+ * if true, this means that checking every item in the group means no
+ * changes list entries are filtered out.
+ * * $groupDefinition['whatsThisHeader'] string i18n key for header of "What's
+ * This" popup (optional).
+ * * $groupDefinition['whatsThisBody'] string i18n key for body of "What's This"
+ * popup (optional).
+ * * $groupDefinition['whatsThisUrl'] string URL for main link of "What's This"
+ * popup (optional).
+ * * $groupDefinition['whatsThisLinkText'] string i18n key of text for main link of
+ * "What's This" popup (optional).
*/
public function __construct( array $groupDefinition ) {
if ( strpos( $groupDefinition['name'], self::RESERVED_NAME_CHAR ) !== false ) {
if ( $other instanceof ChangesListFilterGroup ) {
$this->conflictingGroups[] = [
'group' => $other->getName(),
+ 'groupObject' => $other,
'globalDescription' => $globalDescription,
'contextDescription' => $contextDescription,
];
$this->conflictingFilters[] = [
'group' => $other->getGroup()->getName(),
'filter' => $other->getName(),
+ 'filterObject' => $other,
'globalDescription' => $globalDescription,
'contextDescription' => $contextDescription,
];
}
/**
- * @return array Associative array of ChangesListFilter objects, with filter name as key
+ * @return ChangesListFilter[] Associative array of ChangesListFilter objects, with
+ * filter name as key
*/
public function getFilters() {
return $this->filters;
foreach ( $conflicts as $conflictInfo ) {
$output['conflicts'][] = $conflictInfo;
+ unset( $conflictInfo['filterObject'] );
+ unset( $conflictInfo['groupObject'] );
array_push(
$output['messageKeys'],
$conflictInfo['globalDescription'],
return $output;
}
+
+ /**
+ * Get groups conflicting with this filter group
+ *
+ * @return ChangesListFilterGroup[]
+ */
+ public function getConflictingGroups() {
+ return array_map(
+ function ( $conflictDesc ) {
+ return $conflictDesc[ 'groupObject' ];
+ },
+ $this->conflictingGroups
+ );
+ }
+
+ /**
+ * Get filters conflicting with this filter group
+ *
+ * @return ChangesListFilter[]
+ */
+ public function getConflictingFilters() {
+ return array_map(
+ function ( $conflictDesc ) {
+ return $conflictDesc[ 'filterObject' ];
+ },
+ $this->conflictingFilters
+ );
+ }
+
+ /**
+ * Check if any filter in this group is selected
+ *
+ * @param FormOptions $opts
+ * @return bool
+ */
+ public function anySelected( FormOptions $opts ) {
+ return !!count( array_filter(
+ $this->getFilters(),
+ function ( ChangesListFilter $filter ) use ( $opts ) {
+ return $filter->isSelected( $opts );
+ }
+ ) );
+ }
}