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 ""._QXZ("Agent Audio Soundboard Display Script")."\n"; +?> + + +\n"; +echo "\n"; +echo ""; +echo "\n"; + +echo "
\n"; +echo "\n"; +echo "\n"; + +##### get files listing for display +$stmt="SELECT audio_filename,audio_name,rank,level,parent_audio_filename,parent_rank,h_ord from vicidial_avatar_audio where avatar_id='$soundboard_id' and level='1' order by rank,h_ord;"; +if ($DB) {echo "$stmt\n";} +$rsltx=mysql_to_mysqli($stmt, $link); +$soundboardfiles_to_print = mysqli_num_rows($rsltx); +$levels = 2; +$ranks=0; +$rank_max_count=0; +$o=0; +while ($soundboardfiles_to_print > $o) + { + $rowx=mysqli_fetch_row($rsltx); + $Aaudio_filename[$o] = $rowx[0]; + $Aaudio_name[$o] = $rowx[1]; + $Arank[$o] = $rowx[2]; + $Alevel[$o] = $rowx[3]; + $Aparent_audio_filename[$o] = $rowx[4]; + $Aparent_rank[$o] = $rowx[5]; + $Ah_ord[$o] = $rowx[6]; + if ($o == 0) + { + $Uranks[$ranks] = $Arank[$o]; + $Rcount[$ranks]=1; + $rank_max_count=1; + $ranks++; + } + else + { + $rc=0; + $rc_found=0; + while($rc < $ranks) + { + if ($Arank[$o] == $Uranks[$rc]) + { + $Rcount[$rc]++; + if ($rank_max_count < $Rcount[$rc]) + {$rank_max_count = $Rcount[$rc];} + $rc_found++; + } + $rc++; + } + if ($rc_found < 1) + { + $Uranks[$ranks] = $Arank[$o]; + $Rcount[$ranks]=1; + $ranks++; + } + } + $o++; + } + +$stmt="SELECT count(*) as tally,parent_rank,rank from vicidial_avatar_audio where avatar_id='$soundboard_id' and level='2' group by parent_rank,rank order by tally desc limit 1;"; +if ($DB) {echo "$stmt\n";} +$rslty=mysql_to_mysqli($stmt, $link); +$max_kids_rows = mysqli_num_rows($rslty); +if ($max_kids_rows > 0) + { + $rowC=mysqli_fetch_row($rslty); + $max_kids_cells = $rowC[0]; + if ($max_kids_cells > $rank_max_count) + {$rank_max_count = $max_kids_cells;} + } + +### count number of entries for each unique rank +$o=0; +while($o < $ranks) + { + $Rtally[$o]=0; + if ($DB > 0) {echo "$Uranks[$o] - $Rcount[$o] - $ranks - $rank_max_count - $max_kids_cells
\n";} + $o++; + } +if ($DB > 0) {echo _QXZ("Max rank count").": $rank_max_count
\n";} + + +echo "
\n"; +echo ""; +echo ""; +if (preg_match("/STOP/",$audio_functions)) + {echo "";} +else + {echo "";} +echo ""; +echo "
$avatar_name"._QXZ("stop audio")."          
\n"; +echo "\n"; + +### generate display tables +$o=0; +while ($soundboardfiles_to_print > $o) + { + $ro = ($o + 1); + $display_button=''; + if (preg_match("/FILE/",$audio_display)) + {$display_button .= " $Aaudio_filename[$o]";} + if (preg_match("/NAME/",$audio_display)) + { + if (strlen($display_button) > 1) + {$display_button .= " - ";} + $display_button .= " $Aaudio_name[$o]"; + } + + $rc=0; + $rc_found=0; + $Rcolspan=1; + $tr_begin=''; + $tr_end=''; + + while($rc < $ranks) + { + if ($Arank[$o] == $Uranks[$rc]) + { + if ($Rtally[$rc] == '0') + { + $tr_begin=''; + } + if ($Rcount[$rc] == '1') + { + $Rcolspan = ($rank_max_count + 1); + $tr_end=''; + } + else + { + $Rtally[$rc]++; + if ($Rtally[$rc] == 1) + {$Rcolspan=2;} + else + {$Rcolspan=1;} + if ($Rcount[$rc] == $Rtally[$rc]) + { + $Rdiff = ($rank_max_count - $Rtally[$rc]); + $Rcolspan = ($Rcolspan + $Rdiff); + $tr_end=''; + } + } + } + $rc++; + } + + $audio_length=0; + $stmt="SELECT audio_length from audio_store_details where audio_filename IN('$Aaudio_filename[$o]$wav','$Aaudio_filename[$o]$gsm') order by audio_length desc limit 1;"; + if ($DB) {echo "$stmt\n";} + $rslty=mysql_to_mysqli($stmt, $link); + $al_ct = mysqli_num_rows($rslty); + if ($al_ct > 0) + { + $rowD=mysqli_fetch_row($rslty); + $audio_length = $rowD[0]; + if ($audio_length < 1) + {$audio_length = '1';} + } + + echo "$tr_begin"; + echo "$tr_end\n"; + + if (strlen($tr_end)>4) + { + $stmt="SELECT audio_filename,audio_name,rank,level,parent_audio_filename,parent_rank,h_ord from vicidial_avatar_audio where avatar_id='$soundboard_id' and level='2' and parent_rank='$Arank[$o]' order by parent_audio_filename,rank,h_ord;"; + # and parent_audio_filename='$Aaudio_filename[$o]' removed for multi-entries per line + if ($DB) {echo "$stmt\n";} + $rslty=mysql_to_mysqli($stmt, $link); + $Csoundboardfiles_to_print = mysqli_num_rows($rslty); + $Clevels = 2; + $Cranks=0; + $Crank_max_count=0; + $Co=0; + while ($Csoundboardfiles_to_print > $Co) + { + $rowC=mysqli_fetch_row($rslty); + $Caudio_filename[$Co] = $rowC[0]; + $Caudio_name[$Co] = $rowC[1]; + $Crank[$Co] = $rowC[2]; + $Clevel[$Co] = $rowC[3]; + $Cparent_audio_filename[$Co] = $rowC[4]; + $Cparent_rank[$Co] = $rowC[5]; + $Ch_ord[$Co] = $rowC[6]; + if ($Co == 0) + { + $CUranks[$Cranks] = $Crank[$Co]; + $CRcount[$Cranks]=1; + $Crank_max_count=1; + $Cranks++; + } + else + { + $rc=0; + $rc_found=0; + while($rc < $Cranks) + { + if ($Crank[$Co] == $CUranks[$rc]) + { + $CRcount[$rc]++; + if ($Crank_max_count < $CRcount[$rc]) + {$Crank_max_count = $CRcount[$rc];} + $rc_found++; + } + $rc++; + } + if ($rc_found < 1) + { + $CUranks[$Cranks] = $Crank[$Co]; + $CRcount[$Cranks]=1; + $Cranks++; + } + } + $Co++; + } + + ### count number of entries for each unique rank + $Co=0; + while($Co < $Cranks) + { + $CRtally[$Co]=0; + if ($DB > 0) {echo "$CUranks[$Co] - $CRcount[$Co] - $Cranks - $Crank_max_count
\n";} + $Co++; + } + if ($DB > 0) {echo _QXZ("Max rank count").": $Crank_max_count
\n";} + + $Co=0; + while ($Csoundboardfiles_to_print > $Co) + { + $ro = ($Co + 1); + $display_button=''; + if (preg_match("/FILE/",$audio_display)) + {$display_button .= " $Caudio_filename[$Co]";} + if (preg_match("/NAME/",$audio_display)) + { + if (strlen($display_button) > 1) + {$display_button .= " - ";} + $display_button .= " $Caudio_name[$Co]"; + } + + $rc=0; + $rc_found=0; + $CRcolspan=1; + $tr_begin=''; + $tr_end=''; + + while($rc < $Cranks) + { + if ($Crank[$Co] == $CUranks[$rc]) + { + if ($CRtally[$rc] == '0') + { + $tr_begin=''; + } + if ($CRcount[$rc] == '1') + { + $CRcolspan = $rank_max_count; + $tr_end=''; + } + else + { + $CRtally[$rc]++; + $CRcolspan=1; + if ($CRcount[$rc] == $CRtally[$rc]) + { + $CRdiff = ($rank_max_count - $CRtally[$rc]); + $CRcolspan = ($CRcolspan + $CRdiff); + $tr_end=''; + } + } + } + $rc++; + } + + $audio_length=0; + $stmt="SELECT audio_length from audio_store_details where audio_filename IN('$Caudio_filename[$Co]$wav','$Caudio_filename[$Co]$gsm') order by audio_length desc limit 1;"; + if ($DB) {echo "$stmt\n";} + $rslty=mysql_to_mysqli($stmt, $link); + $al_ct = mysqli_num_rows($rslty); + if ($al_ct > 0) + { + $rowD=mysqli_fetch_row($rslty); + $audio_length = $rowD[0]; + if ($audio_length < 1) + {$audio_length = '1';} + } + + echo "$tr_begin"; + echo "$tr_end\n"; + + $Co++; + } + } + $o++; + } + +echo "
$ro. $display_button
 
$ro. $display_button

