X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=includes%2Fwatcheditem%2FWatchedItemQueryService.php;h=abe9b89fb2a2a001d5cd5b275c28a884d098f25c;hp=d0f45bec171016779236eab031affa3742365d61;hb=d9c25c2f4776832c0fe3d7be091fd7f776991122;hpb=2ef178072f6f46abde7bdcc2630389a8b2837557 diff --git a/includes/watcheditem/WatchedItemQueryService.php b/includes/watcheditem/WatchedItemQueryService.php index d0f45bec17..abe9b89fb2 100644 --- a/includes/watcheditem/WatchedItemQueryService.php +++ b/includes/watcheditem/WatchedItemQueryService.php @@ -27,6 +27,7 @@ class WatchedItemQueryService { const INCLUDE_PATROL_INFO = 'patrol'; const INCLUDE_SIZES = 'sizes'; const INCLUDE_LOG_INFO = 'loginfo'; + const INCLUDE_TAGS = 'tags'; // FILTER_* constants are part of public API (are used in ApiQueryWatchlist and // ApiQueryWatchlistRaw classes) and should not be changed. @@ -55,12 +56,15 @@ class WatchedItemQueryService { /** @var WatchedItemQueryServiceExtension[]|null */ private $extensions = null; - /** - * @var CommentStore|null */ - private $commentStore = null; + /** @var CommentStore */ + private $commentStore; - public function __construct( LoadBalancer $loadBalancer ) { + public function __construct( + LoadBalancer $loadBalancer, + CommentStore $commentStore + ) { $this->loadBalancer = $loadBalancer; + $this->commentStore = $commentStore; } /** @@ -82,13 +86,6 @@ class WatchedItemQueryService { return $this->loadBalancer->getConnectionRef( DB_REPLICA, [ 'watchlist' ] ); } - private function getCommentStore() { - if ( !$this->commentStore ) { - $this->commentStore = new CommentStore( 'rc_comment' ); - } - return $this->commentStore; - } - /** * @param User $user * @param array $options Allowed keys: @@ -333,7 +330,10 @@ class WatchedItemQueryService { $tables[] = 'page'; } if ( in_array( self::INCLUDE_COMMENT, $options['includeFields'] ) ) { - $tables += $this->getCommentStore()->getJoin()['tables']; + $tables += $this->commentStore->getJoin( 'rc_comment' )['tables']; + } + if ( in_array( self::INCLUDE_TAGS, $options['includeFields'] ) ) { + $tables[] = 'tag_summary'; } return $tables; } @@ -373,7 +373,7 @@ class WatchedItemQueryService { $fields[] = 'rc_user'; } if ( in_array( self::INCLUDE_COMMENT, $options['includeFields'] ) ) { - $fields += $this->getCommentStore()->getJoin()['fields']; + $fields += $this->commentStore->getJoin( 'rc_comment' )['fields']; } if ( in_array( self::INCLUDE_PATROL_INFO, $options['includeFields'] ) ) { $fields = array_merge( $fields, [ 'rc_patrolled', 'rc_log_type' ] ); @@ -384,6 +384,10 @@ class WatchedItemQueryService { if ( in_array( self::INCLUDE_LOG_INFO, $options['includeFields'] ) ) { $fields = array_merge( $fields, [ 'rc_logid', 'rc_log_type', 'rc_log_action', 'rc_params' ] ); } + if ( in_array( self::INCLUDE_TAGS, $options['includeFields'] ) ) { + // prefixed with rc_ to include the field in getRecentChangeFieldsFromRow + $fields['rc_tags'] = 'ts_tags'; + } return $fields; } @@ -676,7 +680,10 @@ class WatchedItemQueryService { $joinConds['page'] = [ 'LEFT JOIN', 'rc_cur_id=page_id' ]; } if ( in_array( self::INCLUDE_COMMENT, $options['includeFields'] ) ) { - $joinConds += $this->getCommentStore()->getJoin()['joins']; + $joinConds += $this->commentStore->getJoin( 'rc_comment' )['joins']; + } + if ( in_array( self::INCLUDE_TAGS, $options['includeFields'] ) ) { + $joinConds['tag_summary'] = [ 'LEFT JOIN', [ 'rc_id=ts_rc_id' ] ]; } return $joinConds; }