/**********************************************************************************
*
* $Id: AuthzSectionsImpl.java 129684 2013-09-12 21:50:43Z matthew@longsight.com $
*
***********************************************************************************
*
* Copyright (c) 2005, 2006, 2007, 2008 The Sakai Foundation, The MIT Corporation
*
* Licensed under the Educational Community License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.opensource.org/licenses/ECL-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
**********************************************************************************/
package org.sakaiproject.tool.gradebook.facades.sections;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.sakaiproject.exception.IdUnusedException;
import org.sakaiproject.section.api.SectionAwareness;
import org.sakaiproject.section.api.coursemanagement.CourseSection;
import org.sakaiproject.section.api.coursemanagement.EnrollmentRecord;
import org.sakaiproject.section.api.facade.Role;
import org.sakaiproject.service.gradebook.shared.GradebookPermissionService;
import org.sakaiproject.service.gradebook.shared.GradebookService;
import org.sakaiproject.site.api.Group;
import org.sakaiproject.tool.gradebook.facades.Authn;
import org.sakaiproject.tool.gradebook.facades.Authz;
/**
* An implementation of Gradebook-specific authorization needs based
* on the shared Section Awareness API.
*/
public class AuthzSectionsImpl implements Authz {
private static final Log log = LogFactory.getLog(AuthzSectionsImpl.class);
private Authn authn;
private SectionAwareness sectionAwareness;
private GradebookPermissionService gradebookPermissionService;
public boolean isUserAbleToGrade(String gradebookUid) {
String userUid = authn.getUserUid();
return isUserAbleToGrade(gradebookUid, userUid);
}
public boolean isUserAbleToGrade(String gradebookUid, String userUid) {
return (getSectionAwareness().isSiteMemberInRole(gradebookUid, userUid, Role.INSTRUCTOR) || getSectionAwareness().isSiteMemberInRole(gradebookUid, userUid, Role.TA));
}
public boolean isUserAbleToGradeAll(String gradebookUid) {
return isUserAbleToGradeAll(gradebookUid, authn.getUserUid());
}
public boolean isUserAbleToGradeAll(String gradebookUid, String userUid) {
return getSectionAwareness().isSiteMemberInRole(gradebookUid, userUid, Role.INSTRUCTOR);
}
public boolean isUserHasGraderPermissions(String gradebookUid) {
String userUid = authn.getUserUid();
List permissions = gradebookPermissionService.getGraderPermissionsForUser(gradebookUid, userUid);
return permissions != null && permissions.size() > 0;
}
public boolean isUserHasGraderPermissions(Long gradebookId) {
String userUid = authn.getUserUid();
List permissions = gradebookPermissionService.getGraderPermissionsForUser(gradebookId, userUid);
return permissions != null && permissions.size() > 0;
}
public boolean isUserHasGraderPermissions(String gradebookUid, String userUid) {
List permissions = gradebookPermissionService.getGraderPermissionsForUser(gradebookUid, userUid);
return permissions != null && permissions.size() > 0;
}
public boolean isUserHasGraderPermissions(Long gradebookId, String userUid) {
List permissions = gradebookPermissionService.getGraderPermissionsForUser(gradebookId, userUid);
return permissions != null && permissions.size() > 0;
}
/**
*
* @param sectionUid
* @return whether user is Role.TA in given section
*/
private boolean isUserTAinSection(String sectionUid) {
String userUid = authn.getUserUid();
return getSectionAwareness().isSectionMemberInRole(sectionUid, userUid, Role.TA);
}
private boolean isUserTAinSection(String sectionUid, String userUid) {
return getSectionAwareness().isSectionMemberInRole(sectionUid, userUid, Role.TA);
}
public boolean isUserAbleToEditAssessments(String gradebookUid) {
String userUid = authn.getUserUid();
return getSectionAwareness().isSiteMemberInRole(gradebookUid, userUid, Role.INSTRUCTOR);
}
public boolean isUserAbleToViewOwnGrades(String gradebookUid) {
String userUid = authn.getUserUid();
return getSectionAwareness().isSiteMemberInRole(gradebookUid, userUid, Role.STUDENT);
}
public String getGradeViewFunctionForUserForStudentForItem(String gradebookUid, Long itemId, String studentUid) {
if (itemId == null || studentUid == null || gradebookUid == null) {
throw new IllegalArgumentException("Null parameter(s) in AuthzSectionsServiceImpl.isUserAbleToGradeItemForStudent");
}
if (isUserAbleToGradeAll(gradebookUid)) {
return GradebookService.gradePermission;
}
String userUid = authn.getUserUid();
List viewableSections = getViewableSections(gradebookUid);
List sectionIds = new ArrayList();
if (viewableSections != null && !viewableSections.isEmpty()) {
for (Iterator sectionIter = viewableSections.iterator(); sectionIter.hasNext();) {
CourseSection section = (CourseSection) sectionIter.next();
sectionIds.add(section.getUuid());
}
}
if (isUserHasGraderPermissions(gradebookUid, userUid)) {
// get the map of authorized item (assignment) ids to grade/view function
Map itemIdFunctionMap = gradebookPermissionService.getAvailableItemsForStudent(gradebookUid, userUid, studentUid, viewableSections);
if (itemIdFunctionMap == null || itemIdFunctionMap.isEmpty()) {
return null; // not authorized to grade/view any items for this student
}
String functionValueForItem = (String)itemIdFunctionMap.get(itemId);
String view = GradebookService.viewPermission;
String grade = GradebookService.gradePermission;
if (functionValueForItem != null) {
if (functionValueForItem.equalsIgnoreCase(grade))
return GradebookService.gradePermission;
if (functionValueForItem.equalsIgnoreCase(view))
return GradebookService.viewPermission;
}
return null;
} else {
// use OOTB permissions based upon TA section membership
for (Iterator iter = sectionIds.iterator(); iter.hasNext(); ) {
String sectionUuid = (String) iter.next();
if (isUserTAinSection(sectionUuid) && getSectionAwareness().isSectionMemberInRole(sectionUuid, studentUid, Role.STUDENT)) {
return GradebookService.gradePermission;
}
}
return null;
}
}
private boolean isUserAbleToGradeOrViewItemForStudent(String gradebookUid, Long itemId, String studentUid, String function) throws IllegalArgumentException {
if (itemId == null || studentUid == null || function == null) {
throw new IllegalArgumentException("Null parameter(s) in AuthzSectionsServiceImpl.isUserAbleToGradeItemForStudent");
}
if (isUserAbleToGradeAll(gradebookUid)) {
return true;
}
String userUid = authn.getUserUid();
List viewableSections = getViewableSections(gradebookUid);
List sectionIds = new ArrayList();
if (viewableSections != null && !viewableSections.isEmpty()) {
for (Iterator sectionIter = viewableSections.iterator(); sectionIter.hasNext();) {
CourseSection section = (CourseSection) sectionIter.next();
sectionIds.add(section.getUuid());
}
}
if (isUserHasGraderPermissions(gradebookUid, userUid)) {
// get the map of authorized item (assignment) ids to grade/view function
Map itemIdFunctionMap = gradebookPermissionService.getAvailableItemsForStudent(gradebookUid, userUid, studentUid, viewableSections);
if (itemIdFunctionMap == null || itemIdFunctionMap.isEmpty()) {
return false; // not authorized to grade/view any items for this student
}
String functionValueForItem = (String)itemIdFunctionMap.get(itemId);
String view = GradebookService.viewPermission;
String grade = GradebookService.gradePermission;
if (functionValueForItem != null) {
if (function.equalsIgnoreCase(grade) && functionValueForItem.equalsIgnoreCase(grade))
return true;
if (function.equalsIgnoreCase(view) && (functionValueForItem.equalsIgnoreCase(grade) || functionValueForItem.equalsIgnoreCase(view)))
return true;
}
return false;
} else {
// use OOTB permissions based upon TA section membership
for (Iterator iter = sectionIds.iterator(); iter.hasNext(); ) {
String sectionUuid = (String) iter.next();
if (isUserTAinSection(sectionUuid) && getSectionAwareness().isSectionMemberInRole(sectionUuid, studentUid, Role.STUDENT)) {
return true;
}
}
return false;
}
}
public boolean isUserAbleToGradeItemForStudent(String gradebookUid, Long itemId, String studentUid) throws IllegalArgumentException {
return isUserAbleToGradeOrViewItemForStudent(gradebookUid, itemId, studentUid, GradebookService.gradePermission);
}
public boolean isUserAbleToViewItemForStudent(String gradebookUid, Long itemId, String studentUid) throws IllegalArgumentException {
return isUserAbleToGradeOrViewItemForStudent(gradebookUid, itemId, studentUid, GradebookService.viewPermission);
}
public List getViewableSections(String gradebookUid) {
List viewableSections = new ArrayList();
List allSections = getAllSections(gradebookUid);
if (allSections == null || allSections.isEmpty()) {
return viewableSections;
}
if (isUserAbleToGradeAll(gradebookUid)) {
return allSections;
}
Map sectionIdCourseSectionMap = new HashMap();
for (Iterator sectionIter = allSections.iterator(); sectionIter.hasNext();) {
CourseSection section = (CourseSection) sectionIter.next();
sectionIdCourseSectionMap.put(section.getUuid(), section);
}
String userUid = authn.getUserUid();
if (isUserHasGraderPermissions(gradebookUid, userUid)) {
List viewableSectionIds = gradebookPermissionService.getViewableGroupsForUser(gradebookUid, userUid, new ArrayList(sectionIdCourseSectionMap.keySet()));
if (viewableSectionIds != null && !viewableSectionIds.isEmpty()) {
for (Iterator idIter = viewableSectionIds.iterator(); idIter.hasNext();) {
String sectionUuid = (String) idIter.next();
CourseSection viewableSection = (CourseSection)sectionIdCourseSectionMap.get(sectionUuid);
if (viewableSection != null)
viewableSections.add(viewableSection);
}
}
} else {
// return all sections that the current user is a TA for
for (Iterator<Map.Entry<String, CourseSection>> iter = sectionIdCourseSectionMap.entrySet().iterator(); iter.hasNext(); ) {
Map.Entry<String, CourseSection> entry = iter.next();
String sectionUuid = entry.getKey();
if (isUserTAinSection(sectionUuid)) {
CourseSection viewableSection = (CourseSection)sectionIdCourseSectionMap.get(sectionUuid);
if (viewableSection != null)
viewableSections.add(viewableSection);
}
}
}
Collections.sort(viewableSections);
return viewableSections;
}
public List getAllSections(String gradebookUid) {
SectionAwareness sectionAwareness = getSectionAwareness();
List sections = sectionAwareness.getSections(gradebookUid);
return sections;
}
private List getSectionEnrollmentsTrusted(String sectionUid) {
return getSectionAwareness().getSectionMembersInRole(sectionUid, Role.STUDENT);
}
public Map findMatchingEnrollmentsForItem(String gradebookUid, Long categoryId, int gbCategoryType, String optionalSearchString, String optionalSectionUid) {
String userUid = authn.getUserUid();
return findMatchingEnrollmentsForItemOrCourseGrade(userUid, gradebookUid, categoryId, gbCategoryType, optionalSearchString, optionalSectionUid, false);
}
public Map findMatchingEnrollmentsForItemForUser(String userUid, String gradebookUid, Long categoryId, int gbCategoryType, String optionalSearchString, String optionalSectionUid) {
return findMatchingEnrollmentsForItemOrCourseGrade(userUid, gradebookUid, categoryId, gbCategoryType, optionalSearchString, optionalSectionUid, false);
}
public Map findMatchingEnrollmentsForViewableCourseGrade(String gradebookUid, int gbCategoryType, String optionalSearchString, String optionalSectionUid) {
String userUid = authn.getUserUid();
return findMatchingEnrollmentsForItemOrCourseGrade(userUid, gradebookUid, null, gbCategoryType, optionalSearchString, optionalSectionUid, true);
}
public Map findMatchingEnrollmentsForViewableItems(String gradebookUid, List allGbItems, String optionalSearchString, String optionalSectionUid) {
Map enrollmentMap = new HashMap();
List<EnrollmentRecord> filteredEnrollments = null;
if (optionalSearchString != null)
filteredEnrollments = getSectionAwareness().findSiteMembersInRole(gradebookUid, Role.STUDENT, optionalSearchString);
else
filteredEnrollments = getSectionAwareness().getSiteMembersInRole(gradebookUid, Role.STUDENT);
if (filteredEnrollments == null || filteredEnrollments.isEmpty())
return enrollmentMap;
// get all the students in the filtered section, if appropriate
Map<String, EnrollmentRecord> studentsInSectionMap = new HashMap<String, EnrollmentRecord>();
if (optionalSectionUid != null) {
List<EnrollmentRecord> sectionMembers = getSectionEnrollmentsTrusted(optionalSectionUid);
if (!sectionMembers.isEmpty()) {
for(Iterator<EnrollmentRecord> memberIter = sectionMembers.iterator(); memberIter.hasNext();) {
EnrollmentRecord member = (EnrollmentRecord) memberIter.next();
studentsInSectionMap.put(member.getUser().getUserUid(), member);
}
}
}
Map<String, EnrollmentRecord> studentIdEnrRecMap = new HashMap<String, EnrollmentRecord>();
for (Iterator<EnrollmentRecord> enrIter = filteredEnrollments.iterator(); enrIter.hasNext();) {
EnrollmentRecord enr = (EnrollmentRecord) enrIter.next();
String studentId = enr.getUser().getUserUid();
if (optionalSectionUid != null) {
if (studentsInSectionMap.containsKey(studentId)) {
studentIdEnrRecMap.put(studentId, enr);
}
} else {
studentIdEnrRecMap.put(studentId, enr);
}
}
if (isUserAbleToGradeAll(gradebookUid)) {
List enrollments = new ArrayList(studentIdEnrRecMap.values());
HashMap assignFunctionMap = new HashMap();
if (allGbItems != null && !allGbItems.isEmpty()) {
for (Iterator assignIter = allGbItems.iterator(); assignIter.hasNext();) {
Object assign = assignIter.next();
Long assignId = null;
if (assign instanceof org.sakaiproject.service.gradebook.shared.Assignment) {
assignId = ((org.sakaiproject.service.gradebook.shared.Assignment)assign).getId();
} else if (assign instanceof org.sakaiproject.tool.gradebook.Assignment) {
assignId = ((org.sakaiproject.tool.gradebook.Assignment)assign).getId();
}
if (assignId != null)
assignFunctionMap.put(assignId, GradebookService.gradePermission);
}
}
for (Iterator enrIter = enrollments.iterator(); enrIter.hasNext();) {
EnrollmentRecord enr = (EnrollmentRecord) enrIter.next();
enrollmentMap.put(enr, assignFunctionMap);
}
} else {
String userId = authn.getUserUid();
Map sectionIdCourseSectionMap = new HashMap();
List viewableSections = getViewableSections(gradebookUid);
for (Iterator sectionIter = viewableSections.iterator(); sectionIter.hasNext();) {
CourseSection section = (CourseSection) sectionIter.next();
sectionIdCourseSectionMap.put(section.getUuid(), section);
}
if (isUserHasGraderPermissions(gradebookUid)) {
// user has special grader permissions that override default perms
List myStudentIds = new ArrayList(studentIdEnrRecMap.keySet());
List selSections = new ArrayList();
if (optionalSectionUid == null) {
// pass all sections
selSections = new ArrayList(sectionIdCourseSectionMap.values());
} else {
// only pass the selected section
CourseSection section = (CourseSection) sectionIdCourseSectionMap.get(optionalSectionUid);
if (section != null)
selSections.add(section);
}
// we need to get the viewable students, so first create section id --> student ids map
myStudentIds = getGradebookPermissionService().getViewableStudentsForUser(gradebookUid, userId, myStudentIds, selSections);
Map viewableStudentIdItemsMap = new HashMap();
if (allGbItems == null || allGbItems.isEmpty()) {
if (myStudentIds != null) {
for (Iterator stIter = myStudentIds.iterator(); stIter.hasNext();) {
String stId = (String) stIter.next();
if (stId != null)
viewableStudentIdItemsMap.put(stId, null);
}
}
} else {
viewableStudentIdItemsMap = gradebookPermissionService.getAvailableItemsForStudents(gradebookUid, userId, myStudentIds, selSections);
}
if (!viewableStudentIdItemsMap.isEmpty()) {
for (Iterator<Map.Entry<String, EnrollmentRecord>> enrIter = viewableStudentIdItemsMap.entrySet().iterator(); enrIter.hasNext();) {
Map.Entry<String, EnrollmentRecord> entry = enrIter.next();
String studentId = entry.getKey();
EnrollmentRecord enrRec = (EnrollmentRecord)studentIdEnrRecMap.get(studentId);
if (enrRec != null) {
Map itemIdFunctionMap = (Map)viewableStudentIdItemsMap.get(studentId);
//if (!itemIdFunctionMap.isEmpty()) {
enrollmentMap.put(enrRec, itemIdFunctionMap);
//}
}
}
}
} else {
// use default section-based permissions
// Determine the current user's section memberships
List availableSections = new ArrayList();
if (optionalSectionUid != null && isUserTAinSection(optionalSectionUid)) {
if (sectionIdCourseSectionMap.containsKey(optionalSectionUid))
availableSections.add(optionalSectionUid);
} else {
for (Iterator iter = sectionIdCourseSectionMap.keySet().iterator(); iter.hasNext(); ) {
String sectionUuid = (String)iter.next();
if (isUserTAinSection(sectionUuid)) {
availableSections.add(sectionUuid);
}
}
}
// Determine which enrollees are in these sections
Map uniqueEnrollees = new HashMap();
for (Iterator iter = availableSections.iterator(); iter.hasNext(); ) {
String sectionUuid = (String)iter.next();
List sectionEnrollments = getSectionEnrollmentsTrusted(sectionUuid);
for (Iterator eIter = sectionEnrollments.iterator(); eIter.hasNext(); ) {
EnrollmentRecord enr = (EnrollmentRecord)eIter.next();
uniqueEnrollees.put(enr.getUser().getUserUid(), enr);
}
}
// Filter out based upon the original filtered students
for (Iterator iter = studentIdEnrRecMap.keySet().iterator(); iter.hasNext(); ) {
String enrId = (String)iter.next();
if (uniqueEnrollees.containsKey(enrId)) {
// iterate through the assignments
Map itemFunctionMap = new HashMap();
if (allGbItems != null && !allGbItems.isEmpty()) {
for (Iterator itemIter = allGbItems.iterator(); itemIter.hasNext();) {
Object assign = itemIter.next();
Long assignId = null;
if (assign instanceof org.sakaiproject.service.gradebook.shared.Assignment) {
assignId = ((org.sakaiproject.service.gradebook.shared.Assignment)assign).getId();
} else if (assign instanceof org.sakaiproject.tool.gradebook.Assignment) {
assignId = ((org.sakaiproject.tool.gradebook.Assignment)assign).getId();
}
if (assignId != null) {
itemFunctionMap.put(assignId, GradebookService.gradePermission);
}
}
}
enrollmentMap.put(studentIdEnrRecMap.get(enrId), itemFunctionMap);
}
}
}
}
return enrollmentMap;
}
/**
* @param userUid
* @param gradebookUid
* @param categoryId
* @param optionalSearchString
* @param optionalSectionUid
* @param itemIsCourseGrade
* @return Map of EnrollmentRecord --> View or Grade
*/
private Map findMatchingEnrollmentsForItemOrCourseGrade(String userUid, String gradebookUid, Long categoryId, int gbCategoryType, String optionalSearchString, String optionalSectionUid, boolean itemIsCourseGrade) {
Map enrollmentMap = new HashMap();
List filteredEnrollments = new ArrayList();
if (optionalSearchString != null)
filteredEnrollments = getSectionAwareness().findSiteMembersInRole(gradebookUid, Role.STUDENT, optionalSearchString);
else
filteredEnrollments = getSectionAwareness().getSiteMembersInRole(gradebookUid, Role.STUDENT);
if (filteredEnrollments.isEmpty())
return enrollmentMap;
// get all the students in the filtered section, if appropriate
Map studentsInSectionMap = new HashMap();
if (optionalSectionUid != null) {
List sectionMembers = getSectionAwareness().getSectionMembersInRole(optionalSectionUid, Role.STUDENT);
if (!sectionMembers.isEmpty()) {
for(Iterator memberIter = sectionMembers.iterator(); memberIter.hasNext();) {
EnrollmentRecord member = (EnrollmentRecord) memberIter.next();
studentsInSectionMap.put(member.getUser().getUserUid(), member);
}
}
}
Map studentIdEnrRecMap = new HashMap();
for (Iterator enrIter = filteredEnrollments.iterator(); enrIter.hasNext();) {
EnrollmentRecord enr = (EnrollmentRecord) enrIter.next();
String studentId = enr.getUser().getUserUid();
if (optionalSectionUid != null) {
if (studentsInSectionMap.containsKey(studentId)) {
studentIdEnrRecMap.put(studentId, enr);
}
} else {
studentIdEnrRecMap.put(enr.getUser().getUserUid(), enr);
}
}
if (isUserAbleToGradeAll(gradebookUid, userUid)) {
List enrollments = new ArrayList(studentIdEnrRecMap.values());
for (Iterator enrIter = enrollments.iterator(); enrIter.hasNext();) {
EnrollmentRecord enr = (EnrollmentRecord) enrIter.next();
enrollmentMap.put(enr, GradebookService.gradePermission);
}
} else {
Map sectionIdCourseSectionMap = new HashMap();
List allSections = getAllSections(gradebookUid);
for (Iterator sectionIter = allSections.iterator(); sectionIter.hasNext();) {
CourseSection section = (CourseSection) sectionIter.next();
sectionIdCourseSectionMap.put(section.getUuid(), section);
}
if (isUserHasGraderPermissions(gradebookUid, userUid)) {
// user has special grader permissions that override default perms
List myStudentIds = new ArrayList(studentIdEnrRecMap.keySet());
List selSections = new ArrayList();
if (optionalSectionUid == null) {
// pass all sections
selSections = new ArrayList(sectionIdCourseSectionMap.values());
} else {
// only pass the selected section
CourseSection section = (CourseSection) sectionIdCourseSectionMap.get(optionalSectionUid);
if (section != null)
selSections.add(section);
}
Map viewableEnrollees = new HashMap();
if (itemIsCourseGrade) {
viewableEnrollees = gradebookPermissionService.getCourseGradePermission(gradebookUid, userUid, myStudentIds, selSections);
} else {
viewableEnrollees = gradebookPermissionService.getStudentsForItem(gradebookUid, userUid, myStudentIds, gbCategoryType, categoryId, selSections);
}
if (!viewableEnrollees.isEmpty()) {
for (Iterator<Map.Entry<String, EnrollmentRecord>> enrIter = viewableEnrollees.entrySet().iterator(); enrIter.hasNext();) {
Map.Entry<String, EnrollmentRecord> entry = enrIter.next();
String studentId = entry.getKey();
EnrollmentRecord enrRec = (EnrollmentRecord)studentIdEnrRecMap.get(studentId);
if (enrRec != null) {
enrollmentMap.put(enrRec, (String)viewableEnrollees.get(studentId));
}
}
}
} else {
// use default section-based permissions
enrollmentMap = getEnrollmentMapUsingDefaultPermissions(userUid, studentIdEnrRecMap, sectionIdCourseSectionMap, optionalSectionUid);
}
}
return enrollmentMap;
}
/**
*
* @param userUid
* @param studentIdEnrRecMap
* @param sectionIdCourseSectionMap
* @param optionalSectionUid
* @return Map of EnrollmentRecord to function view/grade using the default permissions (based on TA section membership)
*/
private Map getEnrollmentMapUsingDefaultPermissions(String userUid, Map studentIdEnrRecMap, Map sectionIdCourseSectionMap, String optionalSectionUid) {
// Determine the current user's section memberships
Map enrollmentMap = new HashMap();
List availableSections = new ArrayList();
if (optionalSectionUid != null && isUserTAinSection(optionalSectionUid, userUid)) {
if (sectionIdCourseSectionMap.containsKey(optionalSectionUid))
availableSections.add(optionalSectionUid);
} else {
for (Iterator iter = sectionIdCourseSectionMap.keySet().iterator(); iter.hasNext(); ) {
String sectionUuid = (String)iter.next();
if (isUserTAinSection(sectionUuid, userUid)) {
availableSections.add(sectionUuid);
}
}
}
// Determine which enrollees are in these sections
Map uniqueEnrollees = new HashMap();
for (Iterator iter = availableSections.iterator(); iter.hasNext(); ) {
String sectionUuid = (String)iter.next();
List sectionEnrollments = getSectionEnrollmentsTrusted(sectionUuid);
for (Iterator eIter = sectionEnrollments.iterator(); eIter.hasNext(); ) {
EnrollmentRecord enr = (EnrollmentRecord)eIter.next();
uniqueEnrollees.put(enr.getUser().getUserUid(), enr);
}
}
// Filter out based upon the original filtered students
for (Iterator iter = studentIdEnrRecMap.keySet().iterator(); iter.hasNext(); ) {
String enrId = (String)iter.next();
if (uniqueEnrollees.containsKey(enrId)) {
enrollmentMap.put(studentIdEnrRecMap.get(enrId), GradebookService.gradePermission);
}
}
return enrollmentMap;
}
public List findStudentSectionMemberships(String gradebookUid, String studentUid) {
List sectionMemberships = new ArrayList();
try {
sectionMemberships = (List)org.sakaiproject.site.cover.SiteService.getSite(gradebookUid).getGroupsWithMember(studentUid);
} catch (IdUnusedException e) {
log.error("No site with id = " + gradebookUid);
}
return sectionMemberships;
}
public List getStudentSectionMembershipNames(String gradebookUid, String studentUid) {
List sectionNames = new ArrayList();
List sections = findStudentSectionMemberships(gradebookUid, studentUid);
if (sections != null && !sections.isEmpty()) {
Iterator sectionIter = sections.iterator();
while (sectionIter.hasNext()) {
Group myGroup = (Group) sectionIter.next();
sectionNames.add(myGroup.getTitle());
}
}
return sectionNames;
}
public Authn getAuthn() {
return authn;
}
public void setAuthn(Authn authn) {
this.authn = authn;
}
public SectionAwareness getSectionAwareness() {
return sectionAwareness;
}
public void setSectionAwareness(SectionAwareness sectionAwareness) {
this.sectionAwareness = sectionAwareness;
}
public GradebookPermissionService getGradebookPermissionService() {
return gradebookPermissionService;
}
public void setGradebookPermissionService(GradebookPermissionService gradebookPermissionService) {
this.gradebookPermissionService = gradebookPermissionService;
}
}