Merge remote-tracking branch 'origin/1.10.x' into dev

# Conflicts:
#	Orchard.proj
This commit is contained in:
Daniel Stolt 2016-04-14 19:06:06 +02:00
commit ef6c7b4d3f
38 changed files with 209 additions and 232 deletions

View File

@ -282,7 +282,6 @@
<!-- Packaging (MsDeploy) --> <!-- Packaging (MsDeploy) -->
<Target Name="Package-MsDeploy"> <Target Name="Package-MsDeploy">
<ItemGroup> <ItemGroup>
<!--<MsDeploy-Folder-Input Include="$(StageFolder)\**\*" Exclude="$(StageFolder)\**\bin\**\*.pdb;$(StageFolder)\**\bin\**\*.xml" />-->
<MsDeploy-Exclude-Modules Include=" <MsDeploy-Exclude-Modules Include="
$(StageFolder)\**\Modules\Orchard.CustomForms\**; $(StageFolder)\**\Modules\Orchard.CustomForms\**;
@ -293,7 +292,7 @@
$(StageFolder)\**\Modules\Orchard.TaskLease\**; $(StageFolder)\**\Modules\Orchard.TaskLease\**;
" /> " />
<MsDeploy-Folder-Input Include="$(StageFolder)\**\*" Exclude="$(StageFolder)\**\bin\**\*.xml;$(StageFolder)\**\obj\**\*;@(MsDeploy-Exclude-Modules)" /> <MsDeploy-Folder-Input Include="$(StageFolder)\**\*" Exclude="$(StageFolder)\**\bin\**\*.xml;$(StageFolder)\**\obj\**\*;$(StageFolder)\**\bin\**\*.pdb;$(StageFolder)\**\bin\**\*.dll.config;@(MsDeploy-Exclude-Modules)" />
<MsDeploy-Parameters Include="$(LibFolder)\msdeploy\*.xml;$(LibFolder)\msdeploy\*.sql"/> <MsDeploy-Parameters Include="$(LibFolder)\msdeploy\*.xml;$(LibFolder)\msdeploy\*.sql"/>
</ItemGroup> </ItemGroup>
@ -337,7 +336,7 @@
<Zip-Stage Include="$(StageFolder)\**\*" /> <Zip-Stage Include="$(StageFolder)\**\*" />
<Zip-MsDeploy Include="$(MsDeployFolder)\**\*" Exclude="$(MSBuildProjectDirectory)\**\bin\**\*.pdb;" /> <Zip-MsDeploy Include="$(MsDeployFolder)\**\*" Exclude=""/>
<Zip-Source Include=" <Zip-Source Include="
$(MSBuildProjectDirectory)\lib\**\*; $(MSBuildProjectDirectory)\lib\**\*;

View File

@ -320,7 +320,6 @@
<Compile Include="Localization\DateTimePartsTests.cs" /> <Compile Include="Localization\DateTimePartsTests.cs" />
<Compile Include="Localization\DefaultDateLocalizationServicesTests.cs" /> <Compile Include="Localization\DefaultDateLocalizationServicesTests.cs" />
<Compile Include="Localization\DefaultDateFormatterTests.cs" /> <Compile Include="Localization\DefaultDateFormatterTests.cs" />
<Compile Include="Services\YamlParserTests.cs" />
<Compile Include="Stubs\StubApplicationEnvironment.cs" /> <Compile Include="Stubs\StubApplicationEnvironment.cs" />
<Compile Include="Stubs\StubCultureSelector.cs" /> <Compile Include="Stubs\StubCultureSelector.cs" />
<Compile Include="Localization\TestHelpers.cs" /> <Compile Include="Localization\TestHelpers.cs" />

View File

@ -1,70 +0,0 @@
using System;
using System.Collections;
using System.Collections.Generic;
using NUnit.Framework;
using Newtonsoft.Json.Linq;
using Orchard.Services;
namespace Orchard.Tests.Services {
[TestFixture]
public class YamlParserTests {
[Test]
public void ShouldConvertYamlToWellknowType() {
var parser = new YamlParser();
var yaml = SampleYamlDocument;
var order = parser.Deserialize<Order>(yaml);
Assert.AreEqual("Nikola", order.Customer.FirstName);
Assert.AreEqual(2, order.Items.Count);
}
[Test]
public void ShouldConvertYamlToDynamic()
{
var parser = new YamlParser();
var yaml = SampleYamlDocument;
var order = parser.Deserialize(yaml);
Assert.AreEqual("Nikola", (string)order.Customer.FirstName);
Assert.AreEqual(2, (int)order.Items.Count);
}
public class Order {
public DateTime Date { get; set; }
public Customer Customer { get; set; }
public IList<OrderItem> Items { get; set; }
}
public class OrderItem {
public string Product { get; set; }
public int Quantity { get; set; }
public decimal Price { get; set; }
}
public class Customer {
public string FirstName { get; set; }
public string LastName { get; set; }
}
private const string SampleYamlDocument =
@"
Date: 1916-04-01
Customer:
FirstName: Nikola
LastName: Tesla
Items:
- Product: Bulb
Quantity: 1
Price: 1.46
- Product: Wire
Quantity: 1
Price: 0.32
";
}
}

View File

