public virtual void DeleteExportProfile(ExportProfile profile, bool force = false)
        {
            if (profile == null)
            {
                throw new ArgumentNullException("profile");
            }

            if (!force && profile.IsSystemProfile)
            {
                throw new SmartException(_localizationService.GetResource("Admin.DataExchange.Export.CannotDeleteSystemProfile"));
            }

            int scheduleTaskId = profile.SchedulingTaskId;
            var folder         = profile.GetExportFolder();

            var deployments = profile.Deployments.Where(x => !x.IsTransientRecord()).ToList();

            if (deployments.Any())
            {
                _exportDeploymentRepository.DeleteRange(deployments);
                _exportDeploymentRepository.Context.SaveChanges();
            }

            _exportProfileRepository.Delete(profile);

            var scheduleTask = _scheduleTaskService.GetTaskById(scheduleTaskId);

            _scheduleTaskService.DeleteTask(scheduleTask);

            if (System.IO.Directory.Exists(folder))
            {
                FileSystemHelper.ClearDirectory(folder, true);
            }
        }
Пример #2
0
        public virtual void DeleteExportProfile(ExportProfile profile, bool force = false)
        {
            if (profile == null)
            {
                throw new ArgumentNullException("profile");
            }

            if (!force && profile.IsSystemProfile)
            {
                throw new SmartException(_localizationService.GetResource("Admin.DataExchange.Export.CannotDeleteSystemProfile"));
            }

            int scheduleTaskId = profile.SchedulingTaskId;
            var folder         = profile.GetExportFolder();

            _exportProfileRepository.Delete(profile);

            var scheduleTask = _scheduleTaskService.GetTaskById(scheduleTaskId);

            _scheduleTaskService.DeleteTask(scheduleTask);

            _eventPublisher.EntityDeleted(profile);

            if (System.IO.Directory.Exists(folder))
            {
                FileSystemHelper.ClearDirectory(folder, true);
            }
        }
        public void Seed(SmartObjectContext context)
        {
            context.MigrateLocaleResources(MigrateLocaleResources);

            // migrate folder name to folder path
            var rootPath       = "~/App_Data/ExportProfiles/";
            var exportProfiles = context.Set <ExportProfile>().ToList();

            foreach (var profile in exportProfiles)
            {
                if (!profile.FolderName.EmptyNull().StartsWith(rootPath))
                {
                    profile.FolderName = rootPath + profile.FolderName;
                }
            }

            context.SaveChanges();

            // migrate public file system deployment to new public deployment
            if (context.ColumnExists("ExportDeployment", "IsPublic"))
            {
                var fileSystemDeploymentTypeId   = (int)ExportDeploymentType.FileSystem;
                var publicFolderDeploymentTypeId = (int)ExportDeploymentType.PublicFolder;

                context.ExecuteSqlCommand("Update [ExportDeployment] Set DeploymentTypeId = {0} Where DeploymentTypeId = {1} And IsPublic = 1",
                                          true, null, publicFolderDeploymentTypeId, fileSystemDeploymentTypeId);

                context.ColumnDelete("ExportDeployment", "IsPublic");
            }

            var oldFileManagerPath = CommonHelper.MapPath("~/Content/filemanager");

            FileSystemHelper.ClearDirectory(oldFileManagerPath, true);
        }
        public override void Uninstall()
        {
            ConnectionCache.Remove();

            _services.Settings.DeleteSetting <ShopConnectorSettings>();
            _services.Localization.DeleteLocaleStringResources(PluginDescriptor.ResourceRootKey);

            InsertProfile(ShopConnectorProductXmlExportProvider.SystemName, false);
            InsertProfile(ShopConnectorCategoryXmlExportProvider.SystemName, false);

            var migrator = new DbMigrator(new Configuration());

            migrator.Update(DbMigrator.InitialDatabase);

            FileSystemHelper.ClearDirectory(ShopConnectorFileSystem.GetDirectory(null), true);

            base.Uninstall();
        }
        private void DownloadDir(string path)
        {
            path = GetRelativePath(path);
            if (!_fileSystem.FolderExists(path))
            {
                throw new Exception(LangRes("E_CreateArchive"));
            }

            var folder = _fileSystem.GetFolder(path);

            // copy files from file storage to temp folder
            var tempDir = FileSystemHelper.TempDirTenant("roxy " + folder.Name);

            FileSystemHelper.ClearDirectory(tempDir, false);
            var files = GetFiles(path, null);

            foreach (var file in files)
            {
                var bytes = _fileSystem.ReadAllBytes(file.Path);
                if (bytes != null && bytes.Length > 0)
                {
                    System.IO.File.WriteAllBytes(Path.Combine(tempDir, file.Name), bytes);
                }
            }

            // create zip from temp folder
            var tempZip = Path.Combine(FileSystemHelper.TempDirTenant(), folder.Name + ".zip");

            FileSystemHelper.DeleteFile(tempZip);

            ZipFile.CreateFromDirectory(tempDir, tempZip, CompressionLevel.Fastest, false);

            Response.Clear();
            Response.Headers.Add("Content-Disposition", "attachment; filename=\"" + folder.Name + ".zip\"");
            Response.ContentType = "application/zip";
            Response.TransmitFile(tempZip);
            Response.Flush();

            FileSystemHelper.DeleteFile(tempZip);
            FileSystemHelper.ClearDirectory(tempDir, true);

            Response.End();
        }
        public static void CleanupDirectories()
        {
            Throttle.Check("Cleanup temporary Shop-Connector files", TimeSpan.FromHours(12), () =>
            {
                try
                {
                    var olderThan = TimeSpan.FromHours(12);

                    foreach (var name in new string[] { "Export", "About" })
                    {
                        var dir = GetDirectory(name);
                        FileSystemHelper.ClearDirectory(new DirectoryInfo(dir), false, olderThan);
                    }
                }
                catch { }

                return(true);
            });
        }
