Example usage for com.liferay.portal.kernel.sanitizer SanitizerUtil sanitize

List of usage examples for com.liferay.portal.kernel.sanitizer SanitizerUtil sanitize

Introduction

In this page you can find the example usage for com.liferay.portal.kernel.sanitizer SanitizerUtil sanitize.

Prototype

public static String sanitize(long companyId, long groupId, long userId, String className, long classPK,
            String contentType, String content) throws SanitizerException 

Source Link

Usage

From source file:com.liferay.journal.service.impl.JournalArticleLocalServiceImpl.java

License:Open Source License

protected void format(User user, long groupId, JournalArticle article, Element root) throws PortalException {

    for (Element element : root.elements()) {
        String elType = element.attributeValue("type", StringPool.BLANK);

        if (elType.equals("document_library")) {
            addDocumentLibraryFileEntries(element);
        } else if (elType.equals("image")) {
            addImageFileEntries(article, element);
        } else if (elType.equals("text_area") || elType.equals("text") || elType.equals("text_box")) {

            List<Element> dynamicContentElements = element.elements("dynamic-content");

            for (Element dynamicContentElement : dynamicContentElements) {
                String dynamicContent = dynamicContentElement.getText();

                if (Validator.isNotNull(dynamicContent)) {
                    String contentType = ContentTypes.TEXT_PLAIN;

                    if (elType.equals("text_area")) {
                        contentType = ContentTypes.TEXT_HTML;
                    }/*  www  .  jav  a 2 s  .co  m*/

                    dynamicContent = SanitizerUtil.sanitize(user.getCompanyId(), groupId, user.getUserId(),
                            JournalArticle.class.getName(), 0, contentType, dynamicContent);

                    dynamicContentElement.clearContent();

                    dynamicContentElement.addCDATA(dynamicContent);
                }
            }
        }

        format(user, groupId, article, element);
    }
}

From source file:com.liferay.portlet.journal.service.impl.JournalArticleLocalServiceImpl.java

License:Open Source License

protected void format(User user, long groupId, String articleId, double version, boolean incrementVersion,
        Element root, Map<String, byte[]> images) throws PortalException, SystemException {

    for (Element element : root.elements()) {
        String elInstanceId = element.attributeValue("instance-id", StringPool.BLANK);
        String elName = element.attributeValue("name", StringPool.BLANK);
        String elType = element.attributeValue("type", StringPool.BLANK);

        if (elType.equals("image")) {
            formatImage(groupId, articleId, version, incrementVersion, element, elInstanceId, elName, images);
        } else if (elType.equals("text_area") || elType.equals("text") || elType.equals("text_box")) {

            List<Element> dynamicContentElements = element.elements("dynamic-content");

            for (Element dynamicContentElement : dynamicContentElements) {
                String dynamicContent = dynamicContentElement.getText();

                if (Validator.isNotNull(dynamicContent)) {
                    dynamicContent = SanitizerUtil.sanitize(user.getCompanyId(), groupId, user.getUserId(),
                            JournalArticle.class.getName(), 0, ContentTypes.TEXT_HTML, dynamicContent);

                    dynamicContentElement.setText(dynamicContent);
                }//from  w ww  .  ja  v  a 2s . c  om
            }
        }

        format(user, groupId, articleId, version, incrementVersion, element, images);
    }
}

From source file:com.liferay.portlet.journal.service.impl.JournalArticleLocalServiceImpl.java

License:Open Source License

protected String format(User user, long groupId, String articleId, double version, boolean incrementVersion,
        String content, String structureId, Map<String, byte[]> images)
        throws PortalException, SystemException {

    Document document = null;//  w  w w. j a va2 s  .  co  m

    try {
        document = SAXReaderUtil.read(content);

        Element rootElement = document.getRootElement();

        if (Validator.isNotNull(structureId)) {
            format(user, groupId, articleId, version, incrementVersion, rootElement, images);
        } else {
            List<Element> staticContentElements = rootElement.elements("static-content");

            for (Element staticContentElement : staticContentElements) {
                String staticContent = staticContentElement.getText();

                staticContent = SanitizerUtil.sanitize(user.getCompanyId(), groupId, user.getUserId(),
                        JournalArticle.class.getName(), 0, ContentTypes.TEXT_HTML, staticContent);

                staticContentElement.setText(staticContent);
            }
        }

        content = DDMXMLUtil.formatXML(document);
    } catch (DocumentException de) {
        _log.error(de);
    } catch (IOException ioe) {
        _log.error(ioe);
    }

    content = HtmlUtil.replaceMsWordCharacters(content);

    return content;
}

