jenkins-bot has submitted this change and it was merged.

Change subject: Add maintenance script to update page IDs of topic-resolved 
notifications
......................................................................


Add maintenance script to update page IDs of topic-resolved notifications

Change topic titles to board titles.

Bug: T137501
Change-Id: I5bef3ce6017a6f02668d7d83ec0f01762af2a16c
---
A maintenance/FlowUpdateResolvedNotifTitles.php
1 file changed, 94 insertions(+), 0 deletions(-)

Approvals:
  Sbisson: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/maintenance/FlowUpdateResolvedNotifTitles.php 
b/maintenance/FlowUpdateResolvedNotifTitles.php
new file mode 100644
index 0000000..57ed708
--- /dev/null
+++ b/maintenance/FlowUpdateResolvedNotifTitles.php
@@ -0,0 +1,94 @@
+<?php
+/**
+ * Update the titles of flow-topic-resolved events to point to boards instead 
of topics
+ *
+ * @ingroup Maintenance
+ */
+
+use Flow\Container;
+use Flow\WorkflowLoaderFactory;
+
+require_once ( getenv( 'MW_INSTALL_PATH' ) !== false
+       ? getenv( 'MW_INSTALL_PATH' ) . '/maintenance/Maintenance.php'
+       : __DIR__ . '/../../../maintenance/Maintenance.php' );
+
+/**
+ * Maintenance script that update flow-topic-resolved events to point 
event_page_id to the board instead of the topic.
+ *
+ * @ingroup Maintenance
+ */
+class FlowUpdateResolvedNotifTitles extends LoggedUpdateMaintenance {
+
+       public function __construct() {
+               parent::__construct();
+
+               $this->mDescription = "Update the titles of flow-topic-resolved 
Echo events to point to boards instead of topics";
+
+               $this->setBatchSize( 500 );
+       }
+
+       public function getUpdateKey() {
+               return __CLASS__;
+       }
+
+       public function doDBUpdates() {
+               $dbFactory = MWEchoDbFactory::newFromDefault();
+               $dbw = $dbFactory->getEchoDb( DB_MASTER );
+               $dbr = $dbFactory->getEchoDb( DB_SLAVE );
+               // We can't join echo_event with page, because those tables can 
be on different
+               // DB clusters. If we had been able to do that, we could have 
added
+               // wHERE page_namespace=NS_TOPIC, but instead we have to 
examine all rows
+               // and skip the non-NS_TOPIC ones.
+               $iterator = new BatchRowIterator(
+                       $dbr,
+                       'echo_event',
+                       'event_id',
+                       $this->mBatchSize
+               );
+               $iterator->addConditions( array(
+                       'event_type' => 'flow-topic-resolved',
+                       'event_page_id IS NOT NULL',
+               ) );
+               $iterator->setFetchColumns( array( 'event_page_id' ) );
+
+               $storage = Container::get( 'storage.workflow' );
+
+               $this->output( "Retitling flow-topic-resolved events...\n" );
+
+               $processed = 0;
+               foreach ( $iterator as $batch ) {
+                       foreach ( $batch as $row ) {
+                               $topicTitle = Title::newFromId( 
$row->event_page_id );
+                               if ( $topicTitle->getNamespace() !== NS_TOPIC ) 
{
+                                       continue;
+                               }
+                               $boardTitle = null;
+                               try {
+                                       $uuid = 
WorkflowLoaderFactory::uuidFromTitle( $topicTitle );
+                                       $workflow = $storage->get( $uuid );
+                                       if ( $workflow ) {
+                                               $boardTitle = 
$workflow->getOwnerTitle();
+                                       }
+                               } catch ( Exception $e ) {}
+                               if ( $boardTitle ) {
+                                       $dbw->update(
+                                               'echo_event',
+                                               array( 'event_page_id' => 
$boardTitle->getArticleId() ),
+                                               array( 'event_id' => 
$row->event_id )
+                                       );
+                                       $processed += $dbw->affectedRows();
+                               } else {
+                                       $this->output( "Could not find board 
for topic: " . $topicTitle->getPrefixedText() . "\n" );
+                               }
+                       }
+
+                       $this->output( "Updated $processed events.\n" );
+                       $dbFactory->waitForSlaves();
+               }
+
+               return true;
+       }
+}
+
+$maintClass = 'FlowUpdateResolvedNotifTitles';
+require_once ( RUN_MAINTENANCE_IF_MAIN );

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I5bef3ce6017a6f02668d7d83ec0f01762af2a16c
Gerrit-PatchSet: 3
Gerrit-Project: mediawiki/extensions/Flow
Gerrit-Branch: master
Gerrit-Owner: Catrope <roan.katt...@gmail.com>
Gerrit-Reviewer: Catrope <roan.katt...@gmail.com>
Gerrit-Reviewer: Matthias Mullie <mmul...@wikimedia.org>
Gerrit-Reviewer: Sbisson <sbis...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot <>

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

Reply via email to