Skip to content
Snippets Groups Projects
Commit 8602bcc4 authored by srosse's avatar srosse
Browse files

OO-1352: add static resource folder

parent 29b72a86
No related branches found
No related tags found
No related merge requests found
Showing
with 202 additions and 163 deletions
......@@ -25,21 +25,23 @@
package org.olat.admin.sysinfo;
import org.olat.admin.AdminModule;
import org.olat.core.CoreSpringFactory;
import org.olat.admin.sysinfo.manager.CustomStaticFolderManager;
import org.olat.core.commons.fullWebApp.util.GlobalStickyMessage;
import org.olat.core.commons.modules.bc.FolderRunController;
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.panel.StackedPanel;
import org.olat.core.gui.components.panel.SimpleStackedPanel;
import org.olat.core.gui.components.velocity.VelocityContainer;
import org.olat.core.gui.control.Controller;
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.core.helpers.Settings;
import org.olat.properties.Property;
import org.olat.properties.PropertyManager;
import org.springframework.beans.factory.annotation.Autowired;
/**
* Description:<br>
......@@ -51,10 +53,18 @@ import org.olat.properties.PropertyManager;
*/
public class InfoMessageControllerSingleVM extends BasicController {
private Link infomsgEditButton,infomsgClearButton, maintenancemsgEditButton,maintenancemsgClearButton;
private VelocityContainer infoMsgView, infoMsgEdit;
private InfoMsgForm infoMsgForm, maintenanceMsgForm;
private StackedPanel container;
private final Link infomsgEditButton,infomsgClearButton, maintenancemsgEditButton, maintenancemsgClearButton;
private final VelocityContainer infoMsgView, infoMsgEdit;
private final InfoMsgForm infoMsgForm, maintenanceMsgForm;
private final FolderRunController staticFolderCtrl;
private final StackedPanel container;
@Autowired
private PropertyManager pm;
@Autowired
private InfoMessageManager mrg;
@Autowired
private CustomStaticFolderManager staticFolderMgr;
/**
*
......@@ -63,12 +73,11 @@ public class InfoMessageControllerSingleVM extends BasicController {
*/
public InfoMessageControllerSingleVM(UserRequest ureq, WindowControl control) {
super(ureq, control);
container = new SimpleStackedPanel("container");
infoMsgView = createVelocityContainer("infomsg");
infoMsgEdit = createVelocityContainer("infomsgEdit");
infoMsgView.contextPut("cluster", Boolean.FALSE);
infoMsgEdit.contextPut("cluster", Boolean.FALSE);
PropertyManager pm = PropertyManager.getInstance();
Property p = pm.findProperty(null, null, null, AdminModule.SYSTEM_PROPERTY_CATEGORY, AdminModule.PROPERTY_MAINTENANCE_MESSAGE);
String adminToken = (p == null ? "" : p.getStringValue());
infoMsgView.contextPut("admintoken", adminToken);
......@@ -78,15 +87,13 @@ public class InfoMessageControllerSingleVM extends BasicController {
maintenancemsgEditButton = LinkFactory.createButton("maintenancemsgEdit", infoMsgView, this);
maintenancemsgClearButton = LinkFactory.createButton("maintenancemsgClear", infoMsgView, this);
//info message stuff
InfoMessageManager mrg = (InfoMessageManager)CoreSpringFactory.getBean(InfoMessageManager.class);
//login
String infoMsg = mrg.getInfoMessage();
if (infoMsg != null && infoMsg.length() > 0) {
infoMsgView.contextPut("infomsg", infoMsg);
}
infoMsgForm = new InfoMsgForm(ureq, control, infoMsg);
listenTo(infoMsgForm);
infoMsgEdit.put("infoMsgForm", infoMsgForm.getInitialComponent());
//maintenance message stuff
......@@ -98,47 +105,48 @@ public class InfoMessageControllerSingleVM extends BasicController {
listenTo(maintenanceMsgForm);
infoMsgEdit.put("maintenanceMsgForm", maintenanceMsgForm.getInitialComponent());
container.setContent(infoMsgView);
// /customizing/static/
staticFolderCtrl = new FolderRunController(staticFolderMgr.getRootContainer(), true, ureq, control);
listenTo(staticFolderCtrl);
infoMsgEdit.put("staticFolder", staticFolderCtrl.getInitialComponent());
String url = Settings.getServerContextPathURI() + "/raw/static/";
infoMsgEdit.contextPut("extlink", url);
putInitialPanel(container);
container = putInitialPanel(infoMsgView);
}
@Override
protected void doDispose() {
//
}
/**
* @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, org.olat.core.gui.components.Component, org.olat.core.gui.control.Event)
*/
@Override
protected void event(UserRequest ureq, Component source, Event event) {
if (source == infomsgEditButton){
infoMsgEdit.contextPut("infoEdit", Boolean.TRUE);
infoMsgEdit.contextPut("cluster", Boolean.FALSE);
container.pushContent(infoMsgEdit);
}
else if (source == maintenancemsgEditButton){
} else if (source == maintenancemsgEditButton){
infoMsgEdit.contextPut("infoEdit", Boolean.FALSE);
infoMsgEdit.contextPut("cluster", Boolean.FALSE);
container.pushContent(infoMsgEdit);
}
// clear buttons
else if (source == maintenancemsgClearButton){
} else if (source == maintenancemsgClearButton){
GlobalStickyMessage.setGlobalStickyMessage("", true);
infoMsgView.contextRemove("maintenanceMsgAllNodes");
maintenanceMsgForm.reset();
}
else if (source == infomsgClearButton){
InfoMessageManager mrg = (InfoMessageManager)CoreSpringFactory.getBean(InfoMessageManager.class);
} else if (source == infomsgClearButton){
mrg.setInfoMessage("");
infoMsgView.contextRemove("infomsg");
infoMsgForm.reset();
}
}
@Override
protected void event(UserRequest ureq, Controller source, Event event) {
if (source == infoMsgForm && event == Event.DONE_EVENT) {
if (source == infoMsgForm) {
if(event == Event.DONE_EVENT) {
String infoMsg = infoMsgForm.getInfoMsg();
InfoMessageManager mrg = (InfoMessageManager)CoreSpringFactory.getBean(InfoMessageManager.class);
mrg.setInfoMessage(infoMsg);
if (infoMsg != null && infoMsg.length() > 0) {
infoMsgView.contextPut("infomsg", infoMsg);
......@@ -146,8 +154,10 @@ public class InfoMessageControllerSingleVM extends BasicController {
} else {
infoMsgView.contextRemove("infomsg");
}
container.popContent();
} else if (source == maintenanceMsgForm && event == Event.DONE_EVENT) {
}
container.popContent();
} else if (source == maintenanceMsgForm) {
if(event == Event.DONE_EVENT) {
String maintenanceMsg = maintenanceMsgForm.getInfoMsg();
GlobalStickyMessage.setGlobalStickyMessage(maintenanceMsg, true);
if (maintenanceMsg != null && maintenanceMsg.length() > 0) {
......@@ -156,38 +166,24 @@ public class InfoMessageControllerSingleVM extends BasicController {
} else {
infoMsgView.contextRemove("maintenanceMsgAllNodes");
}
container.popContent();
}
if (event == Event.CANCELLED_EVENT && (source == infoMsgForm || source == maintenanceMsgForm)) {
}
container.popContent();
}
}
protected VelocityContainer getViewContainer() {
return infoMsgView;
}
protected VelocityContainer getEditContainer() {
return infoMsgEdit;
}
protected StackedPanel getMainContainer() {
return container;
}
protected InfoMsgForm getMaintenanceMsgForm() {
return maintenanceMsgForm;
}
/**
* @see org.olat.core.gui.control.DefaultController#doDispose()
*/
@Override
protected void doDispose() {
// TODO Auto-generated method stub
}
}
}
\ No newline at end of file
......@@ -29,6 +29,7 @@
package org.olat.admin.sysinfo;
import org.olat.admin.sysinfo.manager.CustomStaticFolderManager;
import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.form.flexible.FormItemContainer;
import org.olat.core.gui.components.form.flexible.elements.RichTextElement;
......@@ -38,6 +39,7 @@ import org.olat.core.gui.components.form.flexible.impl.elements.richText.RichTex
import org.olat.core.gui.control.Controller;
import org.olat.core.gui.control.Event;
import org.olat.core.gui.control.WindowControl;
import org.springframework.beans.factory.annotation.Autowired;
/**
* Initial Date: Apr 30, 2004
......@@ -49,7 +51,10 @@ import org.olat.core.gui.control.WindowControl;
public class InfoMsgForm extends FormBasicController {
private RichTextElement msg;
private String infomsg;
private final String infomsg;
@Autowired
private CustomStaticFolderManager staticFolderMgr;
/**
* @param name
......@@ -73,7 +78,6 @@ public class InfoMsgForm extends FormBasicController {
msg.setValue("");
}
@Override
protected void formOK(UserRequest ureq) {
fireEvent(ureq, Event.DONE_EVENT);
......@@ -86,9 +90,9 @@ public class InfoMsgForm extends FormBasicController {
@Override
protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
msg = uifactory.addRichTextElementForStringData("msg", "infomsg", infomsg, 20, 70, true, null, null, formLayout, ureq.getUserSession(), getWindowControl());
msg = uifactory.addRichTextElementForStringData("msg", "infomsg", infomsg, 20, 70, true, staticFolderMgr.getRootContainer(), null, formLayout, ureq.getUserSession(), getWindowControl());
msg.setMaxLength(1024);
RichTextConfiguration richTextConfig = msg.getEditorConfiguration();
// manually enable the source edit button
richTextConfig.enableCode();
......@@ -98,6 +102,7 @@ public class InfoMsgForm extends FormBasicController {
// add style buttons to make alert style available
richTextConfig.setContentCSSFromTheme(getWindowControl().getWindowBackOffice().getWindow().getGuiTheme());
richTextConfig.enableStyleSelection();
richTextConfig.setLinkBrowserAbsolutFilePath("/raw/static/");
FormLayoutContainer buttonGroupLayout = FormLayoutContainer.createButtonLayout("buttonGroupLayout", getTranslator());
formLayout.add(buttonGroupLayout);
......@@ -109,5 +114,4 @@ public class InfoMsgForm extends FormBasicController {
protected void doDispose() {
//
}
}
}
\ No newline at end of file
#if ($infoEdit)
<h3>$r.translate("infomsgEdit")</h3>
#if ($cluster)
......@@ -13,4 +12,8 @@
#else
$r.render("maintenanceMsgForm")
#end
#end
\ No newline at end of file
#end
<h3>$r.translate("staticFolder")</h3>
<div class="o_copy_code">$extlink</div>
$r.render("staticFolder")
\ No newline at end of file
......@@ -151,6 +151,7 @@ session.timeout.label=DMZ Session Timeout in Sekunden
sessionadministration.title=Session Administration
sessions=Sessions
snoop=Snoop
staticFolder=Static Ordner
sysinfo=Systeminformation
sysinfo.basedir=Webapp Verzeichnis
sysinfo.cluster=Cluster
......
......@@ -151,6 +151,7 @@ session.timeout.label=DMZ session timeout in seconds
sessionadministration.title=Session administration
sessions=Sessions
snoop=Snoop
staticFolder=Static folder
sysinfo=System information
sysinfo.basedir=Webapp directory
sysinfo.cluster=Cluster
......
/**
* <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.admin.sysinfo.manager;
import java.io.File;
import org.olat.core.commons.services.webdav.WebDAVProvider;
import org.olat.core.id.IdentityEnvironment;
import org.olat.core.logging.OLog;
import org.olat.core.logging.Tracing;
import org.olat.core.util.WebappHelper;
import org.olat.core.util.vfs.LocalFolderImpl;
import org.olat.core.util.vfs.VFSContainer;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Service;
/**
*
* Initial date: 22.01.2015<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*
*/
@Service
public class CustomStaticFolderManager implements InitializingBean, WebDAVProvider {
private static final OLog log = Tracing.createLoggerFor(CustomStaticFolderManager.class);
public static final String STATIC_FOLDER = "/customizing/static/";
private static final String MOUNT_POINT = "customizing";
@Override
public void afterPropertiesSet() throws Exception {
File file = new File(WebappHelper.getUserDataRoot(), STATIC_FOLDER);
if(!file.exists()) {
if(!file.mkdirs()) {
log.error("/customizing/static/ folder cannot be created");
}
}
}
public VFSContainer getRootContainer() {
File file = new File(WebappHelper.getUserDataRoot(), STATIC_FOLDER);
return new LocalFolderImpl(file);
}
public File getRootFile() {
return new File(WebappHelper.getUserDataRoot(), STATIC_FOLDER);
}
@Override
public String getMountPoint() {
return MOUNT_POINT;
}
@Override
public VFSContainer getContainer(IdentityEnvironment identityEnv) {
if(identityEnv != null && identityEnv.getRoles() != null && identityEnv.getRoles().isOLATAdmin()) {
return getRootContainer();
}
return null;
}
}
\ No newline at end of file
......@@ -45,6 +45,7 @@ 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.core.util.FileUtils;
import org.olat.core.util.StringHelper;
import org.olat.core.util.WebappHelper;
import org.olat.core.util.vfs.Quota;
import org.olat.core.util.vfs.VFSContainer;
......@@ -77,6 +78,7 @@ public class FileLinkChooserController extends BasicController {
private final String fileName;
private String[] suffixes;
private final String absolutePath;
private VFSContainer rootDir;
@Autowired
private MovieService movieService;
......@@ -93,11 +95,12 @@ public class FileLinkChooserController extends BasicController {
* index.html
*/
public FileLinkChooserController(UserRequest ureq, WindowControl wControl,
VFSContainer rootDir, String uploadRelPath, String[] suffixes, String fileName) {
VFSContainer rootDir, String uploadRelPath, String absolutePath, String[] suffixes, String fileName) {
super(ureq, wControl);
this.fileName = fileName;
this.suffixes = suffixes;
this.rootDir = rootDir;
this.absolutePath = absolutePath;
this.mainVC = createVelocityContainer("filechooser");
// file uploads are relative to the currently edited file
......@@ -174,19 +177,12 @@ public class FileLinkChooserController extends BasicController {
putInitialPanel(mainVC);
}
/**
* @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
* org.olat.core.gui.components.Component,
* org.olat.core.gui.control.Event)
*/
@Override
public void event(UserRequest ureq, Component source, Event event) {
// no events to catch
}
/**
* @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
* org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event)
*/
@Override
public void event(UserRequest ureq, Controller source, Event event) {
if (source == uploadCtr) {
if (event instanceof FolderEvent) {
......@@ -197,10 +193,16 @@ public class FileLinkChooserController extends BasicController {
if(item != null) {
size = getSize(item, item.getName());
}
String relPath = folderEvent.getFilename();
if(StringHelper.containsNonWhitespace(absolutePath)) {
relPath = absolutePath + relPath;
}
if(size != null) {
fireEvent(ureq, new URLChoosenEvent(folderEvent.getFilename(), null, null, null, size.getWidth(), size.getHeight()));
fireEvent(ureq, new URLChoosenEvent(relPath, null, null, null, size.getWidth(), size.getHeight()));
} else {
fireEvent(ureq, new URLChoosenEvent(folderEvent.getFilename()));
fireEvent(ureq, new URLChoosenEvent(relPath));
}
} else {
setErrorMessage(folderEvent.getFilename());
......@@ -224,6 +226,9 @@ public class FileLinkChooserController extends BasicController {
String relPath = FileChooserUIFactory
.getSelectedRelativeItemPath(fileEvent, rootDir, fileName);
// notify parent controller
if(StringHelper.containsNonWhitespace(absolutePath)) {
relPath = absolutePath + relPath;
}
if(size != null) {
fireEvent(ureq, new URLChoosenEvent(relPath, null, null, null, size.getWidth(), size.getHeight()));
......@@ -249,13 +254,13 @@ public class FileLinkChooserController extends BasicController {
return size;
}
private boolean isFileSuffixOk(String fileName) {
private boolean isFileSuffixOk(String filename) {
if (suffixes == null) {
// no defined suffixes => all allowed
return true;
} else {
// check if siffix one of allowed suffixes
String suffix = getSuffix(fileName);
String suffix = getSuffix(filename);
for (String allowedSuffix : suffixes) {
if (allowedSuffix.equals(suffix)) {
return true;
......@@ -280,13 +285,14 @@ public class FileLinkChooserController extends BasicController {
allowedSuffixes.toString() }));
}
private String getSuffix(String fileName) {
return fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
private String getSuffix(String filename) {
return filename.substring(filename.lastIndexOf(".") + 1).toLowerCase();
}
/**
* @see org.olat.core.gui.control.DefaultController#doDispose(boolean)
*/
@Override
protected void doDispose() {
// controllers autodisposed by basic controller
}
......
......@@ -69,7 +69,8 @@ public class LinkChooserController extends BasicController {
* tree model. The internal-link chooser tab won't be shown when the
* internalLinkTreeModel is null.
*/
public LinkChooserController(UserRequest ureq, WindowControl wControl, VFSContainer rootDir, String uploadRelPath, String[] suffixes, String fileName,
public LinkChooserController(UserRequest ureq, WindowControl wControl, VFSContainer rootDir,
String uploadRelPath, String absolutPath, String[] suffixes, String fileName,
CustomLinkTreeModel customLinkTreeModel) {
super(ureq, wControl);
......@@ -78,7 +79,7 @@ public class LinkChooserController extends BasicController {
linkChooserTabbedPane = new TabbedPane("linkChooserTabbedPane", ureq.getLocale());
tabbedPaneViewVC.put("linkChooserTabbedPane", linkChooserTabbedPane);
fileLinkChooserController = new FileLinkChooserController(ureq, wControl, rootDir, uploadRelPath, suffixes, fileName);
fileLinkChooserController = new FileLinkChooserController(ureq, wControl, rootDir, uploadRelPath, absolutPath, suffixes, fileName);
listenTo(fileLinkChooserController);
linkChooserTabbedPane.addTab(translate("linkchooser.tabbedpane.label.filechooser"), fileLinkChooserController.getInitialComponent());
......
......@@ -64,7 +64,7 @@ public class MediaChooserController extends LinkChooserController {
*/
public MediaChooserController(UserRequest ureq, WindowControl wControl, VFSContainer rootDir, String uploadRelPath, String[] suffixes, String fileName,
CustomLinkTreeModel customLinkTreeModel) {
super(ureq, wControl, rootDir, uploadRelPath, suffixes, fileName, customLinkTreeModel);
super(ureq, wControl, rootDir, uploadRelPath, null, suffixes, fileName, customLinkTreeModel);
}
/**
......
......@@ -87,7 +87,7 @@ public class FileCopyController extends LinkChooserController {
public FileCopyController(UserRequest ureq, WindowControl wControl, VFSContainer rootDir,
FolderComponent folderComponent) {
super(ureq, wControl, rootDir, null, null, "", null);
super(ureq, wControl, rootDir, null, null, null, "", null);
this.folderComponent = folderComponent;
vfsLockManager = CoreSpringFactory.getImpl(VFSLockManager.class);
}
......
......@@ -139,6 +139,7 @@ public class RichTextConfiguration implements Disposable {
private VFSContainer linkBrowserBaseContainer;
private String linkBrowserUploadRelPath;
private String linkBrowserRelativeFilePath;
private String linkBrowserAbsolutFilePath;
private CustomLinkTreeModel linkBrowserCustomTreeModel;
// DOM ID of the flexi form element
private String domID;
......@@ -698,6 +699,14 @@ public class RichTextConfiguration implements Disposable {
return linkBrowserRelativeFilePath;
}
public String getLinkBrowserAbsolutFilePath() {
return linkBrowserAbsolutFilePath;
}
public void setLinkBrowserAbsolutFilePath(String linkBrowserAbsolutFilePath) {
this.linkBrowserAbsolutFilePath = linkBrowserAbsolutFilePath;
}
/**
* Get the optional custom link browser tree model
* @return the model or NULL if not defined
......
......@@ -23,7 +23,6 @@ package org.olat.core.gui.components.form.flexible.impl.elements.richText;
import org.olat.core.commons.controllers.linkchooser.CustomLinkTreeModel;
import org.olat.core.commons.controllers.linkchooser.LinkChooserController;
import org.olat.core.commons.fullWebApp.LayoutMain3ColsController;
import org.olat.core.dispatcher.impl.StaticMediaDispatcher;
import org.olat.core.gui.UserRequest;
import org.olat.core.gui.Windows;
import org.olat.core.gui.components.ComponentRenderer;
......@@ -33,9 +32,7 @@ import org.olat.core.gui.control.JSAndCSSAdder;
import org.olat.core.gui.control.WindowControl;
import org.olat.core.gui.control.creator.ControllerCreator;
import org.olat.core.gui.control.generic.popup.PopupBrowserWindow;
import org.olat.core.gui.render.StringOutput;
import org.olat.core.gui.render.ValidationResult;
import org.olat.core.helpers.Settings;
import org.olat.core.util.vfs.VFSContainer;
/**
......@@ -54,13 +51,11 @@ class RichTextElementComponent extends FormBaseComponentImpl {
private static final String CMD_IMAGEBROWSER = "image";
private static final String CMD_FLASHPLAYERBROWSER = "flashplayer";
private static final String CMD_FILEBROWSER = "file";
private static final ComponentRenderer RENDERER = new RichTextElementRenderer();
private ComponentRenderer RENDERER = new RichTextElementRenderer();
private RichTextElementImpl element;
private final RichTextElementImpl element;
private int cols;
private int rows;
private boolean useTiny4 = true;
/**
* Constructor for a text area element
......@@ -108,54 +103,13 @@ class RichTextElementComponent extends FormBaseComponentImpl {
this.rows = rows;
}
public boolean isUseTiny4() {
return useTiny4;
}
/**
* @see org.olat.core.gui.components.Component#validate(org.olat.core.gui.UserRequest,
* org.olat.core.gui.render.ValidationResult)
*/
@Override
public void validate(UserRequest ureq, ValidationResult vr) {
super.validate(ureq, vr);
JSAndCSSAdder jsa = vr.getJsAndCSSAdder();
if(useTiny4) {
jsa.addRequiredStaticJsFile("js/tinymce4/BTinyHelper.js");
} else {
// Add tiny helper library
//jsa.addRequiredJsFile(RichTextElementComponent.class,"js/BTinyHelper.js", "UTF-8");
jsa.addRequiredStaticJsFile("js/tinymce/BTinyHelper.js");
// When the tiny_mce.js is inserted via AJAX, we need to setup some
// variables first to make it load properly:
StringOutput sb = new StringOutput();
// 1) Use tinyMCEPreInit to prevent TinyMCE to guess the script URL. The
// script URL is needed because TinyMCE will load CSS, plugins and other
// resources
sb.append("tinyMCEPreInit = {};")
.append("tinyMCEPreInit.suffix = '';")
.append("tinyMCEPreInit.base = '");
StaticMediaDispatcher.renderStaticURI(sb, "js/tinymce/tinymce", false);
sb.append("';");
// 2) Tell TinyMCE that the page has already been loaded
sb.append("tinyMCE_GZ = {};");
sb.append("tinyMCE_GZ.loaded = true;");
String preAJAXinsertionCode = sb.toString();
// Now add tiny library itself. TinyMCE files are written in iso-8859-1
// (important, IE panics otherwise with error 8002010)
if (Settings.isDebuging()) {
jsa.addRequiredStaticJsFile("js/tinymce/tinymce/tiny_mce_src.js", "ISO-8859-1",preAJAXinsertionCode);
} else {
jsa.addRequiredStaticJsFile("js/tinymce/tinymce/tiny_mce.js", "ISO-8859-1", preAJAXinsertionCode);
}
}
jsa.addRequiredStaticJsFile("js/tinymce4/BTinyHelper.js");
}
@Override
protected void doDispatchRequest(UserRequest ureq) {
// SPECIAL CASE - normally this method is never overriden. For the rich text
......@@ -170,7 +124,6 @@ class RichTextElementComponent extends FormBaseComponentImpl {
setDirty(false);
}
private void createFileSelectorPopupWindow(final UserRequest ureq, final String type, final String fileName) {
// Get allowed suffixes from configuration and requested media browser type from event
final RichTextConfiguration config = element.getEditorConfiguration();
......@@ -195,14 +148,15 @@ class RichTextElementComponent extends FormBaseComponentImpl {
LinkChooserController myLinkChooserController;
VFSContainer baseContainer = config.getLinkBrowserBaseContainer();
String uploadRelPath = config.getLinkBrowserUploadRelPath();
String absolutePath = config.getLinkBrowserAbsolutFilePath();
CustomLinkTreeModel linkBrowserCustomTreeModel = config.getLinkBrowserCustomLinkTreeModel();
if (type.equals(CMD_FILEBROWSER)) {
// when in file mode we include the internal links to the selection
//FIXME: user activity logger
myLinkChooserController = new LinkChooserController(lureq, lwControl, baseContainer, uploadRelPath, suffixes, fileName, linkBrowserCustomTreeModel);
myLinkChooserController = new LinkChooserController(lureq, lwControl, baseContainer, uploadRelPath, absolutePath, suffixes, fileName, linkBrowserCustomTreeModel);
} else {
// in media or image mode, internal links make no sense here
myLinkChooserController = new LinkChooserController(lureq, lwControl, baseContainer, uploadRelPath, suffixes, fileName, null);
myLinkChooserController = new LinkChooserController(lureq, lwControl, baseContainer, uploadRelPath, absolutePath, suffixes, fileName, null);
}
return new LayoutMain3ColsController(lureq, lwControl, myLinkChooserController);
}
......
......@@ -25,11 +25,10 @@ import java.util.List;
import org.apache.commons.lang.StringEscapeUtils;
import org.olat.core.dispatcher.impl.StaticMediaDispatcher;
import org.olat.core.gui.components.Component;
import org.olat.core.gui.components.ComponentRenderer;
import org.olat.core.gui.components.DefaultComponentRenderer;
import org.olat.core.gui.components.form.flexible.impl.FormJSHelper;
import org.olat.core.gui.render.RenderResult;
import org.olat.core.gui.render.Renderer;
import org.olat.core.gui.render.RenderingState;
import org.olat.core.gui.render.StringOutput;
import org.olat.core.gui.render.URLBuilder;
import org.olat.core.gui.translator.Translator;
......@@ -46,7 +45,7 @@ import org.olat.core.util.Formatter;
*
* @author gnaegi
*/
class RichTextElementRenderer implements ComponentRenderer {
class RichTextElementRenderer extends DefaultComponentRenderer {
/**
* @see org.olat.core.gui.components.ComponentRenderer#render(org.olat.core.gui.render.Renderer,
......@@ -85,7 +84,7 @@ class RichTextElementRenderer implements ComponentRenderer {
sb.append("\" >");
sb.append(Formatter.formatLatexFormulas(value));
sb.append("</div>");
} else if(teC.isUseTiny4()) {
} else {
renderTinyMCE_4(sb, domID, teC, ubu, source.getTranslator());
}
}
......@@ -165,32 +164,4 @@ class RichTextElementRenderer implements ComponentRenderer {
sb.append(StringEscapeUtils.escapeHtml(value));
sb.append("</textarea>");
}
/**
* @see org.olat.core.gui.components.ComponentRenderer#renderBodyOnLoadJSFunctionCall(org.olat.core.gui.render.Renderer,
* org.olat.core.gui.render.StringOutput,
* org.olat.core.gui.components.Component,
* org.olat.core.gui.render.RenderingState)
*/
@Override
public void renderBodyOnLoadJSFunctionCall(Renderer renderer,
StringOutput sb, Component source, RenderingState rstate) {
// nothing to load
}
/**
* @see org.olat.core.gui.components.ComponentRenderer#renderHeaderIncludes(org.olat.core.gui.render.Renderer,
* org.olat.core.gui.render.StringOutput,
* org.olat.core.gui.components.Component,
* org.olat.core.gui.render.URLBuilder,
* org.olat.core.gui.translator.Translator,
* org.olat.core.gui.render.RenderingState)
*/
@Override
public void renderHeaderIncludes(Renderer renderer, StringOutput sb,
Component source, URLBuilder ubu, Translator translator,
RenderingState rstate) {
// no headers to include
}
}
......@@ -27,6 +27,8 @@ import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.olat.admin.sysinfo.manager.CustomStaticFolderManager;
import org.olat.core.CoreSpringFactory;
import org.olat.core.gui.media.FileMediaResource;
import org.olat.core.gui.media.MediaResource;
import org.olat.core.gui.media.ServletUtil;
......@@ -81,6 +83,18 @@ public class StaticServlet extends HttpServlet {
if (pathInfo.indexOf(NOVERSION) != -1) {
// no version provided - only remove mapper
staticRelPath = pathInfo.substring(NOVERSION.length() + 1, pathInfo.length());
} else if (pathInfo.startsWith(STATIC_DIR_NAME)) {
staticRelPath = pathInfo.substring(STATIC_DIR_NAME.length() + 1, pathInfo.length());
//customizing
CustomStaticFolderManager folderManager = CoreSpringFactory.getImpl(CustomStaticFolderManager.class);
File file = new File(folderManager.getRootFile(), staticRelPath);
if(file.exists()) {
MediaResource resource = new FileMediaResource(file);
ServletUtil.serveResource(request, response, resource);
} else {
response.sendError(HttpServletResponse.SC_NOT_FOUND);
}
return;
} else {
// version provided - remove it
String version;
......
......@@ -463,7 +463,7 @@ public class DialogElementsController extends BasicController {
private class MyLinkChooserController extends LinkChooserController {
public MyLinkChooserController(UserRequest ureq, WindowControl wControl, VFSContainer rootDir, String uploadRelPath) {
super(ureq, wControl, rootDir, uploadRelPath, null, "", null);
super(ureq, wControl, rootDir, uploadRelPath, null, null, "", null);
}
@Override
......
......@@ -25,7 +25,7 @@ var BPlayer = {
insertHTML5Player : function (address, domId, width, height, start, duration, provider, streamer, autostart, repeat, controlbar, poster) {
var videoUrl = address
if(address.indexOf('://') < 0 && (address.indexOf('/secstatic/qtieditor/') >= 0 || address.indexOf('/secstatic/qti/') >= 0)) {
if(address.indexOf('://') < 0 && (address.indexOf('/raw/static/') == 0 || address.indexOf('/secstatic/qtieditor/') >= 0 || address.indexOf('/secstatic/qti/') >= 0)) {
videoUrl = address;
} else if(address.indexOf('://') < 0 && ((provider != "rtmp" && provider != "http") ||
((provider == "rtmp" || provider == "http") && (streamer == undefined || streamer.length == 0)))) {
......
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