Fisheye: Tag 51a524d6c602ed95664f40f78dafa44dceac7bbb refers to a dead (removed) revision in file `lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch20170623.sql'.
Fisheye: No comparison available. Pass `N' to diff?
Index: lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch20170710.sql
===================================================================
diff -u
--- lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch20170710.sql (revision 0)
+++ lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch20170710.sql (revision 51a524d6c602ed95664f40f78dafa44dceac7bbb)
@@ -0,0 +1,37 @@
+-- Turn off autocommit, so nothing is committed if there is an error
+
+SET AUTOCOMMIT = 0;
+SET FOREIGN_KEY_CHECKS=0;
+
+-- LDEV-4366 Add tables for Kumalive
+
+CREATE TABLE lams_kumalive (
+ kumalive_id BIGINT(20) NOT NULL AUTO_INCREMENT
+ , organisation_id BIGINT(20) NOT NULL
+ , created_by BIGINT(20)
+ , finished TINYINT(1) NOT NULL DEFAULT 0
+ , name VARCHAR(250)
+ , PRIMARY KEY (kumalive_id)
+ , CONSTRAINT FK_lams_kumalive_1 FOREIGN KEY (organisation_id)
+ REFERENCES lams_organisation (organisation_id) ON DELETE CASCADE ON UPDATE CASCADE
+ , CONSTRAINT FK_lams_kumalive_2 FOREIGN KEY (created_by)
+ REFERENCES lams_user (user_id) ON DELETE SET NULL ON UPDATE CASCADE
+);
+
+CREATE TABLE lams_kumalive_score (
+ score_id BIGINT(20) NOT NULL AUTO_INCREMENT
+ , kumalive_id BIGINT(20) NOT NULL
+ , user_id BIGINT(20)
+ , score TINYINT
+ , PRIMARY KEY (score_id)
+ , CONSTRAINT FK_lams_kumalive_score_1 FOREIGN KEY (kumalive_id)
+ REFERENCES lams_kumalive (kumalive_id) ON DELETE CASCADE ON UPDATE CASCADE
+ , CONSTRAINT FK_lams_kumalive_score_2 FOREIGN KEY (user_id)
+ REFERENCES lams_user (user_id) ON DELETE CASCADE ON UPDATE CASCADE
+);
+
+
+-- If there were no errors, commit and restore autocommit to on
+SET FOREIGN_KEY_CHECKS=0;
+COMMIT;
+SET AUTOCOMMIT = 1;
Index: lams_learning/conf/hibernate/mappings/org/lamsfoundation/lams/learning/kumalive/Kumalive.hbm.xml
===================================================================
diff -u -r34bc1c178bd5ada01543d5b4637487322d3ff565 -r51a524d6c602ed95664f40f78dafa44dceac7bbb
--- lams_learning/conf/hibernate/mappings/org/lamsfoundation/lams/learning/kumalive/Kumalive.hbm.xml (.../Kumalive.hbm.xml) (revision 34bc1c178bd5ada01543d5b4637487322d3ff565)
+++ lams_learning/conf/hibernate/mappings/org/lamsfoundation/lams/learning/kumalive/Kumalive.hbm.xml (.../Kumalive.hbm.xml) (revision 51a524d6c602ed95664f40f78dafa44dceac7bbb)
@@ -24,11 +24,5 @@
class="org.lamsfoundation.lams.usermanagement.User" not-null="false">
-
-
-
+
\ No newline at end of file
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/kumalive/KumaliveWebsocketServer.java
===================================================================
diff -u -r2584207dba753ac8e61c06022694b202597775d9 -r51a524d6c602ed95664f40f78dafa44dceac7bbb
--- lams_learning/src/java/org/lamsfoundation/lams/learning/kumalive/KumaliveWebsocketServer.java (.../KumaliveWebsocketServer.java) (revision 2584207dba753ac8e61c06022694b202597775d9)
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/kumalive/KumaliveWebsocketServer.java (.../KumaliveWebsocketServer.java) (revision 51a524d6c602ed95664f40f78dafa44dceac7bbb)
@@ -1,11 +1,11 @@
package org.lamsfoundation.lams.learning.kumalive;
import java.io.IOException;
-import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArrayList;
import javax.websocket.CloseReason;
import javax.websocket.CloseReason.CloseCodes;
@@ -35,7 +35,7 @@
/**
* Processes messages for Kumalive
- *
+ *
* @author Marcin Cieslak
*/
@ServerEndpoint("/kumaliveWebsocket")
@@ -60,7 +60,7 @@
private String name;
private UserDTO createdBy;
private boolean raiseHandPrompt;
- private List raisedHand;
+ private final List raisedHand = new CopyOnWriteArrayList<>();
private Integer speaker;
private final Map learners = new ConcurrentHashMap<>();
@@ -106,7 +106,16 @@
if (kumalive == null) {
return;
}
- kumalive.learners.remove(login);
+ KumaliveUser user = kumalive.learners.remove(login);
+ if (user != null) {
+ Integer userId = user.userDTO.getUserID();
+ if (kumalive.raisedHand != null) {
+ kumalive.raisedHand.remove(userId);
+ }
+ if (userId.equals(kumalive.speaker)) {
+ kumalive.speaker = null;
+ }
+ }
sendRefresh(kumalive);
}
@@ -235,7 +244,7 @@
// current state of question and speaker
responseJSON.put("raiseHandPrompt", kumalive.raiseHandPrompt);
- if (kumalive.raisedHand != null) {
+ if (!kumalive.raisedHand.isEmpty()) {
responseJSON.put("raisedHand", new JSONArray(kumalive.raisedHand));
}
responseJSON.put("speaker", kumalive.speaker);
@@ -253,6 +262,8 @@
learnerJSON.put("portraitUuid", participantDTO.getPortraitUuid());
learnerJSON.put("roleTeacher", participant.roleTeacher);
+ logins.put("user" + participantDTO.getUserID(), participantDTO.getLogin());
+
learnersJSON.put(learnerJSON);
}
responseJSON.put("learners", learnersJSON);
@@ -270,7 +281,7 @@
responseJSON.put("logins", logins);
teacherResponseJSON = responseJSON;
}
- responseJSON.put("roleTeacher", participant.roleTeacher);
+ teacherResponseJSON.put("roleTeacher", participant.roleTeacher);
channel.sendText(teacherResponseJSON.toString());
} else {
channel.sendText(learnerResponse);
@@ -319,7 +330,7 @@
}
kumalive.raiseHandPrompt = false;
- kumalive.raisedHand = null;
+ kumalive.raisedHand.clear();
sendRefresh(kumalive);
}
@@ -346,9 +357,7 @@
return;
}
- if (kumalive.raisedHand == null) {
- kumalive.raisedHand = new LinkedList<>();
- } else if (kumalive.raisedHand.contains(userId)) {
+ if (kumalive.raisedHand.contains(userId)) {
return;
}
@@ -379,9 +388,7 @@
}
kumalive.raisedHand.remove(userId);
- if (kumalive.raisedHand.isEmpty()) {
- kumalive.raisedHand = null;
- }
+
sendRefresh(kumalive);
}
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/kumalive/dao/IKumaliveDAO.java
===================================================================
diff -u -r2584207dba753ac8e61c06022694b202597775d9 -r51a524d6c602ed95664f40f78dafa44dceac7bbb
--- lams_learning/src/java/org/lamsfoundation/lams/learning/kumalive/dao/IKumaliveDAO.java (.../IKumaliveDAO.java) (revision 2584207dba753ac8e61c06022694b202597775d9)
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/kumalive/dao/IKumaliveDAO.java (.../IKumaliveDAO.java) (revision 51a524d6c602ed95664f40f78dafa44dceac7bbb)
@@ -28,4 +28,6 @@
public interface IKumaliveDAO extends IBaseDAO {
Kumalive findByOrganisationId(Integer organisationId);
+
+ void saveScore(Long kumaliveId, Integer userId, Short score);
}
\ No newline at end of file
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/kumalive/dao/hibernate/KumaliveDAO.java
===================================================================
diff -u -r2584207dba753ac8e61c06022694b202597775d9 -r51a524d6c602ed95664f40f78dafa44dceac7bbb
--- lams_learning/src/java/org/lamsfoundation/lams/learning/kumalive/dao/hibernate/KumaliveDAO.java (.../KumaliveDAO.java) (revision 2584207dba753ac8e61c06022694b202597775d9)
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/kumalive/dao/hibernate/KumaliveDAO.java (.../KumaliveDAO.java) (revision 51a524d6c602ed95664f40f78dafa44dceac7bbb)
@@ -25,6 +25,7 @@
import java.util.List;
+import org.hibernate.Query;
import org.lamsfoundation.lams.dao.hibernate.LAMSBaseDAO;
import org.lamsfoundation.lams.learning.kumalive.dao.IKumaliveDAO;
import org.lamsfoundation.lams.learning.kumalive.model.Kumalive;
@@ -35,10 +36,21 @@
private static final String FIND_BY_ORGANISATION = "FROM " + Kumalive.class.getName()
+ " AS k WHERE k.organisation.organisationId = ? AND k.finished = 0";
+ private static final String SAVE_SCORE_SQL = "INSERT INTO lams_kumalive_score VALUES (NULL, ?, ?, ?)";
+
@Override
@SuppressWarnings("unchecked")
public Kumalive findByOrganisationId(Integer organisationId) {
List result = (List) doFind(FIND_BY_ORGANISATION, organisationId);
return result.isEmpty() ? null : result.get(0);
}
+
+ @Override
+ public void saveScore(Long kumaliveId, Integer userId, Short score) {
+ Query query = getSession().createSQLQuery(SAVE_SCORE_SQL);
+ query.setLong(0, kumaliveId);
+ query.setInteger(1, userId);
+ query.setShort(2, score);
+ query.executeUpdate();
+ }
}
\ No newline at end of file
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/kumalive/model/Kumalive.java
===================================================================
diff -u -r2584207dba753ac8e61c06022694b202597775d9 -r51a524d6c602ed95664f40f78dafa44dceac7bbb
--- lams_learning/src/java/org/lamsfoundation/lams/learning/kumalive/model/Kumalive.java (.../Kumalive.java) (revision 2584207dba753ac8e61c06022694b202597775d9)
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/kumalive/model/Kumalive.java (.../Kumalive.java) (revision 51a524d6c602ed95664f40f78dafa44dceac7bbb)
@@ -23,7 +23,6 @@
package org.lamsfoundation.lams.learning.kumalive.model;
import java.io.Serializable;
-import java.util.Map;
import org.lamsfoundation.lams.usermanagement.Organisation;
import org.lamsfoundation.lams.usermanagement.User;
@@ -37,9 +36,8 @@
private User createdBy;
private String name;
private Boolean finished = false;
- private Map scores;
-
- public Kumalive(){
+
+ public Kumalive() {
}
public Kumalive(Organisation organisation, User createdBy, String name) {
@@ -87,12 +85,4 @@
public void setFinished(Boolean finished) {
this.finished = finished;
}
-
- public Map getScores() {
- return scores;
- }
-
- public void setScores(Map scores) {
- this.scores = scores;
- }
}
\ No newline at end of file
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java
===================================================================
diff -u -r2584207dba753ac8e61c06022694b202597775d9 -r51a524d6c602ed95664f40f78dafa44dceac7bbb
--- lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision 2584207dba753ac8e61c06022694b202597775d9)
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision 51a524d6c602ed95664f40f78dafa44dceac7bbb)
@@ -1449,10 +1449,7 @@
*/
@Override
public void scoreKumalive(Long id, Integer userId, Short score) {
- Kumalive kumalive = (Kumalive) kumaliveDAO.find(Kumalive.class, id);
- User user = (User) kumaliveDAO.find(User.class, userId);
- kumalive.getScores().put(user, score);
- kumaliveDAO.update(kumalive);
+ kumaliveDAO.saveScore(id, userId, score);
}
private boolean isActivityLast(Activity activity) {
Index: lams_learning/web/includes/javascript/kumalive.js
===================================================================
diff -u -ra0ab332d7aacbbe554cb9476aa0ede6b12eb881a -r51a524d6c602ed95664f40f78dafa44dceac7bbb
--- lams_learning/web/includes/javascript/kumalive.js (.../kumalive.js) (revision a0ab332d7aacbbe554cb9476aa0ede6b12eb881a)
+++ lams_learning/web/includes/javascript/kumalive.js (.../kumalive.js) (revision 51a524d6c602ed95664f40f78dafa44dceac7bbb)
@@ -235,7 +235,7 @@
if (roleTeacher) {
// teacher can see logins and chooses who speaks
- learnerDiv.attr('title', learner.login)
+ learnerDiv.attr('title', message.logins['user' + learner.id])
.css('cursor', 'pointer')
.click(speak);
}