Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur dictum, nisi non gravida blandit, odio nulla ultrices orci, quis blandit tortor libero vitae massa.
Well hello! This website package demonstrates all the standard functionality of Umbraco. It's a great starting point for starting point for further development or as a prototype.
From uBlogsy 3.0, the package is now a site (with basic pages) which has a blog (not a blog which has pages).
+
Below on this page you will see a widget (/Views/uBlogsy/Widgets/uBlogsyWidgetListPostsForHome.cshtml) which lists latest news. The purpose of the widget is to list news for the home page. Your home page will typically be the parent of the uBlogsyLanding node, or a sibling.
+
Take a look at /Views/uBlogsySiteHome.cshtml
+
+
]]>
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+ 1
+ 1
+ 1
+
+
+
+ Blog
+
+
+ Show some love
+
Did you know that uBlogsy (a completely free open-source package) has taken many 100's of hours to create and mainatain?
+
If you want to show some love, and support why not click the button below.
+]]>
+
+ Keywords
+
+ 0
+
+
+
+
+ Blog
+
+ 0
+
+
+
+
+
+ Author 1
+ 0
+
+
+
+
+
+
+
+
+
+ Tag 1
+
+
+
+ 0
+
+
+
+
+
+ Category 1
+ 0
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ My Blog
+
+ Copyright @AnthonyDotNet
+
+
+
+ About
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut nibh massa, ornare ac tempor in, elementum ut sem. Fusce nisl urna, auctor eu varius vel, mattis eu sapien. Sed venenatis facilisis ligula, vitae adipiscing nulla scelerisque eget. Nulla facilisi. Aliquam rutrum sollicitudin erat, non consectetur nunc rutrum sit amet. Proin sit amet elit eget metus fermentum laoreet eu non ipsum. Vivamus non est nibh, non congue turpis. Pellentesque tempus vehicula diam ut tincidunt. Fusce sem diam, vestibulum quis faucibus sit amet, tincidunt id mi. Donec scelerisque blandit suscipit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
+
Duis eget elementum libero. Donec in erat erat, vel convallis diam. Nulla facilisi. Vivamus adipiscing pellentesque facilisis. Nullam convallis nunc ac metus facilisis dapibus. Suspendisse potenti. Phasellus dictum arcu ac velit hendrerit non facilisis erat dignissim. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed vitae ante non magna mollis varius at at nisi. Suspendisse sagittis dignissim mi vel adipiscing. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed porttitor viverra congue. Ut sollicitudin enim quis orci scelerisque quis fringilla lorem fringilla. Integer urna leo, aliquam vel sollicitudin eget, facilisis id orci. Ut mollis libero nunc. Integer tortor nisi, aliquet non fermentum ac, bibendum in eros. Mauris aliquet arcu quis enim tincidunt venenatis. Vestibulum tincidunt ullamcorper nulla id blandit. Nam vitae quam id nisi aliquet malesuada malesuada sed eros. Aenean faucibus tempus enim sed pretium.
+
Cras malesuada magna ut elit condimentum mattis. Vestibulum eu risus ante, quis preti
]]>
+
+
+
+ 0
+
+
+
+
+
+ About
+
+
+ Contact
+
+
+ Get your free embedable form from one of these:
+
+
+
+ @Umbraco.Field("uBlogsyContentBody")
+
+
+ @* list posts for home - this only works if the home page is a parent, or sibling of uBlogsyLanding *@
+ @Html.CachedPartial("uBlogsy/Widgets/uBlogsyWidgetListPostsForHome", Model, 0, false, true, new ViewDataDictionary(ViewData) { { "ItemLimit", 5 } })
+
+
+}
+
+
+]]>
+
+
+
+ [uDatefoldersy] Folder Redirect
+ uDateFoldersyFolderRedirect
+
+
+
+
+
+
+
+ uBlogsy
+ uBlogsy
+
+ div { padding-bottom:20px;}
+
+/* right col - lists */
+#uBlogsy_right_col li{ clear: both; line-height:20px;}
+#uBlogsy_right_col ul { list-style-type:none; margin:5px 0; padding-left:0px; overflow:hidden; }
+
+/* right col - post archive */
+#uBlogsy_post_archive ul { list-style-type:none; }
+#uBlogsy_post_archive ul ul { padding-left:15px; }
+
+#uBlogsy_post_archive .uBlogsy_post_items {display:none; margin-top:0;}
+#uBlogsy_post_archive .uBlogsy_months{display:none;}
+
+#uBlogsy_post_archive .uBlogsy_current{ font-weight: bold;}
+
+
+/* right col - post archive - alternate layout */
+#uBlogsy_right_col .uBlogsy_post_archive_alt .uBlogsy_year_first .uBlogsy_year_name{display:none; }
+#uBlogsy_right_col .uBlogsy_post_archive_alt .uBlogsy_year_first .uBlogsy_months{ padding-left:0px; margin-top: 0;}
+
+
+/* right col - rss logo */
+#uBlogsy_right_col .uBlogsy_feed { margin-left: 3px; padding: 0 0 0 19px; background: url("../images/uBlogsy_feed-icon-14x14.png") no-repeat 0 50%; height: 15px; display: block; float: left; overflow: hidden;}
+
+
+#uBlogsy_right_col .uBlogsy_post_list_image{ display: inline-block;float: left; padding: 0;margin: 0 5px 1px 0;overflow: hidden;height: 25px;width: 25px;border: 1px solid #555555;}
+
+
+/**********************************************
+ pagination
+***********************************************/
+/* pagination - landing */
+#uBlogsy_pagination { display:block; float:right; overflow:hidden;}
+#uBlogsy_pagination li{ list-style-type:none; display:block; float:left; height: 20px; padding: 0 4px 0 0;}
+#uBlogsy_pagination li a { display:block; padding :3px 0 0 6px; }
+#uBlogsy_pagination li.uBlogsy_page_prev span, #uBlogsy_pagination li.uBlogsy_page_next span { display:block; padding :2px 0 0 5px; color:#CCC}
+#uBlogsy_pagination .uBlogsy_page_next, #uBlogsy_pagination .uBlogsy_page_prev{ width:40px;}
+#uBlogsy_pagination li.uBlogsy_current a{font-weight:bold;}
+#uBlogsy_pagination li.uBlogsy_current span{padding:2px 0 0 6px; display:block;}
+
+/* pagination - post */
+.uBlogsy_next_prev{padding-top:20px;overflow: hidden;clear: both;}
+#uBlogsy .uBlogsy_next_prev a { color:#505050; }
+.uBlogsy_prev {float:left;}
+.uBlogsy_next {float:right;}
+
+
+
+
+/**********************************************
+ forms
+***********************************************/
+/* forms */
+.uBlogsy_search input[type=submit] { border: 1px solid #cccccc; }
+
+.uBlogsy_row{ overflow:hidden; position: relative; }
+
+.uBlogsy_row.uBlogsy_Subscribe{padding-bottom:10px;}
+.uBlogsy_row.uBlogsy_Subscribe input[type=checkbox] { float:left;}
+.uBlogsy_row .field-validation-error{ position: absolute; top: 0px;}
+.uBlogsy_row .field-validation-valid{ display: none;}
+
+/* forms - search */
+.uBlogsy_search input[type=text] { border:1px solid #ccc; height:20px; margin-bottom:10px; width:200px;}
+#uBlogsyBtnSearch:hover{ color:#234B7B;}
+
+
+
+
+
+/**********************************************
+ misc
+***********************************************/
+.uBlogsy_bottom_border { border-bottom-color: #CCC; border-bottom-style: dotted; border-bottom-width: 1px; }
+
+/*add this*/
+#uBlogsy .addthis_toolbox { float:left;clear: both;margin-top: 30px;height: 30px;}
+#uBlogsy .addthis_toolbox a { display:block; float:right;}
+
+
+
+
+
+
+/**********************************************
+ tag cloud
+***********************************************/
+.uBlogsy_tag_cloud li { display:inline-block; padding-right:10px; }
+.uBlogsy_tag_cloud li span {color:#505050}
+.uBlogsy_tag_cloud1 { font-size: 10px;}
+.uBlogsy_tag_cloud2 { font-size: 10px;}
+.uBlogsy_tag_cloud3 { font-size: 11px;}
+.uBlogsy_tag_cloud4 { font-size: 11px;}
+.uBlogsy_tag_cloud5 { font-size: 12px;}
+.uBlogsy_tag_cloud6 { font-size: 12px;}
+.uBlogsy_tag_cloud7 { font-size: 13px;}
+.uBlogsy_tag_cloud8 { font-size: 13px;}
+.uBlogsy_tag_cloud9 { font-size: 14px;}
+.uBlogsy_tag_cloud10 { font-size: 14px;}
+.uBlogsy_tag_cloud11 { font-size: 15px;}
+.uBlogsy_tag_cloud12 { font-size: 15px;}
+.uBlogsy_tag_cloud13 { font-size: 16px;}
+.uBlogsy_tag_cloud14 { font-size: 16px;}
+.uBlogsy_tag_cloud15 { font-size: 17px;}
+.uBlogsy_tag_cloud16 { font-size: 17px;}
+.uBlogsy_tag_cloud17 { font-size: 18px;}
+.uBlogsy_tag_cloud18 { font-size: 18px;}
+.uBlogsy_tag_cloud19 { font-size: 19px;}
+.uBlogsy_tag_cloud20 { font-size: 19px;}
+.uBlogsy_tag_cloud21 { font-size: 20px;}
+.uBlogsy_tag_cloud22 { font-size: 20px;}
+.uBlogsy_tag_cloud23 { font-size: 21px;}
+.uBlogsy_tag_cloud24 { font-size: 21px;}
+.uBlogsy_tag_cloud25 { font-size: 22px;}
+.uBlogsy_tag_cloud26 { font-size: 22px;}
+.uBlogsy_tag_cloud27 { font-size: 23px;}
+.uBlogsy_tag_cloud28 { font-size: 23px;}
+.uBlogsy_tag_cloud29 { font-size: 24px;}
+.uBlogsy_tag_cloud30 { font-size: 24px;}
+.uBlogsy_tag_cloud31 { font-size: 25px;}
+.uBlogsy_tag_cloud32 { font-size: 25px;}
+.uBlogsy_tag_cloud33 { font-size: 26px;}
+.uBlogsy_tag_cloud34 { font-size: 26px;}
+.uBlogsy_tag_cloud35 { font-size: 27px;}
+.uBlogsy_tag_cloud36 { font-size: 27px;}
+.uBlogsy_tag_cloud37 { font-size: 28px;}
+.uBlogsy_tag_cloud38 { font-size: 28px;}
+.uBlogsy_tag_cloud39 { font-size: 29px;}
+.uBlogsy_tag_cloud40 { font-size: 29px;}
+.uBlogsy_tag_cloud40 { font-size: 30px;}
+.uBlogsy_tag_cloud41 { font-size: 31px;}
+.uBlogsy_tag_cloud42 { font-size: 31px;}
+.uBlogsy_tag_cloud43 { font-size: 32px;}
+.uBlogsy_tag_cloud44 { font-size: 32px;}
+.uBlogsy_tag_cloud45 { font-size: 33px;}
+.uBlogsy_tag_cloud46 { font-size: 33px;}
+.uBlogsy_tag_cloud47 { font-size: 34px;}
+.uBlogsy_tag_cloud48 { font-size: 34px;}
+.uBlogsy_tag_cloud49 { font-size: 35px;}
+.uBlogsy_tag_cloud50 { font-size: 35px;}
+.uBlogsy_tag_cloud50 { font-size: 36px;}
+.uBlogsy_tag_cloud51 { font-size: 36px;}
+.uBlogsy_tag_cloud52 { font-size: 37px;}
+.uBlogsy_tag_cloud53 { font-size: 37px;}
+.uBlogsy_tag_cloud54 { font-size: 38px;}
+.uBlogsy_tag_cloud55 { font-size: 38px;}
+.uBlogsy_tag_cloud56 { font-size: 39px;}
+.uBlogsy_tag_cloud57 { font-size: 39px;}
+.uBlogsy_tag_cloud58 { font-size: 40px;}
+.uBlogsy_tag_cloud59 { font-size: 40px;}
+.uBlogsy_tag_cloud60 { font-size: 41px;}
+.uBlogsy_tag_cloud71 { font-size: 41px;}
+.uBlogsy_tag_cloud72 { font-size: 42px;}
+.uBlogsy_tag_cloud73 { font-size: 42px;}
+.uBlogsy_tag_cloud74 { font-size: 43px;}
+.uBlogsy_tag_cloud75 { font-size: 43px;}
+.uBlogsy_tag_cloud76 { font-size: 44px;}
+.uBlogsy_tag_cloud77 { font-size: 44px;}
+.uBlogsy_tag_cloud78 { font-size: 45px;}
+.uBlogsy_tag_cloud79 { font-size: 45px;}
+.uBlogsy_tag_cloud80 { font-size: 46px;}
+.uBlogsy_tag_cloud81 { font-size: 46px;}
+.uBlogsy_tag_cloud82 { font-size: 47px;}
+.uBlogsy_tag_cloud83 { font-size: 47px;}
+.uBlogsy_tag_cloud84 { font-size: 48px;}
+.uBlogsy_tag_cloud85 { font-size: 48px;}
+.uBlogsy_tag_cloud86 { font-size: 49px;}
+.uBlogsy_tag_cloud87 { font-size: 49px;}
+.uBlogsy_tag_cloud88 { font-size: 50px;}
+.uBlogsy_tag_cloud89 { font-size: 50px;}
+.uBlogsy_tag_cloud90 { font-size: 51px;}
+.uBlogsy_tag_cloud91 { font-size: 51px;}
+.uBlogsy_tag_cloud92 { font-size: 52px;}
+.uBlogsy_tag_cloud93 { font-size: 52px;}
+.uBlogsy_tag_cloud94 { font-size: 53px;}
+.uBlogsy_tag_cloud95 { font-size: 53px;}
+.uBlogsy_tag_cloud96 { font-size: 54px;}
+.uBlogsy_tag_cloud97 { font-size: 54px;}
+.uBlogsy_tag_cloud98 { font-size: 55px;}
+.uBlogsy_tag_cloud99 { font-size: 55px;}
+.uBlogsy_tag_cloud100 { font-size: 56px;}
+
+
+
+]]>
+
+
+
+
+
+ [uBlogsy] Show Some Love
+ uBlogsyShowSomeLove
+
+
+
+
+
+
+ True
+ 0
+ ~/Views/MacroPartials/uBlogsy/uBlogsyMacroShowSomeLove.cshtml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ /usercontrols/uBlogsy/dashboard/Installer.ascx
+
+
+
+
+ default
+ content
+
+
+ /usercontrols/uBlogsy/dashboard/CreatePost.ascx
+
+
+ /usercontrols/uBlogsy/dashboard/RSSImport.ascx
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj
index 934e56a5e0..149a962eaf 100644
--- a/src/Umbraco.Tests/Umbraco.Tests.csproj
+++ b/src/Umbraco.Tests/Umbraco.Tests.csproj
@@ -294,6 +294,12 @@
+
+
+ True
+ True
+ ImportResources.resx
+
@@ -437,10 +443,15 @@
ResXFileCodeGeneratorSqlResources.Designer.cs
-
+
+ ResXFileCodeGenerator
+ ImportResources.Designer.cs
+
+ ResXFileCodeGeneratorTestFiles.Designer.cs
+
@@ -475,6 +486,11 @@
+
+
+ Designer
+
+
diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/controls/ContentTypeControlNew.ascx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/controls/ContentTypeControlNew.ascx.cs
index 6e6cc43347..175e5b9852 100644
--- a/src/Umbraco.Web/umbraco.presentation/umbraco/controls/ContentTypeControlNew.ascx.cs
+++ b/src/Umbraco.Web/umbraco.presentation/umbraco/controls/ContentTypeControlNew.ascx.cs
@@ -648,40 +648,26 @@ jQuery(document).ready(function() {{ refreshDropDowns(); }});
propertyType.DataTypeDefinitionId = dataTypeDefinition.Id;
propertyType.DataTypeId = dataTypeDefinition.ControlId;
- if (propertyType.PropertyGroupId != gpw.GenricPropertyControl.Tab)
+ if (propertyType.PropertyGroupId.Value != gpw.GenricPropertyControl.Tab)
{
if (gpw.GenricPropertyControl.Tab == 0)
{
- propertyType.PropertyGroupId = 0;
+ propertyType.PropertyGroupId = new Lazy(() => 0);
}
else if (contentTypeItem.PropertyGroups.Any(x => x.Id == gpw.GenricPropertyControl.Tab))
{
- propertyType.PropertyGroupId = gpw.GenricPropertyControl.Tab;
+ propertyType.PropertyGroupId = new Lazy(() => gpw.GenricPropertyControl.Tab);
}
else if (contentTypeItem.PropertyGroups.Any(x => x.ParentId == gpw.GenricPropertyControl.Tab))
{
var propertyGroup = contentTypeItem.PropertyGroups.First(x => x.ParentId == gpw.GenricPropertyControl.Tab);
- propertyType.PropertyGroupId = propertyGroup.Id;
+ propertyType.PropertyGroupId = new Lazy(() => propertyGroup.Id);
}
else
{
var propertyGroup = contentTypeItem.CompositionPropertyGroups.First(x => x.Id == gpw.GenricPropertyControl.Tab);
contentTypeItem.AddPropertyGroup(propertyGroup.Name);
contentTypeItem.MovePropertyType(propertyType.Alias, propertyGroup.Name);
-
- //if (
- // contentTypeItem.CompositionPropertyGroups.Any(
- // x => x.ParentId == gpw.GenricPropertyControl.Tab))
- //{
- // var propertyGroups = contentTypeItem.CompositionPropertyGroups.Where(x => x.ParentId == gpw.GenricPropertyControl.Tab);
- // var propertyGroup = propertyGroups.First();
- // propertyType.PropertyGroupId = propertyGroup.Id;
- //}
- //else
- //{
- // var propertyGroup = contentTypeItem.CompositionPropertyGroups.First(x => x.Id == gpw.GenricPropertyControl.Tab);
- // contentTypeItem.AddPropertyGroup(propertyGroup.Name);
- //}
}
}
}
diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/importDocumenttype.aspx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/importDocumenttype.aspx.cs
index bacb1354e9..18eccdaaf1 100644
--- a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/importDocumenttype.aspx.cs
+++ b/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/importDocumenttype.aspx.cs
@@ -1,17 +1,10 @@
using System;
-using System.Collections;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Web;
-using System.Web.SessionState;
-using System.Web.UI;
+using System.Linq;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
-
-using umbraco.cms.businesslogic.member;
-using umbraco.cms.businesslogic.web;
using System.Xml;
+using System.Xml.Linq;
+using Umbraco.Core;
using umbraco.IO;
namespace umbraco.presentation.umbraco.dialogs
@@ -27,22 +20,22 @@ namespace umbraco.presentation.umbraco.dialogs
CurrentApp = BusinessLogic.DefaultApps.settings.ToString();
}
- protected System.Web.UI.WebControls.Literal FeedBackMessage;
- protected System.Web.UI.WebControls.Literal jsShowWindow;
- protected System.Web.UI.WebControls.Panel Wizard;
- protected System.Web.UI.HtmlControls.HtmlTable Table1;
- protected System.Web.UI.HtmlControls.HtmlInputHidden tempFile;
- protected System.Web.UI.HtmlControls.HtmlInputFile documentTypeFile;
- protected System.Web.UI.WebControls.Button submit;
- protected System.Web.UI.WebControls.Panel Confirm;
- protected System.Web.UI.WebControls.Literal dtName;
- protected System.Web.UI.WebControls.Literal dtAlias;
- protected System.Web.UI.WebControls.Button import;
- protected System.Web.UI.WebControls.Literal dtNameConfirm;
- protected System.Web.UI.WebControls.Panel done;
+ protected Literal FeedBackMessage;
+ protected Literal jsShowWindow;
+ protected Panel Wizard;
+ protected HtmlTable Table1;
+ protected HtmlInputHidden tempFile;
+ protected HtmlInputFile documentTypeFile;
+ protected Button submit;
+ protected Panel Confirm;
+ protected Literal dtName;
+ protected Literal dtAlias;
+ protected Button import;
+ protected Literal dtNameConfirm;
+ protected Panel done;
private string tempFileName = "";
- private void Page_Load(object sender, System.EventArgs e)
+ private void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
@@ -74,14 +67,20 @@ namespace umbraco.presentation.umbraco.dialogs
}
#endregion
- private void import_Click(object sender, System.EventArgs e)
+ private void import_Click(object sender, EventArgs e)
{
- XmlDocument xd = new XmlDocument();
+ /*XmlDocument xd = new XmlDocument();
xd.Load(tempFile.Value);
cms.businesslogic.packager.Installer.ImportDocumentType(xd.DocumentElement, base.getUser(), true);
- dtNameConfirm.Text = xd.DocumentElement.SelectSingleNode("/DocumentType/Info/Name").FirstChild.Value;
+ dtNameConfirm.Text = xd.DocumentElement.SelectSingleNode("/DocumentType/Info/Name").FirstChild.Value;*/
- Wizard.Visible = false;
+ var element = XElement.Parse(tempFile.Value);
+ var importContentTypes = ApplicationContext.Current.Services.PackagingService.ImportContentTypes(element);
+ var contentType = importContentTypes.FirstOrDefault();
+ if (contentType != null)
+ dtNameConfirm.Text = contentType.Name;
+
+ Wizard.Visible = false;
Confirm.Visible = false;
done.Visible = true;
}
diff --git a/src/umbraco.cms/businesslogic/Packager/Installer.cs b/src/umbraco.cms/businesslogic/Packager/Installer.cs
index 08e85a4919..d5fae77bcc 100644
--- a/src/umbraco.cms/businesslogic/Packager/Installer.cs
+++ b/src/umbraco.cms/businesslogic/Packager/Installer.cs
@@ -1,18 +1,12 @@
using System;
using System.Collections;
using System.Collections.Generic;
-using System.Data;
+using System.Globalization;
using System.IO;
-using System.Web;
using System.Xml;
-using System.Xml.XPath;
-using System.Reflection;
using System.Runtime.CompilerServices;
using System.Linq;
-using ICSharpCode.SharpZipLib;
using ICSharpCode.SharpZipLib.Zip;
-using ICSharpCode.SharpZipLib.Zip.Compression;
-using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
using Umbraco.Core;
using Umbraco.Core.Logging;
using umbraco.cms.businesslogic.web;
@@ -137,17 +131,18 @@ namespace umbraco.cms.businesslogic.packager
_control = Control;
}
+ #region Public Methods
+
///
/// Adds the macro to the package
///
/// Macro to add
- public void AddMacro(businesslogic.macro.Macro MacroToAdd)
+ [Obsolete("This method does nothing but add the macro to an ArrayList that is never used, so don't call this method.")]
+ public void AddMacro(Macro MacroToAdd)
{
_macros.Add(MacroToAdd);
}
-
-
-
+
///
/// Imports the specified package
///
@@ -168,7 +163,7 @@ namespace umbraco.cms.businesslogic.packager
{
try
{
- tempDir = unPack(fi.FullName);
+ tempDir = UnPack(fi.FullName);
LoadConfig(tempDir);
}
catch (Exception unpackE)
@@ -184,8 +179,7 @@ namespace umbraco.cms.businesslogic.packager
return tempDir;
}
}
-
-
+
public int CreateManifest(string tempDir, string guid, string repoGuid)
{
//This is the new improved install rutine, which chops up the process into 3 steps, creating the manifest, moving files, and finally handling umb objects
@@ -245,9 +239,9 @@ namespace umbraco.cms.businesslogic.packager
//we enclose the whole file-moving to ensure that the entire installer doesn't crash
try
{
- String destPath = getFileName(basePath, xmlHelper.GetNodeValue(n.SelectSingleNode("orgPath")));
- String sourceFile = getFileName(tempDir, xmlHelper.GetNodeValue(n.SelectSingleNode("guid")));
- String destFile = getFileName(destPath, xmlHelper.GetNodeValue(n.SelectSingleNode("orgName")));
+ String destPath = GetFileName(basePath, xmlHelper.GetNodeValue(n.SelectSingleNode("orgPath")));
+ String sourceFile = GetFileName(tempDir, xmlHelper.GetNodeValue(n.SelectSingleNode("guid")));
+ String destFile = GetFileName(destPath, xmlHelper.GetNodeValue(n.SelectSingleNode("orgName")));
// Create the destination directory if it doesn't exist
if (!Directory.Exists(destPath))
@@ -271,21 +265,40 @@ namespace umbraco.cms.businesslogic.packager
insPack.Save();
}
}
-
-
+
public void InstallBusinessLogic(int packageId, string tempDir)
{
-
using (DisposableTimer.DebugDuration(
() => "Installing business logic for package id " + packageId + " into temp folder " + tempDir,
() => "Package business logic installation complete for package id " + packageId))
{
//retrieve the manifest to continue installation
- packager.InstalledPackage insPack = packager.InstalledPackage.GetById(packageId);
- bool saveNeeded = false;
+ var insPack = InstalledPackage.GetById(packageId);
+ //bool saveNeeded = false;
- //Install DataTypes
- foreach (XmlNode n in _packageConfig.DocumentElement.SelectNodes("//DataType"))
+ // Get current user, with a fallback
+ var currentUser = new User(0);
+ if (string.IsNullOrEmpty(BasePages.UmbracoEnsuredPage.umbracoUserContextID) == false)
+ {
+ if (BasePages.UmbracoEnsuredPage.ValidateUserContextID(BasePages.UmbracoEnsuredPage.umbracoUserContextID))
+ {
+ currentUser = User.GetCurrent();
+ }
+ }
+
+ //Xml as XElement which is used with the new PackagingService
+ var rootElement = _packageConfig.DocumentElement.GetXElement();
+ var packagingService = ApplicationContext.Current.Services.PackagingService;
+
+ #region DataTypes
+ var dataTypeElement = rootElement.Descendants("DataTypes").First();
+ var dataTypeDefinitions = packagingService.ImportDataTypeDefinitions(dataTypeElement, currentUser.Id);
+ foreach (var dataTypeDefinition in dataTypeDefinitions)
+ {
+ insPack.Data.DataTypes.Add(dataTypeDefinition.Id.ToString(CultureInfo.InvariantCulture));
+ //saveNeeded = true;
+ }
+ /*foreach (XmlNode n in _packageConfig.DocumentElement.SelectNodes("//DataType"))
{
cms.businesslogic.datatype.DataTypeDefinition newDtd = cms.businesslogic.datatype.DataTypeDefinition.Import(n);
@@ -294,25 +307,27 @@ namespace umbraco.cms.businesslogic.packager
insPack.Data.DataTypes.Add(newDtd.Id.ToString());
saveNeeded = true;
}
- }
+ }*/
- if (saveNeeded) { insPack.Save(); saveNeeded = false; }
+ //if (saveNeeded) { insPack.Save(); saveNeeded = false; }
+ #endregion
- //Install languages
+ #region Languages
foreach (XmlNode n in _packageConfig.DocumentElement.SelectNodes("//Language"))
{
language.Language newLang = language.Language.Import(n);
if (newLang != null)
{
- insPack.Data.Languages.Add(newLang.id.ToString());
- saveNeeded = true;
+ insPack.Data.Languages.Add(newLang.id.ToString(CultureInfo.InvariantCulture));
+ //saveNeeded = true;
}
}
- if (saveNeeded) { insPack.Save(); saveNeeded = false; }
+ //if (saveNeeded) { insPack.Save(); saveNeeded = false; }
+ #endregion
- //Install dictionary items
+ #region Dictionary items
foreach (XmlNode n in _packageConfig.DocumentElement.SelectNodes("./DictionaryItems/DictionaryItem"))
{
Dictionary.DictionaryItem newDi = Dictionary.DictionaryItem.Import(n);
@@ -320,41 +335,42 @@ namespace umbraco.cms.businesslogic.packager
if (newDi != null)
{
insPack.Data.DictionaryItems.Add(newDi.id.ToString());
- saveNeeded = true;
+ //saveNeeded = true;
}
}
- if (saveNeeded) { insPack.Save(); saveNeeded = false; }
+ //if (saveNeeded) { insPack.Save(); saveNeeded = false; }
+ #endregion
- // Install macros
+ #region Macros
foreach (XmlNode n in _packageConfig.DocumentElement.SelectNodes("//macro"))
{
- cms.businesslogic.macro.Macro m = cms.businesslogic.macro.Macro.Import(n);
+ Macro m = Macro.Import(n);
if (m != null)
{
- insPack.Data.Macros.Add(m.Id.ToString());
- saveNeeded = true;
+ insPack.Data.Macros.Add(m.Id.ToString(CultureInfo.InvariantCulture));
+ //saveNeeded = true;
}
}
- if (saveNeeded) { insPack.Save(); saveNeeded = false; }
-
- // Get current user, with a fallback
- User u = new User(0);
- if (!string.IsNullOrEmpty(BasePages.UmbracoEnsuredPage.umbracoUserContextID))
+ //if (saveNeeded) { insPack.Save(); saveNeeded = false; }
+ #endregion
+
+ #region Templates
+ var templateElement = rootElement.Descendants("Templates").First();
+ var templates = packagingService.ImportTemplates(templateElement, currentUser.Id);
+ foreach (var template in templates)
{
- if (BasePages.UmbracoEnsuredPage.ValidateUserContextID(BasePages.UmbracoEnsuredPage.umbracoUserContextID))
- {
- u = User.GetCurrent();
- }
+ insPack.Data.Templates.Add(template.Id.ToString(CultureInfo.InvariantCulture));
+ //saveNeeded = true;
}
+ //if (saveNeeded) { insPack.Save(); saveNeeded = false; }
- // Add Templates
- foreach (XmlNode n in _packageConfig.DocumentElement.SelectNodes("Templates/Template"))
+ /*foreach (XmlNode n in _packageConfig.DocumentElement.SelectNodes("Templates/Template"))
{
- var t = Template.Import(n, u);
+ var t = Template.Import(n, currentUser);
insPack.Data.Templates.Add(t.Id.ToString());
@@ -371,13 +387,13 @@ namespace umbraco.cms.businesslogic.packager
foreach (XmlNode n in _packageConfig.DocumentElement.SelectNodes("Templates/Template"))
{
string master = xmlHelper.GetNodeValue(n.SelectSingleNode("Master"));
- template.Template t = template.Template.GetByAlias(xmlHelper.GetNodeValue(n.SelectSingleNode("Alias")));
+ Template t = Template.GetByAlias(xmlHelper.GetNodeValue(n.SelectSingleNode("Alias")));
if (master.Trim() != "")
{
- template.Template masterTemplate = template.Template.GetByAlias(master);
+ var masterTemplate = Template.GetByAlias(master);
if (masterTemplate != null)
{
- t.MasterTemplate = template.Template.GetByAlias(master).Id;
+ t.MasterTemplate = Template.GetByAlias(master).Id;
//SD: This appears to always just save an empty template because the design isn't set yet
// this fixes an issue now that we have MVC because if there is an empty template and MVC is
// the default, it will create a View not a master page and then the system will try to route via
@@ -395,12 +411,23 @@ namespace umbraco.cms.businesslogic.packager
t.ImportDesign(xmlHelper.GetNodeValue(n.SelectSingleNode("Design")));
t.SaveMasterPageFile(t.Design);
}
+ }*/
+ #endregion
+
+ #region DocumentTypes
+ var docTypeElement = rootElement.Descendants("DocumentTypes").First();
+ var contentTypes = packagingService.ImportContentTypes(docTypeElement, currentUser.Id);
+ foreach (var contentType in contentTypes)
+ {
+ insPack.Data.Documenttypes.Add(contentType.Id.ToString(CultureInfo.InvariantCulture));
+ //saveNeeded = true;
}
- // Add documenttypes
- foreach (XmlNode n in _packageConfig.DocumentElement.SelectNodes("DocumentTypes/DocumentType"))
+ //if (saveNeeded) { insPack.Save(); saveNeeded = false; }
+
+ /*foreach (XmlNode n in _packageConfig.DocumentElement.SelectNodes("DocumentTypes/DocumentType"))
{
- ImportDocumentType(n, u, false);
+ ImportDocumentType(n, currentUser, false);
saveNeeded = true;
}
@@ -432,29 +459,36 @@ namespace umbraco.cms.businesslogic.packager
}
}
- if (saveNeeded) { insPack.Save(); saveNeeded = false; }
+ if (saveNeeded) { insPack.Save(); saveNeeded = false; }*/
+ #endregion
- // Stylesheets
+ #region Stylesheets
foreach (XmlNode n in _packageConfig.DocumentElement.SelectNodes("Stylesheets/Stylesheet"))
{
- StyleSheet s = StyleSheet.Import(n, u);
+ StyleSheet s = StyleSheet.Import(n, currentUser);
insPack.Data.Stylesheets.Add(s.Id.ToString());
- saveNeeded = true;
+ //saveNeeded = true;
}
- if (saveNeeded) { insPack.Save(); saveNeeded = false; }
+ //if (saveNeeded) { insPack.Save(); saveNeeded = false; }
+ #endregion
- // Documents
- foreach (XmlElement n in _packageConfig.DocumentElement.SelectNodes("Documents/DocumentSet [@importMode = 'root']/*"))
+ #region Documents
+ var documentElement = rootElement.Descendants("DocumentSet").First();
+ var content = packagingService.ImportContent(documentElement, -1, currentUser.Id);
+ var firstContentItem = content.First();
+ insPack.Data.ContentNodeId = firstContentItem.Id.ToString(CultureInfo.InvariantCulture);
+
+ /*foreach (XmlElement n in _packageConfig.DocumentElement.SelectNodes("Documents/DocumentSet [@importMode = 'root']/*"))
{
- insPack.Data.ContentNodeId = cms.businesslogic.web.Document.Import(-1, u, n).ToString();
- }
+ insPack.Data.ContentNodeId = cms.businesslogic.web.Document.Import(-1, currentUser, n).ToString();
+ }*/
+ #endregion
- //Package Actions
+ #region Package Actions
foreach (XmlNode n in _packageConfig.DocumentElement.SelectNodes("Actions/Action"))
{
-
if (n.Attributes["undo"] == null || n.Attributes["undo"].Value == "true")
{
insPack.Data.Actions += n.OuterXml;
@@ -464,7 +498,7 @@ namespace umbraco.cms.businesslogic.packager
{
try
{
- packager.PackageAction.RunPackageAction(insPack.Data.Name, n.Attributes["alias"].Value, n);
+ PackageAction.RunPackageAction(insPack.Data.Name, n.Attributes["alias"].Value, n);
}
catch
{
@@ -472,6 +506,7 @@ namespace umbraco.cms.businesslogic.packager
}
}
}
+ #endregion
// Trigger update of Apps / Trees config.
// (These are ApplicationStartupHandlers so just instantiating them will trigger them)
@@ -499,30 +534,54 @@ namespace umbraco.cms.businesslogic.packager
/// Invoking this method installs the entire current package
///
/// Temporary folder where the package's content are extracted to
+ ///
+ ///
public void Install(string tempDir, string guid, string repoGuid)
{
//PPH added logging of installs, this adds all install info in the installedPackages config file.
- string _packName = xmlHelper.GetNodeValue(_packageConfig.DocumentElement.SelectSingleNode("/umbPackage/info/package/name"));
- string _packAuthor = xmlHelper.GetNodeValue(_packageConfig.DocumentElement.SelectSingleNode("/umbPackage/info/author/name"));
- string _packAuthorUrl = xmlHelper.GetNodeValue(_packageConfig.DocumentElement.SelectSingleNode("/umbPackage/info/author/website"));
- string _packVersion = xmlHelper.GetNodeValue(_packageConfig.DocumentElement.SelectSingleNode("/umbPackage/info/package/version"));
- string _packReadme = xmlHelper.GetNodeValue(_packageConfig.DocumentElement.SelectSingleNode("/umbPackage/info/readme"));
- string _packLicense = xmlHelper.GetNodeValue(_packageConfig.DocumentElement.SelectSingleNode("/umbPackage/info/package/license "));
+ string packName = xmlHelper.GetNodeValue(_packageConfig.DocumentElement.SelectSingleNode("/umbPackage/info/package/name"));
+ string packAuthor = xmlHelper.GetNodeValue(_packageConfig.DocumentElement.SelectSingleNode("/umbPackage/info/author/name"));
+ string packAuthorUrl = xmlHelper.GetNodeValue(_packageConfig.DocumentElement.SelectSingleNode("/umbPackage/info/author/website"));
+ string packVersion = xmlHelper.GetNodeValue(_packageConfig.DocumentElement.SelectSingleNode("/umbPackage/info/package/version"));
+ string packReadme = xmlHelper.GetNodeValue(_packageConfig.DocumentElement.SelectSingleNode("/umbPackage/info/readme"));
+ string packLicense = xmlHelper.GetNodeValue(_packageConfig.DocumentElement.SelectSingleNode("/umbPackage/info/package/license "));
//Create a new package instance to record all the installed package adds - this is the same format as the created packages has.
//save the package meta data
- packager.InstalledPackage insPack = packager.InstalledPackage.MakeNew(_packName);
- insPack.Data.Author = _packAuthor;
- insPack.Data.AuthorUrl = _packAuthorUrl;
- insPack.Data.Version = _packVersion;
- insPack.Data.Readme = _packReadme;
- insPack.Data.License = _packLicense;
+ var insPack = InstalledPackage.MakeNew(packName);
+ insPack.Data.Author = packAuthor;
+ insPack.Data.AuthorUrl = packAuthorUrl;
+ insPack.Data.Version = packVersion;
+ insPack.Data.Readme = packReadme;
+ insPack.Data.License = packLicense;
insPack.Data.PackageGuid = guid; //the package unique key.
insPack.Data.RepositoryGuid = repoGuid; //the repository unique key, if the package is a file install, the repository will not get logged.
+ // Get current user, with a fallback
+ var currentUser = new User(0);
+ if (string.IsNullOrEmpty(BasePages.UmbracoEnsuredPage.umbracoUserContextID) == false)
+ {
+ if (BasePages.UmbracoEnsuredPage.ValidateUserContextID(BasePages.UmbracoEnsuredPage.umbracoUserContextID))
+ {
+ currentUser = User.GetCurrent();
+ }
+ }
- //Install languages
+ //Xml as XElement which is used with the new PackagingService
+ var rootElement = _packageConfig.DocumentElement.GetXElement();
+ var packagingService = ApplicationContext.Current.Services.PackagingService;
+
+ #region DataTypes
+ var dataTypeElement = rootElement.Descendants("DataTypes").First();
+ var dataTypeDefinitions = packagingService.ImportDataTypeDefinitions(dataTypeElement, currentUser.Id);
+ foreach (var dataTypeDefinition in dataTypeDefinitions)
+ {
+ insPack.Data.DataTypes.Add(dataTypeDefinition.Id.ToString(CultureInfo.InvariantCulture));
+ }
+ #endregion
+
+ #region Install Languages
foreach (XmlNode n in _packageConfig.DocumentElement.SelectNodes("//Language"))
{
language.Language newLang = language.Language.Import(n);
@@ -530,8 +589,9 @@ namespace umbraco.cms.businesslogic.packager
if (newLang != null)
insPack.Data.Languages.Add(newLang.id.ToString());
}
+ #endregion
- //Install dictionary items
+ #region Install Dictionary Items
foreach (XmlNode n in _packageConfig.DocumentElement.SelectNodes("./DictionaryItems/DictionaryItem"))
{
Dictionary.DictionaryItem newDi = Dictionary.DictionaryItem.Import(n);
@@ -539,23 +599,25 @@ namespace umbraco.cms.businesslogic.packager
if (newDi != null)
insPack.Data.DictionaryItems.Add(newDi.id.ToString());
}
+ #endregion
- // Install macros
+ #region Install Macros
foreach (XmlNode n in _packageConfig.DocumentElement.SelectNodes("//macro"))
{
- cms.businesslogic.macro.Macro m = cms.businesslogic.macro.Macro.Import(n);
+ Macro m = Macro.Import(n);
if (m != null)
insPack.Data.Macros.Add(m.Id.ToString());
}
+ #endregion
- // Move files
+ #region Move files
string basePath = System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath;
foreach (XmlNode n in _packageConfig.DocumentElement.SelectNodes("//file"))
{
- String destPath = getFileName(basePath, xmlHelper.GetNodeValue(n.SelectSingleNode("orgPath")));
- String sourceFile = getFileName(tempDir, xmlHelper.GetNodeValue(n.SelectSingleNode("guid")));
- String destFile = getFileName(destPath, xmlHelper.GetNodeValue(n.SelectSingleNode("orgName")));
+ String destPath = GetFileName(basePath, xmlHelper.GetNodeValue(n.SelectSingleNode("orgPath")));
+ String sourceFile = GetFileName(tempDir, xmlHelper.GetNodeValue(n.SelectSingleNode("guid")));
+ String destFile = GetFileName(destPath, xmlHelper.GetNodeValue(n.SelectSingleNode("orgName")));
// Create the destination directory if it doesn't exist
if (!Directory.Exists(destPath))
@@ -569,33 +631,36 @@ namespace umbraco.cms.businesslogic.packager
//PPH log file install
insPack.Data.Files.Add(xmlHelper.GetNodeValue(n.SelectSingleNode("orgPath")) + "/" + xmlHelper.GetNodeValue(n.SelectSingleNode("orgName")));
}
+ #endregion
-
- // Get current user
- BusinessLogic.User u = User.GetCurrent();
-
- // Add Templates
- foreach (XmlNode n in _packageConfig.DocumentElement.SelectNodes("Templates/Template"))
+ #region Install Templates
+ var templateElement = rootElement.Descendants("Templates").First();
+ var templates = packagingService.ImportTemplates(templateElement, currentUser.Id);
+ foreach (var template in templates)
{
- template.Template t = template.Template.MakeNew(xmlHelper.GetNodeValue(n.SelectSingleNode("Name")), u);
+ insPack.Data.Templates.Add(template.Id.ToString(CultureInfo.InvariantCulture));
+ }
+ /*foreach (XmlNode n in _packageConfig.DocumentElement.SelectNodes("Templates/Template"))
+ {
+ Template t = Template.MakeNew(xmlHelper.GetNodeValue(n.SelectSingleNode("Name")), currentUser);
t.Alias = xmlHelper.GetNodeValue(n.SelectSingleNode("Alias"));
t.ImportDesign(xmlHelper.GetNodeValue(n.SelectSingleNode("Design")));
insPack.Data.Templates.Add(t.Id.ToString());
}
-
+
// Add master templates
foreach (XmlNode n in _packageConfig.DocumentElement.SelectNodes("Templates/Template"))
{
string master = xmlHelper.GetNodeValue(n.SelectSingleNode("Master"));
- template.Template t = template.Template.GetByAlias(xmlHelper.GetNodeValue(n.SelectSingleNode("Alias")));
+ Template t = Template.GetByAlias(xmlHelper.GetNodeValue(n.SelectSingleNode("Alias")));
if (master.Trim() != "")
{
- template.Template masterTemplate = template.Template.GetByAlias(master);
+ Template masterTemplate = Template.GetByAlias(master);
if (masterTemplate != null)
{
- t.MasterTemplate = template.Template.GetByAlias(master).Id;
+ t.MasterTemplate = Template.GetByAlias(master).Id;
if (UmbracoSettings.UseAspNetMasterPages)
t.SaveMasterPageFile(t.Design);
}
@@ -606,12 +671,19 @@ namespace umbraco.cms.businesslogic.packager
t.ImportDesign(xmlHelper.GetNodeValue(n.SelectSingleNode("Design")));
t.SaveMasterPageFile(t.Design);
}
- }
+ }*/
+ #endregion
- // Add documenttypes
- foreach (XmlNode n in _packageConfig.DocumentElement.SelectNodes("DocumentTypes/DocumentType"))
+ #region Install DocumentTypes
+ var docTypeElement = rootElement.Descendants("DocumentTypes").First();
+ var contentTypes = packagingService.ImportContentTypes(docTypeElement, currentUser.Id);
+ foreach (var contentType in contentTypes)
{
- ImportDocumentType(n, u, false);
+ insPack.Data.Documenttypes.Add(contentType.Id.ToString(CultureInfo.InvariantCulture));
+ }
+ /*foreach (XmlNode n in _packageConfig.DocumentElement.SelectNodes("DocumentTypes/DocumentType"))
+ {
+ ImportDocumentType(n, currentUser, false);
}
// Add documenttype structure
@@ -634,13 +706,14 @@ namespace umbraco.cms.businesslogic.packager
//PPH we log the document type install here.
insPack.Data.Documenttypes.Add(dt.Id.ToString());
}
- }
+ }*/
+ #endregion
- // Stylesheets
+ #region Install Stylesheets
foreach (XmlNode n in _packageConfig.DocumentElement.SelectNodes("Stylesheets/Stylesheet"))
{
StyleSheet s = StyleSheet.MakeNew(
- u,
+ currentUser,
xmlHelper.GetNodeValue(n.SelectSingleNode("Name")),
xmlHelper.GetNodeValue(n.SelectSingleNode("FileName")),
xmlHelper.GetNodeValue(n.SelectSingleNode("Content")));
@@ -650,7 +723,7 @@ namespace umbraco.cms.businesslogic.packager
StylesheetProperty sp = StylesheetProperty.MakeNew(
xmlHelper.GetNodeValue(prop.SelectSingleNode("Name")),
s,
- u);
+ currentUser);
sp.Alias = xmlHelper.GetNodeValue(prop.SelectSingleNode("Alias"));
sp.value = xmlHelper.GetNodeValue(prop.SelectSingleNode("Value"));
}
@@ -659,20 +732,29 @@ namespace umbraco.cms.businesslogic.packager
insPack.Data.Stylesheets.Add(s.Id.ToString());
}
+ #endregion
- // Documents
- foreach (XmlElement n in _packageConfig.DocumentElement.SelectNodes("Documents/DocumentSet [@importMode = 'root']/*"))
+ #region Install Documents
+ var documentElement = rootElement.Descendants("DocumentSet").First();
+ var content = packagingService.ImportContent(documentElement, -1, currentUser.Id);
+
+ var firstContentItem = content.First();
+ insPack.Data.ContentNodeId = firstContentItem.Id.ToString(CultureInfo.InvariantCulture);
+
+ /*foreach (XmlElement n in _packageConfig.DocumentElement.SelectNodes("Documents/DocumentSet [@importMode = 'root']/*"))
{
- cms.businesslogic.web.Document.Import(-1, u, n);
+ Document.Import(-1, currentUser, n);
//PPH todo log document install...
- }
+ }*/
+ #endregion
+ #region Install Actions
foreach (XmlNode n in _packageConfig.DocumentElement.SelectNodes("Actions/Action [@runat != 'uninstall']"))
{
try
{
- packager.PackageAction.RunPackageAction(_packName, n.Attributes["alias"].Value, n);
+ PackageAction.RunPackageAction(packName, n.Attributes["alias"].Value, n);
}
catch { }
}
@@ -682,268 +764,11 @@ namespace umbraco.cms.businesslogic.packager
{
insPack.Data.Actions += n.OuterXml;
}
-
+ #endregion
insPack.Save();
-
-
}
-
- public static void ImportDocumentType(XmlNode n, BusinessLogic.User u, bool ImportStructure)
- {
- DocumentType dt = DocumentType.GetByAlias(xmlHelper.GetNodeValue(n.SelectSingleNode("Info/Alias")));
- if (dt == null)
- {
- dt = DocumentType.MakeNew(u, xmlHelper.GetNodeValue(n.SelectSingleNode("Info/Name")));
- dt.Alias = xmlHelper.GetNodeValue(n.SelectSingleNode("Info/Alias"));
-
-
- //Master content type
- DocumentType mdt = DocumentType.GetByAlias(xmlHelper.GetNodeValue(n.SelectSingleNode("Info/Master")));
- if (mdt != null)
- dt.MasterContentType = mdt.Id;
- }
- else
- {
- dt.Text = xmlHelper.GetNodeValue(n.SelectSingleNode("Info/Name"));
- }
-
-
- // Info
- dt.IconUrl = xmlHelper.GetNodeValue(n.SelectSingleNode("Info/Icon"));
- dt.Thumbnail = xmlHelper.GetNodeValue(n.SelectSingleNode("Info/Thumbnail"));
- dt.Description = xmlHelper.GetNodeValue(n.SelectSingleNode("Info/Description"));
-
- // Allow at root (check for node due to legacy)
- bool allowAtRoot = false;
- string allowAtRootNode = xmlHelper.GetNodeValue(n.SelectSingleNode("Info/AllowAtRoot"));
- if (!String.IsNullOrEmpty(allowAtRootNode))
- {
- bool.TryParse(allowAtRootNode, out allowAtRoot);
- }
- dt.AllowAtRoot = allowAtRoot;
-
- // Templates
- ArrayList templates = new ArrayList();
- foreach (XmlNode tem in n.SelectNodes("Info/AllowedTemplates/Template"))
- {
- template.Template t = template.Template.GetByAlias(xmlHelper.GetNodeValue(tem));
- if (t != null)
- templates.Add(t);
- }
-
- try
- {
- template.Template[] at = new template.Template[templates.Count];
- for (int i = 0; i < templates.Count; i++)
- at[i] = (template.Template)templates[i];
- dt.allowedTemplates = at;
- }
- catch (Exception ee)
- {
- LogHelper.Error("Packager: Error handling allowed templates", ee);
- }
-
- // Default template
- try
- {
- if (xmlHelper.GetNodeValue(n.SelectSingleNode("Info/DefaultTemplate")) != "")
- dt.DefaultTemplate = template.Template.GetByAlias(xmlHelper.GetNodeValue(n.SelectSingleNode("Info/DefaultTemplate"))).Id;
- }
- catch (Exception ee)
- {
- LogHelper.Error("Packager: Error assigning default template", ee);
- }
-
- // Tabs
- cms.businesslogic.ContentType.TabI[] tabs = dt.getVirtualTabs;
- string tabNames = ";";
- for (int t = 0; t < tabs.Length; t++)
- tabNames += tabs[t].Caption + ";";
-
-
-
- Hashtable ht = new Hashtable();
- foreach (XmlNode t in n.SelectNodes("Tabs/Tab"))
- {
- if (tabNames.IndexOf(";" + xmlHelper.GetNodeValue(t.SelectSingleNode("Caption")) + ";") == -1)
- {
- ht.Add(int.Parse(xmlHelper.GetNodeValue(t.SelectSingleNode("Id"))),
- dt.AddVirtualTab(xmlHelper.GetNodeValue(t.SelectSingleNode("Caption"))));
- }
- }
-
- dt.ClearVirtualTabs();
- // Get all tabs in hashtable
- Hashtable tabList = new Hashtable();
- foreach (cms.businesslogic.ContentType.TabI t in dt.getVirtualTabs.ToList())
- {
- if (!tabList.ContainsKey(t.Caption))
- tabList.Add(t.Caption, t.Id);
- }
-
- // Generic Properties
- datatype.controls.Factory f = new datatype.controls.Factory();
- foreach (XmlNode gp in n.SelectNodes("GenericProperties/GenericProperty"))
- {
- int dfId = 0;
- Guid dtId = new Guid(xmlHelper.GetNodeValue(gp.SelectSingleNode("Type")));
-
- if (gp.SelectSingleNode("Definition") != null && !string.IsNullOrEmpty(xmlHelper.GetNodeValue(gp.SelectSingleNode("Definition"))))
- {
- Guid dtdId = new Guid(xmlHelper.GetNodeValue(gp.SelectSingleNode("Definition")));
- if (CMSNode.IsNode(dtdId))
- dfId = new CMSNode(dtdId).Id;
- }
- if (dfId == 0)
- {
- try
- {
- dfId = findDataTypeDefinitionFromType(ref dtId);
- }
- catch
- {
- throw new Exception(String.Format("Could not find datatype with id {0}.", dtId));
- }
- }
-
- // Fix for rich text editor backwards compatibility
- if (dfId == 0 && dtId == new Guid("a3776494-0574-4d93-b7de-efdfdec6f2d1"))
- {
- dtId = new Guid(Constants.PropertyEditors.TinyMCE);
- dfId = findDataTypeDefinitionFromType(ref dtId);
- }
-
- if (dfId != 0)
- {
- PropertyType pt = dt.getPropertyType(xmlHelper.GetNodeValue(gp.SelectSingleNode("Alias")));
- if (pt == null)
- {
- dt.AddPropertyType(
- datatype.DataTypeDefinition.GetDataTypeDefinition(dfId),
- xmlHelper.GetNodeValue(gp.SelectSingleNode("Alias")),
- xmlHelper.GetNodeValue(gp.SelectSingleNode("Name"))
- );
- pt = dt.getPropertyType(xmlHelper.GetNodeValue(gp.SelectSingleNode("Alias")));
- }
- else
- {
- pt.DataTypeDefinition = datatype.DataTypeDefinition.GetDataTypeDefinition(dfId);
- pt.Name = xmlHelper.GetNodeValue(gp.SelectSingleNode("Name"));
- }
-
- pt.Mandatory = bool.Parse(xmlHelper.GetNodeValue(gp.SelectSingleNode("Mandatory")));
- pt.ValidationRegExp = xmlHelper.GetNodeValue(gp.SelectSingleNode("Validation"));
- pt.Description = xmlHelper.GetNodeValue(gp.SelectSingleNode("Description"));
-
- // tab
- try
- {
- if (tabList.ContainsKey(xmlHelper.GetNodeValue(gp.SelectSingleNode("Tab"))))
- pt.TabId = (int)tabList[xmlHelper.GetNodeValue(gp.SelectSingleNode("Tab"))];
- }
- catch (Exception ee)
- {
- LogHelper.Error("Packager: Error assigning property to tab", ee);
- }
- }
- }
-
- if (ImportStructure)
- {
- if (dt != null)
- {
- ArrayList allowed = new ArrayList();
- foreach (XmlNode structure in n.SelectNodes("Structure/DocumentType"))
- {
- DocumentType dtt = DocumentType.GetByAlias(xmlHelper.GetNodeValue(structure));
- if (dtt != null)
- allowed.Add(dtt.Id);
- }
- int[] adt = new int[allowed.Count];
- for (int i = 0; i < allowed.Count; i++)
- adt[i] = (int)allowed[i];
- dt.AllowedChildContentTypeIDs = adt;
- }
- }
-
- // clear caching (NOTE: SD: there is no tab caching so this really doesn't do anything)
- foreach (DocumentType.TabI t in dt.getVirtualTabs.ToList())
- DocumentType.FlushTabCache(t.Id, dt.Id);
-
- dt.Save();
- }
-
- ///
- /// Gets the name of the file in the specified path.
- /// Corrects possible problems with slashes that would result from a simple concatenation.
- /// Can also be used to concatenate paths.
- ///
- /// The path.
- /// Name of the file.
- /// The name of the file in the specified path.
- private static String getFileName(String path, string fileName)
- {
- // virtual dir support
- fileName = IOHelper.FindFile(fileName);
-
- if (path.Contains("[$"))
- {
- //this is experimental and undocumented...
- path = path.Replace("[$UMBRACO]", IO.SystemDirectories.Umbraco);
- path = path.Replace("[$UMBRACOCLIENT]", IO.SystemDirectories.Umbraco_client);
- path = path.Replace("[$CONFIG]", IO.SystemDirectories.Config);
- path = path.Replace("[$DATA]", IO.SystemDirectories.Data);
- }
-
- //to support virtual dirs we try to lookup the file...
- path = IOHelper.FindFile(path);
-
-
-
- Debug.Assert(path != null && path.Length >= 1);
- Debug.Assert(fileName != null && fileName.Length >= 1);
-
- path = path.Replace('/', '\\');
- fileName = fileName.Replace('/', '\\');
-
- // Does filename start with a slash? Does path end with one?
- bool fileNameStartsWithSlash = (fileName[0] == Path.DirectorySeparatorChar);
- bool pathEndsWithSlash = (path[path.Length - 1] == Path.DirectorySeparatorChar);
-
- // Path ends with a slash
- if (pathEndsWithSlash)
- {
- if (!fileNameStartsWithSlash)
- // No double slash, just concatenate
- return path + fileName;
- else
- // Double slash, exclude that of the file
- return path + fileName.Substring(1);
- }
- else
- {
- if (fileNameStartsWithSlash)
- // Required slash specified, just concatenate
- return path + fileName;
- else
- // Required slash missing, add it
- return path + Path.DirectorySeparatorChar + fileName;
- }
- }
-
- private static int findDataTypeDefinitionFromType(ref Guid dtId)
- {
- int dfId = 0;
- foreach (datatype.DataTypeDefinition df in datatype.DataTypeDefinition.GetAll())
- if (df.DataType.Id == dtId)
- {
- dfId = df.Id;
- break;
- }
- return dfId;
- }
-
+
///
/// Reads the configuration of the package from the configuration xmldocument
///
@@ -969,8 +794,8 @@ namespace umbraco.cms.businesslogic.packager
foreach (XmlNode n in _packageConfig.DocumentElement.SelectNodes("//file"))
{
bool badFile = false;
- string destPath = getFileName(basePath, xmlHelper.GetNodeValue(n.SelectSingleNode("orgPath")));
- string destFile = getFileName(destPath, xmlHelper.GetNodeValue(n.SelectSingleNode("orgName")));
+ string destPath = GetFileName(basePath, xmlHelper.GetNodeValue(n.SelectSingleNode("orgPath")));
+ string destFile = GetFileName(destPath, xmlHelper.GetNodeValue(n.SelectSingleNode("orgName")));
if (destPath.ToLower().Contains(IOHelper.DirSepChar + "app_code"))
badFile = true;
@@ -1038,25 +863,317 @@ namespace umbraco.cms.businesslogic.packager
_readme = xmlHelper.GetNodeValue(_packageConfig.DocumentElement.SelectSingleNode("/umbPackage/info/readme"));
}
catch { }
+
try
{
_control = xmlHelper.GetNodeValue(_packageConfig.DocumentElement.SelectSingleNode("/umbPackage/control"));
}
catch { }
}
+
+ ///
+ /// This uses the old method of fetching and only supports the packages.umbraco.org repository.
+ ///
+ ///
+ ///
+ public string Fetch(Guid Package)
+ {
+ // Check for package directory
+ if (!Directory.Exists(IOHelper.MapPath(SystemDirectories.Packages)))
+ Directory.CreateDirectory(IOHelper.MapPath(SystemDirectories.Packages));
- private string unPack(string ZipName)
+ var wc = new System.Net.WebClient();
+
+ wc.DownloadFile(
+ "http://" + UmbracoSettings.PackageServer + "/fetch?package=" + Package.ToString(),
+ IOHelper.MapPath(SystemDirectories.Packages + "/" + Package.ToString() + ".umb"));
+
+ return "packages\\" + Package.ToString() + ".umb";
+ }
+
+ #endregion
+
+ #region Public Static Methods
+
+ [Obsolete("This method is empty, so calling it will have no effect whatsoever.")]
+ public static void updatePackageInfo(Guid Package, int VersionMajor, int VersionMinor, int VersionPatch, User User)
+ {
+ //Why does this even exist?
+ }
+
+ [Obsolete("Use ApplicationContext.Current.Services.PackagingService.ImportContentTypes instead")]
+ public static void ImportDocumentType(XmlNode n, User u, bool ImportStructure)
+ {
+ var element = n.GetXElement();
+ var contentTypes = ApplicationContext.Current.Services.PackagingService.ImportContentTypes(element, u.Id);
+ /*DocumentType dt = DocumentType.GetByAlias(xmlHelper.GetNodeValue(n.SelectSingleNode("Info/Alias")));
+ if (dt == null)
+ {
+ dt = DocumentType.MakeNew(u, xmlHelper.GetNodeValue(n.SelectSingleNode("Info/Name")));
+ dt.Alias = xmlHelper.GetNodeValue(n.SelectSingleNode("Info/Alias"));
+
+
+ //Master content type
+ DocumentType mdt = DocumentType.GetByAlias(xmlHelper.GetNodeValue(n.SelectSingleNode("Info/Master")));
+ if (mdt != null)
+ dt.MasterContentType = mdt.Id;
+ }
+ else
+ {
+ dt.Text = xmlHelper.GetNodeValue(n.SelectSingleNode("Info/Name"));
+ }
+
+
+ // Info
+ dt.IconUrl = xmlHelper.GetNodeValue(n.SelectSingleNode("Info/Icon"));
+ dt.Thumbnail = xmlHelper.GetNodeValue(n.SelectSingleNode("Info/Thumbnail"));
+ dt.Description = xmlHelper.GetNodeValue(n.SelectSingleNode("Info/Description"));
+
+ // Allow at root (check for node due to legacy)
+ bool allowAtRoot = false;
+ string allowAtRootNode = xmlHelper.GetNodeValue(n.SelectSingleNode("Info/AllowAtRoot"));
+ if (!String.IsNullOrEmpty(allowAtRootNode))
+ {
+ bool.TryParse(allowAtRootNode, out allowAtRoot);
+ }
+ dt.AllowAtRoot = allowAtRoot;
+
+ // Templates
+ ArrayList templates = new ArrayList();
+ foreach (XmlNode tem in n.SelectNodes("Info/AllowedTemplates/Template"))
+ {
+ template.Template t = template.Template.GetByAlias(xmlHelper.GetNodeValue(tem));
+ if (t != null)
+ templates.Add(t);
+ }
+
+ try
+ {
+ template.Template[] at = new template.Template[templates.Count];
+ for (int i = 0; i < templates.Count; i++)
+ at[i] = (template.Template)templates[i];
+ dt.allowedTemplates = at;
+ }
+ catch (Exception ee)
+ {
+ LogHelper.Error("Packager: Error handling allowed templates", ee);
+ }
+
+ // Default template
+ try
+ {
+ if (xmlHelper.GetNodeValue(n.SelectSingleNode("Info/DefaultTemplate")) != "")
+ dt.DefaultTemplate = template.Template.GetByAlias(xmlHelper.GetNodeValue(n.SelectSingleNode("Info/DefaultTemplate"))).Id;
+ }
+ catch (Exception ee)
+ {
+ LogHelper.Error("Packager: Error assigning default template", ee);
+ }
+
+ // Tabs
+ cms.businesslogic.ContentType.TabI[] tabs = dt.getVirtualTabs;
+ string tabNames = ";";
+ for (int t = 0; t < tabs.Length; t++)
+ tabNames += tabs[t].Caption + ";";
+
+
+ //So the Tab is added to the DocumentType and then to this Hashtable, but its never used anywhere - WHY?
+ Hashtable ht = new Hashtable();
+ foreach (XmlNode t in n.SelectNodes("Tabs/Tab"))
+ {
+ if (tabNames.IndexOf(";" + xmlHelper.GetNodeValue(t.SelectSingleNode("Caption")) + ";") == -1)
+ {
+ ht.Add(int.Parse(xmlHelper.GetNodeValue(t.SelectSingleNode("Id"))),
+ dt.AddVirtualTab(xmlHelper.GetNodeValue(t.SelectSingleNode("Caption"))));
+ }
+ }
+
+ dt.ClearVirtualTabs();
+ // Get all tabs in hashtable
+ Hashtable tabList = new Hashtable();
+ foreach (cms.businesslogic.ContentType.TabI t in dt.getVirtualTabs.ToList())
+ {
+ if (!tabList.ContainsKey(t.Caption))
+ tabList.Add(t.Caption, t.Id);
+ }
+
+ // Generic Properties
+ datatype.controls.Factory f = new datatype.controls.Factory();
+ foreach (XmlNode gp in n.SelectNodes("GenericProperties/GenericProperty"))
+ {
+ int dfId = 0;
+ Guid dtId = new Guid(xmlHelper.GetNodeValue(gp.SelectSingleNode("Type")));
+
+ if (gp.SelectSingleNode("Definition") != null && !string.IsNullOrEmpty(xmlHelper.GetNodeValue(gp.SelectSingleNode("Definition"))))
+ {
+ Guid dtdId = new Guid(xmlHelper.GetNodeValue(gp.SelectSingleNode("Definition")));
+ if (CMSNode.IsNode(dtdId))
+ dfId = new CMSNode(dtdId).Id;
+ }
+ if (dfId == 0)
+ {
+ try
+ {
+ dfId = FindDataTypeDefinitionFromType(ref dtId);
+ }
+ catch
+ {
+ throw new Exception(String.Format("Could not find datatype with id {0}.", dtId));
+ }
+ }
+
+ // Fix for rich text editor backwards compatibility
+ if (dfId == 0 && dtId == new Guid("a3776494-0574-4d93-b7de-efdfdec6f2d1"))
+ {
+ dtId = new Guid(Constants.PropertyEditors.TinyMCE);
+ dfId = FindDataTypeDefinitionFromType(ref dtId);
+ }
+
+ if (dfId != 0)
+ {
+ PropertyType pt = dt.getPropertyType(xmlHelper.GetNodeValue(gp.SelectSingleNode("Alias")));
+ if (pt == null)
+ {
+ dt.AddPropertyType(
+ datatype.DataTypeDefinition.GetDataTypeDefinition(dfId),
+ xmlHelper.GetNodeValue(gp.SelectSingleNode("Alias")),
+ xmlHelper.GetNodeValue(gp.SelectSingleNode("Name"))
+ );
+ pt = dt.getPropertyType(xmlHelper.GetNodeValue(gp.SelectSingleNode("Alias")));
+ }
+ else
+ {
+ pt.DataTypeDefinition = datatype.DataTypeDefinition.GetDataTypeDefinition(dfId);
+ pt.Name = xmlHelper.GetNodeValue(gp.SelectSingleNode("Name"));
+ }
+
+ pt.Mandatory = bool.Parse(xmlHelper.GetNodeValue(gp.SelectSingleNode("Mandatory")));
+ pt.ValidationRegExp = xmlHelper.GetNodeValue(gp.SelectSingleNode("Validation"));
+ pt.Description = xmlHelper.GetNodeValue(gp.SelectSingleNode("Description"));
+
+ // tab
+ try
+ {
+ if (tabList.ContainsKey(xmlHelper.GetNodeValue(gp.SelectSingleNode("Tab"))))
+ pt.TabId = (int)tabList[xmlHelper.GetNodeValue(gp.SelectSingleNode("Tab"))];
+ }
+ catch (Exception ee)
+ {
+ LogHelper.Error("Packager: Error assigning property to tab", ee);
+ }
+ }
+ }
+
+ if (ImportStructure)
+ {
+ if (dt != null)
+ {
+ ArrayList allowed = new ArrayList();
+ foreach (XmlNode structure in n.SelectNodes("Structure/DocumentType"))
+ {
+ DocumentType dtt = DocumentType.GetByAlias(xmlHelper.GetNodeValue(structure));
+ if (dtt != null)
+ allowed.Add(dtt.Id);
+ }
+ int[] adt = new int[allowed.Count];
+ for (int i = 0; i < allowed.Count; i++)
+ adt[i] = (int)allowed[i];
+ dt.AllowedChildContentTypeIDs = adt;
+ }
+ }
+
+ // clear caching (NOTE: SD: there is no tab caching so this really doesn't do anything)
+ foreach (DocumentType.TabI t in dt.getVirtualTabs.ToList())
+ DocumentType.FlushTabCache(t.Id, dt.Id);
+
+ dt.Save();*/
+ }
+
+ #endregion
+
+ #region Private Methods
+
+ ///
+ /// Gets the name of the file in the specified path.
+ /// Corrects possible problems with slashes that would result from a simple concatenation.
+ /// Can also be used to concatenate paths.
+ ///
+ /// The path.
+ /// Name of the file.
+ /// The name of the file in the specified path.
+ private static String GetFileName(String path, string fileName)
+ {
+ // virtual dir support
+ fileName = IOHelper.FindFile(fileName);
+
+ if (path.Contains("[$"))
+ {
+ //this is experimental and undocumented...
+ path = path.Replace("[$UMBRACO]", IO.SystemDirectories.Umbraco);
+ path = path.Replace("[$UMBRACOCLIENT]", IO.SystemDirectories.Umbraco_client);
+ path = path.Replace("[$CONFIG]", IO.SystemDirectories.Config);
+ path = path.Replace("[$DATA]", IO.SystemDirectories.Data);
+ }
+
+ //to support virtual dirs we try to lookup the file...
+ path = IOHelper.FindFile(path);
+
+
+
+ Debug.Assert(path != null && path.Length >= 1);
+ Debug.Assert(fileName != null && fileName.Length >= 1);
+
+ path = path.Replace('/', '\\');
+ fileName = fileName.Replace('/', '\\');
+
+ // Does filename start with a slash? Does path end with one?
+ bool fileNameStartsWithSlash = (fileName[0] == Path.DirectorySeparatorChar);
+ bool pathEndsWithSlash = (path[path.Length - 1] == Path.DirectorySeparatorChar);
+
+ // Path ends with a slash
+ if (pathEndsWithSlash)
+ {
+ if (!fileNameStartsWithSlash)
+ // No double slash, just concatenate
+ return path + fileName;
+ else
+ // Double slash, exclude that of the file
+ return path + fileName.Substring(1);
+ }
+ else
+ {
+ if (fileNameStartsWithSlash)
+ // Required slash specified, just concatenate
+ return path + fileName;
+ else
+ // Required slash missing, add it
+ return path + Path.DirectorySeparatorChar + fileName;
+ }
+ }
+
+ private static int FindDataTypeDefinitionFromType(ref Guid dtId)
+ {
+ int dfId = 0;
+ foreach (datatype.DataTypeDefinition df in datatype.DataTypeDefinition.GetAll())
+ if (df.DataType.Id == dtId)
+ {
+ dfId = df.Id;
+ break;
+ }
+ return dfId;
+ }
+
+ private static string UnPack(string zipName)
{
// Unzip
string tempDir = IOHelper.MapPath(SystemDirectories.Data) + Path.DirectorySeparatorChar + Guid.NewGuid().ToString();
Directory.CreateDirectory(tempDir);
- ZipInputStream s = new ZipInputStream(File.OpenRead(ZipName));
+ var s = new ZipInputStream(File.OpenRead(zipName));
ZipEntry theEntry;
while ((theEntry = s.GetNextEntry()) != null)
{
- string directoryName = Path.GetDirectoryName(theEntry.Name);
string fileName = Path.GetFileName(theEntry.Name);
if (fileName != String.Empty)
@@ -1085,34 +1202,13 @@ namespace umbraco.cms.businesslogic.packager
// Clean up
s.Close();
- File.Delete(ZipName);
+ File.Delete(zipName);
return tempDir;
}
- //this uses the old method of fetching and only supports the packages.umbraco.org repository.
- public string Fetch(Guid Package)
- {
-
- // Check for package directory
- if (!System.IO.Directory.Exists(IOHelper.MapPath(SystemDirectories.Packages)))
- System.IO.Directory.CreateDirectory(IOHelper.MapPath(SystemDirectories.Packages));
-
- System.Net.WebClient wc = new System.Net.WebClient();
-
- wc.DownloadFile(
- "http://" + UmbracoSettings.PackageServer + "/fetch?package=" + Package.ToString(),
- IOHelper.MapPath(SystemDirectories.Packages + "/" + Package.ToString() + ".umb"));
-
- return "packages\\" + Package.ToString() + ".umb";
- }
-
-
- public static void updatePackageInfo(Guid Package, int VersionMajor, int VersionMinor, int VersionPatch, User User)
- {
-
- }
+ #endregion
}
public class Package
diff --git a/src/umbraco.cms/businesslogic/Packager/PackageInstance/InstalledPackage.cs b/src/umbraco.cms/businesslogic/Packager/PackageInstance/InstalledPackage.cs
index 7a3ab5bf29..94c523aeab 100644
--- a/src/umbraco.cms/businesslogic/Packager/PackageInstance/InstalledPackage.cs
+++ b/src/umbraco.cms/businesslogic/Packager/PackageInstance/InstalledPackage.cs
@@ -1,12 +1,13 @@
using System;
using System.Collections.Generic;
-using System.Text;
-using System.Web;
using Umbraco.Core.Logging;
using umbraco.IO;
namespace umbraco.cms.businesslogic.packager {
- public class InstalledPackage {
+ public class InstalledPackage
+ {
+
+ private int _saveHitCount = 0;
public static InstalledPackage GetById(int id) {
InstalledPackage pack = new InstalledPackage();
@@ -27,7 +28,12 @@ namespace umbraco.cms.businesslogic.packager {
return pack;
}
- public void Save() {
+ public void Save()
+ {
+#if DEBUG
+ _saveHitCount++;
+ LogHelper.Info("The InstalledPackage class save method has been hit " + _saveHitCount + " times.");
+#endif
this.FireBeforeSave(EventArgs.Empty);
data.Save(this.Data, IOHelper.MapPath(Settings.InstalledPackagesSettings));
this.FireAfterSave(EventArgs.Empty);
diff --git a/src/umbraco.cms/umbraco.cms.csproj b/src/umbraco.cms/umbraco.cms.csproj
index a8cb396ac6..29e453ebac 100644
--- a/src/umbraco.cms/umbraco.cms.csproj
+++ b/src/umbraco.cms/umbraco.cms.csproj
@@ -158,6 +158,7 @@
{511F6D8D-7717-440A-9A57-A507E9A8B27F}{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ False..\packages\Tidy.Net.1.0.0\lib\TidyNet.dll
diff --git a/src/umbraco.webservices/media/mediaService.cs b/src/umbraco.webservices/media/mediaService.cs
index b0f3e96d1a..47058cb04e 100644
--- a/src/umbraco.webservices/media/mediaService.cs
+++ b/src/umbraco.webservices/media/mediaService.cs
@@ -137,6 +137,7 @@ namespace umbraco.webservices.media
Media m = new Media(id);
+ //TODO Fix this as the Id of the umbracoFile-property is no longer used
var path = _fs.GetRelativePath(m.getProperty(Constants.Conventions.Media.File).Id, filename);
var stream = new MemoryStream();