Compare commits

..

9 Commits

Author SHA1 Message Date
Benedek Farkas
0f4589aaaf Adding GetNullableDateTime to ISearchHit and LuceneSearchHit 2026-01-06 19:49:48 +01:00
Milán Keszthelyi
165505b1db #8862: Preventing the SQL Server Service Broker feature from being enabled when not using SQL Server (Lombiq Technologies: ORCH-309) (#8875)
Some checks failed
Build Crowdin Translation Packages / build-crowdin-translation-packages (push) Has been cancelled
Compile / Compile .NET solution (push) Has been cancelled
Compile / Compile Client-side Assets (push) Has been cancelled
SpecFlow Tests / SpecFlow Tests (push) Has been cancelled
2025-12-09 00:05:04 +01:00
Benedek Farkas
d9d071115c ResourceManager skips rendering a resource without an URL (#8876) 2025-12-04 21:54:36 +01:00
Gábor Domonkos
e5e71c70fb #8266: Security sensitive permissions (Lombiq Technologies: ORCH-214) (#8874)
Some checks failed
Build Crowdin Translation Packages / build-crowdin-translation-packages (push) Has been cancelled
Compile / Compile .NET solution (push) Has been cancelled
Compile / Compile Client-side Assets (push) Has been cancelled
SpecFlow Tests / SpecFlow Tests (push) Has been cancelled
* Adding IsSecurityCritical property to Permission class and setting up Security Critical permissions

* Setting up default hint for security critical permissions

* Adding GetSecurityCriticalPermissions to IRoleService

* Indicating security critical permissions in the role editor

* Indicating roles that have security sensitive permissions in the UserRolesPart editor

* Indicating roles that have security sensitive permissions in the Role Admin list

* Code styling

* Styling

* Removing empty line

* Code styling in Orchard.Roles/Views/Admin/Index.cshtml

* Optimizing and standardizing the processing of security critical permissions / roles + code styling

* Simplifying the GetSecurityCriticalPermissions method

Co-authored-by: Benedek Farkas <benedek.farkas@lombiq.com>

* Removing setting up a Hint for security critical permissions

* Adding a meaningful summary for the IsSecurityCritical property of Permission

* Removing the Hint property from the Permission

---------

Co-authored-by: Benedek Farkas <benedek.farkas@lombiq.com>
2025-11-27 21:33:33 +01:00
Gábor Domonkos
df2b7dde3d #8268: Getting rid of [Obsolete] stuff (Lombiq Technologies: ORCH-308) (#8873)
* Using Orchard.Mvc.FormValueRequiredAttribute instead of the FormValueRequiredAttribute class of the AdminController in the Orchard.Core.Contents namespace.

* Removing obsoleted Spam value from the Orchard.Comments.Models.CommentStatus enum.

* Removing the obsolete AddFilters method of the IFilterProvider interface in the Orchard.Mvc.Filters namespace.

* Removing the obsolete LazyField<T> class from the Orchard.Core.Common.Utilities namespace.

* Removing obsolete methods from OrchardLog4netLogger.

* Removing obsolete Loader(Func<T, T> loader) method from LazyField.cs in the Orchard.ContentManagement.Utilities namespace.

* Removing obsoleted ContentShapeResult ContentShape(IShape shape) method from ContentPartDriver.

* Removing obsoleted ISessionLocator interface.

* Removing obsoleted ContentFieldTemplate methods from ContentFieldDriver<TField>.

* Removing obsoleted IMessagingChannel and IMessageManager interfaces, along with the migration step that updates the existing Send Email activities to use the new Message Queueing functionality.

* Removing obsoleted CustomStepsStep. Don't need the CustomStepsStep RecipeBuilderStep because you can implement IRecipeBuilderStep and IRecipeExecutionStep instead of implementing custom export steps.

* Removing obsoleted CustomPropertiesPart. It used to be necessary for the List feature (also obsolete) to be able to sort on custom data.

* Removing the obsoleted ITaskLeaseService with its default implementation. Removing deprecated Orchard.TaskLease module because it only contains this interface with its default implementation. Use Orchard.Tasks.Locking.IDistributedLockService instead.

* Removing LegacyRulesEvaluator. This condition provider was there for backwards compatibility during the deprecation period.

* Removing IRuleManager with its default implementation. Use Orchard.Conditions.Services.ConditionManager instead.

* Removing unused RequiresOwnership permission.

* Reverting unnecessary sln file changes

* Resolving IMessageChannelSelector instead of IMessageManager in editor templates

* Removing commented out code from ContentPartDriverCoordinatorTests

* Removing Orchard.jQuery too since its quite outdated and Orchard.Resources has been available since 1.9

* Readding the migration step that updates the existing Send Email activities

---------

Co-authored-by: Benedek Farkas <benedek.farkas@lombiq.com>
2025-11-26 17:07:59 +01:00
Milán Keszthelyi
9bc5e7f1e4 #8836: Adding configurable script tag sanitization by adding valid elements as a configurable site setting for TinyMCE (Lombiq Technologies: ORCH-307) (#8872)
* Adding valid elements site setting for TinyMCE, we would like to configure script tag sanitization

* Adding better hint text for valid elements site setting in TinyMCE

* Code styling for TinyMCE

* Fixing alphabet for TinyMCE

* A bit of rewording in Valid Elements hints [skip ci]

---------

Co-authored-by: Benedek Farkas <benedek.farkas@lombiq.com>
2025-11-21 01:53:41 +01:00
Milán Keszthelyi
890f837dfb Replacing deprecated jQuery event alias with .on() method in the ImageEditor (#8871) 2025-11-19 15:53:34 +01:00
Gábor Domonkos
860d6a4aeb #8835: Merging imported SearchFields from recipes instead of overwriting them (Lombiq Technologies: ORCH-310) (#8870)
* Merging imported SearchFields from recipes instead of overwriting them

* The import process overwrites the given index's configuration, but does not drop the others (if they aren't included).

* Clarifying comments and a bit of code styling [skip ci]

---------

Co-authored-by: Benedek Farkas <benedek.farkas@lombiq.com>
2025-11-19 15:32:12 +01:00
Benedek Farkas
75a4fd59a2 #8208: Adopt the Orchard Core .editorconfig (#8868)
Some checks failed
Build Crowdin Translation Packages / build-crowdin-translation-packages (push) Has been cancelled
Compile / Compile .NET solution (push) Has been cancelled
Compile / Compile Client-side Assets (push) Has been cancelled
SpecFlow Tests / SpecFlow Tests (push) Has been cancelled
* Updating .editorconfig from Orchard Core

* VS code cleanup, round 1

- Apply expression/block body preference
- Apply language/framework type preferences
- Apply null checking preferences
- Apply using directive placement preferences
- Apply using statement preferences
- Format document
- Remove unnecessary imports or usings
- Sort Imports or usings

* VS code cleanup: Apply auto property preferences

* VS code cleanup: Apply parenthesis preferences

* VS code cleanup: Apply object/collection initializer preferences

* Reverting NHibernate.Linq changes

* Removing commented out RecipeResultRecord class
2025-10-31 23:50:28 +01:00
518 changed files with 441 additions and 87689 deletions

View File

@@ -13,7 +13,6 @@ using Orchard.Data;
using Orchard.Environment.Configuration;
using Orchard.Services;
using Orchard.Tests.ContentManagement;
using Orchard.Tests.Data;
using Orchard.Tests.Stubs;
namespace Orchard.Tests.Modules
@@ -54,7 +53,6 @@ namespace Orchard.Tests.Modules
var builder = new ContainerBuilder();
//builder.RegisterModule(new ImplicitCollectionSupportModule());
builder.RegisterType<InfosetHandler>().As<IContentHandler>();
builder.RegisterInstance(new StubLocator(_session)).As<ISessionLocator>();
builder.RegisterInstance(_clock).As<IClock>();
builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>));
builder.RegisterInstance(new ShellSettings { Name = ShellSettings.DefaultName, DataProvider = "SqlCe" });
@@ -84,4 +82,4 @@ namespace Orchard.Tests.Modules
Trace.WriteLine("Flushed and cleared session");
}
}
}
}

View File

@@ -312,10 +312,6 @@
<Project>{5D0F00F0-26C9-4785-AD61-B85710C60EB0}</Project>
<Name>Orchard.Tags</Name>
</ProjectReference>
<ProjectReference Include="..\Orchard.Web\Modules\Orchard.TaskLease\Orchard.TaskLease.csproj">
<Project>{3f72a4e9-7b72-4260-b010-c16ec54f9baf}</Project>
<Name>Orchard.TaskLease</Name>
</ProjectReference>
<ProjectReference Include="..\Orchard.Web\Modules\Orchard.Themes\Orchard.Themes.csproj">
<Project>{CDE24A24-01D3-403C-84B9-37722E18DFB7}</Project>
<Name>Orchard.Themes</Name>

View File

@@ -87,13 +87,9 @@ namespace Orchard.Tests.ContentManagement.Handlers.Coordinators
var stub = shapeHelper.Stub(Foo: string.Join(",", part.Foo));
if (!string.IsNullOrWhiteSpace(displayType))
stub.Metadata.Type = string.Format("{0}.{1}", stub.Metadata.Type, displayType);
return ContentShape(stub).Location("TopMeta");
//var viewModel = new StubViewModel { Foo = string.Join(",", part.Foo) };
//if (displayType.StartsWith("Summary"))
// return ContentPartTemplate(viewModel, "StubViewModelTerse").Location("TopMeta");
//return ContentPartTemplate(viewModel).Location("TopMeta");
return ContentShape("Parts_Stub", () => {
return string.Empty;
}).Location("TopMeta");
}
protected override DriverResult Editor(StubPart part, dynamic shapeHelper)

View File

@@ -1,25 +0,0 @@
using System;
using NHibernate;
using Orchard.Data;
namespace Orchard.Tests.Data
{
public class StubLocator : ISessionLocator
{
private readonly ISession _session;
public StubLocator(ISession session)
{
_session = session;
}
#region ISessionLocator Members
public ISession For(Type entityType)
{
return _session;
}
#endregion
}
}

View File

@@ -12,7 +12,6 @@ using Orchard.Data;
using Orchard.Environment.Configuration;
using Orchard.Services;
using Orchard.Tests.ContentManagement;
using Orchard.Tests.Data;
using Orchard.Tests.Stubs;
namespace Orchard.Tests
@@ -50,7 +49,6 @@ namespace Orchard.Tests
var builder = new ContainerBuilder();
//builder.RegisterModule(new ImplicitCollectionSupportModule());
builder.RegisterType<InfosetHandler>().As<IContentHandler>();
builder.RegisterInstance(new StubLocator(_session)).As<ISessionLocator>();
builder.RegisterInstance(_clock).As<IClock>();
builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>)).InstancePerLifetimeScope();
builder.RegisterInstance(_shellSettings = new ShellSettings { Name = ShellSettings.DefaultName, DataProvider = "SqlCe" });
@@ -80,4 +78,4 @@ namespace Orchard.Tests
Trace.WriteLine("Flushed and cleared session");
}
}
}
}

View File

@@ -268,7 +268,6 @@
<Compile Include="Data\RepositoryTests.cs" />
<Compile Include="Data\ProvidersTests.cs" />
<Compile Include="Data\Bags\SettingsTests.cs" />
<Compile Include="Data\StubLocator.cs" />
<Compile Include="DisplayManagement\ArgsUtility.cs" />
<Compile Include="DisplayManagement\CompositeTests.cs" />
<Compile Include="DisplayManagement\Descriptors\LocationParserTests.cs" />

View File

@@ -1,51 +0,0 @@
using System;
namespace Orchard.Core.Common.Utilities
{
[Obsolete("Use Orchard.ContentManagement.Utilities.LazyField instead.")]
public class LazyField<T>
{
private T _value;
private Func<T> _loader;
private Func<T, T> _setter;
public T Value
{
get { return GetValue(); }
set { SetValue(value); }
}
public void Loader(Func<T> loader)
{
_loader = loader;
}
public void Setter(Func<T, T> setter)
{
_setter = setter;
}
private T GetValue()
{
if (_loader != null)
{
_value = _loader();
_loader = null;
}
return _value;
}
private void SetValue(T value)
{
_loader = null;
if (_setter != null)
{
_value = _setter(value);
}
else
{
_value = value;
}
}
}
}

View File

@@ -1,68 +0,0 @@
using System;
using Orchard.ContentManagement;
using Orchard.ContentManagement.Drivers;
using Orchard.ContentManagement.Handlers;
using Orchard.Core.Containers.Models;
using Orchard.Data;
namespace Orchard.Core.Containers.Drivers
{
[Obsolete("Use Fields instead.")]
public class CustomPropertiesPartDriver : ContentPartDriver<CustomPropertiesPart>
{
protected override DriverResult Editor(CustomPropertiesPart part, dynamic shapeHelper)
{
return Editor(part, (IUpdateModel)null, shapeHelper);
}
protected override DriverResult Editor(CustomPropertiesPart part, IUpdateModel updater, dynamic shapeHelper)
{
return ContentShape(
"Parts_CustomProperties_Edit",
() =>
{
if (updater != null)
updater.TryUpdateModel(part, "CustomProperties", null, null);
return shapeHelper.EditorTemplate(TemplateName: "CustomProperties", Model: part, Prefix: "CustomProperties");
});
}
protected override void Importing(CustomPropertiesPart part, ImportContentContext context)
{
// Don't do anything if the tag is not specified.
if (context.Data.Element(part.PartDefinition.Name) == null)
{
return;
}
context.ImportAttribute(part.PartDefinition.Name, "CustomOne", customOne =>
part.Record.CustomOne = customOne
);
context.ImportAttribute(part.PartDefinition.Name, "CustomTwo", customTwo =>
part.Record.CustomTwo = customTwo
);
context.ImportAttribute(part.PartDefinition.Name, "CustomThree", customThree =>
part.Record.CustomThree = customThree
);
}
protected override void Exporting(CustomPropertiesPart part, ExportContentContext context)
{
context.Element(part.PartDefinition.Name).SetAttributeValue("CustomOne", part.Record.CustomOne);
context.Element(part.PartDefinition.Name).SetAttributeValue("CustomTwo", part.Record.CustomTwo);
context.Element(part.PartDefinition.Name).SetAttributeValue("CustomThree", part.Record.CustomThree);
}
}
[Obsolete("Use Fields instead.")]
public class CustomPropertiesPartHandler : ContentHandler
{
public CustomPropertiesPartHandler(IRepository<CustomPropertiesPartRecord> repository)
{
Filters.Add(StorageFilter.For(repository));
}
}
}

View File

@@ -2,59 +2,12 @@ using System;
using System.Collections.Generic;
using Orchard.ContentManagement;
using Orchard.Core.Common.Models;
using Orchard.Core.Containers.Models;
using Orchard.Core.Title.Models;
namespace Orchard.Core.Containers.Extensions
{
[Obsolete]
public static class ContentQueryExtensions
{
public static IContentQuery<T> OrderBy<T>(this IContentQuery<T> query, string partAndProperty, bool descendingOrder) where T : IContent
{
//todo: (heskew) order by custom part properties
switch (partAndProperty)
{
case "ContainablePart.Weight":
query = descendingOrder
? query.OrderByDescending<ContainablePartRecord>(record => record.Position)
: query.OrderBy<ContainablePartRecord>(record => record.Position);
break;
case "TitlePart.Title":
query = descendingOrder
? query.OrderByDescending<TitlePartRecord>(record => record.Title)
: query.OrderBy<TitlePartRecord>(record => record.Title);
break;
case "CustomPropertiesPart.CustomOne":
query = descendingOrder
? query.OrderByDescending<CustomPropertiesPartRecord>(record => record.CustomOne)
: query.OrderBy<CustomPropertiesPartRecord>(record => record.CustomOne);
break;
case "CustomPropertiesPart.CustomTwo":
query = descendingOrder
? query.OrderByDescending<CustomPropertiesPartRecord>(record => record.CustomTwo)
: query.OrderBy<CustomPropertiesPartRecord>(record => record.CustomTwo);
break;
case "CustomPropertiesPart.CustomThree":
query = descendingOrder
? query.OrderByDescending<CustomPropertiesPartRecord>(record => record.CustomThree)
: query.OrderBy<CustomPropertiesPartRecord>(record => record.CustomThree);
break;
case "CommonPart.CreatedUtc":
query = descendingOrder
? query.OrderByDescending<CommonPartRecord>(record => record.CreatedUtc)
: query.OrderBy<CommonPartRecord>(record => record.CreatedUtc);
break;
default: // "CommonPart.PublishedUtc"
query = descendingOrder
? query.OrderByDescending<CommonPartRecord>(record => record.PublishedUtc)
: query.OrderBy<CommonPartRecord>(record => record.PublishedUtc);
break;
}
return query;
}
public static IContentQuery<ContentItem> Where(this IContentQuery<ContentItem> query, string partAndProperty, string comparisonOperator, string comparisonValue)
{
var filterKey = string.Format("{0}|{1}", partAndProperty, comparisonOperator);
@@ -74,19 +27,6 @@ namespace Orchard.Core.Containers.Extensions
{"CommonPart.PublishedUtc|>", new Func<IContentQuery<ContentItem>, string, IContentQuery<ContentItem>>((q, s) => q.Where<CommonPartRecord>(r => r.PublishedUtc > DateTime.Parse(s)))},
{"CommonPart.PublishedUtc|=", new Func<IContentQuery<ContentItem>, string, IContentQuery<ContentItem>>((q, s) => q.Where<CommonPartRecord>(r => r.PublishedUtc == DateTime.Parse(s)))}, // todo: (heskew) not practical as is. needs some sense of precision....
{"CommonPart.PublishedUtc|^=", new Func<IContentQuery<ContentItem>, string, IContentQuery<ContentItem>>((q, s) => q.Where<CommonPartRecord>(r => true /* can't modified PublishedUtc for partial comparisons */))},
// todo: (hesekw) this could benefit from a better filter implementation as this is currently very limited in functionality and I have no idea how the custom parts will be used by folks
{"CustomPropertiesPart.CustomOne|<", new Func<IContentQuery<ContentItem>, string, IContentQuery<ContentItem>>((q, s) => q.Where<CustomPropertiesPartRecord>(r => true /* CompareTo is not implemented - r.CustomOne.CompareTo(s) == -1*/))},
{"CustomPropertiesPart.CustomOne|>", new Func<IContentQuery<ContentItem>, string, IContentQuery<ContentItem>>((q, s) => q.Where<CustomPropertiesPartRecord>(r => true /* CompareTo is not implemented - r.CustomOne.CompareTo(s) == 1*/))},
{"CustomPropertiesPart.CustomOne|=", new Func<IContentQuery<ContentItem>, string, IContentQuery<ContentItem>>((q, s) => q.Where<CustomPropertiesPartRecord>(r => r.CustomOne.Equals(s, StringComparison.OrdinalIgnoreCase)))},
{"CustomPropertiesPart.CustomOne|^=", new Func<IContentQuery<ContentItem>, string, IContentQuery<ContentItem>>((q, s) => q.Where<CustomPropertiesPartRecord>(r => r.CustomOne.StartsWith(s, StringComparison.OrdinalIgnoreCase)))},
{"CustomPropertiesPart.CustomTwo|<", new Func<IContentQuery<ContentItem>, string, IContentQuery<ContentItem>>((q, s) => q.Where<CustomPropertiesPartRecord>(r => true /* CompareTo is not implemented - r.CustomTwo.CompareTo(s) == -1*/))},
{"CustomPropertiesPart.CustomTwo|>", new Func<IContentQuery<ContentItem>, string, IContentQuery<ContentItem>>((q, s) => q.Where<CustomPropertiesPartRecord>(r => true /* CompareTo is not implemented - r.CustomTwo.CompareTo(s) == 1*/))},
{"CustomPropertiesPart.CustomTwo|=", new Func<IContentQuery<ContentItem>, string, IContentQuery<ContentItem>>((q, s) => q.Where<CustomPropertiesPartRecord>(r => r.CustomTwo.Equals(s, StringComparison.OrdinalIgnoreCase)))},
{"CustomPropertiesPart.CustomTwo|^=", new Func<IContentQuery<ContentItem>, string, IContentQuery<ContentItem>>((q, s) => q.Where<CustomPropertiesPartRecord>(r => r.CustomTwo.StartsWith(s, StringComparison.OrdinalIgnoreCase)))},
{"CustomPropertiesPart.CustomThree|<", new Func<IContentQuery<ContentItem>, string, IContentQuery<ContentItem>>((q, s) => q.Where<CustomPropertiesPartRecord>(r => true /* CompareTo is not implemented - r.CustomThree.CompareTo(s) == -1*/))},
{"CustomPropertiesPart.CustomThree|>", new Func<IContentQuery<ContentItem>, string, IContentQuery<ContentItem>>((q, s) => q.Where<CustomPropertiesPartRecord>(r => true /* CompareTo is not implemented - r.CustomThree.CompareTo(s) == 1*/))},
{"CustomPropertiesPart.CustomThree|=", new Func<IContentQuery<ContentItem>, string, IContentQuery<ContentItem>>((q, s) => q.Where<CustomPropertiesPartRecord>(r => r.CustomThree.Equals(s, StringComparison.OrdinalIgnoreCase)))},
{"CustomPropertiesPart.CustomThree|^=", new Func<IContentQuery<ContentItem>, string, IContentQuery<ContentItem>>((q, s) => q.Where<CustomPropertiesPartRecord>(r => r.CustomThree.StartsWith(s, StringComparison.OrdinalIgnoreCase)))},
};
}
}
}

