Upgrade - Source Code: Preview link to view list of changed files before upgrading.

This commit is contained in:
fusionate 2024-05-03 17:32:17 -06:00
parent 80c5e589ab
commit 7ec902add2
No known key found for this signature in database
2 changed files with 235 additions and 22 deletions

View File

@ -900,6 +900,81 @@ $text['header-database_type']['zh-cn'] = "数据库类型";
$text['header-database_type']['ja-jp'] = "データベースタイプ";
$text['header-database_type']['ko-kr'] = "데이터베이스 유형";
$text['header-source_code_upgrade_preview']['en-us'] = "Source Code Upgrade Preview";
$text['header-source_code_upgrade_preview']['en-gb'] = "Source Code Upgrade Preview";
$text['header-source_code_upgrade_preview']['ar-eg'] = "معاينة ترقية كود المصدر";
$text['header-source_code_upgrade_preview']['de-at'] = "Vorschau des Quellcode-Upgrades";
$text['header-source_code_upgrade_preview']['de-ch'] = "Vorschau des Quellcode-Upgrades";
$text['header-source_code_upgrade_preview']['de-de'] = "Vorschau des Quellcode-Upgrades";
$text['header-source_code_upgrade_preview']['el-gr'] = "Προεπισκόπηση αναβάθμισης πηγαίου κώδικα";
$text['header-source_code_upgrade_preview']['es-cl'] = "Vista previa de actualización del código fuente";
$text['header-source_code_upgrade_preview']['es-mx'] = "Vista previa de actualización del código fuente";
$text['header-source_code_upgrade_preview']['fr-ca'] = "Aperçu de la mise à niveau du code source";
$text['header-source_code_upgrade_preview']['fr-fr'] = "Aperçu de la mise à niveau du code source";
$text['header-source_code_upgrade_preview']['he-il'] = "תצוגה מקדימה של שדרוג קוד מקור";
$text['header-source_code_upgrade_preview']['it-it'] = "Anteprima dell'aggiornamento del codice sorgente";
$text['header-source_code_upgrade_preview']['nl-nl'] = "Voorbeeld van broncode-upgrade";
$text['header-source_code_upgrade_preview']['pl-pl'] = "Podgląd aktualizacji kodu źródłowego";
$text['header-source_code_upgrade_preview']['pt-br'] = "Visualização da atualização do código-fonte";
$text['header-source_code_upgrade_preview']['pt-pt'] = "Visualização da atualização do código-fonte";
$text['header-source_code_upgrade_preview']['ro-ro'] = "Previzualizare upgrade cod sursă";
$text['header-source_code_upgrade_preview']['ru-ru'] = "Предварительный просмотр обновления исходного кода";
$text['header-source_code_upgrade_preview']['sv-se'] = "Förhandsgranskning av källkodsuppgradering";
$text['header-source_code_upgrade_preview']['uk-ua'] = "Попередній перегляд оновлення вихідного коду";
$text['header-source_code_upgrade_preview']['zh-cn'] = "源代码升级预览";
$text['header-source_code_upgrade_preview']['ja-jp'] = "ソースコードのアップグレードプレビュー";
$text['header-source_code_upgrade_preview']['ko-kr'] = "소스 코드 업그레이드 미리보기";
$text['description-source_code_changes_found']['en-us'] = "The following APP_NAME source code files have been changed since you last upgraded...";
$text['description-source_code_changes_found']['en-gb'] = "The following APP_NAME source code files have been changed since you last upgraded...";
$text['description-source_code_changes_found']['ar-eg'] = "تم تغيير ملفات كود مصدر APP_NAME التالية منذ آخر ترقية...";
$text['description-source_code_changes_found']['de-at'] = "Die folgenden APP_NAME-Quellcodedateien wurden seit Ihrem letzten Upgrade geändert ...";
$text['description-source_code_changes_found']['de-ch'] = "Die folgenden APP_NAME-Quellcodedateien wurden seit Ihrem letzten Upgrade geändert ...";
$text['description-source_code_changes_found']['de-de'] = "Die folgenden APP_NAME-Quellcodedateien wurden seit Ihrem letzten Upgrade geändert ...";
$text['description-source_code_changes_found']['el-gr'] = "Τα ακόλουθα αρχεία πηγαίου κώδικα της APP_NAME έχουν αλλάξει από την τελευταία αναβάθμιση...";
$text['description-source_code_changes_found']['es-cl'] = "Los siguientes archivos de código fuente de APP_NAME se han modificado desde la última vez que actualizaste...";
$text['description-source_code_changes_found']['es-mx'] = "Los siguientes archivos de código fuente de APP_NAME se han modificado desde la última vez que actualizaste...";
$text['description-source_code_changes_found']['fr-ca'] = "Les fichiers de code source APP_NAME suivants ont été modifiés depuis votre dernière mise à niveau...";
$text['description-source_code_changes_found']['fr-fr'] = "Les fichiers de code source APP_NAME suivants ont été modifiés depuis votre dernière mise à niveau...";
$text['description-source_code_changes_found']['he-il'] = "I seguenti file del codice sorgente APP_NAME sono stati modificati dall'ultimo aggiornamento...";
$text['description-source_code_changes_found']['it-it'] = "I seguenti file del codice sorgente APP_NAME sono stati modificati dall'ultimo aggiornamento...";
$text['description-source_code_changes_found']['nl-nl'] = "De volgende broncodebestanden van APP_NAME zijn gewijzigd sinds u voor het laatst een upgrade heeft uitgevoerd...";
$text['description-source_code_changes_found']['pl-pl'] = "Następujące pliki kodu źródłowego aplikacji APP_NAME zostały zmienione od czasu ostatniej aktualizacji...";
$text['description-source_code_changes_found']['pt-br'] = "Os seguintes arquivos de código-fonte APP_NAME foram alterados desde a última atualização...";
$text['description-source_code_changes_found']['pt-pt'] = "Os seguintes arquivos de código-fonte APP_NAME foram alterados desde a última atualização...";
$text['description-source_code_changes_found']['ro-ro'] = "Următoarele fișiere de cod sursă APP_NAME au fost modificate de la ultima actualizare...";
$text['description-source_code_changes_found']['ru-ru'] = "Следующие файлы исходного кода приложения APP_NAME были изменены с момента последнего обновления...";
$text['description-source_code_changes_found']['sv-se'] = "Följande källkodsfiler för APP_NAME har ändrats sedan du senast uppgraderade...";
$text['description-source_code_changes_found']['uk-ua'] = "Наступні файли вихідного коду APP_NAME було змінено після останнього оновлення...";
$text['description-source_code_changes_found']['zh-cn'] = "自您上次升级以来,以下 APP_NAME 源代码文件已更改...";
$text['description-source_code_changes_found']['ja-jp'] = "次の APP_NAME ソース コード ファイルは、最後にアップグレードしてから変更されています...";
$text['description-source_code_changes_found']['ko-kr'] = "마지막 업그레이드 이후 다음 APP_NAME 소스 코드 파일이 변경되었습니다.";
$text['description-source_code_no_changes_found']['en-us'] = "No APP_NAME source code changes were detected.";
$text['description-source_code_no_changes_found']['en-gb'] = "No APP_NAME source code changes were detected.";
$text['description-source_code_no_changes_found']['ar-eg'] = "لم يتم اكتشاف أي تغييرات في كود مصدر APP_NAME.";
$text['description-source_code_no_changes_found']['de-at'] = "Es wurden keine Änderungen am APP_NAME-Quellcode festgestellt.";
$text['description-source_code_no_changes_found']['de-ch'] = "Es wurden keine Änderungen am APP_NAME-Quellcode festgestellt.";
$text['description-source_code_no_changes_found']['de-de'] = "Es wurden keine Änderungen am APP_NAME-Quellcode festgestellt.";
$text['description-source_code_no_changes_found']['el-gr'] = "Δεν εντοπίστηκαν αλλαγές στον πηγαίο κώδικα της εφαρμογής APP_NAME.";
$text['description-source_code_no_changes_found']['es-cl'] = "No se detectaron cambios en el código fuente de APP_NAME.";
$text['description-source_code_no_changes_found']['es-mx'] = "No se detectaron cambios en el código fuente de APP_NAME.";
$text['description-source_code_no_changes_found']['fr-ca'] = "Aucune modification du code source de APP_NAME n'a été détectée.";
$text['description-source_code_no_changes_found']['fr-fr'] = "Aucune modification du code source de APP_NAME n'a été détectée.";
$text['description-source_code_no_changes_found']['he-il'] = "לא זוהו שינויים בקוד המקור של APP_NAME.";
$text['description-source_code_no_changes_found']['it-it'] = "Non è stata rilevata alcuna modifica al codice sorgente APP_NAME.";
$text['description-source_code_no_changes_found']['nl-nl'] = "Er zijn geen wijzigingen in de broncode van APP_NAME gedetecteerd.";
$text['description-source_code_no_changes_found']['pl-pl'] = "Nie wykryto żadnych zmian w kodzie źródłowym aplikacji APP_NAME.";
$text['description-source_code_no_changes_found']['pt-br'] = "Nenhuma alteração no código-fonte do APP_NAME foi detectada.";
$text['description-source_code_no_changes_found']['pt-pt'] = "Nenhuma alteração no código-fonte do APP_NAME foi detectada.";
$text['description-source_code_no_changes_found']['ro-ro'] = "Nu au fost detectate modificări ale codului sursă APP_NAME.";
$text['description-source_code_no_changes_found']['ru-ru'] = "Никаких изменений исходного кода приложения APP_NAME не обнаружено.";
$text['description-source_code_no_changes_found']['sv-se'] = "Inga ändringar av källkoden för APP_NAME upptäcktes.";
$text['description-source_code_no_changes_found']['uk-ua'] = "Змін вихідного коду APP_NAME не виявлено.";
$text['description-source_code_no_changes_found']['zh-cn'] = "未检测到 APP_NAME 源代码更改。";
$text['description-source_code_no_changes_found']['ja-jp'] = "APP_NAME ソース コードの変更は検出されませんでした。";
$text['description-source_code_no_changes_found']['ko-kr'] = "APP_NAME 소스 코드 변경사항이 감지되지 않았습니다.";
$text['description-upgrade_source']['en-us'] = "Updates FusionPBX source files from the repository.";
$text['description-upgrade_source']['en-gb'] = "Updates FusionPBX source files from the repository.";
$text['description-upgrade_source']['ar-eg'] = "(أحدث ملفات مصادر (فيوس بي إكس من المستودع";
@ -1275,4 +1350,30 @@ $text['title-cli_upgrade']['zh-cn'] = "";
$text['title-cli_upgrade']['ja-jp'] = "";
$text['title-cli_upgrade']['ko-kr'] = "";
?>
$text['button-preview']['en-us'] = "Preview";
$text['button-preview']['en-gb'] = "Preview";
$text['button-preview']['ar-eg'] = "معاينة";
$text['button-preview']['de-at'] = "Vorschau";
$text['button-preview']['de-ch'] = "Vorschau";
$text['button-preview']['de-de'] = "Vorschau";
$text['button-preview']['el-gr'] = "Προεπισκόπηση";
$text['button-preview']['es-cl'] = "Prevista";
$text['button-preview']['es-mx'] = "Prevista";
$text['button-preview']['fr-ca'] = "Aperçu";
$text['button-preview']['fr-fr'] = "Aperçu";
$text['button-preview']['he-il'] = "תצוגה מקדימה";
$text['button-preview']['it-it'] = "Anteprima";
$text['button-preview']['nl-nl'] = "preview";
$text['button-preview']['pl-pl'] = "Podgląd";
$text['button-preview']['pt-br'] = "Visualização";
$text['button-preview']['pt-pt'] = "Pré-Visualização";
$text['button-preview']['ro-ro'] = "previzualizare";
$text['button-preview']['ru-ru'] = "Предпросмотр";
$text['button-preview']['sv-se'] = "Förhandsgranska";
$text['button-preview']['uk-ua'] = "Огляд";
$text['button-preview']['tr-tr'] = "Ön izleme";
$text['button-preview']['zh-cn'] = "预览";
$text['button-preview']['ja-jp'] = "プレビュー";
$text['button-preview']['ko-kr'] = "시사";
?>

