/// <summary> /// Clears the document cache and removes the document from the xml db cache. /// This means the node gets unpublished from the website. /// </summary> /// <param name="documentId">The document id.</param> public virtual void ClearDocumentCache(int documentId) { // Get the document Document d = new Document(documentId); cms.businesslogic.DocumentCacheEventArgs e = new umbraco.cms.businesslogic.DocumentCacheEventArgs(); FireBeforeClearDocumentCache(d, e); if (!e.Cancel) { XmlNode x; // remove from xml db cache d.XmlRemoveFromDB(); // Check if node present, before cloning x = XmlContentInternal.GetElementById(d.Id.ToString()); if (x == null) { return; } // We need to lock content cache here, because we cannot allow other threads // making changes at the same time, they need to be queued lock (_xmlContentInternalSyncLock) { // Make copy of memory content, we cannot make changes to the same document // the is read from elsewhere XmlDocument xmlContentCopy = CloneXmlDoc(XmlContentInternal); // Find the document in the xml cache x = xmlContentCopy.GetElementById(d.Id.ToString()); if (x != null) { // The document already exists in cache, so repopulate it x.ParentNode.RemoveChild(x); XmlContentInternal = xmlContentCopy; ClearContextCache(); } } if (x != null) { // Run Handler umbraco.BusinessLogic.Actions.Action.RunActionHandlers(d, ActionUnPublish.Instance); } // update sitemapprovider if (SiteMap.Provider is presentation.nodeFactory.UmbracoSiteMapProvider) { presentation.nodeFactory.UmbracoSiteMapProvider prov = (presentation.nodeFactory.UmbracoSiteMapProvider)SiteMap.Provider; prov.RemoveNode(d.Id); } FireAfterClearDocumentCache(d, e); } }
/// <summary> /// Used by all overloaded publish methods to do the actual "noderepresentation to xml" /// </summary> /// <param name="d"></param> /// <param name="xmlContentCopy"></param> public static void PublishNodeDo(Document d, XmlDocument xmlContentCopy, bool updateSitemapProvider) { // check if document *is* published, it could be unpublished by an event if (d.Published) { int parentId = d.Level == 1 ? -1 : d.Parent.Id; AppendDocumentXml(d.Id, d.Level, parentId, getPreviewOrPublishedNode(d, xmlContentCopy, false), xmlContentCopy); // update sitemapprovider if (updateSitemapProvider && SiteMap.Provider is presentation.nodeFactory.UmbracoSiteMapProvider) { presentation.nodeFactory.UmbracoSiteMapProvider prov = (presentation.nodeFactory.UmbracoSiteMapProvider)SiteMap.Provider; prov.UpdateNode(new umbraco.NodeFactory.Node(d.Id, true)); } } }