View File

@@ -1,19 +0,0 @@
using System;
using Orchard.ContentManagement;
using Orchard.ContentManagement.Records;
namespace Orchard.Core.Containers.Models
{
[Obsolete("Use content fields instead.")]
public class CustomPropertiesPart : ContentPart<CustomPropertiesPartRecord>
{
}
[Obsolete("Use content fields instead.")]
public class CustomPropertiesPartRecord : ContentPartRecord
{
public virtual string CustomOne { get; set; }
public virtual string CustomTwo { get; set; }
public virtual string CustomThree { get; set; }
}
}

View File

@@ -1,4 +1,4 @@
<Placement>
<Placement>
<!-- available display shapes -->
<!--
Parts_Container_Contained
@@ -9,7 +9,6 @@
</Match>
<Place Parts_Containable_Edit="Content:2"/>
<Place Parts_Container_Edit="Content:5"/>
<Place Parts_CustomProperties_Edit="Content:5"/>
<Place Parts_ContainerWidget_Edit="Content:5"/>
<Place Parts_Container_SiteSettings="Content:10"/>
<Place Parts_ContainerWidget="Content"/>

View File

@@ -1,4 +1,4 @@
@model Orchard.Core.Containers.ViewModels.ContainerWidgetViewModel
@model Orchard.Core.Containers.ViewModels.ContainerWidgetViewModel
@{
Script.Require("ShapesBase");
}
@@ -19,9 +19,6 @@
@Html.SelectOption(Model.Part.Record.OrderByProperty, "CommonPart.CreatedUtc", T("Date Created").Text)
@Html.SelectOption(Model.Part.Record.OrderByProperty, "CommonPart.PublishedUtc", T("Date Published").Text)
@Html.SelectOption(Model.Part.Record.OrderByProperty, "TitlePart.Title", T("Title (Title Part)").Text)
@Html.SelectOption(Model.Part.Record.OrderByProperty, "CustomPropertiesPart.CustomOne", T("Custom 1").Text)
@Html.SelectOption(Model.Part.Record.OrderByProperty, "CustomPropertiesPart.CustomTwo", T("Custom 2").Text)
@Html.SelectOption(Model.Part.Record.OrderByProperty, "CustomPropertiesPart.CustomThree", T("Custom 3").Text)
</select>
<select title="@T("Order direction")" id="@Html.FieldIdFor(m => m.Part.Record.OrderByDirection)" name="@Html.FieldNameFor(m => m.Part.Record.OrderByDirection)">
@Html.SelectOption(Model.Part.Record.OrderByDirection, (int)SortDirection.Ascending, T("Ascending").Text)
@@ -39,9 +36,6 @@
@Html.SelectOption(Model.Part.Record.FilterByProperty, "CommonPart.CreatedUtx", T("Date Created").Text)
@Html.SelectOption(Model.Part.Record.FilterByProperty, "CommonPart.PublishedUtc", T("Date Published").Text)
@Html.SelectOption(Model.Part.Record.FilterByProperty, "TitlePart.Title", T("Title (Title Part)").Text)
@Html.SelectOption(Model.Part.Record.FilterByProperty, "CustomPropertiesPart.CustomOne", T("Custom 1").Text)
@Html.SelectOption(Model.Part.Record.FilterByProperty, "CustomPropertiesPart.CustomTwo", T("Custom 2").Text)
@Html.SelectOption(Model.Part.Record.FilterByProperty, "CustomPropertiesPart.CustomThree", T("Custom 3").Text)
</select>
<select title="@T("Filter operator")" id="@Html.FieldIdFor(m => m.Part.Record.FilterByOperator)" name="@Html.FieldNameFor(m => m.Part.Record.FilterByOperator)">
@Html.SelectOption(Model.Part.Record.FilterByOperator, "=", T("is equal to").Text)

View File

@@ -1,13 +0,0 @@
@model Orchard.Core.Containers.Models.CustomPropertiesPart
<fieldset>
@Html.LabelFor(m => m.Record.CustomOne, T("Custom One"))
@Html.EditorFor(m => m.Record.CustomOne)
</fieldset>
<fieldset>
@Html.LabelFor(m => m.Record.CustomTwo, T("Custom Two"))
@Html.EditorFor(m => m.Record.CustomTwo)
</fieldset>
<fieldset>
@Html.LabelFor(m => m.Record.CustomThree, T("Custom Three"))
@Html.EditorFor(m => m.Record.CustomThree)
</fieldset>

View File

@@ -2,7 +2,6 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Reflection;
using System.Web.Mvc;
using System.Web.Routing;
using Orchard.ContentManagement;
@@ -17,6 +16,7 @@ using Orchard.Data;
using Orchard.Localization;
using Orchard.Localization.Services;
using Orchard.Logging;
using Orchard.Mvc;
using Orchard.Mvc.Extensions;
using Orchard.Mvc.Html;
using Orchard.Settings;
@@ -166,7 +166,7 @@ namespace Orchard.Core.Contents.Controllers
}
[HttpPost, ActionName("List")]
[Mvc.FormValueRequired("submit.Filter")]
[FormValueRequired("submit.Filter")]
public ActionResult ListFilterPOST(ContentOptions options)
{
var routeValues = ControllerContext.RouteData.Values;
@@ -189,7 +189,7 @@ namespace Orchard.Core.Contents.Controllers
}
[HttpPost, ActionName("List")]
[Mvc.FormValueRequired("submit.BulkEdit")]
[FormValueRequired("submit.BulkEdit")]
public ActionResult ListPOST(ContentOptions options, IEnumerable<int> itemIds, string returnUrl)
{
if (itemIds != null)
@@ -295,14 +295,14 @@ namespace Orchard.Core.Contents.Controllers
}
[HttpPost, ActionName("Create")]
[Mvc.FormValueRequired("submit.Save")]
[FormValueRequired("submit.Save")]
public ActionResult CreatePOST(string id, string returnUrl)
{
return CreatePOST(id, returnUrl, contentItem => { return false; });
}
[HttpPost, ActionName("Create")]
[Mvc.FormValueRequired("submit.Publish")]
[FormValueRequired("submit.Publish")]
public ActionResult CreateAndPublishPOST(string id, string returnUrl)
{
@@ -381,14 +381,14 @@ namespace Orchard.Core.Contents.Controllers
}
[HttpPost, ActionName("Edit")]
[Mvc.FormValueRequired("submit.Save")]
[FormValueRequired("submit.Save")]
public ActionResult EditPOST(int id, string returnUrl)
{
return EditPOST(id, returnUrl, contentItem => { return false; });
}
[HttpPost, ActionName("Edit")]
[Mvc.FormValueRequired("submit.Publish")]
[FormValueRequired("submit.Publish")]
public ActionResult EditAndPublishPOST(int id, string returnUrl)
{
var content = _contentManager.Get(id, VersionOptions.Latest);
@@ -414,7 +414,7 @@ namespace Orchard.Core.Contents.Controllers
/// <param name="returnUrl"></param>
/// <returns></returns>
[HttpPost, ActionName("Edit")]
[Mvc.FormValueRequired("submit.Unpublish")]
[FormValueRequired("submit.Unpublish")]
public ActionResult EditUnpublishPOST(int id, string returnUrl)
{
return Unpublish(id, returnUrl);
@@ -428,7 +428,7 @@ namespace Orchard.Core.Contents.Controllers
/// <param name="returnUrl"></param>
/// <returns></returns>
[HttpPost, ActionName("Edit")]
[Mvc.FormValueRequired("submit.Delete")]
[FormValueRequired("submit.Delete")]
public ActionResult EditDeletePOST(int id, string returnUrl)
{
return Remove(id, returnUrl);
@@ -623,21 +623,4 @@ namespace Orchard.Core.Contents.Controllers
ModelState.AddModelError(key, errorMessage.ToString());
}
}
[Obsolete("Use Orchard.Mvc.FormValueRequiredAttribute instead.")]
public class FormValueRequiredAttribute : ActionMethodSelectorAttribute
{
private readonly string _submitButtonName;
public FormValueRequiredAttribute(string submitButtonName)
{
_submitButtonName = submitButtonName;
}
public override bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo)
{
var value = controllerContext.HttpContext.Request.Form[_submitButtonName];
return !string.IsNullOrEmpty(value);
}
}
}

View File

@@ -287,7 +287,7 @@ namespace Orchard.Core.Navigation.Controllers
}
[HttpPost, ActionName("Edit")]
[Mvc.FormValueRequired("submit.Publish")]
[FormValueRequired("submit.Publish")]
public ActionResult EditPOST(int id, string returnUrl)
{
return EditPOST(id, returnUrl, contentItem =>
@@ -346,7 +346,7 @@ namespace Orchard.Core.Navigation.Controllers
}
[HttpPost, ActionName("Edit")]
[Mvc.FormValueRequired("submit.Unpublish")]
[FormValueRequired("submit.Unpublish")]
public ActionResult EditUnpublishPOST(int id) => Unpublish(id);
private MenuItemEntry CreateMenuItemEntries(MenuPart menuPart)

View File

@@ -148,7 +148,6 @@
<Compile Include="Common\Drivers\TextFieldDriver.cs" />
<Compile Include="Containers\Drivers\ContainerWidgetPartDriver.cs" />
<Compile Include="Containers\Extensions\ContentDefinitionManagerExtensions.cs" />
<Compile Include="Containers\Drivers\CustomPropertiesDriver.cs" />
<Compile Include="Containers\Extensions\ContentQueryExtensions.cs" />
<Compile Include="Containers\Handlers\ContainablePartHandler.cs" />
<Compile Include="Containers\Handlers\ContainerPartHandler.cs" />
@@ -161,7 +160,6 @@
<Compile Include="Common\Shapes.cs" />
<Compile Include="Common\Fields\TextField.cs" />
<Compile Include="Containers\Models\ContainerWidgetPart.cs" />
<Compile Include="Containers\Models\CustomPropertiesPart.cs" />
<Compile Include="Containers\Services\ContainerService.cs" />
<Compile Include="Containers\Services\ListViewProvider.cs" />
<Compile Include="Containers\Services\ListViewService.cs" />
@@ -219,7 +217,6 @@
<Compile Include="Navigation\ViewModels\MenuPartViewModel.cs" />
<Compile Include="Navigation\ViewModels\MenuWidgetViewModel.cs" />
<Compile Include="Navigation\Migrations.cs" />
<Compile Include="Common\Utilities\LazyField.cs" />
<Compile Include="Common\Handlers\CommonPartHandler.cs" />
<Compile Include="Common\Models\CommonPart.cs" />
<Compile Include="Common\Handlers\BodyPartHandler.cs" />
@@ -456,7 +453,6 @@
<Content Include="Containers\Views\DefinitionTemplates\ContainerPartSettings.cshtml" />
<Content Include="Containers\Views\DefinitionTemplates\ContainerTypePartSettingsViewModel.cshtml" />
<Content Include="Containers\Views\EditorTemplates\Containable.cshtml" />
<Content Include="Containers\Views\EditorTemplates\CustomProperties.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Shapes\Views\ShapeResult\Display.cshtml" />

View File

@@ -6,7 +6,7 @@ namespace Orchard.Core.Settings
{
public class Permissions : IPermissionProvider
{
public static readonly Permission ManageSettings = new Permission { Description = "Manage Settings", Name = "ManageSettings" };
public static readonly Permission ManageSettings = new Permission { Description = "Manage Settings", Name = "ManageSettings", IsSecurityCritical = true };
public virtual Feature Feature { get; set; }
@@ -28,4 +28,4 @@ namespace Orchard.Core.Settings
}
}
}
}

View File

@@ -38,7 +38,7 @@ namespace Lucene.Models
public string GetString(string name)
{
var field = _doc.GetField(name);
return field == null ? null : field.StringValue;
return field?.StringValue;
}
public DateTime GetDateTime(string name)
@@ -46,5 +46,11 @@ namespace Lucene.Models
var field = _doc.GetField(name);
return field == null ? DateTime.MinValue : DateTools.StringToDate(field.StringValue);
}
public DateTime? GetNullableDateTime(string name)
{
var field = _doc.GetField(name);
return field == null ? default(DateTime?) : DateTools.StringToDate(field.StringValue);
}
}
}

View File

@@ -6,10 +6,10 @@ namespace Orchard.AuditTrail
{
public class Permissions : IPermissionProvider
{
public static readonly Permission ViewAuditTrail = new Permission { Description = "View audit trail", Name = "ViewAuditTrail" };
public static readonly Permission ManageAuditTrailSettings = new Permission { Description = "Manage audit trail settings", Name = "ManageAuditTrailSettings" };
public static readonly Permission ImportAuditTrail = new Permission { Description = "Import audit trail", Name = "ImportAuditTrail" };
public static readonly Permission ManageClientIpAddressSettings = new Permission { Description = "Manage client IP address settings", Name = "ManageClientIpAddressSettings" };
public static readonly Permission ViewAuditTrail = new Permission { Description = "View audit trail", Name = "ViewAuditTrail", IsSecurityCritical = true };
public static readonly Permission ManageAuditTrailSettings = new Permission { Description = "Manage audit trail settings", Name = "ManageAuditTrailSettings", IsSecurityCritical = true };
public static readonly Permission ImportAuditTrail = new Permission { Description = "Import audit trail", Name = "ImportAuditTrail", IsSecurityCritical = true };
public static readonly Permission ManageClientIpAddressSettings = new Permission { Description = "Manage client IP address settings", Name = "ManageClientIpAddressSettings", IsSecurityCritical = true };
public virtual Feature Feature { get; set; }
@@ -35,4 +35,4 @@ namespace Orchard.AuditTrail
};
}
}
}
}

View File

@@ -154,7 +154,7 @@ namespace Orchard.Blogs.Controllers
}
[HttpPost, ActionName("Edit")]
[Mvc.FormValueRequired("submit.Delete")]
[FormValueRequired("submit.Delete")]
public ActionResult EditDeletePOST(int blogId, int postId, string returnUrl)
{
return Delete(blogId, postId);
@@ -180,7 +180,7 @@ namespace Orchard.Blogs.Controllers
}
[HttpPost, ActionName("Edit")]
[Mvc.FormValueRequired("submit.Unpublish")]
[FormValueRequired("submit.Unpublish")]
public ActionResult EditUnpublishPOST(int blogId, int postId, string returnUrl)
{
return Unpublish(blogId, postId);
@@ -331,4 +331,4 @@ namespace Orchard.Blogs.Controllers
ModelState.AddModelError(key, errorMessage.ToString());
}
}
}
}

View File

@@ -1,13 +1,8 @@
using System;
namespace Orchard.Comments.Models
{
public enum CommentStatus
{
Pending,
Approved,
[Obsolete]
Spam
}
}
}

View File

@@ -1,9 +1,9 @@
@model Orchard.Comments.Models.CommentSettingsPart
@model Orchard.Comments.Models.CommentSettingsPart
@using Orchard.Messaging.Services;
@{
var messageManager = WorkContext.Resolve<IMessageManager>();
var emailEnabled = messageManager.GetAvailableChannelServices().Contains("email");
var messageChannelSelector = WorkContext.Resolve<IMessageChannelSelector>();
var emailEnabled = messageChannelSelector.GetChannel("Email", null) != null;
}

View File

@@ -7,7 +7,7 @@ namespace Orchard.ContentTypes
public class Permissions : IPermissionProvider
{
public static readonly Permission ViewContentTypes = new Permission { Name = "ViewContentTypes", Description = "View content types" };
public static readonly Permission EditContentTypes = new Permission { Name = "EditContentTypes", Description = "Edit content types" };
public static readonly Permission EditContentTypes = new Permission { Name = "EditContentTypes", Description = "Edit content types", IsSecurityCritical = true };
public virtual Feature Feature { get; set; }

View File

@@ -147,8 +147,6 @@
<Compile Include="Services\DefaultEmailMessageChannelSelector.cs" />
<Compile Include="Services\ISmtpChannel.cs" />
<Compile Include="Services\SmtpMessageChannel.cs" />
<Compile Include="Services\EmailMessageEventHandler.cs" />
<Compile Include="Services\EmailMessagingChannel.cs" />
<Compile Include="Services\MissingSettingsBanner.cs" />
</ItemGroup>
<ItemGroup>

View File

@@ -1,14 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Orchard.ContentManagement;
using Orchard.Core.Common.Models;
using Orchard.Events;
using Orchard.Localization;
using Orchard.Messaging.Events;
using Orchard.Messaging.Models;
using Orchard.Messaging.Services;
using Orchard.Security;
namespace Orchard.Email.Rules
{
@@ -17,129 +7,4 @@ namespace Orchard.Email.Rules
{
void Describe(dynamic describe);
}
[Obsolete]
public class MailActions : IActionProvider
{
private readonly IMessageManager _messageManager;
private readonly IOrchardServices _orchardServices;
private readonly IMembershipService _membershipService;
public const string MessageType = "ActionEmail";
public MailActions(
IMessageManager messageManager,
IOrchardServices orchardServices,
IMembershipService membershipService)
{
_messageManager = messageManager;
_orchardServices = orchardServices;
_membershipService = membershipService;
T = NullLocalizer.Instance;
}
public Localizer T { get; set; }
public void Describe(dynamic describe)
{
Func<dynamic, LocalizedString> display = context => T("Send an e-mail");
describe.For("Messaging", T("Messaging"), T("Messages"))
.Element(
"SendEmail", T("Send e-mail"), T("Sends an e-mail to a specific user."), (Func<dynamic, bool>)Send,
display, "ActionEmail");
}
private bool Send(dynamic context)
{
var recipient = context.Properties["Recipient"];
var properties = new Dictionary<string, string>(context.Properties);
if (recipient == "owner")
{
var content = context.Tokens["Content"] as IContent;
if (content.Has<CommonPart>())
{
var owner = content.As<CommonPart>().Owner;
if (owner != null && owner.ContentItem != null && owner.ContentItem.Record != null)
{
_messageManager.Send(owner.ContentItem.Record, MessageType, "email", properties);
}
}
}
else if (recipient == "author")
{
var user = _orchardServices.WorkContext.CurrentUser;
// can be null if user is anonymous
if (user != null && string.IsNullOrWhiteSpace(user.Email))
{
_messageManager.Send(user.ContentItem.Record, MessageType, "email", properties);
}
}
else if (recipient == "admin")
{
var username = _orchardServices.WorkContext.CurrentSite.SuperUser;
var user = _membershipService.GetUser(username);
// can be null if user is no super user is defined
if (user != null && !string.IsNullOrWhiteSpace(user.Email))
{
_messageManager.Send(user.ContentItem.Record, MessageType, "email", properties);
}
}
else if (recipient == "other")
{
var email = properties["RecipientOther"];
_messageManager.Send(SplitEmail(email), MessageType, "email", properties);
}
return true;
}
private static IEnumerable<string> SplitEmail(string commaSeparated)
{
return commaSeparated.Split(new[] { ',', ';' });
}
}
[Obsolete]
public class MailActionsHandler : IMessageEventHandler
{
public MailActionsHandler()
{
T = NullLocalizer.Instance;
}
public Localizer T { get; set; }
public void Sending(MessageContext context)
{
if (context.MessagePrepared)
return;
if ((context.Recipients == null || !context.Recipients.Any()) &&
(context.Addresses == null || !context.Addresses.Any()))
{
return;
}
switch (context.Type)
{
case MailActions.MessageType:
context.MailMessage.Subject = context.Properties["Subject"];
context.MailMessage.Body = context.Properties["Body"];
FormatEmailBody(context);
context.MessagePrepared = true;
break;
}
}
private static void FormatEmailBody(MessageContext context)
{
context.MailMessage.Body = "<p style=\"font-family:Arial, Helvetica; font-size:10pt;\">" + context.MailMessage.Body + "</p>";
}
public void Sent(MessageContext context)
{
}
}
}
}

