Index: sections-service/sections-api/src/java/org/sakaiproject/section/api/SectionManager.java =================================================================== --- sections-service/sections-api/src/java/org/sakaiproject/section/api/SectionManager.java (revision 93224) +++ sections-service/sections-api/src/java/org/sakaiproject/section/api/SectionManager.java (working copy) @@ -26,6 +26,7 @@ import java.util.Locale; import java.util.Map; import java.util.Set; +import java.util.Calendar; import org.sakaiproject.section.api.coursemanagement.Course; import org.sakaiproject.section.api.coursemanagement.CourseSection; @@ -529,5 +530,12 @@ public ExternalIntegrationConfig getConfiguration(Object obj); public static final String CONFIGURATION_KEY="section.info.integration"; - + /** + * Determines when the section options are open to students. + * + * @param courseUuid + * @return + */ + public Calendar getOpenDate(String courseUid); + public void setOpenDate(String courseUuid,Calendar openDate); } Index: sections-service/sections-impl/sakai/impl/src/java/org/sakaiproject/component/section/sakai/SectionManagerImpl.java =================================================================== --- sections-service/sections-impl/sakai/impl/src/java/org/sakaiproject/component/section/sakai/SectionManagerImpl.java (revision 93224) +++ sections-service/sections-impl/sakai/impl/src/java/org/sakaiproject/component/section/sakai/SectionManagerImpl.java (working copy) @@ -31,6 +31,7 @@ import java.util.Locale; import java.util.Map; import java.util.Set; +import java.util.Calendar; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; @@ -1732,4 +1733,49 @@ public void setThreadLocalManager(ThreadLocalManager threadLocalManager) { this.threadLocalManager = threadLocalManager; } + public Calendar getOpenDate(String siteId) { + //Reference ref = entityManager.newReference(courseUuid); + //String siteId = ref.getId(); + Site site; + try { + site = siteService().getSite(siteId); + } catch (IdUnusedException e) { + throw new RuntimeException("Can not find site " + siteId, e); + } + ResourceProperties props = site.getProperties(); + String open=props.getProperty(CourseImpl.STUDENT_OPEN_DATE); + Calendar c=null; + if (open!=null && open.length()>0){ + c = Calendar.getInstance(); + c.setTimeInMillis(Long.parseLong(open)); + } + return c; + } + + public void setOpenDate(String courseUuid, Calendar openDate) { + // Disallow if the service is configured to be mandatory + Reference ref = entityManager.newReference(courseUuid); + String siteId = ref.getId(); + Site site; + try { + site = siteService().getSite(siteId); + } catch (IdUnusedException e) { + throw new RuntimeException("Can not find site " + courseUuid, e); + } + ResourceProperties props = site.getProperties(); + // Update the site + if (openDate!=null) { + props.addProperty(CourseImpl.STUDENT_OPEN_DATE, Long.toString(openDate.getTimeInMillis())); + } else { + props.addProperty(CourseImpl.STUDENT_OPEN_DATE, null); + } + try { + siteService().save(site); + if(log.isDebugEnabled()) log.debug("Saved site " + site.getTitle()); + } catch (IdUnusedException ide) { + log.error("Error saving site... could not find site " + site, ide); + } catch (PermissionException pe) { + log.error("Error saving site... permission denied for " + site, pe); + } + } } Index: sections-service/sections-impl/sakai/model/src/java/org/sakaiproject/component/section/sakai/CourseImpl.java =================================================================== --- sections-service/sections-impl/sakai/model/src/java/org/sakaiproject/component/section/sakai/CourseImpl.java (revision 93224) +++ sections-service/sections-impl/sakai/model/src/java/org/sakaiproject/component/section/sakai/CourseImpl.java (working copy) @@ -36,7 +36,8 @@ public static final String EXTERNALLY_MAINTAINED = "sections_externally_maintained"; public static final String STUDENT_REGISTRATION_ALLOWED = "sections_student_registration_allowed"; public static final String STUDENT_SWITCHING_ALLOWED = "sections_student_switching_allowed"; - + public static final String STUDENT_OPEN_DATE = "sections_student_open_date"; + /** * Creates a course from a sakai Site * Index: sections-service/sections-impl/standalone/src/java/org/sakaiproject/component/section/SectionManagerHibernateImpl.java =================================================================== --- sections-service/sections-impl/standalone/src/java/org/sakaiproject/component/section/SectionManagerHibernateImpl.java (revision 93224) +++ sections-service/sections-impl/standalone/src/java/org/sakaiproject/component/section/SectionManagerHibernateImpl.java (working copy) @@ -35,6 +35,7 @@ import java.util.ResourceBundle; import java.util.Set; import java.util.UUID; +import java.util.Calendar; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; @@ -958,4 +959,22 @@ } return hibernateEntities; } + + public Calendar getOpenDate(String courseUid) { + Calendar c = Calendar.getInstance(); + c.add(Calendar.DAY_OF_MONTH,-1); + return c; + } + + public void setOpenDate(final String courseUuid, final Calendar openDate) { + HibernateCallback hc = new HibernateCallback(){ + public Object doInHibernate(Session session) throws HibernateException { + CourseImpl course = (CourseImpl)getCourseFromUuid(courseUuid, session); + //course.setOpenDate(openDate); + session.update(course); + return null; + } + }; + getHibernateTemplate().execute(hc); + } }