Exemple #1
0
        public async Task <IActionResult> UpdateCrowdfund(string appId, UpdateCrowdfundViewModel vm, string command)
        {
            var app = GetCurrentApp();

            if (app == null)
            {
                return(NotFound());
            }

            vm.TargetCurrency = await GetStoreDefaultCurrentIfEmpty(app.StoreDataId, vm.TargetCurrency);

            if (_currencies.GetCurrencyData(vm.TargetCurrency, false) == null)
            {
                ModelState.AddModelError(nameof(vm.TargetCurrency), "Invalid currency");
            }

            try
            {
                vm.PerksTemplate = _appService.SerializeTemplate(_appService.Parse(vm.PerksTemplate, vm.TargetCurrency));
            }
            catch
            {
                ModelState.AddModelError(nameof(vm.PerksTemplate), "Invalid template");
            }
            if (vm.TargetAmount is decimal v && v == 0.0m)
            {
                vm.TargetAmount = null;
            }

            if (!vm.IsRecurring)
            {
                vm.ResetEvery = nameof(CrowdfundResetEvery.Never);
            }

            if (Enum.Parse <CrowdfundResetEvery>(vm.ResetEvery) != CrowdfundResetEvery.Never && !vm.StartDate.HasValue)
            {
                ModelState.AddModelError(nameof(vm.StartDate), "A start date is needed when the goal resets every X amount of time.");
            }

            if (Enum.Parse <CrowdfundResetEvery>(vm.ResetEvery) != CrowdfundResetEvery.Never && vm.ResetEveryAmount <= 0)
            {
                ModelState.AddModelError(nameof(vm.ResetEveryAmount), "You must reset the goal at a minimum of 1 ");
            }

            if (vm.DisplayPerksRanking)
            {
                vm.SortPerksByPopularity = true;
            }

            var parsedSounds = vm.Sounds?.Split(
                new[] { "\r\n", "\r", "\n" },
                StringSplitOptions.None
                ).Select(s => s.Trim()).ToArray();

            if (vm.SoundsEnabled && (parsedSounds == null || !parsedSounds.Any()))
            {
                vm.SoundsEnabled = false;
                parsedSounds     = new CrowdfundSettings().Sounds;
            }

            var parsedAnimationColors = vm.AnimationColors?.Split(
                new[] { "\r\n", "\r", "\n" },
                StringSplitOptions.None
                ).Select(s => s.Trim()).ToArray();

            if (vm.AnimationsEnabled && (parsedAnimationColors == null || !parsedAnimationColors.Any()))
            {
                vm.AnimationsEnabled  = false;
                parsedAnimationColors = new CrowdfundSettings().AnimationColors;
            }

            if (!ModelState.IsValid)
            {
                return(View(vm));
            }

            app.Name = vm.AppName;
            var newSettings = new CrowdfundSettings
            {
                Title                 = vm.Title,
                Enabled               = vm.Enabled,
                EnforceTargetAmount   = vm.EnforceTargetAmount,
                StartDate             = vm.StartDate?.ToUniversalTime(),
                TargetCurrency        = vm.TargetCurrency,
                Description           = vm.Description,
                EndDate               = vm.EndDate?.ToUniversalTime(),
                TargetAmount          = vm.TargetAmount,
                CustomCSSLink         = vm.CustomCSSLink,
                MainImageUrl          = vm.MainImageUrl,
                EmbeddedCSS           = vm.EmbeddedCSS,
                NotificationUrl       = vm.NotificationUrl,
                Tagline               = vm.Tagline,
                PerksTemplate         = vm.PerksTemplate,
                DisqusEnabled         = vm.DisqusEnabled,
                SoundsEnabled         = vm.SoundsEnabled,
                DisqusShortname       = vm.DisqusShortname,
                AnimationsEnabled     = vm.AnimationsEnabled,
                ResetEveryAmount      = vm.ResetEveryAmount,
                ResetEvery            = Enum.Parse <CrowdfundResetEvery>(vm.ResetEvery),
                DisplayPerksValue     = vm.DisplayPerksValue,
                DisplayPerksRanking   = vm.DisplayPerksRanking,
                SortPerksByPopularity = vm.SortPerksByPopularity,
                Sounds                = parsedSounds,
                AnimationColors       = parsedAnimationColors
            };

            app.TagAllInvoices = vm.UseAllStoreInvoices;
            app.SetSettings(newSettings);

            await _appService.UpdateOrCreateApp(app);

            _eventAggregator.Publish(new AppUpdated()
            {
                AppId    = appId,
                StoreId  = app.StoreDataId,
                Settings = newSettings
            });
            TempData[WellKnownTempData.SuccessMessage] = "App updated";
            return(RedirectToAction(nameof(UpdateCrowdfund), new { appId }));
        }