Пример #7
0
        public virtual void DeleteImportProfile(ImportProfile profile)
        {
            if (profile == null)
            {
                throw new ArgumentNullException("profile");
            }

            var scheduleTaskId = profile.SchedulingTaskId;
            var folder         = profile.GetImportFolder();

            _importProfileRepository.Delete(profile);

            var scheduleTask = _scheduleTaskService.GetTaskById(scheduleTaskId);

            _scheduleTaskService.DeleteTask(scheduleTask);

            if (System.IO.Directory.Exists(folder))
            {
                FileSystemHelper.ClearDirectory(folder, true);
            }
        }
        private async Task UploadAsync(string path, bool external = false)
        {
            path = GetRelativePath(path);

            string message  = null;
            var    hasError = false;
            var    width    = 0;
            var    height   = 0;
            string url      = null;

            int.TryParse(GetSetting("MAX_IMAGE_WIDTH"), out width);
            int.TryParse(GetSetting("MAX_IMAGE_HEIGHT"), out height);

            var tempDir = FileSystemHelper.TempDirTenant("roxy " + CommonHelper.GenerateRandomInteger().ToString());

            try
            {
                var notify = Request.Files.Count < 4;

                // copy uploaded files to temp folder and resize them
                for (var i = 0; i < Request.Files.Count; ++i)
                {
                    var file      = Request.Files[i];
                    var extension = Path.GetExtension(file.FileName);

                    if (IsAllowedFileType(extension))
                    {
                        var dest = Path.Combine(tempDir, file.FileName);
                        file.SaveAs(dest);

                        if (GetFileContentType(extension) == "image" && extension != ".svg")
                        {
                            ImageResize(dest, dest, width, height, notify);
                        }
                    }
                    else
                    {
                        message = LangRes("E_UploadNotAll");
                    }
                }

                // Copy files to file storage
                foreach (var tempPath in Directory.EnumerateFiles(tempDir, "*", SearchOption.TopDirectoryOnly))
                {
                    using (var stream = new FileStream(tempPath, FileMode.Open, FileAccess.Read))
                    {
                        var name    = Path.GetFileName(tempPath);
                        var newPath = _fileSystem.Combine(path, name);
                        if (_fileSystem.CheckFileUniqueness(newPath, out var file))
                        {
                            newPath = file.Path;
                        }

                        await _fileSystem.SaveStreamAsync(newPath, stream);

                        url = _fileSystem.GetPublicUrl(newPath);
                    }
                }
            }
            catch (Exception ex)
            {
                hasError = true;
                message  = ex.Message;
            }
            finally
            {
                FileSystemHelper.ClearDirectory(tempDir, true);
            }

            if (IsAjaxUpload())
            {
                if (external)
                {
                    var result = new
                    {
                        Success = !hasError,
                        Url     = url,
                        Message = message
                    };
                    Response.ContentType = "text/json";
                    Response.Write(JsonConvert.SerializeObject(result));
                }
                else
                {
                    if (message.HasValue())
                    {
                        Response.Write(GetResultString(message, hasError ? "error" : "ok"));
                    }
                }
            }
            else
            {
                Response.Write("<script>");
                Response.Write("parent.fileUploaded(" + GetResultString(message, hasError ? "error" : "ok") + ");");
                Response.Write("</script>");
            }
        }
