From 2ef52550a1b19b201cea1d72a6fe308f442e8e7a Mon Sep 17 00:00:00 2001 From: mattf Date: Wed, 11 Apr 2018 17:18:42 +0000 Subject: [PATCH] Added pause code manager approval option, requires a manager to approve a specific flagged pause code before the agent is allowed to use it in their agent screen. Added switch lead log entry display to modify lead admin page git-svn-id: svn://192.168.202.10@2963 3d104415-ff17-0410-8863-d5cf3c621b8a --- UPGRADE | 5 + bin/ADMIN_archive_log_tables.pl | 53 ++++++++++- extras/MySQL_AST_CREATE_tables.sql | 29 +++++- extras/upgrade_2.14.sql | 29 ++++++ www/agc/vdc_db_query.php | 82 +++++++++++++++- www/agc/vicidial.php | 147 +++++++++++++++++++++++++++-- www/vicidial/admin.php | 37 +++++--- www/vicidial/admin_modify_lead.php | 80 +++++++++++++++- www/vicidial/help.php | 8 +- www/vicidial/user_stats.php | 69 ++++++++++++++ 10 files changed, 508 insertions(+), 31 deletions(-) diff --git a/UPGRADE b/UPGRADE index b928e2cd..5125fec8 100644 --- a/UPGRADE +++ b/UPGRADE @@ -293,6 +293,11 @@ OTHER CHANGES: 78. Added update_did Non-Agent API function +79. Added pause code manager approval option, requires a manager to approve a + specific flagged pause code before the agent is allowed to use it in + their agent screen. Manager approves by entering their login credentials + into a window on the agent's screen. + diff --git a/bin/ADMIN_archive_log_tables.pl b/bin/ADMIN_archive_log_tables.pl index baaf65d4..ebf96d77 100644 --- a/bin/ADMIN_archive_log_tables.pl +++ b/bin/ADMIN_archive_log_tables.pl @@ -20,7 +20,7 @@ # Based on perl scripts in ViciDial from Matt Florell and post: # http://www.vicidial.org/VICIDIALforum/viewtopic.php?p=22506&sid=ca5347cffa6f6382f56ce3db9fb3d068#22506 # -# Copyright (C) 2017 I. Taushanov, Matt Florell LICENSE: AGPLv2 +# Copyright (C) 2018 I. Taushanov, Matt Florell LICENSE: AGPLv2 # # CHANGES # 90615-1701 - First version @@ -52,6 +52,7 @@ # 170817-1318 - Added rolling of vicidial_inbound_survey_log # 170825-2243 - Added rolling of vicidial_xfer_log # 171026-0105 - Added --wipe-closer-log flag +# 180410-1728 - Added vicidial_agent_function_log archiving # $CALC_TEST=0; @@ -2199,6 +2200,56 @@ if (!$T) } + ##### vicidial_agent_function_log + $stmtA = "SELECT count(*) from vicidial_agent_function_log;"; + $sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; + $sthA->execute or die "executing: $stmtA ", $dbhA->errstr; + $sthArows=$sthA->rows; + if ($sthArows > 0) + { + @aryA = $sthA->fetchrow_array; + $vicidial_agent_function_log_count = $aryA[0]; + } + $sthA->finish(); + + $stmtA = "SELECT count(*) from vicidial_agent_function_log_archive;"; + $sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; + $sthA->execute or die "executing: $stmtA ", $dbhA->errstr; + $sthArows=$sthA->rows; + if ($sthArows > 0) + { + @aryA = $sthA->fetchrow_array; + $vicidial_agent_function_log_archive_count = $aryA[0]; + } + $sthA->finish(); + + if (!$Q) {print "\nProcessing vicidial_agent_function_log table... ($vicidial_agent_function_log_count|$vicidial_agent_function_log_archive_count)\n";} + $stmtA = "INSERT IGNORE INTO vicidial_agent_function_log_archive SELECT * from vicidial_agent_function_log;"; + $sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; + $sthA->execute or die "executing: $stmtA ", $dbhA->errstr; + + $sthArows = $sthA->rows; + if (!$Q) {print "$sthArows rows inserted into vicidial_agent_function_log_archive table \n";} + + $rv = $sthA->err(); + if (!$rv) + { + $stmtA = "DELETE FROM vicidial_agent_function_log WHERE event_time < '$del_time';"; + $sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; + $sthA->execute or die "executing: $stmtA ", $dbhA->errstr; + $sthArows = $sthA->rows; + if (!$Q) {print "$sthArows rows deleted from vicidial_agent_function_log table \n";} + + $stmtA = "optimize table vicidial_agent_function_log;"; + $sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; + $sthA->execute or die "executing: $stmtA ", $dbhA->errstr; + + $stmtA = "optimize table vicidial_agent_function_log_archive;"; + $sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; + $sthA->execute or die "executing: $stmtA ", $dbhA->errstr; + } + + ##### vicidial_outbound_ivr_log $stmtA = "SELECT count(*) from vicidial_outbound_ivr_log;"; diff --git a/extras/MySQL_AST_CREATE_tables.sql b/extras/MySQL_AST_CREATE_tables.sql index d8f810b3..98429614 100644 --- a/extras/MySQL_AST_CREATE_tables.sql +++ b/extras/MySQL_AST_CREATE_tables.sql @@ -665,7 +665,8 @@ modify_auto_reports ENUM('1','0') default '0', modify_ip_lists ENUM('1','0') default '0', ignore_ip_list ENUM('1','0') default '0', ready_max_logout MEDIUMINT(7) default '-1', -export_gdpr_leads ENUM('0','1','2') default '0' +export_gdpr_leads ENUM('0','1','2') default '0', +pause_code_approval ENUM('1','0') default '0' ) ENGINE=MyISAM; CREATE UNIQUE INDEX user ON vicidial_users (user); @@ -1579,6 +1580,7 @@ pause_code_name VARCHAR(30), billable ENUM('NO','YES','HALF') default 'NO', campaign_id VARCHAR(8), time_limit SMALLINT(5) UNSIGNED default '65000', +require_mgr_approval ENUM('NO','YES') default 'NO', index (campaign_id) ) ENGINE=MyISAM; @@ -3904,6 +3906,26 @@ cid_group_type ENUM('AREACODE','STATE') default 'AREACODE', user_group VARCHAR(20) default '---ALL---' ) ENGINE=MyISAM CHARSET=utf8 COLLATE=utf8_unicode_ci; +CREATE TABLE vicidial_agent_function_log ( +agent_function_log_id INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL, +agent_log_id INT(9) UNSIGNED, +user VARCHAR(20), +function VARCHAR(20), +event_time DATETIME, +lead_id INT(9) UNSIGNED, +campaign_id VARCHAR(8), +user_group VARCHAR(20), +caller_code VARCHAR(30) default '', +comments VARCHAR(40) default '', +stage VARCHAR(40) default '', +uniqueid VARCHAR(20) default '', +index (event_time), +index (caller_code), +index (user), +index (lead_id), +index (stage) +) ENGINE=MyISAM; + ALTER TABLE vicidial_email_list MODIFY message text character set utf8; @@ -4112,6 +4134,9 @@ CREATE UNIQUE INDEX visla_key on vicidial_inbound_survey_log_archive(uniqueid, c CREATE TABLE vicidial_inbound_callback_queue_archive LIKE vicidial_inbound_callback_queue; ALTER TABLE vicidial_inbound_callback_queue_archive MODIFY icbq_id INT(9) UNSIGNED NOT NULL; +CREATE TABLE vicidial_agent_function_log_archive LIKE vicidial_agent_function_log; +ALTER TABLE vicidial_agent_function_log_archive MODIFY agent_function_log_id INT(9) UNSIGNED NOT NULL; + GRANT RELOAD ON *.* TO cron@'%'; GRANT RELOAD ON *.* TO cron@localhost; @@ -4188,4 +4213,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='1540',db_schema_update_date=NOW(),reload_timestamp=NOW(); +UPDATE system_settings SET db_schema_version='1541',db_schema_update_date=NOW(),reload_timestamp=NOW(); diff --git a/extras/upgrade_2.14.sql b/extras/upgrade_2.14.sql index d78a6f5d..b7fdcd25 100644 --- a/extras/upgrade_2.14.sql +++ b/extras/upgrade_2.14.sql @@ -585,3 +585,32 @@ UPDATE system_settings SET db_schema_version='1539',db_schema_update_date=NOW() ALTER TABLE system_settings ADD source_id_display ENUM('0','1') default '0'; UPDATE system_settings SET db_schema_version='1540',db_schema_update_date=NOW() where db_schema_version < 1540; + +ALTER TABLE vicidial_pause_codes ADD require_mgr_approval ENUM('NO','YES') default 'NO'; + +ALTER TABLE vicidial_users ADD pause_code_approval ENUM('1','0') default '0'; + +CREATE TABLE vicidial_agent_function_log ( +agent_function_log_id INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL, +agent_log_id INT(9) UNSIGNED, +user VARCHAR(20), +function VARCHAR(20), +event_time DATETIME, +lead_id INT(9) UNSIGNED, +campaign_id VARCHAR(8), +user_group VARCHAR(20), +caller_code VARCHAR(30) default '', +comments VARCHAR(40) default '', +stage VARCHAR(40) default '', +uniqueid VARCHAR(20) default '', +index (event_time), +index (caller_code), +index (user), +index (lead_id), +index (stage) +) ENGINE=MyISAM; + +CREATE TABLE vicidial_agent_function_log_archive LIKE vicidial_agent_function_log; +ALTER TABLE vicidial_agent_function_log_archive MODIFY agent_function_log_id INT(9) UNSIGNED NOT NULL; + +UPDATE system_settings SET db_schema_version='1541',db_schema_update_date=NOW() where db_schema_version < 1541; diff --git a/www/agc/vdc_db_query.php b/www/agc/vdc_db_query.php index 094ae0e6..b7534232 100644 --- a/www/agc/vdc_db_query.php +++ b/www/agc/vdc_db_query.php @@ -451,13 +451,14 @@ # 180214-1553 - Added CID Group functionality # 180216-1350 - Fix for callback alt dial isssue #1066 # 180228-0726 - Fix for LogiNCamPaigns function, removed unnecesary onfocus trigger, issue #1074 +# 180410-1630 - Added Pause Code manager approval feature, Added switch_lead logging # -$version = '2.14-345'; -$build = '180228-0726'; +$version = '2.14-346'; +$build = '180410-1630'; $php_script = 'vdc_db_query.php'; $mel=1; # Mysql Error Log enabled = 1 -$mysql_log_count=709; +$mysql_log_count=712; $one_mysql_log=0; $DB=0; $VD_login=0; @@ -737,6 +738,12 @@ if (isset($_GET["last_VDRP_stage"])) {$last_VDRP_stage=$_GET["last_VDRP_stage"]; elseif (isset($_POST["last_VDRP_stage"])) {$last_VDRP_stage=$_POST["last_VDRP_stage"];} if (isset($_GET["url_link"])) {$url_link=$_GET["url_link"];} elseif (isset($_POST["url_link"])) {$url_link=$_POST["url_link"];} +if (isset($_GET["user_group"])) {$user_group=$_GET["user_group"];} + elseif (isset($_POST["user_group"])) {$user_group=$_POST["user_group"];} +if (isset($_GET["MgrApr_user"])) {$MgrApr_user=$_GET["MgrApr_user"];} + elseif (isset($_POST["MgrApr_user"])) {$MgrApr_user=$_POST["MgrApr_user"];} +if (isset($_GET["MgrApr_pass"])) {$MgrApr_pass=$_GET["MgrApr_pass"];} + elseif (isset($_POST["MgrApr_pass"])) {$MgrApr_pass=$_POST["MgrApr_pass"];} header ("Content-type: text/html; charset=utf-8"); @@ -949,6 +956,8 @@ if ($non_latin < 1) $phone_code = preg_replace("/[^0-9a-zA-Z]/","",$phone_code); $phone_number = preg_replace("/[^0-9a-zA-Z]/","",$phone_number); $status = preg_replace("/[^-_0-9a-zA-Z]/","",$status); + $MgrApr_user = preg_replace("/[^-_0-9a-zA-Z]/","",$MgrApr_user); + $MgrApr_pass = preg_replace("/[^-_0-9a-zA-Z]/","",$MgrApr_pass); } else { @@ -956,6 +965,8 @@ else $pass=preg_replace("/\'|\"|\\\\|;| /","",$pass); $orig_pass = preg_replace("/\'|\"|\\\\|;/","",$orig_pass); $status = preg_replace("/\'|\"|\\\\|;/","",$status); + $MgrApr_user = preg_replace("/\'|\"|\\\\|;/","",$MgrApr_user); + $MgrApr_pass = preg_replace("/\'|\"|\\\\|;/","",$MgrApr_pass); } $session_name = preg_replace("/\'|\"|\\\\|;/","",$session_name); @@ -1060,6 +1071,7 @@ $user_abb = preg_replace("/\'|\"|\\\\|;/","",$user_abb); $vtiger_callback_id = preg_replace("/\'|\"|\\\\|;/","",$vtiger_callback_id); $wrapup = preg_replace("/\'|\"|\\\\|;/","",$wrapup); $url_link = preg_replace("/\'|\"|\\\\|;/","",$url_link); +$user_group = preg_replace('/[^-_0-9a-zA-Z]/','',$user_group); # default optional vars if not set @@ -10646,7 +10658,7 @@ if ($ACTION == 'LeaDSearcHSelecTUpdatE') else { ### grab the call info from the vicidial_live_agents table - $stmt = "SELECT uniqueid,callerid,channel,call_server_ip,comments FROM vicidial_live_agents where server_ip = '$server_ip' and user='$user' and campaign_id='$campaign';"; + $stmt = "SELECT uniqueid,callerid,channel,call_server_ip,comments,lead_id FROM vicidial_live_agents where server_ip = '$server_ip' and user='$user' and campaign_id='$campaign';"; if ($non_latin > 0) {$rslt=mysql_to_mysqli("SET NAMES 'UTF8'", $link);} if ($DB) {echo "$stmt\n";} $rslt=mysql_to_mysqli($stmt, $link); @@ -10661,6 +10673,7 @@ if ($ACTION == 'LeaDSearcHSelecTUpdatE') $channel = $row[2]; $call_server_ip = $row[3]; $VLAcomments = $row[4]; + $old_lead_id = $row[4]; if (strlen($call_server_ip)<7) {$call_server_ip = $server_ip;} echo "1\n" . $lead_id . '|' . $uniqueid . '|' . $callerid . '|' . $channel . '|' . $call_server_ip . "|\n"; @@ -10712,6 +10725,12 @@ if ($ACTION == 'LeaDSearcHSelecTUpdatE') $rslt=mysql_to_mysqli($stmt, $link); if ($mel > 0) {$errno = mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'00454',$user,$server_ip,$session_name,$one_mysql_log);} + ### insert into the vicidial_agent_function_log table that the switch happened + $stmt = "INSERT INTO vicidial_agent_function_log set agent_log_id='$agent_log_id',user='$user',function='switch_lead',event_time=NOW(),campaign_id='$campaign',user_group='$user_group',lead_id='$stage',uniqueid='$uniqueid',caller_code='$callerid',stage='$lead_id',comments='$phone_number';"; + if ($DB) {echo "$stmt\n";} + $rslt=mysql_to_mysqli($stmt, $link); + if ($mel > 0) {$errno = mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'00710',$user,$server_ip,$session_name,$one_mysql_log);} + ##### grab the data from vicidial_list for the lead_id $stmt="SELECT lead_id,entry_date,modify_date,status,user,vendor_lead_code,source_id,list_id,gmt_offset_now,called_since_last_reset,phone_code,phone_number,title,first_name,middle_initial,last_name,address1,address2,address3,city,state,province,postal_code,country_code,gender,date_of_birth,alt_phone,email,security_phrase,comments,called_count,last_local_call_time,rank,owner,entry_list_id FROM vicidial_list where lead_id='$lead_id' LIMIT 1;"; $rslt=mysql_to_mysqli($stmt, $link); @@ -14056,6 +14075,61 @@ if ($ACTION == 'PauseCodeSubmit') } +################################################################################ +### PauseCodeMgrApr - Manager approval of agent pause code +################################################################################ +if ($ACTION == 'PauseCodeMgrApr') + { + $row=''; $rowx=''; + if ( (strlen($status)<1) or (strlen($MgrApr_user)<1) or (strlen($MgrApr_pass)<1) ) + { + echo _QXZ("manager username %1s, password or pause_code %2s is not valid",0,'',$MgrApr_user,$status)."\n"; + if ($SSagent_debug_logging > 0) {vicidial_ajax_log($NOW_TIME,$startMS,$link,$ACTION,$php_script,$user,$stage,$lead_id,$session_name,$stmt);} + exit; + } + else + { + $auth_message = user_authorization($MgrApr_user,$MgrApr_pass,'',0,0,0,0); + if ($auth_message == 'GOOD') + { + $auth_pca=0; + $stmt = "SELECT count(*) from vicidial_users where user='$MgrApr_user' and pause_code_approval='1';"; + if ($DB) {echo "$stmt\n";} + $rslt=mysql_to_mysqli($stmt, $link); + if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'00711',$user,$server_ip,$session_name,$one_mysql_log);} + $VUpca_ct = mysqli_num_rows($rslt); + if ($VUpca_ct > 0) + { + $row=mysqli_fetch_row($rslt); + $auth_pca = $row[0]; + } + + if ($auth_pca > 0) + { + ### insert into the vicidial_agent_function_log table that the switch happened + $stmt = "INSERT INTO vicidial_agent_function_log set agent_log_id='$agent_log_id',user='$user',function='mgrapr_pause_code',event_time=NOW(),campaign_id='$campaign',user_group='$user_group',lead_id='0',uniqueid='',caller_code='',stage='$MgrApr_user',comments='$status';"; + if ($DB) {echo "$stmt\n";} + $rslt=mysql_to_mysqli($stmt, $link); + if ($mel > 0) {$errno = mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'00712',$user,$server_ip,$session_name,$one_mysql_log);} + + echo _QXZ("Manager Approval of Pause Code is Accepted %1s",0,'',$status)." STATUS:\n" . $auth_message . "\n"; + $stage .= "|$MgrApr_user|$status|$auth_message|"; + } + else + { + echo _QXZ("Invalid Manager Permissions %1s",0,'',$MgrApr_user)." STATUS:\nBAD PERMISSIONS\n"; + $stage .= "|$MgrApr_user|$status|$auth_message|"; + } + } + else + { + echo _QXZ("Invalid Manager Credentials %1s",0,'',$MgrApr_user)." STATUS:\n" . $auth_message . "\n"; + $stage .= "|$MgrApr_user|$status|$auth_message|"; + } + } + } + + ################################################################################ ### AGENTSview - List statuses of other agents in sidebar or xfer frame ################################################################################ diff --git a/www/agc/vicidial.php b/www/agc/vicidial.php index a6736b48..697fac48 100644 --- a/www/agc/vicidial.php +++ b/www/agc/vicidial.php @@ -590,10 +590,11 @@ # 180323-2228 - Added more logging for notices # 180327-1355 - Added code for LOCALFQDN conversion to browser-used server URL for webform and script iframes # 180405-0913 - Fix for API Hangup after dial timeout +# 180410-1629 - Added Pause Code manager approval feature, Added switch_lead logging # -$version = '2.14-560c'; -$build = '180405-0913'; +$version = '2.14-561c'; +$build = '180410-1629'; $mel=1; # Mysql Error Log enabled = 1 $mysql_log_count=87; $one_mysql_log=0; @@ -2311,25 +2312,30 @@ else if ( (preg_match('/Y/',$agent_pause_codes_active)) or (preg_match('/FORCE/',$agent_pause_codes_active)) ) { ##### grab the pause codes for this campaign - $stmt="SELECT pause_code,pause_code_name FROM vicidial_pause_codes WHERE campaign_id='$VD_campaign' order by pause_code limit 100;"; + $stmt="SELECT pause_code,pause_code_name,require_mgr_approval FROM vicidial_pause_codes WHERE campaign_id='$VD_campaign' order by pause_code limit 100;"; $rslt=mysql_to_mysqli($stmt, $link); if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'01014',$VD_login,$server_ip,$session_name,$one_mysql_log);} if ($DB) {echo "$stmt\n";} $VD_pause_codes = mysqli_num_rows($rslt); $j=0; + $mgrapr_ct=0; while ($j < $VD_pause_codes) { $row=mysqli_fetch_row($rslt); - $pause_codes[$i] =$row[0]; - $pause_code_names[$i] =$row[1]; + $pause_codes[$i] = $row[0]; + $pause_code_names[$i] = $row[1]; + $pause_code_mgrapr[$i] = $row[2]; $VARpause_codes = "$VARpause_codes'$pause_codes[$i]',"; $VARpause_code_names = "$VARpause_code_names'$pause_code_names[$i]',"; + $VARpause_code_mgrapr = "$VARpause_code_mgrapr'$pause_code_mgrapr[$i]',"; + if ($pause_code_mgrapr[$i] == 'YES') {$mgrapr_ct++;} $i++; $j++; } $VD_pause_codes_ct = ($VD_pause_codes_ct+$VD_pause_codes); - $VARpause_codes = substr("$VARpause_codes", 0, -1); - $VARpause_code_names = substr("$VARpause_code_names", 0, -1); + $VARpause_codes = substr("$VARpause_codes", 0, -1); + $VARpause_code_names = substr("$VARpause_code_names", 0, -1); + $VARpause_code_mgrapr = substr("$VARpause_code_mgrapr", 0, -1); } ##### grab the inbound groups to choose from if campaign contains CLOSER @@ -4062,6 +4068,7 @@ $CCAL_OUT .= ""; var agent_pause_codes_active = ''; VARpause_codes = new Array(); VARpause_code_names = new Array(); + VARpause_code_mgrapr = new Array(); var VD_pause_codes_ct = ''; VARpreset_names = new Array(); VARpreset_numbers = new Array(); @@ -7672,7 +7679,7 @@ function set_length(SLnumber,SLlength_goal,SLdirection) } if (xmlhttprequestselectupdate) { - checkVDAI_query = "server_ip=" + server_ip + "&session_name=" + session_name + "&user=" + user + "&pass=" + pass + "&campaign=" + campaign + "&ACTION=LeaDSearcHSelecTUpdatE" + "&lead_id=" + LSSlead_id + "&stage=" + document.vicidial_form.lead_id.value + "&agent_log_id=" + agent_log_id + "&phone_number=" + document.vicidial_form.phone_number.value; + checkVDAI_query = "server_ip=" + server_ip + "&session_name=" + session_name + "&user=" + user + "&pass=" + pass + "&campaign=" + campaign + "&ACTION=LeaDSearcHSelecTUpdatE" + "&lead_id=" + LSSlead_id + "&stage=" + document.vicidial_form.lead_id.value + "&agent_log_id=" + agent_log_id + "&phone_number=" + document.vicidial_form.phone_number.value + "&user_group=" + VU_user_group; xmlhttprequestselectupdate.open('POST', 'vdc_db_query.php'); xmlhttprequestselectupdate.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8'); xmlhttprequestselectupdate.send(checkVDAI_query); @@ -13004,13 +13011,24 @@ function set_length(SLnumber,SLlength_goal,SLdirection) showDiv('PauseCodeSelectBox'); WaitingForNextStep=1; PauseCode_HTML = ''; + var mgrapr_ct=0; document.vicidial_form.PauseCodeSelection.value = ''; var VD_pause_codes_ct_half = parseInt(VD_pause_codes_ct / 2); PauseCode_HTML = "
"; var loop_ct = 0; while (loop_ct < VD_pause_codes_ct) { - PauseCode_HTML = PauseCode_HTML + "" + VARpause_codes[loop_ct] + " - " + VARpause_code_names[loop_ct] + "

