<?php
//file_put_contents("/var/www/pbx/log/xapi2.log", print_r($_SERVER, true));
require_once('/usr/share/php/api_conf.php');
$path = ltrim(preg_replace('~^/dprov/~', '', $_SERVER['SCRIPT_NAME']), '/');

if (preg_match('/^dev([0-9A-Fa-f]{12}).cfg/', $path, $mm)) {
	$mac = $mm[1];
	//$type = 'gs';
        if ($xml = gs_provision($mac)) {
                header("Content-type: text/xml");
                echo $xml;
                exit;
        }
}
else if (preg_match('/^cfg([0-9A-Fa-f]{12})/', $path, $mm)) {
	$mac = $mm[1];
	//$type = 'gs';
	if ($xml = gs_provision($mac)) {
		header("Content-type: text/xml");
		echo $xml;
		exit;
	} 
} else if(preg_match('/^avayab199-([0-9A-Fa-f]{12}).xml/', $path, $mm)) {
	//print_r($mm);
	$mac = $mm[1];
	$type = 'avaya';
        if ($xml = avaya_provision($mac)) {
                header("Content-type: text/xml");
                echo $xml;
                exit;
        }
} else {
	exit;
}

function gs_provision($mac) {
	global $dbhr;
	$nmac = strtolower($mac);
	$qstr = "SELECT cust_ext_id, device_id, model_id, brand, ";
	$qstr .= "model, firmware FROM ext_device AS e ";
	$qstr .= "LEFT JOIN device AS d ON e.device_id=d.id "; 
	$qstr .= "LEFT JOIN dev_model AS m ON m.id=d.model_id ";
	$qstr .= "WHERE mac='$nmac'";
	$stmt = $dbhr->prepare($qstr);
	$stmt->execute();
	if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
		extract($row);
	} else return false;

	$qstr = "SELECT extension, ep_pass, vm_pin, cid_num, cid_name, features, ";
	$qstr .= "cust_id FROM cust_ext AS c LEFT JOIN svc_package AS s ";
	$qstr .= "ON c.pkg_id=s.id WHERE c.id=$cust_ext_id";
	$stmt = $dbhr->prepare($qstr);
	$stmt->execute();
	if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
		extract($row);
	} else return false;
	
	$qstr = "SELECT p.sip_address as p_sip_addr  FROM cust_pbx AS c LEFT JOIN pbx_server AS p ";
        $qstr .= "ON p.id=c.pri_pbx_id WHERE c.cust_id=$cust_id";
        $stmt = $dbhr->prepare($qstr);
        $stmt->execute();
        if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
                extract($row);
	} else return false;
	$qstr = "SELECT p.sip_address as s_sip_addr  FROM cust_pbx AS c LEFT JOIN pbx_server AS p ";
        $qstr .= "ON p.id=c.sec_pbx_id WHERE c.cust_id=$cust_id";
        $stmt = $dbhr->prepare($qstr);
        $stmt->execute();
        if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
                extract($row);
	} else {
		$s_sip_addr = 'etw-pbx-sip2.websprix.com';
	}
	$ext = $cust_id."S$extension";
	$xml = <<<EOF
<?xml version="1.0" encoding="UTF-8" ?>
<!-- BroadSoft XML Provisioning Configuration -->
<gs_provision version="1">
<mac>$mac</mac>
  <config version="1">

EOF;
	$xml .= "\t<P271>1</P271>\n";
	$xml .= "\t<P270>$extension</P270>\n";
	$xml .= "\t<P47>$p_sip_addr</P47>\n";
	$xml .= "\t<P2312>$s_sip_addr</P2312>\n";
	$xml .= "\t<P35>$ext</P35>\n";
	$xml .= "\t<P36>$ext</P36>\n";
	$xml .= "\t<P34>$ep_pass</P34>\n";
	$xml .= "\t<P3>$cid_name</P3>\n";
	$xml .= "  </config>\n";	
	$xml .= "</gs_provision>";
	return $xml;

}
function cisco_provision($mac){
	global $dbhr;
        $nmac = strtolower($mac);
        $qstr = "SELECT cust_ext_id, device_id, model_id, brand, ";
        $qstr .= "model, firmware FROM ext_device AS e ";
        $qstr .= "LEFT JOIN device AS d ON e.device_id=d.id ";
        $qstr .= "LEFT JOIN dev_model AS m ON m.id=d.model_id ";
        $qstr .= "WHERE mac='$nmac'";
        $stmt = $dbhr->prepare($qstr);
	$stmt->execute();
        if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
                extract($row);
        } else return false;
        $qstr = "SELECT extension, ep_pass, vm_pin, cid_num, cid_name, features, ";
        $qstr .= "cust_id FROM cust_ext AS c LEFT JOIN svc_package AS s ";
        $qstr .= "ON c.pkg_id=s.id WHERE c.id=$cust_ext_id";
        $stmt = $dbhr->prepare($qstr);
        $stmt->execute();
        if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
                extract($row);
	} else return false;
	$ext = $cust_id."S$extension";      
	$xml = <<<EOF