\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"; +### END display soundboard content ### + +exit; + +?> diff --git a/www/vicidial/admin.php b/www/vicidial/admin.php index d19e0919..f2117b4e 100644 --- a/www/vicidial/admin.php +++ b/www/vicidial/admin.php @@ -2121,6 +2121,10 @@ if (isset($_GET["allow_required_fields"])) {$allow_required_fields=$_GET["allo elseif (isset($_POST["allow_required_fields"])) {$allow_required_fields=$_POST["allow_required_fields"];} if (isset($_GET["agent_xfer_park_3way"])) {$agent_xfer_park_3way=$_GET["agent_xfer_park_3way"];} elseif (isset($_POST["agent_xfer_park_3way"])) {$agent_xfer_park_3way=$_POST["agent_xfer_park_3way"];} +if (isset($_GET["agent_soundboards"])) {$agent_soundboards=$_GET["agent_soundboards"];} + elseif (isset($_POST["agent_soundboards"])) {$agent_soundboards=$_POST["agent_soundboards"];} +if (isset($_GET["web_loader_phone_length"])) {$web_loader_phone_length=$_GET["web_loader_phone_length"];} + elseif (isset($_POST["web_loader_phone_length"])) {$web_loader_phone_length=$_POST["web_loader_phone_length"];} if (isset($script_id)) {$script_id= strtoupper($script_id);} @@ -2135,7 +2139,7 @@ if (strlen($dial_status) > 0) ############################################# ##### START SYSTEM_SETTINGS LOOKUP ##### -$stmt = "SELECT use_non_latin,enable_queuemetrics_logging,enable_vtiger_integration,qc_features_active,outbound_autodial_active,sounds_central_control_active,enable_second_webform,user_territories_active,custom_fields_enabled,admin_web_directory,webphone_url,first_login_trigger,hosted_settings,default_phone_registration_password,default_phone_login_password,default_server_password,test_campaign_calls,active_voicemail_server,voicemail_timezones,default_voicemail_timezone,default_local_gmt,campaign_cid_areacodes_enabled,pllb_grouping_limit,did_ra_extensions_enabled,expanded_list_stats,contacts_enabled,alt_log_server_ip,alt_log_dbname,alt_log_login,alt_log_pass,tables_use_alt_log_db,call_menu_qualify_enabled,admin_list_counts,allow_voicemail_greeting,svn_revision,allow_emails,level_8_disable_add,pass_key,pass_hash_enabled,disable_auto_dial,country_code_list_stats,frozen_server_call_clear,active_modules,allow_chats,enable_languages,language_method,meetme_enter_login_filename,meetme_enter_leave3way_filename,enable_did_entry_list_id,enable_third_webform,default_language,user_hide_realtime_enabled,log_recording_access,alt_ivr_logging,admin_row_click,admin_screen_colors,ofcom_uk_drop_calc,agent_screen_colors,script_remove_js,manual_auto_next,user_new_lead_limit,agent_xfer_park_3way FROM system_settings;"; +$stmt = "SELECT use_non_latin,enable_queuemetrics_logging,enable_vtiger_integration,qc_features_active,outbound_autodial_active,sounds_central_control_active,enable_second_webform,user_territories_active,custom_fields_enabled,admin_web_directory,webphone_url,first_login_trigger,hosted_settings,default_phone_registration_password,default_phone_login_password,default_server_password,test_campaign_calls,active_voicemail_server,voicemail_timezones,default_voicemail_timezone,default_local_gmt,campaign_cid_areacodes_enabled,pllb_grouping_limit,did_ra_extensions_enabled,expanded_list_stats,contacts_enabled,alt_log_server_ip,alt_log_dbname,alt_log_login,alt_log_pass,tables_use_alt_log_db,call_menu_qualify_enabled,admin_list_counts,allow_voicemail_greeting,svn_revision,allow_emails,level_8_disable_add,pass_key,pass_hash_enabled,disable_auto_dial,country_code_list_stats,frozen_server_call_clear,active_modules,allow_chats,enable_languages,language_method,meetme_enter_login_filename,meetme_enter_leave3way_filename,enable_did_entry_list_id,enable_third_webform,default_language,user_hide_realtime_enabled,log_recording_access,alt_ivr_logging,admin_row_click,admin_screen_colors,ofcom_uk_drop_calc,agent_screen_colors,script_remove_js,manual_auto_next,user_new_lead_limit,agent_xfer_park_3way,agent_soundboards,web_loader_phone_length FROM system_settings;"; $rslt=mysql_to_mysqli($stmt, $link); if ($DB) {echo "$stmt\n";} $qm_conf_ct = mysqli_num_rows($rslt); @@ -2204,6 +2208,8 @@ if ($qm_conf_ct > 0) $SSmanual_auto_next = $row[59]; $SSuser_new_lead_limit = $row[60]; $SSagent_xfer_park_3way = $row[61]; + $SSagent_soundboards = $row[62]; + $SSweb_loader_phone_length = $row[63]; } ##### END SETTINGS LOOKUP ##### ########################################### @@ -2508,6 +2514,7 @@ if ($non_latin < 1) $outbound_alt_cid = preg_replace('/[^0-9]/','',$outbound_alt_cid); $script_remove_js = preg_replace('/[^0-9]/','',$script_remove_js); $manual_auto_next = preg_replace('/[^0-9]/','',$manual_auto_next); + $agent_soundboards = preg_replace('/[^0-9]/','',$agent_soundboards); $user_new_lead_limit = preg_replace('/[^-0-9]/','',$user_new_lead_limit); $drop_call_seconds = preg_replace('/[^-0-9]/','',$drop_call_seconds); @@ -2982,6 +2989,7 @@ if ($non_latin < 1) $colors_id = preg_replace('/[^-_0-9a-zA-Z]/','',$colors_id); $agent_screen_colors = preg_replace('/[^-_0-9a-zA-Z]/','',$agent_screen_colors); $customer_chat_screen_colors = preg_replace('/[^-_0-9a-zA-Z]/','',$customer_chat_screen_colors); + $web_loader_phone_length = preg_replace('/[^-_0-9a-zA-Z]/','',$web_loader_phone_length); ### ALPHA-NUMERIC and underscore and dash and slash and dot $menu_timeout_prompt = preg_replace('/[^-\/\|\._0-9a-zA-Z]/','',$menu_timeout_prompt); @@ -3880,12 +3888,13 @@ else # 161029-2304 - Added rec_prompt_count display to system settings # 161031-1415 - Added User Overall user_new_lead_limit # 161102-1040 - Fixed QM partition problem +# 161103-2204 - Added web_loader_phone_length and agent soundboards # # make sure you have added a user to the vicidial_users MySQL table with at least user_level 9 to access this page the first time -$admin_version = '2.12-572a'; -$build = '161102-1040'; +$admin_version = '2.12-573a'; +$build = '161103-2204'; $STARTtime = date("U"); $SQLdate = date("Y-m-d H:i:s"); @@ -15935,7 +15944,7 @@ if ($ADD==411111111111111) $custom_reports_slave_SQL=",custom_reports_use_slave_db='$custom_reports_slave_SQL'"; } - $stmt="UPDATE system_settings set use_non_latin='$use_non_latin',webroot_writable='$webroot_writable',enable_queuemetrics_logging='$enable_queuemetrics_logging',queuemetrics_server_ip='$queuemetrics_server_ip',queuemetrics_dbname='$queuemetrics_dbname',queuemetrics_login='$queuemetrics_login',queuemetrics_pass='$queuemetrics_pass',queuemetrics_url='$queuemetrics_url',queuemetrics_log_id='$queuemetrics_log_id',queuemetrics_eq_prepend='$queuemetrics_eq_prepend',vicidial_agent_disable='$vicidial_agent_disable',allow_sipsak_messages='$allow_sipsak_messages',admin_home_url='$admin_home_url',enable_agc_xfer_log='$enable_agc_xfer_log',timeclock_end_of_day='$timeclock_end_of_day',vdc_header_date_format='$vdc_header_date_format',vdc_customer_date_format='$vdc_customer_date_format',vdc_header_phone_format='$vdc_header_phone_format',vdc_agent_api_active='$vdc_agent_api_active',enable_vtiger_integration='$enable_vtiger_integration',vtiger_server_ip='$vtiger_server_ip',vtiger_dbname='$vtiger_dbname',vtiger_login='$vtiger_login',vtiger_pass='$vtiger_pass',vtiger_url='$vtiger_url',qc_features_active='$qc_features_active',outbound_autodial_active='$outbound_autodial_active',outbound_calls_per_second='$outbound_calls_per_second',enable_tts_integration='$enable_tts_integration',agentonly_callback_campaign_lock='$agentonly_callback_campaign_lock',sounds_central_control_active='$sounds_central_control_active',sounds_web_server='$sounds_web_server',sounds_web_directory='$sounds_web_directory',active_voicemail_server='$active_voicemail_server',auto_dial_limit='$auto_dial_limit',user_territories_active='$user_territories_active',allow_custom_dialplan='$allow_custom_dialplan',enable_second_webform='$enable_second_webform',default_webphone='$default_webphone',default_external_server_ip='$default_external_server_ip',webphone_url='" . mysqli_real_escape_string($link, $webphone_url) . "',enable_agc_dispo_log='$enable_agc_dispo_log',queuemetrics_loginout='$queuemetrics_loginout',callcard_enabled='$callcard_enabled',queuemetrics_callstatus='$queuemetrics_callstatus',default_codecs='$default_codecs',admin_web_directory='$admin_web_directory',label_title='$label_title',label_first_name='$label_first_name',label_middle_initial='$label_middle_initial',label_last_name='$label_last_name',label_address1='$label_address1',label_address2='$label_address2',label_address3='$label_address3',label_city='$label_city',label_state='$label_state',label_province='$label_province',label_postal_code='$label_postal_code',label_vendor_lead_code='$label_vendor_lead_code',label_gender='$label_gender',label_phone_number='$label_phone_number',label_phone_code='$label_phone_code',label_alt_phone='$label_alt_phone',label_security_phrase='$label_security_phrase',label_email='$label_email',label_comments='$label_comments',custom_fields_enabled='$custom_fields_enabled',slave_db_server='$slave_db_server',reports_use_slave_db='$reports_use_slave_db'$custom_reports_slave_SQL,webphone_systemkey='$webphone_systemkey',first_login_trigger='$first_login_trigger',default_phone_registration_password='$default_phone_registration_password',default_phone_login_password='$default_phone_login_password',default_server_password='$default_server_password',admin_modify_refresh='$admin_modify_refresh',nocache_admin='$nocache_admin',generate_cross_server_exten='$generate_cross_server_exten',queuemetrics_addmember_enabled='$queuemetrics_addmember_enabled',queuemetrics_dispo_pause='$queuemetrics_dispo_pause',label_hide_field_logs='$label_hide_field_logs',queuemetrics_pe_phone_append='$queuemetrics_pe_phone_append',test_campaign_calls='$test_campaign_calls',agents_calls_reset='$agents_calls_reset',default_voicemail_timezone='$default_voicemail_timezone',default_local_gmt='$default_local_gmt',noanswer_log='$noanswer_log',alt_log_server_ip='$alt_log_server_ip',alt_log_dbname='$alt_log_dbname',alt_log_login='$alt_log_login',alt_log_pass='$alt_log_pass',tables_use_alt_log_db='$tables_use_alt_log_db',did_agent_log='$did_agent_log',campaign_cid_areacodes_enabled='$campaign_cid_areacodes_enabled',pllb_grouping_limit='$pllb_grouping_limit',did_ra_extensions_enabled='$did_ra_extensions_enabled',expanded_list_stats='$expanded_list_stats',contacts_enabled='$contacts_enabled',call_menu_qualify_enabled='$call_menu_qualify_enabled',admin_list_counts='$admin_list_counts',allow_voicemail_greeting='$allow_voicemail_greeting',queuemetrics_socket='$queuemetrics_socket',queuemetrics_socket_url='$queuemetrics_socket_url',enhanced_disconnect_logging='$enhanced_disconnect_logging',allow_emails='$allow_emails',level_8_disable_add='$level_8_disable_add',queuemetrics_record_hold='$queuemetrics_record_hold',country_code_list_stats='$country_code_list_stats',queuemetrics_pause_type='$queuemetrics_pause_type',frozen_server_call_clear='$frozen_server_call_clear',callback_time_24hour='$callback_time_24hour',enable_languages='$enable_languages',language_method='$language_method',meetme_enter_login_filename='$meetme_enter_login_filename',meetme_enter_leave3way_filename='$meetme_enter_leave3way_filename',enable_did_entry_list_id='$enable_did_entry_list_id',enable_third_webform='$enable_third_webform',allow_chats='$allow_chats',chat_url='$chat_url',chat_timeout='$chat_timeout',agent_debug_logging='$agent_debug_logging',default_language='$default_language',agent_whisper_enabled='$agent_whisper_enabled',user_hide_realtime_enabled='$user_hide_realtime_enabled',usacan_phone_dialcode_fix='$usacan_phone_dialcode_fix',cache_carrier_stats_realtime='$cache_carrier_stats_realtime',log_recording_access='$log_recording_access',report_default_format='$report_default_format',alt_ivr_logging='$alt_ivr_logging',default_phone_code='$default_phone_code',admin_row_click='$admin_row_click',admin_screen_colors='$admin_screen_colors',ofcom_uk_drop_calc='$ofcom_uk_drop_calc',agent_screen_colors='$agent_screen_colors',script_remove_js='$script_remove_js',manual_auto_next='$manual_auto_next',user_new_lead_limit='$user_new_lead_limit',agent_xfer_park_3way='$agent_xfer_park_3way'$custom_dialplanSQL;"; + $stmt="UPDATE system_settings set use_non_latin='$use_non_latin',webroot_writable='$webroot_writable',enable_queuemetrics_logging='$enable_queuemetrics_logging',queuemetrics_server_ip='$queuemetrics_server_ip',queuemetrics_dbname='$queuemetrics_dbname',queuemetrics_login='$queuemetrics_login',queuemetrics_pass='$queuemetrics_pass',queuemetrics_url='$queuemetrics_url',queuemetrics_log_id='$queuemetrics_log_id',queuemetrics_eq_prepend='$queuemetrics_eq_prepend',vicidial_agent_disable='$vicidial_agent_disable',allow_sipsak_messages='$allow_sipsak_messages',admin_home_url='$admin_home_url',enable_agc_xfer_log='$enable_agc_xfer_log',timeclock_end_of_day='$timeclock_end_of_day',vdc_header_date_format='$vdc_header_date_format',vdc_customer_date_format='$vdc_customer_date_format',vdc_header_phone_format='$vdc_header_phone_format',vdc_agent_api_active='$vdc_agent_api_active',enable_vtiger_integration='$enable_vtiger_integration',vtiger_server_ip='$vtiger_server_ip',vtiger_dbname='$vtiger_dbname',vtiger_login='$vtiger_login',vtiger_pass='$vtiger_pass',vtiger_url='$vtiger_url',qc_features_active='$qc_features_active',outbound_autodial_active='$outbound_autodial_active',outbound_calls_per_second='$outbound_calls_per_second',enable_tts_integration='$enable_tts_integration',agentonly_callback_campaign_lock='$agentonly_callback_campaign_lock',sounds_central_control_active='$sounds_central_control_active',sounds_web_server='$sounds_web_server',sounds_web_directory='$sounds_web_directory',active_voicemail_server='$active_voicemail_server',auto_dial_limit='$auto_dial_limit',user_territories_active='$user_territories_active',allow_custom_dialplan='$allow_custom_dialplan',enable_second_webform='$enable_second_webform',default_webphone='$default_webphone',default_external_server_ip='$default_external_server_ip',webphone_url='" . mysqli_real_escape_string($link, $webphone_url) . "',enable_agc_dispo_log='$enable_agc_dispo_log',queuemetrics_loginout='$queuemetrics_loginout',callcard_enabled='$callcard_enabled',queuemetrics_callstatus='$queuemetrics_callstatus',default_codecs='$default_codecs',admin_web_directory='$admin_web_directory',label_title='$label_title',label_first_name='$label_first_name',label_middle_initial='$label_middle_initial',label_last_name='$label_last_name',label_address1='$label_address1',label_address2='$label_address2',label_address3='$label_address3',label_city='$label_city',label_state='$label_state',label_province='$label_province',label_postal_code='$label_postal_code',label_vendor_lead_code='$label_vendor_lead_code',label_gender='$label_gender',label_phone_number='$label_phone_number',label_phone_code='$label_phone_code',label_alt_phone='$label_alt_phone',label_security_phrase='$label_security_phrase',label_email='$label_email',label_comments='$label_comments',custom_fields_enabled='$custom_fields_enabled',slave_db_server='$slave_db_server',reports_use_slave_db='$reports_use_slave_db'$custom_reports_slave_SQL,webphone_systemkey='$webphone_systemkey',first_login_trigger='$first_login_trigger',default_phone_registration_password='$default_phone_registration_password',default_phone_login_password='$default_phone_login_password',default_server_password='$default_server_password',admin_modify_refresh='$admin_modify_refresh',nocache_admin='$nocache_admin',generate_cross_server_exten='$generate_cross_server_exten',queuemetrics_addmember_enabled='$queuemetrics_addmember_enabled',queuemetrics_dispo_pause='$queuemetrics_dispo_pause',label_hide_field_logs='$label_hide_field_logs',queuemetrics_pe_phone_append='$queuemetrics_pe_phone_append',test_campaign_calls='$test_campaign_calls',agents_calls_reset='$agents_calls_reset',default_voicemail_timezone='$default_voicemail_timezone',default_local_gmt='$default_local_gmt',noanswer_log='$noanswer_log',alt_log_server_ip='$alt_log_server_ip',alt_log_dbname='$alt_log_dbname',alt_log_login='$alt_log_login',alt_log_pass='$alt_log_pass',tables_use_alt_log_db='$tables_use_alt_log_db',did_agent_log='$did_agent_log',campaign_cid_areacodes_enabled='$campaign_cid_areacodes_enabled',pllb_grouping_limit='$pllb_grouping_limit',did_ra_extensions_enabled='$did_ra_extensions_enabled',expanded_list_stats='$expanded_list_stats',contacts_enabled='$contacts_enabled',call_menu_qualify_enabled='$call_menu_qualify_enabled',admin_list_counts='$admin_list_counts',allow_voicemail_greeting='$allow_voicemail_greeting',queuemetrics_socket='$queuemetrics_socket',queuemetrics_socket_url='$queuemetrics_socket_url',enhanced_disconnect_logging='$enhanced_disconnect_logging',allow_emails='$allow_emails',level_8_disable_add='$level_8_disable_add',queuemetrics_record_hold='$queuemetrics_record_hold',country_code_list_stats='$country_code_list_stats',queuemetrics_pause_type='$queuemetrics_pause_type',frozen_server_call_clear='$frozen_server_call_clear',callback_time_24hour='$callback_time_24hour',enable_languages='$enable_languages',language_method='$language_method',meetme_enter_login_filename='$meetme_enter_login_filename',meetme_enter_leave3way_filename='$meetme_enter_leave3way_filename',enable_did_entry_list_id='$enable_did_entry_list_id',enable_third_webform='$enable_third_webform',allow_chats='$allow_chats',chat_url='$chat_url',chat_timeout='$chat_timeout',agent_debug_logging='$agent_debug_logging',default_language='$default_language',agent_whisper_enabled='$agent_whisper_enabled',user_hide_realtime_enabled='$user_hide_realtime_enabled',usacan_phone_dialcode_fix='$usacan_phone_dialcode_fix',cache_carrier_stats_realtime='$cache_carrier_stats_realtime',log_recording_access='$log_recording_access',report_default_format='$report_default_format',alt_ivr_logging='$alt_ivr_logging',default_phone_code='$default_phone_code',admin_row_click='$admin_row_click',admin_screen_colors='$admin_screen_colors',ofcom_uk_drop_calc='$ofcom_uk_drop_calc',agent_screen_colors='$agent_screen_colors',script_remove_js='$script_remove_js',manual_auto_next='$manual_auto_next',user_new_lead_limit='$user_new_lead_limit',agent_xfer_park_3way='$agent_xfer_park_3way',agent_soundboards='$agent_soundboards',web_loader_phone_length='$web_loader_phone_length'$custom_dialplanSQL;"; $rslt=mysql_to_mysqli($stmt, $link); if ( ($meetme_enter_login_filename != $SSmeetme_enter_login_filename) or ($meetme_enter_leave3way_filename != $SSmeetme_enter_leave3way_filename) ) @@ -32609,7 +32618,7 @@ if ($ADD==311111111111111) $ALLagent_count = $rowx[2]; } - $stmt="SELECT version,install_date,use_non_latin,webroot_writable,enable_queuemetrics_logging,queuemetrics_server_ip,queuemetrics_dbname,queuemetrics_login,queuemetrics_pass,queuemetrics_url,queuemetrics_log_id,queuemetrics_eq_prepend,vicidial_agent_disable,allow_sipsak_messages,admin_home_url,enable_agc_xfer_log,db_schema_version,auto_user_add_value,timeclock_end_of_day,timeclock_last_reset_date,vdc_header_date_format,vdc_customer_date_format,vdc_header_phone_format,vdc_agent_api_active,qc_last_pull_time,enable_vtiger_integration,vtiger_server_ip,vtiger_dbname,vtiger_login,vtiger_pass,vtiger_url,qc_features_active,outbound_autodial_active,outbound_calls_per_second,enable_tts_integration,agentonly_callback_campaign_lock,sounds_central_control_active,sounds_web_server,sounds_web_directory,active_voicemail_server,auto_dial_limit,user_territories_active,allow_custom_dialplan,db_schema_update_date,enable_second_webform,default_webphone,default_external_server_ip,webphone_url,enable_agc_dispo_log,custom_dialplan_entry,queuemetrics_loginout,callcard_enabled,queuemetrics_callstatus,default_codecs,admin_web_directory,label_title,label_first_name,label_middle_initial,label_last_name,label_address1,label_address2,label_address3,label_city,label_state,label_province,label_postal_code,label_vendor_lead_code,label_gender,label_phone_number,label_phone_code,label_alt_phone,label_security_phrase,label_email,label_comments,custom_fields_enabled,slave_db_server,reports_use_slave_db,webphone_systemkey,first_login_trigger,default_phone_registration_password,default_phone_login_password,default_server_password,admin_modify_refresh,nocache_admin,generate_cross_server_exten,queuemetrics_addmember_enabled,queuemetrics_dispo_pause,label_hide_field_logs,queuemetrics_pe_phone_append,test_campaign_calls,agents_calls_reset,default_voicemail_timezone,default_local_gmt,noanswer_log,alt_log_server_ip,alt_log_dbname,alt_log_login,alt_log_pass,tables_use_alt_log_db,did_agent_log,campaign_cid_areacodes_enabled,pllb_grouping_limit,did_ra_extensions_enabled,expanded_list_stats,contacts_enabled,call_menu_qualify_enabled,admin_list_counts,allow_voicemail_greeting,svn_revision,queuemetrics_socket,queuemetrics_socket_url,enhanced_disconnect_logging,allow_emails,level_8_disable_add,pass_hash_enabled,pass_key,pass_cost,disable_auto_dial,queuemetrics_record_hold,country_code_list_stats,reload_timestamp,queuemetrics_pause_type,frozen_server_call_clear,callback_time_24hour,allow_chats,chat_url,chat_timeout,enable_languages,language_method,meetme_enter_login_filename,meetme_enter_leave3way_filename,enable_did_entry_list_id,enable_third_webform,agent_debug_logging,default_language,agent_whisper_enabled,user_hide_realtime_enabled,usacan_phone_dialcode_fix,cache_carrier_stats_realtime,oldest_logs_date,log_recording_access,report_default_format,alt_ivr_logging,default_phone_code,admin_row_click,admin_screen_colors,ofcom_uk_drop_calc,agent_screen_colors,script_remove_js,manual_auto_next,user_new_lead_limit,agent_xfer_park_3way,rec_prompt_count from system_settings;"; + $stmt="SELECT version,install_date,use_non_latin,webroot_writable,enable_queuemetrics_logging,queuemetrics_server_ip,queuemetrics_dbname,queuemetrics_login,queuemetrics_pass,queuemetrics_url,queuemetrics_log_id,queuemetrics_eq_prepend,vicidial_agent_disable,allow_sipsak_messages,admin_home_url,enable_agc_xfer_log,db_schema_version,auto_user_add_value,timeclock_end_of_day,timeclock_last_reset_date,vdc_header_date_format,vdc_customer_date_format,vdc_header_phone_format,vdc_agent_api_active,qc_last_pull_time,enable_vtiger_integration,vtiger_server_ip,vtiger_dbname,vtiger_login,vtiger_pass,vtiger_url,qc_features_active,outbound_autodial_active,outbound_calls_per_second,enable_tts_integration,agentonly_callback_campaign_lock,sounds_central_control_active,sounds_web_server,sounds_web_directory,active_voicemail_server,auto_dial_limit,user_territories_active,allow_custom_dialplan,db_schema_update_date,enable_second_webform,default_webphone,default_external_server_ip,webphone_url,enable_agc_dispo_log,custom_dialplan_entry,queuemetrics_loginout,callcard_enabled,queuemetrics_callstatus,default_codecs,admin_web_directory,label_title,label_first_name,label_middle_initial,label_last_name,label_address1,label_address2,label_address3,label_city,label_state,label_province,label_postal_code,label_vendor_lead_code,label_gender,label_phone_number,label_phone_code,label_alt_phone,label_security_phrase,label_email,label_comments,custom_fields_enabled,slave_db_server,reports_use_slave_db,webphone_systemkey,first_login_trigger,default_phone_registration_password,default_phone_login_password,default_server_password,admin_modify_refresh,nocache_admin,generate_cross_server_exten,queuemetrics_addmember_enabled,queuemetrics_dispo_pause,label_hide_field_logs,queuemetrics_pe_phone_append,test_campaign_calls,agents_calls_reset,default_voicemail_timezone,default_local_gmt,noanswer_log,alt_log_server_ip,alt_log_dbname,alt_log_login,alt_log_pass,tables_use_alt_log_db,did_agent_log,campaign_cid_areacodes_enabled,pllb_grouping_limit,did_ra_extensions_enabled,expanded_list_stats,contacts_enabled,call_menu_qualify_enabled,admin_list_counts,allow_voicemail_greeting,svn_revision,queuemetrics_socket,queuemetrics_socket_url,enhanced_disconnect_logging,allow_emails,level_8_disable_add,pass_hash_enabled,pass_key,pass_cost,disable_auto_dial,queuemetrics_record_hold,country_code_list_stats,reload_timestamp,queuemetrics_pause_type,frozen_server_call_clear,callback_time_24hour,allow_chats,chat_url,chat_timeout,enable_languages,language_method,meetme_enter_login_filename,meetme_enter_leave3way_filename,enable_did_entry_list_id,enable_third_webform,agent_debug_logging,default_language,agent_whisper_enabled,user_hide_realtime_enabled,usacan_phone_dialcode_fix,cache_carrier_stats_realtime,oldest_logs_date,log_recording_access,report_default_format,alt_ivr_logging,default_phone_code,admin_row_click,admin_screen_colors,ofcom_uk_drop_calc,agent_screen_colors,script_remove_js,manual_auto_next,user_new_lead_limit,agent_xfer_park_3way,rec_prompt_count,agent_soundboards,web_loader_phone_length from system_settings;"; $rslt=mysql_to_mysqli($stmt, $link); $row=mysqli_fetch_row($rslt); $version = $row[0]; @@ -32765,6 +32774,8 @@ if ($ADD==311111111111111) $user_new_lead_limit = $row[150]; $agent_xfer_park_3way = $row[151]; $rec_prompt_count = $row[152]; + $agent_soundboards = $row[153]; + $web_loader_phone_length = $row[154]; if ($pass_hash_enabled > 0) {$pass_hash_enabled = 'ENABLED';} else {$pass_hash_enabled = 'DISABLED';} @@ -32897,6 +32908,7 @@ if ($ADD==311111111111111) echo "$NWB#settings-vdc_header_phone_format$NWE\n"; echo ""._QXZ("Agent API Active").": $NWB#settings-vdc_agent_api_active$NWE\n"; echo ""._QXZ("Agent Screen Park Xfer Button").": $NWB#settings-agent_xfer_park_3way$NWE\n"; + echo ""._QXZ("Agent Soundboards").": $NWB#settings-agent_soundboards$NWE\n"; echo ""._QXZ("Agent Only Callback Campaign Lock").": $NWB#settings-agentonly_callback_campaign_lock$NWE\n"; echo ""._QXZ("Callback Time 24 Hours").": $NWB#settings-callback_time_24hour$NWE\n"; @@ -32984,6 +32996,8 @@ if ($ADD==311111111111111) echo ""._QXZ("New Leads Per List Limit").": $NWB#settings-user_new_lead_limit$NWE\n"; + echo ""._QXZ("Web Lead Loader Phone Length").": $NWB#settings-web_loader_phone_length$NWE\n"; + echo ""._QXZ("Allow Custom Dialplan Entries").": $NWB#settings-allow_custom_dialplan$NWE\n"; echo ""._QXZ("PLLB Grouping Limit").": $NWB#settings-pllb_grouping_limit$NWE\n"; @@ -37037,7 +37051,7 @@ if ($ADD==999998) echo " "._QXZ("Languages")." \n"; echo "\n"; } - if (preg_match("/soundboard/",$SSactive_modules) ) + if ( (preg_match("/soundboard/",$SSactive_modules) ) or ($SSagent_soundboards > 0) ) { echo " 0) {echo " onclick=\"window.document.location='admin_soundboard.php?ADD=162000000000';\"";} echo ">\n"; echo " \n"; diff --git a/www/vicidial/admin_header.php b/www/vicidial/admin_header.php index 839509de..f0cc5af1 100644 --- a/www/vicidial/admin_header.php +++ b/www/vicidial/admin_header.php @@ -67,10 +67,11 @@ # 160611-2229 - Added style for diff on admin changes # 160617-1426 - Added link from screen colors to system settings screen color settings # 161101-2129 - Added user_new_lead_limit Users subhead +# 161103-2136 - Added agent_soundboards option # -$stmt="SELECT admin_home_url,enable_tts_integration,callcard_enabled,custom_fields_enabled,allow_emails,level_8_disable_add,allow_chats,enable_languages,admin_row_click,admin_screen_colors,user_new_lead_limit,user_territories_active,qc_features_active from system_settings;"; +$stmt="SELECT admin_home_url,enable_tts_integration,callcard_enabled,custom_fields_enabled,allow_emails,level_8_disable_add,allow_chats,enable_languages,admin_row_click,admin_screen_colors,user_new_lead_limit,user_territories_active,qc_features_active,agent_soundboards from system_settings;"; $rslt=mysql_to_mysqli($stmt, $link); $row=mysqli_fetch_row($rslt); $admin_home_url_LU = $row[0]; @@ -86,6 +87,7 @@ $SSadmin_screen_colors = $row[9]; $SSuser_new_lead_limit = $row[10]; $SSuser_territories_active = $row[11]; $SSqc_features_active = $row[12]; +$SSagent_soundboards = $row[13]; $SSmenu_background='015B91'; $SSframe_background='D9E6FE'; @@ -2002,7 +2004,7 @@ if ($subcamp_font_size < 4) {$subcamp_font_size='11';}   \"Users\" 0) ) { ?> 0) {echo " onclick=\"window.document.location='admin_soundboard.php?ADD=162000000000';\"";} ?>>>   @@ -2174,7 +2176,7 @@ if ($SSenable_languages == '1') ?> >     |     |     |     |     0) ) { if ( (strlen($soundboard_sh) > 25) and (strlen($admin_hh) > 25) ) { ?> diff --git a/www/vicidial/admin_listloader_fourth_gen.php b/www/vicidial/admin_listloader_fourth_gen.php index 01f10eb5..5a64323d 100644 --- a/www/vicidial/admin_listloader_fourth_gen.php +++ b/www/vicidial/admin_listloader_fourth_gen.php @@ -66,10 +66,11 @@ # 160102-1039 - Better special characters support # 160428-2359 - Fixed custom table bug # 160508-0757 - Added colors features +# 161103-2224 - Added web_loader_phone_length option # -$version = '2.12-64'; -$build = '160508-0757'; +$version = '2.12-65'; +$build = '161103-2224'; require("dbconnect_mysqli.php"); require("functions.php"); @@ -172,6 +173,9 @@ if (isset($_GET["usacan_check"])) {$usacan_check=$_GET["usacan_check"];} elseif (isset($_POST["usacan_check"])) {$usacan_check=$_POST["usacan_check"];} if (isset($_GET["state_conversion"])) {$state_conversion=$_GET["state_conversion"];} elseif (isset($_POST["state_conversion"])) {$state_conversion=$_POST["state_conversion"];} +if (isset($_GET["web_loader_phone_length"])) {$web_loader_phone_length=$_GET["web_loader_phone_length"];} + elseif (isset($_POST["web_loader_phone_length"])) {$web_loader_phone_length=$_POST["web_loader_phone_length"];} + if (strlen($dedupe_statuses_override)>0) { $dedupe_statuses=explode(",", $dedupe_statuses_override); @@ -189,21 +193,22 @@ $vicidial_list_fields = '|lead_id|vendor_lead_code|source_id|list_id|gmt_offset_ ############################################# ##### START SYSTEM_SETTINGS LOOKUP ##### -$stmt = "SELECT use_non_latin,admin_web_directory,custom_fields_enabled,webroot_writable,enable_languages,language_method,active_modules,admin_screen_colors FROM system_settings;"; +$stmt = "SELECT use_non_latin,admin_web_directory,custom_fields_enabled,webroot_writable,enable_languages,language_method,active_modules,admin_screen_colors,web_loader_phone_length 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]; - $admin_web_directory = $row[1]; - $custom_fields_enabled = $row[2]; - $webroot_writable = $row[3]; - $SSenable_languages = $row[4]; - $SSlanguage_method = $row[5]; - $SSactive_modules = $row[6]; - $SSadmin_screen_colors = $row[7]; + $non_latin = $row[0]; + $admin_web_directory = $row[1]; + $custom_fields_enabled = $row[2]; + $webroot_writable = $row[3]; + $SSenable_languages = $row[4]; + $SSlanguage_method = $row[5]; + $SSactive_modules = $row[6]; + $SSadmin_screen_colors = $row[7]; + $SSweb_loader_phone_length = $row[8]; } ##### END SETTINGS LOOKUP ##### ########################################### @@ -219,6 +224,7 @@ else $PHP_AUTH_USER = preg_replace("/'|\"|\\\\|;/","",$PHP_AUTH_USER); } $list_id_override = preg_replace('/[^0-9]/','',$list_id_override); +$web_loader_phone_length = preg_replace('/[^0-9]/','',$web_loader_phone_length); $STARTtime = date("U"); $TODAY = date("Y-m-d"); @@ -688,6 +694,21 @@ if ( (!$OK_to_process) or ( ($leadfile) and ($file_layout!="standard" && $file_l + + : + + " name='submit_file'>        " name='reload_page'> @@ -730,6 +751,11 @@ else : + + : + + + @@ -805,6 +831,10 @@ if ($OK_to_process) { print "
"._QXZ("CONVERSION OF STATE NAMES TO ABBREVIATIONS ENABLED").": $state_conversion
\n"; } + if ( (strlen($web_loader_phone_length)>0) and (strlen($web_loader_phone_length)< 3) ) + { + print "
"._QXZ("REQUIRED PHONE NUMBER LENGTH").": $web_loader_phone_length
\n"; + } if ($custom_fields_enabled > 0) { @@ -1135,11 +1165,16 @@ if ($OK_to_process) $valid_number=1; $invalid_reason=''; - if ( (strlen($phone_number)<6) || (strlen($phone_number)>16) ) + if ( (strlen($phone_number)<5) || (strlen($phone_number)>18) ) { $valid_number=0; $invalid_reason = _QXZ("INVALID PHONE NUMBER LENGTH"); } + if ( (strlen($web_loader_phone_length)>0) and (strlen($web_loader_phone_length)< 3) and ( (strlen($phone_number) > $web_loader_phone_length) or (strlen($phone_number) < $web_loader_phone_length) ) ) + { + $valid_number=0; + $invalid_reason = _QXZ("INVALID REQUIRED PHONE NUMBER LENGTH"); + } if ( (preg_match("/PREFIX/",$usacan_check)) and ($valid_number > 0) ) { $USprefix = substr($phone_number, 3, 1); @@ -1263,7 +1298,7 @@ if ($OK_to_process) } ### LOG INSERTION Admin Log Table ### - $stmt="INSERT INTO vicidial_admin_log set event_date='$NOW_TIME', user='$PHP_AUTH_USER', ip_address='$ip', event_section='LISTS', event_type='LOAD', record_id='$list_id_override', event_code='ADMIN LOAD LIST CUSTOM', event_sql='', event_notes='File Name: $leadfile_name, GOOD: $good, BAD: $bad, TOTAL: $total, DEBUG: dedupe_statuses:$dedupe_statuses[0]| dedupe_statuses_override:$dedupe_statuses_override| dupcheck:$dupcheck| lead_file:$lead_file| list_id_override:$list_id_override| phone_code_override:$phone_code_override| postalgmt:$postalgmt| template_id:$template_id| usacan_check:$usacan_check| state_conversion:$state_conversion|';"; + $stmt="INSERT INTO vicidial_admin_log set event_date='$NOW_TIME', user='$PHP_AUTH_USER', ip_address='$ip', event_section='LISTS', event_type='LOAD', record_id='$list_id_override', event_code='ADMIN LOAD LIST CUSTOM', event_sql='', event_notes='File Name: $leadfile_name, GOOD: $good, BAD: $bad, TOTAL: $total, DEBUG: dedupe_statuses:$dedupe_statuses[0]| dedupe_statuses_override:$dedupe_statuses_override| dupcheck:$dupcheck| lead_file:$lead_file| list_id_override:$list_id_override| phone_code_override:$phone_code_override| postalgmt:$postalgmt| template_id:$template_id| usacan_check:$usacan_check| state_conversion:$state_conversion| web_loader_phone_length:$web_loader_phone_length|';"; if ($DB) {echo "|$stmt|\n";} $rslt=mysql_to_mysqli($stmt, $link); @@ -1281,7 +1316,7 @@ if (($leadfile) && ($LF_path)) $total=0; $good=0; $bad=0; $dup=0; $post=0; $phone_list=''; ### LOG INSERTION Admin Log Table ### - $stmt="INSERT INTO vicidial_admin_log set event_date='$NOW_TIME', user='$PHP_AUTH_USER', ip_address='$ip', event_section='LISTS', event_type='LOAD', record_id='$list_id_override', event_code='ADMIN LOAD LIST', event_sql='', event_notes='File Name: $leadfile_name, DEBUG: dedupe_statuses:$dedupe_statuses[0]| dedupe_statuses_override:$dedupe_statuses_override| dupcheck:$dupcheck| lead_file:$lead_file| list_id_override:$list_id_override| phone_code_override:$phone_code_override| postalgmt:$postalgmt| template_id:$template_id| usacan_check:$usacan_check| state_conversion:$state_conversion|';"; + $stmt="INSERT INTO vicidial_admin_log set event_date='$NOW_TIME', user='$PHP_AUTH_USER', ip_address='$ip', event_section='LISTS', event_type='LOAD', record_id='$list_id_override', event_code='ADMIN LOAD LIST', event_sql='', event_notes='File Name: $leadfile_name, DEBUG: dedupe_statuses:$dedupe_statuses[0]| dedupe_statuses_override:$dedupe_statuses_override| dupcheck:$dupcheck| lead_file:$lead_file| list_id_override:$list_id_override| phone_code_override:$phone_code_override| postalgmt:$postalgmt| template_id:$template_id| usacan_check:$usacan_check| state_conversion:$state_conversion| web_loader_phone_length:$web_loader_phone_length|';"; if ($DB) {echo "|$stmt|\n";} $rslt=mysql_to_mysqli($stmt, $link); @@ -1418,6 +1453,10 @@ if (($leadfile) && ($LF_path)) { print "
"._QXZ("CONVERSION OF STATE NAMES TO ABBREVIATIONS ENABLED").": $state_conversion
\n"; } + if ( (strlen($web_loader_phone_length)>0) and (strlen($web_loader_phone_length)< 3) ) + { + print "
"._QXZ("REQUIRED PHONE NUMBER LENGTH").": $web_loader_phone_length
\n"; + } while (!feof($file)) { @@ -1653,11 +1692,16 @@ if (($leadfile) && ($LF_path)) $valid_number=1; $invalid_reason=''; - if ( (strlen($phone_number)<6) || (strlen($phone_number)>16) ) + if ( (strlen($phone_number)<5) || (strlen($phone_number)>18) ) { $valid_number=0; $invalid_reason = _QXZ("INVALID PHONE NUMBER LENGTH"); } + if ( (strlen($web_loader_phone_length)>0) and (strlen($web_loader_phone_length)< 3) and ( (strlen($phone_number) > $web_loader_phone_length) or (strlen($phone_number) < $web_loader_phone_length) ) ) + { + $valid_number=0; + $invalid_reason = _QXZ("INVALID REQUIRED PHONE NUMBER LENGTH"); + } if ( (preg_match("/PREFIX/",$usacan_check)) and ($valid_number > 0) ) { $USprefix = substr($phone_number, 3, 1); @@ -1854,7 +1898,7 @@ if (($leadfile) && ($LF_path)) {fwrite($stmt_file, $custom_ins_stmt."\r\n");} } ### LOG INSERTION Admin Log Table ### - $stmt="INSERT INTO vicidial_admin_log set event_date='$NOW_TIME', user='$PHP_AUTH_USER', ip_address='$ip', event_section='LISTS', event_type='LOAD', record_id='$list_id_override', event_code='ADMIN LOAD LIST STANDARD', event_sql='', event_notes='File Name: $leadfile_name, GOOD: $good, BAD: $bad, TOTAL: $total, DEBUG: dedupe_statuses:$dedupe_statuses[0]| dedupe_statuses_override:$dedupe_statuses_override| dupcheck:$dupcheck| lead_file:$lead_file| list_id_override:$list_id_override| phone_code_override:$phone_code_override| postalgmt:$postalgmt| template_id:$template_id| usacan_check:$usacan_check| state_conversion:$state_conversion|';"; + $stmt="INSERT INTO vicidial_admin_log set event_date='$NOW_TIME', user='$PHP_AUTH_USER', ip_address='$ip', event_section='LISTS', event_type='LOAD', record_id='$list_id_override', event_code='ADMIN LOAD LIST STANDARD', event_sql='', event_notes='File Name: $leadfile_name, GOOD: $good, BAD: $bad, TOTAL: $total, DEBUG: dedupe_statuses:$dedupe_statuses[0]| dedupe_statuses_override:$dedupe_statuses_override| dupcheck:$dupcheck| lead_file:$lead_file| list_id_override:$list_id_override| phone_code_override:$phone_code_override| postalgmt:$postalgmt| template_id:$template_id| usacan_check:$usacan_check| state_conversion:$state_conversion| web_loader_phone_length:$web_loader_phone_length|';"; if ($DB) {echo "|$stmt|\n";} $rslt=mysql_to_mysqli($stmt, $link); @@ -1960,6 +2004,10 @@ if (($leadfile) && ($LF_path)) { print "
"._QXZ("CONVERSION OF STATE NAMES TO ABBREVIATIONS ENABLED").": $state_conversion
\n"; } + if ( (strlen($web_loader_phone_length)>0) and (strlen($web_loader_phone_length)< 3) ) + { + print "
"._QXZ("REQUIRED PHONE NUMBER LENGTH").": $web_loader_phone_length
\n"; + } while (!feof($file)) { @@ -2190,11 +2238,16 @@ if (($leadfile) && ($LF_path)) $valid_number=1; $invalid_reason=''; - if ( (strlen($phone_number)<6) || (strlen($phone_number)>16) ) + if ( (strlen($phone_number)<5) || (strlen($phone_number)>18) ) { $valid_number=0; $invalid_reason = _QXZ("INVALID PHONE NUMBER LENGTH"); } + if ( (strlen($web_loader_phone_length)>0) and (strlen($web_loader_phone_length)< 3) and ( (strlen($phone_number) > $web_loader_phone_length) or (strlen($phone_number) < $web_loader_phone_length) ) ) + { + $valid_number=0; + $invalid_reason = _QXZ("INVALID REQUIRED PHONE NUMBER LENGTH"); + } if ( (preg_match("/PREFIX/",$usacan_check)) and ($valid_number > 0) ) { $USprefix = substr($phone_number, 3, 1); @@ -2298,7 +2351,7 @@ if (($leadfile) && ($LF_path)) {fwrite($stmt_file, $stmtZ."\r\n");} } ### LOG INSERTION Admin Log Table ### - $stmt="INSERT INTO vicidial_admin_log set event_date='$NOW_TIME', user='$PHP_AUTH_USER', ip_address='$ip', event_section='LISTS', event_type='LOAD', record_id='$list_id_override', event_code='ADMIN LOAD LIST STANDARD', event_sql='', event_notes='File Name: $leadfile_name, GOOD: $good, BAD: $bad, TOTAL: $total, DEBUG: dedupe_statuses:$dedupe_statuses[0]| dedupe_statuses_override:$dedupe_statuses_override| dupcheck:$dupcheck| lead_file:$lead_file| list_id_override:$list_id_override| phone_code_override:$phone_code_override| postalgmt:$postalgmt| template_id:$template_id| usacan_check:$usacan_check| state_conversion:$state_conversion|';"; + $stmt="INSERT INTO vicidial_admin_log set event_date='$NOW_TIME', user='$PHP_AUTH_USER', ip_address='$ip', event_section='LISTS', event_type='LOAD', record_id='$list_id_override', event_code='ADMIN LOAD LIST STANDARD', event_sql='', event_notes='File Name: $leadfile_name, GOOD: $good, BAD: $bad, TOTAL: $total, DEBUG: dedupe_statuses:$dedupe_statuses[0]| dedupe_statuses_override:$dedupe_statuses_override| dupcheck:$dupcheck| lead_file:$lead_file| list_id_override:$list_id_override| phone_code_override:$phone_code_override| postalgmt:$postalgmt| template_id:$template_id| usacan_check:$usacan_check| state_conversion:$state_conversion| web_loader_phone_length:$web_loader_phone_length|';"; if ($DB) {echo "|$stmt|\n";} $rslt=mysql_to_mysqli($stmt, $link); @@ -2457,6 +2510,10 @@ if (($leadfile) && ($LF_path)) { print "
"._QXZ("CONVERSION OF STATE NAMES TO ABBREVIATIONS ENABLED").": $state_conversion
\n"; } + if ( (strlen($web_loader_phone_length)>0) and (strlen($web_loader_phone_length)< 3) ) + { + print "
"._QXZ("REQUIRED PHONE NUMBER LENGTH").": $web_loader_phone_length
\n"; + } $buffer=rtrim(fgets($file, 4096)); $buffer=stripslashes($buffer); @@ -2491,6 +2548,7 @@ if (($leadfile) && ($LF_path)) print " \r\n"; print " \r\n"; print " \r\n"; + print " \r\n"; print " \r\n"; print " \r\n"; print " \r\n"; diff --git a/www/vicidial/admin_soundboard.php b/www/vicidial/admin_soundboard.php new file mode 100644 index 00000000..cd0dceb1 --- /dev/null +++ b/www/vicidial/admin_soundboard.php @@ -0,0 +1,1187 @@ + LICENSE: AGPLv2 +# +# this screen manages the optional soundboard tables in ViciDial +# +# changes: +# 140707-1955 - First Build +# 141007-1147 - Finalized adding QXZ translation to all admin files +# 141111-0609 - Changes to comply with admin changes +# 141126-0906 - Pass through DB variable to example iframe +# 150808-2046 - Added compatibility for custom fields data option +# 160121-1716 - Filter out period from audio filenames, don't allow duplicate level-1 audiofiles +# 160330-1549 - navigation changes and fixes +# 160404-0937 - design changes +# 160429-1122 - Added admin_row_click option +# 161103-1605 - Updated code for new admin links +# + +$admin_version = '2.12-10'; +$build = '161103-1605'; + +require("dbconnect_mysqli.php"); +require("functions.php"); + +$PHP_AUTH_USER=$_SERVER['PHP_AUTH_USER']; +$PHP_AUTH_PW=$_SERVER['PHP_AUTH_PW']; +$PHP_SELF=$_SERVER['PHP_SELF']; +if (isset($_GET["ADD"])) {$ADD=$_GET["ADD"];} + elseif (isset($_POST["ADD"])) {$ADD=$_POST["ADD"];} +if (isset($_GET["DB"])) {$DB=$_GET["DB"];} + elseif (isset($_POST["DB"])) {$DB=$_POST["DB"];} +if (isset($_GET["stage"])) {$stage=$_GET["stage"];} + elseif (isset($_POST["stage"])) {$stage=$_POST["stage"];} +if (isset($_GET["user_group"])) {$user_group=$_GET["user_group"];} + elseif (isset($_POST["user_group"])) {$user_group=$_POST["user_group"];} +if (isset($_GET["action"])) {$action=$_GET["action"];} + elseif (isset($_POST["action"])) {$action=$_POST["action"];} +if (isset($_GET["soundboard_id"])) {$soundboard_id=$_GET["soundboard_id"];} + elseif (isset($_POST["soundboard_id"])) {$soundboard_id=$_POST["soundboard_id"];} +if (isset($_GET["avatar_name"])) {$avatar_name=$_GET["avatar_name"];} + elseif (isset($_POST["avatar_name"])) {$avatar_name=$_POST["avatar_name"];} +if (isset($_GET["avatar_notes"])) {$avatar_notes=$_GET["avatar_notes"];} + elseif (isset($_POST["avatar_notes"])) {$avatar_notes=$_POST["avatar_notes"];} +if (isset($_GET["avatar_api_user"])) {$avatar_api_user=$_GET["avatar_api_user"];} + elseif (isset($_POST["avatar_api_user"])) {$avatar_api_user=$_POST["avatar_api_user"];} +if (isset($_GET["avatar_api_pass"])) {$avatar_api_pass=$_GET["avatar_api_pass"];} + elseif (isset($_POST["avatar_api_pass"])) {$avatar_api_pass=$_POST["avatar_api_pass"];} +if (isset($_GET["active"])) {$active=$_GET["active"];} + elseif (isset($_POST["active"])) {$active=$_POST["active"];} +if (isset($_GET["audio_functions"])) {$audio_functions=$_GET["audio_functions"];} + elseif (isset($_POST["audio_functions"])) {$audio_functions=$_POST["audio_functions"];} +if (isset($_GET["audio_display"])) {$audio_display=$_GET["audio_display"];} + elseif (isset($_POST["audio_display"])) {$audio_display=$_POST["audio_display"];} +if (isset($_GET["audio_filename"])) {$audio_filename=$_GET["audio_filename"];} + elseif (isset($_POST["audio_filename"])) {$audio_filename=$_POST["audio_filename"];} +if (isset($_GET["audio_name"])) {$audio_name=$_GET["audio_name"];} + elseif (isset($_POST["audio_name"])) {$audio_name=$_POST["audio_name"];} +if (isset($_GET["rank"])) {$rank=$_GET["rank"];} + elseif (isset($_POST["rank"])) {$rank=$_POST["rank"];} +if (isset($_GET["level"])) {$level=$_GET["level"];} + elseif (isset($_POST["level"])) {$level=$_POST["level"];} +if (isset($_GET["parent_audio_filename"])) {$parent_audio_filename=$_GET["parent_audio_filename"];} + elseif (isset($_POST["parent_audio_filename"])) {$parent_audio_filename=$_POST["parent_audio_filename"];} +if (isset($_GET["parent_rank"])) {$parent_rank=$_GET["parent_rank"];} + elseif (isset($_POST["parent_rank"])) {$parent_rank=$_POST["parent_rank"];} +if (isset($_GET["parent_filename"])) {$parent_filename=$_GET["parent_filename"];} + elseif (isset($_POST["parent_filename"])) {$parent_filename=$_POST["parent_filename"];} +if (isset($_GET["source_avatar_id"])) {$source_avatar_id=$_GET["source_avatar_id"];} + elseif (isset($_POST["source_avatar_id"])) {$source_avatar_id=$_POST["source_avatar_id"];} +if (isset($_GET["copy_option"])) {$copy_option=$_GET["copy_option"];} + elseif (isset($_POST["copy_option"])) {$copy_option=$_POST["copy_option"];} +if (isset($_GET["ConFiRm"])) {$ConFiRm=$_GET["ConFiRm"];} + elseif (isset($_POST["ConFiRm"])) {$ConFiRm=$_POST["ConFiRm"];} +if (isset($_GET["SUBMIT"])) {$SUBMIT=$_GET["SUBMIT"];} + elseif (isset($_POST["SUBMIT"])) {$SUBMIT=$_POST["SUBMIT"];} + + +############################################# +##### START SYSTEM_SETTINGS LOOKUP ##### +$stmt = "SELECT use_non_latin,auto_dial_limit,user_territories_active,allow_custom_dialplan,callcard_enabled,admin_modify_refresh,nocache_admin,webroot_writable,allow_emails,active_modules,sounds_central_control_active,qc_features_active,contacts_enabled,enable_languages,active_modules,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]; + $SSauto_dial_limit = $row[1]; + $SSuser_territories_active = $row[2]; + $SSallow_custom_dialplan = $row[3]; + $SScallcard_enabled = $row[4]; + $SSadmin_modify_refresh = $row[5]; + $SSnocache_admin = $row[6]; + $SSwebroot_writable = $row[7]; + $SSemail_enabled = $row[8]; + $SSactive_modules = $row[9]; + $sounds_central_control_active =$row[10]; + $SSqc_features_active = $row[11]; + $SScontacts_enabled = $row[12]; + $SSenable_languages = $row[13]; + $SSactive_modules = $row[14]; + $SSagent_soundboards = $row[15]; + } +##### END SETTINGS LOOKUP ##### +########################################### + +if (strlen($DB) < 1) + {$DB=0;} +$modify_refresh_set=0; + +if ($non_latin < 1) + { + $PHP_AUTH_USER = preg_replace('/[^-_0-9a-zA-Z]/','',$PHP_AUTH_USER); + $PHP_AUTH_PW = preg_replace('/[^-_0-9a-zA-Z]/','',$PHP_AUTH_PW); + + $DB = preg_replace('/[^0-9]/','',$DB); + $rank = preg_replace('/[^0-9]/','',$rank); + $level = preg_replace('/[^0-9]/','',$level); + $parent_rank = preg_replace('/[^0-9]/','',$parent_rank); + + $active = preg_replace('/[^NY]/','',$active); + + $avatar_api_user = preg_replace('/[^-_0-9a-zA-Z]/','',$avatar_api_user); + $avatar_api_pass = preg_replace('/[^-_0-9a-zA-Z]/','',$avatar_api_pass); + $ConFiRm = preg_replace('/[^0-9a-zA-Z]/','',$ConFiRm); + $name_position = preg_replace('/[^0-9a-zA-Z]/','',$name_position); + $multi_position = preg_replace('/[^0-9a-zA-Z]/','',$multi_position); + + $soundboard_id = preg_replace('/[^_0-9a-zA-Z]/','',$soundboard_id); + $copy_option = preg_replace('/[^_0-9a-zA-Z]/','',$copy_option); + $audio_functions = preg_replace('/[^-_0-9a-zA-Z]/', '',$audio_functions); + $audio_display = preg_replace('/[^-_0-9a-zA-Z]/', '',$audio_display); + $stage = preg_replace('/[^-_0-9a-zA-Z]/', '',$stage); + $user_group = preg_replace('/[^-_0-9a-zA-Z]/', '',$user_group); + + $avatar_name = preg_replace('/[^- \.\,\_0-9a-zA-Z]/','',$avatar_name); + $avatar_notes = preg_replace('/[^- \.\,\_0-9a-zA-Z]/','',$avatar_notes); + $audio_name = preg_replace('/[^- \.\,\_0-9a-zA-Z]/','',$audio_name); + + $audio_filename = preg_replace('/[^-\|\,\_0-9a-zA-Z]/', '',$audio_filename); + $parent_audio_filename = preg_replace('/[^-\|\,\_0-9a-zA-Z]/', '',$parent_audio_filename); + } # end of non_latin +else + { + $PHP_AUTH_USER = preg_replace("/'|\"|\\\\|;/","",$PHP_AUTH_USER); + $PHP_AUTH_PW = preg_replace("/'|\"|\\\\|;/","",$PHP_AUTH_PW); + } + +$STARTtime = date("U"); +$TODAY = date("Y-m-d"); +$NOW_TIME = date("Y-m-d H:i:s"); +$date = date("r"); +$ip = getenv("REMOTE_ADDR"); +$browser = getenv("HTTP_USER_AGENT"); +$user = $PHP_AUTH_USER; + +$admin_lists_custom = 'admin_lists_custom.php'; +if (preg_match("/cf_encrypt/",$SSactive_modules)) + {$admin_lists_custom = 'admin_lists_custom_encrypt.php';} + +if (file_exists('options.php')) + {require('options.php');} + +$auth=0; +$auth_message = user_authorization($PHP_AUTH_USER,$PHP_AUTH_PW,'',1); +if ($auth_message == 'GOOD') + {$auth=1;} + +if ($auth < 1) + { + $VDdisplayMESSAGE = _QXZ("Login incorrect, please try again"); + if ($auth_message == 'LOCK') + { + $VDdisplayMESSAGE = _QXZ("Too many login attempts, try again in 15 minutes"); + Header ("Content-type: text/html; charset=utf-8"); + echo "$VDdisplayMESSAGE: |$PHP_AUTH_USER|$auth_message|\n"; + exit; + } + Header("WWW-Authenticate: Basic realm=\"CONTACT-CENTER-ADMIN\""); + Header("HTTP/1.0 401 Unauthorized"); + echo "$VDdisplayMESSAGE: |$PHP_AUTH_USER|$PHP_AUTH_PW|$auth_message|\n"; + exit; + } + +$rights_stmt = "SELECT modify_audiostore from vicidial_users where user='$PHP_AUTH_USER';"; +if ($DB) {echo "|$stmt|\n";} +$rights_rslt=mysql_to_mysqli($rights_stmt, $link); +$rights_row=mysqli_fetch_row($rights_rslt); +$modify_audiostore = $rights_row[0]; + +# check their permissions +if ( $modify_audiostore < 1 ) + { + header ("Content-type: text/html; charset=utf-8"); + echo _QXZ("You do not have permissions to modify audio")."\n"; + exit; + } + +$stmt="SELECT full_name,modify_scripts,user_level,user_group,qc_enabled from vicidial_users where user='$PHP_AUTH_USER';"; +if ($DB) {echo "$stmt\n";} +$rslt=mysql_to_mysqli($stmt, $link); +$row=mysqli_fetch_row($rslt); +$LOGfullname = $row[0]; +$LOGmodify_scripts = $row[1]; +$LOGuser_level = $row[2]; +$LOGuser_group = $row[3]; +$qc_auth = $row[4]; + +$stmt="SELECT allowed_campaigns,allowed_reports,admin_viewable_groups,admin_viewable_call_times from vicidial_user_groups where user_group='$LOGuser_group';"; +if ($DB) {echo "$stmt\n";} +$rslt=mysql_to_mysqli($stmt, $link); +$row=mysqli_fetch_row($rslt); +$LOGallowed_campaigns = $row[0]; +$LOGallowed_reports = $row[1]; +$LOGadmin_viewable_groups = $row[2]; +$LOGadmin_viewable_call_times = $row[3]; + + +?> + + + + + + + + + + 1) and (preg_match("/^3/",$ADD)) ) + { + $modify_refresh_set=1; + if (preg_match("/^3/",$ADD)) {$modify_url = "$PHP_SELF?$QUERY_STRING";} + echo "\n"; + } +?> + + + +<?php echo _QXZ("ADMINISTRATION: Audio Soundboards"); ?> +<?php + +################################################################################ +##### BEGIN help section +if ($action == "HELP") + { + ?> + + + +
+
+ + +
+ +
+ - + +
+
+
+ - + +
+
+
+ - + +
+
+
+ - + +
+
+
+ - + +
+
+
+ - + +
+
+
+ - + +
+
+
+ - + +
+
+
+ - + +
+
+
+ - + +
+
+
+ - + +
+
+
+ - + +
+
+
+ - + +
+
+
+ - + +
+
+
+ - + +
+ + + '; +$header_nonselected_bold=''; +$admin_color = '#E6E6E6'; +$avatar_color = '#C6C6C6'; +$avatar_font = 'BLACK'; +$subcamp_color = '#C6C6C6'; +##### END Set variables to make header show properly ##### + +if ( (!isset($ADD)) or (strlen($ADD)<1) ) {$ADD="162000000000";} + +if ($ADD==162111111111) {$hh='admin'; $sh='soundboard'; echo _QXZ("ADD SOUNDBOARD ENTRY");} +if ($ADD==162211111111) {$hh='admin'; $sh='soundboard'; echo _QXZ("COPY SOUNDBOARD ENTRY");} +if ($ADD==262111111111) {$hh='admin'; $sh='soundboard'; echo _QXZ("ADDING NEW SOUNDBOARD ENTRY");} +if ($ADD==262211111111) {$hh='admin'; $sh='soundboard'; echo _QXZ("COPYING NEW SOUNDBOARD ENTRY");} +if ($ADD==362111111111) {$hh='admin'; $sh='soundboard'; echo _QXZ("MODIFY SOUNDBOARD ENTRY");} +if ($ADD==462111111111) {$hh='admin'; $sh='soundboard'; echo _QXZ("MODIFY SOUNDBOARD ENTRY");} +if ($ADD==562111111111) {$hh='admin'; $sh='soundboard'; echo _QXZ("DELETE SOUNDBOARD ENTRY");} +if ($ADD==662111111111) {$hh='admin'; $sh='soundboard'; echo _QXZ("DELETE SOUNDBOARD ENTRY");} +if ($ADD==162000000000) {$hh='admin'; $sh='soundboard'; echo _QXZ("SOUNDBOARD LIST");} +if ($ADD==762000000000) {$hh='admin'; $sh='soundboard'; echo _QXZ("ADMIN LOG");} + + +require("admin_header.php"); + +if ( ($LOGmodify_scripts < 1) or ($LOGuser_level < 8) ) + { + echo _QXZ("You are not authorized to view this section")."\n"; + exit; + } + +if ( (!preg_match("/soundboard/i",$SSactive_modules)) and ($SSagent_soundboards < 1) ) + { + echo ""._QXZ("ERROR: Soundboards are not active on this system")."\n"; + exit; + } + + +$NWB = "   \"HELP\""; + + + +##### user group permissions +$admin_viewable_groupsALL=0; +$LOGadmin_viewable_groupsSQL=''; +$whereLOGadmin_viewable_groupsSQL=''; +$valLOGadmin_viewable_groupsSQL=''; +$vmLOGadmin_viewable_groupsSQL=''; +if ( (!preg_match('/\-\-ALL\-\-/i',$LOGadmin_viewable_groups)) and (strlen($LOGadmin_viewable_groups) > 3) ) + { + $rawLOGadmin_viewable_groupsSQL = preg_replace("/ -/",'',$LOGadmin_viewable_groups); + $rawLOGadmin_viewable_groupsSQL = preg_replace("/ /","','",$rawLOGadmin_viewable_groupsSQL); + $LOGadmin_viewable_groupsSQL = "and user_group IN('---ALL---','$rawLOGadmin_viewable_groupsSQL')"; + $whereLOGadmin_viewable_groupsSQL = "where user_group IN('---ALL---','$rawLOGadmin_viewable_groupsSQL')"; + $valLOGadmin_viewable_groupsSQL = "and val.user_group IN('---ALL---','$rawLOGadmin_viewable_groupsSQL')"; + $vmLOGadmin_viewable_groupsSQL = "and vm.user_group IN('---ALL---','$rawLOGadmin_viewable_groupsSQL')"; + } +else + {$admin_viewable_groupsALL=1;} +$regexLOGadmin_viewable_groups = " $LOGadmin_viewable_groups "; + +$UUgroups_list=''; +if ($admin_viewable_groupsALL > 0) + {$UUgroups_list .= "\n";} +$stmt="SELECT user_group,group_name from vicidial_user_groups $whereLOGadmin_viewable_groupsSQL order by user_group;"; +if ($DB) {echo "$stmt\n";} +$rslt=mysql_to_mysqli($stmt, $link); +$UUgroups_to_print = mysqli_num_rows($rslt); +$o=0; +while ($UUgroups_to_print > $o) + { + $rowx=mysqli_fetch_row($rslt); + $UUgroups_list .= "\n"; + $o++; + } + + + + +###################### +# ADD=162111111111 display the ADD NEW SOUNDBOARD ENTRY SCREEN +###################### + +if ($ADD==162111111111) + { + if ( ($modify_audiostore==1) and ($LOGmodify_scripts==1) ) + { + echo "
\n"; + echo ""; + + echo "
"._QXZ("ADD NEW SOUNDBOARD ENTRY")."
\n"; + echo "\n"; + echo "\n"; + echo "
\n"; + + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + + echo "\n"; + echo "
"._QXZ("Soundboard ID").": $NWB#soundboard-soundboard_id$NWE
"._QXZ("Soundboard Name").": $NWB#soundboard-avatar_name$NWE
"._QXZ("Soundboard Notes").": $NWB#soundboard-avatar_name$NWE
"._QXZ("Soundboard API User").": $NWB#soundboard-avatar_api_user$NWE
"._QXZ("Soundboard API Pass").": $NWB#soundboard-avatar_api_pass$NWE
"._QXZ("Admin User Group").": $NWB#soundboard-user_group$NWE
\n"; + } + else + { + echo _QXZ("You do not have permission to view this page")."\n"; + exit; + } + } + + + + + +###################### +# ADD=162211111111 display the COPY NEW SOUNDBOARD ENTRY SCREEN +###################### + +if ($ADD==162211111111) + { + if ( ($modify_audiostore==1) and ($LOGmodify_scripts==1) ) + { + echo "
\n"; + echo ""; + + echo "
"._QXZ("COPY A SOUNDBOARD ENTRY")."\n"; + echo "\n"; + echo "\n"; + echo "
\n"; + + echo "\n"; + echo "\n"; + + echo "\n"; + + echo "\n"; + echo "
"._QXZ("Soundboard ID").": $NWB#soundboard-soundboard_id$NWE
"._QXZ("Soundboard Name").": $NWB#soundboard-avatar_name$NWE
"._QXZ("Source Soundboard ID").": $NWB#soundboard-soundboard_id$NWE
\n"; + } + else + { + echo _QXZ("You do not have permission to view this page")."\n"; + exit; + } + } + + + + + +###################### +# ADD=262111111111 adds new soundboard entry to the system +###################### + +if ($ADD==262111111111) + { + if ($add_copy_disabled > 0) + { + echo "
"._QXZ("You do not have permission to add records on this system")." -system_settings-\n"; + } + else + { + echo ""; + $stmt="SELECT count(*) from vicidial_avatars where avatar_id='$soundboard_id';"; + if ($DB) {echo "$stmt\n";} + $rslt=mysql_to_mysqli($stmt, $link); + $row=mysqli_fetch_row($rslt); + if ($row[0] > 0) + {echo "
"._QXZ("SOUNDBOARD ENTRY NOT ADDED - there is already an soundboard entry in the system with this ID")."\n";} + else + { + if ( (strlen($soundboard_id) < 2) or (strlen($avatar_name) < 3) ) + {echo "
"._QXZ("SOUNDBOARD ENTRY NOT ADDED - Please go back and look at the data you entered")."\n";} + else + { + $stmt="SELECT count(*) from vicidial_users where user='$avatar_api_user' and vdc_agent_api_access='1';"; + if ($DB) {echo "$stmt\n";} + $rslt=mysql_to_mysqli($stmt, $link); + $row=mysqli_fetch_row($rslt); + if ($row[0] < 1) + {echo "
"._QXZ("SOUNDBOARD ENTRY NOT ADDED - invalid API user")."\n";} + else + { + echo "
"._QXZ("SOUNDBOARD ENTRY ADDED")."\n"; + + $stmt="INSERT INTO vicidial_avatars SET avatar_id='$soundboard_id',avatar_name='$avatar_name',avatar_notes='$avatar_notes',user_group='$user_group',avatar_api_user='$avatar_api_user',avatar_api_pass='$avatar_api_pass';"; + if ($DB) {echo "$stmt\n";} + $rslt=mysql_to_mysqli($stmt, $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='SOUNDBOARDS', event_type='ADD', record_id='$soundboard_id', event_code='ADMIN ADD SOUNDBOARD', event_sql=\"$SQL_log\", event_notes='';"; + if ($DB) {echo "|$stmt|\n";} + $rslt=mysql_to_mysqli($stmt, $link); + } + } + } + } + $ADD=362111111111; + } + + +###################### +# ADD=262211111111 adds copied soundboard entry to the system +###################### + +if ($ADD==262211111111) + { + if ($add_copy_disabled > 0) + { + echo "
"._QXZ("You do not have permission to add records on this system")." -system_settings-\n"; + } + else + { + echo ""; + $stmt="SELECT count(*) from vicidial_avatars where avatar_id='$soundboard_id';"; + if ($DB) {echo "$stmt\n";} + $rslt=mysql_to_mysqli($stmt, $link); + $row=mysqli_fetch_row($rslt); + if ($row[0] > 0) + {echo "
"._QXZ("SOUNDBOARD ENTRY NOT ADDED - there is already an soundboard entry in the system with this ID")."\n";} + else + { + if ( (strlen($soundboard_id) < 2) or (strlen($avatar_name) < 3) or (strlen($source_avatar_id) < 2) ) + {echo "
"._QXZ("SOUNDBOARD ENTRY NOT ADDED - Please go back and look at the data you entered")."\n";} + else + { + $stmt="SELECT count(*) from vicidial_avatars where avatar_id='$source_avatar_id';"; + if ($DB) {echo "$stmt\n";} + $rslt=mysql_to_mysqli($stmt, $link); + $row=mysqli_fetch_row($rslt); + if ($row[0] < 1) + {echo "
"._QXZ("SOUNDBOARD ENTRY NOT COPIED - invalid source soundboard")."\n";} + else + { + echo "
"._QXZ("SOUNDBOARD ENTRY COPIED")."\n"; + + $stmt="INSERT INTO vicidial_avatars (avatar_id,avatar_name,avatar_notes,user_group,avatar_api_user,avatar_api_pass,audio_display,audio_functions,active) SELECT '$soundboard_id','$avatar_name',avatar_notes,user_group,avatar_api_user,avatar_api_pass,audio_display,audio_functions,active from vicidial_avatars where avatar_id='$source_avatar_id';"; + if ($DB) {echo "$stmt\n";} + $rslt=mysql_to_mysqli($stmt, $link); + $affected_rows = mysqli_affected_rows($link); + + $stmtA="INSERT INTO vicidial_avatar_audio (avatar_id,audio_filename,audio_name,rank,h_ord,level,parent_audio_filename,parent_rank) SELECT '$soundboard_id',audio_filename,audio_name,rank,h_ord,level,parent_audio_filename,parent_rank from vicidial_avatar_audio where avatar_id='$source_avatar_id';"; + if ($DB) {echo "$stmtA\n";} + $rslt=mysql_to_mysqli($stmtA, $link); + $affected_rowsA = mysqli_affected_rows($link); + + ### LOG INSERTION Admin Log Table ### + $SQL_log = "$stmt|$stmtA|"; + $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='SOUNDBOARDS', event_type='COPY', record_id='$soundboard_id', event_code='ADMIN COPY SOUNDBOARD', event_sql=\"$SQL_log\", event_notes='$source_avatar_id|$affected_rows|$affected_rowsA';"; + if ($DB) {echo "|$stmt|\n";} + $rslt=mysql_to_mysqli($stmt, $link); + } + } + } + } + $ADD=362111111111; + } + + +###################### +# ADD=462111111111 modify soundboard record in the system +###################### + +if ($ADD==462111111111) + { + if ( ($modify_audiostore==1) and ($LOGmodify_scripts==1) ) + { + echo ""; + + if ($stage == "FILEDELETE") + { + if ( (strlen($soundboard_id) < 2) or (strlen($audio_filename) < 1) or (strlen($rank) < 1) ) + {echo "
"._QXZ("SOUNDBOARD ENTRY NOT MODIFIED - Please go back and look at the data you entered")."\n";} + else + { + $stmt="DELETE FROM vicidial_avatar_audio where avatar_id='$soundboard_id' and audio_filename='$audio_filename' and rank='$rank';"; + if ($DB) {echo "$stmt\n";} + $rslt=mysql_to_mysqli($stmt, $link); + + echo "
"._QXZ("SOUNDBOARD ENTRY MODIFIED").": $soundboard_id - $audio_filename\n"; + + ### LOG INSERTION Admin Log Table ### + $SQL_log = "$stmt|$stmtA|"; + $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='SOUNDBOARDS', event_type='MODIFY', record_id='$soundboard_id', event_code='ADMIN MODIFY SOUNDBOARD', event_sql=\"$SQL_log\", event_notes='FILE DELETE $audio_filename';"; + if ($DB) {echo "|$stmt|\n";} + $rslt=mysql_to_mysqli($stmt, $link); + } + } + else + { + if ( (strlen($soundboard_id) < 2) or (strlen($avatar_name) < 3) ) + {echo "
"._QXZ("SOUNDBOARD ENTRY NOT MODIFIED - Please go back and look at the data you entered")."\n";} + else + { + $stmt="UPDATE vicidial_avatars set avatar_name='$avatar_name',avatar_notes='$avatar_notes',avatar_api_user='$avatar_api_user',avatar_api_pass='$avatar_api_pass',active='$active',audio_functions='$audio_functions',audio_display='$audio_display',user_group='$user_group' where avatar_id='$soundboard_id';"; + if ($DB) {echo "$stmt\n";} + $rslt=mysql_to_mysqli($stmt, $link); + $stmtLIST = $stmt; + + $stmt="SELECT audio_filename,rank,audio_name,level from vicidial_avatar_audio where avatar_id='$soundboard_id' order by rank;"; + if ($DB) {echo "$stmt\n";} + $rsltx=mysql_to_mysqli($stmt, $link); + $soundboardfiles_to_print = mysqli_num_rows($rsltx); + $ranks = ($soundboardfiles_to_print + 1); + $o=0; + while ($soundboardfiles_to_print > $o) + { + $rowx=mysqli_fetch_row($rsltx); + $avatarfiles[$o] = $rowx[0]; + $avatarranks[$o] = $rowx[1]; + $avatarnames[$o] = $rowx[2]; + $avatarlevel[$o] = $rowx[3]; + $o++; + } + + $o=0; + while ($soundboardfiles_to_print > $o) + { + $new_rank=0; + $Ffilename = $avatarfiles[$o]; + $NAMEfilename = '--NAME--' . $avatarfiles[$o]; + $LEVELfilename = '--LEVEL--' . $avatarfiles[$o]; + $OLDRANKfilename = '--OLDRANK--' . $avatarfiles[$o]; + $HORDfilename = '--HORD--' . $avatarfiles[$o]; + if (isset($_GET[$Ffilename])) {$new_rank=$_GET[$Ffilename];} + elseif (isset($_POST[$Ffilename])) {$new_rank=$_POST[$Ffilename];} + if (isset($_GET[$NAMEfilename])) {$new_name=$_GET[$NAMEfilename];} + elseif (isset($_POST[$NAMEfilename])) {$new_name=$_POST[$NAMEfilename];} + if (isset($_GET[$LEVELfilename])) {$new_level=$_GET[$LEVELfilename];} + elseif (isset($_POST[$LEVELfilename])) {$new_level=$_POST[$LEVELfilename];} + if (isset($_GET[$OLDRANKfilename])) {$old_rank=$_GET[$OLDRANKfilename];} + elseif (isset($_POST[$OLDRANKfilename])) {$old_rank=$_POST[$OLDRANKfilename];} + if (isset($_GET[$HORDfilename])) {$new_h_ord=$_GET[$HORDfilename];} + elseif (isset($_POST[$HORDfilename])) {$new_h_ord=$_POST[$HORDfilename];} + + $stmt="UPDATE vicidial_avatar_audio set rank='$new_rank',audio_name='$new_name',h_ord='$new_h_ord' where avatar_id='$soundboard_id' and audio_filename='$avatarfiles[$o]' and rank='$old_rank' and level='$new_level';"; + if ($DB) {echo "$stmt\n";} + $rslt=mysql_to_mysqli($stmt, $link); + $stmtLIST .= "|$stmt"; + + if ($new_level < 2) + { + $stmt="UPDATE vicidial_avatar_audio set parent_rank='$new_rank' where avatar_id='$soundboard_id' and parent_audio_filename='$avatarfiles[$o]' and parent_rank='$old_rank' and level='2';"; + if ($DB) {echo "$stmt\n";} + $rslt=mysql_to_mysqli($stmt, $link); + $stmtLIST .= "|$stmt"; + } + $o++; + } + + if (strlen($audio_filename) > 0) + { + if (preg_match("/--PARENT----NEW-------X/i",$parent_filename[0])) + { + $stmt="SELECT count(*) from vicidial_avatar_audio where avatar_id='$soundboard_id' and level='1' and audio_filename='$audio_filename' and parent_audio_filename='';"; + if ($DB) {echo "$stmt\n";} + $rslt=mysql_to_mysqli($stmt, $link); + $row=mysqli_fetch_row($rslt); + $duplicate_first = $row[0]; + + if ($duplicate_first > 0) + {echo "
"._QXZ("ERROR, Level One Audio File Duplicate, not added").": $audio_filename";} + else + { + $stmt="SELECT count(*) from vicidial_avatar_audio where avatar_id='$soundboard_id' and level='1';"; + if ($DB) {echo "$stmt\n";} + $rslt=mysql_to_mysqli($stmt, $link); + $row=mysqli_fetch_row($rslt); + $new_rank = ($row[0] + 1); + + $stmt="INSERT INTO vicidial_avatar_audio set audio_filename='$audio_filename',rank='$new_rank',avatar_id='$soundboard_id';"; + } + } + else + { + $parent_filename[0] = preg_replace("/--PARENT--/i",'',$parent_filename[0]); + $parent_array = explode('-----',$parent_filename[0]); + + $stmt="SELECT count(*) from vicidial_avatar_audio where avatar_id='$soundboard_id' and parent_audio_filename='$parent_array[0]' and parent_rank='$parent_array[1]';"; + if ($DB) {echo "$stmt\n";} + $rslt=mysql_to_mysqli($stmt, $link); + $row=mysqli_fetch_row($rslt); + $new_rank = ($row[0] + 1); + + $stmt="INSERT INTO vicidial_avatar_audio set audio_filename='$audio_filename',rank='$new_rank',parent_audio_filename='$parent_array[0]',parent_rank='$parent_array[1]',level='2',avatar_id='$soundboard_id';"; + } + if ($DB) {echo "$stmt\n";} + $rslt=mysql_to_mysqli($stmt, $link); + $stmtLIST .= "|$stmt"; + } + + echo "
"._QXZ("SOUNDBOARD ENTRY MODIFIED").": $soundboard_id\n"; + + ### LOG INSERTION Admin Log Table ### + $SQL_log = "$stmtLIST|$stmtA|"; + $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='SOUNDBOARDS', event_type='MODIFY', record_id='$soundboard_id', event_code='ADMIN MODIFY SOUNDBOARD', event_sql=\"$SQL_log\", event_notes='';"; + if ($DB) {echo "|$stmt|\n";} + $rslt=mysql_to_mysqli($stmt, $link); + } + } + } + else + { + echo _QXZ("You do not have permission to view this page")."\n"; + exit; + } + $ADD=362111111111; # go to soundboard entry modification form below + } + + +###################### +# ADD=562111111111 confirmation before deletion of soundboard record +###################### + +if ($ADD==562111111111) + { + echo ""; + + if (strlen($soundboard_id) < 2) + { + echo "
"._QXZ("SOUNDBOARD ENTRY NOT DELETED - Please go back and look at the data you entered")."\n"; + echo "
"._QXZ("SOUNDBOARD ID be at least 2 characters in length")."\n"; + } + else + { + echo "
"._QXZ("SOUNDBOARD ENTRY DELETION CONFIRMATION").": $soundboard_id - $avatar_name\n"; + echo "

"._QXZ("Click here to delete soundboard entry")." $soundboard_id - $avatar_name


\n"; + } + $ADD='362111111111'; # go to soundboard entry modification below + } + + + +###################### +# ADD=662111111111 delete soundboard record +###################### + +if ($ADD==662111111111) + { + echo ""; + + if ( (strlen($soundboard_id) < 2) or ($ConFiRm != 'YES') ) + { + echo "
"._QXZ("SOUNDBOARD ENTRY NOT DELETED - Please go back and look at the data you entered")."\n"; + echo "
"._QXZ("SOUNDBOARD ID be at least 2 characters in length")."\n"; + } + else + { + $stmt="DELETE FROM vicidial_avatars where avatar_id='$soundboard_id' $LOGadmin_viewable_groupsSQL;"; + if ($DB) {echo "$stmt\n";} + $rslt=mysql_to_mysqli($stmt, $link); + + $stmtA="DELETE from vicidial_avatar_audio where avatar_id='$soundboard_id';"; + if ($DB) {echo "$stmtA\n";} + $rslt=mysql_to_mysqli($stmtA, $link); + + ### LOG INSERTION Admin Log Table ### + $SQL_log = "$stmt|$stmtA|"; + $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='SOUNDBOARDS', event_type='DELETE', record_id='$soundboard_id', event_code='ADMIN DELETE SOUNDBOARD', event_sql=\"$SQL_log\", event_notes='';"; + if ($DB) {echo "|$stmt|\n";} + $rslt=mysql_to_mysqli($stmt, $link); + + echo "
"._QXZ("SOUNDBOARD DELETION COMPLETED").": $soundboard_id\n"; + echo "