"; + var temp_mgrapr=''; + if (VARpause_code_mgrapr[loop_ct] == 'YES') + { + mgrapr_ct++; + temp_mgrapr=' *'; + PauseCode_HTML = PauseCode_HTML + "" + VARpause_codes[loop_ct] + " - " + VARpause_code_names[loop_ct] + '' + temp_mgrapr + "

"; + } + else + { + PauseCode_HTML = PauseCode_HTML + "" + VARpause_codes[loop_ct] + " - " + VARpause_code_names[loop_ct] + "

"; + } loop_ct++; if (loop_ct == VD_pause_codes_ct_half) {PauseCode_HTML = PauseCode_HTML + "
";} @@ -13861,6 +13879,89 @@ function set_length(SLnumber,SLlength_goal,SLdirection) } +// ################################################################################ +// Open the Manager Approval for agent Pause Code Box + function PauseCodeOpen_mgrapr(newpausecode,newpausecodename,PCSclick) + { + button_click_log = button_click_log + "" + SQLdate + "-----PauseCodeOpen_mgrapr---" + newpausecode + "|"; + showDiv('PauseCodeMgrAprBox'); + document.getElementById("PauseCodeMgrAprSelection").value = newpausecode; + document.getElementById("PauseCodeMgrAprContent").innerHTML = ': ' + newpausecode + ' - ' + newpausecodename; + } + + +// ################################################################################ +// Cancel the Manager Approval for agent Pause Code Box + function PauseCodeCancel_mgrapr() + { + button_click_log = button_click_log + "" + SQLdate + "-----PauseCodeCancel_mgrapr---" + document.getElementById("PauseCodeMgrAprSelection").value + "|"; + hideDiv('PauseCodeMgrAprBox'); + document.getElementById("MgrApr_user").value = ''; + document.getElementById("MgrApr_pass").value = ''; + document.getElementById("PauseCodeMgrAprSelection").value = ''; + document.getElementById("PauseCodeMgrAprContent").innerHTML = ''; + } + + +// ################################################################################ +// Submit the Manager Approval for agent Pause Code + function PauseCodeSelect_MgrApr() + { + button_click_log = button_click_log + "" + SQLdate + "-----PauseCodeSelect_MgrApr---" + document.getElementById("PauseCodeMgrAprSelection").value + "|"; + // hideDiv('PauseCodeSelectBox'); + var temp_MgrApr_user = document.getElementById("MgrApr_user").value; + var temp_MgrApr_pass = document.getElementById("MgrApr_pass").value; + 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) + { + VMCpausecodeMgrApr_query = "server_ip=" + server_ip + "&session_name=" + session_name + "&user=" + user + "&pass=" + pass + "&ACTION=PauseCodeMgrApr&format=text&MgrApr_user=" + temp_MgrApr_user + "&MgrApr_pass=" + temp_MgrApr_pass + "&campaign=" + campaign + "&status=" + document.getElementById("PauseCodeMgrAprSelection").value + "&agent_log_id=" + agent_log_id + "&user_group=" + VU_user_group; + xmlhttp.open('POST', 'vdc_db_query.php'); + xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8'); + xmlhttp.send(VMCpausecodeMgrApr_query); + xmlhttp.onreadystatechange = function() + { + if (xmlhttp.readyState == 4 && xmlhttp.status == 200) + { + var check_pause_code = null; + var check_pause_code = xmlhttp.responseText; + var check_PC_array=check_pause_code.split("\n"); + if (check_PC_array[1] == 'GOOD') + { + PauseCodeSelect_submit(document.getElementById("PauseCodeMgrAprSelection").value,'YES'); + PauseCodeCancel_mgrapr(); + } + else + { + alert_box(": " + temp_MgrApr_user + ''); + } + // alert(VMCpausecodeMgrApr_query); + // alert(xmlhttp.responseText + "\n|" + check_PC_array[0] + "\n|" + check_PC_array[1] + "|" + agent_log_id + "|" + pause_code_counter); + } + } + delete xmlhttp; + } + scroll(0,0); + } + + // ################################################################################ // Submit the Group Alias function GroupAliasSelect_submit(newgroupalias,newgroupcid,newusegroup) @@ -17200,6 +17301,7 @@ function phone_number_format(formatphone) { hideDiv('CallBacKsLisTBox'); hideDiv('NeWManuaLDiaLBox'); hideDiv('PauseCodeSelectBox'); + hideDiv('PauseCodeMgrAprBox'); hideDiv('PresetsSelectBox'); hideDiv('GroupAliasSelectBox'); hideDiv('DiaLInGrouPSelectBox'); @@ -20146,6 +20248,33 @@ if ($agent_display_dialable_leads > 0) ?> + 0) + {echo "

