From 1b9e8ea1e8180eeeaff919c5287e5d75aca040f3 Mon Sep 17 00:00:00 2001
From: yflory <yann.flory@xwiki.com>
Date: Thu, 1 Oct 2020 16:41:06 +0200
Subject: [PATCH] Display error when opening a verioned link wiht a deleted
 version

---
 www/common/onlyoffice/inner.js | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/www/common/onlyoffice/inner.js b/www/common/onlyoffice/inner.js
index 43d4203f0..8cfbf1326 100644
--- a/www/common/onlyoffice/inner.js
+++ b/www/common/onlyoffice/inner.js
@@ -648,17 +648,41 @@ define([
                     try { obj.msg = JSON.parse(obj.msg); } catch (e) { console.error(e); }
                 });
 
+                // The version exists if we have results in the "messages" array
+                // or if we requested a x.0 version
+                var exists = !Number(s[1]) || messages.length;
+                var vHashEl;
+                Messages.oo_deletedVersion = "This version no longer exists in the history."; // XXX
+
                 if (!privateData.embed) {
                     Messages.infobar_versionHash = "You're currently viewing an old version of this document ({0})."; // XXX (duplicate from history branch)
                     var vTime = (messages[messages.length - 1] || {}).time;
                     var vTimeStr = vTime ? new Date(vTime).toLocaleString()
                                          : 'v' + privateData.ooVersionHash;
                     var vTxt = Messages._getKey('infobar_versionHash',  [vTimeStr]);
-                    var vHashEl = h('div.alert.alert-warning.cp-burn-after-reading', vTxt);
+
+                    // If we expected patched and we don't have any, it means this part
+                    // of the history has been deleted
+                    var vType = "warning";
+                    if (!exists) {
+                        vTxt = Messages.oo_deletedVersion
+                        vType = "danger";
+                    }
+
+                    vHashEl = h('div.alert.alert-'+vType+'.cp-burn-after-reading', vTxt);
                     $('#cp-app-oo-editor').prepend(vHashEl);
                 }
 
+                if (!exists) { return void UI.removeLoadingScreen(); }
+
                 loadLastDocument(cp, function () {
+                    if (cp.hash && vHashEl) {
+                        // We requested a checkpoint but we can't find it...
+                        UI.removeLoadingScreen();
+                        vHashEl.innerText = Messages.oo_deletedVersion;
+                        $(vHashEl).removeClass('alert-warning').addClass('alert-danger');
+                        return;
+                    }
                     var file = getFileType();
                     var type = common.getMetadataMgr().getPrivateData().ooType;
                     var blob = loadInitDocument(type, true);