diff --git a/core/install/install.php b/core/install/install.php new file mode 100644 index 0000000000..fbc14b8b24 --- /dev/null +++ b/core/install/install.php @@ -0,0 +1,466 @@ + + Portions created by the Initial Developer are Copyright (C) 2019 + the Initial Developer. All Rights Reserved. + + Contributor(s): + Mark J Crane +*/ + +//includes + include "root.php"; + require_once "resources/functions.php"; + +//include required classes + require_once "resources/classes/text.php"; + require_once "resources/classes/template.php"; + +//add multi-lingual support + $language = new text; + $text = $language->get(); + +//set debug to true or false + $debug = false; + +//start the session + //ini_set("session.cookie_httponly", True); + session_start(); + +//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 everything + //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($_SERVER['DOCUMENT_ROOT'].PROJECT_PATH."/resources/config.php")) { + $config_exists = true; + } elseif (file_exists("/etc/fusionpbx/config.php")) { + //linux + $config_exists = true; + } elseif (file_exists("/usr/local/etc/fusionpbx/config.php")) { + $config_exists = true; + } + if ($config_exists) { + $msg .= "Already Installed"; + header("Location: ".PROJECT_PATH."/index.php?msg=".urlencode($msg)); + exit; + } + +//process and save the data + if (count($_POST) > 0) { + foreach($_POST as $key => $value) { + //$_SESSION['install'][$key] = $value; + + if ($key == 'admin_username') { + $_SESSION['install'][$key] = $value; + } + if ($key == 'admin_password') { + $_SESSION['install'][$key] = $value; + } + if ($key == 'domain_name') { + $_SESSION['install'][$key] = $value; + } + if ($key == 'database_host') { + $_SESSION['install'][$key] = $value; + } + if ($key == 'database_port') { + $_SESSION['install'][$key] = $value; + } + if ($key == 'database_name') { + $_SESSION['install'][$key] = $value; + } + if ($key == 'database_username') { + $_SESSION['install'][$key] = $value; + } + if ($key == 'database_password') { + $_SESSION['install'][$key] = $value; + } + //echo "if (\$key == '$key') {\n"; + //echo " \$_SESSION['install'][\$key] = \$value;\n"; + //echo "}\n"; + } + if ($_REQUEST["step"] == "install") { + //show debug information + if ($debug) { + echo "
\n";
+				print_r($_SESSION['install']);
+				echo "
\n"; + exit; + } + + //add the config.php + $config = "\n"; + $config .= " All rights reserved.\n"; + $config .= "*/\n"; + $config .= "\n"; + $config .= "//-----------------------------------------------------\n"; + $config .= "// settings:\n"; + $config .= "//-----------------------------------------------------\n"; + $config .= "\n"; + $config .= " //set the database type\n"; + $config .= " \$db_type = 'pgsql'; //sqlite, mysql, pgsql, others with a manually created PDO connection\n"; + $config .= "\n"; + $config .= "//database connection information\n"; + $config .= " \$db_host = '".$_SESSION['install']['database_host']."'; //set the host only if the database is not local\n"; + $config .= " \$db_port = '".$_SESSION['install']['database_port']."';\n"; + $config .= " \$db_name = '".$_SESSION['install']['database_name']."';\n"; + $config .= " \$db_username = '".$_SESSION['install']['database_username']."';\n"; + $config .= " \$db_password = '".$_SESSION['install']['database_password']."';\n"; + $config .= "\n"; + $config .= " //show errors\n"; + $config .= " ini_set('display_errors', '1');\n"; + $config .= " //error_reporting (E_ALL); // Report everything\n"; + $config .= " //error_reporting (E_ALL ^ E_NOTICE); // Report everything\n"; + $config .= " error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING ); //hide notices and warnings"; + $config .= "\n"; + $config .= "?>"; + if (is_dir("/etc/fusionpbx")){ + $config_path = "/etc/fusionpbx/config.php"; + } elseif (is_dir("/usr/local/etc/fusionpbx")){ + $config_path = "/usr/local/etc/fusionpbx/config.php"; + } + elseif (is_dir($_SERVER['DOCUMENT_ROOT'].PROJECT_PATH."/resources")) { + $config_path = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH."/resources/config.php"; + } + else { + $config_path = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH."/resources/config.php"; + } + $fout = fopen($config_path,"w"); + fwrite($fout, $config); + unset($config); + fclose($fout); + + //includes - this includes the config.php + require_once "resources/require.php"; + + //add the database schema + $included = true; + require_once "core/upgrade/upgrade_schema.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 = new permissions; + $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"); + + /* + $sql = "insert into v_domains("; + $sql .= "domain_uuid, domain_name, domain_enabled) "; + $sql .= "values(:domain_uuid, :domain_name, 'true');"; + $parameters['domain_uuid'] = $domain_uuid; + $parameters['domain_name'] = $domain_name; + $database = new database; + $database->execute($sql, $parameters); + unset($parameters); + */ + } + + //set the session domain id and name + $_SESSION['domain_uuid'] = $domain_uuid; + $_SESSION['domain_name'] = $domain_name; + + //app defaults + $included = true; + require_once "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 = new permissions; + $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"); + + //add or update the user + /* + if ($user_exists) { + $sql = "update v_users set "; + $sql .= "username = :admin_username, "; + $sql .= "password_hash = :password_hash, "; + $sql .= "user_salt = :user_salt "; + $sql .= "where user_uuid = :user_uuid "; + $parameters['username'] = $admin_username; + $parameters['password_hash'] = $password_hash; + $parameters['user_salt'] = $user_salt; + $database = new database; + $database->execute($sql, $parameters); + unset($parameters); + } + else { + $sql = "insert into v_users "; + $sql .= "(user_uuid, domain_uuid, username, password, salt, user_enabled) "; + $sql .= "values(:user_uuid, :domain_uuid, :admin_username, :password_hash, :user_salt, 'true');"; + $parameters['domain_uuid'] = $domain_uuid; + $parameters['username'] = $admin_username; + $parameters['password_hash'] = $password_hash; + $parameters['user_uuid'] = $user_uuid; + $parameters['user_salt'] = $user_salt; + $database = new database; + $database->execute($sql, $parameters); + unset($parameters); + } + */ + + //add the user group permission + /* + $sql = "insert into v_user_groups (user_group_uuid, domain_uuid, group_name, group_uuid, user_uuid) \n"; + $sql .= "values(:user_group_uuid, :domain_uuid, :group_name, :group_uuid, :user_uuid);"; + $parameters['user_group_uuid'] = uuid(); + $parameters['domain_uuid'] = $domain_uuid; + $parameters['group_name'] = $group_name; + $parameters['group_uuid'] = $group_uuid; + $parameters['user_uuid'] = $user_uuid; + $database = new database; + $database->execute($sql, $parameters); + unset($parameters); + */ + + //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 + require_once "core/upgrade/upgrade_domains.php"; + + //install completed + //restart the server + } + } + +//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'; + +//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]; + +//temp directory + $_SESSION['server']['temp']['dir'] = '/tmp'; + +//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 = $_SESSION['server']['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"); + +//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 "
\n";
+	//	print_r($text);
+	//	echo "
\n"; + //} + +//show the views + //if ($_GET["step"] == "" || $_GET["step"] == "1") { + // $content = $view->render('language.htm'); + //} + if ($_REQUEST["step"] == "" || $_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'); + +//include the footer + require_once "resources/footer.php"; + +?>