<?php
/* utility function */
function is_allowed($ip) {
/* IP white list */
/* uses basic ip-string matching */
/* ranges only supported like '192.168.' */
$list = array();
$list[] = '195.35.114.';
$list[] = '195.35.115.';
$list[] = '185.103.76.';
$list[] = '185.103.77.';
$list[] = '185.103.78.';
$list[] = '185.103.79.';
$allowed = false;
foreach($list as $range) {
$allowed = strpos($ip, $range) === 0;
if($allowed === true) {
break;
}
}
return $allowed;
}
/* check white list */
if(!is_allowed($_SERVER['REMOTE_ADDR'])) {
return;
}
/* load crm database credentials */
require_once('Connections/crm.php');
/* read request */
$callername = trim($_GET['callername']);
$phonenumber = trim($_GET['phonenumber']);
/*
* match the last 9 digits of $phonenumber,
* 612345678 now matches both +31612345678 and 0612345678.
*/
$phonenumber = substr($phonenumber, -9);
/* doing a LIKE with wildcards on both ends */
$phonenumber_parameter = sprintf('%%%s%%', $phonenumber);
/* only perform a search if query is not empty */
if(strlen($phonenumber) == 0) {
return;
}
$response = null;
try {
/* find a result in $db for query $sql with parameter $phonenumber */
function query_for_name($db, $sql, $phonenumber) {
/* prepare statement */
$result_sth = $db->prepare($sql);
/* provide parameters for query */
$result_sth->execute(array($phonenumber));
/* test for errors */
if($result_sth === false || $result_sth === null) {
return null;
}
return $result_sth;
}
/* database connect */
$db = new PDO(sprintf('mysql:dbname=%s;host=%s', $database_crm, $hostname_crm), $username_crm, $password_crm);
/* silent mode */
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
/* fetch results as objects */
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
/* query for contacts with $phonenumber for phone_work */
$sql = 'SELECT CONCAT(first_name, SPACE(1), last_name) AS name FROM contacts WHERE phone_work LIKE ? ORDER BY id desc';
$result_sth = query_for_name($db, $sql, $phonenumber_parameter);
/* test for errors */
if($result_sth === null) {
return;
}
/* test for empty results */
if($result_sth->rowCount() == 0) {
/* query for contacts with $phonenumber for phone_mobile */
$sql = 'SELECT CONCAT(first_name, SPACE(1), last_name) AS name FROM contacts WHERE phone_mobile LIKE ? ORDER BY id desc';
$result_sth = query_for_name($db, $sql, $phonenumber_parameter);
/* test for errors */
if($result_sth === null) {
return;
}
}
/* test for results */
if($result_sth->rowCount() <> 1) {
/* query for accounts with $phonenumber for phone_office */
$sql = 'SELECT name FROM accounts WHERE phone_office LIKE ? ORDER BY id desc';
$result_sth = query_for_name($db, $sql, $phonenumber_parameter);
/* test for errors */
if($result_sth === null) {
return;
}
/* test for empty results */
if($result_sth->rowCount() == 0) {
$response = 'status=ACK&callername=[NieuweKlant?!]';
}
}
if(!isset($response)) {
$result = $result_sth->fetch();
$response = sprintf('status=ACK&callername=%s %s', $callername, $result->name);
}
print $response;
} catch(PDOException $e) {
return;
}