Index: trunk/entitybroker/core-providers/src/java/org/sakaiproject/entitybroker/providers/model/EntitySite.java =================================================================== --- trunk/entitybroker/core-providers/src/java/org/sakaiproject/entitybroker/providers/model/EntitySite.java (revision 3580) +++ trunk/entitybroker/core-providers/src/java/org/sakaiproject/entitybroker/providers/model/EntitySite.java (revision 3584) @@ -637,6 +637,13 @@ } throw new UnsupportedOperationException(); } + + public Collection getMembersInGroups(List groupIds) { + if (site != null) { + return site.getMembersInGroups(groupIds); + } + throw new UnsupportedOperationException(); + } public Role getRole(String arg0) { if (site != null) { Index: trunk/sam/samigo-app/src/java/org/sakaiproject/tool/assessment/ui/listener/evaluation/TotalScoreListener.java =================================================================== --- trunk/sam/samigo-app/src/java/org/sakaiproject/tool/assessment/ui/listener/evaluation/TotalScoreListener.java (revision 3580) +++ trunk/sam/samigo-app/src/java/org/sakaiproject/tool/assessment/ui/listener/evaluation/TotalScoreListener.java (revision 3584) @@ -329,7 +329,7 @@ // changed from above by gopalrc - Jan 2008 //PublishedAssessmentService publishedAssessmentService = new PublishedAssessmentService(); - // boolean groupRelease = publishedAssessmentService.isReleasedToGroups(bean.getPublishedId()); + // boolean groupRelease = publishedAssver sent one Twitter, I don’t have Facebook, I’m not aware of really how it all happens. You folks areessmentService.isReleasedToGroups(bean.getPublishedId()); boolean groupRelease = p.getAssessmentAccessControl().getReleaseTo().equals(AssessmentAccessControlIfc.RELEASE_TO_SELECTED_GROUPS); if (groupRelease) { bean.setSelectedSectionFilterValue(TotalScoresBean.RELEASED_SECTIONS_GROUPS_SELECT_VALUE); @@ -538,7 +538,7 @@ } } } - + HashMap studentGradingSummaryDataMap = new HashMap(); // This method also store all the submitted assessment grading for a given published // assessment in TotalScoresBean public void prepareAgentResultList(TotalScoresBean bean, PublishedAssessmentData p, @@ -585,8 +585,8 @@ // no need to initialize itemSet 'cos we don't need to use it in totalScoresPage. So I am // stuffing it with an empty HashSet - daisyf - gdata.setItemGradingSet(gradingService.getItemGradingSet(gdata.getAssessmentGradingId().toString())); - //gdata.setItemGradingSet(new HashSet()); + gdata.setItemGradingSet(new HashSet()); + //gdata.setItemGradingSet(gradingService.getItemGradingSet(gdata.getAssessmentGradingId().toString())); try{ BeanUtils.copyProperties(results, gdata); } @@ -595,8 +595,14 @@ } results.setAssessmentGradingId(gdata.getAssessmentGradingId()); - if(gdata.getTotalAutoScore() != null) - results.setTotalAutoScore(gdata.getTotalAutoScore().toString()); + if(gdata.getTotalAutoScore() != null) { + if (gdata.getForGrade()) { + results.setTotalAutoScore(gdata.getTotalAutoScore().toString()); + } + else { + results.setTotalAutoScore("0.0"); + } + } else results.setTotalAutoScore("0.0"); @@ -611,44 +617,13 @@ results.setSubmissionCount(1); } else - results.setFinalScore("0.0"); + results.setFinalScore("0.0"); - Iterator i3 = gdata.getItemGradingSet().iterator(); - Long typeId = new Long(-1); - boolean autoGrade = true; - // Go through all itemGrading data, if there is at least one cannot be auto graded, - // ie, file upload, short answer/essay, or audio question, - // we set the autoGrade to false - // That is, this assessment grading record cannot be auto grade. - // We update the status to 3. - while (i3.hasNext()) - { - ItemGradingData igd = (ItemGradingData) i3.next(); - typeId = gradingService.getTypeId(igd.getItemGradingId()); - if (typeId.equals(TypeIfc.FILE_UPLOAD) - || typeId.equals(TypeIfc.ESSAY_QUESTION) - || typeId.equals(TypeIfc.AUDIO_RECORDING)) { - autoGrade = false; - break; - } - } + if(gdata.getTimeElapsed() != null) + results.setTimeElapsed(gdata.getTimeElapsed()); + else + results.setTimeElapsed(new Integer(0)); - // Update the status to AUTO_GRADED or NEED_HUMAN_ATTENTION only when the - // assessment has been submitted. - // If the assessment has not yet been submitted but only updated by instructor, - // we leave the status as NO_SUBMISSION. - // Note: I think "if(results.getForGrade())" is enough here for now. But I still - // put the second condition "!AssessmentGradingIfc.NO_SUBMISSION.equals(results.getStatus())" - // to avoid breaking by new statuses created later. - if (results.getForGrade() && !AssessmentGradingIfc.NO_SUBMISSION.equals(results.getStatus())) { - if (autoGrade) { - results.setStatus(AssessmentGradingIfc.AUTO_GRADED); - } - else { - results.setStatus(AssessmentGradingIfc.NEED_HUMAN_ATTENTION); - } - } - results.setComments(FormattedText.convertFormattedTextToPlaintext(gdata.getComments())); Date dueDate = null; @@ -696,13 +671,12 @@ results.getFirstName().length() > 0) results.setLastInitial(results.getFirstName().substring(0,1)); else - results.setLastInitial("Anonymous"); - results.setIdString(agent.getIdString()); - results.setAgentEid(agent.getEidString()); - results.setDisplayId(agent.getDisplayId()); -log.debug("testing agent getEid agent.getFirstname= " + agent.getFirstName()); -log.debug("testing agent getEid agent.getid= " + agent.getIdString()); -log.debug("testing agent getEid agent.geteid = " + agent.getEidString()); + results.setLastInitial("Anonymous"); + results.setIdString(agent.getIdString()); + results.setAgentEid(agent.getEidString()); + log.debug("testing agent getEid agent.getFirstname= " + agent.getFirstName()); + log.debug("testing agent getEid agent.getid= " + agent.getIdString()); + log.debug("testing agent getEid agent.geteid = " + agent.getEidString()); results.setRole((String)userRoles.get(gdata.getAgentId())); results.setRetakeAllowed(getRetakeAllowed(agent.getIdString(), studentGradingSummaryDataMap, retakeAssessment)); @@ -744,6 +718,7 @@ } } + public ArrayList getAgentIds(Map useridMap){ ArrayList agentUserIds = new ArrayList(); Iterator iter = useridMap.keySet().iterator(); Index: trunk/sam/samigo-services/src/java/org/sakaiproject/tool/assessment/integration/helper/integrated/SectionAwareServiceHelperImpl.java =================================================================== --- trunk/sam/samigo-services/src/java/org/sakaiproject/tool/assessment/integration/helper/integrated/SectionAwareServiceHelperImpl.java (revision 3580) +++ trunk/sam/samigo-services/src/java/org/sakaiproject/tool/assessment/integration/helper/integrated/SectionAwareServiceHelperImpl.java (revision 3584) @@ -27,6 +27,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.sakaiproject.authz.cover.AuthzGroupService; import org.sakaiproject.authz.cover.SecurityService; import org.sakaiproject.exception.IdUnusedException; import org.sakaiproject.section.api.SectionAwareness; @@ -101,14 +102,24 @@ * @return */ public List getGroupReleaseEnrollments(String siteid, String userUid, String publishedAssessmentId) { - List availEnrollments = getAvailableEnrollments(siteid, userUid); + ArrayList availEnrollments = (ArrayList) getAvailableEnrollments(siteid, userUid); List enrollments = new ArrayList(); + + List membersInRelseaseGroups = null; + try { + membersInRelseaseGroups = (List)siteService.getSite(siteid).getMembersInGroups(availEnrollments); + } + catch (IdUnusedException ex) { + // no site found + } + for (Iterator eIter = availEnrollments.iterator(); eIter.hasNext(); ) { EnrollmentRecord enr = (EnrollmentRecord)eIter.next(); - if (isUserInReleaseGroup(enr.getUser().getUserUid(), AgentFacade.getCurrentSiteId(), publishedAssessmentId)) { + if (membersInRelseaseGroups.contains( enr.getUser().getUserUid())) { enrollments.add(enr); } } + return enrollments; } Index: trunk/sakai-mock/src/main/java/org/sakaiproject/mock/domain/Site.java =================================================================== --- trunk/sakai-mock/src/main/java/org/sakaiproject/mock/domain/Site.java (revision 3580) +++ trunk/sakai-mock/src/main/java/org/sakaiproject/mock/domain/Site.java (revision 3584) @@ -20,12 +20,16 @@ **********************************************************************************/ package org.sakaiproject.mock.domain; +import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; +import java.util.Vector; +import org.sakaiproject.authz.api.Member; +import org.sakaiproject.authz.cover.AuthzGroupService; import org.sakaiproject.site.api.Group; import org.sakaiproject.site.api.SitePage; import org.sakaiproject.site.api.ToolConfiguration; @@ -90,7 +94,22 @@ } return groupsWithMember; } + + public Collection getMembersInGroups(List groupIds) + { + List membersInGroups = AuthzGroupService.getAuthzUsersInGroups((ArrayList)groupIds); + Collection rv = new Vector(); + for (Iterator i = membersInGroups.iterator(); i.hasNext();) + { + Member m = (Member)i.next(); + + if ((m != null) && (m.isActive())) + rv.add(m); + } + return rv; + } + public Collection getGroupsWithMemberHasRole(String userId, String role) { Set groupsWithMember = new HashSet(); for(Iterator iter = groups.iterator(); iter.hasNext();) { Index: isi_kernel/kernel-impl/src/main/java/org/sakaiproject/authz/impl/DbAuthzGroupService.java =================================================================== --- isi_kernel/kernel-impl/src/main/java/org/sakaiproject/authz/impl/DbAuthzGroupService.java (revision 3580) +++ isi_kernel/kernel-impl/src/main/java/org/sakaiproject/authz/impl/DbAuthzGroupService.java (revision 3584) @@ -203,7 +203,7 @@ ************************************************************************************************************************************************/ /** - * Construct a Storage object. + * Construct a Storage object.REALM_ID = 'e77c1e1d-6129-4f8e-adf4-c3d4ca875e51' * * @return The new storage object. */ @@ -648,6 +648,29 @@ return sqlService().dbRead(statement, fields, null ); } + + /** + * {@inheritDoc} + */ + public List getAuthzUsersInGroups(ArrayList groupIds) + { + // do it and do it fast! + if (groupIds == null || groupIds.size() < 1) + return new ArrayList(); // empty list + + // make a big where condition for groupIds with ORs + String inClause = orInClause( groupIds.size(), "SR.REALM_ID" ); + String statement = dbAuthzGroupSql.getSelectRealmUsersInGroupsSql(inClause); + Object[] fields = new Object[groupIds.size()]; + for ( int i=0; i siteGroupRefs = new ArrayList(siteGroups.size()); + for ( Iterator it=siteGroups.iterator(); it.hasNext(); ) + siteGroupRefs.add( ((Group)it.next()).getReference() ); + + List membersInGroups = AuthzGroupService.getAuthzUsersInGroups(siteGroupRefs); + Collection rv = membersInGroups; + return rv; + } + /** * {@inheritDoc} */ Index: isi_kernel/api/src/main/java/org/sakaiproject/authz/api/AuthzGroupService.java =================================================================== --- isi_kernel/api/src/main/java/org/sakaiproject/authz/api/AuthzGroupService.java (revision 3580) +++ isi_kernel/api/src/main/java/org/sakaiproject/authz/api/AuthzGroupService.java (revision 3584) @@ -84,6 +84,15 @@ List getAuthzUserGroupIds(ArrayList authzGroupIds, String userid); /** + * Get list of users who are in a set of groups + * + * @param groupIds + * AuthzGroup selection criteria (list of AuthzGroup ids) + * @return The List of user ids who are in a set of groups + */ + List getAuthzUsersInGroups(ArrayList groupIds); + + /** * Count the AuthzGroups that meet specified criteria. * * @param criteria Index: isi_kernel/api/src/main/java/org/sakaiproject/authz/cover/AuthzGroupService.java =================================================================== --- isi_kernel/api/src/main/java/org/sakaiproject/authz/cover/AuthzGroupService.java (revision 3580) +++ isi_kernel/api/src/main/java/org/sakaiproject/authz/cover/AuthzGroupService.java (revision 3584) @@ -89,7 +89,15 @@ return service.getAuthzUserGroupIds(param0, param1); } + + public static java.util.List getAuthzUsersInGroups(java.util.ArrayList param0) + { + org.sakaiproject.authz.api.AuthzGroupService service = getInstance(); + if (service == null) return null; + return service.getAuthzUsersInGroups(param0); + } + public static int countAuthzGroups(java.lang.String param0) { org.sakaiproject.authz.api.AuthzGroupService service = getInstance(); Index: isi_kernel/api/src/main/java/org/sakaiproject/site/api/Site.java =================================================================== --- isi_kernel/api/src/main/java/org/sakaiproject/site/api/Site.java (revision 3580) +++ isi_kernel/api/src/main/java/org/sakaiproject/site/api/Site.java (revision 3584) @@ -23,6 +23,7 @@ import java.io.Serializable; import java.util.Collection; +import java.util.HashMap; import java.util.List; import org.sakaiproject.authz.api.AuthzGroup; @@ -193,6 +194,15 @@ * @return A collection (Group) of groups defined in the site that have this user as a member, empty if there are none. */ Collection getGroupsWithMember(String userId); + + /** + * Get users who are in a particular set of groups. + * + * @param groupIds + * The list of groupids. + * @return A collection of members who are in the groups. + */ + Collection getMembersInGroups(List groupIds); /** * Get a collection of the groups in a Site that have this user as a member with this role.