@ -213,10 +213,6 @@
<Project>{d10ad48f-407d-4db5-a328-173ec7cb010f}</Project> <Project>{d10ad48f-407d-4db5-a328-173ec7cb010f}</Project>
<Name>Orchard.Roles</Name> <Name>Orchard.Roles</Name>
</ProjectReference> </ProjectReference>
<ProjectReference Include="..\Orchard.TaskLease\Orchard.TaskLease.csproj">
<Project>{3f72a4e9-7b72-4260-b010-c16ec54f9baf}</Project>
<Name>Orchard.TaskLease</Name>
</ProjectReference>
<ProjectReference Include="..\Orchard.Users\Orchard.Users.csproj"> <ProjectReference Include="..\Orchard.Users\Orchard.Users.csproj">
<Project>{79aed36e-abd0-4747-93d3-8722b042454b}</Project> <Project>{79aed36e-abd0-4747-93d3-8722b042454b}</Project>
<Name>Orchard.Users</Name> <Name>Orchard.Users</Name>

View File

@ -32,6 +32,6 @@ using System.Security;
// You can specify all the values or you can default the Revision and Build Numbers // You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
[assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyVersion("1.10")]
[assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.10")]

View File

@ -28,7 +28,7 @@ namespace Orchard.AuditTrail.Services {
var totalCount = query.List().Count; var totalCount = query.List().Count;
query.SetFirstResult((page - 1) * pageSize); query.SetFirstResult((page - 1) * pageSize);
query.SetFetchSize(pageSize); query.SetMaxResults(pageSize);
var contentItems = LoadContentItems<T>(query); var contentItems = LoadContentItems<T>(query);

View File

@ -307,10 +307,6 @@
<Project>{c889167c-e52c-4a65-a419-224b3d1b957d}</Project> <Project>{c889167c-e52c-4a65-a419-224b3d1b957d}</Project>
<Name>Orchard.PublishLater</Name> <Name>Orchard.PublishLater</Name>
</ProjectReference> </ProjectReference>
<ProjectReference Include="..\Orchard.TaskLease\Orchard.TaskLease.csproj">
<Project>{3f72a4e9-7b72-4260-b010-c16ec54f9baf}</Project>
<Name>Orchard.TaskLease</Name>
</ProjectReference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Controllers\AssetController.cs" /> <Compile Include="Controllers\AssetController.cs" />

View File

@ -32,6 +32,6 @@ using System.Security;
// You can specify all the values or you can default the Revision and Build Numbers // You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
[assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyVersion("1.10")]
[assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.10")]

View File

@ -32,6 +32,6 @@ using System.Security;
// You can specify all the values or you can default the Revision and Build Numbers // You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
[assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyVersion("1.10")]
[assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.10")]

View File

@ -1,6 +1,6 @@
.orchard-contenttypes #main h2 { .orchard-contenttypes #main h2 {
margin:42px 0 0; margin: 42px 0 0;
border-bottom:1px solid #ccc; border-bottom: 1px solid #ccc;
} }
.orchard-contenttypes .summary .properties h3 { .orchard-contenttypes .summary .properties h3 {
@ -12,67 +12,100 @@
} }
#main .properties p { #main .properties p {
margin:0; margin: 0;
} }
.manage.add-to-type { .manage.add-to-type {
margin-top:-32px; margin-top: -32px;
} }
.manage-part {
margin-bottom:1em; .manage-part, .manage-field {
margin-bottom: 0;
padding:0;
border-bottom: 1px solid #EAEAEA;
} }
.manage-part h3, .manage-part h3,
.manage-field h3 { .manage-field h3 {
border-bottom:1px solid #EAEAEA; display: relative;
display:relative; line-height: 1.4em;
line-height:1.4em; padding-bottom: 0;
padding-bottom:0; padding-top: 0;
padding-top:0;
} }
.manage-part h3, .manage-part h3,
.manage-field h3, .manage-field h3,
.manage-part h4, .manage-part h4,
.manage-type .manage-field .details, .manage-type .manage-field .details,
.manage-type .manage-part .manage-field, .manage-type .manage-part .manage-field,
.manage-type .manage-part .settings { .manage-type .manage-part .settings {
padding-left:20px; padding-left: 30px;
padding-right: 30px;
} }
.manage-part h3, .manage-field h3 {
margin: 1em 0 !important;
padding-left: 30px;
width: 90%;
}
.manage-part .expando-glyph, .manage-field .expando-glyph {
width:16px;
height:16px;
}
.manage-type .manage-field .settings { .manage-type .manage-field .settings {
padding-bottom:10px; padding-bottom: 10px;
padding-left:0; padding-left: 0;
} }
.manage-part h4 { .manage-part h4 {
padding-left:0; padding-left: 0;
} }
.manage-part .manage-field h4 { .manage-part .manage-field h4 {
line-height:1.8em; line-height: 1.8em;
padding-bottom:0; padding-bottom: 0;
padding-left:15px; padding-left: 15px;
} }
.manage-part .settings #content {
margin-bottom: 15px;
}
.manage-type .manage-part .manage, .manage-type .manage-part .manage,
.manage-type .manage-field .manage, .manage-type .manage-field .manage,
.manage-part .manage-field .manage { .manage-part .manage-field .manage {
margin-top:-2.4em; margin-top: -2.9em;
padding-right: 20px;
position: relative;
z-index: 999;
} }
.manage-field .details, .manage-field .details,
.manage-part .details { .manage-part .details {
overflow:auto; overflow: auto;
margin-top: 20px;
} }
.manage-part .manage.minor { .manage-part .manage.minor {
margin:0 0 -1.2em; margin: 0 0 -1.2em;
} }
.manage-part label, .manage-part label,
.manage-field label { .manage-field label {
font-weight:normal; font-weight: normal;
} }
.manage-field fieldset, .manage-field fieldset,
.manage-part fieldset { .manage-part fieldset {
margin:.5em 0 1em; margin: .5em 0 1em;
padding:0; padding: 0;
} }
.manage-field .settings { .manage-field .settings {
margin:0 0 0 15px; margin: 0 0 0 15px;
padding-left:0; padding-left: 0;
} }
.manage-part .description { .manage-part .description {
@ -82,48 +115,56 @@
} }
.manage-part .settings { .manage-part .settings {
overflow:auto; overflow: auto;
}
.manage-part .settings fieldset {
padding-left:0;
} }
.manage-part .settings fieldset {
padding-left: 0;
}
fieldset.action { fieldset.action {
margin-top:2em; margin-top: 2em;
} }
/* should pull this back into the base admin theme css, w/out the .manage-part of course */ /* should pull this back into the base admin theme css, w/out the .manage-part of course */
.manage-part dl { .manage-part dl {
margin:0 0 1em; margin: 0 0 1em;
overflow:auto; overflow: auto;
padding:6px 0 0; padding: 6px 0 0;
} }
.manage-part dt, .manage-part dt,
.manage-part dd { .manage-part dd {
float:left; float: left;
} }
.manage-part dt { .manage-part dt {
clear:left; clear: left;
}
.manage-part dt::after {
content:":";
} }
.manage-part dt::after {
content: ":";
}
.manage-part dd { .manage-part dd {
font-style:italic; font-style: italic;
padding-left:.5em; padding-left: .5em;
} }
.manage-part dl dl { .manage-part dl dl {
font-size:1em; font-size: 1em;
margin:0; margin: 0;
padding:0; padding: 0;
} }
.manage-part dd dt { .manage-part dd dt {
clear:left; clear: left;
float:left; float: left;
} }
.manage-part dd dd { .manage-part dd dd {
float:left; float: left;
padding-left:.5em; padding-left: .5em;
} }
.available-parts .part.hint { .available-parts .part.hint {
@ -147,7 +188,7 @@ fieldset.action {
background-color: #eee; background-color: #eee;
background: #EEE url(images/move.gif) no-repeat 10px 15px; background: #EEE url(images/move.gif) no-repeat 10px 15px;
height: 30px; height: 30px;
padding: 10px 0px 0px 30px; padding: 10px 0px 0px 30px;
} }
#placement li .shape-editor { #placement li .shape-editor {
@ -160,9 +201,8 @@ fieldset.action {
margin-bottom: 10px; margin-bottom: 10px;
} }
#placement fieldset #placement fieldset {
{ float: inherit; /* prevent bad layout if float is defined to left in specific parts, e.g. datetimepicker */
float: inherit; /* prevent bad layout if float is defined to left in specific parts, e.g. datetimepicker */
height: auto; height: auto;
} }
@ -170,4 +210,4 @@ fieldset.action {
background: #FDF5BC; background: #FDF5BC;
border: 1px solid #FDF5BC; border: 1px solid #FDF5BC;
height: 100px; height: 100px;
} }

