From e07e1305a43c23bd83457fed1f82d0370708b865 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Tue, 4 Oct 2022 14:17:08 +0300 Subject: [PATCH] [DE] Apply edit restrictions for protected document --- .../main/lib/controller/ReviewChanges.js | 6 ++-- .../main/app/controller/DocProtection.js | 35 ++++++++++++++++++- .../main/app/controller/FormsTab.js | 7 ++++ 3 files changed, 45 insertions(+), 3 deletions(-) diff --git a/apps/common/main/lib/controller/ReviewChanges.js b/apps/common/main/lib/controller/ReviewChanges.js index 3691dba1d..102289694 100644 --- a/apps/common/main/lib/controller/ReviewChanges.js +++ b/apps/common/main/lib/controller/ReviewChanges.js @@ -651,8 +651,10 @@ define([ this.turnDisplayMode(item.value); if (!this.appConfig.isEdit && !this.appConfig.isRestrictedEdit) Common.localStorage.setItem(this.view.appPrefix + "review-mode", item.value); // for viewer - else if (item.value=='markup' || item.value=='simple') + else if (item.value=='markup' || item.value=='simple') { Common.localStorage.setItem(this.view.appPrefix + "review-mode-editor", item.value); // for editor save only markup modes + Common.Utils.InternalSettings.set(this.view.appPrefix + "review-mode-editor", item.value); + } Common.NotificationCenter.trigger('edit:complete', this.view); }, @@ -871,7 +873,7 @@ define([ !val && (val = me.appConfig.customization ? me.appConfig.customization.reviewDisplay : undefined); val = /^(original|final|markup|simple)$/i.test(val) ? val.toLocaleLowerCase() : 'markup'; } - + Common.Utils.InternalSettings.set(me.view.appPrefix + "review-mode-editor", val); me.turnDisplayMode(val); // load display mode for all modes (viewer or editor) me.view.turnDisplayMode(val); diff --git a/apps/documenteditor/main/app/controller/DocProtection.js b/apps/documenteditor/main/app/controller/DocProtection.js index 6c8fe6c2b..02860a1ce 100644 --- a/apps/documenteditor/main/app/controller/DocProtection.js +++ b/apps/documenteditor/main/app/controller/DocProtection.js @@ -173,8 +173,8 @@ define([ var props = me.api.asc_getDocumentProtection(), isProtected = props && (props[0] === Asc.c_oAscEDocProtect.ReadOnly || props[0] === Asc.c_oAscEDocProtect.Comments || props[0] === Asc.c_oAscEDocProtect.TrackedChanges || props[0] === Asc.c_oAscEDocProtect.Forms); - me.view.btnProtectDoc.toggle(!!isProtected, true); + props && me.applyRestrictions(props[0]); }); }, @@ -183,6 +183,20 @@ define([ isProtected = props && (props[0] === Asc.c_oAscEDocProtect.ReadOnly || props[0] === Asc.c_oAscEDocProtect.Comments || props[0] === Asc.c_oAscEDocProtect.TrackedChanges || props[0] === Asc.c_oAscEDocProtect.Forms); this.view && this.view.btnProtectDoc.toggle(isProtected, true); + + // off preview forms + var forms = this.getApplication().getController('FormsTab'); + forms && forms.changeViewFormMode(false); + + // off preview review changes + var review = this.getApplication().getController('Common.Controllers.ReviewChanges'); + if (review && review.isPreviewChangesMode()) { + var value = Common.Utils.InternalSettings.get("de-review-mode-editor") || 'markup'; + review.turnDisplayMode(value); + review.view && review.view.turnDisplayMode(value); + } + + this.applyRestrictions(props[0]); Common.NotificationCenter.trigger('protect:doclock', props); }, @@ -200,6 +214,25 @@ define([ }; } return this._state.docProtection; + }, + + applyRestrictions: function(type) { + if (type === Asc.c_oAscEDocProtect.ReadOnly) { + this.api.asc_setViewMode(true); + } else if (type === Asc.c_oAscEDocProtect.Comments) { + this.appConfig.canComments && this.api.asc_setRestriction(Asc.c_oAscRestrictionType.OnlyComments); + this.api.asc_setViewMode(!this.appConfig.canComments || !this.appConfig.isEdit && !this.appConfig.isRestrictedEdit); + } else if (type === Asc.c_oAscEDocProtect.Forms) { + this.appConfig.canFillForms && this.api.asc_setRestriction(Asc.c_oAscRestrictionType.OnlyForms); + this.api.asc_setViewMode(!this.appConfig.canFillForms || !this.appConfig.isEdit && !this.appConfig.isRestrictedEdit); + } else { // none or tracked changes + this.api.asc_setViewMode(!this.appConfig.isEdit && !this.appConfig.isRestrictedEdit); + if (this.appConfig.isRestrictedEdit) { + this.appConfig.canComments && this.api.asc_setRestriction(Asc.c_oAscRestrictionType.OnlyComments); + this.appConfig.canFillForms && this.api.asc_setRestriction(Asc.c_oAscRestrictionType.OnlyForms); + } else + this.api.asc_setRestriction(Asc.c_oAscRestrictionType.None); + } } }, DE.Controllers.DocProtection || {})); diff --git a/apps/documenteditor/main/app/controller/FormsTab.js b/apps/documenteditor/main/app/controller/FormsTab.js index 35f52e116..0f73609fc 100644 --- a/apps/documenteditor/main/app/controller/FormsTab.js +++ b/apps/documenteditor/main/app/controller/FormsTab.js @@ -217,6 +217,13 @@ define([ Common.NotificationCenter.trigger('edit:complete', this.toolbar); }, + changeViewFormMode: function(state) { + if (this.view && (state !== this.view.btnViewForm.isActive())) { + this.view.btnViewForm.toggle(state, true); + this.onModeClick(state); + } + }, + onClearClick: function() { if (this.api) { this.api.asc_ClearAllSpecialForms();