From aba6b6fde06ba8b68fbb23f549f6c8574226ff55 Mon Sep 17 00:00:00 2001 From: FusionPBX Date: Sun, 12 Apr 2026 00:50:23 +0000 Subject: [PATCH] Fix call broadcast file upload --- app/call_broadcast/call_broadcast_edit.php | 64 +++---------- app/call_broadcast/call_broadcast_send.php | 106 +++++++++++---------- 2 files changed, 68 insertions(+), 102 deletions(-) diff --git a/app/call_broadcast/call_broadcast_edit.php b/app/call_broadcast/call_broadcast_edit.php index d5fdd55ba..011587fa1 100644 --- a/app/call_broadcast/call_broadcast_edit.php +++ b/app/call_broadcast/call_broadcast_edit.php @@ -17,7 +17,7 @@ The Initial Developer of the Original Code is Mark J Crane - Portions created by the Initial Developer are Copyright (C) 2008-2025 + Portions created by the Initial Developer are Copyright (C) 2008-2026 the Initial Developer. All Rights Reserved. Contributor(s): @@ -60,52 +60,6 @@ $broadcast_description = ''; $broadcast_toll_allow = ''; -//function to Upload CSV/TXT file -/** - * Uploads a file and prepares the SQL query for broadcasting phone numbers. - * - * @param string $sql The initial SQL query. - * @param mixed $broadcast_phone_numbers The phone numbers to broadcast, or an empty value if not applicable. - * - * @return array An array containing the result code ('code') and the prepared SQL query ('sql'). - */ -function upload_file($sql, $broadcast_phone_numbers) { - $upload_csv = $sql = ''; - if (isset($_FILES['broadcast_phone_numbers_file']) && !empty($_FILES['broadcast_phone_numbers_file']) && $_FILES['broadcast_phone_numbers_file']['size'] > 0) { - $filename=$_FILES["broadcast_phone_numbers_file"]["tmp_name"]; - $file_extension = array('application/octet-stream','application/vnd.ms-excel','text/plain','text/csv','text/tsv'); - if (in_array($_FILES['broadcast_phone_numbers_file']['type'],$file_extension)) { - $file = fopen($filename, "r"); - $count = 0; - while (($getData = fgetcsv($file, 0, "\n")) !== FALSE) - { - $count++; - if ($count == 1) { continue; } - $getData = preg_split('/[ ,|]/', $getData[0], '', PREG_SPLIT_NO_EMPTY); - $separator = $getData[0]; - $separator .= (isset($getData[1]) && $getData[1] != '')? '|'.$getData[1] : ''; - $separator .= (isset($getData[2]) && $getData[2] != '')? ','.$getData[2] : ''; - $separator .= PHP_EOL; - $upload_csv .= $separator; - } - fclose($file); - } - else { - return array('code'=>false,'sql'=>''); - } - } - if (!empty($broadcast_phone_numbers) && !empty($upload_csv)) { - $sql .= $broadcast_phone_numbers.'\n'.$upload_csv; - } - elseif (empty($broadcast_phone_numbers) && !empty($upload_csv)) { - $sql .= $upload_csv; - } - else { - $sql .= $broadcast_phone_numbers; - } - return array('code'=>true,'sql'=> $sql); - } - //get the http post variables and set them to php variables if (!empty($_POST)) { $broadcast_name = $_POST["broadcast_name"]; @@ -226,15 +180,23 @@ if (!empty($_POST) && empty($_POST["persistformvar"])) { //execute if (!empty($array)) { + //save the phone numbers upload the file + $upload_csv = $sql = ''; + if (isset($_FILES['ulfile']) && !empty($_FILES['ulfile']) && $_FILES['ulfile']['size'] > 0) { + $file_name = $_FILES["ulfile"]["tmp_name"]; + $allowed_file_extensions = array('application/octet-stream','application/vnd.ms-excel','text/plain','text/csv','text/tsv'); + if (in_array($_FILES['ulfile']['type'], $allowed_file_extensions)) { + $broadcast_phone_numbers = file_get_contents($_FILES["ulfile"]["tmp_name"]); + } + } + //add file selection and download sample - $file_res = upload_file($sql ?? '', $broadcast_phone_numbers); - if ($file_res['code'] != true) { + if (empty($broadcast_phone_numbers)) { $_SESSION["message_mood"] = "negative"; $_SESSION["message"] = $text['file-error']; header("Location: ".$error_return_url); exit; } - $broadcast_phone_numbers = $file_res['sql']; //build the database array $array['call_broadcasts'][0]['domain_uuid'] = $domain_uuid; @@ -523,7 +485,7 @@ if (!empty($_POST) && empty($_POST["persistformvar"])) { echo " "; echo "

"; - echo " ".$text['label-sample_file'].""; + echo " ".$text['label-sample_file'].""; echo "

"; echo "".$text['description-phone']."

