updated modules for input requirements
This commit is contained in:
		| @ -7,97 +7,110 @@ | ||||
| @inject IStringLocalizer<Add> Localizer | ||||
| @inject IStringLocalizer<SharedResources> SharedLocalizer | ||||
|  | ||||
| <TabStrip> | ||||
|     <TabPanel Name="Upload" Heading="Upload Files" ResourceKey="UploadFiles"> | ||||
|         <div class="container"> | ||||
|             <div class="row mb-1 align-items-center"> | ||||
|                 <Label Class="col-sm-3" For="upload" HelpText="Upload the file you want" ResourceKey="Upload">Upload: </Label> | ||||
|                 <div class="col-sm-9"> | ||||
|                     <FileManager UploadMultiple="true" ShowFiles="false" FolderId="@_folderId" /> | ||||
| <form @ref="form" class="@(validated ? "was-validated" : "needs-validation")" novalidate> | ||||
|     <TabStrip> | ||||
|         <TabPanel Name="Upload" Heading="Upload Files" ResourceKey="UploadFiles"> | ||||
|             <div class="container"> | ||||
|                 <div class="row mb-1 align-items-center"> | ||||
|                     <Label Class="col-sm-3" For="upload" HelpText="Upload the file you want" ResourceKey="Upload">Upload: </Label> | ||||
|                     <div class="col-sm-9"> | ||||
|                         <FileManager UploadMultiple="true" ShowFiles="false" FolderId="@_folderId" /> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|         <NavLink class="btn btn-secondary" href="@NavigateUrl()">@SharedLocalizer["Cancel"]</NavLink> | ||||
|     </TabPanel> | ||||
|     <TabPanel Name="Download" Heading="Download Files" ResourceKey="DownloadFiles"> | ||||
|         @if (_folders != null) | ||||
|         { | ||||
|         <div class="container"> | ||||
|             <div class="row mb-1 align-items-center"> | ||||
|                 <Label Class="col-sm-3" For="url" HelpText="Enter the url of the file you wish to download" ResourceKey="Url">Url: </Label> | ||||
|                 <div class="col-sm-9"> | ||||
|                     <input id="url" class="form-control" @bind="@url" /> | ||||
|                 </div> | ||||
|             </div> | ||||
|             <div class="row mb-1 align-items-center"> | ||||
|                 <Label Class="col-sm-3" For="folder" HelpText="Select the folder to save the file in" ResourceKey="Folder">Folder: </Label> | ||||
|                 <div class="col-sm-9"> | ||||
|                     <select id="folder" class="form-select" @bind="@_folderId"> | ||||
|                         <option value="-1"><@Localizer["Folder.Select"]></option> | ||||
|                         @foreach (Folder folder in _folders) | ||||
|                         { | ||||
|                             <option value="@(folder.FolderId)">@(new string('-', folder.Level * 2))@(folder.Name)</option> | ||||
|                         } | ||||
|                     </select> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|             <button type="button" class="btn btn-success" @onclick="Download">@SharedLocalizer["Download"]</button> | ||||
|             <NavLink class="btn btn-secondary" href="@NavigateUrl()">@SharedLocalizer["Cancel"]</NavLink> | ||||
|         } | ||||
|     </TabPanel> | ||||
| </TabStrip> | ||||
|         </TabPanel> | ||||
|         <TabPanel Name="Download" Heading="Download Files" ResourceKey="DownloadFiles"> | ||||
|             @if (_folders != null) | ||||
|             { | ||||
|                 <div class="container"> | ||||
|                     <div class="row mb-1 align-items-center"> | ||||
|                         <Label Class="col-sm-3" For="url" HelpText="Enter the url of the file you wish to download" ResourceKey="Url">Url: </Label> | ||||
|                         <div class="col-sm-9"> | ||||
|                             <input id="url" class="form-control" @bind="@url" required/> | ||||
|                         </div> | ||||
|                     </div> | ||||
|                     <div class="row mb-1 align-items-center"> | ||||
|                         <Label Class="col-sm-3" For="folder" HelpText="Select the folder to save the file in" ResourceKey="Folder">Folder: </Label> | ||||
|                         <div class="col-sm-9"> | ||||
|                             <select id="folder" class="form-select" @bind="@_folderId" required> | ||||
|                                 <option value="-1"><@Localizer["Folder.Select"]></option> | ||||
|                                 @foreach (Folder folder in _folders) | ||||
|                                 { | ||||
|                                     <option value="@(folder.FolderId)">@(new string('-', folder.Level * 2))@(folder.Name)</option> | ||||
|                                 } | ||||
|                             </select> | ||||
|                         </div> | ||||
|                     </div> | ||||
|                 </div> | ||||
|                 <button type="button" class="btn btn-success" @onclick="Download">@SharedLocalizer["Download"]</button> | ||||
|                 <NavLink class="btn btn-secondary" href="@NavigateUrl()">@SharedLocalizer["Cancel"]</NavLink> | ||||
|             } | ||||
|         </TabPanel> | ||||
|     </TabStrip> | ||||
| </form> | ||||
|  | ||||
| @code { | ||||
|     private string url = string.Empty; | ||||
|     private List<Folder> _folders; | ||||
|     private int _folderId = -1; | ||||
|     @code { | ||||
|         private ElementReference form; | ||||
|         private bool validated = false; | ||||
|         private string url = string.Empty; | ||||
|         private List<Folder> _folders; | ||||
|         private int _folderId = -1; | ||||
|  | ||||
|     public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin; | ||||
|         public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin; | ||||
|  | ||||
|     protected override async Task OnInitializedAsync() | ||||
|     { | ||||
|         _folders = await FolderService.GetFoldersAsync(ModuleState.SiteId); | ||||
|  | ||||
|         if (PageState.QueryString.ContainsKey("id")) | ||||
|         protected override async Task OnInitializedAsync() | ||||
|         { | ||||
|             _folderId = int.Parse(PageState.QueryString["id"]); | ||||
|         } | ||||
|     } | ||||
|             _folders = await FolderService.GetFoldersAsync(ModuleState.SiteId); | ||||
|  | ||||
|     private async Task Download() | ||||
|     { | ||||
|         if (url == string.Empty || _folderId == -1) | ||||
|         { | ||||
|             AddModuleMessage(Localizer["Message.Required.UrlFolder"], MessageType.Warning); | ||||
|             return; | ||||
|             if (PageState.QueryString.ContainsKey("id")) | ||||
|             { | ||||
|                 _folderId = int.Parse(PageState.QueryString["id"]); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         var filename = url.Substring(url.LastIndexOf("/", StringComparison.Ordinal) + 1); | ||||
|         private async Task Download() | ||||
|         { | ||||
|             validated = true; | ||||
|             var interop = new Interop(JSRuntime); | ||||
|             if (await interop.FormValid(form)) | ||||
|             { | ||||
|                 if (url == string.Empty || _folderId == -1) | ||||
|                 { | ||||
|                     AddModuleMessage(Localizer["Message.Required.UrlFolder"], MessageType.Warning); | ||||
|                     return; | ||||
|                 } | ||||
|  | ||||
|         if (!Constants.UploadableFiles.Split(',') | ||||
|                 .Contains(Path.GetExtension(filename).ToLower().Replace(".", ""))) | ||||
|         { | ||||
|             AddModuleMessage(Localizer["Message.Download.InvalidExtension"], MessageType.Warning); | ||||
|             return; | ||||
|         } | ||||
|                 var filename = url.Substring(url.LastIndexOf("/", StringComparison.Ordinal) + 1); | ||||
|  | ||||
|         if (!filename.IsPathOrFileValid()) | ||||
|         { | ||||
|             AddModuleMessage(Localizer["Message.Required.UrlName"], MessageType.Warning); | ||||
|             return; | ||||
|         } | ||||
|                 if (!Constants.UploadableFiles.Split(',') | ||||
|                         .Contains(Path.GetExtension(filename).ToLower().Replace(".", ""))) | ||||
|                 { | ||||
|                     AddModuleMessage(Localizer["Message.Download.InvalidExtension"], MessageType.Warning); | ||||
|                     return; | ||||
|                 } | ||||
|  | ||||
|         try | ||||
|         { | ||||
|             await FileService.UploadFileAsync(url, _folderId); | ||||
|             await logger.LogInformation("File Downloaded Successfully From Url {Url}", url); | ||||
|             AddModuleMessage(Localizer["Success.Download.File"], MessageType.Success); | ||||
|                 if (!filename.IsPathOrFileValid()) | ||||
|                 { | ||||
|                     AddModuleMessage(Localizer["Message.Required.UrlName"], MessageType.Warning); | ||||
|                     return; | ||||
|                 } | ||||
|  | ||||
|                 try | ||||
|                 { | ||||
|                     await FileService.UploadFileAsync(url, _folderId); | ||||
|                     await logger.LogInformation("File Downloaded Successfully From Url {Url}", url); | ||||
|                     AddModuleMessage(Localizer["Success.Download.File"], MessageType.Success); | ||||
|                 } | ||||
|                 catch (Exception ex) | ||||
|                 { | ||||
|                     await logger.LogError(ex, "Error Downloading File From Url {Url} {Error}", url, ex.Message); | ||||
|                     AddModuleMessage(Localizer["Error.Download.InvalidUrl"], MessageType.Error); | ||||
|                 } | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 AddModuleMessage(SharedLocalizer["Message.InfoRequired"], MessageType.Warning); | ||||
|             } | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             await logger.LogError(ex, "Error Downloading File From Url {Url} {Error}", url, ex.Message); | ||||
|             AddModuleMessage(Localizer["Error.Download.InvalidUrl"], MessageType.Error); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| } | ||||
| @ -8,100 +8,114 @@ | ||||
|  | ||||
| @if (_folders != null) | ||||
| { | ||||
| <div class="container"> | ||||
|     <div class="row mb-1 align-items-center"> | ||||
|         <Label Class="col-sm-3" For="name" HelpText="The name of the file" ResourceKey="Name">Name: </Label> | ||||
|         <div class="col-sm-9"> | ||||
|             <input id="name" class="form-control" @bind="@_name" /> | ||||
|     <form @ref="form" class="@(validated ? "was-validated" : "needs-validation")" novalidate> | ||||
|         <div class="container"> | ||||
|             <div class="row mb-1 align-items-center"> | ||||
|                 <Label Class="col-sm-3" For="name" HelpText="The name of the file" ResourceKey="Name">Name: </Label> | ||||
|                 <div class="col-sm-9"> | ||||
|                     <input id="name" class="form-control" @bind="@_name" maxlength="256" required /> | ||||
|                 </div> | ||||
|             </div> | ||||
|             <div class="row mb-1 align-items-center"> | ||||
|                 <Label Class="col-sm-3" For="parent" HelpText="The folder where the file is located" ResourceKey="Folder">Folder: </Label> | ||||
|                 <div class="col-sm-9"> | ||||
|                     <select id="parent" class="form-select" @bind="@_folderId"> | ||||
|                         @foreach (Folder folder in _folders) | ||||
|                         { | ||||
|                             <option value="@(folder.FolderId)">@(new string('-', folder.Level * 2))@(folder.Name)</option> | ||||
|                         } | ||||
|                     </select> | ||||
|                 </div> | ||||
|             </div> | ||||
|             <div class="row mb-1 align-items-center"> | ||||
|                 <Label Class="col-sm-3" For="size" HelpText="The size of the file (in bytes)" ResourceKey="Size">Size: </Label> | ||||
|                 <div class="col-sm-9"> | ||||
|                     <input id="size" class="form-control" @bind="@_size" readonly /> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|     <div class="row mb-1 align-items-center"> | ||||
|         <Label Class="col-sm-3" For="parent" HelpText="The folder where the file is located" ResourceKey="Folder">Folder: </Label> | ||||
|         <div class="col-sm-9"> | ||||
|             <select id="parent" class="form-select" @bind="@_folderId"> | ||||
|                 @foreach (Folder folder in _folders) | ||||
|         <button type="button" class="btn btn-success" @onclick="SaveFile">@SharedLocalizer["Save"]</button> | ||||
|         <NavLink class="btn btn-secondary" href="@NavigateUrl()">@SharedLocalizer["Cancel"]</NavLink> | ||||
|         <br /> | ||||
|         <br /> | ||||
|         <AuditInfo CreatedBy="@_createdBy" CreatedOn="@_createdOn" ModifiedBy="@_modifiedBy" ModifiedOn="@_modifiedOn"></AuditInfo> | ||||
|     </form> | ||||
| } | ||||
|  | ||||
|         @code { | ||||
|             private ElementReference form; | ||||
|             private bool validated = false; | ||||
|             private int _fileId = -1; | ||||
|             private string _name; | ||||
|             private List<Folder> _folders; | ||||
|             private int _folderId = -1; | ||||
|             private int _size; | ||||
|             private string _createdBy; | ||||
|             private DateTime _createdOn; | ||||
|             private string _modifiedBy; | ||||
|             private DateTime _modifiedOn; | ||||
|  | ||||
|             public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin; | ||||
|  | ||||
|             public override string Title => "File Management"; | ||||
|  | ||||
|             protected override async Task OnInitializedAsync() | ||||
|             { | ||||
|                 try | ||||
|                 { | ||||
|                     <option value="@(folder.FolderId)">@(new string('-', folder.Level * 2))@(folder.Name)</option> | ||||
|                     _folders = await FolderService.GetFoldersAsync(PageState.Site.SiteId); | ||||
|                     _fileId = Int32.Parse(PageState.QueryString["id"]); | ||||
|                     File file = await FileService.GetFileAsync(_fileId); | ||||
|                     if (file != null) | ||||
|                     { | ||||
|                         _name = file.Name; | ||||
|                         _folderId = file.FolderId; | ||||
|                         _size = file.Size; | ||||
|                         _createdBy = file.CreatedBy; | ||||
|                         _createdOn = file.CreatedOn; | ||||
|                         _modifiedBy = file.ModifiedBy; | ||||
|                         _modifiedOn = file.ModifiedOn; | ||||
|                     } | ||||
|                 } | ||||
|             </select> | ||||
|         </div> | ||||
|     </div> | ||||
|     <div class="row mb-1 align-items-center"> | ||||
|         <Label Class="col-sm-3" For="size" HelpText="The size of the file (in bytes)" ResourceKey="Size">Size: </Label> | ||||
|         <div class="col-sm-9"> | ||||
|             <input id="size" class="form-control" @bind="@_size" readonly /> | ||||
|         </div> | ||||
|     </div> | ||||
| </div> | ||||
|     <button type="button" class="btn btn-success" @onclick="SaveFile">@SharedLocalizer["Save"]</button> | ||||
|     <NavLink class="btn btn-secondary" href="@NavigateUrl()">@SharedLocalizer["Cancel"]</NavLink> | ||||
|     <br /> | ||||
|     <br /> | ||||
|     <AuditInfo CreatedBy="@_createdBy" CreatedOn="@_createdOn" ModifiedBy="@_modifiedBy" ModifiedOn="@_modifiedOn"></AuditInfo> | ||||
| } | ||||
|  | ||||
| @code { | ||||
|     private int _fileId = -1; | ||||
|     private string _name; | ||||
|     private List<Folder> _folders; | ||||
|     private int _folderId = -1; | ||||
|     private int _size; | ||||
|     private string _createdBy; | ||||
|     private DateTime _createdOn; | ||||
|     private string _modifiedBy; | ||||
|     private DateTime _modifiedOn; | ||||
|  | ||||
|     public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin; | ||||
|  | ||||
|     public override string Title => "File Management"; | ||||
|  | ||||
|     protected override async Task OnInitializedAsync() | ||||
|     { | ||||
|         try | ||||
|         { | ||||
|             _folders = await FolderService.GetFoldersAsync(PageState.Site.SiteId); | ||||
|             _fileId = Int32.Parse(PageState.QueryString["id"]); | ||||
|             File file = await FileService.GetFileAsync(_fileId); | ||||
|             if (file != null) | ||||
|             { | ||||
|                 _name = file.Name; | ||||
|                 _folderId = file.FolderId; | ||||
|                 _size = file.Size; | ||||
|                 _createdBy = file.CreatedBy; | ||||
|                 _createdOn = file.CreatedOn; | ||||
|                 _modifiedBy = file.ModifiedBy; | ||||
|                 _modifiedOn = file.ModifiedOn; | ||||
|             } | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             await logger.LogError(ex, "Error Loading File {FileId} {Error}", _fileId, ex.Message); | ||||
|             AddModuleMessage(Localizer["Error.File.Load"], MessageType.Error); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private async Task SaveFile() | ||||
|     { | ||||
|         try | ||||
|         { | ||||
|             if (_name.IsPathOrFileValid()) | ||||
|             { | ||||
|                 File file = await FileService.GetFileAsync(_fileId); | ||||
|                 file.Name = _name; | ||||
|                 file.FolderId = _folderId; | ||||
|                 file = await FileService.UpdateFileAsync(file); | ||||
|                 await logger.LogInformation("File Saved {File}", file); | ||||
|                 NavigationManager.NavigateTo(NavigateUrl()); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 AddModuleMessage(Localizer["Message.File.InvalidName"], MessageType.Warning); | ||||
|             } | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             await logger.LogError(ex, "Error Saving File {FileId} {Error}", _fileId, ex.Message); | ||||
|             AddModuleMessage(Localizer["Error.File.Save"], MessageType.Error); | ||||
|         } | ||||
|     } | ||||
|                 catch (Exception ex) | ||||
|                 { | ||||
|                     await logger.LogError(ex, "Error Loading File {FileId} {Error}", _fileId, ex.Message); | ||||
|                     AddModuleMessage(Localizer["Error.File.Load"], MessageType.Error); | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             private async Task SaveFile() | ||||
|             { | ||||
|                 validated = true; | ||||
|                 var interop = new Interop(JSRuntime); | ||||
|                 if (await interop.FormValid(form)) | ||||
|                 { | ||||
|                     try | ||||
|                     { | ||||
|                         if (_name.IsPathOrFileValid()) | ||||
|                         { | ||||
|                             File file = await FileService.GetFileAsync(_fileId); | ||||
|                             file.Name = _name; | ||||
|                             file.FolderId = _folderId; | ||||
|                             file = await FileService.UpdateFileAsync(file); | ||||
|                             await logger.LogInformation("File Saved {File}", file); | ||||
|                             NavigationManager.NavigateTo(NavigateUrl()); | ||||
|                         } | ||||
|                         else | ||||
|                         { | ||||
|                             AddModuleMessage(Localizer["Message.File.InvalidName"], MessageType.Warning); | ||||
|                         } | ||||
|                     } | ||||
|                     catch (Exception ex) | ||||
|                     { | ||||
|                         await logger.LogError(ex, "Error Saving File {FileId} {Error}", _fileId, ex.Message); | ||||
|                         AddModuleMessage(Localizer["Error.File.Save"], MessageType.Error); | ||||
|                     } | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     AddModuleMessage(SharedLocalizer["Message.InfoRequired"], MessageType.Warning); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| } | ||||
|  | ||||
| @ -8,52 +8,53 @@ | ||||
|  | ||||
| @if (_folders != null) | ||||
| { | ||||
| <div class="container"> | ||||
|     <div class="row mb-1 align-items-center"> | ||||
|         <Label Class="col-sm-3" For="parent" HelpText="Select the parent folder" ResourceKey="Parent">Parent: </Label> | ||||
|         <div class="col-sm-9"> | ||||
|             <select id="parent" class="form-select" @bind="@_parentId"> | ||||
| <form @ref="form" class="@(validated ? "was-validated" : "needs-validation")" novalidate> | ||||
|     <div class="container"> | ||||
|         <div class="row mb-1 align-items-center"> | ||||
|             <Label Class="col-sm-3" For="parent" HelpText="Select the parent folder" ResourceKey="Parent">Parent: </Label> | ||||
|             <div class="col-sm-9"> | ||||
|                 <select id="parent" class="form-select" @bind="@_parentId" required> | ||||
|                     @if (PageState.QueryString.ContainsKey("id")) | ||||
|                     { | ||||
|                         <option value="-1"><@Localizer["NoParent"]></option> | ||||
|                     } | ||||
|                     @foreach (Folder folder in _folders) | ||||
|                     { | ||||
|                         <option value="@(folder.FolderId)">@(new string('-', folder.Level * 2))@(folder.Name)</option> | ||||
|                     } | ||||
|                 </select> | ||||
|             </div> | ||||
|         </div> | ||||
|         <div class="row mb-1 align-items-center"> | ||||
|             <Label Class="col-sm-3" For="name" HelpText="Enter the folder name" ResourceKey="Name">Name: </Label> | ||||
|             <div class="col-sm-9"> | ||||
|                 <input id="name" class="form-control" @bind="@_name" maxlength="256" required /> | ||||
|             </div> | ||||
|         </div> | ||||
|         <div class="row mb-1 align-items-center"> | ||||
|             <Label Class="col-sm-3" For="type" HelpText="Select the folder type. Private folders are only accessible by authorized users. Public folders can be accessed by all users" ResourceKey="Name">Type: </Label> | ||||
|             <div class="col-sm-9"> | ||||
|                 @if (PageState.QueryString.ContainsKey("id")) | ||||
|                 { | ||||
|                     <option value="-1"><@Localizer["NoParent"]></option> | ||||
|                     <input id="type" class="form-control" readonly @bind="@_type" /> | ||||
|                 } | ||||
|                 @foreach (Folder folder in _folders) | ||||
|                 else | ||||
|                 { | ||||
|                     <option value="@(folder.FolderId)">@(new string('-', folder.Level * 2))@(folder.Name)</option> | ||||
|                     <select id="type" class="form-select" @bind="@_type" required> | ||||
|                         <option value="@FolderTypes.Private">@Localizer[FolderTypes.Private]</option> | ||||
|                         <option value="@FolderTypes.Public">@Localizer[FolderTypes.Public]</option> | ||||
|                     </select> | ||||
|                 } | ||||
|             </select> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|     <div class="row mb-1 align-items-center"> | ||||
|         <Label Class="col-sm-3" For="name" HelpText="Enter the folder name" ResourceKey="Name">Name: </Label> | ||||
|         <div class="col-sm-9"> | ||||
|             <input id="name" class="form-control" @bind="@_name" /> | ||||
|         </div> | ||||
|     </div> | ||||
|     <div class="row mb-1 align-items-center"> | ||||
|         <Label Class="col-sm-3" For="type" HelpText="Select the folder type. Private folders are only accessible by authorized users. Public folders can be accessed by all users" ResourceKey="Name">Type: </Label> | ||||
|         <div class="col-sm-9"> | ||||
|             @if (PageState.QueryString.ContainsKey("id")) | ||||
|             { | ||||
|                 <input id="type" class="form-control" readonly @bind="@_type" /> | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 <select id="type" class="form-select" @bind="@_type"> | ||||
|                     <option value="@FolderTypes.Private">@Localizer[FolderTypes.Private]</option> | ||||
|                     <option value="@FolderTypes.Public">@Localizer[FolderTypes.Public]</option> | ||||
|                 </select> | ||||
|             } | ||||
|         </div> | ||||
|     </div> | ||||
|     <div class="row mb-1 align-items-center"> | ||||
|         <div class="col-sm-12"> | ||||
|             <Label Class="col-sm-3" For="permissions" HelpText="Select the permissions you want for the folder" ResourceKey="Permissions">Permissions: </Label> | ||||
|             <PermissionGrid EntityName="@EntityNames.Folder" PermissionNames="@(PermissionNames.Browse + "," + PermissionNames.View + "," + PermissionNames.Edit)" Permissions="@_permissions" @ref="_permissionGrid" /> | ||||
|         <div class="row mb-1 align-items-center"> | ||||
|             <div class="col-sm-12"> | ||||
|                 <Label Class="col-sm-3" For="permissions" HelpText="Select the permissions you want for the folder" ResourceKey="Permissions">Permissions: </Label> | ||||
|                 <PermissionGrid EntityName="@EntityNames.Folder" PermissionNames="@(PermissionNames.Browse + "," + PermissionNames.View + "," + PermissionNames.Edit)" Permissions="@_permissions" @ref="_permissionGrid" /> | ||||
|  | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
| </div> | ||||
|  | ||||
|     @if (!_isSystem) | ||||
|     { | ||||
| @ -72,170 +73,182 @@ | ||||
|     { | ||||
|         <AuditInfo CreatedBy="@_createdBy" CreatedOn="@_createdOn" ModifiedBy="@_modifiedBy" ModifiedOn="@_modifiedOn"></AuditInfo> | ||||
|     } | ||||
| </form> | ||||
| } | ||||
|  | ||||
| @code { | ||||
|     private List<Folder> _folders; | ||||
|     private int _folderId = -1; | ||||
|     private int _parentId = -1; | ||||
|     private string _name; | ||||
|     private string _type = FolderTypes.Private; | ||||
|     private bool _isSystem; | ||||
|     private string _permissions = string.Empty; | ||||
|     private string _createdBy; | ||||
|     private DateTime _createdOn; | ||||
|     private string _modifiedBy; | ||||
|     private DateTime _modifiedOn; | ||||
|     @code { | ||||
|         private ElementReference form; | ||||
|         private bool validated = false; | ||||
|         private List<Folder> _folders; | ||||
|         private int _folderId = -1; | ||||
|         private int _parentId = -1; | ||||
|         private string _name; | ||||
|         private string _type = FolderTypes.Private; | ||||
|         private bool _isSystem; | ||||
|         private string _permissions = string.Empty; | ||||
|         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 | ||||
|  | ||||
|     public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin; | ||||
|         public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin; | ||||
|  | ||||
|     public override string Title => "Folder Management"; | ||||
|         public override string Title => "Folder Management"; | ||||
|  | ||||
|     protected override async Task OnInitializedAsync() | ||||
|     { | ||||
|         try | ||||
|         protected override async Task OnInitializedAsync() | ||||
|         { | ||||
|             _folders = await FolderService.GetFoldersAsync(PageState.Site.SiteId); | ||||
|  | ||||
|             if (PageState.QueryString.ContainsKey("id")) | ||||
|             try | ||||
|             { | ||||
|                 _folderId = Int32.Parse(PageState.QueryString["id"]); | ||||
|                 Folder folder = await FolderService.GetFolderAsync(_folderId); | ||||
|                 if (folder != null) | ||||
|                 _folders = await FolderService.GetFoldersAsync(PageState.Site.SiteId); | ||||
|  | ||||
|                 if (PageState.QueryString.ContainsKey("id")) | ||||
|                 { | ||||
|                     _parentId = folder.ParentId ?? -1; | ||||
|                     _name = folder.Name; | ||||
|                     _type = folder.Type; | ||||
|                     _isSystem = folder.IsSystem; | ||||
|                     _permissions = folder.Permissions; | ||||
|                     _createdBy = folder.CreatedBy; | ||||
|                     _createdOn = folder.CreatedOn; | ||||
|                     _modifiedBy = folder.ModifiedBy; | ||||
|                     _modifiedOn = folder.ModifiedOn; | ||||
|                 } | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 _parentId = _folders[0].FolderId; | ||||
|                 _permissions = string.Empty; | ||||
|             } | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             await logger.LogError(ex, "Error Loading Folder {FolderId} {Error}", _folderId, ex.Message); | ||||
|             AddModuleMessage(Localizer["Error.Folder.Load"], MessageType.Error); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private async Task SaveFolder() | ||||
|     { | ||||
|         if (_name == string.Empty || _parentId == -1) | ||||
|         { | ||||
|             AddModuleMessage(Localizer["Message.Required.FolderParent"], MessageType.Warning); | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         if (!_name.IsPathOrFileValid()) | ||||
|         { | ||||
|             AddModuleMessage(Localizer["Message.Folder.InvalidName"], MessageType.Warning); | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         try | ||||
|         { | ||||
|             Folder folder; | ||||
|             if (_folderId != -1) | ||||
|             { | ||||
|                 folder = await FolderService.GetFolderAsync(_folderId); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 folder = new Folder(); | ||||
|             } | ||||
|  | ||||
|             folder.SiteId = PageState.Site.SiteId; | ||||
|  | ||||
|             if (_parentId == -1) | ||||
|             { | ||||
|                 folder.ParentId = null; | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 folder.ParentId = _parentId; | ||||
|             } | ||||
|  | ||||
|             folder.Name = _name; | ||||
|             folder.Type = _type; | ||||
|             folder.IsSystem = _isSystem; | ||||
|             folder.Permissions = _permissionGrid.GetPermissions(); | ||||
|  | ||||
|             if (_folderId != -1) | ||||
|             { | ||||
|                 folder = await FolderService.UpdateFolderAsync(folder); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 folder = await FolderService.AddFolderAsync(folder); | ||||
|             } | ||||
|  | ||||
|             if (folder != null) | ||||
|             { | ||||
|                 await FolderService.UpdateFolderOrderAsync(folder.SiteId, folder.FolderId, folder.ParentId); | ||||
|                 await logger.LogInformation("Folder Saved {Folder}", folder); | ||||
|                 NavigationManager.NavigateTo(NavigateUrl()); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 AddModuleMessage(Localizer["Error.Folder.Save"], MessageType.Error); | ||||
|             } | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             await logger.LogError(ex, "Error Saving Folder {FolderId} {Error}", _folderId, ex.Message); | ||||
|             AddModuleMessage(Localizer["Error.Folder.Save"], MessageType.Error); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private async Task DeleteFolder() | ||||
|     { | ||||
|         try | ||||
|         { | ||||
|             bool isparent = false; | ||||
|             foreach (Folder folder in _folders) | ||||
|             { | ||||
|                 if (folder.ParentId == _folderId) | ||||
|                 { | ||||
|                     isparent = true; | ||||
|                     break; | ||||
|                 } | ||||
|             } | ||||
|             if (!isparent) | ||||
|             { | ||||
|                 var files = await FileService.GetFilesAsync(_folderId); | ||||
|                 if (files.Count == 0) | ||||
|                 { | ||||
|                     await FolderService.DeleteFolderAsync(_folderId); | ||||
|                     await logger.LogInformation("Folder Deleted {Folder}", _folderId); | ||||
|                     NavigationManager.NavigateTo(NavigateUrl()); | ||||
|                     _folderId = Int32.Parse(PageState.QueryString["id"]); | ||||
|                     Folder folder = await FolderService.GetFolderAsync(_folderId); | ||||
|                     if (folder != null) | ||||
|                     { | ||||
|                         _parentId = folder.ParentId ?? -1; | ||||
|                         _name = folder.Name; | ||||
|                         _type = folder.Type; | ||||
|                         _isSystem = folder.IsSystem; | ||||
|                         _permissions = folder.Permissions; | ||||
|                         _createdBy = folder.CreatedBy; | ||||
|                         _createdOn = folder.CreatedOn; | ||||
|                         _modifiedBy = folder.ModifiedBy; | ||||
|                         _modifiedOn = folder.ModifiedOn; | ||||
|                     } | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     AddModuleMessage(Localizer["Message.Folder.Files.InvalidDelete"], MessageType.Warning); | ||||
|                     _parentId = _folders[0].FolderId; | ||||
|                     _permissions = string.Empty; | ||||
|                 } | ||||
|             } | ||||
|             catch (Exception ex) | ||||
|             { | ||||
|                 await logger.LogError(ex, "Error Loading Folder {FolderId} {Error}", _folderId, ex.Message); | ||||
|                 AddModuleMessage(Localizer["Error.Folder.Load"], MessageType.Error); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         private async Task SaveFolder() | ||||
|         { | ||||
|             validated = true; | ||||
|             var interop = new Interop(JSRuntime); | ||||
|             if (await interop.FormValid(form)) | ||||
|             { | ||||
|                 if (_name == string.Empty || _parentId == -1) | ||||
|                 { | ||||
|                     AddModuleMessage(Localizer["Message.Required.FolderParent"], MessageType.Warning); | ||||
|                     return; | ||||
|                 } | ||||
|  | ||||
|                 if (!_name.IsPathOrFileValid()) | ||||
|                 { | ||||
|                     AddModuleMessage(Localizer["Message.Folder.InvalidName"], MessageType.Warning); | ||||
|                     return; | ||||
|                 } | ||||
|  | ||||
|                 try | ||||
|                 { | ||||
|                     Folder folder; | ||||
|                     if (_folderId != -1) | ||||
|                     { | ||||
|                         folder = await FolderService.GetFolderAsync(_folderId); | ||||
|                     } | ||||
|                     else | ||||
|                     { | ||||
|                         folder = new Folder(); | ||||
|                     } | ||||
|  | ||||
|                     folder.SiteId = PageState.Site.SiteId; | ||||
|  | ||||
|                     if (_parentId == -1) | ||||
|                     { | ||||
|                         folder.ParentId = null; | ||||
|                     } | ||||
|                     else | ||||
|                     { | ||||
|                         folder.ParentId = _parentId; | ||||
|                     } | ||||
|  | ||||
|                     folder.Name = _name; | ||||
|                     folder.Type = _type; | ||||
|                     folder.IsSystem = _isSystem; | ||||
|                     folder.Permissions = _permissionGrid.GetPermissions(); | ||||
|  | ||||
|                     if (_folderId != -1) | ||||
|                     { | ||||
|                         folder = await FolderService.UpdateFolderAsync(folder); | ||||
|                     } | ||||
|                     else | ||||
|                     { | ||||
|                         folder = await FolderService.AddFolderAsync(folder); | ||||
|                     } | ||||
|  | ||||
|                     if (folder != null) | ||||
|                     { | ||||
|                         await FolderService.UpdateFolderOrderAsync(folder.SiteId, folder.FolderId, folder.ParentId); | ||||
|                         await logger.LogInformation("Folder Saved {Folder}", folder); | ||||
|                         NavigationManager.NavigateTo(NavigateUrl()); | ||||
|                     } | ||||
|                     else | ||||
|                     { | ||||
|                         AddModuleMessage(Localizer["Error.Folder.Save"], MessageType.Error); | ||||
|                     } | ||||
|                 } | ||||
|                 catch (Exception ex) | ||||
|                 { | ||||
|                     await logger.LogError(ex, "Error Saving Folder {FolderId} {Error}", _folderId, ex.Message); | ||||
|                     AddModuleMessage(Localizer["Error.Folder.Save"], MessageType.Error); | ||||
|                 } | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 AddModuleMessage(Localizer["Message.Folder.Subfolders.InvalidDelete"], MessageType.Warning); | ||||
|                 AddModuleMessage(SharedLocalizer["Message.InfoRequired"], MessageType.Warning); | ||||
|             } | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|  | ||||
|         private async Task DeleteFolder() | ||||
|         { | ||||
|             await logger.LogError(ex, "Error Deleting Folder {Folder} {Error}", _folderId, ex.Message); | ||||
|             AddModuleMessage(Localizer["Error.Folder.Delete"], MessageType.Error); | ||||
|             try | ||||
|             { | ||||
|                 bool isparent = false; | ||||
|                 foreach (Folder folder in _folders) | ||||
|                 { | ||||
|                     if (folder.ParentId == _folderId) | ||||
|                     { | ||||
|                         isparent = true; | ||||
|                         break; | ||||
|                     } | ||||
|                 } | ||||
|                 if (!isparent) | ||||
|                 { | ||||
|                     var files = await FileService.GetFilesAsync(_folderId); | ||||
|                     if (files.Count == 0) | ||||
|                     { | ||||
|                         await FolderService.DeleteFolderAsync(_folderId); | ||||
|                         await logger.LogInformation("Folder Deleted {Folder}", _folderId); | ||||
|                         NavigationManager.NavigateTo(NavigateUrl()); | ||||
|                     } | ||||
|                     else | ||||
|                     { | ||||
|                         AddModuleMessage(Localizer["Message.Folder.Files.InvalidDelete"], MessageType.Warning); | ||||
|                     } | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     AddModuleMessage(Localizer["Message.Folder.Subfolders.InvalidDelete"], MessageType.Warning); | ||||
|                 } | ||||
|             } | ||||
|             catch (Exception ex) | ||||
|             { | ||||
|                 await logger.LogError(ex, "Error Deleting Folder {Folder} {Error}", _folderId, ex.Message); | ||||
|                 AddModuleMessage(Localizer["Error.Folder.Delete"], MessageType.Error); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -12,7 +12,7 @@ | ||||
|         <div class="row mb-1 align-items-center"> | ||||
|             <div class="col-sm-2"> | ||||
|                 <label class="control-label">@Localizer["Folder"] </label> | ||||
|             </div>             | ||||
|             </div> | ||||
|             <div class="col-sm-6"> | ||||
|                 <select class="form-select" @onchange="(e => FolderChanged(e))"> | ||||
|                     @foreach (Folder folder in _folders) | ||||
| @ -20,7 +20,7 @@ | ||||
|                         <option value="@(folder.FolderId)">@(new string('-', folder.Level * 2))@(folder.Name)</option> | ||||
|                     } | ||||
|                 </select> | ||||
|             </div>             | ||||
|             </div> | ||||
|             <div class="col-sm-4"> | ||||
|                 <ActionLink Action="Edit" Text="Edit Folder" Class="btn btn-secondary" Parameters="@($"id=" + _folderId.ToString())" ResourceKey="EditFolder" />  | ||||
|                 <ActionLink Action="Edit" Text="Add Folder" Class="btn btn-secondary" ResourceKey="AddFolder" />  | ||||
| @ -30,12 +30,12 @@ | ||||
|     </div> | ||||
|     <Pager Items="@_files"> | ||||
|         <Header> | ||||
|         <th style="width: 1px;"> </th> | ||||
|         <th style="width: 1px;"> </th> | ||||
|         <th>@SharedLocalizer["Name"]</th> | ||||
|         <th>@Localizer["Modified"]</th> | ||||
|         <th>@Localizer["Type"]</th> | ||||
|         <th>@Localizer["Size"]</th> | ||||
|             <th style="width: 1px;"> </th> | ||||
|             <th style="width: 1px;"> </th> | ||||
|             <th>@SharedLocalizer["Name"]</th> | ||||
|             <th>@Localizer["Modified"]</th> | ||||
|             <th>@Localizer["Type"]</th> | ||||
|             <th>@Localizer["Size"]</th> | ||||
|         </Header> | ||||
|         <Row> | ||||
|             <td><ActionLink Action="Details" Text="Edit" Parameters="@($"id=" + context.FileId.ToString())" ResourceKey="Details" /></td> | ||||
| @ -52,66 +52,66 @@ | ||||
|     } | ||||
| } | ||||
|  | ||||
| @code { | ||||
|     private List<Folder> _folders; | ||||
|     private int _folderId = -1; | ||||
|     private List<File> _files; | ||||
|     @code { | ||||
|         private List<Folder> _folders; | ||||
|         private int _folderId = -1; | ||||
|         private List<File> _files; | ||||
|  | ||||
|     public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin; | ||||
|         public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin; | ||||
|  | ||||
|     protected override async Task OnParametersSetAsync() | ||||
|     { | ||||
|         try | ||||
|         protected override async Task OnParametersSetAsync() | ||||
|         { | ||||
|             _folders = await FolderService.GetFoldersAsync(PageState.Site.SiteId); | ||||
|  | ||||
|             if (_folderId == -1 && _folders.Count > 0) | ||||
|             try | ||||
|             { | ||||
|                 _folderId = _folders[0].FolderId; | ||||
|                 await GetFiles(); | ||||
|                 _folders = await FolderService.GetFoldersAsync(PageState.Site.SiteId); | ||||
|  | ||||
|                 if (_folderId == -1 && _folders.Count > 0) | ||||
|                 { | ||||
|                     _folderId = _folders[0].FolderId; | ||||
|                     await GetFiles(); | ||||
|                 } | ||||
|             } | ||||
|             catch (Exception ex) | ||||
|             { | ||||
|                 await logger.LogError(ex, "Error Loading Files {Error}", ex.Message); | ||||
|                 AddModuleMessage(Localizer["Error.File.Load"], MessageType.Error); | ||||
|             } | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             await logger.LogError(ex, "Error Loading Files {Error}", ex.Message); | ||||
|             AddModuleMessage(Localizer["Error.File.Load"], MessageType.Error); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private async Task GetFiles() | ||||
|     { | ||||
|         _files = await FileService.GetFilesAsync(_folderId); | ||||
|     } | ||||
|         private async Task GetFiles() | ||||
|         { | ||||
|             _files = await FileService.GetFilesAsync(_folderId); | ||||
|         } | ||||
|  | ||||
|     private async void FolderChanged(ChangeEventArgs e) | ||||
|     { | ||||
|         try | ||||
|         private async void FolderChanged(ChangeEventArgs e) | ||||
|         { | ||||
|             _folderId = int.Parse((string)e.Value); | ||||
|             await GetFiles(); | ||||
|             StateHasChanged(); | ||||
|             try | ||||
|             { | ||||
|                 _folderId = int.Parse((string)e.Value); | ||||
|                 await GetFiles(); | ||||
|                 StateHasChanged(); | ||||
|             } | ||||
|             catch (Exception ex) | ||||
|             { | ||||
|                 await logger.LogError(ex, "Error Loading Files {Error}", ex.Message); | ||||
|                 AddModuleMessage(Localizer["Error.File.Load"], MessageType.Error); | ||||
|             } | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             await logger.LogError(ex, "Error Loading Files {Error}", ex.Message); | ||||
|             AddModuleMessage(Localizer["Error.File.Load"], MessageType.Error); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private async Task DeleteFile(File file) | ||||
|     { | ||||
|         try | ||||
|         private async Task DeleteFile(File file) | ||||
|         { | ||||
|             await FileService.DeleteFileAsync(file.FileId); | ||||
|             await logger.LogInformation("File Deleted {File}", file.Name); | ||||
|             AddModuleMessage(string.Format(Localizer["Success.File.Delete"], file.Name), MessageType.Success); | ||||
|             await GetFiles(); | ||||
|             StateHasChanged(); | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             await logger.LogError(ex, "Error Deleting File {File} {Error}", file.Name, ex.Message); | ||||
|             AddModuleMessage(string.Format(Localizer["Error.File.Delete"], file.Name), MessageType.Error); | ||||
|                 try | ||||
|                 { | ||||
|                     await FileService.DeleteFileAsync(file.FileId); | ||||
|                     await logger.LogInformation("File Deleted {File}", file.Name); | ||||
|                     AddModuleMessage(string.Format(Localizer["Success.File.Delete"], file.Name), MessageType.Success); | ||||
|                     await GetFiles(); | ||||
|                     StateHasChanged(); | ||||
|                 } | ||||
|                 catch (Exception ex) | ||||
|                 { | ||||
|                     await logger.LogError(ex, "Error Deleting File {File} {Error}", file.Name, ex.Message); | ||||
|                     AddModuleMessage(string.Format(Localizer["Error.File.Delete"], file.Name), MessageType.Error); | ||||
|                 } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Grayson Walker
					Grayson Walker