<?php echo pht( "Migrating data from conpherence transactions to conpherence 'cache'...\n"); $table = new ConpherenceThread(); $table->openTransaction(); $conn_w = $table->establishConnection('w'); $participant_table = new ConpherenceParticipant(); $conpherences = new LiskMigrationIterator($table); foreach ($conpherences as $conpherence) { echo pht('Migrating conpherence #%d', $conpherence->getID())."\n"; $participants = id(new ConpherenceParticipant()) ->loadAllWhere('conpherencePHID = %s', $conpherence->getPHID()); $transactions = id(new ConpherenceTransaction()) ->loadAllWhere('objectPHID = %s', $conpherence->getPHID()); $participation_hash = mgroup($participants, 'getBehindTransactionPHID'); $message_count = 0; $participants_to_cache = array(); foreach ($transactions as $transaction) { $participants_to_cache[] = $transaction->getAuthorPHID(); if ($transaction->getTransactionType() == PhabricatorTransactions::TYPE_COMMENT) { $message_count++; } $participants_to_update = idx( $participation_hash, $transaction->getPHID(), array()); if ($participants_to_update) { queryfx( $conn_w, 'UPDATE %T SET seenMessageCount = %d '. 'WHERE conpherencePHID = %s AND participantPHID IN (%Ls)', $participant_table->getTableName(), $message_count, $conpherence->getPHID(), mpull($participants_to_update, 'getParticipantPHID')); } } $participants_to_cache = array_slice( array_unique(array_reverse($participants_to_cache)), 0, 10); queryfx( $conn_w, 'UPDATE %T '. 'SET recentParticipantPHIDs = %s, '. 'messageCount = %d '. 'WHERE phid = %s', $table->getTableName(), json_encode($participants_to_cache), $message_count, $conpherence->getPHID()); } $table->saveTransaction(); echo "\n".pht('Done.')."\n";