
The component now reports back if the module is in use. This will assist in housekeeping and removal of unused modules.
152 lines
6.1 KiB
Plaintext
152 lines
6.1 KiB
Plaintext
@namespace Oqtane.Modules.Admin.ModuleDefinitions
|
|
@inherits ModuleBase
|
|
@inject NavigationManager NavigationManager
|
|
@inject IModuleDefinitionService ModuleDefinitionService
|
|
@inject IPackageService PackageService
|
|
@inject IStringLocalizer<Index> Localizer
|
|
@inject IStringLocalizer<SharedResources> SharedLocalizer
|
|
|
|
@if (_moduleDefinitions == null)
|
|
{
|
|
<p><em>@SharedLocalizer["Loading"]</em></p>
|
|
}
|
|
else
|
|
{
|
|
<ActionLink Action="Add" Text="Install Module" ResourceKey="InstallModule" />
|
|
@((MarkupString)" ")
|
|
<ActionLink Action="Create" Text="Create Module" ResourceKey="CreateModule" Class="btn btn-secondary" />
|
|
|
|
<Pager Items="@_moduleDefinitions">
|
|
<Header>
|
|
<th style="width: 1px;"> </th>
|
|
<th style="width: 1px;"> </th>
|
|
<th>@SharedLocalizer["Name"]</th>
|
|
<th>@SharedLocalizer["Version"]</th>
|
|
<th>@Localizer["InUse"]</th>
|
|
<th>@SharedLocalizer["Expires"]</th>
|
|
<th style="width: 1px;"> </th>
|
|
</Header>
|
|
<Row>
|
|
<td><ActionLink Action="Edit" Parameters="@($"id=" + context.ModuleDefinitionId.ToString())" ResourceKey="EditModule" /></td>
|
|
<td>
|
|
@if (context.AssemblyName != "Oqtane.Client")
|
|
{
|
|
<ActionDialog Header="Delete Module" Message="@string.Format(Localizer["Confirm.Module.Delete", context.Name])" Action="Delete" Security="SecurityAccessLevel.Host" Class="btn btn-danger" OnClick="@(async () => await DeleteModule(context))" ResourceKey="DeleteModule" />
|
|
}
|
|
</td>
|
|
<td>@context.Name</td>
|
|
<td>@context.Version</td>
|
|
<td>
|
|
@if(context.AssemblyName == "Oqtane.Client" || PageState.Modules.Where(m => m.ModuleDefinition.ModuleDefinitionId == context.ModuleDefinitionId).Count() > 0)
|
|
{
|
|
<span>@SharedLocalizer["Yes"]</span>
|
|
}
|
|
else
|
|
{
|
|
<span>@SharedLocalizer["No"]</span>
|
|
}
|
|
</td>
|
|
<td>
|
|
@((MarkupString)PurchaseLink(context.PackageName))
|
|
</td>
|
|
<td>
|
|
@if (UpgradeAvailable(context.PackageName, context.Version))
|
|
{
|
|
<button type="button" class="btn btn-success" @onclick=@(async () => await DownloadModule(context.PackageName, context.Version))>@SharedLocalizer["Upgrade"]</button>
|
|
}
|
|
</td>
|
|
</Row>
|
|
</Pager>
|
|
}
|
|
|
|
@code {
|
|
private List<ModuleDefinition> _moduleDefinitions;
|
|
private List<Package> _packages;
|
|
|
|
public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Host;
|
|
|
|
protected override async Task OnParametersSetAsync()
|
|
{
|
|
try
|
|
{
|
|
_moduleDefinitions = await ModuleDefinitionService.GetModuleDefinitionsAsync(PageState.Site.SiteId);
|
|
_packages = await PackageService.GetPackagesAsync("module");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
if (_moduleDefinitions == null)
|
|
{
|
|
await logger.LogError(ex, "Error Loading Modules {Error}", ex.Message);
|
|
AddModuleMessage(Localizer["Error.Module.Load"], MessageType.Error);
|
|
}
|
|
}
|
|
}
|
|
|
|
private string PurchaseLink(string packagename)
|
|
{
|
|
string link = "";
|
|
if (!string.IsNullOrEmpty(packagename) && _packages != null)
|
|
{
|
|
var package = _packages.Where(item => item.PackageId == packagename).FirstOrDefault();
|
|
if (package != null)
|
|
{
|
|
if (package.ExpiryDate != null && package.ExpiryDate.Value.Date != DateTime.MaxValue.Date)
|
|
{
|
|
link += "<span>" + package.ExpiryDate.Value.Date.ToString("MMM dd, yyyy") + "</span>";
|
|
if (!string.IsNullOrEmpty(package.PaymentUrl))
|
|
{
|
|
link += " <a class=\"btn btn-primary\" style=\"text-decoration: none !important\" href=\"" + package.PaymentUrl + "\" target=\"_new\">" + SharedLocalizer["Extend"] + "</a>";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return link;
|
|
}
|
|
|
|
private bool UpgradeAvailable(string packagename, string version)
|
|
{
|
|
var upgradeavailable = false;
|
|
if (!string.IsNullOrEmpty(packagename) && _packages != null)
|
|
{
|
|
var package = _packages.Where(item => item.PackageId == packagename).FirstOrDefault();
|
|
if (package != null)
|
|
{
|
|
upgradeavailable = (Version.Parse(package.Version).CompareTo(Version.Parse(version)) > 0);
|
|
}
|
|
|
|
}
|
|
return upgradeavailable;
|
|
}
|
|
|
|
private async Task DownloadModule(string packagename, string version)
|
|
{
|
|
try
|
|
{
|
|
await PackageService.DownloadPackageAsync(packagename, version, Constants.PackagesFolder);
|
|
await logger.LogInformation("Module Downloaded {ModuleDefinitionName} {Version}", packagename, version);
|
|
await ModuleDefinitionService.InstallModuleDefinitionsAsync();
|
|
AddModuleMessage(string.Format(Localizer["Success.Module.Install"], NavigateUrl("admin/system")), MessageType.Success);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
await logger.LogError(ex, "Error Downloading Module {ModuleDefinitionName} {Version} {Error}", packagename, version, ex.Message);
|
|
AddModuleMessage(Localizer["Error.Module.Download"], MessageType.Error);
|
|
}
|
|
}
|
|
|
|
private async Task DeleteModule(ModuleDefinition moduleDefinition)
|
|
{
|
|
try
|
|
{
|
|
await ModuleDefinitionService.DeleteModuleDefinitionAsync(moduleDefinition.ModuleDefinitionId, moduleDefinition.SiteId);
|
|
AddModuleMessage(Localizer["Success.Module.Delete"], MessageType.Success);
|
|
NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, true));
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
await logger.LogError(ex, "Error Deleting Module {ModuleDefinition} {Error}", moduleDefinition, ex.Message);
|
|
AddModuleMessage(Localizer["Error.Module.Delete"], MessageType.Error);
|
|
}
|
|
}
|
|
}
|