* "._QXZ("These pause codes require manager approval")."\n";} + ?> +

 
+
+ + + +
:

+
\n";} + ?> + +
+ + +


+ : +
+ : +

+ +     + +

 
diff --git a/www/vicidial/admin.php b/www/vicidial/admin.php index 10c8bd80..74b637a5 100644 --- a/www/vicidial/admin.php +++ b/www/vicidial/admin.php @@ -2349,6 +2349,10 @@ if (isset($_GET["script_top_dispo"])) {$script_top_dispo=$_GET["script_top_dis elseif (isset($_POST["script_top_dispo"])) {$script_top_dispo=$_POST["script_top_dispo"];} if (isset($_GET["source_id_display"])) {$source_id_display=$_GET["source_id_display"];} elseif (isset($_POST["source_id_display"])) {$source_id_display=$_POST["source_id_display"];} +if (isset($_GET["require_mgr_approval"])) {$require_mgr_approval=$_GET["require_mgr_approval"];} + elseif (isset($_POST["require_mgr_approval"])) {$require_mgr_approval=$_POST["require_mgr_approval"];} +if (isset($_GET["pause_code_approval"])) {$pause_code_approval=$_GET["pause_code_approval"];} + elseif (isset($_POST["pause_code_approval"])) {$pause_code_approval=$_POST["pause_code_approval"];} if (isset($script_id)) {$script_id= strtoupper($script_id);} @@ -2772,6 +2776,7 @@ if ($non_latin < 1) $did_system_filter = preg_replace('/[^0-9]/','',$did_system_filter); $icbq_expiration_hours = preg_replace('/[^0-9]/','',$icbq_expiration_hours); $source_id_display = preg_replace('/[^0-9]/','',$source_id_display); + $pause_code_approval = preg_replace('/[^0-9]/','',$pause_code_approval); $user_new_lead_limit = preg_replace('/[^-0-9]/','',$user_new_lead_limit); $drop_call_seconds = preg_replace('/[^-0-9]/','',$drop_call_seconds); @@ -2997,6 +3002,7 @@ if ($non_latin < 1) $inbound_list_script_override = preg_replace('/[^0-9a-zA-Z]/','',$inbound_list_script_override); $pause_max_dispo = preg_replace('/[^0-9a-zA-Z]/','',$pause_max_dispo); $areacode = preg_replace('/[^0-9a-zA-Z]/','',$areacode); + $require_mgr_approval = preg_replace('/[^0-9a-zA-Z]/','',$require_mgr_approval); ### DIGITS and Dots $server_ip = preg_replace('/[^\.0-9]/','',$server_ip); @@ -4329,12 +4335,13 @@ else # 180316-0751 - Translated phrases fixes, issue #1081 # 180330-1425 - Added download of CID Group records feature # 180331-1715 - Added update_did non-agent API function +# 180410-1600 - Added pause code manager approval settings # # 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.14-667a'; -$build = '180331-1715'; +$admin_version = '2.14-668a'; +$build = '180410-1600'; $STARTtime = date("U"); $SQLdate = date("Y-m-d H:i:s"); @@ -9499,7 +9506,7 @@ if ($ADD=="2A") $pass=''; } - $stmt="INSERT INTO vicidial_users (user,pass,full_name,user_level,user_group,phone_login,phone_pass,delete_users,delete_user_groups,delete_lists,delete_campaigns,delete_ingroups,delete_remote_agents,load_leads,campaign_detail,ast_admin_access,ast_delete_phones,delete_scripts,modify_leads,hotkeys_active,change_agent_campaign,agent_choose_ingroups,closer_campaigns,scheduled_callbacks,agentonly_callbacks,agentcall_manual,vicidial_recording,vicidial_transfers,delete_filters,alter_agent_interface_options,closer_default_blended,delete_call_times,modify_call_times,modify_users,modify_campaigns,modify_lists,modify_scripts,modify_filters,modify_ingroups,modify_usergroups,modify_remoteagents,modify_servers,view_reports,vicidial_recording_override,alter_custdata_override,qc_enabled,qc_user_level,qc_pass,qc_finish,qc_commit,add_timeclock_log,modify_timeclock_log,delete_timeclock_log,alter_custphone_override,vdc_agent_api_access,modify_inbound_dids,delete_inbound_dids,active,alert_enabled,download_lists,agent_shift_enforcement_override,manager_shift_enforcement_override,export_reports,delete_from_dnc,email,user_code,territory,allow_alerts,agent_choose_territories,custom_one,custom_two,custom_three,custom_four,custom_five,voicemail_id,agent_call_log_view_override,callcard_admin,agent_choose_blended,realtime_block_user_info,custom_fields_modify,force_change_password,agent_lead_search_override,modify_shifts,modify_phones,modify_carriers,modify_labels,modify_statuses,modify_voicemail,modify_audiostore,modify_moh,modify_tts,preset_contact_search,modify_contacts,modify_same_user_level,admin_hide_lead_data,admin_hide_phone_data,agentcall_email,agentcall_chat,modify_email_accounts,pass_hash,alter_admin_interface_options,max_inbound_calls,modify_custom_dialplans,wrapup_seconds_override,modify_languages,selected_language,user_choose_language,ignore_group_on_search,api_list_restrict,api_allowed_functions,lead_filter_id,admin_cf_show_hidden,user_hide_realtime,modify_colors,user_nickname,user_new_lead_limit,api_only_user,modify_auto_reports,modify_ip_lists,ignore_ip_list,ready_max_logout,export_gdpr_leads,access_recordings) SELECT \"$user\",\"$pass\",\"$full_name\",user_level,user_group,phone_login,phone_pass,delete_users,delete_user_groups,delete_lists,delete_campaigns,delete_ingroups,delete_remote_agents,load_leads,campaign_detail,ast_admin_access,ast_delete_phones,delete_scripts,modify_leads,hotkeys_active,change_agent_campaign,agent_choose_ingroups,closer_campaigns,scheduled_callbacks,agentonly_callbacks,agentcall_manual,vicidial_recording,vicidial_transfers,delete_filters,alter_agent_interface_options,closer_default_blended,delete_call_times,modify_call_times,modify_users,modify_campaigns,modify_lists,modify_scripts,modify_filters,modify_ingroups,modify_usergroups,modify_remoteagents,modify_servers,view_reports,vicidial_recording_override,alter_custdata_override,qc_enabled,qc_user_level,qc_pass,qc_finish,qc_commit,add_timeclock_log,modify_timeclock_log,delete_timeclock_log,alter_custphone_override,vdc_agent_api_access,modify_inbound_dids,delete_inbound_dids,active,alert_enabled,download_lists,agent_shift_enforcement_override,manager_shift_enforcement_override,export_reports,delete_from_dnc,email,user_code,territory,allow_alerts,agent_choose_territories,custom_one,custom_two,custom_three,custom_four,custom_five,voicemail_id,agent_call_log_view_override,callcard_admin,agent_choose_blended,realtime_block_user_info,custom_fields_modify,force_change_password,agent_lead_search_override,modify_shifts,modify_phones,modify_carriers,modify_labels,modify_statuses,modify_voicemail,modify_audiostore,modify_moh,modify_tts,preset_contact_search,modify_contacts,modify_same_user_level,admin_hide_lead_data,admin_hide_phone_data,agentcall_email,agentcall_chat,modify_email_accounts,\"$pass_hash\",alter_admin_interface_options,max_inbound_calls,modify_custom_dialplans,wrapup_seconds_override,modify_languages,selected_language,user_choose_language,ignore_group_on_search,api_list_restrict,api_allowed_functions,lead_filter_id,admin_cf_show_hidden,user_hide_realtime,modify_colors,user_nickname,user_new_lead_limit,api_only_user,modify_auto_reports,modify_ip_lists,ignore_ip_list,ready_max_logout,export_gdpr_leads,access_recordings from vicidial_users where user=\"$source_user_id\";"; + $stmt="INSERT INTO vicidial_users (user,pass,full_name,user_level,user_group,phone_login,phone_pass,delete_users,delete_user_groups,delete_lists,delete_campaigns,delete_ingroups,delete_remote_agents,load_leads,campaign_detail,ast_admin_access,ast_delete_phones,delete_scripts,modify_leads,hotkeys_active,change_agent_campaign,agent_choose_ingroups,closer_campaigns,scheduled_callbacks,agentonly_callbacks,agentcall_manual,vicidial_recording,vicidial_transfers,delete_filters,alter_agent_interface_options,closer_default_blended,delete_call_times,modify_call_times,modify_users,modify_campaigns,modify_lists,modify_scripts,modify_filters,modify_ingroups,modify_usergroups,modify_remoteagents,modify_servers,view_reports,vicidial_recording_override,alter_custdata_override,qc_enabled,qc_user_level,qc_pass,qc_finish,qc_commit,add_timeclock_log,modify_timeclock_log,delete_timeclock_log,alter_custphone_override,vdc_agent_api_access,modify_inbound_dids,delete_inbound_dids,active,alert_enabled,download_lists,agent_shift_enforcement_override,manager_shift_enforcement_override,export_reports,delete_from_dnc,email,user_code,territory,allow_alerts,agent_choose_territories,custom_one,custom_two,custom_three,custom_four,custom_five,voicemail_id,agent_call_log_view_override,callcard_admin,agent_choose_blended,realtime_block_user_info,custom_fields_modify,force_change_password,agent_lead_search_override,modify_shifts,modify_phones,modify_carriers,modify_labels,modify_statuses,modify_voicemail,modify_audiostore,modify_moh,modify_tts,preset_contact_search,modify_contacts,modify_same_user_level,admin_hide_lead_data,admin_hide_phone_data,agentcall_email,agentcall_chat,modify_email_accounts,pass_hash,alter_admin_interface_options,max_inbound_calls,modify_custom_dialplans,wrapup_seconds_override,modify_languages,selected_language,user_choose_language,ignore_group_on_search,api_list_restrict,api_allowed_functions,lead_filter_id,admin_cf_show_hidden,user_hide_realtime,modify_colors,user_nickname,user_new_lead_limit,api_only_user,modify_auto_reports,modify_ip_lists,ignore_ip_list,ready_max_logout,export_gdpr_leads,access_recordings,pause_code_approval) SELECT \"$user\",\"$pass\",\"$full_name\",user_level,user_group,phone_login,phone_pass,delete_users,delete_user_groups,delete_lists,delete_campaigns,delete_ingroups,delete_remote_agents,load_leads,campaign_detail,ast_admin_access,ast_delete_phones,delete_scripts,modify_leads,hotkeys_active,change_agent_campaign,agent_choose_ingroups,closer_campaigns,scheduled_callbacks,agentonly_callbacks,agentcall_manual,vicidial_recording,vicidial_transfers,delete_filters,alter_agent_interface_options,closer_default_blended,delete_call_times,modify_call_times,modify_users,modify_campaigns,modify_lists,modify_scripts,modify_filters,modify_ingroups,modify_usergroups,modify_remoteagents,modify_servers,view_reports,vicidial_recording_override,alter_custdata_override,qc_enabled,qc_user_level,qc_pass,qc_finish,qc_commit,add_timeclock_log,modify_timeclock_log,delete_timeclock_log,alter_custphone_override,vdc_agent_api_access,modify_inbound_dids,delete_inbound_dids,active,alert_enabled,download_lists,agent_shift_enforcement_override,manager_shift_enforcement_override,export_reports,delete_from_dnc,email,user_code,territory,allow_alerts,agent_choose_territories,custom_one,custom_two,custom_three,custom_four,custom_five,voicemail_id,agent_call_log_view_override,callcard_admin,agent_choose_blended,realtime_block_user_info,custom_fields_modify,force_change_password,agent_lead_search_override,modify_shifts,modify_phones,modify_carriers,modify_labels,modify_statuses,modify_voicemail,modify_audiostore,modify_moh,modify_tts,preset_contact_search,modify_contacts,modify_same_user_level,admin_hide_lead_data,admin_hide_phone_data,agentcall_email,agentcall_chat,modify_email_accounts,\"$pass_hash\",alter_admin_interface_options,max_inbound_calls,modify_custom_dialplans,wrapup_seconds_override,modify_languages,selected_language,user_choose_language,ignore_group_on_search,api_list_restrict,api_allowed_functions,lead_filter_id,admin_cf_show_hidden,user_hide_realtime,modify_colors,user_nickname,user_new_lead_limit,api_only_user,modify_auto_reports,modify_ip_lists,ignore_ip_list,ready_max_logout,export_gdpr_leads,access_recordings,pause_code_approval from vicidial_users where user=\"$source_user_id\";"; $rslt=mysql_to_mysqli($stmt, $link); $stmtA="INSERT INTO vicidial_inbound_group_agents (user,group_id,group_rank,group_weight,calls_today,group_type) SELECT \"$user\",group_id,group_rank,group_weight,\"0\",group_type from vicidial_inbound_group_agents where user=\"$source_user_id\";"; @@ -9917,7 +9924,7 @@ if ($ADD==20) $stmtE="INSERT INTO vicidial_lead_recycle (status,attempt_delay,attempt_maximum,active,campaign_id) SELECT status,attempt_delay,attempt_maximum,active,\"$campaign_id\" from vicidial_lead_recycle where campaign_id='$source_campaign_id';"; $rslt=mysql_to_mysqli($stmtE, $link); - $stmtF="INSERT INTO vicidial_pause_codes (pause_code,pause_code_name,billable,campaign_id,time_limit) SELECT pause_code,pause_code_name,billable,\"$campaign_id\",time_limit from vicidial_pause_codes where campaign_id='$source_campaign_id';"; + $stmtF="INSERT INTO vicidial_pause_codes (pause_code,pause_code_name,billable,campaign_id,time_limit,require_mgr_approval) SELECT pause_code,pause_code_name,billable,\"$campaign_id\",time_limit,require_mgr_approval from vicidial_pause_codes where campaign_id='$source_campaign_id';"; $rslt=mysql_to_mysqli($stmtF, $link); $stmtG="INSERT INTO vicidial_xfer_presets (campaign_id,preset_name,preset_number,preset_dtmf,preset_hide_number) SELECT \"$campaign_id\",preset_name,preset_number,preset_dtmf,preset_hide_number from vicidial_xfer_presets where campaign_id='$source_campaign_id';"; @@ -10184,7 +10191,7 @@ if ($ADD==27) echo "
"._QXZ("AGENT PAUSE CODE ADDED").": $campaign_id - $pause_code - $pause_code_name\n"; if (strlen($time_limit) < 1) {$time_limit='65000';} - $stmt="INSERT INTO vicidial_pause_codes(campaign_id,pause_code,pause_code_name,billable,time_limit) values('$campaign_id','$pause_code','$pause_code_name','$billable','$time_limit');"; + $stmt="INSERT INTO vicidial_pause_codes(campaign_id,pause_code,pause_code_name,billable,time_limit,require_mgr_approval) values('$campaign_id','$pause_code','$pause_code_name','$billable','$time_limit','$require_mgr_approval');"; $rslt=mysql_to_mysqli($stmt, $link); ### LOG INSERTION Admin Log Table ### @@ -13118,7 +13125,7 @@ if ($ADD=="4A") echo "
"._QXZ("USER MODIFIED - ADMIN").": $user\n"; - $stmt="UPDATE vicidial_users set pass='$pass',full_name='$full_name',user_level='$user_level',user_group='$user_group',phone_login='$phone_login',phone_pass='$phone_pass',delete_users='$delete_users',delete_user_groups='$delete_user_groups',delete_lists='$delete_lists',delete_campaigns='$delete_campaigns',delete_ingroups='$delete_ingroups',delete_remote_agents='$delete_remote_agents',load_leads='$load_leads',campaign_detail='$campaign_detail',ast_admin_access='$ast_admin_access',ast_delete_phones='$ast_delete_phones',delete_scripts='$delete_scripts',modify_leads='$modify_leads',hotkeys_active='$hotkeys_active',change_agent_campaign='$change_agent_campaign',agent_choose_ingroups='$agent_choose_ingroups',closer_campaigns='$groups_value',scheduled_callbacks='$scheduled_callbacks',agentonly_callbacks='$agentonly_callbacks',agentcall_manual='$agentcall_manual',vicidial_recording='$vicidial_recording',vicidial_transfers='$vicidial_transfers',delete_filters='$delete_filters',alter_agent_interface_options='$alter_agent_interface_options',closer_default_blended='$closer_default_blended',delete_call_times='$delete_call_times',modify_call_times='$modify_call_times',modify_users='$modify_users',modify_campaigns='$modify_campaigns',modify_lists='$modify_lists',modify_scripts='$modify_scripts',modify_filters='$modify_filters',modify_ingroups='$modify_ingroups',modify_usergroups='$modify_usergroups',modify_remoteagents='$modify_remoteagents',modify_servers='$modify_servers',view_reports='$view_reports',vicidial_recording_override='$vicidial_recording_override',alter_custdata_override='$alter_custdata_override',qc_enabled='$qc_enabled',qc_user_level='$qc_user_level',qc_pass='$qc_pass',qc_finish='$qc_finish',qc_commit='$qc_commit',add_timeclock_log='$add_timeclock_log',modify_timeclock_log='$modify_timeclock_log',delete_timeclock_log='$delete_timeclock_log',alter_custphone_override='$alter_custphone_override',vdc_agent_api_access='$vdc_agent_api_access',modify_inbound_dids='$modify_inbound_dids',delete_inbound_dids='$delete_inbound_dids',active='$active',download_lists='$download_lists',agent_shift_enforcement_override='$agent_shift_enforcement_override',manager_shift_enforcement_override='$manager_shift_enforcement_override',export_reports='$export_reports',delete_from_dnc='$delete_from_dnc',email='$email',user_code='$user_code',territory='$territory',allow_alerts='$allow_alerts',agent_choose_territories='$agent_choose_territories',custom_one='$custom_one',custom_two='$custom_two',custom_three='$custom_three',custom_four='$custom_four',custom_five='$custom_five',voicemail_id='$voicemail_id',agent_call_log_view_override='$agent_call_log_view_override',callcard_admin='$callcard_admin',agent_choose_blended='$agent_choose_blended',realtime_block_user_info='$realtime_block_user_info',custom_fields_modify='$custom_fields_modify',force_change_password='$force_change_password',agent_lead_search_override='$agent_lead_search',modify_shifts='$modify_shifts',modify_phones='$modify_phones',modify_carriers='$modify_carriers',modify_labels='$modify_labels',modify_statuses='$modify_statuses',modify_voicemail='$modify_voicemail',modify_audiostore='$modify_audiostore',modify_moh='$modify_moh',modify_tts='$modify_tts',preset_contact_search='$preset_contact_search',modify_contacts='$modify_contacts',modify_same_user_level='$modify_same_user_level',admin_hide_lead_data='$admin_hide_lead_data',admin_hide_phone_data='$admin_hide_phone_data',agentcall_email='$agentcall_email',agentcall_chat='$agentcall_chat',modify_email_accounts='$modify_email_accounts',failed_login_count=0,alter_admin_interface_options='$alter_admin_interface_options',max_inbound_calls='$max_inbound_calls',modify_custom_dialplans='$modify_custom_dialplans',wrapup_seconds_override='$wrapup_seconds_override',modify_languages='$modify_languages',selected_language='$selected_language',user_choose_language='$user_choose_language',ignore_group_on_search='$ignore_group_on_search',api_list_restrict='$api_list_restrict',api_allowed_functions='$api_allowed_functions',lead_filter_id='$lead_filter_id',admin_cf_show_hidden='$admin_cf_show_hidden',user_hide_realtime='$user_hide_realtime',access_recordings='$access_recordings',modify_colors='$modify_colors',user_nickname='$user_nickname',user_new_lead_limit='$user_new_lead_limit',api_only_user='$api_only_user',modify_auto_reports='$modify_auto_reports',modify_ip_lists='$modify_ip_lists',ignore_ip_list='$ignore_ip_list',ready_max_logout='$ready_max_logout',export_gdpr_leads='$export_gdpr_leads' $pass_hashSQL where user='$user' $LOGadmin_viewable_groupsSQL;"; + $stmt="UPDATE vicidial_users set pass='$pass',full_name='$full_name',user_level='$user_level',user_group='$user_group',phone_login='$phone_login',phone_pass='$phone_pass',delete_users='$delete_users',delete_user_groups='$delete_user_groups',delete_lists='$delete_lists',delete_campaigns='$delete_campaigns',delete_ingroups='$delete_ingroups',delete_remote_agents='$delete_remote_agents',load_leads='$load_leads',campaign_detail='$campaign_detail',ast_admin_access='$ast_admin_access',ast_delete_phones='$ast_delete_phones',delete_scripts='$delete_scripts',modify_leads='$modify_leads',hotkeys_active='$hotkeys_active',change_agent_campaign='$change_agent_campaign',agent_choose_ingroups='$agent_choose_ingroups',closer_campaigns='$groups_value',scheduled_callbacks='$scheduled_callbacks',agentonly_callbacks='$agentonly_callbacks',agentcall_manual='$agentcall_manual',vicidial_recording='$vicidial_recording',vicidial_transfers='$vicidial_transfers',delete_filters='$delete_filters',alter_agent_interface_options='$alter_agent_interface_options',closer_default_blended='$closer_default_blended',delete_call_times='$delete_call_times',modify_call_times='$modify_call_times',modify_users='$modify_users',modify_campaigns='$modify_campaigns',modify_lists='$modify_lists',modify_scripts='$modify_scripts',modify_filters='$modify_filters',modify_ingroups='$modify_ingroups',modify_usergroups='$modify_usergroups',modify_remoteagents='$modify_remoteagents',modify_servers='$modify_servers',view_reports='$view_reports',vicidial_recording_override='$vicidial_recording_override',alter_custdata_override='$alter_custdata_override',qc_enabled='$qc_enabled',qc_user_level='$qc_user_level',qc_pass='$qc_pass',qc_finish='$qc_finish',qc_commit='$qc_commit',add_timeclock_log='$add_timeclock_log',modify_timeclock_log='$modify_timeclock_log',delete_timeclock_log='$delete_timeclock_log',alter_custphone_override='$alter_custphone_override',vdc_agent_api_access='$vdc_agent_api_access',modify_inbound_dids='$modify_inbound_dids',delete_inbound_dids='$delete_inbound_dids',active='$active',download_lists='$download_lists',agent_shift_enforcement_override='$agent_shift_enforcement_override',manager_shift_enforcement_override='$manager_shift_enforcement_override',export_reports='$export_reports',delete_from_dnc='$delete_from_dnc',email='$email',user_code='$user_code',territory='$territory',allow_alerts='$allow_alerts',agent_choose_territories='$agent_choose_territories',custom_one='$custom_one',custom_two='$custom_two',custom_three='$custom_three',custom_four='$custom_four',custom_five='$custom_five',voicemail_id='$voicemail_id',agent_call_log_view_override='$agent_call_log_view_override',callcard_admin='$callcard_admin',agent_choose_blended='$agent_choose_blended',realtime_block_user_info='$realtime_block_user_info',custom_fields_modify='$custom_fields_modify',force_change_password='$force_change_password',agent_lead_search_override='$agent_lead_search',modify_shifts='$modify_shifts',modify_phones='$modify_phones',modify_carriers='$modify_carriers',modify_labels='$modify_labels',modify_statuses='$modify_statuses',modify_voicemail='$modify_voicemail',modify_audiostore='$modify_audiostore',modify_moh='$modify_moh',modify_tts='$modify_tts',preset_contact_search='$preset_contact_search',modify_contacts='$modify_contacts',modify_same_user_level='$modify_same_user_level',admin_hide_lead_data='$admin_hide_lead_data',admin_hide_phone_data='$admin_hide_phone_data',agentcall_email='$agentcall_email',agentcall_chat='$agentcall_chat',modify_email_accounts='$modify_email_accounts',failed_login_count=0,alter_admin_interface_options='$alter_admin_interface_options',max_inbound_calls='$max_inbound_calls',modify_custom_dialplans='$modify_custom_dialplans',wrapup_seconds_override='$wrapup_seconds_override',modify_languages='$modify_languages',selected_language='$selected_language',user_choose_language='$user_choose_language',ignore_group_on_search='$ignore_group_on_search',api_list_restrict='$api_list_restrict',api_allowed_functions='$api_allowed_functions',lead_filter_id='$lead_filter_id',admin_cf_show_hidden='$admin_cf_show_hidden',user_hide_realtime='$user_hide_realtime',access_recordings='$access_recordings',modify_colors='$modify_colors',user_nickname='$user_nickname',user_new_lead_limit='$user_new_lead_limit',api_only_user='$api_only_user',modify_auto_reports='$modify_auto_reports',modify_ip_lists='$modify_ip_lists',ignore_ip_list='$ignore_ip_list',ready_max_logout='$ready_max_logout',export_gdpr_leads='$export_gdpr_leads',pause_code_approval='$pause_code_approval' $pass_hashSQL where user='$user' $LOGadmin_viewable_groupsSQL;"; $rslt=mysql_to_mysqli($stmt, $link); ### LOG INSERTION Admin Log Table ### @@ -14528,7 +14535,7 @@ if ($ADD==47) echo "
"._QXZ("AGENT PAUSE CODE MODIFIED").": $campaign_id - $pause_code - $pause_code_name\n"; if (strlen($time_limit) < 1) {$time_limit='65000';} - $stmt="UPDATE vicidial_pause_codes SET pause_code_name='$pause_code_name',billable='$billable',time_limit='$time_limit' where campaign_id='$campaign_id' and pause_code='$pause_code';"; + $stmt="UPDATE vicidial_pause_codes SET pause_code_name='$pause_code_name',billable='$billable',time_limit='$time_limit',require_mgr_approval='$require_mgr_approval' where campaign_id='$campaign_id' and pause_code='$pause_code';"; $rslt=mysql_to_mysqli($stmt, $link); ### LOG INSERTION Admin Log Table ### @@ -20970,7 +20977,7 @@ if ($ADD==3) echo "\n"; echo "\n"; + echo "\n"; if (preg_match("/cf_encrypt/",$SSactive_modules)) - {echo "\n";} + {echo "\n";} else {echo "\n";} @@ -24124,15 +24133,15 @@ if ($ADD==31) if ($SUB==27) { echo "

"._QXZ("AGENT PAUSE CODES FOR THIS CAMPAIGN").":   $NWB#pause_codes$NWE
\n"; - echo "
\n"; echo ""; - $stmt="SELECT user_id,user,pass,full_name,user_level,user_group,phone_login,phone_pass,delete_users,delete_user_groups,delete_lists,delete_campaigns,delete_ingroups,delete_remote_agents,load_leads,campaign_detail,ast_admin_access,ast_delete_phones,delete_scripts,modify_leads,hotkeys_active,change_agent_campaign,agent_choose_ingroups,closer_campaigns,scheduled_callbacks,agentonly_callbacks,agentcall_manual,vicidial_recording,vicidial_transfers,delete_filters,alter_agent_interface_options,closer_default_blended,delete_call_times,modify_call_times,modify_users,modify_campaigns,modify_lists,modify_scripts,modify_filters,modify_ingroups,modify_usergroups,modify_remoteagents,modify_servers,view_reports,vicidial_recording_override,alter_custdata_override,qc_enabled,qc_user_level,qc_pass,qc_finish,qc_commit,add_timeclock_log,modify_timeclock_log,delete_timeclock_log,alter_custphone_override,vdc_agent_api_access,modify_inbound_dids,delete_inbound_dids,active,alert_enabled,download_lists,agent_shift_enforcement_override,manager_shift_enforcement_override,shift_override_flag,export_reports,delete_from_dnc,email,user_code,territory,allow_alerts,agent_choose_territories,custom_one,custom_two,custom_three,custom_four,custom_five,voicemail_id,agent_call_log_view_override,callcard_admin,agent_choose_blended,realtime_block_user_info,custom_fields_modify,force_change_password,agent_lead_search_override,modify_shifts,modify_phones,modify_carriers,modify_labels,modify_statuses,modify_voicemail,modify_audiostore,modify_moh,modify_tts,preset_contact_search,modify_contacts,modify_same_user_level,admin_hide_lead_data,admin_hide_phone_data,agentcall_email,modify_email_accounts,failed_login_count,last_login_date,last_ip,alter_admin_interface_options,max_inbound_calls,modify_custom_dialplans,wrapup_seconds_override,modify_languages,selected_language,user_choose_language,ignore_group_on_search,api_list_restrict,api_allowed_functions,lead_filter_id,agentcall_chat,admin_cf_show_hidden,user_hide_realtime,access_recordings,modify_colors,user_nickname,user_new_lead_limit,api_only_user,modify_auto_reports,modify_ip_lists,ignore_ip_list,ready_max_logout,export_gdpr_leads from vicidial_users where user='$user' $LOGadmin_viewable_groupsSQL;"; + $stmt="SELECT user_id,user,pass,full_name,user_level,user_group,phone_login,phone_pass,delete_users,delete_user_groups,delete_lists,delete_campaigns,delete_ingroups,delete_remote_agents,load_leads,campaign_detail,ast_admin_access,ast_delete_phones,delete_scripts,modify_leads,hotkeys_active,change_agent_campaign,agent_choose_ingroups,closer_campaigns,scheduled_callbacks,agentonly_callbacks,agentcall_manual,vicidial_recording,vicidial_transfers,delete_filters,alter_agent_interface_options,closer_default_blended,delete_call_times,modify_call_times,modify_users,modify_campaigns,modify_lists,modify_scripts,modify_filters,modify_ingroups,modify_usergroups,modify_remoteagents,modify_servers,view_reports,vicidial_recording_override,alter_custdata_override,qc_enabled,qc_user_level,qc_pass,qc_finish,qc_commit,add_timeclock_log,modify_timeclock_log,delete_timeclock_log,alter_custphone_override,vdc_agent_api_access,modify_inbound_dids,delete_inbound_dids,active,alert_enabled,download_lists,agent_shift_enforcement_override,manager_shift_enforcement_override,shift_override_flag,export_reports,delete_from_dnc,email,user_code,territory,allow_alerts,agent_choose_territories,custom_one,custom_two,custom_three,custom_four,custom_five,voicemail_id,agent_call_log_view_override,callcard_admin,agent_choose_blended,realtime_block_user_info,custom_fields_modify,force_change_password,agent_lead_search_override,modify_shifts,modify_phones,modify_carriers,modify_labels,modify_statuses,modify_voicemail,modify_audiostore,modify_moh,modify_tts,preset_contact_search,modify_contacts,modify_same_user_level,admin_hide_lead_data,admin_hide_phone_data,agentcall_email,modify_email_accounts,failed_login_count,last_login_date,last_ip,alter_admin_interface_options,max_inbound_calls,modify_custom_dialplans,wrapup_seconds_override,modify_languages,selected_language,user_choose_language,ignore_group_on_search,api_list_restrict,api_allowed_functions,lead_filter_id,agentcall_chat,admin_cf_show_hidden,user_hide_realtime,access_recordings,modify_colors,user_nickname,user_new_lead_limit,api_only_user,modify_auto_reports,modify_ip_lists,ignore_ip_list,ready_max_logout,export_gdpr_leads,pause_code_approval from vicidial_users where user='$user' $LOGadmin_viewable_groupsSQL;"; $rslt=mysql_to_mysqli($stmt, $link); $row=mysqli_fetch_row($rslt); $user_id = $row[0]; @@ -21098,6 +21105,7 @@ if ($ADD==3) $ignore_ip_list = $row[124]; $ready_max_logout = $row[125]; $export_gdpr_leads = $row[126]; + $pause_code_approval = $row[127]; if ( ( ($user_level >= $LOGuser_level) and ($LOGuser_level < 9) ) or ( ($LOGmodify_same_user_level < 1) and ($LOGuser_level > 8) and ($user_level > 8) ) ) { @@ -21526,9 +21534,10 @@ if ($ADD==3) echo "
"._QXZ("Delete Timeclock Log Record").": $NWB#users-delete_timeclock_log$NWE
"._QXZ("Manager Shift Enforcement Override").": $NWB#users-manager_shift_enforcement_override$NWE
"._QXZ("Manager Pause Code Approval").": $NWB#users-pause_code_approval$NWE
"._QXZ("Admin Custom Fields Show Hidden").": $NWB#users-admin_cf_show_hidden$NWE
"._QXZ("Admin Custom Fields Show Hidden").": $NWB#users-admin_cf_show_hidden$NWE
\n"; + echo "
\n"; echo ""; if ($SSenable_pause_code_limits > 0) { echo ""; } - echo "\n"; + echo "\n"; - $stmt="SELECT pause_code,pause_code_name,billable,campaign_id,time_limit from vicidial_pause_codes where campaign_id='$campaign_id' $LOGallowed_campaignsSQL order by pause_code;"; + $stmt="SELECT pause_code,pause_code_name,billable,campaign_id,time_limit,require_mgr_approval from vicidial_pause_codes where campaign_id='$campaign_id' $LOGallowed_campaignsSQL order by pause_code;"; $rslt=mysql_to_mysqli($stmt, $link); $pause_codes_to_print = mysqli_num_rows($rslt); $o=0; @@ -24158,6 +24167,7 @@ if ($ADD==31) { echo "\n"; } + echo "\n"; echo "\n"; echo "\n"; echo "\n"; @@ -24170,7 +24180,8 @@ if ($ADD==31) echo "\n"; echo _QXZ("Pause Code").": \n"; echo "   "._QXZ("Name").": \n"; - echo "   "._QXZ("Billable").": \n"; + echo "   "._QXZ("Billable").":
\n"; + echo "   "._QXZ("Mgr Approve").": \n"; if ($SSenable_pause_code_limits > 0) { echo "   "._QXZ("Time Limit").": \n"; diff --git a/www/vicidial/admin_modify_lead.php b/www/vicidial/admin_modify_lead.php index 2386d6e7..2f30cc2e 100644 --- a/www/vicidial/admin_modify_lead.php +++ b/www/vicidial/admin_modify_lead.php @@ -90,6 +90,7 @@ # 180302-1605 - Added complete GDPR compliance features # 180310-2300 - Added optional source_id display # 180311-0008 - Added CIDdisplay +# 180410-1720 - Added switch lead log entry display # require("dbconnect_mysqli.php"); @@ -2428,8 +2429,85 @@ else echo "
"._QXZ("PAUSE CODES").""._QXZ("BILLABLE").""._QXZ("TIME LIMIT").""._QXZ("MODIFY").""._QXZ("DELETE")."
"._QXZ("MGR APPROVAL").""._QXZ("MODIFY").""._QXZ("DELETE")."
"._QXZ("DELETE")."


\n"; - ##### vicidial agent outbound calls for this time period ##### + ##### BEGIN switch lead log entries ##### + $stmt="SELECT * from vicidial_agent_function_log where lead_id='" . mysqli_real_escape_string($link, $lead_id) . "' and function='switch_lead' order by event_time desc limit 500;"; + $rslt=mysql_to_mysqli($stmt, $link); + $logs_to_print = mysqli_num_rows($rslt); + if ($DB) {echo "$logs_to_print|$stmt|\n";} + + if ($logs_to_print > 0) + { + echo ""._QXZ("AGENT FROM SWITCH-LEADS FOR THIS LEAD").":\n"; + echo "\n"; + echo "\n"; + + + $u=0; + while ($logs_to_print > $u) + { + $row=mysqli_fetch_array($rslt); + if (preg_match("/1$|3$|5$|7$|9$/i", $u)) + {$bgcolor="bgcolor=\"#$SSstd_row2_background\"";} + else + {$bgcolor="bgcolor=\"#$SSstd_row1_background\"";} + + $u++; + echo ""; + echo ""; + echo ""; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + } + + echo "
# "._QXZ("SWITCH TIME").""._QXZ("CAMPAIGN")." "._QXZ("TSR")."   "._QXZ("TO LEAD ID")." "._QXZ("CALL ID")." "._QXZ("UNIQUEID")." "._QXZ("PHONE NUMBER")."
$u $row[event_time] $row[campaign_id] $row[user] $row[stage] $row[caller_code] $row[uniqueid] $row[comments]


