<?php

// See T12488. Some events survived "20161004.cal.01.noepoch.php" without
// having "utcInstanceEpoch" computed, which breaks ICS export. This appears
// to be the result of some bug which has been fixed in the meantime, so just
// redo this part of the migration.

$table = new PhabricatorCalendarEvent();
$conn = $table->establishConnection('w');
$table_name = $table->getTableName();

$viewer = PhabricatorUser::getOmnipotentUser();
$all_events = id(new PhabricatorCalendarEventQuery())
  ->setViewer($viewer)
  ->execute();
foreach ($all_events as $event) {
  $id = $event->getID();

  if (!$event->getInstanceOfEventPHID()) {
    // Not a child event, so no instance epoch.
    continue;
  }

  if ($event->getUTCInstanceEpoch()) {
    // Already has an instance epoch.
    continue;
  }

  try {
    $event->updateUTCEpochs();
  } catch (Exception $ex) {
    phlog($ex);
    continue;
  }

  queryfx(
    $conn,
    'UPDATE %T SET utcInstanceEpoch = %nd WHERE id = %d',
    $table_name,
    $event->getUTCInstanceEpoch(),
    $id);
}