From source file:com.liferay.portlet.messageboards.service.impl.MBMessageLocalServiceImpl.java

License:Open Source License

public MBMessage addMessage(long userId, String userName, long groupId, long categoryId, long threadId,
        long parentMessageId, String subject, String body, String format,
        List<ObjectValuePair<String, InputStream>> inputStreamOVPs, boolean anonymous, double priority,
        boolean allowPingbacks, ServiceContext serviceContext) throws PortalException, SystemException {

    // Message//from w ww  .j a v a  2s. co m

    User user = userPersistence.findByPrimaryKey(userId);
    userName = user.isDefaultUser() ? userName : user.getFullName();
    subject = ModelHintsUtil.trimString(MBMessage.class.getName(), "subject", subject);

    PortletPreferences preferences = ServiceContextUtil.getPortletPreferences(serviceContext);

    if (preferences != null) {
        if (!MBUtil.isAllowAnonymousPosting(preferences)) {
            if (anonymous || user.isDefaultUser()) {
                throw new PrincipalException();
            }
        }
    }

    if (user.isDefaultUser()) {
        anonymous = true;
    }

    Date now = new Date();

    long messageId = counterLocalService.increment();

    body = SanitizerUtil.sanitize(user.getCompanyId(), groupId, userId, MBMessage.class.getName(), messageId,
            "text/" + format, body);

    validate(subject, body);

    subject = getSubject(subject, body);
    body = getBody(subject, body);

    MBMessage message = mbMessagePersistence.create(messageId);

    message.setUuid(serviceContext.getUuid());
    message.setGroupId(groupId);
    message.setCompanyId(user.getCompanyId());
    message.setUserId(user.getUserId());
    message.setUserName(userName);
    message.setCreateDate(serviceContext.getCreateDate(now));
    message.setModifiedDate(serviceContext.getModifiedDate(now));

    if (threadId > 0) {
        message.setThreadId(threadId);
    }

    if (priority != MBThreadConstants.PRIORITY_NOT_GIVEN) {
        message.setPriority(priority);
    }

    message.setAllowPingbacks(allowPingbacks);
    message.setStatus(WorkflowConstants.STATUS_DRAFT);
    message.setStatusByUserId(user.getUserId());
    message.setStatusByUserName(userName);
    message.setStatusDate(serviceContext.getModifiedDate(now));

    // Thread

    if (parentMessageId != MBMessageConstants.DEFAULT_PARENT_MESSAGE_ID) {
        MBMessage parentMessage = mbMessagePersistence.fetchByPrimaryKey(parentMessageId);

        if (parentMessage == null) {
            parentMessageId = MBMessageConstants.DEFAULT_PARENT_MESSAGE_ID;
        }
    }

    MBThread thread = null;

    if (threadId > 0) {
        thread = mbThreadPersistence.fetchByPrimaryKey(threadId);
    }

    if ((thread == null) || (parentMessageId == MBMessageConstants.DEFAULT_PARENT_MESSAGE_ID)) {

        thread = mbThreadLocalService.addThread(categoryId, message);
    }

    if ((priority != MBThreadConstants.PRIORITY_NOT_GIVEN) && (thread.getPriority() != priority)) {

        thread.setPriority(priority);

        mbThreadPersistence.update(thread, false);

        updatePriorities(thread.getThreadId(), priority);
    }

    // Message

    message.setCategoryId(categoryId);
    message.setThreadId(thread.getThreadId());
    message.setRootMessageId(thread.getRootMessageId());
    message.setParentMessageId(parentMessageId);
    message.setSubject(subject);
    message.setBody(body);
    message.setFormat(format);
    message.setAttachments(!inputStreamOVPs.isEmpty());
    message.setAnonymous(anonymous);

    if (message.isDiscussion()) {
        long classNameId = PortalUtil.getClassNameId((String) serviceContext.getAttribute("className"));
        long classPK = GetterUtil.getLong((String) serviceContext.getAttribute("classPK"));

        message.setClassNameId(classNameId);
        message.setClassPK(classPK);
    }

    mbMessagePersistence.update(message, false);

    // Attachments

    if (!inputStreamOVPs.isEmpty()) {
        long companyId = message.getCompanyId();
        long repositoryId = CompanyConstants.SYSTEM;
        String dirName = message.getAttachmentsDir();

        try {
            DLStoreUtil.deleteDirectory(companyId, repositoryId, dirName);
        } catch (NoSuchDirectoryException nsde) {
            if (_log.isDebugEnabled()) {
                _log.debug(nsde.getMessage());
            }
        }

        DLStoreUtil.addDirectory(companyId, repositoryId, dirName);

        for (int i = 0; i < inputStreamOVPs.size(); i++) {
            ObjectValuePair<String, InputStream> inputStreamOVP = inputStreamOVPs.get(i);

            String fileName = inputStreamOVP.getKey();
            InputStream inputStream = inputStreamOVP.getValue();

            try {
                DLStoreUtil.addFile(companyId, repositoryId, dirName + "/" + fileName, inputStream);
            } catch (DuplicateFileException dfe) {
                if (_log.isDebugEnabled()) {
                    _log.debug(dfe.getMessage());
                }
            }
        }
    }

    // Resources

    if (!message.isDiscussion()) {
        if (user.isDefaultUser()) {
            addMessageResources(message, true, true);
        } else if (serviceContext.isAddGroupPermissions() || serviceContext.isAddGuestPermissions()) {

            addMessageResources(message, serviceContext.isAddGroupPermissions(),
                    serviceContext.isAddGuestPermissions());
        } else {
            addMessageResources(message, serviceContext.getGroupPermissions(),
                    serviceContext.getGuestPermissions());
        }
    }

    // Asset

    updateAsset(userId, message, serviceContext.getAssetCategoryIds(), serviceContext.getAssetTagNames(),
            serviceContext.getAssetLinkEntryIds(), serviceContext.isAssetEntryVisible());

    // Expando

    ExpandoBridge expandoBridge = message.getExpandoBridge();

    expandoBridge.setAttributes(serviceContext);

    // Workflow

    WorkflowHandlerRegistryUtil.startWorkflowInstance(user.getCompanyId(), groupId, userId,
            message.getWorkflowClassName(), message.getMessageId(), message, serviceContext);

    // Testing roll back

    /*if (true) {
       throw new SystemException("Testing roll back");
    }*/

    return message;
}

