@@ -142,6 +142,47 @@ protected function transformFilterDefinition( array $filterDefinition ) {
142142protected function registerFilters () {
143143parent ::registerFilters ();
144144
145+ $ this ->registerFilterGroup ( new ChangesListStringOptionsFilterGroup ( [
146+ 'name ' => 'watchlistactivity ' ,
147+ 'title ' => 'rcfilters-filtergroup-watchlistactivity ' ,
148+ 'class ' => ChangesListStringOptionsFilterGroup::class,
149+ 'priority ' => 3 ,
150+ 'isFullCoverage ' => true ,
151+ 'filters ' => [
152+ [
153+ 'name ' => 'unseen ' ,
154+ 'label ' => 'rcfilters-filter-watchlistactivity-unseen-label ' ,
155+ 'description ' => 'rcfilters-filter-watchlistactivity-unseen-description ' ,
156+ 'cssClassSuffix ' => 'watchedunseen ' ,
157+ 'isRowApplicableCallable ' => function ( $ ctx , $ rc ) {
158+ $ changeTs = $ rc ->getAttribute ( 'rc_timestamp ' );
159+ $ lastVisitTs = $ rc ->getAttribute ( 'wl_notificationtimestamp ' );
160+ return $ changeTs >= $ lastVisitTs ;
161+ },
162+ ],
163+ [
164+ 'name ' => 'seen ' ,
165+ 'label ' => 'rcfilters-filter-watchlistactivity-seen-label ' ,
166+ 'description ' => 'rcfilters-filter-watchlistactivity-seen-description ' ,
167+ 'cssClassSuffix ' => 'watchedseen ' ,
168+ 'isRowApplicableCallable ' => function ( $ ctx , $ rc ) {
169+ $ changeTs = $ rc ->getAttribute ( 'rc_timestamp ' );
170+ $ lastVisitTs = $ rc ->getAttribute ( 'wl_notificationtimestamp ' );
171+ return $ changeTs < $ lastVisitTs ;
172+ }
173+ ],
174+ ],
175+ 'default ' => ChangesListStringOptionsFilterGroup::NONE ,
176+ 'queryCallable ' => function ( $ specialPageClassName , $ context , $ dbr ,
177+ &$ tables , &$ fields , &$ conds , &$ query_options , &$ join_conds , $ selectedValues ) {
178+ if ( $ selectedValues === [ 'seen ' ] ) {
179+ $ conds [] = 'rc_timestamp < wl_notificationtimestamp ' ;
180+ } elseif ( $ selectedValues === [ 'unseen ' ] ) {
181+ $ conds [] = 'rc_timestamp >= wl_notificationtimestamp ' ;
182+ }
183+ }
184+ ] ) );
185+
145186$ user = $ this ->getUser ();
146187
147188$ significance = $ this ->getFilterGroup ( 'significance ' );
0 commit comments