From 12db1e7ab39b6613cd8ac94d01a2801fc8690cc6 Mon Sep 17 00:00:00 2001 From: mattf Date: Sat, 11 Feb 2023 03:39:45 +0000 Subject: [PATCH] Added admin_listloader_fifth_gen.php for beta testing Added MULTI_VICIDIAL_lead_file_PRreplace.txt for testing git-svn-id: svn://192.168.202.10@3682 3d104415-ff17-0410-8863-d5cf3c621b8a --- ...testMULTI_VICIDIAL_lead_file_PNreplace.txt | 13 + .../vicidial/admin_listloader_fifth_gen.php | 3125 +++++++++++++++++ .../trunk/www/vicidial/help_documentation.txt | 11 +- 3 files changed, 3146 insertions(+), 3 deletions(-) create mode 100644 agc_2-X/trunk/extras/testMULTI_VICIDIAL_lead_file_PNreplace.txt create mode 100644 agc_2-X/trunk/www/vicidial/admin_listloader_fifth_gen.php diff --git a/agc_2-X/trunk/extras/testMULTI_VICIDIAL_lead_file_PNreplace.txt b/agc_2-X/trunk/extras/testMULTI_VICIDIAL_lead_file_PNreplace.txt new file mode 100644 index 00000000..d4249577 --- /dev/null +++ b/agc_2-X/trunk/extras/testMULTI_VICIDIAL_lead_file_PNreplace.txt @@ -0,0 +1,13 @@ +900001|80001|129|1|7275551213|MR|John|Q|Public01|249 MUNDON ROAD||address3|MALDON|Florida||33709|USA|M|1970-01-01|7275551212|test@test.com|nothing|COMMENTS +900002|80002|129|1|3211551213|MR|John|Q|Public02|249 MUNDON ROAD|||MALDON|FLORIDA||33709|USA|M|1970-01-01|3125551212|test@test.com|nothing|COMMENTS +900003|80003|129|1|3212551213|MR|John|Q|Public03|249 MUNDON ROAD|||MALDON|FLORida||33709|USA|M|1970-01-01|3035551212|test@test.com|nothing|COMMENTS +900004|80004|129|1||MR|John|Q|Public04|249 MUNDON ROAD|||MALDON|Georgia||33709|USA|M|1970-01-01|3213551213|test@test.com|nothing|COMMENTS +900005|80005|129|1||MR|John|Q|Public05|249 MUNDON ROAD||3214551213|MALDON|GA||33709|USA|M|1970-01-01||test@test.com|nothing|COMMENTS +900006|80006|129|1|321555121|MR|John|Q|Public06|249 MUNDON ROAD|||MALDON|NT||33709|USA|M|1970-01-01|3215551212|test@test.com|nothing|COMMENTS +900007|80007|129|1|321655121|MR|John|Q|Public07|249 MUNDON ROAD||3216551212|MALDON|Nebraska||33709|USA|M|1970-01-01||test@test.com|nothing|COMMENTS +900008|80008|129|1|3217551213|MR|John|Q|Public08|249 MUNDON ROAD|||MALDON|ALBERTA||33709|USA|M|1970-01-01|7275551212|test@test.com|nothing|COMMENTS +900009|80009|129|1|3218551213|MR|John|Q|Public09|249 MUNDON ROAD|||MALDON|New hampshire||33709|USA|M|1970-01-01|7275551212|test@test.com|nothing|COMMENTS +900010|80010|129|1|3218551213|MR|John|Q|Public09|249 MUNDON ROAD||3218451213|MALDON|New hampshire||33709|USA|M|1970-01-01|3218551213|test@test.com|nothing|COMMENTS +900011|80011|129|1|3219551213|MR|John|Q|Public10|249 MUNDON ROAD|||MALDON|north carolina||33709|USA|M|1970-01-01|7275551212|test@test.com|nothing|COMMENTS +900012|80012|129|1|3219551213|MR|John|Q|Public10|249 MUNDON ROAD|||MALDON|north carolina||33709|USA|M|1970-01-01|3219451213|test@test.com|nothing|COMMENTS +900013|80013|129|1||MR|John|Q|Public10|249 MUNDON ROAD|||MALDON|north carolina||33709|USA|M|1970-01-01||test@test.com|nothing|COMMENTS diff --git a/agc_2-X/trunk/www/vicidial/admin_listloader_fifth_gen.php b/agc_2-X/trunk/www/vicidial/admin_listloader_fifth_gen.php new file mode 100644 index 00000000..5ae1d0af --- /dev/null +++ b/agc_2-X/trunk/www/vicidial/admin_listloader_fifth_gen.php @@ -0,0 +1,3125 @@ + LICENSE: AGPLv2 +# +# ViciDial web-based lead loader from formatted file +# +# CHANGES +# 50602-1640 - First version created by Joe Johnson +# 51128-1108 - Removed PHP global vars requirement +# 60113-1603 - Fixed a few bugs in Excel import +# 60421-1624 - check GET/POST vars lines with isset to not trigger PHP NOTICES +# 60616-1240 - added listID override +# 60616-1604 - added gmt lookup for each lead +# 60619-1651 - Added variable filtering to eliminate SQL injection attack threat +# 60822-1121 - fixed for nonwritable directories +# 60906-1100 - added filter of non-digits in alt_phone field +# 61110-1222 - added new USA-Canada DST scheme and Brazil DST scheme +# 61128-1149 - added postal code GMT lookup and duplicate check options +# 70417-1059 - Fixed default phone_code bug +# 70510-1518 - Added campaign and system duplicate check and phonecode override +# 80428-0417 - UTF8 changes +# 80514-1030 - removed filesize limit and raised number of errors to be displayed +# 80713-0023 - added last_local_call_time field default of 2008-01-01 +# 81011-2009 - a few bug fixes +# 90309-1831 - Added admin_log logging +# 90310-2128 - Added admin header +# 90508-0644 - Changed to PHP long tags +# 90522-0506 - Security fix +# 90721-1339 - Added rank and owner as vicidial_list fields +# 91112-0616 - Added title/alt-phone duplicate checking +# 100118-0543 - Added new Australian and New Zealand DST schemes (FSO-FSA and LSS-FSA) +# 100621-1026 - Added admin_web_directory variable +# 100630-1609 - Added a check for invalid ListIds and filtered out ' " ; ` \ from the field +# 100705-1507 - Added custom fields to field chooser, only when liast_id_override is used and only with TXT and CSV file formats +# 100706-1250 - Forked script to create new script that will only load TXT(tab- +# delimited files) and use a perl script to convert others to TXT +# 100707-1040 - Converted List Id Override and Phone Code Override to drop downs +# 100707-1156 - Made it so you cannot submit with no lead file selected. Also fixed Start Over Link +# 100712-1416 - Added entry_list_id field to vicidial_list to preserve link to custom fields if any +# 100728-0900 - Filtered uploaded filenames for unsupported characters +# 110424-0926 - Added option for time zone code in the owner field +# 110705-1947 - Added USACAN check for prefix and areacode +# 120221-0140 - Added User Group restrictions +# 120223-2318 - Removed logging of good login passwords if webroot writable is enabled +# 120402-2128 - Added template options +# 120525-1038 - Added uploaded filename filtering +# 120529-1348 - Filename filter fix +# 130420-2056 - Added NANPA prefix validation and timezone options +# 130610-0920 - Finalized changing of all ereg instances to preg +# 130621-1817 - Added filtering of input to prevent SQL injection attacks and new user auth +# 130719-1914 - Added SQL to filter by template statuses, if template has specific statuses to dedupe against +# 130802-0619 - Added status deduping option without template +# 130824-2322 - Changed to mysqli PHP functions +# 140214-1022 - Fixed status dedupe bug +# 140328-0007 - Converted division calculations to use MathZDC function +# 141001-2200 - Finalized adding QXZ translation to all admin files +# 141118-1955 - Added more debug output +# 141229-1814 - Added code for on-the-fly language translations display +# 150209-2113 - Added master_list_override option to override template setting +# 150312-1505 - Allow for single quotes in vicidial_list data fields +# 150516-1136 - Fixed conflict with functions.php +# 150728-0732 - Added state fullname to abbreviation conversion feature (state_conversion) +# 150810-0750 - Added compatibility for custom fields data option +# 160102-1039 - Better special characters support +# 160428-2359 - Fixed custom table bug +# 160508-0757 - Added colors features +# 161103-2224 - Added web_loader_phone_length option +# 161114-2315 - Added file upload error checking +# 170219-1427 - Added last-90-day duplicate check options +# 170409-1553 - Added IP List validation code +# 171001-0908 - Fixed issue #1041 +# 171204-1517 - Fix for custom field duplicate issue, removed link to old lead loader +# 180324-0943 - Enforce User Group campaign permissions for templates based on list_id +# 180502-2215 - Added new help display +# 180927-0702 - Fixed translation-related issue #1114 +# 190503-1547 - Added enable_status_mismatch_leadloader_option +# 200812-1745 - Added international DNC scrub option +# 200922-1013 - Added web_loader_phone_strip system setting feature +# 210210-1602 - Added duplicate check with more X-day options +# 220222-1002 - Added allow_web_debug system setting +# 230210-1844 - Added invalid_phone_override option +# + +$version = '2.14-79'; +$build = '230210-1844'; + +require("dbconnect_mysqli.php"); +require("functions.php"); + +$enable_status_mismatch_leadloader_option=0; + +if (file_exists('options.php')) + { + require('options.php'); + } + +$US='_'; +$MT[0]=''; + +$PHP_AUTH_USER=$_SERVER['PHP_AUTH_USER']; +$PHP_AUTH_PW=$_SERVER['PHP_AUTH_PW']; +$PHP_SELF=$_SERVER['PHP_SELF']; +$PHP_SELF = preg_replace('/\.php.*/i','.php',$PHP_SELF); +$leadfile=$_FILES["leadfile"]; + $LF_orig = $_FILES['leadfile']['name']; + $LF_path = $_FILES['leadfile']['tmp_name']; +if (isset($_GET["submit_file"])) {$submit_file=$_GET["submit_file"];} + elseif (isset($_POST["submit_file"])) {$submit_file=$_POST["submit_file"];} +if (isset($_GET["submit"])) {$submit=$_GET["submit"];} + elseif (isset($_POST["submit"])) {$submit=$_POST["submit"];} +if (isset($_GET["SUBMIT"])) {$SUBMIT=$_GET["SUBMIT"];} + elseif (isset($_POST["SUBMIT"])) {$SUBMIT=$_POST["SUBMIT"];} +if (isset($_GET["leadfile_name"])) {$leadfile_name=$_GET["leadfile_name"];} + elseif (isset($_POST["leadfile_name"])) {$leadfile_name=$_POST["leadfile_name"];} +if (isset($_FILES["leadfile"])) {$leadfile_name=$_FILES["leadfile"]['name'];} +if (isset($_GET["file_layout"])) {$file_layout=$_GET["file_layout"];} + elseif (isset($_POST["file_layout"])) {$file_layout=$_POST["file_layout"];} +if (isset($_GET["OK_to_process"])) {$OK_to_process=$_GET["OK_to_process"];} + elseif (isset($_POST["OK_to_process"])) {$OK_to_process=$_POST["OK_to_process"];} +if (isset($_GET["vendor_lead_code_field"])) {$vendor_lead_code_field=$_GET["vendor_lead_code_field"];} + elseif (isset($_POST["vendor_lead_code_field"])) {$vendor_lead_code_field=$_POST["vendor_lead_code_field"];} +if (isset($_GET["source_id_field"])) {$source_id_field=$_GET["source_id_field"];} + elseif (isset($_POST["source_id_field"])) {$source_id_field=$_POST["source_id_field"];} +if (isset($_GET["list_id_field"])) {$list_id_field=$_GET["list_id_field"];} + elseif (isset($_POST["list_id_field"])) {$list_id_field=$_POST["list_id_field"];} +if (isset($_GET["phone_code_field"])) {$phone_code_field=$_GET["phone_code_field"];} + elseif (isset($_POST["phone_code_field"])) {$phone_code_field=$_POST["phone_code_field"];} +if (isset($_GET["phone_number_field"])) {$phone_number_field=$_GET["phone_number_field"];} + elseif (isset($_POST["phone_number_field"])) {$phone_number_field=$_POST["phone_number_field"];} +if (isset($_GET["title_field"])) {$title_field=$_GET["title_field"];} + elseif (isset($_POST["title_field"])) {$title_field=$_POST["title_field"];} +if (isset($_GET["first_name_field"])) {$first_name_field=$_GET["first_name_field"];} + elseif (isset($_POST["first_name_field"])) {$first_name_field=$_POST["first_name_field"];} +if (isset($_GET["middle_initial_field"])) {$middle_initial_field=$_GET["middle_initial_field"];} + elseif (isset($_POST["middle_initial_field"])) {$middle_initial_field=$_POST["middle_initial_field"];} +if (isset($_GET["last_name_field"])) {$last_name_field=$_GET["last_name_field"];} + elseif (isset($_POST["last_name_field"])) {$last_name_field=$_POST["last_name_field"];} +if (isset($_GET["address1_field"])) {$address1_field=$_GET["address1_field"];} + elseif (isset($_POST["address1_field"])) {$address1_field=$_POST["address1_field"];} +if (isset($_GET["address2_field"])) {$address2_field=$_GET["address2_field"];} + elseif (isset($_POST["address2_field"])) {$address2_field=$_POST["address2_field"];} +if (isset($_GET["address3_field"])) {$address3_field=$_GET["address3_field"];} + elseif (isset($_POST["address3_field"])) {$address3_field=$_POST["address3_field"];} +if (isset($_GET["city_field"])) {$city_field=$_GET["city_field"];} + elseif (isset($_POST["city_field"])) {$city_field=$_POST["city_field"];} +if (isset($_GET["state_field"])) {$state_field=$_GET["state_field"];} + elseif (isset($_POST["state_field"])) {$state_field=$_POST["state_field"];} +if (isset($_GET["province_field"])) {$province_field=$_GET["province_field"];} + elseif (isset($_POST["province_field"])) {$province_field=$_POST["province_field"];} +if (isset($_GET["postal_code_field"])) {$postal_code_field=$_GET["postal_code_field"];} + elseif (isset($_POST["postal_code_field"])) {$postal_code_field=$_POST["postal_code_field"];} +if (isset($_GET["country_code_field"])) {$country_code_field=$_GET["country_code_field"];} + elseif (isset($_POST["country_code_field"])) {$country_code_field=$_POST["country_code_field"];} +if (isset($_GET["gender_field"])) {$gender_field=$_GET["gender_field"];} + elseif (isset($_POST["gender_field"])) {$gender_field=$_POST["gender_field"];} +if (isset($_GET["date_of_birth_field"])) {$date_of_birth_field=$_GET["date_of_birth_field"];} + elseif (isset($_POST["date_of_birth_field"])) {$date_of_birth_field=$_POST["date_of_birth_field"];} +if (isset($_GET["alt_phone_field"])) {$alt_phone_field=$_GET["alt_phone_field"];} + elseif (isset($_POST["alt_phone_field"])) {$alt_phone_field=$_POST["alt_phone_field"];} +if (isset($_GET["email_field"])) {$email_field=$_GET["email_field"];} + elseif (isset($_POST["email_field"])) {$email_field=$_POST["email_field"];} +if (isset($_GET["security_phrase_field"])) {$security_phrase_field=$_GET["security_phrase_field"];} + elseif (isset($_POST["security_phrase_field"])) {$security_phrase_field=$_POST["security_phrase_field"];} +if (isset($_GET["comments_field"])) {$comments_field=$_GET["comments_field"];} + elseif (isset($_POST["comments_field"])) {$comments_field=$_POST["comments_field"];} +if (isset($_GET["rank_field"])) {$rank_field=$_GET["rank_field"];} + elseif (isset($_POST["rank_field"])) {$rank_field=$_POST["rank_field"];} +if (isset($_GET["owner_field"])) {$owner_field=$_GET["owner_field"];} + elseif (isset($_POST["owner_field"])) {$owner_field=$_POST["owner_field"];} +if (isset($_GET["list_id_override"])) {$list_id_override=$_GET["list_id_override"];} + elseif (isset($_POST["list_id_override"])) {$list_id_override=$_POST["list_id_override"];} + $list_id_override = (preg_replace("/\D/","",$list_id_override)); +if (isset($_GET["master_list_override"])) {$master_list_override=$_GET["master_list_override"];} + elseif (isset($_POST["master_list_override"])) {$master_list_override=$_POST["master_list_override"];} +if (isset($_GET["lead_file"])) {$lead_file=$_GET["lead_file"];} + elseif (isset($_POST["lead_file"])) {$lead_file=$_POST["lead_file"];} +if (isset($_GET["dupcheck"])) {$dupcheck=$_GET["dupcheck"];} + elseif (isset($_POST["dupcheck"])) {$dupcheck=$_POST["dupcheck"];} +if (isset($_GET["dedupe_statuses"])) {$dedupe_statuses=$_GET["dedupe_statuses"];} + elseif (isset($_POST["dedupe_statuses"])) {$dedupe_statuses=$_POST["dedupe_statuses"];} +if (isset($_GET["dedupe_statuses_override"])) {$dedupe_statuses_override=$_GET["dedupe_statuses_override"];} + elseif (isset($_POST["dedupe_statuses_override"])) {$dedupe_statuses_override=$_POST["dedupe_statuses_override"];} +if (isset($_GET["status_mismatch_action"])) {$status_mismatch_action=$_GET["status_mismatch_action"];} + elseif (isset($_POST["status_mismatch_action"])) {$status_mismatch_action=$_POST["status_mismatch_action"];} +if (isset($_GET["postalgmt"])) {$postalgmt=$_GET["postalgmt"];} + elseif (isset($_POST["postalgmt"])) {$postalgmt=$_POST["postalgmt"];} +if (isset($_GET["phone_code_override"])) {$phone_code_override=$_GET["phone_code_override"];} + elseif (isset($_POST["phone_code_override"])) {$phone_code_override=$_POST["phone_code_override"];} + $phone_code_override = (preg_replace("/\D/","",$phone_code_override)); +if (isset($_GET["DB"])) {$DB=$_GET["DB"];} + elseif (isset($_POST["DB"])) {$DB=$_POST["DB"];} +if (isset($_GET["template_id"])) {$template_id=$_GET["template_id"];} + elseif (isset($_POST["template_id"])) {$template_id=$_POST["template_id"];} +if (isset($_GET["usacan_check"])) {$usacan_check=$_GET["usacan_check"];} + elseif (isset($_POST["usacan_check"])) {$usacan_check=$_POST["usacan_check"];} +if (isset($_GET["state_conversion"])) {$state_conversion=$_GET["state_conversion"];} + elseif (isset($_POST["state_conversion"])) {$state_conversion=$_POST["state_conversion"];} +if (isset($_GET["web_loader_phone_length"])) {$web_loader_phone_length=$_GET["web_loader_phone_length"];} + elseif (isset($_POST["web_loader_phone_length"])) {$web_loader_phone_length=$_POST["web_loader_phone_length"];} +if (isset($_GET["international_dnc_scrub"])) {$international_dnc_scrub=$_GET["international_dnc_scrub"];} + elseif (isset($_POST["international_dnc_scrub"])) {$international_dnc_scrub=$_POST["international_dnc_scrub"];} +if (isset($_GET["invalid_phone_override"])) {$invalid_phone_override=$_GET["invalid_phone_override"];} + elseif (isset($_POST["invalid_phone_override"])) {$invalid_phone_override=$_POST["invalid_phone_override"];} + +$DB=preg_replace("/[^0-9a-zA-Z]/","",$DB); + +# if the didnt select an over ride wipe out in_file +if ( $list_id_override == "in_file" ) { $list_id_override = ""; } +if ( $phone_code_override == "in_file" ) { $phone_code_override = ""; } + +# $country_field=$_GET["country_field"]; if (!$country_field) {$country_field=$_POST["country_field"];} + +### REGEX to prevent weird characters from ending up in the fields +$field_regx = "[\"`\\;]"; + +$vicidial_list_fields = '|lead_id|vendor_lead_code|source_id|list_id|gmt_offset_now|called_since_last_reset|phone_code|phone_number|title|first_name|middle_initial|last_name|address1|address2|address3|city|state|province|postal_code|country_code|gender|date_of_birth|alt_phone|email|security_phrase|comments|called_count|last_local_call_time|rank|owner|entry_list_id|'; + +############################################# +##### START SYSTEM_SETTINGS LOOKUP ##### +$stmt = "SELECT use_non_latin,admin_web_directory,custom_fields_enabled,webroot_writable,enable_languages,language_method,active_modules,admin_screen_colors,web_loader_phone_length,enable_international_dncs,web_loader_phone_strip,allow_web_debug FROM system_settings;"; +$rslt=mysql_to_mysqli($stmt, $link); +if ($DB) {echo "$stmt\n";} +$qm_conf_ct = mysqli_num_rows($rslt); +#if ($qm_conf_ct > 0) + { + $row=mysqli_fetch_row($rslt); + $non_latin = $row[0]; + $admin_web_directory = $row[1]; + $custom_fields_enabled = $row[2]; + $webroot_writable = $row[3]; + $SSenable_languages = $row[4]; + $SSlanguage_method = $row[5]; + $SSactive_modules = $row[6]; + $SSadmin_screen_colors = $row[7]; + $SSweb_loader_phone_length = $row[8]; + $SSenable_international_dncs = $row[9]; + $SSweb_loader_phone_strip = $row[10]; + $SSallow_web_debug = $row[11]; + } +if ($SSallow_web_debug < 1) {$DB=0;} +##### END SETTINGS LOOKUP ##### +########################################### + +$list_id_override = preg_replace('/[^0-9]/','',$list_id_override); +$phone_code_override = preg_replace('/[^0-9]/','',$phone_code_override); +$web_loader_phone_length = preg_replace('/[^0-9]/','',$web_loader_phone_length); +$international_dnc_scrub = preg_replace('/[^-_0-9a-zA-Z]/', '', $international_dnc_scrub); +$master_list_override = preg_replace('/[^-_0-9a-zA-Z]/', '', $master_list_override); +$usacan_check = preg_replace('/[^-_0-9a-zA-Z]/', '', $usacan_check); +$state_conversion = preg_replace('/[^-_0-9a-zA-Z]/', '', $state_conversion); +$status_mismatch_action = preg_replace('/[^- \_0-9a-zA-Z]/', '', $status_mismatch_action); +$postalgmt = preg_replace('/[^- \_0-9a-zA-Z]/', '', $postalgmt); +$dupcheck = preg_replace('/[^- \_0-9a-zA-Z]/', '', $dupcheck); +$lead_file = preg_replace("/\<|\>|\'|\"|\\\\|;/","",$lead_file); +$vendor_lead_code_field = preg_replace("/\<|\>|\'|\"|\\\\|;/",'',$vendor_lead_code_field); +$source_id_field = preg_replace("/\<|\>|\'|\"|\\\\|;/",'',$source_id_field); +$list_id_field = preg_replace("/\<|\>|\'|\"|\\\\|;/",'',$list_id_field); +$phone_code_field = preg_replace("/\<|\>|\'|\"|\\\\|;/",'',$phone_code_field); +$phone_number_field = preg_replace("/\<|\>|\'|\"|\\\\|;/",'',$phone_number_field); +$title_field = preg_replace("/\<|\>|\'|\"|\\\\|;/",'',$title_field); +$first_name_field = preg_replace("/\<|\>|\'|\"|\\\\|;/",'',$first_name_field); +$middle_initial_field = preg_replace("/\<|\>|\'|\"|\\\\|;/",'',$middle_initial_field); +$last_name_field = preg_replace("/\<|\>|\'|\"|\\\\|;/",'',$last_name_field); +$address1_field = preg_replace("/\<|\>|\'|\"|\\\\|;/",'',$address1_field); +$address2_field = preg_replace("/\<|\>|\'|\"|\\\\|;/",'',$address2_field); +$address3_field = preg_replace("/\<|\>|\'|\"|\\\\|;/",'',$address3_field); +$city_field = preg_replace("/\<|\>|\'|\"|\\\\|;/",'',$city_field); +$state_field = preg_replace("/\<|\>|\'|\"|\\\\|;/",'',$state_field); +$province_field = preg_replace("/\<|\>|\'|\"|\\\\|;/",'',$province_field); +$postal_code_field = preg_replace("/\<|\>|\'|\"|\\\\|;/",'',$postal_code_field); +$country_code_field = preg_replace("/\<|\>|\'|\"|\\\\|;/",'',$country_code_field); +$gender_field = preg_replace("/\<|\>|\'|\"|\\\\|;/",'',$gender_field); +$date_of_birth_field = preg_replace("/\<|\>|\'|\"|\\\\|;/",'',$date_of_birth_field); +$alt_phone_field = preg_replace("/\<|\>|\'|\"|\\\\|;/",'',$alt_phone_field); +$email_field = preg_replace("/\<|\>|\'|\"|\\\\|;/",'',$email_field); +$security_phrase_field = preg_replace("/\<|\>|\'|\"|\\\\|;/",'',$security_phrase_field); +$comments_field = preg_replace("/\<|\>|\'|\"|\\\\|;/",'',$comments_field); +$rank_field = preg_replace("/\<|\>|\'|\"|\\\\|;/",'',$rank_field); +$owner_field = preg_replace("/\<|\>|\'|\"|\\\\|;/",'',$owner_field); +$submit_file = preg_replace('/[^-_0-9a-zA-Z]/', '', $submit_file); +$submit = preg_replace('/[^-_0-9a-zA-Z]/', '', $submit); +$SUBMIT = preg_replace('/[^-_0-9a-zA-Z]/', '', $SUBMIT); +$file_layout = preg_replace('/[^-_0-9a-zA-Z]/', '', $file_layout); +$OK_to_process = preg_replace('/[^- \_0-9a-zA-Z]/', '', $OK_to_process); +$invalid_phone_override = preg_replace('/[^-_0-9a-zA-Z]/', '', $invalid_phone_override); + +# Variables filter further down in the code +# $dedupe_statuses + +if (strlen($dedupe_statuses_override)>0) + { + $dedupe_statuses_override = preg_replace('/[^- \,\_0-9a-zA-Z]/', '', $dedupe_statuses_override); + $dedupe_statuses=explode(",", $dedupe_statuses_override); + } + +if ($non_latin < 1) + { + $PHP_AUTH_USER = preg_replace('/[^-_0-9a-zA-Z]/', '', $PHP_AUTH_USER); + $PHP_AUTH_PW = preg_replace('/[^-_0-9a-zA-Z]/', '', $PHP_AUTH_PW); + $template_id = preg_replace('/[^-_0-9a-zA-Z]/', '', $template_id); + } +else + { + $PHP_AUTH_USER = preg_replace('/[^-_0-9\p{L}]/u', '', $PHP_AUTH_USER); + $PHP_AUTH_PW = preg_replace('/[^-_0-9\p{L}]/u', '', $PHP_AUTH_PW); + $template_id = preg_replace('/[^-_0-9\p{L}]/u', '', $template_id); + } + +$STARTtime = date("U"); +$TODAY = date("Y-m-d"); +$NOW_TIME = date("Y-m-d H:i:s"); +$FILE_datetime = $STARTtime; +$date = date("r"); +$ip = getenv("REMOTE_ADDR"); +$browser = getenv("HTTP_USER_AGENT"); + +if ($non_latin > 0) {$rslt=mysql_to_mysqli("SET NAMES 'UTF8'", $link);} +$stmt="SELECT selected_language from vicidial_users where user='$PHP_AUTH_USER';"; +if ($DB) {echo "|$stmt|\n";} +$rslt=mysql_to_mysqli($stmt, $link); +$sl_ct = mysqli_num_rows($rslt); +if ($sl_ct > 0) + { + $row=mysqli_fetch_row($rslt); + $VUselected_language = $row[0]; + } + +$auth=0; +$auth_message = user_authorization($PHP_AUTH_USER,$PHP_AUTH_PW,'',1,0); +if ( ($auth_message == 'GOOD') or ($auth_message == '2FA') ) + { + $auth=1; + if ($auth_message == '2FA') + { + header ("Content-type: text/html; charset=utf-8"); + echo _QXZ("Your session is expired").". "._QXZ("Click here to log in").".\n"; + exit; + } + } + +if ($auth < 1) + { + $VDdisplayMESSAGE = _QXZ("Login incorrect, please try again"); + if ($auth_message == 'LOCK') + { + $VDdisplayMESSAGE = _QXZ("Too many login attempts, try again in 15 minutes"); + Header ("Content-type: text/html; charset=utf-8"); + echo "$VDdisplayMESSAGE: |$PHP_AUTH_USER|$auth_message|\n"; + exit; + } + if ($auth_message == 'IPBLOCK') + { + $VDdisplayMESSAGE = _QXZ("Your IP Address is not allowed") . ": $ip"; + Header ("Content-type: text/html; charset=utf-8"); + echo "$VDdisplayMESSAGE: |$PHP_AUTH_USER|$auth_message|\n"; + exit; + } + Header("WWW-Authenticate: Basic realm=\"CONTACT-CENTER-ADMIN\""); + Header("HTTP/1.0 401 Unauthorized"); + echo "$VDdisplayMESSAGE: |$PHP_AUTH_USER|$PHP_AUTH_PW|$auth_message|\n"; + exit; + } + +$stmt="SELECT load_leads,user_group from vicidial_users where user='$PHP_AUTH_USER';"; +$rslt=mysql_to_mysqli($stmt, $link); +$row=mysqli_fetch_row($rslt); +$LOGload_leads = $row[0]; +$LOGuser_group = $row[1]; + +if ($LOGload_leads < 1) + { + Header ("Content-type: text/html; charset=utf-8"); + echo _QXZ("You do not have permissions to load leads")."\n"; + exit; + } + +if (preg_match("/;|:|\/|\^|\[|\]|\"|\'|\*/",$LF_orig)) + { + echo _QXZ("ERROR: Invalid File Name").":: $LF_orig\n"; + exit; + } + +$upload_error = $_FILES['leadfile']['error']; +if ($upload_error != UPLOAD_ERR_OK) + { + if ($upload_error == UPLOAD_ERR_INI_SIZE) + { + $max_upload = ini_get("upload_max_filesize"); + echo "ERROR: The uploaded file exceeds the maximum upload size of $max_upload set for your system."; + } + if ($upload_error == UPLOAD_ERR_FORM_SIZE) + { + echo "ERROR: The uploaded file exceeds the MAX_FILE_SIZE directive for this HTML form."; + } + if ($upload_error == UPLOAD_ERR_PARTIAL) + { + echo "ERROR: The uploaded file was only partially uploaded."; + } + if ($upload_error == UPLOAD_ERR_NO_FILE) + { + echo "ERROR: No file was uploaded."; + } + if ($upload_error == UPLOAD_ERR_NO_TMP_DIR) + { + echo "ERROR: A temporary directory is missing. Review your system configuration."; + } + if ($upload_error == UPLOAD_ERR_CANT_WRITE) + { + echo "ERROR: Failed to write the uploaded file to disk."; + } + if ($upload_error == UPLOAD_ERR_EXTENSION) + { + echo "ERROR: An unknow php extension has stopped the file upload. Review your system configuration."; + } + exit; + } + +$stmt="SELECT allowed_campaigns,allowed_reports,admin_viewable_groups,admin_viewable_call_times from vicidial_user_groups where user_group='$LOGuser_group';"; +if ($DB) {echo "|$upload_error|
\n|$stmt|\n";} +$rslt=mysql_to_mysqli($stmt, $link); +$row=mysqli_fetch_row($rslt); +$LOGallowed_campaigns = $row[0]; +$LOGallowed_reports = $row[1]; +$LOGadmin_viewable_groups = $row[2]; +$LOGadmin_viewable_call_times = $row[3]; + +$camp_lists=''; +$LOGallowed_campaignsSQL=''; +$whereLOGallowed_campaignsSQL=''; +if (!preg_match('/\-ALL/i', $LOGallowed_campaigns)) + { + $rawLOGallowed_campaignsSQL = preg_replace("/ -/",'',$LOGallowed_campaigns); + $rawLOGallowed_campaignsSQL = preg_replace("/ /","','",$rawLOGallowed_campaignsSQL); + $LOGallowed_campaignsSQL = "and campaign_id IN('$rawLOGallowed_campaignsSQL')"; + $whereLOGallowed_campaignsSQL = "where campaign_id IN('$rawLOGallowed_campaignsSQL')"; + } +$regexLOGallowed_campaigns = " $LOGallowed_campaigns "; + +$script_name = getenv("SCRIPT_NAME"); +$server_name = getenv("SERVER_NAME"); +$server_port = getenv("SERVER_PORT"); +if (preg_match("/443/i",$server_port)) {$HTTPprotocol = 'https://';} + else {$HTTPprotocol = 'http://';} +$admDIR = "$HTTPprotocol$server_name$script_name"; +$admDIR = preg_replace('/admin_listloader_fifth_gen\.php/i', '',$admDIR); +$admDIR = "/vicidial/"; +$admSCR = 'admin.php'; +# $NWB = "   \"HELP\""; + +$NWB = "\"HELP\""; +$secX = date("U"); +$hour = date("H"); +$min = date("i"); +$sec = date("s"); +$mon = date("m"); +$mday = date("d"); +$year = date("Y"); +$isdst = date("I"); +$Shour = date("H"); +$Smin = date("i"); +$Ssec = date("s"); +$Smon = date("m"); +$Smday = date("d"); +$Syear = date("Y"); +$pulldate0 = "$year-$mon-$mday $hour:$min:$sec"; +$inSD = $pulldate0; +$dsec = ( ( ($hour * 3600) + ($min * 60) ) + $sec ); + +### Grab Server GMT value from the database +$stmt="SELECT local_gmt FROM servers where server_ip = '$server_ip';"; +$rslt=mysql_to_mysqli($stmt, $link); +$gmt_recs = mysqli_num_rows($rslt); +if ($gmt_recs > 0) + { + $row=mysqli_fetch_row($rslt); + $DBSERVER_GMT = "$row[0]"; + if (strlen($DBSERVER_GMT)>0) {$SERVER_GMT = $DBSERVER_GMT;} + if ($isdst) {$SERVER_GMT++;} + } +else + { + $SERVER_GMT = date("O"); + $SERVER_GMT = preg_replace('/\+/i', '',$SERVER_GMT); + $SERVER_GMT = ($SERVER_GMT + 0); + $SERVER_GMT = MathZDC($SERVER_GMT, 100); + } + +$LOCAL_GMT_OFF = $SERVER_GMT; +$LOCAL_GMT_OFF_STD = $SERVER_GMT; + +$dedupe_status_select=''; +$stmt="SELECT status, status_name from vicidial_statuses order by status;"; +$rslt=mysql_to_mysqli($stmt, $link); +$stat_num_rows = mysqli_num_rows($rslt); +$snr_count=0; +while ($stat_num_rows > $snr_count) + { + $row=mysqli_fetch_row($rslt); + $dedupe_status_select .= "\t\t\t\n"; + $snr_count++; + } + + +$SSmenu_background='015B91'; +$SSframe_background='D9E6FE'; +$SSstd_row1_background='9BB9FB'; +$SSstd_row2_background='B9CBFD'; +$SSstd_row3_background='8EBCFD'; +$SSstd_row4_background='B6D3FC'; +$SSstd_row5_background='A3C3D6'; +$SSalt_row1_background='BDFFBD'; +$SSalt_row2_background='99FF99'; +$SSalt_row3_background='CCFFCC'; + +if ($SSadmin_screen_colors != 'default') + { + $stmt = "SELECT menu_background,frame_background,std_row1_background,std_row2_background,std_row3_background,std_row4_background,std_row5_background,alt_row1_background,alt_row2_background,alt_row3_background FROM vicidial_screen_colors where colors_id='$SSadmin_screen_colors';"; + $rslt=mysql_to_mysqli($stmt, $link); + if ($DB) {echo "$stmt\n";} + $colors_ct = mysqli_num_rows($rslt); + if ($colors_ct > 0) + { + $row=mysqli_fetch_row($rslt); + $SSmenu_background = $row[0]; + $SSframe_background = $row[1]; + $SSstd_row1_background = $row[2]; + $SSstd_row2_background = $row[3]; + $SSstd_row3_background = $row[4]; + $SSstd_row4_background = $row[5]; + $SSstd_row5_background = $row[6]; + $SSalt_row1_background = $row[7]; + $SSalt_row2_background = $row[8]; + $SSalt_row3_background = $row[9]; + } + } +$Mhead_color = $SSstd_row5_background; +$Mmain_bgcolor = $SSmenu_background; +$Mhead_color = $SSstd_row5_background; + +#if ($DB) {print "SEED TIME $secX : $year-$mon-$mday $hour:$min:$sec LOCAL GMT OFFSET NOW: $LOCAL_GMT_OFF\n";} + +header ("Content-type: text/html; charset=utf-8"); + +echo "\n"; +echo "\n"; +echo "\n"; +echo "\n"; +echo ""; +echo "\n"; +echo "\n"; +echo "\n"; + +function macfontfix($fontsize) + { + $browser = getenv("HTTP_USER_AGENT"); + $pctype = explode("(", $browser); + if (preg_match('/Mac/',$pctype[1])) + { + /* Browser is a Mac. If not Netscape 6, raise fonts */ + $blownbrowser = explode('/', $browser); + $ver = explode(' ', $blownbrowser[1]); + $ver = $ver[0]; + if ($ver >= 5.0) return $fontsize; else return ($fontsize+2); + } + else return $fontsize; /* Browser is not a Mac - don't touch fonts */ + } + +echo "\n"; + +?> + + + +<?php echo _QXZ("ADMINISTRATION: Lead Loader"); ?> + + + +"; + + +if ( (preg_match("/NANPA/",$usacan_check)) or (preg_match("/NANPA/",$tz_method)) ) + { + $stmt="SELECT count(*) from vicidial_nanpa_prefix_codes;"; + $rslt=mysql_to_mysqli($stmt, $link); + $row=mysqli_fetch_row($rslt); + $vicidial_nanpa_prefix_codes_count = $row[0]; + if ($vicidial_nanpa_prefix_codes_count < 10) + { + $usacan_check = preg_replace("/NANPA/",'',$usacan_check); + $tz_method = preg_replace("/NANPA/",'',$tz_method); + + echo "NOTICE: NANPA options disabled, NANPA prefix data not loaded: $vicidial_nanpa_prefix_codes_count
\n"; + } + } + +if ( (!$OK_to_process) or ( ($leadfile) and ($file_layout!="standard" && $file_layout!="template") ) ) + { + ?> +
method=post onSubmit="ParseFileName()" enctype="multipart/form-data"> + + + + > + + + + + + + + + + + + + + + + + + + + + + + +0) + { + $available_countries++; + $drop_down_dnc_options.="\t\t\t\t\n"; + } + } + echo "\t\t\n"; + echo "\t\t\t\n"; + echo "\t\t\t\n"; + echo "\t\t\n"; + } +?> + + + + +0) { ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
:
: + () +
: + +
:        
:
:
"._QXZ("DNC Scrub by Country").": $NWB#list_loader-international_dncs$NWE
: + + + +
: + + + +
:
:
:
:
:
" name='submit_file'>        " name='reload_page'>
            -     :     :    
+ + > + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
:
:
:
:
:
:
:
:
+ method=get onSubmit="ParseFileName()" enctype="multipart/form-data"> + + +         :     : +
+



+ document.forms[0].leadfile.disabled=true;document.forms[0].list_id_override.disabled=true;document.forms[0].phone_code_override.disabled=true; document.forms[0].submit_file.disabled=true; document.forms[0].reload_page.disabled=true;"; + flush(); + $total=0; $good=0; $bad=0; $dup=0; $post=0; $moved=0; $Tline=1; $phone_list=''; + + $file=fopen("$lead_file", "r"); + if ($webroot_writable > 0) + { + $stmt_file=fopen("listloader_stmts.txt", "w"); + } + $buffer=fgets($file, 4096); + $tab_count=substr_count($buffer, "\t"); + $pipe_count=substr_count($buffer, "|"); + + if ($tab_count>$pipe_count) {$delimiter="\t"; $delim_name="tab";} else {$delimiter="|"; $delim_name="pipe";} + $field_check=explode($delimiter, $buffer); + + if (count($field_check)>=2) + { + flush(); + $file=fopen("$lead_file", "r"); + print "
"._QXZ("Processing file")."... (s-1)\n"; + + if (count($dedupe_statuses)>0) + { + $statuses_clause=" and status in ("; + $status_dedupe_str=""; + for($ds=0; $ds0) + { + print "

"._QXZ("LIST ID OVERRIDE FOR THIS FILE").": $list_id_override

"; + } + + if (strlen($phone_code_override)>0) + { + print "

"._QXZ("PHONE CODE OVERRIDE FOR THIS FILE").": $phone_code_override

"; + } + if (strlen($dupcheck)>0) + { + print "
"._QXZ("LEAD DUPLICATE CHECK").": $dupcheck
\n"; + } + if (strlen($international_dnc_scrub)>0) + { + print "
"._QXZ("INTERNATIONAL DNC SCRUB").": $international_dnc_scrub
\n"; + } + if (strlen($status_dedupe_str)>0) + { + print "
"._QXZ("OMITTING DUPLICATES AGAINST FOLLOWING STATUSES ONLY").": $status_dedupe_str
\n"; + } + if (strlen($status_mismatch_action)>0) + { + print "
"._QXZ("ACTION FOR DUPLICATE NOT ON STATUS LIST").": $status_mismatch_action
\n"; + } + if (strlen($state_conversion)>9) + { + print "
"._QXZ("CONVERSION OF STATE NAMES TO ABBREVIATIONS ENABLED").": $state_conversion
\n"; + } + if ( (strlen($web_loader_phone_length)>0) and (strlen($web_loader_phone_length)< 3) ) + { + print "
"._QXZ("REQUIRED PHONE NUMBER LENGTH").": $web_loader_phone_length
\n"; + } + if ( (strlen($invalid_phone_override) > 0) and ($invalid_phone_override != 'DISABLED') ) + { + print "
"._QXZ("INVALID PHONE NUMBER REPLACEMENT").": $invalid_phone_override
\n"; + } + if ( (strlen($SSweb_loader_phone_strip)>0) and ($SSweb_loader_phone_strip != 'DISABLED') ) + { + print "
"._QXZ("PHONE NUMBER PREFIX STRIP SYSTEM SETTING ENABLED").": $SSweb_loader_phone_strip
\n"; + } + $multidaySQL=''; + if (preg_match("/30DAY|60DAY|90DAY|180DAY|360DAY/i",$dupcheck)) + { + $day_val=30; + if (preg_match("/30DAY/i",$dupcheck)) {$day_val=30;} + if (preg_match("/60DAY/i",$dupcheck)) {$day_val=60;} + if (preg_match("/90DAY/i",$dupcheck)) {$day_val=90;} + if (preg_match("/180DAY/i",$dupcheck)) {$day_val=180;} + if (preg_match("/360DAY/i",$dupcheck)) {$day_val=360;} + $multiday = date("Y-m-d H:i:s", mktime(date("H"),date("i"),date("s"),date("m"),date("d")-$day_val,date("Y"))); + $multidaySQL = "and entry_date > \"$multiday\""; + if ($DB > 0) {echo "DEBUG: $day_val day SQL: |$multidaySQL|";} + } + + if ($custom_fields_enabled > 0) + { + $tablecount_to_print=0; + $fieldscount_to_print=0; + $fields_to_print=0; + + $stmt="SHOW TABLES LIKE \"custom_$list_id_override\";"; + if ($DB>0) {echo "$stmt\n";} + $rslt=mysql_to_mysqli($stmt, $link); + $tablecount_to_print = mysqli_num_rows($rslt); + + if ($tablecount_to_print > 0) + { + $stmt="SELECT count(*) from vicidial_lists_fields where list_id='$list_id_override' and field_duplicate!='Y';"; + if ($DB>0) {echo "$stmt\n";} + $rslt=mysql_to_mysqli($stmt, $link); + $fieldscount_to_print = mysqli_num_rows($rslt); + + if ($fieldscount_to_print > 0) + { + $stmt="SELECT field_label,field_type,field_encrypt from vicidial_lists_fields where list_id='$list_id_override' and field_duplicate!='Y' order by field_rank,field_order,field_label;"; + if ($DB>0) {echo "$stmt\n";} + $rslt=mysql_to_mysqli($stmt, $link); + $fields_to_print = mysqli_num_rows($rslt); + $fields_list=''; + $o=0; + while ($fields_to_print > $o) + { + $rowx=mysqli_fetch_row($rslt); + $A_field_label[$o] = $rowx[0]; + $A_field_type[$o] = $rowx[1]; + $A_field_encrypt[$o] = $rowx[2]; + $A_field_value[$o] = ''; + $o++; + } + } + } + } + + # If a list is being scrubbed against a country's DNC list, block the list from being dialed and purge any lead from the hopper that belongs to that list. + if (strlen($international_dnc_scrub)>0 && strlen($list_id_override)>0 && $SSenable_international_dncs) + { + $upd_dnc_stmt="update vicidial_settings_containers set container_entry=concat('$list_id_override => $international_dnc_scrub', if(length(container_entry)>0, '\r\n', ''), if(container_entry is null, '', container_entry)) where container_id='DNC_CURRENT_BLOCKED_LISTS'"; + $upd_dnc_rslt=mysql_to_mysqli($upd_dnc_stmt, $link); + + $delete_hopper_stmt="delete from vicidial_hopper where list_id='$list_id_override'"; + $delete_hopper_rslt=mysql_to_mysqli($delete_hopper_stmt, $link); + } + + while (!feof($file)) + { + $record++; + $buffer=rtrim(fgets($file, 4096)); + $buffer=stripslashes($buffer); + + if (strlen($buffer)>0) + { + $row=explode($delimiter, preg_replace('/[\"]/i', '', $buffer)); + + $pulldate=date("Y-m-d H:i:s"); + $entry_date = "$pulldate"; + $modify_date = ""; + $status = "NEW"; + $user =""; + $vendor_lead_code = $row[$vendor_lead_code_field]; + $source_code = $row[$source_id_field]; + $source_id=$source_code; + $list_id = $row[$list_id_field]; + $gmt_offset = '0'; + $called_since_last_reset='N'; + $phone_code = preg_replace('/[^0-9]/i', '', $row[$phone_code_field]); + $phone_number = preg_replace('/[^0-9]/i', '', $row[$phone_number_field]); + $title = $row[$title_field]; + $first_name = $row[$first_name_field]; + $middle_initial = $row[$middle_initial_field]; + $last_name = $row[$last_name_field]; + $address1 = $row[$address1_field]; + $address2 = $row[$address2_field]; + $address3 = $row[$address3_field]; + $city =$row[$city_field]; + $state = $row[$state_field]; + $province = $row[$province_field]; + $postal_code = $row[$postal_code_field]; + $country_code = $row[$country_code_field]; + $gender = $row[$gender_field]; + $date_of_birth = $row[$date_of_birth_field]; + $alt_phone = preg_replace('/[^0-9]/i', '', $row[$alt_phone_field]); + $email = $row[$email_field]; + $security_phrase = $row[$security_phrase_field]; + $comments = trim($row[$comments_field]); + $rank = $row[$rank_field]; + $owner = $row[$owner_field]; + + # replace ' " ` \ ; with nothing + $vendor_lead_code = preg_replace("/$field_regx/i", "", $vendor_lead_code); + $source_code = preg_replace("/$field_regx/i", "", $source_code); + $source_id = preg_replace("/$field_regx/i", "", $source_id); + $list_id = preg_replace("/$field_regx/i", "", $list_id); + $phone_code = preg_replace("/$field_regx/i", "", $phone_code); + $phone_number = preg_replace("/$field_regx/i", "", $phone_number); + $title = preg_replace("/$field_regx/i", "", $title); + $first_name = preg_replace("/$field_regx/i", "", $first_name); + $middle_initial = preg_replace("/$field_regx/i", "", $middle_initial); + $last_name = preg_replace("/$field_regx/i", "", $last_name); + $address1 = preg_replace("/$field_regx/i", "", $address1); + $address2 = preg_replace("/$field_regx/i", "", $address2); + $address3 = preg_replace("/$field_regx/i", "", $address3); + $city = preg_replace("/$field_regx/i", "", $city); + $state = preg_replace("/$field_regx/i", "", $state); + $province = preg_replace("/$field_regx/i", "", $province); + $postal_code = preg_replace("/$field_regx/i", "", $postal_code); + $country_code = preg_replace("/$field_regx/i", "", $country_code); + $gender = preg_replace("/$field_regx/i", "", $gender); + $date_of_birth = preg_replace("/$field_regx/i", "", $date_of_birth); + $alt_phone = preg_replace("/$field_regx/i", "", $alt_phone); + $email = preg_replace("/$field_regx/i", "", $email); + $security_phrase = preg_replace("/$field_regx/i", "", $security_phrase); + $comments = preg_replace("/$field_regx/i", "", $comments); + $rank = preg_replace("/$field_regx/i", "", $rank); + $owner = preg_replace("/$field_regx/i", "", $owner); + + $USarea = substr($phone_number, 0, 3); + $USprefix = substr($phone_number, 3, 3); + + if (strlen($list_id_override)>0) + { + # print "

LIST ID OVERRIDE FOR THIS FILE: $list_id_override

"; + $list_id = $list_id_override; + } + if (strlen($phone_code_override)>0) + { + $phone_code = $phone_code_override; + } + if (strlen($phone_code)<1) {$phone_code = '1';} + + if ( ($state_conversion == 'STATELOOKUP') and (strlen($state) > 3) ) + { + $stmt = "SELECT state from vicidial_phone_codes where geographic_description='$state' and country_code='$phone_code' limit 1;"; + if ($DB>0) {echo "DEBUG: state conversion query - $stmt\n";} + $rslt=mysql_to_mysqli($stmt, $link); + $sc_recs = mysqli_num_rows($rslt); + if ($sc_recs > 0) + { + $row=mysqli_fetch_row($rslt); + $state_abbr=$row[0]; + if ( (strlen($state_abbr) > 0) and (strlen($state_abbr) < 3 ) ) + { + if ($DB>0) {echo "DEBUG: state conversion found - $state|$state_abbr\n";} + $state = $state_abbr; + } + } + } + + ##### BEGIN custom fields columns list ### + $custom_SQL=''; + if ($custom_fields_enabled > 0) + { + if ($tablecount_to_print > 0) + { + if ($fieldscount_to_print > 0) + { + $o=0; + while ($fields_to_print > $o) + { + $A_field_value[$o] = ''; + $field_name_id = $A_field_label[$o] . "_field"; + + # if ($DB>0) {echo "$A_field_label[$o]|$A_field_type[$o]\n";} + + if ( ($A_field_type[$o]!='DISPLAY') and ($A_field_type[$o]!='SCRIPT') and ($A_field_type[$o]!='SWITCH') and ($A_field_type[$o]!='BUTTON') ) + { + if (!preg_match("/\|$A_field_label[$o]\|/",$vicidial_list_fields)) + { + if (isset($_GET["$field_name_id"])) {$form_field_value=$_GET["$field_name_id"];} + elseif (isset($_POST["$field_name_id"])) {$form_field_value=$_POST["$field_name_id"];} + $form_field_value = preg_replace("/\<|\>|\"|\\\\|;/","",$form_field_value); + + if ($form_field_value >= 0) + { + $A_field_value[$o] = $row[$form_field_value]; + # replace ' " ` \ ; with nothing + $A_field_value[$o] = preg_replace("/$field_regx/i", "", $A_field_value[$o]); + + if ( ($A_field_encrypt[$o] == 'Y') and (preg_match("/cf_encrypt/",$SSactive_modules)) and (strlen($A_field_value[$o]) > 0) ) + { + $field_enc=$MT; + $A_field_value[$o] = base64_encode($A_field_value[$o]); + exec("../agc/aes.pl --encrypt --text=$A_field_value[$o]", $field_enc); + $field_enc_ct = count($field_enc); + $k=0; + $field_enc_all=''; + while ($field_enc_ct > $k) + { + $field_enc_all .= $field_enc[$k]; + $k++; + } + $A_field_value[$o] = preg_replace("/CRYPT: |\n|\r|\t/",'',$field_enc_all); + } + + $custom_SQL .= "$A_field_label[$o]=\"$A_field_value[$o]\","; + } + } + } + $o++; + } + } + } + } + ##### END custom fields columns list ### + + $custom_SQL = preg_replace("/,$/","",$custom_SQL); + + $valid_number=1; + $dnc_matches=0; + $dup_lead=0; $moved_lead=0; + $invalid_reason=''; + $replacement_text=''; + + $temp_run = check_lead($DB,$link,$list_id,$phone_number,$alt_phone,$address3,$title); + + if ($DB > 0) {print "
DEBUG1: $temp_run($phone_number)|valid_number: $valid_number|dup_lead: $dup_lead|dnc_matches: $dnc_matches| \n";} + + # check if invalid_phone_override is enabled for alt_phone and run if phone_number is invalid + if (preg_match("/alt_phone/",$invalid_phone_override)) + { + $run_replace_alt_phone=0; + if ( ($valid_number < 1) and (preg_match("/invalid|all/",$invalid_phone_override)) ) + {$run_replace_alt_phone++;} + if ( ($dup_lead > 0) and (preg_match("/duplicate|all/",$invalid_phone_override)) ) + {$run_replace_alt_phone++;} + if ( ($dnc_matches > 0) and (preg_match("/dnc|all/",$invalid_phone_override)) ) + {$run_replace_alt_phone++;} + + if ($run_replace_alt_phone > 0) + { + $temp_phone_number = preg_replace('/[^0-9]/i', '', $alt_phone); + if (strlen($temp_phone_number) > 4) + { + # $invalid_reason .= _QXZ(", CHECKING REPLACEMENT PHONE ALT PHONE $alt_phone"); + $valid_number=1; + $dnc_matches=0; + $dup_lead=0; $moved_lead=0; + $temp_run = check_lead($DB,$link,$list_id,$temp_phone_number,$alt_phone,$address3,$title); + if ( ($valid_number>0) and ($dnc_matches<1) and ($dup_lead<1) ) + { + if ($DB > 0) {print "
REPLACEMENT PHONE ALT PHONE $temp_phone_number($phone_number) \n";} + $replacement_text .= "$invalid_reason " . _QXZ("REPLACEMENT PHONE ALT PHONE")." $temp_phone_number($phone_number)"; + $phone_number = $temp_phone_number; + if (preg_match("/empty/",$invalid_phone_override)) + {$alt_phone='';} + } + } + } + } + + # check if invalid_phone_override is enabled for address3 and run if phone_number is invalid + if (preg_match("/address3/",$invalid_phone_override)) + { + $run_replace_address3=0; + if ( ($valid_number < 1) and (preg_match("/invalid|all/",$invalid_phone_override)) ) + {$run_replace_address3++;} + if ( ($dup_lead > 0) and (preg_match("/duplicate|all/",$invalid_phone_override)) ) + {$run_replace_address3++;} + if ( ($dnc_matches > 0) and (preg_match("/dnc|all/",$invalid_phone_override)) ) + {$run_replace_address3++;} + + if ($run_replace_address3 > 0) + { + $temp_phone_number = preg_replace('/[^0-9]/i', '', $address3); + if (strlen($temp_phone_number) > 4) + { + # $invalid_reason .= _QXZ(", CHECKING REPLACEMENT PHONE ADDRESS3 $address3"); + $valid_number=1; + $dnc_matches=0; + $dup_lead=0; $moved_lead=0; + $temp_run = check_lead($DB,$link,$list_id,$temp_phone_number,$alt_phone,$address3,$title); + if ( ($valid_number>0) and ($dnc_matches<1) and ($dup_lead<1) ) + { + if ($DB > 0) {print "
REPLACEMENT PHONE ADDRESS3 $temp_phone_number($phone_number) \n";} + $replacement_text .= "$invalid_reason " . _QXZ("REPLACEMENT PHONE ADDRESS3")." $temp_phone_number($phone_number)"; + $phone_number = $temp_phone_number; + if (preg_match("/empty/",$invalid_phone_override)) + {$address3='';} + } + } + } + } + + + if ( ($valid_number>0) and ($dnc_matches<1) and ($dup_lead<1) and ($list_id >= 100 )) + { + if (preg_match("/TITLEALTPHONE/i",$dupcheck)) + {$phone_list .= "$alt_phone$title$US$list_id|";} + else + {$phone_list .= "$phone_number$US$list_id|";} + + $gmt_offset = lookup_gmt($phone_code,$USarea,$state,$LOCAL_GMT_OFF_STD,$Shour,$Smin,$Ssec,$Smon,$Smday,$Syear,$postalgmt,$postal_code,$owner,$USprefix); + + if (strlen($custom_SQL)>3) + { + $stmtZ = "INSERT INTO vicidial_list (lead_id,entry_date,modify_date,status,user,vendor_lead_code,source_id,list_id,gmt_offset_now,called_since_last_reset,phone_code,phone_number,title,first_name,middle_initial,last_name,address1,address2,address3,city,state,province,postal_code,country_code,gender,date_of_birth,alt_phone,email,security_phrase,comments,called_count,last_local_call_time,rank,owner,entry_list_id) values('',\"$entry_date\",\"$modify_date\",\"$status\",\"$user\",\"$vendor_lead_code\",\"$source_id\",\"$list_id\",\"$gmt_offset\",\"$called_since_last_reset\",\"$phone_code\",\"$phone_number\",\"$title\",\"$first_name\",\"$middle_initial\",\"$last_name\",\"$address1\",\"$address2\",\"$address3\",\"$city\",\"$state\",\"$province\",\"$postal_code\",\"$country_code\",\"$gender\",\"$date_of_birth\",\"$alt_phone\",\"$email\",\"$security_phrase\",\"$comments\",0,\"2008-01-01 00:00:00\",\"$rank\",\"$owner\",'$list_id');"; + $rslt=mysql_to_mysqli($stmtZ, $link); + $affected_rows = mysqli_affected_rows($link); + $lead_id = mysqli_insert_id($link); + if ($DB > 0) {echo "";} + if ( ($webroot_writable > 0) and ($DB>0) ) + {fwrite($stmt_file, $stmtZ."\r\n");} + $multistmt=''; + + $custom_SQL_query = "INSERT INTO custom_$list_id_override SET lead_id='$lead_id',$custom_SQL;"; + $rslt=mysql_to_mysqli($custom_SQL_query, $link); + $affected_rows = mysqli_affected_rows($link); + if ($DB > 0) {echo "";} + } + else + { + if ($multi_insert_counter > 8) + { + ### insert good record into vicidial_list table ### + $stmtZ = "INSERT INTO vicidial_list (lead_id,entry_date,modify_date,status,user,vendor_lead_code,source_id,list_id,gmt_offset_now,called_since_last_reset,phone_code,phone_number,title,first_name,middle_initial,last_name,address1,address2,address3,city,state,province,postal_code,country_code,gender,date_of_birth,alt_phone,email,security_phrase,comments,called_count,last_local_call_time,rank,owner,entry_list_id) values$multistmt('',\"$entry_date\",\"$modify_date\",\"$status\",\"$user\",\"$vendor_lead_code\",\"$source_id\",\"$list_id\",\"$gmt_offset\",\"$called_since_last_reset\",\"$phone_code\",\"$phone_number\",\"$title\",\"$first_name\",\"$middle_initial\",\"$last_name\",\"$address1\",\"$address2\",\"$address3\",\"$city\",\"$state\",\"$province\",\"$postal_code\",\"$country_code\",\"$gender\",\"$date_of_birth\",\"$alt_phone\",\"$email\",\"$security_phrase\",\"$comments\",0,\"2008-01-01 00:00:00\",\"$rank\",\"$owner\",'0');"; + $rslt=mysql_to_mysqli($stmtZ, $link); + if ( ($webroot_writable > 0) and ($DB>0) ) + {fwrite($stmt_file, $stmtZ."\r\n");} + $multistmt=''; + $multi_insert_counter=0; + } + else + { + $multistmt .= "('',\"$entry_date\",\"$modify_date\",\"$status\",\"$user\",\"$vendor_lead_code\",\"$source_id\",\"$list_id\",\"$gmt_offset\",\"$called_since_last_reset\",\"$phone_code\",\"$phone_number\",\"$title\",\"$first_name\",\"$middle_initial\",\"$last_name\",\"$address1\",\"$address2\",\"$address3\",\"$city\",\"$state\",\"$province\",\"$postal_code\",\"$country_code\",\"$gender\",\"$date_of_birth\",\"$alt_phone\",\"$email\",\"$security_phrase\",\"$comments\",0,\"2008-01-01 00:00:00\",\"$rank\",\"$owner\",'0'),"; + $multi_insert_counter++; + } + } + if (strlen($replacement_text) > 0) {echo "
line $Tline $replacement_text "._QXZ("ROW").": |$row[0]|\n";} + $good++; + } + else + { + if ($bad < 1000000) + { + if ( $list_id < 100 ) + { + print "
"._QXZ("line")." $Tline "._QXZ("BAD- PHONE").": $phone_number "._QXZ("ROW").": |$row[0]| "._QXZ("INVALID LIST ID")."\n"; + } + else + { + if ($valid_number < 1) + { + print "
"._QXZ("line")." $Tline "._QXZ("BAD- PHONE").": $phone_number "._QXZ("ROW").": |$row[0]| "._QXZ("INV").": $phone_number\n"; + } + else if ($dnc_matches > 0) + { + print "
line $Tline "._QXZ("BAD- PHONE").": $phone_number "._QXZ("ROW").": |$row[0]| "._QXZ("DNC")."($invalid_reason): $phone_number\n"; + } + else + { + print "
"._QXZ("line")." $Tline "._QXZ("BAD- PHONE").": $phone_number "._QXZ("ROW").": |$row[0]| "._QXZ("DUP").": $dup_lead $dup_lead_list\n"; + } + if ($moved_lead>0) {print "| Moved $moved_lead leads \n";} + } + } + $bad++; + } + $total++; + $Tline++; + if ($total%100==0) + { + print ""; + usleep(1000); + flush(); + } + } + } + if ($multi_insert_counter!=0) + { + $stmtZ = "INSERT INTO vicidial_list (lead_id,entry_date,modify_date,status,user,vendor_lead_code,source_id,list_id,gmt_offset_now,called_since_last_reset,phone_code,phone_number,title,first_name,middle_initial,last_name,address1,address2,address3,city,state,province,postal_code,country_code,gender,date_of_birth,alt_phone,email,security_phrase,comments,called_count,last_local_call_time,rank,owner,entry_list_id) values".substr($multistmt, 0, -1).";"; + mysql_to_mysqli($stmtZ, $link); + if ( ($webroot_writable > 0) and ($DB>0) ) + {fwrite($stmt_file, $stmtZ."\r\n");} + } + + ### LOG INSERTION Admin Log Table ### + $stmt="INSERT INTO vicidial_admin_log set event_date='$NOW_TIME', user='$PHP_AUTH_USER', ip_address='$ip', event_section='LISTS', event_type='LOAD', record_id='$list_id_override', event_code='ADMIN LOAD LIST CUSTOM', event_sql='', event_notes='File Name: $leadfile_name, GOOD: $good, BAD: $bad, MOVED: $moved, TOTAL: $total, DEBUG: dedupe_statuses:$dedupe_statuses[0]| dedupe_statuses_override:$dedupe_statuses_override| dupcheck:$dupcheck| status mismatch action: $status_mismatch_action| lead_file:$lead_file| list_id_override:$list_id_override| phone_code_override:$phone_code_override| postalgmt:$postalgmt| template_id:$template_id| usacan_check:$usacan_check| dnc_country_scrub:$international_dnc_scrub| state_conversion:$state_conversion| web_loader_phone_length:$web_loader_phone_length| web_loader_phone_strip:$SSweb_loader_phone_strip|';"; + if ($DB) {echo "|$stmt|\n";} + $rslt=mysql_to_mysqli($stmt, $link); + + if ($moved>0) {$moved_str="       "._QXZ("MOVED").": $moved ";} else {$moved_str="";} + + print "

"._QXZ("Done")."
"._QXZ("GOOD").": $good       "._QXZ("BAD").": $bad $moved_str       "._QXZ("TOTAL").": $total
"; + } + else + { + print "
"._QXZ("ERROR").": "._QXZ("The file does not have the required number of fields to process it").".
"; + } + } +##### END custom fields submission ##### + +if (($leadfile) && ($LF_path)) + { + $total=0; $good=0; $bad=0; $dup=0; $post=0; $moved=0; $Tline=1; $phone_list=''; + + ### LOG INSERTION Admin Log Table ### + $stmt="INSERT INTO vicidial_admin_log set event_date='$NOW_TIME', user='$PHP_AUTH_USER', ip_address='$ip', event_section='LISTS', event_type='LOAD', record_id='$list_id_override', event_code='ADMIN LOAD LIST', event_sql='', event_notes='File Name: $leadfile_name, DEBUG: dedupe_statuses:$dedupe_statuses[0]| dedupe_statuses_override:$dedupe_statuses_override| dupcheck:$dupcheck | status mismatch action: $status_mismatch_action| lead_file:$lead_file| list_id_override:$list_id_override| phone_code_override:$phone_code_override| postalgmt:$postalgmt| template_id:$template_id| usacan_check:$usacan_check| dnc_country_scrub:$international_dnc_scrub| state_conversion:$state_conversion| web_loader_phone_length:$web_loader_phone_length| web_loader_phone_strip:$SSweb_loader_phone_strip|';"; + if ($DB) {echo "|$stmt|\n";} + $rslt=mysql_to_mysqli($stmt, $link); + + ##### BEGIN process TEMPLATE file layout ##### + if ($file_layout=="template" && $template_id) + { + + $template_stmt="SELECT * from vicidial_custom_leadloader_templates where template_id='$template_id'"; + $template_rslt=mysql_to_mysqli($template_stmt, $link); + if (mysqli_num_rows($template_rslt)==0) + { + echo _QXZ("Error - template no longer exists"); die; + } + else + { + $template_row=mysqli_fetch_array($template_rslt); + $template_id=$template_row["template_id"]; + $template_name=$template_row["template_name"]; + $template_description=$template_row["template_description"]; + # Added 2/9/2015 to allow dropdown to override template + if (!$master_list_override) { + $list_id_override=$template_row["list_id"]; + } + $standard_variables=$template_row["standard_variables"]; +# $custom_table=$template_row["custom_table"]; + if (!$master_list_override) { + $custom_table=$template_row["custom_table"]; + } + else { + $custom_table= "custom_$list_id_override"; + } + $custom_variables=$template_row["custom_variables"]; + $template_statuses=$template_row["template_statuses"]; + if (strlen($template_statuses)>0) { + $template_statuses=preg_replace('/\|/', "','", $template_statuses); + $statuses_clause=" and status in ('$template_statuses') "; + } else { + $status_mismatch_action=""; + } + + if ($status_mismatch_action) { + $mismatch_clause=" and status NOT in ('$template_statuses') "; + if (preg_match('/RECENT/', $status_mismatch_action)) {$mismatch_limit=" limit 1 ";} else {$mismatch_limit="";} + } + + $standard_fields_ary=explode("|", $standard_variables); + for ($i=0; $i0) + { + $fieldno_ary=explode(",", $standard_fields_ary[$i]); + $varname=$fieldno_ary[0]."_field"; + $$varname=$fieldno_ary[1]; + } + } + $custom_fields_ary=explode("|", $custom_variables); + if (count($custom_fields_ary)>0 && strlen($custom_table)>0) + { + $custom_ins_stmt="INSERT INTO $custom_table("; + for ($i=0; $i0) + { + $fieldno_ary=explode(",", $custom_fields_ary[$i]); + $custom_ins_stmt.="$fieldno_ary[0],"; + $varname=$fieldno_ary[0]."_field"; + $$varname=$fieldno_ary[1]; + } + } + $custom_ins_stmt=substr($custom_ins_stmt, 0, -1).") VALUES ("; + } + } + + print ""; + flush(); + + $delim_set=0; + # csv xls xlsx ods sxc conversion + if (preg_match("/\.csv$|\.xls$|\.xlsx$|\.ods$|\.sxc$/i", $leadfile_name)) + { + $leadfile_name = preg_replace('/[^-\.\_0-9a-zA-Z]/','_',$leadfile_name); + copy($LF_path, "/tmp/$leadfile_name"); + $new_filename = preg_replace("/\.csv$|\.xls$|\.xlsx$|\.ods$|\.sxc$/i", '.txt', $leadfile_name); + $convert_command = "$WeBServeRRooT/$admin_web_directory/sheet2tab.pl /tmp/$leadfile_name /tmp/$new_filename"; + passthru("$convert_command"); + $lead_file = "/tmp/$new_filename"; + if ($DB > 0) {echo "|$convert_command|";} + + if (preg_match("/\.csv$/i", $leadfile_name)) {$delim_name="CSV: "._QXZ("Comma Separated Values");} + if (preg_match("/\.xls$/i", $leadfile_name)) {$delim_name="XLS: MS Excel 2000-XP";} + if (preg_match("/\.xlsx$/i", $leadfile_name)) {$delim_name="XLSX: MS Excel 2007+";} + if (preg_match("/\.ods$/i", $leadfile_name)) {$delim_name="ODS: OpenOffice.org OpenDocument "._QXZ("Spreadsheet");} + if (preg_match("/\.sxc$/i", $leadfile_name)) {$delim_name="SXC: OpenOffice.org "._QXZ("First Spreadsheet");} + $delim_set=1; + } + else + { + copy($LF_path, "/tmp/vicidial_temp_file.txt"); + $lead_file = "/tmp/vicidial_temp_file.txt"; + } + $file=fopen("$lead_file", "r"); + if ($webroot_writable > 0) + {$stmt_file=fopen("$WeBServeRRooT/$admin_web_directory/listloader_stmts.txt", "w");} + + $buffer=fgets($file, 4096); + $tab_count=substr_count($buffer, "\t"); + $pipe_count=substr_count($buffer, "|"); + + if ($delim_set < 1) + { + if ($tab_count>$pipe_count) + {$delim_name=_QXZ("tab-delimited");} + else + {$delim_name=_QXZ("pipe-delimited");} + } + if ($tab_count>$pipe_count) + {$delimiter="\t";} + else + {$delimiter="|";} + + $field_check=explode($delimiter, $buffer); + + if (count($field_check)>=2) + { + flush(); + $file=fopen("$lead_file", "r"); + $total=0; $good=0; $bad=0; $dup=0; $post=0; $moved=0; $Tline=1; $phone_list=''; + print "
"._QXZ("Processing")." $delim_name "._QXZ("file using template")." $template_id... ($tab_count|$pipe_count) (s-2)\n"; + if (strlen($list_id_override)>0) + { + print "
"._QXZ("LIST ID OVERRIDE FOR THIS FILE").": $list_id_override
"; + } + if (strlen($phone_code_override)>0) + { + print "
"._QXZ("PHONE CODE OVERRIDE FOR THIS FILE").": $phone_code_override
\n"; + } + if (strlen($dupcheck)>0) + { + print "
"._QXZ("LEAD DUPLICATE CHECK").": $dupcheck
\n"; + } + if (strlen($international_dnc_scrub)>0) + { + print "
"._QXZ("INTERNATIONAL DNC SCRUB").": $international_dnc_scrub
\n"; + } + if (strlen($template_statuses)>0) + { + print "
"._QXZ("OMITTING DUPLICATES AGAINST FOLLOWING STATUSES ONLY").": ".preg_replace('/\'/', '', $template_statuses)."
\n"; + } + if (strlen($status_mismatch_action)>0) + { + print "
"._QXZ("ACTION FOR DUPLICATE NOT ON STATUS LIST").": $status_mismatch_action
\n"; + } + if (strlen($state_conversion)>9) + { + print "
"._QXZ("CONVERSION OF STATE NAMES TO ABBREVIATIONS ENABLED").": $state_conversion
\n"; + } + if ( (strlen($web_loader_phone_length)>0) and (strlen($web_loader_phone_length)< 3) ) + { + print "
"._QXZ("REQUIRED PHONE NUMBER LENGTH").": $web_loader_phone_length
\n"; + } + if ( (strlen($invalid_phone_override) > 0) and ($invalid_phone_override != 'DISABLED') ) + { + print "
"._QXZ("INVALID PHONE NUMBER REPLACEMENT").": $invalid_phone_override
\n"; + } + if ( (strlen($SSweb_loader_phone_strip)>0) and ($SSweb_loader_phone_strip != 'DISABLED') ) + { + print "
"._QXZ("PHONE NUMBER PREFIX STRIP SYSTEM SETTING ENABLED").": $SSweb_loader_phone_strip
\n"; + } + $multidaySQL=''; + if (preg_match("/30DAY|60DAY|90DAY|180DAY|360DAY/i",$dupcheck)) + { + $day_val=30; + if (preg_match("/30DAY/i",$dupcheck)) {$day_val=30;} + if (preg_match("/60DAY/i",$dupcheck)) {$day_val=60;} + if (preg_match("/90DAY/i",$dupcheck)) {$day_val=90;} + if (preg_match("/180DAY/i",$dupcheck)) {$day_val=180;} + if (preg_match("/360DAY/i",$dupcheck)) {$day_val=360;} + $multiday = date("Y-m-d H:i:s", mktime(date("H"),date("i"),date("s"),date("m"),date("d")-$day_val,date("Y"))); + $multidaySQL = "and entry_date > \"$multiday\""; + if ($DB > 0) {echo "DEBUG: $day_val day SQL: |$multidaySQL|";} + } + + # If a list is being scrubbed against a country's DNC list, block the list from being dialed and purge any lead from the hopper that belongs to that list. + if (strlen($international_dnc_scrub)>0 && strlen($list_id_override)>0 && $SSenable_international_dncs) + { + $upd_dnc_stmt="update vicidial_settings_containers set container_entry=concat('$list_id_override => $international_dnc_scrub', if(length(container_entry)>0, '\r\n', ''), if(container_entry is null, '', container_entry)) where container_id='DNC_CURRENT_BLOCKED_LISTS'"; + $upd_dnc_rslt=mysql_to_mysqli($upd_dnc_stmt, $link); + + $delete_hopper_stmt="delete from vicidial_hopper where list_id='$list_id_override'"; + $delete_hopper_rslt=mysql_to_mysqli($delete_hopper_stmt, $link); + } + + + while (!feof($file)) + { + $record++; + $buffer=rtrim(fgets($file, 4096)); + $buffer=stripslashes($buffer); + + if (strlen($buffer)>0) + { + $row=explode($delimiter, preg_replace('/[\"]/i', '', $buffer)); + $custom_fields_row=$row; + $pulldate=date("Y-m-d H:i:s"); + $entry_date = "$pulldate"; + $modify_date = ""; + $status = "NEW"; + $user =""; + $vendor_lead_code = $row[$vendor_lead_code_field]; + $source_code = $row[$source_id_field]; + $source_id=$source_code; + $list_id = $row[$list_id_field]; + # Added 2/9/2015 to allow dropdown to override template + if ($master_list_override) { + $list_id=$list_id_override; + } + $gmt_offset = '0'; + $called_since_last_reset='N'; + $phone_code = preg_replace('/[^0-9]/i', '', $row[$phone_code_field]); + $phone_number = preg_replace('/[^0-9]/i', '', $row[$phone_number_field]); + $title = $row[$title_field]; + $first_name = $row[$first_name_field]; + $middle_initial = $row[$middle_initial_field]; + $last_name = $row[$last_name_field]; + $address1 = $row[$address1_field]; + $address2 = $row[$address2_field]; + $address3 = $row[$address3_field]; + $city =$row[$city_field]; + $state = $row[$state_field]; + $province = $row[$province_field]; + $postal_code = $row[$postal_code_field]; + $country_code = $row[$country_code_field]; + $gender = $row[$gender_field]; + $date_of_birth = $row[$date_of_birth_field]; + $alt_phone = preg_replace('/[^0-9]/i', '', $row[$alt_phone_field]); + $email = $row[$email_field]; + $security_phrase = $row[$security_phrase_field]; + $comments = trim($row[$comments_field]); + $rank = $row[$rank_field]; + $owner = $row[$owner_field]; + + # replace ' " ` \ ; with nothing + $vendor_lead_code = preg_replace("/$field_regx/i", "", $vendor_lead_code); + $source_code = preg_replace("/$field_regx/i", "", $source_code); + $source_id = preg_replace("/$field_regx/i", "", $source_id); + $list_id = preg_replace("/$field_regx/i", "", $list_id); + $phone_code = preg_replace("/$field_regx/i", "", $phone_code); + $phone_number = preg_replace("/$field_regx/i", "", $phone_number); + $title = preg_replace("/$field_regx/i", "", $title); + $first_name = preg_replace("/$field_regx/i", "", $first_name); + $middle_initial = preg_replace("/$field_regx/i", "", $middle_initial); + $last_name = preg_replace("/$field_regx/i", "", $last_name); + $address1 = preg_replace("/$field_regx/i", "", $address1); + $address2 = preg_replace("/$field_regx/i", "", $address2); + $address3 = preg_replace("/$field_regx/i", "", $address3); + $city = preg_replace("/$field_regx/i", "", $city); + $state = preg_replace("/$field_regx/i", "", $state); + $province = preg_replace("/$field_regx/i", "", $province); + $postal_code = preg_replace("/$field_regx/i", "", $postal_code); + $country_code = preg_replace("/$field_regx/i", "", $country_code); + $gender = preg_replace("/$field_regx/i", "", $gender); + $date_of_birth = preg_replace("/$field_regx/i", "", $date_of_birth); + $alt_phone = preg_replace("/$field_regx/i", "", $alt_phone); + $email = preg_replace("/$field_regx/i", "", $email); + $security_phrase = preg_replace("/$field_regx/i", "", $security_phrase); + $comments = preg_replace("/$field_regx/i", "", $comments); + $rank = preg_replace("/$field_regx/i", "", $rank); + $owner = preg_replace("/$field_regx/i", "", $owner); + + $USarea = substr($phone_number, 0, 3); + $USprefix = substr($phone_number, 3, 3); + + if (strlen($list_id_override)>0) + { + $list_id = $list_id_override; + } + if (strlen($phone_code_override)>0) + { + $phone_code = $phone_code_override; + } + if (strlen($phone_code)<1) {$phone_code = '1';} + + if ( ($state_conversion == 'STATELOOKUP') and (strlen($state) > 3) ) + { + $stmt = "SELECT state from vicidial_phone_codes where geographic_description='$state' and country_code='$phone_code' limit 1;"; + if ($DB>0) {echo "DEBUG: state conversion query - $stmt\n";} + $rslt=mysql_to_mysqli($stmt, $link); + $sc_recs = mysqli_num_rows($rslt); + if ($sc_recs > 0) + { + $row=mysqli_fetch_row($rslt); + $state_abbr=$row[0]; + if ( (strlen($state_abbr) > 0) and (strlen($state_abbr) < 3 ) ) + { + if ($DB>0) {echo "DEBUG: state conversion found - $state|$state_abbr\n";} + $state = $state_abbr; + } + } + } + + $valid_number=1; + $dnc_matches=0; + $dup_lead=0; $moved_lead=0; + $invalid_reason=''; + $replacement_text=''; + + $temp_run = check_lead($DB,$link,$list_id,$phone_number,$alt_phone,$address3,$title); + + if ($DB > 0) {print "
DEBUG1: $temp_run($phone_number)|valid_number: $valid_number|dup_lead: $dup_lead|dnc_matches: $dnc_matches| \n";} + + # check if invalid_phone_override is enabled for alt_phone and run if phone_number is invalid + if (preg_match("/alt_phone/",$invalid_phone_override)) + { + $run_replace_alt_phone=0; + if ( ($valid_number < 1) and (preg_match("/invalid|all/",$invalid_phone_override)) ) + {$run_replace_alt_phone++;} + if ( ($dup_lead > 0) and (preg_match("/duplicate|all/",$invalid_phone_override)) ) + {$run_replace_alt_phone++;} + if ( ($dnc_matches > 0) and (preg_match("/dnc|all/",$invalid_phone_override)) ) + {$run_replace_alt_phone++;} + + if ($run_replace_alt_phone > 0) + { + $temp_phone_number = preg_replace('/[^0-9]/i', '', $alt_phone); + if (strlen($temp_phone_number) > 4) + { + # $invalid_reason .= _QXZ(", CHECKING REPLACEMENT PHONE ALT PHONE $alt_phone"); + $valid_number=1; + $dnc_matches=0; + $dup_lead=0; $moved_lead=0; + $temp_run = check_lead($DB,$link,$list_id,$temp_phone_number,$alt_phone,$address3,$title); + if ( ($valid_number>0) and ($dnc_matches<1) and ($dup_lead<1) ) + { + if ($DB > 0) {print "
REPLACEMENT PHONE ALT PHONE $temp_phone_number($phone_number) \n";} + $replacement_text .= "$invalid_reason " . _QXZ("REPLACEMENT PHONE ALT PHONE")." $temp_phone_number($phone_number)"; + $phone_number = $temp_phone_number; + if (preg_match("/empty/",$invalid_phone_override)) + {$alt_phone='';} + } + } + } + } + + # check if invalid_phone_override is enabled for address3 and run if phone_number is invalid + if (preg_match("/address3/",$invalid_phone_override)) + { + $run_replace_address3=0; + if ( ($valid_number < 1) and (preg_match("/invalid|all/",$invalid_phone_override)) ) + {$run_replace_address3++;} + if ( ($dup_lead > 0) and (preg_match("/duplicate|all/",$invalid_phone_override)) ) + {$run_replace_address3++;} + if ( ($dnc_matches > 0) and (preg_match("/dnc|all/",$invalid_phone_override)) ) + {$run_replace_address3++;} + + if ($run_replace_address3 > 0) + { + $temp_phone_number = preg_replace('/[^0-9]/i', '', $address3); + if (strlen($temp_phone_number) > 4) + { + # $invalid_reason .= _QXZ(", CHECKING REPLACEMENT PHONE ADDRESS3 $address3"); + $valid_number=1; + $dnc_matches=0; + $dup_lead=0; $moved_lead=0; + $temp_run = check_lead($DB,$link,$list_id,$temp_phone_number,$alt_phone,$address3,$title); + if ( ($valid_number>0) and ($dnc_matches<1) and ($dup_lead<1) ) + { + if ($DB > 0) {print "
REPLACEMENT PHONE ADDRESS3 $temp_phone_number($phone_number) \n";} + $replacement_text .= "$invalid_reason " . _QXZ("REPLACEMENT PHONE ADDRESS3")." $temp_phone_number($phone_number)"; + $phone_number = $temp_phone_number; + if (preg_match("/empty/",$invalid_phone_override)) + {$address3='';} + } + } + } + } + + + if ( ($valid_number>0) and ($dnc_matches<1) and ($dup_lead<1) and ($list_id >= 100 )) + { + if (preg_match("/TITLEALTPHONE/i",$dupcheck)) + {$phone_list .= "$alt_phone$title$US$list_id|";} + else + {$phone_list .= "$phone_number$US$list_id|";} + + $gmt_offset = lookup_gmt($phone_code,$USarea,$state,$LOCAL_GMT_OFF_STD,$Shour,$Smin,$Ssec,$Smon,$Smday,$Syear,$postalgmt,$postal_code,$owner,$USprefix); + +/* if ($multi_insert_counter > 8) +# { + ### insert good deal into pending_transactions table ### + $stmtZ = "INSERT INTO vicidial_list (lead_id,entry_date,modify_date,status,user,vendor_lead_code,source_id,list_id,gmt_offset_now,called_since_last_reset,phone_code,phone_number,title,first_name,middle_initial,last_name,address1,address2,address3,city,state,province,postal_code,country_code,gender,date_of_birth,alt_phone,email,security_phrase,comments,called_count,last_local_call_time,rank,owner,entry_list_id) values$multistmt('','$entry_date','$modify_date','$status','$user','$vendor_lead_code','$source_id','$list_id','$gmt_offset','$called_since_last_reset','$phone_code','$phone_number','$title','$first_name','$middle_initial','$last_name','$address1','$address2','$address3','$city','$state','$province','$postal_code','$country_code','$gender','$date_of_birth','$alt_phone','$email','$security_phrase','$comments',0,'2008-01-01 00:00:00','$rank','$owner','0');"; + $rslt=mysql_to_mysqli($stmtZ, $link); + if ( ($webroot_writable > 0) and ($DB>0) ) + {fwrite($stmt_file, $stmtZ."\r\n");} + $multistmt=''; */ + $multi_insert_counter=0; + $stmtZ = "INSERT INTO vicidial_list (lead_id,entry_date,modify_date,status,user,vendor_lead_code,source_id,list_id,gmt_offset_now,called_since_last_reset,phone_code,phone_number,title,first_name,middle_initial,last_name,address1,address2,address3,city,state,province,postal_code,country_code,gender,date_of_birth,alt_phone,email,security_phrase,comments,called_count,last_local_call_time,rank,owner,entry_list_id) values('',\"$entry_date\",\"$modify_date\",\"$status\",\"$user\",\"$vendor_lead_code\",\"$source_id\",\"$list_id\",\"$gmt_offset\",\"$called_since_last_reset\",\"$phone_code\",\"$phone_number\",\"$title\",\"$first_name\",\"$middle_initial\",\"$last_name\",\"$address1\",\"$address2\",\"$address3\",\"$city\",\"$state\",\"$province\",\"$postal_code\",\"$country_code\",\"$gender\",\"$date_of_birth\",\"$alt_phone\",\"$email\",\"$security_phrase\",\"$comments\",0,\"2008-01-01 00:00:00\",\"$rank\",\"$owner\",'$list_id');"; + $rslt=mysql_to_mysqli($stmtZ, $link); + $affected_rows = mysqli_affected_rows($link); + $lead_id = mysqli_insert_id($link); + if ($DB > 0) {echo "";} + if ( ($webroot_writable > 0) and ($DB>0) ) + {fwrite($stmt_file, $stmtZ."\r\n");} + $multistmt=''; + + #$custom_SQL_query = "INSERT INTO custom_$list_id_override SET lead_id='$lead_id',$custom_SQL;"; + #$rslt=mysql_to_mysqli($custom_SQL_query, $link); + #$affected_rows = mysqli_affected_rows($link); + + $custom_ins_stmt="INSERT INTO $custom_table(lead_id"; + $custom_SQL_values=""; + for ($q=0; $q0) + { + $fieldno_ary=explode(",", $custom_fields_ary[$q]); + $varname=$fieldno_ary[0]."_field"; + $$varname=$fieldno_ary[1]; + $custom_ins_stmt.=",$fieldno_ary[0]"; + + if ( (preg_match("/cf_encrypt/",$SSactive_modules)) and (strlen($custom_fields_row[$$varname]) > 0) ) + { + $field_encrypt='N'; + $stmt = "SELECT field_encrypt from vicidial_lists_fields where list_id='$list_id' and field_label='$fieldno_ary[0]' limit 1;"; + if ($DB>0) {echo "DEBUG: cf_encrypt query - $stmt\n";} + $rslt=mysql_to_mysqli($stmt, $link); + $sc_recs = mysqli_num_rows($rslt); + if ($sc_recs > 0) + { + $row=mysqli_fetch_row($rslt); + $field_encrypt = $row[0]; + } + if ($field_encrypt == 'Y') + { + $field_enc=$MT; + $field_value = $custom_fields_row[$$varname]; + $field_value = base64_encode($field_value); + exec("../agc/aes.pl --encrypt --text=$field_value", $field_enc); + $field_enc_ct = count($field_enc); + $k=0; + $field_enc_all=''; + while ($field_enc_ct > $k) + { + $field_enc_all .= $field_enc[$k]; + $k++; + } + $custom_fields_row[$$varname] = preg_replace("/CRYPT: |\n|\r|\t/",'',$field_enc_all); + } + } + + $custom_SQL_values.=",\"".$custom_fields_row[$$varname]."\""; + } + } + $custom_ins_stmt.=") VALUES('$lead_id'$custom_SQL_values)"; + $custom_rslt=mysql_to_mysqli($custom_ins_stmt, $link); + $affected_rows = mysqli_affected_rows($link); + echo "\n"; + if ( ($webroot_writable > 0) and ($DB>0) ) + {fwrite($stmt_file, $custom_ins_stmt."\r\n");} +/* + } + else + { + $multistmt .= "('','$entry_date','$modify_date','$status','$user','$vendor_lead_code','$source_id','$list_id','$gmt_offset','$called_since_last_reset','$phone_code','$phone_number','$title','$first_name','$middle_initial','$last_name','$address1','$address2','$address3','$city','$state','$province','$postal_code','$country_code','$gender','$date_of_birth','$alt_phone','$email','$security_phrase','$comments',0,'2008-01-01 00:00:00','$rank','$owner','0'),"; + + $custom_multistmt.="("; + for ($q=0; $q0) + { + $custom_fieldno_ary=explode(",", $custom_fields_ary[$q]); + $varname=$custom_fieldno_ary[0]; + $$varname=$row[$custom_fieldno_ary[1]]; + $custom_multistmt.="'".$$varname."',"; + } + } + $custom_multistmt=substr($custom_multistmt, 0, -1)."),"; + $multi_insert_counter++; + } */ + if (strlen($replacement_text) > 0) {echo "
line $Tline $replacement_text "._QXZ("ROW").": |$row[0]|\n";} + $good++; + } + else + { + if ($bad < 1000000) + { + if ( $list_id < 100 ) + { + print "
"._QXZ("line")." $Tline "._QXZ("BAD- PHONE").": $phone_number "._QXZ("ROW").":|$row[0]| "._QXZ("INVALID LIST ID")."\n"; + } + else + { + if ($valid_number < 1) + { + print "
"._QXZ("line")." $Tline "._QXZ("BAD- PHONE").": $phone_number "._QXZ("ROW").":|$row[0]| "._QXZ("INV").": $phone_number\n"; + } + else if ($dnc_matches > 0) + { + print "
line $Tline "._QXZ("BAD- PHONE").": $phone_number "._QXZ("ROW").": |$row[0]| "._QXZ("DNC")."($invalid_reason): $phone_number\n"; + } + else + { + print "
"._QXZ("line")." $Tline "._QXZ("BAD- PHONE").": $phone_number "._QXZ("ROW").":|$row[0] | "._QXZ("DUP").": $dup_lead $dup_lead_list\n"; + } + if ($moved_lead>0) {print "| Moved $moved_lead leads \n";} + } + } + $bad++; + } + $total++; + $Tline++; + if ($total%100==0) + { + print ""; + usleep(1000); + flush(); + } + } + } + if ($multi_insert_counter!=0) + { + $stmtZ = "INSERT INTO vicidial_list (lead_id,entry_date,modify_date,status,user,vendor_lead_code,source_id,list_id,gmt_offset_now,called_since_last_reset,phone_code,phone_number,title,first_name,middle_initial,last_name,address1,address2,address3,city,state,province,postal_code,country_code,gender,date_of_birth,alt_phone,email,security_phrase,comments,called_count,last_local_call_time,rank,owner,entry_list_id) values".substr($multistmt, 0, -1).";"; + mysql_to_mysqli($stmtZ, $link); + if ( ($webroot_writable > 0) and ($DB>0) ) + {fwrite($stmt_file, $stmtZ."\r\n");} + + $custom_ins_stmt="INSERT INTO $custom_table("; + for ($q=0; $q0) + { + $fieldno_ary=explode(",", $custom_fields_ary[$q]); + $custom_ins_stmt.="$fieldno_ary[0],"; + $varname=$fieldno_ary[0]."_field"; + $$varname=$fieldno_ary[1]; + } + } + $custom_ins_stmt=substr($custom_ins_stmt, 0, -1).") VALUES".substr($custom_multistmt, 0, -1); + mysql_to_mysqli($custom_ins_stmt, $link); + if ( ($webroot_writable > 0) and ($DB>0) ) + {fwrite($stmt_file, $custom_ins_stmt."\r\n");} + } + ### LOG INSERTION Admin Log Table ### + $stmt="INSERT INTO vicidial_admin_log set event_date='$NOW_TIME', user='$PHP_AUTH_USER', ip_address='$ip', event_section='LISTS', event_type='LOAD', record_id='$list_id_override', event_code='ADMIN LOAD LIST STANDARD', event_sql='', event_notes='File Name: $leadfile_name, GOOD: $good, BAD: $bad, MOVED: $moved, TOTAL: $total, DEBUG: dedupe_statuses:$dedupe_statuses[0]| dedupe_statuses_override:$dedupe_statuses_override| dupcheck:$dupcheck| status mismatch action: $status_mismatch_action| lead_file:$lead_file| list_id_override:$list_id_override| phone_code_override:$phone_code_override| postalgmt:$postalgmt| template_id:$template_id| usacan_check:$usacan_check| dnc_country_scrub:$international_dnc_scrub| state_conversion:$state_conversion| web_loader_phone_length:$web_loader_phone_length| web_loader_phone_strip:$SSweb_loader_phone_strip|';"; + if ($DB) {echo "|$stmt|\n";} + $rslt=mysql_to_mysqli($stmt, $link); + + if ($moved>0) {$moved_str="       "._QXZ("MOVED").": $moved ";} else {$moved_str="";} + + print "

"._QXZ("Done")."
"._QXZ("GOOD").": $good       "._QXZ("BAD").": $bad $moved_str       "._QXZ("TOTAL").": $total
"; + } + else + { + print "
"._QXZ("ERROR: The file does not have the required number of fields to process it").".
"; + } + + } + + ##### BEGIN process standard file layout ##### + if ($file_layout=="standard") + { + print ""; + flush(); + + + $delim_set=0; + # csv xls xlsx ods sxc conversion + if (preg_match("/\.csv$|\.xls$|\.xlsx$|\.ods$|\.sxc$/i", $leadfile_name)) + { + $leadfile_name = preg_replace('/[^-\.\_0-9a-zA-Z]/','_',$leadfile_name); + copy($LF_path, "/tmp/$leadfile_name"); + $new_filename = preg_replace("/\.csv$|\.xls$|\.xlsx$|\.ods$|\.sxc$/i", '.txt', $leadfile_name); + $convert_command = "$WeBServeRRooT/$admin_web_directory/sheet2tab.pl /tmp/$leadfile_name /tmp/$new_filename"; + passthru("$convert_command"); + $lead_file = "/tmp/$new_filename"; + if ($DB > 0) {echo "|$convert_command|";} + + if (preg_match("/\.csv$/i", $leadfile_name)) {$delim_name="CSV: "._QXZ("Comma Separated Values");} + if (preg_match("/\.xls$/i", $leadfile_name)) {$delim_name="XLS: MS Excel 2000-XP";} + if (preg_match("/\.xlsx$/i", $leadfile_name)) {$delim_name="XLSX: MS Excel 2007+";} + if (preg_match("/\.ods$/i", $leadfile_name)) {$delim_name="ODS: OpenOffice.org OpenDocument "._QXZ("Spreadsheet");} + if (preg_match("/\.sxc$/i", $leadfile_name)) {$delim_name="SXC: OpenOffice.org "._QXZ("First Spreadsheet");} + $delim_set=1; + } + else + { + copy($LF_path, "/tmp/vicidial_temp_file.txt"); + $lead_file = "/tmp/vicidial_temp_file.txt"; + } + $file=fopen("$lead_file", "r"); + if ($webroot_writable > 0) + {$stmt_file=fopen("$WeBServeRRooT/$admin_web_directory/listloader_stmts.txt", "w");} + + $buffer=fgets($file, 4096); + $tab_count=substr_count($buffer, "\t"); + $pipe_count=substr_count($buffer, "|"); + + if ($delim_set < 1) + { + if ($tab_count>$pipe_count) + {$delim_name=_QXZ("tab-delimited");} + else + {$delim_name=_QXZ("pipe-delimited");} + } + if ($tab_count>$pipe_count) + {$delimiter="\t";} + else + {$delimiter="|";} + + $field_check=explode($delimiter, $buffer); + + if (count($field_check)>=2) + { + flush(); + $file=fopen("$lead_file", "r"); + $total=0; $good=0; $bad=0; $dup=0; $post=0; $moved=0; $Tline=1; $phone_list=''; + print "
"._QXZ("Processing")." $delim_name "._QXZ("file")."... ($tab_count|$pipe_count) (s-3)\n"; + + if (count($dedupe_statuses)>0) { + $statuses_clause=" and status in ("; + $status_dedupe_str=""; + for($ds=0; $ds0) + { + print "

"._QXZ("LIST ID OVERRIDE FOR THIS FILE").": $list_id_override

"; + } + if (strlen($phone_code_override)>0) + { + print "

"._QXZ("PHONE CODE OVERRIDE FOR THIS FILE").": $phone_code_override

\n"; + } + if (strlen($dupcheck)>0) + { + print "
"._QXZ("LEAD DUPLICATE CHECK").": $dupcheck
\n"; + } + if (strlen($international_dnc_scrub)>0) + { + print "
"._QXZ("INTERNATIONAL DNC SCRUB").": $international_dnc_scrub
\n"; + } + if (strlen($status_dedupe_str)>0) + { + print "
"._QXZ("OMITTING DUPLICATES AGAINST FOLLOWING STATUSES ONLY").": $status_dedupe_str
\n"; + } + if (strlen($status_mismatch_action)>0) + { + print "
"._QXZ("ACTION FOR DUPLICATE NOT ON STATUS LIST").": $status_mismatch_action
\n"; + } + if (strlen($state_conversion)>9) + { + print "
"._QXZ("CONVERSION OF STATE NAMES TO ABBREVIATIONS ENABLED").": $state_conversion
\n"; + } + if ( (strlen($web_loader_phone_length)>0) and (strlen($web_loader_phone_length)< 3) ) + { + print "
"._QXZ("REQUIRED PHONE NUMBER LENGTH").": $web_loader_phone_length
\n"; + } + if ( (strlen($invalid_phone_override) > 0) and ($invalid_phone_override != 'DISABLED') ) + { + print "
"._QXZ("INVALID PHONE NUMBER REPLACEMENT").": $invalid_phone_override
\n"; + } + if ( (strlen($SSweb_loader_phone_strip)>0) and ($SSweb_loader_phone_strip != 'DISABLED') ) + { + print "
"._QXZ("PHONE NUMBER PREFIX STRIP SYSTEM SETTING ENABLED").": $SSweb_loader_phone_strip
\n"; + } + $multidaySQL=''; + if (preg_match("/30DAY|60DAY|90DAY|180DAY|360DAY/i",$dupcheck)) + { + $day_val=30; + if (preg_match("/30DAY/i",$dupcheck)) {$day_val=30;} + if (preg_match("/60DAY/i",$dupcheck)) {$day_val=60;} + if (preg_match("/90DAY/i",$dupcheck)) {$day_val=90;} + if (preg_match("/180DAY/i",$dupcheck)) {$day_val=180;} + if (preg_match("/360DAY/i",$dupcheck)) {$day_val=360;} + $multiday = date("Y-m-d H:i:s", mktime(date("H"),date("i"),date("s"),date("m"),date("d")-$day_val,date("Y"))); + $multidaySQL = "and entry_date > \"$multiday\""; + if ($DB > 0) {echo "DEBUG: $day_val day SQL: |$multidaySQL|";} + } + + # If a list is being scrubbed against a country's DNC list, block the list from being dialed and purge any lead from the hopper that belongs to that list. + if (strlen($international_dnc_scrub)>0 && strlen($list_id_override)>0 && $SSenable_international_dncs) + { + $upd_dnc_stmt="update vicidial_settings_containers set container_entry=concat('$list_id_override => $international_dnc_scrub', if(length(container_entry)>0, '\r\n', ''), if(container_entry is null, '', container_entry)) where container_id='DNC_CURRENT_BLOCKED_LISTS'"; + $upd_dnc_rslt=mysql_to_mysqli($upd_dnc_stmt, $link); + + $delete_hopper_stmt="delete from vicidial_hopper where list_id='$list_id_override'"; + $delete_hopper_rslt=mysql_to_mysqli($delete_hopper_stmt, $link); + } + + while (!feof($file)) + { + $record++; + $buffer=rtrim(fgets($file, 4096)); + $buffer=stripslashes($buffer); + + if (strlen($buffer)>0) + { + $row=explode($delimiter, preg_replace('/[\"]/i', '', $buffer)); + + $pulldate=date("Y-m-d H:i:s"); + $entry_date = "$pulldate"; + $modify_date = ""; + $status = "NEW"; + $user =""; + $vendor_lead_code = $row[0]; + $source_code = $row[1]; + $source_id=$source_code; + $list_id = $row[2]; + $gmt_offset = '0'; + $called_since_last_reset='N'; + $phone_code = preg_replace('/[^0-9]/i', '', $row[3]); + $phone_number = preg_replace('/[^0-9]/i', '', $row[4]); + $title = $row[5]; + $first_name = $row[6]; + $middle_initial = $row[7]; + $last_name = $row[8]; + $address1 = $row[9]; + $address2 = $row[10]; + $address3 = $row[11]; + $city =$row[12]; + $state = $row[13]; + $province = $row[14]; + $postal_code = $row[15]; + $country_code = $row[16]; + $gender = $row[17]; + $date_of_birth = $row[18]; + $alt_phone = preg_replace('/[^0-9]/i', '', $row[19]); + $email = $row[20]; + $security_phrase = $row[21]; + $comments = trim($row[22]); + $rank = $row[23]; + $owner = $row[24]; + + # replace ' " ` \ ; with nothing + $vendor_lead_code = preg_replace("/$field_regx/i", "", $vendor_lead_code); + $source_code = preg_replace("/$field_regx/i", "", $source_code); + $source_id = preg_replace("/$field_regx/i", "", $source_id); + $list_id = preg_replace("/$field_regx/i", "", $list_id); + $phone_code = preg_replace("/$field_regx/i", "", $phone_code); + $phone_number = preg_replace("/$field_regx/i", "", $phone_number); + $title = preg_replace("/$field_regx/i", "", $title); + $first_name = preg_replace("/$field_regx/i", "", $first_name); + $middle_initial = preg_replace("/$field_regx/i", "", $middle_initial); + $last_name = preg_replace("/$field_regx/i", "", $last_name); + $address1 = preg_replace("/$field_regx/i", "", $address1); + $address2 = preg_replace("/$field_regx/i", "", $address2); + $address3 = preg_replace("/$field_regx/i", "", $address3); + $city = preg_replace("/$field_regx/i", "", $city); + $state = preg_replace("/$field_regx/i", "", $state); + $province = preg_replace("/$field_regx/i", "", $province); + $postal_code = preg_replace("/$field_regx/i", "", $postal_code); + $country_code = preg_replace("/$field_regx/i", "", $country_code); + $gender = preg_replace("/$field_regx/i", "", $gender); + $date_of_birth = preg_replace("/$field_regx/i", "", $date_of_birth); + $alt_phone = preg_replace("/$field_regx/i", "", $alt_phone); + $email = preg_replace("/$field_regx/i", "", $email); + $security_phrase = preg_replace("/$field_regx/i", "", $security_phrase); + $comments = preg_replace("/$field_regx/i", "", $comments); + $rank = preg_replace("/$field_regx/i", "", $rank); + $owner = preg_replace("/$field_regx/i", "", $owner); + + $USarea = substr($phone_number, 0, 3); + $USprefix = substr($phone_number, 3, 3); + + if (strlen($list_id_override)>0) + { + $list_id = $list_id_override; + } + if (strlen($phone_code_override)>0) + { + $phone_code = $phone_code_override; + } + if (strlen($phone_code)<1) {$phone_code = '1';} + + if ( ($state_conversion == 'STATELOOKUP') and (strlen($state) > 3) ) + { + $stmt = "SELECT state from vicidial_phone_codes where geographic_description='$state' and country_code='$phone_code' limit 1;"; + if ($DB>0) {echo "DEBUG: state conversion query - $stmt\n";} + $rslt=mysql_to_mysqli($stmt, $link); + $sc_recs = mysqli_num_rows($rslt); + if ($sc_recs > 0) + { + $row=mysqli_fetch_row($rslt); + $state_abbr=$row[0]; + if ( (strlen($state_abbr) > 0) and (strlen($state_abbr) < 3 ) ) + { + if ($DB>0) {echo "DEBUG: state conversion found - $state|$state_abbr\n";} + $state = $state_abbr; + } + } + } + + $valid_number=1; + $dnc_matches=0; + $dup_lead=0; $moved_lead=0; + $invalid_reason=''; + $replacement_text=''; + + $temp_run = check_lead($DB,$link,$list_id,$phone_number,$alt_phone,$address3,$title); + + if ($DB > 0) {print "
DEBUG1: $temp_run($phone_number)|valid_number: $valid_number|dup_lead: $dup_lead|dnc_matches: $dnc_matches| \n";} + + # check if invalid_phone_override is enabled for alt_phone and run if phone_number is invalid + if (preg_match("/alt_phone/",$invalid_phone_override)) + { + $run_replace_alt_phone=0; + if ( ($valid_number < 1) and (preg_match("/invalid|all/",$invalid_phone_override)) ) + {$run_replace_alt_phone++;} + if ( ($dup_lead > 0) and (preg_match("/duplicate|all/",$invalid_phone_override)) ) + {$run_replace_alt_phone++;} + if ( ($dnc_matches > 0) and (preg_match("/dnc|all/",$invalid_phone_override)) ) + {$run_replace_alt_phone++;} + + if ($run_replace_alt_phone > 0) + { + $temp_phone_number = preg_replace('/[^0-9]/i', '', $alt_phone); + if (strlen($temp_phone_number) > 4) + { + # $invalid_reason .= _QXZ(", CHECKING REPLACEMENT PHONE ALT PHONE $alt_phone"); + $valid_number=1; + $dnc_matches=0; + $dup_lead=0; $moved_lead=0; + $temp_run = check_lead($DB,$link,$list_id,$temp_phone_number,$alt_phone,$address3,$title); + if ( ($valid_number>0) and ($dnc_matches<1) and ($dup_lead<1) ) + { + if ($DB > 0) {print "
REPLACEMENT PHONE ALT PHONE $temp_phone_number($phone_number) \n";} + $replacement_text .= "$invalid_reason " . _QXZ("REPLACEMENT PHONE ALT PHONE")." $temp_phone_number($phone_number)"; + $phone_number = $temp_phone_number; + if (preg_match("/empty/",$invalid_phone_override)) + {$alt_phone='';} + } + } + } + } + + # check if invalid_phone_override is enabled for address3 and run if phone_number is invalid + if (preg_match("/address3/",$invalid_phone_override)) + { + $run_replace_address3=0; + if ( ($valid_number < 1) and (preg_match("/invalid|all/",$invalid_phone_override)) ) + {$run_replace_address3++;} + if ( ($dup_lead > 0) and (preg_match("/duplicate|all/",$invalid_phone_override)) ) + {$run_replace_address3++;} + if ( ($dnc_matches > 0) and (preg_match("/dnc|all/",$invalid_phone_override)) ) + {$run_replace_address3++;} + + if ($run_replace_address3 > 0) + { + $temp_phone_number = preg_replace('/[^0-9]/i', '', $address3); + if (strlen($temp_phone_number) > 4) + { + # $invalid_reason .= _QXZ(", CHECKING REPLACEMENT PHONE ADDRESS3 $address3"); + $valid_number=1; + $dnc_matches=0; + $dup_lead=0; $moved_lead=0; + $temp_run = check_lead($DB,$link,$list_id,$temp_phone_number,$alt_phone,$address3,$title); + if ( ($valid_number>0) and ($dnc_matches<1) and ($dup_lead<1) ) + { + if ($DB > 0) {print "
REPLACEMENT PHONE ADDRESS3 $temp_phone_number($phone_number) \n";} + $replacement_text .= "$invalid_reason " . _QXZ("REPLACEMENT PHONE ADDRESS3")." $temp_phone_number($phone_number)"; + $phone_number = $temp_phone_number; + if (preg_match("/empty/",$invalid_phone_override)) + {$address3='';} + } + } + } + } + + + if ( ($valid_number>0) and ($dnc_matches<1) and ($dup_lead<1) and ($list_id >= 100 )) + { + if (preg_match("/TITLEALTPHONE/i",$dupcheck)) + {$phone_list .= "$alt_phone$title$US$list_id|";} + else + {$phone_list .= "$phone_number$US$list_id|";} + + $gmt_offset = lookup_gmt($phone_code,$USarea,$state,$LOCAL_GMT_OFF_STD,$Shour,$Smin,$Ssec,$Smon,$Smday,$Syear,$postalgmt,$postal_code,$owner,$USprefix); + + if ($multi_insert_counter > 8) + { + ### insert good deal into pending_transactions table ### + $stmtZ = "INSERT INTO vicidial_list (lead_id,entry_date,modify_date,status,user,vendor_lead_code,source_id,list_id,gmt_offset_now,called_since_last_reset,phone_code,phone_number,title,first_name,middle_initial,last_name,address1,address2,address3,city,state,province,postal_code,country_code,gender,date_of_birth,alt_phone,email,security_phrase,comments,called_count,last_local_call_time,rank,owner,entry_list_id) values$multistmt('',\"$entry_date\",\"$modify_date\",\"$status\",\"$user\",\"$vendor_lead_code\",\"$source_id\",\"$list_id\",\"$gmt_offset\",\"$called_since_last_reset\",\"$phone_code\",\"$phone_number\",\"$title\",\"$first_name\",\"$middle_initial\",\"$last_name\",\"$address1\",\"$address2\",\"$address3\",\"$city\",\"$state\",\"$province\",\"$postal_code\",\"$country_code\",\"$gender\",\"$date_of_birth\",\"$alt_phone\",\"$email\",\"$security_phrase\",\"$comments\",0,\"2008-01-01 00:00:00\",\"$rank\",\"$owner\",'0');"; + $rslt=mysql_to_mysqli($stmtZ, $link); + if ( ($webroot_writable > 0) and ($DB>0) ) + {fwrite($stmt_file, $stmtZ."\r\n");} + $multistmt=''; + $multi_insert_counter=0; + } + else + { + $multistmt .= "('',\"$entry_date\",\"$modify_date\",\"$status\",\"$user\",\"$vendor_lead_code\",\"$source_id\",\"$list_id\",\"$gmt_offset\",\"$called_since_last_reset\",\"$phone_code\",\"$phone_number\",\"$title\",\"$first_name\",\"$middle_initial\",\"$last_name\",\"$address1\",\"$address2\",\"$address3\",\"$city\",\"$state\",\"$province\",\"$postal_code\",\"$country_code\",\"$gender\",\"$date_of_birth\",\"$alt_phone\",\"$email\",\"$security_phrase\",\"$comments\",0,\"2008-01-01 00:00:00\",\"$rank\",\"$owner\",'0'),"; + $multi_insert_counter++; + } + if (strlen($replacement_text) > 0) {echo "
line $Tline $replacement_text "._QXZ("ROW").": |$row[0]|\n";} + $good++; + } + else + { + if ($bad < 1000000) + { + if ( $list_id < 100 ) + { + print "
line $Tline "._QXZ("BAD- PHONE").": $phone_number "._QXZ("ROW").": |$row[0]| "._QXZ("INVALID LIST ID")."\n"; + } + else + { + if ($valid_number < 1) + { + print "
line $Tline "._QXZ("BAD- PHONE").": $phone_number "._QXZ("ROW").": |$row[0]| "._QXZ("INV")."($invalid_reason): $phone_number\n"; + } + else if ($dnc_matches > 0) + { + print "
line $Tline "._QXZ("BAD- PHONE").": $phone_number "._QXZ("ROW").": |$row[0]| "._QXZ("DNC")."($invalid_reason): $phone_number\n"; + } + else + { + print "
line $Tline "._QXZ("BAD- PHONE").": $phone_number "._QXZ("ROW").": |$row[0]| "._QXZ("DUP").": $dup_lead $dup_lead_list\n"; + } + if ($moved_lead>0) {print "| Moved $moved_lead leads \n";} + } + } + $bad++; + } + $total++; + $Tline++; + if ($total%100==0) + { + print ""; + usleep(1000); + flush(); + } + } + } + if ($multi_insert_counter!=0) + { + $stmtZ = "INSERT INTO vicidial_list (lead_id,entry_date,modify_date,status,user,vendor_lead_code,source_id,list_id,gmt_offset_now,called_since_last_reset,phone_code,phone_number,title,first_name,middle_initial,last_name,address1,address2,address3,city,state,province,postal_code,country_code,gender,date_of_birth,alt_phone,email,security_phrase,comments,called_count,last_local_call_time,rank,owner,entry_list_id) values".substr($multistmt, 0, -1).";"; + mysql_to_mysqli($stmtZ, $link); + if ( ($webroot_writable > 0) and ($DB>0) ) + {fwrite($stmt_file, $stmtZ."\r\n");} + } + ### LOG INSERTION Admin Log Table ### + $stmt="INSERT INTO vicidial_admin_log set event_date='$NOW_TIME', user='$PHP_AUTH_USER', ip_address='$ip', event_section='LISTS', event_type='LOAD', record_id='$list_id_override', event_code='ADMIN LOAD LIST STANDARD', event_sql='', event_notes='File Name: $leadfile_name, GOOD: $good, BAD: $bad, MOVED: $moved, TOTAL: $total, DEBUG: dedupe_statuses:$dedupe_statuses[0]| dedupe_statuses_override:$dedupe_statuses_override| dupcheck:$dupcheck| status mismatch action: $status_mismatch_action| lead_file:$lead_file| list_id_override:$list_id_override| phone_code_override:$phone_code_override| postalgmt:$postalgmt| template_id:$template_id| usacan_check:$usacan_check| dnc_country_scrub:$international_dnc_scrub| state_conversion:$state_conversion| web_loader_phone_length:$web_loader_phone_length| web_loader_phone_strip:$SSweb_loader_phone_strip|';"; + if ($DB) {echo "|$stmt|\n";} + $rslt=mysql_to_mysqli($stmt, $link); + + if ($moved>0) {$moved_str="       "._QXZ("MOVED").": $moved ";} else {$moved_str="";} + + print "

"._QXZ("Done")."
"._QXZ("GOOD").": $good       "._QXZ("BAD").": $bad $moved_str       "._QXZ("TOTAL").": $total
"; + } + else + { + print "
"._QXZ("ERROR: The file does not have the required number of fields to process it").".
"; + } + } + ##### END process standard file layout ##### + + + ##### BEGIN field chooser ##### + else if ($file_layout=="custom") + { + print "
"; + flush(); + print "\r\n"; + print " \r\n"; + print " \r\n"; + print " \r\n"; + print " \r\n"; + + $fields_stmt = "SELECT vendor_lead_code, source_id, list_id, phone_code, phone_number, title, first_name, middle_initial, last_name, address1, address2, address3, city, state, province, postal_code, country_code, gender, date_of_birth, alt_phone, email, security_phrase, comments, rank, owner from vicidial_list limit 1"; + + ##### BEGIN custom fields columns list ### + if ($custom_fields_enabled > 0) + { + $stmt="SHOW TABLES LIKE \"custom_$list_id_override\";"; + if ($DB>0) {echo "$stmt\n";} + $rslt=mysql_to_mysqli($stmt, $link); + $tablecount_to_print = mysqli_num_rows($rslt); + if ($tablecount_to_print > 0) + { + $stmt="SELECT count(*) from vicidial_lists_fields where list_id='$list_id_override' and field_duplicate!='Y';"; + if ($DB>0) {echo "$stmt\n";} + $rslt=mysql_to_mysqli($stmt, $link); + $fieldscount_to_print = mysqli_num_rows($rslt); + if ($fieldscount_to_print > 0) + { + $rowx=mysqli_fetch_row($rslt); + $custom_records_count = $rowx[0]; + + $custom_SQL=''; + $stmt="SELECT field_id,field_label,field_name,field_description,field_rank,field_help,field_type,field_options,field_size,field_max,field_default,field_cost,field_required,multi_position,name_position,field_order,field_encrypt from vicidial_lists_fields where list_id='$list_id_override' and field_duplicate!='Y' order by field_rank,field_order,field_label;"; + if ($DB>0) {echo "$stmt\n";} + $rslt=mysql_to_mysqli($stmt, $link); + $fields_to_print = mysqli_num_rows($rslt); + $fields_list=''; + $o=0; + while ($fields_to_print > $o) + { + $rowx=mysqli_fetch_row($rslt); + $A_field_label[$o] = $rowx[1]; + $A_field_type[$o] = $rowx[6]; + $A_field_encrypt[$o] = $rowx[16]; + + if ($DB>0) {echo "$A_field_label[$o]|$A_field_type[$o]\n";} + + if ( ($A_field_type[$o]!='DISPLAY') and ($A_field_type[$o]!='SCRIPT') and ($A_field_type[$o]!='SWITCH') and ($A_field_type[$o]!='BUTTON') ) + { + if (!preg_match("/\|$A_field_label[$o]\|/",$vicidial_list_fields)) + { + $custom_SQL .= ",$A_field_label[$o]"; + } + } + $o++; + } + + $fields_stmt = "SELECT vendor_lead_code, source_id, list_id, phone_code, phone_number, title, first_name, middle_initial, last_name, address1, address2, address3, city, state, province, postal_code, country_code, gender, date_of_birth, alt_phone, email, security_phrase, comments, rank, owner $custom_SQL from vicidial_list, custom_$list_id_override limit 1"; + + } + } + } + ##### END custom fields columns list ### + + if ($DB>0) {echo "$fields_stmt\n";} + $rslt=mysql_to_mysqli("$fields_stmt", $link); + + # csv xls xlsx ods sxc conversion + $delim_set=0; + if (preg_match("/\.csv$|\.xls$|\.xlsx$|\.ods$|\.sxc$/i", $leadfile_name)) + { + $leadfile_name = preg_replace('/[^-\.\_0-9a-zA-Z]/','_',$leadfile_name); + copy($LF_path, "/tmp/$leadfile_name"); + $new_filename = preg_replace("/\.csv$|\.xls$|\.xlsx$|\.ods$|\.sxc$/i", '.txt', $leadfile_name); + $convert_command = "$WeBServeRRooT/$admin_web_directory/sheet2tab.pl /tmp/$leadfile_name /tmp/$new_filename"; + passthru("$convert_command"); + $lead_file = "/tmp/$new_filename"; + if ($DB > 0) {echo "|$convert_command|";} + + if (preg_match("/\.csv$/i", $leadfile_name)) {$delim_name="CSV: "._QXZ("Comma Separated Values");} + if (preg_match("/\.xls$/i", $leadfile_name)) {$delim_name="XLS: MS Excel 2000-XP";} + if (preg_match("/\.xlsx$/i", $leadfile_name)) {$delim_name="XLSX: MS Excel 2007+";} + if (preg_match("/\.ods$/i", $leadfile_name)) {$delim_name="ODS: OpenOffice.org OpenDocument "._QXZ("Spreadsheet");} + if (preg_match("/\.sxc$/i", $leadfile_name)) {$delim_name="SXC: OpenOffice.org "._QXZ("First Spreadsheet");} + $delim_set=1; + } + else + { + copy($LF_path, "/tmp/vicidial_temp_file.txt"); + $lead_file = "/tmp/vicidial_temp_file.txt"; + } + $file=fopen("$lead_file", "r"); + if ($webroot_writable > 0) + {$stmt_file=fopen("$WeBServeRRooT/$admin_web_directory/listloader_stmts.txt", "w");} + + $buffer=fgets($file, 4096); + $tab_count=substr_count($buffer, "\t"); + $pipe_count=substr_count($buffer, "|"); + + if ($delim_set < 1) + { + if ($tab_count>$pipe_count) + {$delim_name=_QXZ("tab-delimited");} + else + {$delim_name=_QXZ("pipe-delimited");} + } + if ($tab_count>$pipe_count) + {$delimiter="\t";} + else + {$delimiter="|";} + + $field_check=explode($delimiter, $buffer); + + if (count($dedupe_statuses)>0) { + $status_dedupe_str=""; + for($ds=0; $ds"._QXZ("Processing")." $delim_name "._QXZ("file")."...\n"; + + if (strlen($list_id_override)>0) + { + print "

"._QXZ("LIST ID OVERRIDE FOR THIS FILE").": $list_id_override

"; + } + if (strlen($phone_code_override)>0) + { + print "

"._QXZ("PHONE CODE OVERRIDE FOR THIS FILE").": $phone_code_override

"; + } + if (strlen($dupcheck)>0) + { + print "
"._QXZ("LEAD DUPLICATE CHECK").": $dupcheck
\n"; + } + if (strlen($international_dnc_scrub)>0) + { + print "
"._QXZ("INTERNATIONAL DNC SCRUB").": $international_dnc_scrub
\n"; + } + if (strlen($status_dedupe_str)>0) + { + print "
"._QXZ("OMITTING DUPLICATES AGAINST FOLLOWING STATUSES ONLY").": $status_dedupe_str
\n"; + } + if (strlen($status_mismatch_action)>0) + { + print "
"._QXZ("ACTION FOR DUPLICATE NOT ON STATUS LIST").": $status_mismatch_action
\n"; + } + if (strlen($state_conversion)>9) + { + print "
"._QXZ("CONVERSION OF STATE NAMES TO ABBREVIATIONS ENABLED").": $state_conversion
\n"; + } + if ( (strlen($web_loader_phone_length)>0) and (strlen($web_loader_phone_length)< 3) ) + { + print "
"._QXZ("REQUIRED PHONE NUMBER LENGTH").": $web_loader_phone_length
\n"; + } + if ( (strlen($invalid_phone_override) > 0) and ($invalid_phone_override != 'DISABLED') ) + { + print "
"._QXZ("INVALID PHONE NUMBER REPLACEMENT").": $invalid_phone_override
\n"; + } + if ( (strlen($SSweb_loader_phone_strip)>0) and ($SSweb_loader_phone_strip != 'DISABLED') ) + { + print "
"._QXZ("PHONE NUMBER PREFIX STRIP SYSTEM SETTING ENABLED").": $SSweb_loader_phone_strip
\n"; + } + + $buffer=rtrim(fgets($file, 4096)); + $buffer=stripslashes($buffer); + $row=explode($delimiter, preg_replace('/[\"]/i', '', $buffer)); + + while ($fieldinfo=mysqli_fetch_field($rslt)) + { + $rslt_field_name=$fieldinfo->name; + if ( ($rslt_field_name=="list_id" and $list_id_override!="") or ($rslt_field_name=="phone_code" and $phone_code_override!="") ) + { + print "\n"; + } + else + { + print "
\r\n"; + print " \r\n"; + print " \r\n"; + print " \r\n"; + } + } + print " \r\n"; + print " \r\n"; + print " \r\n"; + print " \r\n"; + print " \r\n"; + print " \r\n"; + print " \r\n"; + print " \r\n"; + print " \r\n"; + print " \r\n"; + print " \r\n"; + print " \r\n"; + print " \r\n"; + print " \r\n"; + print " \r\n"; + print " \r\n"; + print "
"._QXZ("VICIDIAL Column").""._QXZ("File data")."
".strtoupper(preg_replace('/_/i', ' ', $rslt_field_name)).":
        
\r\n"; + + print ""; + } + ##### END field chooser ##### + + } + +?> + + + + + 0) + { + $row=mysqli_fetch_row($rslt); + $dup_camp = $row[0]; + + $stmt="SELECT list_id from vicidial_lists where campaign_id='$dup_camp';"; + $rslt=mysql_to_mysqli($stmt, $link); + $li_recs = mysqli_num_rows($rslt); + if ($li_recs > 0) + { + $L=0; + while ($li_recs > $L) + { + $row=mysqli_fetch_row($rslt); + $dup_lists .= "'$row[0]',"; + $L++; + } + $dup_lists = preg_replace('/,$/i', '',$dup_lists); + + if ($status_mismatch_action) + { + if (preg_match('/USING CHECK/', $status_mismatch_action)) + { + $stmt="SELECT list_id, lead_id from vicidial_list where phone_number='$phone_number' and list_id IN($dup_lists) $multidaySQL $mismatch_clause order by entry_date desc $mismatch_limit"; + } + else + { + $stmt="SELECT list_id, lead_id from vicidial_list where phone_number='$phone_number' $mismatch_clause order by entry_date desc $mismatch_limit"; + } + if ($DB>0) {print $stmt."
";} + $rslt=mysql_to_mysqli($stmt, $link); + while ($row=mysqli_fetch_row($rslt)) # switch to upd_row if problem + { + $upd_stmt="update vicidial_list set list_id='$list_id' where lead_id='$row[1]'"; + if ($DB>0) {print $upd_stmt."
";} + $upd_rslt=mysql_to_mysqli($upd_stmt, $link); + $moved+=mysqli_affected_rows($link); + $moved_lead+=mysqli_affected_rows($link); + $dup_lead=1; + $dup_lead_list = $row[0]; + } + } + + + if ($dup_lead < 1) + { + $stmt="SELECT list_id from vicidial_list where phone_number='$phone_number' and list_id IN($dup_lists) $multidaySQL $statuses_clause limit 1;"; + $rslt=mysql_to_mysqli($stmt, $link); + $pc_recs = mysqli_num_rows($rslt); + if ($pc_recs > 0) + { + $dup_lead=1; + $row=mysqli_fetch_row($rslt); + $dup_lead_list = $row[0]; + } + } + if ($dup_lead < 1) + { + if (preg_match("/$phone_number$US$list_id/i", $phone_list)) + {$dup_lead++; $dup++;} + } + } + } + } + + ##### Check for duplicate phone numbers in vicidial_list table entire database ##### + if (preg_match("/DUPSYS/i",$dupcheck)) + { + $dup_lead=0; $moved_lead=0; + + if ($status_mismatch_action) + { + if (preg_match('/USING CHECK/', $status_mismatch_action)) + { + $stmt="SELECT list_id, lead_id from vicidial_list where phone_number='$phone_number' $multidaySQL $mismatch_clause order by entry_date desc $mismatch_limit"; + } + else + { + $stmt="SELECT list_id, lead_id from vicidial_list where phone_number='$phone_number' $mismatch_clause order by entry_date desc $mismatch_limit"; + } + + if ($DB>0) {print $stmt."
";} + $rslt=mysql_to_mysqli($stmt, $link); + while ($row=mysqli_fetch_row($rslt)) # switch to upd_row if problem + { + $upd_stmt="update vicidial_list set list_id='$list_id' where lead_id='$row[1]'"; + if ($DB>0) {print $upd_stmt."
";} + $upd_rslt=mysql_to_mysqli($upd_stmt, $link); + $moved+=mysqli_affected_rows($link); + $moved_lead+=mysqli_affected_rows($link); + $dup_lead=1; + $dup_lead_list = $row[0]; + } + } + + + if ($dup_lead < 1) + { + $stmt="SELECT list_id from vicidial_list where phone_number='$phone_number' $multidaySQL $statuses_clause;"; + $rslt=mysql_to_mysqli($stmt, $link); + $pc_recs = mysqli_num_rows($rslt); + if ($pc_recs > 0) + { + $dup_lead=1; + $row=mysqli_fetch_row($rslt); + $dup_lead_list = $row[0]; + } + } + + if ($dup_lead < 1) + { + if (preg_match("/$phone_number$US$list_id/i", $phone_list)) + {$dup_lead++; $dup++;} + } + if ($dup_lead > 0) + { + $invalid_reason .= " "._QXZ("DUP"); + } + } + + ##### Check for duplicate phone numbers in vicidial_list table for one list_id ##### + if (preg_match("/DUPLIST/i",$dupcheck)) + { + $dup_lead=0; $moved_lead=0; + + if ($status_mismatch_action) + { + if (preg_match('/USING CHECK/', $status_mismatch_action)) + { + $stmt="SELECT list_id, lead_id from vicidial_list where phone_number='$phone_number' and list_id='$list_id' $multidaySQL $mismatch_clause order by entry_date desc $mismatch_limit"; + } + else + { + $stmt="SELECT list_id, lead_id from vicidial_list where phone_number='$phone_number' $mismatch_clause order by entry_date desc $mismatch_limit"; + } + if ($DB>0) {print $stmt."
";} + $rslt=mysql_to_mysqli($stmt, $link); + while ($row=mysqli_fetch_row($rslt)) # switch to upd_row if problem + { + $upd_stmt="update vicidial_list set list_id='$list_id' where lead_id='$row[1]'"; + if ($DB>0) {print $upd_stmt."
";} + $upd_rslt=mysql_to_mysqli($upd_stmt, $link); + $moved+=mysqli_affected_rows($link); + $moved_lead+=mysqli_affected_rows($link); + $dup_lead=1; + $dup_lead_list = $row[0]; + } + } + + if ($dup_lead < 1) + { + $stmt="SELECT count(*) from vicidial_list where phone_number='$phone_number' and list_id='$list_id' $multidaySQL $statuses_clause;"; + $rslt=mysql_to_mysqli($stmt, $link); + $pc_recs = mysqli_num_rows($rslt); + if ($pc_recs > 0) + { + $row=mysqli_fetch_row($rslt); + $dup_lead = $row[0]; + $dup_lead_list = $list_id; + } + } + + if ($dup_lead < 1) + { + if (preg_match("/$phone_number$US$list_id/i", $phone_list)) + {$dup_lead++; $dup++;} + } + if ($dup_lead > 0) + { + $invalid_reason .= " "._QXZ("DUP"); + } + } + + ##### Check for duplicate title and alt-phone in vicidial_list table for one list_id ##### + if (preg_match("/DUPTITLEALTPHONELIST/i",$dupcheck)) + { + $dup_lead=0; $moved_lead=0; + + if ($status_mismatch_action) + { + if (preg_match('/USING CHECK/', $status_mismatch_action)) + { + $stmt="SELECT list_id, lead_id from vicidial_list where title='$title' and alt_phone='$alt_phone' and list_id='$list_id' $multidaySQL $mismatch_clause order by entry_date desc $mismatch_limit"; + } + else + { + $stmt="SELECT list_id, lead_id from vicidial_list where title='$title' and alt_phone='$alt_phone' $mismatch_clause order by entry_date desc $mismatch_limit"; + } + if ($DB>0) {print $stmt."
";} + $rslt=mysql_to_mysqli($stmt, $link); + while ($row=mysqli_fetch_row($rslt)) # switch to upd_row if problem + { + $upd_stmt="update vicidial_list set list_id='$list_id' where lead_id='$row[1]'"; + if ($DB>0) {print $upd_stmt."
";} + $upd_rslt=mysql_to_mysqli($upd_stmt, $link); + $moved+=mysqli_affected_rows($link); + $moved_lead+=mysqli_affected_rows($link); + $dup_lead=1; + $dup_lead_list = $row[0]; + } + } + + if ($dup_lead < 1) + { + $stmt="SELECT count(*) from vicidial_list where title='$title' and alt_phone='$alt_phone' and list_id='$list_id' $multidaySQL $statuses_clause;"; + $rslt=mysql_to_mysqli($stmt, $link); + $pc_recs = mysqli_num_rows($rslt); + if ($pc_recs > 0) + { + $row=mysqli_fetch_row($rslt); + $dup_lead = $row[0]; + $dup_lead_list = $list_id; + } + } + + if ($dup_lead < 1) + { + if (preg_match("/$alt_phone$title$US$list_id/i",$phone_list)) + {$dup_lead++; $dup++;} + } + if ($dup_lead > 0) + { + $invalid_reason .= " "._QXZ("DUP"); + } + } + + ##### Check for duplicate phone numbers in vicidial_list table entire database ##### + if (preg_match("/DUPTITLEALTPHONESYS/i",$dupcheck)) + { + $dup_lead=0; $moved_lead=0; + + if ($status_mismatch_action) + { + if (preg_match('/USING CHECK/', $status_mismatch_action)) + { + $stmt="SELECT list_id, lead_id from vicidial_list where title='$title' and alt_phone='$alt_phone' $multidaySQL $mismatch_clause order by entry_date desc $mismatch_limit"; + } + else + { + $stmt="SELECT list_id, lead_id from vicidial_list where title='$title' and alt_phone='$alt_phone' $mismatch_clause order by entry_date desc $mismatch_limit"; + } + if ($DB>0) {print $stmt."
";} + $rslt=mysql_to_mysqli($stmt, $link); + while ($row=mysqli_fetch_row($rslt)) # switch to upd_row if problem + { + $upd_stmt="update vicidial_list set list_id='$list_id' where lead_id='$row[1]'"; + if ($DB>0) {print $upd_stmt."
";} + $upd_rslt=mysql_to_mysqli($upd_stmt, $link); + $moved+=mysqli_affected_rows($link); + $moved_lead+=mysqli_affected_rows($link); + $dup_lead=1; + $dup_lead_list = $row[0]; + } + } + + if ($dup_lead < 1) + { + $stmt="SELECT list_id from vicidial_list where title='$title' and alt_phone='$alt_phone' $multidaySQL $statuses_clause;"; + $rslt=mysql_to_mysqli($stmt, $link); + $pc_recs = mysqli_num_rows($rslt); + if ($pc_recs > 0) + { + $dup_lead=1; + $row=mysqli_fetch_row($rslt); + $dup_lead_list = $row[0]; + } + } + + if ($dup_lead < 1) + { + if (preg_match("/$alt_phone$title$US$list_id/i",$phone_list)) + {$dup_lead++; $dup++;} + } + if ($dup_lead > 0) + { + $invalid_reason .= " "._QXZ("DUP"); + } + } + + if ( (strlen($SSweb_loader_phone_strip)>0) and ($SSweb_loader_phone_strip != 'DISABLED') ) + { + $phone_number = preg_replace("/^$SSweb_loader_phone_strip/",'',$phone_number); + } + if ( (strlen($phone_number)<5) || (strlen($phone_number)>18) ) + { + $valid_number=0; + $invalid_reason .= _QXZ("INVALID PHONE NUMBER LENGTH"); + } + if ( (strlen($web_loader_phone_length)>0) and (strlen($web_loader_phone_length)< 3) and ( (strlen($phone_number) > $web_loader_phone_length) or (strlen($phone_number) < $web_loader_phone_length) ) ) + { + $valid_number=0; + $invalid_reason .= " "._QXZ("INVALID REQUIRED PHONE NUMBER LENGTH"); + } + if ( (preg_match("/PREFIX/",$usacan_check)) and ($valid_number > 0) ) + { + $USprefix = substr($phone_number, 3, 1); + if ($DB>0) {echo "DEBUG: usacan prefix check - $USprefix|$phone_number\n";} + if ($USprefix < 2) + { + $valid_number=0; + $invalid_reason .= " "._QXZ("INVALID PHONE NUMBER PREFIX"); + } + } + if ( (preg_match("/AREACODE/",$usacan_check)) and ($valid_number > 0) ) + { + $phone_areacode = substr($phone_number, 0, 3); + $stmt = "SELECT count(*) from vicidial_phone_codes where areacode='$phone_areacode' and country_code='1';"; + if ($DB>0) {echo "DEBUG: usacan areacode query - $stmt\n";} + $rslt=mysql_to_mysqli($stmt, $link); + $row=mysqli_fetch_row($rslt); + $valid_number=$row[0]; + if ($valid_number < 1) + { + $invalid_reason .= " "._QXZ("INVALID PHONE NUMBER AREACODE"); + } + } + if ( (preg_match("/NANPA/",$usacan_check)) and ($valid_number > 0) ) + { + $phone_areacode = substr($phone_number, 0, 3); + $phone_prefix = substr($phone_number, 3, 3); + $stmt = "SELECT count(*) from vicidial_nanpa_prefix_codes where areacode='$phone_areacode' and prefix='$phone_prefix';"; + if ($DB>0) {echo "DEBUG: usacan nanpa query - $stmt\n";} + $rslt=mysql_to_mysqli($stmt, $link); + $row=mysqli_fetch_row($rslt); + $valid_number=$row[0]; + if ($valid_number < 1) + { + $invalid_reason .= " "._QXZ("INVALID PHONE NUMBER NANPA AREACODE PREFIX"); + } + } + if ($international_dnc_scrub and $valid_number > 0) + { + $dnc_table_name="vicidial_dnc_".$international_dnc_scrub; + $dnc_stmt="select count(*) from $dnc_table_name where phone_number='$phone_number'"; + if ($DB>0) {echo "DEBUG: $international_dnc_scrub DNC query - $dnc_stmt\n";} + $dnc_rslt=mysql_to_mysqli($dnc_stmt, $link); + $dnc_row=mysqli_fetch_row($dnc_rslt); + $dnc_matches=$dnc_row[0]; + if ($dnc_matches >0) + { + $invalid_reason .= " "._QXZ("NUMBER FOUND IN $international_dnc_scrub DNC LIST"); + } + } + + return 1; + +# $dnc_matches=0; +# $dup_lead=0; +# $valid_number=1; +# $invalid_reason=''; + } +##### END - CHECK LEADS FOR VALID PHONE NUMBER, DUPLICATES AND DNC MATCHES ##### + +?> \ No newline at end of file diff --git a/agc_2-X/trunk/www/vicidial/help_documentation.txt b/agc_2-X/trunk/www/vicidial/help_documentation.txt index d982e315..426aa919 100644 --- a/agc_2-X/trunk/www/vicidial/help_documentation.txt +++ b/agc_2-X/trunk/www/vicidial/help_documentation.txt @@ -1,4 +1,4 @@ -# version: 20230203164401 +# version: 20230210213901 users-user User ID This field is where you put the users ID number, can be up to 20 digits in length, Must be at least 2 characters in length. We strongly recommend not reusing user accounts for different users, for reporting accuracy. To disable a user account, set the Active option to -N-. users-pass Password This field is where you put the users password. Must be at least 2 characters in length. Only letters and numbers are allowed in user passwords. A medium strength user password will be at least 10 characters in length, and a strong user password will be at least 20 characters in length and have letters as well as at least one number. It is recommended that you use a longer password if possible, stringing together several unrelated words with no spaces, and a number somewhere in the string. The maximum size of a password is 100 characters. users-force_change_password Force Change Password If this option is set to Y then the user will be prompted to change their password the next time they log in to the administration webpage or the agent screen. Default is N. @@ -864,11 +864,16 @@ international_dnc_loader-file_layout DNC file layout This field tells the f international_dnc_loader-start_cancel Start/cancel file If the user has properly defined a country code, file action, and file layout for an uploaded "READY" file, they can click the "START FILE" button to set the file status to "PENDING", which will cause it to be picked up and processed by the automated processing script. Or, they can click "CANCEL" to set the file status to "CANCELLED", which will cause the file to eventually be purged from the queue table and also erased from the DNC storage folder by the automated processing script. admin_phones_bulk_insert-servers Servers This is a list of the server IP addresses of existing servers in the system that you want the phone entries to be populated across. These must be valid IP addresses, they must be active in the system and you must put one per line in this text area input box. admin_phones_bulk_insert-phones Phones This is a list of the phone extensions that you want to be created on all of the servers listed above. The phone extensions should be letters and numbers only, with no special characters and you must put one per line in this text area box. -list_loader-duplicate_check Duplicate Checking The duplicate options allow you to check for duplicate entries as you load the leads into the system. You can select to check for duplicates within only the same list, only the same campaign lists or within the entire system. If you have chosen a duplicate check method, you can also optionally select the only specific statuses that you want to duplicate check against. -list_loader-status_mismatch_action Status Mismatch Action Using this feature, if a lead being loaded into the dialer dupes out by phone number ,or title and alt_phone, depending on the form settings, but does NOT dupe out against selected statuses from the -Status Duplicate Check- option, the user can opt to have the not-quite-duplicated leads already in the database moved to the current list being loaded into. The user can opt to only move the most recent occurence of a duplicated-by-phone lead or ALL occurrences found, and also whether to only use the -Lead Duplicate Check- setting when searching for duplicates or the entire system, meaning the scope of the status mismatch action can be different from the scope of the -Lead Duplicate Check- setting. This feature is ignored if you are deduping against all statuses. Use caution when utilizing this feature since it involves potential migration of large numbers of leads. list_loader-file_layout File layout The layout of the file you are loading. Standard Format uses the pre-defined standard file format. Custom layout allows the user to define the layout of the file themselves. Custom template is a hybrid of the previous two options, which allows the user to use a custom format they have defined previously and saved using the Custom Template Maker. list_loader-template_id Template ID If the user has selected Custom layout from the File layout options, then this the template the lead loader will use. It will also override the selected list ID with the list ID that was assigned to the selected template when it was created. +list_loader-duplicate_check Duplicate Checking The duplicate options allow you to check for duplicate entries as you load the leads into the system. You can select to check for duplicates within only the same list, only the same campaign lists or within the entire system. If you have chosen a duplicate check method, you can also optionally select the only specific statuses that you want to duplicate check against. +list_loader-status_mismatch_action Status Mismatch Action Using this feature, if a lead being loaded into the dialer dupes out by phone number ,or title and alt_phone, depending on the form settings, but does NOT dupe out against selected statuses from the -Status Duplicate Check- option, the user can opt to have the not-quite-duplicated leads already in the database moved to the current list being loaded into. The user can opt to only move the most recent occurence of a duplicated-by-phone lead or ALL occurrences found, and also whether to only use the -Lead Duplicate Check- setting when searching for duplicates or the entire system, meaning the scope of the status mismatch action can be different from the scope of the -Lead Duplicate Check- setting. This feature is ignored if you are deduping against all statuses. Use caution when utilizing this feature since it involves potential migration of large numbers of leads. +list_loader-usacan_check USA-Canada Check This option is designed to filter out bad numbers in the USA and CANADA. The PREFIX check will make sure the fourth digit of the phone number is not a 0 or a 1. The AREACOE check will ensure that the first 3 digits of the phone number is a valid North American areacode. The NANPA PREFIX check will use the optional NANPA database to check for valid areacode and 3-digit prefixes, this database is not included by default. Default is disabled. +list_loader-international_dncs DNC Scrub by Country If International DNC lists are loaded into your system, you can select the country code from this pull-down option to enable DNC scrubbing for that country. Default is disabled. +list_loader-timezone_lookup Lead Time Zone Lookup This is the method used to code each lead to a time-zone in the system. COUNTRY CODE AND AREA CODE ONLY will use only the phone code and the phone number areacode to determine the timezone of a lead, this method is also the second lookup option if one of the other chosen methods does not find a time zone for a lead. POSTAL CODE FIRST will work for USA addresses only that have a postal code populated. OWNER TIME ZONE CODE FIRST will use the 3 or 4 character timezone abbreviation in the lead -owner- field to determine the timezone, must use valid TZ codes like EST, CST, MST, PST, etc... NANPA AREACODE PREFIX FIRST will use the optional NANPA database for time zone lookups, this database is not included by default. Default is COUNTRY CODE AND AREA CODE ONLY. list_loader-state_conversion State Abbreviation Lookup If your lead file has state names spelled out and you would like to load them into the state field as their two-character abbreviations, this feature will look up the abbreviation from the internal database. Default is DISABLED. +list_loader-required_phone_length Required Phone Number Length If enabled, this is the length in digits that phone numbers must be in order to be loaded into the system. +list_loader-invalid_phone_override Invalid Phone Number Replacement If enabled, this option will try to replace an invalid phone_number lead value with either the alt_phone or address3 value in the same lead. This can be made active only in cases where the number is INVALID, and-or the number is a DUPLICATE, and-or the number is an International DNC match. The -empty-rep-value- options will set the replacement field to blank if it has been used to replace the phone_number for a lead. For example, if the phone_number is invalid and is replaced with a valid alt_phone, then the alt_phone field will be blank if one of the -empty-rep-value- options is used. Default is DISABLED. phones-extension Phone Extension This field is where you put the phones name as it appears to Asterisk not including the protocol or slash at the beginning. For Example: for the SIP phone SIP/test101 the Phone extension would be test101. Also, for IAX2 phones: IAX2/IAXphone1@IAXphone1 would be IAXphone1. For Zap and Dahdi attached channelbank or FXS phones make sure you put the full channel number without the prefix: Zap/25-1 would be 25-1. Another note, make sure you set the Protocol field below correctly for your type of phone. For SIP, PJSIP and IAX phones, this field should not contain any dashes. phones-dialplan_number Dial Plan Number This field is for the number you dial to have the phone ring. This number is defined in the extensions.conf file of your Asterisk server phones-voicemail_id Voicemail Box This field is for the voicemail box that the messages go to for the user of this phone. We use this to check for voicemail messages and for the user to be able to use the VOICEMAIL button on astGUIclient app.