View File

@ -160,6 +160,57 @@
if (is_array($updateable_repos)) { $repos_count = @sizeof($updateable_repos); }
$repos_count++;
//process the http get (source preview)
if (!empty($_GET['preview'])) {
if (!empty($updateable_repos)) {
foreach ($updateable_repos as $app_path => $app) {
$repo_info = git_repo_info($app_path);
if (empty($repo_info)) { continue; }
$source_code[$app['app']] = $app_path;
}
}
if ($_GET['preview'] == 'core') {
$command = 'cd '.$_SERVER['PROJECT_ROOT'].' && git fetch && git diff --name-only @ @{u}';
}
else if (array_key_exists($_GET['preview'], $source_code)) {
$command = 'cd '.$source_code[$_GET['preview']].' && git fetch && git diff --name-only @ @{u}';
}
if (!empty($command)) {
$response = explode(PHP_EOL, shell_exec($command));
// simplify response
if (!empty($response)) {
foreach ($response as $l => $line) {
if (empty($line)) { unset($response[$l]); }
if (substr($line, 0, 8) == 'remote: ') { unset($response[$l]); }
if (substr($line, 0, 8) == 'remote: ') { unset($response[$l]); }
if (substr($line, 0, 19) == 'Unpacking objects: ') { unset($response[$l]); }
if (substr($line, 0, 5) == 'From ') { unset($response[$l]); }
if (substr($line, 0, 3) == ' ') { unset($response[$l]); }
}
}
echo "<button type='button' class='btn btn-default' style='float: right;' onclick=\"$('#source_preview_layer').fadeOut(200);\">".$text['button-close']."</button>\n";
echo "<b>".$text['header-source_code_upgrade_preview']."</b>\n";
echo "<br><br>\n";
if (!empty($response) && is_array($response)) {
echo str_replace('APP_NAME', (!empty($_GET['title']) ? "<strong>".$_GET['title']."</strong>" : null), $text['description-source_code_changes_found']);
echo "<br><br><br>\n";
echo "<div style='width: 100%; max-height: 250px; overflow: auto; border: 1px solid ".($_SESSION['theme']['table_row_border_color']['text'] ?? '#c5d1e5')."; padding: 12px 15px; background-color: ".($_SESSION['theme']['table_row_background_color_light']['text'] ?? '#fff')."; font-family: monospace; font-size: 85%; color: green;'>\n";
if (!empty($response) && is_array($response)) {
echo implode("<br>\n<hr style='margin: 3px 0;'>\n", $response);
}
echo "</div>\n";
}
else {
echo str_replace('APP_NAME', (!empty($_GET['title']) ? "<strong>".$_GET['title']."</strong>" : null), $text['description-source_code_no_changes_found']);
}
echo "<br><br>\n";
echo "<center>\n";
echo " <button type='button' class='btn btn-default' style='margin-top: 15px;' onclick=\"$('#source_preview_layer').fadeOut(200);\">".$text['button-close']."</button>\n";
echo "</center>\n";
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);
@ -170,6 +221,46 @@
$document['title'] = $text['title-upgrade'];
require_once "resources/header.php";
//source preview layer
echo "<style>\n";
echo " #source_preview_layer {\n";
echo " z-index: 999999;\n";
echo " position: absolute;\n";
echo " left: 0px;\n";
echo " top: 0px;\n";
echo " right: 0px;\n";
echo " bottom: 0px;\n";
echo " text-align: center;\n";
echo " vertical-align: middle;\n";
echo " }\n";
echo " #source_preview_container {\n";
echo " display: block;\n";
echo " overflow: auto;\n";
echo " background-color: #fff;\n";
echo " padding: 25px 25px;\n";
if (http_user_agent('mobile')) {
echo " margin: 0;\n";
}
else {
echo " margin: auto 10%;\n";
}
echo " text-align: left;\n";
echo " -webkit-box-shadow: 0px 1px 20px #888;\n";
echo " -moz-box-shadow: 0px 1px 20px #888;\n";
echo " box-shadow: 0px 1px 20px #888;\n";
echo " }\n";
echo "</style>\n";
echo "<div id='source_preview_layer' style='display: none;'>\n";
echo " <table cellpadding='0' cellspacing='0' border='0' width='100%' height='100%'>\n";
echo " <tr>\n";
echo " <td align='center' valign='middle'>\n";
echo " <span id='source_preview_container'></span>\n";
echo " </td>\n";
echo " </tr>\n";
echo " </table>\n";
echo "</div>\n";
//show the content
echo "<form name='frm' id='frm' method='post'>\n";
@ -206,7 +297,7 @@
echo "<table width='100%' border='0' cellpadding='0' cellspacing='0'>\n";
echo "<tr onclick=\"if (document.getElementById('do_source')) { document.getElementById('do_source').checked = !document.getElementById('do_source').checked; if (document.getElementById('do_source').checked == false) { document.getElementById('view_source_code_options').checked = false; } }\">\n";
echo " <td width='30%' class='vncell' style='vertical-align: middle;'>\n";
echo " ".(isset($_SESSION['theme']['title']['text']) ?$_SESSION['theme']['title']['text'] : 'FusionPBX')."\n";
echo " ".(isset($_SESSION['theme']['title']['text']) ? $_SESSION['theme']['title']['text'] : 'FusionPBX')."\n";
echo " </td>\n";
echo " <td width='70%' class='vtable' style='height: 50px; cursor: pointer;'>\n";
echo " <input type='checkbox' name='action[upgrade_source]' id='do_source' value='1' onclick=\"event.stopPropagation(); if (this.checked == false) { document.getElementById('view_source_code_options').checked = false; }\">\n";
@ -223,31 +314,35 @@
}
if ($branch_return_value == 0 && $commit_return_value == 0) {
echo " <a href='https://github.com/fusionpbx/fusionpbx/compare/".$git_current_commit."...".$git_current_branch."' target='_blank' title='".$git_current_commit."' onclick=\"event.stopPropagation();\"><i>".$git_current_branch."</i></a>";
echo "&nbsp;&nbsp;<button type='button' class='btn btn-link btn-xs' onclick=\"event.stopPropagation(); source_preview('core','".(isset($_SESSION['theme']['title']['text']) ? $_SESSION['theme']['title']['text'] : 'FusionPBX')."');\">".$text['button-preview']."</button>\n";
}
echo " </td>\n";
echo "</tr>\n";
echo "</table>\n";
foreach ($updateable_repos as $repo => $app) {
$repo_info = git_repo_info($repo);
$pull_method = substr($repo_info['url'], 0, 4) == 'http' ? 'http' : 'ssh';
if (!$repo_info) { continue; }
echo "<table width='100%' border='0' cellpadding='0' cellspacing='0'>\n";
echo "<tr onclick=\"if (document.getElementById('do_".$app['app']."')) { document.getElementById('do_".$app['app']."').checked = !document.getElementById('do_".$app['app']."').checked; if (document.getElementById('do_".$app['app']."').checked == false) { document.getElementById('view_source_code_options').checked = false; } }\">\n";
echo " <td width='30%' class='vncell' style='vertical-align: middle;'>\n";
echo " ".$app['name']."\n";
echo " </td>\n";
echo " <td width='70%' class='vtable' style='height: 50px; cursor: ".($pull_method == 'http' ? "pointer;'" : "help;' title=\"".$text['message-upgrade_manually'].": ".$repo_info['url']."\"").">\n";
if ($pull_method == 'http') {
echo " <input type='checkbox' name='action[optional_apps][]' class='do_optional_app' id='do_".$app['app']."' value='".$app['app']."' onclick=\"event.stopPropagation(); if (this.checked == false) { document.getElementById('view_source_code_options').checked = false; }\"> &nbsp;".$app['description']."<br />\n";
if (!empty($updateable_repos) && is_array($updateable_repos)) {
foreach ($updateable_repos as $app_path => $app) {
$repo_info = git_repo_info($app_path);
$pull_method = substr($repo_info['url'], 0, 4) == 'http' ? 'http' : 'ssh';
if (empty($repo_info)) { continue; }
echo "<table width='100%' border='0' cellpadding='0' cellspacing='0'>\n";
echo "<tr onclick=\"if (document.getElementById('do_".$app['app']."')) { document.getElementById('do_".$app['app']."').checked = !document.getElementById('do_".$app['app']."').checked; if (document.getElementById('do_".$app['app']."').checked == false) { document.getElementById('view_source_code_options').checked = false; } }\">\n";
echo " <td width='30%' class='vncell' style='vertical-align: middle;'>\n";
echo " ".$app['name']."\n";
echo " </td>\n";
echo " <td width='70%' class='vtable' style='height: 50px; cursor: ".($pull_method == 'http' ? "pointer;'" : "help;' title=\"".$text['message-upgrade_manually'].": ".$repo_info['url']."\"").">\n";
if ($pull_method == 'http') {
echo " <input type='checkbox' name='action[optional_apps][]' class='do_optional_app' id='do_".$app['app']."' value='".$app['app']."' onclick=\"event.stopPropagation(); if (this.checked == false) { document.getElementById('view_source_code_options').checked = false; }\"> &nbsp;".$app['description']."<br />\n";
}
else {
echo " <i class='fas fa-ban mr-3' style='opacity: 0.3; margin: 0 1px;'></i> ".$app['description']."<br>\n";
}
echo " <span style='font-weight: 600;'>".$app['version']."</span>&nbsp;&nbsp;<i><a href='".str_replace(['git@','.com:'],['https://','.com/'], $repo_info['url'])."/compare/".$repo_info['commit']."...".$repo_info['branch']." 'target='_blank' title='".$repo_info['commit']."'>".$repo_info['branch']."</i></a>\n";
echo " &nbsp;&nbsp;<button type='button' class='btn btn-link btn-xs' onclick=\"event.stopPropagation(); source_preview('".$app['app']."','".$app['name']."');\">".$text['button-preview']."</button>\n";
echo " </td>\n";
echo "</tr>\n";
echo "</table>\n";
}
else {
echo " <i class='fas fa-ban mr-3' style='opacity: 0.3; margin: 0 1px;'></i> ".$app['description']."<br>\n";
}
echo " <span style='font-weight: 600;'>".$app['version']."</span>&nbsp;&nbsp;<i><a href='".str_replace(['git@','.com:'],['https://','.com/'], $repo_info['url'])."/compare/".$repo_info['commit']."...".$repo_info['branch']." 'target='_blank' title='".$repo_info['commit']."'>".$repo_info['branch']."</i></a>\n";
echo " </td>\n";
echo "</tr>\n";
echo "</table>\n";
}
echo "</div>\n";
@ -374,7 +469,24 @@
unset($_SESSION["response"]);
}
//source preview script
echo "<script>\n";
echo "function source_preview(source, title) {\n";
echo " $.ajax({\n";
echo " url: '".$_SERVER['PHP_SELF']."?preview=' + source + '&title=' + title,\n";
echo " type: 'get',\n";
echo " processData: false,\n";
echo " contentType: false,\n";
echo " cache: false,\n";
echo " success: function(response){\n";
echo " $('#source_preview_container').html(response);\n";
echo " $('#source_preview_layer').fadeIn(400);\n";
echo " }\n";
echo " });\n";
echo "}\n";
echo "</script>\n";
//include the footer
require_once "resources/footer.php";
?>
?>