SIP Profiles: Database class integration.

This commit is contained in:
Nate
2019-08-13 07:32:07 -06:00
parent 1041c2a76f
commit 4002f3cd01
8 changed files with 462 additions and 502 deletions

View File

@@ -28,36 +28,37 @@
if ($domains_processed == 1) {
//add the sip profiles to the database
$sql = "select count(*) as num_rows from v_sip_profiles ";
$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) {
if (file_exists('/usr/share/examples/fusionpbx/resources/templates/conf/sip_profiles')) {
$sip_profile_dir = '/usr/share/examples/fusionpbx/resources/templates/conf/sip_profiles/*.xml.noload';
}
elseif (file_exists('/usr/local/share/fusionpbx/resources/templates/conf/sip_profiles')) {
$sip_profile_dir = '/usr/local/share/fusionpbx/resources/templates/conf/sip_profiles/*.xml.noload';
}
else {
$sip_profile_dir = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/resources/templates/conf/sip_profiles/*.xml.noload';
}
$db->beginTransaction();
$xml_files = glob($sip_profile_dir);
foreach ($xml_files as &$xml_file) {
//load the sip profile xml and save it into an array
$sip_profile_xml = file_get_contents($xml_file);
$xml = simplexml_load_string($sip_profile_xml);
$json = json_encode($xml);
$sip_profile = json_decode($json, true);
$sip_profile_name = $sip_profile['@attributes']['name'];
$sip_profile_enabled = $sip_profile['@attributes']['enabled'];
//echo "sip profile name: ".$sip_profile_name."\n";
$sql = "select count(*) from v_sip_profiles ";
$database = new database;
$num_rows = $database->select($sql, null, 'column');
unset($sql);
if ($sip_profile_name != "{v_sip_profile_name}") {
//prepare the description
switch ($sip_profile_name) {
if ($num_rows == 0) {
if (file_exists('/usr/share/examples/fusionpbx/resources/templates/conf/sip_profiles')) {
$sip_profile_dir = '/usr/share/examples/fusionpbx/resources/templates/conf/sip_profiles/*.xml.noload';
}
elseif (file_exists('/usr/local/share/fusionpbx/resources/templates/conf/sip_profiles')) {
$sip_profile_dir = '/usr/local/share/fusionpbx/resources/templates/conf/sip_profiles/*.xml.noload';
}
else {
$sip_profile_dir = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/resources/templates/conf/sip_profiles/*.xml.noload';
}
$xml_files = glob($sip_profile_dir);
foreach ($xml_files as $x => &$xml_file) {
//load the sip profile xml and save it into an array
$sip_profile_xml = file_get_contents($xml_file);
$xml = simplexml_load_string($sip_profile_xml);
$json = json_encode($xml);
$sip_profile = json_decode($json, true);
$sip_profile_name = $sip_profile['@attributes']['name'];
$sip_profile_enabled = $sip_profile['@attributes']['enabled'];
//echo "sip profile name: ".$sip_profile_name."\n";
if ($sip_profile_name != "{v_sip_profile_name}") {
//prepare the description
switch ($sip_profile_name) {
case "internal":
$sip_profile_description = "The Internal profile by default requires registration which is used by the endpoints. ";
$sip_profile_description .= "By default the Internal profile binds to port 5060. ";
@@ -78,184 +79,151 @@
break;
default:
$sip_profile_description = '';
}
}
//add the sip profile if it is not false
if ($sip_profile_enabled != "false") {
//insert the sip profile name, description
$sip_profile_uuid = uuid();
$sql = "insert into v_sip_profiles";
$sql .= "(";
$sql .= "sip_profile_uuid, ";
$sql .= "sip_profile_name, ";
$sql .= "sip_profile_description ";
$sql .= ") ";
$sql .= "values ";
$sql .= "( ";
$sql .= "'".check_str($sip_profile_uuid)."', ";
$sql .= "'".check_str($sip_profile_name)."', ";
$sql .= "'".check_str($sip_profile_description)."' ";
$sql .= ")";
//echo $sql."\n\n";
$db->exec(check_sql($sql));
unset($sql);
//get the domain, alias and parse values and set as variables
$sip_profile_domain_name = $sip_profile['domains']['domain']['@attributes']['name'];
$sip_profile_domain_alias = $sip_profile['domains']['domain']['@attributes']['alias'];
$sip_profile_domain_parse = $sip_profile['domains']['domain']['@attributes']['parse'];
//add profile name and description
$sip_profile_uuid = uuid();
$array['sip_profiles'][$x]['sip_profile_uuid'] = $sip_profile_uuid;
$array['sip_profiles'][$x]['sip_profile_name'] = $sip_profile_name;
$array['sip_profiles'][$x]['sip_profile_description'] = $sip_profile_description;
//add the sip profile domains name, alias and parse
$sip_profile_domain_uuid = uuid();
$sql = "insert into v_sip_profile_domains";
$sql .= "(";
$sql .= "sip_profile_domain_uuid, ";
$sql .= "sip_profile_uuid, ";
$sql .= "sip_profile_domain_name, ";
$sql .= "sip_profile_domain_alias, ";
$sql .= "sip_profile_domain_parse ";
$sql .= ") ";
$sql .= "values ";
$sql .= "( ";
$sql .= "'".$sip_profile_domain_uuid."', ";
$sql .= "'".$sip_profile_uuid."', ";
$sql .= "'".check_str($sip_profile_domain_name)."', ";
$sql .= "'".check_str($sip_profile_domain_alias)."', ";
$sql .= "'".check_str($sip_profile_domain_parse)."' ";
$sql .= ")";
$db->exec(check_sql($sql));
unset($sql);
$array['sip_profiles'][$x]['sip_profile_domains'][$x]['sip_profile_domain_uuid'] = $sip_profile_domain_uuid;
$array['sip_profiles'][$x]['sip_profile_domains'][$x]['sip_profile_uuid'] = $sip_profile_uuid;
$array['sip_profiles'][$x]['sip_profile_domains'][$x]['sip_profile_domain_name'] = $sip_profile['domains']['domain']['@attributes']['name'];
$array['sip_profiles'][$x]['sip_profile_domains'][$x]['sip_profile_domain_alias'] = $sip_profile['domains']['domain']['@attributes']['alias'];
$array['sip_profiles'][$x]['sip_profile_domains'][$x]['sip_profile_domain_parse'] = $sip_profile['domains']['domain']['@attributes']['parse'];
//add the sip profile settings
foreach ($sip_profile['settings']['param'] as $row) {
//get the name and value pair
$sip_profile_setting_name = $row['@attributes']['name'];
$sip_profile_setting_value = $row['@attributes']['value'];
$sip_profile_setting_enabled = $row['@attributes']['enabled'];
if ($sip_profile_setting_enabled != "false") { $sip_profile_setting_enabled = "true"; }
//echo "name: $name value: $value\n";
//add the profile settings into the database
$sip_profile_setting_uuid = uuid();
$sql = "insert into v_sip_profile_settings ";
$sql .= "(";
$sql .= "sip_profile_setting_uuid, ";
$sql .= "sip_profile_uuid, ";
$sql .= "sip_profile_setting_name, ";
$sql .= "sip_profile_setting_value, ";
$sql .= "sip_profile_setting_enabled ";
$sql .= ") ";
$sql .= "values ";
$sql .= "( ";
$sql .= "'".check_str($sip_profile_setting_uuid)."', ";
$sql .= "'".check_str($sip_profile_uuid)."', ";
$sql .= "'".check_str($sip_profile_setting_name)."', ";
$sql .= "'".check_str($sip_profile_setting_value)."', ";
$sql .= "'".$sip_profile_setting_enabled."' ";
$sql .= ")";
//echo $sql."\n\n";
$db->exec(check_sql($sql));
//add the profile settings
foreach ($sip_profile['settings']['param'] as $y => $row) {
$sip_profile_setting_uuid = uuid();
$array['sip_profiles'][$x]['sip_profile_settings'][$y]['sip_profile_setting_uuid'] = $sip_profile_setting_uuid;
$array['sip_profiles'][$x]['sip_profile_settings'][$y]['sip_profile_uuid'] = $sip_profile_uuid;
$array['sip_profiles'][$x]['sip_profile_settings'][$y]['sip_profile_setting_name'] = $row['@attributes']['name'];
$array['sip_profiles'][$x]['sip_profile_settings'][$y]['sip_profile_setting_value'] = $row['@attributes']['value'];
$array['sip_profiles'][$x]['sip_profile_settings'][$y]['sip_profile_setting_enabled'] = $row['@attributes']['enabled'] != 'false' ? 'true' : $row['@attributes']['enabled'];
}
}
}
}
$db->commit();
//save the sip profile xml
}
}
}
//execute inserts
if (is_array($array) && @sizeof($array) != 0) {
//grant temporary permissions
$p = new permissions;
$p->add('sip_profile_add', 'temp');
$p->add('sip_profile_domain_add', 'temp');
$p->add('sip_profile_setting_add', 'temp');
//execute insert
$database = new database;
$database->app_name = 'sip_profiles';
$database->app_uuid = '159a8da8-0e8c-a26b-6d5b-19c532b6d470';
$database->save($array);
unset($array);
//revoke temporary permissions
$p->delete('sip_profile_add', 'temp');
$p->delete('sip_profile_domain_add', 'temp');
$p->delete('sip_profile_setting_add', 'temp');
}
//save the sip profile xml
save_sip_profile_xml();
//apply settings reminder
//apply settings reminder
$_SESSION["reload_xml"] = true;
}
unset($prep_statement);
}
//upgrade - add missing sip profiles domain settings
$sql = "select count(*) as num_rows from v_sip_profile_domains ";
$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) {
if (file_exists('/usr/share/examples/fusionpbx/resources/templates/conf/sip_profiles')) {
$sip_profile_dir = '/usr/share/examples/fusionpbx/resources/templates/conf/sip_profiles/*.xml.noload';
}
elseif (file_exists('/usr/local/share/fusionpbx/resources/templates/conf/sip_profiles')) {
$sip_profile_dir = '/usr/local/share/fusionpbx/resources/templates/conf/sip_profiles/*.xml.noload';
}
else {
$sip_profile_dir = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/resources/templates/conf/sip_profiles/*.xml.noload';
}
$db->beginTransaction();
$xml_files = glob($sip_profile_dir);
foreach ($xml_files as &$xml_file) {
//load the sip profile xml and save it into an array
$sip_profile_xml = file_get_contents($xml_file);
$xml = simplexml_load_string($sip_profile_xml);
$json = json_encode($xml);
$sip_profile = json_decode($json, true);
$sip_profile_name = $sip_profile['@attributes']['name'];
$sip_profile_enabled = $sip_profile['@attributes']['enabled'];
//echo "sip profile name: ".$sip_profile_name."\n";
$sql = "select count(*) from v_sip_profile_domains ";
$database = new database;
$num_rows = $database->select($sql, null, 'column');
unset($sql);
//get the domain, alias and parse values and set as variables
$sip_profile_domain_name = $sip_profile['domains']['domain']['@attributes']['name'];
$sip_profile_domain_alias = $sip_profile['domains']['domain']['@attributes']['alias'];
$sip_profile_domain_parse = $sip_profile['domains']['domain']['@attributes']['parse'];
if ($num_rows == 0) {
if (file_exists('/usr/share/examples/fusionpbx/resources/templates/conf/sip_profiles')) {
$sip_profile_dir = '/usr/share/examples/fusionpbx/resources/templates/conf/sip_profiles/*.xml.noload';
}
elseif (file_exists('/usr/local/share/fusionpbx/resources/templates/conf/sip_profiles')) {
$sip_profile_dir = '/usr/local/share/fusionpbx/resources/templates/conf/sip_profiles/*.xml.noload';
}
else {
$sip_profile_dir = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/resources/templates/conf/sip_profiles/*.xml.noload';
}
//get the sip_profile_uuid using the sip profile name
$sql = "select sip_profile_uuid from v_sip_profiles ";
$sql .= "where sip_profile_name = '$sip_profile_name' ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
$result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
$sip_profile_uuid = $result[0]["sip_profile_uuid"];
unset ($prep_statement);
$xml_files = glob($sip_profile_dir);
foreach ($xml_files as $x => &$xml_file) {
//load the sip profile xml and save it into an array
$sip_profile_xml = file_get_contents($xml_file);
$xml = simplexml_load_string($sip_profile_xml);
$json = json_encode($xml);
$sip_profile = json_decode($json, true);
$sip_profile_name = $sip_profile['@attributes']['name'];
$sip_profile_enabled = $sip_profile['@attributes']['enabled'];
//add the sip profile domains name, alias and parse
if ($sip_profile_uuid) {
$sip_profile_domain_uuid = uuid();
$sql = "insert into v_sip_profile_domains";
$sql .= "(";
$sql .= "sip_profile_domain_uuid, ";
$sql .= "sip_profile_uuid, ";
$sql .= "sip_profile_domain_name, ";
$sql .= "sip_profile_domain_alias, ";
$sql .= "sip_profile_domain_parse ";
$sql .= ") ";
$sql .= "values ";
$sql .= "( ";
$sql .= "'".$sip_profile_domain_uuid."', ";
$sql .= "'".$sip_profile_uuid."', ";
$sql .= "'".check_str($sip_profile_domain_name)."', ";
$sql .= "'".check_str($sip_profile_domain_alias)."', ";
$sql .= "'".check_str($sip_profile_domain_parse)."' ";
$sql .= ")";
$db->exec(check_sql($sql));
unset($sql);
}
//unset the sip_profile_uuid
unset($sip_profile_uuid);
//get the sip_profile_uuid using the sip profile name
$sql = "select sip_profile_uuid from v_sip_profiles ";
$sql .= "where sip_profile_name = :sip_profile_name ";
$parameters['sip_profile_name'] = $sip_profile_name;
$database = new database;
$sip_profile_uuid = $database->select($sql, $parameters, 'column');
unset($sql, $parameters);
//add the sip profile domains name, alias and parse
if (is_uuid($sip_profile_uuid)) {
$sip_profile_domain_uuid = uuid();
$array['sip_profile_domains'][$x]['sip_profile_domain_uuid'] = $sip_profile_domain_uuid;
$array['sip_profile_domains'][$x]['sip_profile_uuid'] = $sip_profile_uuid;
$array['sip_profile_domains'][$x]['sip_profile_domain_name'] = $sip_profile['domains']['domain']['@attributes']['name'];
$array['sip_profile_domains'][$x]['sip_profile_domain_alias'] = $sip_profile['domains']['domain']['@attributes']['alias'];
$array['sip_profile_domains'][$x]['sip_profile_domain_parse'] = $sip_profile['domains']['domain']['@attributes']['parse'];
}
//unset the sip_profile_uuid
unset($sip_profile_uuid);
}
//execute inserts
if (is_array($array) && @sizeof($array) != 0) {
//grant temporary permissions
$p = new permissions;
$p->add('sip_profile_domain_add', 'temp');
//execute insert
$database = new database;
$database->app_name = 'sip_profiles';
$database->app_uuid = '159a8da8-0e8c-a26b-6d5b-19c532b6d470';
$database->save($array);
unset($array);
//revoke temporary permissions
$p->delete('sip_profile_domain_add', 'temp');
}
$db->commit();
//save the sip profile xml
//save the sip profile xml
save_sip_profile_xml();
//apply settings reminder
//apply settings reminder
$_SESSION["reload_xml"] = true;
}
unset($prep_statement);
}
//if empty, set enabled to true
$sql = "update v_sip_profiles set ";
$sql .= "sip_profile_enabled = 'true' ";
$sql .= "where sip_profile_enabled is null ";
$sql .= "or sip_profile_enabled = '' ";
$database = new database;
$database->execute($sql);
unset($sql);
}
//if empty, set sip_profile_enabled = true
if ($domains_processed == 1) {
$sql = "update v_sip_profiles set ";
$sql .= "sip_profile_enabled = 'true' ";
$sql .= "where sip_profile_enabled is null ";
$sql .= "or sip_profile_enabled = '' ";
$db->exec(check_sql($sql));
unset($sql);
}
?>
?>