Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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);
        }