diff --git a/src/Umbraco.Core/IO/PhysicalFileSystem.cs b/src/Umbraco.Core/IO/PhysicalFileSystem.cs index def0a3c19c..7d54bf57ae 100644 --- a/src/Umbraco.Core/IO/PhysicalFileSystem.cs +++ b/src/Umbraco.Core/IO/PhysicalFileSystem.cs @@ -1,8 +1,8 @@ using System; using System.Collections.Generic; -using System.IO; +using System.Globalization; +using System.IO; using System.Linq; -using System.Text; using System.Web; using Umbraco.Core.CodeAnnotations; using Umbraco.Core.Logging; @@ -10,7 +10,6 @@ using Umbraco.Core.Publishing; namespace Umbraco.Core.IO { - [UmbracoExperimentalFeature("http://issues.umbraco.org/issue/U4-1156", "Will be declared public after 4.10")] internal class PhysicalFileSystem : IFileSystem { @@ -45,9 +44,13 @@ namespace Umbraco.Core.IO return Directory.EnumerateDirectories(path).Select(GetRelativePath); } catch (UnauthorizedAccessException ex) - { } + { + LogHelper.Error("Not authorized to get directories", ex); + } catch (DirectoryNotFoundException ex) - { } + { + LogHelper.Error("Directory not found", ex); + } return Enumerable.Empty(); } @@ -67,7 +70,9 @@ namespace Umbraco.Core.IO Directory.Delete(GetFullPath(path), recursive); } catch (DirectoryNotFoundException ex) - { } + { + LogHelper.Error("Directory not found", ex); + } } public bool DirectoryExists(string path) @@ -82,9 +87,7 @@ namespace Umbraco.Core.IO public void AddFile(string path, Stream stream, bool overrideIfExists) { - if (FileExists(path) && !overrideIfExists) - throw new InvalidOperationException(string.Format("A file at path '{0}' already exists", - path)); + if (FileExists(path) && !overrideIfExists) throw new InvalidOperationException(string.Format("A file at path '{0}' already exists", path)); EnsureDirectory(Path.GetDirectoryName(path)); @@ -110,9 +113,13 @@ namespace Umbraco.Core.IO return Directory.EnumerateFiles(path, filter).Select(GetRelativePath); } catch (UnauthorizedAccessException ex) - { } + { + LogHelper.Error("Not authorized to get directories", ex); + } catch (DirectoryNotFoundException ex) - { } + { + LogHelper.Error("Directory not found", ex); + } return Enumerable.Empty(); } @@ -193,7 +200,7 @@ namespace Umbraco.Core.IO protected string EnsureTrailingSeparator(string path) { - if (!path.EndsWith(Path.DirectorySeparatorChar.ToString(), StringComparison.Ordinal)) + if (!path.EndsWith(Path.DirectorySeparatorChar.ToString(CultureInfo.InvariantCulture), StringComparison.Ordinal)) path = path + Path.DirectorySeparatorChar; return path; diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/Trees/XmlTree.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/Trees/XmlTree.cs index ccef7f03bd..314a5363ed 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/Trees/XmlTree.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/Trees/XmlTree.cs @@ -342,8 +342,8 @@ namespace umbraco.cms.presentation.Trees set { m_notPublished = value; - if (m_notPublished.HasValue && m_notPublished.Value) - this.Style.HighlightNode(); + if (m_notPublished.HasValue && m_notPublished.Value) + this.Style.DimNode(); } } diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/controls/Images/UploadMediaImage.ascx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/controls/Images/UploadMediaImage.ascx.cs index 6f3c67609d..87ee1b4ae6 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/controls/Images/UploadMediaImage.ascx.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/controls/Images/UploadMediaImage.ascx.cs @@ -1,19 +1,12 @@ 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.Web.UI.WebControls; using System.Web.UI.HtmlControls; using System.Linq; using System.Xml; using umbraco.BasePages; -using umbraco.uicontrols; +using umbraco.cms.businesslogic.datatype; using umbraco.interfaces; -using umbraco.cms.businesslogic.media; +using Media = umbraco.cms.businesslogic.media.Media; namespace umbraco.controls.Images { @@ -23,7 +16,7 @@ namespace umbraco.controls.Images /// Includes ability to select where in the media you would like it to upload and also supports client /// callback methods once complete. /// - public partial class UploadMediaImage : System.Web.UI.UserControl + public partial class UploadMediaImage : UserControl { public UploadMediaImage() @@ -42,7 +35,7 @@ namespace umbraco.controls.Images /// public string OnClientUpload { get; set; } - protected IDataType UploadField = new cms.businesslogic.datatype.controls.Factory().GetNewObject(new Guid("5032a6e6-69e3-491d-bb28-cd31cd11086c")); + protected IDataType UploadField = DataTypeDefinition.GetByDataTypeId(new Guid("5032a6e6-69e3-491d-bb28-cd31cd11086c")).DataType; protected override void OnInit(EventArgs e) { @@ -66,39 +59,35 @@ namespace umbraco.controls.Images protected void SubmitButton_Click(object sender, EventArgs e) { - int parent = int.Parse(MediaPickerControl.Value); - if (BusinessLogic.User.GetCurrent().StartMediaId != -1 && parent == -1) - parent = BusinessLogic.User.GetCurrent().StartNodeId; + var media = Media.MakeNew(TextBoxTitle.Text, cms.businesslogic.media.MediaType.GetByAlias("image"), BasePage.Current.getUser(), int.Parse(MediaPickerControl.Value)); - Media m = Media.MakeNew(TextBoxTitle.Text, cms.businesslogic.media.MediaType.GetByAlias("image"), BasePage.Current.getUser(), int.Parse(MediaPickerControl.Value)); - var props = m.GenericProperties; - foreach (cms.businesslogic.property.Property p in props) + foreach (var property in media.GenericProperties) { - if (p.PropertyType.DataTypeDefinition.DataType.Id == UploadField.Id) + if (property.PropertyType.DataTypeDefinition.DataType.Id == UploadField.Id) { - UploadField.DataTypeDefinitionId = p.PropertyType.DataTypeDefinition.Id; - UploadField.Data.PropertyId = p.Id; + UploadField.DataTypeDefinitionId = property.PropertyType.DataTypeDefinition.Id; + UploadField.Data.PropertyId = property.Id; } } UploadField.DataEditor.Save(); // Generate xml on image - m.XmlGenerate(new XmlDocument()); + media.XmlGenerate(new XmlDocument()); pane_upload.Visible = false; //this seems real ugly since we apparently already have the properties above (props)... but this data layer is insane and undecipherable:) - string mainImage = m.getProperty("umbracoFile").Value.ToString(); + string mainImage = media.getProperty("umbracoFile").Value.ToString(); string extension = mainImage.Substring(mainImage.LastIndexOf(".") + 1, mainImage.Length - mainImage.LastIndexOf(".") - 1); var thumbnail = mainImage.Remove(mainImage.Length - extension.Length - 1, extension.Length + 1) + "_thumb.jpg"; - string width = m.getProperty("umbracoWidth").Value.ToString(); - string height = m.getProperty("umbracoHeight").Value.ToString(); - int id = m.Id; + string width = media.getProperty("umbracoWidth").Value.ToString(); + string height = media.getProperty("umbracoHeight").Value.ToString(); + int id = media.Id; feedback.Style.Add("margin-top", "8px"); feedback.type = uicontrols.Feedback.feedbacktype.success; if (mainImage.StartsWith("~")) mainImage = mainImage.Substring(1); if (thumbnail.StartsWith("~")) thumbnail = thumbnail.Substring(1); - feedback.Text += "


"; + feedback.Text += "
"; if (!string.IsNullOrEmpty(OnClientUpload)) @@ -106,7 +95,7 @@ namespace umbraco.controls.Images feedback.Text += @" "; } diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/editContent.aspx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/editContent.aspx.cs index d3b9b7d4a2..9f6d95911e 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/editContent.aspx.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/editContent.aspx.cs @@ -327,6 +327,9 @@ namespace umbraco.cms.presentation UnPublish.Visible = true; _documentHasPublishedVersion = _document.HasPublishedVersion(); + + foreach (var descendant in _document.GetDescendants().Cast().Where(descendant => descendant.HasPublishedVersion())) + library.UpdateDocumentCache(descendant.Id); } else { diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/MediaUploader.ashx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/MediaUploader.ashx.cs index 65180e4286..afb12c3c10 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/MediaUploader.ashx.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/MediaUploader.ashx.cs @@ -1,9 +1,7 @@ using System; using System.Collections.Generic; using System.Configuration; -using System.IO; using System.Linq; -using System.Text; using System.Web; using System.Web.Configuration; using System.Web.Script.Serialization; @@ -138,19 +136,15 @@ namespace umbraco.presentation.umbraco.webservices { var pathParts = context.Request["path"].Trim('/').Split('/'); - foreach (var pathPart in pathParts) - { - if (!string.IsNullOrEmpty(pathPart)) - { + foreach (var pathPart in pathParts.Where(part => string.IsNullOrWhiteSpace(part) == false)) parentNode = GetOrCreateFolder(parentNode, pathPart); - } - } + parentNodeId = parentNode.Id; } // Check whether to replace existing - var parsed = false; - bool replaceExisting = (context.Request["replaceExisting"] == "1" || (bool.TryParse(context.Request["replaceExisting"], out parsed) && parsed)); + bool parsed; + var replaceExisting = (context.Request["replaceExisting"] == "1" || (bool.TryParse(context.Request["replaceExisting"], out parsed) && parsed)); // loop through uploaded files for (var j = 0; j < context.Request.Files.Count; j++) @@ -202,11 +196,9 @@ namespace umbraco.presentation.umbraco.webservices else { // log error - LogHelper.Debug(string.Format("Parent node id is in incorrect format: {0}", parentNodeId)); + LogHelper.Warn(string.Format("Parent node id is in incorrect format: {0}", parentNodeId)); } - - return new UploadResponse(); } @@ -218,16 +210,16 @@ namespace umbraco.presentation.umbraco.webservices if (GlobalSettings.UseSSL && !context.Request.IsSecureConnection) throw new UserAuthorizationException("This installation requires a secure connection (via SSL). Please update the URL to include https://"); - string username = context.Request["username"]; - string password = context.Request["password"]; - string ticket = context.Request["ticket"]; + var username = context.Request["username"]; + var password = context.Request["password"]; + var ticket = context.Request["ticket"]; - bool isValid = false; + var isValid = false; if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password)) { var mp = Membership.Providers[UmbracoSettings.DefaultBackofficeProvider]; - if (mp.ValidateUser(username, password)) + if (mp != null && mp.ValidateUser(username, password)) { var user = new User(username); isValid = user.Applications.Any(app => app.alias == "media"); @@ -240,6 +232,8 @@ namespace umbraco.presentation.umbraco.webservices { var t = FormsAuthentication.Decrypt(ticket); var user = new User(username); + + if (t != null) isValid = user.LoginName.ToLower() == t.Name.ToLower() && user.Applications.Any(app => app.alias == "media"); if (isValid) @@ -279,14 +273,13 @@ namespace umbraco.presentation.umbraco.webservices if (appSetting > 0) return appSetting; - var configXml = new XmlDocument(); - configXml.PreserveWhitespace = true; + var configXml = new XmlDocument { PreserveWhitespace = true }; configXml.Load(HttpContext.Current.Server.MapPath("/web.config")); var requestLimitsNode = configXml.SelectSingleNode("//configuration/system.webServer/security/requestFiltering/requestLimits"); if (requestLimitsNode != null) { - if (requestLimitsNode.Attributes["maxAllowedContentLength"] != null) + if (requestLimitsNode.Attributes != null && requestLimitsNode.Attributes["maxAllowedContentLength"] != null) { var maxAllowedContentLength = Convert.ToInt32(requestLimitsNode.Attributes["maxAllowedContentLength"].Value); if (maxAllowedContentLength > 0) @@ -295,10 +288,8 @@ namespace umbraco.presentation.umbraco.webservices } var httpRuntime = ConfigurationManager.GetSection("system.web/httpRuntime") as HttpRuntimeSection; - if (httpRuntime != null) - return httpRuntime.MaxRequestLength; - return 4096; + return httpRuntime == null ? 4096 : httpRuntime.MaxRequestLength; } private Media GetOrCreateFolder(Media parent, string name) diff --git a/src/umbraco.cms/businesslogic/media/UmbracoImageMediaFactory.cs b/src/umbraco.cms/businesslogic/media/UmbracoImageMediaFactory.cs index e2412c0aa1..3c77e0cb5c 100644 --- a/src/umbraco.cms/businesslogic/media/UmbracoImageMediaFactory.cs +++ b/src/umbraco.cms/businesslogic/media/UmbracoImageMediaFactory.cs @@ -10,8 +10,6 @@ using Umbraco.Core.Logging; using umbraco.BasePages; using umbraco.BusinessLogic; using umbraco.cms.businesslogic.datatype; -using Encoder = System.Text.Encoder; -using Umbraco.Core.IO; namespace umbraco.cms.businesslogic.media { @@ -27,10 +25,10 @@ namespace umbraco.cms.businesslogic.media get { return new List { "jpeg", "jpg", "gif", "bmp", "png", "tiff", "tif" }; } } - public override void DoHandleMedia(Media media, PostedMediaFile postedFile, BusinessLogic.User user) + public override void DoHandleMedia(Media media, PostedMediaFile postedFile, User user) { // Get Image object, width and height - var image = System.Drawing.Image.FromStream(postedFile.InputStream); + var image = Image.FromStream(postedFile.InputStream); var fileWidth = image.Width; var fileHeight = image.Height; @@ -43,9 +41,15 @@ namespace umbraco.cms.businesslogic.media // Set media properties media.getProperty("umbracoFile").Value = FileSystem.GetUrl(destFilePath); - media.getProperty("umbracoWidth").Value = fileWidth; - media.getProperty("umbracoHeight").Value = fileHeight; - media.getProperty("umbracoBytes").Value = postedFile.ContentLength; + + if (media.getProperty("umbracoWidth") != null) + media.getProperty("umbracoWidth").Value = fileWidth; + + if (media.getProperty("umbracoHeight") != null) + media.getProperty("umbracoHeight").Value = fileHeight; + + if (media.getProperty("umbracoBytes") != null) + media.getProperty("umbracoBytes").Value = postedFile.ContentLength; if (media.getProperty("umbracoExtension") != null) media.getProperty("umbracoExtension").Value = ext; @@ -79,7 +83,10 @@ namespace umbraco.cms.businesslogic.media // Get DataTypeDefinition of upload field dataTypeDef = DataTypeDefinition.GetByDataTypeId(uploadFieldDataTypeId); } - catch { } + catch (Exception e) + { + LogHelper.Error("Could get Upload Field datatype definition", e); + } if (dataTypeDef != null) { @@ -95,8 +102,7 @@ namespace umbraco.cms.businesslogic.media var thumbnailSizes = thumbnails.Split(";".ToCharArray()); foreach (var thumb in thumbnailSizes.Where(thumb => thumb != "")) { - GenerateThumbnail(image, int.Parse(thumb), fileWidth, fileHeight, ext, - destFilePath + "_" + thumb + ".jpg"); + GenerateThumbnail(image, int.Parse(thumb), fileWidth, fileHeight, ext, destFilePath + "_" + thumb + ".jpg"); } } } @@ -116,6 +122,7 @@ namespace umbraco.cms.businesslogic.media // fixes for empty width or height if (widthTh == 0) widthTh = 1; + if (heightTh == 0) heightTh = 1; @@ -132,15 +139,14 @@ namespace umbraco.cms.businesslogic.media // Copy metadata var codecs = ImageCodecInfo.GetImageEncoders(); - ImageCodecInfo codec = null; - if (ext.ToLower() == "png" || ext.ToLower() == "gif") - codec = codecs.Single(t => t.MimeType.Equals("image/png")); - else - codec = codecs.Single(t => t.MimeType.Equals("image/jpeg")); + + var codec = ext.ToLower() == "png" || ext.ToLower() == "gif" + ? codecs.Single(t => t.MimeType.Equals("image/png")) + : codecs.Single(t => t.MimeType.Equals("image/jpeg")); // Set compresion ratio to 90% var ep = new EncoderParameters(); - ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 90L); + ep.Param[0] = new EncoderParameter(Encoder.Quality, 90L); // Save the new image if (codec != null) diff --git a/src/umbraco.editorControls/MultiNodeTreePicker/MultiNodePickerStyles.css b/src/umbraco.editorControls/MultiNodeTreePicker/MultiNodePickerStyles.css index ebb6293a87..3b54b79e9f 100644 --- a/src/umbraco.editorControls/MultiNodeTreePicker/MultiNodePickerStyles.css +++ b/src/umbraco.editorControls/MultiNodeTreePicker/MultiNodePickerStyles.css @@ -176,7 +176,7 @@ } .multiNodePicker .header { - width: 622px; + width: 618px; } .uc-treenode-noclick > a > div diff --git a/src/umbraco.editorControls/tinymce/tinyMCEImageHelper.cs b/src/umbraco.editorControls/tinymce/tinyMCEImageHelper.cs index 61085b1040..6072ec936f 100644 --- a/src/umbraco.editorControls/tinymce/tinyMCEImageHelper.cs +++ b/src/umbraco.editorControls/tinymce/tinyMCEImageHelper.cs @@ -1,8 +1,5 @@ using System; using System.Collections; -using System.Drawing; -using System.Drawing.Drawing2D; -using System.Drawing.Imaging; using System.Text.RegularExpressions; using System.Web; using Umbraco.Core.IO; @@ -17,47 +14,36 @@ namespace umbraco.editorControls.tinymce { public static string cleanImages(string html) { - string[] allowedAttributes = UmbracoSettings.ImageAllowedAttributes.ToLower().Split(','); - string pattern = @"]*>"; - MatchCollection tags = - Regex.Matches(html + " ", pattern, RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace); + var allowedAttributes = UmbracoSettings.ImageAllowedAttributes.ToLower().Split(','); + const string pattern = @"]*>"; + var tags = Regex.Matches(html + " ", pattern, RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace); foreach (Match tag in tags) { - if (tag.Value.ToLower().IndexOf("umbraco_macro") == -1) + if (tag.Value.ToLower().IndexOf("umbraco_macro", StringComparison.Ordinal) == -1) { - string cleanTag = "", " >"), - "(?\\S*)=\"(?[^\"]*)\"|(?\\S*)=(?[^\"|\\s]*)\\s", - RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace); - foreach (Match attributeSet in m) + var ht = new Hashtable(); + var matches = Regex.Matches(tag.Value.Replace(">", " >"), "(?\\S*)=\"(?[^\"]*)\"|(?\\S*)=(?[^\"|\\s]*)\\s", RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace); + foreach (Match attributeSet in matches) { - ht.Add(attributeSet.Groups["attributeName"].Value.ToString().ToLower(), - attributeSet.Groups["attributeValue"].Value.ToString()); - if (attributeSet.Groups["attributeName"].Value.ToString().ToLower() == "width") - int.TryParse(attributeSet.Groups["attributeValue"].Value.ToString(), out orgWidth); - else if (attributeSet.Groups["attributeName"].Value.ToString().ToLower() == "height") - int.TryParse(attributeSet.Groups["attributeValue"].Value.ToString(), out orgHeight); + ht.Add(attributeSet.Groups["attributeName"].Value.ToLower(), + attributeSet.Groups["attributeValue"].Value); } // If rel attribute exists and if it's different from current sizing we should resize the image! if (helper.FindAttribute(ht, "rel") != "") { - int newWidth = 0, newHeight = 0; - // if size has changed resize image serverside - string[] newDims = helper.FindAttribute(ht, "rel").Split(",".ToCharArray()); - if (newDims.Length > 0 && - (newDims[0] != helper.FindAttribute(ht, "width") || - newDims[1] != helper.FindAttribute(ht, "height"))) + var newDims = helper.FindAttribute(ht, "rel").Split(",".ToCharArray()); + if (newDims.Length > 0 && (newDims[0] != helper.FindAttribute(ht, "width") || newDims[1] != helper.FindAttribute(ht, "height"))) { try { - cleanTag += doResize(ht, out newWidth, out newHeight); + int newWidth; + int newHeight; + cleanTag += DoResize(ht, out newWidth, out newHeight); } catch (Exception err) { @@ -72,8 +58,6 @@ namespace umbraco.editorControls.tinymce } else { - cleanTag = StripSrc(cleanTag, ht); - if (helper.FindAttribute(ht, "width") != "") { cleanTag += " width=\"" + helper.FindAttribute(ht, "width") + "\""; @@ -84,32 +68,26 @@ namespace umbraco.editorControls.tinymce } else { - // Add src, width and height properties - cleanTag = StripSrc(cleanTag, ht); - - if (helper.FindAttribute(ht, "width") != "") { cleanTag += " width=\"" + helper.FindAttribute(ht, "width") + "\""; cleanTag += " height=\"" + helper.FindAttribute(ht, "height") + "\""; } - } - // Build image tag - foreach (string attr in allowedAttributes) + foreach (var attr in allowedAttributes) { if (helper.FindAttribute(ht, attr) != "") { - string attrValue = helper.FindAttribute(ht, attr); + var attrValue = helper.FindAttribute(ht, attr); cleanTag += " " + attr + "=\"" + attrValue + "\""; } } - if (bool.Parse(GlobalSettings.EditXhtmlMode)) cleanTag += "/"; + cleanTag += ">"; html = html.Replace(tag.Value, cleanTag); } @@ -118,113 +96,42 @@ namespace umbraco.editorControls.tinymce return html; } - private static string StripSrc(string cleanTag, Hashtable ht) - { - string src = helper.FindAttribute(ht, "src"); - //get the media folder, minus the starting '~' - string mediaRoot = global::Umbraco.Core.IO.SystemDirectories.Media.Replace("~", string.Empty); - - // update orgSrc to remove umbraco reference - int mediaRootIndex = src.IndexOf(mediaRoot); - if (mediaRootIndex > -1) - - src = src.Substring(mediaRootIndex, src.Length - mediaRootIndex); - - cleanTag += " src=\"" + src + "\""; - return cleanTag; - } - - private static string doResize(Hashtable attributes, out int finalWidth, out int finalHeight) + private static string DoResize(IDictionary attributes, out int finalWidth, out int finalHeight) { var fs = FileSystemProviderManager.Current.GetFileSystemProvider(); + var orgSrc = HttpContext.Current.Server.HtmlDecode(helper.FindAttribute(attributes, "src").Replace("%20", " ")); + var orgDim = helper.FindAttribute(attributes, "rel").Split(",".ToCharArray()); + var orgWidth = float.Parse(orgDim[0]); + var orgHeight = float.Parse(orgDim[1]); + var newWidth = int.Parse(helper.FindAttribute(attributes, "width")); + var newHeight = int.Parse(helper.FindAttribute(attributes, "height")); - string resizeDim = helper.FindAttribute(attributes, "width") + "," + - helper.FindAttribute(attributes, "height"); - string[] resizeDimSplit = resizeDim.Split(','); - string orgSrc = HttpContext.Current.Server.HtmlDecode(helper.FindAttribute(attributes, "src").Replace("%20", " ")); - string[] orgDim = helper.FindAttribute(attributes, "rel").Split(",".ToCharArray()); - float orgWidth = float.Parse(orgDim[0]); - float orgHeight = float.Parse(orgDim[1]); - string newSrc = ""; - int newWidth = int.Parse(resizeDimSplit[0]); - int newHeight = int.Parse(resizeDimSplit[1]); + var newSrc = ""; - if (orgHeight > 0 && orgWidth > 0 && resizeDim != "" && orgSrc != "") + if (orgHeight > 0 && orgWidth > 0 && orgSrc != "") { // Check dimensions if (Math.Abs(orgWidth / newWidth) > Math.Abs(orgHeight / newHeight)) { - newHeight = (int)Math.Round((float)newWidth * (orgHeight / orgWidth)); + newHeight = (int)Math.Round(newWidth * (orgHeight / orgWidth)); } else { - newWidth = (int)Math.Round((float)newHeight * (orgWidth / orgHeight)); + newWidth = (int)Math.Round(newHeight * (orgWidth / orgHeight)); } - // update orgSrc to remove umbraco reference - //string resolvedMedia = IOHelper.ResolveUrl(SystemDirectories.Media); - //if (IOHelper.ResolveUrl(orgSrc).IndexOf(resolvedMedia) > -1) - //{ - // orgSrc = SystemDirectories.Media + orgSrc.Substring(orgSrc.IndexOf(resolvedMedia) + resolvedMedia.Length); //, orgSrc.Length - orgSrc.IndexOf(String.Format("/media/", SystemDirectories.Media))); - - //} - - //string fullSrc = IOHelper.MapPath(orgSrc); - var orgPath = fs.GetRelativePath(orgSrc); if (fs.FileExists(orgPath)) { var uf = new UmbracoFile(orgPath); newSrc = uf.Resize(newWidth, newHeight); } - - /* - // Load original image - Image image = Image.FromFile(fullSrc); - - - // Create new image with best quality settings - Bitmap bp = new Bitmap(newWidth, newHeight); - Graphics g = Graphics.FromImage(bp); - g.SmoothingMode = SmoothingMode.HighQuality; - g.InterpolationMode = InterpolationMode.HighQualityBicubic; - g.PixelOffsetMode = PixelOffsetMode.HighQuality; - - // Copy the old image to the new and resized - Rectangle rect = new Rectangle(0, 0, newWidth, newHeight); - g.DrawImage(image, rect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel); - - // Copy metadata - ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders(); - ImageCodecInfo codec = null; - for (int i = 0; i < codecs.Length; i++) - { - if (codecs[i].MimeType.Equals("image/jpeg")) - codec = codecs[i]; } - // Set compresion ratio to 90% - EncoderParameters ep = new EncoderParameters(); - ep.Param[0] = new EncoderParameter(Encoder.Quality, 90L); - - // Save the new image - bp.Save(fullSrcNew, codec, ep); - * */ - } - - // return the new width and height finalWidth = newWidth; finalHeight = newHeight; - //GE: When the SystemDirectories.Media contains a ~, newSrc will also contain this and hasn't been resolved. - //This causes the editor to save content which contains a virtual url, and thus the image doesn't serve - //the admin editor successfully displays the image because the HTML is rewritten, but when you get the RTE content in the template - //it hasn't been replaced - //2011-08-12 added a IOHelper.ResolveUrl call around newSrc - //2012-08-20 IFileSystem now takes care of URL resolution, so should be safe to assume newSrc is a full/absolute URL - return - " src=\"" + newSrc + "\" width=\"" + newWidth.ToString() + "\" height=\"" + newHeight.ToString() + - "\""; + return " src=\"" + newSrc + "\" width=\"" + newWidth + "\" height=\"" + newHeight + "\""; } } } \ No newline at end of file