Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make UserMenu and LoginMenu extensible to using drivers #14214

Merged
merged 20 commits into from
Aug 31, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 6 additions & 13 deletions src/OrchardCore.Modules/OrchardCore.Contents/Shapes.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using OrchardCore.DisplayManagement;
using OrchardCore.DisplayManagement.Descriptors;
using OrchardCore.DisplayManagement.ModelBinding;
using OrchardCore.DisplayManagement.Utilities;

namespace OrchardCore.Contents
{
Expand All @@ -25,16 +26,18 @@ public void Discover(ShapeTableBuilder builder)
// BasicShapeTemplateHarvester.Adjust will then adjust the template name

// Content__[DisplayType] e.g. Content-Summary
displaying.Shape.Metadata.Alternates.Add("Content_" + EncodeAlternateElement(displaying.Shape.Metadata.DisplayType));
displaying.Shape.Metadata.Alternates.Add("Content_" + displaying.Shape.Metadata.DisplayType.EncodeAlternateElement());

var encodedContentType = contentItem.ContentType.EncodeAlternateElement();

// Content__[ContentType] e.g. Content-BlogPost,
displaying.Shape.Metadata.Alternates.Add("Content__" + EncodeAlternateElement(contentItem.ContentType));
displaying.Shape.Metadata.Alternates.Add("Content__" + encodedContentType);

// Content__[Id] e.g. Content-42,
displaying.Shape.Metadata.Alternates.Add("Content__" + contentItem.Id);

// Content_[DisplayType]__[ContentType] e.g. Content-BlogPost.Summary
displaying.Shape.Metadata.Alternates.Add("Content_" + displaying.Shape.Metadata.DisplayType + "__" + EncodeAlternateElement(contentItem.ContentType));
displaying.Shape.Metadata.Alternates.Add("Content_" + displaying.Shape.Metadata.DisplayType + "__" + encodedContentType);

// Content_[DisplayType]__[Id] e.g. Content-42.Summary
displaying.Shape.Metadata.Alternates.Add("Content_" + displaying.Shape.Metadata.DisplayType + "__" + contentItem.Id);
Expand Down Expand Up @@ -91,15 +94,5 @@ public void Discover(ShapeTableBuilder builder)
await context.Shape.AddAsync(displayShape, "");
});
}

/// <summary>
/// Encodes dashed and dots so that they don't conflict in filenames
/// </summary>
/// <param name="alternateElement"></param>
/// <returns></returns>
private static string EncodeAlternateElement(string alternateElement)
{
return alternateElement.Replace("-", "__").Replace('.', '_');
}
}
}
15 changes: 3 additions & 12 deletions src/OrchardCore.Modules/OrchardCore.Menu/MenuShapes.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using OrchardCore.DisplayManagement;
using OrchardCore.DisplayManagement.Descriptors;
using OrchardCore.DisplayManagement.Shapes;
using OrchardCore.DisplayManagement.Utilities;
using OrchardCore.Menu.Models;
using OrchardCore.Mvc.Utilities;

Expand Down Expand Up @@ -118,7 +119,7 @@ public void Discover(ShapeTableBuilder builder)
}
}

var encodedContentType = EncodeAlternateElement(menuContentItem.ContentItem.ContentType);
var encodedContentType = menuContentItem.ContentItem.ContentType.EncodeAlternateElement();

// MenuItem__level__[level] e.g. MenuItem-level-2
menuItem.Metadata.Alternates.Add("MenuItem__level__" + level);
Expand Down Expand Up @@ -151,7 +152,7 @@ public void Discover(ShapeTableBuilder builder)

var menuContentItem = menuItem.GetProperty<ContentItem>("ContentItem");

var encodedContentType = EncodeAlternateElement(menuContentItem.ContentItem.ContentType);
var encodedContentType = menuContentItem.ContentItem.ContentType.EncodeAlternateElement();

menuItem.Metadata.Alternates.Add("MenuItemLink__level__" + level);

Expand All @@ -175,16 +176,6 @@ public void Discover(ShapeTableBuilder builder)
});
}