\n"; + } + + $stmt="SELECT * from vicidial_agent_function_log where stage='" . mysqli_real_escape_string($link, $lead_id) . "' and function='switch_lead' order by event_time desc limit 500;"; + $rslt=mysql_to_mysqli($stmt, $link); + $logs_to_print = mysqli_num_rows($rslt); + if ($DB) {echo "$logs_to_print|$stmt|\n";} + + if ($logs_to_print > 0) + { + echo ""._QXZ("AGENT TO SWITCH-LEADS FOR THIS LEAD").":\n"; + echo "\n"; + echo "\n"; + + + $u=0; + while ($logs_to_print > $u) + { + $row=mysqli_fetch_array($rslt); + if (preg_match("/1$|3$|5$|7$|9$/i", $u)) + {$bgcolor="bgcolor=\"#$SSstd_row2_background\"";} + else + {$bgcolor="bgcolor=\"#$SSstd_row1_background\"";} + + $u++; + echo ""; + echo ""; + echo ""; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + } + + echo "
# "._QXZ("SWITCH TIME").""._QXZ("CAMPAIGN")." "._QXZ("TSR")."   "._QXZ("FROM LEAD ID")." "._QXZ("CALL ID")." "._QXZ("UNIQUEID")." "._QXZ("PHONE NUMBER")."
$u $row[event_time] $row[campaign_id] $row[user] $row[lead_id] $row[caller_code] $row[uniqueid] $row[comments]