\n"; + } + $ADD='162000000000'; # go to soundboard entry list + } + + + +###################### +# ADD=362111111111 modify soundboard record in the system +###################### + +if ($ADD==362111111111) + { + if ( ($modify_audiostore==1) and ($LOGmodify_scripts==1) ) + { + if ( ($SSadmin_modify_refresh > 1) and ($modify_refresh_set < 1) ) + { + $modify_url = "$PHP_SELF?ADD=362111111111&soundboard_id=$soundboard_id"; + $modify_footer_refresh=1; + } + echo "
\n"; + echo ""; + + $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' $LOGadmin_viewable_groupsSQL;"; + if ($DB) {echo "$stmt\n";} + $rslt=mysql_to_mysqli($stmt, $link); + $row=mysqli_fetch_row($rslt); + $soundboard_id = $row[0]; + $avatar_name = $row[1]; + $avatar_notes = $row[2]; + $avatar_api_user = $row[3]; + $avatar_api_pass = $row[4]; + $active = $row[5]; + $audio_functions = $row[6]; + $user_group = $row[7]; + $audio_display = $row[8]; + + echo "
"._QXZ("MODIFY A SOUNDBOARDS RECORD").": $soundboard_id\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 "\n"; + + echo "\n"; + + echo "\n"; + echo "
"._QXZ("Soundboard ID").": $soundboard_id
"._QXZ("Soundboard Name").": $NWB#soundboard-avatar_name$NWE
"._QXZ("Soundboard Notes").": $NWB#soundboard-avatar_notes$NWE
"._QXZ("Soundboard API User").": $NWB#soundboard-avatar_api_user$NWE
"._QXZ("Soundboard API Pass").": $NWB#soundboard-avatar_api_pass$NWE
"._QXZ("Active").": $NWB#soundboard-active$NWE
"._QXZ("Audio Functions").": $NWB#soundboard-audio_functions$NWE
"._QXZ("Audio Display").": $NWB#soundboard-audio_display$NWE
"._QXZ("Admin User Group").": $NWB#soundboard-user_group$NWE
"._QXZ("Audio Files").":
\n"; + echo "\n"; + echo ""; + + ##### get files listing for rank/delete options + $stmt="SELECT audio_filename,audio_name,rank,level,parent_audio_filename,parent_rank,h_ord from vicidial_avatar_audio where avatar_id='$soundboard_id' and level='1' order by rank,h_ord;"; + if ($DB) {echo "$stmt\n";} + $rsltx=mysql_to_mysqli($stmt, $link); + $soundboardfiles_to_print = mysqli_num_rows($rsltx); + $ranks = ($soundboardfiles_to_print + 2); + $levels = 2; + $o=0; + while ($soundboardfiles_to_print > $o) + { + $ro = ($o + 1); + $rowx=mysqli_fetch_row($rsltx); + echo ""; + echo "\n"; + echo "\n"; + echo ""; + echo ""; + echo ""; + + echo "\n"; + + $stmt="SELECT audio_filename,audio_name,rank,level,parent_audio_filename,parent_rank,h_ord from vicidial_avatar_audio where avatar_id='$soundboard_id' and level='2' and parent_audio_filename='$rowx[0]' and parent_rank='$rowx[2]' order by rank,h_ord;"; + if ($DB) {echo "$stmt\n";} + $rslty=mysql_to_mysqli($stmt, $link); + $Csoundboardfiles_to_print = mysqli_num_rows($rslty); + $Cranks = ($Csoundboardfiles_to_print + 2); + $Clevels = 2; + $Co=0; + while ($Csoundboardfiles_to_print > $Co) + { + $ro = ($Co + 1); + $rowC=mysqli_fetch_row($rslty); + echo ""; + echo "\n"; + echo "\n"; + echo ""; + echo ""; + echo "\n"; + + echo "\n"; + $Co++; + } + $o++; + } + + + echo ""; + echo "\n"; + + echo "
"._QXZ("FILENAME").""._QXZ("RANK").""._QXZ("HORZ").""._QXZ("level").""._QXZ("add").""._QXZ("name")."  
$ro. $rowx[0]   $rowx[3] "; + echo ""; + echo " "._QXZ("Name").": - "._QXZ("DELETE")."
    $ro. $rowC[0]             $rowC[3] "; + echo ""; + echo "     "._QXZ("Name").":   - "._QXZ("DELETE")."
"._QXZ("NEW")."   \n"; + echo ""._QXZ("Level").": 1 "; + echo " "._QXZ("Add New").": "; + echo "
"._QXZ("Add An Audio File").": "._QXZ("audio chooser")." $NWB#soundboard-audio_filename$NWE
\n"; + + echo "


\n"; + echo _QXZ("Sample Soundboard View").": $soundboard_id

\n"; + + echo "\n"; + + if ($modify_audiostore > 0) + { + echo "

"._QXZ("DELETE SOUNDBOARD ENTRY")."\n"; + } + if ( ($LOGuser_level >= 9) and ( (preg_match("/Administration Change Log/",$LOGallowed_reports)) or (preg_match("/ALL REPORTS/",$LOGallowed_reports)) ) ) + { + echo "

"._QXZ("Click here to see Admin changes to this Soundboard entry")."\n"; + } + } + else + { + echo _QXZ("You do not have permission to view this page")."\n"; + exit; + } + } + + + +###################### +# ADD=162000000000 display all soundboard entries +###################### +if ($ADD==162000000000) + { + echo "
\n"; + echo " "; + + $stmt="SELECT avatar_id,avatar_name,active,avatar_api_user,user_group from vicidial_avatars where active IN('N','Y') $LOGadmin_viewable_groupsSQL order by avatar_id"; + if ($DB) {echo "$stmt\n";} + $rslt=mysql_to_mysqli($stmt, $link); + $soundboard_to_print = mysqli_num_rows($rslt); + + echo "
"._QXZ("AGENT AUDIO SOUNDBOARD LISTINGS").":\n"; + echo "
\n"; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo "\n"; + + $o=0; + while ($soundboard_to_print > $o) + { + $row=mysqli_fetch_row($rslt); + $row[3]=preg_replace('/;|<|>/', '', $row[3]); + while(strlen($row[3]) > 50) {$row[3] = substr("$row[3]", 0, -1);} + if(strlen($row[3]) > 47) {$row[3] = "$row[3]...";} + + if (preg_match('/1$|3$|5$|7$|9$/i', $o)) + {$bgcolor='class="records_list_x"';} + else + {$bgcolor='class="records_list_y"';} + echo " 0) {echo " onclick=\"window.document.location='$PHP_SELF?ADD=362111111111&soundboard_id=$row[0]&DB=$DB'\"";} echo ">"; + echo ""; + echo ""; + echo ""; + echo ""; + echo "\n"; + $o++; + } + + echo "
"._QXZ("Soundboard ID").""._QXZ("Soundboard Name").""._QXZ("Active").""._QXZ("API User").""._QXZ("ADMIN GROUP").""._QXZ("MODIFY")."
$row[0]$row[1]$row[2]$row[3]$row[4]"._QXZ("MODIFY")."
\n"; + } + + + + +################################################################################ +##### BEGIN admin log display +if ($ADD == "762000000000") + { + if ($LOGuser_level >= 9) + { + echo "
\n"; + echo ""; + + $stmt="SELECT admin_log_id,event_date,user,ip_address,event_section,event_type,record_id,event_code from vicidial_admin_log where event_section='SOUNDBOARDSS' and record_id='$list_id' order by event_date desc limit 10000;"; + if ($DB) {echo "$stmt\n";} + $rslt=mysql_to_mysqli($stmt, $link); + $logs_to_print = mysqli_num_rows($rslt); + + echo "
"._QXZ("ADMIN CHANGE LOG: Section Records")." - $category - $stage\n"; + echo "
\n"; + echo ""; + echo ""; + echo ""; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + + $logs_printed = ''; + $o=0; + while ($logs_to_print > $o) + { + $row=mysqli_fetch_row($rslt); + + if (preg_match('/USER|AGENT/i', $row[4])) {$record_link = "$PHP_SELF?ADD=3&user=$row[6]";} + if (preg_match('/CAMPAIGN/i', $row[4])) {$record_link = "$PHP_SELF?ADD=31&campaign_id=$row[6]";} + if (preg_match('/LIST/i', $row[4])) {$record_link = "$PHP_SELF?ADD=311&list_id=$row[6]";} + if (preg_match('/CUSTOM_FIELDS/i', $row[4])) {$record_link = "./admin_lists_custom.php?action=MODIFY_CUSTOM_FIELDS&list_id=$row[6]";} + if (preg_match('/SCRIPT/i', $row[4])) {$record_link = "$PHP_SELF?ADD=3111111&script_id=$row[6]";} + if (preg_match('/FILTER/i', $row[4])) {$record_link = "$PHP_SELF?ADD=31111111&lead_filter_id=$row[6]";} + if (preg_match('/INGROUP/i', $row[4])) {$record_link = "$PHP_SELF?ADD=3111&group_id=$row[6]";} + if (preg_match('/DID/i', $row[4])) {$record_link = "$PHP_SELF?ADD=3311&did_id=$row[6]";} + if (preg_match('/USERGROUP/i', $row[4])) {$record_link = "$PHP_SELF?ADD=311111&user_group=$row[6]";} + if (preg_match('/REMOTEAGENT/i', $row[4])) {$record_link = "$PHP_SELF?ADD=31111&remote_agent_id=$row[6]";} + if (preg_match('/PHONE/i', $row[4])) {$record_link = "$PHP_SELF?ADD=10000000000";} + if (preg_match('/CALLTIME/i', $row[4])) {$record_link = "$PHP_SELF?ADD=311111111&call_time_id=$row[6]";} + if (preg_match('/SHIFT/i', $row[4])) {$record_link = "$PHP_SELF?ADD=331111111&shift_id=$row[6]";} + if (preg_match('/CONFTEMPLATE/i', $row[4])) {$record_link = "$PHP_SELF?ADD=331111111111&template_id=$row[6]";} + if (preg_match('/CARRIER/i', $row[4])) {$record_link = "$PHP_SELF?ADD=341111111111&carrier_id=$row[6]";} + if (preg_match('/SERVER/i', $row[4])) {$record_link = "$PHP_SELF?ADD=311111111111&server_id=$row[6]";} + if (preg_match('/CONFERENCE/i', $row[4])) {$record_link = "$PHP_SELF?ADD=1000000000000";} + if (preg_match('/SYSTEM/i', $row[4])) {$record_link = "$PHP_SELF?ADD=311111111111111";} + if (preg_match('/CATEGOR/i', $row[4])) {$record_link = "$PHP_SELF?ADD=331111111111111";} + if (preg_match('/GROUPALIAS/i', $row[4])) {$record_link = "$PHP_SELF?ADD=33111111111&group_alias_id=$row[6]";} + if (preg_match('/SOUNDBOARDS/i', $row[4])) {$record_link = "$PHP_SELF?ADD=362111111111&soundboard_id=$row[6]&DB=$DB";} + + if (preg_match('/1$|3$|5$|7$|9$/i', $o)) + {$bgcolor='bgcolor="#'. $SSstd_row3_background .'"';} + else + {$bgcolor='bgcolor="#'. $SSstd_row4_background .'"';} + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo "\n"; + $logs_printed .= "'$row[0]',"; + $o++; + } + echo "
"._QXZ("ID").""._QXZ("DATE TIME").""._QXZ("USER").""._QXZ("IP").""._QXZ("SECTION").""._QXZ("TYPE").""._QXZ("RECORD ID").""._QXZ("DESCRIPTION").""._QXZ("GOTO")."
$row[0] $row[1] $row[2] $row[3] $row[4] $row[5] $row[6] $row[7] "._QXZ("GOTO")."


