예제 #1
0
    protected void btnExtractSite_Click(object sender, EventArgs e)
    {
        //check all the packages in this site
        //Read the extractor sp
        //execute the sp and save to the respective file
        //make zip of the packages
        //extract site json file
        //create temporary folder and then make zip of all the file

        ///declaring paths
        string destZip             = "temptemplatezip";
        string tempPackageFilePath = Server.MapPath(@"~\temptemplatefiles");
        string tempZipFolderPath   = Server.MapPath(@"~\" + destZip);
        string fullpath            = Server.MapPath(@"~\ContentderPackages");

        //create temporary folder for file collection
        if (Directory.Exists(tempPackageFilePath))
        {
            Directory.Delete(tempPackageFilePath, true);
        }
        Directory.CreateDirectory(tempPackageFilePath);

        WebBuilderController objController = new WebBuilderController();

        if (Directory.Exists(fullpath))
        {
            string[]           directories     = Directory.GetDirectories(fullpath);
            int                directoryLength = directories.Length;
            List <EasyPackage> objPackage      = new List <EasyPackage>();
            if (directoryLength > 0)
            {
                for (int i = 0; i < directoryLength; i++)
                {
                    EasyPackage   objPack = new EasyPackage();
                    DirectoryInfo dir     = new DirectoryInfo(directories[i]);
                    Dictionary <string, string> paramKeysValues = new Dictionary <string, string>();
                    objPack.Name = dir.Name;
                    string xmlPath = directories[i] + "\\package.xml";
                    if (File.Exists(xmlPath))
                    {
                        XmlDocument doc  = SageFrame.Templating.xmlparser.XmlHelper.LoadXMLDocument(xmlPath);
                        XmlNode     node = doc.SelectSingleNode("package/datasql/sql");
                        if (node != null)
                        {
                            objPack.Sql = node.InnerText;
                        }
                        node = doc.SelectSingleNode("package/datasql/storeprocedure");
                        if (node != null)
                        {
                            objPack.Storeprocedure = node.InnerText;
                        }
                        node = doc.SelectSingleNode("package/datasql/params");
                        if (node != null)
                        {
                            XmlNodeList xnList = doc.SelectNodes("package/datasql/params/param");
                            foreach (XmlNode xn in xnList)
                            {
                                string key   = xn["key"].InnerText;
                                string value = xn["value"].InnerText;
                                if (key.Trim() != string.Empty)
                                {
                                    paramKeysValues.Add(key.Trim(), value.Trim());
                                }
                            }
                        }
                        objPack.ParamkeyAndValue = paramKeysValues;
                        objPackage.Add(objPack);
                    }
                }
                objPackage = objController.ExtractPackageData(objPackage);

                //writing the data in respective sql file
                foreach (EasyPackage item in objPackage)
                {
                    string spSavePath = Server.MapPath(@"~\ContentderPackages\" + item.Name + "\\sql\\" + item.Sql + ".sql");
                    if (!File.Exists(spSavePath))
                    {
                        File.Create(spSavePath);
                    }
                    using (StreamWriter writetext = new StreamWriter(spSavePath))
                    {
                        writetext.WriteLine(item.Result);
                    }
                }

                //copy packages to temp folder
                DirectoryInfo tempDir    = new DirectoryInfo(tempPackageFilePath + "\\ContentderPackages");
                DirectoryInfo packageDir = new DirectoryInfo(fullpath);
                IOHelper.CopyDirectory(packageDir, tempDir);
            }
        }
        //read json from database for site
        WebbuilderSite objWebsite = new WebbuilderSite();

        objWebsite         = objController.ExtractSite(userModuleID, GetCurrentCulture(), GetHostURL());
        objWebsite.Culture = GetCurrentCulture();
        string jsonFile = JsonConvert.SerializeObject(objWebsite);

        //write extracted site json to file and save inside temporary folder
        string saveJson = tempPackageFilePath + "\\theme.json";

        using (StreamWriter writetext = new StreamWriter(saveJson))
        {
            writetext.WriteLine(jsonFile);
        }
        //Create zip folder
        if (!Directory.Exists(tempZipFolderPath))
        {
            Directory.CreateDirectory(tempZipFolderPath);
        }

        //zip files inside the zip folder
        tempPackageFilePath += "\\";
        tempZipFolderPath   += "\\Contentder.zip";
        destZip             += "/Contentder.zip";
        ZipUtil.ZipFiles(tempPackageFilePath, tempZipFolderPath, string.Empty);
        if (destZip != string.Empty)
        {
            //download zip
            //Response.Redirect(GetHostURL() + "/" + destZip);
            ////delete the temporary package and zip folder
            //IOHelper.DeleteDirectory(tempPackageFilePath);
            //IOHelper.DeleteDirectory(tempZipFolderPath);
            Response.Clear();
            Response.AddHeader("Content-Disposition", "attachment; filename=Contentder.zip");
            Response.ContentType = "application/x-zip-compressed";
            Response.WriteFile(tempZipFolderPath);
            IOHelper.DeleteDirectory(tempPackageFilePath);
            IOHelper.DeleteDirectory(tempZipFolderPath);
            Response.Flush();
            Response.End();
        }
    }