mirror of
https://github.com/fusionpbx/fusionpbx.git
synced 2025-12-30 00:53:50 +00:00
Add custom file name for call recording download
This uses the new setting category call_recordings name record_name. The record_name is used as a template
Call recording download template.
Options: ${uuid}, ${caller_id_name}, ${caller_id_number}, ${caller_destination}, ${destination_number}, ${destination_number}, ${date}, ${call_direction}, ${year}, ${month_name}, ${month_number}, ${day}, ${time}
This commit is contained in:
@@ -36,6 +36,8 @@
|
||||
private $app_uuid;
|
||||
private $name;
|
||||
private $table;
|
||||
private $settings;
|
||||
private $database;
|
||||
private $description_field;
|
||||
private $location;
|
||||
public $recording_uuid;
|
||||
@@ -52,6 +54,12 @@
|
||||
$this->table = 'call_recordings';
|
||||
$this->description_field = 'call_recording_description';
|
||||
$this->location = 'call_recordings.php';
|
||||
|
||||
//allow global
|
||||
$this->database = database::new();
|
||||
|
||||
//initialize the settings object
|
||||
$this->settings = new settings(["domain_uuid" => $_SESSION['domain_uuid'], "user_uuid" => $_SESSION['user_uuid']]);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -84,20 +92,21 @@
|
||||
$sql .= "from view_call_recordings ";
|
||||
$sql .= "where call_recording_uuid = :call_recording_uuid ";
|
||||
$parameters['call_recording_uuid'] = $record['uuid'];
|
||||
$database = new database;
|
||||
$field = $database->select($sql, $parameters, 'row');
|
||||
$field = $this->database->select($sql, $parameters, 'row');
|
||||
if (is_array($field) && @sizeof($field) != 0) {
|
||||
//delete the file on the file system
|
||||
if (file_exists($field['call_recording_path'].'/'.$field['call_recording_name'])) {
|
||||
unlink($field['call_recording_path'].'/'.$field['call_recording_name']);
|
||||
}
|
||||
if (file_exists($field['call_recording_path'].'/'.$field['call_recording_name'])) {
|
||||
unlink($field['call_recording_path'].'/'.$field['call_recording_name']);
|
||||
}
|
||||
|
||||
//build call recording delete array
|
||||
$array['xml_cdr'][$x]['xml_cdr_uuid'] = $record['uuid'];
|
||||
$array['xml_cdr'][$x]['record_path'] = null;
|
||||
$array['xml_cdr'][$x]['record_name'] = null;
|
||||
$array['xml_cdr'][$x]['record_length'] = null;
|
||||
$array['xml_cdr'][$x]['xml_cdr_uuid'] = $record['uuid'];
|
||||
$array['xml_cdr'][$x]['record_path'] = null;
|
||||
$array['xml_cdr'][$x]['record_name'] = null;
|
||||
$array['xml_cdr'][$x]['record_length'] = null;
|
||||
|
||||
//increment the id
|
||||
$x++;
|
||||
$x++;
|
||||
}
|
||||
unset($sql, $parameters, $field);
|
||||
}
|
||||
@@ -111,11 +120,10 @@
|
||||
$p->add('xml_cdr_edit', 'temp');
|
||||
|
||||
//remove record_path, record_name and record_length
|
||||
$database = new database;
|
||||
$database->app_name = 'xml_cdr';
|
||||
$database->app_uuid = '4a085c51-7635-ff03-f67b-86e834422848';
|
||||
$database->save($array, false);
|
||||
$message = $database->message;
|
||||
$this->database->app_name = 'xml_cdr';
|
||||
$this->database->app_uuid = '4a085c51-7635-ff03-f67b-86e834422848';
|
||||
$this->database->save($array, false);
|
||||
$message = $this->database->message;
|
||||
unset($array);
|
||||
|
||||
//remove the temporary permissions
|
||||
@@ -148,14 +156,13 @@
|
||||
}
|
||||
|
||||
//add the settings object
|
||||
$settings = new settings(["domain_uuid" => $_SESSION['domain_uuid'], "user_uuid" => $_SESSION['user_uuid']]);
|
||||
$transcribe_enabled = $settings->get('transcribe', 'enabled', false);
|
||||
$transcribe_engine = $settings->get('transcribe', 'engine', '');
|
||||
$transcribe_enabled = $this->settings->get('transcribe', 'enabled', false);
|
||||
$transcribe_engine = $this->settings->get('transcribe', 'engine', '');
|
||||
|
||||
//transcribe multiple recordings
|
||||
if ($transcribe_enabled && !empty($transcribe_engine) && is_array($records) && @sizeof($records) != 0) {
|
||||
//add the transcribe object
|
||||
$transcribe = new transcribe($settings);
|
||||
$transcribe = new transcribe($this->settings);
|
||||
|
||||
//build the array
|
||||
$x = 0;
|
||||
@@ -169,24 +176,25 @@
|
||||
$sql .= "where call_recording_uuid = :call_recording_uuid ";
|
||||
$sql .= "and call_recording_transcription is null ";
|
||||
$parameters['call_recording_uuid'] = $record['uuid'];
|
||||
$database = new database;
|
||||
$field = $database->select($sql, $parameters, 'row');
|
||||
$field = $this->database->select($sql, $parameters, 'row');
|
||||
if (
|
||||
is_array($field) &&
|
||||
@sizeof($field) != 0 &&
|
||||
file_exists($field['call_recording_path'].'/'.$field['call_recording_name'])
|
||||
) {
|
||||
//audio to text - get the transcription from the audio file
|
||||
$transcribe->audio_path = $field['call_recording_path'];
|
||||
$transcribe->audio_filename = $field['call_recording_name'];
|
||||
$record_transcription = $transcribe->transcribe();
|
||||
$transcribe->audio_path = $field['call_recording_path'];
|
||||
$transcribe->audio_filename = $field['call_recording_name'];
|
||||
$record_transcription = $transcribe->transcribe();
|
||||
|
||||
//build call recording data array
|
||||
if (!empty($record_transcription)) {
|
||||
$array['xml_cdr'][$x]['xml_cdr_uuid'] = $record['uuid'];
|
||||
$array['xml_cdr'][$x]['record_transcription'] = $record_transcription;
|
||||
}
|
||||
if (!empty($record_transcription)) {
|
||||
$array['xml_cdr'][$x]['xml_cdr_uuid'] = $record['uuid'];
|
||||
$array['xml_cdr'][$x]['record_transcription'] = $record_transcription;
|
||||
}
|
||||
|
||||
//increment the id
|
||||
$x++;
|
||||
$x++;
|
||||
}
|
||||
unset($sql, $parameters, $field);
|
||||
|
||||
@@ -201,11 +209,10 @@
|
||||
$p->add('xml_cdr_edit', 'temp');
|
||||
|
||||
//remove record_path, record_name and record_length
|
||||
$database = new database;
|
||||
$database->app_name = 'xml_cdr';
|
||||
$database->app_uuid = '4a085c51-7635-ff03-f67b-86e834422848';
|
||||
$database->save($array, false);
|
||||
$message = $database->message;
|
||||
$this->database->app_name = 'xml_cdr';
|
||||
$this->database->app_uuid = '4a085c51-7635-ff03-f67b-86e834422848';
|
||||
$this->database->save($array, false);
|
||||
$message = $this->database->message;
|
||||
unset($array);
|
||||
|
||||
//remove the temporary permissions
|
||||
@@ -226,24 +233,70 @@
|
||||
public function download($records = null) {
|
||||
if (permission_exists('call_recording_play') || permission_exists('call_recording_download')) {
|
||||
|
||||
//get the settings
|
||||
$record_name = $this->settings->get('call_recordings', 'record_name', '');
|
||||
$storage_type = $this->settings->get('call_recordings', 'storage_type', '');
|
||||
$time_zone = $this->settings->get('domain', 'time_zone', '');
|
||||
|
||||
//set the time zone
|
||||
if (!empty($time_zone)) {
|
||||
$time_zone = $time_zone;
|
||||
}
|
||||
else {
|
||||
$time_zone = date_default_timezone_get();
|
||||
}
|
||||
|
||||
//single recording
|
||||
if (empty($records) || !is_array($records) || @sizeof($records) == 0) {
|
||||
|
||||
//get call recording from database
|
||||
if (is_uuid($this->recording_uuid)) {
|
||||
$sql = "select call_recording_name, call_recording_path ";
|
||||
if (!empty($_SESSION['call_recordings']['storage_type']['text']) && $_SESSION['call_recordings']['storage_type']['text'] == 'base64' && !empty($row['call_recording_base64'])) {
|
||||
$sql = ", call_recording_base64 ";
|
||||
$sql = "select ";
|
||||
$sql .= "domain_uuid, ";
|
||||
$sql .= "call_recording_uuid, ";
|
||||
$sql .= "caller_id_name, ";
|
||||
$sql .= "caller_id_number, ";
|
||||
$sql .= "caller_destination, ";
|
||||
$sql .= "destination_number, ";
|
||||
$sql .= "call_recording_name, ";
|
||||
$sql .= "call_recording_path, ";
|
||||
$sql .= "call_recording_transcription, ";
|
||||
$sql .= "call_recording_length, ";
|
||||
$sql .= "call_recording_date, ";
|
||||
$sql .= "call_direction, ";
|
||||
$sql .= "TO_CHAR(timezone(:time_zone, call_recording_date), 'YYYY') AS call_recording_year, ";
|
||||
$sql .= "TO_CHAR(timezone(:time_zone, call_recording_date), 'Month') AS call_recording_month_name, ";
|
||||
$sql .= "TO_CHAR(timezone(:time_zone, call_recording_date), 'MM') AS call_recording_month_number, ";
|
||||
$sql .= "TO_CHAR(timezone(:time_zone, call_recording_date), 'DD') AS call_recording_day, ";
|
||||
$sql .= "TO_CHAR(timezone(:time_zone, call_recording_date), 'HH24MISS') AS call_recording_time, ";
|
||||
$sql .= "TO_CHAR(timezone(:time_zone, call_recording_date), 'DD Mon YYYY') as call_recording_date_formatted, ";
|
||||
$sql .= "TO_CHAR(timezone(:time_zone, call_recording_date), 'HH12:MI:SS am') as call_recording_time_formatted ";
|
||||
if (!empty($storage_type) && $storage_type == 'base64' && !empty($row['call_recording_base64'])) {
|
||||
$sql .= ", call_recording_base64 ";
|
||||
}
|
||||
$sql .= "from view_call_recordings ";
|
||||
$sql .= "where call_recording_uuid = :call_recording_uuid ";
|
||||
$parameters['call_recording_uuid'] = $this->recording_uuid;
|
||||
$database = new database;
|
||||
$row = $database->select($sql, $parameters, 'row');
|
||||
$parameters['time_zone'] = $time_zone;
|
||||
$row = $this->database->select($sql, $parameters, 'row');
|
||||
if (is_array($row) && @sizeof($row) != 0) {
|
||||
$call_recording_uuid = $row['call_recording_uuid'];
|
||||
$caller_id_name = $row['caller_id_name'];
|
||||
$caller_id_number = $row['caller_id_number'];
|
||||
$caller_destination = $row['caller_destination'];
|
||||
$destination_number = $row['destination_number'];
|
||||
$call_recording_name = $row['call_recording_name'];
|
||||
$call_recording_path = $row['call_recording_path'];
|
||||
if (!empty($_SESSION['call_recordings']['storage_type']['text']) && $_SESSION['call_recordings']['storage_type']['text'] == 'base64' && !empty($row['call_recording_base64'])) {
|
||||
$call_recording_date = $row['call_recording_date'];
|
||||
$call_direction = $row['call_direction'];
|
||||
$call_recording_year = $row['call_recording_year'];
|
||||
$call_recording_month_name = $row['call_recording_month_name'];
|
||||
$call_recording_month_number = $row['call_recording_month_number'];
|
||||
$call_recording_day = $row['call_recording_day'];
|
||||
$call_recording_time = $row['call_recording_time'];
|
||||
$call_recording_date_formatted = $row['call_recording_date_formatted'];
|
||||
$call_recording_time_formatted = $row['call_recording_time_formatted'];
|
||||
if (!empty($storage_type) && $storage_type == 'base64' && !empty($row['call_recording_base64'])) {
|
||||
file_put_contents($call_recording_path.'/'.$call_recording_name, base64_decode($row['call_recording_base64']));
|
||||
}
|
||||
}
|
||||
@@ -253,6 +306,23 @@
|
||||
//build full path
|
||||
$full_recording_path = $call_recording_path.'/'.$call_recording_name;
|
||||
|
||||
//created custom name
|
||||
$call_recording_name_download = $call_recording_name;
|
||||
if (!empty($record_name)) {
|
||||
$call_recording_name_download = str_replace('${uuid}', $call_recording_uuid, $record_name);
|
||||
$call_recording_name_download = str_replace('${caller_id_name}', $caller_id_name, $call_recording_name_download);
|
||||
$call_recording_name_download = str_replace('${caller_id_number}', $caller_id_number, $call_recording_name_download);
|
||||
$call_recording_name_download = str_replace('${caller_destination}', $caller_destination, $call_recording_name_download);
|
||||
$call_recording_name_download = str_replace('${destination_number}', $destination_number, $call_recording_name_download);
|
||||
$call_recording_name_download = str_replace('${date}', $call_recording_date, $call_recording_name_download);
|
||||
$call_recording_name_download = str_replace('${call_direction}', $call_direction, $call_recording_name_download);
|
||||
$call_recording_name_download = str_replace('${year}', $call_recording_year, $call_recording_name_download);
|
||||
$call_recording_name_download = str_replace('${month_name}', $call_recording_month_name, $call_recording_name_download);
|
||||
$call_recording_name_download = str_replace('${month_number}', $call_recording_month_number, $call_recording_name_download);
|
||||
$call_recording_name_download = str_replace('${day}', $call_recording_day, $call_recording_name_download);
|
||||
$call_recording_name_download = str_replace('${time}', $call_recording_time, $call_recording_name_download);
|
||||
}
|
||||
|
||||
//download the file
|
||||
if ($full_recording_path != '/' && file_exists($full_recording_path)) {
|
||||
ob_clean();
|
||||
@@ -271,8 +341,8 @@
|
||||
case "ogg" : header("Content-Type: audio/ogg"); break;
|
||||
}
|
||||
}
|
||||
$call_recording_name = preg_replace('#[^a-zA-Z0-9_\-\.]#', '', $call_recording_name);
|
||||
header('Content-Disposition: attachment; filename="'.$call_recording_name.'"');
|
||||
$call_recording_name_download = preg_replace('#[^a-zA-Z0-9_\-\.]#', '', $call_recording_name_download);
|
||||
header('Content-Disposition: attachment; filename="'.$call_recording_name_download.'"');
|
||||
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
|
||||
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
|
||||
if ($this->binary) {
|
||||
@@ -289,14 +359,11 @@
|
||||
}
|
||||
|
||||
//if base64, remove temp recording file
|
||||
if (!empty($_SESSION['call_recordings']['storage_type']['text']) && $_SESSION['call_recordings']['storage_type']['text'] == 'base64' && !empty($row['call_recording_base64'])) {
|
||||
if (!empty($storage_type) && $storage_type == 'base64' && !empty($row['call_recording_base64'])) {
|
||||
@unlink($full_recording_path);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//multiple recordings
|
||||
else {
|
||||
} else { //multiple recordings
|
||||
|
||||
//add multi-lingual support
|
||||
$language = new text;
|
||||
@@ -320,24 +387,85 @@
|
||||
|
||||
//get data for recordings
|
||||
if (!empty($uuids) && is_array($uuids) && @sizeof($uuids) != 0) {
|
||||
$sql = "select call_recording_name, call_recording_path ";
|
||||
if (!empty($_SESSION['call_recordings']['storage_type']['text']) && $_SESSION['call_recordings']['storage_type']['text'] == 'base64' && $row['call_recording_base64'] != '') {
|
||||
$sql = ", call_recording_base64 ";
|
||||
$sql = "select ";
|
||||
$sql .= "domain_uuid, ";
|
||||
$sql .= "call_recording_uuid, ";
|
||||
$sql .= "caller_id_name, ";
|
||||
$sql .= "caller_id_number, ";
|
||||
$sql .= "caller_destination, ";
|
||||
$sql .= "destination_number, ";
|
||||
$sql .= "call_recording_name, ";
|
||||
$sql .= "call_recording_path, ";
|
||||
$sql .= "call_recording_transcription, ";
|
||||
$sql .= "call_recording_length, ";
|
||||
$sql .= "call_recording_date, ";
|
||||
$sql .= "call_direction, ";
|
||||
$sql .= "TO_CHAR(timezone(:time_zone, call_recording_date), 'YYYY') AS call_recording_year, ";
|
||||
$sql .= "TO_CHAR(timezone(:time_zone, call_recording_date), 'Month') AS call_recording_month_name, ";
|
||||
$sql .= "TO_CHAR(timezone(:time_zone, call_recording_date), 'MM') AS call_recording_month_number, ";
|
||||
$sql .= "TO_CHAR(timezone(:time_zone, call_recording_date), 'DD') AS call_recording_day, ";
|
||||
$sql .= "TO_CHAR(timezone(:time_zone, call_recording_date), 'HH24MISS') AS call_recording_time, ";
|
||||
$sql .= "TO_CHAR(timezone(:time_zone, call_recording_date), 'DD Mon YYYY') as call_recording_date_formatted, ";
|
||||
$sql .= "TO_CHAR(timezone(:time_zone, call_recording_date), 'HH12:MI:SS am') as call_recording_time_formatted ";
|
||||
if (!empty($storage_type) && $storage_type == 'base64' && $row['call_recording_base64'] != '') {
|
||||
$sql .= ", call_recording_base64 ";
|
||||
}
|
||||
$sql .= "from view_call_recordings ";
|
||||
$sql .= "where call_recording_uuid in ('".implode("','", $uuids)."') ";
|
||||
$database = new database;
|
||||
$rows = $database->select($sql, null, 'all');
|
||||
$parameters['time_zone'] = $time_zone;
|
||||
$rows = $this->database->select($sql, $parameters, 'all');
|
||||
if (!empty($rows) && is_array($rows) && @sizeof($rows) != 0) {
|
||||
foreach ($rows as $row) {
|
||||
$call_recording_uuid = $row['call_recording_uuid'];
|
||||
$caller_id_name = $row['caller_id_name'];
|
||||
$caller_id_number = $row['caller_id_number'];
|
||||
$caller_destination = $row['caller_destination'];
|
||||
$destination_number = $row['destination_number'];
|
||||
$call_recording_name = $row['call_recording_name'];
|
||||
$call_recording_path = $row['call_recording_path'];
|
||||
if (!empty($_SESSION['call_recordings']['storage_type']['text']) && $_SESSION['call_recordings']['storage_type']['text'] == 'base64' && !empty($row['call_recording_base64'])) {
|
||||
$call_recording_date = $row['call_recording_date'];
|
||||
$call_direction = $row['call_direction'];
|
||||
$call_recording_year = $row['call_recording_year'];
|
||||
$call_recording_month_name = $row['call_recording_month_name'];
|
||||
$call_recording_month_number = $row['call_recording_month_number'];
|
||||
$call_recording_day = $row['call_recording_day'];
|
||||
$call_recording_time = $row['call_recording_time'];
|
||||
$call_recording_date_formatted = $row['call_recording_date_formatted'];
|
||||
$call_recording_time_formatted = $row['call_recording_time_formatted'];
|
||||
if (!empty($storage_type) && $storage_type == 'base64' && !empty($row['call_recording_base64'])) {
|
||||
file_put_contents($call_recording_path.'/'.$call_recording_name, base64_decode($row['call_recording_base64']));
|
||||
}
|
||||
|
||||
if (file_exists($call_recording_path.'/'.$call_recording_name)) {
|
||||
$full_recording_paths[] = $call_recording_path.'/'.$call_recording_name;
|
||||
//add the original file to the array - use original file name
|
||||
if (empty($record_name)) {
|
||||
$full_recording_paths[] = $call_recording_path.'/'.$call_recording_name;
|
||||
}
|
||||
|
||||
//created the custom name using the record_name as a template
|
||||
if (!empty($record_name)) {
|
||||
$call_recording_name_download = str_replace('${uuid}', $call_recording_uuid, $record_name);
|
||||
$call_recording_name_download = str_replace('${caller_id_name}', $caller_id_name, $call_recording_name_download);
|
||||
$call_recording_name_download = str_replace('${caller_id_number}', $caller_id_number, $call_recording_name_download);
|
||||
$call_recording_name_download = str_replace('${caller_destination}', $caller_destination, $call_recording_name_download);
|
||||
$call_recording_name_download = str_replace('${destination_number}', $destination_number, $call_recording_name_download);
|
||||
$call_recording_name_download = str_replace('${date}', $call_recording_date, $call_recording_name_download);
|
||||
$call_recording_name_download = str_replace('${call_direction}', $call_direction, $call_recording_name_download);
|
||||
$call_recording_name_download = str_replace('${year}', $call_recording_year, $call_recording_name_download);
|
||||
$call_recording_name_download = str_replace('${month_name}', $call_recording_month_name, $call_recording_name_download);
|
||||
$call_recording_name_download = str_replace('${month_number}', $call_recording_month_number, $call_recording_name_download);
|
||||
$call_recording_name_download = str_replace('${day}', $call_recording_day, $call_recording_name_download);
|
||||
$call_recording_name_download = str_replace('${time}', $call_recording_time, $call_recording_name_download);
|
||||
|
||||
//create a symbolic link with custom name
|
||||
$command = 'ln -s '.$call_recording_path.'/'.$call_recording_name.' '.$call_recording_path.'/'.$call_recording_name_download;
|
||||
system($command);
|
||||
|
||||
//build the array for all the call recording with the new file name
|
||||
$full_recording_paths[] = $call_recording_path.'/'.$call_recording_name_download;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
unset($sql, $rows, $row);
|
||||
@@ -353,14 +481,21 @@
|
||||
passthru("zip -qj - ".implode(' ', $full_recording_paths));
|
||||
}
|
||||
|
||||
|
||||
//if base64, remove temp recording file
|
||||
if (!empty($_SESSION['call_recordings']['storage_type']['text']) && $_SESSION['call_recordings']['storage_type']['text'] == 'base64' && !empty($row['call_recording_base64'])) {
|
||||
if (!empty($storage_type) && $storage_type == 'base64' && !empty($row['call_recording_base64'])) {
|
||||
foreach ($full_recording_paths as $full_recording_path) {
|
||||
@unlink($full_recording_path);
|
||||
}
|
||||
}
|
||||
|
||||
//remove the symbolic links to the custom file names
|
||||
if (!empty($record_name)) {
|
||||
foreach ($full_recording_paths as $full_recording_path) {
|
||||
@unlink($full_recording_path);
|
||||
}
|
||||
}
|
||||
|
||||
//end the script
|
||||
exit;
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user