diff --git a/UPGRADE b/UPGRADE index 30840412..a8f6a9bf 100644 --- a/UPGRADE +++ b/UPGRADE @@ -302,7 +302,11 @@ OTHER CHANGES: 84. Added option to allow agents to park 3way calls in the agent screen +85. Added option to web lead loader to restrict leads to only those with a + phone number of a specified length. Options for forced system-wide and + per-list-load +86. Added more options to the Callback moving utilites in Admin Utilities page diff --git a/docs/QUEUEMETRICS.txt b/docs/QUEUEMETRICS.txt index bfc2048f..c76e6a34 100644 --- a/docs/QUEUEMETRICS.txt +++ b/docs/QUEUEMETRICS.txt @@ -92,7 +92,7 @@ If it did, then you want to add the following lines to your /etc/rc.d/rc.local f cd /usr/local *** download QueueMetrics and place it in /usr/local *** - http//downloads.loway.ch/qm/QueueMetrics-16.09.2.tar.gz +wget http://downloads.loway.ch/qm/QueueMetrics-16.09.2.tar.gz tar xvfz QueueMetrics-16.09.2.tar.gz mv queuemetrics-16.09.2 /usr/local/tomcat/webapps/qm cd /usr/local/tomcat/webapps/qm/WEB_INF diff --git a/extras/MySQL_AST_CREATE_tables.sql b/extras/MySQL_AST_CREATE_tables.sql index dc0962e8..0dfac000 100644 --- a/extras/MySQL_AST_CREATE_tables.sql +++ b/extras/MySQL_AST_CREATE_tables.sql @@ -1677,7 +1677,9 @@ script_remove_js ENUM('1','0') default '1', manual_auto_next ENUM('1','0') default '0', user_new_lead_limit ENUM('1','0') default '0', agent_xfer_park_3way ENUM('1','0') default '0', -rec_prompt_count INT(9) UNSIGNED default '0' +rec_prompt_count INT(9) UNSIGNED default '0', +agent_soundboards ENUM('1','0') default '0', +web_loader_phone_length VARCHAR(10) default 'DISABLED' ) ENGINE=MyISAM; CREATE TABLE vicidial_campaigns_list_mix ( @@ -3807,4 +3809,4 @@ UPDATE vicidial_configuration set value='1766' where name='qc_database_version'; UPDATE system_settings set vdc_agent_api_active='1'; -UPDATE system_settings SET db_schema_version='1474',db_schema_update_date=NOW(),reload_timestamp=NOW(); +UPDATE system_settings SET db_schema_version='1475',db_schema_update_date=NOW(),reload_timestamp=NOW(); diff --git a/extras/upgrade_2.12.sql b/extras/upgrade_2.12.sql index 90a33a40..15f3d67b 100644 --- a/extras/upgrade_2.12.sql +++ b/extras/upgrade_2.12.sql @@ -734,3 +734,8 @@ UPDATE system_settings SET db_schema_version='1473',db_schema_update_date=NOW() ALTER TABLE vicidial_users ADD user_new_lead_limit SMALLINT(5) default '-1'; UPDATE system_settings SET db_schema_version='1474',db_schema_update_date=NOW() where db_schema_version < 1474; + +ALTER TABLE system_settings ADD agent_soundboards ENUM('1','0') default '0'; +ALTER TABLE system_settings ADD web_loader_phone_length VARCHAR(10) default 'DISABLED'; + +UPDATE system_settings SET db_schema_version='1475',db_schema_update_date=NOW() where db_schema_version < 1475; diff --git a/www/agc/api.php b/www/agc/api.php index 24a067c5..8fae48d4 100644 --- a/www/agc/api.php +++ b/www/agc/api.php @@ -86,10 +86,11 @@ # 150928-1157 - Fix allowing for * and # in phone_number field # 160113-0921 - Fix for numeric audio files in playback function # 161102-1042 - Fixed QM partition problem +# 161103-1729 - Added agent_debug to audio playing # -$version = '2.12-52'; -$build = '161102-1042'; +$version = '2.12-53'; +$build = '161103-1729'; $startMS = microtime(); @@ -215,6 +216,8 @@ if (isset($_GET["callback_comments"])) {$callback_comments=$_GET["callback_com elseif (isset($_POST["callback_comments"])) {$callback_comments=$_POST["callback_comments"];} if (isset($_GET["qm_dispo_code"])) {$qm_dispo_code=$_GET["qm_dispo_code"];} elseif (isset($_POST["qm_dispo_code"])) {$qm_dispo_code=$_POST["qm_dispo_code"];} +if (isset($_GET["agent_debug"])) {$agent_debug=$_GET["agent_debug"];} + elseif (isset($_POST["agent_debug"])) {$agent_debug=$_POST["agent_debug"];} header ("Content-type: text/html; charset=utf-8"); @@ -241,7 +244,7 @@ if ($sl_ct > 0) $VUuser_group = $row[3]; } -$stmt = "SELECT use_non_latin,enable_languages,language_method FROM system_settings;"; +$stmt = "SELECT use_non_latin,enable_languages,language_method,agent_debug_logging FROM system_settings;"; $rslt=mysql_to_mysqli($stmt, $link); if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'00XXX',$user,$server_ip,$session_name,$one_mysql_log);} if ($DB) {echo "$stmt\n";} @@ -252,6 +255,7 @@ if ($qm_conf_ct > 0) $non_latin = $row[0]; $SSenable_languages = $row[1]; $SSlanguage_method = $row[2]; + $SSagent_debug_logging = $row[3]; } ##### END SETTINGS LOOKUP ##### ########################################### @@ -333,6 +337,7 @@ if ($non_latin < 1) $qm_dispo_code = preg_replace("/[^-\.\_0-9a-zA-Z]/","",$qm_dispo_code); $alt_user = preg_replace("/[^0-9a-zA-Z]/","",$alt_user); $postal_code = preg_replace("/[^- \.\_0-9a-zA-Z]/","",$postal_code); + $agent_debug = preg_replace("/[^- \.\:\|\_0-9a-zA-Z]/","",$agent_debug); } else { @@ -1449,6 +1454,37 @@ if ($function == 'audio_playback') api_log($link,$api_logging,$api_script,$user,$agent_user,$function,$value,$result,$result_reason,$source,$data); } } + + if ($source == 'soundboard') + { + ### log any events that are sent from agent sub-screens + if ( (strlen($agent_debug) > 1) and ($SSagent_debug_logging > 0) ) + { + $endMS = microtime(); + $startMSary = explode(" ",$startMS); + $endMSary = explode(" ",$endMS); + $runS = ($endMSary[0] - $startMSary[0]); + $runM = ($endMSary[1] - $startMSary[1]); + $TOTALrun = ($runS + $runM); + $cd=0; + $agent_debug = preg_replace("/\|$/",'',$agent_debug); + $debug_details = explode('|',$agent_debug); + $debug_details_ct = count($debug_details); + while($cd < $debug_details_ct) + { + $debug_data = explode('-----',$debug_details[$cd]); + $debug_time = $debug_data[0]; + $debug_function_data = explode('---',$debug_data[1]); + $debug_function = $debug_function_data[0]; + $debug_options = $debug_function_data[1]; + + $stmtA="INSERT INTO vicidial_ajax_log set user='$agent_user',start_time='$debug_time',db_time=NOW(),run_time='$TOTALrun',php_script='api.php',action='$debug_function',stage='$cd|$debug_options',last_sql='';"; + $rslt=mysql_to_mysqli($stmtA, $link); + + $cd++; + } + } + } } ################################################################################ ### END - audio_playback diff --git a/www/agc/vdc_soundboard_display.php b/www/agc/vdc_soundboard_display.php new file mode 100644 index 00000000..787d2639 --- /dev/null +++ b/www/agc/vdc_soundboard_display.php @@ -0,0 +1,817 @@ + LICENSE: AGPLv2 +# +# This script is designed display the contents of an audio soundboard in the system +# +# CHANGELOG: +# 140708-1030 - First build of script +# 141126-0754 - Code updates and added progress timer within top STOP button +# 141216-2135 - Added language settings lookups and user/pass variable standardization +# 160428-1848 - Fix for user_authorization +# 161103-1656 - Added Agent Debug Logging +# + +$version = '2.12-5'; +$build = '161103-1656'; + +require_once("dbconnect_mysqli.php"); +require_once("functions.php"); + +$bcrypt=1; + +if (isset($_GET["DB"])) {$DB=$_GET["DB"];} + elseif (isset($_POST["DB"])) {$DB=$_POST["DB"];} +if (isset($_GET["soundboard_id"])) {$soundboard_id=$_GET["soundboard_id"];} + elseif (isset($_POST["soundboard_id"])) {$soundboard_id=$_POST["soundboard_id"];} +if (isset($_GET["avatar_id"])) {$avatar_id=$_GET["avatar_id"];} + elseif (isset($_POST["avatar_id"])) {$avatar_id=$_POST["avatar_id"];} +if (isset($_GET["user"])) {$user=$_GET["user"];} + elseif (isset($_POST["user"])) {$user=$_POST["user"];} +if (isset($_GET["pass"])) {$pass=$_GET["pass"];} + elseif (isset($_POST["pass"])) {$pass=$_POST["pass"];} +if (isset($_GET["server_ip"])) {$server_ip=$_GET["server_ip"];} + elseif (isset($_POST["server_ip"])) {$server_ip=$_POST["server_ip"];} +if (isset($_GET["session_id"])) {$session_id=$_GET["session_id"];} + elseif (isset($_POST["session_id"])) {$session_id=$_POST["session_id"];} +if (isset($_GET["session_name"])) {$session_name=$_GET["session_name"];} + elseif (isset($_POST["session_name"])) {$session_name=$_POST["session_name"];} +if (isset($_GET["stage"])) {$stage=$_GET["stage"];} + elseif (isset($_POST["stage"])) {$stage=$_POST["stage"];} +if (isset($_GET["submit_button"])) {$submit_button=$_GET["submit_button"];} + elseif (isset($_POST["submit_button"])) {$submit_button=$_POST["submit_button"];} +if (isset($_GET["admin_submit"])) {$admin_submit=$_GET["admin_submit"];} + elseif (isset($_POST["admin_submit"])) {$admin_submit=$_POST["admin_submit"];} +if (isset($_GET["bgcolor"])) {$bgcolor=$_GET["bgcolor"];} + elseif (isset($_POST["bgcolor"])) {$bgcolor=$_POST["bgcolor"];} +if (isset($_GET["bcrypt"])) {$bcrypt=$_GET["bcrypt"];} + elseif (isset($_POST["bcrypt"])) {$bcrypt=$_POST["bcrypt"];} + + +if ($bcrypt == 'OFF') + {$bcrypt=0;} + +header ("Content-type: text/html; charset=utf-8"); +header ("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 +header ("Pragma: no-cache"); // HTTP/1.0 + +$txt = '.txt'; +$StarTtime = date("U"); +$NOW_DATE = date("Y-m-d"); +$NOW_TIME = date("Y-m-d H:i:s"); +$CIDdate = date("mdHis"); +$ENTRYdate = date("YmdHis"); +$MT[0]=''; +$agents='@agents'; +$script_height = ($script_height - 20); +if (strlen($bgcolor) < 6) {$bgcolor='FFFFFF';} + +$IFRAME=0; +$wav='.wav'; +$gsm='.gsm'; + +$user = preg_replace("/\'|\"|\\\\|;| /","",$user); +$pass = preg_replace("/\'|\"|\\\\|;| /","",$pass); + +############################################# +##### START SYSTEM_SETTINGS AND USER LANGUAGE LOOKUP ##### +$VUselected_language = ''; +$stmt="SELECT selected_language from vicidial_users where user='$user';"; +if ($DB) {echo "|$stmt|\n";} +$rslt=mysql_to_mysqli($stmt, $link); + if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'00XXX',$user,$server_ip,$session_name,$one_mysql_log);} +$sl_ct = mysqli_num_rows($rslt); +if ($sl_ct > 0) + { + $row=mysqli_fetch_row($rslt); + $VUselected_language = $row[0]; + } + +$stmt = "SELECT use_non_latin,timeclock_end_of_day,agentonly_callback_campaign_lock,active_modules,enable_languages,language_method,agent_soundboards FROM system_settings;"; +$rslt=mysql_to_mysqli($stmt, $link); +if ($DB) {echo "$stmt\n";} +$qm_conf_ct = mysqli_num_rows($rslt); +if ($qm_conf_ct > 0) + { + $row=mysqli_fetch_row($rslt); + $non_latin = $row[0]; + $timeclock_end_of_day = $row[1]; + $agentonly_callback_campaign_lock = $row[2]; + $active_modules = $row[3]; + $SSenable_languages = $row[4]; + $SSlanguage_method = $row[5]; + $SSagent_soundboards = $row[6]; + } +##### END SETTINGS LOOKUP ##### +########################################### + +if ($non_latin < 1) + { + $user=preg_replace("/[^-_0-9a-zA-Z]/","",$user); + $soundboard_id=preg_replace("/[^-_0-9a-zA-Z]/","",$soundboard_id); + $avatar_id=preg_replace("/[^-_0-9a-zA-Z]/","",$avatar_id); + $session_name=preg_replace("/[^-_0-9a-zA-Z]/","",$session_name); + } +else + { + $soundboard_id=preg_replace("/\'|\"|\\\\|;| /","",$soundboard_id); + $avatar_id=preg_replace("/\'|\"|\\\\|;| /","",$avatar_id); + $session_name=preg_replace("/[^-_0-9a-zA-Z]/","",$session_name); + } + + +# default optional vars if not set +if (!isset($format)) {$format="text";} + if ($format == 'debug') {$DB=1;} +if (!isset($ACTION)) {$ACTION="refresh";} +if (!isset($query_date)) {$query_date = $NOW_DATE;} +if ( (strlen($soundboard_id) < 1) and (strlen($avatar_id) > 0) ) {$soundboard_id=$avatar_id;} + +$auth=0; +$auth_message = user_authorization($user,$pass,'',0,$bcrypt,0,0); +if ($auth_message == 'GOOD') + {$auth=1;} + +$stmt="SELECT count(*) from vicidial_users where user='$user' and ( (modify_audiostore='1') or (modify_scripts='1') );"; +if ($DB) {echo "|$stmt|\n";} +$rslt=mysql_to_mysqli($stmt, $link); +$row=mysqli_fetch_row($rslt); +$VUmodify=$row[0]; + +$stmt="SELECT count(*) from vicidial_live_agents where user='$user';"; +if ($DB) {echo "|$stmt|\n";} +$rslt=mysql_to_mysqli($stmt, $link); +$row=mysqli_fetch_row($rslt); +$LVAactive=$row[0]; + +$stmt="SELECT count(*) from web_client_sessions where session_name='$session_name';"; +if ($DB) {echo "|$stmt|\n";} +$rslt=mysql_to_mysqli($stmt, $link); +$row=mysqli_fetch_row($rslt); +$WCSactive=$row[0]; + +if ( (!preg_match("/soundboard/i",$active_modules)) and ($SSagent_soundboards < 1) ) + { + echo _QXZ("Soundboards disabled on your system")."\n"; + exit; + } + +if ( (strlen($user)<2) or (strlen($pass)<2) or ($auth==0) or ( ( ($LVAactive < 1) or ($WCSactive < 1) ) and ($VUmodify < 1) ) ) + { + echo _QXZ("Invalid Username/Password").": |$user|$pass|$auth_message|$LVAactive|$WCSactive|$VUmodify|\n"; + exit; + } +else + { + # do nothing for now + } + +$stmt="SELECT avatar_id,avatar_name,avatar_notes,avatar_api_user,avatar_api_pass,active,audio_functions,user_group,audio_display from vicidial_avatars where avatar_id='$soundboard_id' and active='Y';"; +if ($DB) {echo "$stmt\n";} +$rslt=mysql_to_mysqli($stmt, $link); +$soundboard_ct = mysqli_num_rows($rslt); +if ($soundboard_ct > 0) + { + $row=mysqli_fetch_row($rslt); + $soundboard_id = $row[0]; + $avatar_name = $row[1]; + $avatar_notes = $row[2]; + $avatar_api_user = $row[3]; + $avatar_api_set = $row[4]; + $active = $row[5]; + $audio_functions = $row[6]; + $user_group = $row[7]; + $audio_display = $row[8]; + } +else + { + echo _QXZ("error: soundboard not valid")."\n"; + exit; + } + + +$stmt="SELECT vdc_agent_api_access,user_level from vicidial_users where user='$avatar_api_user' and active='Y' and vdc_agent_api_access='1';"; +if ($DB) {echo "$stmt\n";} +$rslt=mysql_to_mysqli($stmt, $link); +$api_user_ct = mysqli_num_rows($rslt); +if ($api_user_ct > 0) + { + $row=mysqli_fetch_row($rslt); + $api_access = $row[0]; + $api_level = $row[1]; + } +else + { + echo _QXZ("error: API user not valid")."\n"; + exit; + } +$api_set_enc = base64_encode($avatar_api_set); + +### BEGIN display soundboard content ### +echo "\n"; +echo "
\n"; +echo "\n"; +echo "|
+
+
+ + + + - + + + + + - + + + + + - + + + + + - + + + + + - + + + + + - + + + + + - + + + + + - + + + + + - + + + + + - + + + + + - + + + + + - + + + + + - + + + + + - + + + + + - + + |
| \n";
+ echo "";
+
+ echo " "._QXZ("ADD NEW SOUNDBOARD ENTRY")." |