diff --git a/src/Umbraco.Core/Models/ContentExtensions.cs b/src/Umbraco.Core/Models/ContentExtensions.cs index 15e8d5b99b..29f3f26a81 100644 --- a/src/Umbraco.Core/Models/ContentExtensions.cs +++ b/src/Umbraco.Core/Models/ContentExtensions.cs @@ -16,6 +16,7 @@ using Umbraco.Core.Models.Membership; using Umbraco.Core.Strings; using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.UnitOfWork; +using Umbraco.Core.Services; namespace Umbraco.Core.Models { @@ -105,6 +106,50 @@ namespace Umbraco.Core.Models } #endregion + /// + /// Checks if the IContentBase has children + /// + /// + /// + /// + /// + /// This is a bit of a hack because we need to type check! + /// + internal static bool HasChildren(IContentBase content, ServiceContext services) + { + if (content is IContent) + { + return services.ContentService.HasChildren(content.Id); + } + if (content is IMedia) + { + return services.MediaService.HasChildren(content.Id); + } + return false; + } + + /// + /// Returns the children for the content base item + /// + /// + /// + /// + /// + /// This is a bit of a hack because we need to type check! + /// + internal static IEnumerable Children(IContentBase content, ServiceContext services) + { + if (content is IContent) + { + return services.ContentService.GetChildren(content.Id); + } + if (content is IMedia) + { + return services.MediaService.GetChildren(content.Id); + } + return null; + } + /// /// Set property values by alias with an annonymous object /// diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index d46e282b1e..c5535f385d 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -772,7 +772,6 @@ - diff --git a/src/Umbraco.Core/Xml/XmlNodeExtensions.cs b/src/Umbraco.Core/Xml/XmlNodeExtensions.cs deleted file mode 100644 index 1af6ee0983..0000000000 --- a/src/Umbraco.Core/Xml/XmlNodeExtensions.cs +++ /dev/null @@ -1,169 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using System.Xml; -using System.Xml.XPath; - -// source: mvpxml.codeplex.com - -namespace Umbraco.Core.Xml -{ - /// - /// Provides extensions to XmlNode. - /// - internal static class XmlNodeExtensions - { - /// - /// Selects a list of XmlNode matching an XPath expression. - /// - /// A source XmlNode. - /// An XPath expression. - /// A set of XPathVariables. - /// The list of XmlNode matching the XPath expression. - /// - /// If is null, or is empty, or contains only one single - /// value which itself is null, then variables are ignored. - /// The XPath expression should reference variables as $var. - /// - public static XmlNodeList SelectNodes(this XmlNode source, string expression, IEnumerable variables) - { - var av = variables == null ? null : variables.ToArray(); - return SelectNodes(source, expression, av); - } - - /// - /// Selects a list of XmlNode matching an XPath expression. - /// - /// A source XmlNode. - /// An XPath expression. - /// A set of XPathVariables. - /// The list of XmlNode matching the XPath expression. - /// - /// If is null, or is empty, or contains only one single - /// value which itself is null, then variables are ignored. - /// The XPath expression should reference variables as $var. - /// - public static XmlNodeList SelectNodes(this XmlNode source, XPathExpression expression, IEnumerable variables) - { - var av = variables == null ? null : variables.ToArray(); - return SelectNodes(source, expression, av); - } - - /// - /// Selects a list of XmlNode matching an XPath expression. - /// - /// A source XmlNode. - /// An XPath expression. - /// A set of XPathVariables. - /// The list of XmlNode matching the XPath expression. - /// - /// If is null, or is empty, or contains only one single - /// value which itself is null, then variables are ignored. - /// The XPath expression should reference variables as $var. - /// - public static XmlNodeList SelectNodes(this XmlNode source, string expression, params XPathVariable[] variables) - { - if (variables == null || variables.Length == 0 || variables[0] == null) - return source.SelectNodes(expression); - - var iterator = source.CreateNavigator().Select(expression, variables); - return XmlNodeListFactory.CreateNodeList(iterator); - } - - /// - /// Selects a list of XmlNode matching an XPath expression. - /// - /// A source XmlNode. - /// An XPath expression. - /// A set of XPathVariables. - /// The list of XmlNode matching the XPath expression. - /// - /// If is null, or is empty, or contains only one single - /// value which itself is null, then variables are ignored. - /// The XPath expression should reference variables as $var. - /// - public static XmlNodeList SelectNodes(this XmlNode source, XPathExpression expression, params XPathVariable[] variables) - { - if (variables == null || variables.Length == 0 || variables[0] == null) - return source.SelectNodes(expression); - - var iterator = source.CreateNavigator().Select(expression, variables); - return XmlNodeListFactory.CreateNodeList(iterator); - } - - /// - /// Selects the first XmlNode that matches an XPath expression. - /// - /// A source XmlNode. - /// An XPath expression. - /// A set of XPathVariables. - /// The first XmlNode that matches the XPath expression. - /// - /// If is null, or is empty, or contains only one single - /// value which itself is null, then variables are ignored. - /// The XPath expression should reference variables as $var. - /// - public static XmlNode SelectSingleNode(this XmlNode source, string expression, IEnumerable variables) - { - var av = variables == null ? null : variables.ToArray(); - return SelectSingleNode(source, expression, av); - } - - /// - /// Selects the first XmlNode that matches an XPath expression. - /// - /// A source XmlNode. - /// An XPath expression. - /// A set of XPathVariables. - /// The first XmlNode that matches the XPath expression. - /// - /// If is null, or is empty, or contains only one single - /// value which itself is null, then variables are ignored. - /// The XPath expression should reference variables as $var. - /// - public static XmlNode SelectSingleNode(this XmlNode source, XPathExpression expression, IEnumerable variables) - { - var av = variables == null ? null : variables.ToArray(); - return SelectSingleNode(source, expression, av); - } - - /// - /// Selects the first XmlNode that matches an XPath expression. - /// - /// A source XmlNode. - /// An XPath expression. - /// A set of XPathVariables. - /// The first XmlNode that matches the XPath expression. - /// - /// If is null, or is empty, or contains only one single - /// value which itself is null, then variables are ignored. - /// The XPath expression should reference variables as $var. - /// - public static XmlNode SelectSingleNode(this XmlNode source, string expression, params XPathVariable[] variables) - { - if (variables == null || variables.Length == 0 || variables[0] == null) - return source.SelectSingleNode(expression); - - return SelectNodes(source, expression, variables).Cast().FirstOrDefault(); - } - - /// - /// Selects the first XmlNode that matches an XPath expression. - /// - /// A source XmlNode. - /// An XPath expression. - /// A set of XPathVariables. - /// The first XmlNode that matches the XPath expression. - /// - /// If is null, or is empty, or contains only one single - /// value which itself is null, then variables are ignored. - /// The XPath expression should reference variables as $var. - /// - public static XmlNode SelectSingleNode(this XmlNode source, XPathExpression expression, params XPathVariable[] variables) - { - if (variables == null || variables.Length == 0 || variables[0] == null) - return source.SelectSingleNode(expression); - - return SelectNodes(source, expression, variables).Cast().FirstOrDefault(); - } - } -} diff --git a/src/Umbraco.Core/XmlExtensions.cs b/src/Umbraco.Core/XmlExtensions.cs index fee2aba0e5..ec53f0521a 100644 --- a/src/Umbraco.Core/XmlExtensions.cs +++ b/src/Umbraco.Core/XmlExtensions.cs @@ -1,6 +1,10 @@ using System; +using System.Collections.Generic; +using System.Linq; using System.Xml; using System.Xml.Linq; +using System.Xml.XPath; +using Umbraco.Core.Xml; namespace Umbraco.Core { @@ -9,6 +13,45 @@ namespace Umbraco.Core /// internal static class XmlExtensions { + static XPathNodeIterator Select(string expression, XPathNavigator source, params XPathVariable[] variables) + { + var expr = source.Compile(expression); + var context = new DynamicContext(); + foreach (var variable in variables) + context.AddVariable(variable.Name, variable.Value); + expr.SetContext(context); + return source.Select(expr); + } + + public static XmlNodeList SelectNodes(this XmlNode source, string expression, IEnumerable variables) + { + var av = variables == null ? null : variables.ToArray(); + return SelectNodes(source, expression, av); + } + + public static XmlNodeList SelectNodes(this XmlNode source, string expression, params XPathVariable[] variables) + { + if (variables == null || variables.Length == 0 || variables[0] == null) + return source.SelectNodes(expression); + + var iterator = Select(expression, source.CreateNavigator(), variables); + return XmlNodeListFactory.CreateNodeList(iterator); + } + + public static XmlNode SelectSingleNode(this XmlNode source, string expression, IEnumerable variables) + { + var av = variables == null ? null : variables.ToArray(); + return SelectSingleNode(source, expression, av); + } + + public static XmlNode SelectSingleNode(this XmlNode source, string expression, params XPathVariable[] variables) + { + if (variables == null || variables.Length == 0 || variables[0] == null) + return source.SelectSingleNode(expression); + + return SelectNodes(source, expression, variables).Cast().FirstOrDefault(); + } + /// /// Converts from an XDocument to an XmlDocument /// diff --git a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj index 3e3540af1f..dcd442c727 100644 --- a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj +++ b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj @@ -451,6 +451,13 @@ EditMacro.aspx ASPXCodeBehind + + moveOrCopy.aspx + ASPXCodeBehind + + + moveOrCopy.aspx + sort.aspx ASPXCodeBehind diff --git a/src/Umbraco.Web.UI/config/ClientDependency.config b/src/Umbraco.Web.UI/config/ClientDependency.config index e71cef5626..4c003050b6 100644 --- a/src/Umbraco.Web.UI/config/ClientDependency.config +++ b/src/Umbraco.Web.UI/config/ClientDependency.config @@ -10,7 +10,7 @@ NOTES: * Compression/Combination/Minification is not enabled unless debug="false" is specified on the 'compiliation' element in the web.config * A new version will invalidate both client and server cache and create new persisted files --> - + diff --git a/src/Umbraco.Web.UI/umbraco/dialogs/MoveOrCopy.aspx.cs b/src/Umbraco.Web.UI/umbraco/dialogs/MoveOrCopy.aspx.cs new file mode 100644 index 0000000000..b5af29be21 --- /dev/null +++ b/src/Umbraco.Web.UI/umbraco/dialogs/MoveOrCopy.aspx.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; + +namespace Umbraco.Web.UI.Umbraco.Dialogs +{ + public partial class MoveOrCopy : global::umbraco.dialogs.moveOrCopy + { + } +} \ No newline at end of file diff --git a/src/Umbraco.Web.UI/umbraco/dialogs/MoveOrCopy.aspx.designer.cs b/src/Umbraco.Web.UI/umbraco/dialogs/MoveOrCopy.aspx.designer.cs new file mode 100644 index 0000000000..7b00ec6d41 --- /dev/null +++ b/src/Umbraco.Web.UI/umbraco/dialogs/MoveOrCopy.aspx.designer.cs @@ -0,0 +1,15 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Umbraco.Web.UI.Umbraco.Dialogs { + + + public partial class MoveOrCopy { + } +} diff --git a/src/Umbraco.Web.UI/umbraco/dialogs/moveOrCopy.aspx b/src/Umbraco.Web.UI/umbraco/dialogs/moveOrCopy.aspx index 219b46d688..ea5cef2a8a 100644 --- a/src/Umbraco.Web.UI/umbraco/dialogs/moveOrCopy.aspx +++ b/src/Umbraco.Web.UI/umbraco/dialogs/moveOrCopy.aspx @@ -1,4 +1,4 @@ -<%@ Page Language="c#" CodeBehind="moveOrCopy.aspx.cs" MasterPageFile="../masterpages/umbracoDialog.Master" AutoEventWireup="True" Inherits="umbraco.dialogs.moveOrCopy" %> +<%@ Page Language="c#" CodeBehind="moveOrCopy.aspx.cs" MasterPageFile="../masterpages/umbracoDialog.Master" AutoEventWireup="True" Inherits="Umbraco.Web.UI.Umbraco.Dialogs.MoveOrCopy" %> <%@ Register TagPrefix="umb" Namespace="ClientDependency.Core.Controls" Assembly="ClientDependency.Core" %> <%@ Register TagPrefix="cc1" Namespace="umbraco.uicontrols" Assembly="controls" %> <%@ Register Src="../controls/Tree/TreeControl.ascx" TagName="TreeControl" TagPrefix="umbraco" %> diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index 1149d70772..84c3a4a92f 100644 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -510,6 +510,9 @@ ASPXCodeBehind + + ASPXCodeBehind + ASPXCodeBehind @@ -1285,13 +1288,6 @@ insertTable.aspx - - moveOrCopy.aspx - ASPXCodeBehind - - - moveOrCopy.aspx - notifications.aspx ASPXCodeBehind @@ -1873,7 +1869,6 @@ - diff --git a/src/Umbraco.Web/umbraco.presentation/content.cs b/src/Umbraco.Web/umbraco.presentation/content.cs index bc053538f6..9270e57cc0 100644 --- a/src/Umbraco.Web/umbraco.presentation/content.cs +++ b/src/Umbraco.Web/umbraco.presentation/content.cs @@ -406,7 +406,24 @@ namespace umbraco } else { + //check the current parent id + var currParentId = currentNode.AttributeValue("parentID"); + + //update the node with it's new values TransferValuesFromDocumentXmlToPublishedXml(docNode, currentNode); + + //If the node is being moved we also need to ensure that it exists under the new parent! + // http://issues.umbraco.org/issue/U4-2312 + // we were never checking this before and instead simply changing the parentId value but not + // changing the actual parent. + + //check the new parent + if (currParentId != currentNode.AttributeValue("parentID")) + { + //ok, we've actually got to move the node + parentNode.AppendChild(currentNode); + } + } // TODO: Update with new schema! diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/moveOrCopy.aspx b/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/moveOrCopy.aspx deleted file mode 100644 index 219b46d688..0000000000 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/moveOrCopy.aspx +++ /dev/null @@ -1,91 +0,0 @@ -<%@ Page Language="c#" CodeBehind="moveOrCopy.aspx.cs" MasterPageFile="../masterpages/umbracoDialog.Master" AutoEventWireup="True" Inherits="umbraco.dialogs.moveOrCopy" %> -<%@ Register TagPrefix="umb" Namespace="ClientDependency.Core.Controls" Assembly="ClientDependency.Core" %> -<%@ Register TagPrefix="cc1" Namespace="umbraco.uicontrols" Assembly="controls" %> -<%@ Register Src="../controls/Tree/TreeControl.ascx" TagName="TreeControl" TagPrefix="umbraco" %> - - - - - - - - - - - - - - - - - - - - - - - -
-