View File

@@ -1,59 +0,0 @@
using System;
using Orchard.ContentManagement;
using Orchard.Logging;
using Orchard.Messaging.Events;
using Orchard.Messaging.Models;
using Orchard.Security;
namespace Orchard.Email.Services
{
[Obsolete]
public class EmailMessageEventHandler : IMessageEventHandler
{
private readonly IContentManager _contentManager;
public EmailMessageEventHandler(IContentManager contentManager)
{
_contentManager = contentManager;
Logger = NullLogger.Instance;
}
public ILogger Logger { get; set; }
public void Sending(MessageContext context)
{
if (context.Recipients != null)
{
foreach (var rec in context.Recipients)
{
var contentItem = _contentManager.Get(rec.Id);
if (contentItem == null)
return;
var recipient = contentItem.As<IUser>();
if (recipient == null)
return;
context.MailMessage.To.Add(recipient.Email);
}
}
foreach (var address in context.Addresses)
{
try
{
context.MailMessage.To.Add(address);
}
catch (Exception e)
{
Logger.Error(e, "Unexpected error while trying to send email.");
}
}
}
public void Sent(MessageContext context)
{
}
}
}

View File

@@ -1,84 +0,0 @@
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Mail;
using Orchard.ContentManagement;
using Orchard.Email.Models;
using Orchard.Localization;
using Orchard.Logging;
using Orchard.Messaging.Models;
using Orchard.Messaging.Services;
namespace Orchard.Email.Services
{
[Obsolete("Use ISmtpChannel instead")]
public class EmailMessagingChannel : IMessagingChannel
{
private readonly IOrchardServices _orchardServices;
public const string EmailService = "email";
public EmailMessagingChannel(IOrchardServices orchardServices)
{
_orchardServices = orchardServices;
Logger = NullLogger.Instance;
}
public ILogger Logger { get; set; }
public Localizer T { get; set; }
public void SendMessage(MessageContext context)
{
if (!context.Service.Equals(EmailService, StringComparison.InvariantCultureIgnoreCase))
return;
var smtpSettings = _orchardServices.WorkContext.CurrentSite.As<SmtpSettingsPart>();
// can't process emails if the Smtp settings have not yet been set
if (smtpSettings == null || !smtpSettings.IsValid())
{
return;
}
using (var smtpClient = new SmtpClient())
{
smtpClient.UseDefaultCredentials = !smtpSettings.RequireCredentials;
if (!smtpClient.UseDefaultCredentials && !string.IsNullOrWhiteSpace(smtpSettings.UserName))
{
smtpClient.Credentials = new NetworkCredential(smtpSettings.UserName, smtpSettings.Password);
}
if (context.MailMessage.To.Count == 0)
{
Logger.Error("Recipient is missing an email address");
return;
}
if (smtpSettings.Host != null)
smtpClient.Host = smtpSettings.Host;
smtpClient.Port = smtpSettings.Port;
smtpClient.EnableSsl = smtpSettings.EnableSsl;
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
context.MailMessage.From = new MailAddress(smtpSettings.FromAddress);
context.MailMessage.IsBodyHtml = !string.IsNullOrWhiteSpace(context.MailMessage.Body) && context.MailMessage.Body.Contains("<") && context.MailMessage.Body.Contains(">");
try
{
smtpClient.Send(context.MailMessage);
Logger.Debug("Message sent to {0}: {1}", context.MailMessage.To[0].Address, context.Type);
}
catch (Exception e)
{
Logger.Error(e, "An unexpected error while sending a message to {0}: {1}", context.MailMessage.To[0].Address, context.Type);
}
}
}
public IEnumerable<string> GetAvailableServices()
{
return new[] { EmailService };
}
}
}

View File

@@ -9,7 +9,7 @@
var awaiting = [];
$(imeImage).load(function () {
$(imeImage).on('load', function () {
$(imeImage).off('load');
for (var i = 0; i < awaiting.length; i++) {
awaiting[i]();

View File

@@ -51,8 +51,6 @@ namespace Orchard.ImportExport.Commands
[OrchardSwitch]
public bool Data { get; set; }
[OrchardSwitch]
public string Steps { get; set; }
[OrchardSwitch]
public string Version { get; set; }
[OrchardSwitch]
public bool SiteSettings { get; set; }
@@ -90,8 +88,8 @@ namespace Orchard.ImportExport.Commands
}
[CommandName("export file")]
[CommandHelp("export file [/Filename:<path>] [/ConfigFilename:<path>] [/Types:<type-name-1>, ... ,<type-name-n>] [/Metadata:true|false] [/Data:true|false] [/Version:Published|Draft|Latest] [/SiteSettings:true|false] [/Steps:<custom-step-1>, ... ,<custom-step-n>]\r\n\t" + "Create an export file according to the specified options.")]
[OrchardSwitches("Filename,ConfigFilename,Types,Metadata,Data,Version,SiteSettings,Steps")]
[CommandHelp("export file [/Filename:<path>] [/ConfigFilename:<path>] [/Types:<type-name-1>, ... ,<type-name-n>] [/Metadata:true|false] [/Data:true|false] [/Version:Published|Draft|Latest] [/SiteSettings:true|false]\r\n\t" + "Create an export file according to the specified options.")]
[OrchardSwitches("Filename,ConfigFilename,Types,Metadata,Data,Version,SiteSettings")]
public void ExportFile()
{
// Impersonate the Site owner.
@@ -99,7 +97,7 @@ namespace Orchard.ImportExport.Commands
IEnumerable<IExportAction> actions;
if (!IsAnySwitchDefined("ConfigFilename", "Types", "Metadata", "Version", "SiteSettings", "Steps"))
if (!IsAnySwitchDefined("ConfigFilename", "Types", "Metadata", "Version", "SiteSettings"))
{
// Get default configured actions.
actions = GetDefaultConfiguration();
@@ -107,7 +105,7 @@ namespace Orchard.ImportExport.Commands
else
{
// Read config file if specified.
var configurationDocument = UpdateExportConfiguration(ReadExportConfigurationFile(ConfigFilename), Types, Metadata, Data, Version, SiteSettings, Steps);
var configurationDocument = UpdateExportConfiguration(ReadExportConfigurationFile(ConfigFilename), Types, Metadata, Data, Version, SiteSettings);
// Get all the steps based on the configuration.
actions = _importExportService.ParseExportActions(configurationDocument);
@@ -145,7 +143,7 @@ namespace Orchard.ImportExport.Commands
return _exportActions;
}
private XDocument UpdateExportConfiguration(XDocument configurationDocument, string types, bool metadata, bool data, string version, bool siteSettings, string customSteps)
private XDocument UpdateExportConfiguration(XDocument configurationDocument, string types, bool metadata, bool data, string version, bool siteSettings)
{
var buildRecipeElement = GetOrCreateElement(configurationDocument.Root, "BuildRecipe");
var stepsElement = GetOrCreateElement(buildRecipeElement, "Steps");
@@ -182,20 +180,6 @@ namespace Orchard.ImportExport.Commands
GetOrCreateElement(stepsElement, "Settings");
}
if (!string.IsNullOrEmpty(customSteps))
{
var customStepsList = customSteps.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
foreach (var customStepName in customStepsList)
{
GetOrCreateElement(stepsElement, customStepName);
}
//Still need CustomStepsStep to support older export steps created by users
var customStepsElement = GetOrCreateElement(stepsElement, "CustomSteps");
customStepsElement.Attr("Steps", customSteps);
}
return configurationDocument;
}
@@ -229,4 +213,4 @@ namespace Orchard.ImportExport.Commands
return childElement;
}
}
}
}

View File

@@ -1,12 +0,0 @@
using System;
using System.Xml.Linq;
namespace Orchard.ImportExport.Models
{
public class ExportContext
{
public XDocument Document { get; set; }
[Obsolete]
public ExportOptions ExportOptions { get; set; }
}
}

View File

@@ -1,11 +0,0 @@
using System;
using System.Collections.Generic;
namespace Orchard.ImportExport.Models
{
[Obsolete]
public class ExportOptions
{
public IEnumerable<string> CustomSteps { get; set; }
}
}

View File

@@ -114,7 +114,6 @@
<Compile Include="Models\ConfigureImportActionsContext.cs" />
<Compile Include="Commands\ImportExportCommands.cs" />
<Compile Include="Controllers\AdminController.cs" />
<Compile Include="Models\ExportOptions.cs" />
<Compile Include="Permissions.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Providers\ExportActions\BuildRecipeAction.cs" />
@@ -125,20 +124,14 @@
<Compile Include="ViewModels\RecipeExecutionStepViewModel.cs" />
<Compile Include="ViewModels\UploadRecipeViewModel.cs" />
<Compile Include="Providers\ImportActions\ExecuteRecipeAction.cs" />
<Compile Include="Recipes\Builders\CustomStepsStep.cs" />
<Compile Include="Services\ImportAction.cs" />
<Compile Include="Services\ExportAction.cs" />
<Compile Include="Models\ImportActionContext.cs" />
<Compile Include="Models\ExportActionContext.cs" />
<Compile Include="Models\ExportContext.cs" />
<Compile Include="Services\IImportAction.cs" />
<Compile Include="Services\IExportAction.cs" />
<Compile Include="ViewModels\CustomStepEntry.cs" />
<Compile Include="Services\ICustomExportStep.cs" />
<Compile Include="Services\IExportEventHandler.cs" />
<Compile Include="Services\IImportExportService.cs" />
<Compile Include="Services\ImportExportService.cs" />
<Compile Include="ViewModels\CustomStepsViewModel.cs" />
<Compile Include="ViewModels\ImportActionViewModel.cs" />
<Compile Include="ViewModels\ExportActionViewModel.cs" />
<Compile Include="ViewModels\ExportStepViewModel.cs" />
@@ -190,9 +183,6 @@
<ItemGroup>
<Content Include="Views\EditorTemplates\ImportActions\ExecuteRecipe.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\EditorTemplates\BuilderSteps\CustomSteps.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\EditorTemplates\ExportActions\BuildRecipe.cshtml" />
</ItemGroup>

View File

@@ -6,8 +6,8 @@ namespace Orchard.ImportExport
{
public class Permissions : IPermissionProvider
{
public static readonly Permission Import = new Permission { Description = "Import Data", Name = "Import" };
public static readonly Permission Export = new Permission { Description = "Export Data", Name = "Export" };
public static readonly Permission Import = new Permission { Description = "Import Data", Name = "Import", IsSecurityCritical = true };
public static readonly Permission Export = new Permission { Description = "Export Data", Name = "Export", IsSecurityCritical = true };
public virtual Feature Feature { get; set; }
@@ -26,4 +26,4 @@ namespace Orchard.ImportExport
};
}
}
}
}

View File

@@ -1,88 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Orchard.ContentManagement;
using Orchard.ImportExport.Models;
using Orchard.ImportExport.Services;
using Orchard.ImportExport.ViewModels;
using Orchard.Localization;
using Orchard.Recipes.Models;
using Orchard.Recipes.Services;
namespace Orchard.ImportExport.Recipes.Builders
{
[Obsolete("Implement IRecipeBuilderStep and IRecipeExecutionStep instead of implementing custom export steps.")]
public class CustomStepsStep : RecipeBuilderStep
{
private readonly IEnumerable<IExportEventHandler> _exportEventHandlers;
private readonly ICustomExportStep _customExportStep;
public CustomStepsStep(IEnumerable<IExportEventHandler> exportEventHandlers, ICustomExportStep customExportStep)
{
_exportEventHandlers = exportEventHandlers;
_customExportStep = customExportStep;
CustomSteps = new List<string>();
}
public override string Name => "CustomSteps";
public override LocalizedString DisplayName => T("Additional Export Steps");
public override LocalizedString Description => T("Exports additional items.");
public override bool IsVisible => CustomSteps.Any();
public override int Priority => -50;
public override int Position => 500;
public IList<string> CustomSteps { get; set; }
public override dynamic BuildEditor(dynamic shapeFactory)
{
return UpdateEditor(shapeFactory, null);
}
public override dynamic UpdateEditor(dynamic shapeFactory, IUpdateModel updater)
{
var customSteps = new List<string>();
_customExportStep.Register(customSteps);
var viewModel = new CustomStepsViewModel
{
CustomSteps = customSteps.Select(x => new CustomStepEntry { CustomStep = x }).ToList()
};
if (updater != null && updater.TryUpdateModel(viewModel, Prefix, null, null))
{
CustomSteps = viewModel.CustomSteps.Where(x => x.IsChecked).Select(x => x.CustomStep).ToList();
}
return shapeFactory.EditorTemplate(TemplateName: "BuilderSteps/CustomSteps", Model: viewModel, Prefix: Prefix);
}
public override void Configure(RecipeBuilderStepConfigurationContext context)
{
var steps = (context.ConfigurationElement.Attr("Steps") ?? "").Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
CustomSteps = steps.ToList();
}
public override void ConfigureDefault()
{
_customExportStep.Register(CustomSteps);
}
public override void Build(BuildContext context)
{
var exportContext = new ExportContext
{
Document = context.RecipeDocument,
ExportOptions = new ExportOptions
{
CustomSteps = CustomSteps
}
};
_exportEventHandlers.Invoke(x => x.Exporting(exportContext), Logger);
_exportEventHandlers.Invoke(x => x.Exported(exportContext), Logger);
}
}
}

View File

@@ -1,12 +0,0 @@
using System;
using System.Collections.Generic;
using Orchard.Events;
namespace Orchard.ImportExport.Services
{
[Obsolete("Implement IRecipeBuilderStep instead.")]
public interface ICustomExportStep : IEventHandler
{
void Register(IList<string> steps);
}
}

View File

@@ -1,13 +0,0 @@
using System;
using Orchard.Events;
using Orchard.ImportExport.Models;
namespace Orchard.ImportExport.Services
{
[Obsolete("Implement IRecipeExecutionStep instead.")]
public interface IExportEventHandler : IEventHandler
{
void Exporting(ExportContext context);
void Exported(ExportContext context);
}
}

View File

@@ -1,8 +0,0 @@
namespace Orchard.ImportExport.ViewModels
{
public class CustomStepEntry
{
public string CustomStep { get; set; }
public bool IsChecked { get; set; }
}
}

View File

@@ -1,9 +0,0 @@
using System.Collections.Generic;
namespace Orchard.ImportExport.ViewModels
{
public class CustomStepsViewModel
{
public IList<CustomStepEntry> CustomSteps { get; set; }
}
}

View File

@@ -1,20 +0,0 @@
@using Orchard.Utility.Extensions
@model Orchard.ImportExport.ViewModels.CustomStepsViewModel
@if (Model.CustomSteps.Any()) {
<fieldset>
<legend>@T("Choose the custom steps to execute in the export file:")</legend>
<ol>
@for (var customStepIndex = 0; customStepIndex < Model.CustomSteps.Count; customStepIndex++) {
var closureIndex = customStepIndex;
<li>
<input type="hidden" value="@Model.CustomSteps[customStepIndex].CustomStep" name="@Html.NameFor(m => m.CustomSteps[closureIndex].CustomStep)" />
<input type="checkbox" value="true" name="@Html.NameFor(m => m.CustomSteps[closureIndex].IsChecked)" id="@Html.NameFor(m => m.CustomSteps[closureIndex].IsChecked)" />
<label class="forcheckbox" for="@Html.NameFor(m => m.CustomSteps[closureIndex].IsChecked)">@Model.CustomSteps[closureIndex].CustomStep.CamelFriendly()</label>
</li>
}
</ol>
</fieldset>
}
else {
<p>@T("There are no additional export steps available.")</p>
}

View File

@@ -130,6 +130,7 @@
<Compile Include="Services\IHostNameProvider.cs" />
<Compile Include="Services\MessageBusNotificationProvider.cs" />
<Compile Include="Handler\MessageBusHandler.cs" />
<Compile Include="Services\SqlServerServiceBrokerFeatureGuard.cs" />
<Compile Include="SqlServerBrokerMigrations.cs" />
<Compile Include="Models\MessageRecord.cs" />
<Compile Include="Services\DefaultMessageBus.cs" />

View File

@@ -0,0 +1,96 @@
using System;
using System.Web.Mvc;
using Orchard.Environment;
using Orchard.Environment.Configuration;
using Orchard.Environment.Extensions.Models;
using Orchard.Environment.Features;
using Orchard.Localization;
using Orchard.Mvc;
using Orchard.Mvc.Filters;
using Orchard.UI.Notify;
namespace Orchard.MessageBus.Services
{
/// <summary>
/// Prevents the SQL Server Service Broker feature from being enabled for tenants that are not using Microsoft SQL
/// Server as their database provider.
/// </summary>
/// <remarks>
/// The implementation is hackish but there seems to be no other way: if it would use <see cref="INotifier"/> it
/// wouldn't work since <see cref="NotifyFilter"/> that writes out notifications to TempData runs before feature
/// events are raised. Thus we have to manually add the messages to TempData, just as the filter would do.
/// </remarks>
public class SqlServerServiceBrokerFeatureGuard : FilterProvider, IFeatureEventHandler, IActionFilter
{
private const string FeatureId = "Orchard.MessageBus.SqlServerServiceBroker";
private const string TempDataKey = FeatureId + ".TempData";
private readonly ShellSettings _shellSettings;
private readonly IFeatureManager _featureManager;
private readonly IHttpContextAccessor _hca;
public Localizer T { get; set; }
public SqlServerServiceBrokerFeatureGuard(
ShellSettings shellSettings,
IFeatureManager featureManager,
IHttpContextAccessor hca)
{
_shellSettings = shellSettings;
_featureManager = featureManager;
_hca = hca;
T = NullLocalizer.Instance;
}
void IActionFilter.OnActionExecuting(ActionExecutingContext filterContext) { }
void IActionFilter.OnActionExecuted(ActionExecutedContext filterContext)
{
var httpContext = _hca.Current();
if (httpContext == null) return;
httpContext.Items[TempDataKey] = filterContext.Controller.TempData;
}
public void Installing(Feature feature) { }
public void Installed(Feature feature) { }
public void Enabling(Feature feature) { }
public void Enabled(Feature feature)
{
if (feature.Descriptor.Id != FeatureId)
return;
if (!_shellSettings.DataProvider.Equals("SqlServer", StringComparison.OrdinalIgnoreCase))
{
_featureManager.DisableFeatures(new[] { FeatureId }, force: true);
AddNotification(
T("The SQL Server Service Broker cannot be enabled because it requires Microsoft SQL Server."),
NotifyType.Error);
}
}
public void Disabling(Feature feature) { }
public void Disabled(Feature feature) { }
public void Uninstalling(Feature feature) { }
public void Uninstalled(Feature feature) { }
private void AddNotification(LocalizedString message, NotifyType notifyType = NotifyType.Warning)
{
var tempDataDictionary = _hca.Current()?.Items[TempDataKey];
if (tempDataDictionary == null) return;
((TempDataDictionary)tempDataDictionary)["messages"] +=
$"{notifyType}:{message.Text}{System.Environment.NewLine}-{System.Environment.NewLine}";
}
}
}

View File

@@ -6,7 +6,7 @@ namespace Orchard.Modules
{
public class Permissions : IPermissionProvider
{
public static readonly Permission ManageFeatures = new Permission { Description = "Manage Features", Name = "ManageFeatures" };
public static readonly Permission ManageFeatures = new Permission { Description = "Manage Features", Name = "ManageFeatures", IsSecurityCritical = true };
public virtual Feature Feature { get; set; }
@@ -25,4 +25,4 @@ namespace Orchard.Modules
};
}
}
}
}

View File

@@ -6,7 +6,7 @@ namespace Orchard.Packaging
{
public class Permissions : IPermissionProvider
{
public static readonly Permission ManagePackages = new Permission { Description = "Manage packages", Name = "ManagePackages" };
public static readonly Permission ManagePackages = new Permission { Description = "Manage packages", Name = "ManagePackages", IsSecurityCritical = true };
public virtual Feature Feature { get; set; }
@@ -21,4 +21,4 @@ namespace Orchard.Packaging
return new List<PermissionStereotype>();
}
}
}
}

View File

@@ -136,7 +136,6 @@
<Compile Include="Services\RecipeStepExecutor.cs" />
<Compile Include="Services\RecipeStepQueue.cs" />
<Compile Include="ViewModels\ContentTypeEntry.cs" />
<Compile Include="ViewModels\CustomStepEntry.cs" />
<Compile Include="ViewModels\ContentBuilderStepViewModel.cs" />
<Compile Include="ViewModels\RecipeResultViewModel.cs" />
<Compile Include="ViewModels\ImportViewModel.cs" />

