%--
Original Version: 2007 LAMS Foundation
Updated for Blackboard 9.1 SP6 (including new bbNG tag library) 2011
Richard Stals (www.stals.com.au)
Edith Cowan University, Western Australia
--%>
<%--
Handle LAMS Lesson Access
Students - access lesson only
Staff - additionally access the Lesson Monitor
--%>
<%@ page import="java.util.*"%>
<%@ page import="java.util.Date"%>
<%@ page import="java.text.SimpleDateFormat"%>
<%@ page import="blackboard.data.*"%>
<%@ page import="blackboard.persist.*"%>
<%@ page import="blackboard.data.course.*"%>
<%@ page import="blackboard.data.user.*"%>
<%@ page import="blackboard.persist.course.*"%>
<%@ page import="blackboard.data.content.*"%>
<%@ page import="blackboard.persist.content.*"%>
<%@ page import="blackboard.persist.navigation.CourseTocDbLoader"%>
<%@ page import="blackboard.persist.gradebook.*"%>
<%@ page import="blackboard.data.gradebook.*"%>
<%@ page import="blackboard.db.*"%>
<%@ page import="blackboard.base.*"%>
<%@ page import="blackboard.platform.*"%>
<%@ page import="blackboard.platform.plugin.*"%>
<%@ page import="blackboard.platform.persistence.*"%>
<%@ page import="blackboard.portal.servlet.*"%>
<%@ page import="blackboard.portal.data.*"%>
<%@ page import="org.lamsfoundation.ld.integration.util.*"%>
<%@ page import="org.lamsfoundation.ld.integration.dto.LearnerProgressDTO"%>
<%@ page errorPage="/error.jsp"%>
<%@ taglib uri="/bbNG" prefix="bbNG"%>
<%
BbPersistenceManager bbPm = PersistenceServiceFactory.getInstance().getDbPersistenceManager();
CourseMembershipDbLoader sessionCourseMembershipLoader = CourseMembershipDbLoader.Default.getInstance();
// Authorise current user for Course Access (automatic redirect)
try{
if (!PlugInUtil.authorizeForCourse(request, response))
return;
} catch(PlugInException e) {
throw new RuntimeException(e);
}
String strLessonId = request.getParameter("lsid").trim();
long lessonId = Long.parseLong(strLessonId);
String courseIdParam = request.getParameter("course_id");
// Get Course ID and User ID
Id course_id = bbPm.generateId(Course.DATA_TYPE, courseIdParam);
Id userId = ctx.getUser().getId();
// Get the membership data to determine the User's Role
CourseMembership courseMembership = null;
CourseMembership.Role courseRole = null;
boolean isActive = false;
try {
courseMembership = sessionCourseMembershipLoader.loadByCourseAndUserId(course_id, userId);
courseRole = courseMembership.getRole();
isActive = courseMembership.getIsAvailable();
} catch (KeyNotFoundException e) {
// There is no membership record.
e.printStackTrace();
} catch (PersistenceException pe) {
// There is no membership record.
pe.printStackTrace();
}
// Is the User an Instructor of Teaching Assistant
boolean instructorstr=false;
if (CourseMembership.Role.INSTRUCTOR.equals(courseRole) || CourseMembership.Role.TEACHING_ASSISTANT.equals(courseRole)
|| CourseMembership.Role.COURSE_BUILDER.equals(courseRole)) {
instructorstr=true;
} else if (!CourseMembership.Role.STUDENT.equals(courseRole)) {
// The user is not an Instructor, Teaching Assistant or Student - Access Denied
response.sendRedirect("notAllowed.jsp");
}
// Are they active in the course? If not let Blackboard handle the redirect
if (!isActive) {
PlugInUtil.sendAccessDeniedRedirect(request, response);
}
//Get lessson's title and description
String title = "";
String description = "";
String strLineitemId = null;
String position = "unknown";
//contentId is available in versions after 1.2.3
String contentIdParam = request.getParameter("content_id");
if (contentIdParam != null) {
Container bbContainer = bbPm.getContainer();
Id contentId = new PkId(bbContainer, CourseDocument.DATA_TYPE, contentIdParam);
ContentDbLoader courseDocumentLoader = (ContentDbLoader) bbPm.getLoader(ContentDbLoader.TYPE);
Content courseDoc = (Content) courseDocumentLoader.loadById(contentId);
title = courseDoc.getTitle();
description = courseDoc.getBody().getFormattedText();
position = String.valueOf(courseDoc.getPosition());
//get lineitemid from the storage
Lineitem lineitem = LineitemUtil.getLineitem(contentIdParam, userId, strLessonId);
} else {
title = (request.getParameter("title") != null) ? request.getParameter("title") : "LAMS Options";
description = request.getParameter("description");
strLineitemId = request.getParameter("lineitemid");
}
//display learning design image
String strIsDisplayDesignImage = request.getParameter("isDisplayDesignImage");
boolean isDisplayDesignImage = "true".equals(strIsDisplayDesignImage) ? true : false;
String learningDesignImageUrl = "";
if (isDisplayDesignImage) {
String username = ctx.getUser().getUserName();
learningDesignImageUrl = LamsSecurityUtil.generateRequestLearningDesignImage(username, false) + "&lsId="
+ lessonId;
}
//check whether user has score for this lesson
Score current_score = null;
if (strLineitemId != null) { // there won't be "lineitemid" parameter in case lesson had been created in LAMS building block version prior to 1.2
//check if it was created in old versions (e.g. 1.2.1) where lineitemId parameter had the following format "PkId(key=_XXXX_1, %20dataType=blackboard.data.gradebook.impl.OutcomeDefinition, %20container=blackboard.persist.DatabaseContainer@xxxx)"
//in which case transform it to the more regular one
if (strLineitemId.contains("key=")) {
int pos1 = strLineitemId.indexOf("key=") + 4;
int pos2 = strLineitemId.indexOf(",", pos1);
if (pos1 != -1 && pos2 != -1 && pos1 <= pos2 && pos2 <= strLineitemId.length()) {
strLineitemId = strLineitemId.substring(pos1, pos2);
}
}
Id lineitemId = bbPm.generateId(Lineitem.LINEITEM_DATA_TYPE, strLineitemId.trim());
ScoreDbLoader scoreLoader = (ScoreDbLoader) bbPm.getLoader(ScoreDbLoader.TYPE);
try {
current_score = scoreLoader.loadByCourseMembershipIdAndLineitemId(courseMembership.getId(),
lineitemId);
} catch (KeyNotFoundException c) {
//no score availalbe
}
}
boolean isScoreAvailable = (current_score != null);
//prepare learnerProgressDto for displaying on jsp
LearnerProgressDTO learnerProgressDto = LamsSecurityUtil.getLearnerProgress(ctx, lessonId);
%>
<%-- Page Header --%>
<%-- Action Control Bar --%>
<%-- Access the Lesson as a Learner --%>
<% if(instructorstr) { %>
<%-- Access the Monitor --%>
<% } %>
<%-- Cancel (Go Back) --%>
<% if((description != "") && (description != null)) { %>
<%=description%>
<% } %>
<% if(isDisplayDesignImage) { %>
<% } %>
<% if(learnerProgressDto.getAttemptedActivities() > 0 || learnerProgressDto.getLessonComplete()) { %>
<% if(!learnerProgressDto.getLessonComplete()) { %>
Lesson is not yet completed.
You have completed: <%=learnerProgressDto.getActivitiesCompleted()%> out of approximately <%=learnerProgressDto.getActivityCount()%> activities
[*]
*
Total activities depend on your learning path.
<% } else { %>
You have completed this lesson.
<% } %>
<% } %>