Exemple #2
0
        public async Task <IActionResult> UpdateCrowdfund(string appId, UpdateCrowdfundViewModel vm)
        {
            if (!string.IsNullOrEmpty(vm.TargetCurrency) && _currencies.GetCurrencyData(vm.TargetCurrency, false) == null)
            {
                ModelState.AddModelError(nameof(vm.TargetCurrency), "Invalid currency");
            }

            try
            {
                _AppService.Parse(vm.PerksTemplate, vm.TargetCurrency).ToString();
            }
            catch
            {
                ModelState.AddModelError(nameof(vm.PerksTemplate), "Invalid template");
            }

            if (Enum.Parse <CrowdfundResetEvery>(vm.ResetEvery) != CrowdfundResetEvery.Never && !vm.StartDate.HasValue)
            {
                ModelState.AddModelError(nameof(vm.StartDate), "A start date is needed when the goal resets every X amount of time.");
            }

            if (Enum.Parse <CrowdfundResetEvery>(vm.ResetEvery) != CrowdfundResetEvery.Never && vm.ResetEveryAmount <= 0)
            {
                ModelState.AddModelError(nameof(vm.ResetEveryAmount), "You must reset the goal at a minimum of 1 ");
            }

            if (vm.DisplayPerksRanking && !vm.SortPerksByPopularity)
            {
                ModelState.AddModelError(nameof(vm.DisplayPerksRanking), "You must sort by popularity in order to display ranking.");
            }

            var parsedSounds = vm.Sounds.Split(
                new[] { "\r\n", "\r", "\n" },
                StringSplitOptions.None
                ).Select(s => s.Trim()).ToArray();

            if (vm.SoundsEnabled && !parsedSounds.Any())
            {
                ModelState.AddModelError(nameof(vm.Sounds), "You must have at least one sound if you enable sounds");
            }

            var parsedAnimationColors = vm.AnimationColors.Split(
                new[] { "\r\n", "\r", "\n" },
                StringSplitOptions.None
                ).Select(s => s.Trim()).ToArray();

            if (vm.AnimationsEnabled && !parsedAnimationColors.Any())
            {
                ModelState.AddModelError(nameof(vm.AnimationColors), "You must have at least one animation color if you enable animations");
            }

            if (!ModelState.IsValid)
            {
                return(View(vm));
            }


            var app = await GetOwnedApp(appId, AppType.Crowdfund);

            if (app == null)
            {
                return(NotFound());
            }

            var newSettings = new CrowdfundSettings()
            {
                Title                 = vm.Title,
                Enabled               = vm.Enabled,
                EnforceTargetAmount   = vm.EnforceTargetAmount,
                StartDate             = vm.StartDate,
                TargetCurrency        = vm.TargetCurrency,
                Description           = _htmlSanitizer.Sanitize(vm.Description),
                EndDate               = vm.EndDate,
                TargetAmount          = vm.TargetAmount,
                CustomCSSLink         = vm.CustomCSSLink,
                MainImageUrl          = vm.MainImageUrl,
                EmbeddedCSS           = vm.EmbeddedCSS,
                NotificationUrl       = vm.NotificationUrl,
                NotificationEmail     = vm.NotificationEmail,
                Tagline               = vm.Tagline,
                PerksTemplate         = vm.PerksTemplate,
                DisqusEnabled         = vm.DisqusEnabled,
                SoundsEnabled         = vm.SoundsEnabled,
                DisqusShortname       = vm.DisqusShortname,
                AnimationsEnabled     = vm.AnimationsEnabled,
                ResetEveryAmount      = vm.ResetEveryAmount,
                ResetEvery            = Enum.Parse <CrowdfundResetEvery>(vm.ResetEvery),
                DisplayPerksRanking   = vm.DisplayPerksRanking,
                SortPerksByPopularity = vm.SortPerksByPopularity,
                Sounds                = parsedSounds,
                AnimationColors       = parsedAnimationColors
            };

            app.TagAllInvoices = vm.UseAllStoreInvoices;
            app.SetSettings(newSettings);
            await UpdateAppSettings(app);

            _EventAggregator.Publish(new AppUpdated()
            {
                AppId    = appId,
                StoreId  = app.StoreDataId,
                Settings = newSettings
            });
            StatusMessage = "App updated";
            return(RedirectToAction(nameof(UpdateCrowdfund), new { appId }));
        }
