webdav portal fixes

This commit is contained in:
vfedosevich 2015-02-26 03:27:37 -08:00
parent 682e4ac18a
commit c78570eb11
15 changed files with 177 additions and 14 deletions

View file

@ -297,7 +297,7 @@ namespace WebsitePanel.Providers.EnterpriseStorage
searchPaths = searchPaths.Where(x => !string.IsNullOrEmpty(x)).ToArray(); searchPaths = searchPaths.Where(x => !string.IsNullOrEmpty(x)).ToArray();
} }
using (new WindowsIdentity(userPrincipalName).Impersonate()) //using (new WindowsIdentity(userPrincipalName).Impersonate())
{ {
using (var conn = new OleDbConnection("Provider=Search.CollatorDSO;Extended Properties='Application=Windows';")) using (var conn = new OleDbConnection("Provider=Search.CollatorDSO;Extended Properties='Application=Windows';"))
{ {
@ -341,7 +341,6 @@ namespace WebsitePanel.Providers.EnterpriseStorage
file.RelativeUrl = file.FullName.Replace(Path.Combine(rootFolder, searchPath), "").Trim('\\'); file.RelativeUrl = file.FullName.Replace(Path.Combine(rootFolder, searchPath), "").Trim('\\');
} }
} }
result.Add(file); result.Add(file);
} }

View file

@ -0,0 +1,38 @@
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using WebsitePanel.WebDav.Core.Config.WebConfigSections;
using WebsitePanel.WebDavPortal.WebConfigSections;
namespace WebsitePanel.WebDav.Core.Config.Entities
{
public class OpenerCollection : AbstractConfigCollection, IReadOnlyCollection<OpenerElement>
{
private readonly IList<OpenerElement> _targetBlankMimeTypeExtensions;
public OpenerCollection()
{
_targetBlankMimeTypeExtensions = ConfigSection.TypeOpener.Cast<OpenerElement>().ToList();
}
public IEnumerator<OpenerElement> GetEnumerator()
{
return _targetBlankMimeTypeExtensions.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
public int Count
{
get { return _targetBlankMimeTypeExtensions.Count; }
}
public bool Contains(string extension)
{
return _targetBlankMimeTypeExtensions.Any(x => x.Extension == extension);
}
}
}

View file

@ -14,5 +14,6 @@ namespace WebsitePanel.WebDav.Core.Config
OfficeOnlineCollection OfficeOnline { get; } OfficeOnlineCollection OfficeOnline { get; }
OwaSupportedBrowsersCollection OwaSupportedBrowsers { get; } OwaSupportedBrowsersCollection OwaSupportedBrowsers { get; }
FilesToIgnoreCollection FilesToIgnore { get; } FilesToIgnoreCollection FilesToIgnore { get; }
OpenerCollection FileOpener { get; }
} }
} }

View file

@ -0,0 +1,33 @@
using System;
using System.Configuration;
namespace WebsitePanel.WebDav.Core.Config.WebConfigSections
{
public class OpenerElement : ConfigurationElement
{
private const string ExtensionKey = "extension";
private const string MemeTypeKey = "mimeType";
private const string TargetBlankKey = "isTargetBlank";
[ConfigurationProperty(ExtensionKey, IsKey = true, IsRequired = true)]
public string Extension
{
get { return this[ExtensionKey].ToString(); }
set { this[ExtensionKey] = value; }
}
[ConfigurationProperty(MemeTypeKey, IsKey = true, IsRequired = true)]
public string MimeType
{
get { return this[MemeTypeKey].ToString(); }
set { this[MemeTypeKey] = value; }
}
[ConfigurationProperty(TargetBlankKey, IsKey = true, IsRequired = true)]
public bool IstargetBlank
{
get { return Convert.ToBoolean(this[TargetBlankKey]); }
set { this[TargetBlankKey] = value; }
}
}
}

View file

@ -0,0 +1,19 @@
using System;
using System.Configuration;
namespace WebsitePanel.WebDav.Core.Config.WebConfigSections
{
[ConfigurationCollection(typeof(OpenerElement))]
public class OpenerElementCollection : ConfigurationElementCollection
{
protected override ConfigurationElement CreateNewElement()
{
return new OpenerElement();
}
protected override object GetElementKey(ConfigurationElement element)
{
return ((OpenerElement)element).Extension;
}
}
}

