Index: lams_common/src/java/org/lamsfoundation/lams/commonContext.xml
===================================================================
diff -u -rf27fea8eb6533208beffced8d55e3544857577e8 -r3f8a54919303711f3b52cdf48b248f102138d9be
--- lams_common/src/java/org/lamsfoundation/lams/commonContext.xml (.../commonContext.xml) (revision f27fea8eb6533208beffced8d55e3544857577e8)
+++ lams_common/src/java/org/lamsfoundation/lams/commonContext.xml (.../commonContext.xml) (revision 3f8a54919303711f3b52cdf48b248f102138d9be)
@@ -564,6 +564,7 @@
+
Index: lams_common/src/java/org/lamsfoundation/lams/qb/QbUtils.java
===================================================================
diff -u -r9012873415698350686bf05ac1ddb1ee5b8fe154 -r3f8a54919303711f3b52cdf48b248f102138d9be
--- lams_common/src/java/org/lamsfoundation/lams/qb/QbUtils.java (.../QbUtils.java) (revision 9012873415698350686bf05ac1ddb1ee5b8fe154)
+++ lams_common/src/java/org/lamsfoundation/lams/qb/QbUtils.java (.../QbUtils.java) (revision 3f8a54919303711f3b52cdf48b248f102138d9be)
@@ -33,9 +33,16 @@
: string.trim();
public static void fillFormWithUserCollections(IQbService qbService, QbQuestionForm form, Long qbQuestionUid) {
+ QbUtils.fillFormWithUserCollections(qbService, null, form, qbQuestionUid);
+ }
+
+ public static void fillFormWithUserCollections(IQbService qbService, String toolSignature, QbQuestionForm form,
+ Long qbQuestionUid) {
final boolean isRequestCameFromTool = StringUtils.isNotBlank(form.getSessionMapID());
+ boolean isDefaultQuestion = qbService.isQuestionDefaultInTool(qbQuestionUid, toolSignature);
Integer userId = QbUtils.getUserId();
- if (isRequestCameFromTool && qbQuestionUid != null) {
+
+ if (isRequestCameFromTool && !isDefaultQuestion && qbQuestionUid != null) {
QbQuestion qbQuestion = qbService.getQuestionByUid(qbQuestionUid);
boolean isQuestionInUserCollection = qbService.isQuestionInUserCollection(qbQuestion.getQuestionId(),
userId);
@@ -58,7 +65,7 @@
Collection questionCollections = qbQuestionUid == null ? new LinkedList<>()
: qbService.getQuestionCollectionsByUid(qbQuestionUid);
Long collectionUid = null;
- if (questionCollections.isEmpty()) {
+ if (isDefaultQuestion || questionCollections.isEmpty()) {
//set private collection as default, if question is new or doesn't have associated collection
for (QbCollection collection : userCollections) {
if (collection.isPersonal()) {
Index: lams_common/src/java/org/lamsfoundation/lams/qb/service/IQbService.java
===================================================================
diff -u -r9012873415698350686bf05ac1ddb1ee5b8fe154 -r3f8a54919303711f3b52cdf48b248f102138d9be
--- lams_common/src/java/org/lamsfoundation/lams/qb/service/IQbService.java (.../IQbService.java) (revision 9012873415698350686bf05ac1ddb1ee5b8fe154)
+++ lams_common/src/java/org/lamsfoundation/lams/qb/service/IQbService.java (.../IQbService.java) (revision 3f8a54919303711f3b52cdf48b248f102138d9be)
@@ -144,4 +144,6 @@
void prepareQuestionForExport(QbQuestion qbQuestion);
int mergeQuestions(long sourceQbQuestionUid, long targetQbQuestionUid);
+
+ boolean isQuestionDefaultInTool(long qbQuestionUid, String toolSignature);
}
Index: lams_common/src/java/org/lamsfoundation/lams/qb/service/QbService.java
===================================================================
diff -u -r7eef84aca4b6e28ca274dbf4a91631ca484c973e -r3f8a54919303711f3b52cdf48b248f102138d9be
--- lams_common/src/java/org/lamsfoundation/lams/qb/service/QbService.java (.../QbService.java) (revision 7eef84aca4b6e28ca274dbf4a91631ca484c973e)
+++ lams_common/src/java/org/lamsfoundation/lams/qb/service/QbService.java (.../QbService.java) (revision 3f8a54919303711f3b52cdf48b248f102138d9be)
@@ -38,6 +38,7 @@
import org.lamsfoundation.lams.qb.model.QbQuestionUnit;
import org.lamsfoundation.lams.qb.model.QbToolQuestion;
import org.lamsfoundation.lams.tool.service.ILamsCoreToolService;
+import org.lamsfoundation.lams.tool.service.ILamsToolService;
import org.lamsfoundation.lams.usermanagement.Organisation;
import org.lamsfoundation.lams.usermanagement.Role;
import org.lamsfoundation.lams.usermanagement.dto.UserDTO;
@@ -66,6 +67,8 @@
private ILogEventService logEventService;
+ private ILamsToolService toolService;
+
public static final Comparator COLLECTION_NAME_COMPARATOR = Comparator
.comparing(QbCollection::getName);
@@ -679,6 +682,12 @@
return answersChanged;
}
+ public boolean isQuestionDefaultInTool(long qbQuestionUid, String toolSignature) {
+ long defaultContentId = toolService.getToolDefaultContentIdBySignature(toolSignature);
+ Collection qbQuestions = qbDAO.getQuestionsByToolContentId(defaultContentId);
+ return qbQuestions.stream().anyMatch(q -> q.getUid().equals(qbQuestionUid));
+ }
+
private static Integer getUserId() {
HttpSession ss = SessionManager.getSession();
UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER);
@@ -704,4 +713,8 @@
public void setLogEventService(ILogEventService logEventService) {
this.logEventService = logEventService;
}
+
+ public void setToolService(ILamsToolService toolService) {
+ this.toolService = toolService;
+ }
}
\ No newline at end of file
Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/controller/AuthoringController.java
===================================================================
diff -u -r8a10262db418fe16a5ac30cb2123feddea6f162e -r3f8a54919303711f3b52cdf48b248f102138d9be
--- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/controller/AuthoringController.java (.../AuthoringController.java) (revision 8a10262db418fe16a5ac30cb2123feddea6f162e)
+++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/controller/AuthoringController.java (.../AuthoringController.java) (revision 3f8a54919303711f3b52cdf48b248f102138d9be)
@@ -367,6 +367,7 @@
// check whether it is "edit(old Question)" or "add(new Question)"
QbQuestion qbQuestion;
QaQueContent qaQuestion;
+ boolean isDefaultQuestion = false;
final boolean isAddingQuestion = itemIdx == -1;
if (isAddingQuestion) { // add
@@ -394,8 +395,18 @@
} else {
List rList = new ArrayList<>(qaQuestions);
qaQuestion = rList.get(itemIdx);
- qbQuestion = qbService.getQuestionByUid(qaQuestion.getQbQuestion().getUid());
+ long qbQuestionUid = qaQuestion.getQbQuestion().getUid();
+ qbQuestion = qbService.getQuestionByUid(qbQuestionUid);
qbService.releaseFromCache(qbQuestion);
+
+ // if it is a default question, do not modify it
+ // treat it as a new question
+ isDefaultQuestion = qbService.isQuestionDefaultInTool(qbQuestionUid, QaAppConstants.MY_SIGNATURE);
+ if (isDefaultQuestion) {
+ String questionContentFolderID = FileUtil.generateUniqueContentFolderID();
+ qbQuestion.setContentFolderId(questionContentFolderID);
+ qbQuestion.setQuestionId(qbService.generateNextQuestionId()); // generate a new question ID right away, so another user won't "take it"
+ }
}
QbQuestion oldQbQuestion = qbQuestion.clone();
@@ -409,7 +420,8 @@
qbQuestion.setMinWordsLimit(form.getMinWordsLimit());
qbQuestion.setFeedback(form.getFeedback());
- int isQbQuestionModified = qbQuestion.isQbQuestionModified(oldQbQuestion);
+ int isQbQuestionModified = isDefaultQuestion ? IQbService.QUESTION_MODIFIED_ID_BUMP
+ : qbQuestion.isQbQuestionModified(oldQbQuestion);
QbQuestion updatedQuestion = null;
switch (isQbQuestionModified) {
case IQbService.QUESTION_MODIFIED_VERSION_BUMP: {
@@ -438,7 +450,8 @@
//take care about question's collections. add to collection first
Long oldCollectionUid = form.getOldCollectionUid();
Long newCollectionUid = form.getNewCollectionUid();
- if (isAddingQuestion || (newCollectionUid != null && !newCollectionUid.equals(oldCollectionUid))) {
+ if (isAddingQuestion || isDefaultQuestion
+ || (newCollectionUid != null && !newCollectionUid.equals(oldCollectionUid))) {
qbService.addQuestionToCollection(newCollectionUid, updatedQuestion.getQuestionId(), false);
}
//remove from the old collection, if needed
@@ -493,7 +506,7 @@
form.setContentFolderID(qbQuestion.getContentFolderId());
form.setSessionMapID(sessionMapID);
- QbUtils.fillFormWithUserCollections(qbService, form, qbQuestion.getUid());
+ QbUtils.fillFormWithUserCollections(qbService, QaAppConstants.MY_SIGNATURE, form, qbQuestion.getUid());
request.setAttribute(AttributeNames.PARAM_CONTENT_FOLDER_ID, contentFolderID);
return "authoring/newQuestionBox";
Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/AuthoringController.java
===================================================================
diff -u -r8a10262db418fe16a5ac30cb2123feddea6f162e -r3f8a54919303711f3b52cdf48b248f102138d9be
--- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/AuthoringController.java (.../AuthoringController.java) (revision 8a10262db418fe16a5ac30cb2123feddea6f162e)
+++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/AuthoringController.java (.../AuthoringController.java) (revision 3f8a54919303711f3b52cdf48b248f102138d9be)
@@ -373,7 +373,7 @@
request.setAttribute(QbConstants.ATTR_OPTION_LIST, optionList);
form.setSessionMapID(sessionMap.getSessionID());
- QbUtils.fillFormWithUserCollections(qbService, form, qbQuestion.getUid());
+ QbUtils.fillFormWithUserCollections(qbService, ScratchieConstants.TOOL_SIGNATURE, form, qbQuestion.getUid());
form.setContentFolderID(qbQuestion.getContentFolderId());
request.setAttribute(AttributeNames.PARAM_CONTENT_FOLDER_ID, qbQuestion.getContentFolderId());
@@ -463,6 +463,7 @@
// check whether it is "edit(old Question)" or "add(new Question)"
QbQuestion qbQuestion;
ScratchieItem item;
+ boolean isDefaultQuestion = false;
final boolean isAddingQuestion = itemIdx == -1;
if (isAddingQuestion) { // add
qbQuestion = new QbQuestion();
@@ -483,8 +484,18 @@
} else {
List rList = new ArrayList<>(itemList);
item = rList.get(itemIdx);
- qbQuestion = qbService.getQuestionByUid(item.getQbQuestion().getUid());
+ long qbQuestionUid = item.getQbQuestion().getUid();
+ qbQuestion = qbService.getQuestionByUid(qbQuestionUid);
qbService.releaseFromCache(qbQuestion);
+
+ // if it is a default question, do not modify it
+ // treat it as a new question
+ isDefaultQuestion = qbService.isQuestionDefaultInTool(qbQuestionUid, ScratchieConstants.TOOL_SIGNATURE);
+ if (isDefaultQuestion) {
+ String questionContentFolderID = FileUtil.generateUniqueContentFolderID();
+ qbQuestion.setContentFolderId(questionContentFolderID);
+ qbQuestion.setQuestionId(qbService.generateNextQuestionId()); // generate a new question ID right away, so another user won't "take it"
+ }
}
QbQuestion oldQbQuestion = qbQuestion.clone();
@@ -510,7 +521,8 @@
List options = new ArrayList<>(optionList);
qbQuestion.setQbOptions(options);
- int isQbQuestionModified = qbQuestion.isQbQuestionModified(oldQbQuestion);
+ int isQbQuestionModified = isDefaultQuestion ? IQbService.QUESTION_MODIFIED_ID_BUMP
+ : qbQuestion.isQbQuestionModified(oldQbQuestion);
QbQuestion updatedQuestion = null;
switch (isQbQuestionModified) {
case IQbService.QUESTION_MODIFIED_VERSION_BUMP: {
@@ -543,7 +555,8 @@
//take care about question's collections. add to collection first
Long oldCollectionUid = form.getOldCollectionUid();
Long newCollectionUid = form.getNewCollectionUid();
- if (isAddingQuestion || (newCollectionUid != null && !newCollectionUid.equals(oldCollectionUid))) {
+ if (isAddingQuestion || isDefaultQuestion
+ || (newCollectionUid != null && !newCollectionUid.equals(oldCollectionUid))) {
qbService.addQuestionToCollection(newCollectionUid, updatedQuestion.getQuestionId(), false);
}
//remove from the old collection, if needed