View File

@ -32,6 +32,6 @@ using System.Security;
// You can specify all the values or you can default the Revision and Build Numbers // You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
[assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyVersion("1.10")]
[assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.10")]

View File

@ -34,8 +34,14 @@ namespace Orchard.DynamicForms.Drivers {
Name: "Value", Name: "Value",
Title: "Value", Title: "Value",
Classes: new[] { "text", "medium", "tokenized" }, Classes: new[] { "text", "medium", "tokenized" },
Description: T("The value of this radio button."))); Description: T("The value of this radio button.")),
_DefaultValue:
shape.Checkbox(
Id: "DefaultValue",
Name: "DefaultValue",
Title: "Default Value",
Value: "true",
Description: T("Sets default value to unchecked or checked.")));
return form; return form;
}); });
} }

View File

@ -1,7 +1,14 @@
namespace Orchard.DynamicForms.Elements { using Orchard.Layouts.Elements;
using Orchard.Layouts.Helpers;
namespace Orchard.DynamicForms.Elements {
public class RadioButton : LabeledFormElement { public class RadioButton : LabeledFormElement {
public override string ToolboxIcon { public override string ToolboxIcon {
get { return "\uf192"; } get { return "\uf192"; }
} }
public bool DefaultValue {
get { return this.Retrieve(x => x.DefaultValue); }
set { this.Store(x => x.DefaultValue, value); }
}
} }
} }

View File

