Code Monkey home page Code Monkey logo

attendance's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

attendance's Issues

Attendance needs dependency updates for Sakai 22 (Logging mostly)

Attendance isn't starting up on Sakai 22, I believe because of SAK-29960. Needs some updates and the pom version updated.

I also don't believe we need to keep the version here at 20180412.

The initial error here on nightly is

06-Sep-2021 13:15:54.609 ERROR [main] o.s.c.i.SpringCompMgr.init Error creating bean with name 'org.sakaiproject.attendance.logic.SakaiProxy' defined in file [/usr/src/app/deploy/components/attendance-pack/WEB-INF/components.xml]: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: org/apache/log4j/Logger
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.sakaiproject.attendance.logic.SakaiProxy' defined in file [/usr/src/app/deploy/components/attendance-pack/WEB-INF/components.xml]: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: org/apache/log4j/Logger

Attendance: Student view of comment window - change "Cancel" to "Close"

Original issue reported here:

https://jira.sakaiproject.org/browse/SAK-41577

Test plan:

In the Attendance tool, in a site with at least one student, create an attendance event.
Click in to the attendance event and mark the student as "Absent."
Click on the empty comment bubble and enter a comment. Save.

Log in as the student.
Navigate to the Attendance tool.
Click on the comment bubble for the attendance item. Read the comment.

What happens: To close the comment window, student clicks "Cancel."

What I suggest: Would probably make more sense for student to click "X" or "Close" when completing a passive action.

Create 2.9.x and 10.x branch

This tool should be compatible with any version of Sakai with only slight modifications. Since there is interest we need to create a separate branch for 2.9.x and one for 10.x that will make it easier for interested institutions to evaluate the tool.

Wicket error when accessing attendance tool in master experimental

Just added the attendance tool to the trunk nightly experimental instance (21.x) and am getting the following stack when accessing the tool:

`26-Nov-2019 12:15:43.486 WARN [http-nio-20213-exec-2] RequestCycleExtra.handleException Handling the following exception
org.apache.wicket.WicketRuntimeException: The component(s) below failed to render. Possible reasons could be that: 1) you have added a component in code but forgot to reference it in the markup (thus the component will never be rendered), 2) if your components were added in a parent container then make sure the markup for the child container includes them in wicket:extend.

  1. [Component id = header-event-edit]

  2. [Component id = header-print-links]

    at org.apache.wicket.Page.checkRendering(Page.java:673)
    at org.apache.wicket.Page.onAfterRender(Page.java:829)
    at org.apache.wicket.markup.html.WebPage.onAfterRender(WebPage.java:224)
    at org.apache.wicket.Component.afterRender(Component.java:918)
    at org.apache.wicket.Component.render(Component.java:2306)
    at org.apache.wicket.Page.renderPage(Page.java:1024)
    at org.apache.wicket.request.handler.render.WebPageRenderer.renderPage(WebPageRenderer.java:139)
    at org.apache.wicket.request.handler.render.WebPageRenderer.respond(WebPageRenderer.java:284)
    at org.apache.wicket.core.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:175)
    at org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:890)
    at org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64)
    at org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:261)
    at org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:218)
    at org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:289)
    at org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:259)
    at org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:201)
    at org.apache.wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:137)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:426)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:712)
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:459)
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:352)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312)
    at org.sakaiproject.tool.impl.ActiveToolComponent$MyActiveTool.forward(ActiveToolComponent.java:508)
    at org.sakaiproject.portal.charon.SkinnableCharonPortal.forwardTool(SkinnableCharonPortal.java:1490)
    at org.sakaiproject.portal.charon.handlers.SiteHandler.doToolBuffer(SiteHandler.java:1241)
    at org.sakaiproject.portal.charon.handlers.SiteHandler.bufferContent(SiteHandler.java:1075)
    at org.sakaiproject.portal.charon.handlers.SiteHandler.doSite(SiteHandler.java:498)
    at org.sakaiproject.portal.charon.handlers.SiteHandler.doGet(SiteHandler.java:274)
    at org.sakaiproject.portal.charon.handlers.SiteHandler.doGet(SiteHandler.java:162)
    at org.sakaiproject.portal.charon.SkinnableCharonPortal.doGet(SkinnableCharonPortal.java:856)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:475)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:200)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:679)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:836)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1747)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)
    26-Nov-2019 12:15:43.488 WARN [http-nio-20213-exec-2] RequestCycleExtra.handleException ********************************
    org.apache.wicket.WicketRuntimeException: The component(s) below failed to render. Possible reasons could be that: 1) you have added a component in code but forgot to reference it in the markup (thus the component will never be rendered), 2) if your components were added in a parent container then make sure the markup for the child container includes them in wicket:extend.

  3. [Component id = header-event-edit]

  4. [Component id = header-print-links]

    at org.apache.wicket.Page.checkRendering(Page.java:673)
    at org.apache.wicket.Page.onAfterRender(Page.java:829)
    at org.apache.wicket.markup.html.WebPage.onAfterRender(WebPage.java:224)
    at org.apache.wicket.Component.afterRender(Component.java:918)
    at org.apache.wicket.Component.render(Component.java:2306)
    at org.apache.wicket.Page.renderPage(Page.java:1024)
    at org.apache.wicket.request.handler.render.WebPageRenderer.renderPage(WebPageRenderer.java:139)
    at org.apache.wicket.request.handler.render.WebPageRenderer.respond(WebPageRenderer.java:284)
    at org.apache.wicket.core.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:175)
    at org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:890)
    at org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64)
    at org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:261)
    at org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:218)
    at org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:289)
    at org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:259)
    at org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:201)
    at org.apache.wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:137)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:426)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:712)
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:459)
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:352)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312)
    at org.sakaiproject.tool.impl.ActiveToolComponent$MyActiveTool.forward(ActiveToolComponent.java:508)
    at org.sakaiproject.portal.charon.SkinnableCharonPortal.forwardTool(SkinnableCharonPortal.java:1490)
    at org.sakaiproject.portal.charon.handlers.SiteHandler.doToolBuffer(SiteHandler.java:1241)
    at org.sakaiproject.portal.charon.handlers.SiteHandler.bufferContent(SiteHandler.java:1075)
    at org.sakaiproject.portal.charon.handlers.SiteHandler.doSite(SiteHandler.java:498)
    at org.sakaiproject.portal.charon.handlers.SiteHandler.doGet(SiteHandler.java:274)
    at org.sakaiproject.portal.charon.handlers.SiteHandler.doGet(SiteHandler.java:162)
    at org.sakaiproject.portal.charon.SkinnableCharonPortal.doGet(SkinnableCharonPortal.java:856)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:475)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:200)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:679)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:836)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1747)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)
    26-Nov-2019 12:15:43.491 ERROR [http-nio-20213-exec-2] org.apache.wicket.DefaultExceptionMapper.mapUnexpectedExceptions Unexpected error occurred
    org.apache.wicket.WicketRuntimeException: The component(s) below failed to render. Possible reasons could be that: 1) you have added a component in code but forgot to reference it in the markup (thus the component will never be rendered), 2) if your components were added in a parent container then make sure the markup for the child container includes them in wicket:extend.

  5. [Component id = header-event-edit]

  6. [Component id = header-print-links]

    at org.apache.wicket.Page.checkRendering(Page.java:673)
    at org.apache.wicket.Page.onAfterRender(Page.java:829)
    at org.apache.wicket.markup.html.WebPage.onAfterRender(WebPage.java:224)
    at org.apache.wicket.Component.afterRender(Component.java:918)
    at org.apache.wicket.Component.render(Component.java:2306)
    at org.apache.wicket.Page.renderPage(Page.java:1024)
    at org.apache.wicket.request.handler.render.WebPageRenderer.renderPage(WebPageRenderer.java:139)
    at org.apache.wicket.request.handler.render.WebPageRenderer.respond(WebPageRenderer.java:284)
    at org.apache.wicket.core.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:175)
    at org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:890)
    at org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64)
    at org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:261)
    at org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:218)
    at org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:289)
    at org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:259)
    at org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:201)
    at org.apache.wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:137)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:426)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:712)
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:459)
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:352)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312)
    at org.sakaiproject.tool.impl.ActiveToolComponent$MyActiveTool.forward(ActiveToolComponent.java:508)
    at org.sakaiproject.portal.charon.SkinnableCharonPortal.forwardTool(SkinnableCharonPortal.java:1490)
    at org.sakaiproject.portal.charon.handlers.SiteHandler.doToolBuffer(SiteHandler.java:1241)
    at org.sakaiproject.portal.charon.handlers.SiteHandler.bufferContent(SiteHandler.java:1075)
    at org.sakaiproject.portal.charon.handlers.SiteHandler.doSite(SiteHandler.java:498)
    at org.sakaiproject.portal.charon.handlers.SiteHandler.doGet(SiteHandler.java:274)
    at org.sakaiproject.portal.charon.handlers.SiteHandler.doGet(SiteHandler.java:162)
    at org.sakaiproject.portal.charon.SkinnableCharonPortal.doGet(SkinnableCharonPortal.java:856)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:475)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:200)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:679)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:836)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1747)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)`

