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:
@@ -154,6 +154,11 @@ OTHER CHANGES:
|
||||
|
||||
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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -7,11 +7,9 @@
|
||||
# approach of allocating leads to dialers.
|
||||
#
|
||||
# SUMMARY:
|
||||
# For VICIDIAL auto-dial outbound dialing, this program must be in the crontab
|
||||
# running every minute
|
||||
# For VICIDIAL outbound dialing, this program must be in the crontab on only one
|
||||
# server, running every minute during operating hours
|
||||
#
|
||||
# It is recommended that you run this program on the local Asterisk machine
|
||||
#
|
||||
# hopper sources:
|
||||
# - A = Auto-alt-dial
|
||||
# - C = Scheduled Callbacks
|
||||
@@ -76,19 +74,25 @@
|
||||
# 121223-1540 - Fix for issue #627 preventing issues when filter is deleted, DomeDan
|
||||
# 130219-1501 - Fixed issue with other campaign dnc
|
||||
# 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
|
||||
$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='__';
|
||||
$MT[0]='';
|
||||
#$vicidial_hopper='TEST_vicidial_hopper'; # for testing
|
||||
#$vicidial_hopper='TEST_vicidial_hopper'; # for testing only
|
||||
$vicidial_hopper='vicidial_hopper';
|
||||
$count_only=0;
|
||||
|
||||
# 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();
|
||||
$secX = 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";}
|
||||
$VDL_tensec = "$Vyear-$Vmon-$Vmday $Vhour:$Vmin:$Vsec";
|
||||
|
||||
### begin parsing run-time options ###
|
||||
### begin parsing CLI run-time options ###
|
||||
if (length($ARGV[0])>1)
|
||||
{
|
||||
$i=0;
|
||||
@@ -164,26 +168,38 @@ if (length($ARGV[0])>1)
|
||||
if ($args =~ /--help/i)
|
||||
{
|
||||
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 " [--debugX] = super debug\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 " [--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 " [--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 "\n";
|
||||
exit;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($args =~ /--version/i)
|
||||
{
|
||||
print "version: $build\n";
|
||||
exit;
|
||||
}
|
||||
if ($args =~ /--campaign=/i)
|
||||
{
|
||||
# print "\n|$ARGS|\n\n";
|
||||
@data_in = split(/--campaign=/,$args);
|
||||
$CLIcampaign = $data_in[1];
|
||||
$CLIcampaign =~ s/ .*$//gi;
|
||||
if ($CLIcampaign =~ /---/)
|
||||
{
|
||||
$CLIcampaign =~ s/---/','/gi;
|
||||
}
|
||||
}
|
||||
else
|
||||
{$CLIcampaign = '';}
|
||||
@@ -222,7 +238,7 @@ if (length($ARGV[0])>1)
|
||||
$allow_inactive_list_leads=1;
|
||||
# print "\n-----DEBUG DETAIL -----\n\n";
|
||||
}
|
||||
if ($args =~ /-t/i)
|
||||
if ($args =~ /--test/i)
|
||||
{
|
||||
$T=1; $TEST=1;
|
||||
print "\n-----TESTING -----\n\n";
|
||||
@@ -231,6 +247,10 @@ if (length($ARGV[0])>1)
|
||||
{
|
||||
$wipe_hopper_clean=1;
|
||||
}
|
||||
if ($args =~ /--count-only/i)
|
||||
{
|
||||
$count_only=1;
|
||||
}
|
||||
}
|
||||
}
|
||||
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";}
|
||||
|
||||
### Wipe hopper clean process
|
||||
if ($wipe_hopper_clean)
|
||||
{
|
||||
if (length($CLIcampaign)>0)
|
||||
{
|
||||
$stmtA = "DELETE from $vicidial_hopper where campaign_id = '$CLIcampaign';";
|
||||
$stmtA = "DELETE from $vicidial_hopper where campaign_id IN('$CLIcampaign');";
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -340,8 +361,47 @@ if ($wipe_hopper_clean)
|
||||
|
||||
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
|
||||
$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;}
|
||||
$inactive_lists='';
|
||||
$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
|
||||
$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->execute or die "executing: $stmtA ", $dbhA->errstr;
|
||||
@aryA = $sthA->fetchrow_array;
|
||||
@@ -386,7 +453,14 @@ if ($CBHOLD_count > 0)
|
||||
$update_leads='';
|
||||
$cbc=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->execute or die "executing: $stmtA ", $dbhA->errstr;
|
||||
$sthArows=$sthA->rows;
|
||||
@@ -448,7 +522,14 @@ if ($CBHOLD_count > 0)
|
||||
##### BEGIN Auto-Alt-Dial DNC check and update or delete
|
||||
### Find out how many leads in the hopper are set to DNC status
|
||||
$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->execute or die "executing: $stmtA ", $dbhA->errstr;
|
||||
$sthArows=$sthA->rows;
|
||||
@@ -466,7 +547,14 @@ if ($hopper_dnc_count > 0)
|
||||
&event_logger;
|
||||
|
||||
### 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->execute or die "executing: $stmtA ", $dbhA->errstr;
|
||||
$sthArowsVHdnc=$sthA->rows;
|
||||
@@ -818,9 +906,9 @@ if ($hopper_dnc_count > 0)
|
||||
@campaign_id=@MT;
|
||||
$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
|
||||
{
|
||||
|
||||
@@ -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:
|
||||
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,
|
||||
"equipment which has the capacity
|
||||
(A) to store or produce telephone numbers to be called, using a random or sequential number generator;
|
||||
and
|
||||
(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
|
||||
mysql> UPDATE system_settings SET disable_auto_dial='1';
|
||||
mysql> quit
|
||||
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 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.
|
||||
|
||||
|
||||
@@ -877,7 +877,8 @@ use_other_campaign_dnc VARCHAR(8) default '',
|
||||
allow_emails ENUM('Y','N') default 'N',
|
||||
amd_inbound_group VARCHAR(20) 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;
|
||||
|
||||
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 db_schema_version='1358',db_schema_update_date=NOW();
|
||||
UPDATE system_settings SET db_schema_version='1359',db_schema_update_date=NOW();
|
||||
|
||||
@@ -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';
|
||||
|
||||
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||
|
||||
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||
|
||||
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
|
||||
@@ -244,6 +252,9 @@ COUNTRY CODES WITHIN THIS LIST||
|
||||
############################################################ CLIENT
|
||||
|
||||
This agent screen was not opened properly||
|
||||
Dial Lead ID||
|
||||
Agent Form Display Script||
|
||||
Agent Notes||
|
||||
|
||||
|
||||
########################## CHANGES TO EXISTING PHRASES IN AGENT TRANSLATION
|
||||
|
||||
@@ -1454,6 +1454,20 @@ if ($ACTION == 'manDiaLnextCaLL')
|
||||
|
||||
if (strlen($phone_number) > 5)
|
||||
{$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
|
||||
{
|
||||
|
||||
@@ -428,7 +428,7 @@ else
|
||||
echo "<html>\n";
|
||||
echo "<head>\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 "<script language=\"JavaScript\" src=\"calendar_db.js\"></script>\n";
|
||||
|
||||
@@ -315,7 +315,7 @@ if( (strlen($user)<2) or (strlen($pass)<2) or ($auth==0))
|
||||
echo "<HTML>\n";
|
||||
echo "<head>\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 "<script language=\"JavaScript\" src=\"calendar_db.js\"></script>\n";
|
||||
echo "<link rel=\"stylesheet\" href=\"calendar.css\">\n";
|
||||
|
||||
@@ -412,10 +412,11 @@
|
||||
# 130903-1920 - Added security check for browser window name, see launch.php for more information
|
||||
# 130925-2119 - Fixed span order issue
|
||||
# 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';
|
||||
$build = '131007-1348';
|
||||
$version = '2.8-382c';
|
||||
$build = '131010-2149';
|
||||
$mel=1; # Mysql Error Log enabled = 1
|
||||
$mysql_log_count=79;
|
||||
$one_mysql_log=0;
|
||||
@@ -1425,7 +1426,7 @@ else
|
||||
$HKstatusnames = substr("$HKstatusnames", 0, -1);
|
||||
|
||||
##### grab the campaign settings
|
||||
$stmt="SELECT park_ext,park_file_name,web_form_address,allow_closers,auto_dial_level,dial_timeout,dial_prefix,campaign_cid,campaign_vdad_exten,campaign_rec_exten,campaign_recording,campaign_rec_filename,campaign_script,get_call_launch,am_message_exten,xferconf_a_dtmf,xferconf_a_number,xferconf_b_dtmf,xferconf_b_number,alt_number_dialing,scheduled_callbacks,wrapup_seconds,wrapup_message,closer_campaigns,use_internal_dnc,allcalls_delay,omit_phone_code,agent_pause_codes_active,no_hopper_leads_logins,campaign_allow_inbound,manual_dial_list_id,default_xfer_group,xfer_groups,disable_alter_custphone,display_queue_count,manual_dial_filter,agent_clipboard_copy,use_campaign_dnc,three_way_call_cid,dial_method,three_way_dial_prefix,web_form_target,vtiger_screen_login,agent_allow_group_alias,default_group_alias,quick_transfer_button,prepopulate_transfer_preset,view_calls_in_queue,view_calls_in_queue_launch,call_requeue_button,pause_after_each_call,no_hopper_dialing,agent_dial_owner_only,agent_display_dialable_leads,web_form_address_two,agent_select_territories,crm_popup_login,crm_login_address,timer_action,timer_action_message,timer_action_seconds,start_call_url,dispo_call_url,xferconf_c_number,xferconf_d_number,xferconf_e_number,use_custom_cid,scheduled_callbacks_alert,scheduled_callbacks_count,manual_dial_override,blind_monitor_warning,blind_monitor_message,blind_monitor_filename,timer_action_destination,enable_xfer_presets,hide_xfer_number_to_dial,manual_dial_prefix,customer_3way_hangup_logging,customer_3way_hangup_seconds,customer_3way_hangup_action,ivr_park_call,manual_preview_dial,api_manual_dial,manual_dial_call_time_check,my_callback_option,per_call_notes,agent_lead_search,agent_lead_search_method,queuemetrics_phone_environment,auto_pause_precall,auto_pause_precall_code,auto_resume_precall,manual_dial_cid,custom_3way_button_transfer,callback_days_limit,disable_dispo_screen,disable_dispo_status,screen_labels,status_display_fields,pllb_grouping,pllb_grouping_limit,in_group_dial,in_group_dial_select,pause_after_next_call,owner_populate 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);
|
||||
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";}
|
||||
@@ -1535,6 +1536,7 @@ else
|
||||
$in_group_dial_select = $row[102];
|
||||
$pause_after_next_call = $row[103];
|
||||
$owner_populate = $row[104];
|
||||
$manual_dial_lead_id = $row[105];
|
||||
|
||||
if ( ($queuemetrics_pe_phone_append > 0) and (strlen($qm_phone_environment)>0) )
|
||||
{$qm_phone_environment .= "-$qm_extension";}
|
||||
@@ -6611,6 +6613,7 @@ function set_length(SLnumber,SLlength_goal,SLdirection)
|
||||
var MDDiaLCodEform = document.vicidial_form.MDDiaLCodE.value;
|
||||
var MDPhonENumbeRform = document.vicidial_form.MDPhonENumbeR.value;
|
||||
var MDLeadIDform = document.vicidial_form.MDLeadID.value;
|
||||
var MDLeadIDEntryform = document.vicidial_form.MDLeadIDEntry.value;
|
||||
var MDTypeform = document.vicidial_form.MDType.value;
|
||||
var MDDiaLOverridEform = document.vicidial_form.MDDiaLOverridE.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)
|
||||
{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) )
|
||||
{
|
||||
agent_dialed_number=1;
|
||||
@@ -6665,6 +6671,7 @@ function set_length(SLnumber,SLlength_goal,SLdirection)
|
||||
document.vicidial_form.MDPhonENumbeR.value = '';
|
||||
document.vicidial_form.MDDiaLOverridE.value = '';
|
||||
document.vicidial_form.MDLeadID.value = '';
|
||||
document.vicidial_form.MDLeadIDEntry.value='';
|
||||
document.vicidial_form.MDType.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.MDDiaLOverridE.value = '';
|
||||
document.vicidial_form.MDLeadID.value = '';
|
||||
document.vicidial_form.MDLeadIDEntry.value='';
|
||||
document.vicidial_form.MDType.value = '';
|
||||
document.vicidial_form.MDPhonENumbeRHiddeN.value = '';
|
||||
inbound_lead_search=0;
|
||||
@@ -12796,6 +12804,7 @@ function phone_number_format(formatphone) {
|
||||
document.vicidial_form.MDPhonENumbeR.value = '';
|
||||
document.vicidial_form.MDDiaLOverridE.value = '';
|
||||
document.vicidial_form.MDLeadID.value = '';
|
||||
document.vicidial_form.MDLeadIDEntry.value='';
|
||||
document.vicidial_form.MDType.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="MDLeadID" id="MDLeadID" 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=\"\" /> (digits only)</font>\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
echo "<input type=\"hidden\" name=\"MDLeadIDEntry\" id=\"MDLeadIDEntry\" value=\"\" />\n";
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
</tr><tr>
|
||||
<td align="right"><font class="body_text"> Search Existing Leads: </font></td>
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
# 130704-0935 - Fixed issue #675
|
||||
# 130829-2012 - Changed to mysqli PHP functions
|
||||
# 131002-2015 - Added user group to report output
|
||||
# 131010-1930 - Expanded user group column, added most recent user group
|
||||
#
|
||||
|
||||
$startMS = microtime();
|
||||
@@ -55,6 +56,8 @@ if (isset($_GET["group"])) {$group=$_GET["group"];}
|
||||
elseif (isset($_POST["group"])) {$group=$_POST["group"];}
|
||||
if (isset($_GET["user_group"])) {$user_group=$_GET["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"];}
|
||||
elseif (isset($_POST["shift"])) {$shift=$_POST["shift"];}
|
||||
if (isset($_GET["stage"])) {$stage=$_GET["stage"];}
|
||||
@@ -257,6 +260,15 @@ while($i < $group_ct)
|
||||
$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;";
|
||||
$rslt=mysql_to_mysqli($stmt, $link);
|
||||
if ($DB) {$HTML_text.="$stmt\n";}
|
||||
@@ -288,6 +300,21 @@ while ($i < $user_groups_to_print)
|
||||
$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;
|
||||
$group_string='|';
|
||||
$group_ct = count($group);
|
||||
@@ -324,9 +351,12 @@ if ( (preg_match('/\-\-ALL\-\-/',$user_group_string) ) or ($user_group_ct < 1) )
|
||||
else
|
||||
{
|
||||
$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>";}
|
||||
|
||||
$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++;
|
||||
}
|
||||
$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.="<SELECT SIZE=1 NAME=shift>\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.="\"Time range: $query_date_BEGIN to $query_date_END\"\n\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='';
|
||||
$statusesARY[0]='';
|
||||
@@ -504,6 +549,13 @@ $usersARY[0]='';
|
||||
$user_namesARY[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;";
|
||||
$rslt=mysql_to_mysqli($stmt, $link);
|
||||
if ($DB) {$HTML_text.="$stmt\n";}
|
||||
@@ -593,9 +645,9 @@ $CSV_header.="\n";
|
||||
$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.="+-----------------+----------+-----------------+--------+-----------+----------+--------+----------+--------+----------+--------+----------+--------+----------+--------+----------+--------+$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.="+-----------------+----------+-----------------+--------+-----------+----------+--------+----------+--------+----------+--------+----------+--------+----------+--------+----------+--------+$statusesHEAD\n";
|
||||
$ASCII_text.="+-----------------+----------+----------------------+----------------------+--------+-----------+----------+--------+----------+--------+----------+--------+----------+--------+----------+--------+----------+--------+$statusesHEAD\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";
|
||||
|
||||
|
||||
### BEGIN loop through each user ###
|
||||
@@ -603,6 +655,16 @@ $m=0;
|
||||
while ($m < $k)
|
||||
{
|
||||
$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];
|
||||
$Suser_group=$user_groupsARY[$m];
|
||||
$Stime=0;
|
||||
@@ -694,8 +756,10 @@ while ($m < $k)
|
||||
{
|
||||
$Sfull_name= sprintf("%-15s", $Sfull_name);
|
||||
while(strlen($Sfull_name)>15) {$Sfull_name = substr("$Sfull_name", 0, -1);}
|
||||
$Suser_group= sprintf("%-15s", $Suser_group);
|
||||
while(strlen($Suser_group)>15) {$Suser_group = substr("$Suser_group", 0, -1);}
|
||||
$Suser_group= sprintf("%-20s", $Suser_group);
|
||||
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);
|
||||
while(strlen($Suser)>8) {$Suser = substr("$Suser", 0, -1);}
|
||||
}
|
||||
@@ -768,11 +832,11 @@ while ($m < $k)
|
||||
$pfUSERavgCUSTOMER_MS = sprintf("%6s", $USERavgCUSTOMER_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.=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";
|
||||
|
||||
$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);}
|
||||
|
||||
|
||||
$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.="+-----------------+----------+-----------------+--------+-----------+----------+--------+----------+--------+----------+--------+----------+--------+----------+--------+----------+--------+$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.="+-----------------+----------+----------------------+----------------------+--------+-----------+----------+--------+----------+--------+----------+--------+----------+--------+----------+--------+----------+--------+$statusesHEAD\n";
|
||||
|
||||
|
||||
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;
|
||||
|
||||
|
||||
$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)
|
||||
{
|
||||
@@ -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.="+-----------------+----------+-----------------+----------+----------+----------+ +$sub_statusesHEAD\n";
|
||||
$ASCII_text.="| USER NAME | ID | USER GROUP | TOTAL | NONPAUSE | PAUSE | |$sub_statusesHTML\n";
|
||||
$ASCII_text.="+-----------------+----------+-----------------+----------+----------+----------+ +$sub_statusesHEAD\n";
|
||||
$ASCII_text.="+-----------------+----------+----------------------+----------------------+----------+----------+----------+ +$sub_statusesHEAD\n";
|
||||
$ASCII_text.="| USER NAME | ID | CURRENT USER GROUP | MOST RECENT USER GRP | TOTAL | NONPAUSE | PAUSE | |$sub_statusesHTML\n";
|
||||
$ASCII_text.="+-----------------+----------+----------------------+----------------------+----------+----------+----------+ +$sub_statusesHEAD\n";
|
||||
|
||||
$CSV_header="\"Agent Performance Detail $NOW_TIME\"\n";
|
||||
$CSV_header.="\"Time range: $query_date_BEGIN to $query_date_END\"\n\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 ###
|
||||
$m=0;
|
||||
@@ -1159,6 +1223,7 @@ while ($m < $k)
|
||||
$Suser=$PCusersARY[$m];
|
||||
$Sfull_name=$PCuser_namesARY[$m];
|
||||
$Suser_group=$PCuser_groupsARY[$m];
|
||||
$Slast_user_group=$recent_user_groups[$Suser];
|
||||
$Spause_sec=0;
|
||||
$Snon_pause_sec=0;
|
||||
$Stotal_sec=0;
|
||||
@@ -1217,8 +1282,10 @@ while ($m < $k)
|
||||
{
|
||||
$Sfull_name= sprintf("%-15s", $Sfull_name);
|
||||
while(strlen($Sfull_name)>15) {$Sfull_name = substr("$Sfull_name", 0, -1);}
|
||||
$Suser_group= sprintf("%-15s", $Suser_group);
|
||||
while(strlen($Suser_group)>15) {$Suser_group = substr("$Suser_group", 0, -1);}
|
||||
$Suser_group= sprintf("%-20s", $Suser_group);
|
||||
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);
|
||||
while(strlen($Suser)>8) {$Suser = substr("$Suser", 0, -1);}
|
||||
}
|
||||
@@ -1250,12 +1317,12 @@ while ($m < $k)
|
||||
$pfUSERtotNONPAUSE_MS = sprintf("%8s", $USERtotNONPAUSE_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;
|
||||
|
||||
$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";
|
||||
$m++;
|
||||
}
|
||||
@@ -1338,9 +1405,9 @@ while ($n < $j)
|
||||
while(strlen($TOTtotTOTAL_MS)>10) {$TOTtotTOTAL_MS = substr("$TOTtotTOTAL_MS", 0, -1);}
|
||||
|
||||
|
||||
$ASCII_text.="+-----------------+----------+-----------------+----------+----------+----------+ +$sub_statusesHEAD\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";
|
||||
$ASCII_text.="| TOTALS AGENTS:$TOT_AGENTS |$TOTtotTOTAL_MS|$TOTtotNONPAUSE_MS|$TOTtotPAUSE_MS| |$SUMstatusesHTML\n";
|
||||
$ASCII_text.="+-----------------+----------+----------------------+----------------------+----------+----------+----------+ +$sub_statusesHEAD\n";
|
||||
|
||||
for ($e=0; $e<count($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)
|
||||
{
|
||||
|
||||
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">
|
||||
<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>
|
||||
|
||||
@@ -10,10 +10,11 @@
|
||||
# 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
|
||||
# 130901-1927 - Changed to mysqli PHP functions
|
||||
# 131016-2029 - Added links to advanced lead tools
|
||||
#
|
||||
|
||||
$version = '2.8-6';
|
||||
$build = '130901-1927';
|
||||
$version = '2.8-7';
|
||||
$build = '131016-2029';
|
||||
|
||||
# This limit is to prevent data inconsistancies.
|
||||
# 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 "<td align=left>\n";
|
||||
echo "<font face='ARIAL,HELVETICA' size=2>\n";
|
||||
echo "<b> Lead Tools</b>\n";
|
||||
echo "<b> Basic Lead Tools | <a href=\"lead_tools_advanced.php\">Advanced Lead Tools</a></b>\n";
|
||||
echo "</font>\n";
|
||||
echo "</td>\n";
|
||||
echo "<td align=right><font face='ARIAL,HELVETICA' size=2><b> </td>\n";
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -41,6 +41,7 @@
|
||||
# 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
|
||||
# 130901-0836 - Changed to mysqli PHP functions
|
||||
# 131016-2102 - Added checking for level 8 add-copy restriction
|
||||
#
|
||||
|
||||
$startMS = microtime();
|
||||
@@ -52,6 +53,7 @@ $report_name = 'User Stats';
|
||||
$db_source = 'M';
|
||||
|
||||
$firstlastname_display_user_stats=0;
|
||||
$add_copy_disabled=0;
|
||||
if (file_exists('options.php'))
|
||||
{
|
||||
require('options.php');
|
||||
@@ -81,7 +83,7 @@ if (isset($_GET["file_download"])) {$file_download=$_GET["file_download"];}
|
||||
|
||||
#############################################
|
||||
##### 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);
|
||||
if ($DB) {$MAIN.="$stmt\n";}
|
||||
$qm_conf_ct = mysqli_num_rows($rslt);
|
||||
@@ -95,6 +97,7 @@ if ($qm_conf_ct > 0)
|
||||
$user_territories_active = $row[4];
|
||||
$webroot_writable = $row[5];
|
||||
$allow_emails = $row[6];
|
||||
$SSlevel_8_disable_add = $row[7];
|
||||
}
|
||||
##### END SETTINGS LOOKUP #####
|
||||
###########################################
|
||||
@@ -171,6 +174,16 @@ else
|
||||
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");
|
||||
$ip = getenv("REMOTE_ADDR");
|
||||
$browser = getenv("HTTP_USER_AGENT");
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
# 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
|
||||
# 130901-0835 - Changed to mysqli PHP functions
|
||||
# 131016-2101 - Added checking for level 8 add-copy restriction
|
||||
#
|
||||
|
||||
$startMS = microtime();
|
||||
@@ -32,6 +33,8 @@ header ("Content-type: text/html; charset=utf-8");
|
||||
|
||||
$report_name='User Status';
|
||||
|
||||
$add_copy_disabled=0;
|
||||
|
||||
require("dbconnect_mysqli.php");
|
||||
require("functions.php");
|
||||
|
||||
@@ -57,7 +60,7 @@ if (isset($_GET["SUBMIT"])) {$SUBMIT=$_GET["SUBMIT"];}
|
||||
|
||||
#############################################
|
||||
##### 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);
|
||||
if ($DB) {echo "$stmt\n";}
|
||||
$qm_conf_ct = mysqli_num_rows($rslt);
|
||||
@@ -68,6 +71,7 @@ if ($qm_conf_ct > 0)
|
||||
$webroot_writable = $row[1];
|
||||
$SSoutbound_autodial_active = $row[2];
|
||||
$user_territories_active = $row[3];
|
||||
$SSlevel_8_disable_add = $row[4];
|
||||
}
|
||||
##### END SETTINGS LOOKUP #####
|
||||
###########################################
|
||||
@@ -142,6 +146,16 @@ else
|
||||
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 #####
|
||||
$LOGip = getenv("REMOTE_ADDR");
|
||||
$LOGbrowser = getenv("HTTP_USER_AGENT");
|
||||
|
||||
@@ -192,7 +192,7 @@ if ( ($action == "CHANGE_TERRITORY_OWNER_ACCOUNT") and ($enable_vtiger_integrati
|
||||
echo "$users_list";
|
||||
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>NO</option>\n";
|
||||
echo "</select></td></tr>\n";
|
||||
@@ -404,7 +404,7 @@ if ( ($action == "CHANGE_TERRITORY_OWNER") and ($enable_vtiger_integration > 0)
|
||||
echo "$users_list";
|
||||
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>NO</option>\n";
|
||||
echo "</select></td></tr>\n";
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
# 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 "<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>";
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
#
|
||||
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 "<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>";
|
||||
|
||||
Reference in New Issue
Block a user