Merge "Add attributes parameter to ShowSearchHitTitle"
[lhc/web/wiklou.git] / includes / changes / ChangesListFilterGroup.php
index 3555158..48c6e84 100644 (file)
@@ -27,6 +27,8 @@
 // What to call it.  FilterStructure?  That would also let me make
 // setUnidirectionalConflict protected.
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * Represents a filter group (used on ChangesListSpecialPage and descendants)
  *
@@ -165,7 +167,7 @@ abstract class ChangesListFilterGroup {
                        $this->title = $groupDefinition['title'];
                }
 
-               if ( isset ( $groupDefinition['whatsThisHeader'] ) ) {
+               if ( isset( $groupDefinition['whatsThisHeader'] ) ) {
                        $this->whatsThisHeader = $groupDefinition['whatsThisHeader'];
                        $this->whatsThisBody = $groupDefinition['whatsThisBody'];
                        $this->whatsThisUrl = $groupDefinition['whatsThisUrl'];
@@ -229,12 +231,8 @@ abstract class ChangesListFilterGroup {
         * @param string $backwardKey i18n key for conflict message in reverse
         *  direction (when in UI context of $other object)
         */
-       public function conflictsWith( $other, $globalKey, $forwardKey,
-               $backwardKey ) {
-
-               if ( $globalKey === null || $forwardKey === null ||
-                       $backwardKey === null ) {
-
+       public function conflictsWith( $other, $globalKey, $forwardKey, $backwardKey ) {
+               if ( $globalKey === null || $forwardKey === null || $backwardKey === null ) {
                        throw new MWException( 'All messages must be specified' );
                }
 
@@ -263,9 +261,7 @@ abstract class ChangesListFilterGroup {
         * @param string $contextDescription i18n key for conflict message in this
         *  direction (when in UI context of $this object)
         */
-       public function setUnidirectionalConflict( $other, $globalDescription,
-               $contextDescription ) {
-
+       public function setUnidirectionalConflict( $other, $globalDescription, $contextDescription ) {
                if ( $other instanceof ChangesListFilterGroup ) {
                        $this->conflictingGroups[] = [
                                'group' => $other->getName(),
@@ -332,14 +328,6 @@ abstract class ChangesListFilterGroup {
                return isset( $this->filters[$name] ) ? $this->filters[$name] : null;
        }
 
-       /**
-        * Check whether the URL parameter is for the group, or for individual filters.
-        * Defaults can also be defined on the group if and only if this is true.
-        *
-        * @return bool True if and only if the URL parameter is per-group
-        */
-       abstract public function isPerGroupRequestParameter();
-
        /**
         * Gets the JS data in the format required by the front-end of the structured UI
         *
@@ -358,7 +346,7 @@ abstract class ChangesListFilterGroup {
                        'messageKeys' => [ $this->title ]
                ];
 
-               if ( isset ( $this->whatsThisHeader ) ) {
+               if ( isset( $this->whatsThisHeader ) ) {
                        $output['whatsThisHeader'] = $this->whatsThisHeader;
                        $output['whatsThisBody'] = $this->whatsThisBody;
                        $output['whatsThisUrl'] = $this->whatsThisUrl;
@@ -400,9 +388,9 @@ abstract class ChangesListFilterGroup {
                );
 
                foreach ( $conflicts as $conflictInfo ) {
-                       $output['conflicts'][] = $conflictInfo;
                        unset( $conflictInfo['filterObject'] );
                        unset( $conflictInfo['groupObject'] );
+                       $output['conflicts'][] = $conflictInfo;
                        array_push(
                                $output['messageKeys'],
                                $conflictInfo['globalDescription'],
@@ -455,4 +443,34 @@ abstract class ChangesListFilterGroup {
                        }
                ) );
        }
+
+       /**
+        * Modifies the query to include the filter group.
+        *
+        * The modification is only done if the filter group is in effect.  This means that
+        * one or more valid and allowed filters were selected.
+        *
+        * @param IDatabase $dbr Database, for addQuotes, makeList, and similar
+        * @param ChangesListSpecialPage $specialPage Current special page
+        * @param array &$tables Array of tables; see IDatabase::select $table
+        * @param array &$fields Array of fields; see IDatabase::select $vars
+        * @param array &$conds Array of conditions; see IDatabase::select $conds
+        * @param array &$query_options Array of query options; see IDatabase::select $options
+        * @param array &$join_conds Array of join conditions; see IDatabase::select $join_conds
+        * @param FormOptions $opts Wrapper for the current request options and their defaults
+        * @param bool $isStructuredFiltersEnabled True if the Structured UI is currently enabled
+        */
+       abstract public function modifyQuery( IDatabase $dbr, ChangesListSpecialPage $specialPage,
+               &$tables, &$fields, &$conds, &$query_options, &$join_conds,
+               FormOptions $opts, $isStructuredFiltersEnabled );
+
+       /**
+        * All the options represented by this filter group to $opts
+        *
+        * @param FormOptions $opts
+        * @param bool $allowDefaults
+        * @param bool $isStructuredFiltersEnabled
+        */
+       abstract public function addOptions( FormOptions $opts, $allowDefaults,
+               $isStructuredFiltersEnabled );
 }