public ActionResult ImportPackage(DeploymentViewModel.ImportViewModel importForm) { var model = _deploymentViewModelBuilder.Build(ShowExport()); StructureInfo structureInfo = null; PackageInfo packageInfo = null; if (!ValidateImportForm(importForm)) { return(View(nameof(Index), model)); } _package.Type = importForm.PackageName; try { structureInfo = _package.GetStructureInfo(); structureInfo.CreateExampleProducts = importForm.CreateExampleProducts; packageInfo = _package.CreatePackageInfo(structureInfo, importForm.Name, importForm.DomainName); model.ShowImport = true; model.CanImport = true; Solution.Instance.SearchService.IndexJobConsumer.Stop(); _packageService.Import(structureInfo, packageInfo); _structureInfoService.UpdatePropertyReferences(structureInfo, packageInfo); model.ImportMessage = "accelerator.deployment.import.success".AsAngularResourceString(); } catch (Exception e) { _logger.LogError(e, "Package installation error."); model.ImportMessage = "accelerator.deployment.error".AsAngularResourceString(); try { foreach (var variant in structureInfo.ProductCatalog.Variants) { var newVariant = _variantService.Get(structureInfo.Id(variant.SystemId)); if (newVariant != null) { _variantService.Delete(newVariant); } } foreach (var product in structureInfo.ProductCatalog.BaseProducts) { var newProduct = _baseProductService.Get(structureInfo.Id(product.SystemId)); if (newProduct != null) { _baseProductService.Delete(newProduct); } } foreach (var category in structureInfo.ProductCatalog.Categories) { var newCategory = _categoryService.Get(structureInfo.Id(category.SystemId)); if (newCategory != null) { _categoryService.Delete(newCategory); } } _channelService.Delete(packageInfo.Channel); _marketService.Delete(packageInfo.Market); _websiteService.Delete(packageInfo.Website); _assortmentService.Delete(packageInfo.Assortment); _folderService.Delete(packageInfo.Folder); _inventoryService.Delete(packageInfo.Inventory); _priceListService.Delete(packageInfo.PriceList); } catch (Exception ee) { _logger.LogError(ee, "Package installation cleanup error."); } } finally { Solution.Instance.SearchService.IndexJobConsumer.Start(); } return(View(nameof(Index), model)); }
private bool ValidateImportForm(DeploymentViewModel.ImportViewModel importForm) { var isValid = true; if (string.IsNullOrWhiteSpace(importForm.PackageName)) { isValid = false; } if (string.IsNullOrWhiteSpace(importForm.Name)) { ModelState.AddModelError($"ImportForm.{nameof(importForm.Name)}", "accelerator.deployment.validation.required".AsAngularResourceString()); isValid = false; } else { var name = _slugifyService.Slugify(CultureInfo.CurrentCulture, importForm.Name); if (_channelService.Get(name) != null) { ModelState.AddModelError($"ImportForm.{nameof(importForm.Name)}", "accelerator.deployment.validation.channelexists".AsAngularResourceString()); isValid = false; } } var tempDomainName = !string.IsNullOrEmpty(importForm.DomainName) && importForm.DomainName.Contains("://") ? importForm.DomainName : "http://" + importForm.DomainName; if (string.IsNullOrWhiteSpace(importForm.DomainName)) { ModelState.AddModelError($"ImportForm.{nameof(importForm.DomainName)}", "accelerator.deployment.validation.required".AsAngularResourceString()); isValid = false; } else if (importForm.DomainName.Contains(" ")) { ModelState.AddModelError($"ImportForm.{nameof(importForm.DomainName)}", "accelerator.deployment.validation.space".AsAngularResourceString()); isValid = false; } else if (!Uri.TryCreate(tempDomainName, UriKind.RelativeOrAbsolute, out var uri)) { ModelState.AddModelError($"ImportForm.{nameof(importForm.DomainName)}", "general.hostnameisnotvalid".AsAngularResourceString()); isValid = false; } else { var domain = AcceleratorPackage.ExtractDomainName(importForm.DomainName); var urlPath = AcceleratorPackage.ExtractUrlPath(importForm.DomainName).NullIfEmpty(); if (urlPath?.Contains("/") == true) { ModelState.AddModelError($"ImportForm.{nameof(importForm.DomainName)}", "accelerator.deployment.validation.urlpath".AsAngularResourceString()); isValid = false; } else { var domainName = _domainNameService.Get(domain); if (domainName != null && _channelService.GetAll().Any(x => x .DomainNameLinks .Any(z => z.DomainNameSystemId == domainName.SystemId && string.Equals(z.UrlPrefix, urlPath, StringComparison.OrdinalIgnoreCase)))) { ModelState.AddModelError($"ImportForm.{nameof(importForm.DomainName)}", "accelerator.deployment.validation.domainnameexists".AsAngularResourceString()); isValid = false; } } } return(isValid); }