From 6a52923307b72bca7fd1d20f0e18ef2a7fa321dd Mon Sep 17 00:00:00 2001 From: markjcrane Date: Fri, 25 Aug 2017 18:21:04 +0000 Subject: [PATCH] Add new application providers --- app/providers/app_config.php | 31 + app/providers/app_languages.php | 303 ++++++++++ app/providers/app_menu.php | 29 + app/providers/provider_delete.php | 63 ++ app/providers/provider_setup.php | 63 ++ app/providers/providers.php | 162 +++++ app/providers/resources/classes/providers.php | 565 ++++++++++++++++++ .../resources/images/logo_voicetel.png | Bin 0 -> 3073 bytes .../resources/images/skyetel-logo.png | Bin 0 -> 13504 bytes app/providers/root.php | 90 +++ 10 files changed, 1306 insertions(+) create mode 100644 app/providers/app_config.php create mode 100644 app/providers/app_languages.php create mode 100644 app/providers/app_menu.php create mode 100755 app/providers/provider_delete.php create mode 100755 app/providers/provider_setup.php create mode 100755 app/providers/providers.php create mode 100644 app/providers/resources/classes/providers.php create mode 100755 app/providers/resources/images/logo_voicetel.png create mode 100644 app/providers/resources/images/skyetel-logo.png create mode 100644 app/providers/root.php diff --git a/app/providers/app_config.php b/app/providers/app_config.php new file mode 100644 index 0000000000..5e13d53c06 --- /dev/null +++ b/app/providers/app_config.php @@ -0,0 +1,31 @@ + \ No newline at end of file diff --git a/app/providers/app_languages.php b/app/providers/app_languages.php new file mode 100644 index 0000000000..9edbda0fa9 --- /dev/null +++ b/app/providers/app_languages.php @@ -0,0 +1,303 @@ + \ No newline at end of file diff --git a/app/providers/app_menu.php b/app/providers/app_menu.php new file mode 100644 index 0000000000..433fefd483 --- /dev/null +++ b/app/providers/app_menu.php @@ -0,0 +1,29 @@ + \ No newline at end of file diff --git a/app/providers/provider_delete.php b/app/providers/provider_delete.php new file mode 100755 index 0000000000..d5f781d13d --- /dev/null +++ b/app/providers/provider_delete.php @@ -0,0 +1,63 @@ + + Portions created by the Initial Developer are Copyright (C) 2017 + the Initial Developer. All Rights Reserved. + + Contributor(s): + Mark J Crane +*/ + +//includes + include "root.php"; + require_once "resources/require.php"; + +//check permissions + require_once "resources/check_auth.php"; + if (permission_exists('dialplan_edit')) { + //access granted + } + else { + echo "access denied"; + exit; + } + +//add multi-lingual support + $language = new text; + $text = $language->get(); + +//get the provider + if (isset($_GET["provider"])) { + $provider = new providers; + $reports->domain_uuid = $_SESSION['domain_uuid']; + $provider->delete($_GET["provider"]); + } + +//clear the cache + $cache = new cache; + $cache->delete("dialplan:".$_SESSION["context"]); + +//set the add message + messages::add($text['message-delete']); + +//redirect the user + header("Location: index.php"); + return; + +?> \ No newline at end of file diff --git a/app/providers/provider_setup.php b/app/providers/provider_setup.php new file mode 100755 index 0000000000..acae2119c0 --- /dev/null +++ b/app/providers/provider_setup.php @@ -0,0 +1,63 @@ + + Portions created by the Initial Developer are Copyright (C) 2017 + the Initial Developer. All Rights Reserved. + + Contributor(s): + Mark J Crane +*/ + +//includes + include "root.php"; + require_once "resources/require.php"; + +//check permissions + require_once "resources/check_auth.php"; + if (permission_exists('dialplan_edit')) { + //access granted + } + else { + echo "access denied"; + exit; + } + +//add multi-lingual support + $language = new text; + $text = $language->get(); + +//get the provider + if (isset($_GET["provider"])) { + $provider = new providers; + $reports->domain_uuid = $_SESSION['domain_uuid']; + $provider->setup($_GET["provider"]); + } + +//clear the cache + $cache = new cache; + $cache->delete("dialplan:".$_SESSION["context"]); + +//set the add message + messages::add($text['message-add']); + +//redirect the user + header("Location: index.php"); + return; + +?> \ No newline at end of file diff --git a/app/providers/providers.php b/app/providers/providers.php new file mode 100755 index 0000000000..c88a9fb4b9 --- /dev/null +++ b/app/providers/providers.php @@ -0,0 +1,162 @@ + + Portions created by the Initial Developer are Copyright (C) 2017 + the Initial Developer. All Rights Reserved. + + Contributor(s): + Mark J Crane +*/ + +//includes + include "root.php"; + require_once "resources/require.php"; + +//check permissions + require_once "resources/check_auth.php"; + if (permission_exists('dialplan_edit')) { + //access granted + } + else { + echo "access denied"; + exit; + } + +//add multi-lingual support + $language = new text; + $text = $language->get(); + +//get the provider + if (isset($_REQUEST["provider"])) { + $provider = check_str($_REQUEST["provider"]); + switch ($provider) { + case 'voicetel': + break; + case 'skyetel': + break; + default: + $provider = ''; + } + echo $provider; + exit; + } + +//skyetel installed + $sql = "select gateway_uuid from v_gateways "; + $prep_statement = $db->prepare(check_sql($sql)); + $prep_statement->execute(); + $gateways = $prep_statement->fetchAll(); + $skyetel_installed = false; + $voicetel_installed = false; + foreach ($gateways as $row) { + if ($row['gateway_uuid'] === "22245a48-552c-463a-a723-ce01ebbd69a2") { + $skyetel_installed = true; + } + if ($row['gateway_uuid'] === "d61be0f0-3a4c-434a-b9f6-4fef15e1a634") { + $voicetel_installed = true; + } + } + +?> + +
+
+ ".$text['title-providers']."\n"; + echo "
\n"; + echo $text['description-providers']."\n"; + ?> +
+
+

