diff --git a/app/recordings/app_languages.php b/app/recordings/app_languages.php index 4946f88551..1dba0fd31d 100644 --- a/app/recordings/app_languages.php +++ b/app/recordings/app_languages.php @@ -21,12 +21,12 @@ $text['title']['fr-fr'] = "Guides Vocaux"; $text['title']['pt-br'] = "Configurações da Conta"; $text['title']['pl'] = "Ustawienia konta"; -$text['message-uploaded']['en-us'] = "Uploaded file to"; -$text['message-uploaded']['es-cl'] = "Archivo subido a"; -$text['message-uploaded']['pt-pt'] = "Ficheiro carregado para"; -$text['message-uploaded']['fr-fr'] = "Fichier téléchargé"; -$text['message-uploaded']['pt-br'] = "Arquivo carregado para"; -$text['message-uploaded']['pl'] = "Wyślij plik do"; +$text['message-uploaded']['en-us'] = "File Uploaded"; +$text['message-uploaded']['es-cl'] = "Subida de Archivos"; +$text['message-uploaded']['pt-pt'] = "Arquivo Enviado"; +$text['message-uploaded']['fr-fr'] = "Fichier Téléchargé"; +$text['message-uploaded']['pt-br'] = "Arquivo Enviado"; +$text['message-uploaded']['pl'] = "Dodany Plik"; $text['message-update']['en-us'] = "Update Complete"; $text['message-update']['es-cl'] = "Actualización Completada"; diff --git a/app/recordings/recording_delete.php b/app/recordings/recording_delete.php index 7fb7eced19..b460300109 100644 --- a/app/recordings/recording_delete.php +++ b/app/recordings/recording_delete.php @@ -66,7 +66,9 @@ if (strlen($id)>0) { unset($sql); //delete the recording - unlink($_SESSION['switch']['recordings']['dir']."/".$filename); + if (file_exists($_SESSION['switch']['recordings']['dir']."/".$filename)) { + @unlink($_SESSION['switch']['recordings']['dir']."/".$filename); + } } //redirect the user diff --git a/app/recordings/recordings.php b/app/recordings/recordings.php index 08176b2b0e..d051e5e60c 100644 --- a/app/recordings/recordings.php +++ b/app/recordings/recordings.php @@ -43,8 +43,29 @@ require_once "resources/check_auth.php"; if ($_GET['a'] == "download" && (permission_exists('recording_play') || permission_exists('recording_download'))) { session_cache_limiter('public'); if ($_GET['type'] = "rec") { - if (file_exists($_SESSION['switch']['recordings']['dir'].'/'.base64_decode($_GET['filename']))) { - $fd = fopen($_SESSION['switch']['recordings']['dir'].'/'.base64_decode($_GET['filename']), "rb"); + $recording_uuid = check_str($_GET['id']); + $path = $_SESSION['switch']['recordings']['dir']; + //get recording details from db + $sql = "select recording_filename, recording_base64 from v_recordings "; + $sql .= "where domain_uuid = '".$domain_uuid."' "; + $sql .= "and recording_uuid = '".$recording_uuid."' "; + $prep_statement = $db->prepare(check_sql($sql)); + $prep_statement->execute(); + $result = $prep_statement->fetchAll(PDO::FETCH_ASSOC); + if (count($result) > 0) { + foreach($result as &$row) { + $recording_filename = $row['recording_filename']; + if ($_SESSION['recordings']['storage_type']['text'] == 'base64' && $row['recording_base64'] != '') { + $recording_decoded = base64_decode($row['recording_base64']); + file_put_contents($path.'/'.$recording_filename, $recording_decoded); + } + break; + } + } + unset ($sql, $prep_statement, $result, $recording_decoded); + + if (file_exists($path.'/'.$recording_filename)) { + $fd = fopen($path.'/'.$recording_filename, "rb"); if ($_GET['t'] == "bin") { header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream"); @@ -52,7 +73,7 @@ require_once "resources/check_auth.php"; header("Content-Description: File Transfer"); } else { - $file_ext = substr(base64_decode($_GET['filename']), -3); + $file_ext = substr($recording_filename, -3); if ($file_ext == "wav") { header("Content-Type: audio/x-wav"); } @@ -60,26 +81,33 @@ require_once "resources/check_auth.php"; header("Content-Type: audio/mpeg"); } } - header('Content-Disposition: attachment; filename="'.base64_decode($_GET['filename']).'"'); + header('Content-Disposition: attachment; filename="'.$recording_filename.'"'); 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("Content-Length: " . filesize($_SESSION['switch']['recordings']['dir'].'/'.base64_decode($_GET['filename']))); + header("Content-Length: " . filesize($path.'/'.$recording_filename)); ob_clean(); fpassthru($fd); } + + //if base64, remove temp recording file + if ($_SESSION['recordings']['storage_type']['text'] == 'base64' && $row['recording_base64'] != '') { + @unlink($path.'/'.$recording_filename); + } } exit; } //upload the recording if (permission_exists('recording_upload')) { - if (($_POST['submit'] == "Upload") && is_uploaded_file($_FILES['ulfile']['tmp_name']) && permission_exists('recording_upload')) { - if ($_POST['type'] == 'rec') { + if ($_POST['submit'] == "Upload" && $_POST['type'] == 'rec') { + if (is_uploaded_file($_FILES['ulfile']['tmp_name'])) { move_uploaded_file($_FILES['ulfile']['tmp_name'], $_SESSION['switch']['recordings']['dir'].'/'.$_FILES['ulfile']['name']); - $savemsg = $text['message-uploaded']." ".$_SESSION['switch']['recordings']['dir']."/". htmlentities($_FILES['ulfile']['name']); - //system('chmod -R 744 '.$_SESSION['switch']['recordings']['dir'].'*'); unset($_POST['txtCommand']); + + $_SESSION['message'] = $text['message-uploaded'].": ".htmlentities($_FILES['ulfile']['name']); } + header("Location: recordings.php"); + exit; } } @@ -92,16 +120,25 @@ require_once "resources/check_auth.php"; exit; } -//build a list of recordings - $config_recording_list = '|'; - $i = 0; - $sql = "select * from v_recordings "; - $sql .= "where domain_uuid = '$domain_uuid' "; +//get existing recordings + $sql = "select recording_uuid, recording_filename, recording_base64 from v_recordings "; + $sql .= "where domain_uuid = '".$domain_uuid."' "; $prep_statement = $db->prepare(check_sql($sql)); $prep_statement->execute(); $result = $prep_statement->fetchAll(PDO::FETCH_NAMED); foreach ($result as &$row) { - $config_recording_list .= $row['recording_filename']."|"; + $array_recordings[$row['recording_uuid']] = $row['recording_filename']; + $array_base64_exists[$row['recording_uuid']] = ($row['recording_base64'] != '') ? true : false; + //if not base64, convert back to local files and remove base64 from db + if ($_SESSION['recordings']['storage_type']['text'] != 'base64' && $row['recording_base64'] != '') { + if (!file_exists($_SESSION['switch']['recordings']['dir'].'/'.$row['recording_filename'])) { + $recording_decoded = base64_decode($row['recording_base64']); + file_put_contents($_SESSION['switch']['recordings']['dir'].'/'.$row['recording_filename'], $recording_decoded); + $sql = "update v_recordings set recording_base64 = null where domain_uuid = '".$domain_uuid."' and recording_uuid = '".$row['recording_uuid']."' "; + $db->exec(check_sql($sql)); + unset($sql); + } + } } unset ($prep_statement); @@ -110,9 +147,9 @@ require_once "resources/check_auth.php"; if ($dh = opendir($_SESSION['switch']['recordings']['dir'].'/')) { while (($file = readdir($dh)) !== false) { if (filetype($_SESSION['switch']['recordings']['dir']."/".$file) == "file") { - if (strpos($config_recording_list, "|".$file) === false) { - //echo "The $file was not found
"; - //file not found add it to the database + + if (!in_array($file, $array_recordings)) { + //file not found, add it to the database $a_file = explode("\.", $file); $recording_uuid = uuid(); $sql = "insert into v_recordings "; @@ -122,28 +159,58 @@ require_once "resources/check_auth.php"; $sql .= "recording_filename, "; $sql .= "recording_name, "; $sql .= "recording_description "; + if ($_SESSION['recordings']['storage_type']['text'] == 'base64') { + $sql .= ", recording_base64 "; + } $sql .= ")"; $sql .= "values "; $sql .= "("; - $sql .= "'$domain_uuid', "; - $sql .= "'$recording_uuid', "; - $sql .= "'$file', "; + $sql .= "'".$domain_uuid."', "; + $sql .= "'".$recording_uuid."', "; + $sql .= "'".$file."', "; $sql .= "'".$a_file[0]."', "; $sql .= "'' "; + if ($_SESSION['recordings']['storage_type']['text'] == 'base64') { + $recording_base64 = base64_encode(file_get_contents($_SESSION['switch']['recordings']['dir'].'/'.$file)); + $sql .= ", '".$recording_base64."' "; + } $sql .= ")"; $db->exec(check_sql($sql)); unset($sql); } + else { + //file found, check if base64 present + if ($_SESSION['recordings']['storage_type']['text'] == 'base64') { + $found_recording_uuid = array_search($file, $array_recordings); + if (!$array_base64_exists[$found_recording_uuid]) { + $recording_base64 = base64_encode(file_get_contents($_SESSION['switch']['recordings']['dir'].'/'.$file)); + $sql = "update v_recordings set "; + $sql .= "recording_base64 = '".$recording_base64."' "; + $sql .= "where domain_uuid = '".$domain_uuid."' "; + $sql .= "and recording_uuid = '".$found_recording_uuid."' "; + $db->exec(check_sql($sql)); + unset($sql); + } + } + } + + //if base64, remove local file + if ($_SESSION['recordings']['storage_type']['text'] == 'base64' && file_exists($_SESSION['switch']['recordings']['dir'].'/'.$file)) { + @unlink($_SESSION['switch']['recordings']['dir'].'/'.$file); + } + } - } + } //while closedir($dh); - } - } + } //if + } //if + //add paging require_once "resources/paging.php"; //include the header + $document['title'] = $text['title']; require_once "resources/header.php"; //begin the content @@ -172,8 +239,8 @@ require_once "resources/check_auth.php"; } $sql = "select * from v_recordings "; - $sql .= "where domain_uuid = '$domain_uuid' "; - if (strlen($order_by)> 0) { $sql .= "order by $order_by $order "; } + $sql .= "where domain_uuid = '".$domain_uuid."' "; + if (strlen($order_by)> 0) { $sql .= "order by ".$order_by." ".$order." "; } $prep_statement = $db->prepare(check_sql($sql)); $prep_statement->execute(); $result = $prep_statement->fetchAll(PDO::FETCH_NAMED); @@ -188,9 +255,9 @@ require_once "resources/check_auth.php"; $offset = $rows_per_page * $page; $sql = "select * from v_recordings "; - $sql .= "where domain_uuid = '$domain_uuid' "; - if (strlen($order_by)> 0) { $sql .= "order by $order_by $order "; } - $sql .= " limit $rows_per_page offset $offset "; + $sql .= "where domain_uuid = '".$domain_uuid."' "; + $sql .= "order by ".((strlen($order_by) > 0) ? $order_by." ".$order : "recording_name asc")." "; + $sql .= "limit ".$rows_per_page." offset ".$offset." "; $prep_statement = $db->prepare(check_sql($sql)); $prep_statement->execute(); $result = $prep_statement->fetchAll(PDO::FETCH_NAMED); @@ -244,9 +311,9 @@ require_once "resources/check_auth.php"; case "mp3" : $recording_type = "audio/mpeg"; break; case "ogg" : $recording_type = "audio/ogg"; break; } - echo ""; + echo ""; echo "".$v_link_label_play.""; - echo "".$v_link_label_download.""; + echo "".$v_link_label_download.""; } else { echo " ";