From source file:com.liferay.portlet.messageboards.service.impl.MBMessageLocalServiceImpl.java

License:Open Source License

public MBMessage updateMessage(long userId, long messageId, String subject, String body,
        List<ObjectValuePair<String, InputStream>> inputStreamOVPs, List<String> existingFiles, double priority,
        boolean allowPingbacks, ServiceContext serviceContext) throws PortalException, SystemException {

    // Message//from w  w w.  j  a  v  a  2  s.co  m

    MBMessage message = mbMessagePersistence.findByPrimaryKey(messageId);

    subject = ModelHintsUtil.trimString(MBMessage.class.getName(), "subject", subject);
    body = SanitizerUtil.sanitize(message.getCompanyId(), message.getGroupId(), userId,
            MBMessage.class.getName(), messageId, "text/" + message.getFormat(), body);
    Date now = new Date();

    validate(subject, body);

    subject = getSubject(subject, body);
    body = getBody(subject, body);

    message.setModifiedDate(serviceContext.getModifiedDate(now));
    message.setSubject(subject);
    message.setBody(body);
    message.setAttachments(!inputStreamOVPs.isEmpty() || !existingFiles.isEmpty());
    message.setAllowPingbacks(allowPingbacks);

    if (priority != MBThreadConstants.PRIORITY_NOT_GIVEN) {
        message.setPriority(priority);
    }

    if (!message.isPending() && (serviceContext.getWorkflowAction() == WorkflowConstants.ACTION_SAVE_DRAFT)) {

        message.setStatus(WorkflowConstants.STATUS_DRAFT);
    }

    // Attachments

    long companyId = message.getCompanyId();
    long repositoryId = CompanyConstants.SYSTEM;
    String dirName = message.getAttachmentsDir();

    if (!inputStreamOVPs.isEmpty() || !existingFiles.isEmpty()) {
        try {
            DLStoreUtil.addDirectory(companyId, repositoryId, dirName);
        } catch (DuplicateDirectoryException dde) {
        }

        String[] fileNames = DLStoreUtil.getFileNames(companyId, repositoryId, dirName);

        for (String fileName : fileNames) {
            if (!existingFiles.contains(fileName)) {
                DLStoreUtil.deleteFile(companyId, repositoryId, fileName);
            }
        }

        for (int i = 0; i < inputStreamOVPs.size(); i++) {
            ObjectValuePair<String, InputStream> inputStreamOVP = inputStreamOVPs.get(i);

            String fileName = inputStreamOVP.getKey();
            InputStream inputStream = inputStreamOVP.getValue();

            try {
                DLStoreUtil.addFile(companyId, repositoryId, dirName + "/" + fileName, inputStream);
            } catch (DuplicateFileException dfe) {
            }
        }
    } else {
        try {
            DLStoreUtil.deleteDirectory(companyId, repositoryId, dirName);
        } catch (NoSuchDirectoryException nsde) {
        }
    }

    mbMessagePersistence.update(message, false);

    // Thread

    MBThread thread = mbThreadPersistence.findByPrimaryKey(message.getThreadId());

    if ((priority != MBThreadConstants.PRIORITY_NOT_GIVEN) && (thread.getPriority() != priority)) {

        thread.setPriority(priority);

        mbThreadPersistence.update(thread, false);

        updatePriorities(thread.getThreadId(), priority);
    }

    // Asset

    updateAsset(userId, message, serviceContext.getAssetCategoryIds(), serviceContext.getAssetTagNames(),
            serviceContext.getAssetLinkEntryIds());

    // Expando

    ExpandoBridge expandoBridge = message.getExpandoBridge();

    expandoBridge.setAttributes(serviceContext);

    // Workflow

    serviceContext.setAttribute("update", Boolean.TRUE.toString());

    WorkflowHandlerRegistryUtil.startWorkflowInstance(companyId, message.getGroupId(), userId,
            message.getWorkflowClassName(), message.getMessageId(), message, serviceContext);

    return message;
}