19.x NPE

Caused by: java.lang.NullPointerException
at org.sakaiproject.attendance.tool.pages.Overview$2.populateItem(Overview.java:152)
at org.apache.wicket.markup.repeater.RefreshingView$1.newItem(RefreshingView.java:114)
at org.apache.wicket.markup.repeater.DefaultItemReuseStrategy$1.next(DefaultItemReuseStrategy.java:75)
at org.apache.wicket.markup.repeater.DefaultItemReuseStrategy$1.next(DefaultItemReuseStrategy.java:56)
at org.apache.wicket.markup.repeater.RefreshingView.addItems(RefreshingView.java:189)
at org.apache.wicket.markup.repeater.RefreshingView.onPopulate(RefreshingView.java:97)
at org.apache.wicket.markup.repeater.AbstractRepeater.onBeforeRender(AbstractRepeater.java:123)
at org.apache.wicket.markup.repeater.AbstractPageableView.onBeforeRender(AbstractPageableView.java:115)
at org.apache.wicket.Component.internalBeforeRender(Component.java:949)
at org.apache.wicket.Component.beforeRender(Component.java:1017)
at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1684)
... 65 more

Fixup Settings Page

On the settings page, different attendance objects are referenced which can causes confusion when saving.

export / import fails

Export / Import fails with different symptoms depending on the version.

In 12.x

  • export seems ok but if you did not select any export options, when you try to import there will be an error
  • Caused by: java.lang.IndexOutOfBoundsException: Index: 4, Size: 4

In 19.x @mpellicer saw that

  • export throws a stack trace
  • 28-Aug-2019 14:09:49.372 ERROR [http-nio-8080-exec-6919] org.apache.wicket.DefaultExceptionMapper.mapUnexpectedExceptions Unexpected error occurred org.apache.wicket.WicketRuntimeException: Method onLinkClicked of interface org.apache.wicket.markup.html.link.ILinkListener targeted at [DownloadLink [Component id = submit-link]] on component [DownloadLink [Component id = submit-link]] threw an exception at org.apache.wicket.RequestListenerInterface.internalInvoke(RequestListenerInterface.java:268) at org.apache.wicket.RequestListenerInterface.invoke(RequestListenerInterface.java:216)
    .
    .
    .
    Caused by: java.lang.NullPointerException at org.sakaiproject.attendance.tool.pages.ExportPage.buildExcelFile(ExportPage.java:174)
  • and that error is related to commit

In master

  • export seemed ok, but import failed with the warning message
  • Please check your spreadsheet for misaligned data in the Attendance item columns. No changes were found in the import file.
    No active students are in this site or group. You can add students to the site or a group via the Site Info tool
  • even though the spreadsheet contained changes and active students

Unique index on ATTENDANCE_RECORD_T

In rare circumstances, it's possible to end up with duplicates in ATTENDANCE_RECORD_T

ALTER TABLE ATTENDANCE_RECORD_T
MODIFY COLUMN USER_ID varchar(99),
MODIFY COLUMN STATUS varchar(20),
ADD UNIQUE INDEX user-record(USER_ID, A_EVENT_ID);

Tool is not responsive

