diff --git a/core/install/resources/classes/install_fusionpbx.php b/core/install/resources/classes/install_fusionpbx.php deleted file mode 100644 index f271cac4e1..0000000000 --- a/core/install/resources/classes/install_fusionpbx.php +++ /dev/null @@ -1,873 +0,0 @@ - - Copyright (C) 2010-2016 - All Rights Reserved. - - Contributor(s): - Mark J Crane - Matthew Vale -*/ -include "root.php"; - -//define the install class - class install_fusionpbx { - - protected $global_settings; - protected $config_php; - protected $menu_uuid = 'b4750c3f-2a86-b00d-b7d0-345c14eca286'; - protected $dbh; - - public $debug = false; - public $echo_progress = false; - - public $install_language = 'en-us'; - public $admin_username; - public $admin_password; - public $default_country = 'US'; - public $template_name = 'enhanced'; - - function __construct($global_settings) { - if(is_null($global_settings)){ - require_once "resources/classes/global_settings.php"; - $global_settings = new global_settings(); - }elseif(!is_a($global_settings, 'global_settings')){ - throw new Exception('The parameter $global_settings must be a global_settings object (or a subclass of)'); - } - $this->global_settings = $global_settings; - if (is_dir("/etc/fusionpbx")){ - $this->config_php = "/etc/fusionpbx/config.php"; - } elseif (is_dir("/usr/local/etc/fusionpbx")){ - $this->config_php = "/usr/local/etc/fusionpbx/config.php"; - } - elseif (is_dir($_SERVER["PROJECT_ROOT"]."/resources")) { - $this->config_php = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH."/resources/config.php"; - } - else { - $this->config_php = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH."/resources/config.php"; - } - $this->config_php = normalize_path_to_os($this->config_php); - } - - function write_debug($message) { - if($this->debug){ - echo "$message\n"; - } - } - - function write_progress($message) { - if($this->echo_progress){ - echo "$message\n"; - } - } - - function install_phase_1() { - ini_set('max_execution_time',3600); - $this->write_progress("Install phase 1 started for FusionPBX"); - $this->create_config_php(); - $this->write_progress("\tExecuting config.php"); - require $this->config_php; - global $db; - $this->create_database(); - $db = $this->dbh; - $this->create_domain(); - $this->create_superuser(); - $this->app_defaults(); - $this->write_progress("\tRunning requires"); - require "resources/require.php"; - $this->write_progress("Install phase 1 complete for FusionPBX"); - } - - function install_phase_2() { - ini_set('max_execution_time',3600); - $this->write_progress("Install phase 2 started for FusionPBX"); - //$this->app_defaults(); - $this->write_progress("Install phase 2 complete for FusionPBX"); - } - - protected function create_config_php() { - $this->write_progress("\tCreating " . $this->config_php); - $tmp_config = "global_settings->db_type()."'; //sqlite, mysql, pgsql, others with a manually created PDO connection\n"; - $tmp_config .= "\n"; - 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 .= " \$db_name = '".$this->global_settings->db_name()."'; //host name/ip address + '.db' is the default database filename\n"; - $tmp_config .= " \$db_path = '".$this->global_settings->db_path()."'; //the path is determined by a php variable\n"; - } - $tmp_config .= "\n"; - $tmp_config .= " //mysql: database connection information\n"; - if ($this->global_settings->db_type() == "mysql") { - $db_host = $this->global_settings->db_host(); - if ( $db_host == "localhost") { - //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 - $db_host = "127.0.0.1"; - } - $tmp_config .= " \$db_host = '".$db_host."';\n"; - $tmp_config .= " \$db_port = '".$this->global_settings->db_port()."';\n"; - $tmp_config .= " \$db_name = '".$this->global_settings->db_name()."';\n"; - $tmp_config .= " \$db_username = '".$this->global_settings->db_username()."';\n"; - $tmp_config .= " \$db_password = '".$this->global_settings->db_password()."';\n"; - } - else { - $tmp_config .= " //\$db_host = '';\n"; - $tmp_config .= " //\$db_port = '';\n"; - $tmp_config .= " //\$db_name = '';\n"; - $tmp_config .= " //\$db_username = '';\n"; - $tmp_config .= " //\$db_password = '';\n"; - } - $tmp_config .= "\n"; - $tmp_config .= " //pgsql: database connection information\n"; - if ($this->global_settings->db_type() == "pgsql") { - $db_host = $this->global_settings->db_host(); - //Unix Socket - if localhost or 127.0.0.1 we want it to default to a Unix Socket. - //$comment_out = ''; - //if ( $db_host == "localhost" or $db_host == "127.0.0.1") { - // $comment_out = "//"; - //} - //$tmp_config .= " $comment_out\$db_host = '".$this->global_settings->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->global_settings->db_port()."';\n"; - $tmp_config .= " \$db_name = '".$this->global_settings->db_name()."';\n"; - $tmp_config .= " \$db_username = '".$this->global_settings->db_username()."';\n"; - $tmp_config .= " \$db_password = '".$this->global_settings->db_password()."';\n"; - } - else { - $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->global_settings->db_port()."';\n"; - $tmp_config .= " //\$db_name = '".$this->global_settings->db_name()."';\n"; - $tmp_config .= " //\$db_username = '".$this->global_settings->db_username()."';\n"; - $tmp_config .= " //\$db_password = '".$this->global_settings->db_password()."';\n"; - } - $tmp_config .= "\n"; - $tmp_config .= " //show errors\n"; - $tmp_config .= " ini_set('display_errors', '1');\n"; - $tmp_config .= " //error_reporting (E_ALL); // Report everything\n"; - $tmp_config .= " //error_reporting (E_ALL ^ E_NOTICE); // Report everything\n"; - $tmp_config .= " error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING ); //hide notices and warnings"; - $tmp_config .= "\n"; - $tmp_config .= "?>"; - - if((file_exists($this->config_php) - and !is_writable($this->config_php)) - or !is_writable(dirname($this->config_php)) - ) { - throw new Exception("cannot write to '" . $this->config_php . "'" ); - } - $fout = fopen($this->config_php,"w"); - fwrite($fout, $tmp_config); - unset($tmp_config); - fclose($fout); - } - - protected function create_database() { - $this->write_progress("\tUsing database as type " . $this->global_settings->db_type()); - $function = "create_database_" . $this->global_settings->db_type(); - $this->$function(); - - //sqlite is natively supported under all known OS'es - if($this->global_settings->db_type() != 'sqlite'){ - if(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN'){ - //non sqlite database support only uses ODBC under windows - $this->create_odbc_database_connection(); - }elseif($this->global_settings->db_type() != 'pgsql'){ - //switch supports postgresql natively - $this->create_odbc_database_connection(); - } - } - } - - protected function create_odbc_database_connection() { - //needed for non native database support - $database_uuid = uuid(); - $sql = "insert into v_databases "; - $sql .= "("; - $sql .= "database_uuid, "; - $sql .= "database_driver, "; - $sql .= "database_type, "; - $sql .= "database_host, "; - $sql .= "database_port, "; - $sql .= "database_name, "; - $sql .= "database_username, "; - $sql .= "database_password, "; - $sql .= "database_path, "; - $sql .= "database_description "; - $sql .= ")"; - $sql .= "values "; - $sql .= "("; - $sql .= "'$database_uuid', "; - $sql .= "'odbc', "; - $sql .= "'".$this->global_settings->db_type()."', "; - $sql .= "'".$this->global_settings->db_host()."', "; - $sql .= "'".$this->global_settings->db_port()."', "; - $sql .= "'".$this->global_settings->db_name()."', "; - $sql .= "'".$this->global_settings->db_username()."', "; - $sql .= "'".$this->global_settings->db_password()."', "; - $sql .= "'".$this->global_settings->db_path()."', "; - $sql .= "'Created by installer' "; - $sql .= ")"; - if($this->dbh->exec(check_sql($sql)) === false){ - throw new Exception("Failed to create odbc_database entery: " . join(":", $this->dbh->errorInfo())); - } - unset($sql); - } - - 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 - try { - $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 - } - catch (PDOException $error) { - throw new Exception("Failed to create database: " . $error->getMessage()); - } - - //add additional functions to SQLite - bool PDO::sqliteCreateFunction ( string function_name, callback callback [, int num_args] ) - if (!function_exists('php_now')) { - function php_now() { - if(function_exists("date_default_timezone_set") and function_exists("date_default_timezone_get")) { - @date_default_timezone_set(@date_default_timezone_get()); - } - return date("Y-m-d H:i:s"); - } - } - $this->dbh->sqliteCreateFunction('now', 'php_now', 0); - - //add the database structure - require_once "resources/classes/schema.php"; - $schema = new schema; - echo $schema->schema(); - - //get the contents of the sql file - if (file_exists('/usr/share/examples/fusionpbx/sql/sqlite.sql')){ - $filename = "/usr/share/examples/fusionpbx/sql/sqlite.sql"; - } - else { - $filename = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/resources/install/sql/sqlite.sql'; - } - $file_contents = file_get_contents($filename); - unset($filename); - - //replace \r\n with \n then explode on \n - $file_contents = str_replace("\r\n", "\n", $file_contents); - - //loop line by line through all the lines of sql code - $this->dbh->beginTransaction(); - $string_array = explode("\n", $file_contents); - $x = 0; - foreach($string_array as $sql) { - try { - $this->dbh->query($sql); - } - catch (PDOException $error) { - throw new Exception("error creating database: " . $error->getMessage() . "\n" . $sql ); - } - $x++; - } - unset ($file_contents, $sql); - $this->dbh->commit(); - - //set the file permissions - chmod($this->global_settings->db_path().'/'.$this->global_settings->db_name(), 0777); - } - - protected function create_database_pgsql() { - //create the database - if ($this->global_settings->db_create()) { - //attempt to create new Postgres role and database - $this->write_progress("\tCreating database"); - $db_create_username = $this->global_settings->db_create_username(); - $db_create_password = $this->global_settings->db_create_password(); - $db_host = $this->global_settings->db_host(); - $db_port = $this->global_settings->db_port(); - if(strlen($db_create_username) == 0){ - $db_create_username = $this->global_settings->db_username(); - $db_create_password = $this->global_settings->db_password(); - } - if (strlen($db_host) == 0) { - $db_host = 'localhost'; - } - - try { - $this->dbh = new PDO("pgsql:host=$db_host port=$db_port user=$db_create_username password=$db_create_password dbname=template1"); - } catch (PDOException $error) { - throw new Exception("error connecting to database in order to create: " . $error->getMessage()); - } - - //create the database, user, grant perms - if($this->dbh->exec("CREATE DATABASE {$this->global_settings->db_name()}") === false) { - throw new Exception("Failed to create database {$this->global_settings->db_name()}: " . join(":", $this->dbh->errorInfo())); - } - if($this->global_settings->db_username() != $db_create_username){ - if($this->dbh->exec("CREATE USER {$this->global_settings->db_username()} WITH PASSWORD '{$this->global_settings->db_password()}'") === false){ - // user may be already exists - // throw new Exception("Failed to create user {$this->global_settings->db_name()}: " . join(":", $this->dbh->errorInfo())); - } - if($this->dbh->exec("GRANT ALL ON DATABASE {$this->global_settings->db_name()} TO {$this->global_settings->db_username()}") === false){ - throw new Exception("Failed to create user {$this->global_settings->db_name()}: " . join(":", $this->dbh->errorInfo())); - } - } - - //close database connection_aborted - $this->dbh = null; - } - $this->write_progress("\tInstalling data to database"); - - //open database connection with $this->global_settings->db_name() - try { - if (strlen($this->global_settings->db_host()) > 0) { - $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 { - $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) { - throw new Exception("error connecting to database: " . $error->getMessage()); - } - - //add the database structure - require_once "resources/classes/schema.php"; - $schema = new schema; - echo $schema->schema(); - - //get the contents of the sql file - if (file_exists('/usr/share/examples/fusionpbx/sql/pgsql.sql')){ - $filename = "/usr/share/examples/fusionpbx/sql/pgsql.sql"; - } - else { - $filename = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/resources/install/sql/pgsql.sql'; - } - $file_contents = file_get_contents($filename); - - //replace \r\n with \n then explode on \n - $file_contents = str_replace("\r\n", "\n", $file_contents); - - //loop line by line through all the lines of sql code - $string_array = explode("\n", $file_contents); - $x = 0; - foreach($string_array as $sql) { - if (strlen($sql) > 3) { - try { - $this->dbh->query($sql); - } - catch (PDOException $error) { - throw new Exception("error creating database: " . $error->getMessage() . "\n" . $sql ); - } - } - $x++; - } - unset ($file_contents, $sql); - } - - protected function create_database_mysql() { - //database connection - $connect_string; - 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 - $connect_string = "mysql:host={$this->global_settings->db_host()};unix_socket=/var/run/mysqld/mysqld.sock;"; - } - elseif (strlen($this->global_settings->db_port()) == 0) { - //leave out port if it is empty - $connect_string = "mysql:host={$this->global_settings->db_host()};"; - } - else { - $connect_string = "mysql:host={$this->global_settings->db_host()};port={$this->global_settings->db_port()};"; - } - - //if we need create new database - if ($this->global_settings->db_create()) { - //attempt to create new user and database - $this->write_progress("\tCreating database"); - $db_create_username = $this->global_settings->db_create_username(); - $db_create_password = $this->global_settings->db_create_password(); - - if(strlen($db_create_username) == 0){ - $db_create_username = $this->global_settings->db_username(); - $db_create_password = $this->global_settings->db_password(); - } - - //connect to MySQL - try { - $this->dbh = new PDO($connect_string, $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_EMULATE_PREPARES, true); - } - catch (PDOException $error) { - throw new Exception("error connecting to database for create: " . $error->getMessage() . "\n" . $sql ); - } - - //select the mysql database - try { - $this->dbh->query("USE mysql;"); - } - catch (PDOException $error) { - throw new Exception("error in database: " . $error->getMessage() . "\n" . $sql ); - } - - //create user if we use separeate user to access and create - if($this->global_settings->db_username() != $db_create_username) { - //create user and set the permissions - try { - $tmp_sql = "CREATE USER '".$this->global_settings->db_username()."'@'%' IDENTIFIED BY '".$this->global_settings->db_password()."'; "; - $this->dbh->query($tmp_sql); - } - catch (PDOException $error) { - // ignore error here because user may already exists - // (e.g. reinstall can be done via remove db) - // throw new Exception("error in database: " . $error->getMessage() . "\n" . $sql ); - } - - //set account to unlimited use - try { - if ($this->global_settings->db_host() == "localhost" || $this->global_settings->db_host() == "127.0.0.1") { - $tmp_sql = "GRANT USAGE ON * . * TO '".$this->global_settings->db_username()."'@'localhost' "; - $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; "; - $this->dbh->query($tmp_sql); - - $tmp_sql = "GRANT USAGE ON * . * TO '".$this->global_settings->db_username()."'@'127.0.0.1' "; - $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; "; - $this->dbh->query($tmp_sql); - } - else { - $tmp_sql = "GRANT USAGE ON * . * TO '".$this->global_settings->db_username()."'@'".$this->global_settings->db_host()."' "; - $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; "; - $this->dbh->query($tmp_sql); - } - } - catch (PDOException $error) { - throw new Exception("error in database: " . $error->getMessage() . "\n" . $sql ); - } - } - - //create the database and set the create user with permissions - try { - $tmp_sql = "CREATE DATABASE IF NOT EXISTS ".$this->global_settings->db_name()."; "; - $this->dbh->query($tmp_sql); - } - catch (PDOException $error) { - throw new Exception("error in database: " . $error->getMessage() . "\n" . $sql ); - } - - //set user permissions - if($this->global_settings->db_username() != $db_create_username) { - try { - $this->dbh->query("GRANT ALL PRIVILEGES ON ".$this->global_settings->db_name().".* TO '".$this->global_settings->db_username()."'@'%'; "); - } - catch (PDOException $error) { - throw new Exception("error in database: " . $error->getMessage() . "\n" . $sql ); - } - } - - //make the changes active - try { - $tmp_sql = "FLUSH PRIVILEGES; "; - $this->dbh->query($tmp_sql); - } - catch (PDOException $error) { - throw new Exception("error in database: " . $error->getMessage() . "\n" . $sql ); - } - $this->dbh = null; - } - - $this->write_progress("\tInstalling data to database"); - - //connect to the database - try { - $this->dbh = new PDO($connect_string, $this->global_settings->db_username(), $this->global_settings->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_EMULATE_PREPARES, true); - } - catch (PDOException $error) { - throw new Exception("error connecting to database: " . $error->getMessage() . "\n" . $sql ); - } - - //select the database - try { - $this->dbh->query("USE ".$this->global_settings->db_name().";"); - } - catch (PDOException $error) { - throw new Exception("error in database: " . $error->getMessage() . "\n" . $sql ); - } - - //add the database structure - require_once "resources/classes/schema.php"; - $schema = new schema; - //echo $schema->schema(); - - //add the defaults data into the database - //get the contents of the sql file - if (file_exists('/usr/share/examples/fusionpbx/sql/mysql.sql')){ - $filename = "/usr/share/examples/fusionpbx/sql/mysql.sql"; - } - else { - $filename = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/resources/install/sql/mysql.sql'; - } - $file_contents = file_get_contents($filename); - - //replace \r\n with \n then explode on \n - $file_contents = str_replace("\r\n", "\n", $file_contents); - - //loop line by line through all the lines of sql code - $string_array = explode("\n", $file_contents); - $x = 0; - foreach($string_array as $sql) { - if (strlen($sql) > 3) { - try { - if ($this->debug) { - $this->write_debug( $sql."\n"); - } - $this->dbh->query($sql); - } - catch (PDOException $error) { - //echo "error on line $x: " . $error->getMessage() . " sql: $sql
"; - //die(); - } - } - $x++; - } - unset ($file_contents, $sql); - } - - protected function create_domain() { - $this->write_progress("\tChecking if domain exists '" . $this->global_settings->domain_name() . "'"); - $sql = "select * from v_domains "; - $sql .= "where domain_name = '".$this->global_settings->domain_name()."' "; - $sql .= "limit 1"; - $this->write_debug($sql); - $prep_statement = $this->dbh->prepare(check_sql($sql)); - if($prep_statement->execute() === false){ - throw new Exception("Failed to search for domain: " . join(":", $this->dbh->errorInfo())); - } - $result = $prep_statement->fetch(PDO::FETCH_NAMED); - unset($sql, $prep_statement); - if ($result) { - $this->global_settings->set_domain_uuid($result['domain_uuid']); - $this->write_progress("... domain exists as '" . $this->global_settings->domain_uuid() . "'"); - if($result['domain_enabled'] != 'true'){ - throw new Exception("Domain already exists but is disabled, this is unexpected"); - } - } else { - //add the domain - $this->write_progress("\t... creating domain"); - $sql = "insert into v_domains "; - $sql .= "("; - $sql .= "domain_uuid, "; - $sql .= "domain_name, "; - $sql .= "domain_description "; - $sql .= ") "; - $sql .= "values "; - $sql .= "("; - $sql .= "'".$this->global_settings->domain_uuid()."', "; - $sql .= "'".$this->global_settings->domain_name()."', "; - $sql .= "'Default Domain' "; - $sql .= ");"; - - $this->write_debug($sql); - if($this->dbh->exec(check_sql($sql)) === false){ - throw new Exception("Failed to execute sql statement: " . join(":", $this->dbh->errorInfo())); - } - unset($sql); - - //get the list of installed apps from the core and mod directories - $config_list = glob($_SERVER["DOCUMENT_ROOT"] . PROJECT_PATH . "/*/*/app_config.php"); - $x=0; - foreach ($config_list as $config_path) { - include($config_path); - $x++; - } - } - } - - protected function create_superuser() { - $this->write_progress("\tChecking if superuser exists '" . $this->admin_username . "'"); - $sql = "select * from v_users "; - $sql .= "where domain_uuid = '".$this->global_settings->domain_uuid()."' "; - $sql .= "and username = '".$this->admin_username."' "; - $sql .= "limit 1 "; - $this->write_debug($sql); - $prep_statement = $this->dbh->prepare(check_sql($sql)); - $prep_statement->execute(); - $result = $prep_statement->fetch(PDO::FETCH_NAMED); - unset($sql, $prep_statement); - $salt = generate_password('20', '4'); - if ($result) { - $this->admin_uuid = $result['user_uuid']; - $user_uuid = $result['user_uuid']; - $_SESSION["user_uuid"] = $this->admin_uuid; - $this->write_progress("... superuser exists as '" . $this->admin_uuid . "', updating password"); - $sql = "update v_users "; - $sql .= "set password = '".md5($salt.$this->admin_password)."' "; - $sql .= ",salt = '$salt' "; - $sql .= "where USER_uuid = '".$this->admin_uuid."' "; - $this->write_debug($sql); - $this->dbh->exec(check_sql($sql)); - } else { - //message - $this->write_progress("\t... creating super user"); - //add a user and then add the user to the superadmin group - //prepare the values - $user_uuid = $this->admin_uuid = uuid(); - $contact_uuid = uuid(); - //set a sessiong variable - $_SESSION["user_uuid"] = $user_uuid; - //salt used with the password to create a one way hash - //add the user account - $sql = "insert into v_users "; - $sql .= "("; - $sql .= "domain_uuid, "; - $sql .= "user_uuid, "; - $sql .= "contact_uuid, "; - $sql .= "username, "; - $sql .= "password, "; - $sql .= "salt, "; - $sql .= "add_date, "; - $sql .= "add_user, "; - $sql .= "user_enabled "; - $sql .= ") "; - $sql .= "values "; - $sql .= "("; - $sql .= "'".$this->global_settings->domain_uuid()."', "; - $sql .= "'".$this->admin_uuid."', "; - $sql .= "'$contact_uuid', "; - $sql .= "'".$this->admin_username."', "; - $sql .= "'".md5($salt.$this->admin_password)."', "; - $sql .= "'$salt', "; - $sql .= "now(), "; - $sql .= "'".$this->admin_username."', "; - $sql .= "'true' "; - $sql .= ");"; - $this->write_debug( $sql."\n"); - $this->dbh->exec(check_sql($sql)); - unset($sql); - } - $this->write_progress("\tChecking if superuser contact exists"); - $sql = "select count(*) as count from v_contacts "; - $sql .= "where domain_uuid = '".$this->global_settings->domain_uuid()."' "; - $sql .= "and contact_name_given = '".$this->admin_username."' "; - $sql .= "and contact_nickname = '".$this->admin_username."' "; - $sql .= "limit 1 "; - $this->write_debug($sql); - $prep_statement = $this->dbh->prepare(check_sql($sql)); - $prep_statement->execute(); - $row = $prep_statement->fetch(PDO::FETCH_ASSOC); - if ($row['count'] == 0) { - $sql = "insert into v_contacts "; - $sql .= "("; - $sql .= "domain_uuid, "; - $sql .= "contact_uuid, "; - $sql .= "contact_type, "; - $sql .= "contact_name_given, "; - $sql .= "contact_nickname "; - $sql .= ") "; - $sql .= "values "; - $sql .= "("; - $sql .= "'".$this->global_settings->domain_uuid()."', "; - $sql .= "'$contact_uuid', "; - $sql .= "'user', "; - $sql .= "'".$this->admin_username."', "; - $sql .= "'".$this->admin_username."' "; - $sql .= ")"; - $this->dbh->exec(check_sql($sql)); - unset($sql); - } - $this->write_progress("\tChecking if superuser is in the correct group"); - $sql = "select count(*) as count from v_user_groups "; - $sql .= "where domain_uuid = '".$this->global_settings->domain_uuid()."' "; - $sql .= "and user_uuid = '".$this->admin_uuid."' "; - $sql .= "and group_name = 'superadmin' "; - $sql .= "limit 1 "; - $this->write_debug($sql); - $prep_statement = $this->dbh->prepare(check_sql($sql)); - $prep_statement->execute(); - $row = $prep_statement->fetch(PDO::FETCH_ASSOC); - if ($row['count'] == 0) { - //add the user to the superadmin group - $sql = "insert into v_user_groups "; - $sql .= "("; - $sql .= "user_group_uuid, "; - $sql .= "domain_uuid, "; - $sql .= "user_uuid, "; - $sql .= "group_name "; - $sql .= ") "; - $sql .= "values "; - $sql .= "("; - $sql .= "'".uuid()."', "; - $sql .= "'".$this->global_settings->domain_uuid()."', "; - $sql .= "'".$this->admin_uuid."', "; - $sql .= "'superadmin' "; - $sql .= ");"; - $this->write_debug( $sql."\n"); - $this->dbh->exec(check_sql($sql)); - unset($sql); - } - } - - protected function app_defaults() { - - //write a progress message - $this->write_progress("\tRunning app_defaults"); - - //set needed session settings - $_SESSION["username"] = $this->admin_username; - $_SESSION["domain_uuid"] = $this->global_settings->domain_uuid(); - require $this->config_php; - require "resources/require.php"; - $_SESSION['event_socket_ip_address'] = $this->global_settings->switch_event_host(); - $_SESSION['event_socket_port'] = $this->global_settings->switch_event_port(); - $_SESSION['event_socket_password'] = $this->global_settings->switch_event_password(); - - //get the groups assigned to the user and then set the groups in $_SESSION["groups"] - $sql = "SELECT * FROM v_user_groups "; - $sql .= "where domain_uuid=:domain_uuid "; - $sql .= "and user_uuid=:user_uuid "; - $prep_statement = $this->dbh->prepare(check_sql($sql)); - $prep_statement->bindParam(':domain_uuid', $this->global_settings->domain_uuid); - $prep_statement->bindParam(':user_uuid', $this->admin_uuid); - $prep_statement->execute(); - $result = $prep_statement->fetchAll(PDO::FETCH_NAMED); - $_SESSION["groups"] = $result; - unset($sql, $row_count, $prep_statement); - - //get the permissions assigned to the groups that the user is a member of set the permissions in $_SESSION['permissions'] - $x = 0; - $sql = "select distinct(permission_name) from v_group_permissions "; - foreach($_SESSION["groups"] as $field) { - if (strlen($field['group_name']) > 0) { - if ($x == 0) { - $sql .= "where (domain_uuid = '".$this->global_settings->domain_uuid."' and group_name = '".$field['group_name']."') "; - } - else { - $sql .= "or (domain_uuid = '".$this->global_settings->domain_uuid."' and group_name = '".$field['group_name']."') "; - } - $x++; - } - } - $prep_statement_sub = $this->dbh->prepare($sql); - $prep_statement_sub->execute(); - $_SESSION['permissions'] = $prep_statement_sub->fetchAll(PDO::FETCH_NAMED); - unset($sql, $prep_statement_sub); - - //include the config.php - $db_type = $this->global_settings->db_type(); - $db_path = $this->global_settings->db_path(); - $db_host = $this->global_settings->db_host(); - $db_port = $this->global_settings->db_port(); - $db_name = $this->global_settings->db_name(); - $db_username = $this->global_settings->db_username(); - $db_password = $this->global_settings->db_password(); - - //add the database structure - require_once "resources/classes/schema.php"; - $schema = new schema; - //echo $schema->schema(); - - //run all app_defaults.php files - $default_language = $this->install_language; - $domain = new domains; - $domain->upgrade(); - - //get the switch default settings - $sql = "select * from v_default_settings "; - $sql .= "where default_setting_category = 'switch' "; - $sql .= "and default_setting_enabled = 'true' "; - $prep_statement = $this->dbh->prepare($sql); - $prep_statement->execute(); - $default_settings = $prep_statement->fetchAll(PDO::FETCH_NAMED); - foreach($default_settings as $row) { - $name = $row['default_setting_name']; - $category = $row['default_setting_category']; - $subcategory = $row['default_setting_subcategory']; - if ($category == "switch") { - $_SESSION[$category][$subcategory]['uuid'] = $row['default_setting_uuid']; - $_SESSION[$category][$subcategory][$name] = $row['default_setting_value']; - } - } - unset ($prep_statement, $sql); - - //update config.lua - $obj = new scripts; - $obj->copy_files(); - $obj->write_config(); - - //synchronize the config with the saved settings - save_switch_xml(); - - //do not show the apply settings reminder on the login page - $_SESSION["reload_xml"] = false; - - //clear the menu - $_SESSION["menu"] = ""; - - } - - public function remove_config() { - if (file_exists('/bin/rm')) { - $this->write_debug('rm -f ' . $this->config_php); - exec ('rm -f ' . $this->config_php); - } - elseif(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN'){ - $this->write_debug("del /S /F /Q '$dir'"); - exec("del /F /Q '" . $this->config_php . "'"); - } - else { - $this->write_debug("delete file: ".$file); - unlink($this->config_php); - } - clearstatcache(); - } - } - -?>