View file

@ -19,6 +19,7 @@ namespace WebsitePanel.WebDavPortal.WebConfigSections
private const string OwaSupportedBrowsersKey = "owaSupportedBrowsers"; private const string OwaSupportedBrowsersKey = "owaSupportedBrowsers";
private const string OfficeOnlineKey = "officeOnline"; private const string OfficeOnlineKey = "officeOnline";
private const string FilesToIgnoreKey = "filesToIgnore"; private const string FilesToIgnoreKey = "filesToIgnore";
private const string TypeOpenerKey = "typeOpener";
public const string SectionName = "webDavExplorerConfigurationSettings"; public const string SectionName = "webDavExplorerConfigurationSettings";
@ -99,6 +100,13 @@ namespace WebsitePanel.WebDavPortal.WebConfigSections
set { this[OfficeOnlineKey] = value; } set { this[OfficeOnlineKey] = value; }
} }
[ConfigurationProperty(TypeOpenerKey, IsDefaultCollection = false)]
public OpenerElementCollection TypeOpener
{
get { return (OpenerElementCollection)this[TypeOpenerKey]; }
set { this[TypeOpenerKey] = value; }
}
[ConfigurationProperty(FilesToIgnoreKey, IsDefaultCollection = false)] [ConfigurationProperty(FilesToIgnoreKey, IsDefaultCollection = false)]
public FilesToIgnoreElementCollection FilesToIgnore public FilesToIgnoreElementCollection FilesToIgnore
{ {

View file

@ -20,6 +20,7 @@ namespace WebsitePanel.WebDav.Core.Config
OfficeOnline = new OfficeOnlineCollection(); OfficeOnline = new OfficeOnlineCollection();
OwaSupportedBrowsers = new OwaSupportedBrowsersCollection(); OwaSupportedBrowsers = new OwaSupportedBrowsersCollection();
FilesToIgnore = new FilesToIgnoreCollection(); FilesToIgnore = new FilesToIgnoreCollection();
FileOpener = new OpenerCollection();
} }
public static WebDavAppConfigManager Instance public static WebDavAppConfigManager Instance
@ -60,5 +61,6 @@ namespace WebsitePanel.WebDav.Core.Config
public OfficeOnlineCollection OfficeOnline { get; private set; } public OfficeOnlineCollection OfficeOnline { get; private set; }
public OwaSupportedBrowsersCollection OwaSupportedBrowsers { get; private set; } public OwaSupportedBrowsersCollection OwaSupportedBrowsers { get; private set; }
public FilesToIgnoreCollection FilesToIgnore { get; private set; } public FilesToIgnoreCollection FilesToIgnore { get; private set; }
public OpenerCollection FileOpener { get; private set; }
} }
} }

View file

@ -83,7 +83,6 @@ namespace WebsitePanel.WebDav.Core
{ {
{ {
var property = _properties.FirstOrDefault(x => x.Name.Name == "getcontenttype"); var property = _properties.FirstOrDefault(x => x.Name.Name == "getcontenttype");
return property == null ? MediaTypeNames.Application.Octet : property.StringValue; return property == null ? MediaTypeNames.Application.Octet : property.StringValue;
} }
} }

View file