The attendance tool is not responsive in Sakai 11. It does not look good on smaller resolutions.

Feature Request - Add Profile info to Attendance page

Ex. Faculty has a student with a hard to pronounce name, and they would like to take a note that stays regardless of when the attendance is taken. The current notes option is day specific, and wouldn't help for this scenario
One of the following would probably resolve this:

  • Providing faculty with the ability to create notes that are available every time attendance is taken, instead of day specific
  • Add the pronunciation/pronouns profile options in attendance for easy access

Sakai 19 and 20 persistence

After the JPA changes of Rubrics, many tools required some changes in the persistence layer.
This tool is affected by the JPA changes too, this is what happens when you try to remove an event in Sakai 19 or Sakai 20:

Caused by: java.lang.IllegalArgumentException: Removing a detached instance org.sakaiproject.attendance.model.AttendanceEvent#3 at org.hibernate.jpa.event.internal.core.JpaDeleteEventListener.performDetachedEntityDeletionCheck(JpaDeleteEventListener.java:69) at org.hibernate.event.internal.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:106) at org.hibernate.event.internal.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:73) at org.hibernate.internal.SessionImpl.fireDelete(SessionImpl.java:956) at org.hibernate.internal.SessionImpl.delete(SessionImpl.java:896) at org.springframework.orm.hibernate4.HibernateTemplate$24.doInHibernate(HibernateTemplate.java:794) at org.springframework.orm.hibernate4.HibernateTemplate.doExecute(HibernateTemplate.java:341) at org.springframework.orm.hibernate4.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:309) at org.springframework.orm.hibernate4.HibernateTemplate.delete(HibernateTemplate.java:787) at org.springframework.orm.hibernate4.HibernateTemplate.delete(HibernateTemplate.java:782) at org.sakaiproject.attendance.dao.impl.AttendanceDaoImpl.deleteAttendanceEvent(AttendanceDaoImpl.java:177) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213) at com.sun.proxy.$Proxy99.deleteAttendanceEvent(Unknown Source) at org.sakaiproject.attendance.logic.AttendanceLogicImpl.deleteAttendanceEvent(AttendanceLogicImpl.java:139) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.wicket.proxy.LazyInitProxyFactory$JdkHandler.invoke(LazyInitProxyFactory.java:484) at com.sun.proxy.$Proxy347.deleteAttendanceEvent(Unknown Source) at org.sakaiproject.attendance.tool.panels.EventInputPanel$1.onClick(EventInputPanel.java:93) at org.apache.wicket.ajax.markup.html.AjaxLink$1.onEvent(AjaxLink.java:86) at org.apache.wicket.ajax.AjaxEventBehavior.respond(AjaxEventBehavior.java:145) at org.apache.wicket.ajax.AbstractDefaultAjaxBehavior.onRequest(AbstractDefaultAjaxBehavior.java:649) ... 60 more

image

Add events for tracking purposes

Reviewing the sakai_events table, I do not see any events for the Attendance tool. I believe it would be beneficial if there could be event tracking for adding/deleting an attendance item as well as inputting a users status for the item.

Profile Images are not shown in the Student Overview tab

In the Student Overview tab, there are photos that should be pulled from the profile tool. I am not seeing the photos displayed. I am getting the following message in my browser console:

jquery.tablesorter.min.js:4 Uncaught TypeError: Cannot read property 'addClass' of undefined at setHeadersCss (jquery.tablesorter.min.js:4) at HTMLTableElement.<anonymous> (jquery.tablesorter.min.js:4) at HTMLTableElement.dispatch (jquery-1.11.3.min-ver-895323ED2F7258AF4FAE2C738C8AEA49.js:4) at HTMLTableElement.r.handle (jquery-1.11.3.min-ver-895323ED2F7258AF4FAE2C738C8AEA49.js:4) at Object.trigger (jquery-1.11.3.min-ver-895323ED2F7258AF4FAE2C738C8AEA49.js:4) at HTMLTableElement.<anonymous> (jquery-1.11.3.min-ver-895323ED2F7258AF4FAE2C738C8AEA49.js:4) at Function.each (jquery-1.11.3.min-ver-895323ED2F7258AF4FAE2C738C8AEA49.js:2) at m.fn.init.each (jquery-1.11.3.min-ver-895323ED2F7258AF4FAE2C738C8AEA49.js:2) at m.fn.init.trigger (jquery-1.11.3.min-ver-895323ED2F7258AF4FAE2C738C8AEA49.js:4) at HTMLTableElement.<anonymous> (jquery.tablesorter.min.js:4)

Testing this on a 19.x instance. Not seeing this on any of the nightlies to test with.

No suitable method found for addExternalAssessment

Hi All,
I use Sakai 12.5 in production server, and I want to install attendace tool.
I forked attendace tool, and I changed version from 12-SNAPSHOT to 12.5 in pom.xml
And I run below code in attendace directory, but I'm gettin getting error[1]

mvn clean install sakai:deploy -Dmaven.tomcat.home=/opt/tomcat -Dsakai.home=/opt/tomcat/sakai -Djava.net.preferIPv4Stack=true -Dmaven.test.skip=true

Apache Maven 3.3.9
java version "1.8.0_171"

Any help?

