package com.jspxcms.core.web.back; import static com.jspxcms.core.support.Constants.CREATE; import static com.jspxcms.core.support.Constants.DELETE_SUCCESS; import static com.jspxcms.core.support.Constants.EDIT; import static com.jspxcms.core.support.Constants.MESSAGE; import static com.jspxcms.core.support.Constants.OPERATION_SUCCESS; import static com.jspxcms.core.support.Constants.OPRT; import static com.jspxcms.core.support.Constants.SAVE_SUCCESS; import java.util.ArrayList; import java.util.List; import java.util.Locale; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.MessageSource; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort.Direction; import org.springframework.data.web.PageableDefaults; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import org.springframework.web.servlet.support.RequestContextUtils; import com.jspxcms.common.util.RowSide; import com.jspxcms.common.web.Servlets; import com.jspxcms.core.domain.Attribute; import com.jspxcms.core.domain.Info; import com.jspxcms.core.domain.InfoDetail; import com.jspxcms.core.domain.InfoImage; import com.jspxcms.core.domain.Model; import com.jspxcms.core.domain.Node; import com.jspxcms.core.domain.User; import com.jspxcms.core.service.AttributeService; import com.jspxcms.core.service.InfoQueryService; import com.jspxcms.core.service.InfoService; import com.jspxcms.core.service.NodeQueryService; import com.jspxcms.core.support.Constants; import com.jspxcms.core.support.Context; /** * InfoController * * @author liufang * */ @Controller @RequestMapping("/core/info") public class InfoController { private static final Logger logger = LoggerFactory .getLogger(InfoController.class); public static final int INCLUDE_CHILDREN = 0; public static final int INCLUDE_MULTI = 1; public static final int MAIN_NODE = 2; @RequiresPermissions("core:info:left") @RequestMapping("left.do") public String left(HttpServletRequest request, org.springframework.ui.Model modelMap) { User user = Context.getCurrentUser(request); Integer siteId = Context.getCurrentSiteId(request); List<Node> nodeList = nodeQuery.findList(siteId, null, true, null); Boolean allInfo = user.getAllInfo(siteId); modelMap.addAttribute("allInfo", allInfo); if (!allInfo) { modelMap.addAttribute("infoRights", user.getInfoRights(siteId)); } modelMap.addAttribute("nodeList", nodeList); return "core/info/info_left"; } @RequiresPermissions("core:info:list") @RequestMapping("list.do") public String list( Integer queryNodeId, Integer queryNodeType, Integer queryInfoRightType, String queryStatus, @PageableDefaults(sort = "publishDate", sortDir = Direction.DESC) Pageable pageable, HttpServletRequest request, org.springframework.ui.Model modelMap) { queryNodeType = queryNodeType == null ? 0 : queryNodeType; Integer siteId = Context.getCurrentSiteId(request); User user = Context.getCurrentUser(request); Integer nodeId = null; Integer mainNodeId = null; String treeNumber = null; Node queryNode = null; if (queryNodeId != null) { queryNode = nodeQuery.get(queryNodeId); } if (queryNode != null) { if (queryNodeType == INCLUDE_MULTI) { nodeId = queryNodeId; } else if (queryNodeType == MAIN_NODE) { mainNodeId = queryNodeId; } else { treeNumber = queryNode.getTreeNumber(); } } Map<String, String[]> params = Servlets.getParameterValuesMap(request, Constants.SEARCH_PREFIX); Integer infoRightType = user.getInfoRightType(siteId); if (queryInfoRightType != null && queryInfoRightType > infoRightType) { infoRightType = queryInfoRightType; } Page<Info> pagedList = query.findAll(siteId, mainNodeId, nodeId, treeNumber, user.getId(), user.getAllInfo(siteId), infoRightType, queryStatus, params, pageable); List<Attribute> attributeList = attributeService.findList(siteId); modelMap.addAttribute("pagedList", pagedList); modelMap.addAttribute("attributeList", attributeList); modelMap.addAttribute("queryNodeId", queryNodeId); modelMap.addAttribute("queryNodeType", queryNodeType); modelMap.addAttribute("queryInfoRightType", queryInfoRightType); modelMap.addAttribute("queryStatus", queryStatus); return "core/info/info_list"; } @RequiresPermissions("core:info:create") @RequestMapping("create.do") public String create(Integer id, Integer queryNodeId, Integer queryNodeType, Integer queryInfoRightType, String queryStatus, HttpServletRequest request, org.springframework.ui.Model modelMap) { Integer siteId = Context.getCurrentSiteId(request); if (id != null) { Info bean = query.get(id); modelMap.addAttribute("bean", bean); } Node node; if (queryNodeId == null) { node = nodeQuery.findRoot(siteId); if (node == null) { // TODO 给出提示信息 throw new IllegalStateException("no node exist!"); } } else { node = nodeQuery.get(queryNodeId); } Model model = node.getInfoModel(); List<Attribute> attrList = attributeService.findList(siteId); modelMap.addAttribute("model", model); modelMap.addAttribute("node", node); modelMap.addAttribute("attrList", attrList); modelMap.addAttribute("queryNodeId", queryNodeId); modelMap.addAttribute("queryNodeType", queryNodeType); modelMap.addAttribute("queryInfoRightType", queryInfoRightType); modelMap.addAttribute("queryStatus", queryStatus); modelMap.addAttribute(OPRT, CREATE); return "core/info/info_form"; } @RequiresPermissions("core:info:edit") @RequestMapping("edit.do") public String edit( Integer id, Integer position, Integer queryNodeId, Integer queryNodeType, Integer queryInfoRightType, String queryStatus, @PageableDefaults(sort = "publishDate", sortDir = Direction.DESC) Pageable pageable, HttpServletRequest request, org.springframework.ui.Model modelMap) { queryNodeType = queryNodeType == null ? 0 : queryNodeType; Integer siteId = Context.getCurrentSiteId(request); User user = Context.getCurrentUser(request); Integer nodeId = null; Integer mainNodeId = null; String treeNumber = null; Node queryNode = null; if (queryNodeId != null) { queryNode = nodeQuery.get(queryNodeId); } if (queryNode != null) { if (queryNodeType == INCLUDE_MULTI) { nodeId = queryNodeId; } else if (queryNodeType == MAIN_NODE) { mainNodeId = queryNodeId; } else { treeNumber = queryNode.getTreeNumber(); } } Info bean = query.get(id); Map<String, String[]> params = Servlets.getParameterValuesMap(request, Constants.SEARCH_PREFIX); Integer infoRightType = user.getInfoRightType(siteId); if (queryInfoRightType != null && queryInfoRightType > infoRightType) { infoRightType = queryInfoRightType; } RowSide<Info> side = query.findSide(siteId, mainNodeId, nodeId, treeNumber, user.getId(), user.getAllInfo(siteId), infoRightType, queryStatus, params, bean, position, pageable.getSort()); modelMap.addAttribute("bean", bean); modelMap.addAttribute("side", side); modelMap.addAttribute("position", position); Node node = bean.getNode(); Model model = bean.getModel(); List<Attribute> attrList = attributeService.findList(siteId); modelMap.addAttribute("model", model); modelMap.addAttribute("node", node); modelMap.addAttribute("attrList", attrList); modelMap.addAttribute("queryNodeId", queryNodeId); modelMap.addAttribute("queryNodeType", queryNodeType); modelMap.addAttribute("queryInfoRightType", queryInfoRightType); modelMap.addAttribute("queryStatus", queryStatus); modelMap.addAttribute(OPRT, EDIT); return "core/info/info_form"; } @RequiresPermissions("core:info:save") @RequestMapping("save.do") public String save(Info bean, InfoDetail detail, Integer[] nodeIds, Integer[] specialIds, Integer[] attrIds, Integer nodeId, String tagKeywords, Boolean draft, String[] imagesName, String[] imagesText, String[] imagesImage, String redirect, Integer queryNodeId, Integer queryNodeType, Integer queryInfoRightType, String queryStatus, HttpServletRequest request, RedirectAttributes ra) { Integer siteId = Context.getCurrentSiteId(request); Integer userId = Context.getCurrentUserId(request); Map<String, String> customs = Servlets.getParameterMap(request, "customs_"); Map<String, String> clobs = Servlets.getParameterMap(request, "clobs_"); String[] tagNames = splitTagKeywords(tagKeywords, request); Map<String, String> attrImages = Servlets.getParameterMap(request, "attrImages_"); List<InfoImage> images = new ArrayList<InfoImage>(); if (imagesName != null) { InfoImage infoImage; for (int i = 0, len = imagesName.length; i < len; i++) { if (StringUtils.isNotBlank(imagesName[i]) || StringUtils.isNotBlank(imagesText[i]) || StringUtils.isNotBlank(imagesImage[i])) { infoImage = new InfoImage(imagesName[i], imagesText[i], imagesImage[i]); images.add(infoImage); } } } service.save(bean, detail, nodeIds, specialIds, customs, clobs, images, null, attrIds, attrImages, tagNames, nodeId, userId, draft, siteId); logger.info("save Info, title={}.", bean.getTitle()); ra.addAttribute("queryNodeId", queryNodeId); ra.addAttribute("queryNodeType", queryNodeType); ra.addAttribute("queryInfoRightType", queryInfoRightType); ra.addAttribute("queryStatus", queryStatus); ra.addFlashAttribute(MESSAGE, SAVE_SUCCESS); if (Constants.REDIRECT_LIST.equals(redirect)) { return "redirect:list.do"; } else if (Constants.REDIRECT_CREATE.equals(redirect)) { return "redirect:create.do"; } else { ra.addAttribute("id", bean.getId()); return "redirect:edit.do"; } } @RequiresPermissions("core:info:update") @RequestMapping("update.do") public String update(@ModelAttribute("bean") Info bean, @ModelAttribute("detail") InfoDetail detail, Integer[] nodeIds, Integer[] specialIds, Integer[] attrIds, Integer nodeId, String tagKeywords, Boolean draft, String[] imagesName, String[] imagesText, String[] imagesImage, Integer position, Integer queryNodeId, Integer queryNodeType, Integer queryInfoRightType, String queryStatus, String redirect, HttpServletRequest request, RedirectAttributes ra) { Map<String, String> customs = Servlets.getParameterMap(request, "customs_"); Map<String, String> clobs = Servlets.getParameterMap(request, "clobs_"); String[] tagNames = splitTagKeywords(tagKeywords, request); Map<String, String> attrImages = Servlets.getParameterMap(request, "attrImages_"); List<InfoImage> images = new ArrayList<InfoImage>(); if (imagesName != null) { InfoImage infoImage; for (int i = 0, len = imagesName.length; i < len; i++) { if (StringUtils.isNotBlank(imagesName[i]) || StringUtils.isNotBlank(imagesImage[i])) { infoImage = new InfoImage(imagesName[i], imagesText[i], imagesImage[i]); images.add(infoImage); } } } service.update(bean, detail, nodeIds, specialIds, customs, clobs, images, null, attrIds, attrImages, tagNames, nodeId, draft); logger.info("update Info, title={}.", bean.getTitle()); ra.addAttribute("queryNodeId", queryNodeId); ra.addAttribute("queryNodeType", queryNodeType); ra.addAttribute("queryInfoRightType", queryInfoRightType); ra.addAttribute("queryStatus", queryStatus); ra.addFlashAttribute(MESSAGE, SAVE_SUCCESS); if (Constants.REDIRECT_LIST.equals(redirect)) { return "redirect:list.do"; } else { ra.addAttribute("id", bean.getId()); ra.addAttribute("position", position); return "redirect:edit.do"; } } @RequiresPermissions("core:info:audit_pass") @RequestMapping("audit_pass.do") public String auditPass(Integer[] ids, String opinion, Integer position, Integer queryNodeId, Integer queryNodeType, Integer queryInfoRightType, String queryStatus, String redirect, HttpServletRequest request, RedirectAttributes ra) { Integer userId = Context.getCurrentUserId(request); Info[] beans = service.auditPass(ids, userId, opinion); for (Info bean : beans) { logger.info("audit pass Info, title={}.", bean.getTitle()); } ra.addAttribute("queryNodeId", queryNodeId); ra.addAttribute("queryNodeType", queryNodeType); ra.addAttribute("queryInfoRightType", queryInfoRightType); ra.addAttribute("queryStatus", queryStatus); ra.addFlashAttribute(MESSAGE, OPERATION_SUCCESS); if (Constants.REDIRECT_EDIT.equals(redirect)) { ra.addAttribute("id", beans[0].getId()); ra.addAttribute("position", position); return "redirect:edit.do"; } else { return "redirect:list.do"; } } @RequiresPermissions("core:info:audit_reject") @RequestMapping("audit_reject.do") public String auditReject(Integer[] ids, String opinion, Integer position, Integer queryNodeId, Integer queryNodeType, Integer queryInfoRightType, String queryStatus, String redirect, HttpServletRequest request, RedirectAttributes ra) { Integer userId = Context.getCurrentUserId(request); Info[] beans = service.auditReject(ids, userId, opinion); for (Info bean : beans) { logger.info("audit reject Info, title={}.", bean.getTitle()); } ra.addAttribute("queryNodeId", queryNodeId); ra.addAttribute("queryNodeType", queryNodeType); ra.addAttribute("queryInfoRightType", queryInfoRightType); ra.addAttribute("queryStatus", queryStatus); ra.addFlashAttribute(MESSAGE, OPERATION_SUCCESS); if (Constants.REDIRECT_EDIT.equals(redirect)) { ra.addAttribute("id", beans[0].getId()); ra.addAttribute("position", position); return "redirect:edit.do"; } else { return "redirect:list.do"; } } @RequiresPermissions("core:info:submit") @RequestMapping("submit.do") public String submit(Integer[] ids, Integer position, Integer queryNodeId, Integer queryNodeType, Integer queryInfoRightType, String queryStatus, String redirect, HttpServletRequest request, RedirectAttributes ra) { Integer userId = Context.getCurrentUserId(request); Info[] beans = service.submit(ids, userId); for (Info bean : beans) { logger.info("submit Info, title={}.", bean.getTitle()); } ra.addAttribute("queryNodeId", queryNodeId); ra.addAttribute("queryNodeType", queryNodeType); ra.addAttribute("queryInfoRightType", queryInfoRightType); ra.addAttribute("queryStatus", queryStatus); ra.addFlashAttribute(MESSAGE, OPERATION_SUCCESS); if (Constants.REDIRECT_EDIT.equals(redirect)) { ra.addAttribute("id", beans[0].getId()); ra.addAttribute("position", position); return "redirect:edit.do"; } else { return "redirect:list.do"; } } @RequiresPermissions("core:info:anti_submit") @RequestMapping("anti_submit.do") public String antiSubmit(Integer[] ids, Integer position, Integer queryNodeId, Integer queryNodeType, Integer queryInfoRightType, String queryStatus, String redirect, HttpServletRequest request, RedirectAttributes ra) { Info[] beans = service.antiSubmit(ids); for (Info bean : beans) { logger.info("anti submit Info, title={}.", bean.getTitle()); } ra.addAttribute("queryNodeId", queryNodeId); ra.addAttribute("queryNodeType", queryNodeType); ra.addAttribute("queryInfoRightType", queryInfoRightType); ra.addAttribute("queryStatus", queryStatus); ra.addFlashAttribute(MESSAGE, OPERATION_SUCCESS); if (Constants.REDIRECT_EDIT.equals(redirect)) { ra.addAttribute("id", beans[0].getId()); ra.addAttribute("position", position); return "redirect:edit.do"; } else { return "redirect:list.do"; } } @RequiresPermissions("core:info:delete") @RequestMapping("delete.do") public String delete(Integer[] ids, Integer queryNodeId, Integer queryNodeType, Integer queryInfoRightType, String queryStatus, RedirectAttributes ra) { Info[] beans = service.delete(ids); for (Info bean : beans) { logger.info("delete Info, name={}.", bean.getTitle()); } ra.addAttribute("queryNodeId", queryNodeId); ra.addAttribute("queryNodeType", queryNodeType); ra.addAttribute("queryInfoRightType", queryInfoRightType); ra.addAttribute("queryStatus", queryStatus); ra.addFlashAttribute(MESSAGE, DELETE_SUCCESS); return "redirect:list.do"; } // @RequiresPermissions("core:info:get_keywords") // @RequestMapping("get_keywords.do") // public void getKeywords(HttpServletRequest request, // HttpServletResponse response) { // String title = Servlets.getParameter(request, "title"); // Servlets.writeHtml(response, Strings.getKeywords(title)); // } @ModelAttribute public void preloadBean(@RequestParam(required = false) Integer oid, org.springframework.ui.Model modelMap) { if (oid != null) { Info bean = query.get(oid); if (bean != null) { modelMap.addAttribute("bean", bean); InfoDetail detail = bean.getDetail(); if (detail == null) { detail = new InfoDetail(); detail.setId(oid); detail.setInfo(bean); } modelMap.addAttribute("detail", detail); } } } private String[] splitTagKeywords(String tagKeywords, HttpServletRequest request) { Locale locale = RequestContextUtils.getLocale(request); String split = messageSource.getMessage("info.tagKeywordsSplit", null, locale); if (StringUtils.isNotBlank(split)) { tagKeywords = StringUtils.replace(tagKeywords, split, ","); } return StringUtils.split(tagKeywords, ','); } @Autowired private MessageSource messageSource; @Autowired private AttributeService attributeService; @Autowired private NodeQueryService nodeQuery; @Autowired private InfoService service; @Autowired private InfoQueryService query; }