$dal = new DAL($opts['hn'], $opts['db'], $opts['un'], $opts['pw']);
try {
    $dal->beginTransaction();
    $user = $dal->selectUser();
    if ($user === null) {
        throw new UserException('Login required.');
    }
    $unique_id = $dal->selectUniqueId($_GET['uniqueid_id']);
    if ($unique_id === null) {
        throw new UserException('Range not found.');
    }
    if ($user['person_id'] !== $unique_id['person_id'] && $user['person_is_moderator'] !== 'y') {
        throw new UserException('Moderator login required.');
    }
    if (isset($_POST['transfer'])) {
        $person = $dal->selectPersonByEmail($_POST['email']);
        if ($person === null) {
            throw new UserException('Profile not found.');
        }
        $unique_id['person_id'] = $person['person_id'];
        $dal->updateUniqueId($unique_id);
        $subject = "OpenLCB Unique ID Range Transferred";
        $body = "Hi " . formatPersonName($unique_id) . ",\r\n\r\nThe following OpenLCB Unique ID Range has been Transferred.\r\n\r\n" . formatUniqueIdHex($unique_id) . "\r\n\r\nFrom delegating organization or person: " . formatPersonName($unique_id) . "\r\nTo delegating organization or person: " . formatPersonName($person) . "\r\nURL: " . $unique_id['uniqueid_url'] . "\r\nComment: " . $unique_id['uniqueid_user_comment'] . "\r\n\r\nThe OpenLCB Group";
        if (!mail_abstraction(array(formatPersonEmail($unique_id)), $subject, $body)) {
            throw new UserError('Failed to send email.');
        }
        $subject = "OpenLCB Unique ID Range Transferred";
        $body = "Hi " . formatPersonName($person) . ",\r\n\r\nThe following OpenLCB Unique ID Range has been Transferred.\r\n\r\n" . formatUniqueIdHex($unique_id) . "\r\n\r\nFrom delegating organization or person: " . formatPersonName($unique_id) . "\r\nTo delegating organization or person: " . formatPersonName($person) . "\r\nURL: " . $unique_id['uniqueid_url'] . "\r\nComment: " . $unique_id['uniqueid_user_comment'] . "\r\n\r\nThe OpenLCB Group";
        if (!mail_abstraction(array(formatPersonEmail($person)), $subject, $body)) {
            throw new UserError('Failed to send email.');
        }
 if ($user === null) {
     if (!isset($_POST['g-recaptcha-response']) || !$_POST['g-recaptcha-response']) {
         throw new UserException('Robots not allowed.');
     }
     $recaptcha = new \ReCaptcha\ReCaptcha(RECAPTCHA_SECRET);
     $resp = $recaptcha->verify($_POST['g-recaptcha-response'], $_SERVER['REMOTE_ADDR']);
     if (!$resp->isSuccess()) {
         throw new UserException('reCAPTCHA error');
     }
     if (!$_POST['email']) {
         throw new UserException('Email address not entered.');
     }
     if ($_POST['email'] !== $_POST['repeat_email']) {
         throw new UserException('The entered email addresses do not match.');
     }
     if ($dal->selectPersonByEmail($_POST['email']) !== null) {
         throw new UserException('The entered email address is already in use. Please login before requesting an unique id range.');
     }
     $person = array('person_first_name' => $_POST['first_name'], 'person_last_name' => $_POST['last_name'], 'person_organization' => $_POST['organization'], 'person_email' => $_POST['email'], 'person_subscribe' => isset($_POST['subscribe']) ? 'y' : 'n', 'person_email_verified' => 'n', 'person_email_shared_secret' => null, 'person_password_hash' => null);
     $dal->insertPerson($person);
 } else {
     if ($user['person_unapproved_uniqueid_count'] > 0) {
         throw new UserException('A previous unique id range request is still pending approval.');
     }
     $person = $user;
 }
 $unique_id = array('person_id' => $person['person_id'], 'uniqueid_url' => $_POST['url'], 'uniqueid_user_comment' => $_POST['comment']);
 $dal->insertUniqueId($unique_id);
 $subject = "OpenLCB Unique ID Range Requested";
 $body = "Hi " . formatPersonName($person) . ",\r\n\r\nYou were assigned an OpenLCB unique ID range of:\r\n" . formatUniqueIdHex($unique_id) . "\r\n\r\nDelegating organization or person: " . formatPersonName($person) . "\r\nURL: " . $unique_id['uniqueid_url'] . "\r\nComment: " . $unique_id['uniqueid_user_comment'] . "\r\n\r\nThe OpenLCB Group";
 if (!mail_abstraction(array(formatPersonEmail($person)), $subject, $body)) {