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); }