@ -107,6 +107,7 @@
<Compile Include="Config\Entities\OfficeOnlineCollection.cs" /> <Compile Include="Config\Entities\OfficeOnlineCollection.cs" />
<Compile Include="Config\Entities\OwaSupportedBrowsersCollection.cs" /> <Compile Include="Config\Entities\OwaSupportedBrowsersCollection.cs" />
<Compile Include="Config\Entities\SessionKeysCollection.cs" /> <Compile Include="Config\Entities\SessionKeysCollection.cs" />
<Compile Include="Config\Entities\OpenerCollection.cs" />
<Compile Include="Config\Entities\WebsitePanelConstantUserParameters.cs" /> <Compile Include="Config\Entities\WebsitePanelConstantUserParameters.cs" />
<Compile Include="Config\IWebDavAppConfig.cs" /> <Compile Include="Config\IWebDavAppConfig.cs" />
<Compile Include="Config\WebConfigSections\ApplicationNameElement.cs" /> <Compile Include="Config\WebConfigSections\ApplicationNameElement.cs" />
@ -119,10 +120,12 @@
<Compile Include="Config\WebConfigSections\FilesToIgnoreElementCollection.cs" /> <Compile Include="Config\WebConfigSections\FilesToIgnoreElementCollection.cs" />
<Compile Include="Config\WebConfigSections\OfficeOnlineElement.cs" /> <Compile Include="Config\WebConfigSections\OfficeOnlineElement.cs" />
<Compile Include="Config\WebConfigSections\OfficeOnlineElementCollection.cs" /> <Compile Include="Config\WebConfigSections\OfficeOnlineElementCollection.cs" />
<Compile Include="Config\WebConfigSections\OpenerElementCollection.cs" />
<Compile Include="Config\WebConfigSections\OwaSupportedBrowsersElement.cs" /> <Compile Include="Config\WebConfigSections\OwaSupportedBrowsersElement.cs" />
<Compile Include="Config\WebConfigSections\OwaSupportedBrowsersElementCollection.cs" /> <Compile Include="Config\WebConfigSections\OwaSupportedBrowsersElementCollection.cs" />
<Compile Include="Config\WebConfigSections\SessionKeysElement.cs" /> <Compile Include="Config\WebConfigSections\SessionKeysElement.cs" />
<Compile Include="Config\WebConfigSections\SessionKeysElementCollection.cs" /> <Compile Include="Config\WebConfigSections\SessionKeysElementCollection.cs" />
<Compile Include="Config\WebConfigSections\OpenerElement.cs" />
<Compile Include="Config\WebConfigSections\UserDomainElement.cs" /> <Compile Include="Config\WebConfigSections\UserDomainElement.cs" />
<Compile Include="Config\WebConfigSections\WebDavExplorerConfigurationSettingsSection.cs" /> <Compile Include="Config\WebConfigSections\WebDavExplorerConfigurationSettingsSection.cs" />
<Compile Include="Config\WebConfigSections\WebdavRootElement.cs" /> <Compile Include="Config\WebConfigSections\WebdavRootElement.cs" />

View file

@ -84,7 +84,9 @@ namespace WebsitePanel.WebDavPortal.Controllers
{ {
var resource = _webdavManager.GetResource(pathPart); var resource = _webdavManager.GetResource(pathPart);
return new FileStreamResult(resource.GetReadStream(), resource.ContentType); var mimeType = _openerManager.GetMimeType(Path.GetExtension(pathPart));
return new FileStreamResult(resource.GetReadStream(), mimeType);
} }
try try
@ -347,6 +349,11 @@ namespace WebsitePanel.WebDavPortal.Controllers
break; break;
} }
} }
if (Request.Browser.IsMobileDevice)
{
item.IsTargetBlank = false;
}
} }
} }
} }

View file

