Merge branch 'oqtane:dev' into dev

This commit is contained in:
vnetonline 2023-06-29 11:05:12 +10:00 committed by GitHub
commit a3b54b9891
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 90 additions and 80 deletions

View File

@ -603,16 +603,6 @@
await PageService.UpdatePageOrderAsync(_page.SiteId, _page.PageId, int.Parse(_currentparentid)); await PageService.UpdatePageOrderAsync(_page.SiteId, _page.PageId, int.Parse(_currentparentid));
} }
// update child paths
if (_parentid != _currentparentid)
{
foreach (Page p in PageState.Pages.Where(item => item.Path.StartsWith(currentPath)))
{
p.Path = p.Path.Replace(currentPath, _page.Path);
await PageService.UpdatePageAsync(p);
}
}
if (_themeSettingsType != null && _themeSettings is ISettingsControl themeSettingsControl) if (_themeSettingsType != null && _themeSettings is ISettingsControl themeSettingsControl)
{ {
await themeSettingsControl.UpdateSettings(); await themeSettingsControl.UpdateSettings();

View File

@ -235,7 +235,7 @@
<Section Name="Aliases" Heading="Aliases" ResourceKey="Aliases"> <Section Name="Aliases" Heading="Aliases" ResourceKey="Aliases">
<div class="container"> <div class="container">
<div class="row mb-1 align-items-center"> <div class="row mb-1 align-items-center">
<Label Class="col-sm-3" For="aliases" HelpText="The list of aliases for this site" ResourceKey="Aliases">Aliases: </Label> <Label Class="col-sm-3" For="aliases" HelpText="The urls for the site. This can include domain names (ie. domain.com), subdomains (ie. sub.domain.com) or virtual folders (ie. domain.com/folder)." ResourceKey="Aliases">Aliases: </Label>
<div class="col-sm-9"> <div class="col-sm-9">
<button type="button" class="btn btn-primary" @onclick="AddAlias">@SharedLocalizer["Add"]</button> <button type="button" class="btn btn-primary" @onclick="AddAlias">@SharedLocalizer["Add"]</button>
<Pager Items="@_aliases"> <Pager Items="@_aliases">
@ -271,7 +271,7 @@
<input id="aliasname" class="form-control" @bind="@_aliasname" /> <input id="aliasname" class="form-control" @bind="@_aliasname" />
</td> </td>
<td> <td>
<select id="defaultaias" class="form-select" @bind="@_defaultalias" required> <select id="defaultalias" class="form-select" @bind="@_defaultalias" required>
<option value="True">@SharedLocalizer["Yes"]</option> <option value="True">@SharedLocalizer["Yes"]</option>
<option value="False">@SharedLocalizer["No"]</option> <option value="False">@SharedLocalizer["No"]</option>
</select> </select>

View File

@ -29,7 +29,7 @@ else
</div> </div>
</div> </div>
<div class="row mb-1 align-items-center"> <div class="row mb-1 align-items-center">
<Label Class="col-sm-3" For="alias" HelpText="Enter the aliases for the site. An alias can be a domain name (www.site.com) or a virtual folder (ie. www.site.com/folder)." ResourceKey="Aliases">Aliases: </Label> <Label Class="col-sm-3" For="alias" HelpText="The urls for the site (comman delimited). This can include domain names (ie. domain.com), subdomains (ie. sub.domain.com) or virtual folders (ie. domain.com/folder)." ResourceKey="Aliases">Urls: </Label>
<div class="col-sm-9"> <div class="col-sm-9">
<textarea id="alias" class="form-control" @bind="@_urls" rows="3" required></textarea> <textarea id="alias" class="form-control" @bind="@_urls" rows="3" required></textarea>
</div> </div>

View File

@ -18,7 +18,7 @@ else
<Header> <Header>
<th style="width: 1px;">&nbsp;</th> <th style="width: 1px;">&nbsp;</th>
<th style="width: 1px;">&nbsp;</th> <th style="width: 1px;">&nbsp;</th>
<th>@SharedLocalizer["Name"]</th> <th>@Localizer["AliasName"]</th>
</Header> </Header>
<Row> <Row>
<td><button type="button" class="btn btn-primary" @onclick="@(async () => Edit(context.Name))">@SharedLocalizer["Edit"]</button></td> <td><button type="button" class="btn btn-primary" @onclick="@(async () => Edit(context.Name))">@SharedLocalizer["Edit"]</button></td>

View File

@ -40,7 +40,7 @@
protected override void OnInitialized() protected override void OnInitialized()
{ {
_heading = (!string.IsNullOrEmpty(Heading)) ? Heading : Name; _heading = (!string.IsNullOrEmpty(Heading)) ? Heading : Name;
_expanded = (!string.IsNullOrEmpty(Expanded)) ? Expanded : "false"; _expanded = (!string.IsNullOrEmpty(Expanded)) ? Expanded.ToLower() : "false";
if (_expanded == "true") { _show = "show"; } if (_expanded == "true") { _show = "show"; }
} }

View File

@ -8,7 +8,7 @@
@foreach (TabPanel tabPanel in _tabPanels) @foreach (TabPanel tabPanel in _tabPanels)
{ {
<li class="nav-item" @key="tabPanel.Name"> <li class="nav-item" @key="tabPanel.Name">
@if (tabPanel.Name == ActiveTab) @if (tabPanel.Name.ToLower() == ActiveTab.ToLower())
{ {
<a class="nav-link active" data-bs-toggle="tab" href="#@(Id + tabPanel.Name)" role="tab" @onclick:preventDefault="true"> <a class="nav-link active" data-bs-toggle="tab" href="#@(Id + tabPanel.Name)" role="tab" @onclick:preventDefault="true">
@tabPanel.DisplayHeading() @tabPanel.DisplayHeading()

View File

@ -166,7 +166,7 @@
<value>The name of the database used for the site</value> <value>The name of the database used for the site</value>
</data> </data>
<data name="Aliases.HelpText" xml:space="preserve"> <data name="Aliases.HelpText" xml:space="preserve">
<value>The aliases for the site. An alias can be a domain name (www.site.com) or a virtual folder (ie. www.site.com/folder).</value> <value>The urls for the site. This can include domain names (ie. domain.com), subdomains (ie. sub.domain.com) or virtual folders (ie. domain.com/folder).</value>
</data> </data>
<data name="IsDeleted.HelpText" xml:space="preserve"> <data name="IsDeleted.HelpText" xml:space="preserve">
<value>Is this site deleted?</value> <value>Is this site deleted?</value>
@ -217,7 +217,7 @@
<value>Database: </value> <value>Database: </value>
</data> </data>
<data name="Aliases.Text" xml:space="preserve"> <data name="Aliases.Text" xml:space="preserve">
<value>Aliases: </value> <value>Urls:</value>
</data> </data>
<data name="IsDeleted.Text" xml:space="preserve"> <data name="IsDeleted.Text" xml:space="preserve">
<value>Deleted? </value> <value>Deleted? </value>
@ -322,10 +322,10 @@
<value>Default Alias: </value> <value>Default Alias: </value>
</data> </data>
<data name="Aliases.Heading" xml:space="preserve"> <data name="Aliases.Heading" xml:space="preserve">
<value>Aliases</value> <value>Urls</value>
</data> </data>
<data name="AliasName" xml:space="preserve"> <data name="AliasName" xml:space="preserve">
<value>Name</value> <value>Url</value>
</data> </data>
<data name="AliasDefault" xml:space="preserve"> <data name="AliasDefault" xml:space="preserve">
<value>Default?</value> <value>Default?</value>

View File

@ -136,7 +136,7 @@
<value>Default Admin Container</value> <value>Default Admin Container</value>
</data> </data>
<data name="Aliases.HelpText" xml:space="preserve"> <data name="Aliases.HelpText" xml:space="preserve">
<value>Enter the alias for the server</value> <value>The urls for the site (comman delimited). This can include domain names (ie. domain.com), subdomains (ie. sub.domain.com) or a virtual folder (ie. domain.com/folder).</value>
</data> </data>
<data name="DefaultContainer.HelpText" xml:space="preserve"> <data name="DefaultContainer.HelpText" xml:space="preserve">
<value>Select the default container for the site</value> <value>Select the default container for the site</value>
@ -145,7 +145,7 @@
<value>Database: </value> <value>Database: </value>
</data> </data>
<data name="Aliases.Text" xml:space="preserve"> <data name="Aliases.Text" xml:space="preserve">
<value>Aliases: </value> <value>Urls: </value>
</data> </data>
<data name="DefaultTheme.Text" xml:space="preserve"> <data name="DefaultTheme.Text" xml:space="preserve">
<value>Default Theme: </value> <value>Default Theme: </value>

View File

@ -135,4 +135,7 @@
<data name="Browse" xml:space="preserve"> <data name="Browse" xml:space="preserve">
<value>Browse</value> <value>Browse</value>
</data> </data>
<data name="AliasName" xml:space="preserve">
<value>Url</value>
</data>
</root> </root>

View File

@ -26,7 +26,7 @@
} }
else else
{ {
SiteState.Properties.PageTitle = PageState.Site.Name + " - " + PageState.Page.Name; SiteState.Properties.PageTitle = PageState.Page.Name + " - " + PageState.Site.Name;
} }
// set page head content // set page head content

View File

@ -12,6 +12,9 @@ using Oqtane.Infrastructure;
using Oqtane.Repository; using Oqtane.Repository;
using Oqtane.Modules.Admin.Users; using Oqtane.Modules.Admin.Users;
using System.IO; using System.IO;
using Oqtane.Services;
using Oqtane.UI;
using System;
namespace Oqtane.Controllers namespace Oqtane.Controllers
{ {
@ -180,9 +183,9 @@ namespace Oqtane.Controllers
page = new Page(); page = new Page();
page.SiteId = parent.SiteId; page.SiteId = parent.SiteId;
page.ParentId = parent.PageId; page.ParentId = parent.PageId;
page.Name = user.Username; page.Name = user.DisplayName;
page.Path = parent.Path + "/" + page.Name; page.Path = parent.Path + "/" + Utilities.GetFriendlyUrl(page.Name);
page.Title = parent.Name + " - " + page.Name; page.Title = page.Name + " - " + parent.Name;
page.Order = 0; page.Order = 0;
page.IsNavigation = false; page.IsNavigation = false;
page.Url = ""; page.Url = "";
@ -263,7 +266,10 @@ namespace Oqtane.Controllers
// save url mapping if page path changed // save url mapping if page path changed
if (currentPage.Path != page.Path) if (currentPage.Path != page.Path)
{ {
var urlMapping = new UrlMapping(); var urlMapping = _urlMappings.GetUrlMapping(page.SiteId, currentPage.Path);
if (urlMapping == null)
{
urlMapping = new UrlMapping();
urlMapping.SiteId = page.SiteId; urlMapping.SiteId = page.SiteId;
urlMapping.Url = currentPage.Path; urlMapping.Url = currentPage.Path;
urlMapping.MappedUrl = page.Path; urlMapping.MappedUrl = page.Path;
@ -272,6 +278,7 @@ namespace Oqtane.Controllers
urlMapping.RequestedOn = System.DateTime.UtcNow; urlMapping.RequestedOn = System.DateTime.UtcNow;
_urlMappings.AddUrlMapping(urlMapping); _urlMappings.AddUrlMapping(urlMapping);
} }
}
// get differences between current and new page permissions // get differences between current and new page permissions
var added = GetPermissionsDifferences(page.PermissionList, currentPermissions); var added = GetPermissionsDifferences(page.PermissionList, currentPermissions);
@ -314,6 +321,16 @@ namespace Oqtane.Controllers
} }
} }
// update child paths
if (page.ParentId != currentPage.ParentId)
{
foreach (Page _page in _pages.GetPages(page.SiteId).Where(item => item.Path.StartsWith(currentPage.Path)).ToList())
{
_page.Path = _page.Path.Replace(currentPage.Path, page.Path);
_pages.UpdatePage(_page);
}
}
_syncManager.AddSyncEvent(_alias.TenantId, EntityNames.Page, page.PageId, SyncEventActions.Update); _syncManager.AddSyncEvent(_alias.TenantId, EntityNames.Page, page.PageId, SyncEventActions.Update);
_syncManager.AddSyncEvent(_alias.TenantId, EntityNames.Site, page.SiteId, SyncEventActions.Refresh); _syncManager.AddSyncEvent(_alias.TenantId, EntityNames.Site, page.SiteId, SyncEventActions.Refresh);
_logger.Log(LogLevel.Information, this, LogFunction.Update, "Page Updated {Page}", page); _logger.Log(LogLevel.Information, this, LogFunction.Update, "Page Updated {Page}", page);

View File

@ -246,7 +246,7 @@ namespace Oqtane.Controllers
foreach (Page child in children) foreach (Page child in children)
{ {
child.Level = level + 1; child.Level = level + 1;
child.HasChildren = pages.Any(item => item.ParentId == child.PageId); child.HasChildren = pages.Any(item => item.ParentId == child.PageId && !item.IsDeleted);
hierarchy.Add(child); hierarchy.Add(child);
getPath(pageList, child); getPath(pageList, child);
} }

View File

@ -114,7 +114,7 @@ namespace Oqtane.Pages
} }
var site = _sites.InitializeSite(alias); var site = _sites.InitializeSite(alias);
if (site != null && !site.IsDeleted && site.Runtime != "Hybrid") if (site != null && (!site.IsDeleted || url.Contains("admin/site")) && site.Runtime != "Hybrid")
{ {
Route route = new Route(url, alias.Path); Route route = new Route(url, alias.Path);