View File

@@ -1,8 +0,0 @@
namespace Orchard.Recipes.ViewModels
{
public class CustomStepEntry
{
public string CustomStep { get; set; }
public bool IsChecked { get; set; }
}
}

View File

@@ -65,7 +65,16 @@ namespace Orchard.Roles.Controllers
if (!Services.Authorizer.Authorize(Permissions.ManageRoles, T("Not authorized to manage roles")))
return new HttpUnauthorizedResult();
var model = new RolesIndexViewModel { Rows = _roleService.GetRoles().OrderBy(r => r.Name).ToList() };
var securityCriticalPermissions = _roleService.GetSecurityCriticalPermissions().ToHashSet();
var roles = _roleService.GetRoles().OrderBy(r => r.Name).ToList();
var model = new RolesIndexViewModel
{
Rows = roles,
RolesWithSecurityCriticalPermissions = roles.ToDictionary(
role => role.Name,
role => role.RolesPermissions.Any(p => securityCriticalPermissions.Contains(p.Permission.Name)))
};
return View(model);
}
@@ -250,18 +259,21 @@ namespace Orchard.Roles.Controllers
{
return new HttpUnauthorizedResult();
}
var securityCriticalPermissions = _roleService.GetSecurityCriticalPermissions().ToHashSet();
// create the ViewModel used to manage a user's roles
var model = new UserRolesViewModel
{
User = userRolesPart.As<IUser>(),
UserRoles = userRolesPart,
Roles = allRoles.Select(x => new UserRoleEntry
Roles = allRoles.Select(role => new UserRoleEntry
{
RoleId = x.Id,
Name = x.Name,
Granted = userRolesPart.Roles.Contains(x.Name)
RoleId = role.Id,
Name = role.Name,
Granted = userRolesPart.Roles.Contains(role.Name),
HasSecurityCriticalPermissions = role.RolesPermissions.Any(p => securityCriticalPermissions.Contains(p.Permission.Name))
}).ToList(),
AuthorizedRoleIds = authorizedRoleIds
AuthorizedRoleIds = authorizedRoleIds,
};
// this calls the same view used by the driver that lets users with higher

View File

@@ -67,20 +67,22 @@ namespace Orchard.Roles.Drivers
{
return null;
}
var allRoles = _allRoles.Value
.Select(x => new UserRoleEntry
{
RoleId = x.Id,
Name = x.Name,
Granted = userRolesPart.Roles.Contains(x.Name)
});
var securityCriticalPermissions = _roleService.GetSecurityCriticalPermissions().ToHashSet();
var model = new UserRolesViewModel
{
User = userRolesPart.As<IUser>(),
UserRoles = userRolesPart,
Roles = allRoles.ToList(),
AuthorizedRoleIds = authorizedRoleIds
Roles = _allRoles.Value.Select(role => new UserRoleEntry
{
RoleId = role.Id,
Name = role.Name,
Granted = userRolesPart.Roles.Contains(role.Name),
HasSecurityCriticalPermissions = role.RolesPermissions.Any(p => securityCriticalPermissions.Contains(p.Permission.Name))
}).ToList(),
AuthorizedRoleIds = authorizedRoleIds,
};
return shapeHelper.EditorTemplate(TemplateName: TemplateName, Model: model, Prefix: Prefix);
});

View File

@@ -12,8 +12,8 @@ namespace Orchard.Roles
{
private readonly IRepository<RoleRecord> _roleRepository;
public static readonly Permission ManageRoles = new Permission { Description = "Managing Roles", Name = "ManageRoles" };
public static readonly Permission AssignRoles = new Permission { Description = "Assign Roles", Name = "AssignRoles", ImpliedBy = new[] { ManageRoles } };
public static readonly Permission ManageRoles = new Permission { Description = "Managing Roles", Name = "ManageRoles", IsSecurityCritical = true, };
public static readonly Permission AssignRoles = new Permission { Description = "Assign Roles", Name = "AssignRoles", IsSecurityCritical = true, ImpliedBy = new[] { ManageRoles } };
public virtual Feature Feature { get; set; }
@@ -80,4 +80,4 @@ namespace Orchard.Roles
}
}
}
}

View File

@@ -14,6 +14,7 @@ namespace Orchard.Roles.Services
void UpdateRole(int id, string roleName, IEnumerable<string> rolePermissions);
void DeleteRole(int id);
IDictionary<string, IEnumerable<Permission>> GetInstalledPermissions();
IEnumerable<string> GetSecurityCriticalPermissions();
IEnumerable<string> GetPermissionsForRole(int id);
IEnumerable<string> GetPermissionsForRoleByName(string name);
@@ -26,4 +27,4 @@ namespace Orchard.Roles.Services
/// <returns>Returns false if a role with the given name already exits</returns>
bool VerifyRoleUnicity(string name);
}
}
}

View File

@@ -203,6 +203,9 @@ namespace Orchard.Roles.Services
return installedPermissions;
}
public IEnumerable<string> GetSecurityCriticalPermissions() =>
_permissionProviders.SelectMany(pp => pp.GetPermissions().Where(p => p.IsSecurityCritical)).Select(p => p.Name);
public IEnumerable<string> GetPermissionsForRole(int id)
{
var permissions = new List<string>();
@@ -251,4 +254,4 @@ namespace Orchard.Roles.Services
_signals.Trigger(SignalName);
}
}
}
}

View File

@@ -6,5 +6,7 @@ namespace Orchard.Roles.ViewModels
public class RolesIndexViewModel
{
public IList<RoleRecord> Rows { get; set; }
public Dictionary<string, bool> RolesWithSecurityCriticalPermissions { get; set; }
}
}

View File

@@ -23,5 +23,6 @@ namespace Orchard.Roles.ViewModels
public int RoleId { get; set; }
public string Name { get; set; }
public bool Granted { get; set; }
public bool HasSecurityCriticalPermissions { get; set; }
}
}

View File

