NobGit
public nobgit read

NobMail

Based on mailcow: dockerized

Languages

Repository composition by tracked source files.

PHP
PHP 49% JavaScript 35% HTML 9% CSS 4% Shell 2% Python 1% Lua 0% Perl 0% Ruby 0% SCSS 0%
Create file Wiki Documentation
Clone
https://nobgit.com/orgs/nobgit/nobmail.git
ssh://[email protected]:2222/orgs/nobgit/nobmail.git

Commit

[BS5] move showWhatsNewModal

77e6124b
FreddleSpl0it <[email protected]> 3 years, 11 months ago
data/web/admin.php                    |  3 +-
 data/web/inc/header.inc.php           |  1 +
 data/web/js/build/014-mailcow.js      | 59 +++++++++++++++++++++++++++++++++++
 data/web/js/site/admin.js             | 57 ---------------------------------
 data/web/templates/admin.twig         |  1 -
 data/web/templates/base.twig          |  2 ++
 data/web/templates/modals/admin.twig  | 16 ----------
 data/web/templates/modals/footer.twig | 16 ++++++++++
 8 files changed, 79 insertions(+), 76 deletions(-)

Diff

diff --git a/data/web/admin.php b/data/web/admin.php
index a6f07620..a68ec033 100644
--- a/data/web/admin.php
+++ b/data/web/admin.php
@@ -111,8 +111,7 @@ $template_data = [
   'password_complexity' => password_complexity('get'),
   'show_rspamd_global_filters' => @$_SESSION['show_rspamd_global_filters'],
   'lang_admin' => json_encode($lang['admin']),
-  'lang_datatables' => json_encode($lang['datatables']),
-  'last_login' => last_login('get', $_SESSION['mailcow_cc_username'], 7, 0)['ui']['time']
+  'lang_datatables' => json_encode($lang['datatables'])
 ];
 
 require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/footer.inc.php';
diff --git a/data/web/inc/header.inc.php b/data/web/inc/header.inc.php
index a158d82a..f62819a2 100644
--- a/data/web/inc/header.inc.php
+++ b/data/web/inc/header.inc.php
@@ -48,6 +48,7 @@ $globalVariables = [
   'app_links' => customize('get', 'app_links'),
   'is_root_uri' => (parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) == '/'),
   'uri' => $_SERVER['REQUEST_URI'],
+  'last_login' => last_login('get', $_SESSION['mailcow_cc_username'], 7, 0)['ui']['time']
 ];
 
 foreach ($globalVariables as $globalVariableName => $globalVariableValue) {
diff --git a/data/web/js/build/014-mailcow.js b/data/web/js/build/014-mailcow.js
index 5148a1f0..27bc54ce 100644
--- a/data/web/js/build/014-mailcow.js
+++ b/data/web/js/build/014-mailcow.js
@@ -343,6 +343,65 @@ $(document).ready(function() {
       localStorage.setItem('darkmode', 'true');
     }
   }
+
+  // show whats new modal
+  if (mailcow_cc_role === "admin" || mailcow_cc_role === "domainadmin"){
+    if (mailcow_info.updatedAt > last_login){
+      var parsedSeenTimestamp = parseInt(localStorage.getItem("seenChangelog"));
+      if (!isNaN(parsedSeenTimestamp) && mailcow_info.updatedAt < parsedSeenTimestamp) {
+        console.log("changelog seen");
+        return;
+      }
+      $.ajax({
+        type: 'GET',
+        url: 'https://api.github.com/repos/' + mailcow_info.project_owner + '/' + mailcow_info.project_repo + '/releases/tags/' + mailcow_info.version_tag,
+        dataType: 'json',
+        success: function (data) { 
+          var md = window.markdownit();
+          var result = md.render(data.body);
+          result = parseGithubMarkdownLinks(result);
+
+          $('#showWhatsNewModal').find(".modal-body").html(`
+            <h3>` + data.name + `</h3>
+            <span class="mt-4">` + result + `</span>
+          `);
+
+          localStorage.setItem("seenChangelog", Math.floor(Date.now() / 1000).toString());
+        }
+      });
+
+      new bootstrap.Modal(document.getElementById("showWhatsNewModal"), {
+        backdrop: 'static',
+        keyboard: false
+      }).show();
+    }
+  }
+
+  function parseGithubMarkdownLinks(inputText) {
+    var replacedText, replacePattern1;
+  
+    replacePattern1 = /(\b(https?):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gim;
+    replacedText = inputText.replace(replacePattern1, (matched, index, original, input_string) => {
+        if (matched.includes('github.com')){
+          // return short link if it's github link
+          last_uri_path = matched.split('/');
+          last_uri_path = last_uri_path[last_uri_path.length - 1];
+
+          // adjust Full Changelog link to match last git version and new git version, if link is a compare link
+          if (matched.includes('/compare/') && mailcow_info.last_version_tag !== ''){
+            matched = matched.replace(last_uri_path,  mailcow_info.last_version_tag + '...' + mailcow_info.version_tag);
+            last_uri_path = mailcow_info.last_version_tag + '...' + mailcow_info.version_tag;
+          }
+          
+          return '<a href="' + matched + '" target="_blank">' + last_uri_path + '</a><br>';
+        };
+  
+        // if it's not a github link, return complete link
+        return '<a href="' + matched + '" target="_blank">' + matched + '</a>'; 
+    });
+  
+    return replacedText;
+  }
 });
 
 