From source file:com.liferay.portlet.wiki.service.impl.WikiPageLocalServiceImpl.java

License:Open Source License

public WikiPage addPage(long userId, long nodeId, String title, double version, String content, String summary,
        boolean minorEdit, String format, boolean head, String parentTitle, String redirectTitle,
        ServiceContext serviceContext) throws PortalException, SystemException {

    // Page// w w  w  .  ja  v a 2  s .  co  m

    User user = userPersistence.findByPrimaryKey(userId);
    WikiNode node = wikiNodePersistence.findByPrimaryKey(nodeId);
    Date now = new Date();

    long pageId = counterLocalService.increment();

    content = SanitizerUtil.sanitize(user.getCompanyId(), node.getGroupId(), userId, WikiPage.class.getName(),
            pageId, "text/" + format, content);

    validate(title, nodeId, content, format);

    long resourcePrimKey = wikiPageResourceLocalService.getPageResourcePrimKey(nodeId, title);

    WikiPage page = wikiPagePersistence.create(pageId);

    page.setUuid(serviceContext.getUuid());
    page.setResourcePrimKey(resourcePrimKey);
    page.setGroupId(node.getGroupId());
    page.setCompanyId(user.getCompanyId());
    page.setUserId(user.getUserId());
    page.setUserName(user.getFullName());
    page.setCreateDate(serviceContext.getCreateDate(now));
    page.setModifiedDate(serviceContext.getModifiedDate(now));
    page.setNodeId(nodeId);
    page.setTitle(title);
    page.setVersion(version);
    page.setMinorEdit(minorEdit);
    page.setContent(content);
    page.setStatus(WorkflowConstants.STATUS_DRAFT);
    page.setSummary(summary);
    page.setFormat(format);
    page.setHead(head);
    page.setParentTitle(parentTitle);
    page.setRedirectTitle(redirectTitle);

    wikiPagePersistence.update(page, false);

    // Resources

    if (serviceContext.isAddGroupPermissions() || serviceContext.isAddGuestPermissions()) {

        addPageResources(page, serviceContext.isAddGroupPermissions(), serviceContext.isAddGuestPermissions());
    } else {
        addPageResources(page, serviceContext.getGroupPermissions(), serviceContext.getGuestPermissions());
    }

    // Node

    node.setLastPostDate(serviceContext.getModifiedDate(now));

    wikiNodePersistence.update(node, false);

    // Asset

    updateAsset(userId, page, serviceContext.getAssetCategoryIds(), serviceContext.getAssetTagNames(),
            serviceContext.getAssetLinkEntryIds());

    // Expando

    ExpandoBridge expandoBridge = page.getExpandoBridge();

    expandoBridge.setAttributes(serviceContext);

    // Message boards

    if (PropsValues.WIKI_PAGE_COMMENTS_ENABLED) {
        mbMessageLocalService.addDiscussionMessage(userId, page.getUserName(), page.getGroupId(),
                WikiPage.class.getName(), resourcePrimKey, WorkflowConstants.ACTION_PUBLISH);
    }

    // Workflow

    WorkflowHandlerRegistryUtil.startWorkflowInstance(user.getCompanyId(), page.getGroupId(), userId,
            WikiPage.class.getName(), page.getPageId(), page, serviceContext);

    return page;
}

