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 632f15aa57934a7d4c6478b5181ac8de3d8bb720..4379abf373f987110cce8537204f73c962bcf6d1 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 b523b164398d369793c6089b31b3ce2471cccf9e..25d248a800c5f7efa15dbe1a4f59368edaebaa98 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 86b8ea90a67123df5eac74dda554f62d6789ada9..49fd6aaa2ae1fb7a2fdeb4848405fa3ea9cf901d 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 212c0aadcf42fe7af6275dfff0909fcfcff73fd6..925ac3ddf7803f9a47c2bd2b8f3a9a7975028cb7 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 e28525c283e2551e811ed567d64e1400d3430a55..cc7068f13c78ae5d821bb0d221cc494d8cfbf2c4 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 7b42b582f15fe826461eabe859b23a7dc1a61cd6..b336a3d42f25f978b42afd0f7ebe62e94c88508e 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 377a470873bcd351ef747d25ce9bff6b8ac70a97..ac81a9d7c64718095a11e4703110519266865972 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 50ded488485e2e243a089ba6c84eff4b68d67ff5..61951af46808e818b693efb4ad52f6c0fe49cc95 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 4807801ab0256fa16eef8ed82ae3de15e9bfd4c6..00b610c62f6b9c5708f0622138e8d829857a2fb6 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 0a3137138a9aa418cad30bc40d8efe48406679fe..ffd419096d0d21126448566bb9d7d9367fc262e8 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 a9f27630357c1864b26370dbffeb83c1adb9e295..2528d5975fed777b660a29e7cd3e14d3b888978c 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");