+ + +
+
+


+ +
+
+
+
+ VoiceTel\n"; + echo "
\n"; + echo "".$text['label-region']."
\n"; + echo $text['label-region_voicetel']."\n"; + echo "

\n"; + echo "".$text['label-about']."
\n"; + echo $text['label-about_voicetel']."\n"; + echo "

\n"; + echo "".$text['label-features']."
\n"; + echo $text['label-features_voicetel']."\n"; + echo "

\n"; + echo "\n"; + echo "\n"; + if (!$voicetel_installed) { + echo "\n"; + } + else { + echo "\n"; + } + ?> +
+ +
+




+ + +
+
+

+ +
+
+
+
+ Skyetel\n"; + echo "
\n"; + echo "".$text['label-region']."
\n"; + echo $text['label-region_skyetel']."\n"; + echo "

\n"; + echo "".$text['label-about']."
\n"; + echo $text['label-about_skyetel']."\n"; + echo "

\n"; + echo "".$text['label-features']."
\n"; + echo $text['label-features_skyetel']."\n"; + echo "

\n"; + echo "\n"; + echo "\n"; + echo "\n"; + if (!$skyetel_installed) { + echo "\n"; + } + else { + echo "\n"; + } + ?> +
+
+ +


+ + \ No newline at end of file diff --git a/app/providers/resources/classes/providers.php b/app/providers/resources/classes/providers.php new file mode 100644 index 0000000000..9ff21f6c6b --- /dev/null +++ b/app/providers/resources/classes/providers.php @@ -0,0 +1,565 @@ +2 + Portions created by the Initial Developer are Copyright (C) 2017 + the Initial Developer. All Rights Reserved. + + Contributor(s): + Mark J Crane +*/ + + +/** + * providers class provides methods for providing an overview + * + * @method boolean add + */ +if (!class_exists('providers')) { + class providers { + + //define variables + public $db; + public $debug; + public $domain_uuid; + public $array; + + /** + * Called when the object is created + */ + public function __construct() { + //connect to the database if not connected + if (!$this->db) { + require_once "resources/classes/database.php"; + $database = new database; + $database->connect(); + $this->db = $database->db; + } + } + + /** + * Called when there are no references to a particular object + * unset the variables used in the class + */ + public function __destruct() { + if (isset($this)) foreach ($this as $key => $value) { + unset($this->$key); + } + } + + /** + * nodes array + */ + public function nodes($provider) { + + //build the skyetel node array + if ($provider == 'skyetel') { + $x = 0; + $nodes[$x]['uuid'] = 'af26484f-03a1-4f93-857b-b8cef1ac28f5'; + $nodes[$x]['cidr'] = '52.41.52.34/32'; + $nodes[$x]['description'] = 'Skyetel - North West'; + $x++; + $nodes[$x]['uuid'] = '87eb7803-9b96-41d3-ac5a-42ed3f213777'; + $nodes[$x]['cidr'] = '52.8.201.128/32'; + $nodes[$x]['description'] = 'Skyetel - South West'; + $x++; + $nodes[$x]['uuid'] = 'cf61ab01-1465-4eca-9152-2e6fd4a02073'; + $nodes[$x]['cidr'] = '52.60.138.31/32'; + $nodes[$x]['description'] = 'Skyetel - North East'; + $x++; + $nodes[$x]['uuid'] = 'b43ebeef-c214-492b-8f22-4bfc6b647668'; + $nodes[$x]['cidr'] = '50.17.48.216/32'; + $nodes[$x]['description'] = 'Skyetel - South East'; + $x++; + $nodes[$x]['uuid'] = '28615834-4517-4515-b474-5ca54ee958fc'; + $nodes[$x]['cidr'] = '35.156.192.164/32'; + $nodes[$x]['description'] = 'Skyetel - Europe'; + } + + //build the voicetel node array + if ($provider == 'voicetel') { + $x = 0; + $nodes[$x]['uuid'] = 'dae9ab41-73c1-4792-bfdb-eccbedeebac9'; + $nodes[$x]['cidr'] = '199.101.184.146/32'; + $nodes[$x]['description'] = 'VoiceTel'; + $x++; + $nodes[$x]['uuid'] = '3167d47d-0679-4336-b4c4-be68cdc28e5b'; + $nodes[$x]['cidr'] = '162.243.249.135/32'; + $nodes[$x]['description'] = 'VoiceTel'; + $x++; + $nodes[$x]['uuid'] = 'e3d2e9b8-5807-4175-9ffc-57480ac94f83'; + $nodes[$x]['cidr'] = '192.254.76.222/32'; + $nodes[$x]['description'] = 'VoiceTel'; + $x++; + $nodes[$x]['uuid'] = 'a1d70666-ab25-425a-9884-60530f4dd8b7'; + $nodes[$x]['cidr'] = '162.243.156.185/32'; + $nodes[$x]['description'] = 'VoiceTel'; + $x++; + $nodes[$x]['uuid'] = '0bf5450f-c23b-4139-9e89-884bd0972912'; + $nodes[$x]['cidr'] = '94.75.246.200/32'; + $nodes[$x]['description'] = 'VoiceTel'; + $x++; + $nodes[$x]['uuid'] = '181dcaf8-f990-4869-90e3-97de7d2daa5a'; + $nodes[$x]['cidr'] = '204.77.3.60/32'; + $nodes[$x]['description'] = 'VoiceTel'; + } + + //return the array + return $nodes; + } + + /** + * gateways array + */ + public function gateways($provider) { + + //build the array + if ($provider == 'skyetel') { + $x=0; + $gateways[$x]['uuid'] = '22245a48-552c-463a-a723-ce01ebbd69a2'; + $gateways[$x]['name'] = 'term.skyetel.com'; + $gateways[$x]['proxy'] = 'term.skyetel.com'; + $gateways[$x]['username'] = 'username'; + $gateways[$x]['password'] = 'password'; + $gateways[$x]['register'] = 'false'; + $x++; + $gateways[$x]['uuid'] = 'b171ba70-06a5-4560-82be-596ed9d00041'; + $gateways[$x]['name'] = 'skyetel.34'; + $gateways[$x]['proxy'] = '52.41.52.34'; + $gateways[$x]['username'] = 'username'; + $gateways[$x]['password'] = 'password'; + $gateways[$x]['register'] = 'false'; + $x++; + $gateways[$x]['uuid'] = '4864ac6e-9e50-4fff-8381-2c508f8912b5'; + $gateways[$x]['name'] = 'skyetel.128'; + $gateways[$x]['proxy'] = '52.8.201.128'; + $gateways[$x]['username'] = 'username'; + $gateways[$x]['password'] = 'password'; + $gateways[$x]['register'] = 'false'; + $x++; + $gateways[$x]['uuid'] = '5553606b-e543-4427-bb63-ebed16001937'; + $gateways[$x]['name'] = 'skyetel.216'; + $gateways[$x]['proxy'] = '50.17.48.216'; + $gateways[$x]['username'] = 'username'; + $gateways[$x]['password'] = 'password'; + $gateways[$x]['register'] = 'false'; + $x++; + } + if ($provider == 'voicetel') { + //build the array + $x=0; + $gateways[$x]['uuid'] = 'd61be0f0-3a4c-434a-b9f6-4fef15e1a634'; + $gateways[$x]['name'] = 'voicetel'; + $gateways[$x]['proxy'] = 'sbc.voicetel.com'; + $gateways[$x]['username'] = 'username'; + $gateways[$x]['password'] = 'password'; + $gateways[$x]['register'] = 'true'; + $x++; + } + + //return the array + return $gateways; + } + + /** + * setup the provider + */ + public function setup($provider) { + + //validate the provider + switch ($provider) { + case 'voicetel': + break; + case 'skyetel': + break; + default: + $provider = ''; + } + + //get the domains access control uuid + $sql = "select access_control_uuid from v_access_controls "; + $sql .= "where access_control_name = 'domains'; "; + if ($this->debug) { + echo $sql."
\n"; + } + $prep_statement = $this->db->prepare($sql); + if ($prep_statement) { + $prep_statement->execute(); + $result = $prep_statement->fetch(PDO::FETCH_ASSOC); + $access_control_uuid = $result['access_control_uuid']; + } + unset($prep_statement); + + //get the existing nodes + $sql = "select * from v_access_control_nodes "; + $sql .= "where access_control_uuid = '".$access_control_uuid."' "; + $sql .= "and node_cidr <> '' "; + if ($this->debug) { + echo $sql."
\n"; + } + $prep_statement = $this->db->prepare(check_sql($sql)); + if ($prep_statement) { + $prep_statement->execute(); + $access_control_nodes = $prep_statement->fetchAll(PDO::FETCH_ASSOC); + //echo "
\n";
+					//print_r($access_control_nodes);
+					//echo "
\n"; + } + + //get the existing nodes + $sql = "select * from v_sip_profiles "; + $sql .= "where sip_profile_enabled = 'true' "; + $sql .= "order by sip_profile_name asc "; + $sql .= "limit 1; "; + if ($this->debug) { + echo $sql."
\n"; + } + $prep_statement = $this->db->prepare(check_sql($sql)); + if ($prep_statement) { + $prep_statement->execute(); + $result = $prep_statement->fetch(PDO::FETCH_ASSOC); + $sip_profile_name = $result['sip_profile_name']; + } + + //get the nodes array + $nodes = $this->nodes($provider); + + //add gateways + $x = 0; + foreach ($nodes as $row) { + $array['access_control_nodes'][$x]['access_control_node_uuid'] = $row['uuid']; + $array['access_control_nodes'][$x]['access_control_uuid'] = $access_control_uuid; + $array['access_control_nodes'][$x]['node_type'] = 'allow'; + $array['access_control_nodes'][$x]['node_cidr'] = $row['cidr']; + $array['access_control_nodes'][$x]['node_description']= $row['description']; + $x++; + } + + //get the gateways array + $gateways = $this->gateways($provider); + + //gateways array + if ($provider == 'skyetel') { + //dialplan settings + $dialplan_expression = '^\+?1?(\d{10})$'; + $dialplan_prefix = '1'; + } + if ($provider == 'voicetel') { + //dialplan settings + $dialplan_expression = '^\+?1?(\d{10})$'; + $dialplan_prefix = '1'; + } + + //add gateways + $x = 0; + foreach ($gateways as $row) { + $array['gateways'][$x]['gateway_uuid'] = $row['uuid']; + $array['gateways'][$x]['gateway'] = $row['name']; + $array['gateways'][$x]['username'] = $row['username']; + $array['gateways'][$x]['password'] = $row['password']; + $array['gateways'][$x]['proxy'] = $row['proxy']; + $array['gateways'][$x]['register'] = $row['register']; + $array['gateways'][$x]['retry_seconds'] = '30'; + $array['gateways'][$x]['ping'] = '90'; + $array['gateways'][$x]['expire_seconds'] = '800'; + $array['gateways'][$x]['context'] = 'public'; + $array['gateways'][$x]['profile'] = $sip_profile_name; + $array['gateways'][$x]['enabled'] = 'true'; + $array['gateways'][$x]['description'] = ''; + $x++; + } + + //set the dialplan variables + if ($provider == 'skyetel') { $dialplan_uuid = '777bf012-9746-4ccb-a7cc-95c1714f15fe'; } + if ($provider == 'voicetel') { $dialplan_uuid = '513e3710-1cbd-48da-b8f1-792eae471d3a'; } + $app_uuid = '8c914ec3-9fc0-8ab5-4cda-6c9288bdc9a3'; + $dialplan_name = $provider; + $dialplan_order = '100'; + $dialplan_continue = 'false'; + $dialplan_context = '${domain_name}'; + $dialplan_enabled = 'true'; + $dialplan_description = '10-11 digits'; + + //add outbound routes + $x = 0; + //$array['dialplans'][$x]['domain_uuid'] = $_SESSION['domain_uuid']; + $array['dialplans'][$x]['dialplan_uuid'] = $dialplan_uuid; + $array['dialplans'][$x]['app_uuid'] = $app_uuid; + $array['dialplans'][$x]['dialplan_name'] = $dialplan_name; + $array['dialplans'][$x]['dialplan_order'] = $dialplan_order; + $array['dialplans'][$x]['dialplan_continue'] = $dialplan_continue; + $array['dialplans'][$x]['dialplan_context'] = $dialplan_context; + $array['dialplans'][$x]['dialplan_enabled'] = $dialplan_enabled; + $array['dialplans'][$x]['dialplan_description'] = $dialplan_description; + $y = 0; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_uuid'] = uuid(); + $array['dialplans'][$x]['dialplan_details'][$y]['domain_uuid'] = $_SESSION['domain_uuid']; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_uuid'] = $dialplan_uuid; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_tag'] = 'condition'; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_type'] = '${user_exists}'; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_data'] = 'false'; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_order'] = $y * 10; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_group'] = '0'; + $y++; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_uuid'] = uuid(); + $array['dialplans'][$x]['dialplan_details'][$y]['domain_uuid'] = $_SESSION['domain_uuid']; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_uuid'] = $dialplan_uuid; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_tag'] = 'condition'; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_type'] = 'destination_number'; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_data'] = $dialplan_expression; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_order'] = $y * 10; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_group'] = '0'; + $y++; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_uuid'] = uuid(); + $array['dialplans'][$x]['dialplan_details'][$y]['domain_uuid'] = $_SESSION['domain_uuid']; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_uuid'] = $dialplan_uuid; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_tag'] = 'action'; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_type'] = 'set'; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_data'] = 'sip_h_X-accountcode=${accountcode}'; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_order'] = $y * 10; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_group'] = '0'; + $y++; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_uuid'] = uuid(); + $array['dialplans'][$x]['dialplan_details'][$y]['domain_uuid'] = $_SESSION['domain_uuid']; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_uuid'] = $dialplan_uuid; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_tag'] = 'action'; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_type'] = 'set'; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_data'] = 'call_direction=outbound'; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_order'] = $y * 10; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_group'] = '0'; + $y++; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_uuid'] = uuid(); + $array['dialplans'][$x]['dialplan_details'][$y]['domain_uuid'] = $_SESSION['domain_uuid']; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_uuid'] = $dialplan_uuid; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_tag'] = 'action'; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_type'] = 'unset'; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_data'] = 'call_timeout'; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_order'] = $y * 10; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_group'] = '0'; + $y++; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_uuid'] = uuid(); + $array['dialplans'][$x]['dialplan_details'][$y]['domain_uuid'] = $_SESSION['domain_uuid']; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_uuid'] = $dialplan_uuid; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_tag'] = 'action'; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_type'] = 'set'; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_data'] = 'hangup_after_bridge=true'; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_order'] = $y * 10; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_group'] = '0'; + $y++; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_uuid'] = uuid(); + $array['dialplans'][$x]['dialplan_details'][$y]['domain_uuid'] = $_SESSION['domain_uuid']; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_uuid'] = $dialplan_uuid; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_tag'] = 'action'; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_type'] = 'set'; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_data'] = 'effective_caller_id_name=${outbound_caller_id_name}'; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_order'] = $y * 10; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_group'] = '0'; + $y++; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_uuid'] = uuid(); + $array['dialplans'][$x]['dialplan_details'][$y]['domain_uuid'] = $_SESSION['domain_uuid']; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_uuid'] = $dialplan_uuid; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_tag'] = 'action'; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_type'] = 'set'; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_data'] = 'effective_caller_id_number=${outbound_caller_id_number}'; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_order'] = $y * 10; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_group'] = '0'; + $y++; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_uuid'] = uuid(); + $array['dialplans'][$x]['dialplan_details'][$y]['domain_uuid'] = $_SESSION['domain_uuid']; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_uuid'] = $dialplan_uuid; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_tag'] = 'action'; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_type'] = 'set'; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_data'] = 'inherit_codec=true'; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_order'] = $y * 10; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_group'] = '0'; + $y++; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_uuid'] = uuid(); + $array['dialplans'][$x]['dialplan_details'][$y]['domain_uuid'] = $_SESSION['domain_uuid']; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_uuid'] = $dialplan_uuid; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_tag'] = 'action'; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_type'] = 'set'; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_data'] = 'ignore_display_updates=true'; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_order'] = $y * 10; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_group'] = '0'; + $y++; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_uuid'] = uuid(); + $array['dialplans'][$x]['dialplan_details'][$y]['domain_uuid'] = $_SESSION['domain_uuid']; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_uuid'] = $dialplan_uuid; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_tag'] = 'action'; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_type'] = 'set'; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_data'] = 'callee_id_number=$1'; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_order'] = $y * 10; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_group'] = '0'; + $y++; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_uuid'] = uuid(); + $array['dialplans'][$x]['dialplan_details'][$y]['domain_uuid'] = $_SESSION['domain_uuid']; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_uuid'] = $dialplan_uuid; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_tag'] = 'action'; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_type'] = 'set'; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_data'] = 'continue_on_fail=true'; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_order'] = $y * 10; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_group'] = '0'; + $y++; + + foreach ($gateways as $row) { + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_uuid'] = uuid(); + $array['dialplans'][$x]['dialplan_details'][$y]['domain_uuid'] = $_SESSION['domain_uuid']; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_uuid'] = $dialplan_uuid; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_tag'] = 'action'; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_type'] = 'bridge'; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_data'] = 'sofia/gateway/'.$row['uuid'].'/'.$dialplan_prefix.'$1'; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_order'] = $y * 10; + $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_group'] = '0'; + $y++; + } + + //save to the data + $database = new database; + $database->app_name = 'outbound_routes'; + $database->app_uuid = '8c914ec3-9fc0-8ab5-4cda-6c9288bdc9a3'; + $database->save($array); + $message = $database->message; + + //debug + //echo "
\n";
+				//print_r($array);
+				//echo "
\n";
+				//exit;
+
+			//update the dialplan xml
+				$dialplans = new dialplan;
+				$dialplans->source = "details";
+				$dialplans->destination = "database";
+				$dialplans->uuid = $dialplan_uuid;
+				$dialplans->xml();
+
+			//clear the cache
+				$cache = new cache;
+				$cache->delete("configuration:acl.conf");
+				$cache->delete("configuration:sofia.conf:".$sip_profile_hostname);
+
+			//create the event socket connection
+				$fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']);
+
+			//get the hostname
+				if ($fp) {  $sip_profile_hostname = event_socket_request($fp, 'api switchname'); }
+
+			//reload acl and rescan the sip profile
+				if ($fp) { event_socket_request($fp, "api reloadacl"); }
+				if ($fp) { event_socket_request($fp, "api sofia profile ".$sip_profile_name." rescan"); }
+		}
+
+		/**
+		 * delete the provider
+		 */
+		public function delete($provider) {
+
+			//validate the provider
+				switch ($provider) {
+					case 'voicetel':
+						break;
+					case 'skyetel': 
+						break;
+					default: 
+						$provider = '';
+				}
+
+			//set the dialplan_uuid
+				if ($provider == 'skyetel') { $dialplan_uuid = '777bf012-9746-4ccb-a7cc-95c1714f15fe'; }
+				if ($provider == 'voicetel') { $dialplan_uuid = '513e3710-1cbd-48da-b8f1-792eae471d3a'; }
+
+			//delete child data
+				$sql = "delete from v_dialplan_details ";
+				$sql .= "where dialplan_uuid = '".$dialplan_uuid."'; ";
+				$this->db->query($sql);
+				unset($sql);
+
+			//delete parent data
+				$sql = "delete from v_dialplans ";
+				$sql .= "where dialplan_uuid = '".$dialplan_uuid."'; ";
+				$this->db->query($sql);
+				unset($sql);
+
+			//get the nodes array
+				$nodes = $this->nodes($provider);
+
+			//delete each node
+				foreach ($nodes as $row) {
+					$sql = "delete from v_access_control_nodes ";
+					$sql .= "where access_control_node_uuid = '".$row['uuid']."'; ";
+					$this->db->query($sql);
+					unset($sql);
+				}
+
+			//get the gateways array
+				$gateways = $this->gateways($provider);
+
+			//get the existing nodes
+				$sql = "select * from v_sip_profiles ";
+				$sql .= "where sip_profile_enabled = 'true' ";
+				$sql .= "order by sip_profile_name asc ";
+				$sql .= "limit 1; ";
+				if ($this->debug) {
+					echo $sql."
\n"; + } + $prep_statement = $this->db->prepare(check_sql($sql)); + if ($prep_statement) { + $prep_statement->execute(); + $result = $prep_statement->fetch(PDO::FETCH_ASSOC); + $sip_profile_name = $result['sip_profile_name']; + } + + //create the event socket connection + $fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']); + + //delete each gateway + foreach ($gateways as $row) { + //stop the gateway + if ($fp) { event_socket_request($fp, "api sofia profile ".$sip_profile_name." killgw ".$row['uuid']); } + + //delete the gateway + $sql = "delete from v_gateways "; + $sql .= "where gateway_uuid = '".$row['uuid']."'; "; + $this->db->query($sql); + unset($sql); + } + + //clear the cache + $cache = new cache; + $cache->delete("configuration:acl.conf"); + $cache->delete("configuration:sofia.conf:".$sip_profile_hostname); + + //get the hostname + if ($fp) { $sip_profile_hostname = event_socket_request($fp, 'api switchname'); } + + //reload acl and rescan the sip profile + if ($fp) { event_socket_request($fp, "api reloadacl"); } + if ($fp) { event_socket_request($fp, "api sofia profile ".$sip_profile_name." rescan"); } + } + + } //end scripts class +} + +/* +//example use + $provider = new providers; + $reports->domain_uuid = $_SESSION['domain_uuid']; + $provider->setup(); +*/ + +?> \ No newline at end of file diff --git a/app/providers/resources/images/logo_voicetel.png b/app/providers/resources/images/logo_voicetel.png new file mode 100755 index 0000000000000000000000000000000000000000..1e5cbfe28e67f087c436dddbd1d4cc0ca4db2a96 GIT binary patch literal 3073 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 + Portions created by the Initial Developer are Copyright (C) 2008-2012 + the Initial Developer. All Rights Reserved. + + Contributor(s): + Mark J Crane +*/ + +// make sure the PATH_SEPARATOR is defined + umask(2); + if (!defined("PATH_SEPARATOR")) { + if (strpos($_ENV["OS"], "Win") !== false) { + define("PATH_SEPARATOR", ";"); + } else { + define("PATH_SEPARATOR", ":"); + } + } + + if (!isset($output_format)) $output_format = (PHP_SAPI == 'cli') ? 'text' : 'html'; + + // make sure the document_root is set + $_SERVER["SCRIPT_FILENAME"] = str_replace("\\", '/', $_SERVER["SCRIPT_FILENAME"]); + if(PHP_SAPI == 'cli'){ + chdir(pathinfo(realpath($_SERVER["PHP_SELF"]), PATHINFO_DIRNAME)); + $script_full_path = str_replace("\\", '/', getcwd() . '/' . $_SERVER["SCRIPT_FILENAME"]); + $dirs = explode('/', pathinfo($script_full_path, PATHINFO_DIRNAME)); + if (file_exists('/project_root.php')) { + $path = '/'; + } else { + $i = 1; + $path = ''; + while ($i < count($dirs)) { + $path .= '/' . $dirs[$i]; + if (file_exists($path. '/project_root.php')) { + break; + } + $i++; + } + } + $_SERVER["DOCUMENT_ROOT"] = $path; + }else{ + $_SERVER["DOCUMENT_ROOT"] = str_replace($_SERVER["PHP_SELF"], "", $_SERVER["SCRIPT_FILENAME"]); + } + $_SERVER["DOCUMENT_ROOT"] = realpath($_SERVER["DOCUMENT_ROOT"]); +// try to detect if a project path is being used + if (!defined('PROJECT_PATH')) { + if (is_dir($_SERVER["DOCUMENT_ROOT"]. '/fusionpbx')) { + define('PROJECT_PATH', '/fusionpbx'); + } elseif (file_exists($_SERVER["DOCUMENT_ROOT"]. '/project_root.php')) { + define('PROJECT_PATH', ''); + } else { + $dirs = explode('/', str_replace('\\', '/', pathinfo($_SERVER["PHP_SELF"], PATHINFO_DIRNAME))); + $i = 1; + $path = $_SERVER["DOCUMENT_ROOT"]; + while ($i < count($dirs)) { + $path .= '/' . $dirs[$i]; + if (file_exists($path. '/project_root.php')) { + break; + } + $i++; + } + if(!file_exists($path. '/project_root.php')){ + die("Failed to locate the Project Root by searching for project_root.php please contact support for assistance"); + } + $project_path = str_replace($_SERVER["DOCUMENT_ROOT"], "", $path); + define('PROJECT_PATH', $project_path); + } + $_SERVER["PROJECT_ROOT"] = realpath($_SERVER["DOCUMENT_ROOT"] . PROJECT_PATH); + set_include_path(get_include_path() . PATH_SEPARATOR . $_SERVER["PROJECT_ROOT"]); + } + +?> \ No newline at end of file