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