/// <summary>
/// Encodes dashed and dots so that they don't conflict in filenames
/// </summary>
/// <param name="alternateElement"></param>
/// <returns></returns>
private static string EncodeAlternateElement(string alternateElement)
{
return alternateElement.Replace("-", "__").Replace('.', '_');
}

/// <summary>
/// Converts "foo-ba r" to "FooBaR"
/// </summary>
Expand Down
25 changes: 10 additions & 15 deletions src/OrchardCore.Modules/OrchardCore.Navigation/NavigationShapes.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using OrchardCore.DisplayManagement;
using OrchardCore.DisplayManagement.Descriptors;
using OrchardCore.DisplayManagement.Shapes;
using OrchardCore.DisplayManagement.Utilities;
using OrchardCore.Mvc.Utilities;

namespace OrchardCore.Navigation
Expand All @@ -20,7 +21,7 @@ public void Discover(ShapeTableBuilder builder)

menu.Classes.Add("menu-" + menuName.HtmlClassify());
menu.Classes.Add("menu");
menu.Metadata.Alternates.Add("Navigation__" + EncodeAlternateElement(menuName));
menu.Metadata.Alternates.Add("Navigation__" + menuName.EncodeAlternateElement());
})
.OnProcessing(async context =>
{
Expand Down Expand Up @@ -79,9 +80,11 @@ public void Discover(ShapeTableBuilder builder)
var menuName = menu.GetProperty<string>("MenuName");
var level = menuItem.GetProperty<int>("Level");

var encodedMenuName = menuName.EncodeAlternateElement();

menuItem.Metadata.Alternates.Add("NavigationItem__level__" + level);
menuItem.Metadata.Alternates.Add("NavigationItem__" + EncodeAlternateElement(menuName));
menuItem.Metadata.Alternates.Add("NavigationItem__" + EncodeAlternateElement(menuName) + "__level__" + level);
menuItem.Metadata.Alternates.Add("NavigationItem__" + encodedMenuName);
menuItem.Metadata.Alternates.Add("NavigationItem__" + encodedMenuName + "__level__" + level);
});

builder.Describe("NavigationItemLink")
Expand All @@ -93,21 +96,13 @@ public void Discover(ShapeTableBuilder builder)

menuItem.Metadata.Alternates.Add("NavigationItemLink__level__" + level);

var encodedMenuName = menuName.EncodeAlternateElement();

// NavigationItemLink__[MenuName] e.g. NavigationItemLink-Main-Menu
// NavigationItemLink__[MenuName]__level__[level] e.g. NavigationItemLink-Main-Menu-level-2
menuItem.Metadata.Alternates.Add("NavigationItemLink__" + EncodeAlternateElement(menuName));
menuItem.Metadata.Alternates.Add("NavigationItemLink__" + EncodeAlternateElement(menuName) + "__level__" + level);
menuItem.Metadata.Alternates.Add("NavigationItemLink__" + encodedMenuName);
menuItem.Metadata.Alternates.Add("NavigationItemLink__" + encodedMenuName + "__level__" + level);
});
}

/// <summary>
/// Encodes dashed and dots so that they don't conflict in filenames
/// </summary>
/// <param name="alternateElement"></param>
/// <returns></returns>
private static string EncodeAlternateElement(string alternateElement)
{
return alternateElement.Replace("-", "__").Replace('.', '_');
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
using OrchardCore.DisplayManagement.Html;
using OrchardCore.DisplayManagement.Implementation;
using OrchardCore.DisplayManagement.Shapes;
using OrchardCore.DisplayManagement.Utilities;

namespace OrchardCore.Navigation
{
Expand All @@ -32,7 +33,7 @@ public void Discover(ShapeTableBuilder builder)
{
if (displaying.Shape.TryGetProperty("PagerId", out string pagerId) && !String.IsNullOrEmpty(pagerId))
{
displaying.Shape.Metadata.Alternates.Add("Pager__" + EncodeAlternateElement(pagerId));
displaying.Shape.Metadata.Alternates.Add("Pager__" + pagerId.EncodeAlternateElement());
};
});

Expand All @@ -48,7 +49,7 @@ public void Discover(ShapeTableBuilder builder)
{
if (displaying.Shape.TryGetProperty("PagerId", out string pagerId) && !String.IsNullOrEmpty(pagerId))
{
displaying.Shape.Metadata.Alternates.Add("Pager__" + EncodeAlternateElement(pagerId));
displaying.Shape.Metadata.Alternates.Add("Pager__" + pagerId.EncodeAlternateElement());
};
});