\n"; + } + ##### END switch lead log entries ##### + + + ##### vicidial agent outbound calls for this time period ##### if ($allow_emails>0) { echo ""._QXZ("OUTBOUND EMAILS FOR THIS LEAD").":\n"; diff --git a/www/vicidial/help.php b/www/vicidial/help.php index 0a40b9a0..c8923f3d 100644 --- a/www/vicidial/help.php +++ b/www/vicidial/help.php @@ -156,6 +156,7 @@ # 180217-0810 - Added pause_max_dispo # 180306-1639 - Added script_top_dispo # 180310-2246 - Added settings-source_id_display +# 180410-1609 - Added users-pause_code_approval # require("dbconnect_mysqli.php"); @@ -758,6 +759,11 @@ if ($SSqc_features_active > 0)
- +
+ +
+ - +

@@ -3757,7 +3763,7 @@ if ($SSoutbound_autodial_active > 0) AGENT PAUSE CODES


- + diff --git a/www/vicidial/user_stats.php b/www/vicidial/user_stats.php index 286c5b82..b9942382 100644 --- a/www/vicidial/user_stats.php +++ b/www/vicidial/user_stats.php @@ -57,6 +57,7 @@ # 170409-1555 - Added IP List validation code # 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 # $startMS = microtime(); @@ -151,6 +152,7 @@ if ($search_archived_data) $user_call_log_table=use_archive_table("user_call_log"); $vicidial_lead_search_log_table=use_archive_table("vicidial_lead_search_log"); $vicidial_agent_skip_log_table=use_archive_table("vicidial_agent_skip_log"); + $vicidial_agent_function_log=use_archive_table("vicidial_agent_function_log"); $call_log_table=use_archive_table("call_log"); $vicidial_log_table=use_archive_table("vicidial_log"); } @@ -166,6 +168,7 @@ else $user_call_log_table="user_call_log"; $vicidial_lead_search_log_table="vicidial_lead_search_log"; $vicidial_agent_skip_log_table="vicidial_agent_skip_log"; + $vicidial_agent_function_log="vicidial_agent_function_log"; $call_log_table="call_log"; $vicidial_log_table="vicidial_log"; } @@ -1627,6 +1630,72 @@ else $CSV_text11.="\"\",\"$u\",\"$row[1]\",\"$row[2]\",\"$row[4]\",\"$row[5]\",\"$row[3]\"\n"; } $MAIN.="

