<?php
// Set database
$DB = 'lag1';


function connect_db() {

	global $DB;

	putenv("PGSERVICEFILE=/var/www/secure/pg_service.conf");

	// DATABASE SERVICE
	$connect_str = ("service={$DB}");

	$DB_id = pg_connect($connect_str);
	return($DB_id);
}

function get_uuid() {

	$data = openssl_random_pseudo_bytes(16);
	$data[6] = chr(ord($data[6]) & 0x0f | 0x40);    // set version to 0100
	$data[8] = chr(ord($data[8]) & 0x3f | 0x80);    // set bits 6-7 to 10

	return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
}


function mk_person_id() {

	global $DB_id;

	// DB server
	$db_ip = '';
	$srv = '';

	$result = pg_query($DB_id, "select inet_server_addr() ip");
	$srv = pg_fetch_assoc($result);

	if (trim($srv['ip']) == '127.0.0.1') {
		$db_ip = trim($_SERVER['SERVER_ADDR']);
	} else {
		$db_ip = trim($srv['ip']);
	}

	switch ($db_ip) {

		case '216.5.81.12':
			$dbx = 'R';		// raven
			break;

		case '216.5.81.22':
			$dbx = 'B';		// blackhawk
			break;

		case '192.168.141.44':
			$dbx = 'D';		// roadrunner (onsite server)
			break;

		default:
			$dbx = 'Z';		// unknown database server
	}

	// random part
	$length = 4;
	$pool = "BCDFGHJKLMNPQRSTVWXYZ";    // leadnet pool
	$pool_i = (strlen($pool)-1);
	$bx = 0;

	while (true) {

		$bid = $dbx;
		$bx++;

		for ($index = 0; $index < $length; $index++) {
			$bid .= substr($pool, mt_rand(0, $pool_i), 1);
		}

		$bck1 = '';
		$qry1 = "select count(*) cnt from person where per_id = $1";
		$res1 = pg_query_params($DB_id, $qry1, array($bid));
		$bck1 = pg_fetch_assoc($res1);

		if ($bck1['cnt'] > 0) {		//DUP

			if ($bx > 3) {
				// add a 5th char
				$bid .= substr($pool, mt_rand(0, $pool_i), 1);

				$bck2 = '';
				$qry2 = "select count(*) cnt from person where per_id = $1";
				$res2 = pg_query_params($DB_id, $qry2, array($bid));
				$bck2 = pg_fetch_assoc($res2);

				if ($bck2['cnt'] > 0) {		//DUP Again
					$bid = 'ERROR';
				}
				break;

			} else {
				continue; //Try again, 3 strikes
			}

		} else {
			break;	// Good ID
		}
	}
	return $bid;
}

?>