Expand All @@ -59,7 +60,7 @@ public void Discover(ShapeTableBuilder builder)

if (shape.TryGetProperty("Pager", out IShape pager) && pager.TryGetProperty("PagerId", out string pagerId) && !String.IsNullOrEmpty(pagerId))
{
displaying.Shape.Metadata.Alternates.Add("Pager_Gap__" + EncodeAlternateElement(pagerId));
displaying.Shape.Metadata.Alternates.Add("Pager_Gap__" + pagerId.EncodeAlternateElement());
}
});

Expand All @@ -70,7 +71,7 @@ public void Discover(ShapeTableBuilder builder)

if (shape.TryGetProperty("Pager", out IShape pager) && pager.TryGetProperty("PagerId", out string pagerId) && !String.IsNullOrEmpty(pagerId))
{
displaying.Shape.Metadata.Alternates.Add("Pager_First__" + EncodeAlternateElement(pagerId));
displaying.Shape.Metadata.Alternates.Add("Pager_First__" + pagerId.EncodeAlternateElement());
}
});

Expand All @@ -81,7 +82,7 @@ public void Discover(ShapeTableBuilder builder)

if (shape.TryGetProperty("Pager", out IShape pager) && pager.TryGetProperty("PagerId", out string pagerId) && !String.IsNullOrEmpty(pagerId))
{
displaying.Shape.Metadata.Alternates.Add("Pager_Previous__" + EncodeAlternateElement(pagerId));
displaying.Shape.Metadata.Alternates.Add("Pager_Previous__" + pagerId.EncodeAlternateElement());
}
});

Expand All @@ -92,7 +93,7 @@ public void Discover(ShapeTableBuilder builder)

if (shape.TryGetProperty("Pager", out IShape pager) && pager.TryGetProperty("PagerId", out string pagerId) && !String.IsNullOrEmpty(pagerId))
{
displaying.Shape.Metadata.Alternates.Add("Pager_Next__" + EncodeAlternateElement(pagerId));
displaying.Shape.Metadata.Alternates.Add("Pager_Next__" + pagerId.EncodeAlternateElement());
}
});

Expand All @@ -103,7 +104,7 @@ public void Discover(ShapeTableBuilder builder)

if (shape.TryGetProperty("Pager", out IShape pager) && pager.TryGetProperty("PagerId", out string pagerId) && !String.IsNullOrEmpty(pagerId))
{
displaying.Shape.Metadata.Alternates.Add("Pager_Last__" + EncodeAlternateElement(pagerId));
displaying.Shape.Metadata.Alternates.Add("Pager_Last__" + pagerId.EncodeAlternateElement());
}
});

Expand All @@ -114,7 +115,7 @@ public void Discover(ShapeTableBuilder builder)

if (shape.TryGetProperty("Pager", out IShape pager) && pager.TryGetProperty("PagerId", out string pagerId) && !String.IsNullOrEmpty(pagerId))
{
displaying.Shape.Metadata.Alternates.Add("Pager_CurrentPage__" + EncodeAlternateElement(pagerId));
displaying.Shape.Metadata.Alternates.Add("Pager_CurrentPage__" + pagerId.EncodeAlternateElement());
}
});

Expand All @@ -123,15 +124,10 @@ public void Discover(ShapeTableBuilder builder)
{
if (displaying.Shape.TryGetProperty("PagerId", out string pagerId))
{
displaying.Shape.Metadata.Alternates.Add("Pager_Links__" + EncodeAlternateElement(pagerId));
displaying.Shape.Metadata.Alternates.Add("Pager_Links__" + pagerId.EncodeAlternateElement());
}
});
}

private static string EncodeAlternateElement(string alternateElement)
{
return alternateElement.Replace("-", "__").Replace('.', '_');
}
}