<?xml version="1.0" encoding="UTF-8" ?>
<device>
  <sshUserId>admin</sshUserId>
    <sshPassword>^nDr0id1x</sshPassword>
    <devicePool>
        <dateTimeSetting>
            <dateTemplate>D/M/YA</dateTemplate>
            <timeZone>Central Standard/Daylight Time</timeZone>
	<ntps>
	<ntp>
	<name>us.ntp.org</name>
	<ntpMode>Unicast</ntpMode>
	</ntp>
	</ntps>
	</dateTimeSetting>
    </devicePool>
  <sipProfile>
    <sipProxies>
	    <registerWithProxy>true</registerWithProxy>
	    <outboundProxy>etw-pbx-sip1.websprix.com</outboundProxy>
	    <outboundProxyPort>5060</outboundProxyPort>
            <backupProxy>etw-pbx-sip2.websprix.com</backupProxy>
            <backupProxyPort>5060</backupProxyPort>
            <emergencyProxy></emergencyProxy>
            <emergencyProxyPort></emergencyProxyPort>
    </sipProxies>
    <sipLines>
	    <line button="1">
EOF;
	$xml .= "\t<featureID>9</featureID>\n";
	$xml .= "\t<featureLabel>DISPLAYED ON SCREEN</featureLabel>\n";
	$xml .= "\t<proxy>etw-pbx-sip1.websprix.com</proxy>\n";
	$xml .= "\t<port>5060</port>\n";
	$xml .= "\t<name>$cid_name</name>\n";
	$xml .= "\t<displayName>$cid_name</displayName>\n";
	$xml .= "\t<callWaiting>3</callWaiting>\n";
	$xml .= "\t<authName>$ext</authName>\n";
	$xml .= "\t<authPassword>$ep_pass</authPassword>\n";
	$xml .= "\t<messageWaitingLampPolicy>1</messageWaitingLampPolicy>\n";
        $xml .= "\t<contact>$ext</contact>\n";
	$xml .= " </line>\n";
	$xml .= " </sipLines>\n";
	$xml .= "  </sipProfile>\n";
	$xml .= "\t<deviceProtocol>SIP</deviceProtocol>\n";
        $xml .= "\t<loadInformation model='IP Phone 7975'>SIP75.9-2-1S</loadInformation>\n";
	$xml .= " </device>\n";	
	return $xml;
}
function avaya_provision($mac){
	global $dbhr;
        $nmac = strtolower($mac);
        $qstr = "SELECT cust_ext_id, device_id, model_id, brand, ";
        $qstr .= "model, firmware FROM ext_device AS e ";
        $qstr .= "LEFT JOIN device AS d ON e.device_id=d.id ";
        $qstr .= "LEFT JOIN dev_model AS m ON m.id=d.model_id ";
	$qstr .= "WHERE mac='$nmac'";
file_put_contents('/var/www/pbx/log/xapi.log', "qstr : $qstr", FILE_APPEND);
        $stmt = $dbhr->prepare($qstr);
        $stmt->execute();
        if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
                extract($row);
        } else return false;

        $qstr = "SELECT extension, ep_pass, vm_pin, cid_num, cid_name, features, ";
        $qstr .= "cust_id FROM cust_ext AS c LEFT JOIN svc_package AS s ";
        $qstr .= "ON c.pkg_id=s.id WHERE c.id=$cust_ext_id";
        $stmt = $dbhr->prepare($qstr);
        $stmt->execute();
        if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
                extract($row);
	} else return false;
	 $ext = $cust_id."S$extension";
        $xml = <<<EOF
<?xml version="1.0" encoding="UTF-8" ?>
<B199 version="6">
    <time>
        <timezone type="string">UTC</timezone>
        <time_format type="string"></time_format>
        <ntp>
            <server type="string"></server>
            <enable type="bool">true</enable>
        </ntp>
        <date_format type="string"></date_format>
        <custom_dst>
            <offset_hours type="int">1</offset_hours>
            <enable type="bool">false</enable>
            <dst_stop>
                <month type="int">1</month>
                <hour type="int">0</hour>
                <day_mode type="int">0</day_mode>
                <day type="int">1</day>
            </dst_stop>
            <dst_start>
                <month type="int">1</month>
                <hour type="int">0</hour>
                <day_mode type="int">0</day_mode>
                <day type="int">1</day>
            </dst_start>
        </custom_dst>
    </time>
    <sip>
        <transport_protocol type="string">udp</transport_protocol>
        <tls>
            <verify_server type="bool">false</verify_server>
            <verify_client type="bool">false</verify_client>
        </tls>
	<primary_account>
EOF;

	$xml .= "\t<name type='string'>$cid_name</name>\n";
	$xml .= "\t<user type='string'>$ext</user>\n";
	$xml .= "\t<registrar type='string'>etw-pbx-sip1.websprix.com</registrar>\n";
	$xml .= "\t<proxy type='string'></proxy>\n";
	$xml .= "\t<keep_alive type='bool'>true</keep_alive>\n";
	$xml .= "\t<cred>\n";
	$xml .= "\t<realm type='string'>Digest</realm>\n";
	$xml .= "\t<username type='string'>$ext</username>\n";
	$xml .= "\t<password type='string'>$ep_pass</password>\n";
	$xml .= "\t</cred>\n";
	$xml .= "\t<reg_timeout type='int'>300</reg_timeout>\n";
	$xml .= "\t</primary_account>\n";
	$xml .= "\t</sip>\n";
	$xml .= "\t</B199>\n";
	return $xml;
}
?>