@@ -1,67 +1,93 @@
@using Orchard.Roles.ViewModels
@model RoleEditViewModel
@using Orchard.Roles.ViewModels;
@{ Layout.Title = T("Edit Role").ToString(); }
@{
Style.Require("FontAwesome");
Layout.Title = T("Edit Role").ToString();
}
@using(Html.BeginFormAntiForgeryPost()) {
@using (Html.BeginFormAntiForgeryPost())
{
@Html.ValidationSummary();
<fieldset>
<legend>@T("Information")</legend>
<label for="pageTitle">@T("Role Name:")</label>
@if (Model.Name == "Administrator") { // the one special case
@if (Model.Name == "Administrator")
{ // the one special case
<input id="Name" class="text" type="text" value="@Model.Name" readonly="readonly" />
<input class="text" name="Name" type="hidden" value="@Model.Name" />
}
else {
else
{
<input id="Name" class="text" name="Name" type="text" value="@Model.Name" />
}
<input type="hidden" value="@Model.Id" name="Id" />
</fieldset>
<fieldset>
<legend>@T("Permissions")</legend>
@foreach (var category in Model.RoleCategoryPermissions.Keys) {
<fieldset>
<legend>@category</legend>
<table class="items">
<colgroup>
<col id="Col1" />
<col id="Col2" />
</colgroup>
<thead>
<tr>
<th scope="col">@T("Permission")</th>
<th scope="col">@T("Allow")</th>
<th scope="col">@T("Effective")</th>
</tr>
</thead>
@foreach (var permission in Model.RoleCategoryPermissions[category]) {
<tr>
<td>@T(permission.Description)</td>
<td style="width:60px;">
@if (Model.CurrentPermissions.Contains(permission.Name)) {
<input type="checkbox" value="true" name="Checkbox.@permission.Name" checked="checked"/>
}
else {
<input type="checkbox" value="true" name="Checkbox.@permission.Name"/>
}
</td>
<td style="width:60px;">
@if (Model.EffectivePermissions.Contains(permission.Name)) {
<input type="checkbox" disabled="disabled" name="Effective.@permission.Name" checked="checked"/>
} else {
<input type="checkbox" disabled="disabled" name="Effective.@permission.Name"/>
}
</td>
</tr>
}
</table>
<p>@T("Allow: Permission is granted explicitly.")</p>
<p>@T("Effective: Permission is implied by a higher level permission, or explicitly granted.")</p>
<br />
@foreach (var category in Model.RoleCategoryPermissions.Keys)
{
<fieldset>
<legend>@category</legend>
<table class="items">
<colgroup>
<col id="Col1" />
<col id="Col2" />
</colgroup>
<thead>
<tr>
<th scope="col">@T("Permission")</th>
<th scope="col">@T("Allow")</th>
<th scope="col">@T("Effective")</th>
</tr>
</thead>
@foreach (var permission in Model.RoleCategoryPermissions[category])
{
<tr>
<td>@T(permission.Description)</td>
<td style="width:60px;">
@if (Model.CurrentPermissions.Contains(permission.Name))
{
<input type="checkbox" value="true" name="Checkbox.@permission.Name" checked="checked" />
}
else
{
<input type="checkbox" value="true" name="Checkbox.@permission.Name" />
}
@if (permission.IsSecurityCritical)
{
<i class="fa-solid fa-triangle-exclamation" style="color: red"
title="@T("This permission could allow a user to elevate their other permissions. Grant it with extreme consideration.")"></i>
}
</td>
<td style="width:60px;">
@if (Model.EffectivePermissions.Contains(permission.Name))
{
<input type="checkbox" disabled="disabled" name="Effective.@permission.Name" checked="checked" />
}
else
{
<input type="checkbox" disabled="disabled" name="Effective.@permission.Name" />
}
</td>
</tr>
}
</table>
</fieldset>
}
}
</fieldset>
<fieldset>
<button class="primaryAction" type="submit" name="submit.Save" value="@T("Save")">@T("Save")</button>
@if (Model.Name != "Administrator") {
<button type="submit" name="submit.Delete" value="@T("Delete")" itemprop="RemoveUrl">@T("Delete")</button>
@if (Model.Name != "Administrator")
{
<button type="submit" name="submit.Delete" value="@T("Delete")" itemprop="RemoveUrl">@T("Delete")</button>
}
</fieldset>
}
}

View File

@@ -1,14 +1,17 @@
@using Orchard.Roles.ViewModels
@model RolesIndexViewModel
@using Orchard.Roles.ViewModels;
@using Orchard.Utility.Extensions;
@{
Script.Require("ShapesBase");
Style.Require("FontAwesome");
Layout.Title = T("Roles").ToString();
}
@using (Html.BeginFormAntiForgeryPost()) {
@Html.ValidationSummary();
@using (Html.BeginFormAntiForgeryPost())
{
@Html.ValidationSummary()
<fieldset class="bulk-actions">
<label for="publishActions">@T("Actions:")</label>
<select id="Select1" name="roleActions">
@@ -31,18 +34,28 @@
<th scope="col"></th>
</tr>
</thead>
@foreach (var row in Model.Rows) {
@foreach (var row in Model.Rows)
{
<tr>
<td><input type="checkbox" value="true" name="@("Checkbox." + row.Id)" /></td>
<td>@Html.ActionLink(row.Name, "Edit", new { row.Id })</td>
<td>
@Html.ActionLink(row.Name, "Edit", new { row.Id })
@if (Model.RolesWithSecurityCriticalPermissions[row.Name])
{
<i class="fa-solid fa-triangle-exclamation" style="color: red"
title="@T("This role contains security critical permissions.")"></i>
}
</td>
<td>
<ul class="action-links">
<li class="action-link">
@Html.ActionLink(T("Edit").ToString(), "Edit", new { row.Id })
</li>
@if (row.Name != "Administrator") {
@if (row.Name != "Administrator")
{
<li class="action-link">
<a href="@Url.Action("Delete", new {row.Id, returnUrl = ViewContext.RequestContext.HttpContext.Request.RawUrl})" itemprop="RemoveUrl UnsafeUrl">@T("Delete")</a>
<a href="@Url.Action("Delete", new {row.Id, returnUrl = ViewContext.RequestContext.HttpContext.Request.RawUrl})"
itemprop="RemoveUrl UnsafeUrl">@T("Delete")</a>
</li>
}
</ul>

View File

@@ -4,13 +4,20 @@
@model UserRolesViewModel
@{
Style.Require("FontAwesome");
}
<fieldset>
<legend>@T("Roles")</legend>
@if (Model.Roles.Count > 0) {
@if (Model.Roles.Count > 0)
{
var index = 0;
foreach (var entry in Model.Roles) {
if (SystemRoles.GetSystemRoles().Contains(entry.Name)) {
foreach (var entry in Model.Roles)
{
if (SystemRoles.GetSystemRoles().Contains(entry.Name))
{
continue;
}
@@ -18,17 +25,26 @@
@Html.Hidden("Roles[" + index + "].Name", entry.Name)
<div>
@if (Model.AuthorizedRoleIds.Contains(entry.RoleId)) {
@if (Model.AuthorizedRoleIds.Contains(entry.RoleId))
{
@Html.CheckBox("Roles[" + index + "].Granted", entry.Granted)
} else {
}
else
{
@Html.CheckBox("Roles[" + index + "].Granted", entry.Granted, new { disabled = true })
}
<label class="forcheckbox" for="@Html.FieldIdFor(m => m.Roles[index].Granted)">@entry.Name</label>
@if (entry.HasSecurityCriticalPermissions)
{
<i class="fa-solid fa-triangle-exclamation" style="color: red" title="@T("This role contains security critical permissions.")"></i>
}
</div>
index++;
}
} else {
}
else
{
<p>@T("There are no roles.")</p>
}
</fieldset>

View File

@@ -5,6 +5,7 @@ using Orchard.ContentManagement.Drivers;
using Orchard.ContentManagement.Handlers;
using Orchard.Indexing;
using Orchard.Localization;
using Orchard.Search.Helpers;
using Orchard.Search.Models;
using Orchard.Search.ViewModels;
@@ -35,7 +36,9 @@ namespace Orchard.Search.Drivers
var model = new SearchSettingsIndexViewModel
{
SelectedIndex = part.SearchIndex,
AvailableIndexes = _indexManager.GetSearchIndexProvider().List().ToList()
AvailableIndexes = _indexManager.HasIndexProvider()
? _indexManager.GetSearchIndexProvider().List().ToList()
: new List<string>()
};
if (updater != null)
@@ -102,7 +105,9 @@ namespace Orchard.Search.Drivers
context.ImportAttribute(part.PartDefinition.Name, "SearchFields", value =>
{
part.Store("SearchFields", value);
part.Store(
"SearchFields",
SearchSettingsHelper.MergeSearchFields(part.SearchFields, SearchSettingsHelper.DeserializeSearchFields(value)));
});
}
}

View File

@@ -27,15 +27,43 @@ namespace Orchard.Search.Helpers
return dictionary;
}
public static string SerializeSearchFields(IDictionary<string, string[]> value)
{
var data = string.Join("|", value.Select(x => string.Format("{0}:{1}", x.Key, string.Join(",", x.Value))));
return data;
}
public static string SerializeSearchFields(IDictionary<string, string[]> value) =>
string.Join("|", value.Select(x => string.Format("{0}:{1}", x.Key, string.Join(",", x.Value))));
public static string[] GetSearchFields(this SearchSettingsPart part, string index)
public static string[] GetSearchFields(this SearchSettingsPart part, string index) =>
part.SearchFields.ContainsKey(index) ? part.SearchFields[index] : new string[0];
/// <summary>
/// Merge existing search index settings with those being imported, with the latter taking precedence.
/// </summary>
/// <param name="existingSearchFields">The existing search indexes with their search fields. The key is the
/// index name and the value is the array of field names.</param>
/// <param name="searchFieldsToAdd">The new search indexes with their search fields to import. The key is the
/// index name and the value is the array of field names.</param>
/// <returns>The merged search indexes with their search fields.</returns>
public static string MergeSearchFields(IDictionary<string, string[]> existingSearchFields, IDictionary<string, string[]> searchFieldsToAdd)
{
return part.SearchFields.ContainsKey(index) ? part.SearchFields[index] : new string[0];
var mergedSearchFields = new Dictionary<string, string[]>();
// Process new search fields to add first so they take precedence.
foreach (var newSearchFieldsToAdd in searchFieldsToAdd.Keys)
{
if (!mergedSearchFields.ContainsKey(newSearchFieldsToAdd))
{
mergedSearchFields.Add(newSearchFieldsToAdd, searchFieldsToAdd[newSearchFieldsToAdd]);
}
}
// Then add existing search fields that are not already present.
foreach (var existingSearchFieldsToAdd in existingSearchFields.Keys)
{
if (!mergedSearchFields.ContainsKey(existingSearchFieldsToAdd))
{
mergedSearchFields.Add(existingSearchFieldsToAdd, existingSearchFields[existingSearchFieldsToAdd]);
}
}
return SerializeSearchFields(mergedSearchFields);
}
}
}
}

View File

@@ -9,12 +9,10 @@ namespace Orchard.SecureSocketsLayer.Filters
public class SecureSocketsLayersFilter : FilterProvider, IActionFilter
{
private readonly ISecureSocketsLayerService _sslService;
private readonly IOrchardServices _orchardServices;
public SecureSocketsLayersFilter(ISecureSocketsLayerService sslService, IOrchardServices orchardServices)
public SecureSocketsLayersFilter(ISecureSocketsLayerService sslService)
{
_sslService = sslService;
_orchardServices = orchardServices;
}
public Localizer T { get; set; }

View File

@@ -1,24 +0,0 @@
using System;
using Orchard.Data.Migration;
namespace Orchard.TaskLease
{
public class TaskLeaseMigrations : DataMigrationImpl
{
public int Create()
{
SchemaBuilder.CreateTable("TaskLeaseRecord",
table => table
.Column<int>("Id", column => column.PrimaryKey().Identity())
.Column<string>("TaskName")
.Column<string>("MachineName")
.Column<DateTime>("UpdatedUtc")
.Column<DateTime>("ExpiredUtc")
.Column<string>("State", c => c.Unlimited())
);
return 1;
}
}
}

View File

@@ -1,17 +0,0 @@
using System;
using Orchard.Data.Conventions;
namespace Orchard.TaskLease.Models
{
public class TaskLeaseRecord
{
public virtual int Id { get; set; }
public virtual string TaskName { get; set; }
public virtual string MachineName { get; set; }
public virtual DateTime UpdatedUtc { get; set; }
public virtual DateTime ExpiredUtc { get; set; }
[StringLengthMax]
public virtual string State { get; set; }
}
}

View File

@@ -1,9 +0,0 @@
Name: Task Lease
AntiForgery: enabled
Author: The Orchard Team
Website: http://www.orchardproject.net
Version: 1.10.4
OrchardVersion: 1.10.4
LifecycleStatus: Deprecated
Description: Provides services to synchronize tasks in a farm environment.
Category: Hosting

View File

@@ -1,139 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{3F72A4E9-7B72-4260-B010-C16EC54F9BAF}</ProjectGuid>
<ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Orchard.TaskLease</RootNamespace>
<AssemblyName>Orchard.TaskLease</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<LangVersion>7.3</LangVersion>
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>4.0</OldToolsVersion>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<TargetFrameworkProfile />
<UseIISExpress>false</UseIISExpress>
<IISExpressSSLPort />
<IISExpressAnonymousAuthentication />
<IISExpressWindowsAuthentication />
<IISExpressUseClassicPipelineMode />
<UseGlobalApplicationHostFile />
<Use64BitIISExpress />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>..\..\..\OrchardBasicCorrectness.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="Autofac, Version=3.5.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Autofac.3.5.2\lib\net40\Autofac.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CSharp" />
<Reference Include="System" />
<Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.Data" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Xml" />
<Reference Include="System.Configuration" />
<Reference Include="System.Xml.Linq" />
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" />
<Content Include="Module.txt" />
</ItemGroup>
<ItemGroup>
<Compile Include="Migrations.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="Models\TaskLeaseRecord.cs" />
<Compile Include="Services\ITaskLeaseService.cs" />
<Compile Include="Services\TaskLeaseService.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\Orchard\Orchard.Framework.csproj">
<Project>{2D1D92BB-4555-4CBE-8D0E-63563D6CE4C6}</Project>
<Name>Orchard.Framework</Name>
<Private>$(MvcBuildViews)</Private>
</ProjectReference>
<ProjectReference Include="..\..\Core\Orchard.Core.csproj">
<Project>{9916839C-39FC-4CEB-A5AF-89CA7E87119F}</Project>
<Name>Orchard.Core</Name>
<Private>$(MvcBuildViews)</Private>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Content Include="Web.config" />
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target> -->
<Target Name="AfterBuild" DependsOnTargets="AfterBuildCompiler">
<PropertyGroup>
<AreasManifestDir>$(ProjectDir)\..\Manifests</AreasManifestDir>
</PropertyGroup>
<!-- If this is an area child project, uncomment the following line:
<CreateAreaManifest AreaName="$(AssemblyName)" AreaType="Child" AreaPath="$(ProjectDir)" ManifestPath="$(AreasManifestDir)" ContentFiles="@(Content)" />
-->
<!-- If this is an area parent project, uncomment the following lines:
<CreateAreaManifest AreaName="$(AssemblyName)" AreaType="Parent" AreaPath="$(ProjectDir)" ManifestPath="$(AreasManifestDir)" ContentFiles="@(Content)" />
<CopyAreaManifests ManifestPath="$(AreasManifestDir)" CrossCopy="false" RenameViews="true" />
-->
</Target>
<Target Name="AfterBuildCompiler" Condition="'$(MvcBuildViews)'=='true'">
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)" />
</Target>
<ProjectExtensions>
<VisualStudio>
<FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
<WebProjectProperties>
<UseIIS>False</UseIIS>
<AutoAssignPort>True</AutoAssignPort>
<DevelopmentServerPort>45979</DevelopmentServerPort>
<DevelopmentServerVPath>/</DevelopmentServerVPath>
<IISUrl>
</IISUrl>
<NTLMAuthentication>False</NTLMAuthentication>
<UseCustomServer>True</UseCustomServer>
<CustomServerUrl>https://github.com/OrchardCMS/Orchard</CustomServerUrl>
<SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>
</WebProjectProperties>
</FlavorProperties>
</VisualStudio>
</ProjectExtensions>
</Project>

View File

@@ -1,34 +0,0 @@
using System.Reflection;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Orchard.TaskLease")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyProduct("Orchard")]
[assembly: AssemblyCopyright("Copyright <20> .NET Foundation")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("3320c438-e92b-4753-bfe5-944f29d13ded")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("1.10.4")]
[assembly: AssemblyFileVersion("1.10.4")]

View File

@@ -1,30 +0,0 @@
using System;
namespace Orchard.TaskLease.Services
{
/// <summary>
/// Describes a service to save and acquire task leases. A task lease can't be acquired by two different machines,
/// for a specific amount of time. Optionnally a State can be saved along with the lease.
/// </summary>
[Obsolete("Use Orchard.Tasks.Locking.IDistributedLockService instead.")]
public interface ITaskLeaseService : IDependency
{
/// <summary>
/// Acquires a lease for the specified task name, and amount of time.
/// </summary>
/// <returns>The state of the lease if it was acquired, otherwise <c>null</c>.</returns>
string Acquire(string taskName, DateTime expiredUtc);
/// <summary>
/// Updates a lease for the current machine if it exists
/// </summary>
void Update(string taskName, string state);
/// <summary>
/// Updates a lease for the current machine if it exists
/// </summary>
void Update(string taskName, string state, DateTime expiredUtc);
}
}

View File

@@ -1,107 +0,0 @@
using System;
using Orchard.Data;
using Orchard.Environment;
using Orchard.Services;
using Orchard.TaskLease.Models;
namespace Orchard.TaskLease.Services
{
/// <summary>
/// Provides a database driven implementation of <see cref="ITaskLeaseService" />
/// </summary>
[Obsolete("Use Orchard.Tasks.Locking.DistributedLockService instead.")]
public class TaskLeaseService : ITaskLeaseService
{
private readonly IRepository<TaskLeaseRecord> _repository;
private readonly IClock _clock;
private readonly IApplicationEnvironment _applicationEnvironment;
public TaskLeaseService(
IRepository<TaskLeaseRecord> repository,
IClock clock,
IApplicationEnvironment applicationEnvironment)
{
_repository = repository;
_clock = clock;
_applicationEnvironment = applicationEnvironment;
}
public string Acquire(string taskName, DateTime expiredUtc)
{
var environmentIdentifier = _applicationEnvironment.GetEnvironmentIdentifier();
// retrieve current lease for the specified task
var taskLease = _repository.Get(x => x.TaskName == taskName);
// create a new lease if there is no current lease for this task
if (taskLease == null)
{
taskLease = new TaskLeaseRecord
{
TaskName = taskName,
MachineName = environmentIdentifier,
State = string.Empty,
UpdatedUtc = _clock.UtcNow,
ExpiredUtc = expiredUtc
};
_repository.Create(taskLease);
_repository.Flush();
return string.Empty;
}
// lease can't be aquired only if for a different machine and it has not expired
if (taskLease.MachineName != environmentIdentifier && taskLease.ExpiredUtc >= _clock.UtcNow)
{
return null;
}
// otherwise update information
taskLease.MachineName = environmentIdentifier;
taskLease.UpdatedUtc = _clock.UtcNow;
taskLease.ExpiredUtc = expiredUtc;
_repository.Flush();
return taskLease.State;
}
public void Update(string taskName, string state)
{
var environmentIdentifier = _applicationEnvironment.GetEnvironmentIdentifier();
// retrieve current lease for the specified task
var taskLease = _repository.Get(x => x.TaskName == taskName && x.MachineName == environmentIdentifier);
if (taskLease == null)
{
return;
}
taskLease.State = state;
_repository.Flush();
}
public void Update(string taskName, string state, DateTime expiredUtc)
{
var environmentIdentifier = _applicationEnvironment.GetEnvironmentIdentifier();
// retrieve current lease for the specified task
var taskLease = _repository.Get(x => x.TaskName == taskName && x.MachineName == environmentIdentifier);
if (taskLease == null)
{
return;
}
taskLease.ExpiredUtc = expiredUtc;
taskLease.State = state;
_repository.Flush();
}
}
}

View File

@@ -1,110 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{3FD9FA96-F7C9-4E98-BF17-DC75D07B7307}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Orchard.TaskLease.Tests</RootNamespace>
<AssemblyName>Orchard.TaskLease.Tests</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<TargetFrameworkProfile>
</TargetFrameworkProfile>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<StartupObject />
</PropertyGroup>
<ItemGroup>
<Reference Include="Autofac, Version=2.2.4.900, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL" />
<Reference Include="Moq, Version=4.0.812.4, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL" />
<Reference Include="NHibernate.ByteCode.Castle">
<HintPath>..\..\..\..\..\..\lib\fluentnhibernate\NHibernate.ByteCode.Castle.dll</HintPath>
</Reference>
<Reference Include="nunit.framework">
<HintPath>..\..\..\Contrib.RewriteRules\bin\nunit.framework.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\..\lib\sqlce\System.Data.SqlServerCe.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System.Xml.Linq" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
<Reference Include="WindowsBase" />
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Services\TaskLeaseServiceTests.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\..\Orchard.Tests.Modules\Orchard.Tests.Modules.csproj">
<Project>{6CB3EB30-F725-45C0-9742-42599BA8E8D2}</Project>
<Name>Orchard.Tests.Modules</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\..\Orchard.Tests\Orchard.Framework.Tests.csproj">
<Project>{ABC826D4-2FA1-4F2F-87DE-E6095F653810}</Project>
<Name>Orchard.Framework.Tests</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\..\Orchard\Orchard.Framework.csproj">
<Project>{2D1D92BB-4555-4CBE-8D0E-63563D6CE4C6}</Project>
<Name>Orchard.Framework</Name>
<Private>$(MvcBuildViews)</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Core\Orchard.Core.csproj">
<Project>{9916839C-39FC-4CEB-A5AF-89CA7E87119F}</Project>
<Name>Orchard.Core</Name>
<Private>$(MvcBuildViews)</Private>
</ProjectReference>
<ProjectReference Include="..\..\Orchard.TaskLease.csproj">
<Project>{3F72A4E9-7B72-4260-B010-C16EC54F9BAF}</Project>
<Name>Orchard.TaskLease</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
<Target Name="CopySqlCeBinaries">
<ItemGroup>
<SqlCeBinariesx86 Include="$(ProjectDir)..\..\lib\sqlce\x86\**\*" />
<SqlCeBinariesx64 Include="$(ProjectDir)..\..\lib\sqlce\amd64\**\*" />
</ItemGroup>
<Copy SourceFiles="@(SqlCeBinariesx86)" DestinationFolder="$(OutputPath)\x86\%(RecursiveDir)" SkipUnchangedFiles="true" />
<Copy SourceFiles="@(SqlCeBinariesx64)" DestinationFolder="$(OutputPath)\amd64\%(RecursiveDir)" SkipUnchangedFiles="true" />
</Target>
<Target Name="AfterBuild">
<CallTarget Targets="CopySqlCeBinaries" />
</Target>
</Project>

View File

@@ -1,36 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Orchard.TaskLease.Tests")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Microsoft")]
[assembly: AssemblyProduct("Orchard.TaskLease.Tests")]
[assembly: AssemblyCopyright("Copyright © Microsoft 2011")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("0435ceba-eada-4dc4-aa03-74a68ccca515")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -1,97 +0,0 @@
using System;
using System.Collections.Generic;
using Autofac;
using Moq;
using NUnit.Framework;
using Orchard.TaskLease.Models;
using Orchard.TaskLease.Services;
using Orchard.Tests.Modules;
namespace Orchard.TaskLease.Tests.Services
{
[TestFixture]
public class TaskLeaseServiceTests : DatabaseEnabledTestsBase
{
private ITaskLeaseService _service;
private Mock<IMachineNameProvider> _machineNameProvider;
protected override IEnumerable<Type> DatabaseTypes
{
get
{
return new[] {
typeof (TaskLeaseRecord)
};
}
}
public override void Register(ContainerBuilder builder)
{
builder.RegisterType<TaskLeaseService>().As<ITaskLeaseService>();
builder.RegisterInstance((_machineNameProvider = new Mock<IMachineNameProvider>()).Object);
_machineNameProvider.Setup(x => x.GetMachineName()).Returns("SkyNet");
}
public override void Init()
{
base.Init();
_service = _container.Resolve<ITaskLeaseService>();
}
[Test]
public void AcquireShouldSucceedIfNoTask()
{
var state = _service.Acquire("Foo", _clock.UtcNow.AddDays(1));
Assert.That(state, Is.EqualTo(String.Empty));
}
[Test]
public void AcquireShouldSucceedIfTaskBySameMachine()
{
var state = _service.Acquire("Foo", _clock.UtcNow.AddDays(1));
Assert.That(state, Is.EqualTo(String.Empty));
state = _service.Acquire("Foo", _clock.UtcNow.AddDays(1));
Assert.That(state, Is.EqualTo(String.Empty));
}
[Test]
public void AcquireShouldNotSucceedIfTaskByOtherMachine()
{
var state = _service.Acquire("Foo", _clock.UtcNow.AddDays(1));
Assert.That(state, Is.EqualTo(String.Empty));
_machineNameProvider.Setup(x => x.GetMachineName()).Returns("TheMatrix");
state = _service.Acquire("Foo", _clock.UtcNow.AddDays(1));
Assert.That(state, Is.EqualTo(null));
}
[Test]
public void ShouldUpdateTask()
{
var state = _service.Acquire("Foo", _clock.UtcNow.AddDays(1));
Assert.That(state, Is.EqualTo(String.Empty));
_service.Update("Foo", "Other");
state = _service.Acquire("Foo", _clock.UtcNow.AddDays(1));
Assert.That(state, Is.EqualTo("Other"));
}
[Test]
public void AcquireShouldSucceedIfTaskByOtherMachineAndExpired()
{
var state = _service.Acquire("Foo", _clock.UtcNow.AddDays(1));
Assert.That(state, Is.EqualTo(String.Empty));
_machineNameProvider.Setup(x => x.GetMachineName()).Returns("TheMatrix");
_clock.Advance(new TimeSpan(2,0,0,0));
state = _service.Acquire("Foo", _clock.UtcNow.AddDays(1));
Assert.That(state, Is.EqualTo(String.Empty));
}
}
}

View File

@@ -1,52 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false"/>
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false"/>
</sectionGroup>
</configSections>
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<pages pageBaseType="Orchard.Mvc.ViewEngines.Razor.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc"/>
<add namespace="System.Web.Mvc.Ajax"/>
<add namespace="System.Web.Mvc.Html"/>
<add namespace="System.Web.Routing"/>
<add namespace="System.Web.WebPages"/>
<add namespace="System.Linq"/>
<add namespace="System.Collections.Generic"/>
<add namespace="Orchard.Mvc.Html"/>
</namespaces>
</pages>
</system.web.webPages.razor>
<system.web>
<compilation targetFramework="4.8">
<assemblies>
<add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Web.Mvc, Version=5.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add assembly="System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</assemblies>
</compilation>
</system.web>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-13.0.0.0" newVersion="13.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="NHibernate" publicKeyToken="AA95F207798DFDB4" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-5.6.0.0" newVersion="5.6.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Autofac" publicKeyToken="17863AF14B0044DA" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-3.5.0.0" newVersion="3.5.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

View File

@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Autofac" version="3.5.2" targetFramework="net48" />
</packages>

View File

@@ -126,7 +126,7 @@ namespace Orchard.Taxonomies.Controllers
}
[HttpPost, ActionName("Create")]
[Mvc.FormValueRequired("submit.Save")]
[FormValueRequired("submit.Save")]
public ActionResult CreatePOST(string returnUrl)
{
return CreatePOST(returnUrl, contentItem =>
@@ -137,7 +137,7 @@ namespace Orchard.Taxonomies.Controllers
}
[HttpPost, ActionName("Create")]
[Mvc.FormValueRequired("submit.Publish")]
[FormValueRequired("submit.Publish")]
public ActionResult CreateAndPublishPOST(string returnUrl)
{
@@ -195,7 +195,7 @@ namespace Orchard.Taxonomies.Controllers
}
[HttpPost, ActionName("Edit")]
[Mvc.FormValueRequired("submit.Save")]
[FormValueRequired("submit.Save")]
public ActionResult EditPOST(int id, string returnUrl)
{
return EditPOST(id, returnUrl, contentItem =>
@@ -206,7 +206,7 @@ namespace Orchard.Taxonomies.Controllers
}
[HttpPost, ActionName("Edit")]
[Mvc.FormValueRequired("submit.Publish")]
[FormValueRequired("submit.Publish")]
public ActionResult EditAndPublishPOST(int id, string returnUrl)
{
var content = _contentManager.Get(id, VersionOptions.Latest);

View File

@@ -10,6 +10,7 @@ using Orchard.Core.Contents.ViewModels;
using Orchard.Data;
using Orchard.DisplayManagement;
using Orchard.Localization;
using Orchard.Mvc;
using Orchard.Mvc.Extensions;
using Orchard.Settings;
using Orchard.UI.Navigation;
@@ -101,7 +102,7 @@ namespace Orchard.Templates.Controllers
}
[HttpPost, ActionName("List")]
[Mvc.FormValueRequired("submit.Filter")]
[FormValueRequired("submit.Filter")]
public ActionResult ListFilterPOST(ContentOptions options)
{
if (!Services.Authorizer.Authorize(Permissions.ManageTemplates, T("Not authorized to manage templates")))
@@ -127,7 +128,7 @@ namespace Orchard.Templates.Controllers
}
[HttpPost, ActionName("List")]
[Mvc.FormValueRequired("submit.BulkEdit")]
[FormValueRequired("submit.BulkEdit")]
public ActionResult ListPOST(ContentOptions options, IEnumerable<int> itemIds, string returnUrl)
{
if (!Services.Authorizer.Authorize(Permissions.ManageTemplates, T("Not authorized to manage templates")))

View File

@@ -6,7 +6,7 @@ namespace Orchard.Templates
{
public class Permissions : IPermissionProvider
{
public static readonly Permission ManageTemplates = new Permission { Description = "Managing Templates", Name = "ManageTemplates" };
public static readonly Permission ManageTemplates = new Permission { Description = "Managing Templates", Name = "ManageTemplates", IsSecurityCritical = true };
public virtual Feature Feature { get; set; }
@@ -39,4 +39,4 @@ namespace Orchard.Templates
};
}
}
}
}

View File

@@ -6,7 +6,7 @@ namespace Orchard.Themes
{
public class Permissions : IPermissionProvider
{
public static readonly Permission ApplyTheme = new Permission { Description = "Apply a Theme", Name = "ApplyTheme" };
public static readonly Permission ApplyTheme = new Permission { Description = "Apply a Theme", Name = "ApplyTheme", IsSecurityCritical = true };
public virtual Feature Feature { get; set; }
@@ -27,4 +27,4 @@ namespace Orchard.Themes
};
}
}
}
}

View File

@@ -7,7 +7,7 @@ namespace Orchard.Users
public class Permissions : IPermissionProvider
{
public static readonly Permission ManageUsers =
new Permission { Description = "Managing Users", Name = "ManageUsers" };
new Permission { Description = "Managing Users", Name = "ManageUsers", IsSecurityCritical = true };
public static readonly Permission ViewUsers =
new Permission { Description = "View List of Users", Name = "ViewUsers", ImpliedBy = new[] { ManageUsers } };
@@ -31,4 +31,4 @@ namespace Orchard.Users
}
}
}
}

View File

@@ -4,8 +4,8 @@
@using Orchard.Users.Models;
@{
var messageManager = WorkContext.Resolve<IMessageManager>();
var emailEnabled = messageManager.GetAvailableChannelServices().Contains("email");
var messageChannelSelector = WorkContext.Resolve<IMessageChannelSelector>();
var emailEnabled = messageChannelSelector.GetChannel("Email", null) != null;
}
<fieldset>

View File

@@ -1,37 +0,0 @@
using System;
using Orchard.Conditions.Services;
using Orchard.Localization;
using Orchard.Widgets.Services;
namespace Orchard.Widgets.Conditions
{
/// <summary>
/// Evaluates rules implementing the deprecated IRuleProvider (third party modules).
/// </summary>
[Obsolete("This is here for backwards compatibility during the deprecation period.")]
public class LegacyRulesEvaluator : IConditionProvider
{
private readonly IRuleProvider _ruleProviders;
public LegacyRulesEvaluator(IRuleProvider ruleProviders)
{
_ruleProviders = ruleProviders;
T = NullLocalizer.Instance;
}
public Localizer T { get; set; }
public void Evaluate(ConditionEvaluationContext evaluationContext)
{
var ruleContext = new RuleContext
{
FunctionName = evaluationContext.FunctionName,
Arguments = evaluationContext.Arguments,
Result = evaluationContext.Result
};
_ruleProviders.Process(ruleContext);
evaluationContext.Result = ruleContext.Result;
}
}
}

View File

@@ -92,7 +92,6 @@
<Compile Include="AdminMenu.cs" />
<Compile Include="Commands\LayerCommands.cs" />
<Compile Include="Commands\WidgetCommands.cs" />
<Compile Include="Conditions\LegacyRulesEvaluator.cs" />
<Compile Include="Controllers\AdminController.cs" />
<Compile Include="ControlWrapper.cs" />
<Compile Include="Drivers\LayerPartDriver.cs" />
@@ -117,14 +116,10 @@
<Compile Include="Conditions\ContentDisplayedRuleProvider.cs" />
<Compile Include="Security\AuthorizationEventHandler.cs" />
<Compile Include="Services\IWidgetCommandsService.cs" />
<Compile Include="Services\RuleManager.cs" />
<Compile Include="Services\DefaultLayerEvaluationService.cs" />
<Compile Include="Services\ILayerEvaluationService.cs" />
<Compile Include="Services\IRuleManager.cs" />
<Compile Include="Services\IRuleProvider.cs" />
<Compile Include="Services\IWidgetsService.cs" />
<Compile Include="Services\LayerResolverSelector.cs" />
<Compile Include="Services\RuleContext.cs" />
<Compile Include="Services\WidgetCommandsService.cs" />
<Compile Include="Services\WidgetsService.cs" />
<Compile Include="Shapes.cs" />

View File

@@ -1,10 +0,0 @@
using System;
namespace Orchard.Widgets.Services
{
[Obsolete("Use Orchard.Conditions.Services.IConditionManager instead.")]
public interface IRuleManager : IDependency
{
bool Matches(string expression);
}
}

View File

@@ -1,11 +0,0 @@
using System;
using Orchard.Events;
namespace Orchard.Widgets.Services
{
[Obsolete("Use Orchard.Conditions.Services.IConditionProvider instead.")]
public interface IRuleProvider : IEventHandler
{
void Process(RuleContext ruleContext);
}
}

View File

@@ -1,12 +0,0 @@
using System;
namespace Orchard.Widgets.Services
{
[Obsolete("Use Orchard.Conditions.Services.ConditionEvaluationContext instead.")]
public class RuleContext
{
public string FunctionName { get; set; }
public object[] Arguments { get; set; }
public object Result { get; set; }
}
}

View File

