public override bool SetupBlogFromExistingBlog(Blog existingBlog, Blog newBlog)
{
// Even for the DbBlogProvider, we call newBlog.CopyExistingBlogFolderToNewBlogFolder().
// The reasons are that a small number of extensions/widgets use App_Data even if
// the DbBlogProvider is being used (Newsletter widget, Logger extension, and any
// other custom components written by other people). Also, even if the
// DbBlogProvider is being used, the XmlMembershipProvider and XmlRoleProvider could
// also be used, which stores data in App_Data.
// So as a rule of thumb, whenever a new blog instance is created, we will create
// a new folder in App_Data for that new instance, and copy all the files/folders in.
bool copyResult = newBlog.CopyExistingBlogFolderToNewBlogFolder(existingBlog);
if (!copyResult)
{
Utils.Log("DbBlogProvider.SetupBlogFromExistingBlog", new Exception("Unsuccessful result from newBlog.CopyExistingBlogFolderToNewBlogFolder."));
return false;
}
using (var conn = this.CreateConnection())
{
if (conn.HasConnection)
{
//
// For SQL CE compatibility, all the "newblogid" parameters below need to have their DBType set to DBType.String.
// This is done with the CreateParameter() overload that accepts a DBType.
//
// be_BlogRollItems
using (var cmd = conn.CreateTextCommand(string.Format(
" INSERT INTO {0}BlogRollItems ( BlogId, BlogRollId, Title, Description, BlogUrl, FeedUrl, Xfn, SortIndex ) " +
" SELECT {1}newblogid, BlogRollId, Title, Description, BlogUrl, FeedUrl, Xfn, SortIndex " +
" FROM {0}BlogRollItems " +
" WHERE BlogID = {1}existingblogid ", this.tablePrefix, this.parmPrefix)))
{
cmd.Parameters.Add(conn.CreateParameter(FormatParamName("newblogid"), newBlog.Id.ToString(), System.Data.DbType.String));
cmd.Parameters.Add(conn.CreateParameter(FormatParamName("existingblogid"), existingBlog.Id.ToString()));
cmd.ExecuteNonQuery();
}
// be_Categories
using (var cmd = conn.CreateTextCommand(string.Format(
" INSERT INTO {0}Categories ( BlogID, CategoryID, CategoryName, Description, ParentID ) " +
" SELECT {1}newblogid, CategoryID, CategoryName, Description, ParentID " +
" FROM {0}Categories " +
" WHERE BlogID = {1}existingblogid ", this.tablePrefix, this.parmPrefix)))
{
cmd.Parameters.Add(conn.CreateParameter(FormatParamName("newblogid"), newBlog.Id.ToString(), System.Data.DbType.String));
cmd.Parameters.Add(conn.CreateParameter(FormatParamName("existingblogid"), existingBlog.Id.ToString()));
cmd.ExecuteNonQuery();
}
// be_DataStoreSettings
using (var cmd = conn.CreateTextCommand(string.Format(
" INSERT INTO {0}DataStoreSettings ( BlogId, ExtensionType, ExtensionId, Settings ) " +
" SELECT {1}newblogid, ExtensionType, ExtensionId, Settings " +
" FROM {0}DataStoreSettings " +
" WHERE BlogID = {1}existingblogid ", this.tablePrefix, this.parmPrefix)))
{
cmd.Parameters.Add(conn.CreateParameter(FormatParamName("newblogid"), newBlog.Id.ToString(), System.Data.DbType.String));
cmd.Parameters.Add(conn.CreateParameter(FormatParamName("existingblogid"), existingBlog.Id.ToString()));
cmd.ExecuteNonQuery();
}
// be_Pages
using (var cmd = conn.CreateTextCommand(string.Format(
" INSERT INTO {0}Pages ( BlogID, PageID, Title, Description, PageContent, Keywords, DateCreated, DateModified, IsPublished, IsFrontPage, Parent, ShowInList, Slug, IsDeleted ) " +
" SELECT {1}newblogid, PageID, Title, Description, PageContent, Keywords, DateCreated, DateModified, IsPublished, IsFrontPage, Parent, ShowInList, Slug, IsDeleted " +
" FROM {0}Pages " +
" WHERE BlogID = {1}existingblogid ", this.tablePrefix, this.parmPrefix)))
{
cmd.Parameters.Add(conn.CreateParameter(FormatParamName("newblogid"), newBlog.Id.ToString(), System.Data.DbType.String));
cmd.Parameters.Add(conn.CreateParameter(FormatParamName("existingblogid"), existingBlog.Id.ToString()));
cmd.ExecuteNonQuery();
}
// be_PingService
using (var cmd = conn.CreateTextCommand(string.Format(
" INSERT INTO {0}PingService ( BlogID, Link ) " +
" SELECT {1}newblogid, Link " +
" FROM {0}PingService " +
" WHERE BlogID = {1}existingblogid ", this.tablePrefix, this.parmPrefix)))
{
cmd.Parameters.Add(conn.CreateParameter(FormatParamName("newblogid"), newBlog.Id.ToString(), System.Data.DbType.String));
cmd.Parameters.Add(conn.CreateParameter(FormatParamName("existingblogid"), existingBlog.Id.ToString()));
cmd.ExecuteNonQuery();
}
// be_Profiles
using (var cmd = conn.CreateTextCommand(string.Format(
" INSERT INTO {0}Profiles ( BlogID, UserName, SettingName, SettingValue ) " +
" SELECT {1}newblogid, UserName, SettingName, SettingValue " +
" FROM {0}Profiles " +
" WHERE BlogID = {1}existingblogid ", this.tablePrefix, this.parmPrefix)))
{
cmd.Parameters.Add(conn.CreateParameter(FormatParamName("newblogid"), newBlog.Id.ToString(), System.Data.DbType.String));
cmd.Parameters.Add(conn.CreateParameter(FormatParamName("existingblogid"), existingBlog.Id.ToString()));
cmd.ExecuteNonQuery();
}
// be_Referrers
using (var cmd = conn.CreateTextCommand(string.Format(
" INSERT INTO {0}Referrers ( BlogId, ReferrerId, ReferralDay, ReferrerUrl, ReferralCount, Url, IsSpam ) " +
" SELECT {1}newblogid, ReferrerId, ReferralDay, ReferrerUrl, ReferralCount, Url, IsSpam " +
" FROM {0}Referrers " +
" WHERE BlogID = {1}existingblogid ", this.tablePrefix, this.parmPrefix)))
{
cmd.Parameters.Add(conn.CreateParameter(FormatParamName("newblogid"), newBlog.Id.ToString(), System.Data.DbType.String));
cmd.Parameters.Add(conn.CreateParameter(FormatParamName("existingblogid"), existingBlog.Id.ToString()));
cmd.ExecuteNonQuery();
}
// be_Rights
using (var cmd = conn.CreateTextCommand(string.Format(
" INSERT INTO {0}Rights ( BlogId, RightName ) " +
" SELECT {1}newblogid, RightName " +
" FROM {0}Rights " +
" WHERE BlogID = {1}existingblogid ", this.tablePrefix, this.parmPrefix)))
{
cmd.Parameters.Add(conn.CreateParameter(FormatParamName("newblogid"), newBlog.Id.ToString(), System.Data.DbType.String));
cmd.Parameters.Add(conn.CreateParameter(FormatParamName("existingblogid"), existingBlog.Id.ToString()));
cmd.ExecuteNonQuery();
}
// be_RightRoles
using (var cmd = conn.CreateTextCommand(string.Format(
" INSERT INTO {0}RightRoles ( BlogId, RightName, Role ) " +
" SELECT {1}newblogid, RightName, Role " +
" FROM {0}RightRoles " +
" WHERE BlogID = {1}existingblogid ", this.tablePrefix, this.parmPrefix)))
{
cmd.Parameters.Add(conn.CreateParameter(FormatParamName("newblogid"), newBlog.Id.ToString(), System.Data.DbType.String));
cmd.Parameters.Add(conn.CreateParameter(FormatParamName("existingblogid"), existingBlog.Id.ToString()));
cmd.ExecuteNonQuery();
}
// be_Settings
using (var cmd = conn.CreateTextCommand(string.Format(
" INSERT INTO {0}Settings ( BlogId, SettingName, SettingValue ) " +
" SELECT {1}newblogid, SettingName, SettingValue " +
" FROM {0}Settings " +
" WHERE BlogID = {1}existingblogid ", this.tablePrefix, this.parmPrefix)))
{
cmd.Parameters.Add(conn.CreateParameter(FormatParamName("newblogid"), newBlog.Id.ToString(), System.Data.DbType.String));
cmd.Parameters.Add(conn.CreateParameter(FormatParamName("existingblogid"), existingBlog.Id.ToString()));
cmd.ExecuteNonQuery();
}
// be_StopWords
using (var cmd = conn.CreateTextCommand(string.Format(
" INSERT INTO {0}StopWords ( BlogId, StopWord ) " +
" SELECT {1}newblogid, StopWord " +
" FROM {0}StopWords " +
" WHERE BlogID = {1}existingblogid ", this.tablePrefix, this.parmPrefix)))
{
cmd.Parameters.Add(conn.CreateParameter(FormatParamName("newblogid"), newBlog.Id.ToString(), System.Data.DbType.String));
cmd.Parameters.Add(conn.CreateParameter(FormatParamName("existingblogid"), existingBlog.Id.ToString()));
cmd.ExecuteNonQuery();
}
// be_Posts
using (var cmd = conn.CreateTextCommand(string.Format(
" INSERT INTO {0}Posts ( BlogId, PostID, Title, Description, PostContent, DateCreated, DateModified, Author, IsPublished, IsCommentEnabled, Raters, Rating, Slug, IsDeleted ) " +
" SELECT {1}newblogid, PostID, Title, Description, PostContent, DateCreated, DateModified, Author, IsPublished, IsCommentEnabled, Raters, Rating, Slug, IsDeleted " +
" FROM {0}Posts " +
" WHERE BlogID = {1}existingblogid ", this.tablePrefix, this.parmPrefix)))
{
cmd.Parameters.Add(conn.CreateParameter(FormatParamName("newblogid"), newBlog.Id.ToString(), System.Data.DbType.String));
cmd.Parameters.Add(conn.CreateParameter(FormatParamName("existingblogid"), existingBlog.Id.ToString()));
cmd.ExecuteNonQuery();
}
// be_PostCategory
using (var cmd = conn.CreateTextCommand(string.Format(
" INSERT INTO {0}PostCategory ( BlogId, PostID, CategoryID ) " +
" SELECT {1}newblogid, PostID, CategoryID " +
" FROM {0}PostCategory " +
" WHERE BlogID = {1}existingblogid ", this.tablePrefix, this.parmPrefix)))
{
cmd.Parameters.Add(conn.CreateParameter(FormatParamName("newblogid"), newBlog.Id.ToString(), System.Data.DbType.String));
cmd.Parameters.Add(conn.CreateParameter(FormatParamName("existingblogid"), existingBlog.Id.ToString()));
cmd.ExecuteNonQuery();
}
// be_PostComment
using (var cmd = conn.CreateTextCommand(string.Format(
" INSERT INTO {0}PostComment ( BlogId, PostCommentID, PostID, ParentCommentID, CommentDate, Author, Email, Website, Comment, Country, Ip, IsApproved, ModeratedBy, Avatar, IsSpam, IsDeleted ) " +
" SELECT {1}newblogid, PostCommentID, PostID, ParentCommentID, CommentDate, Author, Email, Website, Comment, Country, Ip, IsApproved, ModeratedBy, Avatar, IsSpam, IsDeleted " +
" FROM {0}PostComment " +
" WHERE BlogID = {1}existingblogid ", this.tablePrefix, this.parmPrefix)))
{
cmd.Parameters.Add(conn.CreateParameter(FormatParamName("newblogid"), newBlog.Id.ToString(), System.Data.DbType.String));
cmd.Parameters.Add(conn.CreateParameter(FormatParamName("existingblogid"), existingBlog.Id.ToString()));
cmd.ExecuteNonQuery();
}
// be_PostNotify
using (var cmd = conn.CreateTextCommand(string.Format(
" INSERT INTO {0}PostNotify ( BlogId, PostID, NotifyAddress ) " +
" SELECT {1}newblogid, PostID, NotifyAddress " +
" FROM {0}PostNotify " +
" WHERE BlogID = {1}existingblogid ", this.tablePrefix, this.parmPrefix)))
{
cmd.Parameters.Add(conn.CreateParameter(FormatParamName("newblogid"), newBlog.Id.ToString(), System.Data.DbType.String));
cmd.Parameters.Add(conn.CreateParameter(FormatParamName("existingblogid"), existingBlog.Id.ToString()));
cmd.ExecuteNonQuery();
}
// be_PostTag
using (var cmd = conn.CreateTextCommand(string.Format(
" INSERT INTO {0}PostTag ( BlogId, PostID, Tag ) " +
" SELECT {1}newblogid, PostID, Tag " +
" FROM {0}PostTag " +
" WHERE BlogID = {1}existingblogid ", this.tablePrefix, this.parmPrefix)))
{
cmd.Parameters.Add(conn.CreateParameter(FormatParamName("newblogid"), newBlog.Id.ToString(), System.Data.DbType.String));
cmd.Parameters.Add(conn.CreateParameter(FormatParamName("existingblogid"), existingBlog.Id.ToString()));
cmd.ExecuteNonQuery();
}
//////////////////////////////////////
// The DbMembershipProvider and DbRoleProvider may or may not be in use.
// Even if it's not in use, copy the rows for the Users and Roles tables.
//
// be_Users
using (var cmd = conn.CreateTextCommand(string.Format(
" INSERT INTO {0}Users ( BlogId, UserName, Password, LastLoginTime, EmailAddress ) " +
" SELECT {1}newblogid, UserName, Password, LastLoginTime, EmailAddress " +
" FROM {0}Users " +
" WHERE BlogID = {1}existingblogid ", this.tablePrefix, this.parmPrefix)))
{
cmd.Parameters.Add(conn.CreateParameter(FormatParamName("newblogid"), newBlog.Id.ToString(), System.Data.DbType.String));
cmd.Parameters.Add(conn.CreateParameter(FormatParamName("existingblogid"), existingBlog.Id.ToString()));
cmd.ExecuteNonQuery();
}
// be_Roles
using (var cmd = conn.CreateTextCommand(string.Format(
" INSERT INTO {0}Roles ( BlogId, Role ) " +
" SELECT {1}newblogid, Role " +
" FROM {0}Roles " +
" WHERE BlogID = {1}existingblogid ", this.tablePrefix, this.parmPrefix)))
{
cmd.Parameters.Add(conn.CreateParameter(FormatParamName("newblogid"), newBlog.Id.ToString(), System.Data.DbType.String));
cmd.Parameters.Add(conn.CreateParameter(FormatParamName("existingblogid"), existingBlog.Id.ToString()));
cmd.ExecuteNonQuery();
}
// be_UserRoles
using (var cmd = conn.CreateTextCommand(string.Format(
" INSERT INTO {0}UserRoles ( BlogId, UserName, Role ) " +
" SELECT {1}newblogid, UserName, Role " +
" FROM {0}UserRoles " +
" WHERE BlogID = {1}existingblogid ", this.tablePrefix, this.parmPrefix)))
{
cmd.Parameters.Add(conn.CreateParameter(FormatParamName("newblogid"), newBlog.Id.ToString(), System.Data.DbType.String));
cmd.Parameters.Add(conn.CreateParameter(FormatParamName("existingblogid"), existingBlog.Id.ToString()));
cmd.ExecuteNonQuery();
}
}
}
return true;
}