[1]

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.5.1:compile (default-compile) on project attendance-impl: Compilation failure: Compilation failure:
[ERROR] /root/gtu/attendance/impl/src/java/org/sakaiproject/attendance/impl/AttendanceGradebookProviderImpl.java:[77,34] no suitable method found for addExternalAssessment(java.lang.String,java.lang.String,,java.lang.String,java.lang.Double,,java.lang.String,,boolean,)
[ERROR] method org.sakaiproject.service.gradebook.shared.GradebookExternalAssessmentService.addExternalAssessment(java.lang.String,java.lang.String,java.lang.String,java.lang.String,double,java.util.Date,java.lang.String) is not applicable
[ERROR] (actual and formal argument lists differ in length)
[ERROR] method org.sakaiproject.service.gradebook.shared.GradebookExternalAssessmentService.addExternalAssessment(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.Double,java.util.Date,java.lang.String,java.lang.Boolean) is not applicable
[ERROR] (actual and formal argument lists differ in length)
[ERROR] method org.sakaiproject.service.gradebook.shared.GradebookExternalAssessmentService.addExternalAssessment(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.Double,java.util.Date,java.lang.String,java.lang.Boolean,java.lang.Long) is not applicable
[ERROR] (actual and formal argument lists differ in length)
[ERROR] /root/gtu/attendance/impl/src/java/org/sakaiproject/attendance/impl/AttendanceGradebookProviderImpl.java:[123,38] no suitable method found for updateExternalAssessment(java.lang.String,java.lang.String,,,java.lang.String,java.lang.Double,,boolean)
[ERROR] method org.sakaiproject.service.gradebook.shared.GradebookExternalAssessmentService.updateExternalAssessment(java.lang.String,java.lang.String,java.lang.String,java.lang.String,double,java.util.Date) is not applicable
[ERROR] (actual and formal argument lists differ in length)
[ERROR] method org.sakaiproject.service.gradebook.shared.GradebookExternalAssessmentService.updateExternalAssessment(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.Double,java.util.Date,java.lang.Boolean) is not applicable
[ERROR] (actual and formal argument lists differ in length)
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR] mvn -rf :attendance-impl
[root@sakai attendance]# vim pom.xml

PDF export not internationalized

The PDF exported in the Sign-In or Attendance sheets is not internationalized.

The texts are hardcoded in PDFEventExporterImpl.java. Other Attendance classes are using Wicket's ResourceModel class to translate the strings, but I have tried to use it with no success.

Stack trace in development mode on close-link

When running with -Dwicket.configuration=development this stack trace is displayed when clicking on the items.

Last cause: The component(s) below failed to render. Possible reasons could be that: 1) you have added a component in code but forgot to reference it in the markup (thus the component will never be rendered), 2) if your components were added in a parent container then make sure the markup for the child container includes them in <wicket:extend>.
1. [Link [Component id = close-link]]
2. [Component id = close-link-text]

Remove generic-dao dependency

Looks like the only need for gerneric-dao happens to be around transactions:

<bean id="org.sakaiproject.attendance.dao.AttendanceDao" class="org.sakaiproject.genericdao.springutil.CurrentClassLoaderTxProxyFactoryBean">
    <property name="transactionManager" ref="org.sakaiproject.springframework.orm.hibernate.GlobalTransactionManager" />
    <property name="target" ref="org.sakaiproject.attendance.dao.AttendanceDaoTarget" />
    <property name="transactionAttributes">
    <props>
        <prop key="*">PROPAGATION_REQUIRED</prop>
    </props>
    </property>
</bean>

Might make sense to just use springs TransactionProxyFactoryBean instead, then you won't need to use a deprecated lib.

Simpledateformat in PDF export is using week year instead of year

The simple date format used for the PDF export feature is using 'YYYY' (Week Year) instead of 'yyyy' (Year). This is not a major issue but could cause the dates to look wrong for items with a date during the last week in Dec. / first week in Jan.

Reported by:
Austin, Sammy Lee, and Kenwrick Chan from The University of Hawai‘i.

20170215 release has no conversion for attendance_item_stats_t

It seems like attendance_item_stats_t was added for performance reasons. But there is no conversion routine to aggregate the old data.

Is Dayton running the latest code in production? Do you have SQL commands to aggregate the old data into attendance_item_stats_t?

All non student roles display Instructor view

The Instructor view is given to all roles not listed as 'Student'. If you have a custom role, guest role, ect, they will be presented with the Instructor view. This should be changed to use a permission to check for instructor level permissions like 'site.upd' or have a set of permissions that can be checked or unchecked from the realms tool

