[Ils-source] r1459 - in trunk: db/mssql src/com/resolutions/ils/data webapp
scribe at crosswire.org
scribe at crosswire.org
Mon May 16 09:08:45 MST 2016
Author: scribe
Date: 2016-05-16 09:08:45 -0700 (Mon, 16 May 2016)
New Revision: 1459
Modified:
trunk/db/mssql/ilsdb.sql
trunk/src/com/resolutions/ils/data/Course.java
trunk/src/com/resolutions/ils/data/CourseAttempt.java
trunk/src/com/resolutions/ils/data/UserProfile.java
trunk/webapp/admin_coursenew.jsp
trunk/webapp/admin_curricnew.jsp
Log:
First cut of auto assign recurrent curriculum training
First cut of support for curriculum in recurrent training report
Modified: trunk/db/mssql/ilsdb.sql
===================================================================
--- trunk/db/mssql/ilsdb.sql 2016-05-09 23:15:45 UTC (rev 1458)
+++ trunk/db/mssql/ilsdb.sql 2016-05-16 16:08:45 UTC (rev 1459)
@@ -42,7 +42,7 @@
CREATE VIEW USERCOURSEASSIGNMENTS WITH SCHEMABINDING AS SELECT DISTINCT T2.COMPANYID, T2.USERPRID, COALESCE (T9.COURSID, T1.COURSID) AS COURSID FROM dbo.USERGROUP AS T2 INNER JOIN dbo.COURSEGROUP AS T3 ON T3.COMPANYID = T2.COMPANYID AND T3.ILSGROUPID = T2.ILSGROUPID INNER JOIN dbo.COURSE AS T1 ON T1.COMPANYID = T3.COMPANYID AND T1.COURSID = T3.COURSID LEFT OUTER JOIN dbo.CURRICULUMCOURSE AS T5 ON T5.COMPANYID = T1.COMPANYID AND T5.CURRICULUMID = T1.COURSID AND T1.COURSISCURRICULUM = 'T' LEFT OUTER JOIN dbo.COURSE AS T9 ON T5.COMPANYID IS NOT NULL AND T9.COMPANYID = T5.COMPANYID AND T9.COURSID = T5.COURSID WHERE (T9.COURSID IS NULL) AND (T1.COURSISCURRICULUM IS NULL) AND (T9.COURSID IS NULL) AND (T1.COURSISQUICKVIEW IS NULL OR T1.COURSISQUICKVIEW <> 'T') OR (T9.COURSID IS NULL) AND (T1.COURSISCURRICULUM IS NULL) AND (T9.COURSID IS NOT NULL) AND (T9.COURSISQUICKVIEW IS NULL OR T9.COURSISQUICKVIEW <> 'T') OR (T9.COURSID IS NULL) AND (T1.COURSISCURRICULUM <> 'T') AND (T1.COURSISQUICKVIEW IS NULL OR T1.COURSISQUICKVIEW <> 'T') OR (T9.COURSID IS NOT NULL) AND (T1.COURSISCURRICULUM <> 'T') AND (T9.COURSISQUICKVIEW IS NULL OR T9.COURSISQUICKVIEW <> 'T') OR (T9.COURSID IS NULL) AND (T1.COURSISQUICKVIEW IS NULL OR T1.COURSISQUICKVIEW <> 'T') AND (T1.COURSID <> T9.COURSID) OR (T9.COURSID IS NOT NULL) AND (T9.COURSISQUICKVIEW IS NULL OR T9.COURSISQUICKVIEW <> 'T') AND (T1.COURSID <> T9.COURSID);
-CREATE VIEW USERCOURSEASSIGNMENTSWITHGROUPS WITH SCHEMABINDING AS SELECT DISTINCT T2.COMPANYID, T2.USERPRID, COALESCE (T9.COURSID, T1.COURSID) AS COURSID, G.ILSGROUPID, G.GROUPTYPEID FROM dbo.USERGROUP AS T2 INNER JOIN dbo.COURSEGROUP AS T3 ON T3.COMPANYID = T2.COMPANYID AND T3.ILSGROUPID = T2.ILSGROUPID INNER JOIN dbo.COURSE AS T1 ON T1.COMPANYID = T3.COMPANYID AND T1.COURSID = T3.COURSID LEFT OUTER JOIN dbo.CURRICULUMCOURSE AS T5 ON T5.COMPANYID = T1.COMPANYID AND T5.CURRICULUMID = T1.COURSID AND T1.COURSISCURRICULUM = 'T' LEFT OUTER JOIN dbo.COURSE AS T9 ON T5.COMPANYID IS NOT NULL AND T9.COMPANYID = T5.COMPANYID AND T9.COURSID = T5.COURSID LEFT OUTER JOIN dbo.ILSGROUP G ON G.ILSGROUPID=T2.ILSGROUPID WHERE (T9.COURSID IS NULL) AND (T1.COURSISCURRICULUM IS NULL) AND (T9.COURSID IS NULL) AND (T1.COURSISQUICKVIEW IS NULL OR T1.COURSISQUICKVIEW <> 'T') OR (T9.COURSID IS NULL) AND (T1.COURSISCURRICULUM IS NULL) AND (T9.COURSID IS NOT NULL) AND (T9.COURSISQUICKVIEW IS NULL OR T9.COURSISQUICKVIEW <> 'T') OR (T9.COURSID IS NULL) AND (T1.COURSISCURRICULUM <> 'T') AND (T1.COURSISQUICKVIEW IS NULL OR T1.COURSISQUICKVIEW <> 'T') OR (T9.COURSID IS NOT NULL) AND (T1.COURSISCURRICULUM <> 'T') AND (T9.COURSISQUICKVIEW IS NULL OR T9.COURSISQUICKVIEW <> 'T') OR (T9.COURSID IS NULL) AND (T1.COURSISQUICKVIEW IS NULL OR T1.COURSISQUICKVIEW <> 'T') AND (T1.COURSID <> T9.COURSID) OR (T9.COURSID IS NOT NULL) AND (T9.COURSISQUICKVIEW IS NULL OR T9.COURSISQUICKVIEW <> 'T') AND (T1.COURSID <> T9.COURSID);
+CREATE VIEW USERCOURSEASSIGNMENTSWITHGROUPS WITH SCHEMABINDING AS SELECT DISTINCT T2.COMPANYID, T2.USERPRID, COALESCE (T9.COURSID, T1.COURSID) AS COURSID, G.ILSGROUPID, G.GROUPTYPEID FROM dbo.USERGROUP AS T2 INNER JOIN dbo.COURSEGROUP AS T3 ON T3.COMPANYID = T2.COMPANYID AND T3.ILSGROUPID = T2.ILSGROUPID INNER JOIN dbo.COURSE AS T1 ON T1.COMPANYID = T3.COMPANYID AND T1.COURSID = T3.COURSID LEFT OUTER JOIN dbo.CURRICULUMCOURSE AS T5 ON T5.COMPANYID = T1.COMPANYID AND T5.CURRICULUMID = T1.COURSID AND T1.COURSISCURRICULUM = 'T' LEFT OUTER JOIN dbo.COURSE AS T9 ON T5.COMPANYID IS NOT NULL AND T9.COMPANYID = T5.COMPANYID AND T9.COURSID = T5.COURSID LEFT OUTER JOIN dbo.ILSGROUP G ON G.ILSGROUPID=T2.ILSGROUPID WHERE (T9.COURSID IS NULL) AND (T1.COURSISCURRICULUM IS NULL) AND (T9.COURSID IS NULL) AND (T1.COURSISQUICKVIEW IS NULL OR T1.COURSISQUICKVIEW <> 'T') OR (T9.COURSID IS NULL) AND (T1.COURSISCURRICULUM IS NULL) AND (T9.COURSID IS NOT NULL) AND (T9.COURSISQUICKVIEW IS NULL OR T9.COURSISQUICKVIEW <> 'T') OR (T9.COURSID IS NULL) AND (T1.COURSISCURRICULUM <> 'T') AND (T1.COURSISQUICKVIEW IS NULL OR T1.COURSISQUICKVIEW <> 'T') OR (T9.COURSID IS NOT NULL) AND (T9.COURSISQUICKVIEW IS NULL OR T9.COURSISQUICKVIEW <> 'T') OR (T9.COURSID IS NULL) AND (T1.COURSISQUICKVIEW IS NULL OR T1.COURSISQUICKVIEW <> 'T') AND (T1.COURSID <> T9.COURSID) OR (T9.COURSID IS NOT NULL) AND (T9.COURSISQUICKVIEW IS NULL OR T9.COURSISQUICKVIEW <> 'T') AND (T1.COURSID <> T9.COURSID);
CREATE VIEW COURSEATTEMPTSTATUS WITH SCHEMABINDING AS SELECT CA.COMPANYID, CA.USERPRID, CA.COURSID, CA.COURSATTID, CA.CACOMPLETEDATE, CA.CAEXPIREDON, COALESCE(CA.CASTATUSID, 0) AS CASTATUSID, CASE COALESCE(CA.CASTATUSID, 0) WHEN 3 THEN 1 WHEN 0 THEN 1 ELSE 0 END AS CRS_OPEN, CASE COALESCE(CA.CASTATUSID, 0) WHEN 1 THEN 1 ELSE 0 END AS CRS_COMPLETED, CASE COALESCE(CA.CASTATUSID, 0) WHEN 2 THEN 1 ELSE 0 END AS CRS_FAILED FROM DBO.COURSEATTEMPT CA;
Modified: trunk/src/com/resolutions/ils/data/Course.java
===================================================================
--- trunk/src/com/resolutions/ils/data/Course.java 2016-05-09 23:15:45 UTC (rev 1458)
+++ trunk/src/com/resolutions/ils/data/Course.java 2016-05-16 16:08:45 UTC (rev 1459)
@@ -91,10 +91,14 @@
static public Course getCourse(ILSSession session, int courseID) {
+ return getCourse(session.getCompanyID(), courseID);
+ }
+
+ static public Course getCourse(int companyID, int courseID) {
Course query = new Course();
String sql = LOOKUP + " AND COURSID={COURSID}";
query.setCourseID(courseID);
- query.setCompanyID(session.getCompanyID());
+ query.setCompanyID(companyID);
Vector rows = query.getDataSet(sql);
return (rows.size() > 0) ? (Course) rows.get(0) : null;
}
Modified: trunk/src/com/resolutions/ils/data/CourseAttempt.java
===================================================================
--- trunk/src/com/resolutions/ils/data/CourseAttempt.java 2016-05-09 23:15:45 UTC (rev 1458)
+++ trunk/src/com/resolutions/ils/data/CourseAttempt.java 2016-05-16 16:08:45 UTC (rev 1459)
@@ -77,7 +77,7 @@
static String LOOKUP = "SELECT * FROM COURSEATTEMPT WHERE COMPANYID={COMPANYID}";
static String DELETE = "DELETE FROM COURSEATTEMPT WHERE COURSATTID={COURSATTID} AND COMPANYID={COMPANYID}";
- static String LOOKUPCOURSECOMPLETE = "SELECT CA.COURSATTID, UP.USERPRID, UP.USERPRNUM, UP.USERPREMAIL, CC.COURSNAME FROM COURSEATTEMPT CA" +
+ static String LOOKUPCOURSECOMPLETE = "SELECT CA.COMPANYID, CA.COURSATTID, UP.USERPRID, UP.USERPRNUM, UP.USERPREMAIL, CC.COURSNAME, CC.COURSISCURRICULUM FROM COURSEATTEMPT CA" +
" join USERPROFILE UP on UP.USERPRID = CA.USERPRID" +
" join COURSE CC on CC.COURSID=CA.COURSID";
@@ -119,9 +119,12 @@
return getUserCourseAttempts(session, userID, courseID, true);
}
- static public Vector getUserCourseAttempts(ILSSession session, int userID, int courseID, boolean includeExpireds) {
+ static public Vector getUserCourseAttempts(ILSSession session, int userID, int courseID, boolean includeExpireds) {
+ return getUserCourseAttempts(session.getCompanyID(), userID, courseID, includeExpireds);
+ }
+ static public Vector getUserCourseAttempts(int companyID, int userID, int courseID, boolean includeExpireds) {
CourseAttempt query = new CourseAttempt();
- query.setCompanyID(session.getCompanyID());
+ query.setCompanyID(companyID);
query.setCourseAttemptUserProfileID(userID);
query.setCourseAttemptCourseID(courseID);
return query.getDataSet(includeExpireds?LOOKUPALLUSERCOURSEATTEMPTS:LOOKUPUSERCOURSEATTEMPTS);
@@ -162,22 +165,34 @@
query.setCompanyID(companyID);
Vector results = null;
int count = 0;
+ Course course = null;
if (courseID > 0) {
+ course = Course.getCourse(companyID, courseID);
query.setCourseAttemptCourseID(courseID);
- if (sendEmail) results = query.getDataSet(LOOKUPCOURSECOMPLETEEXPCOURSE + " AND CC.COURSISACTIVE='T'");
+ results = query.getDataSet(LOOKUPCOURSECOMPLETEEXPCOURSE + " AND CC.COURSISACTIVE='T'");
count = query.executeSQL(REVOKEEXPCOURSE);
}
else {
- if (sendEmail) results = query.getDataSet(LOOKUPCOURSECOMPLETEEXP + " AND CC.COURSISACTIVE='T'");
+ results = query.getDataSet(LOOKUPCOURSECOMPLETEEXP + " AND CC.COURSISACTIVE='T'");
count = query.executeSQL(REVOKEEXP);
}
+ // if we're a course we can optimize; if we're a curriculum we have to do this the long way
+ if ((course == null || course.isCourseCurriculum()) && results != null) {
+ for (Object o: results) {
+ CourseAttempt ca = (CourseAttempt)o;
+ if ("T".equals(ca.getValue("COURSISCURRICULUM"))) {
+ // don't send emails and be sure to expire all children (null, true)
+ ca.assignRetake("Recurrent Training Assigned", null, true);
+ }
+ }
+ }
System.out.println("**** revokeAllExpired: emailSet.size(): " + (results != null ? results.size() : 0));
System.out.println("**** revokeAllExpired: revoke.size(): " + count);
// Send Emails
- if (results != null) {
+ if (sendEmail && results != null) {
String subjectTemplate = sysConfig.getProperty("EmailTemplate5Subject");
String bodyTemplate = sysConfig.getProperty("EmailTemplate5Body");
String from = sysConfig.getProperty("SendMailFrom");
@@ -988,34 +1003,40 @@
assignRetake(reason, ilsSession, httpSession, false);
}
public void assignRetake(String reason, ILSSession ilsSession, HttpSession httpSession, boolean allCurriculumCourses) {
+ assignRetake(reason, httpSession, allCurriculumCourses);
+ }
+ public void assignRetake(String reason, HttpSession httpSession, boolean allCurriculumCourses) {
CourseAttempt ca = (CourseAttempt)this.clone();
setCourseAttemptExpired(reason);
save(ca);
- Course course = Course.getCourse(ilsSession, ca.getCourseAttemptCourseID());
- Properties sysConfig = Utils.getSysConfig(httpSession.getServletContext(), getCompanyID());
- boolean emailNotice = "on".equals(sysConfig.getProperty("EmailEnableAssignedRetakes", "off"));
- if (emailNotice) {
- try {
- UserProfile up = UserProfile.getUserProfile(ilsSession, ca.getCourseAttemptUserProfileID());
- String subject = "Assigned Retake Notice";
- String body = "You have been reassigned to take " + course.getCourseName() + " training. ";
- body += "Please Log on to " + sysConfig.getProperty("SiteURL", "your training site")+" to complete your training.\n\n";
- body += "Login Account: " + up.getUserProfileNum() + "\n";
- body += "Course Name : " + course.getCourseName() + "\n\n";
- body += sysConfig.getProperty("SendMailSig", "");
- SMTPMail.sendEmail(httpSession, sysConfig.getProperty("SendMailFrom", ilsSession.getCurrentCompany().getCompanyAdminContactEMail()), up.getUserProfileEMail(), subject, body, true);
+ Course course = Course.getCourse(getCompanyID(), ca.getCourseAttemptCourseID());
+ if (httpSession != null) {
+ Properties sysConfig = Utils.getSysConfig(httpSession.getServletContext(), getCompanyID());
+ boolean emailNotice = "on".equals(sysConfig.getProperty("EmailEnableAssignedRetakes", "off"));
+ if (emailNotice) {
+ try {
+ Company company = Company.getCompany(getCompanyID());
+ UserProfile up = UserProfile.getUserProfile(getCompanyID(), ca.getCourseAttemptUserProfileID());
+ String subject = "Assigned Retake Notice";
+ String body = "You have been reassigned to take " + course.getCourseName() + " training. ";
+ body += "Please Log on to " + sysConfig.getProperty("SiteURL", "your training site")+" to complete your training.\n\n";
+ body += "Login Account: " + up.getUserProfileNum() + "\n";
+ body += "Course Name : " + course.getCourseName() + "\n\n";
+ body += sysConfig.getProperty("SendMailSig", "");
+ SMTPMail.sendEmail(httpSession, sysConfig.getProperty("SendMailFrom", company.getCompanyAdminContactEMail()), up.getUserProfileEMail(), subject, body, true);
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ }
}
- catch (Exception e) {
- e.printStackTrace();
- }
}
if (allCurriculumCourses && course.isCourseCurriculum()) {
for (Course curCourse : course.getCurriculumCourses()) {
- Vector<CourseAttempt> cas = CourseAttempt.getUserCourseAttempts(ilsSession, getCourseAttemptUserProfileID(), curCourse.getCourseID(), false);
+ Vector<CourseAttempt> cas = CourseAttempt.getUserCourseAttempts(getCompanyID(), getCourseAttemptUserProfileID(), curCourse.getCourseID(), false);
if (cas != null) {
for (CourseAttempt ca2 : cas) {
if (ca2.getCourseAttemptStatusID() == STATUS_PASSED && !ca2.isCourseAttemptExpired()) {
- ca2.assignRetake(reason, ilsSession, httpSession, allCurriculumCourses);
+ ca2.assignRetake(reason, httpSession, allCurriculumCourses);
}
}
}
Modified: trunk/src/com/resolutions/ils/data/UserProfile.java
===================================================================
--- trunk/src/com/resolutions/ils/data/UserProfile.java 2016-05-09 23:15:45 UTC (rev 1458)
+++ trunk/src/com/resolutions/ils/data/UserProfile.java 2016-05-16 16:08:45 UTC (rev 1459)
@@ -249,18 +249,19 @@
}
- static public UserProfile getUserProfile(ILSSession session,
- int userProfileID) {
+ static public UserProfile getUserProfile(ILSSession session, int userProfileID) {
+ return getUserProfile(session.getCompanyID(), userProfileID);
+ }
+ static public UserProfile getUserProfile(int companyID, int userProfileID) {
UserProfile retVal = new UserProfile();
String sql = LOOKUP + " AND USERPRID={USERPRID}";
retVal.setUserProfileID(userProfileID);
- retVal.setCompanyID(session.getCompanyID());
+ retVal.setCompanyID(companyID);
Vector<UserProfile> rows = retVal.getDataSet(sql);
return (rows.size() > 0) ? rows.get(0) : null;
}
- static public UserProfile getUserProfile(ILSSession session,
- String userProfileNum) {
+ static public UserProfile getUserProfile(ILSSession session, String userProfileNum) {
UserProfile retVal = new UserProfile();
String sql = LOOKUP + " AND USERPRNUM={USERPRNUM}";
retVal.setUserProfileNum(userProfileNum);
@@ -269,8 +270,7 @@
return (rows.size() > 0) ? rows.get(0) : null;
}
- static public UserProfile getUserProfileByUserData(ILSSession session,
- String userData) {
+ static public UserProfile getUserProfileByUserData(ILSSession session, String userData) {
UserProfile retVal = new UserProfile();
String sql = LOOKUP + " AND USERPROFILE.USERDATA={USERDATA}";
retVal.setValue("USERDATA", userData);
Modified: trunk/webapp/admin_coursenew.jsp
===================================================================
--- trunk/webapp/admin_coursenew.jsp 2016-05-09 23:15:45 UTC (rev 1458)
+++ trunk/webapp/admin_coursenew.jsp 2016-05-16 16:08:45 UTC (rev 1459)
@@ -143,12 +143,12 @@
else if ("pass".equals(fi.getFieldName())) {
if (fi.getString() != null) try { current.setCoursePass(Integer.parseInt(fi.getString())); } catch (Exception e) { logger.error(e); }
}
+ else if ("certgen".equals(fi.getFieldName())) {
+ if (fi.getString() != null) try { current.setCourseCertificateGenerator(fi.getString()); } catch (Exception e) { logger.error(e); }
+ }
else if ("passexp".equals(fi.getFieldName())) {
if (fi.getString() != null) try { current.setCoursePassExpireDays(Integer.parseInt(fi.getString())); } catch (Exception e) { logger.error(e); }
}
- else if ("certgen".equals(fi.getFieldName())) {
- if (fi.getString() != null) try { current.setCourseCertificateGenerator(fi.getString()); } catch (Exception e) { logger.error(e); }
- }
else if ("passreassign".equals(fi.getFieldName())) {
if (fi.getString() != null) try { current.setCourseReassignBeforeDays(Integer.parseInt(fi.getString())); } catch (Exception e) { logger.error(e); }
}
Modified: trunk/webapp/admin_curricnew.jsp
===================================================================
--- trunk/webapp/admin_curricnew.jsp 2016-05-09 23:15:45 UTC (rev 1458)
+++ trunk/webapp/admin_curricnew.jsp 2016-05-16 16:08:45 UTC (rev 1459)
@@ -55,6 +55,17 @@
current.setCourseTypeID(2);
current.setCourseURL("");
}
+ if ("revokeExpCourses".equals(action)) {
+ if (current.getCourseID() > 0) {
+ boolean emailNotice = "on".equals(Utils.getSysConfig(session).getProperty("EmailEnableAssignedRetakes", "off"));
+ int count = CourseAttempt.revokeAllExpired(ilsSession.getCompanyID(), current.getCourseID(), session.getServletContext(), emailNotice);
+ statusMsg = "Assigned " + Integer.toString(count) + " Recurrent Trainings for Course " + current.getCourseNum() + ".";
+ eventsLogger.info(statusMsg + " by user: " + ilsSession.getCurrentUserProfile().getUserProfileNum());
+ }
+ else {
+ validError = "You must be editing a saved curriculum with assigned users to perform this action.";
+ }
+ }
if ("Save".equals(action)) {
Course orig = (Course)current.clone();
String val = request.getParameter("num");
@@ -65,6 +76,10 @@
if (val != null) current.setCourseDesc(val);
val = request.getParameter("certgen");
if (val != null) current.setCourseCertificateGenerator(val);
+ val = request.getParameter("passexp");
+ if (val != null) try { current.setCoursePassExpireDays(Integer.parseInt(val)); } catch (Exception e) { logger.error(e); }
+ val = request.getParameter("passreassign");
+ if (val != null) try { current.setCourseReassignBeforeDays(Integer.parseInt(val)); } catch (Exception e) { logger.error(e); }
try {
val = request.getParameter("statusID");
if (val != null) current.setCourseActive(Integer.parseInt(val)>0);
@@ -133,6 +148,12 @@
<link href="lms_style.css" rel="stylesheet" type="text/css">
<script type="text/javascript" language="JavaScript">
<!--
+function confirmRevoke() {
+ if (confirm("Running this routine will assign this curriculum as recurrent training to all applicable users. Are you sure?")) {
+ document.getElementById("sysMaintAction").value = 'revokeExpCourses';
+ document.sysmaint.submit();
+ }
+}
function rD(val) {
document.coursesave.activeDate.value = val;
}
@@ -197,13 +218,25 @@
<td><input type="checkbox" <%=(current.isCourseCurriculumCertificate())?"checked=\"checked\"":""%> name="curricCert" value="true" /></td>
</tr>
<tr>
- <td class="formHeadings">Course Certificate Generator </td>
+ <td class="formHeadings">Curriculum Certificate Generator </td>
<td><input name="certgen" style="width:100%" type="text" placeholder="default or certificate.jsp or curriculum_certificate.jsp" value="<%=current.getCourseCertificateGenerator()%>" size="40"/></td>
</tr>
<tr>
<td class="formHeadings">Enable Curriculum Part Retake :</td>
<td><input type="checkbox" <%=(current.isCourseAllowCurriculumPartRetake())?"checked=\"checked\"":""%> name="curricPartRetake" value="true" /></td>
</tr>
+ <tr>
+ <td class="formHeadings">Curriculum Certificate Expires After </td>
+ <td><input name="passexp" type="text" value="<%=current.getCoursePassExpireDays()%>" size="6"/> Days</td>
+ </tr>
+ <tr>
+ <td class="formHeadings">Reassign As Recurrent Training </td>
+ <td><input name="passreassign" type="text" value="<%=current.getCourseReassignBeforeDays()%>" size="6"/> Days Before Expiration</td>
+ </tr>
+ <tr>
+ <td class="formHeadings">Reassign Now As Recurrent Training To All Applicable Users</td>
+ <td><a href="#" onClick="confirmRevoke(); return false;"><img border="0" src="images/run_btn.gif" width="51" height="24" alt="Perform Action"/></a></td>
+ </tr>
<tr>
<td> </td>
<td> </td>
@@ -385,6 +418,10 @@
}
%>
</div>
+ <form style="display:none;" name="sysmaint" method="post" action="admin_curricnew.jsp">
+ <input type="hidden" id="sysMaintAction" name="action" value=""/>
+ <input type="hidden" name="courseid" value="<%= current.getCourseID() %>"/>
+ </form>
<%@ include file="footer.jsp" %>
</div>
More information about the Ils-source
mailing list