From a1d58cd290db876055819f50b16f439beda72103 Mon Sep 17 00:00:00 2001 From: Nate Jones Date: Thu, 18 Oct 2012 07:22:37 +0000 Subject: [PATCH] Enhanced MOH interface to allow the creation of custom categories of music, and to specify the sampling rate on upload. --- app/music_on_hold/v_music_on_hold.php | 406 +++++++++++++++------ app/music_on_hold/v_music_on_hold_play.php | 11 +- includes/javascript/reset_file_input.js | 4 + 3 files changed, 311 insertions(+), 110 deletions(-) create mode 100644 includes/javascript/reset_file_input.js diff --git a/app/music_on_hold/v_music_on_hold.php b/app/music_on_hold/v_music_on_hold.php index 1b186c2f55..e7bd9d698e 100644 --- a/app/music_on_hold/v_music_on_hold.php +++ b/app/music_on_hold/v_music_on_hold.php @@ -23,6 +23,7 @@ Contributor(s): Mark J Crane */ + include "root.php"; require_once "includes/require.php"; require_once "includes/checkauth.php"; @@ -36,17 +37,29 @@ else { require_once "includes/paging.php"; -$dir_music_on_hold_8000 = $_SESSION['switch']['sounds']['dir'].'/music/8000'; +$samplingrate_folders = Array(8000, 16000, 32000, 48000); +$dir_music_on_hold = $_SESSION['switch']['sounds']['dir'].'/music'; ini_set(max_execution_time,7200); $order_by = $_GET["order_by"]; $order = $_GET["order"]; if ($_GET['a'] == "download") { + $category_folder = $_GET['category']; + $samplingrate_folder = $_GET['samplingrate']; + + if ($category_folder != '') { + $path_mod = $category_folder."/"; + + if (count($_SESSION['domains']) > 1) { + $path_mod = $_SESSION["domain_name"]."/".$path_mod; + } + } + session_cache_limiter('public'); if ($_GET['type'] = "moh") { - if (file_exists($dir_music_on_hold_8000."/".base64_decode($_GET['filename']))) { - $fd = fopen($dir_music_on_hold_8000."/".base64_decode($_GET['filename']), "rb"); + if (file_exists($dir_music_on_hold."/".$path_mod.$samplingrate_folder."/".base64_decode($_GET['filename']))) { + $fd = fopen($dir_music_on_hold."/".$path_mod.$samplingrate_folder."/".base64_decode($_GET['filename']), "rb"); if ($_GET['t'] == "bin") { header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream"); @@ -65,7 +78,7 @@ if ($_GET['a'] == "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 - header("Content-Length: " . filesize($dir_music_on_hold_8000."/".base64_decode($_GET['filename']))); + header("Content-Length: " . filesize($dir_music_on_hold."/".$path_mod.$samplingrate_folder."/".base64_decode($_GET['filename']))); fpassthru($fd); } } @@ -74,27 +87,104 @@ if ($_GET['a'] == "download") { if (($_POST['submit'] == "Upload") && is_uploaded_file($_FILES['ulfile']['tmp_name'])) { - if ($_POST['type'] == 'moh' && permission_exists('music_on_hold_add')) { - move_uploaded_file($_FILES['ulfile']['tmp_name'], $dir_music_on_hold_8000."/".$_FILES['ulfile']['name']); - $savemsg = "Uploaded file to ".$dir_music_on_hold_8000."/".htmlentities($_FILES['ulfile']['name']); - //system('chmod -R 744 $dir_music_on_hold_8000*'); - unset($_POST['txtCommand']); + $file_ext = strtolower(pathinfo($_FILES['ulfile']['name'], PATHINFO_EXTENSION)); + if ($file_ext == 'wav' || $file_ext == 'mp3') { + if ($_POST['type'] == 'moh' && permission_exists('music_on_hold_add')) { + + $new_file_name = str_replace(' ', '-', $_FILES['ulfile']['name']); // replace any spaces in the filename with dashes + + $samplingrate_folder = $_POST['ulsamplingrate'] * 1000; // convert sampling rate from value passed by form + + if (count($_SESSION['domains']) > 1) { + $path_mod = $_SESSION["domain_name"]."/"; // if multi-tenant, modify folder paths + } + + // create new category, if necessary + if ($_POST['ulcategory'] == '_NEW_CAT_' && $_POST['ulcategorynew'] != '') { + $new_category_name = str_replace(' ', '_', $_POST['ulcategorynew']); + if (!is_dir($dir_music_on_hold."/".$path_mod.$new_category_name."/".$samplingrate_folder)) { + @mkdir($dir_music_on_hold."/".$path_mod.$new_category_name."/".$samplingrate_folder, 0777, true); + } + if (is_dir($dir_music_on_hold."/".$path_mod.$new_category_name."/".$samplingrate_folder)) { + move_uploaded_file($_FILES['ulfile']['tmp_name'], $dir_music_on_hold."/".$path_mod.$new_category_name."/".$samplingrate_folder."/".$new_file_name); + $target_folder = $dir_music_on_hold."/".$path_mod.$new_category_name."/".$samplingrate_folder; + } + } + // use existing category folder + else if ($_POST['ulcategory'] != '' && $_POST['ulcategory'] != '_NEW_CAT_') { + if (!is_dir($dir_music_on_hold."/".$path_mod.$_POST['ulcategory']."/".$samplingrate_folder)) { + @mkdir($dir_music_on_hold."/".$path_mod.$_POST['ulcategory']."/".$samplingrate_folder, 0777, true); + } + if (is_dir($dir_music_on_hold."/".$path_mod.$_POST['ulcategory']."/".$samplingrate_folder)) { + move_uploaded_file($_FILES['ulfile']['tmp_name'], $dir_music_on_hold."/".$path_mod.$_POST['ulcategory']."/".$samplingrate_folder."/".$new_file_name); + $target_folder = $dir_music_on_hold."/".$path_mod.$_POST['ulcategory']."/".$samplingrate_folder; + } + } + // use default ('public') folder + else if ($_POST['ulcategory'] == '') { + if (!is_dir($dir_music_on_hold."/".$samplingrate_folder)) { + @mkdir($dir_music_on_hold."/".$samplingrate_folder, 0777, true); + } + if (is_dir($dir_music_on_hold."/".$samplingrate_folder)) { + move_uploaded_file($_FILES['ulfile']['tmp_name'], $dir_music_on_hold."/".$samplingrate_folder."/".$new_file_name); + $target_folder = $dir_music_on_hold."/".$samplingrate_folder; + } + } + else { exit(); } + + $savemsg = "Uploaded file to ".$target_folder."/".htmlentities($_FILES['ulfile']['name']); + unset($_POST['txtCommand']); + } } } if ($_GET['act'] == "del" && permission_exists('music_on_hold_delete')) { if ($_GET['type'] == 'moh') { - unlink($dir_music_on_hold_8000."/".base64_decode($_GET['filename'])); + $samplingrate_folder = $_GET['samplingrate']; + $category_folder = $_GET['category']; + + if ($category_folder != '') { + $path_mod = $category_folder."/"; + + if (count($_SESSION['domains']) > 1) { + $path_mod = $_SESSION["domain_name"]."/".$path_mod; + } + } + + unlink($dir_music_on_hold."/".$path_mod.$samplingrate_folder."/".base64_decode($_GET['filename'])); + header("Location: v_music_on_hold.php"); + exit; + } + + if ($_GET['type'] == 'cat') { + $category_folder = $_GET['category']; + + if (count($_SESSION['domains']) > 1) { + $path_mod = $_SESSION["domain_name"]."/"; + } + + // remove sampling rate folders (if any) + foreach ($samplingrate_folders as $samplingrate_folder) { + rmdir($dir_music_on_hold."/".$path_mod.(base64_decode($category_folder))."/".$samplingrate_folder); + } + + // remove category folder + if (rmdir($dir_music_on_hold."/".$path_mod.(base64_decode($category_folder)))) { + sleep(5); // allow time for the OS to catch up (at least Windows, anyway) + } + header("Location: v_music_on_hold.php"); exit; } } + //include the header require_once "includes/header.php"; //begin the content + echo "\n"; echo ""; - echo "
"; - echo "\n"; - echo "\n"; - echo "
\n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo "
\n"; - echo "

\n"; - echo " Music on Hold
\n"; - echo " Music on hold can be in WAV or MP3 format. To play an MP3 file you must have\n"; - echo " mod_shout enabled on the 'Modules' tab. You can adjust the volume of the MP3\n"; - echo " audio from the 'Settings' tab. For best performance upload 16bit 8khz/16khz Mono WAV files.\n"; - echo "

\n"; - echo "
\n"; + echo "\n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo "
\n"; + echo "

\n"; + echo " Music on Hold

\n"; + echo " Music on hold can be in WAV or MP3 format. To play an MP3 file you must have\n"; + echo " mod_shout enabled on the 'Modules' tab. You can adjust the volume of the MP3\n"; + echo " audio from the 'Settings' tab. For best performance upload 16 bit, 8/16/32/48 kHz mono WAV files.\n"; + echo "

\n"; + echo "
\n"; echo "\n"; - echo "
\n"; + echo "

\n"; echo "\n"; - if (permission_exists('music_on_hold_add')) { - echo "
\n"; - echo " \n"; - echo " \n"; - echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo "
"; - if ($v_path_show) { - echo "location: "; - echo $dir_music_on_hold_8000; +//begin upload moh form ******************************************************************************************************************************************** + + if (permission_exists('music_on_hold_add')) { + echo "Upload Music\n"; + echo "

\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo "
\n"; + echo " File Path
\n"; + echo " \n"; + echo "
Sampling
\n"; + echo " \n"; + echo "
Category
\n"; + echo "
\n"; - echo " \n"; - echo " \n"; - echo " File to upload:\n"; - echo " \n"; - echo " \n"; - echo "
\n"; - echo " \n"; - echo "\n"; - echo "\n"; + if ($handle = opendir($dir_music_on_hold_category_parent_folder)) { + while (false !== ($folder = readdir($handle))) { + if ( + $folder != "." && + $folder != ".." && + $folder != "8000" && + $folder != "16000" && + $folder != "32000" && + $folder != "48000" && + is_dir($dir_music_on_hold_category_parent_folder."/".$folder) + ) { + echo "\n"; + $category_folders[] = $folder; // array used to output category folder contents below + } + } + closedir($handle); + } + + echo " \n"; + echo " \n"; + echo " "; + echo "
 
\n"; + echo " "; + echo "
 
\n"; + echo " \n"; + echo "
\n"; + echo "\n"; + echo "

\n"; } - echo " \n"; +//begin public/general moh section ******************************************************************************************************************************************** + + if (count($_SESSION['domains']) > 1) { + echo "Public  - Available to All Domains\n"; + } + else { + echo "General  - Uncategorized\n"; + } + + echo "

\n"; + echo "
\n"; echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; echo " "; $c = 0; $row_style["0"] = "row_style0"; $row_style["1"] = "row_style1"; - if ($handle = opendir($dir_music_on_hold_8000)) { - while (false !== ($file = readdir($handle))) { - if ($file != "." && $file != ".." && is_file($dir_music_on_hold_8000."/".$file)) { + foreach ($samplingrate_folders as $samplingrate_folder) { - $tmp_filesize = filesize($dir_music_on_hold_8000."/".$file); - $tmp_filesize = byte_convert($tmp_filesize); + if ($handle = opendir($dir_music_on_hold."/".$samplingrate_folder)) { + while (false !== ($file = readdir($handle))) { + if ($file != "." && $file != ".." && is_file($dir_music_on_hold."/".$samplingrate_folder."/".$file)) { + + $tmp_filesize = filesize($dir_music_on_hold."/".$samplingrate_folder."/".$file); + $tmp_filesize = byte_convert($tmp_filesize); + + echo "\n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo "\n"; + $c = ($c==0) ? 1 : 0; - echo "\n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo "\n"; - if ($c==0) { $c=1; } else { $c=0; } - } + closedir($handle); } - closedir($handle); + } - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo "
File Name (download)Name (play)Last ModifiedSize DownloadPlayUploadedFile SizeSampling
".$file."\n"; + echo " \n"; + $tmp_file_array = explode("\.",$file); + echo " ".$tmp_file_array[0]; + echo " "; + echo " ".date ("F d Y H:i:s", filemtime($dir_music_on_hold."/".$samplingrate_folder."/".$file))."".$tmp_filesize."".($samplingrate_folder / 1000)." kHz\n"; + if (permission_exists('music_on_hold_delete')) { + echo " $v_link_label_delete\n"; + } + echo "
\n"; - echo " \n"; - echo " $file"; - echo " "; - echo " \n"; - echo " \n"; - $tmp_file_array = explode("\.",$file); - echo " ".$tmp_file_array[0]; - echo " "; - echo " \n"; - echo date ("F d Y H:i:s", filemtime($dir_music_on_hold_8000."/".$file)); - echo " \n"; - echo " ".$tmp_filesize; - echo " \n"; - echo " \n"; - echo " \n"; - //echo " \n"; - if (permission_exists('music_on_hold_delete')) { - echo " \n"; } - echo " \n"; - echo "
$v_link_label_delete
\n"; - echo "
\n"; + echo "
\n"; + if ($v_path_show) { + echo "
Location: ".$dir_music_on_hold."
\n"; + } + echo "



\n"; - echo "\n"; - echo "
\n"; - echo "
\n"; - echo "
\n"; - echo "
\n"; +//begin moh categories ******************************************************************************************************************************************** - echo ""; - echo ""; - echo ""; - echo "
"; - echo "

"; + foreach ($category_folders as $category_number => $category_folder) { + + $c = 0; + + echo "".(str_replace('_', ' ', $category_folder))."\n"; + echo "

\n"; + echo "\n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " "; + + $moh_found = false; + + foreach ($samplingrate_folders as $samplingrate_folder) { + + if ($handle = opendir($dir_music_on_hold_category_parent_folder."/".$category_folder."/".$samplingrate_folder)) { + while (false !== ($file = readdir($handle))) { + if ($file != "." && $file != ".." && is_file($dir_music_on_hold_category_parent_folder."/".$category_folder."/".$samplingrate_folder."/".$file)) { + + $tmp_filesize = filesize($dir_music_on_hold_category_parent_folder."/".$category_folder."/".$samplingrate_folder."/".$file); + $tmp_filesize = byte_convert($tmp_filesize); + + echo "\n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo "\n"; + $c = ($c==0) ? 1 : 0; + + $moh_found = true; + } + + } + closedir($handle); + + } + + } + + if (!$moh_found) { + echo "\n"; + echo " \n"; + echo "\n"; + } + + + echo "
DownloadPlayUploadedFile SizeSampling
".$file."\n"; + echo " \n"; + $tmp_file_array = explode("\.",$file); + echo " ".$tmp_file_array[0]; + echo " "; + echo " ".date ("F d Y H:i:s", filemtime($dir_music_on_hold_category_parent_folder."/".$category_folder."/".$samplingrate_folder."/".$file))."".$tmp_filesize."".($samplingrate_folder / 1000)." kHz\n"; + if (permission_exists('music_on_hold_delete')) { + echo " $v_link_label_delete\n"; + } + echo "
\n"; + echo " No files found."; + echo " \n"; + echo "
\n"; + if ($v_path_show) { + echo "
Location: ".$dir_music_on_hold_category_parent_folder."/".$category_folder."
\n"; + } + echo "

\n"; + + } //include the footer require_once "includes/footer.php"; diff --git a/app/music_on_hold/v_music_on_hold_play.php b/app/music_on_hold/v_music_on_hold_play.php index 9993a9d537..eb28a9e899 100644 --- a/app/music_on_hold/v_music_on_hold_play.php +++ b/app/music_on_hold/v_music_on_hold_play.php @@ -37,6 +37,9 @@ else { $filename = base64_decode($_GET['filename']); $type = $_GET['type']; //moh //rec +$category_folder = $_GET['category']; +$samplingrate_folder = $_GET['samplingrate']; + ?> @@ -56,15 +59,15 @@ $type = $_GET['type']; //moh //rec $file_ext = substr($filename, -3); if ($file_ext == "wav") { //HTML5 method - echo "