\n"; + + ##### BEGIN switch lead log entries ##### + $MAIN.=""._QXZ("AGENT LEAD SWITCHES FOR THIS TIME PERIOD: (10000 record limit)")."     
["._QXZ("DOWNLOAD")."]\n"; + $MAIN.="\n"; + $MAIN.="\n"; + $CSV_text13.="\""._QXZ("AGENT LEAD SWITCHES FOR THIS TIME PERIOD: (10000 record limit)")."\"\n"; + $CSV_text13.="\"\",\"#\",\""._QXZ("DATE/TIME")."\",\""._QXZ("FROM LEAD ID")."\",\""._QXZ("TO LEAD ID")."\",\""._QXZ("CALL ID")."\",\""._QXZ("UNIQUEID")."\",\""._QXZ("PHONE")."\",\""._QXZ("CAMPAIGN")."\"\n"; + + $stmt="SELECT event_time,lead_id,stage,caller_code,uniqueid,comments,campaign_id from ".$vicidial_agent_function_log." where user='" . mysqli_real_escape_string($link, $user) . "' and event_time >= '" . mysqli_real_escape_string($link, $begin_date) . " 0:00:01' and event_time <= '" . mysqli_real_escape_string($link, $end_date) . " 23:59:59' and function='switch_lead' order by event_time desc limit 10000;"; + $rslt=mysql_to_mysqli($stmt, $link); + $logs_to_print = mysqli_num_rows($rslt); + + $u=0; + while ($logs_to_print > $u) + { + $row=mysqli_fetch_row($rslt); + if (preg_match("/1$|3$|5$|7$|9$/i", $u)) + {$bgcolor='bgcolor="#'. $SSstd_row2_background .'"';} + else + {$bgcolor='bgcolor="#'. $SSstd_row1_background .'"';} + + $u++; + $MAIN.=""; + $MAIN.=""; + $MAIN.=""; + $MAIN.="\n"; + $MAIN.="\n"; + $MAIN.=""; + $MAIN.="\n"; + $MAIN.="\n"; + $MAIN.="\n"; + $CSV_text13.="\"\",\"$u\",\"$row[0]\",\"$row[1]\",\"$row[2]\",\"$row[3]\",\"$row[4]\",\"$row[5]\",\"$row[6]\"\n"; + } + $MAIN.="
# "._QXZ("DATE/TIME")."   "._QXZ("FROM LEAD ID")."   "._QXZ("TO LEAD ID")."   "._QXZ("CALL ID")."   "._QXZ("UNIQUEID")."   "._QXZ("PHONE")."   "._QXZ("CAMPAIGN")."
$u$row[0] $row[1] $row[2] $row[3] $row[4] $row[5] $row[6]


