From 37fd4692c1c7339bfee64cac16e28edf86a44797 Mon Sep 17 00:00:00 2001 From: frytimo Date: Wed, 17 Apr 2024 18:04:34 -0300 Subject: [PATCH] Add command line menu for upgrade (#6949) * use existing git_pull function from global functions --- core/upgrade/upgrade_menu.php | 286 ++++++++++++++++++++++++++++++++++ 1 file changed, 286 insertions(+) create mode 100644 core/upgrade/upgrade_menu.php diff --git a/core/upgrade/upgrade_menu.php b/core/upgrade/upgrade_menu.php new file mode 100644 index 0000000000..f2888ece8e --- /dev/null +++ b/core/upgrade/upgrade_menu.php @@ -0,0 +1,286 @@ + + Portions created by the Initial Developer are Copyright (C) 2008-2023 + the Initial Developer. All Rights Reserved. + + Contributor(s): + Mark J Crane + Tim Fry + */ + +//check the permission +defined('STDIN') or die('Unauthorized'); + +//include files +require_once dirname(__DIR__, 2) . "/resources/require.php"; + +show_upgrade_menu(); + +function show_upgrade_menu() { +// error_reporting(E_ALL); + while (true) { + echo "\n"; + echo "+------------------+\n"; + echo "| Set Default Menu |\n"; + echo "+------------------+\n"; + echo "\n"; + echo "1) Update FusionPBX\n"; + echo "2) Domains\n"; + echo "3) Schema\n"; + echo "4) Menus\n"; + echo "5) Permissions\n"; + echo "6) All of the above\n"; + echo "7) Validate schema data types\n"; + echo "8) Show current version\n"; + echo "9) Exit\n"; + echo "\n"; + echo "Choice: "; + $choice = readline(); + switch ($choice) { + case 1: + do_upgrade_code(); + break; + case 2: + do_upgrade_domains(); + break; + case 3: + do_upgrade_schema(); + break; + case 4: + do_upgrade_menu(); + break; + case 5: + do_upgrade_permissions(); + break; + case 6: + do_upgrade_code(); + do_upgrade_schema(); + do_upgrade_domains(); + do_upgrade_permissions(); + do_upgrade_menu(); + break; + case 7: + do_upgrade_schema(true); + break; + case 8: + show_software_version(); + break; + case 9: + exit(); + } + } +} + +//show the upgrade type +function show_software_version() { + echo software::version() . "\n"; +} + +function do_upgrade_code() { + //assume failed + $result = ['result' => false, 'message' => 'Failed']; + //global $conf; + if (defined('PROJECT_ROOT')) { + return git_pull(PROJECT_ROOT); + } + return $result; +} + +//run all app_defaults.php files +function do_upgrade_domains() { + require_once dirname(__DIR__, 2) . "/resources/classes/config.php"; + require_once dirname(__DIR__, 2) . "/resources/classes/domains.php"; + $domain = new domains; + $domain->display_type = 'text'; + $domain->upgrade(); +} + +//upgrade schema and/or data_types +function do_upgrade_schema(bool $data_types = false) { + //get the database schema put it into an array then compare and update the database as needed. + require_once dirname(__DIR__, 2) . "/resources/classes/schema.php"; + $obj = new schema; + $obj->data_types = $data_types; + echo $obj->schema('text'); +} + +//restore the default menu +function do_upgrade_menu() { + global $included, $sel_menu, $menu_uuid, $menu_language; + //get the menu uuid and language + $sql = "select menu_uuid, menu_language from v_menus "; + $sql .= "where menu_name = :menu_name "; + $parameters['menu_name'] = 'default'; + $database = new database; + $row = $database->select($sql, $parameters, 'row'); + if (is_array($row) && sizeof($row) != 0) { + $menu_uuid = $row["menu_uuid"]; + $menu_language = $row["menu_language"]; + } + unset($sql, $parameters, $row); + + //show the menu + if (isset($argv[2]) && $argv[2] == 'view') { + print_r($_SESSION["menu"]); + } + + //set the menu back to default + if (isset($argv[2]) && (is_null($argv[2]) || $argv[2] == 'default')) { + //restore the menu + $included = true; + require_once dirname(__DIR__, 2) . "/core/menu/menu_restore_default.php"; + unset($sel_menu); + $text = (new text)->get(null, 'core/upgrade'); + //send message to the console + echo $text['message-upgrade_menu'] . "\n"; + } +} + +//restore the default permissions +function do_upgrade_permissions() { + global $included; + //default the permissions + $included = true; + require_once dirname(__DIR__, 2) . "/core/groups/permissions_default.php"; + + //send message to the console + $text = (new text)->get(null, 'core/upgrade'); + echo $text['message-upgrade_permissions'] . "\n"; +} + +//default upgrade schema and app defaults +function do_upgrade_defaults() { + //add multi-lingual support + $language = new text; + $text = $language->get(null, 'core/upgrade'); + + echo "\n"; + echo $text['label-upgrade'] . "\n"; + echo "-----------------------------------------\n"; + echo "\n"; + echo $text['label-database'] . "\n"; + + //make sure the database schema and installation have performed all necessary tasks + $obj = new schema; + echo $obj->schema("text"); + + //run all app_defaults.php files + $domain = new domains; + $domain->display_type = 'text'; + $domain->upgrade(); + + echo "\n"; +} + +function load_config_php() { + //if the config file doesn't exist and the config.php does exist use it to write a new config file + //include the config.php + include "/etc/fusionpbx/config.php"; + + //set the default config file location + if (stristr(PHP_OS, 'BSD')) { + $config_path = '/usr/local/etc/fusionpbx'; + $config_file = $config_path . '/config.conf'; + $document_root = '/usr/local/www/fusionpbx'; + + $conf_dir = '/usr/local/etc/freeswitch'; + $sounds_dir = '/usr/share/freeswitch/sounds'; + $database_dir = '/var/lib/freeswitch/db'; + $recordings_dir = '/var/lib/freeswitch/recordings'; + $storage_dir = '/var/lib/freeswitch/storage'; + $voicemail_dir = '/var/lib/freeswitch/storage/voicemail'; + $scripts_dir = '/usr/share/freeswitch/scripts'; + } + if (stristr(PHP_OS, 'Linux')) { + $config_path = '/etc/fusionpbx/'; + $config_file = $config_path . '/config.conf'; + $document_root = '/var/www/fusionpbx'; + + $conf_dir = '/etc/freeswitch'; + $sounds_dir = '/usr/share/freeswitch/sounds'; + $database_dir = '/var/lib/freeswitch/db'; + $recordings_dir = '/var/lib/freeswitch/recordings'; + $storage_dir = '/var/lib/freeswitch/storage'; + $voicemail_dir = '/var/lib/freeswitch/storage/voicemail'; + $scripts_dir = '/usr/share/freeswitch/scripts'; + } + + //make the config directory + if (isset($config_path)) { + system('mkdir -p ' . $config_path); + } else { + echo "config directory not found\n"; + exit; + } + + //build the config file + $conf = "\n"; + $conf .= "#database system settings\n"; + $conf .= "database.0.type = " . $db_type . "\n"; + $conf .= "database.0.host = " . $db_host . "\n"; + $conf .= "database.0.port = " . $db_port . "\n"; + $conf .= "database.0.sslmode = prefer\n"; + $conf .= "database.0.name = " . $db_name . "\n"; + $conf .= "database.0.username = " . $db_username . "\n"; + $conf .= "database.0.password = " . $db_password . "\n"; + $conf .= "\n"; + $conf .= "#database switch settings\n"; + $conf .= "database.1.type = sqlite\n"; + $conf .= "database.1.path = " . $database_dir . "\n"; + $conf .= "database.1.name = core.db\n"; + $conf .= "\n"; + $conf .= "#general settings\n"; + $conf .= "document.root = " . $document_root . "\n"; + $conf .= "project.path =\n"; + $conf .= "temp.dir = /tmp\n"; + $conf .= "php.dir = " . PHP_BINDIR . "\n"; + $conf .= "php.bin = php\n"; + $conf .= "\n"; + $conf .= "#cache settings\n"; + $conf .= "cache.method = file\n"; + $conf .= "cache.location = /var/cache/fusionpbx\n"; + $conf .= "cache.settings = true\n"; + $conf .= "\n"; + $conf .= "#switch settings\n"; + $conf .= "switch.conf.dir = " . $conf_dir . "\n"; + $conf .= "switch.sounds.dir = " . $sounds_dir . "\n"; + $conf .= "switch.database.dir = " . $database_dir . "\n"; + $conf .= "switch.recordings.dir = " . $recordings_dir . "\n"; + $conf .= "switch.storage.dir = " . $storage_dir . "\n"; + $conf .= "switch.voicemail.dir = " . $voicemail_dir . "\n"; + $conf .= "switch.scripts.dir = " . $scripts_dir . "\n"; + $conf .= "\n"; + $conf .= "#switch xml handler\n"; + $conf .= "xml_handler.fs_path = false\n"; + $conf .= "xml_handler.reg_as_number_alias = false\n"; + $conf .= "xml_handler.number_as_presence_id = true\n"; + $conf .= "\n"; + $conf .= "#error reporting hide show all errors except notices and warnings\n"; + $conf .= "error.reporting = 'E_ALL ^ E_NOTICE ^ E_WARNING'\n"; + + //write the config file + $file_handle = fopen($config_file, "w"); + if (!$file_handle) { + return; + } + fwrite($file_handle, $conf); + fclose($file_handle); +}