Summary: Modernize Project edges to subclass `PhabricatorEdgeType`. Largely based on D11045. Test Plan: Add a member to a project, saw new rows in the `phabricator_project.edge` and `phabricator_user.edge` tables. Reviewers: epriestley, #blessed_reviewers Reviewed By: epriestley, #blessed_reviewers Subscribers: Korvin, epriestley Differential Revision: https://secure.phabricator.com/D11111
		
			
				
	
	
		
			40 lines
		
	
	
		
			1000 B
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			1000 B
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
echo "Archiving projects with no members...\n";
 | 
						|
 | 
						|
$table = new PhabricatorProject();
 | 
						|
$table->openTransaction();
 | 
						|
 | 
						|
foreach (new LiskMigrationIterator($table) as $project) {
 | 
						|
 | 
						|
  $members = PhabricatorEdgeQuery::loadDestinationPHIDs(
 | 
						|
    $project->getPHID(),
 | 
						|
    PhabricatorProjectProjectHasMemberEdgeType::EDGECONST);
 | 
						|
 | 
						|
  if (count($members)) {
 | 
						|
    echo sprintf(
 | 
						|
      'Project "%s" has %d members; skipping.',
 | 
						|
      $project->getName(),
 | 
						|
      count($members)), "\n";
 | 
						|
    continue;
 | 
						|
  }
 | 
						|
 | 
						|
  if ($project->getStatus() == PhabricatorProjectStatus::STATUS_ARCHIVED) {
 | 
						|
    echo sprintf(
 | 
						|
      'Project "%s" already archived; skipping.',
 | 
						|
      $project->getName()), "\n";
 | 
						|
    continue;
 | 
						|
  }
 | 
						|
 | 
						|
  echo sprintf('Archiving project "%s"...', $project->getName()), "\n";
 | 
						|
  queryfx(
 | 
						|
    $table->establishConnection('w'),
 | 
						|
    'UPDATE %T SET status = %s WHERE id = %d',
 | 
						|
    $table->getTableName(),
 | 
						|
    PhabricatorProjectStatus::STATUS_ARCHIVED,
 | 
						|
    $project->getID());
 | 
						|
}
 | 
						|
 | 
						|
$table->saveTransaction();
 | 
						|
echo "\nDone.\n";
 |