- <%= umbraco.ui.Text("moveOrCopy","noNodeSelected") %>

-
-
- - - - - - * - - - -

- -   - <%=umbraco.ui.Text("general", "or", this.getUser())%>   - <%=umbraco.ui.Text("general", "cancel", this.getUser())%> -

-
-
diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/moveOrCopy.aspx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/moveOrCopy.aspx.cs index ebad6f2151..2cff12eb51 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/moveOrCopy.aspx.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/moveOrCopy.aspx.cs @@ -1,13 +1,14 @@ -using System; +using System; using System.Collections; using System.Web.UI; using System.Web.UI.WebControls; using System.Xml; +using Umbraco.Core; using Umbraco.Core.IO; +using Umbraco.Core.Models; using umbraco.BasePages; using umbraco.cms.businesslogic.web; using umbraco.presentation; -using umbraco.cms.businesslogic.media; using System.Linq; using umbraco.cms.businesslogic; using umbraco.cms.presentation.user; @@ -24,13 +25,13 @@ namespace umbraco.dialogs { protected override void OnInit(EventArgs e) - { + { CurrentApp = Request["app"]; base.OnInit(e); } - protected void Page_Load(object sender, EventArgs e) + protected void Page_Load(object sender, EventArgs e) { JTree.DataBind(); @@ -78,12 +79,21 @@ namespace umbraco.dialogs ok.Attributes.Add("style", "width: 60px"); ok.Attributes.Add("disabled", "true"); - var cmsNode = new CMSNode(int.Parse(Request.GetItemAsString("id"))); + IContentBase currContent; + if (CurrentApp == "content") + { + currContent = Services.ContentService.GetById(Request.GetItemAs("id")); + } + else + { + currContent = Services.MediaService.GetById(Request.GetItemAs("id")); + } var validAction = true; - if (CurrentApp == Constants.Applications.Content && cmsNode.HasChildren) - validAction = ValidAction(Request.GetItemAsString("mode") == "cut" ? 'M' : 'O'); - + if (CurrentApp == Constants.Applications.Content && Umbraco.Core.Models.ContentExtensions.HasChildren(currContent, Services)) + { + validAction = ValidAction(currContent, Request.GetItemAsString("mode") == "cut" ? 'M' : 'O'); + } if (Request.GetItemAsString("mode") == "cut") { @@ -98,33 +108,32 @@ namespace umbraco.dialogs if (validAction == false) { - ScriptManager.RegisterStartupScript(this, this.GetType(), "notvalid", "notValid();", true); + ScriptManager.RegisterStartupScript(this, GetType(), "notvalid", "notValid();", true); } } } } - private bool ValidAction(char actionLetter) + private bool ValidAction(IContentBase cmsNode, char actionLetter) { - var cmsNode = new CMSNode(int.Parse(helper.Request("id"))); var currentAction = BusinessLogic.Actions.Action.GetPermissionAssignable().First(a => a.Letter == actionLetter); return CheckPermissions(cmsNode, currentAction); } - private bool CheckPermissions(CMSNode node, IAction currentAction) - { + private bool CheckPermissions(IContentBase node, IAction currentAction) + { var currUserPermissions = new UserPermissions(CurrentUser); var lstCurrUserActions = currUserPermissions.GetExistingNodePermission(node.Id); if (lstCurrUserActions.Contains(currentAction) == false) return false; - if (node.HasChildren) + + if (Umbraco.Core.Models.ContentExtensions.HasChildren(node, Services)) { - foreach (CMSNode child in node.Children) - if (CheckPermissions(child, currentAction) == false) - return false; + return Umbraco.Core.Models.ContentExtensions.Children(node, Services) + .All(child => CheckPermissions(child, currentAction)); } return true; } @@ -134,7 +143,7 @@ namespace umbraco.dialogs //PPH Handle doctype copies.. private void HandleDocumentTypeCopy() { - var documentType = new DocumentType(int.Parse(helper.Request("id"))); + var documentType = new DocumentType(int.Parse(Request.GetItemAsString("id"))); //Documentype exists.. create new doc type... var alias = rename.Text; @@ -188,37 +197,50 @@ namespace umbraco.dialogs public void HandleMoveOrCopy(object sender, EventArgs e) { if (CurrentApp == Constants.Applications.Settings) - HandleDocumentTypeCopy(); - else + HandleDocumentTypeCopy(); + else HandleDocumentMoveOrCopy(); - } + } protected override void OnPreRender(EventArgs e) { - base.OnPreRender(e); - ScriptManager.GetCurrent(Page).Services.Add(new ServiceReference("../webservices/cmsnode.asmx")); - ScriptManager.GetCurrent(Page).Services.Add(new ServiceReference("../webservices/legacyAjaxCalls.asmx")); - } + base.OnPreRender(e); + ScriptManager.GetCurrent(Page).Services.Add(new ServiceReference("../webservices/cmsnode.asmx")); + ScriptManager.GetCurrent(Page).Services.Add(new ServiceReference("../webservices/legacyAjaxCalls.asmx")); + } private void HandleDocumentMoveOrCopy() { - if (Request.GetItemAsString("copyTo") != "" && helper.Request("id") != "") + if (Request.GetItemAsString("copyTo") != "" && Request.GetItemAsString("id") != "") { // Check if the current node is allowed at new position var nodeAllowed = false; - var currentNode = new cms.businesslogic.Content(int.Parse(Request.GetItemAsString("id"))); - - var newNode = new cms.businesslogic.Content(int.Parse(Request.GetItemAsString("copyTo"))); + IContentBase currContent; + IContentBase parentContent; + IContentTypeBase parentContentType; + if (CurrentApp == "content") + { + currContent = Services.ContentService.GetById(Request.GetItemAs("id")); + parentContent = Services.ContentService.GetById(Request.GetItemAs("copyTo")); + parentContentType = Services.ContentTypeService.GetContentType(parentContent.ContentTypeId); + } + else + { + currContent = Services.MediaService.GetById(Request.GetItemAs("id")); + parentContent = Services.MediaService.GetById(Request.GetItemAs("copyTo")); + parentContentType = Services.ContentTypeService.GetMediaType(parentContent.ContentTypeId); + } // Check on contenttypes - if (int.Parse(Request.GetItemAsString("copyTo")) == -1) + if (Request.GetItemAs("copyTo") == -1) { nodeAllowed = true; } else { - if (newNode.ContentType.AllowedChildContentTypeIDs.Where(c => c == currentNode.ContentType.Id).Any()) + var allowedChildContentTypeIds = parentContentType.AllowedContentTypes.Select(x => x.Id).ToArray(); + if (allowedChildContentTypeIds.Any(x => x.Value == currContent.ContentTypeId)) { nodeAllowed = true; } @@ -231,7 +253,7 @@ namespace umbraco.dialogs else { // Check on paths - if ((string.Format(",{0},", newNode.Path)).IndexOf(string.Format(",{0},", currentNode.Id)) > -1) + if ((string.Format(",{0},", parentContent.Path)).IndexOf(string.Format(",{0},", currContent.Id)) > -1) { nodeAllowed = false; feedback.Text = ui.Text("moveOrCopy", "notAllowedByPath", UmbracoUser); @@ -246,48 +268,171 @@ namespace umbraco.dialogs pane_form_notice.Visible = false; panel_buttons.Visible = false; - var newNodeCaption = newNode.Id == -1 ? ui.Text(CurrentApp) : newNode.Text; + var newNodeCaption = Request.GetItemAs("copyTo") == -1 + ? ui.Text(CurrentApp) + : parentContent.Name; - string[] nodes = { currentNode.Text, newNodeCaption }; + string[] nodes = { currContent.Name, newNodeCaption }; if (Request["mode"] == "cut") { if (CurrentApp == Constants.Applications.Content) { - //PPH changed this to document instead of cmsNode to handle republishing. - var documentId = int.Parse(Request.GetItemAsString("id")); - var document = new Document(documentId); - document.Move(int.Parse(Request.GetItemAsString("copyTo"))); - - //NOTE: This seems excessive to have to re-load all content from the database here!? - library.RefreshContent(); + Services.ContentService.Move((IContent)currContent, Request.GetItemAs("copyTo"), getUser().Id); } else { - var media = new Media(int.Parse(Request["id"])); - media.Move(int.Parse(Request["copyTo"])); - media = new Media(int.Parse(Request["id"])); - media.XmlGenerate(new XmlDocument()); - media.Save(); + Services.MediaService.Move((IMedia)currContent, Request.GetItemAs("copyTo"), getUser().Id); + library.ClearLibraryCacheForMedia(currContent.Id); } feedback.Text = ui.Text("moveOrCopy", "moveDone", nodes, UmbracoUser) + "

" + ui.Text("closeThisWindow") + ""; feedback.type = uicontrols.Feedback.feedbacktype.success; // refresh tree - ClientTools.MoveNode(currentNode.Id.ToString(), newNode.Path); + ClientTools.MoveNode(currContent.Id.ToString(), parentContent.Path); } else { - var document = new Document(int.Parse(Request.GetItemAsString("id"))); - document.Copy(int.Parse(Request.GetItemAsString("copyTo")), UmbracoUser, RelateDocuments.Checked); - feedback.Text = ui.Text("moveOrCopy", "copyDone", nodes, UmbracoUser) + "

" + ui.Text("closeThisWindow") + ""; + //NOTE: We ONLY support Copy on content not media for some reason. + + Services.ContentService.Copy((IContent)currContent, Request.GetItemAs("copyTo"), RelateDocuments.Checked, getUser().Id); + + feedback.Text = ui.Text("moveOrCopy", "copyDone", nodes, getUser()) + "

" + ui.Text("closeThisWindow") + ""; feedback.type = uicontrols.Feedback.feedbacktype.success; - ClientTools.CopyNode(currentNode.Id.ToString(), newNode.Path); + + // refresh tree + ClientTools.CopyNode(currContent.Id.ToString(), parentContent.Path); } } } } + ///

+ /// JsInclude1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::ClientDependency.Core.Controls.JsInclude JsInclude1; + + /// + /// feedback control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::umbraco.uicontrols.Feedback feedback; + + /// + /// pane_form control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::umbraco.uicontrols.Pane pane_form; + + /// + /// JTree control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::umbraco.controls.Tree.TreeControl JTree; + + /// + /// pp_relate control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::umbraco.uicontrols.PropertyPanel pp_relate; + + /// + /// RelateDocuments control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.CheckBox RelateDocuments; + + /// + /// pane_form_notice control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.PlaceHolder pane_form_notice; + + /// + /// pane_settings control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::umbraco.uicontrols.Pane pane_settings; + + /// + /// PropertyPanel1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::umbraco.uicontrols.PropertyPanel PropertyPanel1; + + /// + /// masterType control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.ListBox masterType; + + /// + /// rename control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.TextBox rename; + + /// + /// RequiredFieldValidator1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.RequiredFieldValidator RequiredFieldValidator1; + + /// + /// panel_buttons control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Panel panel_buttons; + + /// + /// ok control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Button ok; + } } diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/moveOrCopy.aspx.designer.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/moveOrCopy.aspx.designer.cs deleted file mode 100644 index f7c669d1ea..0000000000 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/moveOrCopy.aspx.designer.cs +++ /dev/null @@ -1,141 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace umbraco.dialogs { - - - public partial class moveOrCopy { - - /// - /// JsInclude1 control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::ClientDependency.Core.Controls.JsInclude JsInclude1; - - /// - /// feedback control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::umbraco.uicontrols.Feedback feedback; - - /// - /// pane_form control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::umbraco.uicontrols.Pane pane_form; - - /// - /// JTree control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::umbraco.controls.Tree.TreeControl JTree; - - /// - /// pp_relate control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::umbraco.uicontrols.PropertyPanel pp_relate; - - /// - /// RelateDocuments control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.CheckBox RelateDocuments; - - /// - /// pane_form_notice control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.PlaceHolder pane_form_notice; - - /// - /// pane_settings control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::umbraco.uicontrols.Pane pane_settings; - - /// - /// PropertyPanel1 control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::umbraco.uicontrols.PropertyPanel PropertyPanel1; - - /// - /// masterType control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.ListBox masterType; - - /// - /// rename control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.TextBox rename; - - /// - /// RequiredFieldValidator1 control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.RequiredFieldValidator RequiredFieldValidator1; - - /// - /// panel_buttons control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Panel panel_buttons; - - /// - /// ok control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Button ok; - } -} diff --git a/src/umbraco.businesslogic/BasePages/BasePage.cs b/src/umbraco.businesslogic/BasePages/BasePage.cs index e44a92c30b..ba48699705 100644 --- a/src/umbraco.businesslogic/BasePages/BasePage.cs +++ b/src/umbraco.businesslogic/BasePages/BasePage.cs @@ -82,6 +82,30 @@ namespace umbraco.BasePages get { return ApplicationContext.DatabaseContext; } } + /// + /// Returns the current ApplicationContext + /// + public ApplicationContext ApplicationContext + { + get { return ApplicationContext.Current; } + } + + /// + /// Returns a ServiceContext + /// + public ServiceContext Services + { + get { return ApplicationContext.Services; } + } + + /// + /// Returns a DatabaseContext + /// + public DatabaseContext DatabaseContext + { + get { return ApplicationContext.DatabaseContext; } + } + /// /// Returns the current BasePage for the current request. /// This assumes that the current page is a BasePage, otherwise, returns null;