Example #1
0
        public ActionResult Settings(bool?save_preset, string save_preset_existing, string save_preset_custom, string preset, ThemeType themeType)
        {
            if (!save_preset.HasValue)
            {
                save_preset = false;
            }

            if (string.IsNullOrEmpty(preset))
            {
                preset = "Default";
            }

            var theme = new ThemeHandler(MASTERdomain, themeType == ThemeType.MOBILE);

            // handle files
            if (Request.Files.Count != 0)
            {
                foreach (var filename in Request.Files.AllKeys)
                {
                    var file = Request.Files[filename];
                    if (file == null ||
                        file.ContentLength == 0)
                    {
                        continue;
                    }
                    theme.SaveImage(filename, file.InputStream);
                }
            }

            // duplicate collection as original is read-only
            var values = new Dictionary <string, object>();

            foreach (string entry in Request.Form.Keys)
            {
                if (entry == "save_preset" ||
                    entry == "save_preset_existing" ||
                    entry == "save_preset_custom" ||
                    entry == "preset")
                {
                    continue;
                }

                var  val = Request.Form.GetValues(entry).FirstOrDefault();
                bool boolval;
                if (bool.TryParse(val, out boolval))
                {
                    values[entry] = boolval;
                }
                else
                {
                    values[entry] = val;
                }
            }

            var selectedPreset = "";

            if (save_preset.Value)
            {
                if (save_preset_existing == "new" && !string.IsNullOrEmpty(save_preset_custom))
                {
                    // if new preset name is specified then use the defined name
                    selectedPreset = save_preset_custom;
                }
                else
                {
                    // otherwise we just use current preset
                    selectedPreset = preset;
                }
            }
            else
            {
                selectedPreset = preset;
            }


            // convert to json string
            // read current settings from file
            var old_settings = JsonConvert.DeserializeObject <ThemeSettings>(theme.GetSettingsText());

            // just set preset
            old_settings.presets[selectedPreset] = values;
            old_settings.current = selectedPreset;

            // serialise and save to file
            var settings_string = JsonConvert.SerializeObject(old_settings, Formatting.Indented);

            theme.SaveSettings(settings_string);

            // save preset to db
            MASTERdomain.theme.preset = selectedPreset;

            // update versions
            switch (themeType)
            {
            case ThemeType.MAIN:
                MASTERdomain.theme.theme_version = DateTime.UtcNow.Ticks.ToString("x");
                break;

            case ThemeType.MOBILE:
                MASTERdomain.theme.theme_mobile_version = DateTime.UtcNow.Ticks.ToString("x");
                break;

            default:
                throw new ArgumentOutOfRangeException("themeType");
            }

            repository.Save();

            // need to invalidate any cached liquid assets
            CacheHelper.Instance.invalidate_dependency(DependencyType.liquid_assets, MASTERdomain.uniqueid);

            return(RedirectToAction("Index"));
        }