@@ -1,64 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Orchard.Localization;
using Orchard.Scripting;
namespace Orchard.Widgets.Services
{
[Obsolete("Use Orchard.Conditions.Services.ConditionManager instead.")]
public class RuleManager : IRuleManager
{
private readonly IRuleProvider _ruleProviders;
private readonly IEnumerable<IScriptExpressionEvaluator> _evaluators;
public RuleManager(IRuleProvider ruleProviders, IEnumerable<IScriptExpressionEvaluator> evaluators)
{
_ruleProviders = ruleProviders;
_evaluators = evaluators;
T = NullLocalizer.Instance;
}
public Localizer T { get; set; }
public bool Matches(string expression)
{
var evaluator = _evaluators.FirstOrDefault();
if (evaluator == null)
{
throw new OrchardException(T("There are currently no scripting engines enabled"));
}
var result = evaluator.Evaluate(expression, new List<IGlobalMethodProvider> { new GlobalMethodProvider(this) });
if (!(result is bool))
{
throw new OrchardException(T("Expression is not a boolean value"));
}
return (bool)result;
}
private class GlobalMethodProvider : IGlobalMethodProvider
{
private readonly RuleManager _ruleManager;
public GlobalMethodProvider(RuleManager ruleManager)
{
_ruleManager = ruleManager;
}
public void Process(GlobalMethodContext context)
{
var ruleContext = new RuleContext
{
FunctionName = context.FunctionName,
Arguments = context.Arguments.ToArray(),
Result = context.Result
};
_ruleManager._ruleProviders.Process(ruleContext);
context.Result = ruleContext.Result;
}
}
}
}

View File

@@ -1,11 +0,0 @@
Name: jQuery
Path: Orchard.jQuery
AntiForgery: enabled
Author: The Orchard Team
Website: http://orchardproject.net
Version: 1.10.4
OrchardVersion: 1.10.4
LifecycleStatus: Deprecated
Description: The jQuery module contains the jQuery and related script libraries.
FeatureDescription: A common location for jQuery and related script libraries.
Category: Core

View File

@@ -1,661 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{8F116B06-1C0E-4E4C-9A0A-D2FAB851E768}</ProjectGuid>
<ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Orchard.jQuery</RootNamespace>
<AssemblyName>Orchard.jQuery</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<LangVersion>7.3</LangVersion>
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>4.0</OldToolsVersion>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<TargetFrameworkProfile />
<UseIISExpress>false</UseIISExpress>
<IISExpressSSLPort />
<IISExpressAnonymousAuthentication />
<IISExpressWindowsAuthentication />
<IISExpressUseClassicPipelineMode />
<UseGlobalApplicationHostFile />
<Use64BitIISExpress />
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>..\..\..\OrchardBasicCorrectness.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.4.1.0\lib\net472\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Web.ApplicationServices" />
<Reference Include="System.Web.DynamicData" />
<Reference Include="System.Web.Entity" />
<Reference Include="System.Web.Extensions" />
<Reference Include="System.Web.Helpers, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Microsoft.AspNet.WebPages.3.3.0\lib\net45\System.Web.Helpers.dll</HintPath>
</Reference>
<Reference Include="System.Web.Mvc, Version=5.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Microsoft.AspNet.Mvc.5.3.0\lib\net45\System.Web.Mvc.dll</HintPath>
</Reference>
<Reference Include="System.Web.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Microsoft.AspNet.Razor.3.3.0\lib\net45\System.Web.Razor.dll</HintPath>
</Reference>
<Reference Include="System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Microsoft.AspNet.WebPages.3.3.0\lib\net45\System.Web.WebPages.dll</HintPath>
</Reference>
<Reference Include="System.Web.WebPages.Deployment, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Microsoft.AspNet.WebPages.3.3.0\lib\net45\System.Web.WebPages.Deployment.dll</HintPath>
</Reference>
<Reference Include="System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Microsoft.AspNet.WebPages.3.3.0\lib\net45\System.Web.WebPages.Razor.dll</HintPath>
</Reference>
<Reference Include="System.Xml.Linq" />
</ItemGroup>
<ItemGroup>
<Content Include="Scripts\calendars\jquery.calendars-af.js" />
<Content Include="Scripts\calendars\jquery.calendars-am.js" />
<Content Include="Scripts\calendars\jquery.calendars-ar-DZ.js" />
<Content Include="Scripts\calendars\jquery.calendars-ar-EG.js" />
<Content Include="Scripts\calendars\jquery.calendars-ar.js" />
<Content Include="Scripts\calendars\jquery.calendars-az.js" />
<Content Include="Scripts\calendars\jquery.calendars-bg.js" />
<Content Include="Scripts\calendars\jquery.calendars-bs.js" />
<Content Include="Scripts\calendars\jquery.calendars-ca.js" />
<Content Include="Scripts\calendars\jquery.calendars-cs.js" />
<Content Include="Scripts\calendars\jquery.calendars-da.js" />
<Content Include="Scripts\calendars\jquery.calendars-de-CH.js" />
<Content Include="Scripts\calendars\jquery.calendars-de.js" />
<Content Include="Scripts\calendars\jquery.calendars-el.js" />
<Content Include="Scripts\calendars\jquery.calendars-en-AU.js" />
<Content Include="Scripts\calendars\jquery.calendars-en-GB.js" />
<Content Include="Scripts\calendars\jquery.calendars-en-NZ.js" />
<Content Include="Scripts\calendars\jquery.calendars-eo.js" />
<Content Include="Scripts\calendars\jquery.calendars-es-AR.js" />
<Content Include="Scripts\calendars\jquery.calendars-es-PE.js" />
<Content Include="Scripts\calendars\jquery.calendars-es.js" />
<Content Include="Scripts\calendars\jquery.calendars-et.js" />
<Content Include="Scripts\calendars\jquery.calendars-eu.js" />
<Content Include="Scripts\calendars\jquery.calendars-fa.js" />
<Content Include="Scripts\calendars\jquery.calendars-fi.js" />
<Content Include="Scripts\calendars\jquery.calendars-fo.js" />
<Content Include="Scripts\calendars\jquery.calendars-fr-CH.js" />
<Content Include="Scripts\calendars\jquery.calendars-fr.js" />
<Content Include="Scripts\calendars\jquery.calendars-gl.js" />
<Content Include="Scripts\calendars\jquery.calendars-gu.js" />
<Content Include="Scripts\calendars\jquery.calendars-he.js" />
<Content Include="Scripts\calendars\jquery.calendars-hi-IN.js" />
<Content Include="Scripts\calendars\jquery.calendars-hr.js" />
<Content Include="Scripts\calendars\jquery.calendars-hu.js" />
<Content Include="Scripts\calendars\jquery.calendars-hy.js" />
<Content Include="Scripts\calendars\jquery.calendars-id.js" />
<Content Include="Scripts\calendars\jquery.calendars-is.js" />
<Content Include="Scripts\calendars\jquery.calendars-it.js" />
<Content Include="Scripts\calendars\jquery.calendars-ja.js" />
<Content Include="Scripts\calendars\jquery.calendars-ka.js" />
<Content Include="Scripts\calendars\jquery.calendars-km.js" />
<Content Include="Scripts\calendars\jquery.calendars-ko.js" />
<Content Include="Scripts\calendars\jquery.calendars-lt.js" />
<Content Include="Scripts\calendars\jquery.calendars-lv.js" />
<Content Include="Scripts\calendars\jquery.calendars-me-ME.js" />
<Content Include="Scripts\calendars\jquery.calendars-me.js" />
<Content Include="Scripts\calendars\jquery.calendars-mk.js" />
<Content Include="Scripts\calendars\jquery.calendars-ml.js" />
<Content Include="Scripts\calendars\jquery.calendars-ms.js" />
<Content Include="Scripts\calendars\jquery.calendars-mt.js" />
<Content Include="Scripts\calendars\jquery.calendars-nl-BE.js" />
<Content Include="Scripts\calendars\jquery.calendars-nl.js" />
<Content Include="Scripts\calendars\jquery.calendars-no.js" />
<Content Include="Scripts\calendars\jquery.calendars-pl.js" />
<Content Include="Scripts\calendars\jquery.calendars-pt-BR.js" />
<Content Include="Scripts\calendars\jquery.calendars-rm.js" />
<Content Include="Scripts\calendars\jquery.calendars-ro.js" />
<Content Include="Scripts\calendars\jquery.calendars-ru.js" />
<Content Include="Scripts\calendars\jquery.calendars-sk.js" />
<Content Include="Scripts\calendars\jquery.calendars-sl.js" />
<Content Include="Scripts\calendars\jquery.calendars-sq.js" />
<Content Include="Scripts\calendars\jquery.calendars-sr-SR.js" />
<Content Include="Scripts\calendars\jquery.calendars-sr.js" />
<Content Include="Scripts\calendars\jquery.calendars-sv.js" />
<Content Include="Scripts\calendars\jquery.calendars-ta.js" />
<Content Include="Scripts\calendars\jquery.calendars-th.js" />
<Content Include="Scripts\calendars\jquery.calendars-tr.js" />
<Content Include="Scripts\calendars\jquery.calendars-tt.js" />
<Content Include="Scripts\calendars\jquery.calendars-uk.js" />
<Content Include="Scripts\calendars\jquery.calendars-ur.js" />
<Content Include="Scripts\calendars\jquery.calendars-vi.js" />
<Content Include="Scripts\calendars\jquery.calendars-zh-CN.js" />
<Content Include="Scripts\calendars\jquery.calendars-zh-HK.js" />
<Content Include="Scripts\calendars\jquery.calendars-zh-TW.js" />
<Content Include="Scripts\calendars\jquery.calendars.all.js" />
<Content Include="Scripts\calendars\jquery.calendars.all.min.js" />
<Content Include="Scripts\calendars\jquery.calendars.coptic.js" />
<Content Include="Scripts\calendars\jquery.calendars.coptic.min.js" />
<Content Include="Scripts\calendars\jquery.calendars.ethiopian-am.js" />
<Content Include="Scripts\calendars\jquery.calendars.ethiopian.js" />
<Content Include="Scripts\calendars\jquery.calendars.ethiopian.min.js" />
<Content Include="Scripts\calendars\jquery.calendars.hebrew-he.js" />
<Content Include="Scripts\calendars\jquery.calendars.hebrew.js" />
<Content Include="Scripts\calendars\jquery.calendars.hebrew.min.js" />
<Content Include="Scripts\calendars\jquery.calendars.islamic-ar.js" />
<Content Include="Scripts\calendars\jquery.calendars.islamic-fa.js" />
<Content Include="Scripts\calendars\jquery.calendars.islamic.js" />
<Content Include="Scripts\calendars\jquery.calendars.islamic.min.js" />
<Content Include="Scripts\calendars\jquery.calendars.js" />
<Content Include="Scripts\calendars\jquery.calendars.julian.js" />
<Content Include="Scripts\calendars\jquery.calendars.julian.min.js" />
<Content Include="Scripts\calendars\jquery.calendars.lang.js" />
<Content Include="Scripts\calendars\jquery.calendars.lang.min.js" />
<Content Include="Scripts\calendars\jquery.calendars.mayan.js" />
<Content Include="Scripts\calendars\jquery.calendars.mayan.min.js" />
<Content Include="Scripts\calendars\jquery.calendars.min.js" />
<Content Include="Scripts\calendars\jquery.calendars.nepali-ne.js" />
<Content Include="Scripts\calendars\jquery.calendars.nepali.js" />
<Content Include="Scripts\calendars\jquery.calendars.nepali.min.js" />
<Content Include="Scripts\calendars\jquery.calendars.persian-fa.js" />
<Content Include="Scripts\calendars\jquery.calendars.persian.js" />
<Content Include="Scripts\calendars\jquery.calendars.persian.min.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-af.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-am.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-ar-DZ.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-ar-EG.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-ar.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-az.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-bg.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-bs.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-ca.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-cs.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-da.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-de-CH.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-de.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-el.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-en-AU.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-en-GB.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-en-NZ.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-eo.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-es-AR.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-es-PE.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-es.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-et.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-eu.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-fa.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-fi.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-fo.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-fr-CH.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-fr.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-gl.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-gu.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-he.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-hi-IN.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-hr.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-hu.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-hy.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-id.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-is.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-it.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-ja.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-ka.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-km.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-ko.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-lt.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-lv.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-me-ME.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-me.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-mk.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-ml.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-ms.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-mt.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-nl-BE.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-nl.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-no.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-pl.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-pt-BR.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-rm.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-ro.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-ru.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-sk.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-sl.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-sq.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-sr-SR.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-sr.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-sv.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-ta.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-th.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-tr.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-tt.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-uk.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-ur.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-vi.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-zh-CN.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-zh-HK.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker-zh-TW.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker.ext.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker.ext.min.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker.lang.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker.lang.min.js" />
<Content Include="Scripts\calendars\jquery.calendars.picker.min.js" />
<Content Include="Scripts\calendars\jquery.calendars.plus.js" />
<Content Include="Scripts\calendars\jquery.calendars.plus.min.js" />
<Content Include="Scripts\calendars\jquery.calendars.taiwan-zh-TW.js" />
<Content Include="Scripts\calendars\jquery.calendars.taiwan.js" />
<Content Include="Scripts\calendars\jquery.calendars.taiwan.min.js" />
<Content Include="Scripts\calendars\jquery.calendars.thai-th.js" />
<Content Include="Scripts\calendars\jquery.calendars.thai.js" />
<Content Include="Scripts\calendars\jquery.calendars.thai.min.js" />
<Content Include="Scripts\calendars\jquery.calendars.ummalqura-ar.js" />
<Content Include="Scripts\calendars\jquery.calendars.ummalqura.js" />
<Content Include="Scripts\calendars\jquery.calendars.ummalqura.min.js" />
<Content Include="Scripts\calendars\jquery.calendars.validation.js" />
<Content Include="Scripts\calendars\jquery.calendars.validation.min.js" />
<Content Include="Scripts\colorbox\jquery.colorbox-ar.js" />
<Content Include="Scripts\colorbox\jquery.colorbox-bg.js" />
<Content Include="Scripts\colorbox\jquery.colorbox-ca.js" />
<Content Include="Scripts\colorbox\jquery.colorbox-cs.js" />
<Content Include="Scripts\colorbox\jquery.colorbox-da.js" />
<Content Include="Scripts\colorbox\jquery.colorbox-de.js" />
<Content Include="Scripts\colorbox\jquery.colorbox-es.js" />
<Content Include="Scripts\colorbox\jquery.colorbox-et.js" />
<Content Include="Scripts\colorbox\jquery.colorbox-fa.js" />
<Content Include="Scripts\colorbox\jquery.colorbox-fi.js" />
<Content Include="Scripts\colorbox\jquery.colorbox-fr.js" />
<Content Include="Scripts\colorbox\jquery.colorbox-gl.js" />
<Content Include="Scripts\colorbox\jquery.colorbox-gr.js" />
<Content Include="Scripts\colorbox\jquery.colorbox-he.js" />
<Content Include="Scripts\colorbox\jquery.colorbox-hr.js" />
<Content Include="Scripts\colorbox\jquery.colorbox-hu.js" />
<Content Include="Scripts\colorbox\jquery.colorbox-id.js" />
<Content Include="Scripts\colorbox\jquery.colorbox-it.js" />
<Content Include="Scripts\colorbox\jquery.colorbox-ja.js" />
<Content Include="Scripts\colorbox\jquery.colorbox-kr.js" />
<Content Include="Scripts\colorbox\jquery.colorbox-lt.js" />
<Content Include="Scripts\colorbox\jquery.colorbox-lv.js" />
<Content Include="Scripts\colorbox\jquery.colorbox-my.js" />
<Content Include="Scripts\colorbox\jquery.colorbox-nl.js" />
<Content Include="Scripts\colorbox\jquery.colorbox-no.js" />
<Content Include="Scripts\colorbox\jquery.colorbox-pl.js" />
<Content Include="Scripts\colorbox\jquery.colorbox-pt-br.js" />
<Content Include="Scripts\colorbox\jquery.colorbox-ro.js" />
<Content Include="Scripts\colorbox\jquery.colorbox-ru.js" />
<Content Include="Scripts\colorbox\jquery.colorbox-si.js" />
<Content Include="Scripts\colorbox\jquery.colorbox-sk.js" />
<Content Include="Scripts\colorbox\jquery.colorbox-sr.js" />
<Content Include="Scripts\colorbox\jquery.colorbox-sv.js" />
<Content Include="Scripts\colorbox\jquery.colorbox-tr.js" />
<Content Include="Scripts\colorbox\jquery.colorbox-uk.js" />
<Content Include="Scripts\colorbox\jquery.colorbox-zh-CN.js" />
<Content Include="Scripts\colorbox\jquery.colorbox-zh-TW.js" />
<Content Include="Scripts\jquery-1.11.1.js" />
<Content Include="Scripts\jquery-1.11.1.min.js" />
<Content Include="Scripts\jquery-migrate-1.2.1.js" />
<Content Include="Scripts\jquery-migrate-1.2.1.min.js" />
<Content Include="Scripts\colorbox\jquery.colorbox.min.js" />
<Content Include="Scripts\colorbox\jquery.colorbox.js" />
<Content Include="Scripts\jquery.cookie.js" />
<Content Include="Scripts\jquery.cookie.min.js">
<DependentUpon>jquery.cookie.js</DependentUpon>
</Content>
<Content Include="Scripts\jquery.plugin.js" />
<Content Include="Scripts\jquery.plugin.min.js" />
<Content Include="Scripts\timeentry\jquery.timeentry-ar.js" />
<Content Include="Scripts\timeentry\jquery.timeentry-ca.js" />
<Content Include="Scripts\timeentry\jquery.timeentry-cs.js" />
<Content Include="Scripts\timeentry\jquery.timeentry-de.js" />
<Content Include="Scripts\timeentry\jquery.timeentry-es.js" />
<Content Include="Scripts\timeentry\jquery.timeentry-fa.js" />
<Content Include="Scripts\timeentry\jquery.timeentry-fr.js" />
<Content Include="Scripts\timeentry\jquery.timeentry-hu.js" />
<Content Include="Scripts\timeentry\jquery.timeentry-is.js" />
<Content Include="Scripts\timeentry\jquery.timeentry-it.js" />
<Content Include="Scripts\timeentry\jquery.timeentry-ja.js" />
<Content Include="Scripts\timeentry\jquery.timeentry-lt.js" />
<Content Include="Scripts\timeentry\jquery.timeentry-lv.js" />
<Content Include="Scripts\timeentry\jquery.timeentry-nl.js" />
<Content Include="Scripts\timeentry\jquery.timeentry-pl.js" />
<Content Include="Scripts\timeentry\jquery.timeentry-pt.js" />
<Content Include="Scripts\timeentry\jquery.timeentry-ro.js" />
<Content Include="Scripts\timeentry\jquery.timeentry-ru.js" />
<Content Include="Scripts\timeentry\jquery.timeentry-sk.js" />
<Content Include="Scripts\timeentry\jquery.timeentry-sv.js" />
<Content Include="Scripts\timeentry\jquery.timeentry-tr.js" />
<Content Include="Scripts\timeentry\jquery.timeentry-vi.js" />
<Content Include="Scripts\timeentry\jquery.timeentry-zh-CN.js" />
<Content Include="Scripts\timeentry\jquery.timeentry-zh-TW.js" />
<Content Include="Scripts\timeentry\jquery.timeentry.js" />
<Content Include="Scripts\timeentry\jquery.timeentry.min.js" />
<Content Include="Scripts\ui\accordion.js" />
<Content Include="Scripts\ui\accordion.min.js">
<DependentUpon>accordion.js</DependentUpon>
</Content>
<Content Include="Scripts\ui\autocomplete.js" />
<Content Include="Scripts\ui\autocomplete.min.js">
<DependentUpon>autocomplete.js</DependentUpon>
</Content>
<Content Include="Scripts\ui\button.js" />
<Content Include="Scripts\ui\button.min.js">
<DependentUpon>button.js</DependentUpon>
</Content>
<Content Include="Scripts\ui\core.js" />
<Content Include="Scripts\ui\core.min.js">
<DependentUpon>core.js</DependentUpon>
</Content>
<Content Include="Scripts\ui\datepicker.js" />
<Content Include="Scripts\ui\datepicker.min.js">
<DependentUpon>datepicker.js</DependentUpon>
</Content>
<Content Include="Scripts\ui\dialog.js" />
<Content Include="Scripts\ui\dialog.min.js">
<DependentUpon>dialog.js</DependentUpon>
</Content>
<Content Include="Scripts\ui\draggable.js" />
<Content Include="Scripts\ui\draggable.min.js">
<DependentUpon>draggable.js</DependentUpon>
</Content>
<Content Include="Scripts\ui\droppable.js" />
<Content Include="Scripts\ui\droppable.min.js">
<DependentUpon>droppable.js</DependentUpon>
</Content>
<Content Include="Scripts\ui\effect-blind.js" />
<Content Include="Scripts\ui\effect-blind.min.js">
<DependentUpon>effect-blind.js</DependentUpon>
</Content>
<Content Include="Scripts\ui\effect-bounce.js" />
<Content Include="Scripts\ui\effect-bounce.min.js">
<DependentUpon>effect-bounce.js</DependentUpon>
</Content>
<Content Include="Scripts\ui\effect-clip.js" />
<Content Include="Scripts\ui\effect-clip.min.js">
<DependentUpon>effect-clip.js</DependentUpon>
</Content>
<Content Include="Scripts\ui\effect-drop.js" />
<Content Include="Scripts\ui\effect-drop.min.js">
<DependentUpon>effect-drop.js</DependentUpon>
</Content>
<Content Include="Scripts\ui\effect-explode.js" />
<Content Include="Scripts\ui\effect-explode.min.js">
<DependentUpon>effect-explode.js</DependentUpon>
</Content>
<Content Include="Scripts\ui\effect-fade.js" />
<Content Include="Scripts\ui\effect-fade.min.js">
<DependentUpon>effect-fade.js</DependentUpon>
</Content>
<Content Include="Scripts\ui\effect-fold.js" />
<Content Include="Scripts\ui\effect-fold.min.js">
<DependentUpon>effect-fold.js</DependentUpon>
</Content>
<Content Include="Scripts\ui\effect-highlight.js" />
<Content Include="Scripts\ui\effect-highlight.min.js">
<DependentUpon>effect-highlight.js</DependentUpon>
</Content>
<Content Include="Scripts\ui\effect-puff.js" />
<Content Include="Scripts\ui\effect-puff.min.js">
<DependentUpon>effect-puff.js</DependentUpon>
</Content>
<Content Include="Scripts\ui\effect-pulsate.js" />
<Content Include="Scripts\ui\effect-pulsate.min.js">
<DependentUpon>effect-pulsate.js</DependentUpon>
</Content>
<Content Include="Scripts\ui\effect-scale.js" />
<Content Include="Scripts\ui\effect-scale.min.js">
<DependentUpon>effect-scale.js</DependentUpon>
</Content>
<Content Include="Scripts\ui\effect-shake.js" />
<Content Include="Scripts\ui\effect-shake.min.js">
<DependentUpon>effect-shake.js</DependentUpon>
</Content>
<Content Include="Scripts\ui\effect-size.js" />
<Content Include="Scripts\ui\effect-size.min.js">
<DependentUpon>effect-size.js</DependentUpon>
</Content>
<Content Include="Scripts\ui\effect-slide.js" />
<Content Include="Scripts\ui\effect-slide.min.js">
<DependentUpon>effect-slide.js</DependentUpon>
</Content>
<Content Include="Scripts\ui\effect-transfer.js" />
<Content Include="Scripts\ui\effect-transfer.min.js">
<DependentUpon>effect-transfer.js</DependentUpon>
</Content>
<Content Include="Scripts\ui\effect.js" />
<Content Include="Scripts\ui\effect.min.js">
<DependentUpon>effect.js</DependentUpon>
</Content>
<Content Include="Scripts\ui\jquery-ui.js" />
<Content Include="Scripts\ui\jquery-ui.min.js" />
<Content Include="Scripts\ui\menu.js" />
<Content Include="Scripts\ui\menu.min.js">
<DependentUpon>menu.js</DependentUpon>
</Content>
<Content Include="Scripts\ui\mouse.js" />
<Content Include="Scripts\ui\mouse.min.js">
<DependentUpon>mouse.js</DependentUpon>
</Content>
<Content Include="Scripts\ui\position.js" />
<Content Include="Scripts\ui\position.min.js">
<DependentUpon>position.js</DependentUpon>
</Content>
<Content Include="Scripts\ui\progressbar.js" />
<Content Include="Scripts\ui\progressbar.min.js">
<DependentUpon>progressbar.js</DependentUpon>
</Content>
<Content Include="Scripts\ui\resizable.js" />
<Content Include="Scripts\ui\resizable.min.js">
<DependentUpon>resizable.js</DependentUpon>
</Content>
<Content Include="Scripts\ui\selectable.js" />
<Content Include="Scripts\ui\selectable.min.js">
<DependentUpon>selectable.js</DependentUpon>
</Content>
<Content Include="Scripts\ui\selectmenu.js" />
<Content Include="Scripts\ui\selectmenu.min.js">
<DependentUpon>selectmenu.js</DependentUpon>
</Content>
<Content Include="Scripts\ui\slider.js" />
<Content Include="Scripts\ui\slider.min.js">
<DependentUpon>slider.js</DependentUpon>
</Content>
<Content Include="Scripts\ui\sortable.js" />
<Content Include="Scripts\ui\sortable.min.js">
<DependentUpon>sortable.js</DependentUpon>
</Content>
<Content Include="Scripts\ui\spinner.js" />
<Content Include="Scripts\ui\spinner.min.js">
<DependentUpon>spinner.js</DependentUpon>
</Content>
<Content Include="Scripts\ui\tabs.js" />
<Content Include="Scripts\ui\tabs.min.js">
<DependentUpon>tabs.js</DependentUpon>
</Content>
<Content Include="Scripts\ui\tooltip.js" />
<Content Include="Scripts\ui\tooltip.min.js">
<DependentUpon>tooltip.js</DependentUpon>
</Content>
<Content Include="Scripts\ui\widget.js" />
<Content Include="Scripts\ui\widget.min.js">
<DependentUpon>widget.js</DependentUpon>
</Content>
<Content Include="Styles\colorbox.css" />
<Content Include="Styles\jquery-datetime-editor.css" />
<Content Include="Styles\images\calendar-blue.gif" />
<Content Include="Styles\images\calendar-green.gif" />
<Content Include="Styles\images\calendar.gif" />
<Content Include="Styles\images\colorbox\border.png" />
<Content Include="Styles\images\colorbox\controls.png" />
<Content Include="Styles\images\colorbox\loading.gif" />
<Content Include="Styles\images\colorbox\loading_background.png" />
<Content Include="Scripts\jquery.fileupload.js" />
<Content Include="Scripts\jquery.fileupload.min.js">
<DependentUpon>jquery.fileupload.js</DependentUpon>
</Content>
<Content Include="Scripts\jquery.iframe-transport.js" />
<Content Include="Scripts\jquery.iframe-transport.min.js">
<DependentUpon>jquery.iframe-transport.js</DependentUpon>
</Content>
<Content Include="Scripts\jquery.utils.js" />
<Content Include="Styles\images\spinnerBlue.png" />
<Content Include="Styles\images\spinnerBlueBig.png" />
<Content Include="Styles\images\spinnerDefault.png" />
<Content Include="Styles\images\spinnerDefaultBig.png" />
<Content Include="Styles\images\spinnerGem.png" />
<Content Include="Styles\images\spinnerGemBig.png" />
<Content Include="Styles\images\spinnerGreen.png" />
<Content Include="Styles\images\spinnerGreenBig.png" />
<Content Include="Styles\images\spinnerOrange.png" />
<Content Include="Styles\images\spinnerOrangeBig.png" />
<Content Include="Styles\images\spinnerSquare.png" />
<Content Include="Styles\images\spinnerSquareBig.png" />
<Content Include="Styles\images\spinnerText.png" />
<Content Include="Styles\images\spinnerTextBig.png" />
<Content Include="Styles\images\spinnerUpDown.png" />
<Content Include="Styles\images\spinnerUpDownBig.png" />
<Content Include="Styles\images\ui-bg_flat_0_aaaaaa_40x100.png" />
<Content Include="Styles\images\ui-bg_flat_75_ffffff_40x100.png" />
<Content Include="Styles\images\ui-bg_glass_55_fbf9ee_1x400.png" />
<Content Include="Styles\images\ui-bg_glass_65_ffffff_1x400.png" />
<Content Include="Styles\images\ui-bg_glass_75_dadada_1x400.png" />
<Content Include="Styles\images\ui-bg_glass_75_e6e6e6_1x400.png" />
<Content Include="Styles\images\ui-bg_glass_95_fef1ec_1x400.png" />
<Content Include="Styles\images\ui-bg_highlight-soft_75_cccccc_1x100.png" />
<Content Include="Styles\images\ui-icons_222222_256x240.png" />
<Content Include="Styles\images\ui-icons_2e83ff_256x240.png" />
<Content Include="Styles\images\ui-icons_454545_256x240.png" />
<Content Include="Styles\images\ui-icons_888888_256x240.png" />
<Content Include="Styles\images\ui-icons_cd0a0a_256x240.png" />
<Content Include="Styles\jquery-ui.css" />
<Content Include="Styles\jquery-ui.min.css" />
<Content Include="Styles\jquery-ui.structure.css" />
<Content Include="Styles\jquery-ui.structure.min.css" />
<Content Include="Styles\jquery-ui.theme.css" />
<Content Include="Styles\jquery-ui.theme.min.css" />
<Content Include="Styles\jquery.calendars.picker.css" />
<Content Include="Styles\jquery.timeentry.css" />
<Content Include="Styles\ui.calendars.picker.css" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\Orchard\Orchard.Framework.csproj">
<Project>{2D1D92BB-4555-4CBE-8D0E-63563D6CE4C6}</Project>
<Name>Orchard.Framework</Name>
<Private>$(MvcBuildViews)</Private>
</ProjectReference>
<ProjectReference Include="..\..\Core\Orchard.Core.csproj">
<Project>{9916839C-39FC-4CEB-A5AF-89CA7E87119F}</Project>
<Name>Orchard.Core</Name>
<Private>$(MvcBuildViews)</Private>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Content Include="Module.txt" />
</ItemGroup>
<ItemGroup>
<Compile Include="ResourceManifest.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<Content Include="Scripts\Web.config">
<SubType>Designer</SubType>
</Content>
</ItemGroup>
<ItemGroup>
<Content Include="Styles\Web.config">
<SubType>Designer</SubType>
</Content>
</ItemGroup>
<ItemGroup>
<Content Include="Web.config" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\CalendarsPickerLocalization.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\TimeEntryLocalization.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\EditorTemplates\DateTimeEditor.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Scripts\jquery-1.11.1.min.map" />
</ItemGroup>
<ItemGroup>
<Content Include="Scripts\jquery.cookie.min.js.map">
<DependentUpon>jquery.cookie.min.js</DependentUpon>
</Content>
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target> -->
<Target Name="AfterBuild" DependsOnTargets="AfterBuildCompiler">
<PropertyGroup>
<AreasManifestDir>$(ProjectDir)\..\Manifests</AreasManifestDir>
</PropertyGroup>
<!-- If this is an area child project, uncomment the following line:
<CreateAreaManifest AreaName="$(AssemblyName)" AreaType="Child" AreaPath="$(ProjectDir)" ManifestPath="$(AreasManifestDir)" ContentFiles="@(Content)" />
-->
<!-- If this is an area parent project, uncomment the following lines:
<CreateAreaManifest AreaName="$(AssemblyName)" AreaType="Parent" AreaPath="$(ProjectDir)" ManifestPath="$(AreasManifestDir)" ContentFiles="@(Content)" />
<CopyAreaManifests ManifestPath="$(AreasManifestDir)" CrossCopy="false" RenameViews="true" />
-->
</Target>
<Target Name="AfterBuildCompiler" Condition="'$(MvcBuildViews)'=='true'">
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)" />
</Target>
<ProjectExtensions>
<VisualStudio>
<FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
<WebProjectProperties>
<UseIIS>False</UseIIS>
<AutoAssignPort>True</AutoAssignPort>
<DevelopmentServerPort>16146</DevelopmentServerPort>
<DevelopmentServerVPath>/</DevelopmentServerVPath>
<IISUrl>
</IISUrl>
<NTLMAuthentication>False</NTLMAuthentication>
<UseCustomServer>True</UseCustomServer>
<CustomServerUrl>https://github.com/OrchardCMS/Orchard/</CustomServerUrl>
<SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>
</WebProjectProperties>
</FlavorProperties>
</VisualStudio>
</ProjectExtensions>
</Project>

