From c1bb5fd9c1443b9b6dba57c957f5c9f2f7541feb Mon Sep 17 00:00:00 2001
From: sherzinger <sascha.herzinger@uni.lu>
Date: Thu, 17 Jan 2019 15:31:34 +0100
Subject: [PATCH] Wired report dialog together with API call (untested)

---
 frontend-js/src/main/js/GuiConnector.js    | 63 ++++++++++++----------
 frontend-js/src/main/js/ServerConnector.js |  9 ++++
 2 files changed, 43 insertions(+), 29 deletions(-)

diff --git a/frontend-js/src/main/js/GuiConnector.js b/frontend-js/src/main/js/GuiConnector.js
index eae62f0341..359960d56d 100644
--- a/frontend-js/src/main/js/GuiConnector.js
+++ b/frontend-js/src/main/js/GuiConnector.js
@@ -293,10 +293,6 @@ GuiConnector.prototype.alert = function (error, redirectIfSecurityError) {
   } else {
     var self = returnThisOrSingleton(this);
     logger.error(error);
-
-
-
-
     if (self._errorDialog === undefined) {
       var errorData = self.getErrorMessageForError(error);
       var message = errorData.message;
@@ -312,18 +308,21 @@ GuiConnector.prototype.alert = function (error, redirectIfSecurityError) {
         self._errorDialogData = document.createElement('div');
         self._errorDialog.appendChild(self._errorDialogData);
 
-        Object.keys(data).forEach(function (key, i) {
+        Object.keys(data).forEach(function (key) {
           self._errorDialogData.innerHTML += '<label>' +
               data[key].value +
-              '<input class="report-check" type="checkbox"/>' +
+              '<input class="report-check" type="checkbox" data-key="' + key + '" data-value="' + data[key].value + '"/>' +
               '<span class="ui-icon ui-icon-info" style="float: right;" title="' + data[key].tooltip + '"></span>' +
               '</label>';
         });
-        self._errorDialogData.innerHTML += '<div id="report-stacktrace">' +
-            '<h3>Stacktrace</h3>' +
-            '<div><p>' + stacktrace.value + '</p></div>' +
-            '</div>';
-
+        if (typeof stacktrace.value !== 'undefined') {
+            self._errorDialogData.innerHTML += '<div id="report-stacktrace">' +
+                '<h3>Stacktrace<span class="ui-icon ui-icon-info" style="float: right;" title="' + stacktrace.tooltip + '"></span></h3>' +
+                '<div><p>' + stacktrace.value + '</p></div>' +
+                '</div>';
+            $('#report-stacktrace')
+                .accordion({active: false, collapsible: true});
+        }
         $('.report-check')
             .checkboxradio()
             .prop('checked', true)
@@ -332,8 +331,6 @@ GuiConnector.prototype.alert = function (error, redirectIfSecurityError) {
             .controlgroup({direction: 'vertical'});
         $(self._errorDialog)
             .tooltip();
-        $('#report-stacktrace')
-            .accordion({active: false, collapsible: true});
       });
       document.body.appendChild(self._errorDialog);
       $(self._errorDialog).dialog({
@@ -345,6 +342,14 @@ GuiConnector.prototype.alert = function (error, redirectIfSecurityError) {
         modal: true,
         buttons: {
           'Submit': function () {
+            var report = {stacktrace: stacktrace.value};
+            $('.report-check').each(function () {
+              var check = $(this);
+              if (check.is(':checked')) {
+                report[check.attr('data-key')] = check.attr('data-value');
+              }
+            });
+            ServerConnector.submitErrorToMinervaNet(report);
             $(this).dialog('close');
           },
           'Cancel': function () {
@@ -354,34 +359,34 @@ GuiConnector.prototype.alert = function (error, redirectIfSecurityError) {
       }).dialog("open");
     }
 
-
-
-
   }
 };
 
 /**
  *
  * @param {Error|string} error
- * @returns {string}
+ * @returns {Object}
  */
 GuiConnector.prototype.getErrorMessageForError = function (error) {
-  var message = error;
-  if (message instanceof SecurityError) {
+  if (error instanceof SecurityError) {
     if (ServerConnector.getSessionData().getLogin() === "anonymous") {
-      message = error.message + "<p>Please <a href=\"login.xhtml?from=" + encodeURI(window.location.href) + "\">login</a> to access this resource</p>";
+      return {
+          message: error.message + "<p>Please <a href=\"login.xhtml?from=" + encodeURI(window.location.href) + "\">login</a> to access this resource</p>",
+          stack: error.stack
+      };
     } else {
-      message = error.message + "<p>Please <a href=\"login.xhtml?from=" + encodeURI(window.location.href) + "\">login</a> " +
-        "as a different user or ask your administrator to change the permissions to access this resource.</p>";
+      return {
+          message: error.message + "<p>Please <a href=\"login.xhtml?from=" + encodeURI(window.location.href) + "\">login</a> " + "as a different user or ask your administrator to change the permissions to access this resource.</p>",
+          stack: error.stack
+      };
     }
-  } else if (message instanceof ValidationError) {
-    message = error.message;
-  } else if (message instanceof GuiMessageError) {
-    message = error.message;
-  } else if (message instanceof Error) {
-    message = "Unexpected error occurred:<p>" + error.message + "</p>";
+  } else if (error instanceof ValidationError || error instanceof GuiMessageError || error instanceof Error) {
+    return {
+        message: error.message,
+        stack: error.stack
+    };
   }
-  return message;
+  return { message: error };
 };
 
 /**
diff --git a/frontend-js/src/main/js/ServerConnector.js b/frontend-js/src/main/js/ServerConnector.js
index 756586da83..937a75cc45 100644
--- a/frontend-js/src/main/js/ServerConnector.js
+++ b/frontend-js/src/main/js/ServerConnector.js
@@ -738,6 +738,10 @@ ServerConnector.getFullOverlayElementUrl = function (queryParams, filterParams)
 
 };
 
+ServerConnector.getSubmitErrorToMinervaNetUrl = function () {
+    return this.getApiBaseUrl() + 'minervanet/submitError';
+};
+
 ServerConnector.idsToString = function (ids) {
   var result = "";
   if (ids !== undefined) {
@@ -2679,5 +2683,10 @@ ServerConnector.getSubmapConnections = function () {
   });
 };
 
+ServerConnector.submitErrorToMinervaNet = function (report) {
+  var self = this;
+  return self.sendPostRequest(self.getSubmitErrorToMinervaNetUrl(), report);
+};
+
 
 module.exports = ServerConnector;
-- 
GitLab