Add flexible search with improved wildcard support.

This commit is contained in:
FusionPBX
2021-08-30 19:10:31 -06:00
committed by GitHub
parent 5264c6e3f8
commit 4066d868e3

View File

@@ -318,16 +318,26 @@
}
if (strlen($caller_id_name) > 0) {
$mod_caller_id_name = str_replace("*", "%", $caller_id_name);
$sql .= "and caller_id_name like :caller_id_name \n";
$parameters['caller_id_name'] = '%'.$mod_caller_id_name.'%';
if (strstr($mod_caller_id_name, '%')) {
$sql .= "and caller_id_name like :caller_id_name \n";
$parameters['caller_id_name'] = $mod_caller_id_name;
}
else {
$sql .= "and caller_id_name = :caller_id_name \n";
$parameters['caller_id_name'] = $mod_caller_id_name;
}
}
if (strlen($caller_id_number) > 0) {
$mod_caller_id_number = preg_replace("#[^0-9./]#", "", $caller_id_number);
if (strlen($mod_caller_id_number) == 0) {
$mod_caller_id_number = trim($caller_id_number);
$mod_caller_id_number = str_replace("*", "%", $caller_id_number);
$mod_caller_id_number = preg_replace("#[^\+0-9.%/]#", "", $mod_caller_id_number);
if (strstr($mod_caller_id_number, '%')) {
$sql .= "and caller_id_number like :caller_id_number \n";
$parameters['caller_id_number'] = $mod_caller_id_number;
}
else {
$sql .= "and caller_id_number = :caller_id_number \n";
$parameters['caller_id_number'] = $mod_caller_id_number;
}
$sql .= "and caller_id_number like :caller_id_number \n";
$parameters['caller_id_number'] = '%'.$mod_caller_id_number.'%';
}
if (strlen($extension_uuid) > 0 && is_uuid($extension_uuid)) {
@@ -335,20 +345,28 @@
$parameters['extension_uuid'] = $extension_uuid;
}
if (strlen($caller_destination) > 0) {
$mod_caller_destination = preg_replace("#[^0-9./]#", "", $caller_destination);
if (strlen($mod_caller_destination) == 0) {
$mod_caller_destination = trim($caller_destination);
$mod_caller_destination = str_replace("*", "%", $caller_destination);
$mod_caller_destination = preg_replace("#[^\+0-9.%/]#", "", $mod_caller_destination);
if (strstr($mod_caller_destination, '%')) {
$sql .= "and caller_destination like :caller_destination \n";
$parameters['caller_destination'] = $mod_caller_destination;
}
else {
$sql .= "and caller_destination = :caller_destination \n";
$parameters['caller_destination'] = $mod_caller_destination;
}
$sql .= "and caller_destination like :caller_destination \n";
$parameters['caller_destination'] = '%'.$mod_caller_destination.'%';
}
if (strlen($destination_number) > 0) {
$mod_destination_number = preg_replace("#[^0-9./]#", "", $destination_number);
if (strlen($mod_destination_number) == 0) {
$mod_destination_number = trim($destination_number);
$mod_destination_number = str_replace("*", "%", $destination_number);
$mod_destination_number = preg_replace("#[^\+0-9.%/]#", "", $mod_destination_number);
if (strstr($mod_destination_number, '%')) {
$sql .= "and destination_number like :destination_number \n";
$parameters['destination_number'] = $mod_destination_number;
}
else {
$sql .= "and destination_number = :destination_number \n";
$parameters['destination_number'] = $mod_destination_number;
}
$sql .= "and destination_number like :destination_number \n";
$parameters['destination_number'] = '%'.$mod_destination_number.'%';
}
if (strlen($context) > 0) {
$sql .= "and context like :context \n";
@@ -361,8 +379,14 @@
if (isset($$field_name)) {
$$field_name = $_REQUEST[$field_name];
if (strlen($$field_name) > 0) {
$sql .= "and $field_name like :".$field_name." \n";
$parameters[$field_name] = '%'.$$field_name.'%';
if (strstr($$field_name, '%')) {
$sql .= "and $field_name like :".$field_name." \n";
$parameters[$field_name] = $$field_name;
}
else {
$sql .= "and $field_name = :".$field_name." \n";
$parameters[$field_name] = $$field_name;
}
}
}
}
@@ -385,7 +409,6 @@
}
if (strlen($answer_stamp_begin) > 0 && strlen($answer_stamp_end) > 0) {
$sql .= "and answer_stamp between :answer_stamp_begin::timestamptz and :answer_stamp_end::timestamptz ";
$parameters['answer_stamp_begin'] = $answer_stamp_begin.':00.000 '.$time_zone;
$parameters['answer_stamp_end'] = $answer_stamp_end.':59.999 '.$time_zone;
}
@@ -487,7 +510,7 @@
}
break;
default:
$sql .= "and (answer_stamp is null and bridge_uuid is null and duration = 0) ";
$sql .= "and (answer_stamp is null and bridge_uuid is null and duration = 0) ";
//$sql .= "and (answer_stamp is null and bridge_uuid is null and billsec = 0 and sip_hangup_disposition = 'send_refuse') ";
}
}
@@ -564,9 +587,6 @@
}
}
$sql = str_replace(" ", " ", $sql);
//echo $sql;
//print_r($parameters);
//exit;
$database = new database;
if ($archive_request && $_SESSION['cdr']['archive_database']['boolean'] == 'true') {
$database->driver = $_SESSION['cdr']['archive_database_driver']['text'];