View File

@@ -1,34 +0,0 @@
using System.Reflection;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Orchard.jQuery")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyProduct("Orchard")]
[assembly: AssemblyCopyright("Copyright © .NET Foundation")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("8F116B06-1C0E-4E4C-9A0A-D2FAB851E768")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("1.10.4")]
[assembly: AssemblyFileVersion("1.10.4")]

View File

@@ -1,88 +0,0 @@
using Orchard.UI.Resources;
namespace Orchard.jQuery
{
public class ResourceManifest : IResourceManifestProvider
{
public void BuildManifests(ResourceManifestBuilder builder)
{
var manifest = builder.Add();
manifest.DefineScript("jQuery").SetUrl("jquery-1.11.1.min.js", "jquery-1.11.1.js").SetVersion("1.11.1").SetCdn("//ajax.aspnetcdn.com/ajax/jQuery/jquery-1.11.1.min.js", "//ajax.aspnetcdn.com/ajax/jQuery/jquery-1.11.1.js");
manifest.DefineScript("jQueryMigrate").SetUrl("jquery-migrate-1.2.1.min.js", "jquery-migrate-1.2.1.js").SetVersion("1.2.1").SetCdn("//ajax.aspnetcdn.com/ajax/jquery.migrate/jquery-migrate-1.2.1.min.js", "//ajax.aspnetcdn.com/ajax/jquery.migrate/jquery-migrate-1.2.1.js");
// Full jQuery UI package.
manifest.DefineScript("jQueryUI").SetUrl("ui/jquery-ui.min.js", "ui/jquery-ui.js").SetVersion("1.11.2").SetDependencies("jQuery").SetCdn("//ajax.aspnetcdn.com/ajax/jquery.ui/1.11.2/jquery-ui.min.js", "//ajax.aspnetcdn.com/ajax/jquery.ui/1.11.2/jquery-ui.js");
manifest.DefineStyle("jQueryUI").SetUrl("jquery-ui.min.css", "jquery-ui.css").SetVersion("1.11.2");
manifest.DefineStyle("jQueryUI_Structure").SetUrl("jquery-ui.structure.min.css", "jquery-ui.structure.css").SetVersion("1.11.2");
manifest.DefineStyle("jQueryUI_Theme").SetUrl("jquery-ui.theme.min.css", "jquery-ui.theme.css").SetVersion("1.11.2");
manifest.DefineStyle("jQueryUI_Orchard").SetVersion("1.11.2").SetDependencies("jQueryUI", "jQueryUI_Structure", "jQueryUI_Theme");
// Individual jQuery UI components.
manifest.DefineScript("jQueryUI_Core").SetUrl("ui/core.min.js", "ui/core.js").SetVersion("1.11.2").SetDependencies("jQuery");
manifest.DefineScript("jQueryUI_Widget").SetUrl("ui/widget.min.js", "ui/widget.js").SetVersion("1.11.2").SetDependencies("jQuery");
manifest.DefineScript("jQueryUI_Mouse").SetUrl("ui/mouse.min.js", "ui/mouse.js").SetVersion("1.11.2").SetDependencies("jQuery", "jQueryUI_Widget");
manifest.DefineScript("jQueryUI_Position").SetUrl("ui/position.min.js", "ui/position.js").SetVersion("1.11.2").SetDependencies("jQuery");
manifest.DefineScript("jQueryUI_Draggable").SetUrl("ui/draggable.min.js", "ui/draggable.js").SetVersion("1.11.2").SetDependencies("jQueryUI_Core", "jQueryUI_Widget", "jQueryUI_Mouse");
manifest.DefineScript("jQueryUI_Droppable").SetUrl("ui/droppable.min.js", "ui/droppable.js").SetVersion("1.11.2").SetDependencies("jQueryUI_Core", "jQueryUI_Widget", "jQueryUI_Mouse", "jQueryUI_Draggable");
manifest.DefineScript("jQueryUI_Resizable").SetUrl("ui/resizable.min.js", "ui/resizable.js").SetVersion("1.11.2").SetDependencies("jQueryUI_Core", "jQueryUI_Widget", "jQueryUI_Mouse");
manifest.DefineScript("jQueryUI_Selectable").SetUrl("ui/selectable.min.js", "ui/selectable.js").SetVersion("1.11.2").SetDependencies("jQueryUI_Core", "jQueryUI_Widget", "jQueryUI_Mouse");
manifest.DefineScript("jQueryUI_Sortable").SetUrl("ui/sortable.min.js", "ui/sortable.js").SetVersion("1.11.2").SetDependencies("jQueryUI_Core", "jQueryUI_Widget", "jQueryUI_Mouse");
manifest.DefineScript("jQueryUI_Accordion").SetUrl("ui/accordion.min.js", "ui/accordion.js").SetVersion("1.11.2").SetDependencies("jQueryUI_Core", "jQueryUI_Widget");
manifest.DefineScript("jQueryUI_Autocomplete").SetUrl("ui/autocomplete.min.js", "ui/autocomplete.js").SetVersion("1.11.2").SetDependencies("jQueryUI_Core", "jQueryUI_Widget", "jQueryUI_Position", "jQueryUI_Menu");
manifest.DefineScript("jQueryUI_Button").SetUrl("ui/button.min.js", "ui/button.js").SetVersion("1.11.2").SetDependencies("jQueryUI_Core", "jQueryUI_Widget");
manifest.DefineScript("jQueryUI_Dialog").SetUrl("ui/dialog.min.js", "ui/dialog.js").SetVersion("1.11.2").SetDependencies("jQueryUI_Core", "jQueryUI_Widget", "jQueryUI_Position", "jQueryUI_Mouse", "jQueryUI_Draggable", "jQueryUI_Resizable", "jQueryUI_Button");
manifest.DefineScript("jQueryUI_Slider").SetUrl("ui/slider.min.js", "ui/slider.js").SetVersion("1.11.2").SetDependencies("jQueryUI_Core", "jQueryUI_Widget", "jQueryUI_Mouse");
manifest.DefineScript("jQueryUI_Tabs").SetUrl("ui/tabs.min.js", "ui/tabs.js").SetVersion("1.11.2").SetDependencies("jQueryUI_Core", "jQueryUI_Widget");
manifest.DefineScript("jQueryUI_DatePicker").SetUrl("ui/datepicker.min.js", "ui/datepicker.js").SetVersion("1.11.2").SetDependencies("jQueryUI_Core");
manifest.DefineScript("jQueryUI_Progressbar").SetUrl("ui/progressbar.min.js", "ui/progressbar.js").SetVersion("1.11.2").SetDependencies("jQueryUI_Core", "jQueryUI_Widget");
manifest.DefineScript("jQueryUI_SelectMenu").SetUrl("ui/selectmenu.min.js", "ui/selectmenu.js").SetVersion("1.11.2").SetDependencies("jQueryUI_Core", "jQueryUI_Widget", "jQueryUI_Position", "jQueryUI_Menu");
manifest.DefineScript("jQueryUI_Spinner").SetUrl("ui/spinner.min.js", "ui/spinner.js").SetVersion("1.11.2").SetDependencies("jQueryUI_Core", "jQueryUI_Widget", "jQueryUI_Button");
manifest.DefineScript("jQueryUI_Tooltip").SetUrl("ui/tooltip.min.js", "ui/tooltip.js").SetVersion("1.11.2").SetDependencies("jQueryUI_Core", "jQueryUI_Widget", "jQueryUI_Position");
manifest.DefineScript("jQueryUI_Menu").SetUrl("ui/menu.min.js", "ui/menu.js").SetVersion("1.11.2").SetDependencies("jQueryUI_Core", "jQueryUI_Widget", "jQueryUI_Position");
manifest.DefineScript("jQueryEffects_Core").SetUrl("ui/effect.min.js", "ui/effect.js").SetVersion("1.11.2").SetDependencies("jQuery");
manifest.DefineScript("jQueryEffects_Blind").SetUrl("ui/effect-blind.min.js", "ui/effect-blind.js").SetVersion("1.11.2").SetDependencies("jQueryEffects_Core");
manifest.DefineScript("jQueryEffects_Bounce").SetUrl("ui/effect-bounce.min.js", "ui/effect-bounce.js").SetVersion("1.11.2").SetDependencies("jQueryEffects_Core");
manifest.DefineScript("jQueryEffects_Clip").SetUrl("ui/effect-clip.min.js", "ui/effect-clip.js").SetVersion("1.11.2").SetDependencies("jQueryEffects_Core");
manifest.DefineScript("jQueryEffects_Drop").SetUrl("ui/effect-drop.min.js", "ui/effect-drop.js").SetVersion("1.11.2").SetDependencies("jQueryEffects_Core");
manifest.DefineScript("jQueryEffects_Explode").SetUrl("ui/effect-explode.min.js", "ui/effect-explode.js").SetVersion("1.11.2").SetDependencies("jQueryEffects_Core");
manifest.DefineScript("jQueryEffects_Fade").SetUrl("ui/effect-fade.min.js", "ui/effect-fade.js").SetVersion("1.11.2").SetDependencies("jQueryEffects_Core");
manifest.DefineScript("jQueryEffects_Fold").SetUrl("ui/effect-fold.min.js", "ui/effect-fold.js").SetVersion("1.11.2").SetDependencies("jQueryEffects_Core");
manifest.DefineScript("jQueryEffects_Highlight").SetUrl("ui/effect-highlight.min.js", "ui/effect-highlight.js").SetVersion("1.11.2").SetDependencies("jQueryEffects_Core");
manifest.DefineScript("jQueryEffects_Puff").SetUrl("ui/effect-puff.min.js", "ui/effect-puff.js").SetVersion("1.11.2").SetDependencies("jQueryEffects_Core");
manifest.DefineScript("jQueryEffects_Pulsate").SetUrl("ui/effect-pulsate.min.js", "ui/effect-pulsate.js").SetVersion("1.11.2").SetDependencies("jQueryEffects_Core");
manifest.DefineScript("jQueryEffects_Scale").SetUrl("ui/effect-scale.min.js", "ui/effect-scale.js").SetVersion("1.11.2").SetDependencies("jQueryEffects_Core");
manifest.DefineScript("jQueryEffects_Shake").SetUrl("ui/effect-shake.min.js", "ui/effect-shake.js").SetVersion("1.11.2").SetDependencies("jQueryEffects_Core");
manifest.DefineScript("jQueryEffects_Size").SetUrl("ui/effect-size.min.js", "ui/effect-size.js").SetVersion("1.11.2").SetDependencies("jQueryEffects_Core");
manifest.DefineScript("jQueryEffects_Slide").SetUrl("ui/effect-slide.min.js", "ui/effect-slide.js").SetVersion("1.11.2").SetDependencies("jQueryEffects_Core");
manifest.DefineScript("jQueryEffects_Transfer").SetUrl("ui/effect-transfer.min.js", "ui/effect-transfer.js").SetVersion("1.11.2").SetDependencies("jQueryEffects_Core");
// Additional utilities and plugins.
manifest.DefineScript("jQueryUtils").SetUrl("jquery.utils.js").SetDependencies("jQuery");
manifest.DefineScript("jQueryPlugin").SetUrl("jquery.plugin.min.js", "jquery.plugin.js").SetDependencies("jQuery");
// jQuery Calendars.
manifest.DefineScript("jQueryCalendars_All").SetUrl("calendars/jquery.calendars.all.min.js", "calendars/jquery.calendars.all.js").SetDependencies("jQueryPlugin").SetVersion("2.0.0");
manifest.DefineScript("jQueryCalendars_Picker_Ext").SetUrl("calendars/jquery.calendars.picker.ext.min.js", "calendars/jquery.calendars.picker.ext.js").SetDependencies("jQueryCalendars_Picker").SetVersion("2.0.0");
manifest.DefineStyle("jQueryCalendars_Picker").SetUrl("jquery.calendars.picker.css").SetVersion("2.0.0");
manifest.DefineStyle("jQueryUI_Calendars_Picker").SetUrl("ui.calendars.picker.css").SetDependencies("jQueryUI_Orchard").SetVersion("2.0.0");
// jQuery Time Entry.
manifest.DefineScript("jQueryTimeEntry").SetUrl("timeentry/jquery.timeentry.min.js", "timeentry/jquery.timeentry.js").SetDependencies("jQueryPlugin").SetVersion("2.0.1");
manifest.DefineStyle("jQueryTimeEntry").SetUrl("jquery.timeentry.css").SetVersion("2.0.1");
// jQuery Date/Time Editor Enhancements.
manifest.DefineStyle("jQueryDateTimeEditor").SetUrl("jquery-datetime-editor.css").SetDependencies("DateTimeEditor");
// jQuery File Upload.
manifest.DefineScript("jQueryIFrameTransport").SetUrl("jquery.iframe-transport.min.js", "jquery.iframe-transport.js").SetVersion("1.9.0").SetDependencies("jQuery");
manifest.DefineScript("jQueryFileUpload").SetUrl("jquery.fileupload.min.js", "jquery.fileupload.js").SetVersion("5.41.0").SetDependencies("jQueryIFrameTransport").SetDependencies("jQueryUI_Widget");
// jQuery Color Box.
manifest.DefineScript("jQueryColorBox").SetUrl("colorbox/jquery.colorbox.min.js", "colorbox/jquery.colorbox.js").SetVersion("1.5.13").SetDependencies("jQuery");
manifest.DefineStyle("jQueryColorBox").SetUrl("colorbox.css").SetVersion("1.5.13");
// jQuery Cookie.
manifest.DefineScript("jQueryCookie").SetUrl("jquery.cookie.min.js", "jquery.cookie.js").SetVersion("1.4.1").SetDependencies("jQuery");
}
}
}

