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

OO-4905: OnlyOffice as thumbnail generator for office documents

parent 9f58e5a2
No related branches found
No related tags found
No related merge requests found
Showing
with 282 additions and 68 deletions
......@@ -31,10 +31,13 @@ import org.olat.core.commons.services.doceditor.onlyoffice.OnlyOfficeSecuritySer
import org.olat.core.commons.services.doceditor.onlyoffice.OnlyOfficeService;
import org.olat.core.commons.services.doceditor.ui.DocEditorController;
import org.olat.core.gui.UserRequest;
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.elements.MultipleSelectionElement;
import org.olat.core.gui.components.form.flexible.elements.StaticTextElement;
import org.olat.core.gui.components.form.flexible.elements.TextElement;
import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
import org.olat.core.gui.components.form.flexible.impl.FormEvent;
import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
import org.olat.core.gui.components.util.KeyValues;
import org.olat.core.gui.control.Controller;
......@@ -59,9 +62,13 @@ public class OnlyOfficeAdminController extends FormBasicController {
private MultipleSelectionElement enabledEl;
private TextElement baseUrlEl;
private TextElement jwtSecretEl;
private MultipleSelectionElement editorEnabledEl;
private MultipleSelectionElement viewOnlyEl;
private MultipleSelectionElement dataTransferConfirmationEnabledEl;
private TextElement licenseEditEl;
private StaticTextElement licenseInUseEl;
private MultipleSelectionElement usageRolesEl;
private MultipleSelectionElement thumbnailsEnabledEl;
@Autowired
private OnlyOfficeModule onlyOfficeModule;
......@@ -74,6 +81,7 @@ public class OnlyOfficeAdminController extends FormBasicController {
super(ureq, wControl);
setTranslator(Util.createPackageTranslator(DocEditorController.class, getLocale(), getTranslator()));
initForm(ureq);
updateUI();
}
@Override
......@@ -81,7 +89,9 @@ public class OnlyOfficeAdminController extends FormBasicController {
setFormTitle("admin.title");
setFormDescription("admin.desc");
enabledEl = uifactory.addCheckboxesHorizontal("admin.enabled", formLayout, ENABLED_KEYS, translateAll(getTranslator(), ENABLED_KEYS));
// General
String[] enabledValues = translateAll(getTranslator(), ENABLED_KEYS);
enabledEl = uifactory.addCheckboxesHorizontal("admin.enabled", formLayout, ENABLED_KEYS, enabledValues);
enabledEl.select(ENABLED_KEYS[0], onlyOfficeModule.isEnabled());
String url = onlyOfficeModule.getBaseUrl();
......@@ -92,19 +102,23 @@ public class OnlyOfficeAdminController extends FormBasicController {
jwtSecretEl = uifactory.addTextElement("admin.jwt.secret", 128, secret, formLayout);
jwtSecretEl.setMandatory(true);
// Editor
uifactory.addSpacerElement("spacer.editor", formLayout, false);
editorEnabledEl = uifactory.addCheckboxesHorizontal("admin.editor.enabled", formLayout, ENABLED_KEYS, enabledValues);
editorEnabledEl.addActionListener(FormEvent.ONCHANGE);
editorEnabledEl.select(ENABLED_KEYS[0], onlyOfficeModule.isEditorEnabled());
dataTransferConfirmationEnabledEl = uifactory.addCheckboxesHorizontal(
"admin.data.transfer.confirmation.enabled", formLayout, ENABLED_KEYS,
translateAll(getTranslator(), ENABLED_KEYS));
dataTransferConfirmationEnabledEl.select(ENABLED_KEYS[0], onlyOfficeModule.isDataTransferConfirmationEnabled());
"admin.data.transfer.confirmation.enabled", formLayout, ENABLED_KEYS, enabledValues);
String licenseEdit = onlyOfficeModule.getLicenseEdit() != null
? onlyOfficeModule.getLicenseEdit().toString()
: null;
licenseEditEl = uifactory.addTextElement("admin.license.edit", 10, licenseEdit, formLayout);
viewOnlyEl = uifactory.addCheckboxesHorizontal("admin.view.only", formLayout, ENABLED_KEYS, enabledValues);
viewOnlyEl.setHelpTextKey("admin.view.only.help", null);
viewOnlyEl.addActionListener(FormEvent.ONCHANGE);
Long editLicensesInUse = onlyOfficeService.getEditLicensesInUse();
editLicensesInUse = editLicensesInUse != null? editLicensesInUse: 0;
uifactory.addStaticTextElement("admin.license.edit.in.use", editLicensesInUse.toString(), formLayout);
licenseEditEl = uifactory.addTextElement("admin.license.edit", 10, "", formLayout);
licenseInUseEl = uifactory.addStaticTextElement("admin.license.edit.in.use", "", formLayout);
KeyValues usageRolesKV = new KeyValues();
usageRolesKV.add(entry(USAGE_AUTHOR, translate("admin.usage.roles.author")));
......@@ -112,15 +126,74 @@ public class OnlyOfficeAdminController extends FormBasicController {
usageRolesKV.add(entry(USAGE_MANAGERS, translate("admin.usage.roles.managers")));
usageRolesEl = uifactory.addCheckboxesVertical("admin.usage.roles", formLayout, usageRolesKV.keys(), usageRolesKV.values(), 1);
usageRolesEl.setHelpTextKey("admin.usage.roles.help", null);
usageRolesEl.select(USAGE_AUTHOR, onlyOfficeModule.isUsageRestrictedToAuthors());
usageRolesEl.select(USAGE_COACH, onlyOfficeModule.isUsageRestrictedToCoaches());
usageRolesEl.select(USAGE_MANAGERS, onlyOfficeModule.isUsageRestrictedToManagers());
// Thumbnails
uifactory.addSpacerElement("spacer.thumbnails", formLayout, false);
thumbnailsEnabledEl = uifactory.addCheckboxesHorizontal("admin.thumbnails.enabled", formLayout, ENABLED_KEYS, enabledValues);
thumbnailsEnabledEl.select(ENABLED_KEYS[0], onlyOfficeModule.isThumbnailsEnabled());
FormLayoutContainer buttonLayout = FormLayoutContainer.createButtonLayout("buttons", getTranslator());
formLayout.add("buttons", buttonLayout);
uifactory.addFormSubmitButton("save", buttonLayout);
}
private void initEditorValues() {
dataTransferConfirmationEnabledEl.select(ENABLED_KEYS[0], onlyOfficeModule.isDataTransferConfirmationEnabled());
Integer licenseEdit = onlyOfficeModule.getLicenseEdit();
boolean viewOnly = licenseEdit != null && licenseEdit.intValue() <= 0;
viewOnlyEl.select(ENABLED_KEYS[0], viewOnly);
usageRolesEl.select(USAGE_AUTHOR, onlyOfficeModule.isUsageRestrictedToAuthors());
usageRolesEl.select(USAGE_COACH, onlyOfficeModule.isUsageRestrictedToCoaches());
usageRolesEl.select(USAGE_MANAGERS, onlyOfficeModule.isUsageRestrictedToManagers());
}
private void initLicenseValues() {
Integer licenseEdit = onlyOfficeModule.getLicenseEdit();
String licenseEditValue = licenseEdit != null && licenseEdit.intValue() > -1? licenseEdit.toString() : null;
licenseEditEl.setValue(licenseEditValue);
Long editLicensesInUse = onlyOfficeService.getEditLicensesInUse();
editLicensesInUse = editLicensesInUse != null? editLicensesInUse: 0;
licenseInUseEl.setValue(editLicensesInUse.toString());
}
private void updateUI() {
boolean editorEnabled = editorEnabledEl.isAtLeastSelected(1);
if (editorEnabled) {
initEditorValues();
}
dataTransferConfirmationEnabledEl.setVisible(editorEnabled);
viewOnlyEl.setVisible(editorEnabled);
usageRolesEl.setVisible(editorEnabled);
updateLicenseUI();
}
private void updateLicenseUI() {
boolean editorEnabled = editorEnabledEl.isAtLeastSelected(1);
boolean notViewOnly = !viewOnlyEl.isAtLeastSelected(1);
if (editorEnabled && notViewOnly) {
initLicenseValues();
}
licenseEditEl.setVisible(editorEnabled && notViewOnly);
licenseInUseEl.setVisible(editorEnabled && notViewOnly);
}
@Override
protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
if (source == editorEnabledEl) {
updateUI();
} else if (source == viewOnlyEl) {
updateLicenseUI();
}
super.formInnerEvent(ureq, source, event);
}
@Override
protected boolean validateFormLogic(UserRequest ureq) {
boolean allOk = true;
......@@ -153,19 +226,31 @@ public class OnlyOfficeAdminController extends FormBasicController {
String jwtSecret = jwtSecretEl.getValue();
onlyOfficeModule.setJwtSecret(jwtSecret);
boolean dataTransferConfirmationEnabled = dataTransferConfirmationEnabledEl.isAtLeastSelected(1);
onlyOfficeModule.setDataTransferConfirmationEnabled(dataTransferConfirmationEnabled);
boolean editorEnabled = editorEnabledEl.isAtLeastSelected(1);
onlyOfficeModule.setEditorEnabled(editorEnabled);
String licenseEditValue = licenseEditEl.getValue();
Integer licenseEdit = StringHelper.containsNonWhitespace(licenseEditValue)
? Integer.valueOf(licenseEditValue)
: null;
onlyOfficeModule.setLicenseEdit(licenseEdit);
if (editorEnabled) {
boolean dataTransferConfirmationEnabled = dataTransferConfirmationEnabledEl.isAtLeastSelected(1);
onlyOfficeModule.setDataTransferConfirmationEnabled(dataTransferConfirmationEnabled);
Integer licenseEdit = -1;
boolean viewOnly = viewOnlyEl.isAtLeastSelected(1);
if (!viewOnly) {
String licenseEditValue = licenseEditEl.getValue();
licenseEdit = StringHelper.containsNonWhitespace(licenseEditValue)
? Integer.valueOf(licenseEditValue)
: null;
}
onlyOfficeModule.setLicenseEdit(licenseEdit);
Collection<String> restrictionKeys = usageRolesEl.getSelectedKeys();
onlyOfficeModule.setUsageRestrictedToAuthors(restrictionKeys.contains(USAGE_AUTHOR));
onlyOfficeModule.setUsageRestrictedToCoaches(restrictionKeys.contains(USAGE_COACH));
onlyOfficeModule.setUsageRestrictedToManagers(restrictionKeys.contains(USAGE_MANAGERS));
}
Collection<String> restrictionKeys = usageRolesEl.getSelectedKeys();
onlyOfficeModule.setUsageRestrictedToAuthors(restrictionKeys.contains(USAGE_AUTHOR));
onlyOfficeModule.setUsageRestrictedToCoaches(restrictionKeys.contains(USAGE_COACH));
onlyOfficeModule.setUsageRestrictedToManagers(restrictionKeys.contains(USAGE_MANAGERS));
boolean thumbnailsEnabled = thumbnailsEnabledEl.isAtLeastSelected(1);
onlyOfficeModule.setThumbnailsEnabled(thumbnailsEnabled);
}
@Override
......
......@@ -53,7 +53,6 @@ public class OnlyOfficeEditorController extends BasicController {
private static final Logger log = Tracing.createLoggerFor(OnlyOfficeEditorController.class);
private Access access;
private Mode openMode;
private Long openVfsMetadataKey;
@Autowired
......@@ -129,7 +128,7 @@ public class OnlyOfficeEditorController extends BasicController {
private void deleteAccess() {
if (access != null) {
log.info("Document (key={}) closed with ONLYOFFICE ({}) by {}", openVfsMetadataKey, openMode,
log.info("Document (key={}) closed with ONLYOFFICE ({}) by {}", openVfsMetadataKey, access.getMode(),
getIdentity());
docEditorService.deleteAccess(access);
}
......
admin.base.url=URL
admin.desc=ONLYOFFICE ist eine Software zur einzelnen oder gemeinsamen Bearbeitung von Dokumenten. Es unterst\u00FCtzt alle g\u00E4ngigen Dateiformate zur Textverarbeitung, Tabellenkalkulation und Pr\u00E4sentationen. Weitere Informationen sind auf der <a href\="http\://www.onlyoffice.com/" target\=_blank>Webseite</a> von ONLYOFFICE zu finden.
admin.editor.enabled=Dokumenteneditor
admin.license.edit=Verf\u00FCgbare Bearbeitungslizenzen
admin.license.edit.in.use=Aktuelle genutzte Bearbeitungslizenzen
admin.enabled=Modul "ONLYOFFICE"
admin.jwt.secret=Secret
admin.jwt.secret.invalid=Das Secret ist nicht g\u00FCltig. Vermutlich ist es zu kurz. Siehe: JWA Specification (RFC 7518, Section 3.2).
admin.title=ONLYOFFICE
admin.thumbnails.enabled=Thumbnails
admin.view.only=Bearbeitung nicht zulassen
admin.view.only.help=Durch das Aktivieren dieser Option, wird ONLYOFFICE nur zur Anzeige von Dokumenten verwendet. Diese k\u00F6nnen jedoch nicht mit ONLYOFFICE bearbeitet werden.
editor.display.name=ONLYOFFICE
editor.warning.locked=Das Dokument wird bereits in einem anderen Editor bearbeitet und kann deshalb in ONLYOFFICE nicht bearbeitet werden.
editor.warning.no.api.config=Dieses Dokument kann nicht angezeigt werden!
......
admin.base.url=URL
admin.desc=ONLYOFFICE is a software to edit documents online. It supports all major document, spreadsheet and presentation file formats. Key features are collaborative editing and excellent office file format support. Further information is available on the <a href\="https\://www.onlyoffice.com/" target\=_blank>website</a> of ONLYOFFICE
admin.editor.enabled=Document editor
admin.license.edit=Available edit licenses
admin.license.edit.in.use=Edit licenses in use
admin.enabled=Module "ONLYOFFICE"
admin.jwt.secret=Secret
admin.jwt.secret.invalid=The secret is not valid. Probably it is too short. See: JWA Specification (RFC 7518, Section 3.2).
admin.title=ONLYOFFICE
admin.thumbnails.enabled=Thumbnails
admin.view.only=Editing suppressed
admin.view.only.help=By activating this option, ONLYOFFICE is only used to display documents. However, they cannot be edited with ONLYOFFICE.
editor.display.name=ONLYOFFICE
editor.warning.locked=That document is already edited in another editor and therefore it is displayed in a read-only view.
editor.warning.no.api.config=It is not possible to display that document!
......
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- Define commenting and rating service implementation. Remove this bean if you don't want this service to be enabled at all -->
<bean id="thumbnailService" class="org.olat.core.commons.services.thumbnail.impl.ThumbnailServiceImpl">
<property name="thumbnailSPIes">
<list>
<bean class="org.olat.core.commons.services.thumbnail.impl.ImageToThumbnail">
<property name="imageHelper" ref="imageHelper"/>
</bean>
<bean class="org.olat.core.commons.services.thumbnail.impl.PDFToThumbnail">
<property name="imageHelper" ref="imageHelper"/>
</bean>
<ref bean="movieService"/>
</list>
</property>
</bean>
</beans>
......@@ -23,6 +23,7 @@ package org.olat.core.commons.services.thumbnail.impl;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.imageio.ImageIO;
import org.olat.core.commons.services.image.ImageService;
......@@ -30,6 +31,8 @@ import org.olat.core.commons.services.image.Size;
import org.olat.core.commons.services.thumbnail.FinalSize;
import org.olat.core.commons.services.thumbnail.ThumbnailSPI;
import org.olat.core.util.vfs.VFSLeaf;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
*
......@@ -40,28 +43,21 @@ import org.olat.core.util.vfs.VFSLeaf;
* Initial Date: 30 mar. 2010 <br>
* @author srosse, stephane.rosse@frentix.com
*/
@Service
public class ImageToThumbnail implements ThumbnailSPI {
private final List<String> extensions = new ArrayList<>();
@Autowired
private ImageService imageHelper;
/**
* [used by Spring]
* @param imageHelper
*/
public void setImageHelper(ImageService imageHelper) {
this.imageHelper = imageHelper;
}
public ImageToThumbnail() {
@PostConstruct
private void initExtensions() {
for(String imageIOSuffix : ImageIO.getWriterFileSuffixes()) {
extensions.add(imageIOSuffix);
}
}
@Override
public List<String> getExtensions() {
return extensions;
......
......@@ -29,6 +29,8 @@ import org.olat.core.commons.services.thumbnail.CannotGenerateThumbnailException
import org.olat.core.commons.services.thumbnail.FinalSize;
import org.olat.core.commons.services.thumbnail.ThumbnailSPI;
import org.olat.core.util.vfs.VFSLeaf;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
*
......@@ -38,17 +40,14 @@ import org.olat.core.util.vfs.VFSLeaf;
* <P>
* Initial Date: 30 mar. 2010 <br>
* @author srosse, stephane.rosse@frentix.com
*/
*/ @Service
public class PDFToThumbnail implements ThumbnailSPI {
private List<String> extensions = Collections.singletonList("pdf");
@Autowired
private ImageService imageHelper;
/**
* [used by Spring]
* @param imageHelper
*/
public void setImageHelper(ImageService imageHelper) {
this.imageHelper = imageHelper;
}
......
......@@ -20,7 +20,6 @@
package org.olat.core.commons.services.thumbnail.impl;
import java.util.ArrayList;
import java.util.List;
import org.olat.core.commons.services.thumbnail.CannotGenerateThumbnailException;
......@@ -30,6 +29,8 @@ import org.olat.core.commons.services.thumbnail.ThumbnailService;
import org.olat.core.util.FileUtils;
import org.olat.core.util.StringHelper;
import org.olat.core.util.vfs.VFSLeaf;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
*
......@@ -40,9 +41,11 @@ import org.olat.core.util.vfs.VFSLeaf;
* Initial Date: 30 mar. 2010 <br>
* @author srosse, stephane.rosse@frentix.com
*/
@Service
public class ThumbnailServiceImpl implements ThumbnailService {
private final List<ThumbnailSPI> thumbnailSPIes = new ArrayList<>();
@Autowired
private List<ThumbnailSPI> thumbnailSPIes;
public ThumbnailServiceImpl() {
//
......
......@@ -696,6 +696,7 @@ public class VFSRepositoryServiceImpl implements VFSRepositoryService, GenericEv
try {
FinalSize finalSize = thumbnailService.generateThumbnail(file, thumbnailLeaf, maxWidth, maxHeight, fill);
if(finalSize == null) {
thumbnailLeaf.deleteSilently();
thumbnailLeaf = null;
metadata.setCannotGenerateThumbnails(Boolean.TRUE);
metadataDao.updateMetadata(metadata);
......
/**
* <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.upgrade;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.nio.file.Paths;
import java.util.Properties;
import org.apache.logging.log4j.Logger;
import org.olat.core.commons.persistence.DB;
import org.olat.core.commons.services.doceditor.onlyoffice.OnlyOfficeModule;
import org.olat.core.logging.Tracing;
import org.olat.core.util.StringHelper;
import org.olat.core.util.WebappHelper;
import org.springframework.beans.factory.annotation.Autowired;
/**
*
* Initial date: 11 Sept 2020<br>
* @author uhensler, urs.hensler@frentix.com, http://www.frentix.com
*
*/
public class OLATUpgrade_15_3_0 extends OLATUpgrade {
private static final Logger log = Tracing.createLoggerFor(OLATUpgrade_15_3_0.class);
private static final String VERSION = "OLAT_15.3.0";
private static final String MIGRATE_ONLYOFFICE_CONFIGS = "MIGRATE ONLYOFFICE CONFIGS";
private static final String RESET_FAILED_THUMBNAILS = "RESET FAILED THUMBNAILS";
@Autowired
private DB dbInstance;
@Autowired
private OnlyOfficeModule onlyofficeModule;
public OLATUpgrade_15_3_0() {
super();
}
@Override
public String getVersion() {
return VERSION;
}
@Override
public boolean doPostSystemInitUpgrade(UpgradeManager upgradeManager) {
UpgradeHistoryData uhd = upgradeManager.getUpgradesHistory(VERSION);
if (uhd == null) {
// has never been called, initialize
uhd = new UpgradeHistoryData();
} else if (uhd.isInstallationComplete()) {
return false;
}
boolean allOk = true;
allOk &= migrateOnlyOfficeConfigs(upgradeManager, uhd);
allOk &= resetFailedThumbnails(upgradeManager, uhd);
uhd.setInstallationComplete(allOk);
upgradeManager.setUpgradesHistory(uhd, VERSION);
if(allOk) {
log.info(Tracing.M_AUDIT, "Finished OLATUpgrade_15_3_0 successfully!");
} else {
log.info(Tracing.M_AUDIT, "OLATUpgrade_15_3_0 not finished, try to restart OpenOlat!");
}
return allOk;
}
private boolean migrateOnlyOfficeConfigs(UpgradeManager upgradeManager, UpgradeHistoryData uhd) {
boolean allOk = true;
if (!uhd.getBooleanDataValue(MIGRATE_ONLYOFFICE_CONFIGS)) {
String userDataDirectory = WebappHelper.getUserDataRoot();
File configurationPropertiesFile = Paths.get(userDataDirectory, "system", "configuration", "org.olat.core.commons.services.doceditor.onlyoffice.OnlyOfficeModule.properties").toFile();
if (configurationPropertiesFile.exists()) {
Boolean enabled = null;
try (InputStream is = new FileInputStream(configurationPropertiesFile);) {
Properties configuredProperties = new Properties();
configuredProperties.load(is);
String enabledProp = configuredProperties.getProperty("onlyoffice.enabled");
if (StringHelper.containsNonWhitespace(enabledProp)) {
enabled = Boolean.valueOf(enabledProp);
}
} catch (Exception e) {
log.error("Error when reading / writing user properties config file from path::" + configurationPropertiesFile.getAbsolutePath(), e);
allOk &= false;
}
if (enabled != null && enabled.booleanValue()) {
onlyofficeModule.setEditorEnabled(true);
}
}
uhd.setBooleanDataValue(MIGRATE_ONLYOFFICE_CONFIGS, allOk);
upgradeManager.setUpgradesHistory(uhd, VERSION);
}
return allOk;
}
private boolean resetFailedThumbnails(UpgradeManager upgradeManager, UpgradeHistoryData uhd) {
boolean allOk = true;
if (!uhd.getBooleanDataValue(RESET_FAILED_THUMBNAILS)) {
try {
String query = "update filemetadata metadata set metadata.cannotGenerateThumbnails = false where metadata.cannotGenerateThumbnails = true";
dbInstance.getCurrentEntityManager()
.createQuery(query)
.executeUpdate();
dbInstance.commitAndCloseSession();
log.info("Failed thumbnails reste.");
} catch (Exception e) {
log.error("", e);
allOk = false;
}
uhd.setBooleanDataValue(RESET_FAILED_THUMBNAILS, allOk);
upgradeManager.setUpgradesHistory(uhd, VERSION);
}
return allOk;
}
}
......@@ -66,6 +66,7 @@
<bean id="upgrade_15_2_0" class="org.olat.upgrade.OLATUpgrade_15_2_0"/>
<bean id="upgrade_15_2_3" class="org.olat.upgrade.OLATUpgrade_15_2_2"/>
<bean id="upgrade_15_2_3_re" class="org.olat.upgrade.OLATUpgrade_15_2_3"/>
<bean id="upgrade_15_3_0" class="org.olat.upgrade.OLATUpgrade_15_3_0"/>
</list>
</property>
</bean>
......
......@@ -1700,6 +1700,10 @@ collabora.usage.restricted.managers=false
onlyoffice.enabled=false
onlyoffice.baseUrl=https://onlyoffice.example.org/
onlyoffice.api.path=web-apps/apps/api/documents/api.js
onlyoffice.conversion.path=ConvertService.ashx
## File editor
onlyoffice.editor.enabled=false
# Number of usable edit license.
# You may leave the field blank to supress the licnese check.
onlyoffice.license.edit=
......@@ -1708,6 +1712,8 @@ onlyoffice.usage.restricted.authors=false
onlyoffice.usage.restricted.coaches=false
onlyoffice.usage.restricted.managers=false
## Thumbnails
onlyoffice.thumbnails.enabled=true
########################################
# Options for Office 365
......
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