Added feature allowing agents to mute recordings of calls from the agent screen. Must be enabled in System Settings to be able to use it in campaigns. There is also a User Override option.

git-svn-id: svn://192.168.202.10@3072 3d104415-ff17-0410-8863-d5cf3c621b8a
This commit is contained in:
mattf
2019-03-11 03:44:37 +00:00
parent bf654315f6
commit 89adc00dab
19 changed files with 296 additions and 35 deletions
+4
View File
@@ -388,6 +388,10 @@ OTHER CHANGES:
108. Added new web pages for mobile application
109. Added feature allowing agents to mute recordings of calls from the agent
screen. Must be enabled in System Settings to be able to use it in
campaigns. There is also a User Override option.
+2 -1
View File
@@ -1,4 +1,4 @@
CALLER ID NAME CODES DOC Started: 2013-07-15 Updated: 2018-09-25
CALLER ID NAME CODES DOC Started: 2013-07-15 Updated: 2019-03-10
This document is meant for reference only, and it does not contain all CID name codes possible, but more will be added over time.
@@ -30,3 +30,4 @@ BB - Real-time screen blind barge (BB149425456200006666)
BW - Real-time screen blind whisper (BW149425456200006666)
E - Inbound Email, tracking only (E0001797980001237995)
ACagcW - Noone in session call agent phone (ACagcW15167259066666)
AM - Agent mute of recording (AM273955W0001922575W)
+7 -4
View File
@@ -669,7 +669,8 @@ ready_max_logout MEDIUMINT(7) default '-1',
export_gdpr_leads ENUM('0','1','2') default '0',
pause_code_approval ENUM('1','0') default '0',
max_hopper_calls SMALLINT(5) UNSIGNED default '0',
max_hopper_calls_hour SMALLINT(5) UNSIGNED default '0'
max_hopper_calls_hour SMALLINT(5) UNSIGNED default '0',
mute_recordings ENUM('DISABLED','Y','N') default 'DISABLED'
) ENGINE=MyISAM;
CREATE UNIQUE INDEX user ON vicidial_users (user);
@@ -1014,7 +1015,8 @@ scheduled_callbacks_auto_reschedule VARCHAR(10) default 'DISABLED',
scheduled_callbacks_timezones_container VARCHAR(40) default 'DISABLED',
three_way_volume_buttons VARCHAR(20) default 'ENABLED',
callback_dnc ENUM('ENABLED','DISABLED') default 'DISABLED',
manual_dial_validation ENUM('Y','N') default 'N'
manual_dial_validation ENUM('Y','N') default 'N',
mute_recordings ENUM('Y','N') default 'N'
) ENGINE=MyISAM;
CREATE TABLE vicidial_lists (
@@ -1806,7 +1808,8 @@ enable_gdpr_download_deletion ENUM('0','1','2') default '0',
source_id_display ENUM('0','1') default '0',
help_modification_date VARCHAR(20) default '0',
agent_logout_link ENUM('0','1','2','3','4') default '1',
manual_dial_validation ENUM('0','1','2','3','4') default '0'
manual_dial_validation ENUM('0','1','2','3','4') default '0',
mute_recordings ENUM('1','0') default '0'
) ENGINE=MyISAM;
CREATE TABLE vicidial_campaigns_list_mix (
@@ -4322,4 +4325,4 @@ INSERT INTO vicidial_settings_containers(container_id,container_notes,container_
UPDATE system_settings set vdc_agent_api_active='1';
UPDATE system_settings SET db_schema_version='1564',db_schema_update_date=NOW(),reload_timestamp=NOW();
UPDATE system_settings SET db_schema_version='1565',db_schema_update_date=NOW(),reload_timestamp=NOW();
+8
View File
@@ -804,3 +804,11 @@ ALTER TABLE vicidial_inbound_groups ADD place_in_line_caller_number_filename TEX
ALTER TABLE vicidial_inbound_groups ADD place_in_line_you_next_filename TEXT;
UPDATE system_settings SET db_schema_version='1564',db_schema_update_date=NOW() where db_schema_version < 1564;
ALTER TABLE system_settings ADD mute_recordings ENUM('1','0') default '0';
ALTER TABLE vicidial_campaigns ADD mute_recordings ENUM('Y','N') default 'N';
ALTER TABLE vicidial_users ADD mute_recordings ENUM('DISABLED','Y','N') default 'DISABLED';
UPDATE system_settings SET db_schema_version='1565',db_schema_update_date=NOW() where db_schema_version < 1565;
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 447 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 987 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 374 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

+36 -2
View File
@@ -141,10 +141,11 @@
# 170921-2009 - Fix for CALLID in beginning of recording filename
# 180522-1920 - Added more agent debug output for recordings
# 190222-1318 - Added recent session per-call logging
# 190310-1202 - Added MuteRecording function
#
$version = '2.14-88';
$build = '190222-1318';
$version = '2.14-89';
$build = '190310-1202';
$php_script = 'manager_send.php';
$mel=1; # Mysql Error Log enabled = 1
$mysql_log_count=143;
@@ -248,6 +249,8 @@ if (isset($_GET["qm_extension"])) {$qm_extension=$_GET["qm_extension"];}
elseif (isset($_POST["qm_extension"])) {$qm_extension=$_POST["qm_extension"];}
if (isset($_GET["customerparked"])) {$customerparked=$_GET["customerparked"];}
elseif (isset($_POST["customerparked"])) {$customerparked=$_POST["customerparked"];}
if (isset($_GET["user_group"])) {$user_group=$_GET["user_group"];}
elseif (isset($_POST["user_group"])) {$user_group=$_POST["user_group"];}
header ("Content-type: text/html; charset=utf-8");
@@ -271,6 +274,7 @@ $ACTION = preg_replace("/\'|\"|\\\\|;/","",$ACTION);
$CalLCID = preg_replace("/\'|\"|\\\\|;/","",$CalLCID);
$FROMvdc = preg_replace('/[^-_0-9a-zA-Z]/','',$FROMvdc);
$account = preg_replace('/[^-_0-9a-zA-Z]/','',$account);
$user_group = preg_replace('/[^-_0-9a-zA-Z]/','',$user_group);
$agent_dialed_number = preg_replace('/[^-_0-9a-zA-Z]/','',$agent_dialed_number);
$agent_dialed_type = preg_replace('/[^-_0-9a-zA-Z]/','',$agent_dialed_type);
$agent_log_id = preg_replace('/[^-_0-9a-zA-Z]/','',$agent_log_id);
@@ -2588,6 +2592,36 @@ if ($ACTION=="VolumeControl")
######################
# ACTION=MuteRecording - Mute/Unmute audio recording of call
######################
if ($ACTION=="MuteRecording")
{
if ( (strlen($channel)<1) or (strlen($stage)<1) or (strlen($queryCID)<1) )
{
echo _QXZ("Recording %1s, Muting %2s is not valid or queryCID %3s is not valid, Originate command not inserted",0,'',$channel,$stage,$queryCID)."\n";
}
else
{
### insert into the vicidial_agent_function_log table that the recording mute has happened
$stmt = "INSERT INTO vicidial_agent_function_log set agent_log_id='$agent_log_id',user='$user',function='mute_rec',event_time=NOW(),campaign_id='$campaign',user_group='$user_group',lead_id='$lead_id',uniqueid='$uniqueid',caller_code='$queryCID',stage='$stage',comments='$channel';";
if ($DB) {echo "$stmt\n";}
$rslt=mysql_to_mysqli($stmt, $link);
if ($mel > 0) {$errno = mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'02144',$user,$server_ip,$session_name,$one_mysql_log);}
$stmt="INSERT INTO vicidial_manager values('','','$NOW_TIME','NEW','N','$server_ip','','MuteAudio','$queryCID','Channel: $channel','Direction: all','State: $stage','Callerid: $queryCID','','','','','$channel','$stage');";
if ($format=='debug') {echo "\n<!-- $stmt -->";}
$rslt=mysql_to_mysqli($stmt, $link);
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'02145',$user,$server_ip,$session_name,$one_mysql_log);}
echo _QXZ("Mute command sent for Recording %1s, Muting %2s on %3s",0,'',$channel,$stage,$server_ip)."\n";
}
}
$ENDtime = date("U");
$RUNtime = ($ENDtime - $StarTtime);
if ($format=='debug') {echo "\n<!-- script runtime: $RUNtime seconds -->";}
+116 -7
View File
@@ -608,10 +608,11 @@
# 181005-1909 - Added SYSTEM manual_dial_filter option
# 190108-0833 - Added manual_dial_validation option, updated dates for 2019
# 190222-1316 - Added recent session per-call logging
# 190310-2017 - Added mute_recordings system/campaign/user option
#
$version = '2.14-577c';
$build = '190222-1316';
$version = '2.14-578c';
$build = '190310-2017';
$mel=1; # Mysql Error Log enabled = 1
$mysql_log_count=87;
$one_mysql_log=0;
@@ -725,7 +726,7 @@ if ($sl_ct > 0)
#############################################
##### START SYSTEM_SETTINGS LOOKUP #####
$stmt = "SELECT use_non_latin,vdc_header_date_format,vdc_customer_date_format,vdc_header_phone_format,webroot_writable,timeclock_end_of_day,vtiger_url,enable_vtiger_integration,outbound_autodial_active,enable_second_webform,user_territories_active,static_agent_url,custom_fields_enabled,pllb_grouping_limit,qc_features_active,allow_emails,callback_time_24hour,enable_languages,language_method,meetme_enter_login_filename,meetme_enter_leave3way_filename,enable_third_webform,default_language,active_modules,allow_chats,chat_url,default_phone_code,agent_screen_colors,manual_auto_next,agent_xfer_park_3way,admin_web_directory,agent_script,agent_push_events,agent_push_url,agent_logout_link,agentonly_callback_campaign_lock,manual_dial_validation FROM system_settings;";
$stmt = "SELECT use_non_latin,vdc_header_date_format,vdc_customer_date_format,vdc_header_phone_format,webroot_writable,timeclock_end_of_day,vtiger_url,enable_vtiger_integration,outbound_autodial_active,enable_second_webform,user_territories_active,static_agent_url,custom_fields_enabled,pllb_grouping_limit,qc_features_active,allow_emails,callback_time_24hour,enable_languages,language_method,meetme_enter_login_filename,meetme_enter_leave3way_filename,enable_third_webform,default_language,active_modules,allow_chats,chat_url,default_phone_code,agent_screen_colors,manual_auto_next,agent_xfer_park_3way,admin_web_directory,agent_script,agent_push_events,agent_push_url,agent_logout_link,agentonly_callback_campaign_lock,manual_dial_validation,mute_recordings FROM system_settings;";
$rslt=mysql_to_mysqli($stmt, $link);
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'01001',$VD_login,$server_ip,$session_name,$one_mysql_log);}
if ($DB) {echo "$stmt\n";}
@@ -770,6 +771,7 @@ if ($qm_conf_ct > 0)
$agent_logout_link = $row[34];
$agentonly_callback_campaign_lock = $row[35];
$SSmanual_dial_validation = $row[36];
$SSmute_recordings = $row[37];
}
else
{
@@ -1404,7 +1406,7 @@ else
if($auth>0)
{
##### grab the full name and other settings of the agent
$stmt="SELECT full_name,user_level,hotkeys_active,agent_choose_ingroups,scheduled_callbacks,agentonly_callbacks,agentcall_manual,vicidial_recording,vicidial_transfers,closer_default_blended,user_group,vicidial_recording_override,alter_custphone_override,alert_enabled,agent_shift_enforcement_override,shift_override_flag,allow_alerts,closer_campaigns,agent_choose_territories,custom_one,custom_two,custom_three,custom_four,custom_five,agent_call_log_view_override,agent_choose_blended,agent_lead_search_override,preset_contact_search,max_inbound_calls,wrapup_seconds_override,email,user_choose_language,ready_max_logout from vicidial_users where user='$VD_login' and active='Y' and api_only_user != '1';";
$stmt="SELECT full_name,user_level,hotkeys_active,agent_choose_ingroups,scheduled_callbacks,agentonly_callbacks,agentcall_manual,vicidial_recording,vicidial_transfers,closer_default_blended,user_group,vicidial_recording_override,alter_custphone_override,alert_enabled,agent_shift_enforcement_override,shift_override_flag,allow_alerts,closer_campaigns,agent_choose_territories,custom_one,custom_two,custom_three,custom_four,custom_five,agent_call_log_view_override,agent_choose_blended,agent_lead_search_override,preset_contact_search,max_inbound_calls,wrapup_seconds_override,email,user_choose_language,ready_max_logout,mute_recordings from vicidial_users where user='$VD_login' and active='Y' and api_only_user != '1';";
$rslt=mysql_to_mysqli($stmt, $link);
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'01007',$VD_login,$server_ip,$session_name,$one_mysql_log);}
$row=mysqli_fetch_row($rslt);
@@ -1441,6 +1443,7 @@ else
$LOGemail = $row[30];
$VU_user_choose_language = $row[31];
$VU_ready_max_logout = $row[32];
$VU_mute_recordings = $row[33];
if ( ($VU_alert_enabled > 0) and ($VU_allow_alerts > 0) ) {$VU_alert_enabled = 'ON';}
else {$VU_alert_enabled = 'OFF';}
@@ -1890,7 +1893,7 @@ else
$HKstatusnames = substr("$HKstatusnames", 0, -1);
##### grab the campaign settings
$stmt="SELECT park_ext,park_file_name,web_form_address,allow_closers,auto_dial_level,dial_timeout,dial_prefix,campaign_cid,campaign_vdad_exten,campaign_rec_exten,campaign_recording,campaign_rec_filename,campaign_script,get_call_launch,am_message_exten,xferconf_a_dtmf,xferconf_a_number,xferconf_b_dtmf,xferconf_b_number,alt_number_dialing,scheduled_callbacks,wrapup_seconds,wrapup_message,closer_campaigns,use_internal_dnc,allcalls_delay,omit_phone_code,agent_pause_codes_active,no_hopper_leads_logins,campaign_allow_inbound,manual_dial_list_id,default_xfer_group,xfer_groups,disable_alter_custphone,display_queue_count,manual_dial_filter,agent_clipboard_copy,use_campaign_dnc,three_way_call_cid,dial_method,three_way_dial_prefix,web_form_target,vtiger_screen_login,agent_allow_group_alias,default_group_alias,quick_transfer_button,prepopulate_transfer_preset,view_calls_in_queue,view_calls_in_queue_launch,call_requeue_button,pause_after_each_call,no_hopper_dialing,agent_dial_owner_only,agent_display_dialable_leads,web_form_address_two,agent_select_territories,crm_popup_login,crm_login_address,timer_action,timer_action_message,timer_action_seconds,start_call_url,dispo_call_url,xferconf_c_number,xferconf_d_number,xferconf_e_number,use_custom_cid,scheduled_callbacks_alert,scheduled_callbacks_count,manual_dial_override,blind_monitor_warning,blind_monitor_message,blind_monitor_filename,timer_action_destination,enable_xfer_presets,hide_xfer_number_to_dial,manual_dial_prefix,customer_3way_hangup_logging,customer_3way_hangup_seconds,customer_3way_hangup_action,ivr_park_call,manual_preview_dial,api_manual_dial,manual_dial_call_time_check,my_callback_option,per_call_notes,agent_lead_search,agent_lead_search_method,queuemetrics_phone_environment,auto_pause_precall,auto_pause_precall_code,auto_resume_precall,manual_dial_cid,custom_3way_button_transfer,callback_days_limit,disable_dispo_screen,disable_dispo_status,screen_labels,status_display_fields,pllb_grouping,pllb_grouping_limit,in_group_dial,in_group_dial_select,pause_after_next_call,owner_populate,manual_dial_lead_id,dead_max,dispo_max,pause_max,dead_max_dispo,dispo_max_dispo,max_inbound_calls,manual_dial_search_checkbox,hide_call_log_info,timer_alt_seconds,wrapup_bypass,wrapup_after_hotkey,callback_active_limit,callback_active_limit_override,comments_all_tabs,comments_dispo_screen,comments_callback_screen,qc_comment_history,show_previous_callback,clear_script,manual_dial_search_filter,web_form_address_three,manual_dial_override_field,status_display_ingroup,customer_gone_seconds,agent_display_fields,manual_dial_timeout,manual_auto_next,manual_auto_show,allow_required_fields,dead_to_dispo,agent_xfer_validation,ready_max_logout,callback_display_days,three_way_record_stop,hangup_xfer_record_start,max_inbound_calls_outcome,manual_auto_next_options,agent_screen_time_display,pause_max_dispo,script_top_dispo,routing_initiated_recordings,dead_trigger_seconds,dead_trigger_action,dead_trigger_repeat,dead_trigger_filename,scheduled_callbacks_force_dial,callback_hours_block,callback_display_days,scheduled_callbacks_timezones_container,three_way_volume_buttons,manual_dial_validation FROM vicidial_campaigns where campaign_id = '$VD_campaign';";
$stmt="SELECT park_ext,park_file_name,web_form_address,allow_closers,auto_dial_level,dial_timeout,dial_prefix,campaign_cid,campaign_vdad_exten,campaign_rec_exten,campaign_recording,campaign_rec_filename,campaign_script,get_call_launch,am_message_exten,xferconf_a_dtmf,xferconf_a_number,xferconf_b_dtmf,xferconf_b_number,alt_number_dialing,scheduled_callbacks,wrapup_seconds,wrapup_message,closer_campaigns,use_internal_dnc,allcalls_delay,omit_phone_code,agent_pause_codes_active,no_hopper_leads_logins,campaign_allow_inbound,manual_dial_list_id,default_xfer_group,xfer_groups,disable_alter_custphone,display_queue_count,manual_dial_filter,agent_clipboard_copy,use_campaign_dnc,three_way_call_cid,dial_method,three_way_dial_prefix,web_form_target,vtiger_screen_login,agent_allow_group_alias,default_group_alias,quick_transfer_button,prepopulate_transfer_preset,view_calls_in_queue,view_calls_in_queue_launch,call_requeue_button,pause_after_each_call,no_hopper_dialing,agent_dial_owner_only,agent_display_dialable_leads,web_form_address_two,agent_select_territories,crm_popup_login,crm_login_address,timer_action,timer_action_message,timer_action_seconds,start_call_url,dispo_call_url,xferconf_c_number,xferconf_d_number,xferconf_e_number,use_custom_cid,scheduled_callbacks_alert,scheduled_callbacks_count,manual_dial_override,blind_monitor_warning,blind_monitor_message,blind_monitor_filename,timer_action_destination,enable_xfer_presets,hide_xfer_number_to_dial,manual_dial_prefix,customer_3way_hangup_logging,customer_3way_hangup_seconds,customer_3way_hangup_action,ivr_park_call,manual_preview_dial,api_manual_dial,manual_dial_call_time_check,my_callback_option,per_call_notes,agent_lead_search,agent_lead_search_method,queuemetrics_phone_environment,auto_pause_precall,auto_pause_precall_code,auto_resume_precall,manual_dial_cid,custom_3way_button_transfer,callback_days_limit,disable_dispo_screen,disable_dispo_status,screen_labels,status_display_fields,pllb_grouping,pllb_grouping_limit,in_group_dial,in_group_dial_select,pause_after_next_call,owner_populate,manual_dial_lead_id,dead_max,dispo_max,pause_max,dead_max_dispo,dispo_max_dispo,max_inbound_calls,manual_dial_search_checkbox,hide_call_log_info,timer_alt_seconds,wrapup_bypass,wrapup_after_hotkey,callback_active_limit,callback_active_limit_override,comments_all_tabs,comments_dispo_screen,comments_callback_screen,qc_comment_history,show_previous_callback,clear_script,manual_dial_search_filter,web_form_address_three,manual_dial_override_field,status_display_ingroup,customer_gone_seconds,agent_display_fields,manual_dial_timeout,manual_auto_next,manual_auto_show,allow_required_fields,dead_to_dispo,agent_xfer_validation,ready_max_logout,callback_display_days,three_way_record_stop,hangup_xfer_record_start,max_inbound_calls_outcome,manual_auto_next_options,agent_screen_time_display,pause_max_dispo,script_top_dispo,routing_initiated_recordings,dead_trigger_seconds,dead_trigger_action,dead_trigger_repeat,dead_trigger_filename,scheduled_callbacks_force_dial,callback_hours_block,callback_display_days,scheduled_callbacks_timezones_container,three_way_volume_buttons,manual_dial_validation,mute_recordings FROM vicidial_campaigns where campaign_id = '$VD_campaign';";
$rslt=mysql_to_mysqli($stmt, $link);
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'01013',$VD_login,$server_ip,$session_name,$one_mysql_log);}
if ($DB) {echo "$stmt\n";}
@@ -2052,6 +2055,15 @@ else
$scheduled_callbacks_timezones_container = $row[154];
$three_way_volume_buttons = $row[155];
$manual_dial_validation = $row[156];
$mute_recordings = $row[157];
if ($SSmute_recordings < 1)
{$mute_recordings='N';}
else
{
if ($VU_mute_recordings != 'DISABLED')
{$mute_recordings = $VU_mute_recordings;}
}
if ($SSmanual_dial_validation == '2') {$manual_dial_validation='Y';}
if ($SSmanual_dial_validation == '0') {$manual_dial_validation='N';}
@@ -4547,6 +4559,7 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
var agent_dial_owner_only = '<?php echo $agent_dial_owner_only ?>';
var agent_display_dialable_leads = '<?php echo $agent_display_dialable_leads ?>';
var no_empty_session_warnings = '<?php echo $no_empty_session_warnings ?>';
var allow_recording_mute = '<?php echo $allow_recording_mute ?>';
var script_width = '<?php echo $SDwidth ?>';
var script_height = '<?php echo $SSheight ?>';
var enable_second_webform = '<?php echo $enable_second_webform ?>';
@@ -4805,6 +4818,8 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
var manual_cancel_skip=0;
var MDOalt='';
var manual_entry_dial=0;
var mute_recordings='<?php echo $mute_recordings ?>';
var active_rec_channel='';
var DiaLControl_auto_HTML = "<a href=\"#\" onclick=\"AutoDial_ReSume_PauSe('VDADready','','','','','','','YES');\"><img src=\"./images/<?php echo _QXZ("vdc_LB_paused.gif") ?>\" border=\"0\" alt=\"You are paused\" /></a>";
var DiaLControl_auto_HTML_ready = "<a href=\"#\" onclick=\"AutoDial_ReSume_PauSe('VDADpause','','','','','','','YES');\"><img src=\"./images/<?php echo _QXZ("vdc_LB_active.gif") ?>\" border=\"0\" alt=\"You are active\" /></a>";
var DiaLControl_auto_HTML_OFF = "<img src=\"./images/<?php echo _QXZ("vdc_LB_blank_OFF.gif") ?>\" border=\"0\" alt=\"pause button disabled\" />";
@@ -4849,7 +4864,6 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
image_LB_active.src="./images/<?php echo _QXZ("vdc_LB_active.gif") ?>";
var image_LB_blank_OFF = new Image();
image_LB_blank_OFF.src="./images/<?php echo _QXZ("vdc_LB_blank_OFF.gif") ?>";
var image_LB_senddtmf = new Image();
image_LB_senddtmf.src="./images/<?php echo _QXZ("vdc_LB_senddtmf.gif") ?>";
var image_LB_dialnextnumber_OFF = new Image();
@@ -4896,6 +4910,12 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
image_chat_alert_UNMUTE.src="./images/<?php echo _QXZ("vdc_volume_UNMUTE.gif") ?>";
var image_chat_alert_MUTE = new Image();
image_chat_alert_MUTE.src="./images/<?php echo _QXZ("vdc_volume_MUTE.gif") ?>";
var image_LB_mute_recording_DISABLED = new Image();
image_LB_mute_recording_DISABLED.src="./images/<?php echo _QXZ("vdc_LB_mute_recording_DISABLED.gif") ?>";
var image_LB_mute_recording_AVAILABLE = new Image();
image_LB_mute_recording_AVAILABLE.src="./images/<?php echo _QXZ("vdc_LB_mute_recording_AVAILABLE.gif") ?>";
var image_LB_mute_recording_ON = new Image();
image_LB_mute_recording_ON.src="./images/<?php echo _QXZ("vdc_LB_mute_recording_ON.gif") ?>";
<?php
if ($window_validation > 0)
@@ -5041,6 +5061,67 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
}
// ################################################################################
// Send MuteRecording command for the recording channel
function MuteRecording(taskmute)
{
button_click_log = button_click_log + "" + SQLdate + "-----MuteRecording---" + taskmute + " " + active_rec_channel + "|";
var xmlhttp=false;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
// JScript gives us Conditional compilation, we can cope with old IE versions.
// and security blocked creation of the objects.
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
@end @*/
if (!xmlhttp && typeof XMLHttpRequest!='undefined')
{
xmlhttp = new XMLHttpRequest();
}
if (xmlhttp)
{
var epochCID = epoch_sec;
var leadCID = document.vicidial_form.lead_id.value;
if (leadCID.length < 1)
{leadCID = user_abb;}
leadCID = set_length(leadCID,'10','left');
epochCID = set_length(epochCID,'6','right');
var queryCID = "AM" + epochCID + 'W' + leadCID + 'W';
var recmute_query = "server_ip=" + server_ip + "&session_name=" + session_name + "&user=" + user + "&pass=" + pass + "&ACTION=MuteRecording&format=text&channel=" + active_rec_channel + "&stage=" + taskmute + "&exten=" + session_id + "&ext_context=" + ext_context + "&queryCID=" + queryCID + "&agent_log_id=" + agent_log_id + "&lead_id=" + document.vicidial_form.lead_id.value + "&uniqueid=" + document.vicidial_form.uniqueid.value + "&campaign=" + campaign + "&user_group=" + VU_user_group;
xmlhttp.open('POST', 'manager_send.php');
xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
xmlhttp.send(recmute_query);
xmlhttp.onreadystatechange = function()
{
if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
{
Nactiveext = null;
Nactiveext = xmlhttp.responseText;
// alert(recmute_query);
// alert(xmlhttp.responseText);
}
}
delete xmlhttp;
}
if (taskmute=='on')
{
document.getElementById("RecorDMute").innerHTML = "<a href=\"#\" onclick=\"MuteRecording('off');return false;\"><img src=\"./images/<?php echo _QXZ("vdc_LB_mute_recording_ON.gif") ?>\" border=\"0\" alt=\"Recording Muted\" /></a>";
}
else
{
document.getElementById("RecorDMute").innerHTML = "<a href=\"#\" onclick=\"MuteRecording('on');return false;\"><img src=\"./images/<?php echo _QXZ("vdc_LB_mute_recording_AVAILABLE.gif") ?>\" border=\"0\" alt=\"Mute Recording\" /></a>";
}
}
// ################################################################################
// Send alert control command for agent
function alert_control(taskalert)
@@ -6204,6 +6285,7 @@ function set_length(SLnumber,SLlength_goal,SLdirection)
var LMAcontent_change=0;
var LMAcontent_match=0;
agentphonelive=0;
active_rec_channel='';
var conv_start=-1;
var live_conf_HTML = "<font face=\"Arial,Helvetica\"><b><?php echo _QXZ("LIVE CALLS IN YOUR SESSION:"); ?></b></font><br /><table width=\"<?php echo $CQwidth ?>px\"><tr bgcolor=\"<?php echo $SCRIPT_COLOR ?>\"><td><font class=\"log_title\">#</font></td><td><font class=\"log_title\"><?php echo _QXZ("REMOTE CHANNEL"); ?></font></td><td><font class=\"log_title\"><?php echo _QXZ("HANGUP"); ?></font></td><td><font class=\"log_title\"><?php echo _QXZ("VOLUME"); ?></font></td></tr>";
if ( (LMAcount > live_conf_calls) || (LMAcount < live_conf_calls) || (LMAforce > 0))
@@ -6244,6 +6326,7 @@ function set_length(SLnumber,SLlength_goal,SLdirection)
display_ct++;
if (channelfieldA.match(regRNnolink))
{
active_rec_channel = channelfieldA;
// do not show hangup or volume control links for recording channels
live_conf_HTML = live_conf_HTML + "<tr bgcolor=\"" + row_color + "\"><td><font class=\"log_text\">" + display_ct + "</font></td><td><font class=\"" + chan_name_color + "\">" + channelfieldA + "</font></td><td><font class=\"log_text\"><?php echo _QXZ("recording"); ?></font></td><td></td></tr>";
}
@@ -6474,6 +6557,7 @@ function set_length(SLnumber,SLlength_goal,SLdirection)
var query_recording_exten = recording_exten;
var channelrec = "Local/" + conf_silent_prefix + '' + taskconfrec + "@" + ext_context;
var conf_rec_start_html = "<a href=\"#\" onclick=\"conf_send_recording('StopMonitorConf','" + taskconfrec + "','" + filename + "','','','YES');return false;\"><img src=\"./images/<?php echo _QXZ("vdc_LB_stoprecording.gif") ?>\" border=\"0\" alt=\"Stop Recording\" /></a>";
var conf_rec_mute_html = "<a href=\"#\" onclick=\"MuteRecording('on');return false;\"><img src=\"./images/<?php echo _QXZ("vdc_LB_mute_recording_AVAILABLE.gif") ?>\" border=\"0\" alt=\"Mute Recording\" /></a><br />";
if (LIVE_campaign_recording == 'ALLFORCE')
{
@@ -6483,6 +6567,10 @@ function set_length(SLnumber,SLlength_goal,SLdirection)
{
document.getElementById("RecorDControl").innerHTML = conf_rec_start_html;
}
if (mute_recordings == 'Y')
{
document.getElementById("RecorDMute").innerHTML = conf_rec_mute_html;
}
}
if (taskconfrectype == 'StopMonitorConf')
{
@@ -6490,6 +6578,7 @@ function set_length(SLnumber,SLlength_goal,SLdirection)
var query_recording_exten = session_id;
var channelrec = "Local/" + conf_silent_prefix + '' + taskconfrec + "@" + ext_context;
var conf_rec_start_html = "<a href=\"#\" onclick=\"conf_send_recording('MonitorConf','" + taskconfrec + "','','','','YES');return false;\"><img src=\"./images/<?php echo _QXZ("vdc_LB_startrecording.gif") ?>\" border=\"0\" alt=\"Start Recording\" /></a>";
var conf_rec_mute_html = "<img src=\"./images/<?php echo _QXZ("vdc_LB_mute_recording_DISABLED.gif") ?>\" border=\"0\" alt=\"Mute Recording Disabled\" /><br />";
if (LIVE_campaign_recording == 'ALLFORCE')
{
document.getElementById("RecorDControl").innerHTML = "<img src=\"./images/<?php echo _QXZ("vdc_LB_startrecording_OFF.gif") ?>\" border=\"0\" alt=\"Start Recording\" />";
@@ -6498,6 +6587,10 @@ function set_length(SLnumber,SLlength_goal,SLdirection)
{
document.getElementById("RecorDControl").innerHTML = conf_rec_start_html;
}
if (mute_recordings == 'Y')
{
document.getElementById("RecorDMute").innerHTML = conf_rec_mute_html;
}
}
confmonitor_query = "server_ip=" + server_ip + "&session_name=" + session_name + "&user=" + user + "&pass=" + pass + "&ACTION=" + taskconfrectype + "&format=text&channel=" + channelrec + "&filename=" + filename + "&exten=" + query_recording_exten + "&ext_context=" + ext_context + "&lead_id=" + document.vicidial_form.lead_id.value + "&ext_priority=1&FROMvdc=YES&uniqueid=" + tmp_vicidial_id + "&FROMapi=" + taskfromapi;
xmlhttp.open('POST', 'manager_send.php');
@@ -6541,6 +6634,7 @@ function set_length(SLnumber,SLlength_goal,SLdirection)
if (taskconfrectype == 'MonitorConf')
{
var conf_rec_start_html = "<a href=\"#\" onclick=\"conf_send_recording('StopMonitorConf','" + taskconfrec + "','ID:" + recording_id + "','','','YES');return false;\"><img src=\"./images/<?php echo _QXZ("vdc_LB_stoprecording.gif") ?>\" border=\"0\" alt=\"Stop Recording\" /></a>";
var conf_rec_mute_html = "<a href=\"#\" onclick=\"MuteRecording('on');return false;\"><img src=\"./images/<?php echo _QXZ("vdc_LB_mute_recording_AVAILABLE.gif") ?>\" border=\"0\" alt=\"Mute Recording\" /></a><br />";
if (LIVE_campaign_recording == 'ALLFORCE')
{
document.getElementById("RecorDControl").innerHTML = "<img src=\"./images/<?php echo _QXZ("vdc_LB_startrecording_OFF.gif") ?>\" border=\"0\" alt=\"Start Recording\" />";
@@ -6549,6 +6643,10 @@ function set_length(SLnumber,SLlength_goal,SLdirection)
{
document.getElementById("RecorDControl").innerHTML = conf_rec_start_html;
}
if (mute_recordings == 'Y')
{
document.getElementById("RecorDMute").innerHTML = conf_rec_mute_html;
}
}
}
}
@@ -7185,13 +7283,18 @@ function set_length(SLnumber,SLlength_goal,SLdirection)
if ( (taskMDstage != "start") && (VDstop_rec_after_each_call == 1) )
{
var conf_rec_start_html = "<a href=\"#\" onclick=\"conf_send_recording('MonitorConf','" + session_id + "','','','','YES');return false;\"><img src=\"./images/<?php echo _QXZ("vdc_LB_startrecording.gif") ?>\" border=\"0\" alt=\"Start Recording\" /></a>";
var conf_rec_mute_html = "<img src=\"./images/<?php echo _QXZ("vdc_LB_mute_recording_DISABLED.gif") ?>\" border=\"0\" alt=\"Mute Recording Disabled\" /><br />";
if ( (LIVE_campaign_recording == 'NEVER') || (LIVE_campaign_recording == 'ALLFORCE') )
{
document.getElementById("RecorDControl").innerHTML = "<img src=\"./images/<?php echo _QXZ("vdc_LB_startrecording_OFF.gif") ?>\" border=\"0\" alt=\"Start Recording\" />";
}
else
{document.getElementById("RecorDControl").innerHTML = conf_rec_start_html;}
if (mute_recordings == 'Y')
{
document.getElementById("RecorDMute").innerHTML = conf_rec_mute_html;
}
MDlogRecorDings = MDlogResponse_array[3];
if (window.MDlogRecorDings)
{
@@ -17838,6 +17941,11 @@ function phone_number_format(formatphone) {
{
document.getElementById("RecorDControl").innerHTML = "<img src=\"./images/<?php echo _QXZ("vdc_LB_startrecording_OFF.gif"); ?>\" border=\"0\" alt=\"Start Recording\" />";
}
if (mute_recordings == 'Y')
{
var conf_rec_mute_html = "<img src=\"./images/<?php echo _QXZ("vdc_LB_mute_recording_DISABLED.gif") ?>\" border=\"0\" alt=\"Mute Recording Disabled\" /><br />";
document.getElementById("RecorDMute").innerHTML = conf_rec_mute_html;
}
if (INgroupCOUNT > 0)
{
if (VU_closer_default_blended == 1)
@@ -19295,6 +19403,7 @@ $zi=2;
<center>
<!-- <a href=\"#\" onclick=\"conf_send_recording('MonitorConf','" + head_conf + "','','','');return false;\">Record</a> -->
<span style="background-color: <?php echo $MAIN_COLOR ?>" id="RecorDControl"><a href="#" onclick="conf_send_recording('MonitorConf',session_id,'','','','YES');return false;"><img src="./images/<?php echo _QXZ("vdc_LB_startrecording.gif"); ?>" border="0" alt="Start Recording" /></a></span><br />
<span style="background-color: <?php echo $MAIN_COLOR ?>" id="RecorDMute"></span>
<span id="SpacerSpanA"><img src="./images/<?php echo _QXZ("blank.gif"); ?>" width="145px" height="16px" border="0" /></span><br />
<span style="background-color: #FFFFFF" id="WebFormSpan"><img src="./images/<?php echo _QXZ("vdc_LB_webform_OFF.gif"); ?>" border="0" alt="Web Form" /></span><br />
<?php
+40 -11
View File
File diff suppressed because one or more lines are too long
+46 -3
View File
@@ -8,7 +8,7 @@
# just needs to enter the leadID and then they can view and modify the
# information in the record for that lead
#
# Copyright (C) 2018 Matt Florell <vicidial@gmail.com> LICENSE: AGPLv2
# Copyright (C) 2019 Matt Florell <vicidial@gmail.com> LICENSE: AGPLv2
#
# CHANGES
#
@@ -93,6 +93,7 @@
# 180410-1720 - Added switch lead log entry display
# 180506-1813 - Added switch_list log entry display
# 180807-0957 - Added new diff logging code
# 190310-2223 - Added indication of muted recordings by agent
#
require("dbconnect_mysqli.php");
@@ -240,7 +241,7 @@ if ($nonselectable_statuses > 0)
#############################################
##### START SYSTEM_SETTINGS LOOKUP #####
$stmt = "SELECT use_non_latin,custom_fields_enabled,webroot_writable,allow_emails,enable_languages,language_method,active_modules,log_recording_access,admin_screen_colors,enable_gdpr_download_deletion,source_id_display FROM system_settings;";
$stmt = "SELECT use_non_latin,custom_fields_enabled,webroot_writable,allow_emails,enable_languages,language_method,active_modules,log_recording_access,admin_screen_colors,enable_gdpr_download_deletion,source_id_display,mute_recordings FROM system_settings;";
$rslt=mysql_to_mysqli($stmt, $link);
if ($DB) {echo "$stmt\n";}
$qm_conf_ct = mysqli_num_rows($rslt);
@@ -258,6 +259,7 @@ if ($qm_conf_ct > 0)
$SSadmin_screen_colors = $row[8];
$enable_gdpr_download_deletion = $row[9];
$SSsource_id_display = $row[10];
$SSmute_recordings = $row[11];
}
##### END SETTINGS LOOKUP #####
###########################################
@@ -2610,10 +2612,15 @@ else
}
$mute_column='';
if ($SSmute_recordings > 0)
{
$mute_column = "<td align=left><font size=2>"._QXZ("MUTE")."</td>";
}
echo "<B>"._QXZ("RECORDINGS FOR THIS LEAD").":</B>\n";
echo "<TABLE width=800 cellspacing=1 cellpadding=1>\n";
echo "<tr><td><font size=1># </td><td align=left><font size=2> "._QXZ("LEAD")."</td><td><font size=2>"._QXZ("DATE/TIME")." </td><td align=left><font size=2>"._QXZ("SECONDS")." </td><td align=left><font size=2> &nbsp; "._QXZ("RECID")."</td><td align=center><font size=2>"._QXZ("FILENAME")."</td><td align=left><font size=2>"._QXZ("LOCATION")."</td><td align=left><font size=2>"._QXZ("TSR")."</td><td align=left><font size=2> </td></tr>\n";
echo "<tr><td><font size=1># </td><td align=left><font size=2> "._QXZ("LEAD")."</td><td><font size=2>"._QXZ("DATE/TIME")." </td><td align=left><font size=2>"._QXZ("SECONDS")." </td><td align=left><font size=2> &nbsp; "._QXZ("RECID")."</td><td align=center><font size=2>"._QXZ("FILENAME")."</td><td align=left><font size=2>"._QXZ("LOCATION")."</td><td align=left><font size=2>"._QXZ("TSR")."</td>$mute_column<td align=left><font size=2> </td></tr>\n";
$stmt="SELECT recording_id,channel,server_ip,extension,start_time,start_epoch,end_time,end_epoch,length_in_sec,length_in_min,filename,location,lead_id,user,vicidial_id from recording_log where lead_id='" . mysqli_real_escape_string($link, $lead_id) . "' order by recording_id desc limit 500;";
$rslt=mysql_to_mysqli($stmt, $link);
@@ -2658,6 +2665,19 @@ else
}
}
if ($SSmute_recordings > 0)
{
$mute_events=0;
$stmt="SELECT count(*) from vicidial_agent_function_log where user='$row[13]' and event_time >= '$row[4]' and event_time <= '$row[6]' and function='mute_rec' and lead_id='$row[12]' and stage='on';";
$rsltx=mysql_to_mysqli($stmt, $link);
$flogs_to_print = mysqli_num_rows($rsltx);
if ($flogs_to_print > 0)
{
$rowx=mysqli_fetch_row($rsltx);
$mute_events = $rowx[0];
}
}
if (strlen($location)>30)
{$locat = substr($location,0,27); $locat = "$locat...";}
else
@@ -2687,6 +2707,11 @@ else
echo "<td align=center><font size=1> $row[10] </td>\n";
echo "<td align=left><font size=2> $location </td>\n";
echo "<td align=left><font size=2> <A HREF=\"user_stats.php?user=$row[13]\" target=\"_blank\">$row[13]</A> </td>";
if ($SSmute_recordings > 0)
{
if ($mute_events < 1) {$mute_events='';}
echo "<td align=center><font size=2> $mute_events &nbsp; </td>\n";
}
echo "$play_audio";
echo "</tr>\n";
$rec_ids .= ",'$row[0]'";
@@ -2735,6 +2760,19 @@ else
}
}
if ($SSmute_recordings > 0)
{
$mute_events=0;
$stmt="SELECT count(*) from vicidial_agent_function_log where user='$row[13]' and event_time >= '$row[4]' and event_time <= '$row[6]' and function='mute_rec' and lead_id='$row[12]' and stage='on';";
$rsltx=mysql_to_mysqli($stmt, $link);
$flogs_to_print = mysqli_num_rows($rsltx);
if ($flogs_to_print > 0)
{
$rowx=mysqli_fetch_row($rsltx);
$mute_events = $rowx[0];
}
}
if (strlen($location)>30)
{$locat = substr($location,0,27); $locat = "$locat...";}
else
@@ -2765,6 +2803,11 @@ else
echo "<td align=center><font size=1> $row[10] </td>\n";
echo "<td align=left><font size=2> $location *</td>\n";
echo "<td align=left><font size=2> <A HREF=\"user_stats.php?user=$row[13]\" target=\"_blank\">$row[13]</A> </td>";
if ($SSmute_recordings > 0)
{
if ($mute_events < 1) {$mute_events='';}
echo "<td align=center><font size=2> $mute_events &nbsp; </td>\n";
}
echo "$play_audio";
echo "</tr>\n";
}
+4 -1
View File
@@ -1,4 +1,4 @@
# version: 20190223085601
# version: 20190310190601
users-user User ID <QXZ>This field is where you put the users ID number, can be up to 8 digits in length, Must be at least 2 characters in length.</QXZ>
users-pass Password <QXZ>This field is where you put the users password. Must be at least 2 characters in length. A medium strength user password will be at least 10 characters in length, and a strong user password will be at least 20 characters in length and have letters as well as at least one number. It is recommended that you use a longer password if possible, stringing together several unrelated words with no spaces, and a number somewhere in the string. The maximum size of a password is 100 characters.</QXZ>
users-force_change_password Force Change Password <QXZ>If this option is set to Y then the user will be prompted to change their password the next time they log in to the administration webpage. Default is N.</QXZ>
@@ -28,6 +28,7 @@ users-closer_default_blended Closer Default Blended <QXZ>This option simply defa
users-user_choose_language User Choose Language <QXZ>This option allows a user to select the language they want for the agent or administrative interface to display in. Default is 0 for disabled.</QXZ>
users-selected_language Selected Language <QXZ>This is the language that the agent and administrative interface will default to when the agent logs in. Default is -default English-.</QXZ>
users-agent_recording_override Agent Recording Override <QXZ>This option will override whatever the option is in the campaign for recording. DISABLED will not override the campaign recording setting. NEVER will disable recording on the client. ONDEMAND is the default and allows the agent to start and stop recording as needed. ALLCALLS will start recording on the client whenever a call is sent to an agent. ALLFORCE will start recording on the client whenever a call is sent to an agent giving the agent no option to stop recording. For ALLCALLS and ALLFORCE there is an option to use the Recording Delay to cut down on very short recordings and reduce system load.</QXZ>
users-mute_recordings Mute Recordings Override <QXZ>This setting will override the campaign setting for -Mute Recording Button- for this user only. Default is DISABLED, which will follow the campaign settings.</QXZ>
users-agent_shift_enforcement_override Agent Shift Enforcement Override <QXZ>This setting will override whatever the users user group has set for Shift Enforcement. DISABLED will use the user group setting. OFF will not enforce shifts at all. START will only enforce the login time but will not affect an agent that is running over their shift time if they are already logged in. ALL will enforce shift start time and will log an agent out after they run over the end of their shift time. Default is DISABLED.</QXZ>
users-agent_call_log_view_override Agent Call Log View Override <QXZ>This setting will override whatever the users user group has set for Agent Call Log View. DISABLED will use the user group setting. N will not allow showing the users call log. Y will allow showing the user call log. Default is DISABLED.</QXZ>
users-agent_lead_search_override Agent Lead Search Override <QXZ>This setting will override whatever the campaign has set for Agent Lead Search. NOT_ACTIVE will use the campaign setting. ENABLED will allow lead searching and DISABLED will not allow lead searching. Default is NOT_ACTIVE. LIVE_CALL_INBOUND will allow search for a lead while on an inbound call only. LIVE_CALL_INBOUND_AND_MANUAL will allow search for a lead while on an inbound call or while paused. When Lead Search is used on a live inbound call, the lead of the call when it went to the agent will be changed to a status of LSMERG, and the logs for the call will be modified to link to the agent selected lead instead.</QXZ>
@@ -215,6 +216,7 @@ campaigns-campaign_recording Campaign Recording <QXZ>This menu allows you to cho
campaigns-campaign_rec_filename Campaign Rec Filename <QXZ>This field allows you to customize the name of the recording when Campaign recording is ONDEMAND or ALLCALLS. The allowed variables are CAMPAIGN INGROUP CUSTPHONE FULLDATE TINYDATE EPOCH AGENT VENDORLEADCODE LEADID CALLID RECID. If your dialers have --POST recording processing enabled, you can also use POSTVLC POSTSP POSTARRD3 POSTSTATUS. These POST options will alter the recording file name after the call has been finished and will replace the post variable with the value from the default fields. The default is FULLDATE_AGENT and would look like this 20051020-103108_6666. Another example is CAMPAIGN_TINYDATE_CUSTPHONE which would look like this TESTCAMP_51020103108_3125551212. The resulting filename must be less than 90 characters in length.</QXZ>
campaigns-allcalls_delay Recording Delay <QXZ>For ALLCALLS and ALLFORCE recording only. This setting will delay the starting of the recording on all calls for the number of seconds specified in this field. Default is 0.</QXZ>
campaigns-routing_initiated_recordings Routing Initiated Recording <QXZ>This option, if enabled, allows you to have the call routing script for Outbound auto-dial calls trigger the agent call recording instead of the agent screen. This option will only work if the recording option is set to ALLCALLS or ALLFORCE. This will work with agent manual dialed calls only if the recording delay is also set to 0. Default is N for disabled.</QXZ>
campaigns-mute_recordings Mute Recording Button <QXZ>This option, if enabled, will make the MUTE RECORDING button appear on the agent screen below the existing recording button. If a recording is muted, it will record silence until the MUTE RECORDING is clicked a second time. Default is N for disabled.</QXZ>
campaigns-per_call_notes Call Notes Per Call <QXZ>Setting this option to ENABLED will allow agents to enter in notes for every call they handle in the agent interface. The notes entry field will appear below the Comments field in the agent interface. Also, if the Agent User Group is allowed to view Call Logs then the agent will be able to view past call notes for a lead at any time. Default is DISABLED.</QXZ>
campaigns-comments_all_tabs Comments All Tabs <QXZ>Setting this option to ENABLED will display the Comments field on all tabs in the main agent screen. Default is DISABLED.</QXZ>
campaigns-comments_dispo_screen Comments Dispo Screen <QXZ>Setting this option to ENABLED will display the Comments field at the top of the agent disposition screen. If the REPLACE_CALL_NOTES option is selected, then the Comments field will replace the Call Notes field on the disposition screen if Per Call Notes is enabled. Default is DISABLED.</QXZ>
@@ -1035,6 +1037,7 @@ settings-chat_url Chat URL <QXZ>This is the location where you have placed the c
settings-agent_push_events Agent Push Events <QXZ>This setting will enable the sending of events from agent screens to the URL defined below. Default is 0 for disabled.</QXZ>
settings-agent_push_url Agent Push URL <QXZ>If Agent Push Events are enabled above, this is the URL that the events will be sent to. The variables that you can use within the URL are --A--user--B--, --A--event--B--, --A--message--B--, --A--lead_id--B--. Since this function uses AJAX, it must reference a local script on the web server. If you want to reference an external web address then you should use the get2post.php script that can be found in the extras directory.</QXZ>
settings-log_recording_access Log Recording Access <QXZ>This option if enabled allows the logging of user access to call recordings. It also requires the User setting Access Recordings to be set to 1 to allow a user to access call recordings. Default is 0 for disabled.</QXZ>
settings-mute_recordings Allow Mute Recordings <QXZ>This option if enabled allows you to enable the MUTE RECORDING button on the agent screen by campaign and-or user. This feature is only tested with systems running Asterisk 13. Default is 0 for disabled.</QXZ>
settings-enable_auto_reports Enable Automated Reports <QXZ>This option if enabled allows you access to the Automated Reports section where you can set up reports to run at scheduled times and be delivered by email or FTP. Default is 0 for disabled.</QXZ>
settings-first_login_trigger First Login Trigger <QXZ>This setting allows for the initial configuration of the server screen to be shown to the administrator when they first log into the system.</QXZ>
settings-default_phone_registration_password Default Phone Registration Password <QXZ>This is the default registration password used when new phones are added to the system. Default is test.</QXZ>
+33 -6
View File
@@ -1,7 +1,7 @@
<?php
# user_stats.php
#
# Copyright (C) 2018 Matt Florell <vicidial@gmail.com> LICENSE: AGPLv2
# Copyright (C) 2019 Matt Florell <vicidial@gmail.com> LICENSE: AGPLv2
#
# CHANGES
#
@@ -58,6 +58,7 @@
# 170412-2150 - Added park_rpt display option
# 180323-2308 - Fix for user time calculation, subtracted queue_seconds
# 180410-1754 - Added Agent lead switch log and manager pause code approval log displays
# 190310-2206 - Added indication of muted recordings by agent
#
$startMS = microtime();
@@ -107,7 +108,7 @@ if (isset($_GET["search_archived_data"])) {$search_archived_data=$_GET["search
#############################################
##### START SYSTEM_SETTINGS LOOKUP #####
$stmt = "SELECT use_non_latin,outbound_autodial_active,slave_db_server,reports_use_slave_db,user_territories_active,webroot_writable,allow_emails,level_8_disable_add,enable_languages,language_method,log_recording_access,admin_screen_colors FROM system_settings;";
$stmt = "SELECT use_non_latin,outbound_autodial_active,slave_db_server,reports_use_slave_db,user_territories_active,webroot_writable,allow_emails,level_8_disable_add,enable_languages,language_method,log_recording_access,admin_screen_colors,mute_recordings FROM system_settings;";
$rslt=mysql_to_mysqli($stmt, $link);
if ($DB) {$MAIN.="$stmt\n";}
$qm_conf_ct = mysqli_num_rows($rslt);
@@ -126,6 +127,7 @@ if ($qm_conf_ct > 0)
$SSlanguage_method = $row[9];
$log_recording_access = $row[10];
$SSadmin_screen_colors = $row[11];
$SSmute_recordings = $row[12];
}
##### END SETTINGS LOOKUP #####
###########################################
@@ -1388,11 +1390,17 @@ else
##### vicidial recordings for this time period #####
$mute_column=''; $mute_column_csv='';
if ($SSmute_recordings > 0)
{
$mute_column = "<td align=center><font size=2>"._QXZ("MUTE")." &nbsp; </td>";
$mute_column_csv = ",\""._QXZ("MUTE")."\"";
}
$MAIN.="<B>"._QXZ("RECORDINGS FOR THIS TIME PERIOD: (10000 record limit)")."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='$download_link&file_download=8'>["._QXZ("DOWNLOAD")."]</a></B>\n";
$MAIN.="<TABLE width=750 cellspacing=0 cellpadding=1>\n";
$MAIN.="<tr><td><font size=1># </td><td align=left><font size=2> "._QXZ("LEAD")."</td><td><font size=2>"._QXZ("DATE/TIME")." </td><td align=left><font size=2>"._QXZ("SECONDS")." </td><td align=left><font size=2> &nbsp; "._QXZ("RECID")."</td><td align=center><font size=2>"._QXZ("FILENAME")."</td><td align=center><font size=2>"._QXZ("LOCATION")." &nbsp; </td></tr>\n";
$MAIN.="<TABLE width=900 cellspacing=0 cellpadding=1>\n";
$MAIN.="<tr><td><font size=1># </td><td align=left><font size=2> "._QXZ("LEAD")."</td><td><font size=2>"._QXZ("DATE/TIME")." </td><td align=left><font size=2>"._QXZ("SECONDS")." </td><td align=left><font size=2> &nbsp; "._QXZ("RECID")."</td><td align=center><font size=2>"._QXZ("FILENAME")."</td><td align=center><font size=2>"._QXZ("LOCATION")." &nbsp; </td>$mute_column</tr>\n";
$CSV_text8.="\""._QXZ("RECORDINGS FOR THIS TIME PERIOD: (10000 record limit)")."\"\n";
$CSV_text8.="\"\",\"#\",\""._QXZ("LEAD")."\",\""._QXZ("DATE/TIME")."\",\""._QXZ("SECONDS")."\",\""._QXZ("RECID")."\",\""._QXZ("FILENAME")."\",\""._QXZ("LOCATION")."\"\n";
$CSV_text8.="\"\",\"#\",\""._QXZ("LEAD")."\",\""._QXZ("DATE/TIME")."\",\""._QXZ("SECONDS")."\",\""._QXZ("RECID")."\",\""._QXZ("FILENAME")."\",\""._QXZ("LOCATION")."\"$mute_column_csv\n";
if (strlen($query_call_status) > 5)
{
@@ -1442,6 +1450,18 @@ else
}
}
}
if ($SSmute_recordings > 0)
{
$mute_events=0;
$stmt="SELECT count(*) from ".$vicidial_agent_function_log." where user='" . mysqli_real_escape_string($link, $user) . "' and event_time >= '$row[4]' and event_time <= '$row[6]' and function='mute_rec' and lead_id='$row[12]' and stage='on';";
$rsltx=mysql_to_mysqli($stmt, $link);
$flogs_to_print = mysqli_num_rows($rsltx);
if ($flogs_to_print > 0)
{
$rowx=mysqli_fetch_row($rsltx);
$mute_events = $rowx[0];
}
}
if (strlen($location)>30)
{$locat = substr($location,0,27); $locat = "$locat...";}
@@ -1457,6 +1477,7 @@ else
else
{$location = $locat;}
$u++;
$mute_csv_record='';
$MAIN.="<tr $bgcolor>";
$MAIN.="<td><font size=1>$u</td>";
$MAIN.="<td align=left><font size=2> <A HREF=\"admin_modify_lead.php?lead_id=$row[12]\" target=\"_blank\">$row[12]</A> </td>";
@@ -1465,8 +1486,14 @@ else
$MAIN.="<td align=left><font size=2> $row[0] </td>\n";
$MAIN.="<td align=center><font size=2> $row[10] </td>\n";
$MAIN.="<td align=right><font size=2> $location &nbsp; </td>\n";
if ($SSmute_recordings > 0)
{
if ($mute_events < 1) {$mute_events='';}
$MAIN.="<td align=right><font size=2> $mute_events &nbsp; </td>\n";
$mute_csv_record=",\"$mute_events\"";
}
$MAIN.="</tr>\n";
$CSV_text8.="\"\",\"$u\",\"$row[12]\",\"$row[4]\",\"$row[8]\",\"$row[0]\",\"$row[10]\",\"$CSV_location\"\n";
$CSV_text8.="\"\",\"$u\",\"$row[12]\",\"$row[4]\",\"$row[8]\",\"$row[0]\",\"$row[10]\",\"$CSV_location\"$mute_csv_record\n";
}
$MAIN.="</TABLE><BR><BR>\n";