Exemple #3
0
        public async Task <IActionResult> UpdateCrowdfund(string appId, UpdateCrowdfundViewModel vm)
        {
            if (!string.IsNullOrEmpty(vm.TargetCurrency) && _currencies.GetCurrencyData(vm.TargetCurrency, false) == null)
            {
                ModelState.AddModelError(nameof(vm.TargetCurrency), "Moneda invalida");
            }

            try
            {
                _AppService.Parse(vm.PerksTemplate, vm.TargetCurrency).ToString();
            }
            catch
            {
                ModelState.AddModelError(nameof(vm.PerksTemplate), "Plantilla inválida");
            }

            if (Enum.Parse <CrowdfundResetEvery>(vm.ResetEvery) != CrowdfundResetEvery.Never && !vm.StartDate.HasValue)
            {
                ModelState.AddModelError(nameof(vm.StartDate), "Se necesita una fecha de inicio cuando el objetivo se restablece cada X cantidad de tiempo.");
            }

            if (Enum.Parse <CrowdfundResetEvery>(vm.ResetEvery) != CrowdfundResetEvery.Never && vm.ResetEveryAmount <= 0)
            {
                ModelState.AddModelError(nameof(vm.ResetEveryAmount), "Debes restablecer el objetivo en un mínimo de 1. ");
            }

            if (vm.DisplayPerksRanking && !vm.SortPerksByPopularity)
            {
                ModelState.AddModelError(nameof(vm.DisplayPerksRanking), "Debes ordenar por popularidad para poder mostrar el ranking.");
            }

            var parsedSounds = vm.Sounds.Split(
                new[] { "\r\n", "\r", "\n" },
                StringSplitOptions.None
                ).Select(s => s.Trim()).ToArray();

            if (vm.SoundsEnabled && !parsedSounds.Any())
            {
                ModelState.AddModelError(nameof(vm.Sounds), "Debes tener al menos un sonido si habilitas los sonidos");
            }

            var parsedAnimationColors = vm.AnimationColors.Split(
                new[] { "\r\n", "\r", "\n" },
                StringSplitOptions.None
                ).Select(s => s.Trim()).ToArray();

            if (vm.AnimationsEnabled && !parsedAnimationColors.Any())
            {
                ModelState.AddModelError(nameof(vm.AnimationColors), "Debe tener al menos un color de animación si habilita las animaciones");
            }

            if (!ModelState.IsValid)
            {
                return(View(vm));
            }


            var app = await GetOwnedApp(appId, AppType.Crowdfund);

            if (app == null)
            {
                return(NotFound());
            }

            var newSettings = new CrowdfundSettings()
            {
                Title                 = vm.Title,
                Enabled               = vm.Enabled,
                EnforceTargetAmount   = vm.EnforceTargetAmount,
                StartDate             = vm.StartDate?.ToUniversalTime(),
                TargetCurrency        = vm.TargetCurrency,
                Description           = _htmlSanitizer.Sanitize(vm.Description),
                EndDate               = vm.EndDate?.ToUniversalTime(),
                TargetAmount          = vm.TargetAmount,
                CustomCSSLink         = vm.CustomCSSLink,
                MainImageUrl          = vm.MainImageUrl,
                EmbeddedCSS           = vm.EmbeddedCSS,
                NotificationUrl       = vm.NotificationUrl,
                NotificationEmail     = vm.NotificationEmail,
                Tagline               = vm.Tagline,
                PerksTemplate         = vm.PerksTemplate,
                DisqusEnabled         = vm.DisqusEnabled,
                SoundsEnabled         = vm.SoundsEnabled,
                DisqusShortname       = vm.DisqusShortname,
                AnimationsEnabled     = vm.AnimationsEnabled,
                ResetEveryAmount      = vm.ResetEveryAmount,
                ResetEvery            = Enum.Parse <CrowdfundResetEvery>(vm.ResetEvery),
                DisplayPerksRanking   = vm.DisplayPerksRanking,
                SortPerksByPopularity = vm.SortPerksByPopularity,
                Sounds                = parsedSounds,
                AnimationColors       = parsedAnimationColors
            };

            app.TagAllInvoices = vm.UseAllStoreInvoices;
            app.SetSettings(newSettings);
            await UpdateAppSettings(app);

            _EventAggregator.Publish(new AppUpdated()
            {
                AppId    = appId,
                StoreId  = app.StoreDataId,
                Settings = newSettings
            });
            StatusMessage = "Aplicación actualizada";
            return(RedirectToAction(nameof(UpdateCrowdfund), new { appId }));
        }