Пример #9
0
        public ActionResult MaintenanceDeleteFiles(MaintenanceModel model)
        {
            if (!_services.Permissions.Authorize(StandardPermissionProvider.ManageMaintenance))
            {
                return(AccessDeniedView());
            }

            DateTime?startDateValue = (model.DeleteExportedFiles.StartDate == null) ? null
                                : (DateTime?)_dateTimeHelper.Value.ConvertToUtcTime(model.DeleteExportedFiles.StartDate.Value, _dateTimeHelper.Value.CurrentTimeZone);

            DateTime?endDateValue = (model.DeleteExportedFiles.EndDate == null) ? null
                                : (DateTime?)_dateTimeHelper.Value.ConvertToUtcTime(model.DeleteExportedFiles.EndDate.Value, _dateTimeHelper.Value.CurrentTimeZone).AddDays(1);


            model.DeleteExportedFiles.NumberOfDeletedFiles   = 0;
            model.DeleteExportedFiles.NumberOfDeletedFolders = 0;

            var appPath = this.Request.PhysicalApplicationPath;

            string[] paths = new string[]
            {
                appPath + @"Content\files\exportimport\",
                appPath + @"Exchange\",
                appPath + @"App_Data\ExportProfiles\"
            };

            foreach (var path in paths)
            {
                foreach (var fullPath in System.IO.Directory.GetFiles(path))
                {
                    try
                    {
                        var fileName = Path.GetFileName(fullPath);
                        if (fileName.Equals("index.htm", StringComparison.InvariantCultureIgnoreCase))
                        {
                            continue;
                        }

                        if (fileName.Equals("placeholder", StringComparison.InvariantCultureIgnoreCase))
                        {
                            continue;
                        }

                        var info = new FileInfo(fullPath);

                        if ((!startDateValue.HasValue || startDateValue.Value < info.CreationTimeUtc) &&
                            (!endDateValue.HasValue || info.CreationTimeUtc < endDateValue.Value))
                        {
                            if (FileSystemHelper.Delete(fullPath))
                            {
                                ++model.DeleteExportedFiles.NumberOfDeletedFiles;
                            }
                        }
                    }
                    catch (Exception exc)
                    {
                        NotifyError(exc, false);
                    }
                }

                var dir = new DirectoryInfo(path);

                foreach (var dirInfo in dir.GetDirectories())
                {
                    if ((!startDateValue.HasValue || startDateValue.Value < dirInfo.LastWriteTimeUtc) &&
                        (!endDateValue.HasValue || dirInfo.LastWriteTimeUtc < endDateValue.Value))
                    {
                        FileSystemHelper.ClearDirectory(dirInfo.FullName, true);
                        ++model.DeleteExportedFiles.NumberOfDeletedFolders;
                    }
                }
            }

            // clear unreferenced profile folders
            var importProfileFolders = _importProfileService.Value.GetImportProfiles()
                                       .Select(x => x.FolderName)
                                       .ToList();

            var infoImportProfiles = new DirectoryInfo(CommonHelper.MapPath("~/App_Data/ImportProfiles"));

            foreach (var infoSubFolder in infoImportProfiles.GetDirectories())
            {
                if (!importProfileFolders.Contains(infoSubFolder.Name))
                {
                    FileSystemHelper.ClearDirectory(infoSubFolder.FullName, true);
                    ++model.DeleteExportedFiles.NumberOfDeletedFolders;
                }
            }

            return(View(model));
        }
