Matthias Mullie has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/193094

Change subject: Fix link targets in usenewrc
......................................................................

Fix link targets in usenewrc

Depends on new hook being introduced in core:
Ib32fb9552b80f9581d89b3b47da6e5d32e3d84a3

Bug: T72513
Change-Id: I127b64d1b97cb981a8a8c82c836cd97db62cc918
---
M Flow.php
M Hooks.php
M includes/Formatter/RecentChanges.php
3 files changed, 83 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Flow 
refs/changes/94/193094/1

diff --git a/Flow.php b/Flow.php
index ecaecee..8a09e39 100644
--- a/Flow.php
+++ b/Flow.php
@@ -63,6 +63,7 @@
 $wgHooks['OldChangesListRecentChangesLine'][] = 
'FlowHooks::onOldChangesListRecentChangesLine';
 $wgHooks['ChangesListInsertArticleLink'][] = 
'FlowHooks::onChangesListInsertArticleLink';
 $wgHooks['ChangesListInitRows'][] = 'FlowHooks::onChangesListInitRows';
+$wgHooks['EnhancedChangesList::getLogText'][] = 'FlowHooks::onGetLogText';
 $wgHooks['SkinTemplateNavigation::Universal'][] = 
'FlowHooks::onSkinTemplateNavigation';
 $wgHooks['Article::MissingArticleConditions'][] = 
'FlowHooks::onMissingArticleConditions';
 $wgHooks['SpecialWatchlistGetNonRevisionTypes'][] = 
'FlowHooks::onSpecialWatchlistGetNonRevisionTypes';
diff --git a/Hooks.php b/Hooks.php
index 3a853c6..19aec11 100644
--- a/Hooks.php
+++ b/Hooks.php
@@ -345,6 +345,54 @@
                return true;
        }
 
+       /**
+        * Alter the enhanced RC links: (n changes | history)
+        * The default diff links are incorrect!
+        *
+        * @param EnhancedChangesList $changesList
+        * @param array $links
+        * @param RecentChange[] $block
+        * @return bool
+        */
+       public static function onGetLogText( $changesList, &$links, $block ) {
+               $rc = $block[0];
+
+               // quit if non-flow
+               $source = $block[0]->getAttribute( 'rc_source' );
+               if ( $source === null ) {
+                       $rcType = (int) $block[0]->getAttribute( 'rc_type' );
+                       if ( $rcType !== RC_FLOW ) {
+                               return true;
+                       }
+               } elseif ( $source !== 
Flow\Data\Listener\RecentChangesListener::SRC_FLOW ) {
+                       return true;
+               }
+
+               set_error_handler( new Flow\RecoverableErrorHandler, -1 );
+               try {
+                       /** @var Flow\Formatter\RecentChangesQuery $query */
+                       $query = Container::get( 'query.recentchanges' );
+
+                       $row = $query->getResult( $changesList, $rc, 
$changesList->isWatchlist() );
+                       if ( $row === false ) {
+                               restore_error_handler();
+                               return false;
+                       }
+
+                       /** @var Flow\Formatter\RecentChanges $formatter */
+                       $formatter = Container::get( 'formatter.recentchanges' 
);
+                       $links = $formatter->getLogTextLinks( $row, 
$changesList, $block, $links );
+               } catch ( Exception $e ) {
+                       wfDebugLog( 'Flow', __METHOD__ . ': Exception 
formatting rc logtext ' . $rc->getAttribute( 'rc_id' ) . ' ' . $e );
+                       MWExceptionHandler::logException( $e );
+                       restore_error_handler();
+                       return false;
+               }
+               restore_error_handler();
+
+               return true;
+       }
+
        public static function onSpecialCheckUserGetLinksFromRow( CheckUser 
$checkUser, $row, &$links ) {
                if ( !$row->cuc_type == RC_FLOW ) {
                        return true;
diff --git a/includes/Formatter/RecentChanges.php 
b/includes/Formatter/RecentChanges.php
index 04e0d70..4cb94d2 100644
--- a/includes/Formatter/RecentChanges.php
+++ b/includes/Formatter/RecentChanges.php
@@ -157,4 +157,38 @@
                // now pass it on to parent with the new, updated, link ;)
                return parent::getTitleLink( $data, $row, $ctx );
        }
+
+       /**
+        * @param RecentChangesRow $row
+        * @param IContextSource $ctx
+        * @param array $block
+        * @param array $links
+        * @return array
+        * @throws FlowException
+        * @throws \Flow\Exception\InvalidInputException
+        */
+       public function getLogTextLinks( RecentChangesRow $row, IContextSource 
$ctx, array $block, array $links = array() ) {
+               $old = unserialize( $block[count( $block ) - 
1]->mAttribs['rc_params'] );
+               $oldId = $old ? UUID::create( 
$old['flow-workflow-change']['revision'] ) : $row->revision->getRevisionId();
+
+               $data = $this->serializer->formatApi( $row, $ctx );
+               if ( !$data ) {
+                       throw new FlowException( 'Could not format data for row 
' . $row->revision->getRevisionId()->getAlphadecimal() );
+               }
+
+               // add highlight details to anchor
+               /** @var Anchor $anchor */
+               $anchor = clone $data['links']['topic'];
+               $anchor->query['fromnotif'] = '1';
+               $anchor->fragment = '#flow-post-' . $oldId->getAlphadecimal();
+
+               $changes = count($block);
+               // link text: "n changes"
+               $text = $ctx->msg( 'nchanges' )->numParams( $changes 
)->escaped();
+
+               // override total changes link
+               $links['total-changes'] = $anchor->toHtml( $text );
+
+               return $links;
+       }
 }

-- 
To view, visit https://gerrit.wikimedia.org/r/193094
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I127b64d1b97cb981a8a8c82c836cd97db62cc918
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Flow
Gerrit-Branch: master
Gerrit-Owner: Matthias Mullie <mmul...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to