Skip to content
Snippets Groups Projects
Commit 5073268b authored by srosse's avatar srosse
Browse files

OO-1593: hardened update...

parent 84e60660
No related branches found
No related tags found
No related merge requests found
Showing
with 153 additions and 165 deletions
...@@ -23,7 +23,7 @@ import java.util.List; ...@@ -23,7 +23,7 @@ import java.util.List;
import org.olat.basesecurity.IdentityShort; import org.olat.basesecurity.IdentityShort;
import org.olat.core.id.Identity; import org.olat.core.id.Identity;
import org.olat.course.assessment.model.CourseStatistics; import org.olat.course.assessment.model.AssessmentStatistics;
import org.olat.course.assessment.model.SearchAssessedIdentityParams; import org.olat.course.assessment.model.SearchAssessedIdentityParams;
import org.olat.modules.assessment.AssessmentEntry; import org.olat.modules.assessment.AssessmentEntry;
import org.olat.modules.assessment.model.AssessmentEntryStatus; import org.olat.modules.assessment.model.AssessmentEntryStatus;
...@@ -38,7 +38,23 @@ import org.olat.modules.assessment.model.AssessmentEntryStatus; ...@@ -38,7 +38,23 @@ import org.olat.modules.assessment.model.AssessmentEntryStatus;
*/ */
public interface AssessmentToolManager { public interface AssessmentToolManager {
public CourseStatistics getStatistics(Identity coach, SearchAssessedIdentityParams params); public AssessmentStatistics getStatistics(Identity coach, SearchAssessedIdentityParams params);
/**
*
* @param coach
* @param params
* @return
*/
public int getNumberOfAssessedIndetities(Identity coach, SearchAssessedIdentityParams params);
/**
* The number of user who launched the course / resource
* @param coach
* @param params
* @return
*/
public int getNumberOfInitialLaunches(Identity coach, SearchAssessedIdentityParams params);
public List<Identity> getAssessedIdentities(Identity coach, SearchAssessedIdentityParams params); public List<Identity> getAssessedIdentities(Identity coach, SearchAssessedIdentityParams params);
......
...@@ -29,11 +29,9 @@ import org.olat.basesecurity.IdentityShort; ...@@ -29,11 +29,9 @@ import org.olat.basesecurity.IdentityShort;
import org.olat.core.commons.persistence.DB; import org.olat.core.commons.persistence.DB;
import org.olat.core.commons.persistence.PersistenceHelper; import org.olat.core.commons.persistence.PersistenceHelper;
import org.olat.core.id.Identity; import org.olat.core.id.Identity;
import org.olat.core.logging.OLog;
import org.olat.core.logging.Tracing;
import org.olat.core.util.StringHelper; import org.olat.core.util.StringHelper;
import org.olat.course.assessment.AssessmentToolManager; import org.olat.course.assessment.AssessmentToolManager;
import org.olat.course.assessment.model.CourseStatistics; import org.olat.course.assessment.model.AssessmentStatistics;
import org.olat.course.assessment.model.SearchAssessedIdentityParams; import org.olat.course.assessment.model.SearchAssessedIdentityParams;
import org.olat.course.assessment.model.UserCourseInfosImpl; import org.olat.course.assessment.model.UserCourseInfosImpl;
import org.olat.modules.assessment.AssessmentEntry; import org.olat.modules.assessment.AssessmentEntry;
...@@ -52,148 +50,130 @@ import org.springframework.stereotype.Service; ...@@ -52,148 +50,130 @@ import org.springframework.stereotype.Service;
*/ */
@Service @Service
public class AssessmentToolManagerImpl implements AssessmentToolManager { public class AssessmentToolManagerImpl implements AssessmentToolManager {
private static final OLog log = Tracing.createLoggerFor(AssessmentToolManagerImpl.class);
@Autowired @Autowired
private DB dbInstance; private DB dbInstance;
@Override @Override
public CourseStatistics getStatistics(Identity coach, SearchAssessedIdentityParams params) { public int getNumberOfAssessedIndetities(Identity coach, SearchAssessedIdentityParams params) {
CourseStatistics entry = new CourseStatistics();
//count all possible participants for the coach permissions //count all possible participants for the coach permissions
TypedQuery<Long> countUsers = createAssessedIdentities(coach, params, Long.class); TypedQuery<Long> countUsers = createAssessedIdentities(coach, params, Long.class);
int numOfAssessedIdentites = 0; int numOfAssessedIdentites = 0;
List<Long> numOfUsersList = countUsers.getResultList(); List<Long> numOfUsersList = countUsers.getResultList();
if(numOfUsersList.size() == 1) { if(numOfUsersList.size() == 1) {
numOfAssessedIdentites = numOfUsersList.get(0) == null ? 0 : numOfUsersList.get(0).intValue(); numOfAssessedIdentites = numOfUsersList.get(0) == null ? 0 : numOfUsersList.get(0).intValue();
} }
entry.setNumOfAssessedIdentities(numOfAssessedIdentites); return numOfAssessedIdentites;
//retrive statistcis about efficicency statements
assessmentEntryStatistics(coach, params, entry);
//retrieve statistics in user course infos
userCourseInfosStatistics(coach, params, entry);
return entry;
} }
private void userCourseInfosStatistics(Identity coach, SearchAssessedIdentityParams params, CourseStatistics entry) { @Override
public int getNumberOfInitialLaunches(Identity coach, SearchAssessedIdentityParams params) {
RepositoryEntry courseEntry = params.getEntry(); RepositoryEntry courseEntry = params.getEntry();
try {
StringBuilder sf = new StringBuilder();
sf.append("select count(infos.key), infos.resource.key from ").append(UserCourseInfosImpl.class.getName()).append(" as infos ")
.append(" where infos.resource.key=:resourceKey and (infos.identity in");
if(params.isAdmin()) {
sf.append(" (select participant.identity from repoentrytogroup as rel, bgroupmember as participant")
.append(" where rel.entry.key=:repoEntryKey and rel.group=participant.group")
.append(" and participant.role='").append(GroupRoles.participant.name()).append("'")
.append(" )");
if(params.isNonMembers()) {
sf.append(" or not exists (select membership.identity from repoentrytogroup as rel, bgroupmember as membership")
.append(" where rel.entry.key=:repoEntryKey and rel.group=membership.group and membership.identity=infos.identity")
.append(" )");
}
} else if(params.isBusinessGroupCoach() || params.isRepositoryEntryCoach()) {
sf.append(" (select participant.identity from repoentrytogroup as rel, bgroupmember as participant, bgroupmember as coach")
.append(" where rel.entry.key=:repoEntryKey")
.append(" and rel.group=coach.group and coach.role='").append(GroupRoles.coach.name()).append("' and coach.identity.key=:identityKey")
.append(" and rel.group=participant.group and participant.role='").append(GroupRoles.participant.name()).append("'")
.append(" )");
}
sf.append(" ) group by infos.resource.key");
TypedQuery<Object[]> infos = dbInstance.getCurrentEntityManager() StringBuilder sf = new StringBuilder();
.createQuery(sf.toString(), Object[].class) sf.append("select count(infos.key), infos.resource.key from ").append(UserCourseInfosImpl.class.getName()).append(" as infos ")
.setParameter("resourceKey", courseEntry.getOlatResource().getKey()) .append(" where infos.resource.key=:resourceKey and (infos.identity in");
.setParameter("repoEntryKey", courseEntry.getKey()); if(params.isAdmin()) {
if(!params.isAdmin()) { sf.append(" (select participant.identity from repoentrytogroup as rel, bgroupmember as participant")
infos.setParameter("identityKey", coach.getKey()); .append(" where rel.entry.key=:repoEntryKey and rel.group=participant.group")
.append(" and participant.role='").append(GroupRoles.participant.name()).append("'")
.append(" )");
if(params.isNonMembers()) {
sf.append(" or not exists (select membership.identity from repoentrytogroup as rel, bgroupmember as membership")
.append(" where rel.entry.key=:repoEntryKey and rel.group=membership.group and membership.identity=infos.identity")
.append(" )");
} }
} else if(params.isBusinessGroupCoach() || params.isRepositoryEntryCoach()) {
sf.append(" (select participant.identity from repoentrytogroup as rel, bgroupmember as participant, bgroupmember as coach")
.append(" where rel.entry.key=:repoEntryKey")
.append(" and rel.group=coach.group and coach.role='").append(GroupRoles.coach.name()).append("' and coach.identity.key=:identityKey")
.append(" and rel.group=participant.group and participant.role='").append(GroupRoles.participant.name()).append("'")
.append(" )");
}
sf.append(" ) group by infos.resource.key");
List<Object[]> results = infos.getResultList(); TypedQuery<Object[]> infos = dbInstance.getCurrentEntityManager()
Long initalLaunch = null; .createQuery(sf.toString(), Object[].class)
if(results != null && results.size() > 0) { .setParameter("resourceKey", courseEntry.getOlatResource().getKey())
initalLaunch = (Long)results.get(0)[0]; .setParameter("repoEntryKey", courseEntry.getKey());
} if(!params.isAdmin()) {
entry.setInitialLaunch(initalLaunch == null ? 0 : initalLaunch.intValue()); infos.setParameter("identityKey", coach.getKey());
} catch (Exception e) {
e.printStackTrace();
log.error("", e);
} }
List<Object[]> results = infos.getResultList();
return results != null && results.size() > 0 && results.get(0)[0] instanceof Number
? ((Number)results.get(0)[0]).intValue(): 0;
} }
private void assessmentEntryStatistics(Identity coach, SearchAssessedIdentityParams params, CourseStatistics entry) { @Override
public AssessmentStatistics getStatistics(Identity coach, SearchAssessedIdentityParams params) {
RepositoryEntry courseEntry = params.getEntry(); RepositoryEntry courseEntry = params.getEntry();
try {
StringBuilder sf = new StringBuilder();
sf.append("select avg(aentry.score) as scoreAverage, ")
.append(" sum(case when aentry.passed=true then 1 else 0 end) as numOfPassed,")
.append(" sum(case when aentry.passed=false then 1 else 0 end) as numOfFailed,")
.append(" sum(case when aentry.passed is null then 1 else 0 end) as numOfNotAttempted,")
.append(" sum(aentry.key) as numOfStatements,")
.append(" v.key as repoKey")
.append(" from assessmententry aentry ")
.append(" inner join aentry.repositoryEntry v ")
.append(" where v.key=:repoEntryKey and aentry.status is not null and not(aentry.status='").append(AssessmentEntryStatus.notStarted.name()).append("')");
if(params.getReferenceEntry() != null) {
sf.append(" and aentry.referenceEntry.key=:referenceKey");
}
if(params.getSubIdent() != null) {
sf.append(" and aentry.subIdent=:subIdent");
}
sf.append(" and (aentry.identity in");
if(params.isAdmin()) {
sf.append(" (select participant.identity from repoentrytogroup as rel, bgroupmember as participant")
.append(" where rel.entry.key=:repoEntryKey and rel.group=participant.group")
.append(" and participant.role='").append(GroupRoles.participant.name()).append("'")
.append(" )");
if(params.isNonMembers()) {
sf.append(" or aentry.identity not in (select membership.identity from repoentrytogroup as rel, bgroupmember as membership")
.append(" where rel.entry.key=:repoEntryKey and rel.group=membership.group and membership.identity=aentry.identity")
.append(" )");
}
} else if(params.isBusinessGroupCoach() || params.isRepositoryEntryCoach()) {
sf.append(" (select participant.identity from repoentrytogroup as rel, bgroupmember as participant, bgroupmember as coach")
.append(" where rel.entry.key=:repoEntryKey")
.append(" and rel.group=coach.group and coach.role='").append(GroupRoles.coach.name()).append("' and coach.identity.key=:identityKey")
.append(" and rel.group=participant.group and participant.role='").append(GroupRoles.participant.name()).append("'")
.append(" )");
}
sf.append(" ) group by v.key");
TypedQuery<Object[]> stats = dbInstance.getCurrentEntityManager() StringBuilder sf = new StringBuilder();
.createQuery(sf.toString(), Object[].class) sf.append("select avg(aentry.score) as scoreAverage, ")
.setParameter("repoEntryKey", courseEntry.getKey()); .append(" sum(case when aentry.passed=true then 1 else 0 end) as numOfPassed,")
if(!params.isAdmin()) { .append(" sum(case when aentry.passed=false then 1 else 0 end) as numOfFailed,")
stats.setParameter("identityKey", coach.getKey()); .append(" sum(case when aentry.passed is null then 1 else 0 end) as numOfNotAttempted,")
} .append(" sum(aentry.key) as numOfStatements,")
if(params.getReferenceEntry() != null) { .append(" v.key as repoKey")
stats.setParameter("referenceKey", params.getReferenceEntry().getKey()); .append(" from assessmententry aentry ")
} .append(" inner join aentry.repositoryEntry v ")
if(params.getSubIdent() != null) { .append(" where v.key=:repoEntryKey and aentry.status is not null and not(aentry.status='").append(AssessmentEntryStatus.notStarted.name()).append("')");
stats.setParameter("subIdent", params.getSubIdent()); if(params.getReferenceEntry() != null) {
sf.append(" and aentry.referenceEntry.key=:referenceKey");
}
if(params.getSubIdent() != null) {
sf.append(" and aentry.subIdent=:subIdent");
}
sf.append(" and (aentry.identity in");
if(params.isAdmin()) {
sf.append(" (select participant.identity from repoentrytogroup as rel, bgroupmember as participant")
.append(" where rel.entry.key=:repoEntryKey and rel.group=participant.group")
.append(" and participant.role='").append(GroupRoles.participant.name()).append("'")
.append(" )");
if(params.isNonMembers()) {
sf.append(" or aentry.identity not in (select membership.identity from repoentrytogroup as rel, bgroupmember as membership")
.append(" where rel.entry.key=:repoEntryKey and rel.group=membership.group and membership.identity=aentry.identity")
.append(" )");
} }
} else if(params.isBusinessGroupCoach() || params.isRepositoryEntryCoach()) {
sf.append(" (select participant.identity from repoentrytogroup as rel, bgroupmember as participant, bgroupmember as coach")
.append(" where rel.entry.key=:repoEntryKey")
.append(" and rel.group=coach.group and coach.role='").append(GroupRoles.coach.name()).append("' and coach.identity.key=:identityKey")
.append(" and rel.group=participant.group and participant.role='").append(GroupRoles.participant.name()).append("'")
.append(" )");
}
sf.append(" ) group by v.key");
TypedQuery<Object[]> stats = dbInstance.getCurrentEntityManager()
.createQuery(sf.toString(), Object[].class)
.setParameter("repoEntryKey", courseEntry.getKey());
if(!params.isAdmin()) {
stats.setParameter("identityKey", coach.getKey());
}
if(params.getReferenceEntry() != null) {
stats.setParameter("referenceKey", params.getReferenceEntry().getKey());
}
if(params.getSubIdent() != null) {
stats.setParameter("subIdent", params.getSubIdent());
}
AssessmentStatistics entry = new AssessmentStatistics();
List<Object[]> results = stats.getResultList();
if(results != null && results.size() > 0) {
Object[] result = results.get(0);
Double averageScore = (Double)result[0];
Long numOfPassed = (Long)result[1];
Long numOfFailed = (Long)result[2];
Long numOfNotAttempted = (Long)result[3];
List<Object[]> results = stats.getResultList(); entry.setAverageScore(averageScore);
if(results != null && results.size() > 0) { entry.setCountPassed(numOfPassed == null ? 0 : numOfPassed.intValue());
Object[] result = results.get(0); entry.setCountFailed(numOfFailed == null ? 0 : numOfFailed.intValue());
Double averageScore = (Double)result[0]; entry.setCountNotAttempted(numOfNotAttempted == null ? 0 : numOfNotAttempted.intValue());
Long numOfPassed = (Long)result[1];
Long numOfFailed = (Long)result[2];
Long numOfNotAttempted = (Long)result[3];
entry.setAverageScore(averageScore);
entry.setCountPassed(numOfPassed == null ? 0 : numOfPassed.intValue());
entry.setCountFailed(numOfFailed == null ? 0 : numOfFailed.intValue());
entry.setCountNotAttempted(numOfNotAttempted == null ? 0 : numOfNotAttempted.intValue());
}
} catch (Exception e) {
e.printStackTrace();
log.error("", e);
} }
return entry;
} }
@Override @Override
......
...@@ -25,22 +25,12 @@ package org.olat.course.assessment.model; ...@@ -25,22 +25,12 @@ package org.olat.course.assessment.model;
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
* *
*/ */
public class CourseStatistics { public class AssessmentStatistics {
private int numOfAssessedIdentities;
private int countPassed; private int countPassed;
private int countFailed; private int countFailed;
private int countNotAttempted; private int countNotAttempted;
private Double averageScore; private Double averageScore;
private int initialLaunch;
public int getNumOfAssessedIdentities() {
return numOfAssessedIdentities;
}
public void setNumOfAssessedIdentities(int numOfAssessedIdentities) {
this.numOfAssessedIdentities = numOfAssessedIdentities;
}
public int getCountPassed() { public int getCountPassed() {
return countPassed; return countPassed;
...@@ -73,12 +63,4 @@ public class CourseStatistics { ...@@ -73,12 +63,4 @@ public class CourseStatistics {
public void setAverageScore(Double averageScore) { public void setAverageScore(Double averageScore) {
this.averageScore = averageScore; this.averageScore = averageScore;
} }
public int getInitialLaunch() {
return initialLaunch;
}
public void setInitialLaunch(int initialLaunch) {
this.initialLaunch = initialLaunch;
}
} }
...@@ -49,7 +49,7 @@ public class SearchAssessedIdentityParams { ...@@ -49,7 +49,7 @@ public class SearchAssessedIdentityParams {
private String searchString; private String searchString;
private List<Long> businessGroupKeys; private List<Long> businessGroupKeys;
public SearchAssessedIdentityParams(RepositoryEntry entry, RepositoryEntry referenceEntry, String subIdent, public SearchAssessedIdentityParams(RepositoryEntry entry, String subIdent, RepositoryEntry referenceEntry,
AssessmentToolSecurityCallback secCallback) { AssessmentToolSecurityCallback secCallback) {
this.entry = entry; this.entry = entry;
this.referenceEntry = referenceEntry; this.referenceEntry = referenceEntry;
......
...@@ -69,7 +69,7 @@ public class AssessedIdentityListProvider implements ListProvider { ...@@ -69,7 +69,7 @@ public class AssessedIdentityListProvider implements ListProvider {
@Override @Override
public void getResult(String searchValue, ListReceiver receiver) { public void getResult(String searchValue, ListReceiver receiver) {
SearchAssessedIdentityParams params = new SearchAssessedIdentityParams(courseEntry, referenceEntry, subIdent, assessmentCallback); SearchAssessedIdentityParams params = new SearchAssessedIdentityParams(courseEntry, subIdent, referenceEntry, assessmentCallback);
params.setSearchString(searchValue); params.setSearchString(searchValue);
int maxEntries = MAX_ENTRIES; int maxEntries = MAX_ENTRIES;
......
...@@ -25,9 +25,11 @@ import org.olat.core.gui.components.velocity.VelocityContainer; ...@@ -25,9 +25,11 @@ import org.olat.core.gui.components.velocity.VelocityContainer;
import org.olat.core.gui.control.Event; import org.olat.core.gui.control.Event;
import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.WindowControl;
import org.olat.core.gui.control.controller.BasicController; import org.olat.core.gui.control.controller.BasicController;
import org.olat.course.CourseFactory;
import org.olat.course.ICourse;
import org.olat.course.assessment.AssessmentHelper; import org.olat.course.assessment.AssessmentHelper;
import org.olat.course.assessment.AssessmentToolManager; import org.olat.course.assessment.AssessmentToolManager;
import org.olat.course.assessment.model.CourseStatistics; import org.olat.course.assessment.model.AssessmentStatistics;
import org.olat.course.assessment.model.SearchAssessedIdentityParams; import org.olat.course.assessment.model.SearchAssessedIdentityParams;
import org.olat.modules.assessment.ui.AssessmentToolSecurityCallback; import org.olat.modules.assessment.ui.AssessmentToolSecurityCallback;
import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryEntry;
...@@ -77,22 +79,26 @@ public class AssessmentCourseStatisticsSmallController extends BasicController { ...@@ -77,22 +79,26 @@ public class AssessmentCourseStatisticsSmallController extends BasicController {
} }
public void updateStatistics() { public void updateStatistics() {
SearchAssessedIdentityParams params = new SearchAssessedIdentityParams(courseEntry, null, null, assessmentCallback); ICourse course = CourseFactory.loadCourse(courseEntry);
CourseStatistics stats = assessmentToolManager.getStatistics(getIdentity(), params); String rootNodeIdent = course.getRunStructure().getRootNode().getIdent();
numOfAssessedIdentities = stats.getNumOfAssessedIdentities(); SearchAssessedIdentityParams params = new SearchAssessedIdentityParams(courseEntry, null /* rootNodeIdent */, null, assessmentCallback);
numOfAssessedIdentities = assessmentToolManager.getNumberOfAssessedIndetities(getIdentity(), params);
mainVC.contextPut("numOfAssessedIdentities", numOfAssessedIdentities); mainVC.contextPut("numOfAssessedIdentities", numOfAssessedIdentities);
AssessmentStatistics stats = assessmentToolManager.getStatistics(getIdentity(), params);
mainVC.contextPut("scoreAverage", AssessmentHelper.getRoundedScore(stats.getAverageScore())); mainVC.contextPut("scoreAverage", AssessmentHelper.getRoundedScore(stats.getAverageScore()));
numOfPassed = stats.getCountPassed(); numOfPassed = stats.getCountPassed();
mainVC.contextPut("numOfPassed", numOfPassed); mainVC.contextPut("numOfPassed", numOfPassed);
int percentPassed = Math.round(100.0f * ((float)stats.getCountPassed() / (float)stats.getNumOfAssessedIdentities())); int percentPassed = Math.round(100.0f * (stats.getCountPassed() / numOfAssessedIdentities));
mainVC.contextPut("percentPassed", percentPassed); mainVC.contextPut("percentPassed", percentPassed);
numOfFailed = stats.getCountFailed(); numOfFailed = stats.getCountFailed();
mainVC.contextPut("numOfFailed", numOfFailed); mainVC.contextPut("numOfFailed", numOfFailed);
int percentFailed = Math.round(100.0f * ((float)stats.getCountFailed() / (float)stats.getNumOfAssessedIdentities())); int percentFailed = Math.round(100.0f * (stats.getCountFailed() / numOfAssessedIdentities));
mainVC.contextPut("percentFailed", percentFailed); mainVC.contextPut("percentFailed", percentFailed);
mainVC.contextPut("numOfInitialLaunch", stats.getInitialLaunch()); int numOfLaunches = assessmentToolManager.getNumberOfInitialLaunches(getIdentity(), params);
mainVC.contextPut("numOfInitialLaunch", numOfLaunches);
} }
@Override @Override
......
...@@ -226,7 +226,7 @@ public class IdentityListCourseNodeController extends FormBasicController implem ...@@ -226,7 +226,7 @@ public class IdentityListCourseNodeController extends FormBasicController implem
} }
private void updateModel(UserRequest ureq, String searchString, List<FlexiTableFilter> filters, List<FlexiTableFilter> extendedFilters) { private void updateModel(UserRequest ureq, String searchString, List<FlexiTableFilter> filters, List<FlexiTableFilter> extendedFilters) {
SearchAssessedIdentityParams params = new SearchAssessedIdentityParams(courseEntry, referenceEntry, courseNode.getIdent(), assessmentCallback); SearchAssessedIdentityParams params = new SearchAssessedIdentityParams(courseEntry, courseNode.getIdent(), referenceEntry, assessmentCallback);
List<AssessmentEntryStatus> assessmentStatus = null; List<AssessmentEntryStatus> assessmentStatus = null;
if(filters != null && filters.size() > 0) { if(filters != null && filters.size() > 0) {
...@@ -279,6 +279,7 @@ public class IdentityListCourseNodeController extends FormBasicController implem ...@@ -279,6 +279,7 @@ public class IdentityListCourseNodeController extends FormBasicController implem
if(filters != null && filters.size() > 0) { if(filters != null && filters.size() > 0) {
usersTableModel.filter(filters.get(0).getFilter()); usersTableModel.filter(filters.get(0).getFilter());
} }
tableEl.reset();
tableEl.reloadData(); tableEl.reloadData();
List<String> toolCmpNames = new ArrayList<>(); List<String> toolCmpNames = new ArrayList<>();
......
...@@ -73,7 +73,9 @@ public class AssessmentEntryDAO { ...@@ -73,7 +73,9 @@ public class AssessmentEntryDAO {
data.setRepositoryEntry(entry); data.setRepositoryEntry(entry);
data.setSubIdent(subIdent); data.setSubIdent(subIdent);
data.setReferenceEntry(referenceEntry); data.setReferenceEntry(referenceEntry);
data.setScore(new BigDecimal(score)); if(score != null) {
data.setScore(new BigDecimal(score));
}
data.setPassed(passed); data.setPassed(passed);
dbInstance.getCurrentEntityManager().persist(data); dbInstance.getCurrentEntityManager().persist(data);
return data; return data;
......
...@@ -191,7 +191,7 @@ public class AssessedIdentityListController extends FormBasicController implemen ...@@ -191,7 +191,7 @@ public class AssessedIdentityListController extends FormBasicController implemen
} }
private void updateModel(String searchString, List<FlexiTableFilter> filters, List<FlexiTableFilter> extendedFilters) { private void updateModel(String searchString, List<FlexiTableFilter> filters, List<FlexiTableFilter> extendedFilters) {
SearchAssessedIdentityParams params = new SearchAssessedIdentityParams(testEntry, testEntry, null, assessmentCallback); SearchAssessedIdentityParams params = new SearchAssessedIdentityParams(testEntry, null, testEntry, assessmentCallback);
List<AssessmentEntryStatus> assessmentStatus = null; List<AssessmentEntryStatus> assessmentStatus = null;
if(filters != null && filters.size() > 0) { if(filters != null && filters.size() > 0) {
......
...@@ -27,7 +27,7 @@ import org.olat.core.gui.control.WindowControl; ...@@ -27,7 +27,7 @@ import org.olat.core.gui.control.WindowControl;
import org.olat.core.gui.control.controller.BasicController; import org.olat.core.gui.control.controller.BasicController;
import org.olat.course.assessment.AssessmentHelper; import org.olat.course.assessment.AssessmentHelper;
import org.olat.course.assessment.AssessmentToolManager; import org.olat.course.assessment.AssessmentToolManager;
import org.olat.course.assessment.model.CourseStatistics; import org.olat.course.assessment.model.AssessmentStatistics;
import org.olat.course.assessment.model.SearchAssessedIdentityParams; import org.olat.course.assessment.model.SearchAssessedIdentityParams;
import org.olat.modules.assessment.ui.AssessmentToolSecurityCallback; import org.olat.modules.assessment.ui.AssessmentToolSecurityCallback;
import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryEntry;
...@@ -77,22 +77,23 @@ public class AssessmentStatisticsSmallController extends BasicController { ...@@ -77,22 +77,23 @@ public class AssessmentStatisticsSmallController extends BasicController {
} }
public void updateStatistics() { public void updateStatistics() {
SearchAssessedIdentityParams params = new SearchAssessedIdentityParams(testEntry, testEntry, null, assessmentCallback); SearchAssessedIdentityParams params = new SearchAssessedIdentityParams(testEntry, null, testEntry, assessmentCallback);
CourseStatistics stats = assessmentToolManager.getStatistics(getIdentity(), params); numOfAssessedIdentities = assessmentToolManager.getNumberOfAssessedIndetities(getIdentity(), params);
numOfAssessedIdentities = stats.getNumOfAssessedIdentities();
mainVC.contextPut("numOfAssessedIdentities", numOfAssessedIdentities); mainVC.contextPut("numOfAssessedIdentities", numOfAssessedIdentities);
AssessmentStatistics stats = assessmentToolManager.getStatistics(getIdentity(), params);
mainVC.contextPut("scoreAverage", AssessmentHelper.getRoundedScore(stats.getAverageScore())); mainVC.contextPut("scoreAverage", AssessmentHelper.getRoundedScore(stats.getAverageScore()));
numOfPassed = stats.getCountPassed(); numOfPassed = stats.getCountPassed();
mainVC.contextPut("numOfPassed", numOfPassed); mainVC.contextPut("numOfPassed", numOfPassed);
int percentPassed = Math.round(100.0f * ((float)stats.getCountPassed() / (float)stats.getNumOfAssessedIdentities())); int percentPassed = Math.round(100.0f * (stats.getCountPassed() / numOfAssessedIdentities));
mainVC.contextPut("percentPassed", percentPassed); mainVC.contextPut("percentPassed", percentPassed);
numOfFailed = stats.getCountFailed(); numOfFailed = stats.getCountFailed();
mainVC.contextPut("numOfFailed", numOfFailed); mainVC.contextPut("numOfFailed", numOfFailed);
int percentFailed = Math.round(100.0f * ((float)stats.getCountFailed() / (float)stats.getNumOfAssessedIdentities())); int percentFailed = Math.round(100.0f * (stats.getCountFailed() / numOfAssessedIdentities));
mainVC.contextPut("percentFailed", percentFailed); mainVC.contextPut("percentFailed", percentFailed);
mainVC.contextPut("numOfInitialLaunch", stats.getInitialLaunch()); int numOfLaunches = assessmentToolManager.getNumberOfInitialLaunches(getIdentity(), params);
mainVC.contextPut("numOfInitialLaunch", numOfLaunches);
} }
@Override @Override
......
...@@ -124,7 +124,7 @@ public class AssessmentToReviewSmallController extends FormBasicController { ...@@ -124,7 +124,7 @@ public class AssessmentToReviewSmallController extends FormBasicController {
} }
private void loadModel() { private void loadModel() {
SearchAssessedIdentityParams params = new SearchAssessedIdentityParams(testEntry, testEntry, null, assessmentCallback); SearchAssessedIdentityParams params = new SearchAssessedIdentityParams(testEntry, null, testEntry, assessmentCallback);
List<AssessmentEntry> entries = assessmentToolManager.getAssessmentEntries(getIdentity(), params, AssessmentEntryStatus.inReview); List<AssessmentEntry> entries = assessmentToolManager.getAssessmentEntries(getIdentity(), params, AssessmentEntryStatus.inReview);
List<UserToReviewRow> rows = new ArrayList<>(); List<UserToReviewRow> rows = new ArrayList<>();
......
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