@ -2,6 +2,7 @@
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Net; using System.Net;
using System.Net.Mime;
using System.Web; using System.Web;
using System.Web.Mvc; using System.Web.Mvc;
using WebsitePanel.WebDav.Core; using WebsitePanel.WebDav.Core;
@ -14,12 +15,21 @@ namespace WebsitePanel.WebDavPortal.FileOperations
{ {
public class FileOpenerManager public class FileOpenerManager
{ {
private readonly IDictionary<string, FileOpenerType> _officeOperationTypes = new Dictionary<string, FileOpenerType>();
private readonly IDictionary<string, FileOpenerType> _operationTypes = new Dictionary<string, FileOpenerType>(); private readonly IDictionary<string, FileOpenerType> _operationTypes = new Dictionary<string, FileOpenerType>();
public FileOpenerManager() public FileOpenerManager()
{ {
if (WebDavAppConfigManager.Instance.OfficeOnline.IsEnabled) if (WebDavAppConfigManager.Instance.OfficeOnline.IsEnabled)
_operationTypes.AddRange(WebDavAppConfigManager.Instance.OfficeOnline.ToDictionary(x => x.Extension, y => FileOpenerType.OfficeOnline)); {
_officeOperationTypes.AddRange(
WebDavAppConfigManager.Instance.OfficeOnline.ToDictionary(x => x.Extension,
y => FileOpenerType.OfficeOnline));
}
_operationTypes.AddRange(
WebDavAppConfigManager.Instance.FileOpener.ToDictionary(x => x.Extension,
y => FileOpenerType.Open));
} }
public string GetUrl(IHierarchyItem item, UrlHelper urlHelper) public string GetUrl(IHierarchyItem item, UrlHelper urlHelper)
@ -48,14 +58,35 @@ namespace WebsitePanel.WebDavPortal.FileOperations
public bool GetIsTargetBlank(IHierarchyItem item) public bool GetIsTargetBlank(IHierarchyItem item)
{ {
var opener = this[Path.GetExtension(item.DisplayName)]; var opener = this[Path.GetExtension(item.DisplayName)];
var result = false;
switch (opener) switch (opener)
{ {
case FileOpenerType.OfficeOnline: case FileOpenerType.OfficeOnline:
return true; {
default: result = true;
return false; break;
}
case FileOpenerType.Open:
{
result = true;
break;
}
} }
return result;
}
public string GetMimeType(string extension)
{
var opener = WebDavAppConfigManager.Instance.FileOpener.FirstOrDefault(x => x.Extension.ToLowerInvariant() == extension.ToLowerInvariant());
if (opener == null)
{
return MediaTypeNames.Application.Octet;
}
return opener.MimeType;
} }
public FileOpenerType this[string fileExtension] public FileOpenerType this[string fileExtension]
@ -63,8 +94,16 @@ namespace WebsitePanel.WebDavPortal.FileOperations
get get
{ {
FileOpenerType result; FileOpenerType result;
if (_operationTypes.TryGetValue(fileExtension, out result) && CheckBrowserSupport()) if (_officeOperationTypes.TryGetValue(fileExtension, out result) && CheckBrowserSupport())
{
return result; return result;
}
if (_operationTypes.TryGetValue(fileExtension, out result))
{
return result;
}
return FileOpenerType.Download; return FileOpenerType.Download;
} }
} }

View file

@ -2,6 +2,6 @@
{ {
public enum FileOpenerType public enum FileOpenerType
{ {
Download, OfficeOnline Download, OfficeOnline, Open
} }
} }

View file

@ -43,8 +43,7 @@ namespace WebsitePanel.WebDavPortal.Mapping.Profiles.Webdav
.ForMember(ti => ti.IconHref, x => x.MapFrom(hi => hi.ItemType == ItemType.Folder ? WebDavAppConfigManager.Instance.FileIcons.FolderPath.Trim('~') : WebDavAppConfigManager.Instance.FileIcons[Path.GetExtension(hi.DisplayName.Trim('/'))].Trim('~'))) .ForMember(ti => ti.IconHref, x => x.MapFrom(hi => hi.ItemType == ItemType.Folder ? WebDavAppConfigManager.Instance.FileIcons.FolderPath.Trim('~') : WebDavAppConfigManager.Instance.FileIcons[Path.GetExtension(hi.DisplayName.Trim('/'))].Trim('~')))
.ForMember(ti => ti.IsTargetBlank, x => x.MapFrom(hi => openerManager.GetIsTargetBlank(hi))) .ForMember(ti => ti.IsTargetBlank, x => x.MapFrom(hi => openerManager.GetIsTargetBlank(hi)))
.ForMember(ti => ti.LastModified, x => x.MapFrom(hi => hi.LastModified)) .ForMember(ti => ti.LastModified, x => x.MapFrom(hi => hi.LastModified))
.ForMember(ti => ti.LastModifiedFormated, .ForMember(ti => ti.LastModifiedFormated, x => x.MapFrom(hi => hi.LastModified == DateTime.MinValue ? "--" : (new WebDavResource(null, hi)).LastModified.ToString("dd/MM/yyyy hh:mm tt")))
x => x.MapFrom(hi => hi.LastModified == DateTime.MinValue ? "--" : (new WebDavResource(null, hi)).LastModified.ToString("dd/MM/yyyy hh:mm tt")))
.ForMember(ti => ti.Size, x => x.MapFrom(hi => hi.ContentLength)) .ForMember(ti => ti.Size, x => x.MapFrom(hi => hi.ContentLength))
.ForMember(ti => ti.IsFolder, x => x.MapFrom(hi => hi.ItemType == ItemType.Folder)); .ForMember(ti => ti.IsFolder, x => x.MapFrom(hi => hi.ItemType == ItemType.Folder));

View file

@ -1,4 +1,5 @@
@using WebsitePanel.WebDav.Core @using System.Net.Mime
@using WebsitePanel.WebDav.Core
@using WebsitePanel.WebDav.Core.Client @using WebsitePanel.WebDav.Core.Client
@using WebsitePanel.WebDav.Core.Config @using WebsitePanel.WebDav.Core.Config
@using WebsitePanel.WebDavPortal.FileOperations @using WebsitePanel.WebDavPortal.FileOperations
@ -11,7 +12,8 @@
@{ @{
string actualPath = Model.ItemType == ItemType.Folder ? "~/Content/Images/folder_100x100.png" : WebDavAppConfigManager.Instance.FileIcons[Path.GetExtension(Model.DisplayName.Trim('/'))]; string actualPath = Model.ItemType == ItemType.Folder ? "~/Content/Images/folder_100x100.png" : WebDavAppConfigManager.Instance.FileIcons[Path.GetExtension(Model.DisplayName.Trim('/'))];
string name = Model.DisplayName.Trim('/'); string name = Model.DisplayName.Trim('/');
var opener = new FileOpenerManager()[Path.GetExtension(Model.DisplayName)]; var _opener = new FileOpenerManager();
var opener = _opener[Path.GetExtension(Model.DisplayName)];
bool isTargetBlank; bool isTargetBlank;
string href = "/"; string href = "/";
switch (opener) switch (opener)
@ -31,6 +33,13 @@
bool showStatistic = Model.ItemType == ItemType.Folder && Model.IsRootItem && resource != null; bool showStatistic = Model.ItemType == ItemType.Folder && Model.IsRootItem && resource != null;
var contentTypeProperty = Model.Properties.FirstOrDefault(x => x.Name.Name == "getcontenttype");
if (isTargetBlank == false && Model.ItemType != ItemType.Folder)
{
isTargetBlank = _opener.GetIsTargetBlank(Model) && !Request.Browser.IsMobileDevice;
}
int percent = 0; int percent = 0;
if (showStatistic) if (showStatistic)

View file

@ -92,6 +92,13 @@
<add extension=".ppt" OwaView="p/PowerPointFrame.aspx?" OwaEditor="p/PowerPointFrame.aspx?" OwaMobileView="p/mPPT.aspx?wdMobileHost=3&amp;"/> <add extension=".ppt" OwaView="p/PowerPointFrame.aspx?" OwaEditor="p/PowerPointFrame.aspx?" OwaMobileView="p/mPPT.aspx?wdMobileHost=3&amp;"/>
<add extension=".pptx" OwaView="p/PowerPointFrame.aspx?" OwaEditor="p/PowerPointFrame.aspx?PowerPointView=EditView&amp;" OwaMobileView="p/mPPT.aspx?wdMobileHost=3&amp;"/> <add extension=".pptx" OwaView="p/PowerPointFrame.aspx?" OwaEditor="p/PowerPointFrame.aspx?PowerPointView=EditView&amp;" OwaMobileView="p/mPPT.aspx?wdMobileHost=3&amp;"/>
</officeOnline> </officeOnline>
<typeOpener>
<add extension=".jpg" mimeType="image/jpeg" isTargetBlank="true" />
<add extension=".jpeg" mimeType="image/jpeg" isTargetBlank="true" />
<add extension=".gif" mimeType="image/gif" isTargetBlank="true" />
<add extension=".txt" mimeType="text/plain" isTargetBlank="true" />
<add extension=".pdf" mimeType="application/pdf" isTargetBlank="true" />
</typeOpener>
</webDavExplorerConfigurationSettings> </webDavExplorerConfigurationSettings>
<!-- <!--
For a description of web.config changes see http://go.microsoft.com/fwlink/?LinkId=235367. For a description of web.config changes see http://go.microsoft.com/fwlink/?LinkId=235367.