Portions created by the Initial Developer are Copyright (C) 2008-2022 the Initial Developer. All Rights Reserved. Contributor(s): Mark J Crane */ //set a timeout set_time_limit(15*60); //15 minutes //includes files require_once dirname(__DIR__, 2) . "/resources/require.php"; require_once "resources/check_auth.php"; //check the permission if ( !permission_exists('upgrade_source') && !permission_exists('upgrade_schema') && !permission_exists('upgrade_apps') && !permission_exists('menu_restore') && !permission_exists('group_edit') ) { echo "access denied"; exit; } //add multi-lingual support $language = new text; $text = $language->get(); //set a default message_timeout $message_timeout = 4*1000; //process the http post if (sizeof($_POST) > 0) { //get the action options: source, schema, app_defaults, menu_defaults, permisisons $action = $_POST['action']; //run source update if (!empty($action["upgrade_source"]) && permission_exists("upgrade_source") && !is_dir("/usr/share/examples/fusionpbx")) { $project_update_status = git_pull($_SERVER["PROJECT_ROOT"]); $_SESSION["response"]["upgrade_source"] = $project_update_status['message']; if (!empty($project_update_status['result'])) { message::add($text['message-upgrade_source'], null, $message_timeout); } else { message::add($text['message-upgrade_source_failed'], 'negative', $message_timeout); } } //run app source updates if (!empty($action["update_apps"]) && permission_exists("upgrade_source")) { $app_updates = $_POST['app_list']; $updateable_repos = git_find_repos($_SERVER["PROJECT_ROOT"]."/app"); if (is_array($app_updates)) { $apps_updated = true; foreach ($updateable_repos as $repo => $apps) { if (array_search(basename($repo), $app_updates) !== false) { $git_result = git_pull($repo); $_SESSION["response"]["update_apps"][basename($repo)] = $git_result['message']; } if (!$git_result['result']) { $apps_updated = false; } } } if ($apps_updated) { message::add($text['message-upgrade_source'], null, $message_timeout); } else { message::add($text['message-upgrade_source_failed'], 'negative', $message_timeout); } } //load an array of the database schema and compare it with the active database if (!empty($action["upgrade_schema"]) && permission_exists("upgrade_schema")) { require_once "resources/classes/schema.php"; $obj = new schema(); if (isset($action["data_types"]) && $action["data_types"] == 'true') { $obj->data_types = true; } $_SESSION["response"]["schema"] = $obj->schema("html"); message::add($text['message-upgrade_schema'], null, $message_timeout); } //process the apps defaults if (!empty($action["app_defaults"]) && permission_exists("upgrade_apps")) { require_once "resources/classes/domains.php"; $domain = new domains; $domain->upgrade(); message::add($text['message-upgrade_apps'], null, $message_timeout); } //restore defaults of the selected menu if (!empty($action["menu_defaults"]) && permission_exists("menu_restore")) { $sel_menu = explode('|', check_str($_POST["sel_menu"])); $menu_uuid = $sel_menu[0]; $menu_language = $sel_menu[1]; $included = true; require_once("core/menu/menu_restore_default.php"); unset($sel_menu); message::add($text['message-upgrade_menu'], null, $message_timeout); } //restore default permissions if (!empty($action["permission_defaults"]) && permission_exists("group_edit")) { $included = true; require_once("core/groups/permissions_default.php"); message::add($text['message-upgrade_permissions'], null, $message_timeout); } //redirect the browser header("Location: ".PROJECT_PATH."/core/upgrade/index.php"); exit; } //adjust color and initialize step counter $step = 1; $step_color = isset($_SESSION['theme']['upgrade_step_color']['text']) ? $_SESSION['theme']['upgrade_step_color']['text'] : color_adjust((!empty($_SESSION['theme']['form_table_label_background_color']['text']) ? $_SESSION['theme']['form_table_label_background_color']['text'] : '#e5e9f0'), -0.1); $step_container_style = "width: 30px; height: 30px; border: 2px solid ".$step_color."; border-radius: 50%; float: left; text-align: center; vertical-align: middle;"; $step_number_style = "font-size: 150%; font-weight: 600; color: ".$step_color.";"; //include the header and set the title $document['title'] = $text['title-upgrade']; require_once "resources/header.php"; //show the content echo "
\n"; echo "
\n"; echo "
".$text['header-upgrade']."
\n"; echo "
\n"; echo button::create(['type'=>'submit','label'=>$text['button-upgrade_execute'],'icon'=>$_SESSION['theme']['button_icon_save'],'id'=>'btn_save','collapse'=>'never']); echo "
\n"; echo "
\n"; echo "
\n"; echo $text['description-upgrade']; echo "

