<?php

$criteria = new Criteria;
$criteria->add(QubitInformationObject::PARENT_ID, null, Criteria::ISNULL);
$criteria->add(QubitInformationObject::ID, QubitInformationObject::ROOT_ID, Criteria::NOT_EQUAL);

$result = QubitInformationObject::get($criteria);

print sprintf("Found %d information objects with null IDs\n", count($result));

print "Checking identifiers...\n";

foreach($result as $io)
{
  $status = 'OK';
  $dupes = array();

  if (empty($io->identifier))
  {
    $status = 'No identifier';
  }
  else
  {
    $nonNullParents = 0;
    $nullParents = 0;

    $criteria = new Criteria;
    $criteria->add(QubitInformationObject::IDENTIFIER, $io->identifier);
    $criteria->add(QubitInformationObject::ID, $io->id, Criteria::NOT_EQUAL);

    $result2 = QubitInformationObject::get($criteria);

    // Amalgamate duplicate properties and summarize status
    if (count($result2))
    {
      foreach($result2 as $io2)
      {
        array_push($dupes, $io2);
      }

      $status = sprintf('Duplicate identifier "%s"', $io->identifier);
    }
  }

  print sprintf("%s: %s (%d)\n", $status, $io->slug, $io->id);
  foreach($dupes as $dupe)
  {
    print sprintf(" * %s (%d: parent ID %d)\n", $dupe->slug, $dupe->id, $dupe->parentId);
  }

  if (count($dupes))
  {
    print "\n";
  }
}