diff --git a/products/ASC.Files/Core/Model/BatchModel.cs b/products/ASC.Files/Core/Model/BatchModel.cs index 96d5b09465..69b250fafa 100644 --- a/products/ASC.Files/Core/Model/BatchModel.cs +++ b/products/ASC.Files/Core/Model/BatchModel.cs @@ -1,9 +1,13 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; +using System.Linq; using System.Text.Json; using ASC.Api.Collections; -using ASC.Web.Files.Services.WCFService.FileOperations; - +using ASC.Web.Files.Services.WCFService.FileOperations; + +using Microsoft.AspNetCore.Http; + namespace ASC.Files.Model { public class BaseBatchModel @@ -42,6 +46,74 @@ namespace ASC.Files.Model { public JsonElement DestFolderId { get; set; } public FileConflictResolveType ConflictResolveType { get; set; } - public bool DeleteAfter { get; set; } + public bool DeleteAfter { get; set; } + + public static BatchModel FromQuery(HttpContext httpContext) + { + var result = new BatchModel(); + var query = httpContext.Request.Query; + + var destId = query["DestFolderId"]; + if (destId.Any()) + { + result.DestFolderId = ParseQueryParam(destId.First()); + } + + var conflictResolveType = query["ConflictResolveType"]; + if (conflictResolveType.Any()) + { + if (Enum.TryParse(conflictResolveType.First(), out var crf)) + { + result.ConflictResolveType = crf; + } + } + + var deleteAfter = query["DeleteAfter"]; + if (deleteAfter.Any()) + { + if (bool.TryParse(deleteAfter.First(), out var d)) + { + result.DeleteAfter = d; + } + } + + var fileIdsQuery = query["FileIds"]; + if (fileIdsQuery.Any()) + { + var fileIds = new List(); + + foreach (var f in fileIdsQuery) + { + fileIds.Add(ParseQueryParam(f)); + } + + result.FileIds = fileIds; + } + + var folderIdsQuery = query["FolderIds"]; + if (folderIdsQuery.Any()) + { + var folderIds = new List(); + + foreach (var f in folderIdsQuery) + { + folderIds.Add(ParseQueryParam(f)); + } + + result.FolderIds = folderIds; + } + + return result; + } + + public static JsonElement ParseQueryParam(string data) + { + if (int.TryParse(data, out _)) + { + return JsonSerializer.Deserialize(data); + } + + return JsonSerializer.Deserialize($"\"{data}\""); + } } } diff --git a/products/ASC.Files/Server/Controllers/FilesController.cs b/products/ASC.Files/Server/Controllers/FilesController.cs index 7b7664438d..9a1f3d24a0 100644 --- a/products/ASC.Files/Server/Controllers/FilesController.cs +++ b/products/ASC.Files/Server/Controllers/FilesController.cs @@ -1229,17 +1229,10 @@ namespace ASC.Api.Documents /// Folder ID list /// File ID list /// Conflicts file ids - [Create("fileops/move")] - public IEnumerable MoveOrCopyBatchCheckFromBody([FromBody] BatchModel batchModel) + [Read("fileops/move")] + public IEnumerable MoveOrCopyBatchCheck() { - return FilesControllerHelperString.MoveOrCopyBatchCheck(batchModel); - } - - [Create("fileops/move")] - [Consumes("application/x-www-form-urlencoded")] - public IEnumerable MoveOrCopyBatchCheckFromForm([FromForm] BatchModel batchModel) - { - return FilesControllerHelperString.MoveOrCopyBatchCheck(batchModel); + return FilesControllerHelperString.MoveOrCopyBatchCheck(BatchModel.FromQuery(HttpContext)); } ///