Add the greeting to the database when uploaded

This commit is contained in:
FusionPBX 2022-12-09 18:55:49 -07:00 committed by GitHub
parent b3d201b909
commit a593f567d1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 113 additions and 199 deletions

View File

@ -17,7 +17,7 @@
The Initial Developer of the Original Code is The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com> Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2019 Portions created by the Initial Developer are Copyright (C) 2008-2022
the Initial Developer. All Rights Reserved. the Initial Developer. All Rights Reserved.
Contributor(s): Contributor(s):
@ -70,25 +70,27 @@
$sql = "select greeting_id from v_voicemails "; $sql = "select greeting_id from v_voicemails ";
$sql .= "where domain_uuid = :domain_uuid "; $sql .= "where domain_uuid = :domain_uuid ";
$sql .= "and voicemail_id = :voicemail_id "; $sql .= "and voicemail_id = :voicemail_id ";
$parameters['domain_uuid'] = $domain_uuid; $parameters['domain_uuid'] = $_SESSION['domain_uuid'];
$parameters['voicemail_id'] = $voicemail_id; $parameters['voicemail_id'] = $voicemail_id;
$database = new database; $database = new database;
$selected_greeting_id = $database->select($sql, $parameters, 'column'); $selected_greeting_id = $database->select($sql, $parameters, 'column');
unset($sql, $parameters); unset($sql, $parameters);
//define greeting directory //define greeting directory
$v_greeting_dir = $_SESSION['switch']['storage']['dir'].'/voicemail/default/'.$_SESSION['domains'][$domain_uuid]['domain_name'].'/'.$voicemail_id; $greeting_dir = $_SESSION['switch']['storage']['dir'].'/voicemail/default/'.$_SESSION['domains'][$domain_uuid]['domain_name'].'/'.$voicemail_id;
//download the greeting //download the greeting
if ($_GET['a'] == "download" && (permission_exists('voicemail_greeting_play') || permission_exists('voicemail_greeting_download'))) { if ($_GET['a'] == "download" && (permission_exists('voicemail_greeting_play') || permission_exists('voicemail_greeting_download'))) {
if ($_GET['type'] == "rec") { if ($_GET['type'] == "rec") {
//get the id
$voicemail_greeting_uuid = $_GET['uuid']; $voicemail_greeting_uuid = $_GET['uuid'];
//get voicemail greeting details from db //get voicemail greeting details from db
$sql = "select greeting_filename, greeting_base64, greeting_id "; $sql = "select greeting_filename, greeting_base64, greeting_id ";
$sql .= "from v_voicemail_greetings "; $sql .= "from v_voicemail_greetings ";
$sql .= "where domain_uuid = :domain_uuid "; $sql .= "where domain_uuid = :domain_uuid ";
$sql .= "and voicemail_greeting_uuid = :voicemail_greeting_uuid "; $sql .= "and voicemail_greeting_uuid = :voicemail_greeting_uuid ";
$parameters['domain_uuid'] = $domain_uuid; $parameters['domain_uuid'] = $_SESSION['domain_uuid'];
$parameters['voicemail_greeting_uuid'] = $voicemail_greeting_uuid; $parameters['voicemail_greeting_uuid'] = $voicemail_greeting_uuid;
$database = new database; $database = new database;
$row = $database->select($sql, $parameters, 'row'); $row = $database->select($sql, $parameters, 'row');
@ -97,17 +99,17 @@
$greeting_id = $row['greeting_id']; $greeting_id = $row['greeting_id'];
if ($_SESSION['voicemail']['storage_type']['text'] == 'base64' && $row['greeting_base64'] != '') { if ($_SESSION['voicemail']['storage_type']['text'] == 'base64' && $row['greeting_base64'] != '') {
$greeting_decoded = base64_decode($row['greeting_base64']); $greeting_decoded = base64_decode($row['greeting_base64']);
file_put_contents($v_greeting_dir.'/'.$greeting_filename, $greeting_decoded); file_put_contents($greeting_dir.'/'.$greeting_filename, $greeting_decoded);
} }
} }
unset($sql, $row, $greeting_decoded); unset($sql, $row, $greeting_decoded);
if (file_exists($v_greeting_dir.'/'.$greeting_filename)) { if (file_exists($greeting_dir.'/'.$greeting_filename)) {
//content-range //content-range
if (isset($_SERVER['HTTP_RANGE']) && $_GET['t'] != "bin") { if (isset($_SERVER['HTTP_RANGE']) && $_GET['t'] != "bin") {
range_download($v_greeting_dir.'/'.$greeting_filename); range_download($greeting_dir.'/'.$greeting_filename);
} }
$fd = fopen($v_greeting_dir.'/'.$greeting_filename, "rb"); $fd = fopen($greeting_dir.'/'.$greeting_filename, "rb");
if ($_GET['t'] == "bin") { if ($_GET['t'] == "bin") {
header("Content-Type: application/force-download"); header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream"); header("Content-Type: application/octet-stream");
@ -126,7 +128,7 @@
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
if ($_GET['t'] == "bin") { if ($_GET['t'] == "bin") {
header("Content-Length: ".filesize($v_greeting_dir.'/'.$greeting_filename)); header("Content-Length: ".filesize($greeting_dir.'/'.$greeting_filename));
} }
ob_clean(); ob_clean();
fpassthru($fd); fpassthru($fd);
@ -135,7 +137,7 @@
//if base64, remove temp greeting file (if not currently selected greeting) //if base64, remove temp greeting file (if not currently selected greeting)
if ($_SESSION['voicemail']['storage_type']['text'] == 'base64' && $row['greeting_base64'] != '') { if ($_SESSION['voicemail']['storage_type']['text'] == 'base64' && $row['greeting_base64'] != '') {
if ($greeting_id != $selected_greeting_id) { if ($greeting_id != $selected_greeting_id) {
@unlink($v_greeting_dir.'/'.$greeting_filename); @unlink($greeting_dir.'/'.$greeting_filename);
} }
} }
} }
@ -143,12 +145,8 @@
} }
//upload the greeting //upload the greeting
if ( if ($_POST['a'] == "upload" && permission_exists('voicemail_greeting_upload')
$_POST['a'] == "upload" && $_POST['type'] == 'rec' && is_uploaded_file($_FILES['file']['tmp_name'])) {
&& permission_exists('voicemail_greeting_upload')
&& $_POST['type'] == 'rec'
&& is_uploaded_file($_FILES['file']['tmp_name'])
) {
//validate the token //validate the token
$token = new token; $token = new token;
@ -159,59 +157,84 @@
} }
//get the file extension //get the file extension
$file_ext = substr($_FILES['file']['name'], -4); $file_ext = $file_ext = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
$file_name = $_FILES['file']['name'];
//check file extension //check file extension
if ($file_ext == '.wav' || $file_ext == '.mp3') { if ($file_ext == 'wav' || $file_ext == 'mp3') {
//find the next available //find the next available
for ($i = 1; $i < 10; $i++) { for ($i = 1; $i < 10; $i++) {
//set the file name //set the file name
$file_name = 'greeting_'.$i.$file_ext; $file_name = 'greeting_'.$i.'.'.$file_ext;
//check the database //set the greeting id
if (is_uuid($domain_uuid) && is_numeric($voicemail_id) ) { if (!file_exists($greeting_dir.'/'.$file_name)) {
$sql = "select count(*) from v_voicemail_greetings "; //set the greeting id
$sql .= "where domain_uuid = :domain_uuid "; $greeting_id = $i;
$sql .= "and voicemail_id = :voicemail_id ";
$sql .= "and greeting_filename = :greeting_filename ";
$parameters['domain_uuid'] = $domain_uuid;
$parameters['voicemail_id'] = $voicemail_id;
$parameters['greeting_filename'] = $file_name;
$database = new database;
$num_rows = $database->select($sql, $parameters, 'column');
unset($sql, $parameters);
if ($num_rows == 0 && !file_exists($v_greeting_dir.'/'.$file_name)) { //end the loop
//move the uploaded greeting break;
mkdir($v_greeting_dir, 0770, false);
if ($file_ext == '.wav' || $file_ext == '.mp3') {
move_uploaded_file($_FILES['file']['tmp_name'], $v_greeting_dir.'/'.$file_name);
} }
}
//move the uploaded greeting
mkdir($greeting_dir, 0770, false);
if ($file_ext == 'wav' || $file_ext == 'mp3') {
move_uploaded_file($_FILES['file']['tmp_name'], $greeting_dir.'/'.$file_name);
}
//set newly uploaded greeting as active greeting for voicemail box //set newly uploaded greeting as active greeting for voicemail box
$sql = "update v_voicemails "; $sql = "update v_voicemails ";
$sql .= "set greeting_id = :greeting_id "; $sql .= "set greeting_id = :greeting_id ";
$sql .= "where domain_uuid = :domain_uuid "; $sql .= "where domain_uuid = :domain_uuid ";
$sql .= "and voicemail_id = :voicemail_id "; $sql .= "and voicemail_id = :voicemail_id ";
$parameters['greeting_id'] = $i; $parameters['greeting_id'] = $greeting_id;
$parameters['domain_uuid'] = $domain_uuid; $parameters['domain_uuid'] = $domain_uuid;
$parameters['voicemail_id'] = $voicemail_id; $parameters['voicemail_id'] = $voicemail_id;
$database = new database; $database = new database;
$database->execute($sql, $parameters); $database->execute($sql, $parameters);
unset($sql, $parameters); unset($sql, $parameters);
//set message
message::add($text['message-uploaded'].": ".$_FILES['file']['name']); //build insert array
//found available id, exit; $x = 0;
break; $array['voicemail_greetings'][$x]['voicemail_greeting_uuid'] = uuid();
} $array['voicemail_greetings'][$x]['domain_uuid'] = $domain_uuid;
else { $array['voicemail_greetings'][$x]['voicemail_id'] = $voicemail_id;
continue; $array['voicemail_greetings'][$x]['greeting_id'] = $greeting_id;
} $array['voicemail_greetings'][$x]['greeting_name'] = $text['label-greeting'].' '.$greeting_id;
unset($num_rows); $array['voicemail_greetings'][$x]['greeting_filename'] = $file_name;
$array['voicemail_greetings'][$x]['greeting_description'] = '';
if ($_SESSION['voicemail']['storage_type']['text'] == 'base64') {
$array['voicemail_greetings'][$x]['greeting_base64'] = base64_encode(file_get_contents($greeting_dir.'/'.$file));
} }
//save the array
if (is_array($array) && @sizeof($array) != 0) {
//grant temporary permissions
$p = new permissions;
$p->add('voicemail_greeting_add', 'temp');
$p->add('voicemail_greeting_edit', 'temp');
//execute inserts/updates
$database = new database;
$database->app_name = 'voicemail_greetings';
$database->app_uuid = 'e4b4fbee-9e4d-8e46-3810-91ba663db0c2';
$database->save($array);
unset($array);
//revoke temporary permissions
$p->delete('voicemail_greeting_add', 'temp');
$p->delete('voicemail_greeting_edit', 'temp');
} }
else {
echo __line__;
}
//set message
message::add($text['message-uploaded'].": ".$_FILES['file']['name']);
} }
//set the file name to be inserted as the greeting description //set the file name to be inserted as the greeting description
@ -245,124 +268,15 @@
$database = new database; $database = new database;
$database->execute($sql, $parameters); $database->execute($sql, $parameters);
unset($sql, $parameters); unset($sql, $parameters);
//set message //set message
message::add($text['message-greeting_selected']); message::add($text['message-greeting_selected']);
//redirect //redirect
header("Location: voicemail_greetings.php?id=".$voicemail_id."&order_by=".$order_by."&order=".$order); header("Location: voicemail_greetings.php?id=".$voicemail_id."&order_by=".$order_by."&order=".$order);
exit; exit;
} }
//get existing greetings
$sql = "select voicemail_greeting_uuid, greeting_filename, greeting_base64 ";
$sql .= "from v_voicemail_greetings ";
$sql .= "where domain_uuid = :domain_uuid ";
$sql .= "and voicemail_id = :voicemail_id ";
$parameters['domain_uuid'] = $domain_uuid;
$parameters['voicemail_id'] = $voicemail_id;
$database = new database;
$result = $database->select($sql, $parameters, 'all');
unset($sql, $parameters);
if (is_array($result) && @sizeof($result) != 0) {
foreach ($result as $x => &$row) {
$array_greetings[$row['voicemail_greeting_uuid']] = $row['greeting_filename'];
$array_base64_exists[$row['voicemail_greeting_uuid']] = ($row['greeting_base64'] != '') ? true : false;
//if not base64, convert back to local files and remove base64 from db
if ($_SESSION['voicemail']['storage_type']['text'] != 'base64' && $row['greeting_base64'] != '') {
if (file_exists($v_greeting_dir.'/'.$row['greeting_filename'])) {
@unlink($v_greeting_dir.'/'.$row['greeting_filename']);
}
$greeting_decoded = base64_decode($row['greeting_base64']);
file_put_contents($v_greeting_dir.'/'.$row['greeting_filename'], $greeting_decoded);
//build array
$array['voicemail_greetings'][$x]['voicemail_greeting_uuid'] = $row['voicemail_greeting_uuid'];
$array['voicemail_greetings'][$x]['greeting_base64'] = null;
}
}
if (is_array($array) && @sizeof($array) != 0) {
//grant temporary permissions
$p = new permissions;
$p->add('voicemail_greeting_edit', 'temp');
//execute update
$database = new database;
$database->app_name = 'voicemail_greetings';
$database->app_uuid = 'e4b4fbee-9e4d-8e46-3810-91ba663db0c2';
$database->save($array);
unset($array);
//revoke temporary permissions
$p->delete('voicemail_greeting_edit', 'temp');
}
}
unset($result, $row);
//add greetings to the database
if (is_dir($v_greeting_dir.'/')) {
if ($dh = opendir($v_greeting_dir.'/')) {
$x = 0;
//prepare for temporary permissions
$p = new permissions;
while (($file = readdir($dh)) !== false) {
if (filetype($v_greeting_dir."/".$file) == "file" && substr($file, 0, 8) == "greeting" && substr($file, 10, 4) != ".tmp") {
$greeting_number = preg_replace('{\D}', '', $file);
if (!is_array($array_greetings) || !in_array($file, $array_greetings)) {
//file not found, add to database
$greeting_name = $text['label-greeting'].' '.$greeting_number;
$greeting_description = base64_decode($_GET['gd']);
$voicemail_greeting_uuid = uuid();
//build insert array
$array['voicemail_greetings'][$x]['voicemail_greeting_uuid'] = $voicemail_greeting_uuid;
$array['voicemail_greetings'][$x]['domain_uuid'] = $domain_uuid;
$array['voicemail_greetings'][$x]['voicemail_id'] = $voicemail_id;
$array['voicemail_greetings'][$x]['greeting_name'] = $greeting_name;
$array['voicemail_greetings'][$x]['greeting_filename'] = $file;
$array['voicemail_greetings'][$x]['greeting_description'] = $greeting_description;
if ($_SESSION['voicemail']['storage_type']['text'] == 'base64') {
$array['voicemail_greetings'][$x]['greeting_base64'] = base64_encode(file_get_contents($v_greeting_dir.'/'.$file));
}
$array['voicemail_greetings'][$x]['greeting_id'] = $greeting_number;
$x++;
//grant temporary permissions
$p->add('voicemail_greeting_add', 'temp');
}
else {
//file found, check if base64 present
if ($_SESSION['voicemail']['storage_type']['text'] == 'base64') {
$found_greeting_uuid = array_search($file, $array_greetings);
if (!$array_base64_exists[$found_greeting_uuid]) {
//build update array
$array['voicemail_greetings'][$x]['voicemail_greeting_uuid'] = $found_greeting_uuid;
$array['voicemail_greetings'][$x]['greeting_base64'] = base64_encode(file_get_contents($v_greeting_dir.'/'.$file));
$x++;
//grant temporary permissions
$p->add('voicemail_greeting_edit', 'temp');
}
}
}
//if base64, remove local file (unless currently selected greeting)
if ($_SESSION['voicemail']['storage_type']['text'] == 'base64' && file_exists($v_greeting_dir.'/'.$file)) {
if ($greeting_number != $selected_greeting_id) {
@unlink($v_greeting_dir.'/'.$file);
}
}
}
}
if (is_array($array) && @sizeof($array) != 0) {
//execute inserts/updates
$database = new database;
$database->app_name = 'voicemail_greetings';
$database->app_uuid = 'e4b4fbee-9e4d-8e46-3810-91ba663db0c2';
$database->save($array);
unset($array);
//revoke temporary permissions
$p->delete('voicemail_greeting_add', 'temp');
$p->delete('voicemail_greeting_edit', 'temp');
}
closedir($dh);
}
}
//get the http post data //get the http post data
if (is_array($_POST['voicemail_greetings'])) { if (is_array($_POST['voicemail_greetings'])) {
$action = $_POST['action']; $action = $_POST['action'];
@ -554,8 +468,8 @@
echo " <td class='center no-wrap hide-xs'>".$file_size."</td>\n"; echo " <td class='center no-wrap hide-xs'>".$file_size."</td>\n";
} }
else { else {
$file_size = byte_convert(filesize($v_greeting_dir.'/'.$row['greeting_filename'])); $file_size = byte_convert(filesize($greeting_dir.'/'.$row['greeting_filename']));
$file_date = date("M d, Y H:i:s", filemtime($v_greeting_dir.'/'.$row['greeting_filename'])); $file_date = date("M d, Y H:i:s", filemtime($greeting_dir.'/'.$row['greeting_filename']));
echo " <td class='center no-wrap hide-xs'>".$file_size."</td>\n"; echo " <td class='center no-wrap hide-xs'>".$file_size."</td>\n";
echo " <td class='center no-wrap hide-xs'>".$file_date."</td>\n"; echo " <td class='center no-wrap hide-xs'>".$file_date."</td>\n";
} }