163 lines
6.6 KiB
Plaintext
163 lines
6.6 KiB
Plaintext
@namespace Oqtane.Modules.Admin.ModuleDefinitions
|
|
@inherits ModuleBase
|
|
@using System.Text.RegularExpressions
|
|
@inject NavigationManager NavigationManager
|
|
@inject IModuleDefinitionService ModuleDefinitionService
|
|
@inject IModuleService ModuleService
|
|
@inject ISettingService SettingService
|
|
@inject IStringLocalizer<Index> Localizer
|
|
|
|
@if (_templates != null)
|
|
{
|
|
<table class="table table-borderless">
|
|
<tr>
|
|
<td>
|
|
<Label For="owner" HelpText="Enter the name of the organization who is developing this module. It should not contain spaces or punctuation." ResourceKey="OwnerName">Owner Name: </Label>
|
|
</td>
|
|
<td>
|
|
<input id="owner" class="form-control" @bind="@_owner" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<Label For="module" HelpText="Enter a name for this module. It should not contain spaces or punctuation." ResourceKey="ModuleName">Module Name: </Label>
|
|
</td>
|
|
<td>
|
|
<input id="module" class="form-control" @bind="@_module" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<Label For="description" HelpText="Enter a short description for the module" ResourceKey="Description">Description: </Label>
|
|
</td>
|
|
<td>
|
|
<textarea id="description" class="form-control" @bind="@_description" rows="3"></textarea>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<Label For="template" HelpText="Select a module template. Templates are located in the wwwroot/Modules/Templates folder on the server." ResourceKey="Template">Template: </Label>
|
|
</td>
|
|
<td>
|
|
<select id="template" class="form-control" @onchange="(e => TemplateChanged(e))">
|
|
<option value="-"><@Localizer["Select Template"]></option>
|
|
@foreach (Template template in _templates)
|
|
{
|
|
<option value="@template.Name">@template.Name</option>
|
|
}
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<Label For="reference" HelpText="Select a framework reference version" ResourceKey="FrameworkReference">Framework Reference: </Label>
|
|
</td>
|
|
<td>
|
|
<select id="reference" class="form-control" @bind="@_reference">
|
|
@foreach (string version in _versions)
|
|
{
|
|
if (Version.Parse(version).CompareTo(Version.Parse(_minversion)) >= 0)
|
|
{
|
|
<option value="@(version)">@(version)</option>
|
|
}
|
|
}
|
|
<option value="local">@Localizer["Local Version"]</option>
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
@if (!string.IsNullOrEmpty(_location))
|
|
{
|
|
<tr>
|
|
<td>
|
|
<Label For="location" HelpText="Location where the module will be created" ResourceKey="Location">Location: </Label>
|
|
</td>
|
|
<td>
|
|
<input id="module" class="form-control" @bind="@_location" readonly />
|
|
</td>
|
|
</tr>
|
|
}
|
|
</table>
|
|
<button type="button" class="btn btn-success" @onclick="CreateModule">@Localizer["Create Module"]</button>
|
|
<NavLink class="btn btn-secondary" href="@NavigateUrl()">@Localizer["Cancel"]</NavLink>
|
|
}
|
|
|
|
@code {
|
|
private string _owner = string.Empty;
|
|
private string _module = string.Empty;
|
|
private string _description = string.Empty;
|
|
private List<Template> _templates;
|
|
private string _template = "-";
|
|
private string[] _versions;
|
|
private string _reference = Constants.Version;
|
|
private string _minversion = "2.0.0";
|
|
private string _location = string.Empty;
|
|
|
|
public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Host;
|
|
|
|
protected override async Task OnParametersSetAsync()
|
|
{
|
|
try
|
|
{
|
|
_templates = await ModuleDefinitionService.GetModuleDefinitionTemplatesAsync();
|
|
_versions = Constants.ReleaseVersions.Split(',').Where(item => Version.Parse(item).CompareTo(Version.Parse("2.0.0")) >= 0).ToArray();
|
|
AddModuleMessage(Localizer["Please Note That The Module Creator Is Only Intended To Be Used In A Development Environment"], MessageType.Info);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
await logger.LogError(ex, "Error Loading Module Creator");
|
|
}
|
|
}
|
|
|
|
private async Task CreateModule()
|
|
{
|
|
try
|
|
{
|
|
if (IsValid(_owner) && IsValid(_module) && _owner != _module && _template != "-")
|
|
{
|
|
var moduleDefinition = new ModuleDefinition { Owner = _owner, Name = _module, Description = _description, Template = _template, Version = _reference };
|
|
moduleDefinition = await ModuleDefinitionService.CreateModuleDefinitionAsync(moduleDefinition);
|
|
GetLocation();
|
|
AddModuleMessage(Localizer["The Source Code For Your Module Has Been Created At The Location Specified Below And Must Be Compiled In Order To Make It Functional. Once It Has Been Compiled You Must <a href=\"{0}\">Restart</a> Your Application To Activate The Module.", NavigateUrl("admin/system")], MessageType.Success);
|
|
}
|
|
else
|
|
{
|
|
AddModuleMessage(Localizer["You Must Provide A Valid Owner Name And Module Name ( ie. No Punctuation Or Spaces And The Values Cannot Be The Same ) And Choose A Template"], MessageType.Warning);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
await logger.LogError(ex, "Error Creating Module");
|
|
}
|
|
}
|
|
|
|
private bool IsValid(string name)
|
|
{
|
|
// must contain letters, underscores and digits and first character must be letter or underscore
|
|
return !string.IsNullOrEmpty(name) && Regex.IsMatch(name, "^[A-Za-z_][A-Za-z0-9_]*$");
|
|
}
|
|
|
|
private void TemplateChanged(ChangeEventArgs e)
|
|
{
|
|
_template = (string)e.Value;
|
|
_minversion = "2.0.0";
|
|
if (_template != "-")
|
|
{
|
|
var template = _templates.FirstOrDefault(item => item.Name == _template);
|
|
_minversion = template.Version;
|
|
}
|
|
GetLocation();
|
|
}
|
|
|
|
private void GetLocation()
|
|
{
|
|
_location = string.Empty;
|
|
if (_owner != "" && _module != "" && _template != "-")
|
|
{
|
|
var template = _templates.FirstOrDefault(item => item.Name == _template);
|
|
_location = template.Location + _owner + "." + _module;
|
|
|
|
}
|
|
StateHasChanged();
|
|
}
|
|
}
|