|
|
|
@@ -32,15 +32,17 @@
|
|
|
|
|
# 180618-2300 - Modified calls to audio file chooser function
|
|
|
|
|
# 201002-1536 - Allowed for secure sounds_web_server setting
|
|
|
|
|
# 210321-0131 - Added classAudioFile PHP library for WAV file format validation
|
|
|
|
|
# 210322-1220 - Added checking of .wav files for asterisk-compatible format
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
$version = '2.14-24';
|
|
|
|
|
$build = '210321-0131';
|
|
|
|
|
$version = '2.14-25';
|
|
|
|
|
$build = '210322-1220';
|
|
|
|
|
|
|
|
|
|
$MT[0]='';
|
|
|
|
|
|
|
|
|
|
require("dbconnect_mysqli.php");
|
|
|
|
|
require("functions.php");
|
|
|
|
|
require ('classAudioFile.php');
|
|
|
|
|
|
|
|
|
|
$server_name = getenv("SERVER_NAME");
|
|
|
|
|
$PHP_SELF=$_SERVER['PHP_SELF'];
|
|
|
|
@@ -320,6 +322,112 @@ if ($action == "LIST")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##### BEGIN go through all Audio Store WAV files and validate for asterisk compatibility #####
|
|
|
|
|
$stmt = "SELECT count(*) FROM audio_store_details where audio_format='wav' and wav_asterisk_valid='';";
|
|
|
|
|
$rslt=mysql_to_mysqli($stmt, $link);
|
|
|
|
|
if ($DB) {echo "$stmt\n";}
|
|
|
|
|
$wuv_ct = mysqli_num_rows($rslt);
|
|
|
|
|
if ( ($wuv_ct > 0) or ($action == "ALL_WAV_VALIDATION") )
|
|
|
|
|
{
|
|
|
|
|
$i=0;
|
|
|
|
|
$filename_sort=$MT;
|
|
|
|
|
$dirpath = "$WeBServeRRooT/$sounds_web_directory";
|
|
|
|
|
$dh = opendir($dirpath);
|
|
|
|
|
while (false !== ($file = readdir($dh)))
|
|
|
|
|
{
|
|
|
|
|
# Do not list subdirectories
|
|
|
|
|
if ( (!is_dir("$dirpath/$file")) and (preg_match('/\.wav$|\.gsm$/', $file)) )
|
|
|
|
|
{
|
|
|
|
|
if (file_exists("$dirpath/$file"))
|
|
|
|
|
{
|
|
|
|
|
$file_names[$i] = $file;
|
|
|
|
|
$file_epoch[$i] = filemtime("$dirpath/$file");
|
|
|
|
|
$file_dates[$i] = date ("Y-m-d H:i:s.", filemtime("$dirpath/$file"));
|
|
|
|
|
$file_sizes[$i] = filesize("$dirpath/$file");
|
|
|
|
|
$filename_sort[$i] = $file . "----------" . $i . "----------" . $file_sizes[$i];
|
|
|
|
|
$i++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
closedir($dh);
|
|
|
|
|
|
|
|
|
|
sort($filename_sort);
|
|
|
|
|
|
|
|
|
|
sleep(1);
|
|
|
|
|
|
|
|
|
|
$wav_valid=0;
|
|
|
|
|
$wav_invalid=0;
|
|
|
|
|
$not_wav=0;
|
|
|
|
|
$k=0;
|
|
|
|
|
while($k < $i)
|
|
|
|
|
{
|
|
|
|
|
$filename_split = explode('----------',$filename_sort[$k]);
|
|
|
|
|
$m = $filename_split[1];
|
|
|
|
|
$size = $filename_split[2];
|
|
|
|
|
$audio_filesize = filesize("$dirpath/$file_names[$m]");
|
|
|
|
|
if ($size == $audio_filesize)
|
|
|
|
|
{
|
|
|
|
|
$audio_filename = $file_names[$m];
|
|
|
|
|
$audio_epoch = date("U");
|
|
|
|
|
$wav_format_details='';
|
|
|
|
|
$wav_asterisk_valid='NA';
|
|
|
|
|
|
|
|
|
|
if (preg_match("/\.wav$/", $audio_filename))
|
|
|
|
|
{
|
|
|
|
|
$audio_format='wav';
|
|
|
|
|
$audio_length = ($audio_filesize / 16000);
|
|
|
|
|
|
|
|
|
|
$AF = new AudioFile;
|
|
|
|
|
$AF->loadFile("$dirpath/$file_names[$m]");
|
|
|
|
|
|
|
|
|
|
$wav_type = $AF->wave_type;
|
|
|
|
|
$wav_compression = $AF->getCompression ($AF->wave_compression);
|
|
|
|
|
$wav_channels = $AF->wave_channels;
|
|
|
|
|
$wav_framerate = $AF->wave_framerate;
|
|
|
|
|
$wav_bits=$AF->wave_bits;
|
|
|
|
|
$audio_length=number_format ($AF->wave_length,"0");
|
|
|
|
|
$invalid_wav=0;
|
|
|
|
|
|
|
|
|
|
if (!preg_match('/^wav/i',$wav_type)) {$invalid_wav++;}
|
|
|
|
|
if (!preg_match('/^pcm/i',$wav_compression)) {$invalid_wav++;}
|
|
|
|
|
if ($wav_channels > 1) {$invalid_wav++;}
|
|
|
|
|
if ( ($wav_framerate > 8000) or ($wav_framerate < 8000) ) {$invalid_wav++;}
|
|
|
|
|
if ( ($wav_bits > 16) or ($wav_bits < 16) ) {$invalid_wav++;}
|
|
|
|
|
|
|
|
|
|
$wav_format_details = "$wav_type channels: $wav_channels framerate: $wav_framerate bits: $wav_bits length: $audio_length compression: $wav_compression";
|
|
|
|
|
|
|
|
|
|
if ($invalid_wav > 0)
|
|
|
|
|
{
|
|
|
|
|
$wav_asterisk_valid='BAD';
|
|
|
|
|
$wav_invalid++;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
$wav_asterisk_valid='GOOD';
|
|
|
|
|
$wav_valid++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$stmt="INSERT IGNORE INTO audio_store_details SET audio_filename='$audio_filename',audio_format='$audio_format',audio_filesize='$audio_filesize',audio_epoch='$audio_epoch',audio_length='$audio_length',wav_format_details='$wav_format_details',wav_asterisk_valid='$wav_asterisk_valid' ON DUPLICATE KEY UPDATE audio_filesize='$audio_filesize',audio_epoch='$audio_epoch',audio_length='$audio_length',wav_format_details='$wav_format_details',wav_asterisk_valid='$wav_asterisk_valid';";
|
|
|
|
|
if ($DB) {echo "|$stmt|\n";}
|
|
|
|
|
$rslt=mysql_to_mysqli($stmt, $link);
|
|
|
|
|
$affected_rowsX = mysqli_affected_rows($link);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
$not_wav++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($DB) {echo "$k\t$file_names[$m]\t$wav_asterisk_valid\n";}
|
|
|
|
|
}
|
|
|
|
|
$k++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($DB) {echo "SUMMARY: WAV VALID: $wav_valid WAV INVALID: $wav_invalid NOT WAV: $not_wav\n";}
|
|
|
|
|
}
|
|
|
|
|
##### END go through all Audio Store WAV files and validate for asterisk compatibility #####
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### upload audio file from server to webserver
|
|
|
|
|
# curl 'http://10.0.0.4/vicidial/audio_store.php?action=AUTOUPLOAD' -F "audiofile=@/var/lib/asterisk/sounds/beep.gsm"
|
|
|
|
|
if ($action == "AUTOUPLOAD")
|
|
|
|
@@ -546,14 +654,22 @@ if ($action == "MANUALUPLOAD")
|
|
|
|
|
$audiofile_name = preg_replace("/\^/",'',$audiofile_name);
|
|
|
|
|
if (preg_match("/\.wav$|\.gsm$/", $audiofile_name))
|
|
|
|
|
{
|
|
|
|
|
$audio_epoch = date("U");
|
|
|
|
|
$audio_format='gsm';
|
|
|
|
|
$audio_filesize = filesize("$WeBServeRRooT/$sounds_web_directory/$audiofile_name");
|
|
|
|
|
$audio_length = ($audio_filesize / 1650);
|
|
|
|
|
$wav_format_details='';
|
|
|
|
|
$wav_asterisk_valid='NA';
|
|
|
|
|
|
|
|
|
|
copy($AF_path, "$WeBServeRRooT/$sounds_web_directory/$audiofile_name");
|
|
|
|
|
chmod("$WeBServeRRooT/$sounds_web_directory/$audiofile_name", 0766);
|
|
|
|
|
|
|
|
|
|
echo "<BR>"._QXZ("SUCCESS").": $audiofile_name "._QXZ("uploaded")." "._QXZ("size").":" . filesize("$WeBServeRRooT/$sounds_web_directory/$audiofile_name") . "<BR><BR>\n";
|
|
|
|
|
echo "<BR>"._QXZ("SUCCESS").": $audiofile_name "._QXZ("uploaded")." "._QXZ("size").": $audio_filesize<BR><BR>\n";
|
|
|
|
|
|
|
|
|
|
if (preg_match("/\.wav$/", $audiofile_name))
|
|
|
|
|
{
|
|
|
|
|
require ('classAudioFile.php');
|
|
|
|
|
$audio_format='wav';
|
|
|
|
|
$audio_length = ($audio_filesize / 16000);
|
|
|
|
|
|
|
|
|
|
$AF = new AudioFile;
|
|
|
|
|
$AF->loadFile("$WeBServeRRooT/$sounds_web_directory/$audiofile_name");
|
|
|
|
@@ -563,6 +679,7 @@ if ($action == "MANUALUPLOAD")
|
|
|
|
|
$wav_channels = $AF->wave_channels;
|
|
|
|
|
$wav_framerate = $AF->wave_framerate;
|
|
|
|
|
$wav_bits=$AF->wave_bits;
|
|
|
|
|
$audio_length=number_format ($AF->wave_length,"0");
|
|
|
|
|
$invalid_wav=0;
|
|
|
|
|
|
|
|
|
|
if (!preg_match('/^wav/i',$wav_type)) {$invalid_wav++;}
|
|
|
|
@@ -571,25 +688,35 @@ if ($action == "MANUALUPLOAD")
|
|
|
|
|
if ( ($wav_framerate > 8000) or ($wav_framerate < 8000) ) {$invalid_wav++;}
|
|
|
|
|
if ( ($wav_bits > 16) or ($wav_bits < 16) ) {$invalid_wav++;}
|
|
|
|
|
|
|
|
|
|
$wav_format_details = "$wav_type channels: $wav_channels framerate: $wav_framerate bits: $wav_bits length: $audio_length compression: $wav_compression";
|
|
|
|
|
|
|
|
|
|
if ($invalid_wav > 0)
|
|
|
|
|
{
|
|
|
|
|
$wav_asterisk_valid='BAD';
|
|
|
|
|
echo " <BR><BR><font color=red>"._QXZ("INVALID WAV FILE FORMAT").": ($audiofile_name)</font><BR> </FONT><FONT FACE=\"ARIAL,HELVETICA\" COLOR=BLACK SIZE=2>$wav_type "._QXZ("channels").": $wav_channels "._QXZ("framerate").": $wav_framerate "._QXZ("bits").": $wav_bits "._QXZ("compression").": $wav_compression<BR><BR><BR>\n";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
$wav_asterisk_valid='GOOD';
|
|
|
|
|
echo " </FONT><FONT FACE=\"ARIAL,HELVETICA\" COLOR=BLACK SIZE=1>"._QXZ("WAV FILE FORMAT VALIDATED").": $wav_type "._QXZ("channels").": $wav_channels "._QXZ("framerate").": $wav_framerate "._QXZ("bits").": $wav_bits "._QXZ("compression").": $wav_compression<BR><BR>\n";
|
|
|
|
|
}
|
|
|
|
|
echo "</FONT><FONT FACE=\"ARIAL,HELVETICA\" COLOR=BLACK SIZE=3>";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$stmt="INSERT IGNORE INTO audio_store_details SET audio_filename='$audiofile_name',audio_format='$audio_format',audio_filesize='$audio_filesize',audio_epoch='$audio_epoch',audio_length='$audio_length',wav_format_details='$wav_format_details',wav_asterisk_valid='$wav_asterisk_valid' ON DUPLICATE KEY UPDATE audio_filesize='$audio_filesize',audio_epoch='$audio_epoch',audio_length='$audio_length',wav_format_details='$wav_format_details',wav_asterisk_valid='$wav_asterisk_valid';";
|
|
|
|
|
if ($DB) {echo "|$stmt|\n";}
|
|
|
|
|
$rslt=mysql_to_mysqli($stmt, $link);
|
|
|
|
|
$affected_rowsX = mysqli_affected_rows($link);
|
|
|
|
|
|
|
|
|
|
$stmt="UPDATE servers SET sounds_update='Y';";
|
|
|
|
|
$rslt=mysql_to_mysqli($stmt, $link);
|
|
|
|
|
$affected_rowsY = mysqli_affected_rows($link);
|
|
|
|
|
|
|
|
|
|
### LOG INSERTION Admin Log Table ###
|
|
|
|
|
$SQL_log = "$stmt|";
|
|
|
|
|
$SQL_log = preg_replace('/;/', '', $SQL_log);
|
|
|
|
|
$SQL_log = addslashes($SQL_log);
|
|
|
|
|
$stmt="INSERT INTO vicidial_admin_log set event_date=NOW(), user='$PHP_AUTH_USER', ip_address='$ip', event_section='AUDIOSTORE', event_type='LOAD', record_id='manualupload', event_code='$audiofile_name " . filesize("$WeBServeRRooT/$sounds_web_directory/$audiofile_name") . "', event_sql=\"$SQL_log\", event_notes='$audiofile_name $AF_path $AF_orig Invalid: $invalid_wav $wav_type "._QXZ("channels").": $wav_channels "._QXZ("framerate").": $wav_framerate "._QXZ("bits").": $wav_bits "._QXZ("compression").": $wav_compression';";
|
|
|
|
|
$stmt="INSERT INTO vicidial_admin_log set event_date=NOW(), user='$PHP_AUTH_USER', ip_address='$ip', event_section='AUDIOSTORE', event_type='LOAD', record_id='manualupload', event_code='$audiofile_name $audio_filesize', event_sql=\"$SQL_log\", event_notes='$audiofile_name $AF_path $AF_orig Invalid: $invalid_wav $wav_type "._QXZ("channels").": $wav_channels "._QXZ("framerate").": $wav_framerate "._QXZ("bits").": $wav_bits "._QXZ("compression").": $wav_compression "._QXZ("length").": $audio_length $affected_rowsX|$affected_rowsY';";
|
|
|
|
|
if ($DB) {echo "|$stmt|\n";}
|
|
|
|
|
$rslt=mysql_to_mysqli($stmt, $link);
|
|
|
|
|
}
|
|
|
|
|