public string MapPath(string originalPath)
{
string result = null;
var site = Component.Site;
if(site != null) {
var vWA = (IWebApplication)site.GetService(typeof(IWebApplication));
if(vWA != null) {
var path = originalPath.Replace("/", "\\");
var fromRoot = false;
while(path.Length > 0 && (path.Substring(0, 1) == "\\" || path.Substring(0, 1) == "~")) {
fromRoot = true;
path = path.Substring(1);
if(path.Length == 0)
break;
}
var fAppRootFolder = vWA.RootProjectItem.PhysicalPath;
if(fromRoot) {
result = Path.Combine(fAppRootFolder, path);
}
else {
var pageUrl = Path.GetDirectoryName(RootDesigner.DocumentUrl).Replace("/", "\\");
while(pageUrl.Length > 0 && (pageUrl.Substring(0, 1) == "\\" || pageUrl.Substring(0, 1) == "~")) {
pageUrl = pageUrl.Substring(1);
if(pageUrl.Length == 0)
break;
}
result = Path.Combine(Path.Combine(fAppRootFolder, pageUrl), path);
}
result = RootDesigner.ResolveUrl(result).Substring(8).Replace("/", "\\");
if(result.IndexOf(fAppRootFolder, StringComparison.OrdinalIgnoreCase) != 0) // outside Web Application
result = null;
}
}
return result;
}