From source file:com.liferay.portlet.wiki.service.impl.WikiPageLocalServiceImpl.java

License:Open Source License

public WikiPage updatePage(long userId, long nodeId, String title, double version, String content,
        String summary, boolean minorEdit, String format, String parentTitle, String redirectTitle,
        ServiceContext serviceContext) throws PortalException, SystemException {

    // Page/*from w  w w  .jav a  2 s .c o m*/

    User user = userPersistence.findByPrimaryKey(userId);
    Date now = new Date();

    WikiPage oldPage = null;

    try {
        oldPage = wikiPagePersistence.findByN_T_First(nodeId, title, null);
    } catch (NoSuchPageException nspe) {
        return addPage(userId, nodeId, title, WikiPageConstants.VERSION_DEFAULT, content, summary, minorEdit,
                format, true, parentTitle, redirectTitle, serviceContext);
    }

    long pageId = 0;

    if (oldPage.isApproved()) {
        pageId = counterLocalService.increment();
    } else {
        pageId = oldPage.getPageId();
    }

    content = SanitizerUtil.sanitize(user.getCompanyId(), oldPage.getGroupId(), userId,
            WikiPage.class.getName(), pageId, "text/" + format, content);

    validate(nodeId, content, format);

    double oldVersion = oldPage.getVersion();

    if ((version > 0) && (version != oldVersion)) {
        throw new PageVersionException();
    }

    long resourcePrimKey = wikiPageResourceLocalService.getPageResourcePrimKey(nodeId, title);
    long groupId = oldPage.getGroupId();

    WikiPage page = oldPage;

    double newVersion = oldVersion;

    if (oldPage.isApproved()) {
        newVersion = MathUtil.format(oldVersion + 0.1, 1, 1);

        page = wikiPagePersistence.create(pageId);
    }

    page.setResourcePrimKey(resourcePrimKey);
    page.setGroupId(groupId);
    page.setCompanyId(user.getCompanyId());
    page.setUserId(user.getUserId());
    page.setUserName(user.getFullName());
    page.setCreateDate(serviceContext.getModifiedDate(now));
    page.setModifiedDate(serviceContext.getModifiedDate(now));
    page.setNodeId(nodeId);
    page.setTitle(title);
    page.setVersion(newVersion);
    page.setMinorEdit(minorEdit);
    page.setContent(content);

    if (oldPage.isPending()) {
        page.setStatus(oldPage.getStatus());
    } else {
        page.setStatus(WorkflowConstants.STATUS_DRAFT);
    }

    page.setSummary(summary);
    page.setFormat(format);

    if (Validator.isNotNull(parentTitle)) {
        page.setParentTitle(parentTitle);
    }

    if (Validator.isNotNull(redirectTitle)) {
        page.setRedirectTitle(redirectTitle);
    }

    wikiPagePersistence.update(page, false);

    // Expando

    ExpandoBridge expandoBridge = page.getExpandoBridge();

    expandoBridge.setAttributes(serviceContext);

    // Node

    WikiNode node = wikiNodePersistence.findByPrimaryKey(nodeId);

    node.setLastPostDate(serviceContext.getModifiedDate(now));

    wikiNodePersistence.update(node, false);

    // Asset

    updateAsset(userId, page, serviceContext.getAssetCategoryIds(), serviceContext.getAssetTagNames(),
            serviceContext.getAssetLinkEntryIds());

    // Workflow

    WorkflowHandlerRegistryUtil.startWorkflowInstance(user.getCompanyId(), page.getGroupId(), userId,
            WikiPage.class.getName(), page.getPageId(), page, serviceContext);

    return page;
}