View File

@@ -1,12 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<staticContent>
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="7.00:00:00" />
</staticContent>
<handlers accessPolicy="Script,Read">
<!-- For any request to a file exists on disk, return it via native http module. AccessPolicy="Script" above is to allow for a managed 404 page. -->
<add name="StaticFile" path="*" verb="*" modules="StaticFileModule" preCondition="integratedMode" resourceType="File" requireAccess="Read" />
</handlers>
</system.webServer>
</configuration>

View File

@@ -1,23 +0,0 @@
/* http://keith-wood.name/calendars.html
Afrikaans localisation for Gregorian/Julian calendars for jQuery.
Written by Renier Pretorius and Ruediger Thiede. */
(function($) {
$.calendars.calendars.gregorian.prototype.regionalOptions['af'] = {
name: 'Gregorian',
epochs: ['BCE', 'CE'],
monthNames: ['Januarie','Februarie','Maart','April','Mei','Junie',
'Julie','Augustus','September','Oktober','November','Desember'],
monthNamesShort: ['Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun',
'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Des'],
dayNames: ['Sondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrydag', 'Saterdag'],
dayNamesShort: ['Son', 'Maan', 'Dins', 'Woens', 'Don', 'Vry', 'Sat'],
dayNamesMin: ['So','Ma','Di','Wo','Do','Vr','Sa'],
dateFormat: 'dd/mm/yyyy',
firstDay: 1,
isRTL: false
};
if ($.calendars.calendars.julian) {
$.calendars.calendars.julian.prototype.regionalOptions['af'] =
$.calendars.calendars.gregorian.prototype.regionalOptions['af'];
}
})(jQuery);

View File

@@ -1,23 +0,0 @@
/* http://keith-wood.name/calendars.html
Amharic (አማርኛ) localisation for Gregorian/Julian calendars for jQuery.
Leyu Sisay. */
(function($) {
$.calendars.calendars.gregorian.prototype.regionalOptions['am'] = {
name: 'Gregorian',
epochs: ['BCE', 'CE'],
monthNames: ['ጃንዋሪ','ፈብርዋሪ','ማርች','አፕሪል','ሜይ','ጁን',
'ጁላይ','ኦገስት','ሴፕቴምበር','ኦክቶበር','ኖቬምበር','ዲሴምበር'],
monthNamesShort: ['ጃንዋ', 'ፈብር', 'ማርች', 'አፕሪ', 'ሜይ', 'ጁን',
'ጁላይ', 'ኦገስ', 'ሴፕቴ', 'ኦክቶ', 'ኖቬም', 'ዲሴም'],
dayNames: ['ሰንዴይ', 'መንዴይ', 'ትዩስዴይ', 'ዌንስዴይ', 'ተርሰዴይ', 'ፍራይዴይ', 'ሳተርዴይ'],
dayNamesShort: ['ሰንዴ', 'መንዴ', 'ትዩስ', 'ዌንስ', 'ተርሰ', 'ፍራይ', 'ሳተር'],
dayNamesMin: ['ሰን', 'መን', 'ትዩ', 'ዌን', 'ተር', 'ፍራ', 'ሳተ'],
dateFormat: 'dd/mm/yyyy',
firstDay: 1,
isRTL: false
};
if ($.calendars.calendars.julian) {
$.calendars.calendars.julian.prototype.regionalOptions['am'] =
$.calendars.calendars.gregorian.prototype.regionalOptions['am'];
}
})(jQuery);

View File

@@ -1,22 +0,0 @@
/* http://keith-wood.name/calendars.html
Algerian (and Tunisian) Arabic localisation for Gregorian/Julian calendars for jQuery.
Mohamed Cherif BOUCHELAGHEM -- cherifbouchelaghem@yahoo.fr */
(function($) {
$.calendars.calendars.gregorian.prototype.regionalOptions['ar-DZ'] = {
name: 'Gregorian',
epochs: ['BCE', 'CE'],
monthNames: ['جانفي', 'فيفري', 'مارس', 'أفريل', 'ماي', 'جوان',
'جويلية', 'أوت', 'سبتمبر','أكتوبر', 'نوفمبر', 'ديسمبر'],
monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
dayNamesMin: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
dateFormat: 'dd/mm/yyyy',
firstDay: 6,
isRTL: true
};
if ($.calendars.calendars.julian) {
$.calendars.calendars.julian.prototype.regionalOptions['ar-DZ'] =
$.calendars.calendars.gregorian.prototype.regionalOptions['ar-DZ'];
}
})(jQuery);

View File

@@ -1,23 +0,0 @@
/* http://keith-wood.name/calendars.html
Arabic localisation for Gregorian/Julian calendars for jQuery.
Mahmoud Khaled -- mahmoud.khaled@badrit.com
NOTE: monthNames are the new months names */
(function($) {
$.calendars.calendars.gregorian.prototype.regionalOptions['ar-EG'] = {
name: 'Gregorian',
epochs: ['BCE', 'CE'],
monthNames: ['يناير', 'فبراير', 'مارس', 'إبريل', 'مايو', 'يونية',
'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'],
monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
dayNamesShort: ['أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة', 'سبت'],
dayNamesMin: ['أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة', 'سبت'],
dateFormat: 'dd/mm/yyyy',
firstDay: 6,
isRTL: true
};
if ($.calendars.calendars.julian) {
$.calendars.calendars.julian.prototype.regionalOptions['ar-EG'] =
$.calendars.calendars.gregorian.prototype.regionalOptions['ar-EG'];
}
})(jQuery);

View File

@@ -1,24 +0,0 @@
/* http://keith-wood.name/calendars.html
Arabic localisation for Gregorian/Julian calendars for jQuery.
Khaled Al Horani -- خالد الحوراني -- koko.dw@gmail.com. */
/* NOTE: monthNames are the original months names and they are the Arabic names,
not the new months name فبراير - يناير and there isn't any Arabic roots for these months */
(function($) {
$.calendars.calendars.gregorian.prototype.regionalOptions['ar'] = {
name: 'Gregorian',
epochs: ['BCE', 'CE'],
monthNames: ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'آذار', 'حزيران',
'تموز', 'آب', 'أيلول', 'تشرين الأول', 'تشرين الثاني', 'كانون الأول'],
monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
dayNamesMin: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
dateFormat: 'dd/mm/yyyy',
firstDay: 6,
isRTL: true
};
if ($.calendars.calendars.julian) {
$.calendars.calendars.julian.prototype.regionalOptions['ar'] =
$.calendars.calendars.gregorian.prototype.regionalOptions['ar'];
}
})(jQuery);

View File

@@ -1,23 +0,0 @@
/* http://keith-wood.name/calendars.html
Azerbaijani localisation for Gregorian/Julian calendars for jQuery.
Written by Jamil Najafov (necefov33@gmail.com). */
(function($) {
$.calendars.calendars.gregorian.prototype.regionalOptions['az'] = {
name: 'Gregorian',
epochs: ['BCE', 'CE'],
monthNames: ['Yanvar','Fevral','Mart','Aprel','May','İyun',
'İyul','Avqust','Sentyabr','Oktyabr','Noyabr','Dekabr'],
monthNamesShort: ['Yan','Fev','Mar','Apr','May','İyun',
'İyul','Avq','Sen','Okt','Noy','Dek'],
dayNames: ['Bazar','Bazar ertəsi','Çərşənbə axşamı','Çərşənbə','Cümə axşamı','Cümə','Şənbə'],
dayNamesShort: ['B','Be','Ça','Ç','Ca','C','Ş'],
dayNamesMin: ['B','B','Ç','С','Ç','C','Ş'],
dateFormat: 'dd.mm.yyyy',
firstDay: 1,
isRTL: false
};
if ($.calendars.calendars.julian) {
$.calendars.calendars.julian.prototype.regionalOptions['az'] =
$.calendars.calendars.gregorian.prototype.regionalOptions['az'];
}
})(jQuery);

View File

@@ -1,23 +0,0 @@
/* http://keith-wood.name/calendars.html
Bulgarian localisation for Gregorian/Julian calendars for jQuery.
Written by Stoyan Kyosev (http://svest.org). */
(function($) {
$.calendars.calendars.gregorian.prototype.regionalOptions['bg'] = {
name: 'Gregorian',
epochs: ['BCE', 'CE'],
monthNames: ['Януари','Февруари','Март','Април','Май','Юни',
'Юли','Август','Септември','Октомври','Ноември','Декември'],
monthNamesShort: ['Яну','Фев','Мар','Апр','Май','Юни',
'Юли','Авг','Сеп','Окт','Нов','Дек'],
dayNames: ['Неделя','Понеделник','Вторник','Сряда','Четвъртък','Петък','Събота'],
dayNamesShort: ['Нед','Пон','Вто','Сря','Чет','Пет','Съб'],
dayNamesMin: ['Не','По','Вт','Ср','Че','Пе','Съ'],
dateFormat: 'dd.mm.yyyy',
firstDay: 1,
isRTL: false
};
if ($.calendars.calendars.julian) {
$.calendars.calendars.julian.prototype.regionalOptions['bg'] =
$.calendars.calendars.gregorian.prototype.regionalOptions['bg'];
}
})(jQuery);

View File

@@ -1,23 +0,0 @@
/* http://keith-wood.name/calendars.html
Bosnian localisation for Gregorian/Julian calendars for jQuery.
Kenan Konjo. */
(function($) {
$.calendars.calendars.gregorian.prototype.regionalOptions['bs'] = {
name: 'Gregorian',
epochs: ['BCE', 'CE'],
monthNames: ['Januar','Februar','Mart','April','Maj','Juni',
'Juli','August','Septembar','Oktobar','Novembar','Decembar'],
monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
'Jul','Aug','Sep','Okt','Nov','Dec'],
dayNames: ['Nedelja','Ponedeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'],
dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'],
dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'],
dateFormat: 'dd.mm.yy',
firstDay: 1,
isRTL: false
};
if ($.calendars.calendars.julian) {
$.calendars.calendars.julian.prototype.regionalOptions['bs'] =
$.calendars.calendars.gregorian.prototype.regionalOptions['bs'];
}
})(jQuery);

View File

@@ -1,23 +0,0 @@
/* http://keith-wood.name/calendars.html
Catalan localisation for Gregorian/Julian calendars for jQuery.
Writers: (joan.leon@gmail.com). */
(function($) {
$.calendars.calendars.gregorian.prototype.regionalOptions['ca'] = {
name: 'Gregorian',
epochs: ['BCE', 'CE'],
monthNames: ['Gener','Febrer','Mar&ccedil;','Abril','Maig','Juny',
'Juliol','Agost','Setembre','Octubre','Novembre','Desembre'],
monthNamesShort: ['Gen','Feb','Mar','Abr','Mai','Jun',
'Jul','Ago','Set','Oct','Nov','Des'],
dayNames: ['Diumenge','Dilluns','Dimarts','Dimecres','Dijous','Divendres','Dissabte'],
dayNamesShort: ['Dug','Dln','Dmt','Dmc','Djs','Dvn','Dsb'],
dayNamesMin: ['Dg','Dl','Dt','Dc','Dj','Dv','Ds'],
dateFormat: 'dd/mm/yyyy',
firstDay: 1,
isRTL: false
};
if ($.calendars.calendars.julian) {
$.calendars.calendars.julian.prototype.regionalOptions['ca'] =
$.calendars.calendars.gregorian.prototype.regionalOptions['ca'];
}
})(jQuery);

View File

@@ -1,23 +0,0 @@
/* http://keith-wood.name/calendars.html
Czech localisation for Gregorian/Julian calendars for jQuery.
Written by Tomas Muller (tomas@tomas-muller.net). */
(function($) {
$.calendars.calendars.gregorian.prototype.regionalOptions['cs'] = {
name: 'Gregorian',
epochs: ['BCE', 'CE'],
monthNames: ['leden','únor','březen','duben','květen','červen',
'červenec','srpen','září','říjen','listopad','prosinec'],
monthNamesShort: ['led','úno','bře','dub','kvě','čer',
'čvc','srp','zář','říj','lis','pro'],
dayNames: ['neděle', 'pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota'],
dayNamesShort: ['ne', 'po', 'út', 'st', 'čt', 'pá', 'so'],
dayNamesMin: ['ne','po','út','st','čt','pá','so'],
dateFormat: 'dd.mm.yyyy',
firstDay: 1,
isRTL: false
};
if ($.calendars.calendars.julian) {
$.calendars.calendars.julian.prototype.regionalOptions['cs'] =
$.calendars.calendars.gregorian.prototype.regionalOptions['cs'];
}
})(jQuery);

View File

@@ -1,23 +0,0 @@
/* http://keith-wood.name/calendars.html
Danish localisation for Gregorian/Julian calendars for jQuery.
Written by Jan Christensen ( deletestuff@gmail.com). */
(function($) {
$.calendars.calendars.gregorian.prototype.regionalOptions['da'] = {
name: 'Gregorian',
epochs: ['BCE', 'CE'],
monthNames: ['Januar','Februar','Marts','April','Maj','Juni',
'Juli','August','September','Oktober','November','December'],
monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
'Jul','Aug','Sep','Okt','Nov','Dec'],
dayNames: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'],
dayNamesShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'],
dayNamesMin: ['Sø','Ma','Ti','On','To','Fr','Lø'],
dateFormat: 'dd-mm-yyyy',
firstDay: 0,
isRTL: false
};
if ($.calendars.calendars.julian) {
$.calendars.calendars.julian.prototype.regionalOptions['da'] =
$.calendars.calendars.gregorian.prototype.regionalOptions['da'];
}
})(jQuery);

View File

@@ -1,23 +0,0 @@
/* http://keith-wood.name/calendars.html
Swiss-German localisation for Gregorian/Julian calendars for jQuery.
Written by Douglas Jose & Juerg Meier. */
(function($) {
$.calendars.calendars.gregorian.prototype.regionalOptions['de-CH'] = {
name: 'Gregorian',
epochs: ['BCE', 'CE'],
monthNames: ['Januar','Februar','März','April','Mai','Juni',
'Juli','August','September','Oktober','November','Dezember'],
monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun',
'Jul','Aug','Sep','Okt','Nov','Dez'],
dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'],
dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'],
dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'],
dateFormat: 'dd.mm.yyyy',
firstDay: 1,
isRTL: false
};
if ($.calendars.calendars.julian) {
$.calendars.calendars.julian.prototype.regionalOptions['de-CH'] =
$.calendars.calendars.gregorian.prototype.regionalOptions['de-CH'];
}
})(jQuery);

View File

@@ -1,23 +0,0 @@
/* http://keith-wood.name/calendars.html
German localisation for Gregorian/Julian calendars for jQuery.
Written by Milian Wolff (mail@milianw.de). */
(function($) {
$.calendars.calendars.gregorian.prototype.regionalOptions['de'] = {
name: 'Gregorian',
epochs: ['BCE', 'CE'],
monthNames: ['Januar','Februar','März','April','Mai','Juni',
'Juli','August','September','Oktober','November','Dezember'],
monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun',
'Jul','Aug','Sep','Okt','Nov','Dez'],
dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'],
dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'],
dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'],
dateFormat: 'dd.mm.yyyy',
firstDay: 1,
isRTL: false
};
if ($.calendars.calendars.julian) {
$.calendars.calendars.julian.prototype.regionalOptions['de'] =
$.calendars.calendars.gregorian.prototype.regionalOptions['de'];
}
})(jQuery);

Some files were not shown because too many files have changed in this diff Show More