diff --git a/Oqtane.Client/Modules/Controls/Section.razor b/Oqtane.Client/Modules/Controls/Section.razor
index 115e352d..928f1edc 100644
--- a/Oqtane.Client/Modules/Controls/Section.razor
+++ b/Oqtane.Client/Modules/Controls/Section.razor
@@ -17,7 +17,10 @@
- @ChildContent
+ @if (ChildContent != null)
+ {
+ @ChildContent
+ }
@code {
@@ -26,7 +29,7 @@
private string _show = string.Empty;
[Parameter]
- public RenderFragment ChildContent { get; set; }
+ public RenderFragment ChildContent { get; set; } = null;
[Parameter]
public string Name { get; set; } // required - the name of the section
diff --git a/Oqtane.Client/Services/Interfaces/IPackageService.cs b/Oqtane.Client/Services/Interfaces/IPackageService.cs
index f8617439..4ace8cc8 100644
--- a/Oqtane.Client/Services/Interfaces/IPackageService.cs
+++ b/Oqtane.Client/Services/Interfaces/IPackageService.cs
@@ -27,6 +27,17 @@ namespace Oqtane.Services
///
Task> GetPackagesAsync(string type, string search, string price, string package);
+ ///
+ /// Returns a list of packages matching the given parameters
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task> GetPackagesAsync(string type, string search, string price, string package, string sort);
+
///
/// Returns a specific package
///
diff --git a/Oqtane.Client/Services/PackageService.cs b/Oqtane.Client/Services/PackageService.cs
index a45c73e6..78752d38 100644
--- a/Oqtane.Client/Services/PackageService.cs
+++ b/Oqtane.Client/Services/PackageService.cs
@@ -23,7 +23,12 @@ namespace Oqtane.Services
public async Task> GetPackagesAsync(string type, string search, string price, string package)
{
- return await GetJsonAsync>($"{Apiurl}?type={type}&search={WebUtility.UrlEncode(search)}&price={price}&package={package}");
+ return await GetPackagesAsync(type, search, price, package, "");
+ }
+
+ public async Task> GetPackagesAsync(string type, string search, string price, string package, string sort)
+ {
+ return await GetJsonAsync>($"{Apiurl}?type={type}&search={WebUtility.UrlEncode(search)}&price={price}&package={package}&sort={sort}");
}
public async Task GetPackageAsync(string packageId, string version)
diff --git a/Oqtane.Server/Controllers/FolderController.cs b/Oqtane.Server/Controllers/FolderController.cs
index 6914aac7..b95f97f8 100644
--- a/Oqtane.Server/Controllers/FolderController.cs
+++ b/Oqtane.Server/Controllers/FolderController.cs
@@ -80,7 +80,7 @@ namespace Oqtane.Controllers
public Folder GetByPath(int siteId, string path)
{
var folderPath = WebUtility.UrlDecode(path).Replace("\\", "/");
- if (!folderPath.EndsWith("/"))
+ if (!folderPath.EndsWith("/") && folderPath != "")
{
folderPath += "/";
}
diff --git a/Oqtane.Server/Controllers/PackageController.cs b/Oqtane.Server/Controllers/PackageController.cs
index d4ba5c21..fe2ad700 100644
--- a/Oqtane.Server/Controllers/PackageController.cs
+++ b/Oqtane.Server/Controllers/PackageController.cs
@@ -34,7 +34,7 @@ namespace Oqtane.Controllers
// GET: api/?type=x&search=y&price=z&package=a
[HttpGet]
- public async Task> Get(string type, string search, string price, string package)
+ public async Task> Get(string type, string search, string price, string package, string sort)
{
// get packages
List packages = new List();
@@ -44,7 +44,7 @@ namespace Oqtane.Controllers
{
client.DefaultRequestHeaders.Add("Referer", HttpContext.Request.Scheme + "://" + HttpContext.Request.Host.Value);
client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue(Constants.PackageId, Constants.Version));
- packages = await GetJson>(client, Constants.PackageRegistryUrl + $"/api/registry/packages/?id={_configManager.GetInstallationId()}&type={type.ToLower()}&version={Constants.Version}&search={search}&price={price}&package={package}");
+ packages = await GetJson>(client, Constants.PackageRegistryUrl + $"/api/registry/packages/?id={_configManager.GetInstallationId()}&type={type.ToLower()}&version={Constants.Version}&search={search}&price={price}&package={package}&sort={sort}");
}
}
return packages;
diff --git a/Oqtane.Server/Controllers/PageController.cs b/Oqtane.Server/Controllers/PageController.cs
index f22f7467..73bacb34 100644
--- a/Oqtane.Server/Controllers/PageController.cs
+++ b/Oqtane.Server/Controllers/PageController.cs
@@ -7,14 +7,8 @@ using System.Linq;
using Oqtane.Security;
using System.Net;
using Oqtane.Enums;
-using Oqtane.Extensions;
using Oqtane.Infrastructure;
using Oqtane.Repository;
-using Oqtane.Modules.Admin.Users;
-using System.IO;
-using Oqtane.Services;
-using Oqtane.UI;
-using System;
namespace Oqtane.Controllers
{
diff --git a/Oqtane.Server/Repository/ModuleDefinitionRepository.cs b/Oqtane.Server/Repository/ModuleDefinitionRepository.cs
index a82cce99..93d0f7f4 100644
--- a/Oqtane.Server/Repository/ModuleDefinitionRepository.cs
+++ b/Oqtane.Server/Repository/ModuleDefinitionRepository.cs
@@ -101,6 +101,7 @@ namespace Oqtane.Repository
ModuleDefinition.IsPortable = moduleDefinition.IsPortable;
ModuleDefinition.Resources = moduleDefinition.Resources;
ModuleDefinition.IsEnabled = moduleDefinition.IsEnabled;
+ ModuleDefinition.PackageName = moduleDefinition.PackageName;
}
return ModuleDefinition;
diff --git a/Oqtane.Server/Repository/ThemeRepository.cs b/Oqtane.Server/Repository/ThemeRepository.cs
index 02e4a9c0..d34d2f31 100644
--- a/Oqtane.Server/Repository/ThemeRepository.cs
+++ b/Oqtane.Server/Repository/ThemeRepository.cs
@@ -89,6 +89,7 @@ namespace Oqtane.Repository
Theme.Containers = theme.Containers;
Theme.ThemeSettingsType = theme.ThemeSettingsType;
Theme.ContainerSettingsType = theme.ContainerSettingsType;
+ Theme.PackageName = theme.PackageName;
Themes.Add(Theme);
}
diff --git a/Oqtane.Shared/Models/Package.cs b/Oqtane.Shared/Models/Package.cs
index 1a57e7bc..1e424744 100644
--- a/Oqtane.Shared/Models/Package.cs
+++ b/Oqtane.Shared/Models/Package.cs
@@ -32,6 +32,11 @@ namespace Oqtane.Models
///
public string Description { get; set; }
+ ///
+ /// logo
+ ///
+ public int? LogoFileId { get; set; }
+
///
/// License for the Package.
///
@@ -62,6 +67,11 @@ namespace Oqtane.Models
///
public string PackageUrl { get; set; }
+ ///
+ /// The direct Url for getting support for the product
+ ///
+ public string SupportUrl { get; set; }
+
///
/// Indicates if any known security vulnerabilities exist
///