From 4f30eb3d9b0acee0bd5043762a7d95edb304cc59 Mon Sep 17 00:00:00 2001 From: markjcrane Date: Fri, 1 Jul 2016 13:02:31 -0600 Subject: [PATCH] Efficiency for app defaults. --- app/dialplan/app_defaults.php | 124 ++--------- app/dialplan/resources/classes/dialplan.php | 219 +++++++++++--------- 2 files changed, 140 insertions(+), 203 deletions(-) diff --git a/app/dialplan/app_defaults.php b/app/dialplan/app_defaults.php index 6085e0914a..2ad743083b 100644 --- a/app/dialplan/app_defaults.php +++ b/app/dialplan/app_defaults.php @@ -24,57 +24,8 @@ Mark J Crane */ -//if there is more than one domain then set the default context to the domain name - /* - if (count($_SESSION['domains']) > 1) { - $sql = "select * from v_dialplans "; - $sql .= "where dialplan_context = 'default' "; - $prep_statement = $db->prepare(check_sql($sql)); - $prep_statement->execute(); - $result = $prep_statement->fetchAll(PDO::FETCH_NAMED); - foreach ($result as &$row) { - $domain_uuid = $row["domain_uuid"]; - $dialplan_uuid = $row["dialplan_uuid"]; - $dialplan_context = $_SESSION['domains'][$domain_uuid]['domain_name']; - $sql = "update v_dialplans set "; - $sql .= "dialplan_context = '$dialplan_context' "; - $sql .= "where domain_uuid = '$domain_uuid' "; - $sql .= "and dialplan_uuid = '$dialplan_uuid' "; - $db->exec(check_sql($sql)); - unset($sql); - } - } - */ - -//remove the global dialplan that calls app.lua dialplan - if (count($_SESSION['domains']) > 1) { - //get the dialplan data - $sql = "select * from v_dialplans "; - $sql .= "where app_uuid = '34dd307b-fffe-4ead-990c-3d070e288126' "; - $prep_statement = $db->prepare(check_sql($sql)); - $prep_statement->execute(); - $result = $prep_statement->fetchAll(PDO::FETCH_NAMED); - foreach ($result as &$row) { - $dialplan_uuid = $row["dialplan_uuid"]; - } - unset($prep_statement); - //delete child data - if (isset($dialplan_uuid)) { - $sql = "delete from v_dialplan_details "; - $sql .= "where dialplan_uuid = '".$dialplan_uuid."'; "; - $db->query($sql); - unset($sql); - } - //delete parent data - if (isset($dialplan_uuid)) { - $sql = "delete from v_dialplans "; - $sql .= "where dialplan_uuid = '".$dialplan_uuid."'; "; - $db->query($sql); - unset($sql,$dialplan_uuid); - } - } - //only run the following code if the directory exists + /* if (is_dir($_SESSION['switch']['dialplan']['dir'])) { //write the dialplan/default.xml if it does not exist //set the path @@ -102,62 +53,33 @@ fclose($fh); } } + */ //get the $apps array from the installed apps from the core and mod directories - $xml_list = glob($_SERVER["DOCUMENT_ROOT"] . PROJECT_PATH . "/*/*/resources/switch/conf/dialplan/*.xml"); - foreach ($xml_list as &$xml_file) { - //get and parse the xml - $xml_string = file_get_contents($xml_file); - //get the order number prefix from the file name - $name_array = explode('_', basename($xml_file)); - if (is_numeric($name_array[0])) { - $dialplan_order = $name_array[0]; - } - else { - $dialplan_order = 0; - } - //dialplan class - $dialplan = new dialplan; - $dialplan->domain_uuid = $domain_uuid; - $dialplan->dialplan_order = $dialplan_order; - $dialplan->default_context = $domain_name; - if ($display_type == "text") { - $dialplan->display_type = 'text'; - } - $dialplan->xml = $xml_string; - $dialplan->import(); - } - -//add the global dialplan to inbound routes - /* if ($domains_processed == 1) { - $sql = "select count(*) as num_rows from v_dialplans "; - $sql .= "where dialplan_uuid = 'd4e06654-e394-444a-b3af-4c3d54aebbec' "; - $prep_statement = $db->prepare(check_sql($sql)); - if ($prep_statement) { - $prep_statement->execute(); - $row = $prep_statement->fetch(PDO::FETCH_ASSOC); - if ($row['num_rows'] == 0) { - $sql = "INSERT INTO v_dialplans "; - $sql .= "(dialplan_uuid, app_uuid, dialplan_context, dialplan_name, dialplan_continue, dialplan_order, dialplan_enabled) "; - $sql .= "VALUES ('d4e06654-e394-444a-b3af-4c3d54aebbec', 'c03b422e-13a8-bd1b-e42b-b6b9b4d27ce4', 'public', 'global', 'true', '0', 'false');"; - $db->query($sql); - - $sql = "INSERT INTO v_dialplan_details "; - $sql .= "(dialplan_uuid, dialplan_detail_uuid, dialplan_detail_tag, dialplan_detail_type, dialplan_detail_data, dialplan_detail_order) "; - $sql .= "VALUES ('d4e06654-e394-444a-b3af-4c3d54aebbec', '5e1062d8-6842-4890-a78a-388e8dd5bbaf', 'condition', 'context', 'public', '10');"; - $db->query($sql); - - $sql = "INSERT INTO v_dialplan_details "; - $sql .= "(dialplan_uuid, dialplan_detail_uuid, dialplan_detail_tag, dialplan_detail_type, dialplan_detail_data, dialplan_detail_order) "; - $sql .= "VALUES ('d4e06654-e394-444a-b3af-4c3d54aebbec', 'bdafd4aa-6633-48fc-970e-bc2778f3f022', 'action', 'lua', 'app.lua dialplan', '20');"; - $db->query($sql); - unset($sql); - } - unset($prep_statement); + $xml_list = glob($_SERVER["DOCUMENT_ROOT"] . PROJECT_PATH . "/*/*/resources/switch/conf/dialplan/*.xml"); + foreach ($xml_list as &$xml_file) { + //get and parse the xml + $xml_string = file_get_contents($xml_file); + //get the order number prefix from the file name + $name_array = explode('_', basename($xml_file)); + if (is_numeric($name_array[0])) { + $dialplan_order = $name_array[0]; + } + else { + $dialplan_order = 0; + } + //dialplan class + $dialplan = new dialplan; + $dialplan->dialplan_order = $dialplan_order; + $dialplan->default_context = $domain_name; + if ($display_type == "text") { + $dialplan->display_type = 'text'; + } + $dialplan->xml = $xml_string; + $dialplan->import(); } } - */ //add not found dialplan to inbound routes /* diff --git a/app/dialplan/resources/classes/dialplan.php b/app/dialplan/resources/classes/dialplan.php index 6690d23872..0302f2307f 100644 --- a/app/dialplan/resources/classes/dialplan.php +++ b/app/dialplan/resources/classes/dialplan.php @@ -228,39 +228,39 @@ include "root.php"; } private function app_uuid_exists() { - $sql = "select count(*) as num_rows from v_dialplans "; + $sql = "select domain_uuid from v_dialplans "; $sql .= "where (domain_uuid = '".$this->domain_uuid."' or domain_uuid is null) "; $sql .= "and app_uuid = '".$this->app_uuid."' "; $prep_statement = $this->db->prepare(check_sql($sql)); if ($prep_statement) { $prep_statement->execute(); - $row = $prep_statement->fetch(PDO::FETCH_ASSOC); - if ($row['num_rows'] > 0) { + $result = $prep_statement->fetchAll(PDO::FETCH_ASSOC); + if (count($result)) { return true; } else { return false; } } - unset($prep_statement, $result); + unset($sql, $prep_statement, $result); } public function dialplan_exists() { - $sql = "select count(*) as num_rows from v_dialplans "; + $sql = "select domain_uuid from v_dialplans "; $sql .= "where (domain_uuid = '".$this->domain_uuid."' or domain_uuid is null)"; $sql .= "and dialplan_uuid = '".$this->dialplan_uuid."' "; $prep_statement = $this->db->prepare(check_sql($sql)); if ($prep_statement) { $prep_statement->execute(); - $row = $prep_statement->fetch(PDO::FETCH_ASSOC); - if ($row['num_rows'] > 0) { + $result = $prep_statement->fetchAll(PDO::FETCH_ASSOC); + if (count($result)) { return true; } else { return false; } } - unset($prep_statement, $result); + unset($sql, $prep_statement, $result); } public function import() { @@ -289,108 +289,123 @@ include "root.php"; $dialplan['extension']['condition'][0] = $tmp; } } - //check if the dialplan app uuid exists + + //get the app_uuid $this->app_uuid = $dialplan['extension']['@attributes']['app_uuid']; - if ($this->app_uuid_exists()) { - //dialplan entry already exists do nothing + + //get the list of domains + if (!isset($_SESSION['domains'])) { + $sql = "select * from v_domains; "; + $prep_statement = $this->db->prepare($sql); + $prep_statement->execute(); + $_SESSION['domains'] = $prep_statement->fetchAll(PDO::FETCH_ASSOC); + unset($sql, $prep_statement); } - else { - //start the transaction - $this->db->beginTransaction(); - //get the attributes - $this->dialplan_uuid = uuid(); - $this->dialplan_name = $dialplan['extension']['@attributes']['name']; - $this->dialplan_number = $dialplan['extension']['@attributes']['number']; - $this->dialplan_context = $dialplan['@attributes']['name']; - if (strlen($dialplan['extension']['@attributes']['global']) > 0) { - if ($dialplan['extension']['@attributes']['global'] == "true") { - $this->domain_uuid = null; + + //check if the dialplan app uuid exists + foreach ($_SESSION['domains'] as $row) { + //get the domain_uuid + $this->domain_uuid $row['domain_uuid']; + + //check if the dialplan exists + if (!$this->app_uuid_exists()) { + //start the transaction + $this->db->beginTransaction(); + //get the attributes + $this->dialplan_uuid = uuid(); + $this->dialplan_name = $dialplan['extension']['@attributes']['name']; + $this->dialplan_number = $dialplan['extension']['@attributes']['number']; + $this->dialplan_context = $dialplan['@attributes']['name']; + if (strlen($dialplan['extension']['@attributes']['global']) > 0) { + if ($dialplan['extension']['@attributes']['global'] == "true") { + $this->domain_uuid = null; + } } - } - if ($this->display_type == "text") { - echo " ".$this->dialplan_name.": added\n"; - } - if (strlen($dialplan['extension']['@attributes']['continue']) > 0) { - $this->dialplan_continue = $dialplan['extension']['@attributes']['continue']; - } - if (strlen($dialplan['extension']['@attributes']['enabled']) > 0) { - $this->dialplan_enabled = $dialplan['extension']['@attributes']['enabled']; - } - else { - $this->dialplan_enabled = "true"; - } - $this->dialplan_description = ''; - $this->dialplan_add(); - //loop through the condition array - $x = 0; - $group = 0; - $order = 5; - if (isset($dialplan['extension']['condition'])) foreach ($dialplan['extension']['condition'] as &$row) { - unset($this->dialplan_detail_break); - unset($this->dialplan_detail_inline); - $this->dialplan_detail_tag = 'condition'; - $this->dialplan_detail_type = $row['@attributes']['field']; - $this->dialplan_detail_data = $row['@attributes']['expression']; - $this->dialplan_detail_group = $group; - $this->dialplan_detail_order = $order; - if (strlen($row['@attributes']['break']) > 0) { - $this->dialplan_detail_break = $row['@attributes']['break']; + if ($this->display_type == "text") { + echo " ".$this->dialplan_name.": added\n"; } - $this->dialplan_detail_add(); - if (is_array($row['action']) || is_array($row['anti-action'])) { - $condition_self_closing_tag = false; - if (!is_array($row['action'][0])) { - if ($row['action']['@attributes']['application']) { - $tmp = $row['action']; - unset($row['action']); - $row['action'][0] = $tmp; - } - } - if (!is_array($row['anti-action'][0])) { - if ($row['anti-action']['@attributes']['application']) { - $tmp = $row['anti-action']; - unset($row['anti-action']); - $row['anti-action'][0] = $tmp; - } - } - $order = $order + 5; - unset($this->dialplan_detail_break); - unset($this->dialplan_detail_inline); - if (isset($row['action'])) foreach ($row['action'] as &$row2) { - $this->dialplan_detail_tag = 'action'; - $this->dialplan_detail_type = $row2['@attributes']['application']; - $this->dialplan_detail_data = $row2['@attributes']['data']; - if (strlen($row2['@attributes']['inline']) > 0) { - $this->dialplan_detail_inline = $row2['@attributes']['inline']; - } - $this->dialplan_detail_group = $group; - $this->dialplan_detail_order = $order; - $this->dialplan_detail_add(); - $order = $order + 5; - } - if (isset($row['anti-action'])) foreach ($row['anti-action'] as &$row2) { - $this->dialplan_detail_tag = 'anti-action'; - $this->dialplan_detail_type = $row2['@attributes']['application']; - $this->dialplan_detail_data = $row2['@attributes']['data']; - $this->dialplan_detail_group = $group; - $this->dialplan_detail_order = $order; - $this->dialplan_detail_add(); - $order = $order + 5; - } + if (strlen($dialplan['extension']['@attributes']['continue']) > 0) { + $this->dialplan_continue = $dialplan['extension']['@attributes']['continue']; + } + if (strlen($dialplan['extension']['@attributes']['enabled']) > 0) { + $this->dialplan_enabled = $dialplan['extension']['@attributes']['enabled']; } else { - $condition_self_closing_tag = true; + $this->dialplan_enabled = "true"; } - //if not a self closing tag then increment the group - if (!$condition_self_closing_tag) { - $group++; + $this->dialplan_description = ''; + $this->dialplan_add(); + //loop through the condition array + $x = 0; + $group = 0; + $order = 5; + if (isset($dialplan['extension']['condition'])) foreach ($dialplan['extension']['condition'] as &$row) { + unset($this->dialplan_detail_break); + unset($this->dialplan_detail_inline); + $this->dialplan_detail_tag = 'condition'; + $this->dialplan_detail_type = $row['@attributes']['field']; + $this->dialplan_detail_data = $row['@attributes']['expression']; + $this->dialplan_detail_group = $group; + $this->dialplan_detail_order = $order; + if (strlen($row['@attributes']['break']) > 0) { + $this->dialplan_detail_break = $row['@attributes']['break']; + } + $this->dialplan_detail_add(); + if (is_array($row['action']) || is_array($row['anti-action'])) { + $condition_self_closing_tag = false; + if (!is_array($row['action'][0])) { + if ($row['action']['@attributes']['application']) { + $tmp = $row['action']; + unset($row['action']); + $row['action'][0] = $tmp; + } + } + if (!is_array($row['anti-action'][0])) { + if ($row['anti-action']['@attributes']['application']) { + $tmp = $row['anti-action']; + unset($row['anti-action']); + $row['anti-action'][0] = $tmp; + } + } + $order = $order + 5; + unset($this->dialplan_detail_break); + unset($this->dialplan_detail_inline); + if (isset($row['action'])) foreach ($row['action'] as &$row2) { + $this->dialplan_detail_tag = 'action'; + $this->dialplan_detail_type = $row2['@attributes']['application']; + $this->dialplan_detail_data = $row2['@attributes']['data']; + if (strlen($row2['@attributes']['inline']) > 0) { + $this->dialplan_detail_inline = $row2['@attributes']['inline']; + } + $this->dialplan_detail_group = $group; + $this->dialplan_detail_order = $order; + $this->dialplan_detail_add(); + $order = $order + 5; + } + if (isset($row['anti-action'])) foreach ($row['anti-action'] as &$row2) { + $this->dialplan_detail_tag = 'anti-action'; + $this->dialplan_detail_type = $row2['@attributes']['application']; + $this->dialplan_detail_data = $row2['@attributes']['data']; + $this->dialplan_detail_group = $group; + $this->dialplan_detail_order = $order; + $this->dialplan_detail_add(); + $order = $order + 5; + } + } + else { + $condition_self_closing_tag = true; + } + //if not a self closing tag then increment the group + if (!$condition_self_closing_tag) { + $group++; + } + $row['group'] = $group; + $order = $order + 5; + $x++; } - $row['group'] = $group; - $order = $order + 5; - $x++; - } - //end the transaction - $this->db->commit(); + //end the transaction + $this->db->commit(); + } } }