restructured install to go via global_settings

added new global_settings to marshal settings used during a
install/upgrade
This commit is contained in:
Matthew Vale
2015-12-02 11:16:25 +00:00
parent d4fa22dbec
commit aff613d3e9
6 changed files with 411 additions and 241 deletions
+1 -1
View File
@@ -85,7 +85,7 @@ if ($domains_processed == 1) {
$sql .= "set event_socket_ip_address = '$event_socket_ip_address' "; $sql .= "set event_socket_ip_address = '$event_socket_ip_address' ";
$sql .= "set event_socket_port = '$event_socket_port' "; $sql .= "set event_socket_port = '$event_socket_port' ";
$sql .= "set event_socket_password = '$event_socket_password' "; $sql .= "set event_socket_password = '$event_socket_password' ";
$this->dbh->exec(check_sql($sql)); $db->exec(check_sql($sql));
unset($sql); unset($sql);
} }
} }
+9 -12
View File
@@ -267,10 +267,10 @@ if(!$install_step) { $install_step = 'select_language'; }
//if($_SERVER['HTTPS']) { $protocol = 'https'; } //if($_SERVER['HTTPS']) { $protocol = 'https'; }
//echo "<iframe src='$protocol://$domain_name/core/install/install_first_time.php' style='border:solid 1px #000;width:100%;height:auto'></iframe>"; //echo "<iframe src='$protocol://$domain_name/core/install/install_first_time.php' style='border:solid 1px #000;width:100%;height:auto'></iframe>";
require_once "core/install/resources/classes/detect_switch.php"; require_once "core/install/resources/classes/detect_switch.php";
$switch_detect = new detect_switch($event_host, $event_port, $event_password); $detect_switch = new detect_switch($event_host, $event_port, $event_password);
$detect_ok = true; $detect_ok = true;
try { try {
$switch_detect->detect(); $detect_switch->detect();
} catch(Exception $e){ } catch(Exception $e){
echo "<p>Failed to detect configuration detect_switch reported: " . $e->getMessage() . "</p>\n"; echo "<p>Failed to detect configuration detect_switch reported: " . $e->getMessage() . "</p>\n";
$detect_ok = false; $detect_ok = false;
@@ -294,34 +294,31 @@ if(!$install_step) { $install_step = 'select_language'; }
} }
#set_error_handler("error_handler"); #set_error_handler("error_handler");
try { try {
require_once "resources/classes/global_settings.php";
$settings = new global_settings($detect_switch, $domain_name);
require_once "resources/classes/install_fusionpbx.php"; require_once "resources/classes/install_fusionpbx.php";
$system = new install_fusionpbx($domain_name, null, $switch_detect); $system = new install_fusionpbx($settings);
$domain_uuid = $system->domain_uuid();
$system->admin_username = $admin_username; $system->admin_username = $admin_username;
$system->admin_password = $admin_password; $system->admin_password = $admin_password;
$system->default_country = $install_default_country; $system->default_country = $install_default_country;
$system->install_language = $install_language; $system->install_language = $install_language;
$system->template_name = $install_template_name; $system->template_name = $install_template_name;
foreach($_POST as $key=>$value){
if(substr($key,0,3) == "db_"){
$system->$key = $value;
}
}
require_once "resources/classes/install_switch.php"; require_once "resources/classes/install_switch.php";
$switch = new install_switch($domain_name, $domain_uuid, $switch_detect); $switch = new install_switch($settings);
//$switch->debug = true; //$switch->debug = true;
//$system->debug = true; //$system->debug = true;
$system->install(); $system->install();
$switch->install(); $switch->install();
$system->app_defaults(); $system->app_defaults();
$switch_detect->restart_switch(); $detect_switch->restart_switch();
}catch(Exception $e){ }catch(Exception $e){
echo "</pre>\n"; echo "</pre>\n";
echo "<p><b>Failed to install</b><br/>" . $e->getMessage() . "</p>\n"; echo "<p><b>Failed to install</b><br/>" . $e->getMessage() . "</p>\n";
try { try {
require_once "resources/classes/install_fusionpbx.php"; require_once "resources/classes/install_fusionpbx.php";
$system = new install_fusionpbx($domain_name, $domain_uuid, $switch_detect); $system = new install_fusionpbx($domain_name, $domain_uuid, $detect_switch);
$system->remove_config(); $system->remove_config();
}catch(Exception $e){ }catch(Exception $e){
echo "<p><b>Failed to remove config:</b> " . $e->getMessage() . "</p>\n"; echo "<p><b>Failed to remove config:</b> " . $e->getMessage() . "</p>\n";
@@ -31,11 +31,19 @@ require_once "resources/classes/EventSocket.php";
class detect_switch { class detect_switch {
// cached data // cached data
protected $_folders; protected $_dirs;
protected $_vdirs;
public function get_dirs() { return $this->_dirs; }
public function get_vdirs() { return $this->_vdirs; }
// version information // version information
protected $_major; protected $_major;
protected $_minor; protected $_minor;
protected $_build; protected $_build;
public function major() { return $this->_major; }
public function minor() { return $this->_minor; }
public function build() { return $this->_build; }
public function version() { return $this->_major.".".$this->_minor.".".$this->_build; }
// dirs - detected by from the switch // dirs - detected by from the switch
protected $_base_dir = ''; protected $_base_dir = '';
@@ -55,30 +63,23 @@ require_once "resources/classes/EventSocket.php";
protected $_sounds_dir = ''; protected $_sounds_dir = '';
protected $_storage_dir = ''; protected $_storage_dir = '';
protected $_temp_dir = ''; protected $_temp_dir = '';
public function base_dir() { return $this->_base_dir; }
public function major() { return $this->_major; } public function cache_dir() { return $this->_cache_dir; }
public function minor() { return $this->_minor; } public function certs_dir() { return $this->_certs_dir; }
public function build() { return $this->_build; } public function conf_dir() { return $this->_conf_dir; }
public function version() { return $this->_major.".".$this->_minor.".".$this->_build; } public function db_dir() { return $this->_db_dir; }
public function base_dir() { return $this->_base_dir; } public function external_ssl_dir() { return $this->_external_ssl_dir; }
public function cache_dir() { return $this->_cache_dir; } public function grammar_dir() { return $this->_grammar_dir; }
public function certs_dir() { return $this->_certs_dir; } public function htdocs_dir() { return $this->_htdocs_dir; }
public function conf_dir() { return $this->_conf_dir; } public function internal_ssl_dir() { return $this->_internal_ssl_dir; }
public function db_dir() { return $this->_db_dir; } public function log_dir() { return $this->_log_dir; }
public function external_ssl_dir() { return $this->_external_ssl_dir; } public function mod_dir() { return $this->_mod_dir; }
public function grammar_dir() { return $this->_grammar_dir; } public function recordings_dir() { return $this->_recordings_dir; }
public function htdocs_dir() { return $this->_htdocs_dir; } public function run_dir() { return $this->_run_dir; }
public function internal_ssl_dir() { return $this->_internal_ssl_dir; } public function script_dir() { return $this->_script_dir; }
public function log_dir() { return $this->_log_dir; } public function sounds_dir() { return $this->_sounds_dir; }
public function mod_dir() { return $this->_mod_dir; } public function storage_dir() { return $this->_storage_dir; }
public function recordings_dir() { return $this->_recordings_dir; } public function temp_dir() { return $this->_temp_dir; }
public function run_dir() { return $this->_run_dir; }
public function script_dir() { return $this->_script_dir; }
public function sounds_dir() { return $this->_sounds_dir; }
public function storage_dir() { return $this->_storage_dir; }
public function temp_dir() { return $this->_temp_dir; }
public function get_dirs() { return $this->_dirs; }
public function get_vdirs() { return $this->_vdirs; }
// virtual dirs - assumed based on the detected dirs // virtual dirs - assumed based on the detected dirs
protected $_voicemail_vdir = ''; protected $_voicemail_vdir = '';
@@ -87,13 +88,12 @@ require_once "resources/classes/EventSocket.php";
protected $_sip_profiles_vdir = ''; protected $_sip_profiles_vdir = '';
protected $_dialplan_vdir = ''; protected $_dialplan_vdir = '';
protected $_backup_vdir = ''; protected $_backup_vdir = '';
public function voicemail_vdir() { return $this->_voicemail_vdir; }
public function voicemail_vdir() { return $this->_voicemail_vdir; } public function phrases_vdir() { return $this->_phrases_vdir; }
public function phrases_vdir() { return $this->_phrases_vdir; } public function extensions_vdir() { return $this->_extensions_vdir; }
public function extensions_vdir() { return $this->_extensions_vdir; } public function sip_profiles_vdir() { return $this->_sip_profiles_vdir; }
public function sip_profiles_vdir() { return $this->_sip_profiles_vdir; } public function dialplan_vdir() { return $this->_dialplan_vdir; }
public function dialplan_vdir() { return $this->_dialplan_vdir; } public function backup_vdir() { return $this->_backup_vdir; }
public function backup_vdir() { return $this->_backup_vdir; }
// event socket // event socket
public $event_host = 'localhost'; public $event_host = 'localhost';
@@ -102,6 +102,7 @@ require_once "resources/classes/EventSocket.php";
protected $event_socket; protected $event_socket;
public function __construct($event_host, $event_port, $event_password) { public function __construct($event_host, $event_port, $event_password) {
//do not take these settings from session as they be detecting a new switch
if($event_host){ $this->event_host = $event_host; } if($event_host){ $this->event_host = $event_host; }
if($event_port){ $this->event_port = $event_port; } if($event_port){ $this->event_port = $event_port; }
if($event_password){ $this->event_password = $event_password; } if($event_password){ $this->event_password = $event_password; }
@@ -137,12 +138,12 @@ require_once "resources/classes/EventSocket.php";
$this->$field = normalize_path($matches[2]); $this->$field = normalize_path($matches[2]);
} }
} }
$this->_voicemail_vdir = normalize_path(join( DIRECTORY_SEPARATOR, array($this->_storage_dir, "voicemail"))); $this->_voicemail_vdir = normalize_path($this->_storage_dir . DIRECTORY_SEPARATOR . "voicemail");
$this->_phrases_vdir = normalize_path(join( DIRECTORY_SEPARATOR, array($this->_conf_dir, "lang"))); $this->_phrases_vdir = normalize_path($this->_conf_dir . DIRECTORY_SEPARATOR . "lang");
$this->_extensions_vdir = normalize_path(join( DIRECTORY_SEPARATOR, array($this->_conf_dir, "directory"))); $this->_extensions_vdir = normalize_path($this->_conf_dir . DIRECTORY_SEPARATOR . "directory");
$this->_sip_profiles_vdir = normalize_path(join( DIRECTORY_SEPARATOR, array($this->_conf_dir, "sip_profiles"))); $this->_sip_profiles_vdir = normalize_path(($this->_conf_dir . DIRECTORY_SEPARATOR . "sip_profiles");
$this->_dialplan_vdir = normalize_path(join( DIRECTORY_SEPARATOR, array($this->_conf_dir, "dialplan"))); $this->_dialplan_vdir = normalize_path($this->_conf_dir . DIRECTORY_SEPARATOR . "dialplan");
$this->_backup_vdir = normalize_path(sys_get_temp_dir()); $this->_backup_vdir = normalize_path(sys_get_temp_dir());
} }
protected function connect_event_socket(){ protected function connect_event_socket(){
@@ -0,0 +1,192 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Copyright (C) 2010-2015
All Rights Reserved.
Contributor(s):
Matthew Vale <github@mafoo.org>
*/
require_once "root.php";
//define the install class
class global_settings {
// cached data
protected $_dirs;
protected $_vdirs;
public function get_switch_dirs() { return $this->_switch_dirs; }
public function get_switch_vdirs() { return $this->_switch_vdirs; }
// dirs - detected by from the switch
protected $_switch_base_dir = '';
protected $_switch_cache_dir = '';
protected $_switch_certs_dir = '';
protected $_switch_conf_dir = '';
protected $_switch_db_dir = '';
protected $_switch_external_ssl_dir = '';
protected $_switch_grammar_dir = '';
protected $_switch_htdocs_dir = '';
protected $_switch_internal_ssl_dir = '';
protected $_switch_log_dir = '';
protected $_switch_mod_dir = '';
protected $_switch_recordings_dir = '';
protected $_switch_run_dir = '';
protected $_switch_script_dir = '';
protected $_switch_sounds_dir = '';
protected $_switch_storage_dir = '';
protected $_switch_temp_dir = '';
public function switch_base_dir() { return $this->_switch_base_dir; }
public function switch_cache_dir() { return $this->_switch_cache_dir; }
public function switch_certs_dir() { return $this->_switch_certs_dir; }
public function switch_conf_dir() { return $this->_switch_conf_dir; }
public function switch_db_dir() { return $this->_switch_db_dir; }
public function switch_external_ssl_dir() { return $this->_switch_external_ssl_dir; }
public function switch_grammar_dir() { return $this->_switch_grammar_dir; }
public function switch_htdocs_dir() { return $this->_switch_htdocs_dir; }
public function switch_internal_ssl_dir() { return $this->_switch_internal_ssl_dir; }
public function switch_log_dir() { return $this->_switch_log_dir; }
public function switch_mod_dir() { return $this->_switch_mod_dir; }
public function switch_recordings_dir() { return $this->_switch_recordings_dir; }
public function switch_run_dir() { return $this->_switch_run_dir; }
public function switch_script_dir() { return $this->_switch_script_dir; }
public function switch_sounds_dir() { return $this->_switch_sounds_dir; }
public function switch_storage_dir() { return $this->_switch_storage_dir; }
public function switch_temp_dir() { return $this->_switch_temp_dir; }
// virtual dirs - assumed based on the detected dirs
protected $_switch_voicemail_vdir = '';
protected $_switch_phrases_vdir = '';
protected $_switch_extensions_vdir = '';
protected $_switch_sip_profiles_vdir = '';
protected $_switch_dialplan_vdir = '';
protected $_switch_backup_vdir = '';
public function switch_voicemail_vdir() { return $this->_switch_voicemail_vdir; }
public function switch_phrases_vdir() { return $this->_switch_phrases_vdir; }
public function switch_extensions_vdir() { return $this->_switch_extensions_vdir; }
public function switch_sip_profiles_vdir() { return $this->_switch_sip_profiles_vdir; }
public function switch_dialplan_vdir() { return $this->_switch_dialplan_vdir; }
public function switch_backup_vdir() { return $this->_switch_backup_vdir; }
// event socket
protected $_switch_event_host;
protected $_switch_event_port;
protected $_switch_event_password;
public function switch_event_host() { return $this->_switch_event_host; }
public function switch_event_port() { return $this->_switch_event_port; }
public function switch_event_password() { return $this->_switch_event_password; }
// database information
protected $_db_type;
protected $_db_path;
protected $_db_host;
protected $_db_port;
protected $_db_name;
protected $_db_username;
protected $_db_password;
protected $_db_create;
protected $_db_create_username;
protected $_db_create_password;
public function db_type() {return $this->_db_type; }
public function db_path() {return $this->_db_path; }
public function db_host() {return $this->_db_host; }
public function db_port() {return $this->_db_port; }
public function db_name() {return $this->_db_name; }
public function db_username() {return $this->_db_username; }
public function db_password() {return $this->_db_password; }
public function db_create() {return $this->_db_create; }
public function db_create_username() {return $this->_db_create_username; }
public function db_create_password() {return $this->_db_create_password; }
//misc information
protected $_domain_count;
public function domain_count() {return $this->_domain_count; }
public function __construct($detect_switch, $domain_name, $domain_uuid) {
$this->_switch_dirs = preg_grep ('/^switch_.*_dir$/', get_class_methods('global_settings') );
sort( $this->_switch_dirs );
$this->_switch_vdirs = preg_grep ('/^switch_.*_vdir$/', get_class_methods('global_settings') );
sort( $this->_switch_vdirs );
if($detect_switch == null){
//take settings from session
foreach ($this->_switch_dirs as $dir){
$session_var;
preg_match( '^switch_.*_dir$', $dir, $session_var);
$this->$dir = $_SESSION['switch'][$session_var[0]]['dir'];
}
foreach ($this->_switch_vdirs as $vdir){
$session_var;
preg_match( '^switch_.*_vdir$', $vdir, $session_var);
$this->$vdir = $_SESSION['switch'][$session_var[0]]['dir'];
}
$this->switch_event_host = $_SESSION['event_socket_ip_address'];
$this->switch_event_port = $_SESSION['event_socket_port'];
$this->switch_event_password = $_SESSION['event_socket_password'];
// domain info
$this->domain_name = $_SESSION['domain_name'];
$this->domain_uuid = $_SESSION['domain_uuid'];
// collect misc info
$this->domain_count = count($_SESSION["domains"]);
// collect db_info
global $db_type, $db_path, $db_host, $db_port, $db_name, $db_username, $db_password;
$this->_db_type = $db_type;
$this->_db_path = $db_path;
$this->_db_host = $db_host;
$this->_db_port = $db_port;
$this->_db_name = $db_name;
$this->_db_username = $db_username;
$this->_db_password = $db_password;
}elseif(!is_a($detect_switch, 'detect_switch')){
throw new Exception('The parameter $detect_switch must be a detect_switch object (or a subclass of)');
}else{
//copy from detect_switch
foreach($detect_switch->switch_dirs() as $dir){
$t_dir = "_$dir";
$this->$t_dir = $detect_switch->$dir();
}
foreach($detect_switch->switch_vdirs() as $vdir){
$t_vdir = "_$vdir";
$this->$t_vdir = $detect_switch->$vdir();
}
//copy from _POST
foreach($_POST as $key=>$value){
if(substr($key,0,3) == "db_"){
$this->$key = $value;
}
}
// domain info
if($domain_uuid == null){ $domain_uuid = uuid(); }
$this->domain_name = $domain_name;
$this->domain_uuid = $domain_uuid;
//collect misc info
$this->_domain_count = 1; //assumed to be one
}
}
}
?>
@@ -29,9 +29,7 @@ include "root.php";
//define the install class //define the install class
class install_fusionpbx { class install_fusionpbx {
protected $_domain_uuid; protected $global_settings;
protected $domain_name;
protected $detect_switch;
protected $config_php; protected $config_php;
protected $menu_uuid = 'b4750c3f-2a86-b00d-b7d0-345c14eca286'; protected $menu_uuid = 'b4750c3f-2a86-b00d-b7d0-345c14eca286';
protected $dbh; protected $dbh;
@@ -47,25 +45,11 @@ include "root.php";
public $default_country = 'US'; public $default_country = 'US';
public $template_name = 'enhanced'; public $template_name = 'enhanced';
public $db_type; function __construct($global_settings) {
public $db_path; if(!is_a($global_settings, 'global_settings')){
public $db_host; throw new Exception('The parameter $global_settings must be a global_settings object (or a subclass of)');
public $db_port;
public $db_name;
public $db_username;
public $db_password;
public $db_create;
public $db_create_username;
public $db_create_password;
function __construct($domain_name, $domain_uuid, $detect_switch) {
if(!is_a($detect_switch, 'detect_switch')){
throw new Exception('The parameter $detect_switch must be a detect_switch object (or a subclass of)');
} }
if($domain_uuid == null){ $domain_uuid = uuid(); } $this->global_settings = $global_settings;
$this->_domain_uuid = $domain_uuid;
$this->domain_name = $domain_name;
$this->detect_switch = $detect_switch;
if (is_dir("/etc/fusionpbx")){ if (is_dir("/etc/fusionpbx")){
$this->config_php = "/etc/fusionpbx/config.php"; $this->config_php = "/etc/fusionpbx/config.php";
} elseif (is_dir("/usr/local/etc/fusionpbx")){ } elseif (is_dir("/usr/local/etc/fusionpbx")){
@@ -138,26 +122,26 @@ include "root.php";
$tmp_config .= "//-----------------------------------------------------\n"; $tmp_config .= "//-----------------------------------------------------\n";
$tmp_config .= "\n"; $tmp_config .= "\n";
$tmp_config .= " //set the database type\n"; $tmp_config .= " //set the database type\n";
$tmp_config .= " \$db_type = '".$this->db_type."'; //sqlite, mysql, pgsql, others with a manually created PDO connection\n"; $tmp_config .= " \$db_type = '".$this->global_settings->db_type()."'; //sqlite, mysql, pgsql, others with a manually created PDO connection\n";
$tmp_config .= "\n"; $tmp_config .= "\n";
if ($this->db_type == "sqlite") { if ($this->global_settings->db_type() == "sqlite") {
$tmp_config .= " //sqlite: the db_name and db_path are automatically assigned however the values can be overidden by setting the values here.\n"; $tmp_config .= " //sqlite: the db_name and db_path are automatically assigned however the values can be overidden by setting the values here.\n";
$tmp_config .= " \$db_name = '".$this->db_name."'; //host name/ip address + '.db' is the default database filename\n"; $tmp_config .= " \$db_name = '".$this->global_settings->db_name()."'; //host name/ip address + '.db' is the default database filename\n";
$tmp_config .= " \$db_path = '".$this->db_path."'; //the path is determined by a php variable\n"; $tmp_config .= " \$db_path = '".$this->global_settings->db_path()."'; //the path is determined by a php variable\n";
} }
$tmp_config .= "\n"; $tmp_config .= "\n";
$tmp_config .= " //mysql: database connection information\n"; $tmp_config .= " //mysql: database connection information\n";
if ($this->db_type == "mysql") { if ($this->global_settings->db_type() == "mysql") {
if ($this->db_host == "localhost") { if ($this->global_settings->db_host() == "localhost") {
//if localhost is used it defaults to a Unix Socket which doesn't seem to work. //if localhost is used it defaults to a Unix Socket which doesn't seem to work.
//replace localhost with 127.0.0.1 so that it will connect using TCP //replace localhost with 127.0.0.1 so that it will connect using TCP
$this->db_host = "127.0.0.1"; $this->global_settings->db_host() = "127.0.0.1";
} }
$tmp_config .= " \$db_host = '".$this->db_host."';\n"; $tmp_config .= " \$db_host = '".$this->global_settings->db_host()."';\n";
$tmp_config .= " \$db_port = '".$this->db_port."';\n"; $tmp_config .= " \$db_port = '".$this->global_settings->db_port()."';\n";
$tmp_config .= " \$db_name = '".$this->db_name."';\n"; $tmp_config .= " \$db_name = '".$this->global_settings->db_name()."';\n";
$tmp_config .= " \$db_username = '".$this->db_username."';\n"; $tmp_config .= " \$db_username = '".$this->global_settings->db_username()."';\n";
$tmp_config .= " \$db_password = '".$this->db_password."';\n"; $tmp_config .= " \$db_password = '".$this->global_settings->db_password()."';\n";
} }
else { else {
$tmp_config .= " //\$db_host = '';\n"; $tmp_config .= " //\$db_host = '';\n";
@@ -168,19 +152,19 @@ include "root.php";
} }
$tmp_config .= "\n"; $tmp_config .= "\n";
$tmp_config .= " //pgsql: database connection information\n"; $tmp_config .= " //pgsql: database connection information\n";
if ($this->db_type == "pgsql") { if ($this->global_settings->db_type() == "pgsql") {
$tmp_config .= " \$db_host = '".$this->db_host."'; //set the host only if the database is not local\n"; $tmp_config .= " \$db_host = '".$this->global_settings->db_host()."'; //set the host only if the database is not local\n";
$tmp_config .= " \$db_port = '".$this->db_port."';\n"; $tmp_config .= " \$db_port = '".$this->global_settings->db_port()."';\n";
$tmp_config .= " \$db_name = '".$this->db_name."';\n"; $tmp_config .= " \$db_name = '".$this->global_settings->db_name()."';\n";
$tmp_config .= " \$db_username = '".$this->db_username."';\n"; $tmp_config .= " \$db_username = '".$this->global_settings->db_username()."';\n";
$tmp_config .= " \$db_password = '".$this->db_password."';\n"; $tmp_config .= " \$db_password = '".$this->global_settings->db_password()."';\n";
} }
else { else {
$tmp_config .= " //\$db_host = '".$this->db_host."'; //set the host only if the database is not local\n"; $tmp_config .= " //\$db_host = '".$this->global_settings->db_host()."'; //set the host only if the database is not local\n";
$tmp_config .= " //\$db_port = '".$this->db_port."';\n"; $tmp_config .= " //\$db_port = '".$this->global_settings->db_port()."';\n";
$tmp_config .= " //\$db_name = '".$this->db_name."';\n"; $tmp_config .= " //\$db_name = '".$this->global_settings->db_name()."';\n";
$tmp_config .= " //\$db_username = '".$this->db_username."';\n"; $tmp_config .= " //\$db_username = '".$this->global_settings->db_username()."';\n";
$tmp_config .= " //\$db_password = '".$this->db_password."';\n"; $tmp_config .= " //\$db_password = '".$this->global_settings->db_password()."';\n";
} }
$tmp_config .= "\n"; $tmp_config .= "\n";
$tmp_config .= " //show errors\n"; $tmp_config .= " //show errors\n";
@@ -205,23 +189,24 @@ include "root.php";
protected function create_database() { protected function create_database() {
require $this->config_php; require $this->config_php;
$this->write_progress("\tUsing database as type " . $this->db_type);
if($this->db_create and strlen($this->db_create_username) == 0)
{
$this->db_create_username = $this->db_username;
$this->db_create_password = $this->db_password;
}
$function = "create_database_" . $this->db_type;
$this->$function();
global $db; global $db;
$db = $this->dbh; $db = $this->dbh;
$this->write_progress("\tUsing database as type " . $this->global_settings->db_type());
if($this->global_settings->db_create() and strlen($this->global_settings->db_create_username()) == 0)
{
$this->global_settings->db_create_username() = $this->global_settings->db_username();
$this->global_settings->db_create_password() = $this->global_settings->db_password();
}
$function = "create_database_" . $this->global_settings->db_type();
$this->$function();
//sqlite is natively supported under all known OS'es //sqlite is natively supported under all known OS'es
if($this->db_type != 'sqlite'){ if($this->global_settings->db_type() != 'sqlite'){
if(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN'){ if(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN'){
//non sqlite database support only uses ODBC under windows //non sqlite database support only uses ODBC under windows
$this->create_odbc_database_connection(); $this->create_odbc_database_connection();
}elseif($this->db_type != 'pgsql'){ }elseif($this->global_settings->db_type() != 'pgsql'){
//switch supports postgresql natively //switch supports postgresql natively
$this->create_odbc_database_connection(); $this->create_odbc_database_connection();
} }
@@ -236,7 +221,7 @@ include "root.php";
protected function create_database_sqlite() { protected function create_database_sqlite() {
//sqlite database will be created when the config.php is loaded and only if the database file does not exist //sqlite database will be created when the config.php is loaded and only if the database file does not exist
try { try {
$this->dbh = new PDO('sqlite:'.$this->db_path.'/'.$this->db_name); //sqlite 3 $this->dbh = new PDO('sqlite:'.$this->global_settings->db_path().'/'.$this->global_settings->db_name()); //sqlite 3
//$this->dbh = new PDO('sqlite::memory:'); //sqlite 3 //$this->dbh = new PDO('sqlite::memory:'); //sqlite 3
} }
catch (PDOException $error) { catch (PDOException $error) {
@@ -258,7 +243,7 @@ include "root.php";
require_once "resources/classes/schema.php"; require_once "resources/classes/schema.php";
$schema = new schema; $schema = new schema;
$schema->db = $this->dbh; $schema->db = $this->dbh;
$schema->db_type = $this->db_type; $schema->db_type = $this->global_settings->db_type();
$schema->sql(); $schema->sql();
$schema->exec(); $schema->exec();
@@ -292,34 +277,34 @@ include "root.php";
$this->dbh->commit(); $this->dbh->commit();
//set the file permissions //set the file permissions
chmod($this->db_path.'/'.$this->db_name, 0777); chmod($this->global_settings->db_path().'/'.$this->global_settings->db_name(), 0777);
} }
protected function create_database_pgsql() { protected function create_database_pgsql() {
if ($this->db_create) { if ($this->global_settings->db_create()) {
//Attempt to create new PG role and database //Attempt to create new PG role and database
$this->write_progress("\tCreating database"); $this->write_progress("\tCreating database");
try { try {
if (strlen($this->db_port) == 0) { $this->db_port = "5432"; } if (strlen($this->global_settings->db_port()) == 0) { $this->global_settings->db_port() = "5432"; }
if (strlen($this->db_host) > 0) { if (strlen($this->global_settings->db_host()) > 0) {
$this->dbh = new PDO("pgsql:host={$this->db_host} port={$this->db_port} user={$this->db_create_username} password={$this->db_create_password} dbname=template1"); $this->dbh = new PDO("pgsql:host={$this->global_settings->db_host()} port={$this->global_settings->db_port()} user={$this->global_settings->db_create_username()} password={$this->global_settings->db_create_password()} dbname=template1");
} else { } else {
$this->dbh = new PDO("pgsql:host=localhost port={$this->db_port} user={$this->db_create_username} password={$this->db_create_password} dbname=template1"); $this->dbh = new PDO("pgsql:host=localhost port={$this->global_settings->db_port()} user={$this->global_settings->db_create_username()} password={$this->global_settings->db_create_password()} dbname=template1");
} }
} catch (PDOException $error) { } catch (PDOException $error) {
throw new Exception("error connecting to database in order to create: " . $error->getMessage()); throw new Exception("error connecting to database in order to create: " . $error->getMessage());
} }
//create the database, user, grant perms //create the database, user, grant perms
if($this->dbh->exec("CREATE DATABASE {$this->db_name}") === false) { if($this->dbh->exec("CREATE DATABASE {$this->global_settings->db_name()}") === false) {
throw new Exception("Failed to create database {$this->db_name}: " . join(":", $this->dbh->errorInfo())); throw new Exception("Failed to create database {$this->global_settings->db_name()}: " . join(":", $this->dbh->errorInfo()));
} }
if($this->db_username != $this->db_create_username){ if($this->global_settings->db_username() != $this->global_settings->db_create_username()){
if($this->dbh->exec("CREATE USER {$this->db_username} WITH PASSWORD '{$this->db_password}'") === false){ if($this->dbh->exec("CREATE USER {$this->global_settings->db_username()} WITH PASSWORD '{$this->global_settings->db_password()}'") === false){
throw new Exception("Failed to create user {$this->db_name}: " . join(":", $this->dbh->errorInfo())); throw new Exception("Failed to create user {$this->global_settings->db_name()}: " . join(":", $this->dbh->errorInfo()));
} }
if($this->dbh->exec("GRANT ALL ON {$this->db_name} TO {$this->db_username}") === false){ if($this->dbh->exec("GRANT ALL ON {$this->global_settings->db_name()} TO {$this->global_settings->db_username()}") === false){
throw new Exception("Failed to create user {$this->db_name}: " . join(":", $this->dbh->errorInfo())); throw new Exception("Failed to create user {$this->global_settings->db_name()}: " . join(":", $this->dbh->errorInfo()));
} }
} }
@@ -328,13 +313,13 @@ include "root.php";
} }
$this->write_progress("\tInstalling data to database"); $this->write_progress("\tInstalling data to database");
//open database connection with $this->db_name //open database connection with $this->global_settings->db_name()
try { try {
if (strlen($this->db_port) == 0) { $this->db_port = "5432"; } if (strlen($this->global_settings->db_port()) == 0) { $this->global_settings->db_port() = "5432"; }
if (strlen($this->db_host) > 0) { if (strlen($this->global_settings->db_host()) > 0) {
$this->dbh = new PDO("pgsql:host={$this->db_host} port={$this->db_port} dbname={$this->db_name} user={$this->db_username} password={$this->db_password}"); $this->dbh = new PDO("pgsql:host={$this->global_settings->db_host()} port={$this->global_settings->db_port()} dbname={$this->global_settings->db_name()} user={$this->global_settings->db_username()} password={$this->global_settings->db_password()}");
} else { } else {
$this->dbh = new PDO("pgsql:host=localhost port={$this->db_port} user={$this->db_username} password={$this->db_password} dbname={$this->db_name}"); $this->dbh = new PDO("pgsql:host=localhost port={$this->global_settings->db_port()} user={$this->global_settings->db_username()} password={$this->global_settings->db_password()} dbname={$this->global_settings->db_name()}");
} }
} }
catch (PDOException $error) { catch (PDOException $error) {
@@ -346,7 +331,7 @@ include "root.php";
require_once "resources/classes/schema.php"; require_once "resources/classes/schema.php";
$schema = new schema; $schema = new schema;
$schema->db = $this->dbh; $schema->db = $this->dbh;
$schema->db_type = $this->db_type; $schema->db_type = $this->global_settings->db_type();
$schema->sql(); $schema->sql();
$schema->exec(); $schema->exec();
@@ -382,23 +367,23 @@ include "root.php";
protected function create_database_mysql() { protected function create_database_mysql() {
//database connection //database connection
$connect_string; $connect_string;
if (strlen($this->db_host) == 0 && strlen($this->db_port) == 0) { if (strlen($this->global_settings->db_host()) == 0 && strlen($this->global_settings->db_port()) == 0) {
//if both host and port are empty use the unix socket //if both host and port are empty use the unix socket
$connect_string = "mysql:host=$this->db_host;unix_socket=/var/run/mysqld/mysqld.sock;"; $connect_string = "mysql:host=$this->global_settings->db_host();unix_socket=/var/run/mysqld/mysqld.sock;";
} }
elseif (strlen($this->db_port) == 0) { elseif (strlen($this->global_settings->db_port()) == 0) {
//leave out port if it is empty //leave out port if it is empty
$connect_string = "mysql:host=$this->db_host;"; $connect_string = "mysql:host=$this->global_settings->db_host();";
} }
else { else {
$connect_string = "mysql:host=$this->db_host;port=$this->db_port;"; $connect_string = "mysql:host=$this->global_settings->db_host();port=$this->global_settings->db_port();";
} }
//create the table, user and set the permissions only if the db_create_username was provided //create the table, user and set the permissions only if the db_create_username was provided
if ($this->db_create) { if ($this->global_settings->db_create()) {
$this->write_progress("\tCreating database"); $this->write_progress("\tCreating database");
try { try {
$this->dbh = new PDO($connect_string, $this->db_create_username, db_create_password, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')); $this->dbh = new PDO($connect_string, $this->global_settings->db_create_username(), db_create_password, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
$this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, true); $this->dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
} }
@@ -415,7 +400,7 @@ include "root.php";
//create user and set the permissions //create user and set the permissions
try { try {
$tmp_sql = "CREATE USER '".$this->db_username."'@'%' IDENTIFIED BY '".$this->db_password."'; "; $tmp_sql = "CREATE USER '".$this->global_settings->db_username()."'@'%' IDENTIFIED BY '".$this->global_settings->db_password()."'; ";
$this->dbh->query($tmp_sql); $this->dbh->query($tmp_sql);
} }
catch (PDOException $error) { catch (PDOException $error) {
@@ -424,20 +409,20 @@ include "root.php";
//set account to unlimited use //set account to unlimited use
try { try {
if ($this->db_host == "localhost" || $this->db_host == "127.0.0.1") { if ($this->global_settings->db_host() == "localhost" || $this->global_settings->db_host() == "127.0.0.1") {
$tmp_sql = "GRANT USAGE ON * . * TO '".$this->db_username."'@'localhost' "; $tmp_sql = "GRANT USAGE ON * . * TO '".$this->global_settings->db_username()."'@'localhost' ";
$tmp_sql .= "IDENTIFIED BY '".$this->db_password."' "; $tmp_sql .= "IDENTIFIED BY '".$this->global_settings->db_password()."' ";
$tmp_sql .= "WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0; "; $tmp_sql .= "WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0; ";
$this->dbh->query($tmp_sql); $this->dbh->query($tmp_sql);
$tmp_sql = "GRANT USAGE ON * . * TO '".$this->db_username."'@'127.0.0.1' "; $tmp_sql = "GRANT USAGE ON * . * TO '".$this->global_settings->db_username()."'@'127.0.0.1' ";
$tmp_sql .= "IDENTIFIED BY '".$this->db_password."' "; $tmp_sql .= "IDENTIFIED BY '".$this->global_settings->db_password()."' ";
$tmp_sql .= "WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0; "; $tmp_sql .= "WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0; ";
$this->dbh->query($tmp_sql); $this->dbh->query($tmp_sql);
} }
else { else {
$tmp_sql = "GRANT USAGE ON * . * TO '".$this->db_username."'@'".$this->db_host."' "; $tmp_sql = "GRANT USAGE ON * . * TO '".$this->global_settings->db_username()."'@'".$this->global_settings->db_host()."' ";
$tmp_sql .= "IDENTIFIED BY '".$this->db_password."' "; $tmp_sql .= "IDENTIFIED BY '".$this->global_settings->db_password()."' ";
$tmp_sql .= "WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0; "; $tmp_sql .= "WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0; ";
$this->dbh->query($tmp_sql); $this->dbh->query($tmp_sql);
} }
@@ -448,7 +433,7 @@ include "root.php";
//create the database and set the create user with permissions //create the database and set the create user with permissions
try { try {
$tmp_sql = "CREATE DATABASE IF NOT EXISTS ".$this->db_name."; "; $tmp_sql = "CREATE DATABASE IF NOT EXISTS ".$this->global_settings->db_name()."; ";
$this->dbh->query($tmp_sql); $this->dbh->query($tmp_sql);
} }
catch (PDOException $error) { catch (PDOException $error) {
@@ -457,7 +442,7 @@ include "root.php";
//set user permissions //set user permissions
try { try {
$this->dbh->query("GRANT ALL PRIVILEGES ON ".$this->db_name.".* TO '".$this->db_username."'@'%'; "); $this->dbh->query("GRANT ALL PRIVILEGES ON ".$this->global_settings->db_name().".* TO '".$this->global_settings->db_username()."'@'%'; ");
} }
catch (PDOException $error) { catch (PDOException $error) {
throw new Exception("error in database: " . $error->getMessage() . "\n" . $sql ); throw new Exception("error in database: " . $error->getMessage() . "\n" . $sql );
@@ -472,12 +457,12 @@ include "root.php";
throw new Exception("error in database: " . $error->getMessage() . "\n" . $sql ); throw new Exception("error in database: " . $error->getMessage() . "\n" . $sql );
} }
$this->dbh = null; $this->dbh = null;
} //if (strlen($this->db_create_username) > 0) } //if (strlen($this->global_settings->db_create_username()) > 0)
$this->write_progress("\tInstalling data to database"); $this->write_progress("\tInstalling data to database");
//select the database //select the database
try { try {
$this->dbh = new PDO($connect_string, $this->db_username, db_password, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')); $this->dbh = new PDO($connect_string, $this->global_settings->db_username(), db_password, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
$this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, true); $this->dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
} }
@@ -485,7 +470,7 @@ include "root.php";
throw new Exception("error connecting to database: " . $error->getMessage() . "\n" . $sql ); throw new Exception("error connecting to database: " . $error->getMessage() . "\n" . $sql );
} }
try { try {
$this->dbh->query("USE ".$this->db_name.";"); $this->dbh->query("USE ".$this->global_settings->db_name().";");
} }
catch (PDOException $error) { catch (PDOException $error) {
throw new Exception("error in database: " . $error->getMessage() . "\n" . $sql ); throw new Exception("error in database: " . $error->getMessage() . "\n" . $sql );
@@ -495,7 +480,7 @@ include "root.php";
require_once "resources/classes/schema.php"; require_once "resources/classes/schema.php";
$schema = new schema; $schema = new schema;
$schema->db = $this->dbh; $schema->db = $this->dbh;
$schema->db_type = $this->db_type; $schema->db_type = $this->global_settings->db_type();
$schema->sql(); $schema->sql();
$schema->exec(); $schema->exec();
@@ -534,9 +519,9 @@ include "root.php";
} }
protected function create_domain() { protected function create_domain() {
$this->write_progress("\tChecking if domain exists '" . $this->domain_name . "'"); $this->write_progress("\tChecking if domain exists '" . $this->global_settings->domain_name . "'");
$sql = "select * from v_domains "; $sql = "select * from v_domains ";
$sql .= "where domain_name = '".$this->domain_name."' "; $sql .= "where domain_name = '".$this->global_settings->domain_name."' ";
$sql .= "limit 1"; $sql .= "limit 1";
$this->write_debug($sql); $this->write_debug($sql);
$prep_statement = $this->dbh->prepare(check_sql($sql)); $prep_statement = $this->dbh->prepare(check_sql($sql));
@@ -560,7 +545,7 @@ include "root.php";
$sql .= "values "; $sql .= "values ";
$sql .= "("; $sql .= "(";
$sql .= "'".$this->_domain_uuid."', "; $sql .= "'".$this->_domain_uuid."', ";
$sql .= "'".$this->domain_name."', "; $sql .= "'".$this->global_settings->domain_name."', ";
$sql .= "'' "; $sql .= "'' ";
$sql .= ");"; $sql .= ");";
@@ -608,73 +593,73 @@ include "root.php";
$tmp[$x]['enabled'] = 'true'; $tmp[$x]['enabled'] = 'true';
$x++; $x++;
$tmp[$x]['name'] = 'dir'; $tmp[$x]['name'] = 'dir';
$tmp[$x]['value'] = $this->detect_switch->base_dir(); $tmp[$x]['value'] = $this->global_settings->base_dir();
$tmp[$x]['category'] = 'switch'; $tmp[$x]['category'] = 'switch';
$tmp[$x]['subcategory'] = 'base'; $tmp[$x]['subcategory'] = 'base';
$tmp[$x]['enabled'] = 'true'; $tmp[$x]['enabled'] = 'true';
$x++; $x++;
$tmp[$x]['name'] = 'dir'; $tmp[$x]['name'] = 'dir';
$tmp[$x]['value'] = $this->detect_switch->conf_dir(); $tmp[$x]['value'] = $this->global_settings->conf_dir();
$tmp[$x]['category'] = 'switch'; $tmp[$x]['category'] = 'switch';
$tmp[$x]['subcategory'] = 'conf'; $tmp[$x]['subcategory'] = 'conf';
$tmp[$x]['enabled'] = 'true'; $tmp[$x]['enabled'] = 'true';
$x++; $x++;
$tmp[$x]['name'] = 'dir'; $tmp[$x]['name'] = 'dir';
$tmp[$x]['value'] = $this->detect_switch->db_dir(); $tmp[$x]['value'] = $this->global_settings->db_dir()();
$tmp[$x]['category'] = 'switch'; $tmp[$x]['category'] = 'switch';
$tmp[$x]['subcategory'] = 'db'; $tmp[$x]['subcategory'] = 'db';
$tmp[$x]['enabled'] = 'true'; $tmp[$x]['enabled'] = 'true';
$x++; $x++;
$tmp[$x]['name'] = 'dir'; $tmp[$x]['name'] = 'dir';
$tmp[$x]['value'] = $this->detect_switch->log_dir(); $tmp[$x]['value'] = $this->global_settings->log_dir();
$tmp[$x]['category'] = 'switch'; $tmp[$x]['category'] = 'switch';
$tmp[$x]['subcategory'] = 'log'; $tmp[$x]['subcategory'] = 'log';
$tmp[$x]['enabled'] = 'true'; $tmp[$x]['enabled'] = 'true';
$x++; $x++;
$tmp[$x]['name'] = 'dir'; $tmp[$x]['name'] = 'dir';
$tmp[$x]['value'] = $this->detect_switch->mod_dir(); $tmp[$x]['value'] = $this->global_settings->mod_dir();
$tmp[$x]['category'] = 'switch'; $tmp[$x]['category'] = 'switch';
$tmp[$x]['subcategory'] = 'mod'; $tmp[$x]['subcategory'] = 'mod';
$tmp[$x]['enabled'] = 'true'; $tmp[$x]['enabled'] = 'true';
$x++; $x++;
$tmp[$x]['name'] = 'dir'; $tmp[$x]['name'] = 'dir';
$tmp[$x]['value'] = $this->detect_switch->script_dir(); $tmp[$x]['value'] = $this->global_settings->script_dir();
$tmp[$x]['category'] = 'switch'; $tmp[$x]['category'] = 'switch';
$tmp[$x]['subcategory'] = 'scripts'; $tmp[$x]['subcategory'] = 'scripts';
$tmp[$x]['enabled'] = 'true'; $tmp[$x]['enabled'] = 'true';
$x++; $x++;
$tmp[$x]['name'] = 'dir'; $tmp[$x]['name'] = 'dir';
$tmp[$x]['value'] = $this->detect_switch->grammar_dir(); $tmp[$x]['value'] = $this->global_settings->grammar_dir();
$tmp[$x]['category'] = 'switch'; $tmp[$x]['category'] = 'switch';
$tmp[$x]['subcategory'] = 'grammar'; $tmp[$x]['subcategory'] = 'grammar';
$tmp[$x]['enabled'] = 'true'; $tmp[$x]['enabled'] = 'true';
$x++; $x++;
$tmp[$x]['name'] = 'dir'; $tmp[$x]['name'] = 'dir';
$tmp[$x]['value'] = $this->detect_switch->storage_dir(); $tmp[$x]['value'] = $this->global_settings->storage_dir();
$tmp[$x]['category'] = 'switch'; $tmp[$x]['category'] = 'switch';
$tmp[$x]['subcategory'] = 'storage'; $tmp[$x]['subcategory'] = 'storage';
$tmp[$x]['enabled'] = 'true'; $tmp[$x]['enabled'] = 'true';
$x++; $x++;
$tmp[$x]['name'] = 'dir'; $tmp[$x]['name'] = 'dir';
$tmp[$x]['value'] = $this->detect_switch->voicemail_vdir(); $tmp[$x]['value'] = $this->global_settings->voicemail_vdir();
$tmp[$x]['category'] = 'switch'; $tmp[$x]['category'] = 'switch';
$tmp[$x]['subcategory'] = 'voicemail'; $tmp[$x]['subcategory'] = 'voicemail';
$tmp[$x]['enabled'] = 'true'; $tmp[$x]['enabled'] = 'true';
$x++; $x++;
$tmp[$x]['name'] = 'dir'; $tmp[$x]['name'] = 'dir';
$tmp[$x]['value'] = $this->detect_switch->recordings_dir(); $tmp[$x]['value'] = $this->global_settings->recordings_dir();
$tmp[$x]['category'] = 'switch'; $tmp[$x]['category'] = 'switch';
$tmp[$x]['subcategory'] = 'recordings'; $tmp[$x]['subcategory'] = 'recordings';
$tmp[$x]['enabled'] = 'true'; $tmp[$x]['enabled'] = 'true';
$x++; $x++;
$tmp[$x]['name'] = 'dir'; $tmp[$x]['name'] = 'dir';
$tmp[$x]['value'] = $this->detect_switch->sounds_dir(); $tmp[$x]['value'] = $this->global_settings->sounds_dir();
$tmp[$x]['category'] = 'switch'; $tmp[$x]['category'] = 'switch';
$tmp[$x]['subcategory'] = 'sounds'; $tmp[$x]['subcategory'] = 'sounds';
$tmp[$x]['enabled'] = 'true'; $tmp[$x]['enabled'] = 'true';
$x++; $x++;
$tmp[$x]['name'] = 'dir'; $tmp[$x]['name'] = 'dir';
$tmp[$x]['value'] = $this->detect_switch->phrases_vdir(); $tmp[$x]['value'] = $this->global_settings->phrases_vdir();
$tmp[$x]['category'] = 'switch'; $tmp[$x]['category'] = 'switch';
$tmp[$x]['subcategory'] = 'phrases'; $tmp[$x]['subcategory'] = 'phrases';
$tmp[$x]['enabled'] = 'true'; $tmp[$x]['enabled'] = 'true';
@@ -686,19 +671,19 @@ include "root.php";
$tmp[$x]['enabled'] = 'false'; $tmp[$x]['enabled'] = 'false';
$x++; $x++;
$tmp[$x]['name'] = 'dir'; $tmp[$x]['name'] = 'dir';
$tmp[$x]['value'] = $this->detect_switch->extensions_vdir(); $tmp[$x]['value'] = $this->global_settings->extensions_vdir();
$tmp[$x]['category'] = 'switch'; $tmp[$x]['category'] = 'switch';
$tmp[$x]['subcategory'] = 'extensions'; $tmp[$x]['subcategory'] = 'extensions';
$tmp[$x]['enabled'] = 'false'; $tmp[$x]['enabled'] = 'false';
$x++; $x++;
$tmp[$x]['name'] = 'dir'; $tmp[$x]['name'] = 'dir';
$tmp[$x]['value'] = $this->detect_switch->sip_profiles_vdir(); $tmp[$x]['value'] = $this->global_settings->sip_profiles_vdir();
$tmp[$x]['category'] = 'switch'; $tmp[$x]['category'] = 'switch';
$tmp[$x]['subcategory'] = 'sip_profiles'; $tmp[$x]['subcategory'] = 'sip_profiles';
$tmp[$x]['enabled'] = 'false'; $tmp[$x]['enabled'] = 'false';
$x++; $x++;
$tmp[$x]['name'] = 'dir'; $tmp[$x]['name'] = 'dir';
$tmp[$x]['value'] = $this->detect_switch->dialplan_vdir(); $tmp[$x]['value'] = $this->global_settings->dialplan_vdir();
$tmp[$x]['category'] = 'switch'; $tmp[$x]['category'] = 'switch';
$tmp[$x]['subcategory'] = 'dialplan'; $tmp[$x]['subcategory'] = 'dialplan';
$tmp[$x]['enabled'] = 'false'; $tmp[$x]['enabled'] = 'false';
@@ -706,7 +691,7 @@ include "root.php";
//server settings //server settings
$tmp[$x]['name'] = 'dir'; $tmp[$x]['name'] = 'dir';
$tmp[$x]['value'] = $this->detect_switch->temp_dir(); $tmp[$x]['value'] = $this->global_settings->temp_dir();
$tmp[$x]['category'] = 'server'; $tmp[$x]['category'] = 'server';
$tmp[$x]['subcategory'] = 'temp'; $tmp[$x]['subcategory'] = 'temp';
$tmp[$x]['enabled'] = 'true'; $tmp[$x]['enabled'] = 'true';
@@ -719,7 +704,7 @@ include "root.php";
$tmp[$x]['enabled'] = 'true'; $tmp[$x]['enabled'] = 'true';
$x++; $x++;
$tmp[$x]['name'] = 'dir'; $tmp[$x]['name'] = 'dir';
$tmp[$x]['value'] = $this->detect_switch->backup_vdir(); $tmp[$x]['value'] = $this->global_settings->backup_vdir();
$tmp[$x]['category'] = 'server'; $tmp[$x]['category'] = 'server';
$tmp[$x]['subcategory'] = 'backup'; $tmp[$x]['subcategory'] = 'backup';
$tmp[$x]['enabled'] = 'true'; $tmp[$x]['enabled'] = 'true';
@@ -835,7 +820,7 @@ include "root.php";
} }
protected function create_superuser() { protected function create_superuser() {
$this->write_progress("\tChecking if superuser exists '" . $this->domain_name . "'"); $this->write_progress("\tChecking if superuser exists '" . $this->global_settings->domain_name . "'");
$sql = "select * from v_users "; $sql = "select * from v_users ";
$sql .= "where domain_uuid = '".$this->_domain_uuid."' "; $sql .= "where domain_uuid = '".$this->_domain_uuid."' ";
$sql .= "and username = '".$this->admin_username."' "; $sql .= "and username = '".$this->admin_username."' ";
@@ -1009,16 +994,16 @@ include "root.php";
$_SESSION["domain_uuid"] = $this->_domain_uuid; $_SESSION["domain_uuid"] = $this->_domain_uuid;
require $this->config_php; require $this->config_php;
require "resources/require.php"; require "resources/require.php";
$_SESSION['event_socket_ip_address'] = $this->detect_switch->event_host; $_SESSION['event_socket_ip_address'] = $this->global_settings->event_host;
$_SESSION['event_socket_port'] = $this->detect_switch->event_port; $_SESSION['event_socket_port'] = $this->global_settings->event_port;
$_SESSION['event_socket_password'] = $this->detect_switch->event_password; $_SESSION['event_socket_password'] = $this->global_settings->event_password;
//get the groups assigned to the user and then set the groups in $_SESSION["groups"] //get the groups assigned to the user and then set the groups in $_SESSION["groups"]
$sql = "SELECT * FROM v_group_users "; $sql = "SELECT * FROM v_group_users ";
$sql .= "where domain_uuid=:domain_uuid "; $sql .= "where domain_uuid=:domain_uuid ";
$sql .= "and user_uuid=:user_uuid "; $sql .= "and user_uuid=:user_uuid ";
$prep_statement = $this->dbh->prepare(check_sql($sql)); $prep_statement = $this->dbh->prepare(check_sql($sql));
$prep_statement->bindParam(':domain_uuid', $this->domain_uuid); $prep_statement->bindParam(':domain_uuid', $this->global_settings->domain_uuid);
$prep_statement->bindParam(':user_uuid', $this->admin_uuid); $prep_statement->bindParam(':user_uuid', $this->admin_uuid);
$prep_statement->execute(); $prep_statement->execute();
$result = $prep_statement->fetchAll(PDO::FETCH_NAMED); $result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
@@ -1031,10 +1016,10 @@ include "root.php";
foreach($_SESSION["groups"] as $field) { foreach($_SESSION["groups"] as $field) {
if (strlen($field['group_name']) > 0) { if (strlen($field['group_name']) > 0) {
if ($x == 0) { if ($x == 0) {
$sql .= "where (domain_uuid = '".$this->domain_uuid."' and group_name = '".$field['group_name']."') "; $sql .= "where (domain_uuid = '".$this->global_settings->domain_uuid."' and group_name = '".$field['group_name']."') ";
} }
else { else {
$sql .= "or (domain_uuid = '".$this->domain_uuid."' and group_name = '".$field['group_name']."') "; $sql .= "or (domain_uuid = '".$this->global_settings->domain_uuid."' and group_name = '".$field['group_name']."') ";
} }
$x++; $x++;
} }
@@ -1045,13 +1030,13 @@ include "root.php";
unset($sql, $prep_statement_sub); unset($sql, $prep_statement_sub);
//include the config.php //include the config.php
$db_type = $this->db_type; $db_type = $this->global_settings->db_type();
$db_path = $this->db_path; $db_path = $this->global_settings->db_path();
$db_host = $this->db_host; $db_host = $this->global_settings->db_host();
$db_port = $this->db_port; $db_port = $this->global_settings->db_port();
$db_name = $this->db_name; $db_name = $this->global_settings->db_name();
$db_username = $this->db_username; $db_username = $this->global_settings->db_username();
$db_password = $this->db_password; $db_password = $this->global_settings->db_password();
//add the database structure //add the database structure
require_once "resources/classes/schema.php"; require_once "resources/classes/schema.php";
@@ -28,34 +28,25 @@ include "root.php";
//define the install class //define the install class
class install_switch { class install_switch {
protected $domain_uuid; protected $global_settings;
protected $domain_name;
protected $detect_switch;
protected $config_lua; protected $config_lua;
protected $dbh;
public $debug = false; public $debug = false;
function __construct($domain_name, $domain_uuid, $detect_switch) { function __construct($global_settings) {
if($detect_switch == null){ if(!is_a($global_settings, 'global_settings')){
if(strlen($_SESSION['event_socket_ip_address']) == 0 or strlen($_SESSION['event_socket_port']) == 0 or strlen($_SESSION['event_socket_password']) == 0 ){ throw new Exception('The parameter $global_settings must be a global_settings object (or a subclass of)');
throw new Exception('The parameter $detect_switch was empty and i could not find the event socket details from the session');
}
$detect_switch = new detect_switch($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']);
$domain_name = $_SESSION['domain_name'];
$domain_uuid = $_SESSION['domain_uuid'];
}elseif(!is_a($detect_switch, 'detect_switch')){
throw new Exception('The parameter $detect_switch must be a detect_switch object (or a subclass of)');
} }
$this->domain_uuid = $domain_uuid; $this->global_settings = $global_settings;
$this->domain = $domain_name;
$this->detect_switch = $detect_switch;
if (is_dir("/etc/fusionpbx")){ if (is_dir("/etc/fusionpbx")){
$this->config_lua = "/etc/fusionpbx/config.lua"; $this->config_lua = "/etc/fusionpbx/config.lua";
} elseif (is_dir("/usr/local/etc/fusionpbx")){ }elseif (is_dir("/usr/local/etc/fusionpbx")){
$this->config_lua = "/usr/local/etc/fusionpbx/config.lua"; $this->config_lua = "/usr/local/etc/fusionpbx/config.lua";
} }elseif(strlen($this->global_settings->script_dir) > 0) {
else { $this->config_lua = $this->global_settings->script_dir."/resources/config.lua";
$this->config_lua = $this->detect_switch->script_dir."/resources/config.lua"; }else{
throw new Exception("Could not work out where to put the config.lua");
} }
$this->config_lua = normalize_path_to_os($this->config_lua); $this->config_lua = normalize_path_to_os($this->config_lua);
} }
@@ -91,6 +82,7 @@ include "root.php";
exec("xcopy /E /Y \"$src\" \"$dst\""); exec("xcopy /E /Y \"$src\" \"$dst\"");
} }
else { else {
throw new Exception('Could not perform copy operation on this platform, implementation missing');
$dir = opendir($src); $dir = opendir($src);
if (!$dir) { if (!$dir) {
if (!mkdir($src, 0755, true)) { if (!mkdir($src, 0755, true)) {
@@ -202,14 +194,14 @@ include "root.php";
function copy_conf() { function copy_conf() {
$this->write_progress("\tCopying Config"); $this->write_progress("\tCopying Config");
//make a backup of the config //make a backup of the config
if (file_exists($this->detect_switch->conf_dir())) { if (file_exists($this->global_settings->conf_dir())) {
$this->backup_dir($this->detect_switch->conf_dir(), 'fusionpbx_switch_config'); $this->backup_dir($this->global_settings->conf_dir(), 'fusionpbx_switch_config');
$this->recursive_delete($this->detect_switch->conf_dir()); $this->recursive_delete($this->global_settings->conf_dir());
} }
//make sure the conf directory exists //make sure the conf directory exists
if (!is_dir($this->detect_switch->conf_dir())) { if (!is_dir($this->global_settings->conf_dir())) {
if (!mkdir($this->detect_switch->conf_dir(), 0774, true)) { if (!mkdir($this->global_settings->conf_dir(), 0774, true)) {
throw new Exception("Failed to create the switch conf directory '".$this->detect_switch->conf_dir()."'. "); throw new Exception("Failed to create the switch conf directory '".$this->global_settings->conf_dir()."'. ");
} }
} }
//copy resources/templates/conf to the freeswitch conf dir //copy resources/templates/conf to the freeswitch conf dir
@@ -219,14 +211,14 @@ include "root.php";
else { else {
$src_dir = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH."/resources/templates/conf"; $src_dir = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH."/resources/templates/conf";
} }
$dst_dir = $this->detect_switch->conf_dir(); $dst_dir = $this->global_settings->conf_dir();
if (is_readable($dst_dir)) { if (is_readable($dst_dir)) {
$this->recursive_copy($src_dir, $dst_dir); $this->recursive_copy($src_dir, $dst_dir);
unset($src_dir, $dst_dir); unset($src_dir, $dst_dir);
} }
$fax_dir = join( DIRECTORY_SEPARATOR, array($this->detect_switch->storage_dir(), 'fax')); $fax_dir = join( DIRECTORY_SEPARATOR, array($this->global_settings->storage_dir(), 'fax'));
if (!is_readable($fax_dir)) { mkdir($fax_dir,0777,true); } if (!is_readable($fax_dir)) { mkdir($fax_dir,0777,true); }
$voicemail_dir = join( DIRECTORY_SEPARATOR, array($this->detect_switch->storage_dir(), 'voicemail')); $voicemail_dir = join( DIRECTORY_SEPARATOR, array($this->global_settings->storage_dir(), 'voicemail'));
if (!is_readable($voicemail_dir)) { mkdir($voicemail_dir,0777,true); } if (!is_readable($voicemail_dir)) { mkdir($voicemail_dir,0777,true); }
//create the dialplan/default.xml for single tenant or dialplan/domain.xml //create the dialplan/default.xml for single tenant or dialplan/domain.xml
@@ -234,7 +226,7 @@ include "root.php";
$dialplan = new dialplan; $dialplan = new dialplan;
$dialplan->domain_uuid = $this->domain_uuid; $dialplan->domain_uuid = $this->domain_uuid;
$dialplan->domain = $this->domain_name; $dialplan->domain = $this->domain_name;
$dialplan->switch_dialplan_dir = join( DIRECTORY_SEPARATOR, array($this->detect_switch->conf_dir(), "/dialplan")); $dialplan->switch_dialplan_dir = join( DIRECTORY_SEPARATOR, array($this->global_settings->conf_dir(), "/dialplan"));
$dialplan->restore_advanced_xml(); $dialplan->restore_advanced_xml();
if($this->_debug){ if($this->_debug){
print_r($dialplan->result, $message); print_r($dialplan->result, $message);
@@ -248,7 +240,7 @@ include "root.php";
} }
//write the switch.conf.xml file //write the switch.conf.xml file
if (file_exists($this->detect_switch->conf_dir())) { if (file_exists($this->global_settings->conf_dir())) {
switch_conf_xml(); switch_conf_xml();
} }
@@ -256,7 +248,10 @@ include "root.php";
function copy_scripts() { function copy_scripts() {
$this->write_progress("\tCopying Scripts"); $this->write_progress("\tCopying Scripts");
$script_dir = $this->detect_switch->script_dir(); $script_dir = $this->global_settings->script_dir();
if(strlen($script_dir) == 0) {
throw new Exception("Cannot copy scripts the 'script_dir' is empty");
}
if (file_exists($script_dir)) { if (file_exists($script_dir)) {
if (file_exists('/usr/share/examples/fusionpbx/resources/install/scripts')){ if (file_exists('/usr/share/examples/fusionpbx/resources/install/scripts')){
$src_dir = '/usr/share/examples/fusionpbx/resources/install/scripts'; $src_dir = '/usr/share/examples/fusionpbx/resources/install/scripts';
@@ -312,30 +307,30 @@ include "root.php";
//config.lua //config.lua
$fout = fopen($this->config_lua,"w"); $fout = fopen($this->config_lua,"w");
if(!$fout){ if(!$fout){
throw new Exception("Failed to open '{$this->config_lua}' for writing"); throw new Exception("Failed to open '".$this->config_lua."' for writing");
} }
$tmp = "\n"; $tmp = "\n";
$tmp .= "--set the variables\n"; $tmp .= "--set the variables\n";
if (strlen($_SESSION['switch']['sounds']['dir']) > 0) { if (strlen($this->global_settings->switch_sounds_dir()) > 0) {
$tmp .= normalize_path_to_os(" sounds_dir = [[".$_SESSION['switch']['sounds']['dir']."]];\n"); $tmp .= normalize_path_to_os(" sounds_dir = [[".$this->global_settings->switch_sounds_dir()."]];\n");
} }
if (strlen($_SESSION['switch']['phrases']['dir']) > 0) { if (strlen($this->global_settings->switch_phrases_vdir()) > 0) {
$tmp .= normalize_path_to_os(" phrases_dir = [[".$_SESSION['switch']['phrases']['dir']."]];\n"); $tmp .= normalize_path_to_os(" phrases_dir = [[".$this->global_settings->switch_phrases_vdir()."]];\n");
} }
if (strlen($_SESSION['switch']['db']['dir']) > 0) { if (strlen($this->global_settings->switch_db_dir()) > 0) {
$tmp .= normalize_path_to_os(" database_dir = [[".$_SESSION['switch']['db']['dir']."]];\n"); $tmp .= normalize_path_to_os(" database_dir = [[".$this->global_settings->switch_db_dir()."]];\n");
} }
if (strlen($_SESSION['switch']['recordings']['dir']) > 0) { if (strlen($this->global_settings->switch_recordings_dir()) > 0) {
$tmp .= normalize_path_to_os(" recordings_dir = [[".$_SESSION['switch']['recordings']['dir']."]];\n"); $tmp .= normalize_path_to_os(" recordings_dir = [[".$this->global_settings->switch_recordings_dir()."]];\n");
} }
if (strlen($_SESSION['switch']['storage']['dir']) > 0) { if (strlen($this->global_settings->switch_storage_dir()) > 0) {
$tmp .= normalize_path_to_os(" storage_dir = [[".$_SESSION['switch']['storage']['dir']."]];\n"); $tmp .= normalize_path_to_os(" storage_dir = [[".$this->global_settings->switch_storage_dir()."]];\n");
} }
if (strlen($_SESSION['switch']['voicemail']['dir']) > 0) { if (strlen($this->global_settings->switch_voicemail_vdir()) > 0) {
$tmp .= normalize_path_to_os(" voicemail_dir = [[".$_SESSION['switch']['voicemail']['dir']."]];\n"); $tmp .= normalize_path_to_os(" voicemail_dir = [[".$this->global_settings->switch_voicemail_vdir()."]];\n");
} }
if (strlen($_SESSION['switch']['scripts']['dir']) > 0) { if (strlen($this->global_settings->switch_scripts_dir()) > 0) {
$tmp .= normalize_path_to_os(" scripts_dir = [[".$_SESSION['switch']['scripts']['dir']."]];\n"); $tmp .= normalize_path_to_os(" scripts_dir = [[".$this->global_settings->switch_scripts_dir()."]];\n");
} }
$tmp .= normalize_path_to_os(" php_dir = [[".PHP_BINDIR."]];\n"); $tmp .= normalize_path_to_os(" php_dir = [[".PHP_BINDIR."]];\n");
if (substr(strtoupper(PHP_OS), 0, 3) == "WIN") { if (substr(strtoupper(PHP_OS), 0, 3) == "WIN") {
@@ -347,27 +342,27 @@ include "root.php";
$tmp .= normalize_path_to_os(" document_root = [[".$_SERVER["DOCUMENT_ROOT"].PROJECT_PATH."]];\n"); $tmp .= normalize_path_to_os(" document_root = [[".$_SERVER["DOCUMENT_ROOT"].PROJECT_PATH."]];\n");
$tmp .= "\n"; $tmp .= "\n";
if ((strlen($db_type) > 0) || (strlen($dsn_name) > 0)) { if ((strlen($this->global_settings->db_type()) > 0) || (strlen($dsn_name) > 0)) {
$tmp .= "--database information\n"; $tmp .= "--database information\n";
$tmp .= " database = {}\n"; $tmp .= " database = {}\n";
$tmp .= " database[\"type\"] = \"".$db_type."\";\n"; $tmp .= " database[\"type\"] = \"".$this->global_settings->db_type()."\";\n";
$tmp .= " database[\"name\"] = \"".$db_name."\";\n"; $tmp .= " database[\"name\"] = \"".$this->global_settings->db_name()."\";\n";
$tmp .= normalize_path_to_os(" database[\"path\"] = [[".$db_path."]];\n"); $tmp .= normalize_path_to_os(" database[\"path\"] = [[".$this->global_settings->db_path()."]];\n");
if (strlen($dsn_name) > 0) { if (strlen($dsn_name) > 0) {
$tmp .= " database[\"system\"] = \"odbc://".$dsn_name.":".$dsn_username.":".$dsn_password."\";\n"; $tmp .= " database[\"system\"] = \"odbc://".$dsn_name.":".$dsn_username.":".$dsn_password."\";\n";
$tmp .= " database[\"switch\"] = \"odbc://freeswitch:".$dsn_username.":".$dsn_password."\";\n"; $tmp .= " database[\"switch\"] = \"odbc://freeswitch:".$dsn_username.":".$dsn_password."\";\n";
} }
elseif ($db_type == "pgsql") { elseif ($this->global_settings->db_type() == "pgsql") {
if ($db_host == "localhost") { $db_host = "127.0.0.1"; } if ($this->global_settings->db_host() == "localhost") { $this->global_settings->db_host() = "127.0.0.1"; }
$tmp .= " database[\"system\"] = \"pgsql://hostaddr=".$db_host." port=".$db_port." dbname=".$db_name." user=".$db_username." password=".$db_password." options='' application_name='".$db_name."'\";\n"; $tmp .= " database[\"system\"] = \"pgsql://hostaddr=".$this->global_settings->db_host()." port=".$this->global_settings->db_port()." dbname=".$this->global_settings->db_name()." user=".$this->global_settings->db_username()." password=".$this->global_settings->db_password()." options='' application_name='".$this->global_settings->db_name()."'\";\n";
$tmp .= " database[\"switch\"] = \"pgsql://hostaddr=".$db_host." port=".$db_port." dbname=freeswitch user=".$db_username." password=".$db_password." options='' application_name='freeswitch'\";\n"; $tmp .= " database[\"switch\"] = \"pgsql://hostaddr=".$this->global_settings->db_host()." port=".$this->global_settings->db_port()." dbname=freeswitch user=".$this->global_settings->db_username()." password=".$this->global_settings->db_password()." options='' application_name='freeswitch'\";\n";
} }
elseif ($db_type == "sqlite") { elseif ($this->global_settings->db_type() == "sqlite") {
$tmp .= " database[\"system\"] = \"sqlite://".$db_path."/".$db_name."\";\n"; $tmp .= " database[\"system\"] = \"sqlite://".$this->global_settings->db_path()."/".$this->global_settings->db_name()."\";\n";
$tmp .= " database[\"switch\"] = \"sqlite://".$_SESSION['switch']['db']['dir']."\";\n"; $tmp .= " database[\"switch\"] = \"sqlite://".$_SESSION['switch']['db']['dir']."\";\n";
} }
elseif ($db_type == "mysql") { elseif ($this->global_settings->db_type() == "mysql") {
$tmp .= " database[\"system\"] = \"\";\n"; $tmp .= " database[\"system\"] = \"\";\n";
$tmp .= " database[\"switch\"] = \"\";\n"; $tmp .= " database[\"switch\"] = \"\";\n";
} }
@@ -393,8 +388,8 @@ include "root.php";
$tmp .= " debug[\"cache\"] = false;\n"; $tmp .= " debug[\"cache\"] = false;\n";
$tmp .= "\n"; $tmp .= "\n";
$tmp .= "--additional info\n"; $tmp .= "--additional info\n";
$tmp .= " domain_count = ".count($_SESSION["domains"]).";\n"; $tmp .= " domain_count = ".$this->global_settings->domain_count().";\n";
$tmp .= normalize_path_to_os(" temp_dir = [[".$_SESSION['server']['temp']['dir']."]];\n"); $tmp .= normalize_path_to_os(" temp_dir = [[".$this->global_settings->switch_temp_dir()."]];\n");
if (isset($_SESSION['domain']['dial_string']['text'])) { if (isset($_SESSION['domain']['dial_string']['text'])) {
$tmp .= " dial_string = \"".$_SESSION['domain']['dial_string']['text']."\";\n"; $tmp .= " dial_string = \"".$_SESSION['domain']['dial_string']['text']."\";\n";
} }