From source file:com.liferay.wiki.service.impl.WikiPageLocalServiceImpl.java

License:Open Source License

@Override
public WikiPage addPage(long userId, long nodeId, String title, double version, String content, String summary,
        boolean minorEdit, String format, boolean head, String parentTitle, String redirectTitle,
        ServiceContext serviceContext) throws PortalException {

    // Page//from   www .  j a  v a  2 s.c om

    User user = userPersistence.findByPrimaryKey(userId);
    WikiNode node = wikiNodePersistence.findByPrimaryKey(nodeId);
    Date now = new Date();

    long pageId = counterLocalService.increment();

    content = SanitizerUtil.sanitize(user.getCompanyId(), node.getGroupId(), userId, WikiPage.class.getName(),
            pageId, "text/" + format, content);

    validate(title, nodeId, content, format);

    long resourcePrimKey = wikiPageResourceLocalService.getPageResourcePrimKey(node.getGroupId(), nodeId,
            title);

    WikiPage page = wikiPagePersistence.create(pageId);

    page.setUuid(serviceContext.getUuid());
    page.setResourcePrimKey(resourcePrimKey);
    page.setGroupId(node.getGroupId());
    page.setCompanyId(user.getCompanyId());
    page.setUserId(user.getUserId());
    page.setUserName(user.getFullName());
    page.setNodeId(nodeId);
    page.setTitle(title);
    page.setVersion(version);
    page.setMinorEdit(minorEdit);
    page.setContent(content);
    page.setSummary(summary);
    page.setFormat(format);
    page.setHead(head);
    page.setParentTitle(parentTitle);
    page.setRedirectTitle(redirectTitle);
    page.setStatus(WorkflowConstants.STATUS_DRAFT);
    page.setStatusByUserId(userId);
    page.setStatusDate(serviceContext.getModifiedDate(now));
    page.setExpandoBridgeAttributes(serviceContext);

    wikiPagePersistence.update(page);

    // Resources

    if (serviceContext.isAddGroupPermissions() || serviceContext.isAddGuestPermissions()) {

        addPageResources(page, serviceContext.isAddGroupPermissions(), serviceContext.isAddGuestPermissions());
    } else {
        addPageResources(page, serviceContext.getGroupPermissions(), serviceContext.getGuestPermissions());
    }

    // Node

    node.setLastPostDate(serviceContext.getModifiedDate(now));

    wikiNodePersistence.update(node);

    // Asset

    updateAsset(userId, page, serviceContext.getAssetCategoryIds(), serviceContext.getAssetTagNames(),
            serviceContext.getAssetLinkEntryIds(), serviceContext.getAssetPriority());

    // Message boards

    WikiGroupServiceOverriddenConfiguration wikiGroupServiceOverriddenConfiguration = configurationProvider
            .getConfiguration(WikiGroupServiceOverriddenConfiguration.class,
                    new GroupServiceSettingsLocator(node.getGroupId(), WikiConstants.SERVICE_NAME));

    if (wikiGroupServiceOverriddenConfiguration.pageCommentsEnabled()) {
        CommentManagerUtil.addDiscussion(userId, page.getGroupId(), WikiPage.class.getName(), resourcePrimKey,
                page.getUserName());
    }

    // Workflow

    page = startWorkflowInstance(userId, page, serviceContext);

    return page;
}

