Skip to content
Snippets Groups Projects
Commit 7f934d58 authored by uhensler's avatar uhensler
Browse files

OO-3933: Option to confirm the data transfer to the external editor

parent 836baafb
No related branches found
No related tags found
No related merge requests found
Showing
with 275 additions and 14 deletions
...@@ -69,6 +69,11 @@ public class FileEditor implements DocEditor { ...@@ -69,6 +69,11 @@ public class FileEditor implements DocEditor {
return translator.translate("editor.display.name"); return translator.translate("editor.display.name");
} }
@Override
public boolean isDataTransferConfirmationEnabled() {
return false;
}
@Override @Override
public boolean isSupportingFormat(String suffix, Mode mode, boolean hasMeta) { public boolean isSupportingFormat(String suffix, Mode mode, boolean hasMeta) {
// Both the HTML editor and the text editor supports view and edit // Both the HTML editor and the text editor supports view and edit
......
...@@ -42,6 +42,8 @@ public interface DocEditor { ...@@ -42,6 +42,8 @@ public interface DocEditor {
String getType(); String getType();
String getDisplayName(Locale locale); String getDisplayName(Locale locale);
boolean isDataTransferConfirmationEnabled();
/** /**
* Indicates whether the editor supports the format with that suffix in the appropriate mode. * Indicates whether the editor supports the format with that suffix in the appropriate mode.
......
...@@ -65,6 +65,11 @@ public class CollaboraEditor implements DocEditor { ...@@ -65,6 +65,11 @@ public class CollaboraEditor implements DocEditor {
return translator.translate("editor.display.name"); return translator.translate("editor.display.name");
} }
@Override
public boolean isDataTransferConfirmationEnabled() {
return collaboraModule.isDataTransferConfirmationEnabled();
}
@Override @Override
public boolean isSupportingFormat(String suffix, Mode mode, boolean hasMeta) { public boolean isSupportingFormat(String suffix, Mode mode, boolean hasMeta) {
return hasMeta && collaboraService.accepts(suffix, mode); return hasMeta && collaboraService.accepts(suffix, mode);
......
...@@ -38,11 +38,14 @@ public class CollaboraModule extends AbstractSpringModule implements ConfigOnOff ...@@ -38,11 +38,14 @@ public class CollaboraModule extends AbstractSpringModule implements ConfigOnOff
private static final String COLLABORA_ENABLED = "collabora.enabled"; private static final String COLLABORA_ENABLED = "collabora.enabled";
private static final String COLLABORA_BASE_URL = "collabora.baseUrl"; private static final String COLLABORA_BASE_URL = "collabora.baseUrl";
private static final String COLLABORA_DATA_TRANSER_CONFIRMATION_ENABLED = "collabora.data.transfer.confirmation.enabled";
@Value("${collabora.enabled:false}") @Value("${collabora.enabled:false}")
private boolean enabled; private boolean enabled;
@Value("${collabora.baseUrl}") @Value("${collabora.baseUrl}")
private String baseUrl; private String baseUrl;
@Value("${collabora.data.transfer.confirmation.enabled:false}")
private boolean dataTransferConfirmationEnabled;
@Autowired @Autowired
private CollaboraModule(CoordinatorManager coordinateManager) { private CollaboraModule(CoordinatorManager coordinateManager) {
...@@ -69,6 +72,11 @@ public class CollaboraModule extends AbstractSpringModule implements ConfigOnOff ...@@ -69,6 +72,11 @@ public class CollaboraModule extends AbstractSpringModule implements ConfigOnOff
if(StringHelper.containsNonWhitespace(baseUrlObj)) { if(StringHelper.containsNonWhitespace(baseUrlObj)) {
baseUrl = baseUrlObj; baseUrl = baseUrlObj;
} }
String dataTransferConfirmationEnabledObj = getStringPropertyValue(COLLABORA_DATA_TRANSER_CONFIRMATION_ENABLED, true);
if(StringHelper.containsNonWhitespace(dataTransferConfirmationEnabledObj)) {
dataTransferConfirmationEnabled = "true".equals(dataTransferConfirmationEnabledObj);
}
} }
@Override @Override
...@@ -89,4 +97,13 @@ public class CollaboraModule extends AbstractSpringModule implements ConfigOnOff ...@@ -89,4 +97,13 @@ public class CollaboraModule extends AbstractSpringModule implements ConfigOnOff
this.baseUrl = baseUrl; this.baseUrl = baseUrl;
setStringProperty(COLLABORA_BASE_URL, baseUrl, true); setStringProperty(COLLABORA_BASE_URL, baseUrl, true);
} }
public boolean isDataTransferConfirmationEnabled() {
return dataTransferConfirmationEnabled;
}
public void setDataTransferConfirmationEnabled(boolean dataTransferConfirmationEnabled) {
this.dataTransferConfirmationEnabled = dataTransferConfirmationEnabled;
setStringProperty(COLLABORA_DATA_TRANSER_CONFIRMATION_ENABLED, Boolean.toString(dataTransferConfirmationEnabled), true);
}
} }
...@@ -26,6 +26,7 @@ import static org.olat.core.gui.translator.TranslatorHelper.translateAll; ...@@ -26,6 +26,7 @@ import static org.olat.core.gui.translator.TranslatorHelper.translateAll;
import org.olat.core.commons.services.doceditor.collabora.CollaboraModule; import org.olat.core.commons.services.doceditor.collabora.CollaboraModule;
import org.olat.core.commons.services.doceditor.collabora.CollaboraRefreshDiscoveryEvent; import org.olat.core.commons.services.doceditor.collabora.CollaboraRefreshDiscoveryEvent;
import org.olat.core.commons.services.doceditor.collabora.CollaboraService; import org.olat.core.commons.services.doceditor.collabora.CollaboraService;
import org.olat.core.commons.services.doceditor.ui.DocEditorController;
import org.olat.core.commons.services.doceditor.wopi.Discovery; import org.olat.core.commons.services.doceditor.wopi.Discovery;
import org.olat.core.gui.UserRequest; import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.form.flexible.FormItem; import org.olat.core.gui.components.form.flexible.FormItem;
...@@ -42,6 +43,7 @@ import org.olat.core.gui.control.WindowControl; ...@@ -42,6 +43,7 @@ import org.olat.core.gui.control.WindowControl;
import org.olat.core.helpers.Settings; import org.olat.core.helpers.Settings;
import org.olat.core.logging.OLog; import org.olat.core.logging.OLog;
import org.olat.core.logging.Tracing; import org.olat.core.logging.Tracing;
import org.olat.core.util.Util;
import org.olat.core.util.coordinate.CoordinatorManager; import org.olat.core.util.coordinate.CoordinatorManager;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -61,6 +63,7 @@ public class CollaboraAdminController extends FormBasicController { ...@@ -61,6 +63,7 @@ public class CollaboraAdminController extends FormBasicController {
private TextElement baseUrlEl; private TextElement baseUrlEl;
private FormLink refreshDiscoveryLink; private FormLink refreshDiscoveryLink;
private FormLink testLink; private FormLink testLink;
private MultipleSelectionElement dataTransferConfirmationEnabledEl;
@Autowired @Autowired
private CollaboraModule collaboraModule; private CollaboraModule collaboraModule;
...@@ -69,6 +72,7 @@ public class CollaboraAdminController extends FormBasicController { ...@@ -69,6 +72,7 @@ public class CollaboraAdminController extends FormBasicController {
public CollaboraAdminController(UserRequest ureq, WindowControl wControl) { public CollaboraAdminController(UserRequest ureq, WindowControl wControl) {
super(ureq, wControl); super(ureq, wControl);
setTranslator(Util.createPackageTranslator(DocEditorController.class, getLocale(), getTranslator()));
initForm(ureq); initForm(ureq);
} }
...@@ -87,6 +91,11 @@ public class CollaboraAdminController extends FormBasicController { ...@@ -87,6 +91,11 @@ public class CollaboraAdminController extends FormBasicController {
refreshDiscoveryLink = uifactory.addFormLink("admin.refresh.discovery", "admin.refresh.discovery", "admin.refresh.discovery.label", formLayout, Link.BUTTON); refreshDiscoveryLink = uifactory.addFormLink("admin.refresh.discovery", "admin.refresh.discovery", "admin.refresh.discovery.label", formLayout, Link.BUTTON);
refreshDiscoveryLink.setHelpTextKey("admin.refresh.discovery.help", null); refreshDiscoveryLink.setHelpTextKey("admin.refresh.discovery.help", null);
dataTransferConfirmationEnabledEl = uifactory.addCheckboxesHorizontal(
"admin.data.transfer.confirmation.enabled", formLayout, ENABLED_KEYS,
translateAll(getTranslator(), ENABLED_KEYS));
dataTransferConfirmationEnabledEl.select(ENABLED_KEYS[0], collaboraModule.isDataTransferConfirmationEnabled());
if (Settings.isDebuging()) { if (Settings.isDebuging()) {
testLink = uifactory.addFormLink("admin.test", formLayout, Link.BUTTON); testLink = uifactory.addFormLink("admin.test", formLayout, Link.BUTTON);
} }
...@@ -129,6 +138,9 @@ public class CollaboraAdminController extends FormBasicController { ...@@ -129,6 +138,9 @@ public class CollaboraAdminController extends FormBasicController {
if (urlChanged) { if (urlChanged) {
doRefreshDiscovery(); doRefreshDiscovery();
} }
boolean dataTransferConfirmationEnabled = dataTransferConfirmationEnabledEl.isAtLeastSelected(1);
collaboraModule.setDataTransferConfirmationEnabled(dataTransferConfirmationEnabled);
} }
@Override @Override
......
...@@ -65,6 +65,11 @@ public class Office365Editor implements DocEditor { ...@@ -65,6 +65,11 @@ public class Office365Editor implements DocEditor {
return translator.translate("editor.display.name"); return translator.translate("editor.display.name");
} }
@Override
public boolean isDataTransferConfirmationEnabled() {
return office365Module.isDataTransferConfirmationEnabled();
}
@Override @Override
public boolean isSupportingFormat(String suffix, Mode mode, boolean hasMeta) { public boolean isSupportingFormat(String suffix, Mode mode, boolean hasMeta) {
return hasMeta && office365Service.isSupportingFormat(suffix, mode); return hasMeta && office365Service.isSupportingFormat(suffix, mode);
......
/** /**
* <a href="http://www.openolat.org"> * <a href="http://www.openolat.org">
* OpenOLAT - Online Learning and Training</a><br> * OpenOLAT - Online Learning and Training</a><br>
* <p> * <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br> * Licensed under the Apache License, Version 2.0 (the "License"); <br>
...@@ -38,11 +38,14 @@ public class Office365Module extends AbstractSpringModule implements ConfigOnOff ...@@ -38,11 +38,14 @@ public class Office365Module extends AbstractSpringModule implements ConfigOnOff
private static final String OFFICE365_ENABLED = "office365.enabled"; private static final String OFFICE365_ENABLED = "office365.enabled";
private static final String OFFICE365_BASE_URL = "office365.baseUrl"; private static final String OFFICE365_BASE_URL = "office365.baseUrl";
private static final String OFFICE365_DATA_TRANSER_CONFIRMATION_ENABLED = "office365.data.transfer.confirmation.enabled";
@Value("${office365.enabled:false}") @Value("${office365.enabled:false}")
private boolean enabled; private boolean enabled;
@Value("${office365.baseUrl}") @Value("${office365.baseUrl}")
private String baseUrl; private String baseUrl;
@Value("${office365.data.transfer.confirmation.enabled:false}")
private boolean dataTransferConfirmationEnabled;
@Autowired @Autowired
private Office365Module(CoordinatorManager coordinateManager) { private Office365Module(CoordinatorManager coordinateManager) {
...@@ -69,6 +72,11 @@ public class Office365Module extends AbstractSpringModule implements ConfigOnOff ...@@ -69,6 +72,11 @@ public class Office365Module extends AbstractSpringModule implements ConfigOnOff
if(StringHelper.containsNonWhitespace(baseUrlObj)) { if(StringHelper.containsNonWhitespace(baseUrlObj)) {
baseUrl = baseUrlObj; baseUrl = baseUrlObj;
} }
String dataTransferConfirmationEnabledObj = getStringPropertyValue(OFFICE365_DATA_TRANSER_CONFIRMATION_ENABLED, true);
if(StringHelper.containsNonWhitespace(dataTransferConfirmationEnabledObj)) {
dataTransferConfirmationEnabled = "true".equals(dataTransferConfirmationEnabledObj);
}
} }
@Override @Override
...@@ -89,4 +97,13 @@ public class Office365Module extends AbstractSpringModule implements ConfigOnOff ...@@ -89,4 +97,13 @@ public class Office365Module extends AbstractSpringModule implements ConfigOnOff
this.baseUrl = baseUrl; this.baseUrl = baseUrl;
setStringProperty(OFFICE365_BASE_URL, baseUrl, true); setStringProperty(OFFICE365_BASE_URL, baseUrl, true);
} }
public boolean isDataTransferConfirmationEnabled() {
return dataTransferConfirmationEnabled;
}
public void setDataTransferConfirmationEnabled(boolean dataTransferConfirmationEnabled) {
this.dataTransferConfirmationEnabled = dataTransferConfirmationEnabled;
setStringProperty(OFFICE365_DATA_TRANSER_CONFIRMATION_ENABLED, Boolean.toString(dataTransferConfirmationEnabled), true);
}
} }
...@@ -25,6 +25,7 @@ import static org.olat.core.gui.translator.TranslatorHelper.translateAll; ...@@ -25,6 +25,7 @@ import static org.olat.core.gui.translator.TranslatorHelper.translateAll;
import org.olat.core.commons.services.doceditor.office365.Office365Module; import org.olat.core.commons.services.doceditor.office365.Office365Module;
import org.olat.core.commons.services.doceditor.office365.Office365RefreshDiscoveryEvent; import org.olat.core.commons.services.doceditor.office365.Office365RefreshDiscoveryEvent;
import org.olat.core.commons.services.doceditor.ui.DocEditorController;
import org.olat.core.gui.UserRequest; import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.form.flexible.FormItem; import org.olat.core.gui.components.form.flexible.FormItem;
import org.olat.core.gui.components.form.flexible.FormItemContainer; import org.olat.core.gui.components.form.flexible.FormItemContainer;
...@@ -37,6 +38,7 @@ import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer; ...@@ -37,6 +38,7 @@ import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
import org.olat.core.gui.components.link.Link; import org.olat.core.gui.components.link.Link;
import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.Controller;
import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.WindowControl;
import org.olat.core.util.Util;
import org.olat.core.util.coordinate.CoordinatorManager; import org.olat.core.util.coordinate.CoordinatorManager;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -53,12 +55,14 @@ public class Office365AdminController extends FormBasicController { ...@@ -53,12 +55,14 @@ public class Office365AdminController extends FormBasicController {
private MultipleSelectionElement enabledEl; private MultipleSelectionElement enabledEl;
private TextElement baseUrlEl; private TextElement baseUrlEl;
private FormLink refreshDiscoveryLink; private FormLink refreshDiscoveryLink;
private MultipleSelectionElement dataTransferConfirmationEnabledEl;
@Autowired @Autowired
private Office365Module office365Module; private Office365Module office365Module;
public Office365AdminController(UserRequest ureq, WindowControl wControl) { public Office365AdminController(UserRequest ureq, WindowControl wControl) {
super(ureq, wControl); super(ureq, wControl);
setTranslator(Util.createPackageTranslator(DocEditorController.class, getLocale(), getTranslator()));
initForm(ureq); initForm(ureq);
} }
...@@ -77,6 +81,11 @@ public class Office365AdminController extends FormBasicController { ...@@ -77,6 +81,11 @@ public class Office365AdminController extends FormBasicController {
refreshDiscoveryLink = uifactory.addFormLink("admin.refresh.discovery", "admin.refresh.discovery", "admin.refresh.discovery.label", formLayout, Link.BUTTON); refreshDiscoveryLink = uifactory.addFormLink("admin.refresh.discovery", "admin.refresh.discovery", "admin.refresh.discovery.label", formLayout, Link.BUTTON);
refreshDiscoveryLink.setHelpTextKey("admin.refresh.discovery.help", null); refreshDiscoveryLink.setHelpTextKey("admin.refresh.discovery.help", null);
dataTransferConfirmationEnabledEl = uifactory.addCheckboxesHorizontal(
"admin.data.transfer.confirmation.enabled", formLayout, ENABLED_KEYS,
translateAll(getTranslator(), ENABLED_KEYS));
dataTransferConfirmationEnabledEl.select(ENABLED_KEYS[0], office365Module.isDataTransferConfirmationEnabled());
FormLayoutContainer buttonLayout = FormLayoutContainer.createButtonLayout("buttons", getTranslator()); FormLayoutContainer buttonLayout = FormLayoutContainer.createButtonLayout("buttons", getTranslator());
formLayout.add("buttons", buttonLayout); formLayout.add("buttons", buttonLayout);
uifactory.addFormSubmitButton("save", buttonLayout); uifactory.addFormSubmitButton("save", buttonLayout);
...@@ -113,6 +122,9 @@ public class Office365AdminController extends FormBasicController { ...@@ -113,6 +122,9 @@ public class Office365AdminController extends FormBasicController {
if (urlChanged) { if (urlChanged) {
doRefreshDiscovery(); doRefreshDiscovery();
} }
boolean dataTransferConfirmationEnabled = dataTransferConfirmationEnabledEl.isAtLeastSelected(1);
office365Module.setDataTransferConfirmationEnabled(dataTransferConfirmationEnabled);
} }
@Override @Override
......
...@@ -65,6 +65,11 @@ public class OnlyOfficeEditor implements DocEditor { ...@@ -65,6 +65,11 @@ public class OnlyOfficeEditor implements DocEditor {
return translator.translate("editor.display.name"); return translator.translate("editor.display.name");
} }
@Override
public boolean isDataTransferConfirmationEnabled() {
return onlyOfficeModule.isDataTransferConfirmationEnabled();
}
@Override @Override
public boolean isSupportingFormat(String suffix, Mode mode, boolean hasMeta) { public boolean isSupportingFormat(String suffix, Mode mode, boolean hasMeta) {
return hasMeta && onlyOfficeService.isSupportedFormat(suffix, mode); return hasMeta && onlyOfficeService.isSupportedFormat(suffix, mode);
......
...@@ -47,6 +47,7 @@ public class OnlyOfficeModule extends AbstractSpringModule implements ConfigOnOf ...@@ -47,6 +47,7 @@ public class OnlyOfficeModule extends AbstractSpringModule implements ConfigOnOf
private static final String ONLYOFFICE_ENABLED = "onlyoffice.enabled"; private static final String ONLYOFFICE_ENABLED = "onlyoffice.enabled";
private static final String ONLYOFFICE_BASE_URL = "onlyoffice.baseUrl"; private static final String ONLYOFFICE_BASE_URL = "onlyoffice.baseUrl";
private static final String ONLYOFFICE_JWT_SECRET = "onlyoffice.jwt.secret"; private static final String ONLYOFFICE_JWT_SECRET = "onlyoffice.jwt.secret";
private static final String ONLYOFFICE_DATA_TRANSER_CONFIRMATION_ENABLED = "onlyoffice.data.transfer.confirmation.enabled";
@Value("${onlyoffice.enabled:false}") @Value("${onlyoffice.enabled:false}")
private boolean enabled; private boolean enabled;
...@@ -57,6 +58,8 @@ public class OnlyOfficeModule extends AbstractSpringModule implements ConfigOnOf ...@@ -57,6 +58,8 @@ public class OnlyOfficeModule extends AbstractSpringModule implements ConfigOnOf
private String apiUrl; private String apiUrl;
private String jwtSecret; private String jwtSecret;
private Key jwtSignKey; private Key jwtSignKey;
@Value("${onlyoffice.data.transfer.confirmation.enabled:false}")
private boolean dataTransferConfirmationEnabled;
@Autowired @Autowired
private OnlyOfficeModule(CoordinatorManager coordinateManager) { private OnlyOfficeModule(CoordinatorManager coordinateManager) {
...@@ -89,6 +92,11 @@ public class OnlyOfficeModule extends AbstractSpringModule implements ConfigOnOf ...@@ -89,6 +92,11 @@ public class OnlyOfficeModule extends AbstractSpringModule implements ConfigOnOf
if(StringHelper.containsNonWhitespace(jwtSecretObj)) { if(StringHelper.containsNonWhitespace(jwtSecretObj)) {
jwtSecret = jwtSecretObj; jwtSecret = jwtSecretObj;
} }
String dataTransferConfirmationEnabledObj = getStringPropertyValue(ONLYOFFICE_DATA_TRANSER_CONFIRMATION_ENABLED, true);
if(StringHelper.containsNonWhitespace(dataTransferConfirmationEnabledObj)) {
dataTransferConfirmationEnabled = "true".equals(dataTransferConfirmationEnabledObj);
}
} }
@Override @Override
...@@ -140,4 +148,13 @@ public class OnlyOfficeModule extends AbstractSpringModule implements ConfigOnOf ...@@ -140,4 +148,13 @@ public class OnlyOfficeModule extends AbstractSpringModule implements ConfigOnOf
return jwtSignKey; return jwtSignKey;
} }
public boolean isDataTransferConfirmationEnabled() {
return dataTransferConfirmationEnabled;
}
public void setDataTransferConfirmationEnabled(boolean dataTransferConfirmationEnabled) {
this.dataTransferConfirmationEnabled = dataTransferConfirmationEnabled;
setStringProperty(ONLYOFFICE_DATA_TRANSER_CONFIRMATION_ENABLED, Boolean.toString(dataTransferConfirmationEnabled), true);
}
} }
...@@ -24,6 +24,7 @@ import static org.olat.core.gui.translator.TranslatorHelper.translateAll; ...@@ -24,6 +24,7 @@ import static org.olat.core.gui.translator.TranslatorHelper.translateAll;
import org.olat.core.commons.services.doceditor.onlyoffice.OnlyOfficeModule; import org.olat.core.commons.services.doceditor.onlyoffice.OnlyOfficeModule;
import org.olat.core.commons.services.doceditor.onlyoffice.OnlyOfficeSecurityService; import org.olat.core.commons.services.doceditor.onlyoffice.OnlyOfficeSecurityService;
import org.olat.core.commons.services.doceditor.ui.DocEditorController;
import org.olat.core.gui.UserRequest; import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.form.flexible.FormItemContainer; import org.olat.core.gui.components.form.flexible.FormItemContainer;
import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElement; import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElement;
...@@ -32,6 +33,7 @@ import org.olat.core.gui.components.form.flexible.impl.FormBasicController; ...@@ -32,6 +33,7 @@ import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer; import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.Controller;
import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.WindowControl;
import org.olat.core.util.Util;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
/** /**
...@@ -47,6 +49,7 @@ public class OnlyOfficeAdminController extends FormBasicController { ...@@ -47,6 +49,7 @@ public class OnlyOfficeAdminController extends FormBasicController {
private MultipleSelectionElement enabledEl; private MultipleSelectionElement enabledEl;
private TextElement baseUrlEl; private TextElement baseUrlEl;
private TextElement jwtSecretEl; private TextElement jwtSecretEl;
private MultipleSelectionElement dataTransferConfirmationEnabledEl;
@Autowired @Autowired
private OnlyOfficeModule onlyOfficeModule; private OnlyOfficeModule onlyOfficeModule;
...@@ -55,6 +58,7 @@ public class OnlyOfficeAdminController extends FormBasicController { ...@@ -55,6 +58,7 @@ public class OnlyOfficeAdminController extends FormBasicController {
public OnlyOfficeAdminController(UserRequest ureq, WindowControl wControl) { public OnlyOfficeAdminController(UserRequest ureq, WindowControl wControl) {
super(ureq, wControl); super(ureq, wControl);
setTranslator(Util.createPackageTranslator(DocEditorController.class, getLocale(), getTranslator()));
initForm(ureq); initForm(ureq);
} }
...@@ -74,6 +78,11 @@ public class OnlyOfficeAdminController extends FormBasicController { ...@@ -74,6 +78,11 @@ public class OnlyOfficeAdminController extends FormBasicController {
jwtSecretEl = uifactory.addTextElement("admin.jwt.secret", 128, secret, formLayout); jwtSecretEl = uifactory.addTextElement("admin.jwt.secret", 128, secret, formLayout);
jwtSecretEl.setMandatory(true); jwtSecretEl.setMandatory(true);
dataTransferConfirmationEnabledEl = uifactory.addCheckboxesHorizontal(
"admin.data.transfer.confirmation.enabled", formLayout, ENABLED_KEYS,
translateAll(getTranslator(), ENABLED_KEYS));
dataTransferConfirmationEnabledEl.select(ENABLED_KEYS[0], onlyOfficeModule.isDataTransferConfirmationEnabled());
FormLayoutContainer buttonLayout = FormLayoutContainer.createButtonLayout("buttons", getTranslator()); FormLayoutContainer buttonLayout = FormLayoutContainer.createButtonLayout("buttons", getTranslator());
formLayout.add("buttons", buttonLayout); formLayout.add("buttons", buttonLayout);
uifactory.addFormSubmitButton("save", buttonLayout); uifactory.addFormSubmitButton("save", buttonLayout);
...@@ -108,6 +117,9 @@ public class OnlyOfficeAdminController extends FormBasicController { ...@@ -108,6 +117,9 @@ public class OnlyOfficeAdminController extends FormBasicController {
String jwtSecret = jwtSecretEl.getValue(); String jwtSecret = jwtSecretEl.getValue();
onlyOfficeModule.setJwtSecret(jwtSecret); onlyOfficeModule.setJwtSecret(jwtSecret);
boolean dataTransferConfirmationEnabled = dataTransferConfirmationEnabledEl.isAtLeastSelected(1);
onlyOfficeModule.setDataTransferConfirmationEnabled(dataTransferConfirmationEnabled);
} }
@Override @Override
......
/**
* <a href="http://www.openolat.org">
* OpenOLAT - Online Learning and Training</a><br>
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br>
* you may not use this file except in compliance with the License.<br>
* You may obtain a copy of the License at the
* <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
* <p>
* Unless required by applicable law or agreed to in writing,<br>
* software distributed under the License is distributed on an "AS IS" BASIS, <br>
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
* See the License for the specific language governing permissions and <br>
* limitations under the License.
* <p>
* Initial code contributed and copyrighted by<br>
* frentix GmbH, http://www.frentix.com
* <p>
*/
package org.olat.core.commons.services.doceditor.ui;
import org.olat.core.commons.services.doceditor.DocEditor;
import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.Component;
import org.olat.core.gui.components.link.Link;
import org.olat.core.gui.components.link.LinkFactory;
import org.olat.core.gui.components.velocity.VelocityContainer;
import org.olat.core.gui.control.Event;
import org.olat.core.gui.control.WindowControl;
import org.olat.core.gui.control.controller.BasicController;
import org.olat.user.UserManager;
import org.springframework.beans.factory.annotation.Autowired;
/**
*
* Initial date: 6 May 2019<br>
* @author uhensler, urs.hensler@frentix.com, http://www.frentix.com
*
*/
public class DataTransferConfirmationController extends BasicController {
private Link acceptLink;
private final DocEditor editor;
@Autowired
private UserManager userManager;
public DataTransferConfirmationController(UserRequest ureq, WindowControl wControl, DocEditor editor) {
super(ureq, wControl);
this.editor = editor;
VelocityContainer mainVC = createVelocityContainer("data_transfer_confirmation");
String[] args = new String[] {
editor.getDisplayName(getLocale()),
userManager.getUserDisplayName(getIdentity())
};
String intro = translate("data.transfer.intro", args);
mainVC.contextPut("dataTransferIntro", intro);
acceptLink = LinkFactory.createButton("data.transfer.accept", mainVC, this);
acceptLink.setPrimary(true);
putInitialPanel(mainVC);
}
public DocEditor getEditor() {
return editor;
}
@Override
protected void event(UserRequest ureq, Component source, Event event) {
if (source == acceptLink) {
fireEvent(ureq, Event.DONE_EVENT);
}
}
@Override
protected void doDispose() {
}
}
...@@ -30,15 +30,21 @@ import org.olat.core.gui.control.Event; ...@@ -30,15 +30,21 @@ import org.olat.core.gui.control.Event;
import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.WindowControl;
import org.olat.core.gui.control.controller.BasicController; import org.olat.core.gui.control.controller.BasicController;
import org.olat.core.util.vfs.VFSLeaf; import org.olat.core.util.vfs.VFSLeaf;
import org.olat.properties.Property;
import org.olat.properties.PropertyManager;
import org.springframework.beans.factory.annotation.Autowired;
/** /**
* *
* Initial date: 26 Mar 2019<br> * Initial date: 26 Mar 2019<br>
*
* @author uhensler, urs.hensler@frentix.com, http://www.frentix.com * @author uhensler, urs.hensler@frentix.com, http://www.frentix.com
* *
*/ */
public class DocEditorController extends BasicController { public class DocEditorController extends BasicController {
private static final String PROPERTY_CATEGOTY = "doc.editor";
private VelocityContainer mainVC; private VelocityContainer mainVC;
private DocEditorConfigController configCtrl; private DocEditorConfigController configCtrl;
private Controller editorCtrl; private Controller editorCtrl;
...@@ -46,27 +52,31 @@ public class DocEditorController extends BasicController { ...@@ -46,27 +52,31 @@ public class DocEditorController extends BasicController {
private final VFSLeaf vfsLeaf; private final VFSLeaf vfsLeaf;
private final DocEditorSecurityCallback secCallback; private final DocEditorSecurityCallback secCallback;
private final DocEditorConfigs configs; private final DocEditorConfigs configs;
@Autowired
private PropertyManager propertyManager;
private DataTransferConfirmationController dataTransferConfirmationCtrl;
public DocEditorController(UserRequest ureq, WindowControl wControl, VFSLeaf vfsLeaf, public DocEditorController(UserRequest ureq, WindowControl wControl, VFSLeaf vfsLeaf,
DocEditorSecurityCallback secCallback, DocEditorConfigs configs) { DocEditorSecurityCallback secCallback, DocEditorConfigs configs) {
this(ureq, wControl, vfsLeaf, secCallback, configs, null); this(ureq, wControl, vfsLeaf, secCallback, configs, null);
} }
public DocEditorController(UserRequest ureq, WindowControl wControl, VFSLeaf vfsLeaf, public DocEditorController(UserRequest ureq, WindowControl wControl, VFSLeaf vfsLeaf,
DocEditorSecurityCallback secCallback, DocEditorConfigs configs, String cssClass) { DocEditorSecurityCallback secCallback, DocEditorConfigs configs, String cssClass) {
super(ureq, wControl); super(ureq, wControl);
this.vfsLeaf = vfsLeaf; this.vfsLeaf = vfsLeaf;
this.secCallback = secCallback; this.secCallback = secCallback;
this.configs = configs; this.configs = configs;
mainVC = createVelocityContainer("editor_main"); mainVC = createVelocityContainer("editor_main");
mainVC.contextPut("cssClass", cssClass); mainVC.contextPut("cssClass", cssClass);
configCtrl = new DocEditorConfigController(ureq, wControl, vfsLeaf, secCallback); configCtrl = new DocEditorConfigController(ureq, wControl, vfsLeaf, secCallback);
listenTo(configCtrl); listenTo(configCtrl);
mainVC.put("config", configCtrl.getInitialComponent()); mainVC.put("config", configCtrl.getInitialComponent());
configCtrl.activate(ureq, null, null); configCtrl.activate(ureq, null, null);
putInitialPanel(mainVC); putInitialPanel(mainVC);
} }
...@@ -86,17 +96,56 @@ public class DocEditorController extends BasicController { ...@@ -86,17 +96,56 @@ public class DocEditorController extends BasicController {
} }
} else if (source == editorCtrl) { } else if (source == editorCtrl) {
fireEvent(ureq, event); fireEvent(ureq, event);
} else if (source == dataTransferConfirmationCtrl && Event.DONE_EVENT.equals(event)) {
DocEditor editor = dataTransferConfirmationCtrl.getEditor();
doDataTransferConfirmed(editor);
doOpenEditor(ureq, editor);
} }
super.event(ureq, source, event); super.event(ureq, source, event);
} }
private void doOpenEditor(UserRequest ureq, DocEditor editor) { private void doOpenEditor(UserRequest ureq, DocEditor editor) {
removeAsListenerAndDispose(dataTransferConfirmationCtrl);
removeAsListenerAndDispose(editorCtrl); removeAsListenerAndDispose(editorCtrl);
if (editorCtrl != null || dataTransferConfirmationCtrl != null) {
if (editorCtrl != null) mainVC.remove("editor"); mainVC.remove("editor");
editorCtrl = editor.getRunController(ureq, getWindowControl(), getIdentity(), vfsLeaf, secCallback, configs); }
listenTo(editorCtrl);
mainVC.put("editor", editorCtrl.getInitialComponent()); if (isDataTransferConfirmed(editor)) {
editorCtrl = editor.getRunController(ureq, getWindowControl(), getIdentity(), vfsLeaf, secCallback,
configs);
listenTo(editorCtrl);
mainVC.put("editor", editorCtrl.getInitialComponent());
} else {
dataTransferConfirmationCtrl = new DataTransferConfirmationController(ureq, getWindowControl(), editor);
listenTo(dataTransferConfirmationCtrl);
mainVC.put("editor", dataTransferConfirmationCtrl.getInitialComponent());
}
}
private boolean isDataTransferConfirmed(DocEditor editor) {
if (editor.isDataTransferConfirmationEnabled()) {
Property property = propertyManager.findUserProperty(getIdentity(), PROPERTY_CATEGOTY,
getDataTransferPropertyName(editor));
if (property == null || isNotConfirmedYet(property)) {
return false;
}
}
return true;
}
private boolean isNotConfirmedYet(Property property) {
return !Boolean.valueOf(property.getStringValue());
}
private void doDataTransferConfirmed(DocEditor editor) {
Property property = propertyManager.createUserPropertyInstance(getIdentity(), PROPERTY_CATEGOTY,
getDataTransferPropertyName(editor), null, null, Boolean.TRUE.toString(), null);
propertyManager.saveProperty(property);
}
private String getDataTransferPropertyName(DocEditor editor) {
return editor.getType() + ".data.transfer.accepted";
} }
@Override @Override
......
<div class="o_warning o_doceditor_data_transfer">
<h4>$r.translate("data.transfer.title")</h4>
<p>$dataTransferIntro</p>
<div class="o_button_group">
$r.render("data.transfer.accept")
</div>
</div>
\ No newline at end of file
admin.collabora=$org.olat.core.commons.services.doceditor.collabora.ui\:editor.display.name admin.collabora=$org.olat.core.commons.services.doceditor.collabora.ui\:editor.display.name
admin.data.transfer.confirmation.enabled=Best\u00E4tigung Datentransfer
admin.menu.title.alt=Dokumenteneditoren admin.menu.title.alt=Dokumenteneditoren
admin.menu.title=Dokumenteneditoren admin.menu.title=Dokumenteneditoren
admin.office365=$org.olat.core.commons.services.doceditor.office365.ui\:editor.display.name admin.office365=$org.olat.core.commons.services.doceditor.office365.ui\:editor.display.name
...@@ -8,6 +9,9 @@ create.doc.button=Dokument erstellen ...@@ -8,6 +9,9 @@ create.doc.button=Dokument erstellen
create.doc.name.notvalid=$org.olat.core.commons.modules.bc\:cfile.name.notvalid create.doc.name.notvalid=$org.olat.core.commons.modules.bc\:cfile.name.notvalid
create.doc.name=Dateiname create.doc.name=Dateiname
create.doc.type=Dateityp create.doc.type=Dateityp
data.transfer.accept=Ich stimme der Daten\u00FCbertragung zu
data.transfer.intro=Beim \u00D6ffnen des Dokumentes in "{0}" wird das Dokument tempor\u00E4r auf einem externen Server gespeichert. Zudem wird Ihr Name ({1}) zur Darstellung im Editor \u00FCbergeben. Bitte best\u00E4tigen Sie diese Daten\u00FCbertragung.
data.transfer.title=Zustimmung Daten\u00FCbertragung
doc.type.css=Cascading Style Sheet doc.type.css=Cascading Style Sheet
doc.type.docx=Word doc.type.docx=Word
doc.type.html=HTML-Dokument doc.type.html=HTML-Dokument
......
admin.collabora=$org.olat.core.commons.services.doceditor.collabora.ui\:editor.display.name admin.collabora=$org.olat.core.commons.services.doceditor.collabora.ui\:editor.display.name
admin.data.transfer.confirmation.enabled=Confirmation of data transfer
admin.menu.title.alt=Document editors admin.menu.title.alt=Document editors
admin.menu.title=Document editors admin.menu.title=Document editors
admin.office365=$org.olat.core.commons.services.doceditor.office365.ui\:editor.display.name admin.office365=$org.olat.core.commons.services.doceditor.office365.ui\:editor.display.name
...@@ -8,6 +9,9 @@ create.doc.button=Create document ...@@ -8,6 +9,9 @@ create.doc.button=Create document
create.doc.name.notvalid=$org.olat.core.commons.modules.bc\:cfile.name.notvalid create.doc.name.notvalid=$org.olat.core.commons.modules.bc\:cfile.name.notvalid
create.doc.name=File name create.doc.name=File name
create.doc.type=Type create.doc.type=Type
data.transfer.accept=I accept the data transfer
data.transfer.intro=When opening the document in "{0}", the document is temporarily saved on an external server. In addition, your name ({1}) is passed for display in the editor. Please confirm this data transfer.
data.transfer.title=Confirmation of data transfer
doc.type.css=Cascading Style Sheet doc.type.css=Cascading Style Sheet
doc.type.docx=Word doc.type.docx=Word
doc.type.html=HTML Document doc.type.html=HTML Document
......
...@@ -1475,6 +1475,7 @@ edusharing.auth.affiliation.name=${instance.id} ...@@ -1475,6 +1475,7 @@ edusharing.auth.affiliation.name=${instance.id}
######################################## ########################################
collabora.enabled=false collabora.enabled=false
collabora.baseUrl=https://collabora.example.org/ collabora.baseUrl=https://collabora.example.org/
collabora.data.transfer.confirmation.enabled=false
######################################## ########################################
...@@ -1483,6 +1484,7 @@ collabora.baseUrl=https://collabora.example.org/ ...@@ -1483,6 +1484,7 @@ collabora.baseUrl=https://collabora.example.org/
onlyoffice.enabled=false onlyoffice.enabled=false
onlyoffice.baseUrl=https://onlyoffice.example.org/ onlyoffice.baseUrl=https://onlyoffice.example.org/
onlyoffice.api.path=web-apps/apps/api/documents/api.js onlyoffice.api.path=web-apps/apps/api/documents/api.js
onlyoffice.data.transfer.confirmation.enabled=false
######################################## ########################################
...@@ -1490,6 +1492,7 @@ onlyoffice.api.path=web-apps/apps/api/documents/api.js ...@@ -1490,6 +1492,7 @@ onlyoffice.api.path=web-apps/apps/api/documents/api.js
######################################## ########################################
office365.enabled=false office365.enabled=false
office365.baseUrl=https://office365.example.org/ office365.baseUrl=https://office365.example.org/
office365.data.transfer.confirmation.enabled=false
######################################## ########################################
......
...@@ -89,6 +89,11 @@ body.o_doceditor_body { ...@@ -89,6 +89,11 @@ body.o_doceditor_body {
} }
} }
} }
.o_doceditor_data_transfer {
margin-right: 15px;
margin-left: 15px;
}
} }
.o_web_content { .o_web_content {
......
source diff could not be displayed: it is too large. Options to address this: view the blob.
source diff could not be displayed: it is too large. Options to address this: view the blob.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment