diff --git a/Oqtane.Client/Modules/Admin/Dashboard/Index.razor b/Oqtane.Client/Modules/Admin/Dashboard/Index.razor index eb46b301..6ba9014e 100644 --- a/Oqtane.Client/Modules/Admin/Dashboard/Index.razor +++ b/Oqtane.Client/Modules/Admin/Dashboard/Index.razor @@ -4,32 +4,35 @@ @inject IUserService UserService @inject IStringLocalizer SharedLocalizer -
- @foreach (var p in _pages) - { - if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.View, p.PermissionList)) +@if (_pages != null) +{ +
+ @foreach (var p in _pages) { - string url = NavigateUrl(p.Path); -
- -

@SharedLocalizer[p.Name] -
-
+ if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.View, p.PermissionList)) + { + string url = NavigateUrl(p.Path); +
+ +

@SharedLocalizer[p.Name] +
+
+ } } - } -
+
+} @code { private List _pages; - public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Anonymous; + public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.View; protected override void OnInitialized() { var admin = PageState.Pages.FirstOrDefault(item => item.Path == "admin"); if (admin != null) { - _pages = PageState.Pages.Where(item => item.ParentId == admin?.PageId).ToList(); + _pages = PageState.Pages.Where(item => item.ParentId == admin.PageId).ToList(); } } } diff --git a/Oqtane.Client/Modules/Admin/Languages/Add.razor b/Oqtane.Client/Modules/Admin/Languages/Add.razor index 5a667f16..00c1e0cc 100644 --- a/Oqtane.Client/Modules/Admin/Languages/Add.razor +++ b/Oqtane.Client/Modules/Admin/Languages/Add.razor @@ -50,11 +50,10 @@ else
- +
- @SharedLocalizer["Cancel"] @@ -125,18 +124,6 @@ else } } - private async Task InstallTranslations() - { - try - { - AddModuleMessage(string.Format(Localizer["Success.Language.Install"], NavigateUrl("admin/system")), MessageType.Success); - } - catch (Exception ex) - { - await logger.LogError(ex, "Error Installing Translations"); - } - } - private async Task SetCultureAsync(string culture) { if (culture != CultureInfo.CurrentUICulture.Name) @@ -148,4 +135,9 @@ else NavigationManager.NavigateTo(NavigationManager.Uri, true); } } + + private void OnUpload() + { + AddModuleMessage(string.Format(Localizer["Success.Language.Download"], NavigateUrl("admin/system")), MessageType.Success); + } } diff --git a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Add.razor b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Add.razor index 0ac63c11..548a45f5 100644 --- a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Add.razor +++ b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Add.razor @@ -65,13 +65,15 @@ } } +
+
- +
@@ -112,137 +114,139 @@ } @SharedLocalizer["Cancel"] -
-
- @code { - private List _packages; - private string _price = "free"; - private string _search = ""; - private string _productname = ""; - private string _packageid = ""; - private string _packagelicense = ""; - private string _packageversion = ""; + private List _packages; + private string _price = "free"; + private string _search = ""; + private string _productname = ""; + private string _packageid = ""; + private string _packagelicense = ""; + private string _packageversion = ""; - public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Host; + public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Host; - protected override async Task OnInitializedAsync() - { - try - { - await LoadModuleDefinitions(); - } - catch (Exception ex) - { - await logger.LogError(ex, "Error Loading Packages {Error}", ex.Message); - AddModuleMessage(Localizer["Error.Package.Load"], MessageType.Error); - } - } + protected override async Task OnInitializedAsync() + { + try + { + await LoadModuleDefinitions(); + } + catch (Exception ex) + { + await logger.LogError(ex, "Error Loading Packages {Error}", ex.Message); + AddModuleMessage(Localizer["Error.Package.Load"], MessageType.Error); + } + } - private async Task LoadModuleDefinitions() - { - var moduledefinitions = await ModuleDefinitionService.GetModuleDefinitionsAsync(PageState.Site.SiteId); - _packages = await PackageService.GetPackagesAsync("module", _search, _price, ""); + private async Task LoadModuleDefinitions() + { + var moduledefinitions = await ModuleDefinitionService.GetModuleDefinitionsAsync(PageState.Site.SiteId); + _packages = await PackageService.GetPackagesAsync("module", _search, _price, ""); - if (_packages != null) - { - foreach (Package package in _packages.ToArray()) - { - if (moduledefinitions.Exists(item => item.PackageName == package.PackageId)) - { - _packages.Remove(package); - } - } - } - } + if (_packages != null) + { + foreach (Package package in _packages.ToArray()) + { + if (moduledefinitions.Exists(item => item.PackageName == package.PackageId)) + { + _packages.Remove(package); + } + } + } + } - private async void PriceChanged(ChangeEventArgs e) - { - try - { - _price = (string)e.Value; - _search = ""; - await LoadModuleDefinitions(); - StateHasChanged(); - } - catch (Exception ex) - { - await logger.LogError(ex, "Error On PriceChanged"); - } - } + private async void PriceChanged(ChangeEventArgs e) + { + try + { + _price = (string)e.Value; + _search = ""; + await LoadModuleDefinitions(); + StateHasChanged(); + } + catch (Exception ex) + { + await logger.LogError(ex, "Error On PriceChanged"); + } + } - private async Task Search() - { - try - { - await LoadModuleDefinitions(); - } - catch (Exception ex) - { - await logger.LogError(ex, "Error On Search"); - } - } + private async Task Search() + { + try + { + await LoadModuleDefinitions(); + } + catch (Exception ex) + { + await logger.LogError(ex, "Error On Search"); + } + } - private async Task Reset() - { - try - { - _search = ""; - await LoadModuleDefinitions(); - } - catch (Exception ex) - { - await logger.LogError(ex, "Error On Reset"); - } - } + private async Task Reset() + { + try + { + _search = ""; + await LoadModuleDefinitions(); + } + catch (Exception ex) + { + await logger.LogError(ex, "Error On Reset"); + } + } - private void HideModal() - { - _productname = ""; - _packagelicense = ""; - StateHasChanged(); - } + private void HideModal() + { + _productname = ""; + _packagelicense = ""; + StateHasChanged(); + } - private async Task GetPackage(string packageid, string version) - { - try - { - var package = await PackageService.GetPackageAsync(packageid, version); - if (package != null) - { - _productname = package.Name; - _packageid = package.PackageId; - if (!string.IsNullOrEmpty(package.License)) - { - _packagelicense = package.License.Replace("\n", "
"); - } - _packageversion = package.Version; - } - StateHasChanged(); - } - catch (Exception ex) - { - await logger.LogError(ex, "Error Getting Package {PackageId} {Version}", packageid, version); - AddModuleMessage(Localizer["Error.Module.Download"], MessageType.Error); - } - } + private async Task GetPackage(string packageid, string version) + { + try + { + var package = await PackageService.GetPackageAsync(packageid, version); + if (package != null) + { + _productname = package.Name; + _packageid = package.PackageId; + if (!string.IsNullOrEmpty(package.License)) + { + _packagelicense = package.License.Replace("\n", "
"); + } + _packageversion = package.Version; + } + StateHasChanged(); + } + catch (Exception ex) + { + await logger.LogError(ex, "Error Getting Package {PackageId} {Version}", packageid, version); + AddModuleMessage(Localizer["Error.Module.Download"], MessageType.Error); + } + } - private async Task DownloadPackage() - { - try - { - await PackageService.DownloadPackageAsync(_packageid, _packageversion, Constants.PackagesFolder); - await logger.LogInformation("Package {PackageId} {Version} Downloaded Successfully", _packageid, _packageversion); - AddModuleMessage(string.Format(Localizer["Success.Module.Download"], NavigateUrl("admin/system")), MessageType.Success); - _productname = ""; - _packagelicense = ""; - StateHasChanged(); - } - catch (Exception ex) - { - await logger.LogError(ex, "Error Downloading Package {PackageId} {Version}", _packageid, _packageversion); - AddModuleMessage(Localizer["Error.Module.Download"], MessageType.Error); - } - } + private async Task DownloadPackage() + { + try + { + await PackageService.DownloadPackageAsync(_packageid, _packageversion, Constants.PackagesFolder); + await logger.LogInformation("Package {PackageId} {Version} Downloaded Successfully", _packageid, _packageversion); + AddModuleMessage(string.Format(Localizer["Success.Module.Download"], NavigateUrl("admin/system")), MessageType.Success); + _productname = ""; + _packagelicense = ""; + StateHasChanged(); + } + catch (Exception ex) + { + await logger.LogError(ex, "Error Downloading Package {PackageId} {Version}", _packageid, _packageversion); + AddModuleMessage(Localizer["Error.Module.Download"], MessageType.Error); + } + } + + private void OnUpload() + { + AddModuleMessage(string.Format(Localizer["Success.Module.Download"], NavigateUrl("admin/system")), MessageType.Success); + } } diff --git a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Edit.razor b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Edit.razor index 44f2ede6..a209342e 100644 --- a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Edit.razor +++ b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Edit.razor @@ -192,113 +192,121 @@ } @code { - private bool _initialized = false; - private ElementReference form; - private bool validated = false; - private int _moduleDefinitionId; - private string _name; - private string _description = ""; - private string _categories; - private string _moduledefinitionname = ""; - private string _version; - private string _packagename = ""; - private string _owner = ""; - private string _url = ""; - private string _contact = ""; - private string _license = ""; - private string _runtimes = ""; - private List _permissions = null; - private string _createdby; - private DateTime _createdon; - private string _modifiedby; - private DateTime _modifiedon; + private bool _initialized = false; + private ElementReference form; + private bool validated = false; + private int _moduleDefinitionId; + private string _name; + private string _description = ""; + private string _categories; + private string _moduledefinitionname = ""; + private string _version; + private string _packagename = ""; + private string _owner = ""; + private string _url = ""; + private string _contact = ""; + private string _license = ""; + private string _runtimes = ""; + private List _permissions = null; + private string _createdby; + private DateTime _createdon; + private string _modifiedby; + private DateTime _modifiedon; #pragma warning disable 649 - private PermissionGrid _permissionGrid; + private PermissionGrid _permissionGrid; #pragma warning restore 649 - private List _packages; - private List _languages; - private Package _package; + private List _packages; + private List _languages; + private Package _package; - public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin; + public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin; - protected override async Task OnInitializedAsync() - { - try - { - _moduleDefinitionId = Int32.Parse(PageState.QueryString["id"]); - var moduleDefinition = await ModuleDefinitionService.GetModuleDefinitionAsync(_moduleDefinitionId, ModuleState.SiteId); - if (moduleDefinition != null) - { - _name = moduleDefinition.Name; - _description = moduleDefinition.Description; - _categories = moduleDefinition.Categories; - _moduledefinitionname = moduleDefinition.ModuleDefinitionName; - _version = moduleDefinition.Version; - _packagename = moduleDefinition.PackageName; - _owner = moduleDefinition.Owner; - _url = moduleDefinition.Url; - _contact = moduleDefinition.Contact; - _license = moduleDefinition.License; - _runtimes = moduleDefinition.Runtimes; - _permissions = moduleDefinition.PermissionList; - _createdby = moduleDefinition.CreatedBy; - _createdon = moduleDefinition.CreatedOn; - _modifiedby = moduleDefinition.ModifiedBy; - _modifiedon = moduleDefinition.ModifiedOn; + protected override async Task OnInitializedAsync() + { + try + { + _moduleDefinitionId = Int32.Parse(PageState.QueryString["id"]); + var moduleDefinition = await ModuleDefinitionService.GetModuleDefinitionAsync(_moduleDefinitionId, ModuleState.SiteId); + if (moduleDefinition != null) + { + _name = moduleDefinition.Name; + _description = moduleDefinition.Description; + _categories = moduleDefinition.Categories; + _moduledefinitionname = moduleDefinition.ModuleDefinitionName; + _version = moduleDefinition.Version; + _packagename = moduleDefinition.PackageName; + _owner = moduleDefinition.Owner; + _url = moduleDefinition.Url; + _contact = moduleDefinition.Contact; + _license = moduleDefinition.License; + _runtimes = moduleDefinition.Runtimes; + _permissions = moduleDefinition.PermissionList; + _createdby = moduleDefinition.CreatedBy; + _createdon = moduleDefinition.CreatedOn; + _modifiedby = moduleDefinition.ModifiedBy; + _modifiedon = moduleDefinition.ModifiedOn; - if (!string.IsNullOrEmpty(_packagename)) - { - _packages = await PackageService.GetPackagesAsync("translation", "", "", _packagename); - _languages = await LanguageService.GetLanguagesAsync(-1, _packagename); - foreach (var package in _packages) - { - var code = package.PackageId.Split('.').Last(); - if (!_languages.Any(item => item.Code == code)) - { - _languages.Add(new Language { Code = code, Name = CultureInfo.GetCultureInfo(code).DisplayName, Version = package.Version, IsDefault = true }); - } - } - _languages = _languages.OrderBy(item => item.Name).ToList(); - } + if (!string.IsNullOrEmpty(_packagename)) + { + _packages = await PackageService.GetPackagesAsync("translation", "", "", _packagename); + _languages = await LanguageService.GetLanguagesAsync(-1, _packagename); + foreach (var package in _packages) + { + var code = package.PackageId.Split('.').Last(); + if (!_languages.Any(item => item.Code == code)) + { + _languages.Add(new Language { Code = code, Name = CultureInfo.GetCultureInfo(code).DisplayName, Version = package.Version, IsDefault = true }); + } + } + _languages = _languages.OrderBy(item => item.Name).ToList(); + } - _initialized = true; - } - } - catch (Exception ex) - { - await logger.LogError(ex, "Error Loading ModuleDefinition {ModuleDefinitionId} {Error}", _moduleDefinitionId, ex.Message); - AddModuleMessage(Localizer["Error.Module.Load"], MessageType.Error); - } - } + _initialized = true; + } + } + catch (Exception ex) + { + await logger.LogError(ex, "Error Loading ModuleDefinition {ModuleDefinitionId} {Error}", _moduleDefinitionId, ex.Message); + AddModuleMessage(Localizer["Error.Module.Load"], MessageType.Error); + } + } - private async Task SaveModuleDefinition() - { - validated = true; - var interop = new Interop(JSRuntime); - if (await interop.FormValid(form)) - { - try - { - var moduledefinition = await ModuleDefinitionService.GetModuleDefinitionAsync(_moduleDefinitionId, ModuleState.SiteId); - if (moduledefinition.Name != _name) - { - moduledefinition.Name = _name; - } - if (moduledefinition.Description != _description) - { - moduledefinition.Description = _description; - } - if (moduledefinition.Categories != _categories) - { - moduledefinition.Categories = _categories; - } - moduledefinition.PermissionList = _permissionGrid.GetPermissionList(); - await ModuleDefinitionService.UpdateModuleDefinitionAsync(moduledefinition); - await logger.LogInformation("ModuleDefinition Saved {ModuleDefinition}", moduledefinition); - NavigationManager.NavigateTo(NavigateUrl()); - } + private async Task SaveModuleDefinition() + { + validated = true; + var interop = new Interop(JSRuntime); + if (await interop.FormValid(form)) + { + try + { + var moduleDefinitions = await ModuleDefinitionService.GetModuleDefinitionsAsync(PageState.Site.SiteId); + if (!moduleDefinitions.Any(item => item.Name.ToLower() == _name.ToLower() && item.ModuleDefinitionId != _moduleDefinitionId)) + { + var moduledefinition = await ModuleDefinitionService.GetModuleDefinitionAsync(_moduleDefinitionId, ModuleState.SiteId); + if (moduledefinition.Name != _name) + { + moduledefinition.Name = _name; + } + if (moduledefinition.Description != _description) + { + moduledefinition.Description = _description; + } + if (moduledefinition.Categories != _categories) + { + moduledefinition.Categories = _categories; + } + moduledefinition.PermissionList = _permissionGrid.GetPermissionList(); + await ModuleDefinitionService.UpdateModuleDefinitionAsync(moduledefinition); + await logger.LogInformation("ModuleDefinition Saved {ModuleDefinition}", moduledefinition); + NavigationManager.NavigateTo(NavigateUrl()); + } + else + { + AddModuleMessage(Localizer["Message.DuplicateName"], MessageType.Warning); + } + } catch (Exception ex) { await logger.LogError(ex, "Error Saving ModuleDefinition {ModuleDefinitionId} {Error}", _moduleDefinitionId, ex.Message); diff --git a/Oqtane.Client/Modules/Admin/Themes/Add.razor b/Oqtane.Client/Modules/Admin/Themes/Add.razor index dca90274..76c95d83 100644 --- a/Oqtane.Client/Modules/Admin/Themes/Add.razor +++ b/Oqtane.Client/Modules/Admin/Themes/Add.razor @@ -65,13 +65,15 @@ } } +
+
- +
@@ -112,9 +114,6 @@ } @SharedLocalizer["Cancel"] -
-
- @code { private List _packages; @@ -245,4 +244,9 @@ AddModuleMessage(Localizer["Error.Theme.Download"], MessageType.Error); } } + + private void OnUpload() + { + AddModuleMessage(string.Format(Localizer["Success.Theme.Download"], NavigateUrl("admin/system")), MessageType.Success); + } } diff --git a/Oqtane.Client/Modules/Controls/FileManager.razor b/Oqtane.Client/Modules/Controls/FileManager.razor index fe0fa6cc..cd5ad6e3 100644 --- a/Oqtane.Client/Modules/Controls/FileManager.razor +++ b/Oqtane.Client/Modules/Controls/FileManager.razor @@ -87,299 +87,306 @@ } @code { - private bool _initialized = false; - private List _folders; - private List _files = new List(); - private string _fileinputid = string.Empty; - private string _progressinfoid = string.Empty; - private string _progressbarid = string.Empty; - private string _filter = "*"; - private bool _haseditpermission = false; - private string _image = string.Empty; - private File _file = null; - private string _guid; - private string _message = string.Empty; - private MessageType _messagetype; + private bool _initialized = false; + private List _folders; + private List _files = new List(); + private string _fileinputid = string.Empty; + private string _progressinfoid = string.Empty; + private string _progressbarid = string.Empty; + private string _filter = "*"; + private bool _haseditpermission = false; + private string _image = string.Empty; + private File _file = null; + private string _guid; + private string _message = string.Empty; + private MessageType _messagetype; - [Parameter] - public string Id { get; set; } // optional - for setting the id of the FileManager component for accessibility + [Parameter] + public string Id { get; set; } // optional - for setting the id of the FileManager component for accessibility - [Parameter] - public int FolderId { get; set; } = -1; // optional - for setting a specific default folder by folderid + [Parameter] + public int FolderId { get; set; } = -1; // optional - for setting a specific default folder by folderid - [Parameter] - public string Folder { get; set; } = ""; // optional - for setting a specific default folder by folder path + [Parameter] + public string Folder { get; set; } = ""; // optional - for setting a specific default folder by folder path - [Parameter] - public int FileId { get; set; } = -1; // optional - for selecting a specific file by default + [Parameter] + public int FileId { get; set; } = -1; // optional - for selecting a specific file by default - [Parameter] - public string Filter { get; set; } // optional - comma delimited list of file types that can be selected or uploaded ie. "jpg,gif" + [Parameter] + public string Filter { get; set; } // optional - comma delimited list of file types that can be selected or uploaded ie. "jpg,gif" - [Parameter] - public bool ShowFiles { get; set; } = true; // optional - for indicating whether a list of files should be displayed - default is true + [Parameter] + public bool ShowFiles { get; set; } = true; // optional - for indicating whether a list of files should be displayed - default is true - [Parameter] - public bool ShowUpload { get; set; } = true; // optional - for indicating whether a Upload controls should be displayed - default is true + [Parameter] + public bool ShowUpload { get; set; } = true; // optional - for indicating whether a Upload controls should be displayed - default is true - [Parameter] - public bool ShowFolders { get; set; } = true; // optional - for indicating whether a list of folders should be displayed - default is true + [Parameter] + public bool ShowFolders { get; set; } = true; // optional - for indicating whether a list of folders should be displayed - default is true - [Parameter] - public bool ShowImage { get; set; } = true; // optional - for indicating whether an image thumbnail should be displayed - default is true + [Parameter] + public bool ShowImage { get; set; } = true; // optional - for indicating whether an image thumbnail should be displayed - default is true - [Parameter] - public bool ShowSuccess { get; set; } = false; // optional - for indicating whether a success message should be displayed upon successful upload - default is false + [Parameter] + public bool ShowSuccess { get; set; } = false; // optional - for indicating whether a success message should be displayed upon successful upload - default is false - [Parameter] - public bool UploadMultiple { get; set; } = false; // optional - enable multiple file uploads - default false + [Parameter] + public bool UploadMultiple { get; set; } = false; // optional - enable multiple file uploads - default false - [Parameter] - public EventCallback OnUpload { get; set; } // optional - executes a method in the calling component when a file is uploaded + [Parameter] + public EventCallback OnUpload { get; set; } // optional - executes a method in the calling component when a file is uploaded - [Parameter] - public EventCallback OnSelect { get; set; } // optional - executes a method in the calling component when a file is selected + [Parameter] + public EventCallback OnSelect { get; set; } // optional - executes a method in the calling component when a file is selected - [Parameter] - public EventCallback OnDelete { get; set; } // optional - executes a method in the calling component when a file is deleted + [Parameter] + public EventCallback OnDelete { get; set; } // optional - executes a method in the calling component when a file is deleted - protected override async Task OnInitializedAsync() - { - // packages folder is a framework folder for uploading installable nuget packages - if (Folder == Constants.PackagesFolder) - { - ShowFiles = false; - ShowFolders = false; - Filter = "nupkg"; - ShowSuccess = true; - } + protected override async Task OnInitializedAsync() + { + // packages folder is a framework folder for uploading installable nuget packages + if (Folder == Constants.PackagesFolder) + { + ShowFiles = false; + ShowFolders = false; + Filter = "nupkg"; + ShowSuccess = true; + } - if (!ShowFiles) - { - ShowImage = false; - } + if (!ShowFiles) + { + ShowImage = false; + } - _folders = await FolderService.GetFoldersAsync(ModuleState.SiteId); + _folders = await FolderService.GetFoldersAsync(ModuleState.SiteId); - if (!string.IsNullOrEmpty(Folder) && Folder != Constants.PackagesFolder) - { - Folder folder = await FolderService.GetFolderAsync(ModuleState.SiteId, Folder); - if (folder != null) - { - FolderId = folder.FolderId; - } - else - { - FolderId = -1; - _message = "Folder Path " + Folder + "Does Not Exist"; - _messagetype = MessageType.Error; - } - } + if (!string.IsNullOrEmpty(Folder) && Folder != Constants.PackagesFolder) + { + Folder folder = await FolderService.GetFolderAsync(ModuleState.SiteId, Folder); + if (folder != null) + { + FolderId = folder.FolderId; + } + else + { + FolderId = -1; + _message = "Folder Path " + Folder + "Does Not Exist"; + _messagetype = MessageType.Error; + } + } - if (FileId != -1) - { - File file = await FileService.GetFileAsync(FileId); - if (file != null) - { - FolderId = file.FolderId; - await OnSelect.InvokeAsync(FileId); - } - else - { - FileId = -1; // file does not exist - _message = "FileId " + FileId.ToString() + "Does Not Exist"; - _messagetype = MessageType.Error; - } - } + if (FileId != -1) + { + File file = await FileService.GetFileAsync(FileId); + if (file != null) + { + FolderId = file.FolderId; + await OnSelect.InvokeAsync(FileId); + } + else + { + FileId = -1; // file does not exist + _message = "FileId " + FileId.ToString() + "Does Not Exist"; + _messagetype = MessageType.Error; + } + } - await SetImage(); + await SetImage(); - if (!string.IsNullOrEmpty(Filter)) - { - _filter = "." + Filter.Replace(",", ",."); - } + if (!string.IsNullOrEmpty(Filter)) + { + _filter = "." + Filter.Replace(",", ",."); + } - await GetFiles(); + await GetFiles(); - // create unique id for component - _guid = Guid.NewGuid().ToString("N"); - _fileinputid = "FileInput_" + _guid; - _progressinfoid = "ProgressInfo_" + _guid; - _progressbarid = "ProgressBar_" + _guid; + // create unique id for component + _guid = Guid.NewGuid().ToString("N"); + _fileinputid = "FileInput_" + _guid; + _progressinfoid = "ProgressInfo_" + _guid; + _progressbarid = "ProgressBar_" + _guid; - _initialized = true; - } + _initialized = true; + } - private async Task GetFiles() - { - _haseditpermission = false; - if (Folder == Constants.PackagesFolder) - { - _haseditpermission = UserSecurity.IsAuthorized(PageState.User, RoleNames.Host); - _files = new List(); - } - else - { - Folder folder = _folders.FirstOrDefault(item => item.FolderId == FolderId); - if (folder != null) - { - _haseditpermission = UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, folder.PermissionList); - _files = await FileService.GetFilesAsync(FolderId); - } - else - { - _haseditpermission = false; - _files = new List(); - } - } - if (_filter != "*") - { - List filtered = new List(); - foreach (File file in _files) - { - if (_filter.ToUpper().IndexOf("." + file.Extension.ToUpper()) != -1) - { - filtered.Add(file); - } - } - _files = filtered; - } - } + private async Task GetFiles() + { + _haseditpermission = false; + if (Folder == Constants.PackagesFolder) + { + _haseditpermission = UserSecurity.IsAuthorized(PageState.User, RoleNames.Host); + _files = new List(); + } + else + { + Folder folder = _folders.FirstOrDefault(item => item.FolderId == FolderId); + if (folder != null) + { + _haseditpermission = UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, folder.PermissionList); + _files = await FileService.GetFilesAsync(FolderId); + } + else + { + _haseditpermission = false; + _files = new List(); + } + if (_filter != "*") + { + List filtered = new List(); + foreach (File file in _files) + { + if (_filter.ToUpper().IndexOf("." + file.Extension.ToUpper()) != -1) + { + filtered.Add(file); + } + } + _files = filtered; + } + } + } - private async Task FolderChanged(ChangeEventArgs e) - { - _message = string.Empty; - try - { - FolderId = int.Parse((string)e.Value); - await GetFiles(); - FileId = -1; - _file = null; - _image = string.Empty; - StateHasChanged(); - } - catch (Exception ex) - { - await logger.LogError(ex, "Error Loading Files {Error}", ex.Message); - _message = Localizer["Error.File.Load"]; - _messagetype = MessageType.Error; - } - } + private async Task FolderChanged(ChangeEventArgs e) + { + _message = string.Empty; + try + { + FolderId = int.Parse((string)e.Value); + await GetFiles(); + FileId = -1; + _file = null; + _image = string.Empty; + StateHasChanged(); + } + catch (Exception ex) + { + await logger.LogError(ex, "Error Loading Files {Error}", ex.Message); + _message = Localizer["Error.File.Load"]; + _messagetype = MessageType.Error; + } + } - private async Task FileChanged(ChangeEventArgs e) - { - _message = string.Empty; - FileId = int.Parse((string)e.Value); - if (FileId != -1) - { - await OnSelect.InvokeAsync(FileId); - } + private async Task FileChanged(ChangeEventArgs e) + { + _message = string.Empty; + FileId = int.Parse((string)e.Value); + if (FileId != -1) + { + await OnSelect.InvokeAsync(FileId); + } - await SetImage(); - StateHasChanged(); - } + await SetImage(); + StateHasChanged(); + } - private async Task SetImage() - { - _image = string.Empty; - _file = null; - if (FileId != -1) - { - _file = await FileService.GetFileAsync(FileId); - if (_file != null && ShowImage && _file.ImageHeight != 0 && _file.ImageWidth != 0) - { - var maxwidth = 200; - var maxheight = 200; + private async Task SetImage() + { + _image = string.Empty; + _file = null; + if (FileId != -1) + { + _file = await FileService.GetFileAsync(FileId); + if (_file != null && ShowImage && _file.ImageHeight != 0 && _file.ImageWidth != 0) + { + var maxwidth = 200; + var maxheight = 200; - var ratioX = (double)maxwidth / (double)_file.ImageWidth; - var ratioY = (double)maxheight / (double)_file.ImageHeight; - var ratio = ratioX < ratioY ? ratioX : ratioY; + var ratioX = (double)maxwidth / (double)_file.ImageWidth; + var ratioY = (double)maxheight / (double)_file.ImageHeight; + var ratio = ratioX < ratioY ? ratioX : ratioY; - _image = "\"""; - } - } - } + _image = "\"""; + } + } + } - private async Task UploadFiles() - { - _message = string.Empty; - var interop = new Interop(JSRuntime); - var uploads = await interop.GetFiles(_fileinputid); - if (uploads.Length > 0) - { - string restricted = ""; - foreach (var upload in uploads) - { - var extension = (upload.LastIndexOf(".") != -1) ? upload.Substring(upload.LastIndexOf(".") + 1) : ""; - if (!Constants.UploadableFiles.Split(',').Contains(extension.ToLower())) - { - restricted += (restricted == "" ? "" : ",") + extension; - } - } - if (restricted == "") - { - try - { - // upload the files - var posturl = Utilities.TenantUrl(PageState.Alias, "/api/file/upload"); - var folder = (Folder == Constants.PackagesFolder) ? Folder : FolderId.ToString(); - await interop.UploadFiles(posturl, folder, _guid, SiteState.AntiForgeryToken); + private async Task UploadFiles() + { + _message = string.Empty; + var interop = new Interop(JSRuntime); + var uploads = await interop.GetFiles(_fileinputid); + if (uploads.Length > 0) + { + string restricted = ""; + foreach (var upload in uploads) + { + var extension = (upload.LastIndexOf(".") != -1) ? upload.Substring(upload.LastIndexOf(".") + 1) : ""; + if (!Constants.UploadableFiles.Split(',').Contains(extension.ToLower())) + { + restricted += (restricted == "" ? "" : ",") + extension; + } + } + if (restricted == "") + { + try + { + // upload the files + var posturl = Utilities.TenantUrl(PageState.Alias, "/api/file/upload"); + var folder = (Folder == Constants.PackagesFolder) ? Folder : FolderId.ToString(); + await interop.UploadFiles(posturl, folder, _guid, SiteState.AntiForgeryToken); - // uploading is asynchronous so we need to wait for the uploads to complete - // note that this will only wait a maximum of 15 seconds which may not be long enough for very large file uploads - bool success = false; - int attempts = 0; - while (attempts < 5 && !success) - { - attempts += 1; - Thread.Sleep(1000 * attempts); // progressive retry + // uploading is asynchronous so we need to wait for the uploads to complete + // note that this will only wait a maximum of 15 seconds which may not be long enough for very large file uploads + bool success = false; + int attempts = 0; + while (attempts < 5 && !success) + { + attempts += 1; + Thread.Sleep(1000 * attempts); // progressive retry - success = true; - List files = await FileService.GetFilesAsync(folder); - if (files.Count > 0) - { - foreach (string upload in uploads) - { - if (!files.Exists(item => item.Name == upload)) - { - success = false; - } - } - } - } + success = true; + List files = await FileService.GetFilesAsync(folder); + if (files.Count > 0) + { + foreach (string upload in uploads) + { + if (!files.Exists(item => item.Name == upload)) + { + success = false; + } + } + } + } - // reset progress indicators - await interop.SetElementAttribute(_guid + "ProgressInfo", "style", "display: none;"); - await interop.SetElementAttribute(_guid + "ProgressBar", "style", "display: none;"); + // reset progress indicators + await interop.SetElementAttribute(_guid + "ProgressInfo", "style", "display: none;"); + await interop.SetElementAttribute(_guid + "ProgressBar", "style", "display: none;"); - if (success) - { - await logger.LogInformation("File Upload Succeeded {Files}", uploads); - if (ShowSuccess) - { - _message = Localizer["Success.File.Upload"]; - _messagetype = MessageType.Success; - } - } - else - { - await logger.LogInformation("File Upload Failed Or Is Still In Progress {Files}", uploads); - _message = Localizer["Error.File.Upload"]; - _messagetype = MessageType.Error; - } + if (success) + { + await logger.LogInformation("File Upload Succeeded {Files}", uploads); + if (ShowSuccess) + { + _message = Localizer["Success.File.Upload"]; + _messagetype = MessageType.Success; + } + } + else + { + await logger.LogInformation("File Upload Failed Or Is Still In Progress {Files}", uploads); + _message = Localizer["Error.File.Upload"]; + _messagetype = MessageType.Error; + } - // set FileId to first file in upload collection - await GetFiles(); - var file = _files.Where(item => item.Name == uploads[0]).FirstOrDefault(); - if (file != null) - { - FileId = file.FileId; - await SetImage(); - await OnUpload.InvokeAsync(FileId); - } - StateHasChanged(); + if (Folder == Constants.PackagesFolder) + { + await OnUpload.InvokeAsync(-1); + } + else + { + // set FileId to first file in upload collection + await GetFiles(); + var file = _files.Where(item => item.Name == uploads[0]).FirstOrDefault(); + if (file != null) + { + FileId = file.FileId; + await SetImage(); + await OnUpload.InvokeAsync(FileId); + } + StateHasChanged(); + } } catch (Exception ex) { diff --git a/Oqtane.Client/Oqtane.Client.csproj b/Oqtane.Client/Oqtane.Client.csproj index 218d8d40..d75a10e8 100644 --- a/Oqtane.Client/Oqtane.Client.csproj +++ b/Oqtane.Client/Oqtane.Client.csproj @@ -5,7 +5,7 @@ Exe 3.0 Debug;Release - 3.4.2 + 3.4.3 Oqtane Shaun Walker .NET Foundation @@ -13,7 +13,7 @@ .NET Foundation https://www.oqtane.org https://github.com/oqtane/oqtane.framework/blob/dev/LICENSE - https://github.com/oqtane/oqtane.framework/releases/tag/v3.4.2 + https://github.com/oqtane/oqtane.framework/releases/tag/v3.4.3 https://github.com/oqtane/oqtane.framework Git Oqtane diff --git a/Oqtane.Client/Resources/Modules/Admin/Languages/Add.resx b/Oqtane.Client/Resources/Modules/Admin/Languages/Add.resx index a200a84d..8132ccc7 100644 --- a/Oqtane.Client/Resources/Modules/Admin/Languages/Add.resx +++ b/Oqtane.Client/Resources/Modules/Admin/Languages/Add.resx @@ -132,11 +132,11 @@ Default? - - You Must <a href={0}>Restart</a> To Complete The Installation. + + Translation Package Saved Successfully. You Must <a href={0}>Restart</a> To Complete The Installation. - Upload one or more translation packages. Once they are uploaded click Install. + Upload one or more translation packages. Translation diff --git a/Oqtane.Client/Resources/Modules/Admin/Languages/Index.resx b/Oqtane.Client/Resources/Modules/Admin/Languages/Index.resx index 9b031c07..c755205f 100644 --- a/Oqtane.Client/Resources/Modules/Admin/Languages/Index.resx +++ b/Oqtane.Client/Resources/Modules/Admin/Languages/Index.resx @@ -133,7 +133,7 @@ Delete Language - Translation Downloaded Successfully. You Must <a href={0}>Restart</a> Your Application To Complete The Installation. + Translation Package Saved Successfully. You Must <a href={0}>Restart</a> Your Application To Complete The Installation. Error Downloading Translation diff --git a/Oqtane.Client/Resources/Modules/Admin/ModuleDefinitions/Add.resx b/Oqtane.Client/Resources/Modules/Admin/ModuleDefinitions/Add.resx index 7527202c..9db1c83a 100644 --- a/Oqtane.Client/Resources/Modules/Admin/ModuleDefinitions/Add.resx +++ b/Oqtane.Client/Resources/Modules/Admin/ModuleDefinitions/Add.resx @@ -124,13 +124,13 @@ Error Loading Packages - Module Downloaded Successfully. You Must <a href={0}>Restart</a> Your Application To Complete The Installation. + Module Package Saved Successfully. You Must <a href={0}>Restart</a> Your Application To Complete The Installation. Error Downloading Module - Upload one or more module packages. Once they are uploaded click Install to complete the installation. + Upload one or more module packages. No Modules Match The Criteria Provided Or Package Service Is Disabled diff --git a/Oqtane.Client/Resources/Modules/Admin/ModuleDefinitions/Edit.resx b/Oqtane.Client/Resources/Modules/Admin/ModuleDefinitions/Edit.resx index 83a55354..8e3bf1d4 100644 --- a/Oqtane.Client/Resources/Modules/Admin/ModuleDefinitions/Edit.resx +++ b/Oqtane.Client/Resources/Modules/Admin/ModuleDefinitions/Edit.resx @@ -211,9 +211,12 @@ No Translations Exist For This Module Or Package Service Is Disabled - Translation Downloaded Successfully. You Must <a href={0}>Restart</a> Your Application To Complete The Installation. + Translation Package Saved Successfully. You Must <a href={0}>Restart</a> Your Application To Complete The Installation. Translations + + A Module With The Name Specified Already Exists + \ No newline at end of file diff --git a/Oqtane.Client/Resources/Modules/Admin/Themes/Add.resx b/Oqtane.Client/Resources/Modules/Admin/Themes/Add.resx index 2a2c0d5a..b7a18332 100644 --- a/Oqtane.Client/Resources/Modules/Admin/Themes/Add.resx +++ b/Oqtane.Client/Resources/Modules/Admin/Themes/Add.resx @@ -124,13 +124,13 @@ Theme: - Theme Downloaded Successfully. You Must <a href={0}>Restart</a> Your Application To Complete The Installation. + Theme Package Saved Successfully. You Must <a href={0}>Restart</a> Your Application To Complete The Installation. Error Downloading Theme - Upload one or more theme packages. Once they are uploaded click Install to complete the installation. + Upload one or more theme packages. No Themes Match The Criteria Provided Or Package Service Is Disabled diff --git a/Oqtane.Client/Resources/SharedResources.resx b/Oqtane.Client/Resources/SharedResources.resx index 4ec3d693..b73cbdac 100644 --- a/Oqtane.Client/Resources/SharedResources.resx +++ b/Oqtane.Client/Resources/SharedResources.resx @@ -340,6 +340,48 @@ Visitor Management - Please note that the third party extensions displayed above have been registered in the <a href="https://www.oqtane.net" target="_new">Oqtane Marketplace</a> which enables them to be seamlessly downloaded and installed into the framework. + Please note that third party extensions are registered in the <a href="https://www.oqtane.net" target="_new">Oqtane Marketplace</a> which enables them to be seamlessly downloaded and installed into the framework. - \ No newline at end of file + + Home + + + Close + + + OK + + + Apply + + + Select + + + Next + + + Previous + + + Submit + + + Refresh + + + Back + + + Return + + + New + + + View + + + Confirm + + diff --git a/Oqtane.Client/Services/ModuleService.cs b/Oqtane.Client/Services/ModuleService.cs index a87229f7..e1914004 100644 --- a/Oqtane.Client/Services/ModuleService.cs +++ b/Oqtane.Client/Services/ModuleService.cs @@ -18,11 +18,7 @@ namespace Oqtane.Services public async Task> GetModulesAsync(int siteId) { - List modules = await GetJsonAsync>($"{Apiurl}?siteid={siteId}"); - modules = modules - .OrderBy(item => item.Order) - .ToList(); - return modules; + return await GetJsonAsync>($"{Apiurl}?siteid={siteId}"); } public async Task GetModuleAsync(int moduleId) diff --git a/Oqtane.Client/Themes/Controls/Theme/MenuHorizontal.razor b/Oqtane.Client/Themes/Controls/Theme/MenuHorizontal.razor index ad063ae6..fa6dd129 100644 --- a/Oqtane.Client/Themes/Controls/Theme/MenuHorizontal.razor +++ b/Oqtane.Client/Themes/Controls/Theme/MenuHorizontal.razor @@ -10,7 +10,7 @@