From 8fba03c05d3aca5f56b45e34bf501e87b6ecef7b Mon Sep 17 00:00:00 2001 From: Morten Christensen Date: Wed, 13 Mar 2013 18:55:25 -0100 Subject: [PATCH 1/3] Fixes U4-1863 and U4-1908 by ensuring that content and media are loaded in the same manner through the new api --- .../Persistence/Factories/PropertyFactory.cs | 29 ++----------------- .../Repositories/MediaRepository.cs | 2 +- .../umbraco/editContent.aspx.cs | 2 +- .../umbraco/editMedia.aspx.cs | 7 ++++- 4 files changed, 10 insertions(+), 30 deletions(-) diff --git a/src/Umbraco.Core/Persistence/Factories/PropertyFactory.cs b/src/Umbraco.Core/Persistence/Factories/PropertyFactory.cs index 9efa544768..623e770525 100644 --- a/src/Umbraco.Core/Persistence/Factories/PropertyFactory.cs +++ b/src/Umbraco.Core/Persistence/Factories/PropertyFactory.cs @@ -8,25 +8,17 @@ namespace Umbraco.Core.Persistence.Factories { internal class PropertyFactory : IEntityFactory, IEnumerable> { - private readonly IContentType _contentType; - private readonly IMediaType _mediaType; + private readonly IContentTypeComposition _contentType; private readonly Guid _version; private readonly int _id; - public PropertyFactory(IContentType contentType, Guid version, int id) + public PropertyFactory(IContentTypeComposition contentType, Guid version, int id) { _contentType = contentType; _version = version; _id = id; } - public PropertyFactory(IMediaType mediaType, Guid version, int id) - { - _mediaType = mediaType; - _version = version; - _id = id; - } - #region Implementation of IEntityFactory public IEnumerable BuildEntity(IEnumerable dtos) @@ -98,22 +90,5 @@ namespace Umbraco.Core.Persistence.Factories } #endregion - - public IEnumerable BuildMediaEntity(IEnumerable dtos) - { - var properties = new List(); - foreach (var dto in dtos) - { - if (_mediaType.CompositionPropertyTypes.Any(x => x.Id == dto.PropertyTypeId)) - { - var propertyType = _mediaType.CompositionPropertyTypes.First(x => x.Id == dto.PropertyTypeId); - var property = propertyType.CreatePropertyFromRawValue(dto.GetValue, dto.VersionId.Value, dto.Id); - - property.ResetDirtyProperties(); - properties.Add(property); - } - } - return properties; - } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs index 3e2152e37c..08cc4fb2b3 100644 --- a/src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs @@ -347,7 +347,7 @@ namespace Umbraco.Core.Persistence.Repositories var propertyDataDtos = Database.Fetch(sql); var propertyFactory = new PropertyFactory(contentType, versionId, id); - var properties = propertyFactory.BuildMediaEntity(propertyDataDtos); + var properties = propertyFactory.BuildEntity(propertyDataDtos); var newProperties = properties.Where(x => x.HasIdentity == false); foreach (var property in newProperties) diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/editContent.aspx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/editContent.aspx.cs index e136cd05a3..7371da9160 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/editContent.aspx.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/editContent.aspx.cs @@ -45,7 +45,7 @@ namespace umbraco.cms.presentation //validate! int id; - if (!int.TryParse(Request.QueryString["id"], out id)) + if (int.TryParse(Request.QueryString["id"], out id) == false) { //if this is invalid show an error this.DisplayFatalError("Invalid query string"); diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/editMedia.aspx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/editMedia.aspx.cs index 0cf950be91..2c770738e2 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/editMedia.aspx.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/editMedia.aspx.cs @@ -2,6 +2,7 @@ using System; using System.Web.UI; using System.Web.UI.WebControls; using System.Xml; +using Umbraco.Core; using umbraco.cms.businesslogic.datatype.controls; using System.Collections.Generic; using System.Linq; @@ -40,7 +41,11 @@ namespace umbraco.cms.presentation InitializeComponent(); base.OnInit(e); - _media = new cms.businesslogic.media.Media(int.Parse(Request.QueryString["id"])); + int id = int.Parse(Request.QueryString["id"]); + + //Loading Media via new public service to ensure that the Properties are loaded correct + var media = ApplicationContext.Current.Services.MediaService.GetById(id); + _media = new cms.businesslogic.media.Media(media); // Save media on first load bool exists = SqlHelper.ExecuteScalar("SELECT COUNT(nodeId) FROM cmsContentXml WHERE nodeId = @nodeId", From 79ce586c8b4c8697a5632debf61b817573342f5c Mon Sep 17 00:00:00 2001 From: Morten Christensen Date: Wed, 13 Mar 2013 19:26:22 -0100 Subject: [PATCH 2/3] Fixes U4-1808 by removing the database lookup from an id that was resolved from the media url --- .../tinyMCE3/webcontrol/TinyMCEWebControl.cs | 108 +++--------------- 1 file changed, 15 insertions(+), 93 deletions(-) diff --git a/src/umbraco.editorControls/tinyMCE3/webcontrol/TinyMCEWebControl.cs b/src/umbraco.editorControls/tinyMCE3/webcontrol/TinyMCEWebControl.cs index b00f94c28c..0ebe42311d 100644 --- a/src/umbraco.editorControls/tinyMCE3/webcontrol/TinyMCEWebControl.cs +++ b/src/umbraco.editorControls/tinyMCE3/webcontrol/TinyMCEWebControl.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.Text; using System.Web.UI; using System.Web.UI.WebControls; @@ -9,18 +8,15 @@ using System.IO; using System.Text.RegularExpressions; using Umbraco.Core.IO; using Umbraco.Core.Logging; -using umbraco.BusinessLogic; -using umbraco.cms.businesslogic.macro; using umbraco.cms.businesslogic.media; using umbraco.cms.businesslogic.property; using Content = umbraco.cms.businesslogic.Content; using ClientDependency.Core.Controls; using ClientDependency.Core; -using umbraco.IO; namespace umbraco.editorControls.tinyMCE3.webcontrol { - public class TinyMCEWebControl : System.Web.UI.WebControls.TextBox + public class TinyMCEWebControl : TextBox { internal readonly MediaFileSystem _fs; @@ -319,7 +315,8 @@ namespace umbraco.editorControls.tinyMCE3.webcontrol { if (!ht.ContainsKey(attributeSet.Groups["attributeName"].Value.ToString())) { - ht.Add(attributeSet.Groups["attributeName"].Value.ToString(), attributeSet.Groups["attributeValue"].Value.ToString()); + ht.Add(attributeSet.Groups["attributeName"].Value.ToString(), + attributeSet.Groups["attributeValue"].Value.ToString()); } } } @@ -332,102 +329,27 @@ namespace umbraco.editorControls.tinyMCE3.webcontrol // Find the original filename, by removing the might added width and height // NH, 4.8.1 - above replaced by loading the right media file from the db later! - orgSrc = - global::Umbraco.Core.IO.IOHelper.ResolveUrl(orgSrc.Replace("%20", " ")); - - // Check for either id or guid from media - string mediaId = getIdFromSource(orgSrc, rootMediaUrl); - - Media imageMedia = null; + orgSrc = IOHelper.ResolveUrl(orgSrc.Replace("%20", " ")); try { - int mId = int.Parse(mediaId); - Property p = new Property(mId); - imageMedia = new Media(Content.GetContentFromVersion(p.VersionId).Id); - } - catch - { - try - { - imageMedia = new Media(Content.GetContentFromVersion(new Guid(mediaId)).Id); - } - catch - { - } - } + // Format the tag + tempTag = tempTag + " src=\"" + IOHelper.ResolveUrl(orgSrc) + "\""; + tempTag += "/>"; - // Check with the database if any media matches this url - if (imageMedia != null) - { - try - { - // Format the tag - tempTag = tempTag + " rel=\"" + - imageMedia.getProperty("umbracoWidth").Value.ToString() + "," + - imageMedia.getProperty("umbracoHeight").Value.ToString() + "\" src=\"" + global::Umbraco.Core.IO.IOHelper.ResolveUrl(imageMedia.getProperty("umbracoFile").Value.ToString()) + - "\""; - tempTag += "/>"; - - // Replace the tag - html = html.Replace(tag.Value, tempTag); - } - catch (Exception ee) - { - LogHelper.Error("Error reading size data from media: " + imageMedia.Id.ToString() + ", ", ee); - } + // Replace the tag + html = html.Replace(tag.Value, tempTag); + } + catch (Exception ex) + { + LogHelper.Warn("Error reading size data from media: " + orgSrc); + LogHelper.Warn(ex.Message); + LogHelper.Warn(ex.StackTrace); } - else - LogHelper.Warn("Error reading size data from media (not found): " + orgSrc); } return html; } - private string getIdFromSource(string src, string rootMediaUrl) - { - if (!rootMediaUrl.EndsWith("/")) - rootMediaUrl += "/"; - - // important - remove out the rootMediaUrl! - src = src.Replace(rootMediaUrl, ""); - - string _id = ""; - - // Check for directory id naming - if (src.Contains("/")) - { - string[] dirSplit = src.Split("/".ToCharArray()); - string tempId = dirSplit[0]; - try - { - // id - _id = int.Parse(tempId).ToString(); - } - catch - { - // guid - _id = tempId; - } - } - else - { - string[] fileSplit = src.Split("-".ToCharArray()); - - // guid or id - if (fileSplit.Length > 3) - { - for (int i = 0; i < 5; i++) - _id += fileSplit[i] + "-"; - _id = _id.Substring(0, _id.Length - 1); - } - else - _id = fileSplit[0]; - } - - return _id; - } - - private string parseMacrosToHtml(string input) { int nodeId = _nodeId; From c4aa9095f2f467d1565e3ec6b9fbe25e1600efe5 Mon Sep 17 00:00:00 2001 From: Morten Christensen Date: Wed, 13 Mar 2013 20:24:21 -0100 Subject: [PATCH 3/3] Fixes U4-1858 by ensuring that the text field is reset before setting or removing a value --- .../numberfield/numberField.cs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/umbraco.editorControls/numberfield/numberField.cs b/src/umbraco.editorControls/numberfield/numberField.cs index f5552e62ec..2b3a4178d6 100644 --- a/src/umbraco.editorControls/numberfield/numberField.cs +++ b/src/umbraco.editorControls/numberfield/numberField.cs @@ -68,17 +68,18 @@ namespace umbraco.editorControls /// public override string Text { - get - { - return base.Text; - } + get { return base.Text; } set { - int integer; - - if (int.TryParse(value, NumberStyles.AllowThousands, CultureInfo.InvariantCulture, out integer)) + if (value != null) { - base.Text = integer.ToString(); + base.Text = "";//Resets the text-field in case the value is removed + + int integer;//The value will only be parsed if it contains a valid value + if (int.TryParse(value, NumberStyles.AllowThousands, CultureInfo.InvariantCulture, out integer)) + { + base.Text = integer.ToString(CultureInfo.InvariantCulture); + } } } }