<?php

echo "Archiving projects with no members...\n";

$table = new PhabricatorProject();
$table->openTransaction();

foreach (new LiskMigrationIterator($table) as $project) {

  $members = PhabricatorEdgeQuery::loadDestinationPHIDs(
    $project->getPHID(),
    PhabricatorEdgeConfig::TYPE_PROJ_MEMBER);

  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";