\n"; diff --git a/app/call_broadcast/call_broadcast_send.php b/app/call_broadcast/call_broadcast_send.php index 205569340..852e9573c 100644 --- a/app/call_broadcast/call_broadcast_send.php +++ b/app/call_broadcast/call_broadcast_send.php @@ -17,7 +17,7 @@ The Initial Developer of the Original Code is Mark J Crane - Portions created by the Initial Developer are Copyright (C) 2008-2020 + Portions created by the Initial Developer are Copyright (C) 2008-2026 the Initial Developer. All Rights Reserved. Contributor(s): @@ -172,61 +172,65 @@ $tmp_value_array = explode ("|", $tmp_value); //remove the number formatting - $phone_1 = preg_replace('{\D}', '', $tmp_value_array[0]); + $phone_number = preg_replace('{\D}', '', $tmp_value_array[0]); - if (is_numeric($phone_1)) { - //get the dialplan variables and bridge statement - //$dialplan = new dialplan; - //$dialplan->domain_uuid = $_SESSION['domain_uuid']; - //$dialplan->outbound_routes($phone_1); - //$dialplan_variables = $dialplan->variables; - //$bridge_array[0] = $dialplan->bridges; + //skip the if empty or not numeric + if (empty($phone_number) || !is_numeric($phone_number)) { + continue; + } - //prepare the string - $channel_variables = "ignore_early_media=true"; - $channel_variables .= ",origination_number=".$phone_1; - $channel_variables .= ",origination_caller_id_name='$broadcast_caller_id_name'"; - $channel_variables .= ",origination_caller_id_number=$broadcast_caller_id_number"; - $channel_variables .= ",domain_uuid=".$_SESSION['domain_uuid']; - $channel_variables .= ",domain=".$_SESSION['domain_name']; - $channel_variables .= ",domain_name=".$_SESSION['domain_name']; - $channel_variables .= ",accountcode='$broadcast_accountcode'"; - $channel_variables .= ",toll_allow='$broadcast_toll_allow'"; - if ($broadcast_avmd == "true") { - $channel_variables .= ",execute_on_answer='avmd start'"; + //get the dialplan variables and bridge statement + //$dialplan = new dialplan; + //$dialplan->domain_uuid = $_SESSION['domain_uuid']; + //$dialplan->outbound_routes($phone_number); + //$dialplan_variables = $dialplan->variables; + //$bridge_array[0] = $dialplan->bridges; + + //prepare the string + $channel_variables = "ignore_early_media=true"; + $channel_variables .= ",origination_number=".$phone_number; + $channel_variables .= ",origination_caller_id_name='$broadcast_caller_id_name'"; + $channel_variables .= ",origination_caller_id_number=$broadcast_caller_id_number"; + $channel_variables .= ",domain_uuid=".$_SESSION['domain_uuid']; + $channel_variables .= ",domain=".$_SESSION['domain_name']; + $channel_variables .= ",domain_name=".$_SESSION['domain_name']; + $channel_variables .= ",accountcode='$broadcast_accountcode'"; + $channel_variables .= ",toll_allow='$broadcast_toll_allow'"; + if ($broadcast_avmd == "true") { + $channel_variables .= ",execute_on_answer='avmd start'"; + } + //$origination_url = "{".$channel_variables."}".$bridge_array[0]; + $origination_url = "{".$channel_variables."}loopback/".$phone_number.'/'.$_SESSION['domain_name']; + + //get the context + $context = $_SESSION['domain_name']; + + //set the command + $command = "bgapi sched_api +".$sched_seconds." ".$call_broadcast_uuid." bgapi originate ".$origination_url." ".$broadcast_destination_data." XML $context"; + + //if the event socket connection is lost then re-connect + if (!$fp) { + $fp = event_socket::create(); + } + + //method 1 + $response = event_socket::command($command); + + //method 2 + //cmd_async($settings->get('switch', 'bin')."/fs_cli -x \"".$command."\";"); + + //spread the calls out so that they are scheduled with different times + if (strlen($broadcast_concurrent_limit) > 0 && !empty($broadcast_timeout)) { + if ($broadcast_concurrent_limit == $count) { + $sched_seconds = $sched_seconds + $broadcast_timeout; + $count=0; } - //$origination_url = "{".$channel_variables."}".$bridge_array[0]; - $origination_url = "{".$channel_variables."}loopback/".$phone_1.'/'.$_SESSION['domain_name']; + } - //get the context - $context = $_SESSION['domain_name']; - - //set the command - $cmd = "bgapi sched_api +".$sched_seconds." ".$call_broadcast_uuid." bgapi originate ".$origination_url." ".$broadcast_destination_data." XML $context"; - - //if the event socket connection is lost then re-connect - if (!$fp) { - $fp = event_socket::create(); - } - - //method 1 - $response = event_socket::command($cmd); - - //method 2 - //cmd_async($settings->get('switch', 'bin')."/fs_cli -x \"".$cmd."\";"); - - //spread the calls out so that they are scheduled with different times - if (strlen($broadcast_concurrent_limit) > 0 && !empty($broadcast_timeout)) { - if ($broadcast_concurrent_limit == $count) { - $sched_seconds = $sched_seconds + $broadcast_timeout; - $count=0; - } - } - - $count++; - } + //increment the count + $count++; } - + echo "
\n"; echo "\n"; echo "\n";