diff --git a/data/web/js/site/admin.js b/data/web/js/site/admin.js
index 6402d4c6..61268b02 100644
--- a/data/web/js/site/admin.js
+++ b/data/web/js/site/admin.js
@@ -794,61 +794,4 @@ jQuery(function($){
   $('#add_f2b_regex_row').click(function() {
       add_table_row($('#f2b_regex_table'), "f2b_regex");
   });
-
-  // show whats new modal
-  if (mailcow_info.updatedAt > last_login){
-    var parsedSeenTimestamp = parseInt(localStorage.getItem("seenChangelog"));
-    if (!isNaN(parsedSeenTimestamp) && mailcow_info.updatedAt < parsedSeenTimestamp) {
-      console.log("changelog seen");
-      return;
-    }
-    $.ajax({
-      type: 'GET',
-      url: 'https://api.github.com/repos/' + mailcow_info.project_owner + '/' + mailcow_info.project_repo + '/releases/tags/' + mailcow_info.version_tag,
-      dataType: 'json',
-      success: function (data) { 
-        var md = window.markdownit();
-        var result = md.render(data.body);
-        result = parseLinks(result);
-
-        $('#showWhatsNew').find(".modal-body").html(`
-          <h3>` + data.name + `</h3>
-          <span class="mt-4">` + result + `</span>
-        `);
-
-        localStorage.setItem("seenChangelog", Math.floor(Date.now() / 1000).toString());
-      }
-    });
-
-    new bootstrap.Modal(document.getElementById("showWhatsNew"), {
-      backdrop: 'static',
-      keyboard: false
-    }).show();
-  }
-
-  function parseLinks(inputText) {
-    var replacedText, replacePattern1;
-  
-    replacePattern1 = /(\b(https?):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gim;
-    replacedText = inputText.replace(replacePattern1, (matched, index, original, input_string) => {
-        if (matched.includes('github.com')){
-          // return short link if it's github link
-          last_uri_path = matched.split('/');
-          last_uri_path = last_uri_path[last_uri_path.length - 1];
-
-          // adjust Full Changelog link to match last git version and new git version, if link is a compare link
-          if (matched.includes('/compare/') && mailcow_info.last_version_tag !== ''){
-            matched = matched.replace(last_uri_path,  mailcow_info.last_version_tag + '...' + mailcow_info.version_tag);
-            last_uri_path = mailcow_info.last_version_tag + '...' + mailcow_info.version_tag;
-          }
-          
-          return '<a href="' + matched + '" target="_blank">' + last_uri_path + '</a><br>';
-        };
-  
-        // if it's not a github link, return complete link
-        return '<a href="' + matched + '" target="_blank">' + matched + '</a>'; 
-    });
-  
-    return replacedText;
-  }
 });
diff --git a/data/web/templates/admin.twig b/data/web/templates/admin.twig
index 33f430f4..0a70252e 100644
--- a/data/web/templates/admin.twig
+++ b/data/web/templates/admin.twig
@@ -70,6 +70,5 @@ var admin_username = '{{ mailcow_cc_username }}';
 var csrf_token = '{{ csrf_token }}';
 var pagination_size = '{{ pagination_size }}';
 var log_pagination_size = '{{ log_pagination_size }}';
-var last_login = '{{ last_login }}';
 </script>
 {% endblock %}
diff --git a/data/web/templates/base.twig b/data/web/templates/base.twig
index 88245aa1..c39ceda4 100644
--- a/data/web/templates/base.twig
+++ b/data/web/templates/base.twig
@@ -135,6 +135,8 @@
   var lang_tfa = {{ lang_tfa|raw }};
   var lang_fido2 = {{ lang_fido2|raw }};
   var docker_timeout = {{ docker_timeout|raw }} * 1000;
+  var mailcow_cc_role = '{{ mailcow_cc_role }}';
+  var last_login = '{{ last_login }}';
   var mailcow_info = {
     version_tag: '{{ mailcow_info.version_tag }}',
     last_version_tag: '{{ mailcow_info.last_version_tag }}',
diff --git a/data/web/templates/modals/admin.twig b/data/web/templates/modals/admin.twig
index 56b19d96..a67e4848 100644
--- a/data/web/templates/modals/admin.twig
+++ b/data/web/templates/modals/admin.twig
@@ -261,19 +261,3 @@
     </div>
   </div>
 </div><!-- priv key modal -->
-<!-- whats new modal -->
-<div class="modal fade" id="showWhatsNew" tabindex="-1" role="dialog" aria-hidden="true">
-  <div class="modal-dialog modal-lg">
-    <div class="modal-content">
-      <div class="modal-header">
-        <h5 class="modal-title">What's new?</h5>
-        <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
-      </div>
-      <div class="modal-body d-flex flex-column mt-2 p-4">
-        <div class="spinner-border mx-auto" role="status">
-          <span class="visually-hidden">Loading...</span>
-        </div>
-      </div>
-    </div>
-  </div>
-</div><!-- whats new modal -->
\ No newline at end of file
diff --git a/data/web/templates/modals/footer.twig b/data/web/templates/modals/footer.twig
index 352c97cb..8bb0889e 100644
--- a/data/web/templates/modals/footer.twig
+++ b/data/web/templates/modals/footer.twig
@@ -238,3 +238,19 @@
     </div>
   </div>
 </div>
+<!-- whats new modal -->
+<div class="modal fade" id="showWhatsNewModal" tabindex="-1" role="dialog" aria-hidden="true">
+  <div class="modal-dialog modal-lg">
+    <div class="modal-content">
+      <div class="modal-header">
+        <h5 class="modal-title">What's new?</h5>
+        <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
+      </div>
+      <div class="modal-body d-flex flex-column mt-2 p-4">
+        <div class="spinner-border mx-auto" role="status">
+          <span class="visually-hidden">Loading...</span>
+        </div>
+      </div>
+    </div>
+  </div>
+</div><!-- whats new modal -->