Skip to content
Snippets Groups Projects
Commit 22668b31 authored by srosse's avatar srosse
Browse files

OO-2057: decouple the editor from portfolio

parent 25682167
No related branches found
No related tags found
No related merge requests found
Showing
with 505 additions and 49 deletions
......@@ -64,7 +64,7 @@ public class EfficiencyStatementMediaHandler extends AbstractMediaHandler {
}
@Override
public String getIconCssClass(MediaLight media) {
public String getIconCssClass() {
return "o_icon_certificate";
}
......
/**
* <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.ims.qti21.manager.openxml;
import java.io.File;
......@@ -72,6 +91,12 @@ import uk.ac.ed.ph.jqtiplus.types.Identifier;
import uk.ac.ed.ph.jqtiplus.value.BaseType;
import uk.ac.ed.ph.jqtiplus.value.Cardinality;
/**
*
* Initial date: 04.07.2016<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*
*/
public class QTI21WordExport implements MediaResource {
private final static OLog log = Tracing.createLoggerFor(QTIWordExport.class);
......
......@@ -74,7 +74,7 @@ public class ForumMediaHandler extends AbstractMediaHandler {
}
@Override
public String getIconCssClass(MediaLight media) {
public String getIconCssClass() {
return "o_fo_icon";
}
......
......@@ -19,18 +19,18 @@
*/
package org.olat.modules.portfolio;
import org.olat.modules.portfolio.ui.editor.PageElement;
/**
*
* Initial date: 09.06.2016<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*
*/
public interface PagePart {
public interface PagePart extends PageElement {
public Long getKey();
public String getType();
public String getContent();
public void setContent(String content);
......
......@@ -299,6 +299,8 @@ public interface PortfolioService {
public MediaHandler getMediaHandler(String type);
public List<MediaHandler> getMediaHandlers();
public Media getMediaByKey(Long key);
public List<MediaLight> searchOwnedMedias(IdentityRef author);
......
......@@ -47,7 +47,6 @@ public class PortfolioV2Module extends AbstractSpringModule implements ConfigOnO
@Autowired
public PortfolioV2Module(CoordinatorManager coordinatorManager) {
super(coordinatorManager);
}
@Override
......
......@@ -19,8 +19,17 @@
*/
package org.olat.modules.portfolio.handler;
import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.Component;
import org.olat.core.gui.control.Controller;
import org.olat.core.gui.control.WindowControl;
import org.olat.modules.portfolio.Media;
import org.olat.modules.portfolio.MediaHandler;
import org.olat.modules.portfolio.MediaInformations;
import org.olat.modules.portfolio.MediaLight;
import org.olat.modules.portfolio.model.MediaPart;
import org.olat.modules.portfolio.ui.editor.PageElement;
import org.olat.modules.portfolio.ui.editor.PageElementHandler;
/**
*
......@@ -28,7 +37,7 @@ import org.olat.modules.portfolio.MediaInformations;
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*
*/
public abstract class AbstractMediaHandler implements MediaHandler {
public abstract class AbstractMediaHandler implements MediaHandler, PageElementHandler {
private final String type;
......@@ -41,6 +50,35 @@ public abstract class AbstractMediaHandler implements MediaHandler {
return type;
}
@Override
public String getIconCssClass(MediaLight media) {
return getIconCssClass();
}
@Override
public Component getContent(UserRequest ureq, WindowControl wControl, PageElement element) {
if(element instanceof Media) {
return getMediaController(ureq, wControl, (Media)element).getInitialComponent();
}
if(element instanceof MediaPart) {
MediaPart mediaPart = (MediaPart)element;
return getMediaController(ureq, wControl, mediaPart.getMedia()).getInitialComponent();
}
return null;
}
@Override
public Controller getEditor(UserRequest ureq, WindowControl wControl, PageElement element) {
if(element instanceof Media) {
return getMediaController(ureq, wControl, (Media)element);
}
if(element instanceof MediaPart) {
MediaPart mediaPart = (MediaPart)element;
return getMediaController(ureq, wControl, mediaPart.getMedia());
}
return null;
}
public final class Informations implements MediaInformations {
private final String title;
......
......@@ -40,6 +40,9 @@ import org.olat.modules.portfolio.MediaInformations;
import org.olat.modules.portfolio.MediaLight;
import org.olat.modules.portfolio.manager.MediaDAO;
import org.olat.modules.portfolio.manager.PortfolioFileStorage;
import org.olat.modules.portfolio.ui.editor.InteractiveAddPageElementHandler;
import org.olat.modules.portfolio.ui.editor.PageElementAddController;
import org.olat.modules.portfolio.ui.media.CollectFileMediaController;
import org.olat.modules.portfolio.ui.media.FileMediaController;
import org.olat.portfolio.manager.EPFrontendManager;
import org.olat.portfolio.model.artefacts.AbstractArtefact;
......@@ -54,7 +57,7 @@ import org.springframework.stereotype.Service;
*
*/
@Service
public class FileHandler extends AbstractMediaHandler {
public class FileHandler extends AbstractMediaHandler implements InteractiveAddPageElementHandler {
public static final String FILE_TYPE = "bc";
......@@ -68,6 +71,11 @@ public class FileHandler extends AbstractMediaHandler {
public FileHandler() {
super(FILE_TYPE);
}
@Override
public String getIconCssClass() {
return "o_filetype_file";
}
@Override
public String getIconCssClass(MediaLight media) {
......@@ -157,4 +165,9 @@ public class FileHandler extends AbstractMediaHandler {
public Controller getMediaController(UserRequest ureq, WindowControl wControl, Media media) {
return new FileMediaController(ureq, wControl, media);
}
@Override
public PageElementAddController getAddPageElementController(UserRequest ureq, WindowControl wControl) {
return new CollectFileMediaController(ureq, wControl);
}
}
......@@ -39,6 +39,9 @@ import org.olat.modules.portfolio.MediaInformations;
import org.olat.modules.portfolio.MediaLight;
import org.olat.modules.portfolio.manager.MediaDAO;
import org.olat.modules.portfolio.manager.PortfolioFileStorage;
import org.olat.modules.portfolio.ui.editor.InteractiveAddPageElementHandler;
import org.olat.modules.portfolio.ui.editor.PageElementAddController;
import org.olat.modules.portfolio.ui.media.CollectImageMediaController;
import org.olat.modules.portfolio.ui.media.ImageMediaController;
import org.olat.portfolio.model.artefacts.AbstractArtefact;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -51,7 +54,7 @@ import org.springframework.stereotype.Service;
*
*/
@Service
public class ImageHandler extends AbstractMediaHandler {
public class ImageHandler extends AbstractMediaHandler implements InteractiveAddPageElementHandler {
public static final String IMAGE_TYPE = "image";
......@@ -63,6 +66,11 @@ public class ImageHandler extends AbstractMediaHandler {
public ImageHandler() {
super(IMAGE_TYPE);
}
@Override
public String getIconCssClass() {
return "o_filetype_jpg";
}
@Override
public String getIconCssClass(MediaLight media) {
......@@ -129,4 +137,9 @@ public class ImageHandler extends AbstractMediaHandler {
public Controller getMediaController(UserRequest ureq, WindowControl wControl, Media media) {
return new ImageMediaController(ureq, wControl, media);
}
@Override
public PageElementAddController getAddPageElementController(UserRequest ureq, WindowControl wControl) {
return new CollectImageMediaController(ureq, wControl);
}
}
......@@ -30,6 +30,9 @@ import org.olat.modules.portfolio.Media;
import org.olat.modules.portfolio.MediaInformations;
import org.olat.modules.portfolio.MediaLight;
import org.olat.modules.portfolio.manager.MediaDAO;
import org.olat.modules.portfolio.ui.editor.InteractiveAddPageElementHandler;
import org.olat.modules.portfolio.ui.editor.PageElementAddController;
import org.olat.modules.portfolio.ui.media.CollectTextMediaController;
import org.olat.modules.portfolio.ui.media.TextMediaController;
import org.olat.portfolio.manager.EPFrontendManager;
import org.olat.portfolio.model.artefacts.AbstractArtefact;
......@@ -43,7 +46,7 @@ import org.springframework.stereotype.Service;
*
*/
@Service
public class TextHandler extends AbstractMediaHandler {
public class TextHandler extends AbstractMediaHandler implements InteractiveAddPageElementHandler {
public static final String TEXT_MEDIA = "text";
......@@ -57,7 +60,7 @@ public class TextHandler extends AbstractMediaHandler {
}
@Override
public String getIconCssClass(MediaLight media) {
public String getIconCssClass() {
return "o_filetype_txt";
}
......@@ -97,6 +100,9 @@ public class TextHandler extends AbstractMediaHandler {
public Controller getMediaController(UserRequest ureq, WindowControl wControl, Media media) {
return new TextMediaController(ureq, wControl, media);
}
@Override
public PageElementAddController getAddPageElementController(UserRequest ureq, WindowControl wControl) {
return new CollectTextMediaController(ureq, wControl);
}
}
......@@ -200,7 +200,8 @@ public class PageDAO {
sb.append("select part from pfpagepart as part")
.append(" inner join fetch part.body as body")
.append(" left join fetch part.media as media")
.append(" where body.key=:bodyKey");
.append(" where body.key=:bodyKey")
.append(" order by pos");
return dbInstance.getCurrentEntityManager()
.createQuery(sb.toString(), PagePart.class)
......
......@@ -570,7 +570,7 @@ public class PortfolioServiceImpl implements PortfolioService {
@Override
public MediaHandler getMediaHandler(String type) {
if(this.mediaHandlers != null) {
if(mediaHandlers != null) {
for(MediaHandler handler:mediaHandlers) {
if(type.equals(handler.getType())) {
return handler;
......@@ -580,6 +580,11 @@ public class PortfolioServiceImpl implements PortfolioService {
return null;
}
@Override
public List<MediaHandler> getMediaHandlers() {
return new ArrayList<>(mediaHandlers);
}
@Override
public void updateCategories(Media media, List<String> categories) {
OLATResourceable ores = OresHelper.createOLATResourceableInstance(Media.class, media.getKey());
......
......@@ -65,6 +65,11 @@ public class AbstractPart implements Persistable, ModifiedInfo, CreateInfo, Page
@Temporal(TemporalType.TIMESTAMP)
@Column(name="lastmodified", nullable=false, insertable=true, updatable=true)
private Date lastModified;
/** Only used for order by */
@GeneratedValue
@Column(name="pos")
private long pos;
@Column(name="p_content", nullable=true, insertable=true, updatable=true)
private String content;
......
......@@ -20,6 +20,7 @@
package org.olat.modules.portfolio.model;
import javax.persistence.Entity;
import javax.persistence.Transient;
/**
*
......@@ -35,4 +36,10 @@ public class HTMLPart extends AbstractPart {
*/
private static final long serialVersionUID = 7060103983145628108L;
@Override
@Transient
public String getType() {
return "htmlraw";
}
}
......@@ -23,6 +23,7 @@ import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Transient;
import org.olat.modules.portfolio.Media;
......@@ -49,6 +50,10 @@ public class MediaPart extends AbstractPart {
this.media = media;
}
@Override
@Transient
public String getType() {
return media.getType();
}
}
......@@ -99,6 +99,10 @@ public class BinderController extends BasicController implements TooledControlle
public void initTools() {
stackPanel.addTool(segmentButtonsCmp, true);
stackPanel.addTool(editBinderMetadataLink, Align.right);
if(segmentButtonsCmp.getSelectedButton() == overviewLink) {
overviewCtrl.initTools();
}
}
protected void setSegmentButtonsVisible(boolean enabled) {
......
......@@ -29,6 +29,7 @@ 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.stack.PopEvent;
import org.olat.core.gui.components.stack.TooledController;
import org.olat.core.gui.components.stack.TooledStackedPanel;
import org.olat.core.gui.components.stack.TooledStackedPanel.Align;
......@@ -54,7 +55,7 @@ import org.olat.modules.portfolio.PortfolioService;
import org.olat.modules.portfolio.Section;
import org.olat.modules.portfolio.model.HTMLPart;
import org.olat.modules.portfolio.model.MediaPart;
import org.olat.modules.portfolio.ui.editor.PageEditorController;
import org.olat.modules.portfolio.ui.event.PublishEvent;
import org.springframework.beans.factory.annotation.Autowired;
/**
......@@ -66,18 +67,20 @@ import org.springframework.beans.factory.annotation.Autowired;
public class PageController extends BasicController implements TooledController {
private VelocityContainer mainVC;
private Link editLink, editMetadataLink, publishButton;
private Link editLink, editMetadataLink;
protected final TooledStackedPanel stackPanel;
private List<FragmentWrapper> fragments = new ArrayList<>();
private CloseableModalController cmc;
private PageEditorController editCtrl;
private PageMetadataController pageMetaCtrl;
private PageEditController editCtrl;
private DialogBoxController confirmPublishCtrl;
private PageMetadataEditController editMetadataCtrl;
private UserCommentsAndRatingsController commentsCtrl;
private int counter;
private Page page;
private boolean dirtyMarker = false;
private final BinderSecurityCallback secCallback;
@Autowired
......@@ -92,13 +95,11 @@ public class PageController extends BasicController implements TooledController
mainVC = createVelocityContainer("page_content");
mainVC.contextPut("pageTitle", page.getTitle());
loadModel(ureq);
if(secCallback.canPublish(page)) {
publishButton = LinkFactory.createButton("publish", mainVC, this);
}
loadMeta(ureq);
loadModel(ureq);
stackPanel.addListener(this);
if(secCallback.canComment(page)) {
CommentAndRatingSecurityCallback commentSecCallback = new CommentAndRatingDefaultSecurityCallback(getIdentity(), false, false);
OLATResourceable ores = OresHelper.createOLATResourceableInstance(Page.class, page.getKey());
......@@ -139,6 +140,16 @@ public class PageController extends BasicController implements TooledController
}
fragments = newFragments;
mainVC.contextPut("fragments", fragments);
dirtyMarker = false;
}
private void loadMeta(UserRequest ureq) {
removeAsListenerAndDispose(pageMetaCtrl);
mainVC.contextPut("pageTitle", page.getTitle());
pageMetaCtrl = new PageMetadataController(ureq, getWindowControl(), secCallback, page);
listenTo(pageMetaCtrl);
mainVC.put("meta", pageMetaCtrl.getInitialComponent());
}
@Override
......@@ -149,15 +160,25 @@ public class PageController extends BasicController implements TooledController
@Override
public void event(UserRequest ureq, Controller source, Event event) {
if(editCtrl == source) {
stackPanel.popUpToController(this);
loadModel(ureq);
if(event == Event.CHANGED_EVENT) {
dirtyMarker = true;
} else if(event instanceof PublishEvent) {
doConfirmPublish(ureq);
} else {
stackPanel.popUpToController(this);
loadModel(ureq);
}
} else if(editMetadataCtrl == source) {
if(event == Event.DONE_EVENT) {
loadModel(ureq);
loadMeta(ureq);
fireEvent(ureq, Event.CHANGED_EVENT);
}
cmc.deactivate();
cleanUp();
} else if(pageMetaCtrl == source) {
if(event instanceof PublishEvent) {
doConfirmPublish(ureq);
}
} else if(confirmPublishCtrl == source) {
doPublish(ureq);
} else if(cmc == source) {
......@@ -179,8 +200,13 @@ public class PageController extends BasicController implements TooledController
doEditPage(ureq);
} else if(editMetadataLink == source) {
doEditMetadata(ureq);
} else if(publishButton == source) {
doConfirmPublish(ureq);
} else if(stackPanel == source) {
if(event instanceof PopEvent) {
PopEvent pe = (PopEvent)event;
if(pe.getController() == editCtrl && dirtyMarker) {
loadModel(ureq);
}
}
}
}
......@@ -192,7 +218,8 @@ public class PageController extends BasicController implements TooledController
private void doPublish(UserRequest ureq) {
page = portfolioService.changePageStatus(page, PageStatus.published);
publishButton.setVisible(false);
stackPanel.popUpToController(this);
loadMeta(ureq);
fireEvent(ureq, Event.CHANGED_EVENT);
}
......@@ -219,8 +246,8 @@ public class PageController extends BasicController implements TooledController
private void doEditPage(UserRequest ureq) {
removeAsListenerAndDispose(editCtrl);
editCtrl = new PageEditorController(ureq, getWindowControl(), page);
editCtrl = new PageEditController(ureq, getWindowControl(), secCallback, page);
listenTo(editCtrl);
stackPanel.pushController("Edit", editCtrl);
......@@ -241,11 +268,9 @@ public class PageController extends BasicController implements TooledController
public class MediaFragment implements Fragment {
private final PagePart part;
private Controller controller;
public MediaFragment(MediaPart part, UserRequest ureq) {
this.part = part;
MediaHandler handler = portfolioService.getMediaHandler(part.getMedia().getType());
controller = handler.getMediaController(ureq, getWindowControl(), part.getMedia());
}
......@@ -255,18 +280,13 @@ public class PageController extends BasicController implements TooledController
return controller.getInitialComponent();
}
public PagePart getPart() {
return part;
}
}
public static class HTMLFragment implements Fragment {
private final PagePart part;
private TextComponent component;
private final TextComponent component;
public HTMLFragment(HTMLPart part) {
this.part = part;
component = TextFactory.createTextComponentFromString("cmp" + CodeHelper.getRAMUniqueID(), part.getContent(), null, false, null);
}
......@@ -274,10 +294,6 @@ public class PageController extends BasicController implements TooledController
public Component getContent() {
return component;
}
public PagePart getPart() {
return part;
}
}
public interface Fragment {
......
/**
* <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.modules.portfolio.ui;
import java.util.ArrayList;
import java.util.List;
import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.Component;
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.modules.portfolio.BinderSecurityCallback;
import org.olat.modules.portfolio.Media;
import org.olat.modules.portfolio.MediaHandler;
import org.olat.modules.portfolio.Page;
import org.olat.modules.portfolio.PagePart;
import org.olat.modules.portfolio.PortfolioService;
import org.olat.modules.portfolio.model.MediaPart;
import org.olat.modules.portfolio.ui.editor.HTMLRawPageElementHandler;
import org.olat.modules.portfolio.ui.editor.InteractiveAddPageElementHandler;
import org.olat.modules.portfolio.ui.editor.PageEditorController;
import org.olat.modules.portfolio.ui.editor.PageEditorProvider;
import org.olat.modules.portfolio.ui.editor.PageElement;
import org.olat.modules.portfolio.ui.editor.PageElementAddController;
import org.olat.modules.portfolio.ui.editor.PageElementHandler;
import org.olat.modules.portfolio.ui.editor.SimpleAddPageElementHandler;
import org.olat.modules.portfolio.ui.event.MediaSelectionEvent;
import org.springframework.beans.factory.annotation.Autowired;
/**
*
* Initial date: 04.07.2016<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*
*/
public class PageEditController extends BasicController {
private Controller editCtrl;
private PageMetadataController metaCtrl;
private Page page;
@Autowired
private PortfolioService portfolioService;
public PageEditController(UserRequest ureq, WindowControl wControl, BinderSecurityCallback secCallback, Page page) {
super(ureq, wControl);
this.page = page;
metaCtrl = new PageMetadataController(ureq, getWindowControl(), secCallback, page);
listenTo(metaCtrl);
editCtrl = new PageEditorController(ureq, getWindowControl(), new PortfolioPageEditorProvider());
//editCtrl = new PageEditorBakController(ureq, getWindowControl(), page);
listenTo(editCtrl);
VelocityContainer mainVC = createVelocityContainer("page_editor_wrapper");
mainVC.put("meta", metaCtrl.getInitialComponent());
mainVC.put("editor", editCtrl.getInitialComponent());
putInitialPanel(mainVC);
}
@Override
protected void doDispose() {
//
}
@Override
protected void event(UserRequest ureq, Component source, Event event) {
//
}
@Override
protected void event(UserRequest ureq, Controller source, Event event) {
fireEvent(ureq, event);
}
private class PortfolioPageEditorProvider implements PageEditorProvider {
private final List<PageElementHandler> handlers = new ArrayList<>();
private final List<PageElementHandler> creationHandlers = new ArrayList<>();
public PortfolioPageEditorProvider() {
List<MediaHandler> mediaHandlers = portfolioService.getMediaHandlers();
for(MediaHandler mediaHandler:mediaHandlers) {
if(mediaHandler instanceof PageElementHandler) {
handlers.add((PageElementHandler)mediaHandler);
if(mediaHandler instanceof InteractiveAddPageElementHandler
|| mediaHandler instanceof SimpleAddPageElementHandler) {
creationHandlers.add((PageElementHandler)mediaHandler);
}
}
}
//add the hook to pick media from the media center
creationHandlers.add(new OtherArtefactsHandler());
//handler for HTML code
HTMLRawPageElementHandler htlmRawHandler = new HTMLRawPageElementHandler();
handlers.add(htlmRawHandler);
creationHandlers.add(htlmRawHandler);
}
@Override
public List<? extends PageElement> getElements() {
return portfolioService.getPageParts(page);
}
@Override
public List<PageElementHandler> getCreateHandlers() {
return creationHandlers;
}
@Override
public List<PageElementHandler> getAvailableHandlers() {
return handlers;
}
@Override
public PageElement appendPageElement(PageElement element) {
PagePart part = null;
if(element instanceof PagePart) {
part = portfolioService.appendNewPagePart(page, (PagePart)element);
}
return part;
}
}
private static class OtherArtefactsHandler implements PageElementHandler, InteractiveAddPageElementHandler {
@Override
public String getType() {
return "others";
}
@Override
public String getIconCssClass() {
return "o_icon_others";
}
@Override
public Component getContent(UserRequest ureq, WindowControl wControl, PageElement element) {
return null;
}
@Override
public Controller getEditor(UserRequest ureq, WindowControl wControl, PageElement element) {
return null;
}
@Override
public PageElementAddController getAddPageElementController(UserRequest ureq, WindowControl wControl) {
return new OtherArtfectsChooserController(ureq, wControl);
}
}
private static class OtherArtfectsChooserController extends BasicController implements PageElementAddController {
private MediaPart mediaPart;
private final MediaCenterController mediaListCtrl;
public OtherArtfectsChooserController(UserRequest ureq, WindowControl wControl) {
super(ureq, wControl);
mediaListCtrl = new MediaCenterController(ureq, getWindowControl());
listenTo(mediaListCtrl);
putInitialPanel(mediaListCtrl.getInitialComponent());
}
@Override
public PageElement getPageElement() {
return mediaPart;
}
@Override
protected void event(UserRequest ureq, Component source, Event event) {
//
}
@Override
protected void event(UserRequest ureq, Controller source, Event event) {
if(event instanceof MediaSelectionEvent) {
MediaSelectionEvent mse = (MediaSelectionEvent)event;
if(mse.getMedia() != null) {
doAddMedia(mse.getMedia());
fireEvent(ureq, Event.DONE_EVENT);
}
}
super.event(ureq, source, event);
}
private void doAddMedia(Media media) {
mediaPart = new MediaPart();
mediaPart.setMedia(media);
}
@Override
protected void doDispose() {
//
}
}
}
/**
* <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.modules.portfolio.ui;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
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.modules.portfolio.BinderSecurityCallback;
import org.olat.modules.portfolio.Category;
import org.olat.modules.portfolio.Page;
import org.olat.modules.portfolio.PortfolioService;
import org.olat.modules.portfolio.ui.event.PublishEvent;
import org.springframework.beans.factory.annotation.Autowired;
/**
*
* Initial date: 04.07.2016<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*
*/
public class PageMetadataController extends BasicController {
private Link publishButton;
@Autowired
private PortfolioService portfolioService;
public PageMetadataController(UserRequest ureq, WindowControl wControl, BinderSecurityCallback secCallback, Page page) {
super(ureq, wControl);
VelocityContainer mainVC = createVelocityContainer("page_meta");
if(secCallback.canPublish(page)) {
publishButton = LinkFactory.createButton("publish", mainVC, this);
}
mainVC.contextPut("pageTitle", page.getTitle());
mainVC.contextPut("pageSummary", page.getSummary());
mainVC.contextPut("status", page.getPageStatus());
Date lastPublication = page.getLastPublicationDate();
if(lastPublication == null) {
mainVC.contextPut("hasLastPublicationDate", Boolean.FALSE);
} else {
mainVC.contextPut("hasLastPublicationDate", Boolean.TRUE);
mainVC.contextPut("lastPublicationDate", lastPublication);
}
List<Category> categories = portfolioService.getCategories(page);
List<String> categoryNames = new ArrayList<>(categories.size());
for(Category category:categories) {
categoryNames.add(category.getName());
}
mainVC.contextPut("pageCategories", categoryNames);
mainVC.contextPut("lastModified", page.getLastModified());
putInitialPanel(mainVC);
}
@Override
protected void doDispose() {
//
}
@Override
protected void event(UserRequest ureq, Component source, Event event) {
if(publishButton == source) {
fireEvent(ureq, new PublishEvent());
}
}
}
......@@ -153,6 +153,10 @@ public class PageMetadataEditController extends FormBasicController {
}
}
categoriesEl = uifactory.addTextBoxListElement("categories", "categories", "categories.hint", categories, formLayout, getTranslator());
categoriesEl.setElementCssClass("o_sel_ep_tagsinput");
categoriesEl.setAllowDuplicates(false);
// list of binder
if (chooseBinder) {
List<Binder> binders = portfolioService.getOwnedBinders(getIdentity());
......@@ -192,10 +196,6 @@ public class PageMetadataEditController extends FormBasicController {
bindersEl.setEnabled(false);
}
categoriesEl = uifactory.addTextBoxListElement("categories", "categories", "categories.hint", categories, formLayout, getTranslator());
categoriesEl.setElementCssClass("o_sel_ep_tagsinput");
categoriesEl.setAllowDuplicates(false);
//list of sections
if(chooseSection) {
retrieveSections(formLayout, true);
......
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