public class PagerShapes : IShapeAttributeProvider
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
@using Microsoft.AspNetCore.Mvc.Localization

@model ShapeViewModel<UserNotificationCollectionViewModel>
<li class="nav-item dropdown">
<li class="nav-item dropdown text-end">
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-expanded="false">
@if (Model.Value.TotalUnread > 0)
{
Expand Down
17 changes: 4 additions & 13 deletions src/OrchardCore.Modules/OrchardCore.Taxonomies/TermShapes.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
using OrchardCore.ContentManagement;
using OrchardCore.DisplayManagement;
using OrchardCore.DisplayManagement.Descriptors;
using OrchardCore.DisplayManagement.Utilities;
using OrchardCore.Mvc.Utilities;
using OrchardCore.Taxonomies.Models;
using OrchardCore.Taxonomies.ViewModels;
Expand Down Expand Up @@ -122,7 +123,7 @@ public void Discover(ShapeTableBuilder builder)

termShape.Classes.Add(("term-" + taxonomyPart.TermContentType).HtmlClassify());

var encodedContentType = EncodeAlternateElement(taxonomyPart.TermContentType);
var encodedContentType = taxonomyPart.TermContentType.EncodeAlternateElement();
// Term__[ContentType] e.g. Term-Category, Term-Tag.
termShape.Metadata.Alternates.Add("Term__" + encodedContentType);

Expand Down Expand Up @@ -190,7 +191,7 @@ public void Discover(ShapeTableBuilder builder)
}
}

var encodedContentType = EncodeAlternateElement(taxonomyPart.TermContentType);
var encodedContentType = taxonomyPart.TermContentType.EncodeAlternateElement();

// TermItem__level__[level] e.g. TermItem-level-2.
termItem.Metadata.Alternates.Add("TermItem__level__" + level);
Expand Down Expand Up @@ -223,7 +224,7 @@ public void Discover(ShapeTableBuilder builder)

var termContentItem = termItem.GetProperty<ContentItem>("TermContentItem");

var encodedContentType = EncodeAlternateElement(termContentItem.ContentItem.ContentType);
var encodedContentType = termContentItem.ContentItem.ContentType.EncodeAlternateElement();

termItem.Metadata.Alternates.Add("TermContentItem__level__" + level);

Expand Down Expand Up @@ -276,16 +277,6 @@ private int FindTerm(JArray termsArray, string termContentItemId, int level, out
return level;
}

/// <summary>
/// Encodes dashed and dots so that they don't conflict in filenames.
/// </summary>
/// <param name="alternateElement"></param>
/// <returns></returns>
private static string EncodeAlternateElement(string alternateElement)
{
return alternateElement.Replace("-", "__").Replace('.', '_');
}

/// <summary>
/// Converts "foo-ba r" to "FooBaR".
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
using OrchardCore.DisplayManagement.Handlers;
using OrchardCore.DisplayManagement.Views;
using OrchardCore.Entities;
using OrchardCore.Settings;
using OrchardCore.Users.Models;

namespace OrchardCore.Users.Drivers;

public class ChangeEmailUserMenuDisplayDriver : DisplayDriver<UserMenu>
{
private readonly ISiteService _siteService;

public ChangeEmailUserMenuDisplayDriver(ISiteService siteService)
{
_siteService = siteService;
}

public override IDisplayResult Display(UserMenu model)
{
return View("UserMenuItems__ChangeEmail", model)
.RenderWhen(async () => (await _siteService.GetSiteSettingsAsync()).As<ChangeEmailSettings>().AllowChangeEmail)
.Location("Detail", "Content:20")
.Location("DetailAdmin", "Content:20");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using OrchardCore.DisplayManagement.Handlers;
using OrchardCore.DisplayManagement.Views;
using OrchardCore.Users.Models;

namespace OrchardCore.Users.Drivers;

public class TwoFactorUserMenuDisplayDriver : DisplayDriver<UserMenu>
{
public override IDisplayResult Display(UserMenu model)
{
return View("UserMenuItems__TwoFactor", model)
.Location("Detail", "Content:15")
.Location("DetailAdmin", "Content:15");
}
}
Loading