\n"; + + ##### BEGIN manager pause code approval entries ##### + $MAIN.=""._QXZ("MANAGER PAUSE CODE APPROVALS FOR THIS TIME PERIOD: (10000 record limit)")."     ["._QXZ("DOWNLOAD")."]\n"; + $MAIN.="\n"; + $MAIN.="\n"; + $CSV_text14.="\""._QXZ("MANAGER PAUSE CODE APPROVALS FOR THIS TIME PERIOD: (10000 record limit)")."\"\n"; + $CSV_text14.="\"\",\"#\",\""._QXZ("DATE/TIME")."\",\""._QXZ("AGENT")."\",\""._QXZ("AGENT USER GROUP")."\",\""._QXZ("CAMPAIGN")."\",\""._QXZ("PAUSE CODE")."\"\n"; + + $stmt="SELECT event_time,user,user_group,campaign_id,comments from ".$vicidial_agent_function_log." where stage='" . mysqli_real_escape_string($link, $user) . "' and event_time >= '" . mysqli_real_escape_string($link, $begin_date) . " 0:00:01' and event_time <= '" . mysqli_real_escape_string($link, $end_date) . " 23:59:59' and function='mgrapr_pause_code' order by event_time desc limit 10000;"; + $rslt=mysql_to_mysqli($stmt, $link); + $logs_to_print = mysqli_num_rows($rslt); + + $u=0; + while ($logs_to_print > $u) + { + $row=mysqli_fetch_row($rslt); + if (preg_match("/1$|3$|5$|7$|9$/i", $u)) + {$bgcolor='bgcolor="#'. $SSstd_row2_background .'"';} + else + {$bgcolor='bgcolor="#'. $SSstd_row1_background .'"';} + + $u++; + $MAIN.=""; + $MAIN.=""; + $MAIN.=""; + $MAIN.="\n"; + $MAIN.=""; + $MAIN.=""; + $MAIN.="\n"; + $CSV_text14.="\"\",\"$u\",\"$row[0]\",\"$row[1]\",\"$row[2]\",\"$row[3]\",\"$row[4]\"\n"; + } + $MAIN.="
# "._QXZ("DATE/TIME")."   "._QXZ("AGENT")."   "._QXZ("AGENT USER GROUP")."   "._QXZ("CAMPAIGN")."   "._QXZ("PAUSE CODE")."  
$u$row[0] $row[1] $row[2]$row[3] $row[4]


\n"; } }