sakaicontrib / attendance Goto Github PK
View Code? Open in Web Editor NEWA simple Sakai tool for tracking attendance that integrates with the Gradebook.
License: Educational Community License v2.0
A simple Sakai tool for tracking attendance that integrates with the Gradebook.
License: Educational Community License v2.0
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
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.
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.
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.
[Component id = header-event-edit]
[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.
[Component id = header-event-edit]
[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.
[Component id = header-event-edit]
[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)`
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
On the settings page, different attendance objects are referenced which can causes confusion when saving.
Export / Import fails with different symptoms depending on the version.
In 12.x
Caused by: java.lang.IndexOutOfBoundsException: Index: 4, Size: 4
In 19.x @mpellicer saw that
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)
In master
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
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
);
The attendance tool is not responsive in Sakai 11. It does not look good on smaller resolutions.
At the University Of Dayton, we've implemented a change recently that allows instructors to select a Gradebook category [if available] for the item created by Attendance. We'd like to share that feature with the community, and we'll have a commit ready shortly.
Gradebook needs a bit of work for this as well, which I will track on Jira: https://sakaiproject.atlassian.net/browse/SAK-47743
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:
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
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.
Thanks for doing #1 :)
I forgot to mention that the email address is no longer current, so am sending a PR to fix.
Cheers.
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.
Some instructors would like the possibility for students to mark themselves as present in a site.
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
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.
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]
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.
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.
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?
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")){
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.
Loading attendance in one large site (700 students) with dozens of attendance items results in approximately 50k SQL queries.
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();
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.
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
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")
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.
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.
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
Disabling the import button by default and enabling it via jQuery upon the selection of a file can improve the UX of the import function.
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.
Attendance does not use the sakai message bundle manager which allows for on the fly changes to the bundles. This should be fixed.
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.
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!
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
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
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.
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?
Remove pack directory that's not needed. Move components.xml to impl and update impl deploy target and packaging to sakai-component and components.
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
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
Original / description: https://jira.sakaiproject.org/browse/SAK-43948
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)
After selecting an item to take attendance & selecting the Edit attendance item icon:
After selecting an item to take attendance & selecting the Print icon:
After selecting an item to take attendance & scroll over students (odd rows):
After selecting an item to take attendance & selecting a student's name
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
]
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
getAttendanceSiteBatch: SELECT id FROM AttendanceSite attendanceSite WHERE (attendanceSite.syncTime IS NULL OR attendanceSite.syncTime < :syncTime)
I believe this should limit based on published status at a minimum.
Replicated on a 19x and 20x instance...
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)
Should this be consistent for both instructors and students?
This happened on Attendance 20.x
I have not had a chance to test on newer versions.
New feature request we're hearing from clients: need ability to export all data to CSV including comments.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.