\n"; + echo "\n"; + echo "
\n"; + } + else + { + echo _QXZ("You do not have permission to view this page")."\n"; + exit; + } + } + + +$ENDtime = date("U"); +$RUNtime = ($ENDtime - $STARTtime); +echo "\n\n\n


\n "._QXZ("runtime").": $RUNtime "._QXZ("seconds")."         "._QXZ("Version").": $admin_version     "._QXZ("Build").": $build"; + +?> + + + diff --git a/www/vicidial/callbacks_bulk_change.php b/www/vicidial/callbacks_bulk_change.php index 7ecf7cfb..ef332afa 100644 --- a/www/vicidial/callbacks_bulk_change.php +++ b/www/vicidial/callbacks_bulk_change.php @@ -1,7 +1,7 @@ LICENSE: AGPLv2 +# Copyright (C) 2016 Matt Florell LICENSE: AGPLv2 # # CHANGES # 120819-0119 - First build @@ -11,6 +11,7 @@ # 130901-1940 - Changed to mysqli PHP functions # 141007-2207 - Finalized adding QXZ translation to all admin files # 141229-2050 - Added code for on-the-fly language translations display +# 161104-0702 - Added option to change callbacks to ANYONE callbacks # require("dbconnect_mysqli.php"); @@ -35,6 +36,8 @@ if (isset($_GET["submit"])) {$submit=$_GET["submit"];} elseif (isset($_POST["submit"])) {$submit=$_POST["submit"];} if (isset($_GET["SUBMIT"])) {$SUBMIT=$_GET["SUBMIT"];} elseif (isset($_POST["SUBMIT"])) {$SUBMIT=$_POST["SUBMIT"];} +if (isset($_GET["convert_to_anyone"])) {$convert_to_anyone=$_GET["convert_to_anyone"];} + elseif (isset($_POST["convert_to_anyone"])) {$convert_to_anyone=$_POST["convert_to_anyone"];} ############################################# ##### START SYSTEM_SETTINGS LOOKUP ##### @@ -162,7 +165,11 @@ while ($i < $groups_to_print) } if ($SUBMIT && $old_user && $new_user && $confirm_transfer) { - $upd_stmt="UPDATE vicidial_callbacks set user='$new_user' where recipient='USERONLY' and status!='INACTIVE' and user='$old_user' $LOGadmin_viewable_groupsSQL"; + if ($new_user=="ANYONE") { + $upd_stmt="UPDATE vicidial_callbacks set recipient='ANYONE' where recipient='USERONLY' and status!='INACTIVE' and user='$old_user' $LOGadmin_viewable_groupsSQL"; + } else { + $upd_stmt="UPDATE vicidial_callbacks set user='$new_user' where recipient='USERONLY' and status!='INACTIVE' and user='$old_user' $LOGadmin_viewable_groupsSQL"; + } $upd_rslt=mysql_to_mysqli($upd_stmt, $link); if ($DB) {echo "$upd_stmt\n";} @@ -237,7 +244,7 @@ if ($SUBMIT && $old_user && $new_user && !$confirm_transfer) echo "\n"; echo _QXZ("You are about to transfer")." $callback_ct "._QXZ("callbacks")."
\n"; echo _QXZ("from user")." $old_user - $old_user_name
\n"; - echo _QXZ("to user")." $new_user - $new_user_name