"; if (permission_exists("upgrade_source") && !is_dir("/usr/share/examples/fusionpbx") && is_writeable($_SERVER["PROJECT_ROOT"]."/.git")) { echo "\n"; echo "\n"; echo " \n"; echo " \n"; echo "\n"; echo "
\n"; echo "
".$step."
"; echo " ".$text['label-upgrade_source']; echo "
\n"; echo "  ".$text['description-upgrade_source']."
\n"; // show current git version info chdir($_SERVER["PROJECT_ROOT"]); exec("git rev-parse --abbrev-ref HEAD 2>&1", $git_current_branch, $branch_return_value); $git_current_branch = $git_current_branch[0]; exec("git log --pretty=format:'%H' -n 1 2>&1", $git_current_commit, $commit_return_value); $git_current_commit = $git_current_commit[0]; if (($branch_return_value == 0) && ($commit_return_value == 0)) { echo $text['label-git_branch'].' '.$git_current_branch." \n"; //echo $text['label-git_commit'].' '." "; echo " \n"; echo $git_current_commit . "
\n"; echo ""; } echo "
\n"; $step++; // find and show apps $updateable_repos = git_find_repos($_SERVER["PROJECT_ROOT"]."/app"); echo "\n"; echo "\n"; echo " \n"; echo " \n"; echo "\n"; echo "
\n"; echo "
".$step."
"; echo " ".$text['label-update_apps']; echo "
\n"; echo "  ".$text['description-update_apps']."\n"; echo ""; echo "
\n"; echo "\n"; $step++; } if (permission_exists("upgrade_schema")) { echo "\n"; echo "\n"; echo " \n"; echo " \n"; echo "\n"; echo "
\n"; echo "
".$step."
"; echo " ".$text['label-upgrade_schema']; echo "
\n"; echo "  ".$text['description-upgrade_schema']."\n"; echo "
\n"; echo "\n"; $step++; } if (permission_exists("upgrade_apps")) { echo "\n"; echo "\n"; echo " \n"; echo " \n"; echo "\n"; echo "
\n"; echo "
".$step."
"; echo " ".$text['label-upgrade_apps']; echo "
\n"; echo "  ".$text['description-upgrade_apps']."\n"; echo "
\n"; $step++; } if (permission_exists("menu_restore")) { echo "\n"; echo "\n"; echo " \n"; echo " \n"; echo "\n"; echo "
\n"; echo "
".$step."
"; echo " ".$text['label-upgrade_menu']; echo "
\n"; echo ""; echo ""; echo "  ".$text['description-upgrade_menu']; echo "
\n"; $step++; } if (permission_exists("group_edit")) { echo "\n"; echo "\n"; echo " \n"; echo " \n"; echo "\n"; echo "
\n"; echo "
".$step."
"; echo " ".$text['label-upgrade_permissions']; echo "
\n"; echo "  ".$text['description-upgrade_permissions']."\n"; echo "
\n"; $step++; } echo "
\n"; echo "

"; if (!empty($_SESSION["response"]) && is_array($_SESSION["response"])) { foreach($_SESSION["response"] as $part => $response){ echo "".$text["label-results"]." - ".$text["label-${part}"]; echo "

"; if ($part == "update_apps") { echo "
";
				foreach ($response as $app_name => $app_response) {
					foreach ($app_response as $response_line) {
						echo $app_name.": ".htmlspecialchars($response_line) . "\n";
					}
				}
				echo "
"; } elseif (is_array($response)) { echo "
";
				echo implode("\n", $response);
				echo "
"; } else { echo $response; } echo "

"; } unset($_SESSION["response"]); } //include the footer require_once "resources/footer.php"; ?>