Skip to content
Snippets Groups Projects
Commit bee4e6c2 authored by uhensler's avatar uhensler
Browse files

OO-3117: Question states as list in toolbar

parent fb21039f
No related branches found
No related tags found
No related merge requests found
Showing
with 130 additions and 50 deletions
......@@ -37,7 +37,11 @@ public interface QuestionItemSecurityCallback {
public boolean canReview();
public boolean canSetRevision();
public boolean canSetDraft();
public boolean canSetReview();
public boolean canSetRevised();
public boolean canSetFinal();
......
......@@ -69,7 +69,7 @@ public class AdministratorQItemSecurityCallback implements QuestionItemSecurityC
@Override
public boolean canStartReview() {
return !qpoolModule.isReviewProcessEnabled() || itemView.isReviewableFormat();
return !qpoolModule.isReviewProcessEnabled() || (itemView.isReviewableFormat() && !canReview());
}
@Override
......@@ -81,10 +81,20 @@ public class AdministratorQItemSecurityCallback implements QuestionItemSecurityC
}
@Override
public boolean canSetRevision() {
public boolean canSetDraft() {
return !qpoolModule.isReviewProcessEnabled() || itemView.isReviewableFormat();
}
@Override
public boolean canSetRevised() {
return !qpoolModule.isReviewProcessEnabled() || itemView.isReviewableFormat();
}
@Override
public boolean canSetReview() {
return !qpoolModule.isReviewProcessEnabled();
}
@Override
public boolean canSetFinal() {
return !qpoolModule.isReviewProcessEnabled() || itemView.isReviewableFormat();
......
......@@ -63,7 +63,7 @@ public class ProcesslessSecurityCallback implements QuestionItemSecurityCallback
@Override
public boolean canStartReview() {
return itemView.isAuthor() || itemView.isEditableInPool() || itemView.isEditableInShare();
return false;
}
@Override
......@@ -72,7 +72,17 @@ public class ProcesslessSecurityCallback implements QuestionItemSecurityCallback
}
@Override
public boolean canSetRevision() {
public boolean canSetDraft() {
return itemView.isAuthor() || itemView.isEditableInPool() || itemView.isEditableInShare();
}
@Override
public boolean canSetRevised() {
return itemView.isAuthor() || itemView.isEditableInPool() || itemView.isEditableInShare();
}
@Override
public boolean canSetReview() {
return itemView.isAuthor() || itemView.isEditableInPool() || itemView.isEditableInShare();
}
......
......@@ -83,7 +83,17 @@ public class ReviewProcessSecurityCallback implements QuestionItemSecurityCallba
}
@Override
public boolean canSetRevision() {
public boolean canSetDraft() {
return false;
}
@Override
public boolean canSetRevised() {
return false;
}
@Override
public boolean canSetReview() {
return false;
}
......
......@@ -28,6 +28,8 @@ import org.olat.core.commons.services.commentAndRating.CommentAndRatingSecurityC
import org.olat.core.commons.services.commentAndRating.ui.UserCommentsAndRatingsController;
import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.Component;
import org.olat.core.gui.components.dropdown.Dropdown;
import org.olat.core.gui.components.dropdown.DropdownOrientation;
import org.olat.core.gui.components.link.Link;
import org.olat.core.gui.components.link.LinkFactory;
import org.olat.core.gui.components.stack.PopEvent;
......@@ -76,11 +78,13 @@ import org.springframework.beans.factory.annotation.Autowired;
public class QuestionItemDetailsController extends BasicController implements TooledController, Activateable2 {
private Link editItem;
private Link statusDraftLink;
private Link statusReviewLink;
private Link statusFinalLink;
private Link statusEndOfLifeLink;
private Link statusRevisedLink;
private Link startReviewLink;
private Link reviewLink;
private Link revisionLink;
private Link finalLink;
private Link endOfLifeLink;
private Link deleteLink;
private Link nextItemLink;
private Link numberItemsLink;
......@@ -88,6 +92,7 @@ public class QuestionItemDetailsController extends BasicController implements To
private Link showMetadataLink;
private Link hideMetadataLink;
private Link shareItem, exportItem, copyItem;
private Dropdown statusDropdown;
private Controller editCtrl;
private Controller previewCtrl;
......@@ -155,31 +160,56 @@ public class QuestionItemDetailsController extends BasicController implements To
@Override
public void initTools() {
statusDropdown = new Dropdown("process.states", "process.states", false, getTranslator());
statusDropdown.setIconCSS("o_icon o_icon-fw o_icon_" + metadatasCtrl.getItem().getQuestionStatus());
statusDropdown.setOrientation(DropdownOrientation.normal);
boolean hasDropdownComponents = false;
if (securityCallback.canSetDraft()) {
statusDraftLink = LinkFactory.createToolLink("lifecycle.status.draft", translate("lifecycle.status.draft"), this);
statusDraftLink.setIconLeftCSS("o_icon o_icon-lg o_icon_draft");
statusDropdown.addComponent(statusDraftLink);
hasDropdownComponents = true;
}
if (securityCallback.canSetRevised()) {
statusRevisedLink = LinkFactory.createToolLink("lifecycle.status.revised", translate("lifecycle.status.revised"), this);
statusRevisedLink.setIconLeftCSS("o_icon o_icon-lg o_icon_revised");
statusDropdown.addComponent(statusRevisedLink);
hasDropdownComponents = true;
}
if (securityCallback.canSetReview()) {
statusReviewLink = LinkFactory.createToolLink("lifecycle.status.review", translate("lifecycle.status.review"), this);
statusReviewLink.setIconLeftCSS("o_icon o_icon-lg o_icon_review");
statusDropdown.addComponent(statusReviewLink);
hasDropdownComponents = true;
}
if (securityCallback.canSetFinal()) {
statusFinalLink = LinkFactory.createToolLink("lifecycle.status.finalVersion", translate("lifecycle.status.finalVersion"), this);
statusFinalLink.setIconLeftCSS("o_icon o_icon-lg o_icon_finalVersion");
statusDropdown.addComponent(statusFinalLink);
hasDropdownComponents = true;
}
if (securityCallback.canSetEndOfLife()) {
statusEndOfLifeLink = LinkFactory.createToolLink("lifecycle.status.endOfLife", translate("lifecycle.status.endOfLife"), this);
statusEndOfLifeLink.setIconLeftCSS("o_icon o_icon-lg o_icon_endOfLife");
statusDropdown.addComponent(statusEndOfLifeLink);
hasDropdownComponents = true;
}
if (hasDropdownComponents) {
stackPanel.addTool(statusDropdown, Align.left);
}
if (securityCallback.canStartReview()) {
startReviewLink = LinkFactory.createToolLink("process.start.review", translate("process.start.review"), this);
startReviewLink.setIconLeftCSS("o_icon o_icon-lg o_icon_start_review");
startReviewLink.setIconLeftCSS("o_icon o_icon-lg o_icon_review");
stackPanel.addTool(startReviewLink, Align.left);
}
if (securityCallback.canReview() && reviewService.hasRatingController()) {
reviewLink = LinkFactory.createToolLink("process.review", translate("process.review"), this);
reviewLink.setIconLeftCSS("o_icon o_icon-lg o_icon_review");
reviewLink.setIconLeftCSS("o_icon o_icon-lg o_icon_do_review");
stackPanel.addTool(reviewLink, Align.left);
}
if (securityCallback.canSetRevision()) {
revisionLink = LinkFactory.createToolLink("process.revision", translate("process.revision"), this);
revisionLink.setIconLeftCSS("o_icon o_icon-lg o_icon_revision");
stackPanel.addTool(revisionLink, Align.left);
}
if (securityCallback.canSetFinal()) {
finalLink = LinkFactory.createToolLink("process.final", translate("process.final"), this);
finalLink.setIconLeftCSS("o_icon o_icon-lg o_icon_final");
stackPanel.addTool(finalLink, Align.left);
}
if (securityCallback.canSetEndOfLife()) {
endOfLifeLink = LinkFactory.createToolLink("process.endOfLife", translate("process.endOfLife"), this);
endOfLifeLink.setIconLeftCSS("o_icon o_icon-lg o_icon_end_of_life");
stackPanel.addTool(endOfLifeLink, Align.left);
}
if (securityCallback.canDelete()) {
deleteLink = LinkFactory.createToolLink("delete.item", translate("delete.item"), this);
deleteLink.setIconLeftCSS("o_icon o_icon-lg o_icon_delete_item");
......@@ -244,16 +274,20 @@ public class QuestionItemDetailsController extends BasicController implements To
@Override
protected void event(UserRequest ureq, Component source, Event event) {
if(source == startReviewLink) {
if (source == statusDraftLink) {
doStatusDraft(ureq, metadatasCtrl.getItem());
} else if (source == statusRevisedLink) {
doStatusRevised(ureq, metadatasCtrl.getItem());
} else if (source == statusReviewLink) {
doStatusReview(ureq, metadatasCtrl.getItem());
} else if (source == statusFinalLink) {
doStatusFinal(ureq, metadatasCtrl.getItem());
} else if (source == statusEndOfLifeLink) {
doConfirmEndOfLife(ureq, metadatasCtrl.getItem());
} else if(source == startReviewLink) {
doConfirmStartReview(ureq, metadatasCtrl.getItem());
} else if (source == revisionLink) {
doRevision(ureq, metadatasCtrl.getItem());
} else if (source == reviewLink) {
openReview(ureq);
} else if (source == finalLink) {
doFinal(ureq, metadatasCtrl.getItem());
} else if (source == endOfLifeLink) {
doConfirmEndOfLife(ureq, metadatasCtrl.getItem());
} else if(source == deleteLink) {
doConfirmDelete(ureq, metadatasCtrl.getItem());
} else if(source == shareItem) {
......@@ -389,11 +423,19 @@ public class QuestionItemDetailsController extends BasicController implements To
//TOFO uh nein. Hier sofort den rate buttoon disablen
}
private void doRevision(UserRequest ureq, QuestionItem item) {
private void doStatusDraft(UserRequest ureq, QuestionItem item) {
doChangeQuestionStatus(ureq, item, QuestionStatus.draft, QPoolEvent.ITEM_DRAFT, "process.draft.set");
}
private void doStatusRevised(UserRequest ureq, QuestionItem item) {
doChangeQuestionStatus(ureq, item, QuestionStatus.revised, QPoolEvent.ITEM_REVISION, "process.revision.set");
}
private void doFinal(UserRequest ureq, QuestionItem item) {
private void doStatusReview(UserRequest ureq, QuestionItem item) {
doChangeQuestionStatus(ureq, item, QuestionStatus.review, QPoolEvent.ITEM_REVIEW, "process.review.set");
}
private void doStatusFinal(UserRequest ureq, QuestionItem item) {
doChangeQuestionStatus(ureq, item, QuestionStatus.finalVersion, QPoolEvent.ITEM_FINAL, "process.final.set");
}
......@@ -409,7 +451,7 @@ public class QuestionItemDetailsController extends BasicController implements To
private void doChangeQuestionStatus(UserRequest ureq, QuestionItem item, QuestionStatus newStatus, String qPoolEvent,
String i18nInfo) {
if(item instanceof QuestionItemImpl) {
if(!newStatus.equals(item.getQuestionStatus()) && item instanceof QuestionItemImpl) {
QuestionItemImpl itemImpl = (QuestionItemImpl)item;
itemImpl.setQuestionStatus(newStatus);
qpoolService.updateItem(itemImpl);
......
......@@ -167,6 +167,7 @@ process.revision.set=Der Status der Frage wurde auf "$\:lifecycle.status.revised
process.rating.title=Beurteilung
process.rating=Beurteilung
process.start.review=Beurteilung starten
process.states=Status
question=Itemanalyse
question.assessmentType=Testart
question.assessmentType.both=Both
......
......@@ -158,17 +158,17 @@ process.start.review.description=After the start of the review process all ratin
process.start.review.taxonomy.level=Subject
process.start.review.title=$\:process.start.review
process.confirm.endOfLife=If a question is end of life, the question can not be used anymore. Do you really want to set the end of life for the question "{0}"?
process.final=Final
process.draft.set=The status of the question has been changed to "$\:lifecycle.status.draft".
process.final.set=The status of the question has been changed to "$\:lifecycle.status.finalVersion".
process.endOfLife=End of life
process.endOfLife.set=The end of life has been set.
process.review=Review
process.revised.set=The status of the question has been changed to "$\:lifecycle.status.revised".
process.review.set=The status of the question has been changed to "$\:lifecycle.status.review".
process.review.started=The review process has been started.
process.revision=Revision
process.revision.set=The status of the question has been changed to "$\:lifecycle.status.revised".
process.rating.title=Review
process.rating=Review
process.start.review=Start review
process.states=Status
question=Item analysis
question.assessmentType=Test type
question.assessmentType.both=Both
......
......@@ -35,10 +35,12 @@ public class QPoolEvent extends MultiUserEvent {
public static final String ITEM_MARKED = "qpool-item-marked";
public static final String ITEM_CREATED = "qpool-item-created";
public static final String ITEM_DELETED = "qpool-item-deleted";
public static final String ITEM_REVIEW_STARTED = "qpool-item-review-started";
public static final String ITEM_DRAFT = "qpool-item-draft";
public static final String ITEM_REVISION = "qpool-item-revision";
public static final String ITEM_REVIEW = "qpool-item-review";
public static final String ITEM_FINAL = "qpool-item-final";
public static final String ITEM_END_OF_LIFE = "qpool-item-end-of-life";
public static final String ITEM_REVIEW_STARTED = "qpool-item-review-started";
public static final String COLL_CREATED = "qpool-coll-created";
public static final String COLL_DELETED = "qpoll-coll-deleted";
public static final String COLL_CHANGED = "qpoll-coll-changed";
......
......@@ -100,13 +100,15 @@ $fa-css-prefix: "o_icon" !default;
.o_icon_dev:before { content: $fa-var-bug;}
.o_icon_disabled:before { content: $fa-var-circle-o;}
.o_icon_download:before { content: $fa-var-download;}
.o_icon_draft:before { content: $fa-var-pencil;}
.o_icon_do_review:before { content: $fa-var-star;}
.o_icon_edit:before { content: $fa-var-edit;}
.o_icon_edit_file:before { content: $fa-var-edit;}
.o_icon_edit_metadata:before { content: $fa-var-gear;}
.o_icon_element_after:before { content: $fa-var-arrow-down; }
.o_icon_element_before:before { content: $fa-var-arrow-up; }
.o_icon_enabled:before { content: $fa-var-circle; }
.o_icon_end_of_life:before { content: $fa-var-trash-o;}
.o_icon_endOfLife:before { content: $fa-var-trash-o;}
.o_icon_enlarge:before { content: $fa-var-search-plus;}
.o_icon_eportfolio_add:before { content: $fa-var-puzzle-piece;}
.o_icon_eportfolio_link:before { content: $fa-var-puzzle-piece; }
......@@ -119,7 +121,7 @@ $fa-css-prefix: "o_icon" !default;
.o_icon_failed:before { content: $fa-var-times-circle;}
.o_icon_files:before { content: $fa-var-files-o;}
.o_icon_filter:before { content: $fa-var-filter;}
.o_icon_final:before { content: $fa-var-check;}
.o_icon_finalVersion:before { content: $fa-var-check;}
.o_icon_graduate:before { content: $fa-var-graduation-cap; }
.o_icon_group:before, .o_BusinessGroup_icon:before { content: $fa-var-users; }
.o_icon_header:before { content: $fa-var-header;}
......@@ -242,9 +244,9 @@ $fa-css-prefix: "o_icon" !default;
.o_icon_restore:before { content: $fa-var-thumbs-up; }
.o_icon_results_visible:before { content: $fa-var-eye;}
.o_icon_results_hidden:before { content: $fa-var-eye-slash;}
.o_icon_review:before { content: $fa-var-star;}
.o_icon_review:before { content: $fa-var-star-o;}
.o_icon_reviewer:before { content: $fa-var-user-md;}
.o_icon_revision:before { content: $fa-var-rotate-left;}
.o_icon_revised:before { content: $fa-var-rotate-left;}
.o_icon_rss:before { content: $fa-var-rss;}
.o_icon_rss_unsubscribe:before { content: $fa-var-rss; color: #996633;}
.o_icon_rubric:before { content: $fa-var-sliders; }
......@@ -269,7 +271,6 @@ $fa-css-prefix: "o_icon" !default;
.o_icon_sort_amount_desc:before { content: $fa-var-sort-amount-desc;}
.o_icon_sort_menu:before { content: $fa-var-sort-amount-asc;}
.o_icon_start:before { content: $fa-var-chevron-right; }
.o_icon_start_review:before { content: $fa-var-star-o;}
.o_icon_status_available:before { content: $fa-var-circle; color: $o-im-status-available-color; }
.o_icon_status_chat:before { content: $fa-var-comment; }
.o_icon_status_dnd:before { content: $fa-var-dot-circle-o; color: $o-im-status-dnd-color; }
......
This diff is collapsed.
source diff could not be displayed: it is too large. Options to address this: view the blob.
This diff is collapsed.
This diff is collapsed.
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