Skip to content
Snippets Groups Projects
Commit 649e1a71 authored by srosse's avatar srosse
Browse files

OO-1059: add notification trigger to create, edit, edit metadata, move, copy,...

OO-1059: add notification trigger to create, edit, edit metadata, move, copy, unzip command in briefcase folder
parent 51f16d60
No related branches found
No related tags found
No related merge requests found
......@@ -36,6 +36,8 @@ import org.olat.core.commons.modules.bc.FolderEvent;
import org.olat.core.commons.modules.bc.components.FolderComponent;
import org.olat.core.commons.modules.bc.meta.MetaInfo;
import org.olat.core.commons.modules.bc.meta.MetaInfoFactory;
import org.olat.core.commons.services.notifications.NotificationsManager;
import org.olat.core.commons.services.notifications.SubscriptionContext;
import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.Component;
import org.olat.core.gui.components.panel.Panel;
......@@ -54,6 +56,7 @@ import org.olat.core.util.vfs.VFSContainer;
import org.olat.core.util.vfs.VFSItem;
import org.olat.core.util.vfs.VFSLeaf;
import org.olat.core.util.vfs.VFSManager;
import org.olat.core.util.vfs.callbacks.VFSSecurityCallback;
import org.olat.core.util.vfs.util.ContainerAndFile;
/**
......@@ -135,16 +138,16 @@ public class CmdCreateFile extends BasicController implements FolderCommand {
if (event == Event.DONE_EVENT) {
// we're done, notify listerers
fireEvent(ureq, new FolderEvent(FolderEvent.NEW_FILE_EVENT, fileName));
fireEvent(ureq, FolderCommand.FOLDERCOMMAND_FINISHED);
notifyFinished(ureq);
} else if(event == Event.CANCELLED_EVENT){
fireEvent(ureq, FolderCommand.FOLDERCOMMAND_FINISHED);
fireEvent(ureq, FOLDERCOMMAND_FINISHED);
}
} else if(source == createFileForm) {
if(event == Event.CANCELLED_EVENT){
fireEvent(ureq, FolderCommand.FOLDERCOMMAND_FINISHED);
fireEvent(ureq, FOLDERCOMMAND_FINISHED);
} else if (event == Event.FAILED_EVENT) {
status = FolderCommandStatus.STATUS_FAILED;
fireEvent(ureq, FolderCommand.FOLDERCOMMAND_FINISHED);
notifyFinished(ureq);
}
else if (event == Event.DONE_EVENT) {
// start HTML editor with the folders root folder as base and the file
......@@ -180,6 +183,18 @@ public class CmdCreateFile extends BasicController implements FolderCommand {
}
}
}
private void notifyFinished(UserRequest ureq) {
VFSContainer container = VFSManager.findInheritingSecurityCallbackContainer(folderComponent.getRootContainer());
VFSSecurityCallback secCallback = container.getLocalSecurityCallback();
if(secCallback != null) {
SubscriptionContext subsContext = secCallback.getSubscriptionContext();
if (subsContext != null) {
NotificationsManager.getInstance().markPublisherNews(subsContext, ureq.getIdentity(), true);
}
}
fireEvent(ureq, FOLDERCOMMAND_FINISHED);
}
public String getFileName() {
return fileName;
......
......@@ -37,6 +37,8 @@ import org.olat.core.commons.editor.plaintexteditor.PlainTextEditorController;
import org.olat.core.commons.modules.bc.components.FolderComponent;
import org.olat.core.commons.modules.bc.components.ListRenderer;
import org.olat.core.commons.modules.bc.version.VersionCommentController;
import org.olat.core.commons.services.notifications.NotificationsManager;
import org.olat.core.commons.services.notifications.SubscriptionContext;
import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.Component;
import org.olat.core.gui.control.Controller;
......@@ -52,12 +54,14 @@ import org.olat.core.util.vfs.VFSItem;
import org.olat.core.util.vfs.VFSLeaf;
import org.olat.core.util.vfs.VFSLockManager;
import org.olat.core.util.vfs.VFSManager;
import org.olat.core.util.vfs.callbacks.VFSSecurityCallback;
import org.olat.core.util.vfs.util.ContainerAndFile;
public class CmdEditContent extends BasicController implements FolderCommand {
private int status = FolderCommandStatus.STATUS_SUCCESS;
private VFSItem currentItem;
private FolderComponent folderComponent;
private Controller editorc;
private DialogBoxController lockedFiledCtr;
......@@ -74,7 +78,7 @@ public class CmdEditContent extends BasicController implements FolderCommand {
* @see org.olat.modules.bc.commands.FolderCommand#execute(org.olat.modules.bc.components.FolderComponent, org.olat.core.gui.UserRequest, org.olat.core.gui.control.WindowControl, org.olat.core.gui.translator.Translator)
*/
public Controller execute(FolderComponent folderComponent, UserRequest ureq, WindowControl wControl, Translator translator) {
this.folderComponent = folderComponent;
String pos = ureq.getParameter(ListRenderer.PARAM_CONTENTEDITID);
if (!StringHelper.containsNonWhitespace(pos)) {
// somehow parameter did not make it to us
......@@ -153,7 +157,9 @@ public class CmdEditContent extends BasicController implements FolderCommand {
return this;
}
public int getStatus() { return status; }
public int getStatus() {
return status;
}
public String getFileName() {
return currentItem.getName();
......@@ -179,7 +185,7 @@ public class CmdEditContent extends BasicController implements FolderCommand {
unlockDialogBox = new CloseableModalController(getWindowControl(), translate("ok"), unlockCtr.getInitialComponent());
unlockDialogBox.activate();
} else {
fireEvent(ureq, FOLDERCOMMAND_FINISHED);
notifyFinished(ureq);
}
// cleanup editor
removeAsListenerAndDispose(editorc);
......@@ -202,6 +208,18 @@ public class CmdEditContent extends BasicController implements FolderCommand {
}
}
private void notifyFinished(UserRequest ureq) {
VFSContainer container = VFSManager.findInheritingSecurityCallbackContainer(folderComponent.getRootContainer());
VFSSecurityCallback secCallback = container.getLocalSecurityCallback();
if(secCallback != null) {
SubscriptionContext subsContext = secCallback.getSubscriptionContext();
if (subsContext != null) {
NotificationsManager.getInstance().markPublisherNews(subsContext, ureq.getIdentity(), true);
}
}
fireEvent(ureq, FOLDERCOMMAND_FINISHED);
}
private void cleanUpUnlockDialog() {
if(unlockDialogBox != null) {
unlockDialogBox.deactivate();
......
......@@ -33,6 +33,8 @@ import org.olat.core.commons.modules.bc.components.ListRenderer;
import org.olat.core.commons.modules.bc.meta.MetaInfo;
import org.olat.core.commons.modules.bc.meta.MetaInfoController;
import org.olat.core.commons.modules.bc.meta.MetaInfoFormController;
import org.olat.core.commons.services.notifications.NotificationsManager;
import org.olat.core.commons.services.notifications.SubscriptionContext;
import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.Component;
import org.olat.core.gui.control.Controller;
......@@ -45,6 +47,8 @@ import org.olat.core.util.vfs.VFSConstants;
import org.olat.core.util.vfs.VFSContainer;
import org.olat.core.util.vfs.VFSItem;
import org.olat.core.util.vfs.VFSLockManager;
import org.olat.core.util.vfs.VFSManager;
import org.olat.core.util.vfs.callbacks.VFSSecurityCallback;
public class CmdEditMeta extends BasicController implements FolderCommand {
......@@ -53,6 +57,7 @@ public class CmdEditMeta extends BasicController implements FolderCommand {
private MetaInfoController metaCtr;
private MetaInfoFormController metaInfoCtr;
private VFSItem currentItem;
private FolderComponent folderComponent;
private Translator translator;
private final VFSLockManager vfsLockManager;
......@@ -72,7 +77,7 @@ public class CmdEditMeta extends BasicController implements FolderCommand {
public Controller execute(FolderComponent folderComponent,
UserRequest ureq, WindowControl wControl, Translator trans) {
this.translator = trans;
this.folderComponent = folderComponent;
String pos = ureq.getParameter(ListRenderer.PARAM_EDTID);
if (!StringHelper.containsNonWhitespace(pos)) {
// somehow parameter did not make it to us
......@@ -123,6 +128,7 @@ public class CmdEditMeta extends BasicController implements FolderCommand {
* org.olat.core.gui.control.Controller,
* org.olat.core.gui.control.Event)
*/
@Override
public void event(UserRequest ureq, Controller source, Event event) {
if (source == metaInfoCtr && event == Event.DONE_EVENT) {
MetaInfo meta = metaInfoCtr.getMetaInfo();
......@@ -148,11 +154,23 @@ public class CmdEditMeta extends BasicController implements FolderCommand {
}
}
fireEvent(ureq, new FolderEvent(FolderEvent.EDIT_EVENT, fileName));
fireEvent(ureq, FOLDERCOMMAND_FINISHED);
notifyFinished(ureq);
} else if (event == Event.CANCELLED_EVENT) {
fireEvent(ureq, FOLDERCOMMAND_FINISHED);
}
}
private void notifyFinished(UserRequest ureq) {
VFSContainer container = VFSManager.findInheritingSecurityCallbackContainer(folderComponent.getRootContainer());
VFSSecurityCallback secCallback = container.getLocalSecurityCallback();
if(secCallback != null) {
SubscriptionContext subsContext = secCallback.getSubscriptionContext();
if (subsContext != null) {
NotificationsManager.getInstance().markPublisherNews(subsContext, ureq.getIdentity(), true);
}
}
fireEvent(ureq, FOLDERCOMMAND_FINISHED);
}
protected void doDispose() {
// metaInfoCtr should be auto-disposed
......
......@@ -191,7 +191,7 @@ public class CmdMoveCopy extends DefaultController implements FolderCommand {
}
}
fireEvent(ureq, new FolderEvent(move ? FolderEvent.MOVE_EVENT : FolderEvent.COPY_EVENT, fileSelection.renderAsHtml()));
fireEvent(ureq, FOLDERCOMMAND_FINISHED);
notifyFinished(ureq);
} else {
// abort
status = FolderCommandStatus.STATUS_CANCELED;
......@@ -199,6 +199,18 @@ public class CmdMoveCopy extends DefaultController implements FolderCommand {
}
}
}
private void notifyFinished(UserRequest ureq) {
VFSContainer container = VFSManager.findInheritingSecurityCallbackContainer(folderComponent.getRootContainer());
VFSSecurityCallback secCallback = container.getLocalSecurityCallback();
if(secCallback != null) {
SubscriptionContext subsContext = secCallback.getSubscriptionContext();
if (subsContext != null) {
NotificationsManager.getInstance().markPublisherNews(subsContext, ureq.getIdentity(), true);
}
}
fireEvent(ureq, FOLDERCOMMAND_FINISHED);
}
/**
* Get the list of source files. Sanity check if resolveable, overlapping or
......
......@@ -35,6 +35,8 @@ import org.olat.core.commons.modules.bc.FolderConfig;
import org.olat.core.commons.modules.bc.components.FolderComponent;
import org.olat.core.commons.modules.bc.meta.MetaInfo;
import org.olat.core.commons.modules.bc.meta.tagged.MetaTagged;
import org.olat.core.commons.services.notifications.NotificationsManager;
import org.olat.core.commons.services.notifications.SubscriptionContext;
import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.Component;
import org.olat.core.gui.control.Controller;
......@@ -53,6 +55,7 @@ import org.olat.core.util.vfs.VFSContainer;
import org.olat.core.util.vfs.VFSItem;
import org.olat.core.util.vfs.VFSLeaf;
import org.olat.core.util.vfs.VFSManager;
import org.olat.core.util.vfs.callbacks.VFSSecurityCallback;
public class CmdUnzip extends BasicController implements FolderCommand {
......@@ -120,6 +123,17 @@ public class CmdUnzip extends BasicController implements FolderCommand {
status = FolderCommandStatus.STATUS_FAILED;
getWindowControl().setError(translator.translate("FileDoesNotExist"));
}
VFSContainer inheritingCont = VFSManager.findInheritingSecurityCallbackContainer(folderComponent.getRootContainer());
if(inheritingCont != null) {
VFSSecurityCallback secCallback = inheritingCont.getLocalSecurityCallback();
if(secCallback != null) {
SubscriptionContext subsContext = secCallback.getSubscriptionContext();
if (subsContext != null) {
NotificationsManager.getInstance().markPublisherNews(subsContext, ureq.getIdentity(), true);
}
}
}
} catch (IllegalArgumentException e) {
logError("Corrupted ZIP", e);
String name = currentVfsItem == null ? "NULL" : currentVfsItem.getName();
......
......@@ -217,11 +217,13 @@ public class VFSResourceRoot implements WebResourceRoot {
return false;
}
VFSContainer folder = childLeaf.getParentContainer();
VFSSecurityCallback callback = folder.getLocalSecurityCallback();
if(callback != null && callback.getSubscriptionContext() != null) {
SubscriptionContext subContext = callback.getSubscriptionContext();
NotificationsManager.getInstance().markPublisherNews(subContext, null, true);
VFSContainer inheritingCont = VFSManager.findInheritingSecurityCallbackContainer(childLeaf.getParentContainer());
if(inheritingCont != null) {
VFSSecurityCallback callback = inheritingCont.getLocalSecurityCallback();
if(callback != null && callback.getSubscriptionContext() != null) {
SubscriptionContext subContext = callback.getSubscriptionContext();
NotificationsManager.getInstance().markPublisherNews(subContext, null, true);
}
}
if(childLeaf instanceof MetaTagged && identity != null) {
......
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