123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407 |
- <?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 <[email protected]>
- Portions created by the Initial Developer are Copyright (C) 2022
- the Initial Developer. All Rights Reserved.
- Contributor(s):
- Mark J Crane <[email protected]>
- */
- //set the include path
- $document_root = dirname(__DIR__, 2);
- set_include_path($document_root);
- $_SERVER["DOCUMENT_ROOT"] = $document_root;
- $_SERVER["PROJECT_ROOT"] = $document_root;
- define("PROJECT_PATH", '');
- //includes files
- require_once "resources/functions.php";
- //include required classes
- require_once "resources/classes/text.php";
- require_once "resources/classes/template.php";
- require_once "resources/classes/message.php";
- require_once "core/install/resources/classes/install.php";
- //start the session before text object stores values in session
- //ini_set("session.cookie_httponly", True);
- session_start();
- //add multi-lingual support
- $language = new text;
- $text = $language->get();
- //set debug to true or false
- $debug = false;
- //set the default domain_uuid
- $domain_uuid = uuid();
- //$_SESSION["domain_uuid"] = uuid();
- //add the menu uuid
- $menu_uuid = 'b4750c3f-2a86-b00d-b7d0-345c14eca286';
- //error reporting
- ini_set('display_errors', '1');
- //error_reporting (E_ALL); // Report everything
- //error reporting
- ini_set('display_errors', '1');
- //error_reporting (E_ALL); // Report everything
- error_reporting (E_ALL ^ E_NOTICE); // Report warnings
- //error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING ); //hide notices and warnings
- //set the default time zone
- date_default_timezone_set('UTC');
- //if the config file exists then disable the install page
- $config_exists = false;
- if (file_exists("/usr/local/etc/fusionpbx/config.conf")) {
- //bsd
- $config_exists = true;
- }
- elseif (file_exists("/etc/fusionpbx/config.conf")) {
- //linux
- $config_exists = true;
- }
- elseif (file_exists(getenv('SystemDrive') . DIRECTORY_SEPARATOR . 'ProgramData' . DIRECTORY_SEPARATOR . 'fusionpbx' . DIRECTORY_SEPARATOR . 'config.conf')) {
- //Windows
- $config_exists = true;
- }
- if ($config_exists) {
- $msg = "Already Installed";
- //report to user
- message::add($msg);
- //redirect with message
- header("Location: ".PROJECT_PATH."/index.php?msg=".urlencode($msg));
- exit;
- }
- //if the config.php exists create the config.conf file
- if (!$config_exists) {
- if (file_exists("/usr/local/etc/fusionpbx/config.php")) {
- //bsd
- $config_path = "/usr/local/etc/fusionpbx";
- }
- elseif (file_exists("/etc/fusionpbx/config.php")) {
- //linux
- $config_path = "/etc/fusionpbx";
- }
- elseif (file_exists(getenv('SystemDrive') . DIRECTORY_SEPARATOR . 'ProgramData' . DIRECTORY_SEPARATOR . 'fusionpbx' . DIRECTORY_SEPARATOR . 'config.php')) {
- //Windows
- $config_path = getenv('SystemDrive') . DIRECTORY_SEPARATOR . 'ProgramData' . DIRECTORY_SEPARATOR . 'fusionpbx' ;
- }
- if (isset($config_path)) {
- if (is_writable($config_path)) {
- //include the config.php file
- include $config_path.'/config.php';
- //build the config file
- $install = new install;
- $install->database_host = $db_host;
- $install->database_port = $db_port;
- $install->database_name = $db_name;
- $install->database_username = $db_username;
- $install->database_password = $db_password;
- $install->config();
- //redirect the user
- header("Location: /");
- exit;
- }
- else {
- //config directory is not writable run commands as root
- echo "Please run the following commands as root.<br /><br />\n";
- echo "cd ".$document_root."<br />\n";
- echo "php ".$document_root."/core/upgrade/upgrade.php<br />\n";
- unset($config_path);
- exit;
- }
- }
- }
- //process and save the data
- if (count($_POST) > 0) {
- foreach($_POST as $key => $value) {
- switch($key) {
- case 'admin_username':
- case 'admin_password':
- case 'domain_name':
- case 'database_host':
- case 'database_port':
- case 'database_name':
- case 'database_username':
- case 'database_password':
- $_SESSION['install'][$key] = $value;
- }
- }
- if ($_REQUEST["step"] == "install") {
- //show debug information
- if ($debug) {
- echo "<pre>\n";
- print_r($_SESSION['install']);
- echo "</pre>\n";
- exit;
- }
- //build the config file
- $install = new install;
- $install->database_host = $_SESSION['install']['database_host'];
- $install->database_port = $_SESSION['install']['database_port'];
- $install->database_name = $_SESSION['install']['database_name'];
- $install->database_username = $_SESSION['install']['database_username'];
- $install->database_password = $_SESSION['install']['database_password'];
- $result = $install->config();
- //end the script if the config path is not set
- if (!$result) {
- echo $install->message;
- exit;
- }
- //add the database schema
- $output = shell_exec('cd '.$_SERVER["DOCUMENT_ROOT"].' && php /var/www/fusionpbx/core/upgrade/upgrade_schema.php');
- //includes - this includes the config.php
- require_once dirname(__DIR__, 2) . "/resources/require.php";
- //get the domain name
- $domain_name = $_SESSION['install']['domain_name'];
- //check to see if the domain name exists if it does update the domain_uuid
- $sql = "select domain_uuid from v_domains ";
- $sql .= "where domain_name = :domain_name ";
- $parameters['domain_name'] = $domain_name;
- $database = new database;
- $domain_uuid = $database->select($sql, $parameters, 'column');
- unset($parameters);
- //set domain and user_uuid to true or false
- if ($domain_uuid == null) {
- $domain_uuid = uuid();
- $domain_exists = false;
- }
- else {
- $domain_exists = true;
- }
- //if the domain name does not exist then add the domain name
- if (!$domain_exists) {
- //add the domain permission
- $p = permissions::new();
- $p->add("domain_add", "temp");
- //prepare the array
- $array['domains'][0]['domain_uuid'] = $domain_uuid;
- $array['domains'][0]['domain_name'] = $domain_name;
- $array['domains'][0]['domain_enabled'] = 'true';
- //save to the user data
- $database = new database;
- $database->app_name = 'domains';
- $database->app_uuid = 'b31e723a-bf70-670c-a49b-470d2a232f71';
- $database->uuid($domain_uuid);
- $database->save($array);
- $message = $database->message;
- unset($array);
- //remove the temporary permission
- $p->delete("domain_add", "temp");
- }
- //set the session domain id and name
- $_SESSION['domain_uuid'] = $domain_uuid;
- $_SESSION['domain_name'] = $domain_name;
- //app defaults
- $output = shell_exec('cd '.$_SERVER["DOCUMENT_ROOT"].' && php /var/www/fusionpbx/core/upgrade/upgrade_domains.php');
- //prepare the user settings
- $admin_username = $_SESSION['install']['admin_username'];
- $admin_password = $_SESSION['install']['admin_password'];
- $user_salt = uuid();
- $password_hash = md5($user_salt . $admin_password);
- //get the user_uuid if the user exists
- $sql = "select user_uuid from v_users ";
- $sql .= "where domain_uuid = :domain_uuid ";
- $sql .= "and username = :username ";
- $parameters['domain_uuid'] = $domain_uuid;
- $parameters['username'] = $admin_username;
- $database = new database;
- $user_uuid = $database->select($sql, $parameters, 'column');
- unset($parameters);
- //if the user did not exist then get a new uuid
- if ($user_uuid == null) {
- $domain_exists = false;
- $user_uuid = uuid();
- }
- else {
- $user_exists = true;
- }
- //set the user_uuid
- $_SESSION['user_uuid'] = $user_uuid;
- //get the superadmin group_uuid
- $sql = "select group_uuid from v_groups ";
- $sql .= "where group_name = :group_name ";
- $parameters['group_name'] = 'superadmin';
- $database = new database;
- $group_uuid = $database->select($sql, $parameters, 'column');
- unset($parameters);
- //add the user permission
- $p = permissions::new();
- $p->add("user_add", "temp");
- $p->add("user_edit", "temp");
- $p->add("user_group_add", "temp");
- //save to the user data
- $array['users'][0]['domain_uuid'] = $domain_uuid;
- $array['users'][0]['user_uuid'] = $user_uuid;
- $array['users'][0]['username'] = $admin_username;
- $array['users'][0]['password'] = $password_hash;
- $array['users'][0]['salt'] = $user_salt;
- $array['users'][0]['user_enabled'] = 'true';
- $array['user_groups'][0]['user_group_uuid'] = uuid();
- $array['user_groups'][0]['domain_uuid'] = $domain_uuid;
- $array['user_groups'][0]['group_name'] = 'superadmin';
- $array['user_groups'][0]['group_uuid'] = $group_uuid;
- $array['user_groups'][0]['user_uuid'] = $user_uuid;
- $database = new database;
- $database->app_name = 'users';
- $database->app_uuid = '112124b3-95c2-5352-7e9d-d14c0b88f207';
- $database->uuid($user_uuid);
- $database->save($array);
- $message = $database->message;
- unset($array);
- //remove the temporary permission
- $p->delete("user_add", "temp");
- $p->delete("user_edit", "temp");
- $p->delete("user_group_add", "temp");
- //copy the files and directories from resources/install
- /*
- if (!$domain_exists) {
- require_once "resources/classes/install.php";
- $install = new install;
- $install->domain_uuid = $domain_uuid;
- $install->domain = $domain_name;
- $install->switch_conf_dir = $switch_conf_dir;
- $install->copy_conf();
- $install->copy();
- }
- */
- //update xml_cdr url, user and password in xml_cdr.conf.xml
- if (!$domain_exists) {
- if (file_exists($_SERVER["DOCUMENT_ROOT"].PROJECT_PATH."/app/xml_cdr")) {
- xml_cdr_conf_xml();
- }
- }
- //write the switch.conf.xml file
- if (!$domain_exists) {
- if (file_exists($switch_conf_dir)) {
- switch_conf_xml();
- }
- }
- #app defaults
- $output = shell_exec('cd '.$_SERVER["DOCUMENT_ROOT"].' && php /var/www/fusionpbx/core/upgrade/upgrade_domains.php');
- //install completed - prompt the user to login
- header("Location: /logout.php");
- }
- }
- //set the max execution time to 1 hour
- ini_set('max_execution_time',3600);
- //set a default template
- $_SESSION['domain']['template']['name'] = 'default';
- $_SESSION['theme']['menu_brand_image']['text'] = PROJECT_PATH.'/themes/default/images/logo.png';
- $_SESSION['theme']['menu_brand_type']['text'] = 'image';
- //set a default step if not already set
- if(empty($_REQUEST['step'])) {
- $_REQUEST['step'] = '1';
- }
- //save an install log if debug is true
- //if ($debug) {
- // $fp = fopen(sys_get_temp_dir()."/install.log", "w");
- //}
- //get the domain
- $domain_array = explode(":", $_SERVER["HTTP_HOST"]);
- $domain_name = $domain_array[0];
- //initialize a template object
- $view = new template();
- $view->engine = 'smarty';
- $view->template_dir = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/core/install/resources/views/';
- $view->cache_dir = sys_get_temp_dir();
- $view->init();
- //assign default values to the template
- $view->assign("admin_username", "admin");
- $view->assign("admin_password", "");
- $view->assign("domain_name", $domain_name);
- $view->assign("database_host", "localhost");
- $view->assign("database_port", "5432");
- $view->assign("database_name", "fusionpbx");
- $view->assign("database_username", "fusionpbx");
- $view->assign("database_password", "fusionpbx");
- //add translations
- foreach($text as $key => $value) {
- $view->assign(str_replace("-", "_", $key), $text[$key]);
- //$view->assign("label_username", $text['label-username']);
- //$view->assign("label_password", $text['label-password']);
- //$view->assign("button_back", $text['button-back']);
- }
- //debug information
- //if ($debug) {
- // echo "<pre>\n";
- // print_r($text);
- // echo "</pre>\n";
- //}
- //show the views
- //if ($_GET["step"] == "" || $_GET["step"] == "1") {
- // $content = $view->render('language.htm');
- //}
- if ($_REQUEST["step"] == "1") {
- $content = $view->render('configuration.htm');
- }
- if ($_REQUEST["step"] == "2") {
- $content = $view->render('database.htm');
- }
- $view->assign("content", $content);
- echo $view->render('template.htm');
- ?>
|