Пример #10
0
        public async Task <IQueryable <UploadImportFile> > ImportFiles()
        {
            if (!Request.Content.IsMimeMultipartContent())
            {
                throw this.ExceptionUnsupportedMediaType();
            }

            ImportProfile profile    = null;
            string        identifier = null;
            var           tempDir    = FileSystemHelper.TempDir(Guid.NewGuid().ToString());
            var           provider   = new MultipartFormDataStreamProvider(tempDir);

            try
            {
                await Request.Content.ReadAsMultipartAsync(provider);
            }
            catch (Exception exception)
            {
                FileSystemHelper.ClearDirectory(tempDir, true);
                throw this.ExceptionInternalServerError(exception);
            }

            // find import profile
            if (provider.FormData.AllKeys.Contains("Id"))
            {
                identifier = provider.FormData.GetValues("Id").FirstOrDefault();
                profile    = _importProfileService.Value.GetImportProfileById(identifier.ToInt());
            }
            else if (provider.FormData.AllKeys.Contains("Name"))
            {
                identifier = provider.FormData.GetValues("Name").FirstOrDefault();
                profile    = _importProfileService.Value.GetImportProfileByName(identifier);
            }

            if (profile == null)
            {
                FileSystemHelper.ClearDirectory(tempDir, true);
                throw this.ExceptionNotFound(WebApiGlobal.Error.EntityNotFound.FormatInvariant(identifier.NaIfEmpty()));
            }

            var deleteExisting = false;
            var result         = new List <UploadImportFile>();
            var unzippedFiles  = new List <MultipartFileData>();
            var importFolder   = profile.GetImportFolder(true, true);
            var csvTypes       = new string[] { ".csv", ".txt", ".tab" };

            if (provider.FormData.AllKeys.Contains("deleteExisting"))
            {
                var strDeleteExisting = provider.FormData.GetValues("deleteExisting").FirstOrDefault();
                deleteExisting = (strDeleteExisting.HasValue() && strDeleteExisting.ToBool());
            }

            // unzip files
            foreach (var file in provider.FileData)
            {
                var import = new UploadImportFile(file.Headers);

                if (import.FileExtension.IsCaseInsensitiveEqual(".zip"))
                {
                    var subDir = Path.Combine(tempDir, Guid.NewGuid().ToString());
                    ZipFile.ExtractToDirectory(file.LocalFileName, subDir);
                    FileSystemHelper.Delete(file.LocalFileName);

                    foreach (var unzippedFile in Directory.GetFiles(subDir, "*.*"))
                    {
                        var content = CloneHeaderContent(unzippedFile, file);
                        unzippedFiles.Add(new MultipartFileData(content.Headers, unzippedFile));
                    }
                }
                else
                {
                    unzippedFiles.Add(new MultipartFileData(file.Headers, file.LocalFileName));
                }
            }

            // copy files to import folder
            if (unzippedFiles.Any())
            {
                using (_rwLock.GetWriteLock())
                {
                    if (deleteExisting)
                    {
                        FileSystemHelper.ClearDirectory(importFolder, false);
                    }

                    foreach (var file in unzippedFiles)
                    {
                        var import   = new UploadImportFile(file.Headers);
                        var destPath = Path.Combine(importFolder, import.FileName);

                        import.Exists = File.Exists(destPath);

                        switch (profile.FileType)
                        {
                        case ImportFileType.XLSX:
                            import.IsSupportedByProfile = import.FileExtension.IsCaseInsensitiveEqual(".xlsx");
                            break;

                        case ImportFileType.CSV:
                            import.IsSupportedByProfile = csvTypes.Contains(import.FileExtension, StringComparer.OrdinalIgnoreCase);
                            break;
                        }

                        import.Inserted = FileSystemHelper.Copy(file.LocalFileName, destPath);

                        result.Add(import);
                    }
                }
            }

            FileSystemHelper.ClearDirectory(tempDir, true);
            return(result.AsQueryable());
        }