if(this.role != null && this.role.equals("Student")){

[Feature request] Ability to add additional statuses

Original / Description: https://jira.sakaiproject.org/browse/SAK-43949

Only five default status values can be used. Instructors may want to create additional statuses based on their course needs.

Ex: - Student is present but not engaged. Instructor wants to split/ have two "Present" values (Present & engaged, Present & not participating). Each would have their own grading breakdown on Grading > Rules section.

Attached example UI of another open-source LMS (that shall go unnamed) as reference of how they have built it. Underneath current status values is a blank row where instructor may enter an acronym letter and description title. Selecting Add button to right adds value and then a new blank row is created underneath it in case more values are desired.

For UI/UX purposes, may be worth having some limitations. These are some I just came up with and don't have any data to back up why they would be good restrictions; ie just my thoughts/opinion.

Restrict to 10 values total. There will be some instructors that want more but anymore could create a chaotic UI
Character limit to titles. Long title names could cause spacing issues in UI. Would relate to SAK-43948.

Class of 700 students results in 50k queries

Loading attendance in one large site (700 students) with dozens of attendance items results in approximately 50k SQL queries.

screen shot 2019-01-22 at 1 59 28 pm

113     private void createStatusRadio(final Form<AttendanceRecord> rF) {
114         AttendanceStatusProvider attendanceStatusProvider = new AttendanceStatusProvider(attendanceLogic.getCurrentAttendanceSite(), AttendanceStatusProvider.ACTIVE);
115         DataView<AttendanceStatus> attendanceStatusRadios = new DataView<AttendanceStatus>("status-radios", attendanceStatusProvider) {
116             @Override
117             protected void populateItem(Item<AttendanceStatus> item) {
118                 final Status itemStatus = item.getModelObject().getStatus();

Add tab needs validation checks and error messages

Unlike the EventInputPanel, the EventInputPage (or Add tab) does not perform validation checking for the form and feedback errors (or success) to users.

For instance, clicking the Create button on a blank form does not report that an event item name is needed.

This can be fixed by adding an AttendanceFeedbackPanel to the form.

NPE when listing users for attendance item

Seen this in production, only happens in specific items.

02-Jun-2021 13:26:29.810 WARN [http-nio-8080-exec-3659] org.sakaiproject.portal.charon.handlers.SiteHandler.doSite Redirecting tool inline url: https://XXXXXXX/portal/site/YYYYYYY/tool/5c1cf9d3-f5f3-4bca-8f41-8e4163890775 org.apache.wicket.WicketRuntimeException: Method onRequest of interface org.apache.wicket.behavior.IBehaviorListener targeted at org.apache.wicket.extensions.ajax.markup.html.AjaxLazyLoadPanel$1@5ae8e5e6 on component [AjaxLazyLoadPanel [Component id = dataPanelSlow]] threw an exception at org.apache.wicket.RequestListenerInterface.internalInvoke(RequestListenerInterface.java:268) at org.apache.wicket.RequestListenerInterface.invoke(RequestListenerInterface.java:241) at org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler.invokeListener(ListenerInterfaceRequestHandler.java:250) at org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler.respond(ListenerInterfaceRequestHandler.java:236) at org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:890) at org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64) at org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:261) at org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:218) at org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:289) at org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:259) at org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:201) at org.apache.wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:137) at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:426) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:712) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:459) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:352) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312) at org.sakaiproject.tool.impl.ActiveToolComponent$MyActiveTool.forward(ActiveToolComponent.java:508) at org.sakaiproject.portal.charon.SkinnableCharonPortal.forwardTool(SkinnableCharonPortal.java:1496) at org.sakaiproject.portal.charon.handlers.SiteHandler.doSite(SiteHandler.java:478) at org.sakaiproject.portal.charon.handlers.SiteHandler.doGet(SiteHandler.java:275) at org.sakaiproject.portal.charon.handlers.SiteHandler.doGet(SiteHandler.java:163) at org.sakaiproject.portal.charon.SkinnableCharonPortal.doGet(SkinnableCharonPortal.java:853) at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:475) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:747) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1589) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.GeneratedMethodAccessor2422.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.wicket.RequestListenerInterface.internalInvoke(RequestListenerInterface.java:258) ... 56 more Caused by: java.lang.NullPointerException 02-Jun-2021 13:26:30.753 ERROR [http-nio-8080-exec-3652] org.apache.wicket.DefaultExceptionMapper.mapUnexpectedExceptions Unexpected error occurred org.apache.wicket.WicketRuntimeException: Method onRequest of interface org.apache.wicket.behavior.IBehaviorListener targeted at org.apache.wicket.extensions.ajax.markup.html.AjaxLazyLoadPanel$1@5ae8e5e6 on component [AjaxLazyLoadPanel [Component id = dataPanelSlow]] threw an exception at org.apache.wicket.RequestListenerInterface.internalInvoke(RequestListenerInterface.java:268) at org.apache.wicket.RequestListenerInterface.invoke(RequestListenerInterface.java:241) at org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler.invokeListener(ListenerInterfaceRequestHandler.java:250) at org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler.respond(ListenerInterfaceRequestHandler.java:236) at org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:890) at org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64) at org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:261) at org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:218) at org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:289) at org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:259) at org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:201) at org.apache.wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:137) at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:426) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:712) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:459) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:352) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312) at org.sakaiproject.tool.impl.ActiveToolComponent$MyActiveTool.forward(ActiveToolComponent.java:508) at org.sakaiproject.portal.charon.SkinnableCharonPortal.forwardTool(SkinnableCharonPortal.java:1496) at org.sakaiproject.portal.charon.handlers.SiteHandler.doSite(SiteHandler.java:478) at org.sakaiproject.portal.charon.handlers.SiteHandler.doGet(SiteHandler.java:275) at org.sakaiproject.portal.charon.handlers.SiteHandler.doGet(SiteHandler.java:163) at org.sakaiproject.portal.charon.SkinnableCharonPortal.doGet(SkinnableCharonPortal.java:853) at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:475) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:747) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1589) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.GeneratedMethodAccessor2422.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.wicket.RequestListenerInterface.internalInvoke(RequestListenerInterface.java:258) ... 56 more Caused by: java.lang.NullPointerException

image

AttendanceStatus incorrect EqualsAndHashcode for entity with its own unique id

Given an AttendanceStatus like:
{id = 0, isActive = 1, status = ‘LATE’, sortOrder = 0, attendanceSite = 1234}

the Equals and Hashcode would be different for an entity with the same id but a different status like
{id = 0, isActive = 0, status = ‘LATE’, sortOrder = 0, attendanceSite = 1234 }

Given the entity has its own unique id it probably makes sense that the EqualsAndHashcode be representative of that
@EqualsAndHashCode(of = "id")

Unexpected RuntimeException about missing components development mode

Seeing this error in Sakai 22

It looks like it's only an error when running in -Dwicket.configuration=development.

These components were removed in #56.

Unexpected RuntimeException

Last cause: The component(s) below failed to render. Possible reasons could be that: 1) you have added a component in code but forgot to reference it in the markup (thus the component will never be rendered), 2) if your components were added in a parent container then make sure the markup for the child container includes them in wicket:extend.1. [Component id = header-event-edit]2. [Component id = header-print-links]

Violating ECLv2

This project used the sakaiproject/sakai-wicket-maven-archetype as it's basis. This project is licensed under the ECLv2, as such attribution must "retain, in the Source form of any Derivative Works that You distribute, all [...] attribution notices from the Source".

Attribution for @steveswinsburg, was mistakenly removed; as such, this must be rectified.

Export NPE

Caused by: java.lang.NullPointerException
at org.sakaiproject.attendance.tool.pages.ExportPage.buildExcelFile(ExportPage.java:210)
at org.sakaiproject.attendance.tool.pages.ExportPage.access$000(ExportPage.java:58)
at org.sakaiproject.attendance.tool.pages.ExportPage$3.load(ExportPage.java:105)
at org.sakaiproject.attendance.tool.pages.ExportPage$3.load(ExportPage.java:101)
at org.apache.wicket.model.LoadableDetachableModel.getObject(LoadableDetachableModel.java:124)
at org.apache.wicket.Component.getDefaultModelObject(Component.java:1612)
... 64 more

Feature request - error if no title entered

Currently, there is an asterisk next to the attendance item name input box. If an instructor does not enter a title and presses create, nothing happens on the page. Can an alert be added that a title is required if an instructor does not enter a title and tries to move forward to create.

Feature Request - Bulk Creation of Attendance Items (e.g. Week 01, Week 02, etc.)

Purpose

Professors want to make their lives as easy as possible. Allow an option to bulk create attendance items, similar to the "Bulk Add" feature in Syllabus.

Design Concept

Add a tab called "Bulk Add" (or similar). The Syllabus has "Bulk Add" so chose that label for consistency. The community can weigh in on the label as needed.

Selecting the "Bulk Add" tab, the instructor/maintain user will be presented with an option to enter a label via a text field and enter the number of items via a text field. There should be data validation to be sure that the text label field is not blank and the number field only contains numbers.

At the bottom would be buttons for "Add" (which would create all of the items right away without dates specified), "Specify Dates" (which would present a page with all of the numbered labels with corresponding date fields and pickers to specify date/times for each event and an Add or Cancel at bottom to complete the process), or "Cancel" to cancel the process.

I hope that this makes sense. Thank you for considering this feature request!

Improve grading in the Sakai Attendance tool

First, thank you for contributing this great tool. It has helped me as an instructor and it helps the professors at my institution tally attendance.

Second, I would very much like to see a simpler way to automate grading. The current method is too difficult to use. I have to enter an unnecessary number of rules to otherwise accomplish a very simple process. If I simply want to award 1 point for every time someone is present or absent, I have to create a FROM/TO combination for each day for all possible combinations, which is utterly unacceptable. (I'm sorry, but it is!)

Please add an additional method for automated grading and call it "Simple Grading Method" (or equivalent). With this selection, just provide a simple table. One column has the category label (e.g. Present, Absent, etc.), and the second column is Points to Award for Each Instance (e.g. 1 point, .5 point, 0 points).

The grading would then award points for each attendance item (class 1, class 2, etc.) and each status (Present, Absent, etc.). That's it.

EXAMPLE 1:
A class will meet once a week for 16 weeks, no holidays. There are 16 total class periods and the instructor states that the total points possible is 16.

GRADING RULES:
Option: "Students start with zero points and earn points as they attend class."

Simple Grading Method
Category | Points to Award for Each Attendance Item
Present | 1
Absent | 0
Excused | 1
Late | .5
Left Early | .5

GRADING RULES APPLIED

Sally Student
Class 1 Present (1)
Class 2 Present (1)
Class 3 Late (.5)
Class 4 Present (1)
Class 5 Excused (1)
Class 6 Excused (1)
Class 7 Present (1)
Class 8 Present (1)
Class 9 Present (1)
Class 10 Left Early (.5)
Class 11 Absent (0)
Class 12 Absent (0)
Class 13 Present (1)
Class 14 Present (1)
Class 15 Present (1)
Class 16 Present (1)

Total = 1 + 1 + .5 + 1 + 1 + 1 + 1 + 1 + 1 + .5 + 0 + 0 + 1 + 1 + 1 + 1 = 13 out of 16 = 81.25%


EXAMPLE 2:
A class will meet once a week for 16 weeks, no holidays. There are 16 total class periods and the instructor states that the total points possible is 16.

GRADING RULES:
Option: "Students start with the total number of points and lose points as they miss class."

Simple Grading Method
Category | Points to Deduct for Each Attendance Item
Present | 0
Absent | 1
Excused | 0
Late | .25
Left Early | .25

Since the above table may be misinterpreted by some professors, I recommend to the right of each box, interpreting the entry. So, for an entry of 0 or a box left blank add a parenthetical "(no deduction)" and for an entry or 1 add a parenthetical of "(-1 or 1 point(s) deducted)" and for an entry of -.25 add a parenthetical of "(+.25 or .25 awarded)" so that someone could go, Uh oh, and change -.25 to .25 for a new parenthetical of "(-.25 or .25 deducted)". I hope that this makes sense. The same logic could be applied in Example 1 easily enough, but I felt that professors might need more guidance on Example 2.

GRADING RULES APPLIED

Sally Student
Class 1 Present (0 deduction)
Class 2 Present (0)
Class 3 Late (-.25 or .25 deducted)
Class 4 Present (0)
Class 5 Excused (0)
Class 6 Excused (0)
Class 7 Present (0)
Class 8 Present (0)
Class 9 Present (0)
Class 10 Left Early (-.25 or .25 deducted)
Class 11 Absent (-1 or 1 deducted)
Class 12 Absent (-1 or 1 deducted)
Class 13 Present (0)
Class 14 Present (0)
Class 15 Present (0)
Class 16 Present (0)

Total = 0 + 0 - .25 + 0 + 0 + 0 + 0 + 0 + 0 - .25 - 1 - 1 + 0 + 0 + 0 + 0 = -2.5 + 16 = 13.5 out of 16 = 84.375% = 84.38%


I hope that this makes sense. I know that having an option like this would make my life a lot easier and I feel like it would benefit the majority of professors that choose to grade attendance.

NOTE: I have known some graduate professors that choose to tally attendance but not "award" attendance. In that scenario, they would choose to set the total points possible to 0 points and use Example 2 to deduct points for behavior that detracts from the learning experience, such as absence, arriving late, or leaving early. In that situation, the graduate professor would allow a negative score (e.g. attendance grade of -2.5 so the student's overall grade would be reduced by 2.5 points). This style of grading may be more fringe but I wanted to share in case it helps with interpreting options or sending grades to the gradebook.

Thank you for considering this feature request.

Attendance tool in local version of Sakai 19.4 is not displaying student profile pictures

Using the Attendance tool's Attendance by Student, I see there is a space for Student Photos, but I do not see any student photos listed there.

I do know that the test students in this site have Profile pictures.

Is the Attendance tool attempting to draw these pictures from an Official photo? We don't have that option in our instance of Sakai.

Should the tool offer the same option that Roster does - to display the Official Photo or Profile Photo? Or should there be a property that could be added to tell the tool which source to draw the image from?

url /direct/profile/%s/image/official ....to image/profile?

image

Remove pack directory

Remove pack directory that's not needed. Move components.xml to impl and update impl deploy target and packaging to sakai-component and components.

Update for Sakai 23 and recent api changes.

When trying to run this in Sakai 23, the tool crashes the instance because of changes from SAK-40437. (And possibly others?)

We should update the master to be 23-SNAPSHot and get it to run

Deleting a Grading Rule fails because of detatched instance

Similiar to #37:

Caused by: java.lang.IllegalArgumentException: Removing a detached instance org.sakaiproject.attendance.model.GradingRule#1 at org.hibernate.jpa.event.internal.core.JpaDeleteEventListener.performDetachedEntityDeletionCheck(JpaDeleteEventListener.java:69) at org.hibernate.event.internal.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:106) at org.hibernate.event.internal.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:73) at org.hibernate.internal.SessionImpl.fireDelete(SessionImpl.java:956) at org.hibernate.internal.SessionImpl.delete(SessionImpl.java:896) at org.springframework.orm.hibernate4.HibernateTemplate$24.doInHibernate(HibernateTemplate.java:794) at org.springframework.orm.hibernate4.HibernateTemplate.doExecute(HibernateTemplate.java:341) at org.springframework.orm.hibernate4.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:309) at org.springframework.orm.hibernate4.HibernateTemplate.delete(HibernateTemplate.java:787) at org.springframework.orm.hibernate4.HibernateTemplate.delete(HibernateTemplate.java:782) at org.sakaiproject.attendance.dao.impl.AttendanceDaoImpl.deleteGradingRule(AttendanceDaoImpl.java:507) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213) at com.sun.proxy.$Proxy96.deleteGradingRule(Unknown Source) at org.sakaiproject.attendance.logic.AttendanceLogicImpl.deleteGradingRule(AttendanceLogicImpl.java:530) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.wicket.proxy.LazyInitProxyFactory$JdkHandler.invoke(LazyInitProxyFactory.java:484) at com.sun.proxy.$Proxy473.deleteGradingRule(Unknown Source) at org.sakaiproject.attendance.tool.panels.GradingRulesListPanel$2$1.onSubmit(GradingRulesListPanel.java:79) at org.apache.wicket.ajax.markup.html.form.AjaxButton$1.onSubmit(AjaxButton.java:108) at org.apache.wicket.ajax.form.AjaxFormSubmitBehavior$AjaxFormSubmitter.onSubmit(AjaxFormSubmitBehavior.java:215) at org.apache.wicket.markup.html.form.Form.delegateSubmit(Form.java:1305) at org.apache.wicket.markup.html.form.Form.process(Form.java:966) at org.apache.wicket.markup.html.form.Form.onFormSubmitted(Form.java:788) at org.apache.wicket.ajax.form.AjaxFormSubmitBehavior.onEvent(AjaxFormSubmitBehavior.java:171) at org.apache.wicket.ajax.AjaxEventBehavior.respond(AjaxEventBehavior.java:145) at org.apache.wicket.ajax.AbstractDefaultAjaxBehavior.onRequest(AbstractDefaultAjaxBehavior.java:649) ... 60 more

Dark theme issues

Certain colors look to be hardcoded and thus look out of place or fail color contrast test when switching to dark theme. Also reported in core jira project (https://sakaiproject.atlassian.net/browse/SAK-46981)

  1. On Attendance tab:
    AttendanceTab

  2. After selecting an item to take attendance:
    TakeAttendance

  3. After selecting an item to take attendance & selecting the Edit attendance item icon:
    TakeAttendanceEditItem

  4. After selecting an item to take attendance & selecting the Print icon:
    TakeAttendancePrint

  5. After selecting an item to take attendance & scroll over students (odd rows):
    TakeAttendanceRowScrollover

  6. After selecting an item to take attendance & selecting a student's name
    AttendanceSelectedStudent

  7. On Attendance By Student tab:
    AttendanceByStudent

  8. On Grading tab:
    AttendanceGrading

  9. On Settings tab:
    AttendanceSettings

Datetime problem

In Attendance tool, when i enter attendance item for after 29 October it saving item's hour an hour more (e.g 10.11.2017 10:30 becomes 10.11.2017 11:30), when i want to update, it brings the hour normally but date appear as one day back (e.g 10.11.2017 10:30 becomes 09.11.2017 10:30). DST is no longer used in Turkey and now using utc +3 as standard. Therefore i updated JVM with tzupdater (with https://www.iana.org/time-zones/repository/tzcode-latest.tar.gz) and when i checked, everything seems properly in followed output. Is there any solution proposal that has encountered the same problem in the past or these times?

sun.util.calendar.ZoneInfo
[
id="Europe/Istanbul",
offset=10800000,
dstSavings=0,
useDaylight=false,
transitions=130,
lastRule=null
]

Auto created groups not displayed within an attendance item

In a site, create a manual group and a couple automatically created groups
In the Attendance tool, add a new item
Select that item
In the view drop down, select the manually added group
Participants display properly
In the view drop down, select one of the automatically created groups
No users display

Internal error displayed if grading an new rule in a site

Replicated on a 19x and 20x instance...

  1. Navigate to attendance tool
  2. (create and take attendance if not already existing) select Grading tab
  3. Edit grade settings to have 5 points total, Allow students to see their grade, Send grades to the gradebook
  4. Define rules to automatically grade attendance
  5. Choose either option and define a grade rule. "Start with total number of points...", Status = Absent, From = 1, Through = 10, Points = 1
  6. Add rule
  7. Grade all

Internal Error displays in UI. The following is printed in the logs:
WARN http-apr-8082-exec-506 org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver - Resolved [org.springframework.data.rest.webmvc.ResourceNotFoundException: Resource not found!]
org.apache.wicket.WicketRuntimeException: Method onRequest of interface org.apache.wicket.behavior.IBehaviorListener targeted at org.apache.wicket.ajax.markup.html.form.AjaxButton$1@74a59e98 on component [AjaxButton [Component id = regrade-submit1]] threw an exception
at org.apache.wicket.RequestListenerInterface.internalInvoke(RequestListenerInterface.java:268)
at org.apache.wicket.RequestListenerInterface.invoke(RequestListenerInterface.java:241)
at org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler.invokeListener(ListenerInterfaceRequestHandler.java:250)
at org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler.respond(ListenerInterfaceRequestHandler.java:236)
at org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:890)
at org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64)
at org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:261)
at org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:218)
at org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:289)
at org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:259)
at org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:201)
at org.apache.wicket.protocol.http.WicketServlet.doPost(WicketServlet.java:159)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:426)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:712)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:459)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:352)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312)
at org.sakaiproject.tool.impl.ActiveToolComponent$MyActiveTool.forward(ActiveToolComponent.java:513)
at org.sakaiproject.portal.charon.SkinnableCharonPortal.forwardTool(SkinnableCharonPortal.java:1489)
at org.sakaiproject.portal.charon.handlers.SiteHandler.doSite(SiteHandler.java:470)
at org.sakaiproject.portal.charon.handlers.SiteHandler.doGet(SiteHandler.java:267)
at org.sakaiproject.portal.charon.handlers.SiteHandler.doGet(SiteHandler.java:155)
at org.sakaiproject.portal.charon.handlers.WorksiteHandler.doPost(WorksiteHandler.java:69)
at org.sakaiproject.portal.charon.SkinnableCharonPortal.doPost(SkinnableCharonPortal.java:1171)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:475)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:200)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:679)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2109)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.GeneratedMethodAccessor9979.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.wicket.RequestListenerInterface.internalInvoke(RequestListenerInterface.java:258)
... 56 more
Caused by: java.lang.NullPointerException
at org.sakaiproject.attendance.logic.AttendanceLogicImpl.grade(AttendanceLogicImpl.java:833)
at org.sakaiproject.attendance.logic.AttendanceLogicImpl.regradeAll(AttendanceLogicImpl.java:550)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.wicket.proxy.LazyInitProxyFactory$JdkHandler.invoke(LazyInitProxyFactory.java:484)
at com.sun.proxy.$Proxy550.regradeAll(Unknown Source)
at org.sakaiproject.attendance.tool.panels.GradingRulesListPanel$4.onSubmit(GradingRulesListPanel.java:114)
at org.apache.wicket.ajax.markup.html.form.AjaxButton$1.onSubmit(AjaxButton.java:108)
at org.apache.wicket.ajax.form.AjaxFormSubmitBehavior$AjaxFormSubmitter.onSubmit(AjaxFormSubmitBehavior.java:215)
at org.apache.wicket.markup.html.form.Form.delegateSubmit(Form.java:1305)
at org.apache.wicket.markup.html.form.Form.process(Form.java:966)
at org.apache.wicket.markup.html.form.Form.onFormSubmitted(Form.java:788)
at org.apache.wicket.ajax.form.AjaxFormSubmitBehavior.onEvent(AjaxFormSubmitBehavior.java:171)
at org.apache.wicket.ajax.AjaxEventBehavior.respond(AjaxEventBehavior.java:145)
at org.apache.wicket.ajax.AbstractDefaultAjaxBehavior.onRequest(AbstractDefaultAjaxBehavior.java:649)
... 60 more
2020-06-24 11:36:48,199 ERROR http-apr-8082-exec-484 org.apache.wicket.DefaultExceptionMapper - Unexpected error occurred
org.apache.wicket.WicketRuntimeException: Method onRequest of interface org.apache.wicket.behavior.IBehaviorListener targeted at org.apache.wicket.ajax.markup.html.form.AjaxButton$1@74a59e98 on component [AjaxButton [Component id = regrade-submit1]] threw an exception
at org.apache.wicket.RequestListenerInterface.internalInvoke(RequestListenerInterface.java:268)
at org.apache.wicket.RequestListenerInterface.invoke(RequestListenerInterface.java:241)
at org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler.invokeListener(ListenerInterfaceRequestHandler.java:250)
at org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler.respond(ListenerInterfaceRequestHandler.java:236)
at org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:890)
at org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64)
at org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:261)
at org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:218)
at org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:289)
at org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:259)
at org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:201)
at org.apache.wicket.protocol.http.WicketServlet.doPost(WicketServlet.java:159)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:426)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:712)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:459)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:352)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312)
at org.sakaiproject.tool.impl.ActiveToolComponent$MyActiveTool.forward(ActiveToolComponent.java:513)
at org.sakaiproject.portal.charon.SkinnableCharonPortal.forwardTool(SkinnableCharonPortal.java:1489)
at org.sakaiproject.portal.charon.handlers.SiteHandler.doSite(SiteHandler.java:470)
at org.sakaiproject.portal.charon.handlers.SiteHandler.doGet(SiteHandler.java:267)
at org.sakaiproject.portal.charon.handlers.SiteHandler.doGet(SiteHandler.java:155)
at org.sakaiproject.portal.charon.handlers.WorksiteHandler.doPost(WorksiteHandler.java:69)
at org.sakaiproject.portal.charon.SkinnableCharonPortal.doPost(SkinnableCharonPortal.java:1171)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:475)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:200)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:679)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2109)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.GeneratedMethodAccessor9979.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.wicket.RequestListenerInterface.internalInvoke(RequestListenerInterface.java:258)
... 56 more
Caused by: java.lang.NullPointerException
at org.sakaiproject.attendance.logic.AttendanceLogicImpl.grade(AttendanceLogicImpl.java:833)
at org.sakaiproject.attendance.logic.AttendanceLogicImpl.regradeAll(AttendanceLogicImpl.java:550)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.wicket.proxy.LazyInitProxyFactory$JdkHandler.invoke(LazyInitProxyFactory.java:484)
at com.sun.proxy.$Proxy550.regradeAll(Unknown Source)
at org.sakaiproject.attendance.tool.panels.GradingRulesListPanel$4.onSubmit(GradingRulesListPanel.java:114)
at org.apache.wicket.ajax.markup.html.form.AjaxButton$1.onSubmit(AjaxButton.java:108)
at org.apache.wicket.ajax.form.AjaxFormSubmitBehavior$AjaxFormSubmitter.onSubmit(AjaxFormSubmitBehavior.java:215)
at org.apache.wicket.markup.html.form.Form.delegateSubmit(Form.java:1305)
at org.apache.wicket.markup.html.form.Form.process(Form.java:966)
at org.apache.wicket.markup.html.form.Form.onFormSubmitted(Form.java:788)
at org.apache.wicket.ajax.form.AjaxFormSubmitBehavior.onEvent(AjaxFormSubmitBehavior.java:171)
at org.apache.wicket.ajax.AjaxEventBehavior.respond(AjaxEventBehavior.java:145)

Export all to CSV

New feature request we're hearing from clients: need ability to export all data to CSV including comments.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.