@ -32,6 +32,6 @@ using System.Security;
// You can specify all the values or you can default the Revision and Build Numbers // You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
[assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyVersion("1.10")]
[assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.10")]

View File

@ -7,6 +7,9 @@
tagBuilder.Attributes["type"] = "radio"; tagBuilder.Attributes["type"] = "radio";
tagBuilder.Attributes["name"] = element.Name; tagBuilder.Attributes["name"] = element.Name;
tagBuilder.Attributes["value"] = element.Value; tagBuilder.Attributes["value"] = element.Value;
if (element.DefaultValue) {
tagBuilder.Attributes["checked"] = "checked";
}
} }
@if (element.ShowLabel) { @if (element.ShowLabel) {
<label> <label>

View File

@ -7,6 +7,9 @@
tagBuilder.Attributes["type"] = "radio"; tagBuilder.Attributes["type"] = "radio";
tagBuilder.Attributes["name"] = Model.ProcessedName; tagBuilder.Attributes["name"] = Model.ProcessedName;
tagBuilder.Attributes["value"] = Model.ProcessedValue; tagBuilder.Attributes["value"] = Model.ProcessedValue;
if ((String.IsNullOrWhiteSpace(element.PostedValue) && element.DefaultValue) || Model.ProcessedValue == element.PostedValue) {
tagBuilder.Attributes["checked"] = "checked";
}
} }
@if (element.ShowLabel) { @if (element.ShowLabel) {
<label> <label>

View File

@ -102,6 +102,14 @@
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
<Reference Include="System.Configuration" /> <Reference Include="System.Configuration" />
<Reference Include="System.Xml.Linq" /> <Reference Include="System.Xml.Linq" />
<Reference Include="YamlDotNet, Version=3.8.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\YamlDotNet.3.8.0\lib\net35\YamlDotNet.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="YamlDotNet.Dynamic, Version=3.2.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\YamlDotNet.Dynamic.3.2.3\lib\net40\YamlDotNet.Dynamic.dll</HintPath>
<Private>True</Private>
</Reference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Content Include="Assets\JavaScript\Models\RecycleBin.js" /> <Content Include="Assets\JavaScript\Models\RecycleBin.js" />

View File

@ -32,6 +32,6 @@ using System.Security;
// You can specify all the values or you can default the Revision and Build Numbers // You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
[assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyVersion("1.10")]
[assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.10")]

View File

@ -17,10 +17,10 @@ using Orchard.Layouts.Services;
using Orchard.Layouts.Shapes; using Orchard.Layouts.Shapes;
using Orchard.Layouts.ViewModels; using Orchard.Layouts.ViewModels;
using Orchard.Localization; using Orchard.Localization;
using Orchard.Services;
using Orchard.Themes.Services; using Orchard.Themes.Services;
using Orchard.Tokens; using Orchard.Tokens;
using Orchard.Utility.Extensions; using Orchard.Utility.Extensions;
using YamlDotNet.Dynamic;
namespace Orchard.Layouts.Providers { namespace Orchard.Layouts.Providers {
[OrchardFeature("Orchard.Layouts.Snippets")] [OrchardFeature("Orchard.Layouts.Snippets")]
@ -34,7 +34,6 @@ namespace Orchard.Layouts.Providers {
private readonly Work<ICurrentThemeShapeBindingResolver> _currentThemeShapeBindingResolver; private readonly Work<ICurrentThemeShapeBindingResolver> _currentThemeShapeBindingResolver;
private readonly Work<ITokenizer> _tokenizer; private readonly Work<ITokenizer> _tokenizer;
private readonly IWorkContextAccessor _wca; private readonly IWorkContextAccessor _wca;
private readonly Work<IYamlParser> _yamlParser;
public SnippetElementHarvester( public SnippetElementHarvester(
IWorkContextAccessor workContextAccessor, IWorkContextAccessor workContextAccessor,
@ -44,8 +43,7 @@ namespace Orchard.Layouts.Providers {
Work<IElementFactory> elementFactory, Work<IElementFactory> elementFactory,
Work<IShapeDisplay> shapeDisplay, Work<IShapeDisplay> shapeDisplay,
Work<ITokenizer> tokenizer, Work<ITokenizer> tokenizer,
Work<ICurrentThemeShapeBindingResolver> currentThemeShapeBindingResolver, Work<ICurrentThemeShapeBindingResolver> currentThemeShapeBindingResolver) {
Work<IYamlParser> yamlParser) {
_shapeFactory = shapeFactory; _shapeFactory = shapeFactory;
_siteThemeService = siteThemeService; _siteThemeService = siteThemeService;
@ -54,7 +52,6 @@ namespace Orchard.Layouts.Providers {
_shapeDisplay = shapeDisplay; _shapeDisplay = shapeDisplay;
_tokenizer = tokenizer; _tokenizer = tokenizer;
_currentThemeShapeBindingResolver = currentThemeShapeBindingResolver; _currentThemeShapeBindingResolver = currentThemeShapeBindingResolver;
_yamlParser = yamlParser;
_wca = workContextAccessor; _wca = workContextAccessor;
} }
@ -149,7 +146,7 @@ namespace Orchard.Layouts.Providers {
return null; return null;
var yaml = File.ReadAllText(paramsFileName); var yaml = File.ReadAllText(paramsFileName);
var snippetConfig = _yamlParser.Value.Deserialize(yaml); var snippetConfig = Deserialize(yaml);
var fieldsConfig = snippetConfig.Fields != null ? snippetConfig.Fields.Children : new dynamic[0]; var fieldsConfig = snippetConfig.Fields != null ? snippetConfig.Fields.Children : new dynamic[0];
var descriptor = new SnippetDescriptor(); var descriptor = new SnippetDescriptor();
@ -202,5 +199,9 @@ namespace Orchard.Layouts.Providers {
var markup = File.ReadAllText(localFileName); var markup = File.ReadAllText(localFileName);
return markup.Contains("@Html.SnippetField"); return markup.Contains("@Html.SnippetField");
} }
private dynamic Deserialize(string yaml) {
return new DynamicYaml(yaml);
}
} }
} }

View File

@ -7,4 +7,6 @@
<package id="Microsoft.AspNet.WebPages" version="3.2.3" targetFramework="net452" /> <package id="Microsoft.AspNet.WebPages" version="3.2.3" targetFramework="net452" />
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net452" /> <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net452" />
<package id="Newtonsoft.Json" version="7.0.1" targetFramework="net452" /> <package id="Newtonsoft.Json" version="7.0.1" targetFramework="net452" />
<package id="YamlDotNet" version="3.8.0" targetFramework="net452" />
<package id="YamlDotNet.Dynamic" version="3.2.3" targetFramework="net452" />
</packages> </packages>

View File

@ -379,12 +379,17 @@ $(function () {
var nextFetch = self.folderPath(); var nextFetch = self.folderPath();
if (deepestChildPath !== undefined && deepestChildPath !== null && (deepestChildPath.indexOf(self.folderPath()) === 0)) { if (deepestChildPath !== undefined && deepestChildPath !== null && (deepestChildPath.indexOf(self.folderPath()) === 0)) {
var deepestChildPathBreadCrumbs = deepestChildPath.split('\\'); /* NTFS uses "\" as the directory separator, but AFS uses "/".
var currentBreadCrumbs = self.folderPath().split('\\'); Since both of them are illegal characters for file and folder names, it's safe to determine the type of file storage
currently in use based on the directory separator character. */
var separator = deepestChildPath.contains('/') ? '/' : '\\';
var deepestChildPathBreadCrumbs = deepestChildPath.split(separator);
var currentBreadCrumbs = self.folderPath().split(separator);
var diff = deepestChildPathBreadCrumbs.length - currentBreadCrumbs.length; var diff = deepestChildPathBreadCrumbs.length - currentBreadCrumbs.length;
if (diff > 0) { if (diff > 0) {
nextFetch = self.folderPath() + '\\' + deepestChildPathBreadCrumbs[deepestChildPathBreadCrumbs.length - diff]; nextFetch = self.folderPath() + separator + deepestChildPathBreadCrumbs[deepestChildPathBreadCrumbs.length - diff];
} }
} }

View File

@ -133,6 +133,14 @@ namespace Orchard.MediaLibrary.Services {
/// <param name="inputStream">The stream with the file's contents.</param> /// <param name="inputStream">The stream with the file's contents.</param>
/// <returns>The path to the uploaded file.</returns> /// <returns>The path to the uploaded file.</returns>
string UploadMediaFile(string folderPath, string fileName, Stream inputStream); string UploadMediaFile(string folderPath, string fileName, Stream inputStream);
/// <summary>
/// Combines two paths.
/// </summary>
/// <param name="path1">The parent path.</param>
/// <param name="path2">The child path.</param>
/// <returns>The combined path.</returns>
string Combine(string path1, string path2);
} }
public static class MediaLibrayServiceExtensions { public static class MediaLibrayServiceExtensions {
@ -145,8 +153,8 @@ namespace Orchard.MediaLibrary.Services {
return true; return true;
} }
var mediaPath = folderPath + "\\"; var mediaPath = service.Combine(folderPath, " ").Trim();
var rootPath = rootMediaFolder.MediaPath + "\\"; var rootPath = service.Combine(rootMediaFolder.MediaPath, " ").Trim();
return mediaPath.StartsWith(rootPath, StringComparison.OrdinalIgnoreCase); return mediaPath.StartsWith(rootPath, StringComparison.OrdinalIgnoreCase);
} }
@ -154,7 +162,7 @@ namespace Orchard.MediaLibrary.Services {
public static string GetRootedFolderPath(this IMediaLibraryService service, string folderPath) { public static string GetRootedFolderPath(this IMediaLibraryService service, string folderPath) {
var rootMediaFolder = service.GetRootMediaFolder(); var rootMediaFolder = service.GetRootMediaFolder();
if (rootMediaFolder != null) { if (rootMediaFolder != null) {
return Path.Combine(rootMediaFolder.MediaPath, folderPath ?? ""); return service.Combine(rootMediaFolder.MediaPath, folderPath ?? "");
} }
return folderPath; return folderPath;

View File

@ -441,5 +441,15 @@ namespace Orchard.MediaLibrary.Services {
return _storageProvider.GetPublicUrl(filePath); return _storageProvider.GetPublicUrl(filePath);
} }
/// <summary>
/// Combines two paths.
/// </summary>
/// <param name="path1">The parent path.</param>
/// <param name="path2">The child path.</param>
/// <returns>The combined path.</returns>
public string Combine(string path1, string path2) {
return _storageProvider.Combine(path1, path2);
}
} }
} }

View File

@ -32,6 +32,6 @@ using System.Security;
// You can specify all the values or you can default the Revision and Build Numbers // You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
[assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyVersion("1.10")]
[assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.10")]

View File

@ -32,6 +32,6 @@ using System.Security;
// You can specify all the values or you can default the Revision and Build Numbers // You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
[assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyVersion("1.10")]
[assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.10")]

View File

@ -32,6 +32,6 @@ using System.Security;
// You can specify all the values or you can default the Revision and Build Numbers // You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
[assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyVersion("1.10")]
[assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.10")]

View File

@ -5,6 +5,7 @@ using Orchard.ContentManagement;
using Orchard.Environment.Extensions; using Orchard.Environment.Extensions;
using Orchard.Localization; using Orchard.Localization;
using Orchard.Security; using Orchard.Security;
using Orchard.Users.Events;
using Orchard.Users.Models; using Orchard.Users.Models;
using Orchard.Workflows.Models; using Orchard.Workflows.Models;
using Orchard.Workflows.Services; using Orchard.Workflows.Services;
@ -14,10 +15,12 @@ namespace Orchard.Users.Activities {
public class SignInUserActivity : Task { public class SignInUserActivity : Task {
private readonly IMembershipService _membershipService; private readonly IMembershipService _membershipService;
private readonly IAuthenticationService _authenticationService; private readonly IAuthenticationService _authenticationService;
private readonly IUserEventHandler _userEventHandler;
public SignInUserActivity(IMembershipService membershipService, IAuthenticationService authenticationService) { public SignInUserActivity(IMembershipService membershipService, IAuthenticationService authenticationService, IUserEventHandler userEventHandler) {
_membershipService = membershipService; _membershipService = membershipService;
_authenticationService = authenticationService; _authenticationService = authenticationService;
_userEventHandler = userEventHandler;
T = NullLocalizer.Instance; T = NullLocalizer.Instance;
} }
@ -66,7 +69,9 @@ namespace Orchard.Users.Activities {
yield break; yield break;
} }
_userEventHandler.LoggingIn(userNameOrEmail, password);
_authenticationService.SignIn(user, createPersistentCookie); _authenticationService.SignIn(user, createPersistentCookie);
_userEventHandler.LoggedIn(user);
yield return T("Done"); yield return T("Done");
} }

View File

@ -267,7 +267,7 @@
</RootBinFiles> </RootBinFiles>
</ItemGroup> </ItemGroup>
<PropertyGroup> <PropertyGroup>
<ExcludeFilesFromDeployment>@(RootBinFiles->'Modules\**\bin\%(Filename)%(Extension)');@(RootBinFiles->'Themes\**\%(Filename)%(Extension)');@(RootBinFiles->'Core\**\bin\%(Filename)%(Extension)');**\*.Debug.config;**\*.Release.config;**\obj\**;**\bin\*.xml;**\*.cs;**\*.csproj;Modules\**\Tests\**;Modules\**\Specs\**;Themes\bin\**;**\.hgignore;**\.hgtags;**\.hg\**;**\.gitignore;**\.git\**;**\*.csproj.user;Properties\**\*;App_Data\Dependencies\*;App_Data\RecipeQueue\*;App_Data\Logs\*;App_Data\**\mappings.bin;App_Data\**\cache.dat;App_Data\**\hrestart.txt</ExcludeFilesFromDeployment> <ExcludeFilesFromDeployment>@(RootBinFiles->'Modules\**\bin\%(Filename)%(Extension)');@(RootBinFiles->'Themes\**\%(Filename)%(Extension)');@(RootBinFiles->'Core\**\bin\%(Filename)%(Extension)');**\*.Debug.config;**\*.Release.config;**\obj\**;**\bin\*.xml;**\bin\*.pdb;**\bin\*.dll.config;**\*.cs;**\*.csproj;Modules\**\Tests\**;Modules\**\Specs\**;Themes\bin\**;**\.hgignore;**\.hgtags;**\.hg\**;**\.gitignore;**\.git\**;**\*.csproj.user;Properties\**\*;App_Data\Dependencies\*;App_Data\RecipeQueue\*;App_Data\Logs\*;App_Data\**\mappings.bin;App_Data\**\cache.dat;App_Data\**\hrestart.txt</ExcludeFilesFromDeployment>
</PropertyGroup> </PropertyGroup>
</Target> </Target>
<Target Name="ExcludeRootBinariesPackage" DependsOnTargets="ExcludeRootBinariesDeployment" BeforeTargets="ExcludeFilesFromPackage"> <Target Name="ExcludeRootBinariesPackage" DependsOnTargets="ExcludeRootBinariesDeployment" BeforeTargets="ExcludeFilesFromPackage">

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 B

View File

@ -456,8 +456,7 @@ ul.menuItems {margin:6px 0 0 0;}
position:relative; position:relative;
} }
.expando-glyph { .expando-glyph {
background:#fcfcfc no-repeat center center; background-image: url("images/menu-open.png");
background-image:url(data:image/gif;base64,R0lGODlhCwALAKIFAPDz2/b70mhpREJEPjI0Lf///wAAAAAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJDNDlGNjgyMjg5NERGMTE4RUZGQkY0Q0JCRDA3OTc2IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkQzQjUyNTNFOTQyODExREY5MDkxQ0U0MzJGRTdGNEExIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkQzQjUyNTNEOTQyODExREY5MDkxQ0U0MzJGRTdGNEExIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzUgV2luZG93cyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjJENDlGNjgyMjg5NERGMTE4RUZGQkY0Q0JCRDA3OTc2IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjJDNDlGNjgyMjg5NERGMTE4RUZGQkY0Q0JCRDA3OTc2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAIfkEAQAABQAsAAAAAAsACwAAAx1YutxeIbYIghBgWVwA4daQKZ4QjkspPsD6dG8sJwA7);
/*url("images/menuOpen.gif")*/ /*url("images/menuOpen.gif")*/
bottom:0; bottom:0;
cursor:pointer; cursor:pointer;
@ -469,18 +468,12 @@ ul.menuItems {margin:6px 0 0 0;}
width:17px; width:17px;
-webkit-transform:rotate(0deg); -webkit-transform:rotate(0deg);
} }
.expando-glyph:hover {
background-image:url(data:image/gif;base64,R0lGODlhCwALAJEDAB5dfcbVyMvbwf///yH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJDNDlGNjgyMjg5NERGMTE4RUZGQkY0Q0JCRDA3OTc2IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkUxMUUzODE2OTQyODExREZBN0ZBOURGNEI3NDVDRkMxIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkUxMUUzODE1OTQyODExREZBN0ZBOURGNEI3NDVDRkMxIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzUgV2luZG93cyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjJENDlGNjgyMjg5NERGMTE4RUZGQkY0Q0JCRDA3OTc2IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjJDNDlGNjgyMjg5NERGMTE4RUZGQkY0Q0JCRDA3OTc2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAIfkEAQAAAwAsAAAAAAsACwAAAhqcj6kjnR0EAOFIOsKstxoNdAmIKZq3oMvKFgA7);
/*url("images/menuOpenHover.gif");*/
}
.expando-glyph-container.closed .expando-glyph { .expando-glyph-container.closed .expando-glyph {
background-image:url(data:image/gif;base64,R0lGODlhCwALAKIFAPDz2/b70mhpREJEPjI0Lf///wAAAAAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJDNDlGNjgyMjg5NERGMTE4RUZGQkY0Q0JCRDA3OTc2IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkY2OEJCRkEyOTQyODExREY5ODMwQkQwQjI2MEMzREUwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkY2OEJCRkExOTQyODExREY5ODMwQkQwQjI2MEMzREUwIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzUgV2luZG93cyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjJENDlGNjgyMjg5NERGMTE4RUZGQkY0Q0JCRDA3OTc2IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjJDNDlGNjgyMjg5NERGMTE4RUZGQkY0Q0JCRDA3OTc2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAIfkEAQAABQAsAAAAAAsACwAAAx1YBaD+QbTn4pi0WEx3Vh4FCASnjGUWpar0acGXAAA7); background-image:url("images/menu-closed.png");
/*url("images/menuClosed.gif");*/ /*url("images/menuClosed.gif");*/
} }
.expando-glyph-container.closed .expando-glyph:hover {
background-image:url(data:image/gif;base64,R0lGODlhCwALAJEDAB5dfcbVyMvbwf///yH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJDNDlGNjgyMjg5NERGMTE4RUZGQkY0Q0JCRDA3OTc2IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjA1NTdBNkZFOTQyOTExREY4QjNERjI1RjMzMUYxRjk1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjA1NTdBNkZEOTQyOTExREY4QjNERjI1RjMzMUYxRjk1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzUgV2luZG93cyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjJENDlGNjgyMjg5NERGMTE4RUZGQkY0Q0JCRDA3OTc2IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjJDNDlGNjgyMjg5NERGMTE4RUZGQkY0Q0JCRDA3OTc2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAIfkEAQAAAwAsAAAAAAsACwAAAhrcEqYrkKuagxFMOuSjmga7Kd/FgFgTMgJWAAA7);
/*url("images/menuClosedHover.gif");*/
}
.expando-glyph-container.closing .expando-glyph { .expando-glyph-container.closing .expando-glyph {
-webkit-transition:all .2s ease-in-out; -webkit-transition:all .2s ease-in-out;
-moz-transition:all .2s ease-in-out; -moz-transition:all .2s ease-in-out;

View File

@ -102,8 +102,10 @@
<Content Include="TheAdmin\Styles\images\icon-gallery.png" /> <Content Include="TheAdmin\Styles\images\icon-gallery.png" />
<Content Include="TheAdmin\Styles\images\icon-settings.png" /> <Content Include="TheAdmin\Styles\images\icon-settings.png" />
<Content Include="TheAdmin\Styles\images\info.gif" /> <Content Include="TheAdmin\Styles\images\info.gif" />
<Content Include="TheAdmin\Styles\images\menu-closed.png" />
<Content Include="TheAdmin\Styles\images\menu-default.png" /> <Content Include="TheAdmin\Styles\images\menu-default.png" />
<Content Include="TheAdmin\Styles\images\menu-glyph.png" /> <Content Include="TheAdmin\Styles\images\menu-glyph.png" />
<Content Include="TheAdmin\Styles\images\menu-open.png" />
<Content Include="TheAdmin\Styles\images\menuClosed.gif" /> <Content Include="TheAdmin\Styles\images\menuClosed.gif" />
<Content Include="TheAdmin\Styles\images\menuClosedHover.gif" /> <Content Include="TheAdmin\Styles\images\menuClosedHover.gif" />
<Content Include="TheAdmin\Styles\images\menuOpen.gif" /> <Content Include="TheAdmin\Styles\images\menuOpen.gif" />

View File

@ -170,10 +170,6 @@
<HintPath>..\packages\YamlDotNet.3.8.0\lib\net35\YamlDotNet.dll</HintPath> <HintPath>..\packages\YamlDotNet.3.8.0\lib\net35\YamlDotNet.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="YamlDotNet.Dynamic, Version=3.2.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\YamlDotNet.Dynamic.3.2.3\lib\net40\YamlDotNet.Dynamic.dll</HintPath>
<Private>True</Private>
</Reference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="ContentManagement\Extensions\DriverResultExtensions.cs" /> <Compile Include="ContentManagement\Extensions\DriverResultExtensions.cs" />
@ -427,9 +423,7 @@
<Compile Include="Services\ClientHostAddressAccessor.cs" /> <Compile Include="Services\ClientHostAddressAccessor.cs" />
<Compile Include="Services\DefaultJsonConverter.cs" /> <Compile Include="Services\DefaultJsonConverter.cs" />
<Compile Include="Services\IClientHostAddressAccessor.cs" /> <Compile Include="Services\IClientHostAddressAccessor.cs" />
<Compile Include="Services\IYamlParser.cs" />
<Compile Include="Services\IJsonConverter.cs" /> <Compile Include="Services\IJsonConverter.cs" />
<Compile Include="Services\YamlParser.cs" />
<Compile Include="Settings\CurrentSiteWorkContext.cs" /> <Compile Include="Settings\CurrentSiteWorkContext.cs" />
<Compile Include="Settings\ResourceDebugMode.cs" /> <Compile Include="Settings\ResourceDebugMode.cs" />
<Compile Include="Tasks\Locking\Services\DistributedLockSchemaBuilder.cs" /> <Compile Include="Tasks\Locking\Services\DistributedLockSchemaBuilder.cs" />

View File

@ -93,6 +93,7 @@ namespace Orchard.Security.Providers {
httpContext.Response.Cookies.Add(cookie); httpContext.Response.Cookies.Add(cookie);
_isAuthenticated = true; _isAuthenticated = true;
_isNonOrchardUser = false;
_signedInUser = user; _signedInUser = user;
} }
@ -117,6 +118,7 @@ namespace Orchard.Security.Providers {
public void SetAuthenticatedUserForRequest(IUser user) { public void SetAuthenticatedUserForRequest(IUser user) {
_signedInUser = user; _signedInUser = user;
_isAuthenticated = true; _isAuthenticated = true;
_isNonOrchardUser = false;
} }
public IUser GetAuthenticatedUser() { public IUser GetAuthenticatedUser() {

View File

@ -1,21 +0,0 @@
namespace Orchard.Services {
/// <summary>
/// Provides methods to deserialize objects from YAML documents.
/// </summary>
public interface IYamlParser : IDependency {
/// <summary>
/// Deserializes a YAML document to a dynamic object.
/// </summary>
/// <param name="yaml">The YAML document to deserialize.</param>
/// <returns>The deserialized object.</returns>
dynamic Deserialize(string yaml);
/// <summary>
/// Deserializes a YAML document to a specific object.
/// </summary>
/// <typeparam name="T">The type of the object to deserialize.</typeparam>
/// <param name="yaml">The YAML document to deserialize.</param>
/// <returns>The deserialized object.</returns>
T Deserialize<T>(string yaml);
}
}

View File

@ -1,19 +0,0 @@
using System.IO;
using YamlDotNet.Dynamic;
using YamlDotNet.Serialization;
using YamlDotNet.Serialization.NamingConventions;
namespace Orchard.Services {
public class YamlParser : IYamlParser {
public dynamic Deserialize(string yaml) {
return new DynamicYaml(yaml);
}
public T Deserialize<T>(string yaml) {
var deserializer = new Deserializer(namingConvention: new PascalCaseNamingConvention(), ignoreUnmatched: true);
using (var reader = new StringReader(yaml)) {
return deserializer.Deserialize<T>(reader);
}
}
}
}

View File

@ -89,7 +89,7 @@ namespace Orchard.Tasks.Locking.Services {
DistributedLock dLock = null; DistributedLock dLock = null;
// If there's already a distributed lock object in our dictionary, that means // If there's already a distributed lock object in our dictionary, that means
// this acquisition is a reentrance. Use the existing lock object from the // this acquisition is a reentrance. Use the existing lock object from the
// dictionary but increment its count. // dictionary but increment its count.
if (_locks.TryGetValue(monitorObj, out dLock)) { if (_locks.TryGetValue(monitorObj, out dLock)) {
Logger.Debug("Current thread is re-entering lock '{0}'; incrementing count.", internalName); Logger.Debug("Current thread is re-entering lock '{0}'; incrementing count.", internalName);
@ -141,9 +141,18 @@ namespace Orchard.Tasks.Locking.Services {
ExecuteOnSeparateTransaction(repository => { ExecuteOnSeparateTransaction(repository => {
// Try to find a valid lock record in the database. // Try to find a valid lock record in the database.
var record = repository.Table.FirstOrDefault(x => x.Name == internalName && (x.ValidUntilUtc == null || x.ValidUntilUtc >= _clock.UtcNow)); var records = repository.Table.Where(x => x.Name == internalName).ToList();
var record = records.FirstOrDefault(x => x.ValidUntilUtc == null || x.ValidUntilUtc >= _clock.UtcNow);
if (record == null) { if (record == null) {
// No record existed, so we're good to create a new one.
// No record matched the criteria, but at least one expired record with the specified name was found.
// Delete the expired records before creating a new one. In theory no more than one record can exist
// due to the unique key constraint on the 'Name' column, it won't hurt to work on a collection.
foreach (var expiredRecord in records) {
repository.Delete(expiredRecord);
}
// No valid record existed, so we're good to create a new one.
Logger.Debug("No valid record was found for lock '{0}'; creating a new record.", internalName); Logger.Debug("No valid record was found for lock '{0}'; creating a new record.", internalName);
repository.Create(new DistributedLockRecord { repository.Create(new DistributedLockRecord {

View File

@ -18,5 +18,4 @@
<package id="NHibernate" version="4.0.1.4000" targetFramework="net452" /> <package id="NHibernate" version="4.0.1.4000" targetFramework="net452" />
<package id="Owin" version="1.0" targetFramework="net452" /> <package id="Owin" version="1.0" targetFramework="net452" />
<package id="YamlDotNet" version="3.8.0" targetFramework="net452" /> <package id="YamlDotNet" version="3.8.0" targetFramework="net452" />
<package id="YamlDotNet.Dynamic" version="3.2.3" targetFramework="net452" />
</packages> </packages>