From source file:com.liferay.wiki.service.impl.WikiPageLocalServiceImpl.java

License:Open Source License

protected WikiPage updatePage(long userId, WikiPage oldPage, long newNodeId, String newTitle, String content,
        String summary, boolean minorEdit, String format, String parentTitle, String redirectTitle,
        ServiceContext serviceContext) throws PortalException {

    User user = userPersistence.findByPrimaryKey(userId);

    long pageId = 0;

    if (oldPage.isApproved()) {
        pageId = counterLocalService.increment();
    } else {//from  w  w w . j  a  va  2  s .c o  m
        pageId = oldPage.getPageId();
    }

    content = SanitizerUtil.sanitize(user.getCompanyId(), oldPage.getGroupId(), userId,
            WikiPage.class.getName(), pageId, "text/" + format, content);

    long nodeId = oldPage.getNodeId();

    if (newNodeId != 0) {
        nodeId = newNodeId;
    }

    if (!format.equals(oldPage.getFormat())) {
        validate(nodeId, content, format);
    }

    serviceContext.validateModifiedDate(oldPage, PageVersionException.class);

    long resourcePrimKey = wikiPageResourceLocalService.getPageResourcePrimKey(oldPage.getGroupId(),
            oldPage.getNodeId(), oldPage.getTitle());

    Date now = new Date();

    WikiPage page = oldPage;

    double newVersion = oldPage.getVersion();

    if (oldPage.isApproved()) {
        newVersion = MathUtil.format(oldPage.getVersion() + 0.1, 1, 1);

        page = wikiPagePersistence.create(pageId);

        page.setUuid(serviceContext.getUuid());
    }

    page.setResourcePrimKey(resourcePrimKey);
    page.setGroupId(oldPage.getGroupId());
    page.setCompanyId(user.getCompanyId());
    page.setUserId(user.getUserId());
    page.setUserName(user.getFullName());
    page.setCreateDate(oldPage.getCreateDate());
    page.setNodeId(nodeId);
    page.setTitle(Validator.isNull(newTitle) ? oldPage.getTitle() : newTitle);
    page.setVersion(newVersion);
    page.setMinorEdit(minorEdit);
    page.setContent(content);

    if (oldPage.isPending()) {
        page.setStatus(oldPage.getStatus());
    } else {
        page.setStatus(WorkflowConstants.STATUS_DRAFT);
    }

    page.setSummary(summary);
    page.setFormat(format);

    if (Validator.isNotNull(parentTitle)) {
        page.setParentTitle(parentTitle);
    }

    if (Validator.isNotNull(redirectTitle)) {
        page.setRedirectTitle(redirectTitle);
    }

    ExpandoBridgeUtil.setExpandoBridgeAttributes(oldPage.getExpandoBridge(), page.getExpandoBridge(),
            serviceContext);

    wikiPagePersistence.update(page);

    // Node

    WikiNode node = wikiNodePersistence.findByPrimaryKey(nodeId);

    node.setLastPostDate(serviceContext.getModifiedDate(now));

    wikiNodePersistence.update(node);

    // Asset

    updateAsset(userId, page, serviceContext.getAssetCategoryIds(), serviceContext.getAssetTagNames(),
            serviceContext.getAssetLinkEntryIds(), serviceContext.getAssetPriority());

    // Workflow

    page = startWorkflowInstance(userId, page, serviceContext);

    return page;
}