Property changes on: . ___________________________________________________________________ Modified: svn:mergeinfo Merged /sam/trunk:r100111 Index: samigo-services/src/java/org/sakaiproject/spring/integrationContext.xml =================================================================== --- samigo-services/src/java/org/sakaiproject/spring/integrationContext.xml (revision 100838) +++ samigo-services/src/java/org/sakaiproject/spring/integrationContext.xml (working copy) @@ -68,6 +68,16 @@ class="org.sakaiproject.tool.assessment.integration.helper.integrated.ServerConfigurationServiceHelperImpl"> + + + + + + + + Index: samigo-services/src/java/org/sakaiproject/tool/assessment/integration/helper/integrated/AssessmentGradeInfoProvider.java =================================================================== --- samigo-services/src/java/org/sakaiproject/tool/assessment/integration/helper/integrated/AssessmentGradeInfoProvider.java (revision 0) +++ samigo-services/src/java/org/sakaiproject/tool/assessment/integration/helper/integrated/AssessmentGradeInfoProvider.java (revision 0) @@ -0,0 +1,233 @@ +/********************************************************************************** + * $URL: $ + * $Id: $ + *********************************************************************************** + * + * Copyright (c) 2011 The Sakai Foundation + * + * 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.osedu.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.assessment.integration.helper.integrated; + +import java.util.Collection; +import java.util.Iterator; +import java.util.List; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.sakaiproject.exception.IdUnusedException; +import org.sakaiproject.service.gradebook.shared.ExternalAssignmentProvider; +import org.sakaiproject.service.gradebook.shared.GradebookExternalAssessmentService; +import org.sakaiproject.site.api.Group; +import org.sakaiproject.site.api.SiteService; +import org.sakaiproject.tool.assessment.data.dao.assessment.AssessmentAccessControl; +import org.sakaiproject.tool.assessment.data.dao.authz.AuthorizationData; +import org.sakaiproject.tool.assessment.data.ifc.assessment.PublishedAssessmentIfc; +import org.sakaiproject.tool.assessment.services.PersistenceService; +import org.sakaiproject.tool.assessment.services.assessment.PublishedAssessmentService; +import org.sakaiproject.user.api.UserDirectoryService; + +/** + * Provides info to the gradebook about which assessments are visible + */ +public class AssessmentGradeInfoProvider implements ExternalAssignmentProvider { + + private Log log = LogFactory.getLog(AssessmentGradeInfoProvider.class); + private GradebookExternalAssessmentService geaService; + private UserDirectoryService userDirectoryService; + private SiteService siteService; + + public void init() { + log.info("INIT and Register Samigo AssessmentGradeInfoProvider"); + geaService.registerExternalAssignmentProvider(this); + } + + public void destroy() { + log.info("DESTROY and unregister Samigo AssessmentGradeInfoProvider"); + geaService.unregisterExternalAssignmentProvider(getAppKey()); + } + + public String getAppKey() { + return "samigo"; + } + + private PublishedAssessmentIfc getPublishedAssessment(String id) { + PublishedAssessmentService pas = new PublishedAssessmentService(); + PublishedAssessmentIfc a; + try { + a = pas.getPublishedAssessment(id); + } catch (Exception e) { + // NumberFormatException is thrown on non-numeric IDs + if (log.isDebugEnabled()) { + log.debug("Assessment lookup failed for ID: " + id + " -- " + e.getMessage()); + } + a = null; + } + return a; + } + + public boolean isAssignmentDefined(String id) { + if (log.isDebugEnabled()) { + log.debug("Samigo provider isAssignmentDefined: " + id); + } + return getPublishedAssessment(id) != null; + } + + public boolean isAssignmentGrouped(String id) { + if (log.isDebugEnabled()) { + log.debug("Samigo provider isAssignmentGrouped: " + id); + } + PublishedAssessmentService pas = new PublishedAssessmentService(); + boolean grouped = false; + try { + grouped = pas.isReleasedToGroups(id); + } catch (Exception e) { + //isReleasedToGroups does not error check + if (log.isDebugEnabled()) { + log.debug("Assignment lookup failed for ID: " + id + " -- " + e.getMessage()); + } + } + return grouped; + } + + //FIXME: Visibility logic is ripped from LoginServlet, modified some for params we have here + //TODO: Refactor so that permissions logic is exposed in a service method somewhere + public boolean isAssignmentVisible(String id, String userId) { + if (log.isDebugEnabled()) { + log.debug("Samigo provider isAssignmentVisible: " + id + ", " + userId); + } + + PublishedAssessmentIfc pub = getPublishedAssessment(id); + if (pub == null) { + return false; + } + + boolean isAuthorized = false; + boolean isAuthenticated = false; + + String releaseTo = pub.getAssessmentAccessControl().getReleaseTo(); + if (releaseTo != null && releaseTo.indexOf("Anonymous Users")> -1){ + isAuthenticated = true; + isAuthorized = true; + } + else { // check membership + isAuthenticated = ( userId != null && !("").equals(userId)); + if (isAuthenticated){ + if (releaseTo.indexOf(AssessmentAccessControl.RELEASE_TO_SELECTED_GROUPS)>-1) { + isAuthorized = checkMembershipForGroupRelease(pub, userId); + } + else { + isAuthorized = checkMembership(pub, userId); + } + } + } + return isAuthorized; + } + + private boolean checkMembership(PublishedAssessmentIfc pub, String userId){ + boolean isMember=false; + // get list of site that this published assessment has been released to + List l = PersistenceService.getInstance().getAuthzQueriesFacade(). + getAuthorizationByFunctionAndQualifier("VIEW_PUBLISHED_ASSESSMENT", + pub.getPublishedAssessmentId().toString()); + for (int i=0;i