From 17abedebc63674ad4e249744125417bd299b5520 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wojciech=20Gadzi=C5=84ski?= Date: Mon, 31 Mar 2014 17:33:06 +0200 Subject: [PATCH 01/10] #20589 Fix FormsAuthenticationService - now is expandable Work Item: 20589 --- src/Orchard/Security/Providers/FormsAuthenticationService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Orchard/Security/Providers/FormsAuthenticationService.cs b/src/Orchard/Security/Providers/FormsAuthenticationService.cs index ef4b7dd69..f8a0c2980 100644 --- a/src/Orchard/Security/Providers/FormsAuthenticationService.cs +++ b/src/Orchard/Security/Providers/FormsAuthenticationService.cs @@ -112,7 +112,7 @@ namespace Orchard.Security.Providers { // the cookie user data is {userId};{tenant} var userDataSegments = userData.Split(';'); - if (userDataSegments.Length != 2) { + if (userDataSegments.Length < 2) { return null; } From 5983bca6b18164ae42707ddee99379fbeeff3c5a Mon Sep 17 00:00:00 2001 From: Nicholas Mayne Date: Sun, 11 May 2014 14:43:57 +0100 Subject: [PATCH 02/10] #20689 Adding required attribute to name and Email Work Item: 20689 --- .../Modules/Orchard.Comments/Models/CommentPart.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Comments/Models/CommentPart.cs b/src/Orchard.Web/Modules/Orchard.Comments/Models/CommentPart.cs index 4ef90c4ff..79b3d126f 100644 --- a/src/Orchard.Web/Modules/Orchard.Comments/Models/CommentPart.cs +++ b/src/Orchard.Web/Modules/Orchard.Comments/Models/CommentPart.cs @@ -12,7 +12,7 @@ namespace Orchard.Comments.Models { public LazyField CommentedOnContentItemField { get { return _commentedOnContentItem; } } public LazyField CommentedOnContentItemMetadataField { get { return _commentedOnContentItemMetadata; } } - [StringLength(255)] + [Required, StringLength(255)] public string Author { get { return Record.Author; } set { Record.Author = value; } @@ -31,7 +31,7 @@ namespace Orchard.Comments.Models { set { Record.UserName = value; } } - [RegularExpression(@"^(?![\.@])(""([^""\r\\]|\\[""\r\\])*""|([-a-z0-9!#$%&'*+/=?^_`{|}~]|(? Date: Sun, 11 May 2014 14:46:50 +0100 Subject: [PATCH 03/10] #20680 Removing old ascx file Work Item: 20680 --- .../Views/EditorTemplates/ContentTypePart.ascx | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 src/Orchard.Web/Modules/Orchard.ContentTypes/Views/EditorTemplates/ContentTypePart.ascx diff --git a/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/EditorTemplates/ContentTypePart.ascx b/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/EditorTemplates/ContentTypePart.ascx deleted file mode 100644 index 2cb7e4dc6..000000000 --- a/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/EditorTemplates/ContentTypePart.ascx +++ /dev/null @@ -1,13 +0,0 @@ -<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl" %> -<%@ Import Namespace="Orchard.ContentManagement.MetaData.Models" %> -
-

<%:Model.PartDefinition.Name %>

