U4-1226 Umbraco:image control
This commit is contained in:
committed by
Sebastiaan Janssen
parent
530fcf0ea3
commit
f386c9d024
@@ -1,84 +1,97 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Specialized;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
using Umbraco.Core.Media;
|
||||
using umbraco;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Specialized;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
using Umbraco.Core.Media;
|
||||
using umbraco;
|
||||
|
||||
namespace Umbraco.Web.Media
|
||||
{
|
||||
public class ImageUrl
|
||||
{
|
||||
[Obsolete("Use TryGetImageUrl() instead")]
|
||||
public static string GetImageUrl(string specifiedSrc, string field, string provider, string parameters, int? nodeId = null)
|
||||
{
|
||||
string url;
|
||||
var found = TryGetImageUrl(specifiedSrc, field, provider, parameters, nodeId, out url);
|
||||
|
||||
return found ? url : string.Empty;
|
||||
}
|
||||
|
||||
namespace Umbraco.Web.Media
|
||||
{
|
||||
public class ImageUrl
|
||||
{
|
||||
public static string GetImageUrl(string specifiedSrc, string field, string provider, string parameters, int? nodeId = null)
|
||||
public static bool TryGetImageUrl(string specifiedSrc, string field, string provider, string parameters, int? nodeId, out string url)
|
||||
{
|
||||
string url;
|
||||
|
||||
var imageUrlProvider = GetProvider(provider);
|
||||
|
||||
var parsedParameters = string.IsNullOrEmpty(parameters) ? new NameValueCollection() : HttpUtility.ParseQueryString(parameters);
|
||||
|
||||
var queryValues = parsedParameters.Keys.Cast<string>().ToDictionary(key => key, key => parsedParameters[key]);
|
||||
|
||||
if (string.IsNullOrEmpty(field))
|
||||
{
|
||||
url = imageUrlProvider.GetImageUrlFromFileName(specifiedSrc, queryValues);
|
||||
}
|
||||
else
|
||||
{
|
||||
var fieldValue = string.Empty;
|
||||
if (nodeId.HasValue)
|
||||
var imageUrlProvider = GetProvider(provider);
|
||||
|
||||
var parsedParameters = string.IsNullOrEmpty(parameters) ? new NameValueCollection() : HttpUtility.ParseQueryString(parameters);
|
||||
|
||||
var queryValues = parsedParameters.Keys.Cast<string>().ToDictionary(key => key, key => parsedParameters[key]);
|
||||
|
||||
if (string.IsNullOrEmpty(field))
|
||||
{
|
||||
url = imageUrlProvider.GetImageUrlFromFileName(specifiedSrc, queryValues);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
var fieldValue = string.Empty;
|
||||
if (nodeId.HasValue)
|
||||
{
|
||||
var contentFromCache = GetContentFromCache(nodeId.GetValueOrDefault(), field);
|
||||
if (contentFromCache != null)
|
||||
{
|
||||
fieldValue = contentFromCache.ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
var itemPage = new page(content.Instance.XmlContent.GetElementById(nodeId.GetValueOrDefault().ToString(CultureInfo.InvariantCulture)));
|
||||
var value = itemPage.Elements[field];
|
||||
fieldValue = value != null ? value.ToString() : string.Empty;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var context = HttpContext.Current;
|
||||
if (context != null)
|
||||
{
|
||||
var elements = context.Items["pageElements"] as Hashtable;
|
||||
if (elements != null)
|
||||
{
|
||||
var value = elements[field];
|
||||
fieldValue = value != null ? value.ToString() : string.Empty;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(fieldValue))
|
||||
{
|
||||
var contentFromCache = GetContentFromCache(nodeId.GetValueOrDefault(), field);
|
||||
if (contentFromCache != null)
|
||||
{
|
||||
fieldValue = contentFromCache.ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
var itemPage = new page(content.Instance.XmlContent.GetElementById(nodeId.GetValueOrDefault().ToString(CultureInfo.InvariantCulture)));
|
||||
var value = itemPage.Elements[field];
|
||||
fieldValue = value != null ? value.ToString() : string.Empty;
|
||||
}
|
||||
int mediaId;
|
||||
url = int.TryParse(fieldValue, out mediaId)
|
||||
? imageUrlProvider.GetImageUrlFromMedia(mediaId, queryValues)
|
||||
: imageUrlProvider.GetImageUrlFromFileName(fieldValue, queryValues);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
var context = HttpContext.Current;
|
||||
if (context != null)
|
||||
{
|
||||
var elements = context.Items["pageElements"] as Hashtable;
|
||||
if (elements != null)
|
||||
{
|
||||
var value = elements[field];
|
||||
fieldValue = value != null ? value.ToString() : string.Empty;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int mediaId;
|
||||
url = int.TryParse(fieldValue, out mediaId)
|
||||
? imageUrlProvider.GetImageUrlFromMedia(mediaId, queryValues)
|
||||
: imageUrlProvider.GetImageUrlFromFileName(fieldValue, queryValues);
|
||||
}
|
||||
|
||||
return url;
|
||||
}
|
||||
|
||||
private static IImageUrlProvider GetProvider(string provider)
|
||||
{
|
||||
return ImageUrlProviderResolver.Current.GetProvider(provider);
|
||||
}
|
||||
|
||||
private static object GetContentFromCache(int nodeIdInt, string field)
|
||||
{
|
||||
var context = HttpContext.Current;
|
||||
|
||||
if (context == null)
|
||||
return string.Empty;
|
||||
|
||||
var content = context.Cache[String.Format("contentItem{0}_{1}", nodeIdInt.ToString(CultureInfo.InvariantCulture), field)];
|
||||
return content;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
url = string.Empty;
|
||||
return false;
|
||||
}
|
||||
|
||||
private static IImageUrlProvider GetProvider(string provider)
|
||||
{
|
||||
return ImageUrlProviderResolver.Current.GetProvider(provider);
|
||||
}
|
||||
|
||||
private static object GetContentFromCache(int nodeIdInt, string field)
|
||||
{
|
||||
var context = HttpContext.Current;
|
||||
|
||||
if (context == null)
|
||||
return string.Empty;
|
||||
|
||||
var content = context.Cache[String.Format("contentItem{0}_{1}", nodeIdInt.ToString(CultureInfo.InvariantCulture), field)];
|
||||
return content;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,91 +1,91 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Xml.XPath;
|
||||
using Umbraco.Core.Media;
|
||||
using umbraco;
|
||||
|
||||
namespace Umbraco.Web.Media.ImageUrlProviders
|
||||
{
|
||||
public class ImageUrlProvider : IImageUrlProvider
|
||||
{
|
||||
public const string DefaultName = "umbracoUpload";
|
||||
|
||||
public string Name
|
||||
{
|
||||
get { return DefaultName; }
|
||||
}
|
||||
|
||||
public string GetImageUrlFromMedia(int mediaId, IDictionary<string, string> parameters)
|
||||
{
|
||||
var url = string.Empty;
|
||||
|
||||
var nodeIterator = library.GetMedia(mediaId, false);
|
||||
|
||||
if (nodeIterator.Current != null)
|
||||
{
|
||||
var filename = GetProperty(nodeIterator, "umbracoFile");
|
||||
var withThumb = AddThumbInfo(filename, parameters);
|
||||
url = AddCropInfo(withThumb, parameters);
|
||||
}
|
||||
|
||||
return url;
|
||||
}
|
||||
|
||||
public string GetImageUrlFromFileName(string specifiedSrc, IDictionary<string, string> parameters)
|
||||
{
|
||||
var withThumb = AddThumbInfo(specifiedSrc, parameters);
|
||||
return AddCropInfo(withThumb, parameters);
|
||||
}
|
||||
|
||||
private static string AddThumbInfo(string filename, IDictionary<string, string> parameters)
|
||||
{
|
||||
var thumb = string.Empty;
|
||||
if (parameters.ContainsKey("thumb"))
|
||||
thumb = parameters["thumb"];
|
||||
|
||||
if (!string.IsNullOrEmpty(thumb))
|
||||
{
|
||||
var lastIndexOf = filename.LastIndexOf('.');
|
||||
var name = filename.Substring(0, lastIndexOf);
|
||||
var extension = filename.Substring(lastIndexOf, filename.Length - lastIndexOf);
|
||||
return string.Format("{0}_thumb_{1}{2}", name, thumb, extension);
|
||||
}
|
||||
return filename;
|
||||
}
|
||||
|
||||
private static string AddCropInfo(string filename, IDictionary<string, string> parameters)
|
||||
{
|
||||
var crop = string.Empty;
|
||||
if (parameters.ContainsKey("crop"))
|
||||
crop = parameters["crop"];
|
||||
|
||||
if (!string.IsNullOrEmpty(crop))
|
||||
{
|
||||
var lastIndexOf = filename.LastIndexOf('.');
|
||||
var name = filename.Substring(0, lastIndexOf);
|
||||
|
||||
//var extension = filename.Substring(lastIndexOf, filename.Length - lastIndexOf);
|
||||
//Built in cropper currently always uses jpg as an extension
|
||||
|
||||
const string extension = ".jpg";
|
||||
return string.Format("{0}_{1}{2}", name, crop, extension);
|
||||
}
|
||||
|
||||
return filename;
|
||||
}
|
||||
|
||||
|
||||
private static string GetProperty(XPathNodeIterator nodeIterator, string fileProp)
|
||||
{
|
||||
var xpath = UmbracoSettings.UseLegacyXmlSchema
|
||||
? string.Format(".//data[@alias = '{0}']", fileProp)
|
||||
: string.Format(".//{0}", fileProp);
|
||||
|
||||
var file = string.Empty;
|
||||
var selectSingleNode = nodeIterator.Current.SelectSingleNode(xpath);
|
||||
if (selectSingleNode != null)
|
||||
file = selectSingleNode.InnerXml;
|
||||
|
||||
return file;
|
||||
}
|
||||
}
|
||||
using System.Collections.Generic;
|
||||
using System.Xml.XPath;
|
||||
using Umbraco.Core.Media;
|
||||
using umbraco;
|
||||
|
||||
namespace Umbraco.Web.Media.ImageUrlProviders
|
||||
{
|
||||
public class ImageUrlProvider : IImageUrlProvider
|
||||
{
|
||||
public const string DefaultName = "umbracoUpload";
|
||||
|
||||
public string Name
|
||||
{
|
||||
get { return DefaultName; }
|
||||
}
|
||||
|
||||
public string GetImageUrlFromMedia(int mediaId, IDictionary<string, string> parameters)
|
||||
{
|
||||
var url = string.Empty;
|
||||
|
||||
var nodeIterator = library.GetMedia(mediaId, false);
|
||||
|
||||
if (nodeIterator.Current != null)
|
||||
{
|
||||
var filename = GetProperty(nodeIterator, "umbracoFile");
|
||||
var withThumb = AddThumbInfo(filename, parameters);
|
||||
url = AddCropInfo(withThumb, parameters);
|
||||
}
|
||||
|
||||
return url;
|
||||
}
|
||||
|
||||
public string GetImageUrlFromFileName(string specifiedSrc, IDictionary<string, string> parameters)
|
||||
{
|
||||
var withThumb = AddThumbInfo(specifiedSrc, parameters);
|
||||
return AddCropInfo(withThumb, parameters);
|
||||
}
|
||||
|
||||
private static string AddThumbInfo(string filename, IDictionary<string, string> parameters)
|
||||
{
|
||||
var thumb = string.Empty;
|
||||
if (parameters.ContainsKey("thumb"))
|
||||
thumb = parameters["thumb"];
|
||||
|
||||
if (!string.IsNullOrEmpty(thumb) && filename.Contains("."))
|
||||
{
|
||||
var lastIndexOf = filename.LastIndexOf('.');
|
||||
var name = filename.Substring(0, lastIndexOf);
|
||||
var extension = filename.Substring(lastIndexOf, filename.Length - lastIndexOf);
|
||||
return string.Format("{0}_thumb_{1}{2}", name, thumb, extension);
|
||||
}
|
||||
return filename;
|
||||
}
|
||||
|
||||
private static string AddCropInfo(string filename, IDictionary<string, string> parameters)
|
||||
{
|
||||
var crop = string.Empty;
|
||||
if (parameters.ContainsKey("crop"))
|
||||
crop = parameters["crop"];
|
||||
|
||||
if (!string.IsNullOrEmpty(crop) && filename.Contains("."))
|
||||
{
|
||||
var lastIndexOf = filename.LastIndexOf('.');
|
||||
var name = filename.Substring(0, lastIndexOf);
|
||||
|
||||
//var extension = filename.Substring(lastIndexOf, filename.Length - lastIndexOf);
|
||||
//Built in cropper currently always uses jpg as an extension
|
||||
|
||||
const string extension = ".jpg";
|
||||
return string.Format("{0}_{1}{2}", name, crop, extension);
|
||||
}
|
||||
|
||||
return filename;
|
||||
}
|
||||
|
||||
|
||||
private static string GetProperty(XPathNodeIterator nodeIterator, string fileProp)
|
||||
{
|
||||
var xpath = UmbracoSettings.UseLegacyXmlSchema
|
||||
? string.Format(".//data[@alias = '{0}']", fileProp)
|
||||
: string.Format(".//{0}", fileProp);
|
||||
|
||||
var file = string.Empty;
|
||||
var selectSingleNode = nodeIterator.Current.SelectSingleNode(xpath);
|
||||
if (selectSingleNode != null)
|
||||
file = selectSingleNode.InnerXml;
|
||||
|
||||
return file;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,25 +1,30 @@
|
||||
using System.Web.UI;
|
||||
using System.Web.UI.HtmlControls;
|
||||
using Umbraco.Core.Media;
|
||||
using Umbraco.Web.Media;
|
||||
using System.Web.UI;
|
||||
using System.Web.UI.HtmlControls;
|
||||
using Umbraco.Core.Media;
|
||||
using Umbraco.Web.Media;
|
||||
|
||||
namespace umbraco.presentation.templateControls
|
||||
{
|
||||
public class Image : HtmlImage
|
||||
{
|
||||
public string NodeId { get; set; }
|
||||
public string Field { get; set; }
|
||||
public string Provider { get; set; }
|
||||
public string Parameters { get; set; }
|
||||
|
||||
protected override void Render(HtmlTextWriter writer)
|
||||
{
|
||||
int id;
|
||||
bool hasid = int.TryParse(NodeId, out id);
|
||||
int? nodeId = hasid ? id : (int?)null;
|
||||
|
||||
namespace umbraco.presentation.templateControls
|
||||
{
|
||||
public class Image : HtmlImage
|
||||
{
|
||||
public string NodeId { get; set; }
|
||||
public string Field { get; set; }
|
||||
public string Provider { get; set; }
|
||||
public string Parameters { get; set; }
|
||||
|
||||
protected override void Render(HtmlTextWriter writer)
|
||||
{
|
||||
int id;
|
||||
bool hasid = int.TryParse(NodeId, out id);
|
||||
int? nodeId = hasid ? id : (int?) null;
|
||||
|
||||
Src = ImageUrl.GetImageUrl(Src, Field, Provider, Parameters, nodeId);
|
||||
base.Render(writer);
|
||||
}
|
||||
}
|
||||
string url;
|
||||
bool imageFound = ImageUrl.TryGetImageUrl(Src, Field, Provider, Parameters, nodeId, out url);
|
||||
Src = url;
|
||||
if (imageFound)
|
||||
{
|
||||
base.Render(writer);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user