diff --git a/src/Umbraco.Core/Macros/MacroTagParser.cs b/src/Umbraco.Core/Macros/MacroTagParser.cs
index 62f81ee91d..ad4b180528 100644
--- a/src/Umbraco.Core/Macros/MacroTagParser.cs
+++ b/src/Umbraco.Core/Macros/MacroTagParser.cs
@@ -66,8 +66,7 @@ namespace Umbraco.Core.Macros
}
}
-
- var macroAlias = attributes["macroalias"] ?? attributes["alias"];
+ var macroAlias = attributes.ContainsKey("macroalias") ? attributes["macroalias"] : attributes["alias"];
//call the callback now that we have the macro parsed
macroFoundCallback(macroAlias, attributes);
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/en.xml b/src/Umbraco.Web.UI/umbraco/config/lang/en.xml
index 5ed73be750..6796e19173 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/en.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/en.xml
@@ -23,6 +23,7 @@
Notifications
Public access
Publish
+ Unpublish
Reload nodes
Republish entire site
Permissions
@@ -779,6 +780,7 @@ To manage your website, simply open the umbraco back office and start adding con
Xslt could not be saved, check file permissions
Xslt saved
No errors in xslt
+ Content unpublished
Uses CSS syntax ex: h1, .redHeader, .blueTex
diff --git a/src/Umbraco.Web/Routing/PublishedContentRequestBuilder.cs b/src/Umbraco.Web/Routing/PublishedContentRequestBuilder.cs
index d419191f5b..462f8915c9 100644
--- a/src/Umbraco.Web/Routing/PublishedContentRequestBuilder.cs
+++ b/src/Umbraco.Web/Routing/PublishedContentRequestBuilder.cs
@@ -203,6 +203,8 @@ namespace Umbraco.Web.Routing
// expected content anymore and the alternate template does not apply.
_publishedContentRequest.AlternateTemplateAlias = _umbracoContext.HttpContext.Request["altTemplate"];
+ _umbracoContext.HttpContext.Trace.Write(string.Format("test {0}", _publishedContentRequest.AlternateTemplateAlias));
+
// handle "not found", follow internal redirects, validate access, template
// because these might loop, we have to have some sort of infinite loop detection
int i = 0, j = 0;
diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/editContent.aspx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/editContent.aspx.cs
index 29786bd54e..82a3b98935 100644
--- a/src/Umbraco.Web/umbraco.presentation/umbraco/editContent.aspx.cs
+++ b/src/Umbraco.Web/umbraco.presentation/umbraco/editContent.aspx.cs
@@ -362,6 +362,9 @@ namespace umbraco.cms.presentation
library.UnPublishSingleNode(_document.Id);
+ Current.ClientTools.SyncTree(_document.Path, true);
+ ClientTools.ShowSpeechBubble(speechBubbleIcon.success, ui.Text("unpublish"), ui.Text("speechBubbles", "contentUnpublished"));
+
//newPublishStatus.Text = "0";
}
diff --git a/src/umbraco.businesslogic/ApplicationTree.cs b/src/umbraco.businesslogic/ApplicationTree.cs
index d5a4ff4ffa..67faf9b7ec 100644
--- a/src/umbraco.businesslogic/ApplicationTree.cs
+++ b/src/umbraco.businesslogic/ApplicationTree.cs
@@ -260,6 +260,10 @@ namespace umbraco.BusinessLogic
LoadXml(doc =>
{
+ var el = doc.Root.Elements("add").SingleOrDefault(x => x.Attribute("alias").Value == alias && x.Attribute("application").Value == applicationAlias);
+
+ if (el == null)
+ {
doc.Root.Add(new XElement("add",
new XAttribute("silent", silent),
new XAttribute("initialize", initialize),
@@ -272,6 +276,7 @@ namespace umbraco.BusinessLogic
new XAttribute("assembly", assemblyName),
new XAttribute("type", type),
new XAttribute("action", string.IsNullOrEmpty(action) ? "" : action)));
+ }
}, true);
}
diff --git a/src/umbraco.businesslogic/Log.cs b/src/umbraco.businesslogic/Log.cs
index 86f38da8ce..89ccc31587 100644
--- a/src/umbraco.businesslogic/Log.cs
+++ b/src/umbraco.businesslogic/Log.cs
@@ -86,8 +86,7 @@ namespace umbraco.BusinessLogic
if (UmbracoSettings.DisabledLogTypes != null &&
UmbracoSettings.DisabledLogTypes.SelectSingleNode(String.Format("//logTypeAlias [. = '{0}']", type.ToString().ToLower())) == null)
{
-
- if (comment.Length > 3999)
+ if (comment != null && comment.Length > 3999)
comment = comment.Substring(0, 3955) + "...";
if (UmbracoSettings.EnableAsyncLogging)