Portions created by the Initial Developer are Copyright (C) 2008-2024 the Initial Developer. All Rights Reserved. Contributor(s): Mark J Crane Luis Daniel Lucio Quiroz */ //includes files require_once dirname(__DIR__, 2) . "/resources/require.php"; require_once "resources/check_auth.php"; //check permissions if (permission_exists('call_broadcast_edit')) { //access granted } else { echo "access denied"; exit; } //add multi-lingual support $language = new text; $text = $language->get(); //set the action with add or update if (!empty($_REQUEST["id"]) && is_uuid($_REQUEST["id"])) { $action = "update"; $call_broadcast_uuid = $_REQUEST["id"]; } else { $action = "add"; } //set the defaults $broadcast_name = ''; $broadcast_start_time = ''; $broadcast_timeout = ''; $broadcast_concurrent_limit = ''; $broadcast_caller_id_name = ''; $broadcast_caller_id_number = ''; $broadcast_accountcode = ''; $broadcast_destination_data = ''; $broadcast_description = ''; $broadcast_toll_allow = ''; //function to Upload CSV/TXT file 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], null, 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"]; $broadcast_start_time = $_POST["broadcast_start_time"]; $broadcast_timeout = $_POST["broadcast_timeout"]; $broadcast_concurrent_limit = $_POST["broadcast_concurrent_limit"]; $broadcast_caller_id_name = $_POST["broadcast_caller_id_name"]; $broadcast_caller_id_number = $_POST["broadcast_caller_id_number"]; //$broadcast_destination_type = $_POST["broadcast_destination_type"]; $broadcast_phone_numbers = $_POST["broadcast_phone_numbers"]; $broadcast_avmd = $_POST["broadcast_avmd"]; $broadcast_destination_data = $_POST["broadcast_destination_data"]; $broadcast_description = $_POST["broadcast_description"]; $broadcast_toll_allow = $_POST["broadcast_toll_allow"]; if (if_group("superadmin")) { $broadcast_accountcode = $_POST["broadcast_accountcode"]; } else if (if_group("admin") && file_exists($_SERVER["PROJECT_ROOT"]."/app/billing/app_config.php")){ $sql = "select count(*) "; $sql .= "from v_billings "; $sql .= "where domain_uuid = :domain_uuid "; $sql .= "and type_value = :type_value "; $parameters['domain_uuid'] = $_SESSION['domain_uuid']; $parameters['type_value'] = $_POST['accountcode']; $database = new database; $num_rows = $database->select($sql, $parameters, 'column'); $broadcast_accountcode = $num_rows > 0 ? $_POST["broadcast_accountcode"] : $_SESSION['domain_name']; unset($sql, $parameters, $num_rows); } else{ $broadcast_accountcode = $_SESSION['domain_name']; } } if (!empty($_POST) && empty($_POST["persistformvar"])) { //delete the call broadcast if (permission_exists('call_broadcast_delete')) { if (!empty($_POST['action']) && $_POST['action'] == 'delete' && is_uuid($call_broadcast_uuid)) { //prepare $call_broadcasts[0]['checked'] = 'true'; $call_broadcasts[0]['uuid'] = $call_broadcast_uuid; //delete $obj = new call_broadcast; $obj->delete($call_broadcasts); //redirect header('Location: call_broadcast.php'); exit; } } $msg = ''; if ($action == "update") { $call_broadcast_uuid = $_POST["call_broadcast_uuid"]; } //validate the token $token = new token; if (!$token->validate($_SERVER['PHP_SELF'])) { message::add($text['message-invalid_token'],'negative'); header('Location: call_broadcast.php'); exit; } //check for all required data if (empty($broadcast_name)) { $msg .= "".$text['confirm-name']."
\n"; } //if (empty($broadcast_description)) { $msg .= "Please provide: Description
\n"; } //if (empty($broadcast_timeout)) { $msg .= "Please provide: Timeout
\n"; } //if (empty($broadcast_concurrent_limit)) { $msg .= "Please provide: Concurrent Limit
\n"; } //if (empty($recording_uuid)) { $msg .= "Please provide: Recording
\n"; } //if (empty($broadcast_caller_id_name)) { $msg .= "Please provide: Caller ID Name
\n"; } //if (empty($broadcast_caller_id_number)) { $msg .= "Please provide: Caller ID Number
\n"; } //if (empty($broadcast_destination_type)) { $msg .= "Please provide: Type
\n"; } //if (empty($broadcast_phone_numbers)) { $msg .= "Please provide: Phone Number List
\n"; } //if (empty($broadcast_avmd)) { $msg .= "Please provide: Voicemail Detection
\n"; } //if (empty($broadcast_destination_data)) { $msg .= "Please provide: Destination
\n"; } if (!empty($msg) && empty($_POST["persistformvar"])) { require_once "resources/header.php"; require_once "resources/persist_form_var.php"; echo "
\n"; echo "
\n"; echo $msg."
"; echo "
\n"; persistformvar($_POST); echo "
\n"; require_once "resources/footer.php"; return; } //add or update the database if (empty($_POST["persistformvar"])) { //prep insert if ($action == "add" && permission_exists('call_broadcast_add')) { //begin insert array $call_broadcast_uuid = uuid(); $array['call_broadcasts'][0]['call_broadcast_uuid'] = $call_broadcast_uuid; //set message message::add($text['confirm-add']); //set return url on error $error_return_url = "call_broadcast_edit.php"; } //prep update if ($action == "update" && permission_exists('call_broadcast_edit')) { //begin update array $array['call_broadcasts'][0]['call_broadcast_uuid'] = $call_broadcast_uuid; //set message message::add($text['confirm-update']); //set return url on error $error_return_url = "call_broadcast_edit.php?id=".urlencode($_GET['id']); } //execute if (!empty($array)) { //add file selection and download sample $file_res = upload_file($sql ?? '', $broadcast_phone_numbers); if ($file_res['code'] != true) { $_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; $array['call_broadcasts'][0]['broadcast_name'] = $broadcast_name; if (permission_exists('call_broadcast_start_time')) { $array['call_broadcasts'][0]['broadcast_start_time'] = strtotime($broadcast_start_time) - strtotime('now') >= 0 ? strtotime($broadcast_start_time) - strtotime('now') : null; } if (permission_exists('call_broadcast_accountcode')) { $array['call_broadcasts'][0]['broadcast_accountcode'] = $broadcast_accountcode; } if (permission_exists('call_broadcast_timeout')) { $array['call_broadcasts'][0]['broadcast_timeout'] = strlen($broadcast_timeout) != 0 ? $broadcast_timeout : null; } if (permission_exists('call_broadcast_concurrent_limit')) { $array['call_broadcasts'][0]['broadcast_concurrent_limit'] = strlen($broadcast_concurrent_limit) != 0 ? $broadcast_concurrent_limit : null; } if (permission_exists("call_broadcast_caller_id")) { $array['call_broadcasts'][0]['broadcast_caller_id_name'] = $broadcast_caller_id_name; $array['call_broadcasts'][0]['broadcast_caller_id_number'] = $broadcast_caller_id_number; } if (permission_exists('call_broadcast_destination_number')) { $array['call_broadcasts'][0]['broadcast_destination_data'] = $broadcast_destination_data; } //$array['call_broadcasts'][0]['broadcast_destination_type'] = $broadcast_destination_type; if (permission_exists('call_broadcast_phone_numbers')) { $array['call_broadcasts'][0]['broadcast_phone_numbers'] = $broadcast_phone_numbers; } if (permission_exists('call_broadcast_voicemail_detection')) { //broadcast_avmd $array['call_broadcasts'][0]['broadcast_avmd'] = $broadcast_avmd; } if (permission_exists('call_broadcast_toll_allow')) { $array['call_broadcasts'][0]['broadcast_toll_allow'] = $broadcast_toll_allow; } $array['call_broadcasts'][0]['broadcast_description'] = $broadcast_description; //execute $database = new database; $database->app_name = 'call_broadcast'; $database->app_uuid = 'efc11f6b-ed73-9955-4d4d-3a1bed75a056'; $database->save($array); unset($array); //redirect header("Location: call_broadcast.php"); exit; } } } //pre-populate the form if (!empty($_GET) && empty($_POST["persistformvar"])) { $call_broadcast_uuid = $_GET["id"]; $sql = "select * from v_call_broadcasts "; $sql .= "where domain_uuid = :domain_uuid "; $sql .= "and call_broadcast_uuid = :call_broadcast_uuid "; $parameters['domain_uuid'] = $domain_uuid; $parameters['call_broadcast_uuid'] = $call_broadcast_uuid; $database = new database; $row = $database->select($sql, $parameters, 'row'); if (!empty($row)) { $broadcast_name = $row["broadcast_name"]; $broadcast_start_time = $row["broadcast_start_time"]; $broadcast_timeout = $row["broadcast_timeout"]; $broadcast_concurrent_limit = $row["broadcast_concurrent_limit"]; $broadcast_caller_id_name = $row["broadcast_caller_id_name"]; $broadcast_caller_id_number = $row["broadcast_caller_id_number"]; //$broadcast_destination_type = $row["broadcast_destination_type"]; $broadcast_phone_numbers = $row["broadcast_phone_numbers"]; $broadcast_avmd = $row["broadcast_avmd"]; $broadcast_destination_data = $row["broadcast_destination_data"]; $broadcast_accountcode = $row["broadcast_accountcode"]; $broadcast_description = $row["broadcast_description"]; $broadcast_toll_allow = $row["broadcast_toll_allow"]; $insert_date = $row["insert_date"]; $update_date = $row["update_date"]; //determine start date and time based on insert or update date and 'start time' delay (in seconds) $broadcast_start_reference = $update_date ?: $insert_date; if ($broadcast_start_time && $broadcast_start_reference) { $broadcast_start_time = date('Y-m-d H:i', strtotime($broadcast_start_reference) + $broadcast_start_time); } } unset($sql, $parameters, $row); } //create token $object = new token; $token = $object->create($_SERVER['PHP_SELF']); //begin header $document['title'] = $text['title-call_broadcast']; require_once "resources/header.php"; //begin content echo "
\n"; echo "
\n"; echo "
".$text['title-call_broadcast']."
\n"; echo "
\n"; echo button::create(['type'=>'button','label'=>$text['button-back'],'icon'=>$_SESSION['theme']['button_icon_back'],'id'=>'btn_back','link'=>'call_broadcast.php']); if ($action == "update") { echo button::create(['type'=>'button','label'=>$text['button-start'],'icon'=>$_SESSION['theme']['button_icon_start'],'style'=>'margin-left: 15px;','link'=>'call_broadcast_send.php?id='.urlencode($call_broadcast_uuid)]); echo button::create(['type'=>'button','label'=>$text['button-stop'],'icon'=>$_SESSION['theme']['button_icon_stop'],'link'=>'call_broadcast_stop.php?id='.urlencode($call_broadcast_uuid)]); if (permission_exists('call_broadcast_delete')) { echo button::create(['type'=>'button','label'=>$text['button-delete'],'icon'=>$_SESSION['theme']['button_icon_delete'],'name'=>'btn_delete','style'=>'margin-left: 15px;','onclick'=>"modal_open('modal-delete','btn_delete');"]); } } echo button::create(['type'=>'submit','label'=>$text['button-save'],'icon'=>$_SESSION['theme']['button_icon_save'],'id'=>'btn_save','style'=>'margin-left: 15px;']); echo "
\n"; echo "
\n"; echo "
\n"; if ($action == 'update' && permission_exists('call_broadcast_delete')) { echo modal::create(['id'=>'modal-delete','type'=>'delete','actions'=>button::create(['type'=>'submit','label'=>$text['button-continue'],'icon'=>'check','id'=>'btn_delete','style'=>'float: right; margin-left: 15px;','collapse'=>'never','name'=>'action','value'=>'delete','onclick'=>"modal_close();"])]); } echo "
\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; if (permission_exists('call_broadcast_start_time')) { echo "\n"; echo "\n"; echo "\n"; echo "\n"; } if (permission_exists('call_broadcast_accountcode')) { echo "\n"; echo "\n"; echo "\n"; echo "\n"; } if (permission_exists('call_broadcast_timeout')) { echo "\n"; echo "\n"; echo "\n"; echo "\n"; } if (permission_exists('call_broadcast_concurrent_limit')) { echo "\n"; echo "\n"; echo "\n"; echo "\n"; } //echo "\n"; //echo "\n"; //echo "\n"; //echo "\n"; if (permission_exists("call_broadcast_caller_id")) { echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; } /* echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; */ if (permission_exists('call_broadcast_destination_number')) { echo "\n"; echo "\n"; echo "\n"; echo "\n"; } if (permission_exists('call_broadcast_phone_numbers')) { echo "\n"; echo "\n"; echo "\n"; echo "\n"; } if (permission_exists('call_broadcast_voicemail_detection')) { echo "\n"; echo "\n"; echo "\n"; echo "\n"; } if (permission_exists('call_broadcast_toll_allow')) { echo "\n"; echo "\n"; echo "\n"; echo "\n"; } echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "
\n"; echo " ".$text['label-name']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo "".$text['description-name']."\n"; echo "
\n"; echo " ".$text['label-start_time']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo "".$text['description-start_time']."\n"; echo "
\n"; echo " ".$text['label-accountcode']."\n"; echo "\n"; if ($action == "add") { $accountcode=$_SESSION['domain_name']; } echo " \n"; echo "
\n"; echo $text['description-accountcode']."\n"; echo "
\n"; echo " ".$text['label-timeout']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo "".$text['description-timeout']."\n"; echo "
\n"; echo " ".$text['label-concurrent-limit']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo "".$text['description-concurrent-limit']."\n"; echo "
\n"; //echo " Recording\n"; //echo "\n"; //echo " \n"; //echo "
\n"; //echo "Recording to play when the call is answered.
\n"; //echo "\n"; //echo "
\n"; echo " ".$text['label-caller-id-name']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo "".$text['description-caller-id-name']."\n"; echo "
\n"; echo " ".$text['label-callerid-number']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo "".$text['description-caller-id-number']."\n"; echo "
\n"; echo " Type\n"; echo "\n"; echo " \n"; echo "
\n"; echo "Optional, Destination Type: bridge, transfer, voicemail, conference, fifo, etc.\n"; echo "
\n"; echo " Destination\n"; echo "\n"; echo " \n"; echo "
\n"; echo "Optional, send the call to an auto attendant, conference room, or any other destination.

\n"; echo "conference (8khz): 01-\${domain}@default
\n"; echo "bridge (external number): sofia/gateway/gatewayname/12081231234
\n"; echo "bridge (auto attendant): sofia/internal/5002@\${domain}
\n"; echo "transfer (external number): 12081231234 XML default
\n"; echo "
\n"; echo " ".$text['label-destination']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo "".$text['description-destination']."

\n"; echo "
\n"; echo " ".$text['label-phone']."\n"; echo "\n"; echo " "; echo "

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

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

\n"; echo "
\n"; echo " ".$text['label-avmd']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-avmd']."\n"; echo "
\n"; echo " ".$text['label-broadcast_toll_allow']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-broadcast_toll_allow']."\n"; echo "
\n"; echo " ".$text['label-description']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo "".$text['description-info']."\n"; echo "
"; echo "
\n"; echo "

"; if ($action == "update") { echo "\n"; } echo "\n"; echo "
"; //include the footer require_once "resources/footer.php"; ?>