Portions created by the Initial Developer are Copyright (C) 2010-2024 the Initial Developer. All Rights Reserved. Contributor(s): Mark J Crane James Rose 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('ring_group_add') || permission_exists('ring_group_edit')) { //access granted } else { echo "access denied"; exit; } //connect to database $database = database::new(); //create the settings object $settings = new settings(['database' => $database, 'domain_uuid' => $_SESSION['domain_uuid'] ?? '', 'user_uuid' => $_SESSION['user_uuid'] ?? '']); //add multi-lingual support $language = new text; $text = $language->get(); //set the defaults $ring_group_strategy = ''; $ring_group_name = ''; $ring_group_extension = ''; $ring_group_caller_id_name = ''; $ring_group_caller_id_number = ''; $ring_group_distinctive_ring = ''; $ring_group_missed_call_app = ''; $ring_group_missed_call_data = ''; $ring_group_forward_destination = ''; $ring_group_forward_toll_allow = ''; $ring_group_description = ''; $ring_group_ringback = $settings->get('ring_group', 'default_ringback', ''); $onkeyup = ''; //initialize the destinations object $destination = new destinations; //get total domain ring group count $sql = "select count(*) from v_ring_groups "; $sql .= "where domain_uuid = :domain_uuid "; $parameters['domain_uuid'] = $domain_uuid; $total_ring_groups = $database->select($sql, $parameters ?? null, 'column'); unset($sql, $parameters); //get the domain_uuid $domain_uuid = $_SESSION['domain_uuid']; $domain_name = $_SESSION['domain_name']; //action add or update if (!empty($_REQUEST["id"]) || !empty($_REQUEST["ring_group_uuid"])) { $action = "update"; //get the ring_group_uuid $ring_group_uuid = $_REQUEST["id"]; if (!empty($_REQUEST["ring_group_uuid"])) { $ring_group_uuid = $_REQUEST["ring_group_uuid"]; } //get the domain_uuid if (is_uuid($ring_group_uuid) && permission_exists('ring_group_all')) { $sql = "select r.domain_uuid, d.domain_name "; $sql .= "from v_ring_groups as r, v_domains as d "; $sql .= "where ring_group_uuid = :ring_group_uuid "; $sql .= "and r.domain_uuid = d.domain_uuid "; $parameters['ring_group_uuid'] = $ring_group_uuid; $row = $database->select($sql, $parameters, 'row'); $domain_uuid = $row['domain_uuid']; $domain_name = $row['domain_name']; unset($sql, $parameters); } } else { $action = "add"; } //delete the user from the ring group if ((!empty($_GET["a"])) == "delete" && is_uuid($_REQUEST["user_uuid"]) && permission_exists("ring_group_edit")) { //set the variables $user_uuid = $_REQUEST["user_uuid"]; //build array $array['ring_group_users'][0]['domain_uuid'] = $domain_uuid; $array['ring_group_users'][0]['ring_group_uuid'] = $ring_group_uuid; $array['ring_group_users'][0]['user_uuid'] = $user_uuid; //grant temporary permissions $p = permissions::new(); $p->add('ring_group_user_delete', 'temp'); //execute delete $database->app_name = 'ring_groups'; $database->app_uuid = '1d61fb65-1eec-bc73-a6ee-a6203b4fe6f2'; $database->delete($array); unset($array); //revoke temporary permissions $p->delete('ring_group_user_delete', 'temp'); //save the message to a session variable message::add($text['message-delete']); //redirect the browser header("Location: ring_group_edit.php?id=$ring_group_uuid"); exit; } //get total ring group count from the database, check limit, if defined if ($action == 'add' && $settings->get('limit', 'ring_groups', '') ?? '') { $sql = "select count(*) from v_ring_groups "; $sql .= "where domain_uuid = :domain_uuid "; $parameters['domain_uuid'] = $domain_uuid; $total_ring_groups = $database->select($sql, $parameters, 'column'); unset($sql, $parameters); if (is_numeric($settings->get('limit', 'ring_groups', '')) && $total_ring_groups >= $settings->get('limit', 'ring_groups', '')) { message::add($text['message-maximum_ring_groups'].' '.$settings->get('limit', 'ring_groups', ''), 'negative'); header('Location: ring_groups.php'); exit; } } //get http post variables and set them to php variables if (count($_POST) > 0) { //process the http post data by submitted action if (!empty($_POST['action']) && is_uuid($ring_group_uuid)) { $array[0]['checked'] = 'true'; $array[0]['uuid'] = $ring_group_uuid; switch ($_POST['action']) { case 'copy': if (permission_exists('ring_group_add')) { $obj = new ring_groups; $obj->copy($array); } break; case 'delete': if (permission_exists('ring_group_delete')) { $obj = new ring_groups; $obj->delete($array); } break; } header('Location: ring_groups.php'); exit; } //set variables from http values $ring_group_name = $_POST["ring_group_name"]; $ring_group_extension = $_POST["ring_group_extension"]; $ring_group_greeting = $_POST["ring_group_greeting"]; $ring_group_strategy = $_POST["ring_group_strategy"]; $ring_group_destinations = $_POST["ring_group_destinations"]; $ring_group_timeout_action = $_POST["ring_group_timeout_action"]; $ring_group_call_timeout = $_POST["ring_group_call_timeout"]; $ring_group_caller_id_name = $_POST["ring_group_caller_id_name"]; $ring_group_caller_id_number = $_POST["ring_group_caller_id_number"]; $ring_group_cid_name_prefix = $_POST["ring_group_cid_name_prefix"] ?? null; $ring_group_cid_number_prefix = $_POST["ring_group_cid_number_prefix"] ?? null; $ring_group_distinctive_ring = $_POST["ring_group_distinctive_ring"]; $ring_group_ringback = $_POST["ring_group_ringback"]; $ring_group_call_screen_enabled = $_POST["ring_group_call_screen_enabled"]; $ring_group_call_forward_enabled = $_POST["ring_group_call_forward_enabled"]; $ring_group_follow_me_enabled = $_POST["ring_group_follow_me_enabled"]; $ring_group_missed_call_app = $_POST["ring_group_missed_call_app"]; $ring_group_missed_call_data = $_POST["ring_group_missed_call_data"]; $ring_group_forward_enabled = $_POST["ring_group_forward_enabled"]; $ring_group_forward_destination = $_POST["ring_group_forward_destination"]; $ring_group_forward_toll_allow = $_POST["ring_group_forward_toll_allow"]; $ring_group_enabled = $_POST["ring_group_enabled"] ?? 'false'; $ring_group_description = $_POST["ring_group_description"]; $dialplan_uuid = $_POST["dialplan_uuid"] ?? null; //$ring_group_timeout_action = "transfer:1001 XML default"; $ring_group_timeout_array = explode(":", $ring_group_timeout_action); $ring_group_timeout_app = array_shift($ring_group_timeout_array); $ring_group_timeout_data = join(':', $ring_group_timeout_array); $destination_number = $_POST["destination_number"] ?? null; $destination_description = $_POST["destination_description"] ?? null; $destination_delay = $_POST["destination_delay"] ?? null; $destination_timeout = $_POST["destination_timeout"] ?? null; $destination_prompt = $_POST["destination_prompt"] ?? null; $ring_group_destinations_delete = $_POST["ring_group_destinations_delete"] ?? null; //set the context for users that do not have the permission if (permission_exists('ring_group_context')) { $ring_group_context = $_POST["ring_group_context"]; } else if ($action == 'add') { $ring_group_context = $domain_name; } //if the user doesn't have the correct permission then //override domain_uuid and ring_group_context values if ($action == 'update' && is_uuid($ring_group_uuid)) { $sql = "select * from v_ring_groups "; $sql .= "where ring_group_uuid = :ring_group_uuid "; $parameters['ring_group_uuid'] = $ring_group_uuid; $row = $database->select($sql, $parameters, 'row'); if (!empty($row)) { //if (!permission_exists(‘ring_group_domain')) { // $domain_uuid = $row["domain_uuid"]; //} if (!permission_exists('ring_group_context')) { $ring_group_context = $row["ring_group_context"]; } } unset($sql, $parameters, $row); } } //assign the user to the ring group if (!empty($_REQUEST["user_uuid"]) && is_uuid($_REQUEST["id"]) && $_GET["a"] != "delete" && permission_exists("ring_group_edit")) { //set the variables $user_uuid = $_REQUEST["user_uuid"]; //build array $array['ring_group_users'][0]['ring_group_user_uuid'] = uuid(); $array['ring_group_users'][0]['domain_uuid'] = $domain_uuid; $array['ring_group_users'][0]['ring_group_uuid'] = $ring_group_uuid; $array['ring_group_users'][0]['user_uuid'] = $user_uuid; //grant temporary permissions $p = permissions::new(); $p->add('ring_group_user_add', 'temp'); //execute delete $database->app_name = 'ring_groups'; $database->app_uuid = '1d61fb65-1eec-bc73-a6ee-a6203b4fe6f2'; $database->save($array); unset($array); //revoke temporary permissions $p->delete('ring_group_user_add', 'temp'); //set message message::add($text['message-add']); //redirect the browser header("Location: ring_group_edit.php?id=".urlencode($ring_group_uuid)); exit; } //process the HTTP POST if (count($_POST) > 0 && empty($_POST["persistformvar"])) { //validate the token $token = new token; if (!$token->validate($_SERVER['PHP_SELF'])) { message::add($text['message-invalid_token'],'negative'); header('Location: ring_groups.php'); exit; } //check for all required data $msg = ''; if (empty($ring_group_name)) { $msg .= $text['message-name']."
\n"; } if (empty($ring_group_extension)) { $msg .= $text['message-extension']."
\n"; } //if (empty($ring_group_greeting)) { $msg .= $text['message-greeting']."
\n"; } if (empty($ring_group_strategy)) { $msg .= $text['message-strategy']."
\n"; } if (empty($ring_group_call_timeout)) { $msg .= $text['message-call_timeout']."
\n"; } //if (empty($ring_group_timeout_app)) { $msg .= $text['message-timeout_action']."
\n"; } //if (empty($ring_group_cid_name_prefix)) { $msg .= "Please provide: Caller ID Name Prefix
\n"; } //if (empty($ring_group_cid_number_prefix)) { $msg .= "Please provide: Caller ID Number Prefix
\n"; } //if (empty($ring_group_ringback)) { $msg .= "Please provide: Ringback
\n"; } //if (empty($ring_group_description)) { $msg .= "Please provide: Description
\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; } //prep missed call values for db insert/update switch ($ring_group_missed_call_app) { case 'email': $ring_group_missed_call_data = str_replace(';',',',$ring_group_missed_call_data); $ring_group_missed_call_data = str_replace(' ','',$ring_group_missed_call_data); if (substr_count($ring_group_missed_call_data, ',') > 0) { $ring_group_missed_call_data_array = explode(',', $ring_group_missed_call_data); foreach ($ring_group_missed_call_data_array as $array_index => $email_address) { if (!valid_email($email_address)) { unset($ring_group_missed_call_data_array[$array_index]); } } if (sizeof($ring_group_missed_call_data_array) > 0) { $ring_group_missed_call_data = implode(',', $ring_group_missed_call_data_array); } else { unset($ring_group_missed_call_app, $ring_group_missed_call_data); } } else { if (!valid_email($ring_group_missed_call_data)) { unset($ring_group_missed_call_app, $ring_group_missed_call_data); } } break; case 'text': $ring_group_missed_call_data = str_replace('-','',$ring_group_missed_call_data); $ring_group_missed_call_data = str_replace('.','',$ring_group_missed_call_data); $ring_group_missed_call_data = str_replace('(','',$ring_group_missed_call_data); $ring_group_missed_call_data = str_replace(')','',$ring_group_missed_call_data); $ring_group_missed_call_data = str_replace(' ','',$ring_group_missed_call_data); if (!is_numeric($ring_group_missed_call_data)) { unset($ring_group_missed_call_app, $ring_group_missed_call_data); } break; default: unset($ring_group_missed_call_app, $ring_group_missed_call_data); } //set the app and data $ring_group_timeout_array = explode(":", $ring_group_timeout_action); $ring_group_timeout_app = array_shift($ring_group_timeout_array); $ring_group_timeout_data = join(':', $ring_group_timeout_array); //add a uuid to ring_group_uuid if it is empty if ($action == 'add') { $ring_group_uuid = uuid(); } //add the dialplan_uuid if (empty($_POST["dialplan_uuid"]) || !is_uuid($_POST["dialplan_uuid"])) { $dialplan_uuid = uuid(); } //build the array $array["ring_groups"][0]["ring_group_uuid"] = $ring_group_uuid; $array["ring_groups"][0]["domain_uuid"] = $domain_uuid; $array['ring_groups'][0]["ring_group_name"] = $ring_group_name; $array['ring_groups'][0]["ring_group_extension"] = $ring_group_extension; $array['ring_groups'][0]["ring_group_greeting"] = $ring_group_greeting; $array['ring_groups'][0]["ring_group_strategy"] = $ring_group_strategy; $array["ring_groups"][0]["ring_group_call_timeout"] = $ring_group_call_timeout; if (permission_exists('ring_group_caller_id_name')) { $array["ring_groups"][0]["ring_group_caller_id_name"] = $ring_group_caller_id_name; } if (permission_exists('ring_group_caller_id_number')) { $array["ring_groups"][0]["ring_group_caller_id_number"] = $ring_group_caller_id_number; } if (permission_exists('ring_group_cid_name_prefix')) { $array["ring_groups"][0]["ring_group_cid_name_prefix"] = $ring_group_cid_name_prefix; } if (permission_exists('ring_group_cid_number_prefix')) { $array["ring_groups"][0]["ring_group_cid_number_prefix"] = $ring_group_cid_number_prefix; } $array["ring_groups"][0]["ring_group_distinctive_ring"] = $ring_group_distinctive_ring; $array["ring_groups"][0]["ring_group_ringback"] = $ring_group_ringback; if (permission_exists('ring_group_call_screen_enabled')) { $array["ring_groups"][0]["ring_group_call_screen_enabled"] = $ring_group_call_screen_enabled; } $array["ring_groups"][0]["ring_group_call_forward_enabled"] = $ring_group_call_forward_enabled; $array["ring_groups"][0]["ring_group_follow_me_enabled"] = $ring_group_follow_me_enabled; if (permission_exists('ring_group_missed_call')) { $array["ring_groups"][0]["ring_group_missed_call_app"] = $ring_group_missed_call_app ?? null; $array["ring_groups"][0]["ring_group_missed_call_data"] = $ring_group_missed_call_data ?? null; } if (permission_exists('ring_group_forward')) { $array["ring_groups"][0]["ring_group_forward_enabled"] = $ring_group_forward_enabled; $array["ring_groups"][0]["ring_group_forward_destination"] = $ring_group_forward_destination; } $array["ring_groups"][0]["ring_group_forward_toll_allow"] = $ring_group_forward_toll_allow; if (isset($ring_group_context)) { $array["ring_groups"][0]["ring_group_context"] = $ring_group_context; } $array["ring_groups"][0]["ring_group_enabled"] = $ring_group_enabled; $array["ring_groups"][0]["ring_group_description"] = $ring_group_description; $array["ring_groups"][0]["dialplan_uuid"] = $dialplan_uuid; if ($destination->valid($ring_group_timeout_app.':'.$ring_group_timeout_data)) { $array["ring_groups"][0]["ring_group_timeout_app"] = $ring_group_timeout_app; $array["ring_groups"][0]["ring_group_timeout_data"] = $ring_group_timeout_data; } $y = 0; foreach ($ring_group_destinations as $row) { if (!empty($row['ring_group_destination_uuid']) && is_uuid($row['ring_group_destination_uuid'])) { $ring_group_destination_uuid = $row['ring_group_destination_uuid']; } else { $ring_group_destination_uuid = uuid(); } if (!empty($row['destination_number']) && $settings->get('ring_group', 'destination_range_enabled', false)) { // check the range $output_array = array(); preg_match('/[0-9]{1,}-[0-9]{1,}/', $row['destination_number'], $output_array); } if (is_uuid($ring_group_uuid) && !empty($output_array)) { $ranges = explode('-', $row['destination_number']); $range_first_extension = $ranges[0]; $range_second_extension = $ranges[1]; if ($range_first_extension <= $range_second_extension) { // select range extension for ring group destintaions $sql = "select DISTINCT ext.extension, ext.extension_uuid from v_extensions as ext "; $sql .= "where ext.domain_uuid = :domain_uuid "; $sql .= "and CAST(coalesce(ext.extension, '0') AS integer) >= :range_first_extension and CAST(coalesce(ext.extension, '0') AS integer) <= :range_second_extension "; $sql .= "and ext.extension NOT IN "; $sql .= "(select DISTINCT asd.destination_number as exten from v_ring_group_destinations as asd "; $sql .= "where asd.ring_group_uuid = :ring_group_uuid "; $sql .= "and asd.domain_uuid = :domain_uuid) "; $sql .= "order by ext.extension asc "; $parameters['domain_uuid'] = $domain_uuid; $parameters['ring_group_uuid'] = $ring_group_uuid; $parameters['range_first_extension'] = $range_first_extension; $parameters['range_second_extension'] = $range_second_extension; $extensions = $database->select($sql, $parameters, 'all'); unset($sql, $parameters); // echo var_dump($extensions); foreach ($extensions as $extension) { $array["ring_groups"][0]["ring_group_destinations"][$y]["ring_group_uuid"] = $ring_group_uuid; $array['ring_groups'][0]["ring_group_destinations"][$y]["ring_group_destination_uuid"] = uuid(); $array['ring_groups'][0]["ring_group_destinations"][$y]["destination_number"] = $extension['extension']; $array['ring_groups'][0]["ring_group_destinations"][$y]["destination_description"] = $row['destination_description']; $array['ring_groups'][0]["ring_group_destinations"][$y]["destination_delay"] = $row['destination_delay']; $array['ring_groups'][0]["ring_group_destinations"][$y]["destination_timeout"] = $row['destination_timeout']; $array['ring_groups'][0]["ring_group_destinations"][$y]["destination_prompt"] = $row['destination_prompt']; $array['ring_groups'][0]["ring_group_destinations"][$y]["destination_enabled"] = $row['destination_enabled'] ?? 'false'; $array['ring_groups'][0]["ring_group_destinations"][$y]["domain_uuid"] = $domain_uuid; $y++; } } } elseif (!empty($row['destination_number']) > 0) { $array["ring_groups"][0]["ring_group_destinations"][$y]["ring_group_uuid"] = $ring_group_uuid; $array['ring_groups'][0]["ring_group_destinations"][$y]["ring_group_destination_uuid"] = $ring_group_destination_uuid; $array['ring_groups'][0]["ring_group_destinations"][$y]["destination_number"] = $row['destination_number']; $array['ring_groups'][0]["ring_group_destinations"][$y]["destination_description"] = $row['destination_description']; $array['ring_groups'][0]["ring_group_destinations"][$y]["destination_delay"] = $row['destination_delay']; $array['ring_groups'][0]["ring_group_destinations"][$y]["destination_timeout"] = $row['destination_timeout']; $array['ring_groups'][0]["ring_group_destinations"][$y]["destination_prompt"] = $row['destination_prompt']; $array['ring_groups'][0]["ring_group_destinations"][$y]["destination_enabled"] = $row['destination_enabled'] ?? 'false'; $array['ring_groups'][0]["ring_group_destinations"][$y]["domain_uuid"] = $domain_uuid; } $y++; unset($output_array, $range_first_extension, $range_second_extension); } //build the xml dialplan $dialplan_xml = "\n"; $dialplan_xml .= " \n"; if ($settings->get('ring_group', 'ring_ready', true)) { $dialplan_xml .= " \n"; } $dialplan_xml .= " \n"; $dialplan_xml .= " \n"; $dialplan_xml .= " \n"; $dialplan_xml .= "\n"; //build the dialplan array $array["dialplans"][0]["domain_uuid"] = $domain_uuid; $array["dialplans"][0]["dialplan_uuid"] = $dialplan_uuid; $array["dialplans"][0]["dialplan_name"] = $ring_group_name; $array["dialplans"][0]["dialplan_number"] = $ring_group_extension; if (isset($ring_group_context)) { $array["dialplans"][0]["dialplan_context"] = $ring_group_context; } $array["dialplans"][0]["dialplan_continue"] = "false"; $array["dialplans"][0]["dialplan_xml"] = $dialplan_xml; $array["dialplans"][0]["dialplan_order"] = "101"; $array["dialplans"][0]["dialplan_enabled"] = $ring_group_enabled; $array["dialplans"][0]["dialplan_description"] = $ring_group_description; $array["dialplans"][0]["app_uuid"] = "1d61fb65-1eec-bc73-a6ee-a6203b4fe6f2"; //add the dialplan permission $p = permissions::new(); $p->add("dialplan_add", "temp"); $p->add("dialplan_edit", "temp"); //save to the data $database->app_name = 'ring_groups'; $database->app_uuid = '1d61fb65-1eec-bc73-a6ee-a6203b4fe6f2'; $database->save($array); $message = $database->message; //remove the temporary permission $p->delete("dialplan_add", "temp"); $p->delete("dialplan_edit", "temp"); //remove checked destinations if ( $action == 'update' && permission_exists('ring_group_destination_delete') && is_array($ring_group_destinations_delete) && @sizeof($ring_group_destinations_delete) != 0 ) { $obj = new ring_groups; $obj->ring_group_uuid = $ring_group_uuid; $obj->delete_destinations($ring_group_destinations_delete); } //apply settings reminder $_SESSION["reload_xml"] = true; //clear the cache $cache = new cache; $cache->delete("dialplan:".$ring_group_context); //clear the destinations session array if (isset($_SESSION['destinations']['array'])) { unset($_SESSION['destinations']['array']); } //set the message if ($action == "add") { //save the message to a session variable message::add($text['message-add']); } if ($action == "update") { //save the message to a session variable message::add($text['message-update']); } //redirect the browser header("Location: ring_group_edit.php?id=".urlencode($ring_group_uuid)); exit; } //pre-populate the form if (!empty($ring_group_uuid)) { $sql = "select * from v_ring_groups "; $sql .= "where ring_group_uuid = :ring_group_uuid "; $parameters['ring_group_uuid'] = $ring_group_uuid; $row = $database->select($sql, $parameters, 'row'); if (is_array($row) && @sizeof($row) != 0) { $domain_uuid = $row["domain_uuid"]; $ring_group_name = $row["ring_group_name"]; $ring_group_extension = $row["ring_group_extension"]; $ring_group_greeting = $row["ring_group_greeting"]; $ring_group_context = $row["ring_group_context"]; $ring_group_strategy = $row["ring_group_strategy"]; $ring_group_timeout_app = $row["ring_group_timeout_app"]; $ring_group_timeout_data = $row["ring_group_timeout_data"]; $ring_group_call_timeout = $row["ring_group_call_timeout"]; $ring_group_caller_id_name = $row["ring_group_caller_id_name"]; $ring_group_caller_id_number = $row["ring_group_caller_id_number"]; $ring_group_cid_name_prefix = $row["ring_group_cid_name_prefix"]; $ring_group_cid_number_prefix = $row["ring_group_cid_number_prefix"]; $ring_group_distinctive_ring = $row["ring_group_distinctive_ring"]; $ring_group_ringback = $row["ring_group_ringback"]; $ring_group_call_screen_enabled = $row["ring_group_call_screen_enabled"]; $ring_group_call_forward_enabled = $row["ring_group_call_forward_enabled"]; $ring_group_follow_me_enabled = $row["ring_group_follow_me_enabled"]; $ring_group_missed_call_app = $row["ring_group_missed_call_app"]; $ring_group_missed_call_data = $row["ring_group_missed_call_data"]; $ring_group_forward_enabled = $row["ring_group_forward_enabled"]; $ring_group_forward_destination = $row["ring_group_forward_destination"]; $ring_group_forward_toll_allow = $row["ring_group_forward_toll_allow"]; $ring_group_enabled = $row["ring_group_enabled"]; $ring_group_description = $row["ring_group_description"]; $dialplan_uuid = $row["dialplan_uuid"]; } unset($sql, $parameters, $row); if (!empty($ring_group_timeout_app)) { $ring_group_timeout_action = $ring_group_timeout_app.":".$ring_group_timeout_data; } } //set the defaults $destination_delay_max = $settings->get('ring_group', 'destination_delay_max', ''); $destination_timeout_max = $settings->get('ring_group', 'destination_timeout_max', '');; if (empty($ring_group_call_timeout)) { $ring_group_call_timeout = '30'; } if (empty($ring_group_enabled)) { $ring_group_enabled = 'true'; } //get the ring group destination array if ($action == "add") { $x = 0; $limit = 5; } if (!empty($ring_group_uuid)) { $sql = "select * from v_ring_group_destinations "; $sql .= "where domain_uuid = :domain_uuid "; $sql .= "and ring_group_uuid = :ring_group_uuid "; $sql .= "order by destination_delay, destination_number asc "; $parameters['domain_uuid'] = $domain_uuid; $parameters['ring_group_uuid'] = $ring_group_uuid; $ring_group_destinations = $database->select($sql, $parameters, 'all'); unset($sql, $parameters); } //add an empty row to the options array if (!isset($ring_group_destinations) || count($ring_group_destinations) == 0) { $rows = $settings->get('ring_group', 'destination_add_rows', 5); $id = 0; $show_destination_delete = false; } if (isset($ring_group_destinations) && count($ring_group_destinations) > 0) { $rows = $settings->get('ring_group', 'destination_edit_rows', 1); $id = count($ring_group_destinations)+1; $show_destination_delete = true; } for ($x = 0; $x < $rows; $x++) { $ring_group_destinations[$id]['destination_number'] = ''; $ring_group_destinations[$id]['destination_delay'] = ''; $ring_group_destinations[$id]['destination_timeout'] = ''; $ring_group_destinations[$id]['destination_prompt'] = ''; $id++; } //get the ring group users if (!empty($ring_group_uuid)) { $sql = "select u.username, r.user_uuid, r.ring_group_uuid "; $sql .= "from v_ring_group_users as r, v_users as u "; $sql .= "where r.user_uuid = u.user_uuid "; $sql .= "and u.user_enabled = 'true' "; $sql .= "and r.domain_uuid = :domain_uuid "; $sql .= "and r.ring_group_uuid = :ring_group_uuid "; $sql .= "order by u.username asc "; $parameters['domain_uuid'] = $domain_uuid; $parameters['ring_group_uuid'] = $ring_group_uuid; $ring_group_users = $database->select($sql, $parameters, 'all'); unset($sql, $parameters); } //get the users $sql = "select * from v_users "; $sql .= "where domain_uuid = :domain_uuid "; $sql .= "and user_enabled = 'true' "; $sql .= "order by username asc "; $parameters['domain_uuid'] = $domain_uuid; $users = $database->select($sql, $parameters, 'all'); unset($sql, $parameters); //set defaults if (empty($ring_group_enabled)) { $ring_group_enabled = 'true'; } //set the default ring group context if (empty($ring_group_context)) { $ring_group_context = $domain_name; } //get the ring backs $ringbacks = new ringbacks; $ringbacks = $ringbacks->select('ring_group_ringback', $ring_group_ringback); //get the sounds $sounds = new sounds; $audio_files = $sounds->get(); //create token $object = new token; $token = $object->create($_SERVER['PHP_SELF']); //show the header $document['title'] = $text['title-ring_group']; require_once "resources/header.php"; //show the content if (permission_exists('recording_play') || permission_exists('recording_download')) { echo "\n"; } if (if_group("superadmin")) { echo "\n"; } echo "
\n"; echo "
\n"; echo "
".$text['title-ring_group']."
\n"; echo "
\n"; echo button::create(['type'=>'button','label'=>$text['button-back'],'icon'=>$_SESSION['theme']['button_icon_back'],'id'=>'btn_back','link'=>'ring_groups.php']); if ($action == 'update') { $button_margin = 'margin-left: 15px;'; if (permission_exists('ring_group_add') && (empty($settings->get('limit', 'ring_groups', '')) || ($total_ring_groups < $settings->get('limit', 'ring_groups', '')))) { echo button::create(['type'=>'button','label'=>$text['button-copy'],'icon'=>$_SESSION['theme']['button_icon_copy'],'name'=>'btn_copy','style'=>$button_margin,'onclick'=>"modal_open('modal-copy','btn_copy');"]); unset($button_margin); } if (permission_exists('ring_group_delete') || permission_exists('ring_group_destination_delete')) { echo button::create(['type'=>'button','label'=>$text['button-delete'],'icon'=>$_SESSION['theme']['button_icon_delete'],'name'=>'btn_delete','style'=>$button_margin ?? '','onclick'=>"modal_open('modal-delete','btn_delete');"]); unset($button_margin); } } 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") { if (permission_exists('ring_group_add') && (empty($settings->get('limit', 'ring_groups', '')) || ($total_ring_groups < $settings->get('limit', 'ring_groups', '')))) { echo modal::create(['id'=>'modal-copy','type'=>'copy','actions'=>button::create(['type'=>'submit','label'=>$text['button-continue'],'icon'=>'check','id'=>'btn_copy','style'=>'float: right; margin-left: 15px;','collapse'=>'never','name'=>'action','value'=>'copy','onclick'=>"modal_close();"])]); } if (permission_exists('ring_group_delete') || permission_exists('ring_group_destination_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 $text['description']."\n"; echo "

\n"; echo "
\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; $instance_id = 'ring_group_greeting'; $instance_label = 'greeting'; $instance_value = $ring_group_greeting; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo " "; echo " "; echo " "; echo " "; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; if (permission_exists('ring_group_caller_id_name')) { echo "\n"; echo "\n"; echo "\n"; echo "\n"; } if (permission_exists('ring_group_caller_id_number')) { echo "\n"; echo "\n"; echo "\n"; echo "\n"; } if (permission_exists('ring_group_cid_name_prefix')) { echo "\n"; echo "\n"; echo "\n"; echo "\n"; } if (permission_exists('ring_group_cid_number_prefix')) { 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 " "; echo " "; echo " "; echo " "; if (permission_exists('ring_group_call_screen_enabled')) { 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('ring_group_missed_call')) { echo "\n"; echo "\n"; echo "\n"; echo "\n"; } if (permission_exists('ring_group_forward')) { echo "\n"; echo "\n"; echo "\n"; echo "\n"; } if (permission_exists('ring_group_forward_toll_allow')) { echo "\n"; echo "\n"; echo "\n"; echo "\n"; } if (permission_exists("ring_group_context")) { 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 " ".$text['label-name']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-name']."\n"; echo "
\n"; echo " ".$text['label-extension']."\n"; echo "\n"; echo " get('ring_group', 'extension_range', '') ?? '')."\">\n"; echo "
\n"; echo $text['description-extension']."\n"; echo "
\n"; echo " ".$text['label-'.$instance_label]."\n"; echo "
\n"; echo "\n"; if (if_group("superadmin")) { echo ""; } if ((permission_exists('recording_play') || permission_exists('recording_download')) && (!empty($playable) || empty($instance_value))) { switch (pathinfo($playable, PATHINFO_EXTENSION)) { case 'wav' : $mime_type = 'audio/wav'; break; case 'mp3' : $mime_type = 'audio/mpeg'; break; case 'ogg' : $mime_type = 'audio/ogg'; break; } echo ""; echo button::create(['type'=>'button','title'=>$text['label-play'].' / '.$text['label-pause'],'icon'=>$_SESSION['theme']['button_icon_play'],'id'=>'recording_button_'.$instance_id,'style'=>'display: '.(!empty($mime_type) ? 'inline' : 'none'),'onclick'=>"recording_play('".$instance_id."', document.getElementById('".$instance_id."').value, document.getElementById('".$instance_id."').options[document.getElementById('".$instance_id."').selectedIndex].parentNode.getAttribute('data-type'))"]); unset($playable, $mime_type); } echo "
\n"; echo $text['description-'.$instance_label]."\n"; echo "
\n"; echo " ".$text['label-strategy']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-strategy']."\n"; echo "
".$text['label-destinations'].""; echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; if (permission_exists('ring_group_prompt')) { echo " \n"; } echo " \n"; echo " \n"; if ($show_destination_delete && permission_exists('ring_group_destination_delete')) { echo " \n"; } echo " \n"; $x = 0; foreach ($ring_group_destinations as $row) { if (empty($row['destination_description'])) { $row['destination_description'] = ""; } if (empty($row['destination_delay'])) { $row['destination_delay'] = "0"; } if (empty($row['destination_timeout'])) { $row['destination_timeout'] = "30"; } if (!empty($row['ring_group_destination_uuid']) && is_uuid($row['ring_group_destination_uuid'])) { echo " \n"; } echo " \n"; echo " \n"; echo " \n"; echo " \n"; if (permission_exists('ring_group_prompt')) { echo " \n"; } echo " \n"; echo " \n"; if ($show_destination_delete && permission_exists('ring_group_destination_delete')) { if (!empty($row['ring_group_destination_uuid']) && is_uuid($row['ring_group_destination_uuid'])) { echo " \n"; } echo " \n"; $x++; } echo "
".$text['label-destination_number'].""; echo ($ring_group_strategy == 'sequence' || $ring_group_strategy == 'rollover') ? $text['label-destination_order'] : $text['label-destination_delay']; echo " ".$text['label-destination_timeout']."".$text['label-destination_prompt']."".$text['label-destination_description']."".$text['label-destination_enabled']."\n"; echo " ".$text['label-delete']."\n"; echo " \n"; echo "
\n"; if (!isset($row['ring_group_destination_uuid'])) { // new record if (substr($settings->get('theme', 'input_toggle_style', ''), 0, 6) == 'switch') { $onkeyup = "onkeyup=\"document.getElementById('ring_group_destinations_".$x."_destination_enabled').checked = (this.value != '' ? true : false);\""; // switch } else { $onkeyup = "onkeyup=\"document.getElementById('ring_group_destinations_".$x."_destination_enabled').value = (this.value != '' ? true : false);\""; // select } } echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; // switch if (substr($settings->get('theme', 'input_toggle_style', ''), 0, 6) == 'switch') { echo " \n"; } // select else { echo " \n"; } echo " "; echo " \n"; echo " \n"; } else { echo " \n"; } echo "
\n"; echo " ".$text['description-destinations']."\n"; echo "
\n"; echo "
\n"; echo " ".$text['label-timeout_destination']."\n"; echo "\n"; echo $destination->select('dialplan', 'ring_group_timeout_action', $ring_group_timeout_action ?? ''); echo "
\n"; echo " ".$text['description-timeout_destination']."\n"; echo "
\n"; echo " ".$text['label-call_timeout']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo (!empty($text['description-ring_group_call_timeout']))." \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-caller_id_number']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-caller_id_number']." \n"; echo "
\n"; echo " ".$text['label-cid-name-prefix']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-cid-name-prefix']." \n"; echo "
\n"; echo " ".$text['label-cid-number-prefix']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-cid-number-prefix']." \n"; echo "
\n"; echo " ".$text['label-distinctive_ring']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-distinctive_ring']." \n"; echo "
\n"; echo " ".$text['label-ringback']."\n"; echo "\n"; echo " ".$ringbacks; echo "
\n"; echo $text['description-ringback']."\n"; echo "
".$text['label-user_list'].""; if (!empty($ring_group_users)) { echo " \n"; foreach ($ring_group_users as $field) { echo " \n"; echo " \n"; echo " \n"; echo " \n"; } echo "
".escape($field['username'])."\n"; echo " ".$v_link_label_delete."\n"; echo "
\n"; echo "
\n"; } echo " "; echo button::create(['type'=>'submit','label'=>$text['button-add'],'icon'=>$_SESSION['theme']['button_icon_add'],'collapse'=>'never']); echo "
\n"; echo " ".$text['description-user_list']."\n"; echo "
\n"; echo "
\n"; echo " ".$text['label-ring_group_call_screen_enabled']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-ring_group_call_screen_enabled']."\n"; echo "
\n"; echo " ".$text['label-ring_group_call_forward_enabled']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-ring_group_call_forward_enabled']."\n"; echo "
\n"; echo " ".$text['label-ring_group_follow_me_enabled']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-ring_group_follow_me_enabled']."\n"; echo "
\n"; echo " ".$text['label-missed_call']."\n"; echo "\n"; echo " \n"; $ring_group_missed_call_data = ($ring_group_missed_call_app == 'text') ? format_phone($ring_group_missed_call_data) : $ring_group_missed_call_data; echo " \n"; echo "
\n"; echo $text['description-missed_call']."\n"; echo "
\n"; echo " ".$text['label-ring_group_forward']."\n"; echo "\n"; echo " "; echo ""; echo "
\n"; echo $text['description-ring-group-forward']."\n"; echo "
\n"; echo " ".$text['label-ring_group_forward_toll_allow']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-ring_group_forward_toll_allow']."\n"; echo "
\n"; echo " ".$text['label-context']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-enter-context']."\n"; echo "
\n"; echo " ".$text['label-enabled']."\n"; echo "\n"; if (substr($settings->get('theme', 'input_toggle_style', ''), 0, 6) == 'switch') { echo " \n"; } else { echo " \n"; } echo "
\n"; echo $text['description-enabled']."\n"; echo "
\n"; echo " ".$text['label-description']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-description']."\n"; echo "
"; echo "
\n"; echo "

"; if (!empty($dialplan_uuid)) { echo "\n"; } if (!empty($ring_group_uuid)) { echo "\n"; } echo "\n"; echo "
"; //include the footer require_once "resources/footer.php"; ?>