diff --git a/Oqtane.Client/Modules/Admin/Modules/Export.razor b/Oqtane.Client/Modules/Admin/Modules/Export.razor
index ab714221..f7fd3a57 100644
--- a/Oqtane.Client/Modules/Admin/Modules/Export.razor
+++ b/Oqtane.Client/Modules/Admin/Modules/Export.razor
@@ -27,6 +27,12 @@
+
@@ -39,6 +45,7 @@
@code {
private string _content = string.Empty;
private FileManager _filemanager;
+ private string _filename = string.Empty;
public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Edit;
public override string Title => "Export Content";
@@ -62,12 +69,12 @@
try
{
var folderid = _filemanager.GetFolderId();
- if (folderid != -1)
+ if (folderid != -1 && !string.IsNullOrEmpty(_filename))
{
- var result = await ModuleService.ExportModuleAsync(ModuleState.ModuleId, PageState.Page.PageId, folderid);
+ var result = await ModuleService.ExportModuleAsync(ModuleState.ModuleId, PageState.Page.PageId, folderid, _filename);
if (result.Success)
{
- AddModuleMessage(string.Format(Localizer["Success.Export.File"], result.Message), MessageType.Success);
+ AddModuleMessage(Localizer["Success.Content.Export"], MessageType.Success);
}
else
{
diff --git a/Oqtane.Client/Resources/Modules/Admin/Modules/Export.resx b/Oqtane.Client/Resources/Modules/Admin/Modules/Export.resx
index 90e614c2..0a365dfd 100644
--- a/Oqtane.Client/Resources/Modules/Admin/Modules/Export.resx
+++ b/Oqtane.Client/Resources/Modules/Admin/Modules/Export.resx
@@ -148,9 +148,12 @@
Select a folder where you wish to save the exported content
- Please Select A Folder Before Choosing Export
+ Please Select A Folder And Provide A Filename Before Choosing Export
-
- Content Was Successfully Exported To Specified Folder With Filename {0}
+
+ Filename:
+
+
+ Specify a name for the file (without an extension)
\ No newline at end of file
diff --git a/Oqtane.Client/Services/Interfaces/IModuleService.cs b/Oqtane.Client/Services/Interfaces/IModuleService.cs
index 34a9c1b1..a2334a20 100644
--- a/Oqtane.Client/Services/Interfaces/IModuleService.cs
+++ b/Oqtane.Client/Services/Interfaces/IModuleService.cs
@@ -66,7 +66,8 @@ namespace Oqtane.Services
///
///
///
+ ///
/// success/failure
- Task ExportModuleAsync(int moduleId, int pageId, int folderId);
+ Task ExportModuleAsync(int moduleId, int pageId, int folderId, string filename);
}
}
diff --git a/Oqtane.Client/Services/ModuleService.cs b/Oqtane.Client/Services/ModuleService.cs
index 1e688610..68d1e4fd 100644
--- a/Oqtane.Client/Services/ModuleService.cs
+++ b/Oqtane.Client/Services/ModuleService.cs
@@ -51,9 +51,9 @@ namespace Oqtane.Services
return await GetStringAsync($"{Apiurl}/export?moduleid={moduleId}&pageid={pageId}");
}
- public async Task ExportModuleAsync(int moduleId, int pageId, int folderId)
+ public async Task ExportModuleAsync(int moduleId, int pageId, int folderId, string filename)
{
- return await PostJsonAsync($"{Apiurl}/export?moduleid={moduleId}&pageid={pageId}&folderid={folderId}", null);
+ return await PostJsonAsync($"{Apiurl}/export?moduleid={moduleId}&pageid={pageId}&folderid={folderId}&filename={filename}", null);
}
}
}
diff --git a/Oqtane.Server/Controllers/ModuleController.cs b/Oqtane.Server/Controllers/ModuleController.cs
index e075e5e5..012f2e11 100644
--- a/Oqtane.Server/Controllers/ModuleController.cs
+++ b/Oqtane.Server/Controllers/ModuleController.cs
@@ -256,15 +256,15 @@ namespace Oqtane.Controllers
return content;
}
- // POST api//export?moduleid=x&pageid=y&folderid=z
+ // POST api//export?moduleid=x&pageid=y&folderid=z&filename=a
[HttpPost("export")]
[Authorize(Roles = RoleNames.Registered)]
- public Result Export(int moduleid, int pageid, int folderid)
+ public Result Export(int moduleid, int pageid, int folderid, string filename)
{
var result = new Result(false);
var module = _modules.GetModule(moduleid);
if (module != null && module.SiteId == _alias.SiteId && _userPermissions.IsAuthorized(User, module.SiteId, EntityNames.Page, pageid, PermissionNames.Edit) &&
- _userPermissions.IsAuthorized(User, module.SiteId, EntityNames.Folder, folderid, PermissionNames.Edit))
+ _userPermissions.IsAuthorized(User, module.SiteId, EntityNames.Folder, folderid, PermissionNames.Edit) && !string.IsNullOrEmpty(filename))
{
// get content
var content = _modules.ExportModule(moduleid);
@@ -277,8 +277,8 @@ namespace Oqtane.Controllers
Directory.CreateDirectory(folderPath);
}
- // create text file
- var filename = Utilities.GetTypeNameLastSegment(module.ModuleDefinitionName, 0) + moduleid.ToString() + ".json";
+ // create json file
+ filename = Path.GetFileNameWithoutExtension(filename) + ".json";
string filepath = Path.Combine(folderPath, filename);
if (System.IO.File.Exists(filepath))
{