\n"; + echo _QXZ("to user")." $new_user".($new_user_name!="" ? " - $new_user_name" : "")."


\n"; echo ""._QXZ("CLICK TO CONFIRM")."

"; echo ""._QXZ("CLICK TO CANCEL")."

"; } @@ -272,6 +279,7 @@ else if ($DB) {echo "$stmt\n";} $rslt=mysql_to_mysqli($stmt, $link); echo " +
   
cellpadding=2 cellspacing=0>>"; echo ""; + echo ""._QXZ("Purge called records")."$NWB#cb-bulk-purge$NWE
"; + echo ""._QXZ("Purge uncalled records")."$NWB#cb-bulk-purge$NWE
"; + echo ""; echo "
"; echo ""; - echo "
   
  \n"; +echo "
  \n"; ### callbacks change form echo "\n"; @@ -495,7 +502,7 @@ echo "\n"; -if ($SUBMIT && $new_list_id && $new_status) +if ($SUBMIT && $new_list_id && ($new_status || $revert_status)) { if (count($cb_users)>0) { @@ -618,8 +625,8 @@ if ($SUBMIT && $new_list_id && $new_status) { $daySQL=" and vc.callback_time<='".date("Y-m-d H:i:s")."'-INTERVAL $days_uncalled DAY "; } - else - {} +# else +# {} $callback_dispo_stmt="SELECT distinct status from vicidial_statuses where scheduled_callback='Y' UNION SELECT distinct status from vicidial_campaign_statuses where scheduled_callback='Y' ".preg_replace("/vc\./", "", $groupsSQL); if ($DB) {echo $callback_dispo_stmt."
