Added Lead Tools Advanced page

Added agent manual dial by lead ID
Several small fixes
hopper script features added for campaign restriction

git-svn-id: svn://192.168.202.10@2036 3d104415-ff17-0410-8863-d5cf3c621b8a
This commit is contained in:
mattf
2013-10-17 02:14:44 +00:00
parent a824050877
commit 771ae6db9e
21 changed files with 4384 additions and 76 deletions
+5
View File
@@ -154,6 +154,11 @@ OTHER CHANGES:
20. Added system setting to view country code breakdown in list modify screen. 20. Added system setting to view country code breakdown in list modify screen.
21. Added campaign option to allow agents to be able to place manual dial calls
by Lead ID.
22. Added Advanced lead tools management, access from the Admin Utilities page
+107 -19
View File
@@ -7,11 +7,9 @@
# approach of allocating leads to dialers. # approach of allocating leads to dialers.
# #
# SUMMARY: # SUMMARY:
# For VICIDIAL auto-dial outbound dialing, this program must be in the crontab # For VICIDIAL outbound dialing, this program must be in the crontab on only one
# running every minute # server, running every minute during operating hours
# #
# It is recommended that you run this program on the local Asterisk machine
#
# hopper sources: # hopper sources:
# - A = Auto-alt-dial # - A = Auto-alt-dial
# - C = Scheduled Callbacks # - C = Scheduled Callbacks
@@ -76,19 +74,25 @@
# 121223-1540 - Fix for issue #627 preventing issues when filter is deleted, DomeDan # 121223-1540 - Fix for issue #627 preventing issues when filter is deleted, DomeDan
# 130219-1501 - Fixed issue with other campaign dnc # 130219-1501 - Fixed issue with other campaign dnc
# 130510-0904 - Added state call time holidays functionality # 130510-0904 - Added state call time holidays functionality
# 131008-1518 - Changed campaign flag to allow multiple campaigns
# Changed and added several CLI flags, including -t to --test, added --version, --count-only
# Added code to restrict all functions if campaign flag is used
# #
# constants # constants
$DB=0; # Debug flag, set to 0 for no debug messages, On an active system this will generate lots of lines of output per minute $build = '131008-1518';
$DB=0; # Debug flag, set to 0 for no debug messages. Can be overriden with CLI --debug flag
$US='__'; $US='__';
$MT[0]=''; $MT[0]='';
#$vicidial_hopper='TEST_vicidial_hopper'; # for testing #$vicidial_hopper='TEST_vicidial_hopper'; # for testing only
$vicidial_hopper='vicidial_hopper'; $vicidial_hopper='vicidial_hopper';
$count_only=0;
# options # options
$insert_auto_CB_to_hopper = 1; # set to 1 to automatically insert ANYONE callbacks into the hopper $insert_auto_CB_to_hopper = 1; # set to 1 to automatically insert ANYONE callbacks into the hopper, default = 1
### gather date and time
$secT = time(); $secT = time();
$secX = time(); $secX = time();
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
@@ -150,7 +154,7 @@ if ($Vmon < 10) {$Vmon = "0$Vmon";}
if ($Vmday < 10) {$Vmday = "0$Vmday";} if ($Vmday < 10) {$Vmday = "0$Vmday";}
$VDL_tensec = "$Vyear-$Vmon-$Vmday $Vhour:$Vmin:$Vsec"; $VDL_tensec = "$Vyear-$Vmon-$Vmday $Vhour:$Vmin:$Vsec";
### begin parsing run-time options ### ### begin parsing CLI run-time options ###
if (length($ARGV[0])>1) if (length($ARGV[0])>1)
{ {
$i=0; $i=0;
@@ -164,26 +168,38 @@ if (length($ARGV[0])>1)
if ($args =~ /--help/i) if ($args =~ /--help/i)
{ {
print "allowed run time options(must stay in this order):\n"; print "allowed run time options(must stay in this order):\n";
print " [--test] = test\n";
print " [--help] = this screen\n";
print " [--version] = print version of this script, then exit\n";
print " [--count-only] = only display the number of leads in the hopper, then exit\n";
print " [--debug] = debug\n"; print " [--debug] = debug\n";
print " [--debugX] = super debug\n"; print " [--debugX] = super debug\n";
print " [--dbgmt] = show GMT offset of records as they are inserted into hopper\n"; print " [--dbgmt] = show GMT offset of records as they are inserted into hopper\n";
print " [--dbdetail] = additional level of logging the leads that are inserted into the hopper\n"; print " [--dbdetail] = additional level of logging the leads that are inserted into the hopper\n";
print " [--allow-inactive-list-leads] = do not delete inactive list leads\n"; print " [--allow-inactive-list-leads] = do not delete inactive list leads\n";
print " [-t] = test\n";
print " [--level=XXX] = force a hopper_level of XXX\n"; print " [--level=XXX] = force a hopper_level of XXX\n";
print " [--campaign=XXX] = run for campaign XXX only\n"; print " [--campaign=XXX] = run for campaign XXX only(or more campaigns if separated by triple dash ---)\n";
print " [--wipe-hopper-clean] = deletes everything from the hopper USE WITH CAUTION!!!\n"; print " [--wipe-hopper-clean] = deletes everything from the hopper USE WITH CAUTION!!!\n";
print "\n"; print "\n";
exit; exit;
} }
else else
{ {
if ($args =~ /--version/i)
{
print "version: $build\n";
exit;
}
if ($args =~ /--campaign=/i) if ($args =~ /--campaign=/i)
{ {
# print "\n|$ARGS|\n\n"; # print "\n|$ARGS|\n\n";
@data_in = split(/--campaign=/,$args); @data_in = split(/--campaign=/,$args);
$CLIcampaign = $data_in[1]; $CLIcampaign = $data_in[1];
$CLIcampaign =~ s/ .*$//gi; $CLIcampaign =~ s/ .*$//gi;
if ($CLIcampaign =~ /---/)
{
$CLIcampaign =~ s/---/','/gi;
}
} }
else else
{$CLIcampaign = '';} {$CLIcampaign = '';}
@@ -222,7 +238,7 @@ if (length($ARGV[0])>1)
$allow_inactive_list_leads=1; $allow_inactive_list_leads=1;
# print "\n-----DEBUG DETAIL -----\n\n"; # print "\n-----DEBUG DETAIL -----\n\n";
} }
if ($args =~ /-t/i) if ($args =~ /--test/i)
{ {
$T=1; $TEST=1; $T=1; $TEST=1;
print "\n-----TESTING -----\n\n"; print "\n-----TESTING -----\n\n";
@@ -231,6 +247,10 @@ if (length($ARGV[0])>1)
{ {
$wipe_hopper_clean=1; $wipe_hopper_clean=1;
} }
if ($args =~ /--count-only/i)
{
$count_only=1;
}
} }
} }
else else
@@ -323,11 +343,12 @@ if ($sec < 10) {$sec = "0$sec";}
if ($DB) {print "TIME DEBUG: $LOCAL_GMT_OFF_STD|$LOCAL_GMT_OFF|$isdst| GMT: $hour:$min\n";} if ($DB) {print "TIME DEBUG: $LOCAL_GMT_OFF_STD|$LOCAL_GMT_OFF|$isdst| GMT: $hour:$min\n";}
### Wipe hopper clean process
if ($wipe_hopper_clean) if ($wipe_hopper_clean)
{ {
if (length($CLIcampaign)>0) if (length($CLIcampaign)>0)
{ {
$stmtA = "DELETE from $vicidial_hopper where campaign_id = '$CLIcampaign';"; $stmtA = "DELETE from $vicidial_hopper where campaign_id IN('$CLIcampaign');";
} }
else else
{ {
@@ -340,8 +361,47 @@ if ($wipe_hopper_clean)
exit; exit;
} }
### Count only process
if ($count_only)
{
if (length($CLIcampaign)>0)
{
$stmtA = "SELECT count(*) from $vicidial_hopper where campaign_id IN('$CLIcampaign');";
}
else
{
$stmtA = "SELECT count(*) from $vicidial_hopper;";
}
$hopper_count_only=0;
$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;
$hopper_count_only = $aryA[0];
}
$sthA->finish();
if ($DB)
{print "Hopper count: $hopper_count_only|$stmtA|\n";}
else
{print "Hopper count: $hopper_count_only\n";}
$event_string = "|HOPPER COUNT: $hopper_count_only|";
&event_logger;
exit;
}
### Delete leads from inactive lists if there are any ### Delete leads from inactive lists if there are any
$stmtA = "SELECT list_id FROM vicidial_lists where ( (active='N') or ( (active='Y') and (expiration_date < \"$file_date\") ) );"; if (length($CLIcampaign)>0)
{
$stmtA = "SELECT list_id FROM vicidial_lists where ( ( (active='N') or ( (active='Y') and (expiration_date < \"$file_date\") ) ) and (campaign_id IN('$CLIcampaign') ) );";
}
else
{
$stmtA = "SELECT list_id FROM vicidial_lists where ( (active='N') or ( (active='Y') and (expiration_date < \"$file_date\") ) );";
}
if ($DB) {print $stmtA;} if ($DB) {print $stmtA;}
$inactive_lists=''; $inactive_lists='';
$inactive_lists_count=0; $inactive_lists_count=0;
@@ -373,7 +433,14 @@ if ($inactive_lists_count > 0)
##### BEGIN Change CBHOLD status leads to CALLBK if their vicidial_callbacks time has passed ##### BEGIN Change CBHOLD status leads to CALLBK if their vicidial_callbacks time has passed
$stmtA = "SELECT count(*) FROM vicidial_callbacks where callback_time <= '$now_date' and status='ACTIVE';"; if (length($CLIcampaign)>0)
{
$stmtA = "SELECT count(*) FROM vicidial_callbacks where callback_time <= '$now_date' and status='ACTIVE' and campaign_id IN('$CLIcampaign');";
}
else
{
$stmtA = "SELECT count(*) FROM vicidial_callbacks where callback_time <= '$now_date' and status='ACTIVE';";
}
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; $sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr; $sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
@aryA = $sthA->fetchrow_array; @aryA = $sthA->fetchrow_array;
@@ -386,7 +453,14 @@ if ($CBHOLD_count > 0)
$update_leads=''; $update_leads='';
$cbc=0; $cbc=0;
$cba=0; $cba=0;
$stmtA = "SELECT vicidial_callbacks.lead_id,recipient,campaign_id,vicidial_callbacks.list_id,gmt_offset_now,state,vicidial_callbacks.lead_status,vendor_lead_code FROM vicidial_callbacks,vicidial_list where callback_time <= '$now_date' and vicidial_callbacks.status='ACTIVE' and vicidial_callbacks.lead_id=vicidial_list.lead_id;"; if (length($CLIcampaign)>0)
{
$stmtA = "SELECT vicidial_callbacks.lead_id,recipient,campaign_id,vicidial_callbacks.list_id,gmt_offset_now,state,vicidial_callbacks.lead_status,vendor_lead_code FROM vicidial_callbacks,vicidial_list where callback_time <= '$now_date' and vicidial_callbacks.status='ACTIVE' and vicidial_callbacks.lead_id=vicidial_list.lead_id and vicidial_callbacks.campaign_id IN('$CLIcampaign');";
}
else
{
$stmtA = "SELECT vicidial_callbacks.lead_id,recipient,campaign_id,vicidial_callbacks.list_id,gmt_offset_now,state,vicidial_callbacks.lead_status,vendor_lead_code FROM vicidial_callbacks,vicidial_list where callback_time <= '$now_date' and vicidial_callbacks.status='ACTIVE' and vicidial_callbacks.lead_id=vicidial_list.lead_id;";
}
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; $sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr; $sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
$sthArows=$sthA->rows; $sthArows=$sthA->rows;
@@ -448,7 +522,14 @@ if ($CBHOLD_count > 0)
##### BEGIN Auto-Alt-Dial DNC check and update or delete ##### BEGIN Auto-Alt-Dial DNC check and update or delete
### Find out how many leads in the hopper are set to DNC status ### Find out how many leads in the hopper are set to DNC status
$hopper_dnc_count=0; $hopper_dnc_count=0;
$stmtA = "SELECT count(*) from $vicidial_hopper where status='DNC';"; if (length($CLIcampaign)>0)
{
$stmtA = "SELECT count(*) from $vicidial_hopper where status='DNC' and campaign_id IN('$CLIcampaign');";
}
else
{
$stmtA = "SELECT count(*) from $vicidial_hopper where status='DNC';";
}
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; $sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr; $sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
$sthArows=$sthA->rows; $sthArows=$sthA->rows;
@@ -466,7 +547,14 @@ if ($hopper_dnc_count > 0)
&event_logger; &event_logger;
### Gather all DNC statused vicidial_hopper entries ### Gather all DNC statused vicidial_hopper entries
$stmtA = "SELECT hopper_id,lead_id,alt_dial,campaign_id FROM $vicidial_hopper where status='DNC';"; if (length($CLIcampaign)>0)
{
$stmtA = "SELECT hopper_id,lead_id,alt_dial,campaign_id FROM $vicidial_hopper where status='DNC' and campaign_id IN('$CLIcampaign');";
}
else
{
$stmtA = "SELECT hopper_id,lead_id,alt_dial,campaign_id FROM $vicidial_hopper where status='DNC';";
}
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; $sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr; $sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
$sthArowsVHdnc=$sthA->rows; $sthArowsVHdnc=$sthA->rows;
@@ -818,9 +906,9 @@ if ($hopper_dnc_count > 0)
@campaign_id=@MT; @campaign_id=@MT;
$ANY_hopper_vlc_dup_check='N'; $ANY_hopper_vlc_dup_check='N';
if ($CLIcampaign) if (length($CLIcampaign)>1)
{ {
$stmtA = "SELECT campaign_id,lead_order,hopper_level,auto_dial_level,local_call_time,lead_filter_id,use_internal_dnc,dial_method,available_only_ratio_tally,adaptive_dropped_percentage,adaptive_maximum_level,dial_statuses,list_order_mix,use_campaign_dnc,drop_lockout_time,no_hopper_dialing,auto_alt_dial_statuses,dial_timeout,auto_hopper_multi,use_auto_hopper,auto_trim_hopper,lead_order_randomize,lead_order_secondary,call_count_limit,hopper_vlc_dup_check from vicidial_campaigns where campaign_id='$CLIcampaign';"; $stmtA = "SELECT campaign_id,lead_order,hopper_level,auto_dial_level,local_call_time,lead_filter_id,use_internal_dnc,dial_method,available_only_ratio_tally,adaptive_dropped_percentage,adaptive_maximum_level,dial_statuses,list_order_mix,use_campaign_dnc,drop_lockout_time,no_hopper_dialing,auto_alt_dial_statuses,dial_timeout,auto_hopper_multi,use_auto_hopper,auto_trim_hopper,lead_order_randomize,lead_order_secondary,call_count_limit,hopper_vlc_dup_check from vicidial_campaigns where campaign_id IN('$CLIcampaign');";
} }
else else
{ {
@@ -5,20 +5,31 @@ We have received many inquiries from clients about the impending FCC deadline of
First, here is a good summary of what the changes are, and what the definition of terms are: First, here is a good summary of what the changes are, and what the definition of terms are:
http://www.copilevitz-canter.com/resources/articles/upcoming-fcc-rule-changes-regarding-express-consent-to-call-cell-phones http://www.copilevitz-canter.com/resources/articles/upcoming-fcc-rule-changes-regarding-express-consent-to-call-cell-phones
Now time for a disclaimer. I am not a lawyer, and this document was not written by a lawyer. If you want legal advice on this topic, I strongly suggest discussing it with a telecommunications lawyer.
In summary, the new regulations ban any calls to cellphones in the USA by "automatic telephone dialing systems"(or ATDS) unless you have specifically received explicit written or audio recorded permission from the person(or spouse of the person) you are calling that you are allowed to call them on their cell phone through an auto-dialer. The vague definition of ATDS that the FCC uses is, In summary, the new regulations ban any calls to cellphones in the USA by "automatic telephone dialing systems"(or ATDS) unless you have specifically received explicit written or audio recorded permission from the person(or spouse of the person) you are calling that you are allowed to call them on their cell phone through an auto-dialer. The vague definition of ATDS that the FCC uses is,
"equipment which has the capacity "equipment which has the capacity
(A) to store or produce telephone numbers to be called, using a random or sequential number generator; (A) to store or produce telephone numbers to be called, using a random or sequential number generator;
and and
(B) to dial such numbers". (B) to dial such numbers".
This is such a broad definition that even a modern smartphone fits it's definition. But, the FCC also has said more recently that the basic function of an ATDS is “the capacity to dial numbers without human intervention”, which should pretty much exclude smartphones, as well as dialing systems where human intervention would be necessary for any calls to be placed, such as auto-dialers.
It is important to mention that this regulatory change has no effect on automated calls to land lines. This is such a broad definition that even a modern smartphone fits it's definition. But, the FCC also has said more recently that the basic function of an ATDS is “the capacity to dial numbers without human intervention”, which should pretty much exclude smartphones, as well as dialing systems where human intervention would be necessary for any calls to be placed, such as auto-dialers. Unfortunately, some recent court rulings have ignored the "human intervention" exclusion, and ruled against companies that were purely click-to-dial calling people because their phone systems had "the capacity to store and dial phone numbers". Under this very strict interpretation of the law, there is virtually no way to call anyone on a cellphone unless you use only a basic analog wired phone.
For our clients that have the strictest interpretation of the regulation change, we have added a programmatic feature that is non-editable in System Settings called "Disable Auto Dial" which is disabled by default. This feature was added on July 11, 2013 and is available in svn/trunk versions 1999 and higher. To enable or disable this feature, you have to issue a MySQL command through the command line mysql interface: It is important to mention that this regulatory change has no effect on automated calls to land line phones, except that it does disallow all pre-recorded robo-calls for marketing purposes unless you have express consent.
$ mysql asterisk For our clients that believe preview dialing, or click-to-dial list dialing, is acceptable, we have added a programmatic option that is non-editable in System Settings called "Disable Auto Dial" which is disabled by default. This feature was added on July 11, 2013 and is available in svn/trunk versions 1999 and higher. To enable or disable this feature, you have to issue a MySQL command through the command line mysql interface:
mysql> UPDATE system_settings SET disable_auto_dial='1';
mysql> quit mysql asterisk
UPDATE system_settings SET disable_auto_dial='1';
UPDATE vicidial_campaigns SET dial_method='INBOUND_MAN' where dial_method NOT IN('MANUAL','RATIO','INBOUND_MAN');
ALTER TABLE vicidial_campaigns MODIFY dial_method ENUM('MANUAL','RATIO','INBOUND_MAN') default 'MANUAL' NOT NULL;
UPDATE vicidial_campaigns SET auto_dial_level='1' where auto_dial_level NOT IN('0','1','1.0');
ALTER TABLE vicidial_campaigns MODIFY auto_dial_level ENUM('0','1','1.0') default '0' NOT NULL;
quit
<you can also optionally remove the adaptive eial methods from the web interface>
find /srv/www/htdocs/vicidial/ -type f -exec sed -i 's/ADAPT_HARD_LIMIT/MANUAL/g' {} +
find /srv/www/htdocs/vicidial/ -type f -exec sed -i 's/ADAPT_AVERAGE/MANUAL/g' {} +
find /srv/www/htdocs/vicidial/ -type f -exec sed -i 's/ADAPT_TAPERED/MANUAL/g' {} +
Once this is done, the system will be incapable of automatically placing outbound calls. This includes dial methods using ADAPT and RATIO in campaigns. If this feature is enabled and you are using those dial methods, you will see this warning on the campaign modification screen: "Auto-dialing has been disabled on this system". If your system has this feature enabled, you should only be using the MANUAL and INBOUND_MAN campaign dial methods. Once this is done, the system will be incapable of automatically placing outbound calls. This includes dial methods using ADAPT and RATIO in campaigns. If this feature is enabled and you are using those dial methods, you will see this warning on the campaign modification screen: "Auto-dialing has been disabled on this system". If your system has this feature enabled, you should only be using the MANUAL and INBOUND_MAN campaign dial methods.
@@ -877,7 +877,8 @@ use_other_campaign_dnc VARCHAR(8) default '',
allow_emails ENUM('Y','N') default 'N', allow_emails ENUM('Y','N') default 'N',
amd_inbound_group VARCHAR(20) default '', amd_inbound_group VARCHAR(20) default '',
amd_callmenu VARCHAR(50) default '', amd_callmenu VARCHAR(50) default '',
survey_wait_sec TINYINT(3) default '10' survey_wait_sec TINYINT(3) default '10',
manual_dial_lead_id ENUM('Y','N') default 'N'
) ENGINE=MyISAM; ) ENGINE=MyISAM;
CREATE TABLE vicidial_lists ( CREATE TABLE vicidial_lists (
@@ -3214,4 +3215,4 @@ UPDATE vicidial_configuration set value='1766' where name='qc_database_version';
UPDATE system_settings set vdc_agent_api_active='1'; UPDATE system_settings set vdc_agent_api_active='1';
UPDATE system_settings SET db_schema_version='1358',db_schema_update_date=NOW(); UPDATE system_settings SET db_schema_version='1359',db_schema_update_date=NOW();
+4
View File
@@ -118,3 +118,7 @@ UPDATE system_settings SET db_schema_version='1357',db_schema_update_date=NOW()
ALTER TABLE system_settings ADD country_code_list_stats ENUM('0','1') default '0'; ALTER TABLE system_settings ADD country_code_list_stats ENUM('0','1') default '0';
UPDATE system_settings SET db_schema_version='1358',db_schema_update_date=NOW() where db_schema_version < 1358; UPDATE system_settings SET db_schema_version='1358',db_schema_update_date=NOW() where db_schema_version < 1358;
ALTER TABLE vicidial_campaigns ADD manual_dial_lead_id ENUM('Y','N') default 'N';
UPDATE system_settings SET db_schema_version='1359',db_schema_update_date=NOW() where db_schema_version < 1359;
@@ -235,6 +235,14 @@ This option, if enabled, will log when a customer is put on hold and taken off h
Country Code List Stats|| Country Code List Stats||
This setting if enabled will show a country code breakdown summary on the list modify screen. Default is 0 for disabled|| This setting if enabled will show a country code breakdown summary on the list modify screen. Default is 0 for disabled||
COUNTRY CODES WITHIN THIS LIST|| COUNTRY CODES WITHIN THIS LIST||
Manual Dial by Lead ID||
This allows the agent in manual dial mode to place a call by lead_id instead of a phone number. Default is N for disabled||
The ViciDial Contact Center Suite is maintained by the||
The ViciDial Contact Center Suite is released under the||
This is the dial plan context that this phone will use to dial out. If you are running a call center and you do not want your agents to be able to dial out outside of the Contact Center applicaiton for example, then you would set this field to a dialplan context that does not exist, something like agent-nodial. default is default||
Update List Owner||
Advanced Lead Management Tools||
Basic Lead Management Tools||
########################## CHANGES TO EXISTING PHRASES IN ADMIN TRANSLATION ########################## CHANGES TO EXISTING PHRASES IN ADMIN TRANSLATION
@@ -244,6 +252,9 @@ COUNTRY CODES WITHIN THIS LIST||
############################################################ CLIENT ############################################################ CLIENT
This agent screen was not opened properly|| This agent screen was not opened properly||
Dial Lead ID||
Agent Form Display Script||
Agent Notes||
########################## CHANGES TO EXISTING PHRASES IN AGENT TRANSLATION ########################## CHANGES TO EXISTING PHRASES IN AGENT TRANSLATION
+14
View File
@@ -1454,6 +1454,20 @@ if ($ACTION == 'manDiaLnextCaLL')
if (strlen($phone_number) > 5) if (strlen($phone_number) > 5)
{$override_dial_number = $phone_number;} {$override_dial_number = $phone_number;}
else
{
##### gather local call time setting from campaign
$stmt="SELECT phone_number FROM vicidial_list where lead_id='$lead_id';";
$rslt=mysql_to_mysqli($stmt, $link);
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'00XXX',$user,$server_ip,$session_name,$one_mysql_log);}
if ($DB) {echo "$stmt\n";}
$lid_chk_ct = mysqli_num_rows($rslt);
if ($lid_chk_ct > 0)
{
$row=mysqli_fetch_row($rslt);
$phone_number = $row[0];
}
}
} }
else else
{ {
+1 -1
View File
@@ -428,7 +428,7 @@ else
echo "<html>\n"; echo "<html>\n";
echo "<head>\n"; echo "<head>\n";
echo "<!-- VERSION: $version BUILD: $build USER: $user server_ip: $server_ip-->\n"; echo "<!-- VERSION: $version BUILD: $build USER: $user server_ip: $server_ip-->\n";
echo "<title>ViciDial Form Display Script"; echo "<title>Agent Form Display Script";
echo "</title>\n"; echo "</title>\n";
echo "<script language=\"JavaScript\" src=\"calendar_db.js\"></script>\n"; echo "<script language=\"JavaScript\" src=\"calendar_db.js\"></script>\n";
+1 -1
View File
@@ -315,7 +315,7 @@ if( (strlen($user)<2) or (strlen($pass)<2) or ($auth==0))
echo "<HTML>\n"; echo "<HTML>\n";
echo "<head>\n"; echo "<head>\n";
echo "<!-- VERSION: $version BUILD: $build USER: $user server_ip: $server_ip-->\n"; echo "<!-- VERSION: $version BUILD: $build USER: $user server_ip: $server_ip-->\n";
echo "<title>ViciDial Notes"; echo "<title>Agent Notes";
echo "</title>\n"; echo "</title>\n";
echo "<script language=\"JavaScript\" src=\"calendar_db.js\"></script>\n"; echo "<script language=\"JavaScript\" src=\"calendar_db.js\"></script>\n";
echo "<link rel=\"stylesheet\" href=\"calendar.css\">\n"; echo "<link rel=\"stylesheet\" href=\"calendar.css\">\n";
+26 -3
View File
@@ -412,10 +412,11 @@
# 130903-1920 - Added security check for browser window name, see launch.php for more information # 130903-1920 - Added security check for browser window name, see launch.php for more information
# 130925-2119 - Fixed span order issue # 130925-2119 - Fixed span order issue
# 131007-1348 - Added mrglock_ig_select_ct options.php setting # 131007-1348 - Added mrglock_ig_select_ct options.php setting
# 131010-2149 - Added option to allow manual dial by lead_id
# #
$version = '2.8-381c'; $version = '2.8-382c';
$build = '131007-1348'; $build = '131010-2149';
$mel=1; # Mysql Error Log enabled = 1 $mel=1; # Mysql Error Log enabled = 1
$mysql_log_count=79; $mysql_log_count=79;
$one_mysql_log=0; $one_mysql_log=0;
@@ -1425,7 +1426,7 @@ else
$HKstatusnames = substr("$HKstatusnames", 0, -1); $HKstatusnames = substr("$HKstatusnames", 0, -1);
##### grab the campaign settings ##### grab the campaign settings
$stmt="SELECT park_ext,park_file_name,web_form_address,allow_closers,auto_dial_level,dial_timeout,dial_prefix,campaign_cid,campaign_vdad_exten,campaign_rec_exten,campaign_recording,campaign_rec_filename,campaign_script,get_call_launch,am_message_exten,xferconf_a_dtmf,xferconf_a_number,xferconf_b_dtmf,xferconf_b_number,alt_number_dialing,scheduled_callbacks,wrapup_seconds,wrapup_message,closer_campaigns,use_internal_dnc,allcalls_delay,omit_phone_code,agent_pause_codes_active,no_hopper_leads_logins,campaign_allow_inbound,manual_dial_list_id,default_xfer_group,xfer_groups,disable_alter_custphone,display_queue_count,manual_dial_filter,agent_clipboard_copy,use_campaign_dnc,three_way_call_cid,dial_method,three_way_dial_prefix,web_form_target,vtiger_screen_login,agent_allow_group_alias,default_group_alias,quick_transfer_button,prepopulate_transfer_preset,view_calls_in_queue,view_calls_in_queue_launch,call_requeue_button,pause_after_each_call,no_hopper_dialing,agent_dial_owner_only,agent_display_dialable_leads,web_form_address_two,agent_select_territories,crm_popup_login,crm_login_address,timer_action,timer_action_message,timer_action_seconds,start_call_url,dispo_call_url,xferconf_c_number,xferconf_d_number,xferconf_e_number,use_custom_cid,scheduled_callbacks_alert,scheduled_callbacks_count,manual_dial_override,blind_monitor_warning,blind_monitor_message,blind_monitor_filename,timer_action_destination,enable_xfer_presets,hide_xfer_number_to_dial,manual_dial_prefix,customer_3way_hangup_logging,customer_3way_hangup_seconds,customer_3way_hangup_action,ivr_park_call,manual_preview_dial,api_manual_dial,manual_dial_call_time_check,my_callback_option,per_call_notes,agent_lead_search,agent_lead_search_method,queuemetrics_phone_environment,auto_pause_precall,auto_pause_precall_code,auto_resume_precall,manual_dial_cid,custom_3way_button_transfer,callback_days_limit,disable_dispo_screen,disable_dispo_status,screen_labels,status_display_fields,pllb_grouping,pllb_grouping_limit,in_group_dial,in_group_dial_select,pause_after_next_call,owner_populate FROM vicidial_campaigns where campaign_id = '$VD_campaign';"; $stmt="SELECT park_ext,park_file_name,web_form_address,allow_closers,auto_dial_level,dial_timeout,dial_prefix,campaign_cid,campaign_vdad_exten,campaign_rec_exten,campaign_recording,campaign_rec_filename,campaign_script,get_call_launch,am_message_exten,xferconf_a_dtmf,xferconf_a_number,xferconf_b_dtmf,xferconf_b_number,alt_number_dialing,scheduled_callbacks,wrapup_seconds,wrapup_message,closer_campaigns,use_internal_dnc,allcalls_delay,omit_phone_code,agent_pause_codes_active,no_hopper_leads_logins,campaign_allow_inbound,manual_dial_list_id,default_xfer_group,xfer_groups,disable_alter_custphone,display_queue_count,manual_dial_filter,agent_clipboard_copy,use_campaign_dnc,three_way_call_cid,dial_method,three_way_dial_prefix,web_form_target,vtiger_screen_login,agent_allow_group_alias,default_group_alias,quick_transfer_button,prepopulate_transfer_preset,view_calls_in_queue,view_calls_in_queue_launch,call_requeue_button,pause_after_each_call,no_hopper_dialing,agent_dial_owner_only,agent_display_dialable_leads,web_form_address_two,agent_select_territories,crm_popup_login,crm_login_address,timer_action,timer_action_message,timer_action_seconds,start_call_url,dispo_call_url,xferconf_c_number,xferconf_d_number,xferconf_e_number,use_custom_cid,scheduled_callbacks_alert,scheduled_callbacks_count,manual_dial_override,blind_monitor_warning,blind_monitor_message,blind_monitor_filename,timer_action_destination,enable_xfer_presets,hide_xfer_number_to_dial,manual_dial_prefix,customer_3way_hangup_logging,customer_3way_hangup_seconds,customer_3way_hangup_action,ivr_park_call,manual_preview_dial,api_manual_dial,manual_dial_call_time_check,my_callback_option,per_call_notes,agent_lead_search,agent_lead_search_method,queuemetrics_phone_environment,auto_pause_precall,auto_pause_precall_code,auto_resume_precall,manual_dial_cid,custom_3way_button_transfer,callback_days_limit,disable_dispo_screen,disable_dispo_status,screen_labels,status_display_fields,pllb_grouping,pllb_grouping_limit,in_group_dial,in_group_dial_select,pause_after_next_call,owner_populate,manual_dial_lead_id FROM vicidial_campaigns where campaign_id = '$VD_campaign';";
$rslt=mysql_to_mysqli($stmt, $link); $rslt=mysql_to_mysqli($stmt, $link);
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'01013',$VD_login,$server_ip,$session_name,$one_mysql_log);} if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'01013',$VD_login,$server_ip,$session_name,$one_mysql_log);}
if ($DB) {echo "$stmt\n";} if ($DB) {echo "$stmt\n";}
@@ -1535,6 +1536,7 @@ else
$in_group_dial_select = $row[102]; $in_group_dial_select = $row[102];
$pause_after_next_call = $row[103]; $pause_after_next_call = $row[103];
$owner_populate = $row[104]; $owner_populate = $row[104];
$manual_dial_lead_id = $row[105];
if ( ($queuemetrics_pe_phone_append > 0) and (strlen($qm_phone_environment)>0) ) if ( ($queuemetrics_pe_phone_append > 0) and (strlen($qm_phone_environment)>0) )
{$qm_phone_environment .= "-$qm_extension";} {$qm_phone_environment .= "-$qm_extension";}
@@ -6611,6 +6613,7 @@ function set_length(SLnumber,SLlength_goal,SLdirection)
var MDDiaLCodEform = document.vicidial_form.MDDiaLCodE.value; var MDDiaLCodEform = document.vicidial_form.MDDiaLCodE.value;
var MDPhonENumbeRform = document.vicidial_form.MDPhonENumbeR.value; var MDPhonENumbeRform = document.vicidial_form.MDPhonENumbeR.value;
var MDLeadIDform = document.vicidial_form.MDLeadID.value; var MDLeadIDform = document.vicidial_form.MDLeadID.value;
var MDLeadIDEntryform = document.vicidial_form.MDLeadIDEntry.value;
var MDTypeform = document.vicidial_form.MDType.value; var MDTypeform = document.vicidial_form.MDType.value;
var MDDiaLOverridEform = document.vicidial_form.MDDiaLOverridE.value; var MDDiaLOverridEform = document.vicidial_form.MDDiaLOverridE.value;
var MDVendorLeadCode = document.vicidial_form.vendor_lead_code.value; var MDVendorLeadCode = document.vicidial_form.vendor_lead_code.value;
@@ -6624,6 +6627,9 @@ function set_length(SLnumber,SLlength_goal,SLdirection)
if (MDDiaLCodEform.length < 1) if (MDDiaLCodEform.length < 1)
{MDDiaLCodEform = document.vicidial_form.phone_code.value;} {MDDiaLCodEform = document.vicidial_form.phone_code.value;}
if (MDLeadIDEntryform.length > 0)
{MDLeadIDform = document.vicidial_form.MDLeadIDEntry.value;}
if ( (MDDiaLOverridEform.length > 0) && (active_ingroup_dial.length < 1) ) if ( (MDDiaLOverridEform.length > 0) && (active_ingroup_dial.length < 1) )
{ {
agent_dialed_number=1; agent_dialed_number=1;
@@ -6665,6 +6671,7 @@ function set_length(SLnumber,SLlength_goal,SLdirection)
document.vicidial_form.MDPhonENumbeR.value = ''; document.vicidial_form.MDPhonENumbeR.value = '';
document.vicidial_form.MDDiaLOverridE.value = ''; document.vicidial_form.MDDiaLOverridE.value = '';
document.vicidial_form.MDLeadID.value = ''; document.vicidial_form.MDLeadID.value = '';
document.vicidial_form.MDLeadIDEntry.value='';
document.vicidial_form.MDType.value = ''; document.vicidial_form.MDType.value = '';
document.vicidial_form.MDPhonENumbeRHiddeN.value = ''; document.vicidial_form.MDPhonENumbeRHiddeN.value = '';
} }
@@ -10540,6 +10547,7 @@ function set_length(SLnumber,SLlength_goal,SLdirection)
document.vicidial_form.MDPhonENumbeR.value = ''; document.vicidial_form.MDPhonENumbeR.value = '';
document.vicidial_form.MDDiaLOverridE.value = ''; document.vicidial_form.MDDiaLOverridE.value = '';
document.vicidial_form.MDLeadID.value = ''; document.vicidial_form.MDLeadID.value = '';
document.vicidial_form.MDLeadIDEntry.value='';
document.vicidial_form.MDType.value = ''; document.vicidial_form.MDType.value = '';
document.vicidial_form.MDPhonENumbeRHiddeN.value = ''; document.vicidial_form.MDPhonENumbeRHiddeN.value = '';
inbound_lead_search=0; inbound_lead_search=0;
@@ -12796,6 +12804,7 @@ function phone_number_format(formatphone) {
document.vicidial_form.MDPhonENumbeR.value = ''; document.vicidial_form.MDPhonENumbeR.value = '';
document.vicidial_form.MDDiaLOverridE.value = ''; document.vicidial_form.MDDiaLOverridE.value = '';
document.vicidial_form.MDLeadID.value = ''; document.vicidial_form.MDLeadID.value = '';
document.vicidial_form.MDLeadIDEntry.value='';
document.vicidial_form.MDType.value = ''; document.vicidial_form.MDType.value = '';
document.vicidial_form.MDPhonENumbeRHiddeN.value = ''; document.vicidial_form.MDPhonENumbeRHiddeN.value = '';
} }
@@ -15217,6 +15226,20 @@ class="cust_form_text" value=""></TEXTAREA><input type="hidden" class="cust_form
<input type="hidden" name="MDPhonENumbeRHiddeN" id="MDPhonENumbeRHiddeN" value="" /> <input type="hidden" name="MDPhonENumbeRHiddeN" id="MDPhonENumbeRHiddeN" value="" />
<input type="hidden" name="MDLeadID" id="MDLeadID" value="" /> <input type="hidden" name="MDLeadID" id="MDLeadID" value="" />
<input type="hidden" name="MDType" id="MDType" value="" /> <input type="hidden" name="MDType" id="MDType" value="" />
<?php
if ($manual_dial_lead_id=='Y')
{
echo " </td>";
echo " </tr><tr>\n";
echo " <td align=\"right\"><font class=\"body_text\"> Dial Lead ID: </font></td>\n";
echo " <td align=\"left\"><font class=\"body_text\">\n";
echo " <input type=\"text\" size=\"10\" maxlength=\"10\" name=\"MDLeadIDEntry\" id=\"MDLeadIDEntry\" class=\"cust_form\" value=\"\" />&nbsp; (digits only)</font>\n";
}
else
{
echo "<input type=\"hidden\" name=\"MDLeadIDEntry\" id=\"MDLeadIDEntry\" value=\"\" />\n";
}
?>
</td> </td>
</tr><tr> </tr><tr>
<td align="right"><font class="body_text"> Search Existing Leads: </font></td> <td align="right"><font class="body_text"> Search Existing Leads: </font></td>
@@ -37,6 +37,7 @@
# 130704-0935 - Fixed issue #675 # 130704-0935 - Fixed issue #675
# 130829-2012 - Changed to mysqli PHP functions # 130829-2012 - Changed to mysqli PHP functions
# 131002-2015 - Added user group to report output # 131002-2015 - Added user group to report output
# 131010-1930 - Expanded user group column, added most recent user group
# #
$startMS = microtime(); $startMS = microtime();
@@ -55,6 +56,8 @@ if (isset($_GET["group"])) {$group=$_GET["group"];}
elseif (isset($_POST["group"])) {$group=$_POST["group"];} elseif (isset($_POST["group"])) {$group=$_POST["group"];}
if (isset($_GET["user_group"])) {$user_group=$_GET["user_group"];} if (isset($_GET["user_group"])) {$user_group=$_GET["user_group"];}
elseif (isset($_POST["user_group"])) {$user_group=$_POST["user_group"];} elseif (isset($_POST["user_group"])) {$user_group=$_POST["user_group"];}
if (isset($_GET["users"])) {$users=$_GET["users"];}
elseif (isset($_POST["users"])) {$users=$_POST["users"];}
if (isset($_GET["shift"])) {$shift=$_GET["shift"];} if (isset($_GET["shift"])) {$shift=$_GET["shift"];}
elseif (isset($_POST["shift"])) {$shift=$_POST["shift"];} elseif (isset($_POST["shift"])) {$shift=$_POST["shift"];}
if (isset($_GET["stage"])) {$stage=$_GET["stage"];} if (isset($_GET["stage"])) {$stage=$_GET["stage"];}
@@ -257,6 +260,15 @@ while($i < $group_ct)
$i++; $i++;
} }
$i=0;
$users_string='|';
$users_ct = count($users);
while($i < $users_ct)
{
$users_string .= "$users[$i]|";
$i++;
}
$stmt="select campaign_id from vicidial_campaigns $whereLOGallowed_campaignsSQL order by campaign_id;"; $stmt="select campaign_id from vicidial_campaigns $whereLOGallowed_campaignsSQL order by campaign_id;";
$rslt=mysql_to_mysqli($stmt, $link); $rslt=mysql_to_mysqli($stmt, $link);
if ($DB) {$HTML_text.="$stmt\n";} if ($DB) {$HTML_text.="$stmt\n";}
@@ -288,6 +300,21 @@ while ($i < $user_groups_to_print)
$i++; $i++;
} }
$stmt="select user, full_name from vicidial_users $whereLOGadmin_viewable_groupsSQL order by user";
$rslt=mysql_to_mysqli($stmt, $link);
if ($DB) {$HTML_text.="$stmt\n";}
$users_to_print = mysqli_num_rows($rslt);
$i=0;
while ($i < $users_to_print)
{
$row=mysqli_fetch_row($rslt);
$users[$i]=$row[0];
$user_names[$i]=$row[1];
if ($all_users) {$user[$i]=$row[0];}
$i++;
}
$i=0; $i=0;
$group_string='|'; $group_string='|';
$group_ct = count($group); $group_ct = count($group);
@@ -324,9 +351,12 @@ if ( (preg_match('/\-\-ALL\-\-/',$user_group_string) ) or ($user_group_ct < 1) )
else else
{ {
$user_group_SQL = preg_replace('/,$/i', '',$user_group_SQL); $user_group_SQL = preg_replace('/,$/i', '',$user_group_SQL);
$user_group_SQL = "and vicidial_agent_log.user_group IN($user_group_SQL)"; $user_group_agent_log_SQL = "and vicidial_agent_log.user_group IN($user_group_SQL)";
$user_group_SQL = "and vicidial_users.user_group IN($user_group_SQL)";
} }
if ($DB) {$HTML_text.="$user_group_string|$user_group_ct|$user_groupQS|$i<BR>";} if ($DB) {$HTML_text.="$user_group_string|$user_group_ct|$user_groupQS|$i<BR>";}
$LINKbase = "$PHP_SELF?query_date=$query_date&end_date=$end_date$groupQS$user_groupQS&shift=$shift&DB=$DB"; $LINKbase = "$PHP_SELF?query_date=$query_date&end_date=$end_date$groupQS$user_groupQS&shift=$shift&DB=$DB";
@@ -421,6 +451,21 @@ while ($user_groups_to_print > $o)
$o++; $o++;
} }
$HTML_text.="</SELECT>\n"; $HTML_text.="</SELECT>\n";
$HTML_text.="</TD><TD VALIGN=TOP>Users: <BR>";
$HTML_text.="<SELECT SIZE=5 NAME=users[] multiple>\n";
if (preg_match('/\-\-ALL\-\-/',$users_string))
{$HTML_text.="<option value=\"--ALL--\" selected>-- ALL USERS --</option>\n";}
else
{$HTML_text.="<option value=\"--ALL--\">-- ALL USERS --</option>\n";}
$o=0;
while ($users_to_print > $o)
{
if (preg_match("/$users[$o]\|/i",$users_string)) {$HTML_text.="<option selected value=\"$users[$o]\">$users[$o] - $user_names[$o]</option>\n";}
else {$HTML_text.="<option value=\"$users[$o]\">$users[$o] - $user_names[$o]</option>\n";}
$o++;
}
$HTML_text.="</SELECT>\n";
$HTML_text.="</TD><TD VALIGN=TOP>Shift:<BR>"; $HTML_text.="</TD><TD VALIGN=TOP>Shift:<BR>";
$HTML_text.="<SELECT SIZE=1 NAME=shift>\n"; $HTML_text.="<SELECT SIZE=1 NAME=shift>\n";
$HTML_text.="<option selected value=\"$shift\">$shift</option>\n"; $HTML_text.="<option selected value=\"$shift\">$shift</option>\n";
@@ -494,7 +539,7 @@ $statusesHEAD='';
$CSV_header="\"Agent Performance Detail $NOW_TIME\"\n"; $CSV_header="\"Agent Performance Detail $NOW_TIME\"\n";
$CSV_header.="\"Time range: $query_date_BEGIN to $query_date_END\"\n\n"; $CSV_header.="\"Time range: $query_date_BEGIN to $query_date_END\"\n\n";
$CSV_header.="\"---------- AGENTS Details -------------\"\n"; $CSV_header.="\"---------- AGENTS Details -------------\"\n";
$CSV_header.='"USER NAME","ID","USER GROUP","CALLS","TIME","PAUSE","PAUSAVG","WAIT","WAITAVG","TALK","TALKAVG","DISPO","DISPAVG","DEAD","DEADAVG","CUSTOMER","CUSTAVG"'; $CSV_header.='"USER NAME","ID","CURRENT USER GROUP","MOST RECENT USER GROUP","CALLS","TIME","PAUSE","PAUSAVG","WAIT","WAITAVG","TALK","TALKAVG","DISPO","DISPAVG","DEAD","DEADAVG","CUSTOMER","CUSTAVG"';
$statusesHTML=''; $statusesHTML='';
$statusesARY[0]=''; $statusesARY[0]='';
@@ -504,6 +549,13 @@ $usersARY[0]='';
$user_namesARY[0]=''; $user_namesARY[0]='';
$k=0; $k=0;
$recent_UG_stmt="select max(event_time), user, user_group from vicidial_agent_log where event_time <= '$query_date_END' and event_time >= '$query_date_BEGIN' and pause_sec<65000 and wait_sec<65000 and talk_sec<65000 and dispo_sec<65000 $group_SQL $user_group_agent_log_SQL group by user";
if ($DB) {$HTML_text.="$recent_UG_stmt\n";}
$recent_UG_rslt=mysql_to_mysqli($recent_UG_stmt, $link);
while ($UG_row=mysqli_fetch_row($recent_UG_rslt)) {
$recent_user_groups[$UG_row[1]]=$UG_row[2];
}
$stmt="select count(*) as calls,sum(talk_sec) as talk,full_name,vicidial_users.user,sum(pause_sec),sum(wait_sec),sum(dispo_sec),status,sum(dead_sec), vicidial_users.user_group from vicidial_users,vicidial_agent_log where event_time <= '$query_date_END' and event_time >= '$query_date_BEGIN' and vicidial_users.user=vicidial_agent_log.user and pause_sec<65000 and wait_sec<65000 and talk_sec<65000 and dispo_sec<65000 $group_SQL $user_group_SQL group by user,full_name,user_group,status order by full_name,user,status desc limit 500000;"; $stmt="select count(*) as calls,sum(talk_sec) as talk,full_name,vicidial_users.user,sum(pause_sec),sum(wait_sec),sum(dispo_sec),status,sum(dead_sec), vicidial_users.user_group from vicidial_users,vicidial_agent_log where event_time <= '$query_date_END' and event_time >= '$query_date_BEGIN' and vicidial_users.user=vicidial_agent_log.user and pause_sec<65000 and wait_sec<65000 and talk_sec<65000 and dispo_sec<65000 $group_SQL $user_group_SQL group by user,full_name,user_group,status order by full_name,user,status desc limit 500000;";
$rslt=mysql_to_mysqli($stmt, $link); $rslt=mysql_to_mysqli($stmt, $link);
if ($DB) {$HTML_text.="$stmt\n";} if ($DB) {$HTML_text.="$stmt\n";}
@@ -593,9 +645,9 @@ $CSV_header.="\n";
$CSV_lines=''; $CSV_lines='';
$ASCII_text.="CALL STATS BREAKDOWN: (Statistics related to handling of calls only) <a href=\"$LINKbase&stage=$stage&file_download=1\">[DOWNLOAD]</a>\n"; $ASCII_text.="CALL STATS BREAKDOWN: (Statistics related to handling of calls only) <a href=\"$LINKbase&stage=$stage&file_download=1\">[DOWNLOAD]</a>\n";
$ASCII_text.="+-----------------+----------+-----------------+--------+-----------+----------+--------+----------+--------+----------+--------+----------+--------+----------+--------+----------+--------+$statusesHEAD\n"; $ASCII_text.="+-----------------+----------+----------------------+----------------------+--------+-----------+----------+--------+----------+--------+----------+--------+----------+--------+----------+--------+----------+--------+$statusesHEAD\n";
$ASCII_text.="| <a href=\"$LINKbase\">USER NAME</a> | <a href=\"$LINKbase&stage=ID\">ID</a> | USER GROUP | <a href=\"$LINKbase&stage=LEADS\">CALLS</a> | <a href=\"$LINKbase&stage=TIME\">TIME</a> | PAUSE |PAUSAVG | WAIT |WAITAVG | TALK |TALKAVG | DISPO |DISPAVG | DEAD |DEADAVG | CUSTOMER |CUSTAVG |$statusesHTML\n"; $ASCII_text.="| <a href=\"$LINKbase\">USER NAME</a> | <a href=\"$LINKbase&stage=ID\">ID</a> | CURRENT USER GROUP | MOST RECENT USER GRP | <a href=\"$LINKbase&stage=LEADS\">CALLS</a> | <a href=\"$LINKbase&stage=TIME\">TIME</a> | PAUSE |PAUSAVG | WAIT |WAITAVG | TALK |TALKAVG | DISPO |DISPAVG | DEAD |DEADAVG | CUSTOMER |CUSTAVG |$statusesHTML\n";
$ASCII_text.="+-----------------+----------+-----------------+--------+-----------+----------+--------+----------+--------+----------+--------+----------+--------+----------+--------+----------+--------+$statusesHEAD\n"; $ASCII_text.="+-----------------+----------+----------------------+----------------------+--------+-----------+----------+--------+----------+--------+----------+--------+----------+--------+----------+--------+----------+--------+$statusesHEAD\n";
### BEGIN loop through each user ### ### BEGIN loop through each user ###
@@ -603,6 +655,16 @@ $m=0;
while ($m < $k) while ($m < $k)
{ {
$Suser=$usersARY[$m]; $Suser=$usersARY[$m];
$Slast_user_group=$recent_user_groups[$Suser];
$recent_UG_stmt="select max(event_time) as most_recent_event, user_group from vicidial_agent_log where user='$Suser' and event_time <= '$query_date_END' and event_time >= '$query_date_BEGIN' and pause_sec<65000 and wait_sec<65000 and talk_sec<65000 and dispo_sec<65000 $group_SQL $user_group_agent_log_SQL group by user_group order by most_recent_event desc limit 1";
if ($DB) {$HTML_text.="$recent_UG_stmt\n";}
$recent_UG_rslt=mysql_to_mysqli($recent_UG_stmt, $link);
while ($UG_row=mysqli_fetch_row($recent_UG_rslt)) {
$Slast_user_group=$UG_row[1];
$recent_user_groups[$Suser]=$UG_row[1];
}
$Sfull_name=$user_namesARY[$m]; $Sfull_name=$user_namesARY[$m];
$Suser_group=$user_groupsARY[$m]; $Suser_group=$user_groupsARY[$m];
$Stime=0; $Stime=0;
@@ -694,8 +756,10 @@ while ($m < $k)
{ {
$Sfull_name= sprintf("%-15s", $Sfull_name); $Sfull_name= sprintf("%-15s", $Sfull_name);
while(strlen($Sfull_name)>15) {$Sfull_name = substr("$Sfull_name", 0, -1);} while(strlen($Sfull_name)>15) {$Sfull_name = substr("$Sfull_name", 0, -1);}
$Suser_group= sprintf("%-15s", $Suser_group); $Suser_group= sprintf("%-20s", $Suser_group);
while(strlen($Suser_group)>15) {$Suser_group = substr("$Suser_group", 0, -1);} while(strlen($Suser_group)>20) {$Suser_group = substr("$Suser_group", 0, -1);}
$Slast_user_group= sprintf("%-20s", $Slast_user_group);
while(strlen($Slast_user_group)>20) {$Slast_user_group = substr("$Slast_user_group", 0, -1);}
$Suser = sprintf("%-8s", $Suser); $Suser = sprintf("%-8s", $Suser);
while(strlen($Suser)>8) {$Suser = substr("$Suser", 0, -1);} while(strlen($Suser)>8) {$Suser = substr("$Suser", 0, -1);}
} }
@@ -768,11 +832,11 @@ while ($m < $k)
$pfUSERavgCUSTOMER_MS = sprintf("%6s", $USERavgCUSTOMER_MS); $pfUSERavgCUSTOMER_MS = sprintf("%6s", $USERavgCUSTOMER_MS);
$PAUSEtotal[$m] = $pfUSERtotPAUSE_MS; $PAUSEtotal[$m] = $pfUSERtotPAUSE_MS;
$Toutput = "| $Sfull_name | <a href=\"./user_stats.php?user=$RAWuser\">$Suser</a> | $Suser_group | $Scalls | $pfUSERtime_MS | $pfUSERtotPAUSE_MS | $pfUSERavgPAUSE_MS | $pfUSERtotWAIT_MS | $pfUSERavgWAIT_MS | $pfUSERtotTALK_MS | $pfUSERavgTALK_MS | $pfUSERtotDISPO_MS | $pfUSERavgDISPO_MS | $pfUSERtotDEAD_MS | $pfUSERavgDEAD_MS | $pfUSERtotCUSTOMER_MS | $pfUSERavgCUSTOMER_MS |$SstatusesHTML\n"; $Toutput = "| $Sfull_name | <a href=\"./user_stats.php?user=$RAWuser\">$Suser</a> | $Suser_group | $Slast_user_group | $Scalls | $pfUSERtime_MS | $pfUSERtotPAUSE_MS | $pfUSERavgPAUSE_MS | $pfUSERtotWAIT_MS | $pfUSERavgWAIT_MS | $pfUSERtotTALK_MS | $pfUSERavgTALK_MS | $pfUSERtotDISPO_MS | $pfUSERavgDISPO_MS | $pfUSERtotDEAD_MS | $pfUSERavgDEAD_MS | $pfUSERtotCUSTOMER_MS | $pfUSERavgCUSTOMER_MS |$SstatusesHTML\n";
$CSV_lines.="\"$Sfull_nameRAW\","; $CSV_lines.="\"$Sfull_nameRAW\",";
$CSV_lines.=preg_replace('/\s/', '', "\"$SuserRAW\",\"$Suser_group\",\"$Scalls\",\"$pfUSERtime_MS\",\"$pfUSERtotPAUSE_MS\",\"$pfUSERavgPAUSE_MS\",\"$pfUSERtotWAIT_MS\",\"$pfUSERavgWAIT_MS\",\"$pfUSERtotTALK_MS\",\"$pfUSERavgTALK_MS\",\"$pfUSERtotDISPO_MS\",\"$pfUSERavgDISPO_MS\",\"$pfUSERtotDEAD_MS\",\"$pfUSERavgDEAD_MS\",\"$pfUSERtotCUSTOMER_MS\",\"$pfUSERavgCUSTOMER_MS\"$CSVstatuses"); $CSV_lines.=preg_replace('/\s/', '', "\"$SuserRAW\",\"$Suser_group\",\"$Slast_user_group\",\"$Scalls\",\"$pfUSERtime_MS\",\"$pfUSERtotPAUSE_MS\",\"$pfUSERavgPAUSE_MS\",\"$pfUSERtotWAIT_MS\",\"$pfUSERavgWAIT_MS\",\"$pfUSERtotTALK_MS\",\"$pfUSERavgTALK_MS\",\"$pfUSERtotDISPO_MS\",\"$pfUSERavgDISPO_MS\",\"$pfUSERtotDEAD_MS\",\"$pfUSERavgDEAD_MS\",\"$pfUSERtotCUSTOMER_MS\",\"$pfUSERavgCUSTOMER_MS\"$CSVstatuses");
$CSV_lines.="\n"; $CSV_lines.="\n";
$TOPsorted_output[$m] = $Toutput; $TOPsorted_output[$m] = $Toutput;
@@ -912,9 +976,9 @@ while(strlen($TOTavgWAIT_MS)>6) {$TOTavgWAIT_MS = substr("$TOTavgWAIT_MS", 0, -1
while(strlen($TOTavgCUSTOMER_MS)>6) {$TOTavgCUSTOMER_MS = substr("$TOTavgCUSTOMER_MS", 0, -1);} while(strlen($TOTavgCUSTOMER_MS)>6) {$TOTavgCUSTOMER_MS = substr("$TOTavgCUSTOMER_MS", 0, -1);}
$ASCII_text.="+-----------------+----------+-----------------+--------+-----------+----------+--------+----------+--------+----------+--------+----------+--------+----------+--------+----------+--------+$statusesHEAD\n"; $ASCII_text.="+-----------------+----------+----------------------+----------------------+--------+-----------+----------+--------+----------+--------+----------+--------+----------+--------+----------+--------+----------+--------+$statusesHEAD\n";
$ASCII_text.="| TOTALS AGENTS:$TOT_AGENTS | $TOTcalls| $TOTtime_MS|$TOTtotPAUSE_MS| $TOTavgPAUSE_MS |$TOTtotWAIT_MS| $TOTavgWAIT_MS |$TOTtotTALK_MS| $TOTavgTALK_MS |$TOTtotDISPO_MS| $TOTavgDISPO_MS |$TOTtotDEAD_MS| $TOTavgDEAD_MS |$TOTtotCUSTOMER_MS| $TOTavgCUSTOMER_MS |$SUMstatusesHTML\n"; $ASCII_text.="| TOTALS AGENTS:$TOT_AGENTS | $TOTcalls| $TOTtime_MS|$TOTtotPAUSE_MS| $TOTavgPAUSE_MS |$TOTtotWAIT_MS| $TOTavgWAIT_MS |$TOTtotTALK_MS| $TOTavgTALK_MS |$TOTtotDISPO_MS| $TOTavgDISPO_MS |$TOTtotDEAD_MS| $TOTavgDEAD_MS |$TOTtotCUSTOMER_MS| $TOTavgCUSTOMER_MS |$SUMstatusesHTML\n";
$ASCII_text.="+-----------------+----------+-----------------+--------+-----------+----------+--------+----------+--------+----------+--------+----------+--------+----------+--------+----------+--------+$statusesHEAD\n"; $ASCII_text.="+-----------------+----------+----------------------+----------------------+--------+-----------+----------+--------+----------+--------+----------+--------+----------+--------+----------+--------+----------+--------+$statusesHEAD\n";
for ($e=0; $e<count($statusesARY); $e++) { for ($e=0; $e<count($statusesARY); $e++) {
@@ -1013,7 +1077,7 @@ $GRAPH3="<tr><td colspan='".(14+count($statusesARY))."' class='graph_span_cell'>
$GRAPH_text.=$JS_text.$GRAPH.$GRAPH2.$GRAPH3; $GRAPH_text.=$JS_text.$GRAPH.$GRAPH2.$GRAPH3;
$CSV_total=preg_replace('/\s/', '', "\"\",\"TOTALS\",\"AGENTS:$TOT_AGENTS\",\"$TOTcalls\",\"$TOTtime_MS\",\"$TOTtotPAUSE_MS\",\"$TOTavgPAUSE_MS\",\"$TOTtotWAIT_MS\",\"$TOTavgWAIT_MS\",\"$TOTtotTALK_MS\",\"$TOTavgTALK_MS\",\"$TOTtotDISPO_MS\",\"$TOTavgDISPO_MS\",\"$TOTtotDEAD_MS\",\"$TOTavgDEAD_MS\",\"$TOTtotCUSTOMER_MS\",\"$TOTavgCUSTOMER_MS\"$CSVSUMstatuses"); $CSV_total=preg_replace('/\s/', '', "\"\",\"\",\"TOTALS\",\"AGENTS:$TOT_AGENTS\",\"$TOTcalls\",\"$TOTtime_MS\",\"$TOTtotPAUSE_MS\",\"$TOTavgPAUSE_MS\",\"$TOTtotWAIT_MS\",\"$TOTavgWAIT_MS\",\"$TOTtotTALK_MS\",\"$TOTavgTALK_MS\",\"$TOTtotDISPO_MS\",\"$TOTavgDISPO_MS\",\"$TOTtotDEAD_MS\",\"$TOTavgDEAD_MS\",\"$TOTtotCUSTOMER_MS\",\"$TOTavgCUSTOMER_MS\"$CSVSUMstatuses");
if ($file_download == 1) if ($file_download == 1)
{ {
@@ -1131,14 +1195,14 @@ while ($i < $subs_to_print)
} }
$ASCII_text.="PAUSE CODE BREAKDOWN: <a href=\"$LINKbase&stage=$stage&file_download=2\">[DOWNLOAD]</a>\n\n"; $ASCII_text.="PAUSE CODE BREAKDOWN: <a href=\"$LINKbase&stage=$stage&file_download=2\">[DOWNLOAD]</a>\n\n";
$ASCII_text.="+-----------------+----------+-----------------+----------+----------+----------+ +$sub_statusesHEAD\n"; $ASCII_text.="+-----------------+----------+----------------------+----------------------+----------+----------+----------+ +$sub_statusesHEAD\n";
$ASCII_text.="| USER NAME | ID | USER GROUP | TOTAL | NONPAUSE | PAUSE | |$sub_statusesHTML\n"; $ASCII_text.="| USER NAME | ID | CURRENT USER GROUP | MOST RECENT USER GRP | TOTAL | NONPAUSE | PAUSE | |$sub_statusesHTML\n";
$ASCII_text.="+-----------------+----------+-----------------+----------+----------+----------+ +$sub_statusesHEAD\n"; $ASCII_text.="+-----------------+----------+----------------------+----------------------+----------+----------+----------+ +$sub_statusesHEAD\n";
$CSV_header="\"Agent Performance Detail $NOW_TIME\"\n"; $CSV_header="\"Agent Performance Detail $NOW_TIME\"\n";
$CSV_header.="\"Time range: $query_date_BEGIN to $query_date_END\"\n\n"; $CSV_header.="\"Time range: $query_date_BEGIN to $query_date_END\"\n\n";
$CSV_header.="\"PAUSE CODE BREAKDOWN:\"\n"; $CSV_header.="\"PAUSE CODE BREAKDOWN:\"\n";
$CSV_header.="\"USER NAME\",\"ID\",\"USER GROUP\",\"TOTAL\",\"NONPAUSE\",\"PAUSE\",$CSV_statuses\n"; $CSV_header.="\"USER NAME\",\"ID\",\"CURRENT USER GROUP\",\"MOST RECENT USER GROUP\",\"TOTAL\",\"NONPAUSE\",\"PAUSE\",$CSV_statuses\n";
### BEGIN loop through each user ### ### BEGIN loop through each user ###
$m=0; $m=0;
@@ -1159,6 +1223,7 @@ while ($m < $k)
$Suser=$PCusersARY[$m]; $Suser=$PCusersARY[$m];
$Sfull_name=$PCuser_namesARY[$m]; $Sfull_name=$PCuser_namesARY[$m];
$Suser_group=$PCuser_groupsARY[$m]; $Suser_group=$PCuser_groupsARY[$m];
$Slast_user_group=$recent_user_groups[$Suser];
$Spause_sec=0; $Spause_sec=0;
$Snon_pause_sec=0; $Snon_pause_sec=0;
$Stotal_sec=0; $Stotal_sec=0;
@@ -1217,8 +1282,10 @@ while ($m < $k)
{ {
$Sfull_name= sprintf("%-15s", $Sfull_name); $Sfull_name= sprintf("%-15s", $Sfull_name);
while(strlen($Sfull_name)>15) {$Sfull_name = substr("$Sfull_name", 0, -1);} while(strlen($Sfull_name)>15) {$Sfull_name = substr("$Sfull_name", 0, -1);}
$Suser_group= sprintf("%-15s", $Suser_group); $Suser_group= sprintf("%-20s", $Suser_group);
while(strlen($Suser_group)>15) {$Suser_group = substr("$Suser_group", 0, -1);} while(strlen($Suser_group)>20) {$Suser_group = substr("$Suser_group", 0, -1);}
$Slast_user_group= sprintf("%-20s", $Slast_user_group);
while(strlen($Slast_user_group)>20) {$Slast_user_group = substr("$Slast_user_group", 0, -1);}
$Suser = sprintf("%-8s", $Suser); $Suser = sprintf("%-8s", $Suser);
while(strlen($Suser)>8) {$Suser = substr("$Suser", 0, -1);} while(strlen($Suser)>8) {$Suser = substr("$Suser", 0, -1);}
} }
@@ -1250,12 +1317,12 @@ while ($m < $k)
$pfUSERtotNONPAUSE_MS = sprintf("%8s", $USERtotNONPAUSE_MS); $pfUSERtotNONPAUSE_MS = sprintf("%8s", $USERtotNONPAUSE_MS);
$pfUSERtotTOTAL_MS = sprintf("%8s", $USERtotTOTAL_MS); $pfUSERtotTOTAL_MS = sprintf("%8s", $USERtotTOTAL_MS);
$BOTTOMoutput = "| $Sfull_name | $Suser | $Suser_group | $pfUSERtotTOTAL_MS | $pfUSERtotNONPAUSE_MS | $pfUSERtotPAUSE_MS | |$SstatusesHTML\n"; $BOTTOMoutput = "| $Sfull_name | $Suser | $Suser_group | $Slast_user_group | $pfUSERtotTOTAL_MS | $pfUSERtotNONPAUSE_MS | $pfUSERtotPAUSE_MS | |$SstatusesHTML\n";
$BOTTOMsorted_output[$m] = $BOTTOMoutput; $BOTTOMsorted_output[$m] = $BOTTOMoutput;
$ASCII_text.="$BOTTOMoutput"; $ASCII_text.="$BOTTOMoutput";
$CSV_lines.="\"$Sfull_nameRAW\"".preg_replace('/\s/', '', ",\"$SuserRAW\",\"$Suser_group\",\"$pfUSERtotTOTAL_MS\",\"$pfUSERtotNONPAUSE_MS\",\"$pfUSERtotPAUSE_MS\",$CSV_statuses"); $CSV_lines.="\"$Sfull_nameRAW\"".preg_replace('/\s/', '', ",\"$SuserRAW\",\"$Suser_group\",\"$Slast_user_group\",\"$pfUSERtotTOTAL_MS\",\"$pfUSERtotNONPAUSE_MS\",\"$pfUSERtotPAUSE_MS\",$CSV_statuses");
$CSV_lines.="\n"; $CSV_lines.="\n";
$m++; $m++;
} }
@@ -1338,9 +1405,9 @@ while ($n < $j)
while(strlen($TOTtotTOTAL_MS)>10) {$TOTtotTOTAL_MS = substr("$TOTtotTOTAL_MS", 0, -1);} while(strlen($TOTtotTOTAL_MS)>10) {$TOTtotTOTAL_MS = substr("$TOTtotTOTAL_MS", 0, -1);}
$ASCII_text.="+-----------------+----------+-----------------+----------+----------+----------+ +$sub_statusesHEAD\n"; $ASCII_text.="+-----------------+----------+----------------------+----------------------+----------+----------+----------+ +$sub_statusesHEAD\n";
$ASCII_text.="| TOTALS AGENTS:$TOT_AGENTS |$TOTtotTOTAL_MS|$TOTtotNONPAUSE_MS|$TOTtotPAUSE_MS| |$SUMstatusesHTML\n"; $ASCII_text.="| TOTALS AGENTS:$TOT_AGENTS |$TOTtotTOTAL_MS|$TOTtotNONPAUSE_MS|$TOTtotPAUSE_MS| |$SUMstatusesHTML\n";
$ASCII_text.="+----------------------------------------------+----------+----------+----------+ +$sub_statusesHEAD\n"; $ASCII_text.="+-----------------+----------+----------------------+----------------------+----------+----------+----------+ +$sub_statusesHEAD\n";
for ($e=0; $e<count($sub_statusesARY); $e++) { for ($e=0; $e<count($sub_statusesARY); $e++) {
$Sstatus=$sub_statusesARY[$e]; $Sstatus=$sub_statusesARY[$e];
@@ -1405,7 +1472,7 @@ $GRAPH_text.=$JS_text.$GRAPH.$GRAPH2.$GRAPH3.$max;
$CSV_total=preg_replace('/\s/', '', "\"\",\"TOTALS\",\"AGENTS:$TOT_AGENTS\",\"$TOTtotTOTAL_MS\",\"$TOTtotNONPAUSE_MS\",\"$TOTtotPAUSE_MS\",$CSVSUMstatuses"); $CSV_total=preg_replace('/\s/', '', "\"\",\"\",\"TOTALS\",\"AGENTS:$TOT_AGENTS\",\"$TOTtotTOTAL_MS\",\"$TOTtotNONPAUSE_MS\",\"$TOTtotPAUSE_MS\",$CSVSUMstatuses");
if ($file_download == 2) if ($file_download == 2)
{ {
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
@@ -221,7 +221,7 @@ if ($action == "HELP")
<A NAME="phone_context"> <A NAME="phone_context">
<BR> <BR>
<B>Phone Context -</B> This is the dial plan context that this phone will use to dial out. If you are running a call center and you do not want your agents to be able to dial out outside of the ViciDial applicaiton for example, then you would set this field to a dialplan context that does not exist, something like agent-nodial. default is default. <B>Phone Context -</B> This is the dial plan context that this phone will use to dial out. If you are running a call center and you do not want your agents to be able to dial out outside of the Contact Center applicaiton for example, then you would set this field to a dialplan context that does not exist, something like agent-nodial. default is default.
<BR><BR> <BR><BR>
<BR> <BR>
+4 -3
View File
@@ -10,10 +10,11 @@
# 130610-1045 - Finalized changing of all ereg instances to preg # 130610-1045 - Finalized changing of all ereg instances to preg
# 130619-2203 - Added filtering of input to prevent SQL injection attacks and new user auth # 130619-2203 - Added filtering of input to prevent SQL injection attacks and new user auth
# 130901-1927 - Changed to mysqli PHP functions # 130901-1927 - Changed to mysqli PHP functions
# 131016-2029 - Added links to advanced lead tools
# #
$version = '2.8-6'; $version = '2.8-7';
$build = '130901-1927'; $build = '131016-2029';
# This limit is to prevent data inconsistancies. # This limit is to prevent data inconsistancies.
# If there are too many leads in a list this # If there are too many leads in a list this
@@ -184,7 +185,7 @@ echo "<table width=$page_width bgcolor=#E6E6E6 cellpadding=2 cellspacing=0>\n";
echo "<tr bgcolor='#E6E6E6'>\n"; echo "<tr bgcolor='#E6E6E6'>\n";
echo "<td align=left>\n"; echo "<td align=left>\n";
echo "<font face='ARIAL,HELVETICA' size=2>\n"; echo "<font face='ARIAL,HELVETICA' size=2>\n";
echo "<b> &nbsp; Lead Tools</b>\n"; echo "<b> &nbsp; Basic Lead Tools &nbsp; | &nbsp; <a href=\"lead_tools_advanced.php\">Advanced Lead Tools</a></b>\n";
echo "</font>\n"; echo "</font>\n";
echo "</td>\n"; echo "</td>\n";
echo "<td align=right><font face='ARIAL,HELVETICA' size=2><b> &nbsp; </td>\n"; echo "<td align=right><font face='ARIAL,HELVETICA' size=2><b> &nbsp; </td>\n";
File diff suppressed because it is too large Load Diff
+14 -1
View File
@@ -41,6 +41,7 @@
# 130616-0059 - Added filtering of input to prevent SQL injection attacks and new user auth # 130616-0059 - Added filtering of input to prevent SQL injection attacks and new user auth
# 130625-1341 - Added phone login and phone_ip display to login/logout section # 130625-1341 - Added phone login and phone_ip display to login/logout section
# 130901-0836 - Changed to mysqli PHP functions # 130901-0836 - Changed to mysqli PHP functions
# 131016-2102 - Added checking for level 8 add-copy restriction
# #
$startMS = microtime(); $startMS = microtime();
@@ -52,6 +53,7 @@ $report_name = 'User Stats';
$db_source = 'M'; $db_source = 'M';
$firstlastname_display_user_stats=0; $firstlastname_display_user_stats=0;
$add_copy_disabled=0;
if (file_exists('options.php')) if (file_exists('options.php'))
{ {
require('options.php'); require('options.php');
@@ -81,7 +83,7 @@ if (isset($_GET["file_download"])) {$file_download=$_GET["file_download"];}
############################################# #############################################
##### START SYSTEM_SETTINGS LOOKUP ##### ##### START SYSTEM_SETTINGS LOOKUP #####
$stmt = "SELECT use_non_latin,outbound_autodial_active,slave_db_server,reports_use_slave_db,user_territories_active,webroot_writable,allow_emails FROM system_settings;"; $stmt = "SELECT use_non_latin,outbound_autodial_active,slave_db_server,reports_use_slave_db,user_territories_active,webroot_writable,allow_emails,level_8_disable_add FROM system_settings;";
$rslt=mysql_to_mysqli($stmt, $link); $rslt=mysql_to_mysqli($stmt, $link);
if ($DB) {$MAIN.="$stmt\n";} if ($DB) {$MAIN.="$stmt\n";}
$qm_conf_ct = mysqli_num_rows($rslt); $qm_conf_ct = mysqli_num_rows($rslt);
@@ -95,6 +97,7 @@ if ($qm_conf_ct > 0)
$user_territories_active = $row[4]; $user_territories_active = $row[4];
$webroot_writable = $row[5]; $webroot_writable = $row[5];
$allow_emails = $row[6]; $allow_emails = $row[6];
$SSlevel_8_disable_add = $row[7];
} }
##### END SETTINGS LOOKUP ##### ##### END SETTINGS LOOKUP #####
########################################### ###########################################
@@ -171,6 +174,16 @@ else
exit; exit;
} }
$stmt="SELECT user_level from vicidial_users where user='$PHP_AUTH_USER';";
$rslt=mysql_to_mysqli($stmt, $link);
$row=mysqli_fetch_row($rslt);
$LOGuser_level =$row[0];
if (($LOGuser_level < 9) and ($SSlevel_8_disable_add > 0))
{$add_copy_disabled++;}
$date = date("r"); $date = date("r");
$ip = getenv("REMOTE_ADDR"); $ip = getenv("REMOTE_ADDR");
$browser = getenv("HTTP_USER_AGENT"); $browser = getenv("HTTP_USER_AGENT");
+15 -1
View File
@@ -24,6 +24,7 @@
# 130610-0937 - Finalized changing of all ereg instances to preg # 130610-0937 - Finalized changing of all ereg instances to preg
# 130616-0052 - Added filtering of input to prevent SQL injection attacks and new user auth # 130616-0052 - Added filtering of input to prevent SQL injection attacks and new user auth
# 130901-0835 - Changed to mysqli PHP functions # 130901-0835 - Changed to mysqli PHP functions
# 131016-2101 - Added checking for level 8 add-copy restriction
# #
$startMS = microtime(); $startMS = microtime();
@@ -32,6 +33,8 @@ header ("Content-type: text/html; charset=utf-8");
$report_name='User Status'; $report_name='User Status';
$add_copy_disabled=0;
require("dbconnect_mysqli.php"); require("dbconnect_mysqli.php");
require("functions.php"); require("functions.php");
@@ -57,7 +60,7 @@ if (isset($_GET["SUBMIT"])) {$SUBMIT=$_GET["SUBMIT"];}
############################################# #############################################
##### START SYSTEM_SETTINGS LOOKUP ##### ##### START SYSTEM_SETTINGS LOOKUP #####
$stmt = "SELECT use_non_latin,webroot_writable,outbound_autodial_active,user_territories_active FROM system_settings;"; $stmt = "SELECT use_non_latin,webroot_writable,outbound_autodial_active,user_territories_active,level_8_disable_add FROM system_settings;";
$rslt=mysql_to_mysqli($stmt, $link); $rslt=mysql_to_mysqli($stmt, $link);
if ($DB) {echo "$stmt\n";} if ($DB) {echo "$stmt\n";}
$qm_conf_ct = mysqli_num_rows($rslt); $qm_conf_ct = mysqli_num_rows($rslt);
@@ -68,6 +71,7 @@ if ($qm_conf_ct > 0)
$webroot_writable = $row[1]; $webroot_writable = $row[1];
$SSoutbound_autodial_active = $row[2]; $SSoutbound_autodial_active = $row[2];
$user_territories_active = $row[3]; $user_territories_active = $row[3];
$SSlevel_8_disable_add = $row[4];
} }
##### END SETTINGS LOOKUP ##### ##### END SETTINGS LOOKUP #####
########################################### ###########################################
@@ -142,6 +146,16 @@ else
exit; exit;
} }
$stmt="SELECT user_level from vicidial_users where user='$PHP_AUTH_USER';";
$rslt=mysql_to_mysqli($stmt, $link);
$row=mysqli_fetch_row($rslt);
$LOGuser_level =$row[0];
if (($LOGuser_level < 9) and ($SSlevel_8_disable_add > 0))
{$add_copy_disabled++;}
##### BEGIN log visit to the vicidial_report_log table ##### ##### BEGIN log visit to the vicidial_report_log table #####
$LOGip = getenv("REMOTE_ADDR"); $LOGip = getenv("REMOTE_ADDR");
$LOGbrowser = getenv("HTTP_USER_AGENT"); $LOGbrowser = getenv("HTTP_USER_AGENT");
@@ -192,7 +192,7 @@ if ( ($action == "CHANGE_TERRITORY_OWNER_ACCOUNT") and ($enable_vtiger_integrati
echo "$users_list"; echo "$users_list";
echo "</select></td></tr>\n"; echo "</select></td></tr>\n";
echo "<tr bgcolor=#B6D3FC><td align=right>Update ViciDial List Owner: </td><td align=left><select size=1 name=vl_owner>\n"; echo "<tr bgcolor=#B6D3FC><td align=right>Update List Owner: </td><td align=left><select size=1 name=vl_owner>\n";
echo "<option SELECTED>YES</option>\n"; echo "<option SELECTED>YES</option>\n";
echo "<option>NO</option>\n"; echo "<option>NO</option>\n";
echo "</select></td></tr>\n"; echo "</select></td></tr>\n";
@@ -404,7 +404,7 @@ if ( ($action == "CHANGE_TERRITORY_OWNER") and ($enable_vtiger_integration > 0)
echo "$users_list"; echo "$users_list";
echo "</select></td></tr>\n"; echo "</select></td></tr>\n";
echo "<tr bgcolor=#B6D3FC><td align=right>Update ViciDial List Owner: </td><td align=left><select size=1 name=vl_owner>\n"; echo "<tr bgcolor=#B6D3FC><td align=right>Update List Owner: </td><td align=left><select size=1 name=vl_owner>\n";
echo "<option SELECTED>YES</option>\n"; echo "<option SELECTED>YES</option>\n";
echo "<option>NO</option>\n"; echo "<option>NO</option>\n";
echo "</select></td></tr>\n"; echo "</select></td></tr>\n";
+1 -1
View File
@@ -4,7 +4,7 @@
# Copyright (C) 2008 Matt Florell <vicidial@gmail.com> LICENSE: AGPLv2 # Copyright (C) 2008 Matt Florell <vicidial@gmail.com> LICENSE: AGPLv2
# #
echo "<title>ViciDial Welcome</title>\n"; echo "<title>Contact Center Welcome</title>\n";
echo "</head>\n"; echo "</head>\n";
echo "<BODY BGCOLOR=WHITE MARGINHEIGHT=0 MARGINWIDTH=0>\n"; echo "<BODY BGCOLOR=WHITE MARGINHEIGHT=0 MARGINWIDTH=0>\n";
echo "<BR><BR><BR><BR><BR><CENTER><TABLE WIDTH=300 CELLPADDING=0 CELLSPACING=0 BGCOLOR=\"#CCCCCC\"><TR BGCOLOR=WHITE>"; echo "<BR><BR><BR><BR><BR><CENTER><TABLE WIDTH=300 CELLPADDING=0 CELLSPACING=0 BGCOLOR=\"#CCCCCC\"><TR BGCOLOR=WHITE>";
+1 -1
View File
@@ -6,7 +6,7 @@
# #
header ("Content-type: text/html; charset=utf-8"); header ("Content-type: text/html; charset=utf-8");
echo "<title>ViciDial Welcome</title>\n"; echo "<title>Contact Center Welcome</title>\n";
echo "</head>\n"; echo "</head>\n";
echo "<BODY BGCOLOR=WHITE MARGINHEIGHT=0 MARGINWIDTH=0>\n"; echo "<BODY BGCOLOR=WHITE MARGINHEIGHT=0 MARGINWIDTH=0>\n";
echo "<BR><BR><BR><BR><CENTER><TABLE WIDTH=600 CELLPADDING=0 CELLSPACING=0 BGCOLOR=\"#CCCCCC\"><TR BGCOLOR=WHITE>"; echo "<BR><BR><BR><BR><CENTER><TABLE WIDTH=600 CELLPADDING=0 CELLSPACING=0 BGCOLOR=\"#CCCCCC\"><TR BGCOLOR=WHITE>";