Exemplo n.º 1
0
        public ActionResult Import(bool ismobile)
        {
            Stream inputStream;

            if (Request.Files.Count != 0)
            {
                inputStream = Request.Files[0].InputStream;
            }
            else
            {
                inputStream = Request.InputStream;
            }
            inputStream.Position = 0;
            var handler = new ThemeHandler(MASTERdomain, ismobile);

            try
            {
                var themedir = handler.ClearUserThemeDirectory();

                using (var s = new ZipInputStream(inputStream))
                {
                    ZipEntry theEntry;
                    while ((theEntry = s.GetNextEntry()) != null)
                    {
                        Console.WriteLine(theEntry.Name);

                        string directoryName = Path.GetDirectoryName(string.Format("{0}/{1}", themedir.FullName, theEntry.Name));
                        string fileName      = Path.GetFileName(string.Format("{0}/{1}", themedir.FullName, theEntry.Name));

                        // create directory
                        if (directoryName.Length > 0)
                        {
                            Directory.CreateDirectory(directoryName);
                        }

                        if (fileName != String.Empty)
                        {
                            using (FileStream streamWriter = System.IO.File.Create(string.Format("{0}/{1}", themedir.FullName, theEntry.Name)))
                            {
                                int    size = 2048;
                                byte[] data = new byte[2048];
                                while (true)
                                {
                                    size = s.Read(data, 0, data.Length);
                                    if (size > 0)
                                    {
                                        streamWriter.Write(data, 0, size);
                                    }
                                    else
                                    {
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Syslog.Write(ex);
                return(Json("Failed to extract theme files".ToJsonFail()));
            }

            // update theme
            var theme = MASTERdomain.theme;

            if (theme == null)
            {
                theme = new theme();
                MASTERdomain.theme = theme;
            }

            theme.title   = ThemeHandler.CustomThemeName;
            theme.url     = "/Content/img/store/custom_theme.png";
            theme.created = DateTime.UtcNow;

            // remove custom templates from existing pages
            var pages = MASTERdomain.pages.Where(x => !string.IsNullOrEmpty(x.templatename));

            foreach (var page in pages)
            {
                page.templatename = "";
            }
            repository.Save();

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

            return(Json("Theme imported successfully".ToJsonOKMessage()));
        }