private Hashtable GetSqlModules(DbReplacePostModel model)
        {
            Hashtable htModules = new Hashtable();

            var connstr = GetConnectionString(model);

            SqlConnection con = new SqlConnection(connstr);
            SqlCommand    cmd = new SqlCommand();

            cmd.CommandText = model.SqlSelect;
            cmd.Connection  = con;

            try
            {
                con.Open();
                var reader = cmd.ExecuteReader(); // (CommandBehavior.SingleRow)

                while (reader.Read())
                {
                    int portalid = CheckDbValueInteger(reader, "PortalId", PortalSettings.PortalId);

                    if (model.AllPortals == bool.TrueString || portalid == PortalSettings.PortalId)
                    {
                        // Check if the item was already added
                        string id = reader["ContentId"].ToString();
                        if (!htModules.ContainsKey(id))
                        {
                            var oMod = new ModuleContent
                            {
                                PortalId     = CheckDbValueInteger(reader, "PortalId", PortalSettings.PortalId),
                                TabId        = CheckDbValueInteger(reader, "TabId", -1),
                                ModuleId     = CheckDbValueInteger(reader, "ModuleId", -1),
                                ContentSubId = CheckDbValueInteger(reader, "ContentSubId", -1),
                                ContentId    = (int)reader["ContentId"],
                                Text         = reader["ContentText"].ToString(),
                                Title        = reader["ContentTitle"].ToString()
                            };

                            htModules.Add(id, oMod);
                        }
                    }
                }

                reader.Close();
            }
            finally
            {
                con.Close();
            }


            return(htModules);
        }
        private static string GetConnectionString(DbReplacePostModel model)
        {
            var connstr = "";

            foreach (ConnectionStringSettings cs in ConfigurationManager.ConnectionStrings)
            {
                if (cs.Name == model.ConnectionString)
                {
                    connstr = cs.ConnectionString;
                    break;
                }
            }

            return(connstr);
        }
        public HttpResponseMessage DoGetScript(DbReplacePostModel model)
        {
            var retval = SqlModulesReplace(model, ModuleReplaceMode.GetScript);

            return(Request.CreateResponse(HttpStatusCode.OK, retval));
        }
        private string SqlModulesReplace(DbReplacePostModel model, ModuleReplaceMode mode)
        {
            // Get all modules
            Hashtable htModules = GetSqlModules(model);
            // Output
            StringBuilder sOut = new StringBuilder();

            var rxList = new List <KeyValuePair <string, string> >();

            foreach (var searchReplacePairModel in model.SearchReplace)
            {
                if (!string.IsNullOrEmpty(searchReplacePairModel.Search))
                {
                    rxList.Add(new KeyValuePair <string, string>(searchReplacePairModel.Search, searchReplacePairModel.Replace));
                }
            }

            int iModules  = 0;
            int iReplaced = 0;

            foreach (DictionaryEntry Item in htModules)
            {
                // Count number of found modules
                iModules += 1;
                var    oMod  = (ModuleContent)Item.Value;
                string sText = HttpUtility.HtmlDecode(oMod.Text);

                RegexOptions rxOptions = RegexOptions.None;
                if (model.CaseSensitive != bool.TrueString)
                {
                    rxOptions = RegexOptions.IgnoreCase;
                }

                string sNewText = RegexReplace(sText, mode, rxList, rxOptions);

                if (sNewText != sText)
                {
                    string sPortal = GetPortalString(model.AllPortals == bool.TrueString, oMod.PortalId);

                    sNewText = HttpUtility.HtmlEncode(sNewText);

                    switch (mode)
                    {
                    case ModuleReplaceMode.Find:
                    {
                        if (sNewText != string.Empty)
                        {
                            sNewText = sNewText.Replace("[*]", "<br />");

                            sOut.AppendLine(string.Format("<h4>Module: <a href=\"{3}/Default.aspx?Tabid={0}#{1}\" target=\"_blank\">{2}</a></h4><pre>{4}</pre>", oMod.TabId, oMod.ModuleId, oMod.Title, sPortal, sNewText));

                            iReplaced += 1;
                        }

                        break;
                    }

                    case ModuleReplaceMode.ReplaceTest:
                    {
                        sOut.AppendLine(string.Format("<div><h4>Module: <a href=\"{3}/Default.aspx?Tabid={0}#{1}\" target=\"_blank\">{2}</a></h4><pre>{4}</pre><pre class=\"New\">{5}</pre></div><hr />", oMod.TabId, oMod.ModuleId, oMod.Title, sPortal, oMod.Text, sNewText));

                        iReplaced += 1;
                        break;
                    }

                    case ModuleReplaceMode.Replace:
                    {
                        var sUpdateSql = model.SqlUpdate;

                        if (model.SqlUpdate.Trim().ToLower().StartsWith("select"))
                        {
                            sOut.AppendLine("Invalid Update SQL <br />");
                        }
                        else
                        {
                            // Get the update statement
                            sUpdateSql = GetUpdateSql(sUpdateSql, sNewText, oMod.ContentId);

                            // Update
                            if (ModuleSqlReplaceSave(GetConnectionString(model), sUpdateSql))
                            {
                                sOut.AppendLine(string.Format("<div><a href=\"/Default.aspx?Tabid={0}#{1}\" target=\"_blank\">{2}</a></div>", oMod.TabId, oMod.ModuleId, oMod.Title));

                                iReplaced += 1;
                            }
                            else
                            {
                                sOut.AppendLine("Errors SQL update <br />");
                            }
                        }
                        break;
                    }

                    case ModuleReplaceMode.GetScript:
                    {
                        var sUpdateSql = model.SqlUpdate;

                        if (model.SqlUpdate.ToLower().Contains("update"))
                        {
                            // Get the update statement
                            sUpdateSql = GetUpdateSql(sUpdateSql, sNewText, oMod.ContentId);

                            // To show copyable SQL on page
                            string sPrint = sUpdateSql.Replace("&#39;", "&#39;&#39;");

                            sOut.AppendLine(string.Format("<pre>{0}</pre><hr />", sPrint));

                            iReplaced += 1;
                        }
                        else
                        {
                            sOut.AppendLine("Invalid Update SQL <br />");
                        }
                        break;
                    }
                    }
                }
            }

            var retval = "";

            // Output
            switch (mode)
            {
            case ModuleReplaceMode.Find:
            {
                retval = string.Format("<div class=\"Report\"><h2>Checked Items: {0} - found {1}</h2>{2}</div>", iModules, iReplaced, sOut.ToString());
                break;
            }

            case ModuleReplaceMode.ReplaceTest:
            {
                retval = string.Format("<div class=\"Report\"><h2>Checked Items: {0} - replaced {1}</h2>{2}</div>", iModules, iReplaced, sOut.ToString());
                break;
            }

            case ModuleReplaceMode.GetScript:
            {
                retval = string.Format("<div class=\"Report\"><h2>Generated SQL script for {0}/{1} Items</h2>{2}</div>", iReplaced, iModules, sOut.ToString());
                break;
            }

            case ModuleReplaceMode.Replace:
            {
                retval = string.Format("<div class=\"Report\"><h2>Checked Items: {0} - replaced {1}</h2>{2}</div>", iModules, iReplaced, sOut.ToString());
                break;
            }
            }

            return(retval);
        }