diff --git a/agc_2-X/trunk/UPGRADE b/agc_2-X/trunk/UPGRADE index 595ca41a..40a5d9c1 100644 --- a/agc_2-X/trunk/UPGRADE +++ b/agc_2-X/trunk/UPGRADE @@ -284,6 +284,8 @@ OTHER CHANGES: 77. Added ALT Multi Dispo URL option to restrict URL sending by list ID. +78. Added Admin Bulk Tools page, linked from Admin Utilities page + diff --git a/agc_2-X/trunk/www/agc/dispo_move_list.php b/agc_2-X/trunk/www/agc/dispo_move_list.php index 38ae9103..3c965810 100644 --- a/agc_2-X/trunk/www/agc/dispo_move_list.php +++ b/agc_2-X/trunk/www/agc/dispo_move_list.php @@ -19,7 +19,7 @@ # VARhttp://192.168.1.1/agc/dispo_move_list.php?lead_id=--A--lead_id--B--&dispo=--A--dispo--B--&user=--A--user--B--&pass=--A--pass--B--&new_list_id=10411099&sale_status=SALE---SSALE---XSALE&reset_dialed=Y&log_to_file=1 # # Another example of what to put in the Dispo URL field(using status exclude with talk trigger): -# VARhttp://192.168.1.1/agc/dispo_move_list.php?lead_id=--A--lead_id--B--&dispo=--A--dispo--B--&talk_time=--A--talk_time--B--&user=--A--user--B--&pass=--A--pass--B--&new_list_id=332&sale_status=DNC---BILLNW---POST&exclude_status=Y&talk_time_trigger=240&log_to_file=1 +# VARhttp://192.168.1.1/agc/dispo_move_list.php?lead_id=--A--lead_id--B--&dispo=--A--dispo--B--&talk_time=--A--talk_time--B--&called_count=--A--called_count--B--&user=--A--user--B--&pass=--A--pass--B--&new_list_id=332&sale_status=DNC---BILLNW---POST&exclude_status=Y&talk_time_trigger=240&called_count_trigger=4&log_to_file=1 # # Example of what to put in the No Agent Call URL field: # (user needs to be NOAGENTURL and pass needs to be set to the call_id) @@ -30,10 +30,11 @@ # - sale_status - (SALE---XSALE) a triple-dash "---" delimited list of the statuses that are to be moved # - exclude_status - (Y,N) if set to Y, will trigger for all statuses EXCEPT for those listed in sale_status, default is N # - talk_time_trigger - (0,1,2,3,...) if set to number greater than 0, will only trigger for talk_time at or above set number, default is 0 +# - called_count_trigger - (1,2,3,...) if set to number greater than 0, will only trigger for called_count at or above set number, default is 0 # - new_list_id - (999,etc...) the list_id that you want the matching status leads to be moved to # - reset_dialed - (Y,N) if set to Y, will reset the called_since_last_reset flag on the lead # Multiple sets of statuses: -# - sale_status_1, new_list_id_1, reset_dialed_1, exclude_status_1 - adding an underscore and number(1-99) will allow for another set of statuses to check for and what to do with them +# - sale_status_1, new_list_id_1, reset_dialed_1, exclude_status_1, called_count_trigger_1 - adding an underscore and number(1-99) will allow for another set of statuses to check for and what to do with them # # CHANGES # 100915-1600 - First Build @@ -48,9 +49,10 @@ # 141216-2110 - Added language settings lookups and user/pass variable standardization # 150703-1453 - Added options so it would work with No-Agent Call URL # 160309-1239 - Added talk_time_trigger and exclude_status options +# 160801-1032 - Added called_count_trigger options # -$api_script = 'deactivate'; +$api_script = 'movelist'; header ("Content-type: text/html; charset=utf-8"); @@ -81,6 +83,10 @@ if (isset($_GET["talk_time"])) {$talk_time=$_GET["talk_time"];} elseif (isset($_POST["talk_time"])) {$talk_time=$_POST["talk_time"];} if (isset($_GET["talk_time_trigger"])) {$talk_time_trigger=$_GET["talk_time_trigger"];} elseif (isset($_POST["talk_time_trigger"])) {$talk_time_trigger=$_POST["talk_time_trigger"];} +if (isset($_GET["called_count"])) {$called_count=$_GET["called_count"];} + elseif (isset($_POST["called_count"])) {$called_count=$_POST["called_count"];} +if (isset($_GET["called_count_trigger"])) {$called_count_trigger=$_GET["called_count_trigger"];} + elseif (isset($_POST["called_count_trigger"])) {$called_count_trigger=$_POST["called_count_trigger"];} if (isset($_GET["user"])) {$user=$_GET["user"];} elseif (isset($_POST["user"])) {$user=$_POST["user"];} if (isset($_GET["pass"])) {$pass=$_GET["pass"];} @@ -139,14 +145,17 @@ if ($non_latin < 1) $user=preg_replace("/[^-_0-9a-zA-Z]/","",$user); } -if ($DB>0) {echo "$lead_id|$search_field|$campaign_check|$sale_status|$dispo|$new_status|$user|$pass|$DB|$log_to_file|$talk_time|$talk_time_trigger|$exclude_status|\n";} +if ($DB>0) {echo "$lead_id|$search_field|$campaign_check|$sale_status|$dispo|$new_status|$user|$pass|$DB|$log_to_file|$talk_time|$talk_time_trigger|$exclude_status|$called_count|$called_count_trigger|\n";} -if ( ( (strlen($talk_time_trigger)>0) and ($talk_time > $talk_time_trigger) ) or (strlen($talk_time_trigger)<1) or ($talk_time_trigger < 1) ) +if ( ( (strlen($called_count_trigger)>0) and ($called_count >= $called_count_trigger) ) or (strlen($called_count_trigger)<1) or ($called_count_trigger < 1) ) { - if ( ( (preg_match("/$TD$dispo$TD/",$sale_status)) and ($exclude_status!='Y') ) or ( (!preg_match("/$TD$dispo$TD/",$sale_status)) and ($exclude_status=='Y') ) ) - {$primary_match_found=1;} + if ( ( (strlen($talk_time_trigger)>0) and ($talk_time >= $talk_time_trigger) ) or (strlen($talk_time_trigger)<1) or ($talk_time_trigger < 1) ) + { + if ( ( (preg_match("/$TD$dispo$TD/",$sale_status)) and ($exclude_status!='Y') ) or ( (!preg_match("/$TD$dispo$TD/",$sale_status)) and ($exclude_status=='Y') ) ) + {$primary_match_found=1;} + } } -$first_pass_vars = "$new_list_id|$reset_dialed|$sale_status|$talk_time_trigger|$exclude_status"; +$first_pass_vars = "$new_list_id|$reset_dialed|$sale_status|$talk_time_trigger|$exclude_status$called_count_trigger|"; if ($primary_match_found > 0) {$match_found=1;} else @@ -154,6 +163,7 @@ else $sale_status=''; $exclude_status=''; $talk_time_trigger=''; + $called_count_trigger=''; $new_list_id=''; $reset_dialed=''; while( ($match_found < 1) and ($k < 99) ) @@ -162,33 +172,40 @@ else $sale_status=''; $exclude_status=''; $talk_time_trigger=''; + $called_count_trigger=''; $statusfield = "sale_status_$k"; $excludefield = "exclude_status_$k"; $talktriggerfield = "talk_time_trigger_$k"; + $counttriggerfield = "called_count_trigger_$k"; if (isset($_GET["$excludefield"])) {$exclude_status=$_GET["$excludefield"];} elseif (isset($_POST["$excludefield"])) {$exclude_status=$_POST["$excludefield"];} if (isset($_GET["$talktriggerfield"])) {$talk_time_trigger=$_GET["$talktriggerfield"];} elseif (isset($_POST["$talktriggerfield"])) {$talk_time_trigger=$_POST["$talktriggerfield"];} + if (isset($_GET["$counttriggerfield"])) {$called_count_trigger=$_GET["$counttriggerfield"];} + elseif (isset($_POST["$counttriggerfield"])) {$called_count_trigger=$_POST["$counttriggerfield"];} if (isset($_GET["$statusfield"])) {$sale_status=$_GET["$statusfield"];} elseif (isset($_POST["$statusfield"])) {$sale_status=$_POST["$statusfield"];} $sale_status = "$TD$sale_status$TD"; - if ($DB) {echo _QXZ("MULTI_MATCH CHECK:")." $k|$sale_status|$statusfield|$exclude_status|$excludefield|$talk_time_trigger|$talktriggerfield|\n";} + if ($DB) {echo _QXZ("MULTI_MATCH CHECK:")." $k|$sale_status|$statusfield|$exclude_status|$excludefield|$talk_time_trigger|$talktriggerfield|$called_count_trigger|$counttriggerfield|\n";} - if ( ( (strlen($talk_time_trigger)>0) and ($talk_time > $talk_time_trigger) ) or (strlen($talk_time_trigger)<1) or ($talk_time_trigger < 1) ) + if ( ( (strlen($called_count_trigger)>0) and ($called_count >= $called_count_trigger) ) or (strlen($called_count_trigger)<1) or ($called_count_trigger < 1) ) { - if (strlen($sale_status)>0) + if ( ( (strlen($talk_time_trigger)>0) and ($talk_time >= $talk_time_trigger) ) or (strlen($talk_time_trigger)<1) or ($talk_time_trigger < 1) ) { - if ( ( (preg_match("/$TD$dispo$TD/",$sale_status)) and ($exclude_status!='Y') ) or ( (!preg_match("/$TD$dispo$TD/",$sale_status)) and ($exclude_status=='Y') ) ) + if (strlen($sale_status)>0) { - $match_found=1; - $newlistfield = "new_list_id_$k"; - $resetfield = "reset_dialed_$k"; - if (isset($_GET["$newlistfield"])) {$new_list_id=$_GET["$newlistfield"];} - elseif (isset($_POST["$newlistfield"])) {$new_list_id=$_POST["$newlistfield"];} - if (isset($_GET["$resetfield"])) {$reset_dialed=$_GET["$resetfield"];} - elseif (isset($_POST["$resetfield"])) {$reset_dialed=$_POST["$resetfield"];} - if ($DB) {echo _QXZ("MULTI_MATCH:")." $k|$sale_status|$new_list_id|$reset_dialed|$exclude_status|$talk_time_trigger|\n";} + if ( ( (preg_match("/$TD$dispo$TD/",$sale_status)) and ($exclude_status!='Y') ) or ( (!preg_match("/$TD$dispo$TD/",$sale_status)) and ($exclude_status=='Y') ) ) + { + $match_found=1; + $newlistfield = "new_list_id_$k"; + $resetfield = "reset_dialed_$k"; + if (isset($_GET["$newlistfield"])) {$new_list_id=$_GET["$newlistfield"];} + elseif (isset($_POST["$newlistfield"])) {$new_list_id=$_POST["$newlistfield"];} + if (isset($_GET["$resetfield"])) {$reset_dialed=$_GET["$resetfield"];} + elseif (isset($_POST["$resetfield"])) {$reset_dialed=$_POST["$resetfield"];} + if ($DB) {echo _QXZ("MULTI_MATCH:")." $k|$sale_status|$new_list_id|$reset_dialed|$exclude_status|$talk_time_trigger|$called_count_trigger|\n";} + } } } } @@ -318,6 +335,6 @@ else if ($log_to_file > 0) { $fp = fopen ("./dispo_move_list.txt", "a"); - fwrite ($fp, "$NOW_TIME|$k|$lead_id|$dispo|$user|XXXX|$DB|$log_to_file|$talk_time|$first_pass_vars|$new_list_id|$sale_status|$talk_time_trigger|$exclude_status|$MESSAGE|\n"); + fwrite ($fp, "$NOW_TIME|$k|$lead_id|$dispo|$user|XXXX|$DB|$log_to_file|$talk_time|$called_count|$first_pass_vars|$new_list_id|$sale_status|$talk_time_trigger|$exclude_status|$called_count_trigger|$MESSAGE|\n"); fclose($fp); } diff --git a/agc_2-X/trunk/www/vicidial/admin.php b/agc_2-X/trunk/www/vicidial/admin.php index af5ceb48..a1b4bb0b 100644 --- a/agc_2-X/trunk/www/vicidial/admin.php +++ b/agc_2-X/trunk/www/vicidial/admin.php @@ -3848,12 +3848,13 @@ else # 160621-1733 - Added agent_screen_colors and script_remove_js settings to system settings # 160708-0745 - Added more Automatic Hopper Multiplier options, up to 4 # 160731-1026 - Added campaign option to automatically manual dial next number in agent screen after X seconds +# 160801-2119 - Added Admin Bulk Tools page link from Admin Utilities page # # make sure you have added a user to the vicidial_users MySQL table with at least user_level 9 to access this page the first time -$admin_version = '2.12-562a'; -$build = '160731-1026'; +$admin_version = '2.12-563a'; +$build = '160801-2119'; $STARTtime = date("U"); $SQLdate = date("Y-m-d H:i:s"); @@ -37240,7 +37241,7 @@ if ($ADD==999994) echo "
  • "._QXZ("Recording Access Log")."\n"; echo "
  • "._QXZ("Admin Report Log Viewer")."\n"; echo "

    \n"; - echo "
  • "._QXZ("Bulk Phone Insert Page")."\n"; + echo "
  • "._QXZ("Admin Bulk Tools")." | "._QXZ("Bulk Phone Insert Page")."\n"; echo "
  • "._QXZ("Basic Lead Management Tools")." | "._QXZ("Advanced Lead Management Tools")." | "._QXZ("List Split")."\n"; echo "
  • "._QXZ("Reset Campaign Lists")."\n"; echo "
  • "._QXZ("Callbacks Transferral Page")." | "._QXZ("Callbacks Bulk Move")."\n"; diff --git a/agc_2-X/trunk/www/vicidial/admin_amm_multi.php b/agc_2-X/trunk/www/vicidial/admin_amm_multi.php new file mode 100644 index 00000000..244e4c6f --- /dev/null +++ b/agc_2-X/trunk/www/vicidial/admin_amm_multi.php @@ -0,0 +1,460 @@ + LICENSE: AGPLv2 +# +# this screen will control the *amd* settings needed when the Campaign setting +# "AM Message Wildcards" is enabled. This screen allows for multiple messages +# and fields to be entered and ranked in the order in which they are are to be +# searched. +# +# changes: +# 151109-1653 - First Build +# 160801-1201 - Added colors features +# + +$admin_version = '2.12-2'; +$build = '160801-1201'; + +require("dbconnect_mysqli.php"); +require("functions.php"); + +$PHP_AUTH_USER=$_SERVER['PHP_AUTH_USER']; +$PHP_AUTH_PW=$_SERVER['PHP_AUTH_PW']; +$PHP_SELF=$_SERVER['PHP_SELF']; +if (isset($_GET["DB"])) {$DB=$_GET["DB"];} + elseif (isset($_POST["DB"])) {$DB=$_POST["DB"];} +if (isset($_GET["action"])) {$action=$_GET["action"];} + elseif (isset($_POST["action"])) {$action=$_POST["action"];} +if (isset($_GET["amm_id"])) {$amm_id=$_GET["amm_id"];} + elseif (isset($_POST["amm_id"])) {$amm_id=$_POST["amm_id"];} +if (isset($_GET["campaign_id"])) {$campaign_id=$_GET["campaign_id"];} + elseif (isset($_POST["campaign_id"])) {$campaign_id=$_POST["campaign_id"];} +if (isset($_GET["entry_type"])) {$entry_type=$_GET["entry_type"];} + elseif (isset($_POST["entry_type"])) {$entry_type=$_POST["entry_type"];} +if (isset($_GET["active"])) {$active=$_GET["active"];} + elseif (isset($_POST["active"])) {$active=$_POST["active"];} +if (isset($_GET["amm_field"])) {$amm_field=$_GET["amm_field"];} + elseif (isset($_POST["amm_field"])) {$amm_field=$_POST["amm_field"];} +if (isset($_GET["amm_rank"])) {$amm_rank=$_GET["amm_rank"];} + elseif (isset($_POST["amm_rank"])) {$amm_rank=$_POST["amm_rank"];} +if (isset($_GET["amm_wildcard"])) {$amm_wildcard=$_GET["amm_wildcard"];} + elseif (isset($_POST["amm_wildcard"])) {$amm_wildcard=$_POST["amm_wildcard"];} +if (isset($_GET["amm_description"])) {$amm_description=$_GET["amm_description"];} + elseif (isset($_POST["amm_description"])) {$amm_description=$_POST["amm_description"];} +if (isset($_GET["amm_filename"])) {$amm_filename=$_GET["amm_filename"];} + elseif (isset($_POST["amm_filename"])) {$amm_filename=$_POST["amm_filename"];} +if (isset($_GET["SUBMIT"])) {$SUBMIT=$_GET["SUBMIT"];} + elseif (isset($_POST["SUBMIT"])) {$SUBMIT=$_POST["SUBMIT"];} + +if (strlen($action) < 2) + {$action = 'BLANK';} +if (strlen($DB) < 1) + {$DB=0;} + +############################################# +##### START SYSTEM_SETTINGS LOOKUP ##### +$stmt = "SELECT use_non_latin,webroot_writable,enable_languages,language_method FROM system_settings;"; +$rslt=mysql_to_mysqli($stmt, $link); +if ($DB) {echo "$stmt\n";} +$ss_conf_ct = mysqli_num_rows($rslt); +if ($ss_conf_ct > 0) + { + $row=mysqli_fetch_row($rslt); + $non_latin = $row[0]; + $webroot_writable = $row[1]; + $SSenable_languages = $row[2]; + $SSlanguage_method = $row[3]; + } +##### END SETTINGS LOOKUP ##### +########################################### + +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); + $amm_id = preg_replace('/[^0-9]/','',$amm_id); + $campaign_id = preg_replace('/[^-_0-9a-zA-Z]/','',$campaign_id); + $entry_type = preg_replace('/[^_0-9a-zA-Z]/','',$entry_type); + $active = preg_replace('/[^A-Z]/','',$active); + $amm_field = preg_replace('/[^_0-9a-zA-Z]/','',$amm_field); + $amm_rank = preg_replace('/[^-0-9]/','',$amm_rank); + $amm_wildcard = preg_replace('/[^- _0-9a-zA-Z]/','',$amm_wildcard); + $amm_description = preg_replace('/[^- \.\,\_0-9a-zA-Z]/','',$amm_description); + $amm_filename = preg_replace('/[^- \|\.\,\_0-9a-zA-Z]/','',$amm_filename); + } # end of non_latin +else + { + $PHP_AUTH_USER = preg_replace("/'|\"|\\\\|;/","",$PHP_AUTH_USER); + $PHP_AUTH_PW = preg_replace("/'|\"|\\\\|;/","",$PHP_AUTH_PW); + } + +$STARTtime = date("U"); +$TODAY = date("Y-m-d"); +$NOW_TIME = date("Y-m-d H:i:s"); +$date = date("r"); +$ip = getenv("REMOTE_ADDR"); +$browser = getenv("HTTP_USER_AGENT"); +$user = $PHP_AUTH_USER; +$NWB = "   \"HELP\""; + +$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); +if ($auth_message == 'GOOD') + {$auth=1;} + +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; + } + 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 full_name,modify_campaigns,user_level from vicidial_users where user='$PHP_AUTH_USER';"; +$rslt=mysql_to_mysqli($stmt, $link); +$row=mysqli_fetch_row($rslt); +$LOGfullname = $row[0]; +$LOGmodify_campaigns = $row[1]; +$LOGuser_level = $row[2]; + +if ($LOGmodify_campaigns < 1) + { + Header ("Content-type: text/html; charset=utf-8"); + echo _QXZ("You do not have permissions to modify campaigns")."\n"; + exit; + } + + +##### BEGIN Set variables to make header show properly ##### +$ADD = '31'; +$SUB = '26'; +$hh = 'campaigns'; +$sh = 'detail'; +$LOGast_admin_access = '1'; +$SSoutbound_autodial_active = '1'; +$ADMIN = 'admin.php'; +$page_width='770'; +$section_width='750'; +$header_font_size='3'; +$subheader_font_size='2'; +$subcamp_font_size='2'; +$header_selected_bold=''; +$header_nonselected_bold=''; +$campaigns_color = '#FFFF99'; +$campaigns_font = 'BLACK'; +$campaigns_color = '#E6E6E6'; +$subcamp_color = '#C6C6C6'; +$ingroups_font = 'BLACK'; +$ingroups_color = '#E6E6E6'; +$lists_font = 'BLACK'; +$lists_color = '#E6E6E6'; +##### END Set variables to make header show properly ##### + +if (strlen($campaign_id) < 1) + { + echo _QXZ("ERROR: ID not defined:"); + exit; + } +if ($entry_type == 'campaign') + { + $ADD = '31'; + $hh = 'campaigns'; + $stmt_name="SELECT campaign_name from vicidial_campaigns where campaign_id='$campaign_id';"; + $mod_link = "ADD=$ADD&campaign_id="; + $event_section = 'CAMPAIGNS'; + $stmt="SELECT count(*) from vicidial_campaigns where campaign_id='$campaign_id' and am_message_wildcards='Y';"; + } +elseif ($entry_type == 'ingroup') + { + $ADD = '3111'; + $hh = 'ingroups'; + $stmt_name="SELECT group_name from vicidial_inbound_groups where group_id='$campaign_id';"; + $mod_link = "ADD=$ADD&group_id="; + $event_section = 'INGROUPS'; + $stmt="SELECT count(*) from vicidial_inbound_groups where group_id='$campaign_id' and am_message_wildcards='Y';"; + } +else + { + echo _QXZ("ERROR: no entry type defined:") . $entry_type; + exit; + } + +if ($DB) {echo "|$stmt|\n";} +$rslt=mysql_to_mysqli($stmt, $link); +$row=mysqli_fetch_row($rslt); +$camp_multi=$row[0]; + +$camp_name=''; +$rslt=mysql_to_mysqli($stmt_name, $link); +$names_to_print = mysqli_num_rows($rslt); +if ($names_to_print > 0) + { + $row=mysqli_fetch_row($rslt); + $camp_name = $row[0]; + } + +?> + + + + +<?php echo _QXZ("ADMINISTRATION: AM Message Multi Entry") . " " . $campaign_id . " - " . $camp_name; ?> +<?php + + +require("admin_header.php"); + +if ($camp_multi < 1) + { + echo _QXZ("AM Message Wildcards is not set to active")."$entry_type|$campaign_id\n"; + exit; + } + +if ($DB > 0) + { + echo "$DB,$action,$campaign_id,$amm_id,$entry_type,$active,$amm_field,$amm_rank,$amm_wildcard,$amm_description\n<BR>"; + } + + +################################################################################ +##### BEGIN AMM multi NEW section +if ($action == "AMM_MULTI_NEW") + { + if ( (strlen($active)<1) or (strlen($amm_rank)<1) or (strlen($amm_wildcard)<1) or (strlen($amm_description)<1) or (strlen($amm_filename)<1) ) + { + echo _QXZ("ERROR: You must fill in all fields").": |$active|$amm_rank|$amm_wildcard|$amm_description|$amm_filename|\n<BR>"; + exit; + } + $stmt="INSERT INTO vicidial_amm_multi SET campaign_id='$campaign_id',entry_type='$entry_type',amm_field='$amm_field',active='$active',amm_rank='$amm_rank',amm_wildcard='$amm_wildcard',amm_description='$amm_description',amm_filename='" . mysqli_real_escape_string($link, $amm_filename) . "';"; + $rslt=mysql_to_mysqli($stmt, $link); + $affected_rows = mysqli_affected_rows($link); + if ($DB > 0) {echo "$affected_rows|$stmt\n<BR>";} + if ($affected_rows > 0) + { + ### LOG INSERTION Admin Log Table ### + $SQL_log = "$stmt|"; + $SQL_log = preg_replace('/;/', '', $SQL_log); + $SQL_log = addslashes($SQL_log); + $stmt="INSERT INTO vicidial_admin_log set event_date='$NOW_TIME', user='$PHP_AUTH_USER', ip_address='$ip', event_section='$event_section', event_type='ADD', record_id='$campaign_id', event_code='ADD MULTI AMM', event_sql=\"$SQL_log\", event_notes='$amm_field';"; + $rslt=mysql_to_mysqli($stmt, $link); + if ($DB > 0) {echo "$campaign_id|$stmt\n<BR>";} + + echo "<BR><b>$affected_rows "._QXZ("MULTI AM MESSAGE ADDED")."</b><BR><BR>"; + } + else + {echo _QXZ("ERROR: Problem adding AM Message").": $affected_rows|$stmt\n<BR>";} + $action='BLANK'; + } +##### END AMM multi NEW section + + +################################################################################ +##### BEGIN AMM multi MODIFY section +if ($action == "AMM_MULTI_MODIFY") + { + if ( (strlen($amm_id)<1) or (strlen($active)<1) or (strlen($amm_rank)<1) or (strlen($amm_wildcard)<1) or (strlen($amm_description)<1) or (strlen($amm_filename)<1) ) + { + echo _QXZ("ERROR: You must fill in all fields").": |$amm_id|$active|$amm_rank|$amm_wildcard|$amm_description|$amm_filename|\n<BR>"; + exit; + } + $stmt="SELECT count(*) from vicidial_amm_multi where campaign_id='$campaign_id' and entry_type='$entry_type' and amm_field='$amm_field' and amm_id='$amm_id';"; + if ($DB) {echo "|$stmt|\n";} + $rslt=mysql_to_mysqli($stmt, $link); + $row=mysqli_fetch_row($rslt); + $amm_count=$row[0]; + if ($amm_count < 1) + { + echo _QXZ("ERROR: AM MESSAGE entry does not exist").": |$amm_id|$campaign_id|$entry_type|$amm_field|\n<BR>"; + exit; + } + $stmt="UPDATE vicidial_amm_multi SET active='$active',amm_rank='$amm_rank',amm_wildcard='$amm_wildcard',amm_description='$amm_description',amm_filename='" . mysqli_real_escape_string($link, $amm_filename) . "' where campaign_id='$campaign_id' and entry_type='$entry_type' and amm_field='$amm_field' and amm_id='$amm_id';"; + $rslt=mysql_to_mysqli($stmt, $link); + $affected_rows = mysqli_affected_rows($link); + if ($DB > 0) {echo "$affected_rows|$stmt\n<BR>";} + if ($affected_rows > 0) + { + ### LOG INSERTION Admin Log Table ### + $SQL_log = "$stmt|"; + $SQL_log = preg_replace('/;/', '', $SQL_log); + $SQL_log = addslashes($SQL_log); + $stmt="INSERT INTO vicidial_admin_log set event_date='$NOW_TIME', user='$PHP_AUTH_USER', ip_address='$ip', event_section='$event_section', event_type='MODIFY', record_id='$campaign_id', event_code='MODIFY MULTI AMM', event_sql=\"$SQL_log\", event_notes='$amm_field ID: $amm_id';"; + $rslt=mysql_to_mysqli($stmt, $link); + if ($DB > 0) {echo "$campaign_id|$stmt\n<BR>";} + + echo "<BR><b>$affected_rows "._QXZ("MULTI AM MESSAGE MODIFIED")." (ID: $amm_id)</b><BR><BR>"; + } + else + {echo _QXZ("ERROR: Problem modifying AM MESSAGE").": $affected_rows|$stmt\n<BR>";} + $action='BLANK'; + } +##### END AMM multi MODIFY section + + +################################################################################ +##### BEGIN AMM multi DELETE section +if ($action == "AMM_MULTI_DELETE") + { + if ( (strlen($amm_id)<1) or (strlen($campaign_id)<1) or (strlen($entry_type)<1) or (strlen($amm_field)<1) ) + { + echo _QXZ("ERROR: You must fill in all fields").": |$amm_id|$campaign_id|$entry_type|$amm_field|\n<BR>"; + exit; + } + $stmt="SELECT count(*) from vicidial_amm_multi where campaign_id='$campaign_id' and entry_type='$entry_type' and amm_field='$amm_field' and amm_id='$amm_id' and active='N';"; + if ($DB) {echo "|$stmt|\n";} + $rslt=mysql_to_mysqli($stmt, $link); + $row=mysqli_fetch_row($rslt); + $amm_count=$row[0]; + if ($amm_count < 1) + { + echo _QXZ("ERROR: AM MESSAGE entry must be set to not active before you delete it").": |$amm_id|$campaign_id|$entry_type|$amm_field|\n<BR>"; + } + else + { + $stmt="DELETE FROM vicidial_amm_multi where campaign_id='$campaign_id' and entry_type='$entry_type' and amm_field='$amm_field' and amm_id='$amm_id' and active='N';"; + $rslt=mysql_to_mysqli($stmt, $link); + $affected_rows = mysqli_affected_rows($link); + if ($DB > 0) {echo "$affected_rows|$stmt\n<BR>";} + if ($affected_rows > 0) + { + ### LOG INSERTION Admin Log Table ### + $SQL_log = "$stmt|"; + $SQL_log = preg_replace('/;/', '', $SQL_log); + $SQL_log = addslashes($SQL_log); + $stmt="INSERT INTO vicidial_admin_log set event_date='$NOW_TIME', user='$PHP_AUTH_USER', ip_address='$ip', event_section='$event_section', event_type='DELETE', record_id='$campaign_id', event_code='DELETE MULTI AMM', event_sql=\"$SQL_log\", event_notes='$amm_field ID: $amm_id';"; + $rslt=mysql_to_mysqli($stmt, $link); + if ($DB > 0) {echo "$campaign_id|$stmt\n<BR>";} + + echo "<BR><b>$affected_rows "._QXZ("MULTI AM MESSAGE DELETED")." (ID: $amm_id)</b><BR><BR>"; + } + else + {echo _QXZ("ERROR: Problem deleting AM MESSAGE").": $affected_rows|$stmt\n<BR>";} + } + $action='BLANK'; + } +##### END AMM multi DELETE section + + +################################################################################ +##### BEGIN AMM multi control form +if ($action == "BLANK") + { + $bgcolor='bgcolor="#'. $SSstd_row2_background .'"'; + echo "<TABLE><TR><TD>\n"; + echo "<FONT FACE=\"ARIAL,HELVETICA\" COLOR=BLACK SIZE=2>"; + echo "<br>"._QXZ("AM Message Wildcards Form"); + echo "<center><TABLE width=$section_width cellspacing=3>\n"; + echo "<tr><td align=center colspan=2>\n"; + echo "<br><b>"._QXZ("AM Messages for %1s",0,'',$entry_type).": <a href=\"./admin.php?$mod_link$campaign_id\">$campaign_id</a></b>   $NWB#amm_multi$NWE\n"; + + echo "<TABLE width=700 cellspacing=3>\n"; + echo "<tr><td>#</td><td>"._QXZ("ACTIVE")."</td><td>"._QXZ("RANK")."</td><td>"._QXZ("WILDCARD")."</td><td>"._QXZ("FIELD")."</td><td>"._QXZ("SUBMIT")."</td></tr>\n"; + + $stmt="SELECT amm_id,active,amm_rank,amm_wildcard,amm_description,amm_filename,amm_field from vicidial_amm_multi where campaign_id='$campaign_id' and entry_type='$entry_type' order by amm_rank limit 1000;"; + if ($DB) {echo "$stmt\n";} + $rslt=mysql_to_mysqli($stmt, $link); + $types_to_print = mysqli_num_rows($rslt); + $o=0; + while ($types_to_print > $o) + { + $rowx=mysqli_fetch_row($rslt); + + $Ramm_id = $rowx[0]; + $Ractive = $rowx[1]; + $Ramm_rank = $rowx[2]; + $Ramm_wildcard = $rowx[3]; + $Ramm_description = $rowx[4]; + $Ramm_filename = $rowx[5]; + $Ramm_field = $rowx[6]; + + if (preg_match('/1$|3$|5$|7$|9$/i', $o)) + {$bgcolor='bgcolor="#'. $SSstd_row2_background .'"';} + else + {$bgcolor='bgcolor="#'. $SSstd_row1_background .'"';} + $o++; + + echo "<tr $bgcolor>"; + echo "<form action=$PHP_SELF method=POST>\n"; + echo "<input type=hidden name=DB value=\"$DB\">\n"; + echo "<input type=hidden name=campaign_id value=\"$campaign_id\">\n"; + echo "<input type=hidden name=entry_type value=\"$entry_type\">\n"; + echo "<input type=hidden name=amm_id value=\"$Ramm_id\">\n"; + echo "<input type=hidden name=action value=AMM_MULTI_MODIFY>\n"; + echo "<td><font size=1>$o</td>"; + echo "<td><font size=1><select size=1 name=active><option value='Y'>"._QXZ("Y")."</option><option value='N'>"._QXZ("N")."</option><option SELECTED>$Ractive</option></select></td>"; + echo "<td><font size=1><input type=text size=4 maxlength=3 name=amm_rank value=\"$Ramm_rank\"></td>"; + echo "<td><font size=1><input type=text size=20 maxlength=1000 name=amm_wildcard value=\"$Ramm_wildcard\"></td>"; + echo "<td><font size=1><input type=text size=30 maxlength=255 name=amm_description value=\"$Ramm_description\"></td>"; + echo "<td rowspan=2><font size=1><input type=submit name=SUBMIT value='"._QXZ("SUBMIT")."'>"; + echo "<BR><BR>"; + if ($Ractive == 'N') + {echo "<a href=\"$PHP_SELF?DB=$DB&campaign_id=$campaign_id&entry_type=$entry_type&amm_field=$amm_field&amm_id=$Ramm_id&action=AMM_MULTI_DELETE\">"._QXZ("DELETE")."</a>";} + else + {echo "<DEL>"._QXZ("DELETE")."</DEL>";} + echo "</td>"; + echo "</tr>"; + echo "<tr $bgcolor>"; + echo "<td colspan=2><font size=1><select name=amm_field><option>vendor_lead_code</option><option>source_id</option><option>list_id</option><option>phone_number</option><option>title</option><option>first_name</option><option>middle_initial</option><option>last_name</option><option>address1</option><option>address2</option><option>address3</option><option>city</option><option>state</option><option>province</option><option>postal_code</option><option>country_code</option><option>gender</option><option>date_of_birth</option><option>alt_phone</option><option>email</option><option>security_phrase</option><option>comments</option><option>rank</option><option>owner</option><option selected>$Ramm_field</option></select></td>"; + echo "<td colspan=3><font size=1>"._QXZ("AM MESSAGE").":<input type=text size=40 maxlength=255 name=amm_filename value=\"$Ramm_filename\"></td>"; + echo "</form>\n"; + echo "</tr>\n"; + } + echo "</table></center><br>\n"; + + + echo "<br>"._QXZ("Add a new %1s AM Message",0,'',$amm_field).":<br>"; + echo "</td></tr>\n"; + + echo "<TABLE width=700 cellspacing=3>\n"; + echo "<tr $bgcolor>"; + echo "<form action=$PHP_SELF method=POST>\n"; + echo "<input type=hidden name=DB value=\"$DB\">\n"; + echo "<input type=hidden name=campaign_id value=\"$campaign_id\">\n"; + echo "<input type=hidden name=entry_type value=\"$entry_type\">\n"; + echo "<input type=hidden name=active value=\"N\">\n"; + echo "<input type=hidden name=action value=AMM_MULTI_NEW>\n"; + echo "<td><font size=1>"._QXZ("RANK").": <input type=text size=4 maxlength=3 name=amm_rank value=\"\"></td>"; + echo "<td><font size=1>"._QXZ("WILDCARD").": <input type=text size=20 maxlength=1000 name=amm_wildcard value=\"\"></td>"; + echo "<td><font size=1>"._QXZ("DESCRIPTION").": <input type=text size=30 maxlength=255 name=amm_description value=\"\"></td>"; + echo "<td rowspan=2><font size=1><input type=submit name=SUBMIT value='"._QXZ("SUBMIT")."'></td>"; + echo "</tr>"; + echo "<tr $bgcolor>"; + echo "<td><font size=1>"._QXZ("FIELD").": <select name=amm_field><option>vendor_lead_code</option><option>source_id</option><option>list_id</option><option>phone_number</option><option>title</option><option>first_name</option><option>middle_initial</option><option>last_name</option><option>address1</option><option>address2</option><option>address3</option><option>city</option><option>state</option><option>province</option><option>postal_code</option><option>country_code</option><option>gender</option><option>date_of_birth</option><option>alt_phone</option><option>email</option><option>security_phrase</option><option>comments</option><option>rank</option><option>owner</option></select></td>"; + echo "<td colspan=2><font size=1>"._QXZ("AM MESSAGE").":<input type=text size=40 maxlength=255 name=amm_filename id=amm_filename value=\"\"> <a href=\"javascript:launch_chooser('amm_filename','date',100);\">"._QXZ("audio chooser")."</a></td>"; + echo "</form>\n"; + echo "</tr>\n"; + echo "</table></center><br>\n"; + + echo "</TABLE></center>\n"; + echo "</TD></TR></TABLE>\n"; + } +### END AMM multi control form + + +$ENDtime = date("U"); +$RUNtime = ($ENDtime - $STARTtime); +echo "\n\n\n<br><br><br>\n<font size=1> "._QXZ("runtime").": $RUNtime "._QXZ("seconds")."         "._QXZ("Version").": $admin_version     "._QXZ("Build").": $build</font>"; + +?> + +</body> +</html> diff --git a/agc_2-X/trunk/www/vicidial/admin_bulk_tools.php b/agc_2-X/trunk/www/vicidial/admin_bulk_tools.php new file mode 100644 index 00000000..2cda6559 --- /dev/null +++ b/agc_2-X/trunk/www/vicidial/admin_bulk_tools.php @@ -0,0 +1,1748 @@ +<?php +# admin_bulk_tools.php +# +# Copyright (C) 2016 Mike Coate, Mike Cargile, Matt Florell <vicidial@gmail.com> LICENSE: AGPLv2 +# +# This is the admin screen for various bulk copy/delete tools. +# +# 150917-0000 - Creation of script, only outputs SQL to be copied for bulk DID and AC-CID +# 160405-0000 - Completed redesign, condensed from 3 scripts into single, simplified bulk insert options, integrated with VICIdial DB +# 160405-2331 - Added bulk user support +# 160406-2330 - Added bulk delete function for user and phone +# 160407-2203 - Added bulk add confirmations, help +# 160517-1455 - Added user_group restrictions +# 160604-1753 - Minor adjustments +# 160613-1539 - Fixed AC-CID duplicate check SQL typo, added user ID leading zero check, added check for empty insertions, other minor adjustments, cleaning of code +# 160617-1727 - Modified SQL insertions to be done in groups instead of all at once, added runtime output to insertions +# 160618-0029 - Added bulk AC-CID delete +# 160801-1208 - Added colors features and added missing QXZ text output +# + +require("dbconnect_mysqli.php"); +require("functions.php"); + +$version = '2.12-11'; +$build = '160801-1208'; +$PHP_AUTH_USER=$_SERVER['PHP_AUTH_USER']; +$PHP_AUTH_PW=$_SERVER['PHP_AUTH_PW']; +$PHP_SELF=$_SERVER['PHP_SELF']; +$ip = getenv("REMOTE_ADDR"); +$SQLdate = date("Y-m-d H:i:s"); +$NWB = "   <a href=\"javascript:openNewWindow('$PHP_SELF?form_to_run=help"; +$NWE = "')\"><IMG SRC=\"help.gif\" WIDTH=20 HEIGHT=20 BORDER=0 ALT=\"HELP\" ALIGN=TOP></A>"; +$form_to_run = "NONE"; +$DB=0; # Debug flag +$INSERTmax_limit = 1000; # Maximum number of items allowed to insert +$INSERTgroup_limit = 20; # Number of items per group to be inserted +$STARTtime = date("U"); + +if (isset($_POST["form_to_run"])) {$form_to_run=$_POST["form_to_run"];} + elseif (isset($_GET["form_to_run"])) {$form_to_run=$_GET["form_to_run"];} +if (isset($_POST["ACCIDcampaign"])) {$ACCIDcampaign=$_POST["ACCIDcampaign"];} +if (isset($_POST["ACCIDareacode"])) {$ACCIDareacode=$_POST["ACCIDareacode"];} +if (isset($_POST["ACCIDdids"])) {$ACCIDto_insert_raw=$_POST["ACCIDdids"];} +if (isset($_POST["ACCIDto_insert"])) {$ACCIDto_insert_CONFIRMED=$_POST["ACCIDto_insert"];} +if (isset($_POST["ACCIDactive"])) {$ACCIDactive=$_POST["ACCIDactive"];} +if (isset($_POST["ACCIDdelete_campaign"])) {$ACCIDdelete_campaign=$_POST["ACCIDdelete_campaign"];} +if (isset($_POST["ACCIDdelete_from"])) {$ACCIDdelete_from=$_POST["ACCIDdelete_from"];} +if (isset($_POST["ACCIDdelete_from_CONFIRMED"])) {$ACCIDdelete_from_CONFIRMED=$_POST["ACCIDdelete_from_CONFIRMED"];} +if (isset($_POST["ACCIDclear_all"])) {$ACCIDclear_all=$_POST["ACCIDclear_all"];} +if (isset($_POST["ACCIDclear_all_CONFIRMED"])) {$ACCIDclear_all_CONFIRMED=$_POST["ACCIDclear_all_CONFIRMED"];} +if (isset($_POST["DIDcopy_from"])) {$DIDcopy_from=$_POST["DIDcopy_from"];} +if (isset($_POST["DIDto_insert"])) {$DIDto_insert_raw=$_POST["DIDto_insert"];} +if (isset($_POST["DIDto_insert_CONFIRMED"])) {$DIDto_insert_CONFIRMED=$_POST["DIDto_insert_CONFIRMED"];} +if (isset($_POST["DIDdelete_from"])) {$DIDdelete_from=$_POST["DIDdelete_from"];} +if (isset($_POST["DIDdelete_from_CONFIRMED"])) {$DIDdelete_from_CONFIRMED=$_POST["DIDdelete_from_CONFIRMED"];} +if (isset($_POST["USERcopy_from"])) {$USERcopy_from=$_POST["USERcopy_from"];} +if (isset($_POST["USERto_insert"])) {$USERto_insert=$_POST["USERto_insert"];} +if (isset($_POST["USERstart"])) {$USERstart=$_POST["USERstart"];} +if (isset($_POST["USERstop"])) {$USERstop=$_POST["USERstop"];} +if (isset($_POST["USERforce_pw"])) {$USERforce_pw=$_POST["USERforce_pw"];} +if (isset($_POST["USERdelete_from"])) {$USERdelete_from=$_POST["USERdelete_from"];} +if (isset($_POST["USERdelete_from_CONFIRMED"])) {$USERdelete_from_CONFIRMED=$_POST["USERdelete_from_CONFIRMED"];} + +if ($DB) {echo "$form_to_run|";} + +#Sanitize and set checks +$ACCIDto_insert_raw = explode("\n", $ACCIDto_insert_raw); +$ACCIDto_insert_raw = preg_replace('/[^0-9]/','',$ACCIDto_insert_raw); +$ACCIDto_insert_raw_ArFilter = array_filter($ACCIDto_insert_raw); +$DIDto_insert_raw = explode("\n", $DIDto_insert_raw); +$DIDto_insert_raw = preg_replace('/[^0-9]/','',$DIDto_insert_raw); +$DIDto_insert_raw_ArFilter = array_filter($DIDto_insert_raw); +$USERstart = preg_replace('/[^0-9]/','',$USERstart); +$USERstop = preg_replace('/[^0-9]/','',$USERstop); +$USERfull_name = preg_replace('/[^-_0-9a-zA-Z]/','',$USERfull_name); +if (empty($USERfull_name)) {$USERfull_name = "BLANK";} +if (empty($USERdelete_from)) {$USERdelete_from="BLANK";} +if (empty($ACCIDto_insert_raw_ArFilter)) {$CIDcheck = "BLANK";} +if (empty($DIDto_insert_raw_ArFilter)) {$DIDcheck = "BLANK";} +if (empty($DIDdelete_from)) {$DIDdelete_from="BLANK";} +if (empty($USERstart)) {$USERstart = "BLANK";} +if (empty($USERstop)) {$USERstop = "BLANK";} +if (empty($ACCIDdelete_from)) {$ACCIDdelete_from = "BLANK";} +if (empty($ACCIDdelete_campaign)) {$ACCIDdelete_campaign = "BLANK";} +if ($ACCIDclear_all == "Y") {$form_to_run="ACCIDDELETEconfirm";} + +############################################# +##### START SYSTEM_SETTINGS LOOKUP ##### +$sys_settings_stmt = "SELECT use_non_latin,enable_languages,language_method FROM system_settings;"; +$sys_settings_rslt=mysql_to_mysqli($sys_settings_stmt, $link); +if ($DB) {echo "$sys_settings_stmt|";} +$num_rows = mysqli_num_rows($sys_settings_rslt); +if ($num_rows > 0) + { + $sys_settings_row=mysqli_fetch_row($sys_settings_rslt); + $non_latin = $sys_settings_row[0]; + $SSenable_languages = $sys_settings_row[1]; + $SSlanguage_method = $sys_settings_row[2]; + } +else + { + echo "There are no system settings. You might want to look into that."; + exit; + } +##### END SETTINGS LOOKUP ##### +########################################### + +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); + } +else + { + $PHP_AUTH_PW = preg_replace("/'|\"|\\\\|;/","",$PHP_AUTH_PW); + $PHP_AUTH_USER = preg_replace("/'|\"|\\\\|;/","",$PHP_AUTH_USER); + } + +$stmt="SELECT selected_language from vicidial_users where user='$PHP_AUTH_USER';"; +if ($DB) {echo "$stmt|";} +$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]; + } + +# Valid user +$auth=0; +$auth_message = user_authorization($PHP_AUTH_USER,$PHP_AUTH_PW,'',1); +if ($auth_message == 'GOOD') + {$auth=1;} + +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; + } + 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; + } + +# User permissions +$rights_stmt = "SELECT user_group, modify_inbound_dids, delete_inbound_dids, modify_campaigns, delete_campaigns, modify_users, delete_users, user_level, modify_same_user_level from vicidial_users where user='$PHP_AUTH_USER';"; +if ($DB) {echo "$rights_stmt|";} +$rights_rslt=mysql_to_mysqli($rights_stmt, $link); +$rights_row=mysqli_fetch_row($rights_rslt); +$user_group = $rights_row[0]; +$modify_dids = $rights_row[1]; +$delete_dids = $rights_row[2]; +$modify_campaigns = $rights_row[3]; +$delete_campaigns = $rights_row[4]; +$modify_users = $rights_row[5]; +$delete_users = $rights_row[6]; +$user_level = $rights_row[7]; +$modify_level = $rights_row[8]; + +# User group permissions +$rights_stmt = "SELECT allowed_campaigns,admin_viewable_groups from vicidial_user_groups where user_group='$user_group';"; +if ($DB) {echo "$rights_stmt|";} +$rights_rslt=mysql_to_mysqli($rights_stmt, $link); +$rights_row=mysqli_fetch_row($rights_rslt); +$LOGallowed_campaigns = $rights_row[0]; +$LOGadmin_viewable_groups = $rights_row[1]; + +$allowed_campaignsSQL=''; +if ( (!preg_match('/\-ALL/i', $LOGallowed_campaigns)) ) + { + $rawLOGallowed_campaignsSQL = preg_replace("/ -/",'',$LOGallowed_campaigns); + $rawLOGallowed_campaignsSQL = preg_replace("/ /","','",$rawLOGallowed_campaignsSQL); + $allowed_campaignsSQL = "campaign_id IN('$rawLOGallowed_campaignsSQL')"; + } +else + { + $rights_stmt = "SELECT campaign_id FROM vicidial_campaigns;"; + if ($DB) {echo "$rights_stmt|";} + $rights_rslt=mysql_to_mysqli($rights_stmt, $link); + $rights_rsltCOUNT=mysqli_num_rows($rights_rslt); + $allowed_campaignsSQL = "campaign_id IN("; + $i=0; + while ($i < $rights_rsltCOUNT) + { + $rights_row=mysqli_fetch_row($rights_rslt); + $allowed_campaignsSQL.= "'" . $rights_row[0] . "',"; + $i++; + } + $allowed_campaignsSQL.= "'')"; + } + +$admin_viewable_groupsSQL=''; +if (!preg_match('/\-\-ALL\-\-/i',$LOGadmin_viewable_groups)) + { + $rawLOGadmin_viewable_groupsSQL = preg_replace("/ -/",'',$LOGadmin_viewable_groups); + $rawLOGadmin_viewable_groupsSQL = preg_replace("/ /","','",$rawLOGadmin_viewable_groupsSQL); + $admin_viewable_groupsSQL = "user_group IN('---ALL---','$rawLOGadmin_viewable_groupsSQL')"; + } +else + { + $rights_stmt = "SELECT user_group FROM vicidial_user_groups;"; + if ($DB) {echo "$rights_stmt|";} + $rights_rslt=mysql_to_mysqli($rights_stmt, $link); + $rights_rsltCOUNT=mysqli_num_rows($rights_rslt); + $admin_viewable_groupsSQL = "user_group IN('---ALL---',"; + $i=0; + while ($i < $rights_rsltCOUNT) + { + $rights_row=mysqli_fetch_row($rights_rslt); + $admin_viewable_groupsSQL.= "'" . $rights_row[0] . "',"; + $i++; + } + $admin_viewable_groupsSQL.= "'')"; + } + +header ("Content-type: text/html; charset=utf-8"); +header ("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 +header ("Pragma: no-cache"); // HTTP/1.0 + +echo "<html>\n"; +echo "<head>\n"; +if ($user_level < 9) + { + echo "You do not have permission to be here."; + exit; + } + +################################################################################ +##### Help +if ($form_to_run == "help") + { + echo "<title>"._QXZ("ADMINISTRATION: Bulk Tools").""; + echo "
    "; + echo "

    "; + echo ""._QXZ("Bulk Tools Help")."

    "; + + echo "
    "; + echo ""._QXZ("DID Bulk Copy")." - "._QXZ("This will take and insert a list of numbers as inbound DIDs, copying the settings specified in the selected DID. DIDs should be between 2 and 20 digits in length. A duplicate check will be performed.").""; + echo "

    "; + + echo "

    "; + echo ""._QXZ("DID Bulk Delete")." - "._QXZ("This will delete the selected DIDs from your system. You cannot delete the 'default' DID. Doing so will break several parts of the system."); + echo "

    "; + + echo "

    "; + echo ""._QXZ("User Bulk Copy")." - "._QXZ("This will copy a sequential number of users beginning with the User Start ID and ending with the User Stop ID using the settings found in the source user. ID must be at least 2 characters in length and no more than 8. A duplicate check will be performed. Only numerals are allowed and ID cannot begin with a zero. The User Number, Password and Full Name will all be the same. Force PW Change will work for admin level users and is recommend for security reasons."); + echo "

    "; + + echo "

    "; + echo ""._QXZ("User Bulk Delete")." - "._QXZ("This will delete the selected users from your system. For obvious reasons, you cannot delete the user you are logged in as. You can also not delete any users that are actively logged in as agents."); + echo "

    "; + + echo "

    "; + echo ""._QXZ("AC-CID Bulk Add")." - "._QXZ("This will take a list of CIDs and insert them as Area Code Caller IDs into the selected campaign. The area code lookup is designed to work only with numbers in the North American Numbering Plan. The description will automatically be filled with the appropriate US state abbreviation corresponding to the given CID's 3-digit area code. CIDs must be between 6 and 20 digits in length and only digits 0-9 are allowed. Optionally, you can have the AC-CIDs set to active upon insertion."); + echo "

    "; + + echo "

    "; + echo ""._QXZ("AC-CID Bulk Delete")." - "._QXZ("This will delete the Areacode Caller ID entries you select from the next screen based on the campaign you select here. Setting Clear All CIDs to YES will bypass the AC-CID selection and wipe all AC-CIDs for the selected campaign."); + echo "















    "; + + exit; + } + +##### BEGIN Set variables to make header show properly ##### +$ADD = '999998'; +$hh = 'admin'; +$LOGast_admin_access = '1'; +$SSoutbound_autodial_active = '1'; +$ADMIN = 'admin.php'; +$page_width='770'; +$section_width='750'; +$header_font_size='3'; +$subheader_font_size='2'; +$subcamp_font_size='2'; +$header_selected_bold=''; +$header_nonselected_bold=''; +$admin_color = '#FFFF99'; +$admin_font = 'BLACK'; +$admin_color = '#E6E6E6'; +$subcamp_color = '#C6C6C6'; +##### END Set variables to make header show properly ##### + +require("admin_header.php"); +echo ""._QXZ("ADMINISTRATION: Bulk Tools")."\n"; +echo "\n"; +echo "\n"; +echo "\n"; +echo "\n"; +echo "\n"; +echo "\n"; + echo "
    \n"; +echo "\n"; +echo "   "._QXZ("Bulk Tools")." \n"; +echo "\n"; +echo "  
      \n"; + +################################################################################ +##### CONFIRM AC-CID add +if ($form_to_run == "ACCID") + { + if ($ACCIDcampaign=="BLANK") + { + echo _QXZ("Go back, you did not specify a campaign.")."\n"; + exit; + } + if ($CIDcheck=="BLANK") + { + echo _QXZ("Go back, you did not specify any CIDs or there was something wrong with them.")."\n"; + exit; + } + if (count($ACCIDto_insert_raw) > $INSERTmax_limit) + { + echo _QXZ("This tool has a limit of ")."$INSERTmax_limit"._QXZ(" items. You are trying to insert ") . count($ACCIDto_insert_raw) ._QXZ(". Please go back and make adjustments.")."\n"; + exit; + } + + #Check for duplicates + $ACCIDduplicate = array(); + $ACCIDinserted = array(); + $ACCIDareacode = array(); + $areacode = array(); + $i=0; #loop counter + $j=0; #duplicate counter + $k=0; #insert counter + $l=0; #bad length counter + while ($i < count($ACCIDto_insert_raw)) + { + $areacode[$i] = substr($ACCIDto_insert_raw[$i], 0, 3); + $SQL= "SELECT outbound_cid FROM vicidial_campaign_cid_areacodes WHERE outbound_cid=$ACCIDto_insert_raw[$i] AND areacode=$areacode[$i] AND campaign_id='$ACCIDcampaign';"; + if ($DB) {echo "$SQL|";} + $SQL_rslt=mysql_to_mysqli($SQL, $link); + $row = mysqli_fetch_row($SQL_rslt); + if ($row[0] == $ACCIDto_insert_raw[$i]) + { + $ACCIDduplicate[$j] = $ACCIDto_insert_raw[$i]; + $j++; + } + elseif (strlen($ACCIDto_insert_raw[$i]) < 6 || strlen($ACCIDto_insert_raw[$i]) > 20) + { + $ACCIDbadlen[$l] = $ACCIDto_insert_raw[$i]; + $l++; + } + else + { + $ACCIDto_insert[$k] = $ACCIDto_insert_raw[$i]; + $ACCIDareacode[$k] = $areacode[$i]; + $k++; + } + $i++; + } + if (empty($ACCIDto_insert[0])) + { + echo "
    "._QXZ("Go back, nothing is going to be created.")." "; + echo "
    "._QXZ("The following AC-CIDs are duplicates and will not be created").": "; + if (empty($ACCIDduplicate[0])) {echo "
    "._QXZ("NONE");} + $i = 0; + while ($i < count($ACCIDduplicate)) + { + echo "
    $ACCIDduplicate[$i]"; + $i++; + } + echo "
    "._QXZ("The following AC-CIDs are of invalid length and will not be created").": "; + if (empty($ACCIDbadlen[0])) {echo "
    "._QXZ("NONE");} + $i = 0; + while ($i < count($ACCIDbadlen)) + { + echo "
    $ACCIDbadlen[$i]"; + $i++; + } + exit; + } + else + { + echo _QXZ("ATTENTION: You are about to add the following AC-CIDs to campaign $ACCIDcampaign")." :"; + $i = 0; + while ($i < count($ACCIDto_insert)) + { + echo "
    $ACCIDto_insert[$i]"; + $i++; + } + echo "
    "._QXZ("The following AC-CIDs are duplicates and will not be created").": "; + if (empty($ACCIDduplicate[0])) {echo "
    "._QXZ("NONE");} + $i = 0; + while ($i < count($ACCIDduplicate)) + { + echo "
    $ACCIDduplicate[$i]"; + $i++; + } + echo "
    "._QXZ("The following AC-CIDs are of invalid length and will not be created").": "; + if (empty($ACCIDbadlen[0])) {echo "
    "._QXZ("NONE");} + $i = 0; + while ($i < count($ACCIDbadlen)) + { + echo "
    $ACCIDbadlen[$i]"; + $i++; + } + } + $ACCIDto_insert = serialize($ACCIDto_insert); + $ACCIDareacode = serialize($ACCIDareacode); + echo "
    "; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo "
    \n"; + echo ""; + } + + +################################################################################ +##### PROCESS AC-CID add +elseif ($form_to_run == "ACCIDconfirmed") + { + $ACCIDto_insert_CONFIRMED = unserialize($ACCIDto_insert_CONFIRMED); + $ACCIDareacode = unserialize($ACCIDareacode); + $description = array(); + $i = 0; + while ($i < count($ACCIDto_insert_CONFIRMED)) + { + $SQL="SELECT state FROM vicidial_phone_codes WHERE areacode=$ACCIDareacode[$i];"; + $SQL_rslt = mysql_to_mysqli($SQL, $link); + $row = mysqli_fetch_row($SQL_rslt); + if ( $row[0] == null ) #Put something in if NULL because areacode.vicidial_campaign_cid_areacodes cannot be NULL + { + $ACCIDdescription[$i] = " "; + } + else + { + $ACCIDdescription[$i] = $row[0]; + } + $i++; + } + + ### Divide total AC-CIDs into groups + $INSERTtotal = count($ACCIDto_insert_CONFIRMED); + $INSERTgroup_counter = 0; + $INSERTloopflag = "TRUE"; + if ($INSERTtotal == $INSERTgroup_limit) + { + $INSERTgroup_counter = 0; + $INSERTremainder = $INSERTtotal; + } + else + { + while ($INSERTloopflag == "TRUE") + { + $INSERTdifference = $INSERTtotal - $INSERTgroup_limit; + if ($INSERTdifference > $INSERTgroup_limit) #If the difference is bigger then we still have more groups to divide out + { + $INSERTtotal = $INSERTdifference; + $INSERTgroup_counter++; + } + if (($INSERTdifference >= 0) && ($INSERTdifference <= $INSERTgroup_limit)) # If the difference is between 0 and the group limit then we've reached the end + { + $INSERTgroup_counter++; + $INSERTremainder = $INSERTdifference; + $INSERTloopflag="FALSE"; + } + if ($INSERTdifference < 0) # If the difference is negative then there's only 1 group + { + $INSERTgroup_counter = 0; + $INSERTremainder = $INSERTtotal; + $INSERTloopflag="FALSE"; + } + } + } + + ### Loop through AC-CIDs and insert in groups + $INSERTindex = 0; + $INSERTloopflag = "TRUE"; + while ($INSERTloopflag == "TRUE") + { + $SQL = "INSERT INTO vicidial_campaign_cid_areacodes (campaign_id,areacode,outbound_cid,active,cid_description) VALUES ('$ACCIDcampaign','$ACCIDareacode[$INSERTindex]','$ACCIDto_insert_CONFIRMED[$INSERTindex]','$ACCIDactive','$ACCIDdescription[$INSERTindex]')"; + $INSERTindex++; + if ($INSERTgroup_counter > 0) + { + $i = 1; + while ($i < $INSERTgroup_limit) + { + $SQL.= ",('" . $ACCIDcampaign . "','" . $ACCIDareacode[$INSERTindex] . "','" . $ACCIDto_insert_CONFIRMED[$INSERTindex] . "','" . $ACCIDactive . "','" . $ACCIDdescription[$INSERTindex] . "')"; + $SQL_sentence.= " |$ACCIDareacode[$INSERTindex]|$ACCIDto_insert_CONFIRMED[$INSERTindex]"; + $i++; + $INSERTindex++; + } + $INSERTgroup_counter--; + } + else + { + $i = 1; + while ($i < $INSERTremainder) + { + $SQL.= ",('" . $ACCIDcampaign . "','" . $ACCIDareacode[$INSERTindex] . "','" . $ACCIDto_insert_CONFIRMED[$INSERTindex] . "','" . $ACCIDactive . "','" . $ACCIDdescription[$INSERTindex] . "')"; + $SQL_sentence.= " |$ACCIDareacode[$INSERTindex]|$ACCIDto_insert_CONFIRMED[$INSERTindex]"; + $i++; + $INSERTindex++; + } + $INSERTloopflag="FALSE"; + } + if ($DB) {echo "$SQL|";} + $SQL_rslt = mysql_to_mysqli($SQL, $link); + } + + ### Log our stuff + $SQL_sentence = "AC-CIDs inserted into campaign $ACCIDcampaign: " . $SQL_sentence; + $SQL_log = "INSERT INTO vicidial_campaign_cid_areacodes (campaign_id,areacode,outbound_cid,active,cid_description) VALUES ('$ACCIDcampaign','$ACCIDareacode[0]','$ACCIDto_insert_CONFIRMED[0]','$ACCIDactive','$ACCIDdescription[0]')"; + $SQL_log = preg_replace('/;/', '', $SQL_log); + $SQL_log = addslashes($SQL_log); + $admin_log_stmt="INSERT INTO vicidial_admin_log set event_date='$SQLdate', user='$PHP_AUTH_USER', ip_address='$ip', event_section='CAMPAIGN_AC-CID', event_type='ADD', record_id='$ACCIDcampaign', event_code='ADMIN ADD BULK CAMPAIGN AC-CID', event_sql=\"$SQL_log\", event_notes='$SQL_sentence';"; + if ($DB) {echo "$admin_log_stmt|";} + $admin_log_rslt=mysql_to_mysqli($admin_log_stmt, $link); + + $ENDtime = date("U"); + $RUNtime = ($ENDtime - $STARTtime); + echo "
    AC-CIDs added."; + echo "\n\n\n
    \n"._QXZ("runtime").": $RUNtime "._QXZ("seconds"); + echo "

    "._QXZ("Go back to tools.").""; + } + +################################################################################ +##### SELECT AC-CID delete + +elseif ($form_to_run == "ACCIDDELETEselect") + { + if ($ACCIDdelete_campaign=="BLANK") + { + echo _QXZ("Go back, you did not select a campaign.")."\n"; + exit; + } + echo "
    "; + echo ""; + echo ""; + echo "
    "; + echo ""; + echo "\n"; + echo "\n"; + echo "\n"; + + echo "
    "._QXZ("Campaign")." $ACCIDdelete_campaign "._QXZ("AC-DID Bulk Delete")."
    "._QXZ("AC-CIDs to delete").": \n"; + + $ACCIDdelete_from = array(); + $SQL="SELECT areacode,outbound_cid FROM vicidial_campaign_cid_areacodes WHERE campaign_id = '$ACCIDdelete_campaign' ORDER BY outbound_cid ASC;"; + if ($DB) {echo "$SQL|";} + $SQL_rslt = mysql_to_mysqli($SQL, $link); + $cid_count = mysqli_num_rows($SQL_rslt); + $i = 0; + while ($i < $cid_count) + { + $row = mysqli_fetch_row($SQL_rslt); + $ACCIDto_delete_ac[$i] = $row[0]; + $ACCIDto_delete[$i] = $row[1]; + $i++; + } + + echo "
    \n"; + echo ""; + } + + +################################################################################ +##### CONFIRM AC-CID delete + +elseif ($form_to_run == "ACCIDDELETEconfirm") + { + if ($ACCIDclear_all == "Y") + { + if ($ACCIDdelete_campaign=="BLANK") + { + echo _QXZ("Go back, you did not select a campaign").".\n"; + exit; + } + echo "
    "._QXZ("WANRING! You are about to remove all AC-CID entries for campaign")." $ACCIDdelete_campaign "._QXZ("WARNING!")."


    "; + echo "
    "; + echo ""; + echo ""; + echo ""; + echo "\n"; + echo "
    \n"; + echo ""; + } + else + { + if ($ACCIDdelete_from=="BLANK") + { + echo _QXZ("Go back, you did not specify any AC-CIDs to delete.")."\n"; + exit; + } + $SQL="SELECT COUNT(*) FROM vicidial_campaign_cid_areacodes where campaign_id = '$ACCIDdelete_campaign';"; + $SQL_rslt=mysql_to_mysqli($SQL, $link); + $row=mysqli_fetch_row($SQL_rslt); + if ($row[0] == count($ACCIDdelete_from)) + { + echo ""._QXZ("WARNING!!!")."
    "; + echo _QXZ("REALLY DELETE ALL AC-CIDs?!")."

    "; + } + echo " "._QXZ("WARNING: The following AC-CIDs will be deleted!!!").""; + $i = 0; + while ($i < count($ACCIDdelete_from)) + { + echo "
    $ACCIDdelete_from[$i]"; + $i++; + } + $ACCIDdelete_from = serialize($ACCIDdelete_from); + echo "
    "; + echo ""; + echo ""; + echo ""; + echo "\n"; + echo "
    \n"; + echo ""; + } + } + + +################################################################################ +##### PROCESS AC-CID delete +elseif ($form_to_run == "ACCIDDELETEconfirmed") + { + if ($ACCIDclear_all_CONFIRMED == "Y") + { + $SQL = "DELETE FROM vicidial_campaign_cid_areacodes WHERE campaign_id='$ACCIDdelete_campaign';"; + if ($DB) {echo "$SQL|";} + $SQL_rslt = mysql_to_mysqli($SQL, $link); + + #Log our stuff + $SQL_sentence = " "; + $SQL_log = "$SQL|"; + $SQL_log = preg_replace('/;/', '', $SQL_log); + $SQL_log = addslashes($SQL_log); + $admin_log_stmt="INSERT INTO vicidial_admin_log set event_date='$SQLdate', user='$PHP_AUTH_USER', ip_address='$ip', event_section='CAMPAIGN_AC-CID', event_type='DELETE', record_id='$ACCIDdelete_campaign', event_code='ADMIN DELETE BULK DID', event_sql=\"$SQL_log\", event_notes='$SQL_sentence';"; + if ($DB) {echo "$admin_log_stmt|";} + $admin_log_rslt=mysql_to_mysqli($admin_log_stmt, $link); + + echo "
    "._QXZ("AC-CIDs have been deleted")."."; + echo "
    "._QXZ("Go back to tools")."."; + } + else + { + $ACCIDdelete_from_CONFIRMED = unserialize($ACCIDdelete_from_CONFIRMED); # Go through the data and make a new array then break off the AC and CID + $ACCIDdelete_from_CONFIRMED = implode("x",$ACCIDdelete_from_CONFIRMED); + $ACCIDdelete_from_CONFIRMED = explode("x",$ACCIDdelete_from_CONFIRMED); + $ACCIDdelete_areacode = array(); + $ACCIDdelete_cid = array(); + $ACCIDdelete_areacode[0] = $ACCIDdelete_from_CONFIRMED[0]; + $SQL_sentence = "$ACCIDdelete_areacode[0] |"; + $i = 1; # loop counter + $j = 0; # CID index counter + $k = 1; # areacode index counter + while ($i < count($ACCIDdelete_from_CONFIRMED)) + { + if ($i & 1) + { + $ACCIDdelete_cid[$j] = $ACCIDdelete_from_CONFIRMED[$i]; + $SQL_sentence.= "$ACCIDdelete_cid[$j] |"; + $j++; + } + else + { + $ACCIDdelete_areacode[$j] = $ACCIDdelete_from_CONFIRMED[$i]; + $SQL_sentence.= "$ACCIDdelete_areacode[$k] |"; + $k++; + } + $i++; + } + + $i = 0; + while ($i < count($ACCIDdelete_areacode)) + { + $SQL = "DELETE FROM vicidial_campaign_cid_areacodes WHERE campaign_id='$ACCIDdelete_campaign' AND outbound_cid='$ACCIDdelete_cid[$i]' AND areacode='$ACCIDdelete_areacode[$i]';"; + $i++; + if ($DB) {echo "$SQL|";} + $SQL_rslt = mysql_to_mysqli($SQL, $link); + } + + #Log our stuff + $SQL_sentence = "ACCID entries removed from campaign $ACCIDdelete_campaign: " . $SQL_sentence; + $SQL = "DELETE FROM vicidial_campaign_cid_areacodes WHERE campaign_id='$ACCIDdelete_campaign' AND outbound_cid='$ACCIDdelete_cid[0]' AND areacode='$ACCIDdelete_areacode[0]';"; + $SQL_log = "$SQL|"; + $SQL_log = preg_replace('/;/', '', $SQL_log); + $SQL_log = addslashes($SQL_log); + $admin_log_stmt="INSERT INTO vicidial_admin_log set event_date='$SQLdate', user='$PHP_AUTH_USER', ip_address='$ip', event_section='CAMPAIGN_AC-CID', event_type='DELETE', record_id='0', event_code='ADMIN DELETE BULK ACCID', event_sql=\"$SQL_log\", event_notes='$SQL_sentence';"; + if ($DB) {echo "$admin_log_stmt|";} + $admin_log_rslt=mysql_to_mysqli($admin_log_stmt, $link); + + echo "
    "._QXZ("AC-CIDs have been deleted")."."; + echo "
    "._QXZ("Go back to tools")."."; + } + + } + + +################################################################################ +##### CONFIRM DID add +elseif ($form_to_run == "BULKDIDS") + { + if ($DIDcopy_from=="BLANK") + { + echo _QXZ("Go back, you did not specify a source DID.")."\n"; + exit; + } + if ($DIDcheck=="BLANK") + { + echo _QXZ("Go back, you did not specify any DIDs or there was something wrong with them.")."\n"; + exit; + } + if (count($DIDto_insert_raw) > $INSERTmax_limit) + { + echo _QXZ("This tool has a limit of")." $INSERTmax_limit"._QXZ(" items. You are trying to insert")." " . count($DIDto_insert_raw) ._QXZ(". Please go back and make adjustments.")."\n"; + exit; + } + $DIDduplicate = array(); + $DIDbadlen = array(); + $DIDinserted = array(); + $i=0; #loop counter + $j=0; #duplicate counter + $k=0; #insert counter + $l=0; #bad length counter + while ($i < count($DIDto_insert_raw)) + { + $SQL= "SELECT did_pattern FROM vicidial_inbound_dids WHERE did_pattern=$DIDto_insert_raw[$i];"; + if ($DB) {echo "$SQL|";} + $SQL_rslt=mysql_to_mysqli($SQL, $link); + $row = mysqli_fetch_row($SQL_rslt); + if ($row[0] == $DIDto_insert_raw[$i]) + { + $DIDduplicate[$j] = $DIDto_insert_raw[$i]; + $j++; + } + elseif (strlen($DIDto_insert_raw[$i]) < 2 || strlen($DIDto_insert_raw[$i]) > 20) + { + $DIDbadlen[$l] = $DIDto_insert_raw[$i]; + $l++; + } + else + { + $DIDto_insert[$k] = $DIDto_insert_raw[$i]; + $k++; + } + $i++; + } + if (empty($DIDto_insert[0])) + { + echo "
    "._QXZ("Go back, nothing is going to be created.")." "; + echo "
    "._QXZ("The following DIDs are duplicates and will not be created").": "; + if (empty($DIDduplicate[0])) {echo "
    "._QXZ("NONE");} + $i = 0; + while ($i < count($DIDduplicate)) + { + echo "
    $DIDduplicate[$i]"; + $i++; + } + echo "
    "._QXZ("The following DIDs are of invalid length and will not be created").": "; + if (empty($DIDbadlen[0])) {echo "
    "._QXZ("NONE");} + $i = 0; + while ($i < count($DIDbadlen)) + { + echo "
    $DIDbadlen[$i]"; + $i++; + } + exit; + } + else + { + echo _QXZ("ATTENTION: You are about to add the following DIDs using the settings in DID")." $DIDcopy_from :"; + $i = 0; + while ($i < count($DIDto_insert)) + { + echo "
    $DIDto_insert[$i]"; + $i++; + } + echo "
    "._QXZ("The following DIDs are duplicates and will not be created").": "; + if (empty($DIDduplicate[0])) {echo "
    "._QXZ("NONE");} + $i = 0; + while ($i < count($DIDduplicate)) + { + echo "
    $DIDduplicate[$i]"; + $i++; + } + echo "
    "._QXZ("The following DIDs are of invalid length and will not be created").": "; + if (empty($DIDbadlen[0])) {echo "
    "._QXZ("NONE");} + $i = 0; + while ($i < count($DIDbadlen)) + { + echo "
    $DIDbadlen[$i]"; + $i++; + } + } + + $DIDto_insert = serialize($DIDto_insert); + echo "
    "; + echo ""; + echo ""; + echo ""; + echo "\n"; + echo "
    \n"; + echo ""; + } + + +################################################################################ +##### PROCESS DID add +elseif ($form_to_run == "DIDADDconfirmed") + { + $DIDto_insert_CONFIRMED = unserialize($DIDto_insert_CONFIRMED); + $SQL="SELECT did_id,did_pattern,did_description,did_active,did_route,extension,exten_context,voicemail_ext,phone,server_ip,user,user_unavailable_action,user_route_settings_ingroup,group_id,call_handle_method,agent_search_method,list_id,campaign_id,phone_code,menu_id,record_call,filter_inbound_number,filter_phone_group_id,filter_url,filter_action,filter_extension,filter_exten_context,filter_voicemail_ext,filter_phone,filter_server_ip,filter_user,filter_user_unavailable_action,filter_user_route_settings_ingroup,filter_group_id,filter_call_handle_method,filter_agent_search_method,filter_list_id,filter_campaign_id,filter_phone_code,filter_menu_id,filter_clean_cid_number,custom_one,custom_two,custom_three,custom_four,custom_five,user_group,filter_dnc_campaign,filter_url_did_redirect,no_agent_ingroup_redirect,no_agent_ingroup_id,no_agent_ingroup_extension,pre_filter_phone_group_id,pre_filter_extension,entry_list_id,filter_entry_list_id,max_queue_ingroup_calls,max_queue_ingroup_id,max_queue_ingroup_extension,did_carrier_description FROM vicidial_inbound_dids WHERE did_pattern=\"$DIDcopy_from\";"; + $SQL_rslt = mysql_to_mysqli($SQL, $link); + $row = mysqli_fetch_row($SQL_rslt); + $did_id = $row[0]; + $did_pattern = $row[1]; + $did_description = $row[2]; + $did_active = $row[3]; + $did_route = $row[4]; + $extension = $row[5]; + $exten_context = $row[6]; + $voicemail_ext = $row[7]; + $phone = $row[8]; + $server_ip = $row[9]; + $user = $row[10]; + $user_unavailable_action = $row[11]; + $user_route_settings_ingroup = $row[12]; + $group_id = $row[13]; + $call_handle_method = $row[14]; + $agent_search_method = $row[15]; + $list_id = $row[16]; + $ACCIDcampaign_id = $row[17]; + $phone_code = $row[18]; + $menu_id = $row[19]; + $record_call = $row[20]; + $filter_inbound_number = $row[21]; + $filter_phone_group_id = $row[22]; + $filter_url = $row[23]; + $filter_action = $row[24]; + $filter_extension = $row[25]; + $filter_exten_context = $row[26]; + $filter_voicemail_ext = $row[27]; + $filter_phone = $row[28]; + $filter_server_ip = $row[29]; + $filter_user = $row[30]; + $filter_user_unavailable_action = $row[31]; + $filter_user_route_settings_ingroup = $row[32]; + $filter_group_id = $row[33]; + $filter_call_handle_method = $row[34]; + $filter_agent_search_method = $row[35]; + $filter_list_id = $row[36]; + $filter_campaign_id = $row[37]; + $filter_phone_code = $row[38]; + $filter_menu_id = $row[39]; + $filter_clean_cid_number = $row[40]; + $custom_one = $row[41]; + $custom_two = $row[42]; + $custom_three = $row[43]; + $custom_four = $row[44]; + $custom_five = $row[45]; + $user_group = $row[46]; + $filter_dnc_campaign = $row[47]; + $filter_url_did_redirect = $row[48]; + $no_agent_ingroup_redirect = $row[49]; + $no_agent_ingroup_id = $row[50]; + $no_agent_ingroup_extension = $row[51]; + $pre_filter_phone_group_id = $row[52]; + $pre_filter_extension = $row[53]; + $entry_list_id = $row[54]; + $filter_entry_list_id = $row[55]; + $max_queue_ingroup_calls = $row[56]; + $max_queue_ingroup_id = $row[57]; + $max_queue_ingroup_extension = $row[58]; + $did_carrier_description = $row[59]; + + ### Divide total DIDs into groups + $INSERTtotal = count($DIDto_insert_CONFIRMED); + $INSERTgroup_counter = 0; + $INSERTloopflag = "TRUE"; + if ($INSERTtotal == $INSERTgroup_limit) + { + $INSERTgroup_counter = 0; + $INSERTremainder = $INSERTtotal; + } + else + { + while ($INSERTloopflag == "TRUE") + { + $INSERTdifference = $INSERTtotal - $INSERTgroup_limit; + if ($INSERTdifference > $INSERTgroup_limit) #If the difference is bigger then we still have more groups to divide out + { + $INSERTtotal = $INSERTdifference; + $INSERTgroup_counter++; + } + if (($INSERTdifference >= 0) && ($INSERTdifference <= $INSERTgroup_limit)) # If the difference is between 0 and the group limit then we've reached the end + { + $INSERTgroup_counter++; + $INSERTremainder = $INSERTdifference; + $INSERTloopflag="FALSE"; + } + if ($INSERTdifference < 0) # If the difference is negative then there's only 1 group and it's less than the grouping number + { + $INSERTgroup_counter = 0; + $INSERTremainder = $INSERTtotal; + $INSERTloopflag="FALSE"; + } + } + } + + ### Loop through DIDs and insert in groups + $INSERTindex = 0; + $INSERTloopflag = "TRUE"; + while ($INSERTloopflag == "TRUE") + { + $SQL = "INSERT INTO vicidial_inbound_dids (did_pattern,did_description,did_active,did_route,extension,exten_context,voicemail_ext,phone,server_ip,user,user_unavailable_action,user_route_settings_ingroup,group_id,call_handle_method,agent_search_method,list_id,campaign_id,phone_code,menu_id,record_call,filter_inbound_number,filter_phone_group_id,filter_url,filter_action,filter_extension,filter_exten_context,filter_voicemail_ext,filter_phone,filter_server_ip,filter_user,filter_user_unavailable_action,filter_user_route_settings_ingroup,filter_group_id,filter_call_handle_method,filter_agent_search_method,filter_list_id,filter_campaign_id,filter_phone_code,filter_menu_id,filter_clean_cid_number,custom_one,custom_two,custom_three,custom_four,custom_five,user_group,filter_dnc_campaign,filter_url_did_redirect,no_agent_ingroup_redirect,no_agent_ingroup_id,no_agent_ingroup_extension,pre_filter_phone_group_id,pre_filter_extension,entry_list_id,filter_entry_list_id,max_queue_ingroup_calls,max_queue_ingroup_id,max_queue_ingroup_extension,did_carrier_description) VALUES ('$DIDto_insert_CONFIRMED[$INSERTindex]','$did_description','$did_active','$did_route','$extension','$exten_context','$voicemail_ext','$phone','$server_ip','$user','$user_unavailable_action','$user_route_settings_ingroup','$group_id','$call_handle_method','$agent_search_method','$list_id','$ACCIDcampaign_id','$phone_code','$menu_id','$record_call','$filter_inbound_number','$filter_phone_group_id','$filter_url','$filter_action','$filter_extension','$filter_exten_context','$filter_voicemail_ext','$filter_phone','$filter_server_ip','$filter_user','$filter_user_unavailable_action','$filter_user_route_settings_ingroup','$filter_group_id','$filter_call_handle_method','$filter_agent_search_method','$filter_list_id','$filter_campaign_id','$filter_phone_code','$filter_menu_id','$filter_clean_cid_number','$custom_one','$custom_two','$custom_three','$custom_four','$custom_five','$user_group','$filter_dnc_campaign','$filter_url_did_redirect','$no_agent_ingroup_redirect','$no_agent_ingroup_id','$no_agent_ingroup_extension','$pre_filter_phone_group_id','$pre_filter_extension','$entry_list_id','$filter_entry_list_id','$max_queue_ingroup_calls','$max_queue_ingroup_id','$max_queue_ingroup_extension','$did_carrier_description')"; + $INSERTindex++; + if ($INSERTgroup_counter > 0) + { + $i = 1; + while ($i < $INSERTgroup_limit) + { + $SQL.= ",('" . $DIDto_insert_CONFIRMED[$INSERTindex] . "','" . $did_description . "','" . $did_active . "','" . $did_route . "','" . $extension . "','" . $exten_context . "','" . $voicemail_ext . "','" . $phone . "','" . $server_ip . "','" . $user . "','" . $user_unavailable_action . "','" . $user_route_settings_ingroup . "','" . $group_id . "','" . $call_handle_method . "','" . $agent_search_method . "','" . $list_id . "','" . $ACCIDcampaign_id . "','" . $phone_code . "','" . $menu_id . "','" . $record_call . "','" . $filter_inbound_number . "','" . $filter_phone_group_id . "','" . $filter_url . "','" . $filter_action . "','" . $filter_extension . "','" . $filter_exten_context . "','" . $filter_voicemail_ext . "','" . $filter_phone . "','" . $filter_server_ip . "','" . $filter_user . "','" . $filter_user_unavailable_action . "','" . $filter_user_route_settings_ingroup . "','" . $filter_group_id . "','" . $filter_call_handle_method . "','" . $filter_agent_search_method . "','" . $filter_list_id . "','" . $filter_campaign_id . "','" . $filter_phone_code . "','" . $filter_menu_id . "','" . $filter_clean_cid_number . "','" . $custom_one . "','" . $custom_two . "','" . $custom_three . "','" . $custom_four . "','" . $custom_five . "','" . $user_group . "','" . $filter_dnc_campaign . "','" . $filter_url_did_redirect . "','" . $no_agent_ingroup_redirect . "','" . $no_agent_ingroup_id . "','" . $no_agent_ingroup_extension . "','" . $pre_filter_phone_group_id . "','" . $pre_filter_extension . "','" . $entry_list_id . "','" . $filter_entry_list_id . "','" . $max_queue_ingroup_calls . "','" . $max_queue_ingroup_id . "','" . $max_queue_ingroup_extension . "','" . $did_carrier_description . "')"; + $SQL_sentence.= " |$DIDto_insert_CONFIRMED[$i]"; + $i++; + $INSERTindex++; + } + $INSERTgroup_counter--; + } + else + { + $i = 1; + while ($i < $INSERTremainder) + { + $SQL.= ",('" . $DIDto_insert_CONFIRMED[$INSERTindex] . "','" . $did_description . "','" . $did_active . "','" . $did_route . "','" . $extension . "','" . $exten_context . "','" . $voicemail_ext . "','" . $phone . "','" . $server_ip . "','" . $user . "','" . $user_unavailable_action . "','" . $user_route_settings_ingroup . "','" . $group_id . "','" . $call_handle_method . "','" . $agent_search_method . "','" . $list_id . "','" . $ACCIDcampaign_id . "','" . $phone_code . "','" . $menu_id . "','" . $record_call . "','" . $filter_inbound_number . "','" . $filter_phone_group_id . "','" . $filter_url . "','" . $filter_action . "','" . $filter_extension . "','" . $filter_exten_context . "','" . $filter_voicemail_ext . "','" . $filter_phone . "','" . $filter_server_ip . "','" . $filter_user . "','" . $filter_user_unavailable_action . "','" . $filter_user_route_settings_ingroup . "','" . $filter_group_id . "','" . $filter_call_handle_method . "','" . $filter_agent_search_method . "','" . $filter_list_id . "','" . $filter_campaign_id . "','" . $filter_phone_code . "','" . $filter_menu_id . "','" . $filter_clean_cid_number . "','" . $custom_one . "','" . $custom_two . "','" . $custom_three . "','" . $custom_four . "','" . $custom_five . "','" . $user_group . "','" . $filter_dnc_campaign . "','" . $filter_url_did_redirect . "','" . $no_agent_ingroup_redirect . "','" . $no_agent_ingroup_id . "','" . $no_agent_ingroup_extension . "','" . $pre_filter_phone_group_id . "','" . $pre_filter_extension . "','" . $entry_list_id . "','" . $filter_entry_list_id . "','" . $max_queue_ingroup_calls . "','" . $max_queue_ingroup_id . "','" . $max_queue_ingroup_extension . "','" . $did_carrier_description . "')"; + $SQL_sentence.= " |$DIDto_insert_CONFIRMED[$i]"; + $i++; + $INSERTindex++; + } + $INSERTloopflag="FALSE"; + } + if ($DB) {echo "$SQL|";} + $SQL_rslt = mysql_to_mysqli($SQL, $link); + } + + ### Log our stuff + $SQL_sentence = "DIDs copied from inbound DID #$did_id - $did_pattern:" . $SQL_sentence; + $SQL_log = "INSERT INTO vicidial_inbound_dids (did_pattern,did_description,did_active,did_route,extension,exten_context,voicemail_ext,phone,server_ip,user,user_unavailable_action,user_route_settings_ingroup,group_id,call_handle_method,agent_search_method,list_id,campaign_id,phone_code,menu_id,record_call,filter_inbound_number,filter_phone_group_id,filter_url,filter_action,filter_extension,filter_exten_context,filter_voicemail_ext,filter_phone,filter_server_ip,filter_user,filter_user_unavailable_action,filter_user_route_settings_ingroup,filter_group_id,filter_call_handle_method,filter_agent_search_method,filter_list_id,filter_campaign_id,filter_phone_code,filter_menu_id,filter_clean_cid_number,custom_one,custom_two,custom_three,custom_four,custom_five,user_group,filter_dnc_campaign,filter_url_did_redirect,no_agent_ingroup_redirect,no_agent_ingroup_id,no_agent_ingroup_extension,pre_filter_phone_group_id,pre_filter_extension,entry_list_id,filter_entry_list_id,max_queue_ingroup_calls,max_queue_ingroup_id,max_queue_ingroup_extension,did_carrier_description) VALUES ('$DIDto_insert_CONFIRMED[0]','$did_description','$did_active','$did_route','$extension','$exten_context','$voicemail_ext','$phone','$server_ip','$user','$user_unavailable_action','$user_route_settings_ingroup','$group_id','$call_handle_method','$agent_search_method','$list_id','$ACCIDcampaign_id','$phone_code','$menu_id','$record_call','$filter_inbound_number','$filter_phone_group_id','$filter_url','$filter_action','$filter_extension','$filter_exten_context','$filter_voicemail_ext','$filter_phone','$filter_server_ip','$filter_user','$filter_user_unavailable_action','$filter_user_route_settings_ingroup','$filter_group_id','$filter_call_handle_method','$filter_agent_search_method','$filter_list_id','$filter_campaign_id','$filter_phone_code','$filter_menu_id','$filter_clean_cid_number','$custom_one','$custom_two','$custom_three','$custom_four','$custom_five','$user_group','$filter_dnc_campaign','$filter_url_did_redirect','$no_agent_ingroup_redirect','$no_agent_ingroup_id','$no_agent_ingroup_extension','$pre_filter_phone_group_id','$pre_filter_extension','$entry_list_id','$filter_entry_list_id','$max_queue_ingroup_calls','$max_queue_ingroup_id','$max_queue_ingroup_extension','$did_carrier_description')"; + $SQL_log = preg_replace('/;/', '', $SQL_log); + $SQL_log = addslashes($SQL_log); + $admin_log_stmt="INSERT INTO vicidial_admin_log set event_date='$SQLdate', user='$PHP_AUTH_USER', ip_address='$ip', event_section='DIDS', event_type='COPY', record_id='$did_id', event_code='ADMIN COPY BULK DID', event_sql=\"$SQL_log\", event_notes='$SQL_sentence';"; + if ($DB) {echo "$admin_log_stmt|";} + $admin_log_rslt=mysql_to_mysqli($admin_log_stmt, $link); + + $ENDtime = date("U"); + $RUNtime = ($ENDtime - $STARTtime); + echo "
    "._QXZ("DIDs added")."."; + echo "\n\n\n
    \n"._QXZ("runtime").": $RUNtime "._QXZ("seconds"); + echo "

    "._QXZ("Go back to tools")."."; + } + + +################################################################################ +##### CONFIRM DID delete +elseif ($form_to_run == "BULKDIDSDELETE") + { + if ($DIDdelete_from=="BLANK") + { + echo _QXZ("Go back, you did not specify any DIDs to delete.")."\n"; + exit; + } + $SQL="SELECT COUNT(*) FROM vicidial_inbound_dids where did_pattern not in ('default');"; + $SQL_rslt=mysql_to_mysqli($SQL, $link); + $row=mysqli_fetch_row($SQL_rslt); + if ($row[0] == count($DIDdelete_from)) + { + echo ""._QXZ("WARNING!!!")."
    "; + echo _QXZ("REALLY DELETE ALL DIDs?!")."

    "; + } + echo " "._QXZ("WARNING: The following DIDs will be deleted!!!").""; + $i = 0; + while ($i < count($DIDdelete_from)) + { + echo "
    $DIDdelete_from[$i]"; + $i++; + } + $DIDdelete_from = serialize($DIDdelete_from); + echo "
    "; + echo ""; + echo ""; + echo "\n"; + echo "
    \n"; + echo ""; + } + + +################################################################################ +##### PROCESS DID delete +elseif ($form_to_run == "BULKDIDSDELETEconfirmed") + { + $DIDdelete_from_CONFIRMED = unserialize($DIDdelete_from_CONFIRMED); + $SQL = "DELETE FROM vicidial_inbound_dids WHERE did_pattern IN ('$DIDdelete_from_CONFIRMED[0]'"; + $i = 1; + while ($i < count($DIDdelete_from_CONFIRMED)) + { + $SQL.= ",'" . $DIDdelete_from_CONFIRMED[$i] . "'"; + $i++; + } + $SQL.= ");"; + + if ($DB) {echo "$SQL|";} + $SQL_rslt = mysql_to_mysqli($SQL, $link); + + #Log our stuff + $SQL_sentence = " "; + $SQL_log = "$SQL|"; + $SQL_log = preg_replace('/;/', '', $SQL_log); + $SQL_log = addslashes($SQL_log); + $admin_log_stmt="INSERT INTO vicidial_admin_log set event_date='$SQLdate', user='$PHP_AUTH_USER', ip_address='$ip', event_section='DIDS', event_type='DELETE', record_id='0', event_code='ADMIN DELETE BULK DID', event_sql=\"$SQL_log\", event_notes='$SQL_sentence';"; + if ($DB) {echo "$admin_log_stmt|";} + $admin_log_rslt=mysql_to_mysqli($admin_log_stmt, $link); + + echo _QXZ("DIDs have been deleted.").""; + echo "
    "._QXZ("Go back to tools")."."; + } + + +################################################################################ +##### CONFRIM users add +elseif ($form_to_run == "BULKUSERS") + { + $USERcount = ($USERstop - $USERstart) + 1; + if ($USERstart == "BLANK") + { + echo "
    "._QXZ("Go back, you have not entered a starting user ID.")."\n"; + exit; + } + if ($USERstop == "BLANK") + { + echo "
    "._QXZ("Go back, You have not entered an ending user ID.")."\n"; + exit; + } + if ($USERcopy_from == "BLANK") + { + echo "
    "._QXZ("Go back, you have not selected a source user to copy from.")."\n"; + exit; + } + if (strlen($USERstart) < 2 || strlen($USERstart) > 8) + { + echo _QXZ("Start ID").": $USERstart"; + echo "
    "._QXZ("Go back, your starting user ID must be between 2 and 8 characters in length.")."\n"; + exit; + } + if (strlen($USERstop) < 2 || strlen($USERstop) > 8) + { + echo _QXZ("Stop ID").": $USERstop"; + echo "
    "._QXZ("Go back, your stopping user ID must be between 2 and 8 characters in length.")."\n"; + exit; + } + if ($USERstart >= $USERstop) + { + echo _QXZ("Start ID").": $USERstart | "._QXZ("Stop ID").": $USERstop"; + echo "
    "._QXZ("Go back, your starting user ID cannot be more than or equal to your ending user ID.")."\n"; + exit; + } + if (substr($USERstart, 0, 1) == "0") + { + echo _QXZ("Start ID").": $USERstart"; + echo "
    "._QXZ("Go back, your starting user ID cannot begin with a zero.")."\n"; + exit; + } + if (substr($USERstop, 0, 1) == "0") + { + echo _QXZ("Stop ID").": $USERstop"; + echo "
    "._QXZ("Go back, your stopping user ID cannot begin with a zero.")."\n"; + exit; + } + if ($USERcount > $INSERTmax_limit) + { + echo _QXZ("This tool has a limit of")." $INSERTmax_limit "._QXZ("items. You are trying to insert")." $USERcount. "._QXZ("Please go back and make adjustments.")."\n"; + exit; + } + $USERduplicate = array(); + $USERto_insert = array(); + $j=0; #duplicate counter + $k=0; #insert counter + while ($USERstart <= $USERstop) + { + $SQL= "SELECT user FROM vicidial_users WHERE user=$USERstart;"; + if ($DB) {echo "$SQL|";} + $SQL_rslt=mysql_to_mysqli($SQL, $link); + $row = mysqli_fetch_row($SQL_rslt); + if ($row[0] == $USERstart) + { + $USERduplicate[$j] = $USERstart; + $j++; + } + else + { + $USERto_insert[$k] = $USERstart; + $k++; + } + $USERstart++; + } + + if (empty($USERto_insert[0])) + { + echo "
    "._QXZ("Go back, all users are duplicates and will not be created").": "; + $i = 0; + while ($i < count($USERduplicate)) + { + echo "
    $USERduplicate[$i]"; + $i++; + } + exit; + } + else + { + echo _QXZ("ATTENTION: You are about to insert the following users based off the settings in user")." $USERcopy_from :"; + $i = 0; + while ($i < count($USERto_insert)) + { + echo "
    $USERto_insert[$i]"; + $i++; + } + echo "
    "._QXZ("The following users are duplicates and will not be created").": "; + if (empty($USERduplicate[0])) {echo "
    NONE";} + $i = 0; + while ($i < count($USERduplicate)) + { + echo "
    $USERduplicate[$i]"; + $i++; + } + } + + $USERto_insert = serialize($USERto_insert); + echo "
    "; + echo ""; + echo ""; + echo ""; + echo ""; + echo "\n"; + echo "
    \n"; + echo ""; + } + + +################################################################################ +##### PROCESS users add +elseif ($form_to_run == "BULKUSERSconfirmed") + { + $USERto_insert = unserialize($USERto_insert); + $SQL = "SELECT user,pass,full_name,user_level,user_group,phone_login,phone_pass,delete_users,delete_user_groups,delete_lists,delete_campaigns,delete_ingroups,delete_remote_agents,load_leads,campaign_detail,ast_admin_access,ast_delete_phones,delete_scripts,modify_leads,hotkeys_active,change_agent_campaign,agent_choose_ingroups,closer_campaigns,scheduled_callbacks,agentonly_callbacks,agentcall_manual,vicidial_recording,vicidial_transfers,delete_filters,alter_agent_interface_options,closer_default_blended,delete_call_times,modify_call_times,modify_users,modify_campaigns,modify_lists,modify_scripts,modify_filters,modify_ingroups,modify_usergroups,modify_remoteagents,modify_servers,view_reports,vicidial_recording_override,alter_custdata_override,qc_enabled,qc_user_level,qc_pass,qc_finish,qc_commit,add_timeclock_log,modify_timeclock_log,delete_timeclock_log,alter_custphone_override,vdc_agent_api_access,modify_inbound_dids,delete_inbound_dids,active,alert_enabled,download_lists,agent_shift_enforcement_override,manager_shift_enforcement_override,shift_override_flag,export_reports,delete_from_dnc,email,user_code,territory,allow_alerts,agent_choose_territories,custom_one,custom_two,custom_three,custom_four,custom_five,voicemail_id,agent_call_log_view_override,callcard_admin,agent_choose_blended,realtime_block_user_info,custom_fields_modify,force_change_password,agent_lead_search_override,modify_shifts,modify_phones,modify_carriers,modify_labels,modify_statuses,modify_voicemail,modify_audiostore,modify_moh,modify_tts,preset_contact_search,modify_contacts,modify_same_user_level,admin_hide_lead_data,admin_hide_phone_data,agentcall_email,modify_email_accounts,failed_login_count,last_login_date,last_ip,pass_hash,alter_admin_interface_options,max_inbound_calls,modify_custom_dialplans,wrapup_seconds_override,modify_languages,selected_language,user_choose_language,ignore_group_on_search,api_list_restrict,api_allowed_functions,lead_filter_id,admin_cf_show_hidden,agentcall_chat,user_hide_realtime,access_recordings FROM vicidial_users WHERE user=$USERcopy_from;"; + $SQL_rslt=mysql_to_mysqli($SQL, $link); + $row = mysqli_fetch_row($SQL_rslt); + $user = $row[0]; + $pass = $row[1]; + $full_name = $row[2]; + $user_level = $row[3]; + $user_group = $row[4]; + $phone_login = $row[5]; + $phone_pass = $row[6]; + $delete_users = $row[7]; + $delete_user_groups = $row[8]; + $delete_lists = $row[9]; + $delete_campaigns = $row[10]; + $delete_ingroups = $row[11]; + $delete_remote_agents = $row[12]; + $load_leads = $row[13]; + $ACCIDcampaign_detail = $row[14]; + $ast_admin_access = $row[15]; + $ast_delete_phones = $row[16]; + $delete_scripts = $row[17]; + $modify_leads = $row[18]; + $hotkeys_active = $row[19]; + $change_agent_campaign = $row[20]; + $agent_choose_ingroups = $row[21]; + $closer_campaigns = $row[22]; + $scheduled_callbacks = $row[23]; + $agentonly_callbacks = $row[24]; + $agentcall_manual = $row[25]; + $vicidial_recording = $row[26]; + $vicidial_transfers = $row[27]; + $delete_filters = $row[28]; + $alter_agent_interface_options = $row[29]; + $closer_default_blended = $row[30]; + $delete_call_times = $row[31]; + $modify_call_times = $row[32]; + $modify_users = $row[33]; + $modify_campaigns = $row[34]; + $modify_lists = $row[35]; + $modify_scripts = $row[36]; + $modify_filters = $row[37]; + $modify_ingroups = $row[38]; + $modify_usergroups = $row[39]; + $modify_remoteagents = $row[40]; + $modify_servers = $row[41]; + $view_reports = $row[42]; + $vicidial_recording_override = $row[43]; + $alter_custdata_override = $row[44]; + $qc_enabled = $row[45]; + $qc_user_level = $row[46]; + $qc_pass = $row[47]; + $qc_finish = $row[48]; + $qc_commit = $row[49]; + $add_timeclock_log = $row[50]; + $modify_timeclock_log = $row[51]; + $delete_timeclock_log = $row[52]; + $alter_custphone_override = $row[53]; + $vdc_agent_api_access = $row[54]; + $modify_inbound_dids = $row[55]; + $delete_inbound_dids = $row[56]; + $user_active = $row[57]; + $alert_enabled = $row[58]; + $download_lists = $row[59]; + $agent_shift_enforcement_override = $row[60]; + $manager_shift_enforcement_override = $row[61]; + $shift_override_flag = $row[62]; + $export_reports = $row[63]; + $delete_from_dnc = $row[64]; + $email = $row[65]; + $user_code = $row[66]; + $territory = $row[67]; + $allow_alerts = $row[68]; + $agent_choose_territories = $row[69]; + $custom_one = $row[70]; + $custom_two = $row[71]; + $custom_three = $row[72]; + $custom_four = $row[73]; + $custom_five = $row[74]; + $voicemail_id = $row[75]; + $agent_call_log_view_override = $row[76]; + $callcard_admin = $row[77]; + $agent_choose_blended = $row[78]; + $realtime_block_user_info = $row[79]; + $custom_fields_modify = $row[80]; + $force_change_passwordDEL = $row[81]; #This is not used. Changed name rather than alter SQL and re-number array index. Value is set via form. + $agent_lead_search_override = $row[82]; + $modify_shifts = $row[83]; + $modify_phones = $row[84]; + $modify_carriers = $row[85]; + $modify_labels = $row[86]; + $modify_statuses = $row[87]; + $modify_voicemail = $row[88]; + $modify_audiostore = $row[89]; + $modify_moh = $row[90]; + $modify_tts = $row[91]; + $preset_contact_search = $row[92]; + $modify_contacts = $row[93]; + $modify_same_user_level = $row[94]; + $admin_hide_lead_data = $row[95]; + $admin_hide_phone_data = $row[96]; + $agentcall_email = $row[97]; + $modify_email_accounts = $row[98]; + $failed_login_count = $row[99]; + $last_login_date = $row[100]; + $last_ip = $row[101]; + $pass_hash = $row[102]; + $alter_admin_interface_options = $row[103]; + $max_inbound_calls = $row[104]; + $modify_custom_dialplans = $row[105]; + $wrapup_seconds_override = $row[106]; + $modify_languages = $row[107]; + $selected_language = $row[108]; + $user_choose_language = $row[109]; + $ignore_group_on_search = $row[110]; + $api_list_restrict = $row[111]; + $api_allowed_functions = $row[112]; + $lead_filter_id = $row[113]; + $admin_cf_show_hidden = $row[114]; + $agentcall_chat = $row[115]; + $user_hide_realtime = $row[116]; + $access_recordings = $row[117]; + + ### Divide total users into groups + $INSERTtotal = count($USERto_insert); + $INSERTgroup_counter = 0; + $INSERTloopflag = "TRUE"; + if ($INSERTtotal == $INSERTgroup_limit) + { + $INSERTremainder = $INSERTtotal; + } + else + { + while ($INSERTloopflag == "TRUE") + { + $INSERTdifference = $INSERTtotal - $INSERTgroup_limit; + if ($INSERTdifference > $INSERTgroup_limit) #If the difference is bigger then we still have more groups to divide out + { + $INSERTtotal = $INSERTdifference; + $INSERTgroup_counter++; + } + if (($INSERTdifference >= 0) && ($INSERTdifference <= $INSERTgroup_limit)) # If the difference is between 0 and the group limit then we've reached the end + { + $INSERTgroup_counter++; + $INSERTremainder = $INSERTdifference; + $INSERTloopflag="FALSE"; + } + if ($INSERTdifference < 0) # If the difference is negative then there's only 1 group and it's less than the grouping number + { + $INSERTgroup_counter = 0; + $INSERTremainder = $INSERTtotal; + $INSERTloopflag="FALSE"; + } + } + } + + ### Loop through users and insert in groups + $INSERTindex = 0; + $INSERTloopflag = "TRUE"; + while ($INSERTloopflag == "TRUE") + { + $SQL = "INSERT INTO vicidial_users (user,pass,full_name,user_level,user_group,phone_login,phone_pass,delete_users,delete_user_groups,delete_lists,delete_campaigns,delete_ingroups,delete_remote_agents,load_leads,campaign_detail,ast_admin_access,ast_delete_phones,delete_scripts,modify_leads,hotkeys_active,change_agent_campaign,agent_choose_ingroups,closer_campaigns,scheduled_callbacks,agentonly_callbacks,agentcall_manual,vicidial_recording,vicidial_transfers,delete_filters,alter_agent_interface_options,closer_default_blended,delete_call_times,modify_call_times,modify_users,modify_campaigns,modify_lists,modify_scripts,modify_filters,modify_ingroups,modify_usergroups,modify_remoteagents,modify_servers,view_reports,vicidial_recording_override,alter_custdata_override,qc_enabled,qc_user_level,qc_pass,qc_finish,qc_commit,add_timeclock_log,modify_timeclock_log,delete_timeclock_log,alter_custphone_override,vdc_agent_api_access,modify_inbound_dids,delete_inbound_dids,active,alert_enabled,download_lists,agent_shift_enforcement_override,manager_shift_enforcement_override,shift_override_flag,export_reports,delete_from_dnc,email,user_code,territory,allow_alerts,agent_choose_territories,custom_one,custom_two,custom_three,custom_four,custom_five,voicemail_id,agent_call_log_view_override,callcard_admin,agent_choose_blended,realtime_block_user_info,custom_fields_modify,force_change_password,agent_lead_search_override,modify_shifts,modify_phones,modify_carriers,modify_labels,modify_statuses,modify_voicemail,modify_audiostore,modify_moh,modify_tts,preset_contact_search,modify_contacts,modify_same_user_level,admin_hide_lead_data,admin_hide_phone_data,agentcall_email,modify_email_accounts,failed_login_count,last_login_date,last_ip,pass_hash,alter_admin_interface_options,max_inbound_calls,modify_custom_dialplans,wrapup_seconds_override,modify_languages,selected_language,user_choose_language,ignore_group_on_search,api_list_restrict,api_allowed_functions,lead_filter_id,admin_cf_show_hidden,agentcall_chat,user_hide_realtime,access_recordings) VALUES ('$USERto_insert[$INSERTindex]','$USERto_insert[$INSERTindex]','$USERto_insert[$INSERTindex]','$user_level','$user_group','$phone_login','$phone_pass','$delete_users','$delete_user_groups','$delete_lists','$delete_campaigns','$delete_ingroups','$delete_remote_agents','$load_leads','$ACCIDcampaign_detail','$ast_admin_access','$ast_delete_phones','$delete_scripts','$modify_leads','$hotkeys_active','$change_agent_campaign','$agent_choose_ingroups','$closer_campaigns','$scheduled_callbacks','$agentonly_callbacks','$agentcall_manual','$vicidial_recording','$vicidial_transfers','$delete_filters','$alter_agent_interface_options','$closer_default_blended','$delete_call_times','$modify_call_times','$modify_users','$modify_campaigns','$modify_lists','$modify_scripts','$modify_filters','$modify_ingroups','$modify_usergroups','$modify_remoteagents','$modify_servers','$view_reports','$vicidial_recording_override','$alter_custdata_override','$qc_enabled','$qc_user_level','$qc_pass','$qc_finish','$qc_commit','$add_timeclock_log','$modify_timeclock_log','$delete_timeclock_log','$alter_custphone_override','$vdc_agent_api_access','$modify_inbound_dids','$delete_inbound_dids','$user_active','$alert_enabled','$download_lists','$agent_shift_enforcement_override','$manager_shift_enforcement_override','$shift_override_flag','$export_reports','$delete_from_dnc','$email','$user_code','$territory','$allow_alerts','$agent_choose_territories','$custom_one','$custom_two','$custom_three','$custom_four','$custom_five','$voicemail_id','$agent_call_log_view_override','$callcard_admin','$agent_choose_blended','$realtime_block_user_info','$custom_fields_modify','$USERforce_pw','$agent_lead_search_override','$modify_shifts','$modify_phones','$modify_carriers','$modify_labels','$modify_statuses','$modify_voicemail','$modify_audiostore','$modify_moh','$modify_tts','$preset_contact_search','$modify_contacts','$modify_same_user_level','$admin_hide_lead_data','$admin_hide_phone_data','$agentcall_email','$modify_email_accounts','$failed_login_count','$last_login_date','$last_ip','$pass_hash','$alter_admin_interface_options','$max_inbound_calls','$modify_custom_dialplans','$wrapup_seconds_override','$modify_languages','$selected_language','$user_choose_language','$ignore_group_on_search','$api_list_restrict','$api_allowed_functions','$lead_filter_id','$admin_cf_show_hidden','$agentcall_chat','$user_hide_realtime','$access_recordings')"; + $INSERTindex++; + if ($INSERTgroup_counter > 0) + { + $i = 1; + while ($i < $INSERTgroup_limit) + { + $SQL.= ",('$USERto_insert[$INSERTindex]','$USERto_insert[$INSERTindex]','$USERto_insert[$INSERTindex]','$user_level','$user_group','$phone_login','$phone_pass','$delete_users','$delete_user_groups','$delete_lists','$delete_campaigns','$delete_ingroups','$delete_remote_agents','$load_leads','$ACCIDcampaign_detail','$ast_admin_access','$ast_delete_phones','$delete_scripts','$modify_leads','$hotkeys_active','$change_agent_campaign','$agent_choose_ingroups','$closer_campaigns','$scheduled_callbacks','$agentonly_callbacks','$agentcall_manual','$vicidial_recording','$vicidial_transfers','$delete_filters','$alter_agent_interface_options','$closer_default_blended','$delete_call_times','$modify_call_times','$modify_users','$modify_campaigns','$modify_lists','$modify_scripts','$modify_filters','$modify_ingroups','$modify_usergroups','$modify_remoteagents','$modify_servers','$view_reports','$vicidial_recording_override','$alter_custdata_override','$qc_enabled','$qc_user_level','$qc_pass','$qc_finish','$qc_commit','$add_timeclock_log','$modify_timeclock_log','$delete_timeclock_log','$alter_custphone_override','$vdc_agent_api_access','$modify_inbound_dids','$delete_inbound_dids','$user_active','$alert_enabled','$download_lists','$agent_shift_enforcement_override','$manager_shift_enforcement_override','$shift_override_flag','$export_reports','$delete_from_dnc','$email','$user_code','$territory','$allow_alerts','$agent_choose_territories','$custom_one','$custom_two','$custom_three','$custom_four','$custom_five','$voicemail_id','$agent_call_log_view_override','$callcard_admin','$agent_choose_blended','$realtime_block_user_info','$custom_fields_modify','$USERforce_pw','$agent_lead_search_override','$modify_shifts','$modify_phones','$modify_carriers','$modify_labels','$modify_statuses','$modify_voicemail','$modify_audiostore','$modify_moh','$modify_tts','$preset_contact_search','$modify_contacts','$modify_same_user_level','$admin_hide_lead_data','$admin_hide_phone_data','$agentcall_email','$modify_email_accounts','$failed_login_count','$last_login_date','$last_ip','$pass_hash','$alter_admin_interface_options','$max_inbound_calls','$modify_custom_dialplans','$wrapup_seconds_override','$modify_languages','$selected_language','$user_choose_language','$ignore_group_on_search','$api_list_restrict','$api_allowed_functions','$lead_filter_id','$admin_cf_show_hidden','$agentcall_chat','$user_hide_realtime','$access_recordings')"; + $SQL_sentence.= " |$USERto_insert[$INSERTindex]"; + $i++; + $INSERTindex++; + } + $INSERTgroup_counter--; + } + else + { + $i = 1; + while ($i < $INSERTremainder) + { + $SQL.= ",('$USERto_insert[$INSERTindex]','$USERto_insert[$INSERTindex]','$USERto_insert[$INSERTindex]','$user_level','$user_group','$phone_login','$phone_pass','$delete_users','$delete_user_groups','$delete_lists','$delete_campaigns','$delete_ingroups','$delete_remote_agents','$load_leads','$ACCIDcampaign_detail','$ast_admin_access','$ast_delete_phones','$delete_scripts','$modify_leads','$hotkeys_active','$change_agent_campaign','$agent_choose_ingroups','$closer_campaigns','$scheduled_callbacks','$agentonly_callbacks','$agentcall_manual','$vicidial_recording','$vicidial_transfers','$delete_filters','$alter_agent_interface_options','$closer_default_blended','$delete_call_times','$modify_call_times','$modify_users','$modify_campaigns','$modify_lists','$modify_scripts','$modify_filters','$modify_ingroups','$modify_usergroups','$modify_remoteagents','$modify_servers','$view_reports','$vicidial_recording_override','$alter_custdata_override','$qc_enabled','$qc_user_level','$qc_pass','$qc_finish','$qc_commit','$add_timeclock_log','$modify_timeclock_log','$delete_timeclock_log','$alter_custphone_override','$vdc_agent_api_access','$modify_inbound_dids','$delete_inbound_dids','$user_active','$alert_enabled','$download_lists','$agent_shift_enforcement_override','$manager_shift_enforcement_override','$shift_override_flag','$export_reports','$delete_from_dnc','$email','$user_code','$territory','$allow_alerts','$agent_choose_territories','$custom_one','$custom_two','$custom_three','$custom_four','$custom_five','$voicemail_id','$agent_call_log_view_override','$callcard_admin','$agent_choose_blended','$realtime_block_user_info','$custom_fields_modify','$USERforce_pw','$agent_lead_search_override','$modify_shifts','$modify_phones','$modify_carriers','$modify_labels','$modify_statuses','$modify_voicemail','$modify_audiostore','$modify_moh','$modify_tts','$preset_contact_search','$modify_contacts','$modify_same_user_level','$admin_hide_lead_data','$admin_hide_phone_data','$agentcall_email','$modify_email_accounts','$failed_login_count','$last_login_date','$last_ip','$pass_hash','$alter_admin_interface_options','$max_inbound_calls','$modify_custom_dialplans','$wrapup_seconds_override','$modify_languages','$selected_language','$user_choose_language','$ignore_group_on_search','$api_list_restrict','$api_allowed_functions','$lead_filter_id','$admin_cf_show_hidden','$agentcall_chat','$user_hide_realtime','$access_recordings')"; + $SQL_sentence.= " |$USERto_insert[$INSERTindex]"; + $i++; + $INSERTindex++; + } + $INSERTloopflag="FALSE"; + } + if ($DB) {echo "$SQL|";} + $SQL_rslt = mysql_to_mysqli($SQL, $link); + } + + #Log our stuff + $SQL_sentence = "Users copied from user ID#$user: " . $SQL_sentence; + $SQL_log = "INSERT INTO vicidial_users (user,pass,full_name,user_level,user_group,phone_login,phone_pass,delete_users,delete_user_groups,delete_lists,delete_campaigns,delete_ingroups,delete_remote_agents,load_leads,campaign_detail,ast_admin_access,ast_delete_phones,delete_scripts,modify_leads,hotkeys_active,change_agent_campaign,agent_choose_ingroups,closer_campaigns,scheduled_callbacks,agentonly_callbacks,agentcall_manual,vicidial_recording,vicidial_transfers,delete_filters,alter_agent_interface_options,closer_default_blended,delete_call_times,modify_call_times,modify_users,modify_campaigns,modify_lists,modify_scripts,modify_filters,modify_ingroups,modify_usergroups,modify_remoteagents,modify_servers,view_reports,vicidial_recording_override,alter_custdata_override,qc_enabled,qc_user_level,qc_pass,qc_finish,qc_commit,add_timeclock_log,modify_timeclock_log,delete_timeclock_log,alter_custphone_override,vdc_agent_api_access,modify_inbound_dids,delete_inbound_dids,active,alert_enabled,download_lists,agent_shift_enforcement_override,manager_shift_enforcement_override,shift_override_flag,export_reports,delete_from_dnc,email,user_code,territory,allow_alerts,agent_choose_territories,custom_one,custom_two,custom_three,custom_four,custom_five,voicemail_id,agent_call_log_view_override,callcard_admin,agent_choose_blended,realtime_block_user_info,custom_fields_modify,force_change_password,agent_lead_search_override,modify_shifts,modify_phones,modify_carriers,modify_labels,modify_statuses,modify_voicemail,modify_audiostore,modify_moh,modify_tts,preset_contact_search,modify_contacts,modify_same_user_level,admin_hide_lead_data,admin_hide_phone_data,agentcall_email,modify_email_accounts,failed_login_count,last_login_date,last_ip,pass_hash,alter_admin_interface_options,max_inbound_calls,modify_custom_dialplans,wrapup_seconds_override,modify_languages,selected_language,user_choose_language,ignore_group_on_search,api_list_restrict,api_allowed_functions,lead_filter_id,admin_cf_show_hidden,agentcall_chat,user_hide_realtime,access_recordings) VALUES ('$USERto_insert[0]','$USERto_insert[0]','$USERto_insert[0]','$user_level','$user_group','$phone_login','$phone_pass','$delete_users','$delete_user_groups','$delete_lists','$delete_campaigns','$delete_ingroups','$delete_remote_agents','$load_leads','$ACCIDcampaign_detail','$ast_admin_access','$ast_delete_phones','$delete_scripts','$modify_leads','$hotkeys_active','$change_agent_campaign','$agent_choose_ingroups','$closer_campaigns','$scheduled_callbacks','$agentonly_callbacks','$agentcall_manual','$vicidial_recording','$vicidial_transfers','$delete_filters','$alter_agent_interface_options','$closer_default_blended','$delete_call_times','$modify_call_times','$modify_users','$modify_campaigns','$modify_lists','$modify_scripts','$modify_filters','$modify_ingroups','$modify_usergroups','$modify_remoteagents','$modify_servers','$view_reports','$vicidial_recording_override','$alter_custdata_override','$qc_enabled','$qc_user_level','$qc_pass','$qc_finish','$qc_commit','$add_timeclock_log','$modify_timeclock_log','$delete_timeclock_log','$alter_custphone_override','$vdc_agent_api_access','$modify_inbound_dids','$delete_inbound_dids','$user_active','$alert_enabled','$download_lists','$agent_shift_enforcement_override','$manager_shift_enforcement_override','$shift_override_flag','$export_reports','$delete_from_dnc','$email','$user_code','$territory','$allow_alerts','$agent_choose_territories','$custom_one','$custom_two','$custom_three','$custom_four','$custom_five','$voicemail_id','$agent_call_log_view_override','$callcard_admin','$agent_choose_blended','$realtime_block_user_info','$custom_fields_modify','$USERforce_pw','$agent_lead_search_override','$modify_shifts','$modify_phones','$modify_carriers','$modify_labels','$modify_statuses','$modify_voicemail','$modify_audiostore','$modify_moh','$modify_tts','$preset_contact_search','$modify_contacts','$modify_same_user_level','$admin_hide_lead_data','$admin_hide_phone_data','$agentcall_email','$modify_email_accounts','$failed_login_count','$last_login_date','$last_ip','$pass_hash','$alter_admin_interface_options','$max_inbound_calls','$modify_custom_dialplans','$wrapup_seconds_override','$modify_languages','$selected_language','$user_choose_language','$ignore_group_on_search','$api_list_restrict','$api_allowed_functions','$lead_filter_id','$admin_cf_show_hidden','$agentcall_chat','$user_hide_realtime','$access_recordings')"; + $SQL_log = preg_replace('/;/', '', $SQL_log); + $SQL_log = addslashes($SQL_log); + $admin_log_stmt="INSERT INTO vicidial_admin_log set event_date='$SQLdate', user='$PHP_AUTH_USER', ip_address='$ip', event_section='USERS', event_type='COPY', record_id='$USERcopy_from', event_code='ADMIN COPY BULK USERS', event_sql=\"$SQL_log\", event_notes='$SQL_sentence';"; + if ($DB) {echo "$admin_log_stmt|";} + $admin_log_rslt=mysql_to_mysqli($admin_log_stmt, $link); + + $ENDtime = date("U"); + $RUNtime = ($ENDtime - $STARTtime); + echo "
    "._QXZ("Users added")."."; + echo "\n\n\n
    \n"._QXZ("runtime").": $RUNtime "._QXZ("seconds"); + echo "

    "._QXZ("Go back to tools")."."; + } + + +################################################################################ +##### Delete users confirmation +elseif ($form_to_run == "BULKUSERSDELETE") ### BULK USER DELETE + { + if ($USERdelete_from=="BLANK") + { + echo _QXZ("Go back, you did not specify any users to delete.")."\n"; + exit; + } + echo " "._QXZ("WARNING: The following users will be deleted!!!").""; + $i = 0; + while ($i < count($USERdelete_from)) + { + echo "
    $USERdelete_from[$i]"; + $i++; + } + $USERdelete_from = serialize($USERdelete_from); + echo "
    "; + echo ""; + echo ""; + echo "\n"; + echo "
    \n"; + echo ""; + } + + +################################################################################ +##### Process delete users +elseif ($form_to_run == "BULKUSERSDELETEconfirmed")### BULK USER DELETE CONFIRM + { + $USERdelete_from_CONFIRMED = unserialize($USERdelete_from_CONFIRMED); + $SQL = "DELETE FROM vicidial_users WHERE user IN ('$USERdelete_from_CONFIRMED[0]'"; + $i = 1; + while ($i < count($USERdelete_from_CONFIRMED)) + { + $SQL.= ",'" . $USERdelete_from_CONFIRMED[$i] . "'"; + $i++; + } + $SQL.= ");"; + + if ($DB) {echo "$SQL|";} + $SQL_rslt = mysql_to_mysqli($SQL, $link); + + #Log our stuff + $SQL_sentence = " "; + $SQL_log = "|$SQL|"; + $SQL_log = preg_replace('/;/', '', $SQL_log); + $SQL_log = addslashes($SQL_log); + $admin_log_stmt="INSERT INTO vicidial_admin_log set event_date='$SQLdate', user='$PHP_AUTH_USER', ip_address='$ip', event_section='USERS', event_type='DELETE', record_id='0', event_code='ADMIN DELETE BULK USERS', event_sql=\"$SQL_log\", event_notes='$SQL_sentence';"; + if ($DB) {echo "$admin_log_stmt|";} + $admin_log_rslt=mysql_to_mysqli($admin_log_stmt, $link); + + echo _QXZ("Deleted."); + echo "
    "._QXZ("Go back to tools")."."; + } + + +############################################################################### +#### Build forms +else + { + echo "

    These are tools for adding, copying and deleting DIDs, Campaign AC-CIDs and Users.
    Adding and copying are limited to $INSERTmax_limit per run.

    "; + ### DID - ADD + if ( $modify_dids < 1 ) + { + echo "
    "; + echo "\n"; + echo "\n"; + echo "
    "._QXZ("DID Bulk Copy")."$NWB#DIDADD$NWE
    "._QXZ("You do not have permission to use this section.")."
    \n"; + } + else + { + echo "
    "; + echo ""; + echo "
    "; + echo ""; + echo "\n"; + echo "\n"; + echo ""; + echo "\n"; + echo "
    "._QXZ("DID Bulk Copy")."$NWB#DIDADD$NWE
    "._QXZ("DID to copy from").": \n"; + + $dids_to_copy = array(); + $SQL="SELECT did_pattern,did_description FROM vicidial_inbound_dids WHERE $admin_viewable_groupsSQL ORDER BY did_pattern ASC;"; + if ($DB) {echo "$SQL|";} + $SQL_rslt = mysql_to_mysqli($SQL, $link); + $did_count = mysqli_num_rows($SQL_rslt); + $i = 0; + while ($i < $did_count) + { + $row = mysqli_fetch_row($SQL_rslt); + $dids_to_copy[$i] = $row[0]; + $dids_to_copy_name[$i] = $row[1]; + $i++; + } + + echo "
    "._QXZ("DIDs to insert").":
    \n"; + } + + ### DID - DELETE + if ( $modify_dids < 1 || $delete_dids < 1 ) + { + echo "
    "; + echo "\n"; + echo "\n"; + echo "
    "._QXZ("DID Bulk Delete")."$NWB#DIDDELETE$NWE
    "._QXZ("You do not have permission to use this section.")."
    \n"; + } + else + { + echo "
    "; + echo ""; + echo "
    "; + echo ""; + echo "\n"; + echo "\n"; + echo "\n"; + echo "
    "._QXZ("DID Bulk Delete")."$NWB#DIDDELETE$NWE
    "._QXZ("DIDs to delete").": \n"; + + $DIDto_copy = array(); + $SQL="SELECT did_pattern,did_description FROM vicidial_inbound_dids WHERE did_pattern NOT IN ('default') AND $admin_viewable_groupsSQL ORDER BY did_pattern ASC;"; + if ($DB) {echo "$SQL|";} + $SQL_rslt = mysql_to_mysqli($SQL, $link); + $did_count = mysqli_num_rows($SQL_rslt); + $i = 0; + while ($i < $did_count) + { + $row = mysqli_fetch_row($SQL_rslt); + $DIDto_delete[$i] = $row[0]; + $DIDto_delete_desc[$i] = $row[1]; + $i++; + } + + echo "
    \n"; + echo ""; + } + + ### AC-CID - ADD + if ( $modify_campaigns < 1 ) + { + echo "
    "; + echo "\n"; + echo "\n"; + echo "
    "._QXZ("AC-CID Bulk Add")."$NWB#ACCIDADD$NWE
    "._QXZ("You do not have permission to use this section.")."
    \n"; + } + else + { + echo "
    "; + echo ""; + echo "
    "; + echo ""; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "
    "._QXZ("AC-CID Bulk Add")."$NWB#ACCIDADD$NWE
    "._QXZ("Campaign").":\n"; + + $ACCIDcampaigns_to_copy = array(); + $SQL="SELECT campaign_id,campaign_name FROM vicidial_campaigns WHERE $allowed_campaignsSQL AND $admin_viewable_groupsSQL ORDER BY campaign_id ASC;"; + if ($DB) {echo "$SQL|";} + $SQL_rslt = mysql_to_mysqli($SQL, $link); + $camp_count = mysqli_num_rows($SQL_rslt); + $i = 0; + while ($i < $camp_count) + { + $row = mysqli_fetch_row($SQL_rslt); + $ACCIDcampaigns_to_copy[$i] = $row[0]; + $ACCIDcampaigns_to_copy_names[$i] = $row[1]; + $i++; + } + + echo "
    "._QXZ("Active?").":
    "._QXZ("AC-CIDs").":
    \n"; + echo ""; + } + + ### AC-CID - DELETE + + if ( $delete_campaigns < 1 ) + { + echo "
    "; + echo "\n"; + echo "\n"; + echo "
    "._QXZ("AC-CID Bulk Delete")."$NWB#ACCIDDELETE$NWE
    "._QXZ("You do not have permission to use this section.")."
    \n"; + } + else + { + echo "
    "; + echo ""; + echo "
    "; + echo ""; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "
    "._QXZ("AC-CID Bulk Delete")."$NWB#ACCIDDELETE$NWE
    "._QXZ("Campaign").":\n"; + + $ACCIDdelete_campaign_selection = array(); + $SQL="SELECT campaign_id,campaign_name from vicidial_campaigns WHERE campaign_id IN (select distinct campaign_id from vicidial_campaign_cid_areacodes) AND $allowed_campaignsSQL AND $admin_viewable_groupsSQL ORDER BY campaign_id ASC;"; + if ($DB) {echo "$SQL|";} + $SQL_rslt = mysql_to_mysqli($SQL, $link); + $camp_count = mysqli_num_rows($SQL_rslt); + $i = 0; + while ($i < $camp_count) + { + $row = mysqli_fetch_row($SQL_rslt); + $ACCIDdelete_campaign_selection[$i] = $row[0]; + $ACCIDdelete_campaign_name[$i] = $row[1]; + $i++; + } + + echo "
    "._QXZ("Clear all AC-CIDs?").":
    \n"; + echo ""; + } + + ### USERS - ADD + if ( $modify_users < 1 ) + { + echo "
    "; + echo "\n"; + echo "\n"; + echo "
    "._QXZ("User Bulk Copy")."$NWB#USERADD$NWE
    "._QXZ("You do not have permission to use this section.")."
    \n"; + } + else + { + echo "
    "; + echo ""; + echo "
    "; + echo ""; + echo "\n"; + echo "\n"; + echo ""; + echo ""; + echo "\n"; + echo "\n"; + echo "
    "._QXZ("User Bulk Copy")."$NWB#USERADD$NWE
    "._QXZ("User to copy from").": \n"; + + $USERto_copy = array(); + $SQL="SELECT user, full_name FROM vicidial_users WHERE user NOT IN ('VDAD','VDCL') AND $admin_viewable_groupsSQL ORDER BY user ASC;"; + if ($DB) {echo "$SQL|";} + $SQL_rslt = mysql_to_mysqli($SQL, $link); + $user_count = mysqli_num_rows($SQL_rslt); + $i = 0; + while ($i < $user_count) + { + $row = mysqli_fetch_row($SQL_rslt); + $USERto_copy[$i] = $row[0]; + $USERto_copy_name[$i] = $row[1]; + $i++; + } + + echo "
    "._QXZ("User Start ID").":
    "._QXZ("User Stop ID").":
    "._QXZ("Force PW change?").":
    \n"; + echo ""; + } + + ### USERS - DELETE + if ( $delete_users < 1 || $modify_users < 1) + { + echo "
    "; + echo "\n"; + echo "\n"; + echo "
    "._QXZ("User Bulk Delete")."$NWB#USERDELETE$NWE
    "._QXZ("You do not have permission to use this section.")."
    \n"; + } + else + { + echo "
    "; + echo ""; + echo "
    "; + echo ""; + echo "\n"; + echo "\n"; + echo "\n"; + echo "
    "._QXZ("User Bulk Delete")."$NWB#USERDELETE$NWE
    "._QXZ("Users to delete").": \n"; + + $SQL = "SELECT user FROM vicidial_live_agents;"; + if ($DB) {echo "$SQL|";} + $SQL_rslt = mysql_to_mysqli($SQL, $link); + $user_count = mysqli_num_rows($SQL_rslt); + if ($user_count == 0) + { + $live_agentsSQL = "''"; + } + else + { + $i = 0; + while ($i < $user_count) + { + $row = mysqli_fetch_row($SQL_rslt); + $live_agentsSQL.= "'" . $row[0] . "',"; + $i++; + } + $live_agentsSQL.="''"; + } + + $USERto_delete = array(); + if ($modify_level != 1) + { + $SQL="SELECT user, full_name FROM vicidial_users WHERE user NOT IN ('VDAD','VDCL','$PHP_AUTH_USER',$live_agentsSQL) AND user_level != 9 AND $admin_viewable_groupsSQL ORDER BY user ASC;"; + } + else + { + $SQL="SELECT user, full_name FROM vicidial_users WHERE user NOT IN ('VDAD','VDCL','$PHP_AUTH_USER',$live_agentsSQL) AND $admin_viewable_groupsSQL ORDER BY user ASC;"; + } + if ($DB) {echo "$SQL|";} + $SQL_rslt = mysql_to_mysqli($SQL, $link); + $user_count = mysqli_num_rows($SQL_rslt); + $i = 0; + while ($i < $user_count) + { + $row = mysqli_fetch_row($SQL_rslt); + $USERto_delete[$i] = $row[0]; + $USERto_delete_name[$i] = $row[1]; + $i++; + } + echo "
    \n"; + + echo "

    "._QXZ("Version").": $version "._QXZ("Build").": $build

    "; + echo ""; + } + } +?>