From 745cdb5fd6bd12867d37b27c3fdcda77d9aa3192 Mon Sep 17 00:00:00 2001 From: srosse <stephane.rosse@frentix.com> Date: Thu, 22 Aug 2019 21:20:49 +0200 Subject: [PATCH] OO-4197: allow business path to be null in your medias --- ...eAndEfficiencyStatementListController.java | 8 +++---- ...ficateAndEfficiencyStatementListModel.java | 6 ++++-- .../modules/portfolio/model/MediaImpl.java | 2 +- .../portfolio/ui/MediaDetailsController.java | 9 ++++---- .../database/mysql/alter_14_0_x_to_14_1_0.sql | 2 ++ .../database/mysql/setupDatabase.sql | 2 +- .../oracle/alter_14_0_x_to_14_1_0.sql | 3 +++ .../database/oracle/setupDatabase.sql | 2 +- .../postgresql/alter_14_0_x_to_14_1_0.sql | 3 ++- .../database/postgresql/setupDatabase.sql | 2 +- .../portfolio/manager/MediaDAOTest.java | 21 +++++++++++++++++++ 11 files changed, 45 insertions(+), 15 deletions(-) diff --git a/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementListController.java b/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementListController.java index 632f15aa579..4379abf373f 100644 --- a/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementListController.java +++ b/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementListController.java @@ -208,9 +208,9 @@ public class CertificateAndEfficiencyStatementListController extends FormBasicCo //artefact if(assessedIdentity.equals(getIdentity())) { if(portfolioV2Module.isEnabled()) { - tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel("table.header.artefact", - Cols.efficiencyStatement.ordinal(), CMD_MEDIA, - new StaticFlexiCellRenderer(CMD_MEDIA, new AsArtefactCellRenderer()))); + DefaultFlexiColumnModel portfolioColumn = new DefaultFlexiColumnModel( Cols.artefact, CMD_MEDIA, + new BooleanCellRenderer(new StaticFlexiCellRenderer(CMD_MEDIA, new AsArtefactCellRenderer()), null)); + tableColumnModel.addFlexiColumnModel(portfolioColumn); } else { EPArtefactHandler<?> artHandler = portfolioModule.getArtefactHandler(EfficiencyStatementArtefact.ARTEFACT_TYPE); if(portfolioModule.isEnabled() && artHandler != null && artHandler.isEnabled() && assessedIdentity.equals(getIdentity())) { @@ -399,7 +399,7 @@ public class CertificateAndEfficiencyStatementListController extends FormBasicCo if(collectorCtrl != null) return; EfficiencyStatement fullStatement = esm.getUserEfficiencyStatementByKey(efficiencyStatementKey); - collectorCtrl = new CollectArtefactController(ureq, getWindowControl(), fullStatement, mediaHandler, ""); + collectorCtrl = new CollectArtefactController(ureq, getWindowControl(), fullStatement, mediaHandler, null); listenTo(collectorCtrl); cmc = new CloseableModalController(getWindowControl(), null, collectorCtrl.getInitialComponent(), true, title, true); diff --git a/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementListModel.java b/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementListModel.java index b523b164398..25d248a800c 100644 --- a/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementListModel.java +++ b/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementListModel.java @@ -85,7 +85,8 @@ public class CertificateAndEfficiencyStatementListModel extends DefaultFlexiTabl return null; } case efficiencyStatement: return statement.getEfficiencyStatementKey(); - case deleteEfficiencyStatement: return statement.getEfficiencyStatementKey() != null; + case deleteEfficiencyStatement: + case artefact: return statement.getEfficiencyStatementKey() != null; } return null; } @@ -100,7 +101,8 @@ public class CertificateAndEfficiencyStatementListModel extends DefaultFlexiTabl efficiencyStatement("table.header.certificate", true), certificate("table.header.certificate", true), recertification("table.header.recertification", true), - deleteEfficiencyStatement("table.action.delete", false); + deleteEfficiencyStatement("table.action.delete", false), + artefact("table.header.artefact", false); private final String i18n; private final boolean sortable; diff --git a/src/main/java/org/olat/modules/portfolio/model/MediaImpl.java b/src/main/java/org/olat/modules/portfolio/model/MediaImpl.java index 86b8ea90a67..49fd6aaa2ae 100644 --- a/src/main/java/org/olat/modules/portfolio/model/MediaImpl.java +++ b/src/main/java/org/olat/modules/portfolio/model/MediaImpl.java @@ -79,7 +79,7 @@ public class MediaImpl implements Persistable, CreateInfo, Media { private String content; @Column(name="p_signature", nullable=false, insertable=true, updatable=true) private int signature; - @Column(name="p_business_path", nullable=false, insertable=true, updatable=true) + @Column(name="p_business_path", nullable=true, insertable=true, updatable=true) private String businessPath; @Column(name="p_reference_id", nullable=true, insertable=true, updatable=true) private String referenceId; diff --git a/src/main/java/org/olat/modules/portfolio/ui/MediaDetailsController.java b/src/main/java/org/olat/modules/portfolio/ui/MediaDetailsController.java index 212c0aadcf4..925ac3ddf78 100644 --- a/src/main/java/org/olat/modules/portfolio/ui/MediaDetailsController.java +++ b/src/main/java/org/olat/modules/portfolio/ui/MediaDetailsController.java @@ -73,7 +73,8 @@ import org.springframework.beans.factory.annotation.Autowired; */ public class MediaDetailsController extends FormBasicController implements Activateable2, TooledController { - private Link editLink, deleteLink; + private Link editLink; + private Link deleteLink; private Link gotoOriginalLink; private final TooledStackedPanel stackPanel; @@ -154,7 +155,7 @@ public class MediaDetailsController extends FormBasicController implements Activ metaCont.contextPut("collectionDate", collectionDate); } - if (media.getBusinessPath() != null) { + if (StringHelper.containsNonWhitespace(media.getBusinessPath())) { gotoOriginalLink = LinkFactory.createLink("goto.original", metaCont.getFormItemComponent(), this); } @@ -164,9 +165,9 @@ public class MediaDetailsController extends FormBasicController implements Activ } List<Category> categories = portfolioService.getCategories(media); - if(categories != null && categories.size() > 0) { + if(categories != null && !categories.isEmpty()) { Map<String,String> categoriesMap = categories.stream() - .collect(Collectors.toMap(c -> c.getName(), c -> c.getName())); + .collect(Collectors.toMap(Category::getName, Category::getName)); TextBoxListElement categoriesEl = uifactory.addTextBoxListElement("categories", "categories", "categories.hint", categoriesMap, metaCont, getTranslator()); categoriesEl.setHelpText(translate("categories.hint")); categoriesEl.setElementCssClass("o_sel_ep_tagsinput"); diff --git a/src/main/resources/database/mysql/alter_14_0_x_to_14_1_0.sql b/src/main/resources/database/mysql/alter_14_0_x_to_14_1_0.sql index e28525c283e..cc7068f13c7 100644 --- a/src/main/resources/database/mysql/alter_14_0_x_to_14_1_0.sql +++ b/src/main/resources/database/mysql/alter_14_0_x_to_14_1_0.sql @@ -74,3 +74,5 @@ alter table o_lecture_block_audit_log add column fk_absence_notice bigint defaul -- curriculum update o_cur_curriculum set c_status='active' where c_status is null; +-- portfolio +alter table o_pf_media modify p_business_path varchar(255) default null; diff --git a/src/main/resources/database/mysql/setupDatabase.sql b/src/main/resources/database/mysql/setupDatabase.sql index 7b42b582f15..b336a3d42f2 100644 --- a/src/main/resources/database/mysql/setupDatabase.sql +++ b/src/main/resources/database/mysql/setupDatabase.sql @@ -1896,7 +1896,7 @@ create table o_pf_media ( p_content mediumtext, p_signature bigint not null default 0, p_reference_id varchar(255) default null, - p_business_path varchar(255) not null, + p_business_path varchar(255) default null, p_creators varchar(1024) default null, p_place varchar(255) default null, p_publisher varchar(255) default null, diff --git a/src/main/resources/database/oracle/alter_14_0_x_to_14_1_0.sql b/src/main/resources/database/oracle/alter_14_0_x_to_14_1_0.sql index 377a470873b..ac81a9d7c64 100644 --- a/src/main/resources/database/oracle/alter_14_0_x_to_14_1_0.sql +++ b/src/main/resources/database/oracle/alter_14_0_x_to_14_1_0.sql @@ -77,3 +77,6 @@ alter table o_lecture_block_audit_log add fk_absence_notice number(20) default n -- curriculum update o_cur_curriculum set c_status='active' where c_status is null; + +-- portfolio +alter table o_pf_media modify (p_business_path null); diff --git a/src/main/resources/database/oracle/setupDatabase.sql b/src/main/resources/database/oracle/setupDatabase.sql index 50ded488485..61951af4680 100644 --- a/src/main/resources/database/oracle/setupDatabase.sql +++ b/src/main/resources/database/oracle/setupDatabase.sql @@ -1815,7 +1815,7 @@ create table o_pf_media ( p_content CLOB, p_signature number(20) default 0 not null, p_reference_id varchar2(255 char) default null, - p_business_path varchar2(255 char) not null, + p_business_path varchar2(255 char) default null, p_creators varchar2(1024 char) default null, p_place varchar2(255 char) default null, p_publisher varchar2(255 char) default null, diff --git a/src/main/resources/database/postgresql/alter_14_0_x_to_14_1_0.sql b/src/main/resources/database/postgresql/alter_14_0_x_to_14_1_0.sql index 4807801ab02..00b610c62f6 100644 --- a/src/main/resources/database/postgresql/alter_14_0_x_to_14_1_0.sql +++ b/src/main/resources/database/postgresql/alter_14_0_x_to_14_1_0.sql @@ -77,5 +77,6 @@ alter table o_lecture_block_audit_log add column fk_absence_notice int8 default -- curriculum update o_cur_curriculum set c_status='active' where c_status is null; - +-- portfolio +alter table o_pf_media alter column p_business_path drop not null; diff --git a/src/main/resources/database/postgresql/setupDatabase.sql b/src/main/resources/database/postgresql/setupDatabase.sql index 0a3137138a9..ffd419096d0 100644 --- a/src/main/resources/database/postgresql/setupDatabase.sql +++ b/src/main/resources/database/postgresql/setupDatabase.sql @@ -1804,7 +1804,7 @@ create table o_pf_media ( p_content text, p_signature int8 not null default 0, p_reference_id varchar(255) default null, - p_business_path varchar(255) not null, + p_business_path varchar(255) default null, p_creators varchar(1024) default null, p_place varchar(255) default null, p_publisher varchar(255) default null, diff --git a/src/test/java/org/olat/modules/portfolio/manager/MediaDAOTest.java b/src/test/java/org/olat/modules/portfolio/manager/MediaDAOTest.java index a9f27630357..2528d5975fe 100644 --- a/src/test/java/org/olat/modules/portfolio/manager/MediaDAOTest.java +++ b/src/test/java/org/olat/modules/portfolio/manager/MediaDAOTest.java @@ -80,6 +80,27 @@ public class MediaDAOTest extends OlatTestCase { Assert.assertEquals(id, reloadedMedia.getAuthor()); } + @Test + public void createMedia_withoutBusinessPath() { + Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("pf-media-1null"); + Media media = mediaDao.createMedia("Media", null, null, "Forum", null, null, 10, id); + dbInstance.commit(); + + Assert.assertNotNull(media); + Assert.assertNotNull(media.getKey()); + Assert.assertNotNull(media.getCreationDate()); + Assert.assertNotNull(media.getCollectionDate()); + Assert.assertEquals(id, media.getAuthor()); + + Media reloadedMedia = mediaDao.loadByKey(media.getKey()); + Assert.assertNotNull(reloadedMedia); + Assert.assertEquals(media, reloadedMedia); + Assert.assertEquals(id, reloadedMedia.getAuthor()); + Assert.assertEquals("Media", reloadedMedia.getTitle()); + Assert.assertNull(reloadedMedia.getBusinessPath()); + Assert.assertEquals(id, reloadedMedia.getAuthor()); + } + @Test public void searchByAuthor() { Identity author = JunitTestHelper.createAndPersistIdentityAsRndUser("pf-media-2"); -- GitLab