Written by The Jahia Team
 
Developers
Sysadmins
   Estimated reading time:
7.2.2.1

Modifications have been made in the edit mode and have been published but they're not present in live, do you know why?

There isn't any error in the logs.

 

Answer

One explanation to this behavior is the presence of User Generated Content (UGC).

The principle of UGC is explained there: when a user creates a content in live mode, a specific mixin and properties will be set in order to prevent any overwriting if a publication is being made from the edit workspace to the live workspace.

The same principles is applied if you're modifying that thanks to a customer action directly in the live workspace

In order to know if it's your case, you can:

  • Open the JCR Repository Browser (DX_URL/modules/tools/jcrBrowser.jsp) and navigate to the node you have modified
  • Switch to the live workspace
  • Check for the presence of the mixin jmix:liveProperties. If it's there, it means this node will be handle as UGC.

In order to know the "scope" of this UGC, you can also look for the property j:liveProperties: it will contains the list of the properties that have been modified in the live workspace and won't be overwritten in the case of a publication.

 

If you want to remove this mixin and property, you can:

  • Open the JCR Console and execute the following script (do not forget to change the variable nodeType and path)
JCRObservationManager.setAllEventListenersDisabled(true);
def nodeType = "[jnt:user]";
def path = "/";
final String stmt = "SELECT * FROM " + nodeType + " where [jcr:mixinTypes] = 'jmix:liveProperties' AND ISDESCENDANTNODE('" + path + "');
org.jahia.services.content.MultipleNodeIterator iterator = session.getWorkspace().getQueryManager().createQuery(stmt, Query.JCR_SQL2).execute().getNodes();
log.info("Number of affected nodes :"+iterator.getSize());
while (iterator.hasNext()) {
  final JCRNodeWrapper node = (JCRNodeWrapper) iterator.nextNode();
  log.info("Live Properties :"+node.getPropertyAsString("j:liveProperties"));
  node.getProperty("j:liveProperties").remove();
  node.removeMixin("jmix:liveProperties");
  log.info("liveProperties removed for " + node.getPropertyAsString('j:firstName'));
}
session.save();
JCRObservationManager.setAllEventListenersDisabled(false);

It will of course only correct the current state of your nodes but your custom code is responsible, you'll have to correct it