Index: lams_tool_spreadsheet/conf/language/lams/ApplicationResources_en_AU.properties =================================================================== diff -u -r56d116683b7554e8ad3677cd0e12866ac3feb834 -r969c6dbe2dfdd2f86096a05d3c59b8ab5f0ef21d --- lams_tool_spreadsheet/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision 56d116683b7554e8ad3677cd0e12866ac3feb834) +++ lams_tool_spreadsheet/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision 969c6dbe2dfdd2f86096a05d3c59b8ab5f0ef21d) @@ -93,6 +93,8 @@ label.reviewitem.spreadsheet.sent.by =Spreadsheet sent by label.reviewitem.user.hasnot.sent.spreadsheet =User hasn't sent spreadsheet yet. label.reviewitem.title =Review User's Spreadsheet +label.export.marking.enabled =Spreadsheet marking is enabled +label.export.notebook.reflection.enabled =Notebook Reflection is enabled label.description =Description: authoring.exception =There is a problem in shared resources authoring page, the reason is {0} error.summary.marks.blank =Marks can not be blank. Index: lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/dto/ReflectDTO.java =================================================================== diff -u -r7f9f772433a7fd55c4475241d4e3bc0765f474e8 -r969c6dbe2dfdd2f86096a05d3c59b8ab5f0ef21d --- lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/dto/ReflectDTO.java (.../ReflectDTO.java) (revision 7f9f772433a7fd55c4475241d4e3bc0765f474e8) +++ lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/dto/ReflectDTO.java (.../ReflectDTO.java) (revision 969c6dbe2dfdd2f86096a05d3c59b8ab5f0ef21d) @@ -12,7 +12,7 @@ private String fullName; private String loginName; private boolean hasRefection; - private String reflectInstrctions; + private String reflectInstructions; private boolean finishReflection; private String reflect; @@ -52,11 +52,11 @@ public void setReflect(String reflect) { this.reflect = reflect; } - public String getReflectInstrctions() { - return reflectInstrctions; + public String getReflectInstructions() { + return reflectInstructions; } - public void setReflectInstrctions(String reflectInstrctions) { - this.reflectInstrctions = reflectInstrctions; + public void setReflectInstructions(String reflectInstructions) { + this.reflectInstructions = reflectInstructions; } public Long getUserUid() { return userUid; Index: lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/dto/Summary.java =================================================================== diff -u -ra7fed1be51941ace379dbb695d52bd08a315dae6 -r969c6dbe2dfdd2f86096a05d3c59b8ab5f0ef21d --- lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/dto/Summary.java (.../Summary.java) (revision a7fed1be51941ace379dbb695d52bd08a315dae6) +++ lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/dto/Summary.java (.../Summary.java) (revision 969c6dbe2dfdd2f86096a05d3c59b8ab5f0ef21d) @@ -54,8 +54,13 @@ private String sessionName; private Spreadsheet spreadsheet; private List users; + + //used for export purposes + private List reflectDTOList; - public Summary(){} + public Summary(){ + this.reflectDTOList = new ArrayList(); + } /** * Contruction method for monitoring summary function. * @@ -73,37 +78,9 @@ } else { this.users = new ArrayList(); } + + this.reflectDTOList = new ArrayList(); } -// /** -// * Contruction method for export profolio function. -// * -// * Don't not set sessionId and viewNumber fields -// * @param sessionName -// * @param item -// * @param isInitGroup -// */ -// public Summary(Long sessionId, String sessionName, SpreadsheetItem item,boolean isInitGroup){ -// this.sessionId = sessionId; -// this.sessionName = sessionName; -// if(item != null){ -// this.itemUid = item.getUid(); -// this.itemType = item.getType(); -// this.itemCreateByAuthor = item.isCreateByAuthor(); -// this.itemHide = item.isHide(); -// this.itemTitle = item.getTitle(); -// this.username = item.getCreateBy() == null?"":item.getCreateBy().getLoginName(); -// this.url = SpreadsheetWebUtils.protocol(item.getUrl()); -// this.fileName = item.getFileName(); -// this.fileUuid = item.getFileUuid(); -// this.fileVersionId = item.getFileVersionId(); -// -// for (SpreadsheetItemInstruction instruction : (Set)item.getItemInstructions()) { -// itemInstructions.add(instruction.getDescription()); -// } -// }else -// this.itemUid = new Long(-1); -// this.isInitGroup = isInitGroup; -// } public Long getSessionId() { return sessionId; @@ -129,4 +106,21 @@ public void setUsers(List users) { this.users = users; } + + /** + * Returns ReflectDTO. + * + * @return ReflectDTO + */ + public List getReflectDTOList() { + return reflectDTOList; + } + /** + * Sets ReflectDTO. + * + * @param reflectDTO ReflectDTO + */ + public void setReflectDTOList(List reflectDTOList) { + this.reflectDTOList = reflectDTOList; + } } Index: lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/service/ISpreadsheetService.java =================================================================== diff -u -ra7fed1be51941ace379dbb695d52bd08a315dae6 -r969c6dbe2dfdd2f86096a05d3c59b8ab5f0ef21d --- lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/service/ISpreadsheetService.java (.../ISpreadsheetService.java) (revision a7fed1be51941ace379dbb695d52bd08a315dae6) +++ lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/service/ISpreadsheetService.java (.../ISpreadsheetService.java) (revision 969c6dbe2dfdd2f86096a05d3c59b8ab5f0ef21d) @@ -185,8 +185,8 @@ * Otherwise, get all spreadsheet item * @return */ - public List exportBySessionId(Long sessionId, boolean skipHide); - public List> exportByContentId(Long contentId); + public List exportForLearner(Long sessionId, SpreadsheetUser learner); + public List exportForTeacher(Long contentId); /** * Create refection entry into notebook tool. Index: lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/service/SpreadsheetServiceImpl.java =================================================================== diff -u -ra7fed1be51941ace379dbb695d52bd08a315dae6 -r969c6dbe2dfdd2f86096a05d3c59b8ab5f0ef21d --- lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/service/SpreadsheetServiceImpl.java (.../SpreadsheetServiceImpl.java) (revision a7fed1be51941ace379dbb695d52bd08a315dae6) +++ lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/service/SpreadsheetServiceImpl.java (.../SpreadsheetServiceImpl.java) (revision 969c6dbe2dfdd2f86096a05d3c59b8ab5f0ef21d) @@ -285,14 +285,51 @@ } - public List exportBySessionId(Long sessionId, boolean skipHide) { + public List exportForLearner(Long sessionId, SpreadsheetUser learner) { SpreadsheetSession session = spreadsheetSessionDao.getSessionBySessionId(sessionId); if(session == null){ log.error("Failed get SpreadsheetSession by ID [" +sessionId + "]"); return null; } + + Spreadsheet spreadsheet = session.getSpreadsheet(); + List summaryList = new ArrayList(); + + List userList = new ArrayList(); + userList.add(learner); + Summary summary = new Summary(session, spreadsheet, userList); + + //Fill up reflect dto + NotebookEntry notebookEntry = getEntry(session.getSessionId(), CoreNotebookConstants.NOTEBOOK_TOOL, + SpreadsheetConstants.TOOL_SIGNATURE, learner.getUserId().intValue()); + ReflectDTO reflectDTO = new ReflectDTO(learner); + if(notebookEntry == null){ + reflectDTO.setFinishReflection(false); + reflectDTO.setReflect(null); + }else{ + reflectDTO.setFinishReflection(true); + reflectDTO.setReflect(notebookEntry.getEntry()); + } + reflectDTO.setReflectInstructions(session.getSpreadsheet().getReflectInstructions()); + summary.getReflectDTOList().add(reflectDTO); + summaryList.add(summary); + + return summaryList; + + + + + + + + + + + + + //initial spreadsheet items list - List itemList = new ArrayList(); +// List itemList = new ArrayList(); // Set resList = session.getSpreadsheet().getSpreadsheetItems(); // for(SpreadsheetItem item:resList){ // if(skipHide && item.isHide()) @@ -317,45 +354,42 @@ // } // } - return itemList; +// return itemList; } - public List> exportByContentId(Long contentId) { + public List exportForTeacher(Long contentId) { Spreadsheet spreadsheet = spreadsheetDao.getByContentId(contentId); - List> groupList = new ArrayList(); + List summaryList = new ArrayList(); -// //create init spreadsheet items list -// List initList = new ArrayList(); -// groupList.add(initList); -// Set resList = spreadsheet.getSpreadsheetItems(); -// for(SpreadsheetItem item:resList){ -// if(item.isCreateByAuthor()){ -// Summary sum = new Summary(null, null,item,true); -// initList.add(sum); -// } -// } -// -// //session by session -// List sessionList = spreadsheetSessionDao.getByContentId(contentId); -// for(SpreadsheetSession session:sessionList){ -// List group = new ArrayList(); -// //get this session's all spreadsheet items -// Set sessList =session.getSpreadsheetItems(); -// for(SpreadsheetItem item:sessList){ -// //to skip all item create by author -// if(!item.isCreateByAuthor()){ -// Summary sum = new Summary(session.getSessionId(), session.getSessionName(),item,false); -// group.add(sum); -// } -// } -// if(group.size() == 0){ -// group.add(new Summary(session.getSessionId(), session.getSessionName(),null,false)); -// } -// groupList.add(group); -// } + List sessionList = spreadsheetSessionDao.getByContentId(contentId); + //create the user list of all whom were started this task + for(SpreadsheetSession session:sessionList) { + List userList = spreadsheetUserDao.getBySessionID(session.getSessionId()); + Summary summary = new Summary(session, spreadsheet, userList); + + //Fill up reflect dto + for(SpreadsheetUser user : userList) { + NotebookEntry notebookEntry = getEntry(session.getSessionId(), CoreNotebookConstants.NOTEBOOK_TOOL, + SpreadsheetConstants.TOOL_SIGNATURE, user.getUserId().intValue()); + + ReflectDTO reflectDTO = new ReflectDTO(user); + if(notebookEntry == null){ + reflectDTO.setFinishReflection(false); + reflectDTO.setReflect(null); + }else{ + reflectDTO.setFinishReflection(true); + reflectDTO.setReflect(notebookEntry.getEntry()); + } + reflectDTO.setReflectInstructions(session.getSpreadsheet().getReflectInstructions()); + + summary.getReflectDTOList().add(reflectDTO); + } + summaryList.add(summary); + } - return groupList; + return summaryList; } + public Spreadsheet getSpreadsheetBySessionId(Long sessionId){ SpreadsheetSession session = spreadsheetSessionDao.getSessionBySessionId(sessionId); //to skip CGLib problem Index: lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/web/action/MonitoringAction.java =================================================================== diff -u -ra7fed1be51941ace379dbb695d52bd08a315dae6 -r969c6dbe2dfdd2f86096a05d3c59b8ab5f0ef21d --- lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision a7fed1be51941ace379dbb695d52bd08a315dae6) +++ lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision 969c6dbe2dfdd2f86096a05d3c59b8ab5f0ef21d) @@ -418,7 +418,7 @@ refDTO.setFinishReflection(true); refDTO.setReflect(notebookEntry.getEntry()); } - refDTO.setReflectInstrctions(session.getSpreadsheet().getReflectInstructions()); + refDTO.setReflectInstructions(session.getSpreadsheet().getReflectInstructions()); request.setAttribute("userDTO", refDTO); return mapping.findForward("success"); Index: lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/web/servlet/ExportServlet.java =================================================================== diff -u -ra7fed1be51941ace379dbb695d52bd08a315dae6 -r969c6dbe2dfdd2f86096a05d3c59b8ab5f0ef21d --- lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/web/servlet/ExportServlet.java (.../ExportServlet.java) (revision a7fed1be51941ace379dbb695d52bd08a315dae6) +++ lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/web/servlet/ExportServlet.java (.../ExportServlet.java) (revision 969c6dbe2dfdd2f86096a05d3c59b8ab5f0ef21d) @@ -62,19 +62,17 @@ import org.springframework.web.context.support.WebApplicationContextUtils; /** - * Export portfolio servlet to export all shared spreadsheet into offline HTML + * Export portfolio servlet to export all spreadsheets into offline HTML * package. * - * @author Steve.Ni - * - * @version $Revision$ + * @author Andrey Balan */ public class ExportServlet extends AbstractExportPortfolioServlet { private static final long serialVersionUID = -4529093489007108143L; private static Logger logger = Logger.getLogger(ExportServlet.class); - private final String FILENAME = "shared_spreadsheet_main.html"; + private final String FILENAME = "spreadsheet_main.html"; private SpreadsheetToolContentHandler handler; @@ -88,26 +86,24 @@ public String doExport(HttpServletRequest request, HttpServletResponse response, String directoryName, Cookie[] cookies) { -// initial sessionMap + //initial sessionMap SessionMap sessionMap = new SessionMap(); request.getSession().setAttribute(sessionMap.getSessionID(), sessionMap); try { if (StringUtils.equals(mode, ToolAccessMode.LEARNER.toString())) { - sessionMap.put(AttributeNames.ATTR_MODE,ToolAccessMode.LEARNER); - learner(request, response, directoryName, cookies,sessionMap); + sessionMap.put(AttributeNames.ATTR_MODE, ToolAccessMode.LEARNER); + learner(request, response, directoryName, cookies, sessionMap); } else if (StringUtils.equals(mode, ToolAccessMode.TEACHER.toString())) { - sessionMap.put(AttributeNames.ATTR_MODE,ToolAccessMode.TEACHER); - teacher(request, response, directoryName, cookies,sessionMap); + sessionMap.put(AttributeNames.ATTR_MODE, ToolAccessMode.TEACHER); + teacher(request, response, directoryName, cookies, sessionMap); } } catch (SpreadsheetApplicationException e) { logger.error("Cannot perform export for spreadsheet tool."); } - String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() - + request.getContextPath(); - writeResponseToFile(basePath + "/pages/export/exportportfolio.jsp?sessionMapID="+sessionMap.getSessionID() - , directoryName, FILENAME, cookies); + String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath(); + writeResponseToFile(basePath + "/pages/export/exportportfolio.jsp?sessionMapID=" + sessionMap.getSessionID(), directoryName, FILENAME, cookies); return FILENAME; } @@ -132,11 +128,8 @@ return super.doOfflineExport(request, response, directoryName, cookies); } + public void learner(HttpServletRequest request, HttpServletResponse response, String directoryName, Cookie[] cookies, HashMap sessionMap) throws SpreadsheetApplicationException { - - public void learner(HttpServletRequest request, HttpServletResponse response, String directoryName, Cookie[] cookies, HashMap sessionMap) - throws SpreadsheetApplicationException { - if (userID == null || toolSessionID == null) { String error = "Tool session Id or user Id is null. Unable to continue"; logger.error(error); @@ -159,37 +152,33 @@ throw new SpreadsheetApplicationException(error); } + List summaryList = service.exportForLearner(toolSessionID, learner); +// saveFileToLocal(summaryList, directoryName); - List group = service.exportBySessionId(toolSessionID,true); - saveFileToLocal(group, directoryName); - - List groupList = new ArrayList(); - if(group.size() > 0) - groupList.add(group); - // Add flag to indicate whether to render user notebook entries sessionMap.put(SpreadsheetConstants.ATTR_REFLECTION_ON, content.isReflectOnActivity()); - // Create reflectList if reflection is enabled. - if (content.isReflectOnActivity()) { - // Create reflectList, need to follow same structure used in teacher - // see service.getReflectList(); - Map> map = new HashMap>(); - Set reflectDTOSet = new TreeSet(new ReflectDTOComparator()); - reflectDTOSet.add(getReflectionEntry(learner)); - map.put(toolSessionID, reflectDTOSet); - - // Add reflectList to sessionMap - sessionMap.put(SpreadsheetConstants.ATTR_REFLECT_LIST, map); - } +// // Create reflectList if reflection is enabled. +// if (content.isReflectOnActivity()) { +// // Create reflectList, need to follow same structure used in teacher +// // see service.getReflectList(); +// Map> map = new HashMap>(); +// Set reflectDTOSet = new TreeSet(new ReflectDTOComparator()); +// reflectDTOSet.add(getReflectionEntry(learner)); +// map.put(toolSessionID, reflectDTOSet); +// +// // Add reflectList to sessionMap +// sessionMap.put(SpreadsheetConstants.ATTR_REFLECT_LIST, map); +// } + + sessionMap.put(SpreadsheetConstants.ATTR_RESOURCE, content); sessionMap.put(SpreadsheetConstants.ATTR_TITLE, content.getTitle()); sessionMap.put(SpreadsheetConstants.ATTR_INSTRUCTIONS, content.getInstructions()); - sessionMap.put(SpreadsheetConstants.ATTR_SUMMARY_LIST, groupList); + sessionMap.put(SpreadsheetConstants.ATTR_SUMMARY_LIST, summaryList); } - public void teacher(HttpServletRequest request, HttpServletResponse response, String directoryName, Cookie[] cookies, HashMap sessionMap) - throws SpreadsheetApplicationException { + public void teacher(HttpServletRequest request, HttpServletResponse response, String directoryName, Cookie[] cookies, HashMap sessionMap) throws SpreadsheetApplicationException { // check if toolContentId exists in db or not if (toolContentID == null) { @@ -205,27 +194,28 @@ logger.error(error); throw new SpreadsheetApplicationException(error); } - List> groupList = service.exportByContentId(toolContentID); - if(groupList != null) { - for (List list : groupList) { - saveFileToLocal(list, directoryName); - } - } + List summaryList = service.exportForTeacher(toolContentID); +// if(summaryList != null) { +// for (List list : summaryList) { +// saveFileToLocal(list, directoryName); +// } +// } // Add flag to indicate whether to render user notebook entries sessionMap.put(SpreadsheetConstants.ATTR_REFLECTION_ON, content.isReflectOnActivity()); - // Create reflectList if reflection is enabled. - if (content.isReflectOnActivity()) { - Map> reflectList = service.getReflectList(content.getContentId(), true); - // Add reflectList to sessionMap - sessionMap.put(SpreadsheetConstants.ATTR_REFLECT_LIST, reflectList); - } +// // Create reflectList if reflection is enabled. +// if (content.isReflectOnActivity()) { +// Map> reflectList = service.getReflectList(content.getContentId(), true); +// // Add reflectList to sessionMap +// sessionMap.put(SpreadsheetConstants.ATTR_REFLECT_LIST, reflectList); +// } // put it into HTTPSession + sessionMap.put(SpreadsheetConstants.ATTR_RESOURCE, content); sessionMap.put(SpreadsheetConstants.ATTR_TITLE, content.getTitle()); sessionMap.put(SpreadsheetConstants.ATTR_INSTRUCTIONS, content.getInstructions()); - sessionMap.put(SpreadsheetConstants.ATTR_SUMMARY_LIST, groupList); + sessionMap.put(SpreadsheetConstants.ATTR_SUMMARY_LIST, summaryList); } private void saveFileToLocal(List list, String directoryName) { Index: lams_tool_spreadsheet/web/pages/export/exportportfolio.jsp =================================================================== diff -u -r7f9f772433a7fd55c4475241d4e3bc0765f474e8 -r969c6dbe2dfdd2f86096a05d3c59b8ab5f0ef21d --- lams_tool_spreadsheet/web/pages/export/exportportfolio.jsp (.../exportportfolio.jsp) (revision 7f9f772433a7fd55c4475241d4e3bc0765f474e8) +++ lams_tool_spreadsheet/web/pages/export/exportportfolio.jsp (.../exportportfolio.jsp) (revision 969c6dbe2dfdd2f86096a05d3c59b8ab5f0ef21d) @@ -7,32 +7,21 @@ + + - <fmt:message key="export.title" /> + <title> + <fmt:message key="export.title" /> + - + - - @@ -45,176 +34,49 @@
${instructions}
- - - -

- - - - - - - ${group[0].sessionName} - - -

- - - - - - - - - - - - - - - - - <%-- Bold styling is to indicate an item created by the author --%> - - - - - - - - - - - - - - - - - - - - + + +
+
    + +
  • + +
  • +
    + + +
  • + +
  • +
    -
- - - - - - - - - - - -
- - - - - - - - - - - -
-
- -
-
- - - - - - - - - - - - - - - - ${item.itemTitle} - - - -
    - -
  1. - ${itemInstruction} -
  2. -
    -
-
- -   - -
-
- ${item.username} - - - - - - - - - - - - - - - - - - - -
- - <%-- Display reflection entries --%> - - - - <%-- End all answers for this question --%> -

- -

- - -

- ${reflectDTO.fullName} -

-

- -

-
+ +
    +
  • + +
  • +
- -
- + + +
  • + +
  • +
    + + +
    +
    +
    + + + <%@ include file="summarylist.jsp"%> - - + - - - + +
    Index: lams_tool_spreadsheet/web/pages/export/summarylist.jsp =================================================================== diff -u --- lams_tool_spreadsheet/web/pages/export/summarylist.jsp (revision 0) +++ lams_tool_spreadsheet/web/pages/export/summarylist.jsp (revision 969c6dbe2dfdd2f86096a05d3c59b8ab5f0ef21d) @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    + + +
    +

    ${summary.sessionName}

    +
    + + + +
    + + + + + + + + + + +
    + + + + + + + + + + +
    + + + + + + + + + + +
    +
    +
    + +<%-- Display reflection entries --%> + +

    + +

    + + +

    + ${reflectDTO.fullName} +

    + +
    +
    +
    +
    +
    +
    + Index: lams_tool_spreadsheet/web/pages/monitoring/parts/notebook.jsp =================================================================== diff -u -r56d116683b7554e8ad3677cd0e12866ac3feb834 -r969c6dbe2dfdd2f86096a05d3c59b8ab5f0ef21d --- lams_tool_spreadsheet/web/pages/monitoring/parts/notebook.jsp (.../notebook.jsp) (revision 56d116683b7554e8ad3677cd0e12866ac3feb834) +++ lams_tool_spreadsheet/web/pages/monitoring/parts/notebook.jsp (.../notebook.jsp) (revision 969c6dbe2dfdd2f86096a05d3c59b8ab5f0ef21d) @@ -17,7 +17,7 @@ Index: lams_tool_spreadsheet/web/pages/monitoring/parts/viewallmarks.jsp =================================================================== diff -u -r56d116683b7554e8ad3677cd0e12866ac3feb834 -r969c6dbe2dfdd2f86096a05d3c59b8ab5f0ef21d --- lams_tool_spreadsheet/web/pages/monitoring/parts/viewallmarks.jsp (.../viewallmarks.jsp) (revision 56d116683b7554e8ad3677cd0e12866ac3feb834) +++ lams_tool_spreadsheet/web/pages/monitoring/parts/viewallmarks.jsp (.../viewallmarks.jsp) (revision 969c6dbe2dfdd2f86096a05d3c59b8ab5f0ef21d) @@ -25,7 +25,7 @@
    - +
    - +