/** * We currently support 2 modes : MODE_LIVE : PUBLISHED state only MODE_EDIT : PUBLISHED, DRAFT, * PENDING, STAGED, APPROVED allowed. * * @param mode the current mode (MODE_LIVE or MODE_EDIT) * @return the allowed states */ public List<String> getAllowedStates(String mode) { List<String> states = new ArrayList<String>(); if (MODE_LIVE.equals(mode)) { states.add(PublicationDefaultStates.PUBLISHED); } else if (MODE_EDIT.equals(mode)) { states.add(PublicationDefaultStates.PUBLISHED); states.add(PublicationDefaultStates.DRAFT); states.add(PublicationDefaultStates.PENDING); states.add(PublicationDefaultStates.STAGED); states.add(PublicationDefaultStates.APPROVED); } return states; }
/* * (non-Javadoc) * @see * org.exoplatform.services.wcm.publication.WCMComposer#getContent(java.lang * .String, java.lang.String, java.lang.String, java.util.HashMap) */ public Node getContent( String workspace, String nodeIdentifier, HashMap<String, String> filters, SessionProvider sessionProvider) throws Exception { String mode = filters.get(FILTER_MODE); String version = filters.get(FILTER_VERSION); String visibility = filters.get(FILTER_VISIBILITY); String remoteUser = getRemoteUser(); String repository = null; try { repository = repositoryService.getCurrentRepository().getConfiguration().getName(); } catch (Exception e) { if (LOG.isWarnEnabled()) { LOG.warn(e.getMessage()); } } if (workspace == null) { if (nodeIdentifier.lastIndexOf("/") == 0) nodeIdentifier = nodeIdentifier.substring(1); String[] params = nodeIdentifier.split("/"); workspace = params[1]; try { nodeIdentifier = nodeIdentifier.substring(repository.length() + workspace.length() + 1); } catch (Exception e) { if (LOG.isWarnEnabled()) { LOG.warn(e.getMessage()); } } } Node node = null; try { if (WCMComposer.VISIBILITY_PUBLIC.equals(visibility) && MODE_LIVE.equals(mode)) { sessionProvider = remoteUser == null ? aclSessionProviderService.getAnonymSessionProvider() : aclSessionProviderService.getACLSessionProvider(getAnyUserACL()); } node = wcmService.getReferencedContent(sessionProvider, workspace, nodeIdentifier); } catch (RepositoryException e) { node = getNodeByCategory(nodeIdentifier); } if (version == null || !BASE_VERSION.equals(version)) { node = getViewableContent(node, filters); } return node; }
/* * (non-Javadoc) * @see * org.exoplatform.services.wcm.publication.WCMComposer#getContents(java.lang * .String, java.lang.String, java.lang.String, java.util.HashMap) */ private NodeIterator getViewableContents( String workspace, String path, HashMap<String, String> filters, SessionProvider sessionProvider, boolean paginated) throws Exception { ManageableRepository manageableRepository = repositoryService.getCurrentRepository(); Session session = sessionProvider.getSession(workspace, manageableRepository); QueryManager manager = session.getWorkspace().getQueryManager(); String mode = filters.get(FILTER_MODE); String orderBy = filters.get(FILTER_ORDER_BY); String orderFilter = getOrderSQLFilter(filters); String recursive = filters.get(FILTER_RECURSIVE); String primaryType = filters.get(FILTER_PRIMARY_TYPE); String queryFilter = filters.get(FILTER_QUERY); String queryFilterFull = filters.get(FILTER_QUERY_FULL); StringBuffer statement = new StringBuffer(); boolean filterTemplates = true; if (queryFilterFull != null) { statement.append(queryFilterFull); updateSymlinkByQuery(workspace, queryFilterFull, sessionProvider); } else { addUsedPrimaryTypes(primaryType); if (primaryType == null) { primaryType = "nt:base"; Node currentFolder = null; if ("/".equals(path)) { currentFolder = session.getRootNode(); } else if (session.getRootNode().hasNode(path.substring(1))) { currentFolder = session.getRootNode().getNode(path.substring(1)); } else { return null; } if (currentFolder != null && currentFolder.isNodeType("exo:taxonomy")) { primaryType = "exo:taxonomyLink"; } } else { filterTemplates = false; } addUsedOrderBy(orderBy); statement.append("SELECT * FROM " + primaryType + " WHERE (jcr:path LIKE '" + path + "/%'"); if (recursive == null || "false".equals(recursive)) { statement.append(" AND NOT jcr:path LIKE '" + path + "/%/%')"); } else { statement.append(")"); } // If clv view mode is live, only get nodes which has published version if (MODE_LIVE.equals(mode) && !"exo:taxonomyLink".equals(primaryType)) statement.append( " AND NOT publication:currentState = 'unpublished' AND (publication:currentState IS NULL OR publication:currentState = 'published' " + "OR exo:titlePublished IS NOT NULL)"); if (filterTemplates) statement.append(" AND " + getTemplatesSQLFilter()); if (queryFilter != null) { statement.append(queryFilter); } statement.append(orderFilter); updateSymlink(workspace, path, sessionProvider); } Query query = manager.createQuery(statement.toString(), Query.SQL); if (paginated) { long offset = (filters.get(FILTER_OFFSET) != null) ? new Long(filters.get(FILTER_OFFSET)) : 0; long limit = (filters.get(FILTER_LIMIT) != null) ? new Long(filters.get(FILTER_LIMIT)) : 0; if (limit > 0) { ((QueryImpl) query).setOffset(offset); ((QueryImpl) query).setLimit(limit); } } // order by title with in-sensitive case. ((QueryImpl) query).setCaseInsensitiveOrder(true); return query.execute().getNodes(); }
public Result getPaginatedContents( NodeLocation nodeLocation, HashMap<String, String> filters, SessionProvider sessionProvider) throws Exception { String path = nodeLocation.getPath(); String workspace = nodeLocation.getWorkspace(); String mode = filters.get(FILTER_MODE); String version = filters.get(FILTER_VERSION); String orderBy = filters.get(FILTER_ORDER_BY); String orderType = filters.get(FILTER_ORDER_TYPE); String visibility = filters.get(FILTER_VISIBILITY); long offset = (filters.get(FILTER_OFFSET) != null) ? new Long(filters.get(FILTER_OFFSET)) : 0; long totalSize = (filters.get(FILTER_TOTAL) != null) ? new Long(filters.get(FILTER_TOTAL)) : 0; String remoteUser = getRemoteUser(); if (MODE_EDIT.equals(mode) && "publication:liveDate".equals(orderBy)) { orderBy = "exo:dateModified"; filters.put(FILTER_ORDER_BY, orderBy); } if (MODE_LIVE.equals(mode) && "exo:title".equals(orderBy)) { orderBy = "exo:titlePublished " + orderType + ", exo:title"; filters.put(FILTER_ORDER_BY, orderBy); } if (LOG.isDebugEnabled()) LOG.debug( "##### " + path + ":" + version + ":" + remoteUser + ":" + orderBy + ":" + orderType); NodeIterator nodeIterator; if (totalSize == 0) { SessionProvider systemProvider = WCMCoreUtils.getSystemSessionProvider(); nodeIterator = getViewableContents(workspace, path, filters, systemProvider, false); if (nodeIterator != null) { totalSize = nodeIterator.getSize(); } } if (WCMComposer.VISIBILITY_PUBLIC.equals(visibility) && MODE_LIVE.equals(mode)) { sessionProvider = remoteUser == null ? aclSessionProviderService.getAnonymSessionProvider() : aclSessionProviderService.getACLSessionProvider(getAnyUserACL()); } nodeIterator = getViewableContents(workspace, path, filters, sessionProvider, true); List<Node> nodes = new ArrayList<Node>(); Node node = null, viewNode = null; if (nodeIterator != null) { while (nodeIterator.hasNext()) { node = nodeIterator.nextNode(); viewNode = getViewableContent(node, filters); if (viewNode != null) { nodes.add(viewNode); } } } Result result = new Result(nodes, offset, totalSize, nodeLocation, filters); return result; }
public List<Node> getContents( String workspace, String path, HashMap<String, String> filters, SessionProvider sessionProvider) throws Exception { String mode = filters.get(FILTER_MODE); String version = filters.get(FILTER_VERSION); String orderBy = filters.get(FILTER_ORDER_BY); String orderType = filters.get(FILTER_ORDER_TYPE); String visibility = filters.get(FILTER_VISIBILITY); String remoteUser = null; if (WCMComposer.VISIBILITY_PUBLIC.equals(visibility)) { remoteUser = "******"; } else { remoteUser = getRemoteUser(); } if (MODE_EDIT.equals(mode) && "publication:liveDate".equals(orderBy)) { orderBy = "exo:dateModified"; filters.put(FILTER_ORDER_BY, orderBy); } if ("exo:title".equals(orderBy)) { if (MODE_LIVE.equals(mode)) { orderBy = "exo:titlePublished " + orderType + ", exo:title"; } if ("exo:taxonomy".equals(this.getTypeFromPath(workspace, path, sessionProvider))) { orderBy = "exo:name " + orderType + ", " + orderBy; } filters.put(FILTER_ORDER_BY, orderBy); } List<Node> nodes = new ArrayList<Node>(); try { if (WCMComposer.VISIBILITY_PUBLIC.equals(visibility) && MODE_LIVE.equals(mode) && remoteUser != null) { sessionProvider = aclSessionProviderService.getACLSessionProvider(getAnyUserACL()); } if (LOG.isDebugEnabled()) LOG.debug( "##### " + path + ":" + version + ":" + remoteUser + ":" + orderBy + ":" + orderType); NodeIterator nodeIterator = getViewableContents(workspace, path, filters, sessionProvider, false); Node node = null, viewNode = null; while (nodeIterator != null && nodeIterator.hasNext()) { node = nodeIterator.nextNode(); viewNode = getViewableContent(node, filters); if (viewNode != null) { nodes.add(viewNode); } } } catch (Exception e) { if (LOG.isWarnEnabled()) { LOG.warn(e.getMessage()); } } return nodes; }