";} @@ -631,18 +638,46 @@ if ($SUBMIT && $new_list_id && $new_status) } } +$purge_trigger=0; +$callback_statuses="'LIVE'"; +$purge_verbiage=array(); +if ($purge_called_records) + { + ### DELETE INACTIVE RECORDS + $purge_called_clause="(vc.status='INACTIVE' or (vc.status='LIVE' and vl.status not in ('".implode("','", $cb_dispos)."')))"; + $purge_trigger++; + array_push($purge_verbiage, "CALLED", "INACTIVE"); + } + +if ($purge_uncalled_records) + { + ### DELETE ACTIVE RECORDS + $purge_uncalled_clause="(vc.status in ('ACTIVE', 'LIVE') and vl.status in ('".implode("','", $cb_dispos)."'))"; + $purge_trigger++; + $callback_statuses.=",'ACTIVE'"; + array_push($purge_verbiage, "UNCALLED"); + } -if ($SUBMIT && $new_list_id && $new_status && (count($cb_users)>0 || count($cb_user_groups)>0 || count($cb_lists)>0 || count($cb_groups)>0) && $confirm_transfer) +if ($purge_trigger==1) + { + $purge_clause=$purge_called_clause.$purge_uncalled_clause; + } +else if ($purge_trigger==2) + { + $purge_clause="(".$purge_called_clause." or ".$purge_uncalled_clause.")"; + } + + +if ($SUBMIT && $new_list_id && ($new_status || $revert_status) && (count($cb_users)>0 || count($cb_user_groups)>0 || count($cb_lists)>0 || count($cb_groups)>0) && $confirm_transfer) { $actual_archived_ct=0; $actual_purged_ct=0; $arch_stmts=''; $del_stmts=''; - if ($purge_called_records) + if ($purge_trigger>0) { - ### DELETE INACTIVE RECORDS - $stmt = "SELECT vc.callback_id, vc.lead_id, vc.status from vicidial_callbacks vc, vicidial_list vl where (vc.status='INACTIVE' or (vc.status='LIVE' and vl.status not in ('".implode("','", $cb_dispos)."'))) and vc.lead_id=vl.lead_id $usersSQL $user_groupsSQL $listsSQL $groupsSQL $daySQL;"; + $stmt = "SELECT vc.callback_id, vc.lead_id, vc.status from vicidial_callbacks vc, vicidial_list vl where $purge_clause and vc.lead_id=vl.lead_id $usersSQL $user_groupsSQL $listsSQL $groupsSQL $daySQL;"; $rslt = mysql_to_mysqli($stmt, $link); $purge_ct=mysqli_num_rows($rslt); @@ -659,12 +694,11 @@ if ($SUBMIT && $new_list_id && $new_status && (count($cb_users)>0 || count($cb_u $del_stmts .= " $delete_stmt"; } - # $callback_stmt="SELECT vc.callback_id, vc.lead_id, vc.status from vicidial_callbacks vc, vicidial_list vl where vc.status='LIVE' and vl.status in ('".implode("','", $cb_dispos)."') and vc.lead_id=vl.lead_id $usersSQL $user_groupsSQL $listsSQL $groupsSQL $daySQL"; + # $callback_stmt="SELECT vc.callback_id, vc.lead_id, vc.status from vicidial_callbacks vc, vicidial_list vl where vc.status='LIVE' and vl.status in ('".implode("','", $cb_dispos)."') and vc.lead_id=vl.lead_id $usersSQL $user_groupsSQL $listsSQL $groupsSQL $daySQL"; } -# else -# { - $callback_stmt="SELECT vc.callback_id, vc.lead_id, vc.status from vicidial_callbacks vc where status='LIVE' $usersSQL $user_groupsSQL $listsSQL $groupsSQL $daySQL"; -# } + + $callback_stmt="SELECT vc.callback_id, vc.lead_id, vc.status, vc.entry_time from vicidial_callbacks vc where status in ($callback_statuses) $usersSQL $user_groupsSQL $listsSQL $groupsSQL $daySQL order by callback_time asc"; + if ($DB) {echo "|$callback_stmt|\n";} $callback_rslt=mysql_to_mysqli($callback_stmt, $link); $callback_ct=mysqli_num_rows($callback_rslt); @@ -676,6 +710,51 @@ if ($SUBMIT && $new_list_id && $new_status && (count($cb_users)>0 || count($cb_u while ($cb_row=mysqli_fetch_row($callback_rslt)) { $lead_id=$cb_row[1]; + + if ($revert_status) { + $callback_entry_time=$cb_row[3]; + # SET UPDATE STATUS TO NEW IN CASE NO CALL HISTORY IS FOUND BEFORE LEAD WAS MARKED CALLBACK + $new_status='NEW'; + $callback_time_clause=" and call_date<='$callback_entry_time'"; + $sort_by="desc"; + + # FIND THE STATUS THE CALLBACK WAS BEFORE THE CALL THAT THE AGENT DISPO'ED IT AS, IF IT EXISTS + $revert_stmt="select event_time, status, uniqueid from vicidial_agent_log where lead_id='$lead_id' and event_time<='$callback_entry_time' and status not in ('".implode("','", $cb_dispos)."') order by event_time desc limit 1"; + $revert_rslt=mysql_to_mysqli($revert_stmt, $link); + if (mysqli_num_rows($revert_rslt)>0) { + $revert_row=mysqli_fetch_row($revert_rslt); + if ($revert_row[0]!="") { + $callback_entry_time=$revert_row[0]; # THIS BECOMES THE MOST RECENT CALLBACK TIME TO CHECK THE CLOSER LOG FOR + $new_status=$revert_row[1]; + $callback_time_clause=" and call_date>='$callback_entry_time' and call_date<'$cb_row[3]' "; + } + } + + # FIND ANY OUTBOUND CALL MADE AFTER CALL WAS DISPO'ED BY AGENT AND NOT A CALLBACK + $revert_stmt2="select call_date, status, uniqueid from vicidial_log where lead_id='$lead_id' $callback_time_clause and status not in ('".implode("','", $cb_dispos)."') order by call_date desc limit 1"; + $revert_rslt2=mysql_to_mysqli($revert_stmt2, $link); + if (mysqli_num_rows($revert_rslt2)>0) { + $revert_row2=mysqli_fetch_row($revert_rslt2); + if ($revert_row2[0]!="") { + $callback_entry_time=$revert_row2[0]; + $new_status=$revert_row2[1]; + $callback_time_clause=" and call_date>='$callback_entry_time' and call_date<'$cb_row[3]' "; + } + } + + # FIND ANY INBOUND CALL MADE AFTER CALL WAS DISPO'ED BY AGENT AND NOT A CALLBACK + $revert_stmt3="select call_date, status, closecallid from vicidial_closer_log where lead_id='$lead_id' $callback_time_clause and status not in ('".implode("','", $cb_dispos)."') order by call_date asc limit 1"; + $revert_rslt3=mysql_to_mysqli($revert_stmt3, $link); + if (mysqli_num_rows($revert_rslt3)>0) { + $revert_row3=mysqli_fetch_row($revert_rslt3); + if ($revert_row3[0]!="") { + $callback_entry_time=$revert_row3[0]; + $new_status=$revert_row3[1]; + } + } + if ($DB) {echo "|$cb_row[0]
$revert_stmt - $revert_row[2]
$revert_stmt2 - $revert_row2[2]
$revert_stmt3 - $revert_row3[2]|\n";} + } + $upd_stmt="update vicidial_list set $new_listSQL status='$new_status' where lead_id='$lead_id';"; $upd_rslt=mysql_to_mysqli($upd_stmt, $link); $actual_callback_ct+=mysqli_affected_rows($link); @@ -714,25 +793,32 @@ if ($SUBMIT && $new_list_id && $new_status && (count($cb_users)>0 || count($cb_u echo ""._QXZ("BACK")."

"; } -else if ($SUBMIT && $new_list_id && $new_status && (count($cb_users)>0 || count($cb_user_groups)>0 || count($cb_lists)>0 || count($cb_groups)>0) && !$confirm_transfer) +else if ($SUBMIT && $new_list_id && ($new_status || $revert_status) && (count($cb_users)>0 || count($cb_user_groups)>0 || count($cb_lists)>0 || count($cb_groups)>0) && !$confirm_transfer) { - - if (!$purge_called_records) +# $DB=1; + if ($purge_trigger==0) { $callback_stmt="SELECT * from vicidial_callbacks vc where status='LIVE' $usersSQL $user_groupsSQL $listsSQL $groupsSQL $daySQL"; } else { - $callback_stmt="SELECT * from vicidial_callbacks vc, vicidial_list vl where vc.status='LIVE' and vl.status in ('".implode("','", $cb_dispos)."') and vc.lead_id=vl.lead_id $usersSQL $user_groupsSQL $listsSQL $groupsSQL $daySQL"; + $callback_stmt="SELECT * from vicidial_callbacks vc, vicidial_list vl where $purge_clause and vc.lead_id=vl.lead_id $usersSQL $user_groupsSQL $listsSQL $groupsSQL $daySQL"; - $purge_stmt="SELECT * from vicidial_callbacks vc, vicidial_list vl where (vc.status='INACTIVE' or (vc.status='LIVE' and vl.status not in ('".implode("','", $cb_dispos)."'))) and vc.lead_id=vl.lead_id $usersSQL $user_groupsSQL $listsSQL $groupsSQL $daySQL"; + $purge_stmt="SELECT vc.status, vl.status from vicidial_callbacks vc, vicidial_list vl where $purge_clause and vc.lead_id=vl.lead_id $usersSQL $user_groupsSQL $listsSQL $groupsSQL $daySQL"; $purge_rslt=mysql_to_mysqli($purge_stmt, $link); $purge_ct=mysqli_num_rows($purge_rslt); + $purge_called_ct=0; + $purge_uncalled_ct=0; + while ($purge_row=mysqli_fetch_row($purge_rslt)) + { + if ($purge_row[0]=="INACTIVE" || ($purge_row[0]=="LIVE" && !in_array("$purge_row[1]", $cb_dispos))) {$purge_called_ct++;} + if ($purge_row[0]=="ACTIVE" || ($purge_row[0]=="LIVE" && in_array("$purge_row[1]", $cb_dispos))) {$purge_uncalled_ct++;} + } } $callback_rslt=mysql_to_mysqli($callback_stmt, $link); $callback_ct=mysqli_num_rows($callback_rslt); if ($DB) {echo $callback_stmt."
";} - if ($DB) {echo $purge_stmt."
";} + # if ($DB) {echo $purge_stmt."
";} $list_name_stmt="SELECT list_name from vicidial_lists where list_id='$new_list_id'"; $list_name_rslt=mysql_to_mysqli($list_name_stmt, $link); @@ -740,19 +826,21 @@ else if ($SUBMIT && $new_list_id && $new_status && (count($cb_users)>0 || count( $new_list_id_name=$list_name_row[0]; echo "
"; - echo _QXZ("You are about to transfer")." $callback_ct "._QXZ("callbacks")." from
    \n"; + echo _QXZ("You are about to transfer")." $callback_ct "._QXZ("callbacks from")."
      \n"; if (count($cb_groups)>0) {echo "
    • "._QXZ("campaigns")." ".implode(",", $cb_groups)."
    • \n";} if (count($cb_lists)>0) {echo "
    • "._QXZ("lists")." ".implode(",", $cb_lists)."
    • \n";} if (count($cb_user_groups)>0) {echo"
    • ". _QXZ("user groups")." ".implode(",", $cb_user_groups)."
    • \n";} if (count($cb_users)>0) {echo "
    • "._QXZ("users")." ".implode(",", $cb_users)."
    • \n";} - if ($days_uncalled) {echo "
    • "._QXZ("where leads have been LIVE and uncalled for ")." $days_uncalled days
    • \n";} + if ($days_uncalled) {echo "
    • "._QXZ("where leads have been LIVE and uncalled for ")." $days_uncalled "._QXZ("days")."
    • \n";} echo "

    "; - echo _QXZ("to list ID")." $new_list_id - $new_list_id_name "._QXZ("as status")." $new_status

    \n"; - if ($purge_called_records) {echo "**$purge_ct "._QXZ("RECORDS HAVING BEEN CALLED or INACTIVE WILL BE PURGED")."**

    \n";} + echo _QXZ("to list ID")." $new_list_id - $new_list_id_name ".($revert_status ? "as previous status" :_QXZ("as status")." $new_status")."

    \n"; + if ($purge_called_records) {echo "**$purge_called_ct "._QXZ("RECORDS HAVING BEEN CALLED or INACTIVE WILL BE PURGED")."**

    \n";} + if ($purge_uncalled_records) {echo "**$purge_uncalled_ct "._QXZ("ACTIVE RECORDS WILL BE PURGED")."**

    \n";} + if ($purge_called_records && $purge_uncalled_records) {echo "**$purge_ct "._QXZ("RECORDS HAVING BEEN ").implode(" or ", $purge_verbiage)._QXZ(" WILL BE PURGED")."**

    \n";} echo "
"; - echo ""._QXZ("CLICK TO CONFIRM")."

"; + echo ""._QXZ("CLICK TO CONFIRM")."

"; echo ""._QXZ("CLICK TO CANCEL")."

"; } @@ -837,7 +925,7 @@ else $stmt="SELECT user, count(*) as ct from vicidial_callbacks $whereLOGadmin_viewable_groupsSQL group by user order by user"; $rslt=mysql_to_mysqli($stmt, $link); if ($DB) {echo "$stmt\n";} - echo ""._QXZ("Agents with callbacks").":$NWB#cb-bulk-agents$NWE
\n"; echo "\n"; if (mysqli_num_rows($rslt)>0) { @@ -863,8 +951,9 @@ else echo "
"; - echo ""._QXZ("Purge called records"); - echo "$NWB#cb-bulk-purge$NWE"; echo ""._QXZ("Live and uncalled for over")."
"; - echo "



"; + echo "

"; + + echo ""; + echo ""; + echo ""; + echo ""; $stmt="SELECT list_id, list_name from vicidial_lists $whereLOGadmin_viewable_groupsSQL order by list_id asc"; if ($DB) {echo "$stmt\n";} $rslt=mysql_to_mysqli($stmt, $link); + + echo ""; + echo ""; + + echo ""; + echo ""; + + echo ""; + echo ""; + echo ""; + + echo "
"; + echo "

"; + echo "
"; echo _QXZ("List ID").": $NWB#cb-bulk-newlist$NWE   \n"; + echo "$NWB#cb-bulk-newlist$NWE\n"; + echo ""; + echo _QXZ("New Status").": $NWB#cb-bulk-newstatus$NWE
\n"; + echo "
"; + echo " "._QXZ("Revert to last status")."
("._QXZ("overrides 'New Status'").")
"; + echo "
"; - echo _QXZ("New Status").": $NWB#cb-bulk-newstatus$NWE\n"; } echo "\n"; diff --git a/www/vicidial/help.php b/www/vicidial/help.php index 508d4aaa..59c3a229 100644 --- a/www/vicidial/help.php +++ b/www/vicidial/help.php @@ -99,6 +99,7 @@ # 161018-2245 - Added allow_required_fields # 161028-1548 - Added agent_xfer_park_3way entry for system_settings # 161031-1410 - Added users-user_new_lead_limit entry +# 161105-0246 - Added web_loader_phone_length, agent soundboards and purge uncalled records # @@ -4950,6 +4951,11 @@ FR_SPAC 00 00 00 00 00 - - +
+ +
+ - +

@@ -5030,6 +5036,11 @@ FR_SPAC 00 00 00 00 00 - - +
+
+
+ - +

@@ -6231,6 +6242,9 @@ if ($SSqc_features_active > 0)

- +
+ - +