From fe57e2dec0cd083df35cdd2870a9ba51e610ca02 Mon Sep 17 00:00:00 2001 From: mattf Date: Thu, 18 Mar 2021 06:49:09 +0000 Subject: [PATCH] Added system settings for agent_hidden_sound and added more browser_alert_sounds Added agent screen visibility logging and Agent Hidden Browser Sounds git-svn-id: svn://192.168.202.10@3390 3d104415-ff17-0410-8863-d5cf3c621b8a --- UPGRADE | 6 + bin/ADMIN_archive_log_tables.pl | 84 ++++++++++++- extras/MySQL_AST_CREATE_tables.sql | 22 +++- extras/upgrade_2.14.sql | 20 ++++ www/agc/conf_exten_check.php | 37 +++++- www/agc/sounds/click_double.mp3 | Bin 0 -> 3126 bytes www/agc/sounds/click_quiet.mp3 | Bin 0 -> 1382 bytes www/agc/sounds/click_single.mp3 | Bin 0 -> 1454 bytes www/agc/sounds/ticking_four.mp3 | Bin 0 -> 16712 bytes www/agc/sounds/ticking_six.mp3 | Bin 0 -> 7157 bytes www/agc/sounds/ticking_two.mp3 | Bin 0 -> 16429 bytes www/agc/sounds/whistle_three.mp3 | Bin 0 -> 16501 bytes www/agc/sounds/whistle_two.mp3 | Bin 0 -> 16429 bytes www/agc/sounds/whistle_up.mp3 | Bin 0 -> 9373 bytes www/agc/vicidial.php | 177 ++++++++++++++++++++++++++-- www/vicidial/admin.php | 66 ++++++++++- www/vicidial/help_documentation.txt | 4 +- 17 files changed, 394 insertions(+), 22 deletions(-) create mode 100644 www/agc/sounds/click_double.mp3 create mode 100644 www/agc/sounds/click_quiet.mp3 create mode 100644 www/agc/sounds/click_single.mp3 create mode 100644 www/agc/sounds/ticking_four.mp3 create mode 100644 www/agc/sounds/ticking_six.mp3 create mode 100644 www/agc/sounds/ticking_two.mp3 create mode 100644 www/agc/sounds/whistle_three.mp3 create mode 100644 www/agc/sounds/whistle_two.mp3 create mode 100644 www/agc/sounds/whistle_up.mp3 diff --git a/UPGRADE b/UPGRADE index 9fc0f27e..b100e0c1 100644 --- a/UPGRADE +++ b/UPGRADE @@ -596,6 +596,12 @@ OTHER CHANGES: 167. Added a page to allow Editing existing Lead Loader Templates. +168. Added System Settings for "Agent Hidden Browser Sound" to repeatedly play + a selected sound at a set interval to an agent when their Agent Screen + is hidden from view. Can be used to disable web browser javascript + throttling if set to an audible sound at a 20 second interval. Tested + with the 'click_quiet' sound file at a volume of '25'. + diff --git a/bin/ADMIN_archive_log_tables.pl b/bin/ADMIN_archive_log_tables.pl index acfd8976..3f4941bf 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) 2020 I. Taushanov, Matt Florell LICENSE: AGPLv2 +# Copyright (C) 2021 I. Taushanov, Matt Florell LICENSE: AGPLv2 # # CHANGES # 90615-1701 - First version @@ -59,6 +59,7 @@ # 190926-0005 - Added vicidial_sip_action_log archiving # 200102-0846 - Added vicidial_vmm_counts archiving # 201107-2206 - Added optional park_log archiving +# 210317-2104 - Added vicidial_agent_visibility_log archiving # $CALC_TEST=0; @@ -768,6 +769,35 @@ if (!$T) } ##### END vicidial_agent_log_archive trim processing ##### + ##### BEGIN vicidial_agent_visibility_log_archive trim processing ##### + $stmtA = "SELECT count(*) from vicidial_agent_visibility_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_visibility_log_archive_count = $aryA[0]; + } + $sthA->finish(); + + if (!$Q) {print "Trimming vicidial_agent_visibility_log_archive table... ($vicidial_agent_visibility_log_archive_count)\n";} + + $rv = $sthA->err(); + if (!$rv) + { + $stmtA = "DELETE FROM vicidial_agent_visibility_log_archive WHERE db_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_visibility_log_archive table \n";} + + $stmtA = "optimize table vicidial_agent_visibility_log_archive;"; + $sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; + $sthA->execute or die "executing: $stmtA ", $dbhA->errstr; + } + ##### END vicidial_agent_visibility_log_archive trim processing ##### + ##### BEGIN vicidial_closer_log_archive trim processing ##### $stmtA = "SELECT count(*) from vicidial_closer_log_archive;"; $sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; @@ -2469,6 +2499,58 @@ if (!$T) } + ##### vicidial_agent_visibility_log + $stmtA = "SELECT count(*) from vicidial_agent_visibility_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_visibility_log_count = $aryA[0]; + } + $sthA->finish(); + + $stmtA = "SELECT count(*) from vicidial_agent_visibility_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_visibility_log_archive_count = $aryA[0]; + } + $sthA->finish(); + + if (!$Q) {print "\nProcessing vicidial_agent table... ($vicidial_agent_visibility_log_count|$vicidial_agent_visibility_log_archive_count)\n";} + $stmtA = "INSERT IGNORE INTO vicidial_agent_visibility_log_archive SELECT * from vicidial_agent_visibility_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_visibility_log_archive table \n";} + + $rv = $sthA->err(); + if (!$rv) + { + if ($wipe_all > 0) + {$stmtA = "DELETE FROM vicidial_agent_visibility_log;";} + else + {$stmtA = "DELETE FROM vicidial_agent_visibility_log WHERE db_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_visibility_log table \n";} + + $stmtA = "optimize table vicidial_agent_visibility_log;"; + $sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; + $sthA->execute or die "executing: $stmtA ", $dbhA->errstr; + + $stmtA = "optimize table vicidial_agent_visibility_log_archive;"; + $sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; + $sthA->execute or die "executing: $stmtA ", $dbhA->errstr; + } + + ##### vicidial_carrier_log $stmtA = "SELECT count(*) from vicidial_carrier_log;"; $sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; diff --git a/extras/MySQL_AST_CREATE_tables.sql b/extras/MySQL_AST_CREATE_tables.sql index 7b34d8fb..f66aae9c 100644 --- a/extras/MySQL_AST_CREATE_tables.sql +++ b/extras/MySQL_AST_CREATE_tables.sql @@ -1899,7 +1899,10 @@ phone_defaults_container VARCHAR(40) default '---DISABLED---', qc_claim_limit TINYINT UNSIGNED DEFAULT '3', qc_expire_days TINYINT UNSIGNED DEFAULT '3', two_factor_auth_hours SMALLINT(5) default '0', -two_factor_container VARCHAR(40) default '---DISABLED---' +two_factor_container VARCHAR(40) default '---DISABLED---', +agent_hidden_sound VARCHAR(20) default 'click_quiet', +agent_hidden_sound_volume TINYINT(3) UNSIGNED default '25', +agent_hidden_sound_seconds TINYINT(3) UNSIGNED default '0' ) ENGINE=MyISAM; CREATE TABLE vicidial_campaigns_list_mix ( @@ -3152,7 +3155,6 @@ index (lead_id), index (call_date) ) ENGINE=MyISAM; - CREATE TABLE vicidial_qc_agent_log ( qc_agent_log_id INT(9) unsigned NOT NULL AUTO_INCREMENT, qc_user VARCHAR(20) COLLATE utf8_unicode_ci NOT NULL, @@ -4514,6 +4516,18 @@ index (auth_date), index (auth_exp_date) ) ENGINE=MyISAM; +CREATE TABLE vicidial_agent_visibility_log ( +db_time DATETIME NOT NULL, +event_start_epoch INT(10) UNSIGNED, +event_end_epoch INT(10) UNSIGNED, +user VARCHAR(20), +length_in_sec INT(10), +visibility ENUM('VISIBLE','HIDDEN','LOGIN','NONE') default 'NONE', +agent_log_id INT(9) UNSIGNED, +index (db_time), +unique index visibleuser (user, visibility, event_end_epoch) +) ENGINE=MyISAM; + ALTER TABLE vicidial_email_list MODIFY message text character set utf8; @@ -4767,6 +4781,8 @@ CREATE TABLE vicidial_vmm_counts_archive LIKE vicidial_vmm_counts; CREATE TABLE park_log_archive LIKE park_log; CREATE UNIQUE INDEX uniqueidtime_park on park_log_archive (uniqueid,parked_time); +CREATE TABLE vicidial_agent_visibility_log_archive LIKE vicidial_agent_visibility_log; + GRANT RELOAD ON *.* TO cron@'%'; GRANT RELOAD ON *.* TO cron@localhost; @@ -4850,4 +4866,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='1622',db_schema_update_date=NOW(),reload_timestamp=NOW(); +UPDATE system_settings SET db_schema_version='1623',db_schema_update_date=NOW(),reload_timestamp=NOW(); diff --git a/extras/upgrade_2.14.sql b/extras/upgrade_2.14.sql index 6fe2b6b3..31154cec 100644 --- a/extras/upgrade_2.14.sql +++ b/extras/upgrade_2.14.sql @@ -1567,3 +1567,23 @@ UPDATE system_settings SET db_schema_version='1621',db_schema_update_date=NOW() ALTER TABLE vicidial_campaigns ADD clear_form ENUM('DISABLED','ENABLED','ACKNOWLEDGE') default 'ACKNOWLEDGE'; UPDATE system_settings SET db_schema_version='1622',db_schema_update_date=NOW() where db_schema_version < 1622; + +CREATE TABLE vicidial_agent_visibility_log ( +db_time DATETIME NOT NULL, +event_start_epoch INT(10) UNSIGNED, +event_end_epoch INT(10) UNSIGNED, +user VARCHAR(20), +length_in_sec INT(10), +visibility ENUM('VISIBLE','HIDDEN','LOGIN','NONE') default 'NONE', +agent_log_id INT(9) UNSIGNED, +index (db_time), +unique index visibleuser (user, visibility, event_end_epoch) +) ENGINE=MyISAM; + +CREATE TABLE vicidial_agent_visibility_log_archive LIKE vicidial_agent_visibility_log; + +ALTER TABLE system_settings ADD agent_hidden_sound VARCHAR(20) default 'click_quiet'; +ALTER TABLE system_settings ADD agent_hidden_sound_volume TINYINT(3) UNSIGNED default '25'; +ALTER TABLE system_settings ADD agent_hidden_sound_seconds TINYINT(3) UNSIGNED default '0'; + +UPDATE system_settings SET db_schema_version='1623',db_schema_update_date=NOW() where db_schema_version < 1623; diff --git a/www/agc/conf_exten_check.php b/www/agc/conf_exten_check.php index 4f5ffda1..e0a9a96e 100644 --- a/www/agc/conf_exten_check.php +++ b/www/agc/conf_exten_check.php @@ -1,7 +1,7 @@ LICENSE: AGPLv2 +# Copyright (C) 2021 Matt Florell LICENSE: AGPLv2 # # This script is designed purely to send whether the meetme conference has live channels connected and which they are # This script depends on the server_ip being sent and also needs to have a valid user/pass from the vicidial_users table @@ -85,10 +85,11 @@ # 191013-2105 - Fixes for PHP7 # 200825-2343 - Added option for manual-only sip actions # 201111-2140 - Fix for AGENTDIRECT selected in-groups issue #1241 +# 210317-1935 - Added visibility logging # -$version = '2.14-59'; -$build = '201111-2140'; +$version = '2.14-60'; +$build = '210317-1935'; $php_script = 'conf_exten_check.php'; $mel=1; # Mysql Error Log enabled = 1 $mysql_log_count=51; @@ -146,7 +147,8 @@ if (isset($_GET["campaign"])) {$campaign=$_GET["campaign"];} elseif (isset($_POST["campaign"])) {$campaign=$_POST["campaign"];} if (isset($_GET["phone_number"])) {$phone_number=$_GET["phone_number"];} elseif (isset($_POST["phone_number"])) {$phone_number=$_POST["phone_number"];} - +if (isset($_GET["visibility"])) {$visibility=$_GET["visibility"];} + elseif (isset($_POST["visibility"])) {$visibility=$_POST["visibility"];} if ($bcrypt == 'OFF') {$bcrypt=0;} @@ -200,6 +202,7 @@ $conf_exten = preg_replace("/[^-_0-9a-zA-Z]/","",$conf_exten); $exten = preg_replace("/\'|\"|\\\\|;/","",$exten); $clicks = preg_replace("/\'|\"|\\\\|;/","",$clicks); $customer_chat_id = preg_replace("/[^0-9a-zA-Z]/","",$customer_chat_id); +$visibility = preg_replace("/\'|\"|\\\\|;/","",$visibility); # default optional vars if not set if (!isset($format)) {$format="text";} @@ -1124,6 +1127,32 @@ if ($format=='debug') echo "\n\n\n"; } +### log the visibility changes sent from the agent screen +if (strlen($visibility) > 1) + { + $vc=0; + $visibility_details = explode('|',$visibility); + $visibility_details_ct = count($visibility_details); + while($vc < $visibility_details_ct) + { + $visibility_data = explode(' ',$visibility_details[$vc]); + $visibility_type = $visibility_data[0]; + $visibility_length = $visibility_data[1]; + $visibility_start_epoch = $visibility_data[2]; + $visibility_end_epoch = $visibility_data[3]; + #$visibility_length = ($StarTtime - $visibility_data[2]); + $agent_log_id = $visibility_data[4]; + + if (strlen($visibility_type) > 1) + { + $stmtA="INSERT INTO vicidial_agent_visibility_log set db_time=NOW(),event_start_epoch='$visibility_start_epoch',event_end_epoch='$visibility_end_epoch',user='$user',length_in_sec='$visibility_length',visibility='$visibility_type',agent_log_id='$agent_log_id';"; + $rslt=mysql_to_mysqli($stmtA, $link); + } + + $vc++; + } + } + if ($SSagent_debug_logging > 0) { vicidial_ajax_log($NOW_TIME,$startMS,$link,$ACTION,$php_script,$user,$stage,$lead_id,$session_name,$stmt); diff --git a/www/agc/sounds/click_double.mp3 b/www/agc/sounds/click_double.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..41c2b8fa78f5fa181c590a2d3cfcd16c7f03d84e GIT binary patch literal 3126 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 literal 0 HcmV?d00001 diff --git a/www/agc/sounds/ticking_four.mp3 b/www/agc/sounds/ticking_four.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..b61adb12a1ad8e2f02ff376b07f286ef379803d9 GIT binary patch literal 16712 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 literal 0 HcmV?d00001 diff --git a/www/agc/sounds/ticking_six.mp3 b/www/agc/sounds/ticking_six.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..b15e2adcf63e02115015565c91c8636e7376f7b4 GIT binary patch literal 7157 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 literal 0 HcmV?d00001 diff --git a/www/agc/sounds/ticking_two.mp3 b/www/agc/sounds/ticking_two.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..9fc2aa76f944e0fb4736f1caab5cedebaeefa450 GIT binary patch literal 16429 zcmeI22T&C2mdAT$0AT>hQF2a_M?i9tG)T?@Gay-_fB}^u2ZtazDo73zMS=(tL?jD> zWJE~@a+c5w_tjSIdw2J4l~wDzRm-WV{;I#P&v(xJf1Ue)2XQz6$r=DSodZsdnB~)H z1IeX4Z2<8=3;=+M-Te;>E>F~gRhx=oJ@}Wvdel2uD=YV5wIcy(FnB!ix*uPvq-UHN zJfIe>aC)1*zbMCB&kce*{EHI>q^*3AU|4zzbmpYv^Pd0yQ(7Ah`u2b@vch&s5Co4G z!vri};3WzADz{N4n zgfEM{4thOYEg1Rllfr~zbycDq(IAQ(CK}p?*CxM1fSbX} zWmpR~yUGDFdazkMSrCkrjQ84%>=`3QeChEN0>Q8q(0MjlnE#l|DGcm1rcAE7^ktsX|fX|wC>V(E8KgkIQ#5j zLMrWeq+-gcB&S0sgqneK=j>!cZz=$@L&00c*8ZcPeL zy}YY5geTxg_Yki=hf9*x6=)@vOr<%UtGx|rgO$iaiQP4-$eR_l9eLl$9`8on zyrC^8_nny%rF?B;e8N;aFTkTW9jjt7#62hsDkZkB(!R7jOY0B0Lxb^IBJu z_B_BwpepF=rZSq|FLbY1+VAbRLW$l3Xr*r>a@o}cxxV@=v2`qSm8wbnwU_WkQN6x{ zw;jU-Te7_ebewl%m7bJ|lsC?Je!j2P^bzm-e4U}C`;hg~ZTP!%boCwIA*39%8Ic*w!fnF^an7b&r=MKCz1M;(x zT*i`fgi2BI2>)QDW%|}Na$p(9M9Y}@bASQlxLy6dB#-6f0M`?g!&M(NI8>pi3{>NnuAWL6r!2L#KeFIgs*=^(cU&rU0JnG}p&yi4P#jKC!lYz(w=5E|3r zM)u`7T7I+cR@0O(KeFR@&92WR!r?WsRBzrh#|!a|nK{%offhUY0stvXy8a|?uDRaA zccteQ7GfmonNfZBbaqs2?tJN;R4^NTkn3enHIvt}u#aSa10k_-~9`@jLy z-yhTJD(cr>0bz7%JkeXDeF}&2M&#xN_^bU*={Dg>{@6tSW@VkkfG68mngRuyJHQPu z4nYqM<;_fP!=;{@lXJl;X-!;#Sf^Tep#A{GTe--CtrkX=dL##%cC<+n098#P*SAAIgh1SAGAx{!zEu8cwB(RFrN%k6j4{N(UGFNU8?Pe%C zR%0!2N=O=j78niQK{Hesg>{k0d@Gri>UHl62+^-^cDenzl!ul@tGlPA^t^JA@>{$#pUCX<{bkC zQda6OZo=?+GL$ope*Cp}%8Wezq8SpR6OM-81PnBa>E{oYE3ReR{4nfFy=|Iw0PcUV zrL8l~$(_LR2{PW!gom-G)&ywyUnAV`d1dDgf*(P~Eg)Uv#TP95U{}znZ*nzfps8(f zsttiX>FT0I7}D)oSspl^j;KWTcOz_`uc^|#qdjagQJOGU+fC09T_l(RrLi7$_yOlv z`KL|^>0+S8%vYU$(6Z?l^7hIoi)v;vOB7U~0lqY; z-gsvjaZ^B8E@5@9rWJ`7JM-BEdY$YUgXp_V>hBwn`Ui-f=<80B4(LRIxgEC%ZlxfH z@i$(Z4G(Tj;Hb8KE>0iVj!E&1a;chm`Zdl+iXln8WyjS}#JCa_Tqc~{_tr`+s+vJE z*FMH~Zqj`D)C;P~yf?KA~bJS!?Yu&}19!I4=lv`f&>u8E{_7dpFW*@74|Cq5l zJT{LY7sdw+BmgOPRn9E;EQCbW(@+QgRng)Ido2=y=zW9gdCrh8*$vIZ6!g=l%p{J5N;PffLz7D(yhpiE42_ZyZCq&oLT<^r)$QUjw;#KB9s+eMl&3O(V({^G?+po^&7&%L zap}#hA>T{tVIg?4hVW<0)cJExd=e`LUaA^^KPJGMv#Z9>EpbR2xBazp0}ez@f<9L( zPb|TwZ=M;~PeSuUnR2r#;76@vaCoo7s?s)eWn7)(5|pbafto z==BBR}qJF%J&C*{MhYz9ckaN*kzU=wwuAj_bEWEFuGUC zgHOm7R&NozXK*=dsgG!1e3-q(zQULRKCWk0fh29}6XEAsj!!EQtg} zloqej6^|6J(!b?*=cdBD0tte>{IvOGWMU=vYFe ztNe?_=|31~N3mwA;vl#m2^l!5lc&mqNgGrBU1j^HgW&2MEe0LL#h{BRtbzf=G{N@B zVp}*-9|ibvp0~u_$o#{VXKBMoMQv3vK}k`gf3;IWL^1!(^U%rl>%_z{CyRge`G2+k zKPvaTR5&H1@CTt&Ag52Pe>9NXKbkW_MrVY6*RJ@han1<+s&c=}?~KszQu)%}@E{gP@sDb(f4s~-d$;}1DF5w*&OSc;Gmt;6 zoe}zzB!9DxGeUneAb(2djL@GX`I~is!q=%tgVcH@ApJD^A+J48e(^2u0+g-y3dtF8 zgF@SITiw^h9a*G1nES!^q#`&a5)@(=aTUSi-uKTem=xWyn^EK)5g@pIyMEf|aUW6p zcor6R2?I2P;9jToacB0M0fc5T_vn`0larc;V|B|TZFSad0p--|L<22tr04&~>(GBG z+qTj0yYU?GwZszWIakSEF;j|MraB(#tt?g-DMF$bxh$D zqu9aYw9m?=94tfX!?AA#%wj;$k=X6ZqCzlV37Q=3_z->){pCuNi0}DHq7Wz)@3FNl zWt{Ix=TRJA$KzvZa@u>Bp!*uk3aK=MSZkikD9fb zw2Jp%kY)o0G|kz}@KWnSQMyCnt-PX>uz=bdQ;;BHg#`nvRhuXqrub`xFL_+1k}N&x zj(0UmP6>gSbIx`Op|@Co4P?QmzBz!F>JbNB20%z6nyZY!08$mcTy5Vb>oe2Gu2yZe zJMvrC+1akG$mZCVy_y9GtD}8NH&!IdXBEAtDSnzHaGs;wb{p-oWt{21GgG9ey~ydC zh*eMswF}<%yK~D&B=1#|mVjBOAHk&{OfJ_bYHC5>Qr2PIzx-uGW%IOo_v*VMzeo4R zMYj~L_wHpxig+1>-9XES`Zyi;E`#IC$b%TEm)kFskL0E0<+X$7+N(<|RuO^x7<*yTb zm0@pMUkmoS(9}1Kd^4GR3DEX0I`rF+Q@PzMaWTFKiX7BjqPGZm{yh+YC*tREO^uFYjN_BP1wEbKO9l-u;aLccUZT%){nFD+#6{^AnqcJ5OP z=UU-{8XdKal5Oy4;cja(eJa|)4@}%$+)PQ*w@WNG)Y(uANY>}l-5^Ur zb9y+M(Y_A6{k?3t)BMq+IT!poS8xkY9;x3k`qOue#8{?{z_4@mz#oidr<)ytM@YKA zeZPJi1Ixt$pcsIX>u57ap8?T||7muRibU0gZNu4tEzM@AFjDDG=Y2`%CtCW=*Wn_| zH#etD91|Wa9DZ~MmqD&#!`X~ltjHUt*M(Y{MGq}qUQ{Rm zfTE@@3_I$TH{6ON^}z7?_L5}-g)(rwZkQmXZL5tC5*b&}Lc}$>7{@3_8!N6)zgVpH zu{Yj9eEYyAbyccN#d}zVndWjn$raqIy8TAlM=}53fh z;>P|D0=e@^{Nt})?0&s4=J6%%`-T4F;q*o0+Po)P=2xZ;@Xk7@SSBqj4|+L zHw%}kke9VjNRv)Kp(lLxTnm@JoY=PMOZG4&JQG@&jAjw+MNpC{L-@(dd8rALhX`!V z)_zhWP6^TDL9x<05J~z9eTT7ac^C$+ek4q6Ckc_aCePFrN5T5jwGfSI-c~=3Un%* zg+q)vt%N?%^E(B9G22|SvWJru$b-FGS0}7wPo^x`(_~s+>9qYheKWN9E4jYzgd;IF)ew50f6jL0<@!g+e zcNHTF)P)`PZo-9a^P*gi@_7ehj`t~79q}=mQ7@JhGI{r1HKkl+|#vuSlwc%h^C zjXwHnUS!Tqj^=$sH!-8U!@lEUSJOzHiR0uIwXO%bs^8~C2uL(ow3yyNwC2dejS~q| za4?!q60}rTmX_=EcSs# z!;4H??$xDcjC9PXQV@TCLOY->G!}Ezke6l69__!Zm5^Uqcm2)ZLI2zj5&j98;oIIF|idTm5BLDD-%pD3!l>S>$lgBnFzIKsS{h!4U-fyp8j zVU5T$_8~%|HKNpcA(Hs4uWhnz9^x{k@7|(TYX9`egQK#k_YLTNpP)4`Ea1Q#Mtqqt*s&{6eAV?^KQHN-({zS{QSBe!h5k>L21>BMo;Tq?0D9n= AJ^%m! literal 0 HcmV?d00001 diff --git a/www/agc/sounds/whistle_three.mp3 b/www/agc/sounds/whistle_three.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..2c2bd3119fbe09ad64ce0de8a60111f621d95bc9 GIT binary patch literal 16501 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 iyx`>$VN%F;Qx4s literal 0 HcmV?d00001 diff --git a/www/agc/sounds/whistle_two.mp3 b/www/agc/sounds/whistle_two.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..ecdf3275410b73a3bd7b613fba6988dd3b8bdfd7 GIT binary patch literal 16429 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 K`af1*_`d*1M#&Ta literal 0 HcmV?d00001 diff --git a/www/agc/vicidial.php b/www/agc/vicidial.php index c51d67fa..ae11ef42 100644 --- a/www/agc/vicidial.php +++ b/www/agc/vicidial.php @@ -657,10 +657,11 @@ # 210312-1520 - Force clearing of webphone panel upon logout # 210315-2102 - Added CALLBACK manual dial filter option, Issue #1139 # 210317-1207 - Fixes for better consistency in password change process, Issue #1261 +# 210318-0236 - Added agent browser visibility logging and Agent Hidden Browser Sounds # -$version = '2.14-625c'; -$build = '210317-1207'; +$version = '2.14-626c'; +$build = '210318-0236'; $mel=1; # Mysql Error Log enabled = 1 $mysql_log_count=95; $one_mysql_log=0; @@ -781,7 +782,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,mute_recordings,enable_second_script,enable_first_webform,recording_buttons,outbound_cid_any,browser_call_alerts,manual_dial_phone_strip,require_password_length,pass_hash_enabled 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,enable_second_script,enable_first_webform,recording_buttons,outbound_cid_any,browser_call_alerts,manual_dial_phone_strip,require_password_length,pass_hash_enabled,agent_hidden_sound_seconds,agent_hidden_sound,agent_hidden_sound_volume 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";} @@ -835,6 +836,10 @@ if ($qm_conf_ct > 0) $SSmanual_dial_phone_strip = $row[43]; $SSrequire_password_length = $row[44]; $SSpass_hash_enabled = $row[45]; + $SSagent_hidden_sound_seconds = $row[46]; + $SSagent_hidden_sound = $row[47]; + $SSagent_hidden_sound_volume = $row[48]; + if ( ($SSagent_hidden_sound == '---NONE---') or ($SSagent_hidden_sound == '') ) {$SSagent_hidden_sound_seconds=0;} } else { @@ -970,7 +975,7 @@ $SSalt_row1_background='BDFFBD'; $SSalt_row2_background='99FF99'; $SSalt_row3_background='CCFFCC'; -$browser_alert_sounds_list = 'bark_dog,beep_double,beep_five,beep_up,bell_double,bell_school,bird,blaster1,blaster2,buzz1,buzz2,cash_register,chat_alert,close_encounter,confirmation,ding,droplet,droplet_double,elephant,email_alert,hold_tone,horn_bike,horn_car,horn_car_triple,horn_clown,horn_double,horn_train,meow_cat,scream_wilhelm,silence_quick,siren,slide_down,slide_up,swish,teleport1,teleport2,whip,whoosh,xylophone1,xylophone2,xylophone3,xylophone4'; +$browser_alert_sounds_list = 'bark_dog,beep_double,beep_five,beep_up,bell_double,bell_school,bird,blaster1,blaster2,buzz1,buzz2,cash_register,chat_alert,click_single,click_double,click_quiet,close_encounter,confirmation,ding,droplet,droplet_double,elephant,email_alert,hold_tone,horn_bike,horn_car,horn_car_triple,horn_clown,horn_double,horn_train,meow_cat,scream_wilhelm,silence_quick,siren,slide_down,slide_up,swish,teleport1,teleport2,ticking_two,ticking_four,ticking_six,whip,whistle_up,whistle_two,whistle_three,whoosh,xylophone1,xylophone2,xylophone3,xylophone4'; if ($agent_screen_colors != 'default') { @@ -4570,6 +4575,8 @@ $CCAL_OUT .= ""; var UnixTime = ''; var UnixTimeMS = 0; var JSseedTIME = ; + var BrowserEpoch = Math.round(Date.now() / 1000); + var BrowserServerEpochDiff = (BrowserEpoch - UnixTime); var t = new Date(); t.setTime(JSseedTIME); var c = new Date(); @@ -5232,6 +5239,7 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";} var customer_gone_seconds=''; var updatedispo_resume_trigger='0'; var button_click_log='-----LOGIN--- |'; + var visibility_log='LOGIN 0 '; var agent_display_fields=''; var customer_sec='0'; var allow_required_fields=''; @@ -5311,6 +5319,10 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";} var browser_alert_sound=''; var browser_alert_volume=''; var transfer_button_launch=''; + var SSagent_hidden_sound_seconds=''; + var SSagent_hidden_sound=''; + var SSagent_hidden_sound_volume=''; + var last_hidden_sound_UnixTime = ''; var DiaLControl_auto_HTML = "\" border=\"0\" alt=\"You are paused\" />"; var DiaLControl_auto_HTML_ready = "\" border=\"0\" alt=\"You are active\" />"; var DiaLControl_auto_HTML_OFF = "\" border=\"0\" alt=\"pause button disabled\" />"; @@ -5444,6 +5456,134 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";} +// ################################################################################ +// BEGIN Browser window visibility functions, for agent visibility logging and hidden alert sounds + +var last_UnixTime = UnixTime; +var visibility_state = 'WENT VISIBLE'; +var browserPrefixes = ['moz', 'ms', 'o', 'webkit'], +isVisible = true; // internal flag, defaults to true + +// get the correct attribute name +function getHiddenPropertyName(prefix) + { + return (prefix ? prefix + 'Hidden' : 'hidden'); + } + +// get the correct event name +function getVisibilityEvent(prefix) + { + return (prefix ? prefix : '') + 'visibilitychange'; + } + +// get current browser vendor prefix +function getBrowserPrefix() + { + for (var i = 0; i < browserPrefixes.length; i++) + { + if(getHiddenPropertyName(browserPrefixes[i]) in document) + { + // return vendor prefix + return browserPrefixes[i]; + } + } + // no vendor prefix needed + return null; + } + +// bind and handle events +var browserPrefix = getBrowserPrefix(), +hiddenPropertyName = getHiddenPropertyName(browserPrefix), +visibilityEventName = getVisibilityEvent(browserPrefix); + +function onVisible(temp_force_visible) + { + // prevent double execution + if ( (isVisible) && (temp_force_visible == '0') ) + { + return; + } + // change flag value + BrowserEpoch = Math.round(Date.now() / 1000); + var ServerEpochNow = (BrowserEpoch - BrowserServerEpochDiff); + if (UnixTime > ServerEpochNow) {ServerEpochNow = UnixTime;} + isVisible = true; + visibility_state = 'WENT VISIBLE'; + var temp_seconds = (ServerEpochNow - last_UnixTime); + //console.log(visibility_state + ' ' + temp_seconds); + visibility_log = visibility_log + 'HIDDEN' + " " + temp_seconds + " " + last_UnixTime + " " + ServerEpochNow + " " + agent_log_id + "|"; + last_UnixTime = ServerEpochNow; + last_hidden_sound_UnixTime = ServerEpochNow; + button_click_log = button_click_log + "" + SQLdate + "-----Browser_Visibility---" + visibility_state + " " + temp_seconds + " " + UnixTime + "|"; + } + +function onHidden(temp_force_hidden) + { + // prevent double execution + if ( (!isVisible) && (temp_force_hidden == '0') ) + { + return; + } + // change flag value + BrowserEpoch = Math.round(Date.now() / 1000); + var ServerEpochNow = (BrowserEpoch - BrowserServerEpochDiff); + if (UnixTime > ServerEpochNow) {ServerEpochNow = UnixTime;} + isVisible = false; + visibility_state = 'WENT HIDDEN'; + var temp_seconds = (ServerEpochNow - last_UnixTime); + //console.log(visibility_state + ' ' + temp_seconds); + visibility_log = visibility_log + 'VISIBLE' + " " + temp_seconds + " " + last_UnixTime + " " + ServerEpochNow + " " + agent_log_id + "|"; + last_UnixTime = ServerEpochNow; + last_hidden_sound_UnixTime = ServerEpochNow; + button_click_log = button_click_log + "" + SQLdate + "-----Browser_Visibility---" + visibility_state + " " + temp_seconds + " " + UnixTime + "|"; + } + +function handleVisibilityChange(forcedFlag) + { + // forcedFlag is a boolean when this event handler is triggered by a + // focus or blur eventotherwise it's an Event object + if(typeof forcedFlag === "boolean") + { + if(forcedFlag) + { + return onVisible('0'); + } + return onHidden('0'); + } + if(document[hiddenPropertyName]) + { + return onHidden('0'); + } + return onVisible('0'); + } + +document.addEventListener(visibilityEventName, handleVisibilityChange, false); + +// extra event listeners for better behaviour +document.addEventListener('focus', function() + { + handleVisibilityChange(true); + }, false); + +document.addEventListener('blur', function() + { + handleVisibilityChange(false); + }, false); + +window.addEventListener('focus', function() + { + handleVisibilityChange(true); + }, false); + +window.addEventListener('blur', function() + { + handleVisibilityChange(false); + }, false); + +// END Browser window visibility functions, for agent debug logging +// ################################################################################ + + // ################################################################################ // Send Hangup command for Live call connected to phone now to Manager function livehangup_send_hangup(taskvar) @@ -5491,7 +5631,7 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";} } // ################################################################################ -// Play MP3 audio file upon call arriving in agent screen, if enabled in system settings and campaign/in-group +// Play MP3 audio file upon call arriving in agent screen or agent hiding screen, if enabled in system settings and campaign/in-group function play_browser_sound(temp_sound,temp_volume) { if ( (temp_sound != '---NONE---') && (temp_sound != '---DISABLED---') && (temp_sound != '') ) @@ -6255,8 +6395,9 @@ function set_length(SLnumber,SLlength_goal,SLdirection) } if (xmlhttprequestcheckconf) { - checkconf_query = "server_ip=" + server_ip + "&session_name=" + session_name + "&user=" + user + "&pass=" + pass + "&client=vdc&conf_exten=" + taskconfnum + "&auto_dial_level=" + auto_dial_level + "&campagentstdisp=" + campagentstdisp + "&customer_chat_id=" + document.vicidial_form.customer_chat_id.value + "&live_call_seconds=" + VD_live_call_secondS + "&xferchannel=" + document.vicidial_form.xferchannel.value + "&check_for_answer=" + MDcheck_for_answer + "&MDnextCID=" + MDnextCID + "&campaign=" + campaign + "&phone_number=" + dialed_number + "&clicks=" + button_click_log; + checkconf_query = "server_ip=" + server_ip + "&session_name=" + session_name + "&user=" + user + "&pass=" + pass + "&client=vdc&conf_exten=" + taskconfnum + "&auto_dial_level=" + auto_dial_level + "&campagentstdisp=" + campagentstdisp + "&customer_chat_id=" + document.vicidial_form.customer_chat_id.value + "&live_call_seconds=" + VD_live_call_secondS + "&xferchannel=" + document.vicidial_form.xferchannel.value + "&check_for_answer=" + MDcheck_for_answer + "&MDnextCID=" + MDnextCID + "&campaign=" + campaign + "&phone_number=" + dialed_number + "&visibility=" + visibility_log + "&clicks=" + button_click_log; button_click_log=''; + visibility_log=''; xmlhttprequestcheckconf.open('POST', 'conf_exten_check.php'); xmlhttprequestcheckconf.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8'); xmlhttprequestcheckconf.send(checkconf_query); @@ -16332,6 +16473,10 @@ function set_length(SLnumber,SLlength_goal,SLdirection) function LogouT(tempreason,temppause) { button_click_log = button_click_log + "" + SQLdate + "-----LogouT---" + tempreason + " " + temppause + "|"; + onHidden('1'); + onVisible('1'); + check_for_conf_calls(session_id, '0'); + if (MD_channel_look==1) {alert("");} else @@ -16412,11 +16557,11 @@ function set_length(SLnumber,SLlength_goal,SLdirection) { if (agent_logout_link == '1') { - document.getElementById("LogouTBoxLink").innerHTML = logout_content + "\n"; + document.getElementById("LogouTBoxLink").innerHTML = logout_content + "\n"; } else if (agent_logout_link == '2') { - document.getElementById("LogouTBoxLink").innerHTML = logout_content + "\n"; + document.getElementById("LogouTBoxLink").innerHTML = logout_content + "\n"; } else { @@ -19761,6 +19906,7 @@ function phone_number_format(formatphone) { } function all_refresh() { + UnixTime++; epoch_sec++; check_n++; even++; @@ -19989,6 +20135,21 @@ function phone_number_format(formatphone) { agent_events('login_invalid', '', aec); aec++; } } + + if ( (!isVisible) && (SSagent_hidden_sound_seconds >= 5) && (SSagent_hidden_sound_volume > 0) ) + { + BrowserEpoch = Math.round(Date.now() / 1000); + var ServerEpochNow = (BrowserEpoch - BrowserServerEpochDiff); + var temp_agent_hidden_counter = (ServerEpochNow - last_hidden_sound_UnixTime); + + if (temp_agent_hidden_counter > SSagent_hidden_sound_seconds) + { + var temp_seconds = (ServerEpochNow - last_UnixTime); + last_hidden_sound_UnixTime = ServerEpochNow; + button_click_log = button_click_log + "" + SQLdate + "-----agent_hidden_alert---" + temp_agent_hidden_counter + " " + SSagent_hidden_sound_seconds + " " + temp_seconds + " " + SSagent_hidden_sound + " " + SSagent_hidden_sound_volume + "|"; + play_browser_sound(SSagent_hidden_sound,SSagent_hidden_sound_volume); + } + } } function pause() // Pauses the refreshing of the lists {active_display=2; display_message=" - - ";} diff --git a/www/vicidial/admin.php b/www/vicidial/admin.php index 1f03878b..d150966f 100644 --- a/www/vicidial/admin.php +++ b/www/vicidial/admin.php @@ -131,7 +131,7 @@ $Vtables = 'NONE,log_noanswer,did_agent_log,contact_information'; $APIfunctions = 'ALL_FUNCTIONS add_group_alias add_lead add_list add_phone add_phone_alias add_user agent_ingroup_info agent_stats_export agent_status audio_playback blind_monitor call_agent callid_info change_ingroups check_phone_number copy_user did_log_export external_add_lead external_dial external_hangup external_pause external_status in_group_status logout moh_list park_call pause_code preview_dial_action ra_call_control recording recording_lookup send_dtmf server_refresh set_timer_action sounds_list st_get_agent_active_lead st_login_log transfer_conference update_fields update_lead update_list list_info list_custom_fields update_log_entry update_phone update_phone_alias update_user user_group_status vm_list webphone_url webserver logged_in_agents update_campaign add_did update_did lead_field_info lead_all_info phone_number_log switch_lead ccc_lead_info lead_status_search call_status_stats calls_in_queue_count force_fronter_leave_3way force_fronter_audio_stop update_cid_group_entry add_dnc_phone add_fpg_phone'; -$browser_alert_sounds_list = 'bark_dog,beep_double,beep_five,beep_up,bell_double,bell_school,bird,blaster1,blaster2,buzz1,buzz2,cash_register,chat_alert,close_encounter,confirmation,ding,droplet,droplet_double,elephant,email_alert,hold_tone,horn_bike,horn_car,horn_car_triple,horn_clown,horn_double,horn_train,meow_cat,scream_wilhelm,silence_quick,siren,slide_down,slide_up,swish,teleport1,teleport2,whip,whoosh,xylophone1,xylophone2,xylophone3,xylophone4'; +$browser_alert_sounds_list = 'bark_dog,beep_double,beep_five,beep_up,bell_double,bell_school,bird,blaster1,blaster2,buzz1,buzz2,cash_register,chat_alert,click_single,click_double,click_quiet,close_encounter,confirmation,ding,droplet,droplet_double,elephant,email_alert,hold_tone,horn_bike,horn_car,horn_car_triple,horn_clown,horn_double,horn_train,meow_cat,scream_wilhelm,silence_quick,siren,slide_down,slide_up,swish,teleport1,teleport2,ticking_two,ticking_four,ticking_six,whip,whistle_up,whistle_two,whistle_three,whoosh,xylophone1,xylophone2,xylophone3,xylophone4'; ### BEGIN housecleaning of old static report files, if not done before ### if (!file_exists('old_clear')) @@ -2589,6 +2589,12 @@ if (isset($_GET["auth_entry"])) {$auth_entry=$_GET["auth_entry"];} elseif (isset($_POST["auth_entry"])) {$auth_entry=$_POST["auth_entry"];} if (isset($_GET["clear_form"])) {$clear_form=$_GET["clear_form"];} elseif (isset($_POST["clear_form"])) {$clear_form=$_POST["clear_form"];} +if (isset($_GET["agent_hidden_sound"])) {$agent_hidden_sound=$_GET["agent_hidden_sound"];} + elseif (isset($_POST["agent_hidden_sound"])) {$agent_hidden_sound=$_POST["agent_hidden_sound"];} +if (isset($_GET["agent_hidden_sound_volume"])) {$agent_hidden_sound_volume=$_GET["agent_hidden_sound_volume"];} + elseif (isset($_POST["agent_hidden_sound_volume"])) {$agent_hidden_sound_volume=$_POST["agent_hidden_sound_volume"];} +if (isset($_GET["agent_hidden_sound_seconds"])) {$agent_hidden_sound_seconds=$_GET["agent_hidden_sound_seconds"];} + elseif (isset($_POST["agent_hidden_sound_seconds"])) {$agent_hidden_sound_seconds=$_POST["agent_hidden_sound_seconds"];} if (isset($script_id)) {$script_id= mb_strtoupper($script_id,'utf-8');} @@ -3068,6 +3074,8 @@ $shared_dial_rank = preg_replace('/[^0-9]/','',$shared_dial_rank); $qc_claim_limit = preg_replace('/[^0-9]/','',$qc_claim_limit); $qc_expire_days = preg_replace('/[^0-9]/','',$qc_expire_days); $auth_entry = preg_replace('/[^0-9]/','',$auth_entry); +$agent_hidden_sound_volume = preg_replace('/[^0-9]/','',$agent_hidden_sound_volume); +$agent_hidden_sound_seconds = preg_replace('/[^0-9]/','',$agent_hidden_sound_seconds); $user_new_lead_limit = preg_replace('/[^-0-9]/','',$user_new_lead_limit); $drop_call_seconds = preg_replace('/[^-0-9]/','',$drop_call_seconds); @@ -3243,6 +3251,7 @@ $daily_limit_manual = preg_replace('/[^-_0-9a-zA-Z]/','',$daily_limit_manual); $transfer_button_launch = preg_replace('/[^-_0-9a-zA-Z]/','',$transfer_button_launch); $two_factor_override = preg_replace('/[^-_0-9a-zA-Z]/','',$two_factor_override); $clear_form = preg_replace('/[^-_0-9a-zA-Z]/','',$clear_form); +$agent_hidden_sound = preg_replace('/[^-_0-9a-zA-Z]/','',$agent_hidden_sound); if ($non_latin < 1) { @@ -5539,12 +5548,13 @@ if ($SSscript_remove_js > 0) # 210317-0819 - Added lead_all_info Non-Agent API function, Changed lead-modify page links to javascript because of Chrome # 210317-1211 - Fixes for better consistency in password change process, Issue #1261 # 210317-1736 - Added the ability to see orphan Remote Agent entries(with no valid User account) +# 210317-2329 - Added system settings for agent_hidden_sound and added more browser_alert_sounds # # 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-803a'; -$build = '210317-1736'; +$admin_version = '2.14-804a'; +$build = '210317-2329'; $STARTtime = date("U"); $SQLdate = date("Y-m-d H:i:s"); @@ -19841,7 +19851,7 @@ if ($ADD==411111111111111) } } - $stmt="UPDATE system_settings set use_non_latin='$use_non_latin',webroot_writable='$webroot_writable',enable_queuemetrics_logging='$enable_queuemetrics_logging',queuemetrics_server_ip='$queuemetrics_server_ip',queuemetrics_dbname='$queuemetrics_dbname',queuemetrics_login='$queuemetrics_login',queuemetrics_pass='$queuemetrics_pass',queuemetrics_url='$queuemetrics_url',queuemetrics_log_id='$queuemetrics_log_id',queuemetrics_eq_prepend='$queuemetrics_eq_prepend',vicidial_agent_disable='$vicidial_agent_disable',allow_sipsak_messages='$allow_sipsak_messages',admin_home_url='$admin_home_url',enable_agc_xfer_log='$enable_agc_xfer_log',timeclock_end_of_day='$timeclock_end_of_day',vdc_header_date_format='$vdc_header_date_format',vdc_customer_date_format='$vdc_customer_date_format',vdc_header_phone_format='$vdc_header_phone_format',vdc_agent_api_active='$vdc_agent_api_active',enable_vtiger_integration='$enable_vtiger_integration',vtiger_server_ip='$vtiger_server_ip',vtiger_dbname='$vtiger_dbname',vtiger_login='$vtiger_login',vtiger_pass='$vtiger_pass',vtiger_url='$vtiger_url',qc_features_active='$qc_features_active',outbound_autodial_active='$outbound_autodial_active',outbound_calls_per_second='$outbound_calls_per_second',enable_tts_integration='$enable_tts_integration',agentonly_callback_campaign_lock='$agentonly_callback_campaign_lock',sounds_central_control_active='$sounds_central_control_active',sounds_web_server='$sounds_web_server',sounds_web_directory='$sounds_web_directory',active_voicemail_server='$active_voicemail_server',auto_dial_limit='$auto_dial_limit',user_territories_active='$user_territories_active',allow_custom_dialplan='$allow_custom_dialplan',enable_second_webform='$enable_second_webform',default_webphone='$default_webphone',default_external_server_ip='$default_external_server_ip',webphone_url='" . mysqli_real_escape_string($link, $webphone_url) . "',enable_agc_dispo_log='$enable_agc_dispo_log',queuemetrics_loginout='$queuemetrics_loginout',callcard_enabled='$callcard_enabled',queuemetrics_callstatus='$queuemetrics_callstatus',default_codecs='$default_codecs',admin_web_directory='$admin_web_directory',label_title='$label_title',label_first_name='$label_first_name',label_middle_initial='$label_middle_initial',label_last_name='$label_last_name',label_address1='$label_address1',label_address2='$label_address2',label_address3='$label_address3',label_city='$label_city',label_state='$label_state',label_province='$label_province',label_postal_code='$label_postal_code',label_vendor_lead_code='$label_vendor_lead_code',label_gender='$label_gender',label_phone_number='$label_phone_number',label_phone_code='$label_phone_code',label_alt_phone='$label_alt_phone',label_security_phrase='$label_security_phrase',label_email='$label_email',label_comments='$label_comments',custom_fields_enabled='$custom_fields_enabled',slave_db_server='$slave_db_server',reports_use_slave_db='$reports_use_slave_db'$custom_reports_slave_SQL,webphone_systemkey='$webphone_systemkey',first_login_trigger='$first_login_trigger',default_phone_registration_password='$default_phone_registration_password',default_phone_login_password='$default_phone_login_password',default_server_password='$default_server_password',admin_modify_refresh='$admin_modify_refresh',nocache_admin='$nocache_admin',generate_cross_server_exten='$generate_cross_server_exten',queuemetrics_addmember_enabled='$queuemetrics_addmember_enabled',queuemetrics_dispo_pause='$queuemetrics_dispo_pause',label_hide_field_logs='$label_hide_field_logs',queuemetrics_pe_phone_append='$queuemetrics_pe_phone_append',test_campaign_calls='$test_campaign_calls',agents_calls_reset='$agents_calls_reset',default_voicemail_timezone='$default_voicemail_timezone',default_local_gmt='$default_local_gmt',noanswer_log='$noanswer_log',alt_log_server_ip='$alt_log_server_ip',alt_log_dbname='$alt_log_dbname',alt_log_login='$alt_log_login',alt_log_pass='$alt_log_pass',tables_use_alt_log_db='$tables_use_alt_log_db',did_agent_log='$did_agent_log',campaign_cid_areacodes_enabled='$campaign_cid_areacodes_enabled',pllb_grouping_limit='$pllb_grouping_limit',did_ra_extensions_enabled='$did_ra_extensions_enabled',expanded_list_stats='$expanded_list_stats',contacts_enabled='$contacts_enabled',call_menu_qualify_enabled='$call_menu_qualify_enabled',admin_list_counts='$admin_list_counts',allow_voicemail_greeting='$allow_voicemail_greeting',queuemetrics_socket='$queuemetrics_socket',queuemetrics_socket_url='$queuemetrics_socket_url',enhanced_disconnect_logging='$enhanced_disconnect_logging',allow_emails='$allow_emails',level_8_disable_add='$level_8_disable_add',queuemetrics_record_hold='$queuemetrics_record_hold',country_code_list_stats='$country_code_list_stats',queuemetrics_pause_type='$queuemetrics_pause_type',frozen_server_call_clear='$frozen_server_call_clear',callback_time_24hour='$callback_time_24hour',enable_languages='$enable_languages',language_method='$language_method',meetme_enter_login_filename='$meetme_enter_login_filename',meetme_enter_leave3way_filename='$meetme_enter_leave3way_filename',enable_did_entry_list_id='$enable_did_entry_list_id',enable_third_webform='$enable_third_webform',allow_chats='$allow_chats',chat_url='$chat_url',chat_timeout='$chat_timeout',agent_debug_logging='$agent_debug_logging',default_language='$default_language',agent_whisper_enabled='$agent_whisper_enabled',user_hide_realtime_enabled='$user_hide_realtime_enabled',usacan_phone_dialcode_fix='$usacan_phone_dialcode_fix',cache_carrier_stats_realtime='$cache_carrier_stats_realtime',log_recording_access='$log_recording_access',report_default_format='$report_default_format',alt_ivr_logging='$alt_ivr_logging',default_phone_code='$default_phone_code',admin_row_click='$admin_row_click',admin_screen_colors='$admin_screen_colors',ofcom_uk_drop_calc='$ofcom_uk_drop_calc',agent_screen_colors='$agent_screen_colors',script_remove_js='$script_remove_js',manual_auto_next='$manual_auto_next',user_new_lead_limit='$user_new_lead_limit',agent_xfer_park_3way='$agent_xfer_park_3way',agent_soundboards='$agent_soundboards',web_loader_phone_length='$web_loader_phone_length',agent_script='$agent_script',agent_chat_screen_colors='$agent_chat_screen_colors',enable_auto_reports='$enable_auto_reports',enable_pause_code_limits='$enable_pause_code_limits',enable_drop_lists='$enable_drop_lists',allow_ip_lists='$allow_ip_lists',system_ip_blacklist='$system_ip_blacklist',agent_push_events='$agent_push_events',agent_push_url='$agent_push_url',hide_inactive_lists='$hide_inactive_lists',allow_manage_active_lists='$allow_manage_active_lists',expired_lists_inactive='$expired_lists_inactive',did_system_filter='$did_system_filter',anyone_callback_inactive_lists='$anyone_callback_inactive_lists',enable_gdpr_download_deletion='$enable_gdpr_download_deletion',source_id_display='$source_id_display',agent_logout_link='$agent_logout_link',manual_dial_validation='$manual_dial_validation',mute_recordings='$mute_recordings',user_admin_redirect='$user_admin_redirect',list_status_modification_confirmation='$list_status_modification_confirmation',sip_event_logging='$sip_event_logging',call_quota_lead_ranking='$call_quota_lead_ranking',enable_second_script='$enable_second_script',enable_first_webform='$enable_first_webform',recording_buttons='$recording_buttons',opensips_cid_name='$opensips_cid_name',require_password_length='$require_password_length',user_account_emails='$user_account_emails',outbound_cid_any='$outbound_cid_any',entries_per_page='$entries_per_page',browser_call_alerts='$browser_call_alerts',queuemetrics_pausereason='$queuemetrics_pausereason',inbound_answer_config='$inbound_answer_config',enable_international_dncs='$enable_international_dncs',web_loader_phone_strip='$web_loader_phone_strip',manual_dial_phone_strip='$manual_dial_phone_strip',daily_call_count_limit='$daily_call_count_limit',allow_shared_dial='$allow_shared_dial',agent_search_method='$agent_search_method',phone_defaults_container='$phone_defaults_container',qc_claim_limit='$qc_claim_limit',qc_expire_days='$qc_expire_days',two_factor_auth_hours='$two_factor_auth_hours',two_factor_container='$two_factor_container'$custom_dialplanSQL;"; + $stmt="UPDATE system_settings set use_non_latin='$use_non_latin',webroot_writable='$webroot_writable',enable_queuemetrics_logging='$enable_queuemetrics_logging',queuemetrics_server_ip='$queuemetrics_server_ip',queuemetrics_dbname='$queuemetrics_dbname',queuemetrics_login='$queuemetrics_login',queuemetrics_pass='$queuemetrics_pass',queuemetrics_url='$queuemetrics_url',queuemetrics_log_id='$queuemetrics_log_id',queuemetrics_eq_prepend='$queuemetrics_eq_prepend',vicidial_agent_disable='$vicidial_agent_disable',allow_sipsak_messages='$allow_sipsak_messages',admin_home_url='$admin_home_url',enable_agc_xfer_log='$enable_agc_xfer_log',timeclock_end_of_day='$timeclock_end_of_day',vdc_header_date_format='$vdc_header_date_format',vdc_customer_date_format='$vdc_customer_date_format',vdc_header_phone_format='$vdc_header_phone_format',vdc_agent_api_active='$vdc_agent_api_active',enable_vtiger_integration='$enable_vtiger_integration',vtiger_server_ip='$vtiger_server_ip',vtiger_dbname='$vtiger_dbname',vtiger_login='$vtiger_login',vtiger_pass='$vtiger_pass',vtiger_url='$vtiger_url',qc_features_active='$qc_features_active',outbound_autodial_active='$outbound_autodial_active',outbound_calls_per_second='$outbound_calls_per_second',enable_tts_integration='$enable_tts_integration',agentonly_callback_campaign_lock='$agentonly_callback_campaign_lock',sounds_central_control_active='$sounds_central_control_active',sounds_web_server='$sounds_web_server',sounds_web_directory='$sounds_web_directory',active_voicemail_server='$active_voicemail_server',auto_dial_limit='$auto_dial_limit',user_territories_active='$user_territories_active',allow_custom_dialplan='$allow_custom_dialplan',enable_second_webform='$enable_second_webform',default_webphone='$default_webphone',default_external_server_ip='$default_external_server_ip',webphone_url='" . mysqli_real_escape_string($link, $webphone_url) . "',enable_agc_dispo_log='$enable_agc_dispo_log',queuemetrics_loginout='$queuemetrics_loginout',callcard_enabled='$callcard_enabled',queuemetrics_callstatus='$queuemetrics_callstatus',default_codecs='$default_codecs',admin_web_directory='$admin_web_directory',label_title='$label_title',label_first_name='$label_first_name',label_middle_initial='$label_middle_initial',label_last_name='$label_last_name',label_address1='$label_address1',label_address2='$label_address2',label_address3='$label_address3',label_city='$label_city',label_state='$label_state',label_province='$label_province',label_postal_code='$label_postal_code',label_vendor_lead_code='$label_vendor_lead_code',label_gender='$label_gender',label_phone_number='$label_phone_number',label_phone_code='$label_phone_code',label_alt_phone='$label_alt_phone',label_security_phrase='$label_security_phrase',label_email='$label_email',label_comments='$label_comments',custom_fields_enabled='$custom_fields_enabled',slave_db_server='$slave_db_server',reports_use_slave_db='$reports_use_slave_db'$custom_reports_slave_SQL,webphone_systemkey='$webphone_systemkey',first_login_trigger='$first_login_trigger',default_phone_registration_password='$default_phone_registration_password',default_phone_login_password='$default_phone_login_password',default_server_password='$default_server_password',admin_modify_refresh='$admin_modify_refresh',nocache_admin='$nocache_admin',generate_cross_server_exten='$generate_cross_server_exten',queuemetrics_addmember_enabled='$queuemetrics_addmember_enabled',queuemetrics_dispo_pause='$queuemetrics_dispo_pause',label_hide_field_logs='$label_hide_field_logs',queuemetrics_pe_phone_append='$queuemetrics_pe_phone_append',test_campaign_calls='$test_campaign_calls',agents_calls_reset='$agents_calls_reset',default_voicemail_timezone='$default_voicemail_timezone',default_local_gmt='$default_local_gmt',noanswer_log='$noanswer_log',alt_log_server_ip='$alt_log_server_ip',alt_log_dbname='$alt_log_dbname',alt_log_login='$alt_log_login',alt_log_pass='$alt_log_pass',tables_use_alt_log_db='$tables_use_alt_log_db',did_agent_log='$did_agent_log',campaign_cid_areacodes_enabled='$campaign_cid_areacodes_enabled',pllb_grouping_limit='$pllb_grouping_limit',did_ra_extensions_enabled='$did_ra_extensions_enabled',expanded_list_stats='$expanded_list_stats',contacts_enabled='$contacts_enabled',call_menu_qualify_enabled='$call_menu_qualify_enabled',admin_list_counts='$admin_list_counts',allow_voicemail_greeting='$allow_voicemail_greeting',queuemetrics_socket='$queuemetrics_socket',queuemetrics_socket_url='$queuemetrics_socket_url',enhanced_disconnect_logging='$enhanced_disconnect_logging',allow_emails='$allow_emails',level_8_disable_add='$level_8_disable_add',queuemetrics_record_hold='$queuemetrics_record_hold',country_code_list_stats='$country_code_list_stats',queuemetrics_pause_type='$queuemetrics_pause_type',frozen_server_call_clear='$frozen_server_call_clear',callback_time_24hour='$callback_time_24hour',enable_languages='$enable_languages',language_method='$language_method',meetme_enter_login_filename='$meetme_enter_login_filename',meetme_enter_leave3way_filename='$meetme_enter_leave3way_filename',enable_did_entry_list_id='$enable_did_entry_list_id',enable_third_webform='$enable_third_webform',allow_chats='$allow_chats',chat_url='$chat_url',chat_timeout='$chat_timeout',agent_debug_logging='$agent_debug_logging',default_language='$default_language',agent_whisper_enabled='$agent_whisper_enabled',user_hide_realtime_enabled='$user_hide_realtime_enabled',usacan_phone_dialcode_fix='$usacan_phone_dialcode_fix',cache_carrier_stats_realtime='$cache_carrier_stats_realtime',log_recording_access='$log_recording_access',report_default_format='$report_default_format',alt_ivr_logging='$alt_ivr_logging',default_phone_code='$default_phone_code',admin_row_click='$admin_row_click',admin_screen_colors='$admin_screen_colors',ofcom_uk_drop_calc='$ofcom_uk_drop_calc',agent_screen_colors='$agent_screen_colors',script_remove_js='$script_remove_js',manual_auto_next='$manual_auto_next',user_new_lead_limit='$user_new_lead_limit',agent_xfer_park_3way='$agent_xfer_park_3way',agent_soundboards='$agent_soundboards',web_loader_phone_length='$web_loader_phone_length',agent_script='$agent_script',agent_chat_screen_colors='$agent_chat_screen_colors',enable_auto_reports='$enable_auto_reports',enable_pause_code_limits='$enable_pause_code_limits',enable_drop_lists='$enable_drop_lists',allow_ip_lists='$allow_ip_lists',system_ip_blacklist='$system_ip_blacklist',agent_push_events='$agent_push_events',agent_push_url='$agent_push_url',hide_inactive_lists='$hide_inactive_lists',allow_manage_active_lists='$allow_manage_active_lists',expired_lists_inactive='$expired_lists_inactive',did_system_filter='$did_system_filter',anyone_callback_inactive_lists='$anyone_callback_inactive_lists',enable_gdpr_download_deletion='$enable_gdpr_download_deletion',source_id_display='$source_id_display',agent_logout_link='$agent_logout_link',manual_dial_validation='$manual_dial_validation',mute_recordings='$mute_recordings',user_admin_redirect='$user_admin_redirect',list_status_modification_confirmation='$list_status_modification_confirmation',sip_event_logging='$sip_event_logging',call_quota_lead_ranking='$call_quota_lead_ranking',enable_second_script='$enable_second_script',enable_first_webform='$enable_first_webform',recording_buttons='$recording_buttons',opensips_cid_name='$opensips_cid_name',require_password_length='$require_password_length',user_account_emails='$user_account_emails',outbound_cid_any='$outbound_cid_any',entries_per_page='$entries_per_page',browser_call_alerts='$browser_call_alerts',queuemetrics_pausereason='$queuemetrics_pausereason',inbound_answer_config='$inbound_answer_config',enable_international_dncs='$enable_international_dncs',web_loader_phone_strip='$web_loader_phone_strip',manual_dial_phone_strip='$manual_dial_phone_strip',daily_call_count_limit='$daily_call_count_limit',allow_shared_dial='$allow_shared_dial',agent_search_method='$agent_search_method',phone_defaults_container='$phone_defaults_container',qc_claim_limit='$qc_claim_limit',qc_expire_days='$qc_expire_days',two_factor_auth_hours='$two_factor_auth_hours',two_factor_container='$two_factor_container',agent_hidden_sound='$agent_hidden_sound',agent_hidden_sound_volume='$agent_hidden_sound_volume',agent_hidden_sound_seconds='$agent_hidden_sound_seconds'$custom_dialplanSQL;"; $rslt=mysql_to_mysqli($stmt, $link); $update_main_rows=mysqli_affected_rows($link); if ($DB) {echo "$update_main_rows|$stmt|\n";} @@ -40170,7 +40180,7 @@ if ($ADD==311111111111111) $ALLagent_count = $rowx[2]; } - $stmt="SELECT version,install_date,use_non_latin,webroot_writable,enable_queuemetrics_logging,queuemetrics_server_ip,queuemetrics_dbname,queuemetrics_login,queuemetrics_pass,queuemetrics_url,queuemetrics_log_id,queuemetrics_eq_prepend,vicidial_agent_disable,allow_sipsak_messages,admin_home_url,enable_agc_xfer_log,db_schema_version,auto_user_add_value,timeclock_end_of_day,timeclock_last_reset_date,vdc_header_date_format,vdc_customer_date_format,vdc_header_phone_format,vdc_agent_api_active,qc_last_pull_time,enable_vtiger_integration,vtiger_server_ip,vtiger_dbname,vtiger_login,vtiger_pass,vtiger_url,qc_features_active,outbound_autodial_active,outbound_calls_per_second,enable_tts_integration,agentonly_callback_campaign_lock,sounds_central_control_active,sounds_web_server,sounds_web_directory,active_voicemail_server,auto_dial_limit,user_territories_active,allow_custom_dialplan,db_schema_update_date,enable_second_webform,default_webphone,default_external_server_ip,webphone_url,enable_agc_dispo_log,custom_dialplan_entry,queuemetrics_loginout,callcard_enabled,queuemetrics_callstatus,default_codecs,admin_web_directory,label_title,label_first_name,label_middle_initial,label_last_name,label_address1,label_address2,label_address3,label_city,label_state,label_province,label_postal_code,label_vendor_lead_code,label_gender,label_phone_number,label_phone_code,label_alt_phone,label_security_phrase,label_email,label_comments,custom_fields_enabled,slave_db_server,reports_use_slave_db,webphone_systemkey,first_login_trigger,default_phone_registration_password,default_phone_login_password,default_server_password,admin_modify_refresh,nocache_admin,generate_cross_server_exten,queuemetrics_addmember_enabled,queuemetrics_dispo_pause,label_hide_field_logs,queuemetrics_pe_phone_append,test_campaign_calls,agents_calls_reset,default_voicemail_timezone,default_local_gmt,noanswer_log,alt_log_server_ip,alt_log_dbname,alt_log_login,alt_log_pass,tables_use_alt_log_db,did_agent_log,campaign_cid_areacodes_enabled,pllb_grouping_limit,did_ra_extensions_enabled,expanded_list_stats,contacts_enabled,call_menu_qualify_enabled,admin_list_counts,allow_voicemail_greeting,svn_revision,queuemetrics_socket,queuemetrics_socket_url,enhanced_disconnect_logging,allow_emails,level_8_disable_add,pass_hash_enabled,pass_key,pass_cost,disable_auto_dial,queuemetrics_record_hold,country_code_list_stats,reload_timestamp,queuemetrics_pause_type,frozen_server_call_clear,callback_time_24hour,allow_chats,chat_url,chat_timeout,enable_languages,language_method,meetme_enter_login_filename,meetme_enter_leave3way_filename,enable_did_entry_list_id,enable_third_webform,agent_debug_logging,default_language,agent_whisper_enabled,user_hide_realtime_enabled,usacan_phone_dialcode_fix,cache_carrier_stats_realtime,oldest_logs_date,log_recording_access,report_default_format,alt_ivr_logging,default_phone_code,admin_row_click,admin_screen_colors,ofcom_uk_drop_calc,agent_screen_colors,script_remove_js,manual_auto_next,user_new_lead_limit,agent_xfer_park_3way,rec_prompt_count,agent_soundboards,web_loader_phone_length,agent_script,agent_chat_screen_colors,enable_auto_reports,enable_pause_code_limits,enable_drop_lists,allow_ip_lists,system_ip_blacklist,agent_push_events,agent_push_url,hide_inactive_lists,allow_manage_active_lists,expired_lists_inactive,did_system_filter,anyone_callback_inactive_lists,enable_gdpr_download_deletion,source_id_display,agent_logout_link,manual_dial_validation,mute_recordings,user_admin_redirect,list_status_modification_confirmation,sip_event_logging,call_quota_lead_ranking,enable_second_script,enable_first_webform,recording_buttons,opensips_cid_name,require_password_length,user_account_emails,outbound_cid_any,entries_per_page,browser_call_alerts,queuemetrics_pausereason,inbound_answer_config,enable_international_dncs,web_loader_phone_strip,manual_dial_phone_strip,daily_call_count_limit,allow_shared_dial,agent_search_method,phone_defaults_container,qc_claim_limit,qc_expire_days,two_factor_auth_hours,two_factor_container from system_settings;"; + $stmt="SELECT version,install_date,use_non_latin,webroot_writable,enable_queuemetrics_logging,queuemetrics_server_ip,queuemetrics_dbname,queuemetrics_login,queuemetrics_pass,queuemetrics_url,queuemetrics_log_id,queuemetrics_eq_prepend,vicidial_agent_disable,allow_sipsak_messages,admin_home_url,enable_agc_xfer_log,db_schema_version,auto_user_add_value,timeclock_end_of_day,timeclock_last_reset_date,vdc_header_date_format,vdc_customer_date_format,vdc_header_phone_format,vdc_agent_api_active,qc_last_pull_time,enable_vtiger_integration,vtiger_server_ip,vtiger_dbname,vtiger_login,vtiger_pass,vtiger_url,qc_features_active,outbound_autodial_active,outbound_calls_per_second,enable_tts_integration,agentonly_callback_campaign_lock,sounds_central_control_active,sounds_web_server,sounds_web_directory,active_voicemail_server,auto_dial_limit,user_territories_active,allow_custom_dialplan,db_schema_update_date,enable_second_webform,default_webphone,default_external_server_ip,webphone_url,enable_agc_dispo_log,custom_dialplan_entry,queuemetrics_loginout,callcard_enabled,queuemetrics_callstatus,default_codecs,admin_web_directory,label_title,label_first_name,label_middle_initial,label_last_name,label_address1,label_address2,label_address3,label_city,label_state,label_province,label_postal_code,label_vendor_lead_code,label_gender,label_phone_number,label_phone_code,label_alt_phone,label_security_phrase,label_email,label_comments,custom_fields_enabled,slave_db_server,reports_use_slave_db,webphone_systemkey,first_login_trigger,default_phone_registration_password,default_phone_login_password,default_server_password,admin_modify_refresh,nocache_admin,generate_cross_server_exten,queuemetrics_addmember_enabled,queuemetrics_dispo_pause,label_hide_field_logs,queuemetrics_pe_phone_append,test_campaign_calls,agents_calls_reset,default_voicemail_timezone,default_local_gmt,noanswer_log,alt_log_server_ip,alt_log_dbname,alt_log_login,alt_log_pass,tables_use_alt_log_db,did_agent_log,campaign_cid_areacodes_enabled,pllb_grouping_limit,did_ra_extensions_enabled,expanded_list_stats,contacts_enabled,call_menu_qualify_enabled,admin_list_counts,allow_voicemail_greeting,svn_revision,queuemetrics_socket,queuemetrics_socket_url,enhanced_disconnect_logging,allow_emails,level_8_disable_add,pass_hash_enabled,pass_key,pass_cost,disable_auto_dial,queuemetrics_record_hold,country_code_list_stats,reload_timestamp,queuemetrics_pause_type,frozen_server_call_clear,callback_time_24hour,allow_chats,chat_url,chat_timeout,enable_languages,language_method,meetme_enter_login_filename,meetme_enter_leave3way_filename,enable_did_entry_list_id,enable_third_webform,agent_debug_logging,default_language,agent_whisper_enabled,user_hide_realtime_enabled,usacan_phone_dialcode_fix,cache_carrier_stats_realtime,oldest_logs_date,log_recording_access,report_default_format,alt_ivr_logging,default_phone_code,admin_row_click,admin_screen_colors,ofcom_uk_drop_calc,agent_screen_colors,script_remove_js,manual_auto_next,user_new_lead_limit,agent_xfer_park_3way,rec_prompt_count,agent_soundboards,web_loader_phone_length,agent_script,agent_chat_screen_colors,enable_auto_reports,enable_pause_code_limits,enable_drop_lists,allow_ip_lists,system_ip_blacklist,agent_push_events,agent_push_url,hide_inactive_lists,allow_manage_active_lists,expired_lists_inactive,did_system_filter,anyone_callback_inactive_lists,enable_gdpr_download_deletion,source_id_display,agent_logout_link,manual_dial_validation,mute_recordings,user_admin_redirect,list_status_modification_confirmation,sip_event_logging,call_quota_lead_ranking,enable_second_script,enable_first_webform,recording_buttons,opensips_cid_name,require_password_length,user_account_emails,outbound_cid_any,entries_per_page,browser_call_alerts,queuemetrics_pausereason,inbound_answer_config,enable_international_dncs,web_loader_phone_strip,manual_dial_phone_strip,daily_call_count_limit,allow_shared_dial,agent_search_method,phone_defaults_container,qc_claim_limit,qc_expire_days,two_factor_auth_hours,two_factor_container,agent_hidden_sound,agent_hidden_sound_volume,agent_hidden_sound_seconds from system_settings;"; $rslt=mysql_to_mysqli($stmt, $link); $row=mysqli_fetch_row($rslt); $version = $row[0]; @@ -40373,6 +40383,9 @@ if ($ADD==311111111111111) $qc_expire_days = $row[197]; $two_factor_auth_hours = $row[198]; $two_factor_container = $row[199]; + $agent_hidden_sound = $row[200]; + $agent_hidden_sound_volume = $row[201]; + $agent_hidden_sound_seconds = $row[202]; if ($pass_hash_enabled > 0) {$pass_hash_enabled = 'ENABLED';} else {$pass_hash_enabled = 'DISABLED';} @@ -40510,6 +40523,39 @@ if ($ADD==311111111111111) echo ""._QXZ("Agent Screen Logout Link Credentials").": $NWB#settings-agent_logout_link$NWE\n"; echo ""._QXZ("Agent Soundboards").": $NWB#settings-agent_soundboards$NWE\n"; echo ""._QXZ("Agent Browser Call Alerts").": $NWB#settings-browser_call_alerts$NWE\n"; + + echo ""._QXZ("Agent Hidden Browser Sound").":   \n"; + echo " "._QXZ("volume").":   "; + echo ""._QXZ("play selected sound")." $NWB#settings-agent_hidden_sound$NWE   \n"; + + echo ""._QXZ("Agent Hidden Browser Sound Seconds").": $NWB#settings-agent_hidden_sound_seconds$NWE   \n"; + echo ""._QXZ("Enable Pause Code Time Limits").": $NWB#settings-enable_pause_code_limits$NWE\n"; echo ""._QXZ("Agent Only Callback Campaign Lock").": $NWB#settings-agentonly_callback_campaign_lock$NWE\n"; @@ -41058,6 +41104,16 @@ if ($ADD==311111111111111) echo "\n"; echo "\n"; echo "\n"; + + $bas=0; $bas_embed_output=''; + while ($browser_alert_sounds_listARY_ct > $bas) + { + $bas_embed_output .= "\n"; + $bas++; + } + echo "$bas_embed_output"; + echo "\n"; + if ( ($LOGuser_level >= 9) and ( (preg_match("/Administration Change Log/",$LOGallowed_reports)) or (preg_match("/ALL REPORTS/",$LOGallowed_reports)) ) ) { echo "

