From 363de53b82c1d940d15d6530c2e723971efb6a04 Mon Sep 17 00:00:00 2001 From: Morten Christensen Date: Mon, 12 Aug 2013 12:42:21 +0200 Subject: [PATCH 1/5] Updates query to limit results in subquery for MySql according to U4-2329 Browsing Media Slow in 6.1.1 --- .../Repositories/EntityRepository.cs | 37 +++++++++---------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/src/Umbraco.Core/Persistence/Repositories/EntityRepository.cs b/src/Umbraco.Core/Persistence/Repositories/EntityRepository.cs index a73c7c943a..8651068030 100644 --- a/src/Umbraco.Core/Persistence/Repositories/EntityRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/EntityRepository.cs @@ -84,7 +84,7 @@ namespace Umbraco.Core.Persistence.Repositories { bool isContent = objectTypeId == new Guid(Constants.ObjectTypes.Document); bool isMedia = objectTypeId == new Guid(Constants.ObjectTypes.Media); - var sql = GetBaseWhere(GetBase, isContent, isMedia, objectTypeId).Append(GetGroupBy(isContent, isMedia)); + var sql = GetBaseWhere(GetBase, isContent, isMedia, string.Empty, objectTypeId).Append(GetGroupBy(isContent, isMedia)); var dtos = isMedia ? _work.Database.Fetch( new UmbracoEntityRelator().Map, sql) @@ -101,7 +101,8 @@ namespace Umbraco.Core.Persistence.Repositories public virtual IEnumerable GetByQuery(IQuery query) { - var sqlClause = GetBase(false, false); + var wheres = string.Concat(" AND ", string.Join(" AND ", ((Query) query).WhereClauses())); + var sqlClause = GetBase(false, false, wheres); var translator = new SqlTranslator(sqlClause, query); var sql = translator.Translate().Append(GetGroupBy(false, false)); @@ -117,7 +118,9 @@ namespace Umbraco.Core.Persistence.Repositories { bool isContent = objectTypeId == new Guid(Constants.ObjectTypes.Document); bool isMedia = objectTypeId == new Guid(Constants.ObjectTypes.Media); - var sqlClause = GetBaseWhere(GetBase, isContent, isMedia, objectTypeId); + + var wheres = string.Concat(" AND ", string.Join(" AND ", ((Query)query).WhereClauses())); + var sqlClause = GetBaseWhere(GetBase, isContent, isMedia, wheres, objectTypeId); var translator = new SqlTranslator(sqlClause, query); var sql = translator.Translate().Append(GetGroupBy(isContent, isMedia)); @@ -136,7 +139,7 @@ namespace Umbraco.Core.Persistence.Repositories #region Sql Statements - protected virtual Sql GetBase(bool isContent, bool isMedia) + protected virtual Sql GetBase(bool isContent, bool isMedia, string additionWhereStatement = "") { var columns = new List { @@ -187,42 +190,38 @@ namespace Umbraco.Core.Persistence.Repositories .On("umbracoNode.id = latest.nodeId"); } - /*if (isContent) - { - sql.LeftJoin( - "(SELECT contentNodeId, versionId, dataNvarchar, controlId FROM cmsPropertyData INNER JOIN cmsPropertyType ON cmsPropertyType.id = cmsPropertyData.propertytypeid" + - " INNER JOIN cmsDataType ON cmsPropertyType.dataTypeId = cmsDataType.nodeId) as property") - .On("umbracoNode.id = property.contentNodeId AND latest.versionId = property.versionId"); - }*/ if (isMedia) { sql.LeftJoin( - "(SELECT contentNodeId, versionId, dataNvarchar, controlId FROM cmsPropertyData INNER JOIN cmsPropertyType ON cmsPropertyType.id = cmsPropertyData.propertytypeid" + - " INNER JOIN cmsDataType ON cmsPropertyType.dataTypeId = cmsDataType.nodeId) as property") + "(SELECT contentNodeId, versionId, dataNvarchar, controlId FROM cmsPropertyData " + + "INNER JOIN umbracoNode ON cmsPropertyData.contentNodeId = umbracoNode.id " + + "INNER JOIN cmsPropertyType ON cmsPropertyType.id = cmsPropertyData.propertytypeid " + + "INNER JOIN cmsDataType ON cmsPropertyType.dataTypeId = cmsDataType.nodeId "+ + "WHERE umbracoNode.nodeObjectType = '" + Constants.ObjectTypes.Media + "'" + additionWhereStatement + ") as property") .On("umbracoNode.id = property.contentNodeId"); } return sql; } - protected virtual Sql GetBaseWhere(Func baseQuery, bool isContent, bool isMedia, Guid id) + protected virtual Sql GetBaseWhere(Func baseQuery, bool isContent, bool isMedia, string additionWhereStatement, Guid id) { - var sql = baseQuery(isContent, isMedia) + var sql = baseQuery(isContent, isMedia, additionWhereStatement) .Where("umbracoNode.nodeObjectType = @NodeObjectType", new { NodeObjectType = id }); return sql; } - protected virtual Sql GetBaseWhere(Func baseQuery, bool isContent, bool isMedia, int id) + protected virtual Sql GetBaseWhere(Func baseQuery, bool isContent, bool isMedia, int id) { - var sql = baseQuery(isContent, isMedia) + var sql = baseQuery(isContent, isMedia, " AND umbracoNode.id = '"+ id +"'") .Where("umbracoNode.id = @Id", new { Id = id }) .Append(GetGroupBy(isContent, isMedia)); return sql; } - protected virtual Sql GetBaseWhere(Func baseQuery, bool isContent, bool isMedia, Guid objectId, int id) + protected virtual Sql GetBaseWhere(Func baseQuery, bool isContent, bool isMedia, Guid objectId, int id) { - var sql = baseQuery(isContent, isMedia) + var sql = baseQuery(isContent, isMedia, " AND umbracoNode.id = '"+ id +"'") .Where("umbracoNode.id = @Id AND umbracoNode.nodeObjectType = @NodeObjectType", new {Id = id, NodeObjectType = objectId}); return sql; From 86811fe5075ec3d5ce0d2e0bc97260857c19a252 Mon Sep 17 00:00:00 2001 From: Morten Christensen Date: Mon, 12 Aug 2013 16:20:32 +0200 Subject: [PATCH 2/5] Fixes U4-2397 IContent Properties added with incorrect Value when read from Cache, and adds unit test for verifying types saved and returned for 24 standard DataTypes. --- src/Umbraco.Core/Models/ContentBase.cs | 5 ++- .../Migrations/Initial/BaseDataCreation.cs | 20 --------- .../Services/ContentServiceTests.cs | 42 +++++++++++++++++ .../TestHelpers/Entities/MockedContent.cs | 32 +++++++++++++ .../Entities/MockedContentTypes.cs | 45 +++++++++++++++++++ .../BaseTreePickerEditor.cs | 2 +- 6 files changed, 124 insertions(+), 22 deletions(-) diff --git a/src/Umbraco.Core/Models/ContentBase.cs b/src/Umbraco.Core/Models/ContentBase.cs index cc5cfcdee5..738a896155 100644 --- a/src/Umbraco.Core/Models/ContentBase.cs +++ b/src/Umbraco.Core/Models/ContentBase.cs @@ -293,7 +293,10 @@ namespace Umbraco.Core.Models /// Value as a public virtual TPassType GetValue(string propertyTypeAlias) { - return (TPassType)Properties[propertyTypeAlias].Value; + if (Properties[propertyTypeAlias].Value is TPassType) + return (TPassType)Properties[propertyTypeAlias].Value; + + return (TPassType)Convert.ChangeType(Properties[propertyTypeAlias].Value, typeof(TPassType)); } /// diff --git a/src/Umbraco.Core/Persistence/Migrations/Initial/BaseDataCreation.cs b/src/Umbraco.Core/Persistence/Migrations/Initial/BaseDataCreation.cs index 7fc81b1db7..b50102396a 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Initial/BaseDataCreation.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Initial/BaseDataCreation.cs @@ -223,8 +223,6 @@ namespace Umbraco.Core.Persistence.Migrations.Initial _database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 4, DataTypeId = -88, ControlId = new Guid(Constants.PropertyEditors.Textbox), DbType = "Nvarchar" }); _database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 5, DataTypeId = -89, ControlId = new Guid(Constants.PropertyEditors.TextboxMultiple), DbType = "Ntext" }); _database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 6, DataTypeId = -90, ControlId = new Guid(Constants.PropertyEditors.UploadField), DbType = "Nvarchar" }); - //Dropdown list - //_database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 12, DataTypeId = -91, ControlId = new Guid("a74ea9c9-8e18-4d2a-8cf6-73c6206c5da6"), DbType = "Nvarchar" }); _database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 7, DataTypeId = -92, ControlId = new Guid(Constants.PropertyEditors.NoEdit), DbType = "Nvarchar" }); _database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 8, DataTypeId = -36, ControlId = new Guid(Constants.PropertyEditors.DateTime), DbType = "Date" }); _database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 9, DataTypeId = -37, ControlId = new Guid(Constants.PropertyEditors.ColorPicker), DbType = "Nvarchar" }); @@ -234,24 +232,6 @@ namespace Umbraco.Core.Persistence.Migrations.Initial _database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 13, DataTypeId = -41, ControlId = new Guid(Constants.PropertyEditors.Date), DbType = "Date" }); _database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 14, DataTypeId = -42, ControlId = new Guid(Constants.PropertyEditors.DropDownList), DbType = "Integer" }); _database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 15, DataTypeId = -43, ControlId = new Guid(Constants.PropertyEditors.CheckBoxList), DbType = "Nvarchar" }); - // Fix for rich text editor backwards compatibility -> 83722133-f80c-4273-bdb6-1befaa04a612 TinyMCE DataType - //_database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 22, DataTypeId = -44, ControlId = new Guid("a3776494-0574-4d93-b7de-efdfdec6f2d1"), DbType = "Ntext" }); - //Radiobutton list - //_database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 23, DataTypeId = -128, ControlId = new Guid("a52c7c1c-c330-476e-8605-d63d3b84b6a6"), DbType = "Nvarchar" }); - //Dropdown list multiple - //_database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 24, DataTypeId = -129, ControlId = new Guid("928639ed-9c73-4028-920c-1e55dbb68783"), DbType = "Nvarchar" }); - //Dropdown list - //_database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 25, DataTypeId = -130, ControlId = new Guid("a74ea9c9-8e18-4d2a-8cf6-73c6206c5da6"), DbType = "Nvarchar" }); - //Dropdown list - //_database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 26, DataTypeId = -131, ControlId = new Guid("a74ea9c9-8e18-4d2a-8cf6-73c6206c5da6"), DbType = "Nvarchar" }); - //Dropdown list - //_database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 27, DataTypeId = -132, ControlId = new Guid("a74ea9c9-8e18-4d2a-8cf6-73c6206c5da6"), DbType = "Nvarchar" }); - //No edit - //_database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 28, DataTypeId = -133, ControlId = new Guid("6c738306-4c17-4d88-b9bd-6546f3771597"), DbType = "Ntext" }); - //Dropdown list multiple - //_database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 29, DataTypeId = -134, ControlId = new Guid("928639ed-9c73-4028-920c-1e55dbb68783"), DbType = "Nvarchar" }); - //Not found - maybe a legacy thing? - //_database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 30, DataTypeId = -50, ControlId = new Guid("aaf99bb2-dbbe-444d-a296-185076bf0484"), DbType = "Date" }); _database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 16, DataTypeId = 1034, ControlId = new Guid(Constants.PropertyEditors.ContentPicker), DbType = "Integer" }); _database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 17, DataTypeId = 1035, ControlId = new Guid(Constants.PropertyEditors.MediaPicker), DbType = "Integer" }); _database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 18, DataTypeId = 1036, ControlId = new Guid(Constants.PropertyEditors.MemberPicker), DbType = "Integer" }); diff --git a/src/Umbraco.Tests/Services/ContentServiceTests.cs b/src/Umbraco.Tests/Services/ContentServiceTests.cs index b087d42827..706322b81d 100644 --- a/src/Umbraco.Tests/Services/ContentServiceTests.cs +++ b/src/Umbraco.Tests/Services/ContentServiceTests.cs @@ -813,6 +813,48 @@ namespace Umbraco.Tests.Services Assert.That(hasPublishedVersion, Is.True); } + [Test] + public void Can_Verify_Property_Types_On_Content() + { + // Arrange + var contentTypeService = ServiceContext.ContentTypeService; + var contentType = MockedContentTypes.CreateAllTypesContentType("allDataTypes", "All DataTypes"); + contentTypeService.Save(contentType); + var contentService = ServiceContext.ContentService; + var content = MockedContent.CreateAllTypesContent(contentType, "Random Content", -1); + contentService.Save(content); + var id = content.Id; + + // Act + var sut = contentService.GetById(id); + + // Arrange + Assert.That(sut.GetValue("isTrue"), Is.True); + Assert.That(sut.GetValue("number"), Is.EqualTo(42)); + Assert.That(sut.GetValue("bodyText"), Is.EqualTo("Lorem Ipsum Body Text Test")); + Assert.That(sut.GetValue("singleLineText"), Is.EqualTo("Single Line Text Test")); + Assert.That(sut.GetValue("multilineText"), Is.EqualTo("Multiple lines \n in one box")); + Assert.That(sut.GetValue("upload"), Is.EqualTo("/media/1234/koala.jpg")); + Assert.That(sut.GetValue("label"), Is.EqualTo("Non-editable label")); + Assert.That(sut.GetValue("dateTime"), Is.EqualTo(content.GetValue("dateTime"))); + Assert.That(sut.GetValue("colorPicker"), Is.EqualTo("black")); + Assert.That(sut.GetValue("folderBrowser"), Is.Empty); + Assert.That(sut.GetValue("ddlMultiple"), Is.EqualTo("1234,1235")); + Assert.That(sut.GetValue("rbList"), Is.EqualTo("random")); + Assert.That(sut.GetValue("date"), Is.EqualTo(content.GetValue("date"))); + Assert.That(sut.GetValue("ddl"), Is.EqualTo("1234")); + Assert.That(sut.GetValue("chklist"), Is.EqualTo("randomc")); + Assert.That(sut.GetValue("contentPicker"), Is.EqualTo(1090)); + Assert.That(sut.GetValue("mediaPicker"), Is.EqualTo(1091)); + Assert.That(sut.GetValue("memberPicker"), Is.EqualTo(1092)); + Assert.That(sut.GetValue("simpleEditor"), Is.EqualTo("This is simply edited")); + Assert.That(sut.GetValue("ultimatePicker"), Is.EqualTo("1234,1235")); + Assert.That(sut.GetValue("relatedLinks"), Is.EqualTo("")); + Assert.That(sut.GetValue("tags"), Is.EqualTo("this,is,tags")); + Assert.That(sut.GetValue("macroContainer"), Is.Empty); + Assert.That(sut.GetValue("imgCropper"), Is.Empty); + } + private IEnumerable CreateContentHierarchy() { var contentType = ServiceContext.ContentTypeService.GetContentType("umbTextpage"); diff --git a/src/Umbraco.Tests/TestHelpers/Entities/MockedContent.cs b/src/Umbraco.Tests/TestHelpers/Entities/MockedContent.cs index 02929dcc76..529421725c 100644 --- a/src/Umbraco.Tests/TestHelpers/Entities/MockedContent.cs +++ b/src/Umbraco.Tests/TestHelpers/Entities/MockedContent.cs @@ -79,6 +79,38 @@ namespace Umbraco.Tests.TestHelpers.Entities return content; } + public static Content CreateAllTypesContent(IContentType contentType, string name, int parentId) + { + var content = new Content("Random Content Name", parentId, contentType) { Language = "en-US", Level = 1, SortOrder = 1, CreatorId = 0, WriterId = 0 }; + + content.SetValue("isTrue", true); + content.SetValue("number", 42); + content.SetValue("bodyText", "Lorem Ipsum Body Text Test"); + content.SetValue("singleLineText", "Single Line Text Test"); + content.SetValue("multilineText", "Multiple lines \n in one box"); + content.SetValue("upload", "/media/1234/koala.jpg"); + content.SetValue("label", "Non-editable label"); + content.SetValue("dateTime", DateTime.Now.AddDays(-20)); + content.SetValue("colorPicker", "black"); + content.SetValue("folderBrowser", ""); + content.SetValue("ddlMultiple", "1234,1235"); + content.SetValue("rbList", "random"); + content.SetValue("date", DateTime.Now.AddDays(-10)); + content.SetValue("ddl", "1234"); + content.SetValue("chklist", "randomc"); + content.SetValue("contentPicker", 1090); + content.SetValue("mediaPicker", 1091); + content.SetValue("memberPicker", 1092); + content.SetValue("simpleEditor", "This is simply edited"); + content.SetValue("ultimatePicker", "1234,1235"); + content.SetValue("relatedLinks", ""); + content.SetValue("tags", "this,is,tags"); + content.SetValue("macroContainer", ""); + content.SetValue("imgCropper", ""); + + return content; + } + public static IEnumerable CreateTextpageContent(IContentType contentType, int parentId, int amount) { var list = new List(); diff --git a/src/Umbraco.Tests/TestHelpers/Entities/MockedContentTypes.cs b/src/Umbraco.Tests/TestHelpers/Entities/MockedContentTypes.cs index 131e02dad1..f3f09e5fae 100644 --- a/src/Umbraco.Tests/TestHelpers/Entities/MockedContentTypes.cs +++ b/src/Umbraco.Tests/TestHelpers/Entities/MockedContentTypes.cs @@ -166,6 +166,51 @@ namespace Umbraco.Tests.TestHelpers.Entities return contentType; } + public static ContentType CreateAllTypesContentType(string alias, string name) + { + var contentType = new ContentType(-1) + { + Alias = alias, + Name = name, + Description = "ContentType containing all standard DataTypes", + Icon = ".sprTreeDoc3", + Thumbnail = "doc.png", + SortOrder = 1, + CreatorId = 0, + Trashed = false + }; + + var contentCollection = new PropertyTypeCollection(); + contentCollection.Add(new PropertyType(new Guid(Constants.PropertyEditors.TrueFalse), DataTypeDatabaseType.Integer) { Alias = "isTrue", Name = "Is True or False", Mandatory = false, SortOrder = 1, DataTypeDefinitionId = -49 }); + contentCollection.Add(new PropertyType(new Guid(Constants.PropertyEditors.Integer), DataTypeDatabaseType.Integer) { Alias = "number", Name = "Number", Mandatory = false, SortOrder = 2, DataTypeDefinitionId = -51 }); + contentCollection.Add(new PropertyType(new Guid(Constants.PropertyEditors.TinyMCEv3), DataTypeDatabaseType.Ntext) { Alias = "bodyText", Name = "Body Text", Mandatory = false, SortOrder = 3, DataTypeDefinitionId = -87 }); + contentCollection.Add(new PropertyType(new Guid(Constants.PropertyEditors.Textbox), DataTypeDatabaseType.Nvarchar) { Alias = "singleLineText", Name = "Text String", Mandatory = false, SortOrder = 4, DataTypeDefinitionId = -88 }); + contentCollection.Add(new PropertyType(new Guid(Constants.PropertyEditors.TextboxMultiple), DataTypeDatabaseType.Ntext) { Alias = "multilineText", Name = "Multiple Text Strings", Mandatory = false, SortOrder = 5, DataTypeDefinitionId = -89 }); + contentCollection.Add(new PropertyType(new Guid(Constants.PropertyEditors.UploadField), DataTypeDatabaseType.Nvarchar) { Alias = "upload", Name = "Upload Field", Mandatory = false, SortOrder = 6, DataTypeDefinitionId = -90 }); + contentCollection.Add(new PropertyType(new Guid(Constants.PropertyEditors.NoEdit), DataTypeDatabaseType.Nvarchar) { Alias = "label", Name = "Label", Mandatory = false, SortOrder = 7, DataTypeDefinitionId = -92 }); + contentCollection.Add(new PropertyType(new Guid(Constants.PropertyEditors.DateTime), DataTypeDatabaseType.Date) { Alias = "dateTime", Name = "Date Time", Mandatory = false, SortOrder = 8, DataTypeDefinitionId = -36 }); + contentCollection.Add(new PropertyType(new Guid(Constants.PropertyEditors.ColorPicker), DataTypeDatabaseType.Nvarchar) { Alias = "colorPicker", Name = "Color Picker", Mandatory = false, SortOrder = 9, DataTypeDefinitionId = -37 }); + contentCollection.Add(new PropertyType(new Guid(Constants.PropertyEditors.FolderBrowser), DataTypeDatabaseType.Nvarchar) { Alias = "folderBrowser", Name = "Folder Browser", Mandatory = false, SortOrder = 10, DataTypeDefinitionId = -38 }); + contentCollection.Add(new PropertyType(new Guid(Constants.PropertyEditors.DropDownListMultiple), DataTypeDatabaseType.Nvarchar) { Alias = "ddlMultiple", Name = "Dropdown List Multiple", Mandatory = false, SortOrder = 11, DataTypeDefinitionId = -39 }); + contentCollection.Add(new PropertyType(new Guid(Constants.PropertyEditors.RadioButtonList), DataTypeDatabaseType.Nvarchar) { Alias = "rbList", Name = "Radio Button List", Mandatory = false, SortOrder = 12, DataTypeDefinitionId = -40 }); + contentCollection.Add(new PropertyType(new Guid(Constants.PropertyEditors.Date), DataTypeDatabaseType.Date) { Alias = "date", Name = "Date", Mandatory = false, SortOrder = 13, DataTypeDefinitionId = -41 }); + contentCollection.Add(new PropertyType(new Guid(Constants.PropertyEditors.DropDownList), DataTypeDatabaseType.Integer) { Alias = "ddl", Name = "Dropdown List", Mandatory = false, SortOrder = 14, DataTypeDefinitionId = -42 }); + contentCollection.Add(new PropertyType(new Guid(Constants.PropertyEditors.CheckBoxList), DataTypeDatabaseType.Nvarchar) { Alias = "chklist", Name = "Checkbox List", Mandatory = false, SortOrder = 15, DataTypeDefinitionId = -43 }); + contentCollection.Add(new PropertyType(new Guid(Constants.PropertyEditors.ContentPicker), DataTypeDatabaseType.Integer) { Alias = "contentPicker", Name = "Content Picker", Mandatory = false, SortOrder = 16, DataTypeDefinitionId = 1034 }); + contentCollection.Add(new PropertyType(new Guid(Constants.PropertyEditors.MediaPicker), DataTypeDatabaseType.Integer) { Alias = "mediaPicker", Name = "Media Picker", Mandatory = false, SortOrder = 17, DataTypeDefinitionId = 1035 }); + contentCollection.Add(new PropertyType(new Guid(Constants.PropertyEditors.MemberPicker), DataTypeDatabaseType.Integer) { Alias = "memberPicker", Name = "Member Picker", Mandatory = false, SortOrder = 18, DataTypeDefinitionId = 1036 }); + contentCollection.Add(new PropertyType(new Guid(Constants.PropertyEditors.UltraSimpleEditor), DataTypeDatabaseType.Ntext) { Alias = "simpleEditor", Name = "Ultra Simple Editor", Mandatory = false, SortOrder = 19, DataTypeDefinitionId = 1038 }); + contentCollection.Add(new PropertyType(new Guid(Constants.PropertyEditors.UltimatePicker), DataTypeDatabaseType.Ntext) { Alias = "ultimatePicker", Name = "Ultimate Picker", Mandatory = false, SortOrder = 20, DataTypeDefinitionId = 1039 }); + contentCollection.Add(new PropertyType(new Guid(Constants.PropertyEditors.RelatedLinks), DataTypeDatabaseType.Ntext) { Alias = "relatedLinks", Name = "Related Links", Mandatory = false, SortOrder = 21, DataTypeDefinitionId = 1040 }); + contentCollection.Add(new PropertyType(new Guid(Constants.PropertyEditors.Tags), DataTypeDatabaseType.Ntext) { Alias = "tags", Name = "Tags", Mandatory = false, SortOrder = 22, DataTypeDefinitionId = 1041 }); + contentCollection.Add(new PropertyType(new Guid(Constants.PropertyEditors.MacroContainer), DataTypeDatabaseType.Ntext) { Alias = "macroContainer", Name = "Macro Container", Mandatory = false, SortOrder = 23, DataTypeDefinitionId = 1042 }); + contentCollection.Add(new PropertyType(new Guid(Constants.PropertyEditors.ImageCropper), DataTypeDatabaseType.Ntext) { Alias = "imgCropper", Name = "Image Cropper", Mandatory = false, SortOrder = 24, DataTypeDefinitionId = 1043 }); + + contentType.PropertyGroups.Add(new PropertyGroup(contentCollection) { Name = "Content", SortOrder = 1 }); + + return contentType; + } + public static MediaType CreateVideoMediaType() { var mediaType = new MediaType(-1) diff --git a/src/umbraco.editorControls/BaseTreePickerEditor.cs b/src/umbraco.editorControls/BaseTreePickerEditor.cs index 0984a2375b..9908d07e46 100644 --- a/src/umbraco.editorControls/BaseTreePickerEditor.cs +++ b/src/umbraco.editorControls/BaseTreePickerEditor.cs @@ -106,7 +106,7 @@ namespace umbraco.editorControls public void Save() { if (ItemIdValue.Value.Trim() != "") - _data.Value = ItemIdValue.Value.Trim(); + _data.Value = int.Parse(ItemIdValue.Value.Trim()); else _data.Value = null; } From c52c452b3633db0bdcb21ebee477684e49a5f428 Mon Sep 17 00:00:00 2001 From: Shannon Date: Tue, 13 Aug 2013 11:01:49 +1000 Subject: [PATCH 3/5] Fixes issue relating to the fix for U4-2589 where we need to clear the published db flag for previous versions when creating a new published version. --- src/Umbraco.Core/Models/ContentExtensions.cs | 47 ++++++++++++++++ .../Repositories/ContentRepository.cs | 3 +- .../Models/ContentExtensionsTests.cs | 55 +++++++++++++++++++ 3 files changed, 104 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Core/Models/ContentExtensions.cs b/src/Umbraco.Core/Models/ContentExtensions.cs index c08983c866..f88fe7f4d3 100644 --- a/src/Umbraco.Core/Models/ContentExtensions.cs +++ b/src/Umbraco.Core/Models/ContentExtensions.cs @@ -78,6 +78,53 @@ namespace Umbraco.Core.Models return (propertyValueChanged && publishedState == PublishedState.Published) || contentDataChanged; } + /// + /// Determines if the published db flag should be set to true for the current entity version and all other db + /// versions should have their flag set to false. + /// + /// + /// + /// + /// This is determined by: + /// * If a new version is being created and the entity is published + /// * If the published state has changed and the entity is published OR the entity has been un-published. + /// + internal static bool ShouldClearPublishedFlagForPreviousVersions(this IContent entity) + { + var publishedState = ((Content)entity).PublishedState; + return entity.ShouldClearPublishedFlagForPreviousVersions(publishedState, entity.ShouldCreateNewVersion(publishedState)); + } + + /// + /// Determines if the published db flag should be set to true for the current entity version and all other db + /// versions should have their flag set to false. + /// + /// + /// + /// + /// + /// + /// This is determined by: + /// * If a new version is being created and the entity is published + /// * If the published state has changed and the entity is published OR the entity has been un-published. + /// + internal static bool ShouldClearPublishedFlagForPreviousVersions(this IContent entity, PublishedState publishedState, bool isCreatingNewVersion) + { + if (isCreatingNewVersion && entity.Published) + { + return true; + } + + //If Published state has changed then previous versions should have their publish state reset. + //If state has been changed to unpublished the previous versions publish state should also be reset. + if (((ICanBeDirty)entity).IsPropertyDirty("Published") && (entity.Published || publishedState == PublishedState.Unpublished)) + { + return true; + } + + return false; + } + /// /// Returns a list of the current contents ancestors, not including the content itself. /// diff --git a/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs b/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs index 954eac582a..d02c48b639 100644 --- a/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs @@ -328,7 +328,8 @@ namespace Umbraco.Core.Persistence.Repositories //If Published state has changed then previous versions should have their publish state reset. //If state has been changed to unpublished the previous versions publish state should also be reset. - if (((ICanBeDirty)entity).IsPropertyDirty("Published") && (entity.Published || publishedState == PublishedState.Unpublished)) + //if (((ICanBeDirty)entity).IsPropertyDirty("Published") && (entity.Published || publishedState == PublishedState.Unpublished)) + if (entity.ShouldClearPublishedFlagForPreviousVersions(publishedState, shouldCreateNewVersion)) { var publishedDocs = Database.Fetch("WHERE nodeId = @Id AND published = @IsPublished", new { Id = entity.Id, IsPublished = true }); foreach (var doc in publishedDocs) diff --git a/src/Umbraco.Tests/Models/ContentExtensionsTests.cs b/src/Umbraco.Tests/Models/ContentExtensionsTests.cs index 0e0cd41c15..fa9797e155 100644 --- a/src/Umbraco.Tests/Models/ContentExtensionsTests.cs +++ b/src/Umbraco.Tests/Models/ContentExtensionsTests.cs @@ -82,6 +82,61 @@ namespace Umbraco.Tests.Models } + [Test] + public void Should_Clear_Published_Flag_When_Newly_Published_Version() + { + var contentType = MockedContentTypes.CreateTextpageContentType(); + var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1); + + content.ResetDirtyProperties(false); + + content.ChangePublishedState(PublishedState.Published); + Assert.IsTrue(content.ShouldClearPublishedFlagForPreviousVersions()); + } + + [Test] + public void Should_Not_Clear_Published_Flag_When_Saving_Version() + { + var contentType = MockedContentTypes.CreateTextpageContentType(); + var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1); + + content.ResetDirtyProperties(false); + content.ChangePublishedState(PublishedState.Published); + content.ResetDirtyProperties(false); + + content.ChangePublishedState(PublishedState.Saved); + Assert.IsFalse(content.ShouldClearPublishedFlagForPreviousVersions()); + } + + [Test] + public void Should_Clear_Published_Flag_When_Unpublishing_From_Published() + { + var contentType = MockedContentTypes.CreateTextpageContentType(); + var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1); + + content.ResetDirtyProperties(false); + content.ChangePublishedState(PublishedState.Published); + content.ResetDirtyProperties(false); + + content.ChangePublishedState(PublishedState.Unpublished); + Assert.IsTrue(content.ShouldClearPublishedFlagForPreviousVersions()); + } + + [Test] + public void Should_Not_Clear_Published_Flag_When_Unpublishing_From_Saved() + { + var contentType = MockedContentTypes.CreateTextpageContentType(); + var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1); + + content.ResetDirtyProperties(false); + content.ChangePublishedState(PublishedState.Saved); + content.ResetDirtyProperties(false); + + content.ChangePublishedState(PublishedState.Unpublished); + Assert.IsFalse(content.ShouldClearPublishedFlagForPreviousVersions()); + } + + } } \ No newline at end of file From aa1c411c8cef2bba32943e0da7098edde896744f Mon Sep 17 00:00:00 2001 From: Shannon Date: Tue, 13 Aug 2013 13:47:57 +1000 Subject: [PATCH 4/5] Fixes U4-2618 PDF indexer does not ensure spaces are added to textual content and fixes med trust compat relating to U4-2180 Problem with Examine MultiIndexSearcher after upgrading from 4.11.3 to 4.11.8 --- src/Umbraco.Core/StringExtensions.cs | 10 ++ src/UmbracoExamine.PDF/PDFIndexer.cs | 112 +++++++++++-------- src/UmbracoExamine/BaseUmbracoIndexer.cs | 1 + src/UmbracoExamine/UmbracoContentIndexer.cs | 1 + src/UmbracoExamine/UmbracoExamineSearcher.cs | 1 + 5 files changed, 76 insertions(+), 49 deletions(-) diff --git a/src/Umbraco.Core/StringExtensions.cs b/src/Umbraco.Core/StringExtensions.cs index 33a5730444..df7c0d07b0 100644 --- a/src/Umbraco.Core/StringExtensions.cs +++ b/src/Umbraco.Core/StringExtensions.cs @@ -28,6 +28,16 @@ namespace Umbraco.Core [UmbracoWillObsolete("Do not use this constants. See IShortStringHelper.CleanStringForSafeAliasJavaScriptCode.")] public const string UmbracoInvalidFirstCharacters = "01234567890"; + public static string ExceptChars(this string str, HashSet toExclude) + { + var sb = new StringBuilder(str.Length); + foreach (var c in str.Where(c => toExclude.Contains(c) == false)) + { + sb.Append(c); + } + return sb.ToString(); + } + /// /// Encrypt the string using the MachineKey in medium trust /// diff --git a/src/UmbracoExamine.PDF/PDFIndexer.cs b/src/UmbracoExamine.PDF/PDFIndexer.cs index 8f8237cbbb..475a75c3ce 100644 --- a/src/UmbracoExamine.PDF/PDFIndexer.cs +++ b/src/UmbracoExamine.PDF/PDFIndexer.cs @@ -12,6 +12,7 @@ using iTextSharp.text.pdf; using System.Text; using Lucene.Net.Analysis; using UmbracoExamine.DataServices; +using iTextSharp.text.pdf.parser; namespace UmbracoExamine.PDF @@ -105,6 +106,7 @@ namespace UmbracoExamine.PDF /// /// /// + [SecuritySafeCritical] public override void Initialize(string name, NameValueCollection config) { base.Initialize(name, config); @@ -133,7 +135,7 @@ namespace UmbracoExamine.PDF Action onError = (e) => OnIndexingError(new IndexingErrorEventArgs("Could not read PDF", -1, e)); - var txt = pdf.ParsePdfText(file.FullName, onError); + var txt = pdf.GetTextFromAllPages(file.FullName, onError); return txt; } @@ -193,16 +195,21 @@ namespace UmbracoExamine.PDF static PDFParser() { - lock (m_Locker) + lock (Locker) { - m_UnsupportedRange = new List(); - m_UnsupportedRange.AddRange(Enumerable.Range(0x0000, 0x001F)); - m_UnsupportedRange.Add(0x1F); + UnsupportedRange = new HashSet(); + foreach (var c in Enumerable.Range(0x0000, 0x001F)) + { + UnsupportedRange.Add((char) c); + } + UnsupportedRange.Add((char)0x1F); + //replace line breaks with space + ReplaceWithSpace = new HashSet {'\r', '\n'}; } } - private static readonly object m_Locker = new object(); + private static readonly object Locker = new object(); /// /// Stores the unsupported range of character @@ -214,61 +221,68 @@ namespace UmbracoExamine.PDF /// http://en.wikipedia.org/wiki/Unicode /// http://en.wikipedia.org/wiki/Basic_Multilingual_Plane /// - private static List m_UnsupportedRange; + private static HashSet UnsupportedRange; - /// - /// Return only the valid string contents of the PDF - /// - /// - /// - /// - [SecuritySafeCritical] - public string ParsePdfText(string sourcePDF, Action onError) + private static HashSet ReplaceWithSpace; + + [SecuritySafeCritical] + public string GetTextFromAllPages(string pdfPath, Action onError) { - var sb = new StringBuilder(); + var output = new StringWriter(); - var reader = new PdfReader(sourcePDF); - PRTokeniser token = null; - var tknValue = String.Empty; - - for (var i = 1; (i <= reader.NumberOfPages); i++) + try { - var pageBytes = reader.GetPageContent(i); - if (pageBytes != null) - { - token = new PRTokeniser(pageBytes); - try - { - while (token.NextToken()) - { - var tknType = token.TokenType; - tknValue = token.StringValue; - if ((tknType == PRTokeniser.TokType.STRING)) - { - foreach (var s in tknValue) - { - //strip out unsupported characters, based on unicode tables. - if (!m_UnsupportedRange.Contains(s)) - { - sb.Append(s); - } - } + var reader = new PdfReader(pdfPath); - } - } - } - catch (InvalidPdfException ex) - { - onError(ex); - } + for (int i = 1; i <= reader.NumberOfPages; i++) + { + var result = + ExceptChars( + PdfTextExtractor.GetTextFromPage(reader, i, new SimpleTextExtractionStrategy()), + UnsupportedRange, + ReplaceWithSpace); + output.Write(result); } } + catch (Exception ex) + { + onError(ex); + } - return sb.ToString(); + return output.ToString(); } } + + /// + /// remove all toExclude chars from string + /// + /// + /// + /// + /// + private static string ExceptChars(string str, HashSet toExclude, HashSet replaceWithSpace) + { + var sb = new StringBuilder(str.Length); + for (var i = 0; i < str.Length; i++) + { + var c = str[i]; + if (toExclude.Contains(c) == false) + { + if (replaceWithSpace.Contains(c)) + { + sb.Append(" "); + } + else + { + sb.Append(c); + } + } + + } + return sb.ToString(); + } #endregion } diff --git a/src/UmbracoExamine/BaseUmbracoIndexer.cs b/src/UmbracoExamine/BaseUmbracoIndexer.cs index 217eac73ec..8ccef8b22e 100644 --- a/src/UmbracoExamine/BaseUmbracoIndexer.cs +++ b/src/UmbracoExamine/BaseUmbracoIndexer.cs @@ -96,6 +96,7 @@ namespace UmbracoExamine /// /// /// + [SecuritySafeCritical] public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config) { if (config["dataService"] != null && !string.IsNullOrEmpty(config["dataService"])) diff --git a/src/UmbracoExamine/UmbracoContentIndexer.cs b/src/UmbracoExamine/UmbracoContentIndexer.cs index 81a9dbe41b..9da53a77f2 100644 --- a/src/UmbracoExamine/UmbracoContentIndexer.cs +++ b/src/UmbracoExamine/UmbracoContentIndexer.cs @@ -124,6 +124,7 @@ namespace UmbracoExamine /// /// An attempt is made to call on a provider after the provider has already been initialized. /// + [SecuritySafeCritical] public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config) { diff --git a/src/UmbracoExamine/UmbracoExamineSearcher.cs b/src/UmbracoExamine/UmbracoExamineSearcher.cs index 68f07f45e1..7406e98f8e 100644 --- a/src/UmbracoExamine/UmbracoExamineSearcher.cs +++ b/src/UmbracoExamine/UmbracoExamineSearcher.cs @@ -45,6 +45,7 @@ namespace UmbracoExamine } } + [SecuritySafeCritical] public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config) { if (name == null) throw new ArgumentNullException("name"); From bfabfd9fa5f50a83be0ac5b35b1eb9888f88129c Mon Sep 17 00:00:00 2001 From: Shannon Date: Tue, 13 Aug 2013 15:41:40 +1000 Subject: [PATCH 5/5] Updated to latest Examine version (contains bug fix for U4-2180 Problem with Examine MultiIndexSearcher after upgrading from 4.11.3 to 4.11.8) and removes the partially trusted callers attribute from the PDF lib because itextsharp by default doesn't support med trust. --- src/Umbraco.Tests/Umbraco.Tests.csproj | 4 +-- src/Umbraco.Tests/packages.config | 2 +- src/Umbraco.Web.UI/Umbraco.Web.UI.csproj | 4 +-- src/Umbraco.Web.UI/config/ExamineIndex.config | 3 +++ .../config/ExamineSettings.config | 26 ++++++++++++++++++- src/Umbraco.Web.UI/packages.config | 2 +- src/Umbraco.Web/Umbraco.Web.csproj | 4 +-- src/Umbraco.Web/packages.config | 2 +- .../UmbracoExamine.Azure.csproj | 4 +-- src/UmbracoExamine.Azure/packages.config | 2 +- .../UmbracoExamine.PDF.Azure.csproj | 4 +-- src/UmbracoExamine.PDF.Azure/packages.config | 2 +- .../Properties/AssemblyInfo.cs | 3 ++- .../UmbracoExamine.PDF.csproj | 4 +-- src/UmbracoExamine.PDF/packages.config | 2 +- src/UmbracoExamine/UmbracoExamine.csproj | 4 +-- src/UmbracoExamine/packages.config | 2 +- src/umbraco.MacroEngines/packages.config | 2 +- .../umbraco.MacroEngines.csproj | 4 +-- 19 files changed, 54 insertions(+), 26 deletions(-) diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index d95b720b73..72950fe466 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -48,9 +48,9 @@ 4 - + False - ..\packages\Examine.0.1.51.2941\lib\Examine.dll + ..\packages\Examine.0.1.52.2941\lib\Examine.dll False diff --git a/src/Umbraco.Tests/packages.config b/src/Umbraco.Tests/packages.config index f1e2902ce8..fbf89daf7d 100644 --- a/src/Umbraco.Tests/packages.config +++ b/src/Umbraco.Tests/packages.config @@ -1,6 +1,6 @@  - + diff --git a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj index 4fe113f747..c4c0ef70f4 100644 --- a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj +++ b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj @@ -108,9 +108,9 @@ False ..\packages\ClientDependency-Mvc.1.7.0.4\lib\ClientDependency.Core.Mvc.dll - + False - ..\packages\Examine.0.1.51.2941\lib\Examine.dll + ..\packages\Examine.0.1.52.2941\lib\Examine.dll False diff --git a/src/Umbraco.Web.UI/config/ExamineIndex.config b/src/Umbraco.Web.UI/config/ExamineIndex.config index 9cea8cb7c6..8a2942eb00 100644 --- a/src/Umbraco.Web.UI/config/ExamineIndex.config +++ b/src/Umbraco.Web.UI/config/ExamineIndex.config @@ -27,5 +27,8 @@ More information and documentation can be found on CodePlex: http://umbracoexami + + + \ No newline at end of file diff --git a/src/Umbraco.Web.UI/config/ExamineSettings.config b/src/Umbraco.Web.UI/config/ExamineSettings.config index 6eb98eaa69..79f6b08914 100644 --- a/src/Umbraco.Web.UI/config/ExamineSettings.config +++ b/src/Umbraco.Web.UI/config/ExamineSettings.config @@ -21,7 +21,25 @@ More information and documentation can be found on CodePlex: http://umbracoexami - + + + + + + + @@ -34,6 +52,12 @@ More information and documentation can be found on CodePlex: http://umbracoexami analyzer="Lucene.Net.Analysis.Standard.StandardAnalyzer, Lucene.Net" enableLeadingWildcards="true"/> + + + + + + diff --git a/src/Umbraco.Web.UI/packages.config b/src/Umbraco.Web.UI/packages.config index bcc32a46e1..bbf37ffe8c 100644 --- a/src/Umbraco.Web.UI/packages.config +++ b/src/Umbraco.Web.UI/packages.config @@ -2,7 +2,7 @@ - + diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index c804a064ee..96bb6f800a 100644 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -101,9 +101,9 @@ False ..\packages\xmlrpcnet.2.5.0\lib\net20\CookComputing.XmlRpcV2.dll - + False - ..\packages\Examine.0.1.51.2941\lib\Examine.dll + ..\packages\Examine.0.1.52.2941\lib\Examine.dll False diff --git a/src/Umbraco.Web/packages.config b/src/Umbraco.Web/packages.config index 69c5c12585..eec795bd35 100644 --- a/src/Umbraco.Web/packages.config +++ b/src/Umbraco.Web/packages.config @@ -2,7 +2,7 @@ - + diff --git a/src/UmbracoExamine.Azure/UmbracoExamine.Azure.csproj b/src/UmbracoExamine.Azure/UmbracoExamine.Azure.csproj index 1cdc604a52..9bb434a10d 100644 --- a/src/UmbracoExamine.Azure/UmbracoExamine.Azure.csproj +++ b/src/UmbracoExamine.Azure/UmbracoExamine.Azure.csproj @@ -37,9 +37,9 @@ ..\packages\AzureDirectory.1.0.5\lib\AzureDirectory.dll - + False - ..\packages\Examine.0.1.51.2941\lib\Examine.dll + ..\packages\Examine.0.1.52.2941\lib\Examine.dll False diff --git a/src/UmbracoExamine.Azure/packages.config b/src/UmbracoExamine.Azure/packages.config index 7721836e09..54eb3830da 100644 --- a/src/UmbracoExamine.Azure/packages.config +++ b/src/UmbracoExamine.Azure/packages.config @@ -2,7 +2,7 @@ - + diff --git a/src/UmbracoExamine.PDF.Azure/UmbracoExamine.PDF.Azure.csproj b/src/UmbracoExamine.PDF.Azure/UmbracoExamine.PDF.Azure.csproj index 5e3b5cb567..861014d3cc 100644 --- a/src/UmbracoExamine.PDF.Azure/UmbracoExamine.PDF.Azure.csproj +++ b/src/UmbracoExamine.PDF.Azure/UmbracoExamine.PDF.Azure.csproj @@ -37,9 +37,9 @@ ..\packages\AzureDirectory.1.0.5\lib\AzureDirectory.dll - + False - ..\packages\Examine.0.1.51.2941\lib\Examine.dll + ..\packages\Examine.0.1.52.2941\lib\Examine.dll False diff --git a/src/UmbracoExamine.PDF.Azure/packages.config b/src/UmbracoExamine.PDF.Azure/packages.config index 7721836e09..54eb3830da 100644 --- a/src/UmbracoExamine.PDF.Azure/packages.config +++ b/src/UmbracoExamine.PDF.Azure/packages.config @@ -2,7 +2,7 @@ - + diff --git a/src/UmbracoExamine.PDF/Properties/AssemblyInfo.cs b/src/UmbracoExamine.PDF/Properties/AssemblyInfo.cs index 72fe9de54a..04b415b98d 100644 --- a/src/UmbracoExamine.PDF/Properties/AssemblyInfo.cs +++ b/src/UmbracoExamine.PDF/Properties/AssemblyInfo.cs @@ -28,4 +28,5 @@ using System.Security; [assembly: AssemblyVersion("0.6.0.*")] [assembly: AssemblyFileVersion("0.6.0.*")] -[assembly: AllowPartiallyTrustedCallers] \ No newline at end of file +//Unfortunately itextsharp does not natively support full trust +//[assembly: AllowPartiallyTrustedCallers] \ No newline at end of file diff --git a/src/UmbracoExamine.PDF/UmbracoExamine.PDF.csproj b/src/UmbracoExamine.PDF/UmbracoExamine.PDF.csproj index 0aadf1404d..9fc85d46a0 100644 --- a/src/UmbracoExamine.PDF/UmbracoExamine.PDF.csproj +++ b/src/UmbracoExamine.PDF/UmbracoExamine.PDF.csproj @@ -44,9 +44,9 @@ bin\Release\UmbracoExamine.PDF.XML - + False - ..\packages\Examine.0.1.51.2941\lib\Examine.dll + ..\packages\Examine.0.1.52.2941\lib\Examine.dll ..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll diff --git a/src/UmbracoExamine.PDF/packages.config b/src/UmbracoExamine.PDF/packages.config index abf2bfc49c..1d29bc3cc6 100644 --- a/src/UmbracoExamine.PDF/packages.config +++ b/src/UmbracoExamine.PDF/packages.config @@ -1,6 +1,6 @@  - + diff --git a/src/UmbracoExamine/UmbracoExamine.csproj b/src/UmbracoExamine/UmbracoExamine.csproj index 3e6a6ed750..d70780b678 100644 --- a/src/UmbracoExamine/UmbracoExamine.csproj +++ b/src/UmbracoExamine/UmbracoExamine.csproj @@ -80,9 +80,9 @@ ..\Solution Items\TheFARM-Public.snk - + False - ..\packages\Examine.0.1.51.2941\lib\Examine.dll + ..\packages\Examine.0.1.52.2941\lib\Examine.dll False diff --git a/src/UmbracoExamine/packages.config b/src/UmbracoExamine/packages.config index 0d7f689f95..31026832a5 100644 --- a/src/UmbracoExamine/packages.config +++ b/src/UmbracoExamine/packages.config @@ -1,6 +1,6 @@  - + \ No newline at end of file diff --git a/src/umbraco.MacroEngines/packages.config b/src/umbraco.MacroEngines/packages.config index 023ebfc6b9..404506a7aa 100644 --- a/src/umbraco.MacroEngines/packages.config +++ b/src/umbraco.MacroEngines/packages.config @@ -1,6 +1,6 @@  - + diff --git a/src/umbraco.MacroEngines/umbraco.MacroEngines.csproj b/src/umbraco.MacroEngines/umbraco.MacroEngines.csproj index 90f8e01edc..3b6be4351d 100644 --- a/src/umbraco.MacroEngines/umbraco.MacroEngines.csproj +++ b/src/umbraco.MacroEngines/umbraco.MacroEngines.csproj @@ -42,9 +42,9 @@ bin\Release\umbraco.MacroEngines.xml - + False - ..\packages\Examine.0.1.51.2941\lib\Examine.dll + ..\packages\Examine.0.1.52.2941\lib\Examine.dll False