-
- <%--// these inline forms can't be here. should probably have some JavaScript in here to build up the forms and add the "remove" link. - // get the antiforgery token from the edit type form and mark up the part in a semantic way so I can get some info from the DOM --%> - <% using (Html.BeginFormAntiForgeryPost(Url.Action("RemovePart", new { area = "Contents" }), FormMethod.Post, new {@class = "inline link"})) { %> - <%=Html.Hidden("name", Model.PartDefinition.Name, new { id = "" }) %> - - <% } %> -
-
\ No newline at end of file From 74026ec729aafb6f81c188954038eeba858a0287 Mon Sep 17 00:00:00 2001 From: Nicholas Mayne Date: Sun, 11 May 2014 16:50:14 +0100 Subject: [PATCH 04/10] #20689 reverted last change and just check current user --- .../Modules/Orchard.Comments/Controllers/CommentController.cs | 4 ++-- .../Modules/Orchard.Comments/Models/CommentPart.cs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Comments/Controllers/CommentController.cs b/src/Orchard.Web/Modules/Orchard.Comments/Controllers/CommentController.cs index 2ee89c27c..f09cc9618 100644 --- a/src/Orchard.Web/Modules/Orchard.Comments/Controllers/CommentController.cs +++ b/src/Orchard.Web/Modules/Orchard.Comments/Controllers/CommentController.cs @@ -29,11 +29,11 @@ namespace Orchard.Comments.Controllers { var comment = Services.ContentManager.New("Comment"); var editorShape = Services.ContentManager.UpdateEditor(comment, this); - if (!ModelState.IsValidField("Comments.Author")) { + if (!ModelState.IsValidField("Comments.Author") && Services.WorkContext.CurrentUser == null) { Services.Notifier.Error(T("Name is mandatory and must have less than 255 chars")); } - if (!ModelState.IsValidField("Comments.Email")) { + if (!ModelState.IsValidField("Comments.Email") && Services.WorkContext.CurrentUser == null) { Services.Notifier.Error(T("Email is invalid or is longer than 255 chars")); } diff --git a/src/Orchard.Web/Modules/Orchard.Comments/Models/CommentPart.cs b/src/Orchard.Web/Modules/Orchard.Comments/Models/CommentPart.cs index 79b3d126f..4ef90c4ff 100644 --- a/src/Orchard.Web/Modules/Orchard.Comments/Models/CommentPart.cs +++ b/src/Orchard.Web/Modules/Orchard.Comments/Models/CommentPart.cs @@ -12,7 +12,7 @@ namespace Orchard.Comments.Models { public LazyField CommentedOnContentItemField { get { return _commentedOnContentItem; } } public LazyField CommentedOnContentItemMetadataField { get { return _commentedOnContentItemMetadata; } } - [Required, StringLength(255)] + [StringLength(255)] public string Author { get { return Record.Author; } set { Record.Author = value; } @@ -31,7 +31,7 @@ namespace Orchard.Comments.Models { set { Record.UserName = value; } } - [Required, RegularExpression(@"^(?![\.@])(""([^""\r\\]|\\[""\r\\])*""|([-a-z0-9!#$%&'*+/=?^_`{|}~]|(? Date: Sun, 11 May 2014 22:36:43 +0100 Subject: [PATCH 05/10] #20689 Adding required attributes for HTML and model --- .../Orchard.Comments/Controllers/CommentController.cs | 4 ++-- .../Modules/Orchard.Comments/Models/CommentPart.cs | 4 ++-- .../Views/EditorTemplates/Parts.Comment.cshtml | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Comments/Controllers/CommentController.cs b/src/Orchard.Web/Modules/Orchard.Comments/Controllers/CommentController.cs index f09cc9618..2ee89c27c 100644 --- a/src/Orchard.Web/Modules/Orchard.Comments/Controllers/CommentController.cs +++ b/src/Orchard.Web/Modules/Orchard.Comments/Controllers/CommentController.cs @@ -29,11 +29,11 @@ namespace Orchard.Comments.Controllers { var comment = Services.ContentManager.New("Comment"); var editorShape = Services.ContentManager.UpdateEditor(comment, this); - if (!ModelState.IsValidField("Comments.Author") && Services.WorkContext.CurrentUser == null) { + if (!ModelState.IsValidField("Comments.Author")) { Services.Notifier.Error(T("Name is mandatory and must have less than 255 chars")); } - if (!ModelState.IsValidField("Comments.Email") && Services.WorkContext.CurrentUser == null) { + if (!ModelState.IsValidField("Comments.Email")) { Services.Notifier.Error(T("Email is invalid or is longer than 255 chars")); } diff --git a/src/Orchard.Web/Modules/Orchard.Comments/Models/CommentPart.cs b/src/Orchard.Web/Modules/Orchard.Comments/Models/CommentPart.cs index 4ef90c4ff..79b3d126f 100644 --- a/src/Orchard.Web/Modules/Orchard.Comments/Models/CommentPart.cs +++ b/src/Orchard.Web/Modules/Orchard.Comments/Models/CommentPart.cs @@ -12,7 +12,7 @@ namespace Orchard.Comments.Models { public LazyField CommentedOnContentItemField { get { return _commentedOnContentItem; } } public LazyField CommentedOnContentItemMetadataField { get { return _commentedOnContentItemMetadata; } } - [StringLength(255)] + [Required, StringLength(255)] public string Author { get { return Record.Author; } set { Record.Author = value; } @@ -31,7 +31,7 @@ namespace Orchard.Comments.Models { set { Record.UserName = value; } } - [RegularExpression(@"^(?![\.@])(""([^""\r\\]|\\[""\r\\])*""|([-a-z0-9!#$%&'*+/=?^_`{|}~]|(?
  • @Html.LabelFor(m => m.Author, T("Name")) - @Html.TextBoxFor(m => m.Author) + @Html.TextBoxFor(m => m.Author, new { required = "required" })
  • @Html.LabelFor(m => m.Email, T("Email")) - @Html.TextBoxFor(m => m.Email) + @Html.TextBoxFor(m => m.Email, new { required = "required" })
  • @Html.LabelFor(m => m.SiteName, T("Url")) @@ -21,7 +21,7 @@ } else { - @Html.Hidden("Name", WorkContext.CurrentUser.UserName ?? "") + @Html.Hidden("Author", WorkContext.CurrentUser.UserName ?? "") @Html.Hidden("Email", WorkContext.CurrentUser.Email ?? "") } From 4525650ffa69a9a73d95b902613b2995c5d685d5 Mon Sep 17 00:00:00 2001 From: Nicholas Mayne Date: Mon, 12 May 2014 21:09:14 +0100 Subject: [PATCH 06/10] #20689 Reverting previous changes and jsut forcing validation if author is null when user is not signed in --- .../Modules/Orchard.Comments/Drivers/CommentPartDriver.cs | 6 +++++- .../Modules/Orchard.Comments/Models/CommentPart.cs | 4 ++-- .../Views/EditorTemplates/Parts.Comment.cshtml | 6 +++--- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Comments/Drivers/CommentPartDriver.cs b/src/Orchard.Web/Modules/Orchard.Comments/Drivers/CommentPartDriver.cs index 77eaae0b6..4687f711d 100644 --- a/src/Orchard.Web/Modules/Orchard.Comments/Drivers/CommentPartDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Comments/Drivers/CommentPartDriver.cs @@ -106,7 +106,11 @@ namespace Orchard.Comments.Drivers { var currentUser = workContext.CurrentUser; part.UserName = (currentUser != null ? currentUser.UserName : null); - if (currentUser != null) part.Author = currentUser.UserName; + if (currentUser != null) + part.Author = currentUser.UserName; + else if (string.IsNullOrWhiteSpace(part.Author)) { + updater.AddModelError("Comments.Author", T("Name is mandatory")); + } var moderateComments = workContext.CurrentSite.As().ModerateComments; part.Status = moderateComments ? CommentStatus.Pending : CommentStatus.Approved; diff --git a/src/Orchard.Web/Modules/Orchard.Comments/Models/CommentPart.cs b/src/Orchard.Web/Modules/Orchard.Comments/Models/CommentPart.cs index 79b3d126f..4ef90c4ff 100644 --- a/src/Orchard.Web/Modules/Orchard.Comments/Models/CommentPart.cs +++ b/src/Orchard.Web/Modules/Orchard.Comments/Models/CommentPart.cs @@ -12,7 +12,7 @@ namespace Orchard.Comments.Models { public LazyField CommentedOnContentItemField { get { return _commentedOnContentItem; } } public LazyField CommentedOnContentItemMetadataField { get { return _commentedOnContentItemMetadata; } } - [Required, StringLength(255)] + [StringLength(255)] public string Author { get { return Record.Author; } set { Record.Author = value; } @@ -31,7 +31,7 @@ namespace Orchard.Comments.Models { set { Record.UserName = value; } } - [Required, RegularExpression(@"^(?![\.@])(""([^""\r\\]|\\[""\r\\])*""|([-a-z0-9!#$%&'*+/=?^_`{|}~]|(?
  • @Html.LabelFor(m => m.Author, T("Name")) - @Html.TextBoxFor(m => m.Author, new { required = "required" }) + @Html.TextBoxFor(m => m.Author)
  • @Html.LabelFor(m => m.Email, T("Email")) - @Html.TextBoxFor(m => m.Email, new { required = "required" }) + @Html.TextBoxFor(m => m.Email)
  • @Html.LabelFor(m => m.SiteName, T("Url")) @@ -21,7 +21,7 @@ } else { - @Html.Hidden("Author", WorkContext.CurrentUser.UserName ?? "") + @Html.Hidden("Name", WorkContext.CurrentUser.UserName ?? "") @Html.Hidden("Email", WorkContext.CurrentUser.Email ?? "") } From f327a328958628164cf86ead121545f140e4590d Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Mon, 12 May 2014 15:30:56 -0700 Subject: [PATCH 07/10] Showing allowed modules with dependencies --- .../Controllers/AdminController.cs | 9 +- .../ViewModels/FeaturesViewModel.cs | 4 + .../Views/Admin/Features.cshtml | 102 ++++++++++-------- 3 files changed, 66 insertions(+), 49 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Modules/Controllers/AdminController.cs b/src/Orchard.Web/Modules/Orchard.Modules/Controllers/AdminController.cs index 33dc4dedc..84a178432 100644 --- a/src/Orchard.Web/Modules/Orchard.Modules/Controllers/AdminController.cs +++ b/src/Orchard.Web/Modules/Orchard.Modules/Controllers/AdminController.cs @@ -81,7 +81,7 @@ namespace Orchard.Modules.Controllers { IEnumerable modules = _extensionManager.AvailableExtensions() .Where(extensionDescriptor => DefaultExtensionTypes.IsModule(extensionDescriptor.ExtensionType) && - ModuleIsAllowed(extensionDescriptor) && + (string.IsNullOrEmpty(options.SearchText) || extensionDescriptor.Name.ToLowerInvariant().Contains(options.SearchText.ToLowerInvariant()))) .OrderBy(extensionDescriptor => extensionDescriptor.Name) .Select(extensionDescriptor => new ModuleEntry { Descriptor = extensionDescriptor }); @@ -174,7 +174,7 @@ namespace Orchard.Modules.Controllers { var featuresThatNeedUpdate = _dataMigrationManager.GetFeaturesThatNeedUpdate(); IEnumerable features = _featureManager.GetAvailableFeatures() - .Where(f => !DefaultExtensionTypes.IsTheme(f.Extension.ExtensionType) && ModuleIsAllowed(f.Extension)) + .Where(f => !DefaultExtensionTypes.IsTheme(f.Extension.ExtensionType)) .Select(f => new ModuleFeature { Descriptor = f, IsEnabled = _shellDescriptor.Features.Any(sf => sf.Name == f.Id), @@ -184,7 +184,10 @@ namespace Orchard.Modules.Controllers { }) .ToList(); - return View(new FeaturesViewModel { Features = features }); + return View(new FeaturesViewModel { + Features = features, + IsAllowed = ModuleIsAllowed + }); } [HttpPost, ActionName("Features")] diff --git a/src/Orchard.Web/Modules/Orchard.Modules/ViewModels/FeaturesViewModel.cs b/src/Orchard.Web/Modules/Orchard.Modules/ViewModels/FeaturesViewModel.cs index 2ea35614f..e00789428 100644 --- a/src/Orchard.Web/Modules/Orchard.Modules/ViewModels/FeaturesViewModel.cs +++ b/src/Orchard.Web/Modules/Orchard.Modules/ViewModels/FeaturesViewModel.cs @@ -1,10 +1,14 @@ +using System; using System.Collections.Generic; +using Orchard.Environment.Configuration; +using Orchard.Environment.Extensions.Models; using Orchard.Modules.Models; namespace Orchard.Modules.ViewModels { public class FeaturesViewModel { public IEnumerable Features { get; set; } public FeaturesBulkAction BulkAction { get; set; } + public Func IsAllowed { get; set; } } public enum FeaturesBulkAction { diff --git a/src/Orchard.Web/Modules/Orchard.Modules/Views/Admin/Features.cshtml b/src/Orchard.Web/Modules/Orchard.Modules/Views/Admin/Features.cshtml index 42a05916a..c2cf94af1 100644 --- a/src/Orchard.Web/Modules/Orchard.Modules/Views/Admin/Features.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Modules/Views/Admin/Features.cshtml @@ -35,10 +35,14 @@ - -
      @{ + +
        + @{ var featureGroups = Model.Features.OrderBy(f => f.Descriptor.Category, new DoghouseComparer("Core")).GroupBy(f => f.Descriptor.Category).ToList(); foreach (var featureGroup in featureGroups) { + if (!featureGroup.Any(x => Model.IsAllowed(x.Descriptor.Extension))) { + continue; + } var categoryName = LocalizedString.TextOrDefault(featureGroup.First().Descriptor.Category, T("Uncategorized")); var categoryClassName = string.Format("category {0}", Html.Encode(categoryName.ToString().HtmlClassify())); if (featureGroup == featureGroups.First()) { @@ -48,11 +52,15 @@ categoryClassName += " last"; } -
      • -

        @categoryName

        -
          @{ +
        • +

          @categoryName

          +
            + @{ var features = featureGroup.OrderBy(f => f.Descriptor.Name); foreach (var feature in features) { + if (!Model.IsAllowed(feature.Descriptor.Extension)) { + continue; + } //hmmm...I feel like I've done this before... var featureId = feature.Descriptor.Id.AsFeatureId(n => T(n)); var featureName = string.IsNullOrEmpty(feature.Descriptor.Name) ? feature.Descriptor.Id : feature.Descriptor.Name; @@ -74,57 +82,59 @@ var missingDependencies = feature.Descriptor.Dependencies .Where(d => !Model.Features.Any(f => f.Descriptor.Id.Equals(d, StringComparison.OrdinalIgnoreCase))); var showDisable = categoryName.ToString() != "Core"; - var showEnable = !missingDependencies.Any() && feature.Descriptor.Id != "Orchard.Setup"; - + var showEnable = Model.IsAllowed(feature.Descriptor.Extension) && !missingDependencies.Any() && feature.Descriptor.Id != "Orchard.Setup"; +
          • -
            -
            -

            - @if ((showEnable && !feature.IsEnabled) || (showDisable && feature.IsEnabled)) { -

            +

            @feature.Descriptor.Description

            + @if (feature.Descriptor.Dependencies != null && feature.Descriptor.Dependencies.Any()) { +
            +

            @T("Depends on:")

            + @Html.UnorderedList(dependencies, (s, i) => Html.Link(string.IsNullOrEmpty(s.Descriptor.Name) ? s.Descriptor.Id : s.Descriptor.Name, string.Format("#{0}", s.Descriptor.Id.AsFeatureId(n => T(n)))), "", "dependency", "") -
            } - @if (missingDependencies.Any()) { -
            -

            @T("Missing:")

            - @Html.UnorderedList(missingDependencies, (s, i) => MvcHtmlString.Create(s), "", "missingdependency", "") -
            } -
            -
            - @if (showDisable && feature.IsEnabled) { - var dependantsJoined = string.Join(", ", feature.DependentFeatures.Select(f => f.Name)); - @T("Disable") - } +
            } + @if (missingDependencies.Any()) { +
            +

            @T("Missing:")

            + @Html.UnorderedList(missingDependencies, (s, i) => MvcHtmlString.Create(s), "", "missingdependency", "") +
            } +
            +
            + @if (showDisable && feature.IsEnabled) { + var dependantsJoined = string.Join(", ", feature.DependentFeatures.Select(f => f.Name)); + @T("Disable") + } - @if (showEnable && !feature.IsEnabled) { - @T("Enable") - } + @if (showEnable && !feature.IsEnabled) { + @T("Enable") + } - @if (feature.NeedsUpdate) { - @T("Update") - } + @if (feature.NeedsUpdate) { + @T("Update") + } +
            - +
          • } + } +
        • } - }
        -
      • } -}
      } + } +
    } using (Script.Foot()) {