Пример #11
0
        public async Task <IHttpActionResult> ImportFiles()
        {
            if (!Request.Content.IsMimeMultipartContent())
            {
                return(StatusCode(HttpStatusCode.UnsupportedMediaType));
            }

            ImportProfile profile    = null;
            string        identifier = null;
            var           tempDir    = FileSystemHelper.TempDirTenant(Guid.NewGuid().ToString());
            var           provider   = new MultipartFormDataStreamProvider(tempDir);

            try
            {
                await Request.Content.ReadAsMultipartAsync(provider);
            }
            catch (Exception ex)
            {
                FileSystemHelper.ClearDirectory(tempDir, true);
                return(InternalServerError(ex));
            }

            // Find import profile.
            if (provider.FormData.AllKeys.Contains("Id"))
            {
                identifier = provider.FormData.GetValues("Id").FirstOrDefault();
                profile    = _importProfileService.Value.GetImportProfileById(identifier.ToInt());
            }
            else if (provider.FormData.AllKeys.Contains("Name"))
            {
                identifier = provider.FormData.GetValues("Name").FirstOrDefault();
                profile    = _importProfileService.Value.GetImportProfileByName(identifier);
            }

            if (profile == null)
            {
                FileSystemHelper.ClearDirectory(tempDir, true);
                throw Request.NotFoundException(WebApiGlobal.Error.EntityNotFound.FormatInvariant(identifier.NaIfEmpty()));
            }

            var startImport    = false;
            var deleteExisting = false;
            var result         = new List <UploadImportFile>();
            var unzippedFiles  = new List <MultipartFileData>();
            var importFolder   = profile.GetImportFolder(true, true);
            var csvTypes       = new string[] { ".csv", ".txt", ".tab" };

            if (provider.FormData.AllKeys.Contains("deleteExisting"))
            {
                var strDeleteExisting = provider.FormData.GetValues("deleteExisting").FirstOrDefault();
                deleteExisting = strDeleteExisting.HasValue() && strDeleteExisting.ToBool();
            }

            if (provider.FormData.AllKeys.Contains("startImport"))
            {
                var strStartImport = provider.FormData.GetValues("startImport").FirstOrDefault();
                startImport = strStartImport.HasValue() && strStartImport.ToBool();
            }

            // Unzip files.
            foreach (var file in provider.FileData)
            {
                var import = new UploadImportFile(file.Headers);

                if (import.FileExtension.IsCaseInsensitiveEqual(".zip"))
                {
                    var subDir = Path.Combine(tempDir, Guid.NewGuid().ToString());
                    ZipFile.ExtractToDirectory(file.LocalFileName, subDir);
                    FileSystemHelper.DeleteFile(file.LocalFileName);

                    foreach (var unzippedFile in Directory.GetFiles(subDir, "*.*"))
                    {
                        var content = CloneHeaderContent(unzippedFile, file);
                        unzippedFiles.Add(new MultipartFileData(content.Headers, unzippedFile));
                    }
                }
                else
                {
                    unzippedFiles.Add(new MultipartFileData(file.Headers, file.LocalFileName));
                }
            }

            // Copy files to import folder.
            if (unzippedFiles.Any())
            {
                using (_rwLock.GetWriteLock())
                {
                    if (deleteExisting)
                    {
                        FileSystemHelper.ClearDirectory(importFolder, false);
                    }

                    foreach (var file in unzippedFiles)
                    {
                        var import   = new UploadImportFile(file.Headers);
                        var destPath = Path.Combine(importFolder, import.FileName);

                        import.Exists = File.Exists(destPath);

                        switch (profile.FileType)
                        {
                        case ImportFileType.XLSX:
                            import.IsSupportedByProfile = import.FileExtension.IsCaseInsensitiveEqual(".xlsx");
                            break;

                        case ImportFileType.CSV:
                            import.IsSupportedByProfile = csvTypes.Contains(import.FileExtension, StringComparer.OrdinalIgnoreCase);
                            break;
                        }

                        import.Inserted = FileSystemHelper.CopyFile(file.LocalFileName, destPath);

                        result.Add(import);
                    }
                }
            }

            FileSystemHelper.ClearDirectory(tempDir, true);

            if (startImport)
            {
                var customer = _workContext.Value.CurrentCustomer;

                if (_permissionService.Value.Authorize(Permissions.System.ScheduleTask.Execute, customer))
                {
                    _taskScheduler.Value.RunSingleTask(profile.SchedulingTaskId, new Dictionary <string, string>
                    {
                        { TaskExecutor.CurrentCustomerIdParamName, customer.Id.ToString() },
                        { TaskExecutor.CurrentStoreIdParamName, _storeContext.Value.CurrentStore.Id.ToString() }
                    });
                }
            }

            return(Ok(result.AsQueryable()));
        }
        private void Upload(string path)
        {
            path = GetRelativePath(path);

            string message  = null;
            var    hasError = false;
            var    width    = 0;
            var    height   = 0;

            int.TryParse(GetSetting("MAX_IMAGE_WIDTH"), out width);
            int.TryParse(GetSetting("MAX_IMAGE_HEIGHT"), out height);

            var tempDir = FileSystemHelper.TempDirTenant("roxy " + CommonHelper.GenerateRandomInteger().ToString());

            try
            {
                // copy uploaded files to temp folder and resize them
                for (var i = 0; i < Request.Files.Count; ++i)
                {
                    var file      = Request.Files[i];
                    var extension = Path.GetExtension(file.FileName);

                    if (IsAllowedFileType(extension))
                    {
                        var dest = Path.Combine(tempDir, file.FileName);
                        file.SaveAs(dest);

                        if (GetFileContentType(extension).IsCaseInsensitiveEqual("image"))
                        {
                            ImageResize(dest, dest, width, height);
                        }
                    }
                    else
                    {
                        message = LangRes("E_UploadNotAll");
                    }
                }

                // copy files to file storage
                foreach (var tempPath in Directory.EnumerateFiles(tempDir, "*", SearchOption.TopDirectoryOnly))
                {
                    using (var stream = new FileStream(tempPath, FileMode.Open, FileAccess.Read))
                    {
                        var name    = GetUniqueFileName(path, Path.GetFileName(tempPath));
                        var newPath = _fileSystem.Combine(path, name);

                        _fileSystem.SaveStream(newPath, stream);
                    }
                }
            }
            catch (Exception exception)
            {
                hasError = true;
                message  = exception.Message;
            }
            finally
            {
                FileSystemHelper.ClearDirectory(tempDir, true);
            }

            if (IsAjaxUpload())
            {
                if (message.HasValue())
                {
                    Response.Write(GetResultString(message, hasError ? "error" : "ok"));
                }
            }
            else
            {
                Response.Write("<script>");
                Response.Write("parent.fileUploaded(" + GetResultString(message, hasError ? "error" : "ok") + ");");
                Response.Write("</script>");
            }
        }