From da4a0a9b2c60712f93134540dbc6ce9311a4bdb7 Mon Sep 17 00:00:00 2001 From: srosse <stephane.rosse@frentix.com> Date: Tue, 10 Mar 2020 12:19:11 +0100 Subject: [PATCH] OO-4559: allow participant to change review settings in portfolio Allow the participants to change the assignment reviewers settings of an assignment template --- .../modules/portfolio/PortfolioService.java | 7 ++- .../portfolio/manager/AssignmentDAO.java | 12 +++- .../modules/portfolio/manager/BinderDAO.java | 4 +- .../manager/PortfolioServiceImpl.java | 6 +- .../ui/AssignmentEditController.java | 4 +- .../ui/PageMetadataEditController.java | 57 ++++++++++++++++++- .../portfolio/manager/AssignmentDAOTest.java | 2 +- 7 files changed, 79 insertions(+), 13 deletions(-) diff --git a/src/main/java/org/olat/modules/portfolio/PortfolioService.java b/src/main/java/org/olat/modules/portfolio/PortfolioService.java index 26caadd8331..b4e467cda10 100644 --- a/src/main/java/org/olat/modules/portfolio/PortfolioService.java +++ b/src/main/java/org/olat/modules/portfolio/PortfolioService.java @@ -198,10 +198,15 @@ public interface PortfolioService { * @param imagePath The path of the image * @param align Alignment of the image * @param section The section (mandatory) + * @param onlyAutoEvaluation If the assignment is only for auto evaluation or + * external review is allowed (only form) + * @param reviewerCanSeeAutoEvaluation If the reviewers can see the auto + * evaluation (only form) * @return The page created for the assignment */ public Page startAssignmentFromTemplate(Long assignmentKey, Identity author, - String title, String summary, String imagePath, PageImageAlign align, SectionRef section); + String title, String summary, String imagePath, PageImageAlign align, SectionRef section, + Boolean onlyAutoEvaluation, Boolean reviewerCanSeeAutoEvaluation); /** * Add a new section at the end of the sections list of the specified binder. diff --git a/src/main/java/org/olat/modules/portfolio/manager/AssignmentDAO.java b/src/main/java/org/olat/modules/portfolio/manager/AssignmentDAO.java index 0fd19de36f5..d162eca160c 100644 --- a/src/main/java/org/olat/modules/portfolio/manager/AssignmentDAO.java +++ b/src/main/java/org/olat/modules/portfolio/manager/AssignmentDAO.java @@ -105,7 +105,8 @@ public class AssignmentDAO { return assignment; } - public Assignment createAssignment(Assignment templateReference, AssignmentStatus status, Section section, Binder binder, boolean template) { + public Assignment createAssignment(Assignment templateReference, AssignmentStatus status, Section section, Binder binder, + boolean template, Boolean onlyAutoEvaluation, Boolean reviewerSeeAutoEvaluation) { AssignmentImpl assignment = new AssignmentImpl(); assignment.setCreationDate(new Date()); assignment.setLastModified(assignment.getCreationDate()); @@ -118,8 +119,13 @@ public class AssignmentDAO { assignment.setType(templateReference.getAssignmentType().name()); assignment.setTemplateReference(templateReference); assignment.setStatus(status.name()); - assignment.setOnlyAutoEvaluation(templateReference.isOnlyAutoEvaluation()); - assignment.setReviewerSeeAutoEvaluation(templateReference.isReviewerSeeAutoEvaluation()); + if(onlyAutoEvaluation != null) { + assignment.setOnlyAutoEvaluation(onlyAutoEvaluation.booleanValue()); + assignment.setReviewerSeeAutoEvaluation(reviewerSeeAutoEvaluation != null && reviewerSeeAutoEvaluation.booleanValue()); + } else { + assignment.setOnlyAutoEvaluation(templateReference.isOnlyAutoEvaluation()); + assignment.setReviewerSeeAutoEvaluation(templateReference.isReviewerSeeAutoEvaluation()); + } assignment.setAnonymousExternalEvaluation(templateReference.isAnonymousExternalEvaluation()); assignment.setStorage(templateReference.getStorage()); assignment.setFormEntry(templateReference.getFormEntry()); diff --git a/src/main/java/org/olat/modules/portfolio/manager/BinderDAO.java b/src/main/java/org/olat/modules/portfolio/manager/BinderDAO.java index 89184885b84..faa4cc5c5b2 100644 --- a/src/main/java/org/olat/modules/portfolio/manager/BinderDAO.java +++ b/src/main/java/org/olat/modules/portfolio/manager/BinderDAO.java @@ -270,7 +270,7 @@ public class BinderDAO { syncAssignmentsList(templateAssignments, currentAssignments, currentSection); for(Assignment templateAssignment:templateAssignments) { if(templateAssignment != null) { - assignmentDao.createAssignment(templateAssignment, AssignmentStatus.notStarted, currentSection, null, templateAssignment.isTemplate()); + assignmentDao.createAssignment(templateAssignment, AssignmentStatus.notStarted, currentSection, null, templateAssignment.isTemplate(), null, null); } } } @@ -281,7 +281,7 @@ public class BinderDAO { syncAssignmentsList(templateAssignments, currentAssignments, currentBinder); for(Assignment templateAssignment:templateAssignments) { if(templateAssignment != null) { - assignmentDao.createAssignment(templateAssignment, AssignmentStatus.notStarted, null, currentBinder, templateAssignment.isTemplate()); + assignmentDao.createAssignment(templateAssignment, AssignmentStatus.notStarted, null, currentBinder, templateAssignment.isTemplate(), null, null); } } } diff --git a/src/main/java/org/olat/modules/portfolio/manager/PortfolioServiceImpl.java b/src/main/java/org/olat/modules/portfolio/manager/PortfolioServiceImpl.java index 6bed5e5aa7a..edb4b73e3a8 100644 --- a/src/main/java/org/olat/modules/portfolio/manager/PortfolioServiceImpl.java +++ b/src/main/java/org/olat/modules/portfolio/manager/PortfolioServiceImpl.java @@ -521,12 +521,14 @@ public class PortfolioServiceImpl implements PortfolioService { } @Override - public Page startAssignmentFromTemplate(Long assignmentKey, Identity author, String title, String summary, String imagePath, PageImageAlign align, SectionRef sectionRef) { + public Page startAssignmentFromTemplate(Long assignmentKey, Identity author, String title, String summary, String imagePath, PageImageAlign align, + SectionRef sectionRef, Boolean onlyAutoEvaluation, Boolean reviewerCanSeeAutoEvaluation) { Page page = null; Section section = binderDao.loadSectionByKey(sectionRef.getKey()); Assignment reloadedAssignmentTemplate = assignmentDao.loadAssignmentByKey(assignmentKey); Assignment instanciatedAssignment = assignmentDao - .createAssignment(reloadedAssignmentTemplate, AssignmentStatus.inProgress, section, null, false); + .createAssignment(reloadedAssignmentTemplate, AssignmentStatus.inProgress, section, null, + false, onlyAutoEvaluation, reviewerCanSeeAutoEvaluation); if (instanciatedAssignment.getPage() == null) { if (instanciatedAssignment.getAssignmentType() == AssignmentType.essay || instanciatedAssignment.getAssignmentType() == AssignmentType.document) { diff --git a/src/main/java/org/olat/modules/portfolio/ui/AssignmentEditController.java b/src/main/java/org/olat/modules/portfolio/ui/AssignmentEditController.java index 11fdafa1ff9..b0980b00784 100644 --- a/src/main/java/org/olat/modules/portfolio/ui/AssignmentEditController.java +++ b/src/main/java/org/olat/modules/portfolio/ui/AssignmentEditController.java @@ -91,8 +91,8 @@ public class AssignmentEditController extends FormBasicController { AssignmentType.document, AssignmentType.form }; - public static final String[] onKeys = new String[] { "on" }; - public static final String[] evaKeys = new String[] { "only-autoevaluation", "alien-evaluation"}; + private static final String[] onKeys = new String[] { "on" }; + private static final String[] evaKeys = new String[] { "only-autoevaluation", "alien-evaluation"}; private TextElement titleEl; private RichTextElement summaryEl; diff --git a/src/main/java/org/olat/modules/portfolio/ui/PageMetadataEditController.java b/src/main/java/org/olat/modules/portfolio/ui/PageMetadataEditController.java index 18101014d8f..090ed298202 100644 --- a/src/main/java/org/olat/modules/portfolio/ui/PageMetadataEditController.java +++ b/src/main/java/org/olat/modules/portfolio/ui/PageMetadataEditController.java @@ -35,6 +35,7 @@ import org.olat.core.gui.components.form.flexible.FormItemContainer; import org.olat.core.gui.components.form.flexible.elements.DownloadLink; import org.olat.core.gui.components.form.flexible.elements.FileElement; import org.olat.core.gui.components.form.flexible.elements.FormLink; +import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElement; import org.olat.core.gui.components.form.flexible.elements.RichTextElement; import org.olat.core.gui.components.form.flexible.elements.SingleSelection; import org.olat.core.gui.components.form.flexible.elements.TextBoxListElement; @@ -87,16 +88,21 @@ public class PageMetadataEditController extends FormBasicController { } private static final String[] alignKeys = new String[]{ PageImageAlign.background.name(), PageImageAlign.right.name(), PageImageAlign.right_large.name(), PageImageAlign.left.name(), PageImageAlign.left_large.name() }; + + private static final String[] onKeys = new String[] { "on" }; + private static final String[] evaKeys = new String[] { "only-autoevaluation", "alien-evaluation"}; private TextElement titleEl; private RichTextElement summaryEl; private SingleSelection bindersEl; private SingleSelection sectionsEl; + private SingleSelection evaluationFormEl; private SingleSelection assignmentsTemplatesEl; private TextBoxListElement categoriesEl; private DownloadLink downloadAssignmentDocEl; private FileElement assignmentDocUploadEl; private FormLayoutContainer assignmentDocsContainer; + private MultipleSelectionElement reviewerSeeAutoEvaEl; private FileElement imageUpload; private SingleSelection imageAlignEl; @@ -212,6 +218,9 @@ public class PageMetadataEditController extends FormBasicController { titleEl.setElementCssClass("o_sel_pf_edit_entry_title"); titleEl.setEnabled(editTitleAndSummary); titleEl.setMandatory(true); + if(!StringHelper.containsNonWhitespace(title)) { + titleEl.setFocus(true); + } String summary = page == null ? null : page.getSummary(); summaryEl = uifactory.addRichTextElementForStringDataMinimalistic("summary", "page.summary", summary, 8, 60, formLayout, getWindowControl()); @@ -261,6 +270,18 @@ public class PageMetadataEditController extends FormBasicController { assignmentsTemplatesEl.addActionListener(FormEvent.ONCHANGE); assignmentsTemplatesEl.setVisible(false); + String[] evaValues = new String[]{ + translate("assignment.evaluation.form.auto"), + translate("assignment.evaluation.form.auto.extern") + }; + evaluationFormEl = uifactory.addRadiosVertical("assignment.evaluation.form", formLayout, evaKeys, evaValues); + evaluationFormEl.addActionListener(FormEvent.ONCHANGE); + evaluationFormEl.setVisible(false); + + String[] reviewerValues = new String[] { translate("assignment.evaluation.form.reviewer.see.auto") }; + reviewerSeeAutoEvaEl = uifactory.addCheckboxesHorizontal("assignment.evaluation.form.reviewer.see.auto", null, formLayout, onKeys, reviewerValues); + reviewerSeeAutoEvaEl.setVisible(false); + downloadAssignmentDocEl = uifactory.addDownloadLink("assignments.doc", "", "assignment.template.doc", null, formLayout); downloadAssignmentDocEl.setVisible(false); @@ -405,6 +426,26 @@ public class PageMetadataEditController extends FormBasicController { } private void updateForAssignmentTemplate(Assignment assignment) { + if(assignment != null && assignment.getAssignmentType() == AssignmentType.form) { + evaluationFormEl.setVisible(true); + if(assignment.isOnlyAutoEvaluation()) { + evaluationFormEl.select(evaKeys[0], true); + } else { + evaluationFormEl.select(evaKeys[1], true); + } + + boolean otherOptions = evaluationFormEl.isOneSelected() && evaluationFormEl.isSelected(1); + reviewerSeeAutoEvaEl.setVisible(otherOptions); + if(assignment.isReviewerSeeAutoEvaluation()) { + reviewerSeeAutoEvaEl.select(evaKeys[0], true); + } else { + reviewerSeeAutoEvaEl.uncheckAll(); + } + } else { + evaluationFormEl.setVisible(false); + reviewerSeeAutoEvaEl.setVisible(false); + } + if(assignment == null || assignment.getAssignmentType() != AssignmentType.document) { downloadAssignmentDocEl.setVisible(false); assignmentDocUploadEl.setVisible(false); @@ -484,10 +525,19 @@ public class PageMetadataEditController extends FormBasicController { align = PageImageAlign.valueOf(imageAlignEl.getSelectedKey()); } + Boolean onlyAutoEvaluation = null; + Boolean reviewerCanSeeAutoEvaluation = null; + if(evaluationFormEl != null && evaluationFormEl.isVisible()) { + onlyAutoEvaluation = evaluationFormEl.isOneSelected() && evaluationFormEl.isSelected(0); + if(reviewerSeeAutoEvaEl.isVisible()) { + reviewerCanSeeAutoEvaluation = reviewerSeeAutoEvaEl.isAtLeastSelected(1); + } + } if(assignmentsTemplatesEl != null && assignmentsTemplatesEl.isVisible() && assignmentsTemplatesEl.isOneSelected() && StringHelper.containsNonWhitespace(assignmentsTemplatesEl.getSelectedKey())) { - Assignment assignmentTemplate = this.assignmentTemplatesMap.get(assignmentsTemplatesEl.getSelectedKey()); - page = portfolioService.startAssignmentFromTemplate(assignmentTemplate.getKey(), getIdentity(), title, summary, imagePath, align, selectSection); + Assignment assignmentTemplate = assignmentTemplatesMap.get(assignmentsTemplatesEl.getSelectedKey()); + page = portfolioService.startAssignmentFromTemplate(assignmentTemplate.getKey(), getIdentity(), title, summary, imagePath, align, + selectSection, onlyAutoEvaluation, reviewerCanSeeAutoEvaluation); saveDocuments(page, assignmentTemplate); } else { page = portfolioService.appendNewPage(getIdentity(), title, summary, imagePath, align, selectSection); @@ -606,6 +656,9 @@ public class PageMetadataEditController extends FormBasicController { processUpload(); updateDocumentsLayout(); } + } else if(evaluationFormEl == source) { + boolean otherOptions = evaluationFormEl.isOneSelected() && evaluationFormEl.isSelected(1); + reviewerSeeAutoEvaEl.setVisible(otherOptions); } else if(source instanceof FormLink) { FormLink link = (FormLink)source; if("delete".equals(link.getCmd()) && link.getUserObject() instanceof File) { diff --git a/src/test/java/org/olat/modules/portfolio/manager/AssignmentDAOTest.java b/src/test/java/org/olat/modules/portfolio/manager/AssignmentDAOTest.java index eea7bb4b83e..8765b3a3eae 100644 --- a/src/test/java/org/olat/modules/portfolio/manager/AssignmentDAOTest.java +++ b/src/test/java/org/olat/modules/portfolio/manager/AssignmentDAOTest.java @@ -417,7 +417,7 @@ public class AssignmentDAOTest extends OlatTestCase { // new page based on an assignment template List<Section> sections = portfolioService.getSections(binder); Page page = portfolioService.startAssignmentFromTemplate(template.getKey(), id, - "From template", "Froma template", null, null, sections.get(0)); + "From template", "Froma template", null, null, sections.get(0), null, null); dbInstance.commit(); // check the method -- GitLab