<?php $project_table = new PhabricatorProject(); $conn_w = $project_table->establishConnection('w'); $conn_w->openTransaction(); $src_table = 'project_legacytransaction'; $dst_table = 'project_transaction'; echo "Migrating Project transactions to new format...\n"; $content_source = PhabricatorContentSource::newForSource( PhabricatorContentSource::SOURCE_LEGACY, array())->serialize(); $rows = new LiskRawMigrationIterator($conn_w, $src_table); foreach ($rows as $row) { $id = $row['id']; $project_id = $row['projectID']; echo "Migrating transaction #{$id} (Project {$project_id})...\n"; $project_row = queryfx_one( $conn_w, 'SELECT phid FROM %T WHERE id = %d', $project_table->getTableName(), $project_id); if (!$project_row) { continue; } $project_phid = $project_row['phid']; $type_map = array( 'name' => PhabricatorProjectTransaction::TYPE_NAME, 'members' => PhabricatorProjectTransaction::TYPE_MEMBERS, 'status' => PhabricatorProjectTransaction::TYPE_STATUS, 'canview' => PhabricatorTransactions::TYPE_VIEW_POLICY, 'canedit' => PhabricatorTransactions::TYPE_EDIT_POLICY, 'canjoin' => PhabricatorTransactions::TYPE_JOIN_POLICY, ); $new_type = idx($type_map, $row['transactionType']); if (!$new_type) { continue; } $xaction_phid = PhabricatorPHID::generateNewPHID( PhabricatorApplicationTransactionTransactionPHIDType::TYPECONST, PhabricatorProjectProjectPHIDType::TYPECONST); queryfx( $conn_w, 'INSERT IGNORE INTO %T (phid, authorPHID, objectPHID, viewPolicy, editPolicy, commentPHID, commentVersion, transactionType, oldValue, newValue, contentSource, metadata, dateCreated, dateModified) VALUES (%s, %s, %s, %s, %s, %ns, %d, %s, %s, %s, %s, %s, %d, %d)', $dst_table, // PHID, Author, Object $xaction_phid, $row['authorPHID'], $project_phid, // View, Edit, Comment, Version, Type 'public', $row['authorPHID'], null, 0, $new_type, // Old, New, Source, Meta, $row['oldValue'], $row['newValue'], $content_source, '{}', // Created, Modified $row['dateCreated'], $row['dateModified']); } $conn_w->saveTransaction(); echo "Done.\n";