"._QXZ("Click here to see Admin changes to the system settings")."\n"; diff --git a/www/vicidial/help_documentation.txt b/www/vicidial/help_documentation.txt index bfe2074c..cde03efa 100644 --- a/www/vicidial/help_documentation.txt +++ b/www/vicidial/help_documentation.txt @@ -1,4 +1,4 @@ -# version: 20210317173901 +# version: 20210318023201 users-user User ID 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. users-pass Password This field is where you put the users password. Must be at least 2 characters in length. Only letters and numbers are allowed in user passwords. 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. users-force_change_password Force Change Password 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 or the agent screen. Default is N. @@ -1035,6 +1035,8 @@ settings-agent_xfer_park_3way Agent Screen Park Xfer Button This option def settings-agent_logout_link Agent Screen Logout Link Credentials This option controls whether the agent screen logout link will contain the agent credentials as a part of the link, or if the link will go to a blank login page. -0- will go to a blank form and -1- will go to a form that has the user credentials filled in. settings-agent_soundboards Agent Soundboards This option allows you to create agent soundboards that allow an agent in the user screen to click on audio files to have them play in their session. Default is 0 for disabled. settings-browser_call_alerts Agent Browser Call Alerts This option, if enabled, will allow you to select a sound, at the campaign level, when a call arrives in an agent session, to be played by the web browser program that the agent is using to log into the Agent Screen with. This is only recommended for agents using softphones or webphones. If you decide to use this option, you may want to contact your system administrator to disable the default enter and leave session sounds on your dialers. Default is 0 for disabled. +settings-agent_hidden_sound Agent Hidden Browser Sound This feature will allow you to have the selected sound file played to the Agent Screen when the web browser window with the Agent Screen in it is hidden or the agent changes to a different application on their computer. To enable this feature, the Agent Hidden Browser Sound Seconds below must be greater than 0. This feature can be used to disable web browser javascript throttling if set to an audible sound at a 20 second interval. We have tested this with the -click_quiet- sound file at a volume of -25-. +settings-agent_hidden_sound_seconds Agent Hidden Browser Sound Seconds This is the interval at which the selected Agent Hidden Browser Sound above will be played. If this is set to 20, then the Agent Hidden Browser Sound will be played every 20 seconds that the agent screen is hidden from view. Default is 0 for disabled. settings-enable_pause_code_limits Enable Pause Code Time Limits This option allows you to be able to set the Time Limit field in campaign pause codes, which will change the color of the agent on the Real-Time Report if they are in that pause code for more than the defined amount of seconds. Default is 0 for disabled. settings-agentonly_callback_campaign_lock Agent Only Callback Campaign Lock This option defines whether AGENTONLY callbacks are locked to the campaign that the agent originally created them under. Setting this to 1 means that the agent can only dial them from the campaign they were set under, 0 means that the agent can access them no matter what campaign they are logged into. Default is 1. settings-callback_time_24hour Callback Time 24 Hours This option defines whether the agent sees 12 hour time with AM PM options or 24 hour time on the Callback setting screen in the agent interface. Default is 0 for disabled.