PageRenderTime 30ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 1ms

/BlogEngine/DotNetSlave.BusinessLogic/Providers/DbBlogProvider.cs

#
C# | 2857 lines | 1986 code | 388 blank | 483 comment | 172 complexity | 03be528e128817d70379092dfd1fb2e8 MD5 | raw file
Possible License(s): LGPL-2.1, Apache-2.0, BSD-3-Clause
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Collections.Specialized;
  4. using System.Configuration;
  5. using System.Configuration.Provider;
  6. using System.Data.Common;
  7. using System.IO;
  8. using System.Linq;
  9. using System.Xml.Serialization;
  10. using System.Transactions;
  11. using BlogEngine.Core.DataStore;
  12. using BlogEngine.Core.Packaging;
  13. namespace BlogEngine.Core.Providers
  14. {
  15. /// <summary>
  16. /// Generic Database BlogProvider
  17. /// </summary>
  18. public partial class DbBlogProvider : BlogProvider
  19. {
  20. #region Constants and Fields
  21. /// <summary>
  22. /// The conn string name.
  23. /// </summary>
  24. private string connStringName;
  25. /// <summary>
  26. /// The parm prefix.
  27. /// </summary>
  28. private string parmPrefix;
  29. /// <summary>
  30. /// The table prefix.
  31. /// </summary>
  32. private string tablePrefix;
  33. #endregion
  34. #region Public Methods
  35. /// <summary>
  36. /// Deletes a BlogRoll from the database
  37. /// </summary>
  38. /// <param name="blogRollItem">
  39. /// The blog Roll Item.
  40. /// </param>
  41. public override void DeleteBlogRollItem(BlogRollItem blogRollItem)
  42. {
  43. var blogRolls = BlogRollItem.BlogRolls;
  44. blogRolls.Remove(blogRollItem);
  45. blogRolls.Add(blogRollItem);
  46. using (var conn = this.CreateConnection())
  47. {
  48. if (conn.HasConnection)
  49. {
  50. var sqlQuery = string.Format("DELETE FROM {0}BlogRollItems WHERE BlogId = {1}BlogId AND BlogRollId = {1}BlogRollId", this.tablePrefix, this.parmPrefix);
  51. using (var cmd = conn.CreateTextCommand(sqlQuery))
  52. {
  53. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("BlogId"), Blog.CurrentInstance.Id.ToString()));
  54. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("BlogRollId"), blogRollItem.Id.ToString()));
  55. cmd.ExecuteNonQuery();
  56. }
  57. }
  58. }
  59. }
  60. /// <summary>
  61. /// Deletes the blog's storage container.
  62. /// </summary>
  63. /// <param name="blog">
  64. /// The blog.
  65. /// </param>
  66. public override bool DeleteBlogStorageContainer(Blog blog)
  67. {
  68. // First delete the blog folder. Even the DB provider uses
  69. // the folder. This is rare and is usually by widgets/extensions.
  70. if (!blog.DeleteBlogFolder())
  71. {
  72. return false;
  73. }
  74. // Delete data from all tables except for be_Blogs. The blog
  75. // data from be_Blogs will be deleted in DeleteBlog().
  76. using (var conn = this.CreateConnection())
  77. {
  78. if (conn.HasConnection)
  79. {
  80. // Note, the order here is important, especially for the DBs where
  81. // foreign key constraints are setup (SQL Server is one). The data
  82. // in the referencing tables needs to be deleted first.
  83. var sqlQuery = string.Format("DELETE FROM {0}PostTag WHERE BlogId = {1}BlogId", this.tablePrefix, this.parmPrefix);
  84. using (var cmd = conn.CreateTextCommand(sqlQuery))
  85. {
  86. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("BlogId"), blog.Id.ToString()));
  87. cmd.ExecuteNonQuery();
  88. }
  89. sqlQuery = string.Format("DELETE FROM {0}PostNotify WHERE BlogId = {1}BlogId", this.tablePrefix, this.parmPrefix);
  90. using (var cmd = conn.CreateTextCommand(sqlQuery))
  91. {
  92. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("BlogId"), blog.Id.ToString()));
  93. cmd.ExecuteNonQuery();
  94. }
  95. sqlQuery = string.Format("DELETE FROM {0}PostComment WHERE BlogId = {1}BlogId", this.tablePrefix, this.parmPrefix);
  96. using (var cmd = conn.CreateTextCommand(sqlQuery))
  97. {
  98. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("BlogId"), blog.Id.ToString()));
  99. cmd.ExecuteNonQuery();
  100. }
  101. sqlQuery = string.Format("DELETE FROM {0}PostCategory WHERE BlogId = {1}BlogId", this.tablePrefix, this.parmPrefix);
  102. using (var cmd = conn.CreateTextCommand(sqlQuery))
  103. {
  104. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("BlogId"), blog.Id.ToString()));
  105. cmd.ExecuteNonQuery();
  106. }
  107. sqlQuery = string.Format("DELETE FROM {0}Posts WHERE BlogId = {1}BlogId", this.tablePrefix, this.parmPrefix);
  108. using (var cmd = conn.CreateTextCommand(sqlQuery))
  109. {
  110. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("BlogId"), blog.Id.ToString()));
  111. cmd.ExecuteNonQuery();
  112. }
  113. sqlQuery = string.Format("DELETE FROM {0}RightRoles WHERE BlogId = {1}BlogId", this.tablePrefix, this.parmPrefix);
  114. using (var cmd = conn.CreateTextCommand(sqlQuery))
  115. {
  116. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("BlogId"), blog.Id.ToString()));
  117. cmd.ExecuteNonQuery();
  118. }
  119. sqlQuery = string.Format("DELETE FROM {0}Profiles WHERE BlogId = {1}BlogId", this.tablePrefix, this.parmPrefix);
  120. using (var cmd = conn.CreateTextCommand(sqlQuery))
  121. {
  122. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("BlogId"), blog.Id.ToString()));
  123. cmd.ExecuteNonQuery();
  124. }
  125. sqlQuery = string.Format("DELETE FROM {0}UserRoles WHERE BlogId = {1}BlogId", this.tablePrefix, this.parmPrefix);
  126. using (var cmd = conn.CreateTextCommand(sqlQuery))
  127. {
  128. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("BlogId"), blog.Id.ToString()));
  129. cmd.ExecuteNonQuery();
  130. }
  131. sqlQuery = string.Format("DELETE FROM {0}Roles WHERE BlogId = {1}BlogId", this.tablePrefix, this.parmPrefix);
  132. using (var cmd = conn.CreateTextCommand(sqlQuery))
  133. {
  134. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("BlogId"), blog.Id.ToString()));
  135. cmd.ExecuteNonQuery();
  136. }
  137. sqlQuery = string.Format("DELETE FROM {0}Rights WHERE BlogId = {1}BlogId", this.tablePrefix, this.parmPrefix);
  138. using (var cmd = conn.CreateTextCommand(sqlQuery))
  139. {
  140. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("BlogId"), blog.Id.ToString()));
  141. cmd.ExecuteNonQuery();
  142. }
  143. sqlQuery = string.Format("DELETE FROM {0}Users WHERE BlogId = {1}BlogId", this.tablePrefix, this.parmPrefix);
  144. using (var cmd = conn.CreateTextCommand(sqlQuery))
  145. {
  146. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("BlogId"), blog.Id.ToString()));
  147. cmd.ExecuteNonQuery();
  148. }
  149. sqlQuery = string.Format("DELETE FROM {0}Pages WHERE BlogId = {1}BlogId", this.tablePrefix, this.parmPrefix);
  150. using (var cmd = conn.CreateTextCommand(sqlQuery))
  151. {
  152. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("BlogId"), blog.Id.ToString()));
  153. cmd.ExecuteNonQuery();
  154. }
  155. sqlQuery = string.Format("DELETE FROM {0}StopWords WHERE BlogId = {1}BlogId", this.tablePrefix, this.parmPrefix);
  156. using (var cmd = conn.CreateTextCommand(sqlQuery))
  157. {
  158. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("BlogId"), blog.Id.ToString()));
  159. cmd.ExecuteNonQuery();
  160. }
  161. sqlQuery = string.Format("DELETE FROM {0}Settings WHERE BlogId = {1}BlogId", this.tablePrefix, this.parmPrefix);
  162. using (var cmd = conn.CreateTextCommand(sqlQuery))
  163. {
  164. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("BlogId"), blog.Id.ToString()));
  165. cmd.ExecuteNonQuery();
  166. }
  167. sqlQuery = string.Format("DELETE FROM {0}Referrers WHERE BlogId = {1}BlogId", this.tablePrefix, this.parmPrefix);
  168. using (var cmd = conn.CreateTextCommand(sqlQuery))
  169. {
  170. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("BlogId"), blog.Id.ToString()));
  171. cmd.ExecuteNonQuery();
  172. }
  173. sqlQuery = string.Format("DELETE FROM {0}PingService WHERE BlogId = {1}BlogId", this.tablePrefix, this.parmPrefix);
  174. using (var cmd = conn.CreateTextCommand(sqlQuery))
  175. {
  176. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("BlogId"), blog.Id.ToString()));
  177. cmd.ExecuteNonQuery();
  178. }
  179. sqlQuery = string.Format("DELETE FROM {0}DataStoreSettings WHERE BlogId = {1}BlogId", this.tablePrefix, this.parmPrefix);
  180. using (var cmd = conn.CreateTextCommand(sqlQuery))
  181. {
  182. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("BlogId"), blog.Id.ToString()));
  183. cmd.ExecuteNonQuery();
  184. }
  185. sqlQuery = string.Format("DELETE FROM {0}BlogRollItems WHERE BlogId = {1}BlogId", this.tablePrefix, this.parmPrefix);
  186. using (var cmd = conn.CreateTextCommand(sqlQuery))
  187. {
  188. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("BlogId"), blog.Id.ToString()));
  189. cmd.ExecuteNonQuery();
  190. }
  191. sqlQuery = string.Format("DELETE FROM {0}Categories WHERE BlogId = {1}BlogId", this.tablePrefix, this.parmPrefix);
  192. using (var cmd = conn.CreateTextCommand(sqlQuery))
  193. {
  194. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("BlogId"), blog.Id.ToString()));
  195. cmd.ExecuteNonQuery();
  196. }
  197. }
  198. }
  199. return true;
  200. }
  201. /// <summary>
  202. /// Deletes a Blog from the database
  203. /// </summary>
  204. /// <param name="blog">
  205. /// The blog.
  206. /// </param>
  207. public override void DeleteBlog(Blog blog)
  208. {
  209. // Only deleting data from be_Blogs. Data from the other tables
  210. // will be deleted in DeleteBlogStorageContainer().
  211. using (TransactionScope ts = new TransactionScope())
  212. {
  213. using (var conn = this.CreateConnection())
  214. {
  215. if (conn.HasConnection)
  216. {
  217. var sqlQuery = string.Format("DELETE FROM {0}Blogs WHERE BlogId = {1}BlogId", this.tablePrefix, this.parmPrefix);
  218. using (var cmd = conn.CreateTextCommand(sqlQuery))
  219. {
  220. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("BlogId"), blog.Id.ToString()));
  221. cmd.ExecuteNonQuery();
  222. }
  223. }
  224. }
  225. ts.Complete();
  226. }
  227. }
  228. /// <summary>
  229. /// Deletes a category from the database
  230. /// </summary>
  231. /// <param name="category">
  232. /// category to be removed
  233. /// </param>
  234. public override void DeleteCategory(Category category)
  235. {
  236. var categories = Category.Categories;
  237. categories.Remove(category);
  238. using (var conn = this.CreateConnection())
  239. {
  240. if (conn.HasConnection)
  241. {
  242. var sqlQuery = string.Format("DELETE FROM {0}PostCategory WHERE BlogID = {1}blogid AND CategoryID = {1}catid", this.tablePrefix, this.parmPrefix);
  243. using (var cmd = conn.CreateTextCommand(sqlQuery))
  244. {
  245. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  246. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("catid"), category.Id.ToString()));
  247. cmd.ExecuteNonQuery();
  248. }
  249. sqlQuery = string.Format("DELETE FROM {0}Categories WHERE BlogID = {1}blogid AND CategoryID = {1}catid", this.tablePrefix, this.parmPrefix);
  250. using (var cmd = conn.CreateTextCommand(sqlQuery))
  251. {
  252. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  253. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("catid"), category.Id.ToString()));
  254. cmd.ExecuteNonQuery();
  255. }
  256. }
  257. }
  258. }
  259. /// <summary>
  260. /// Deletes a page from the database
  261. /// </summary>
  262. /// <param name="page">
  263. /// page to be deleted
  264. /// </param>
  265. public override void DeletePage(Page page)
  266. {
  267. using (var conn = this.CreateConnection())
  268. {
  269. if (conn.HasConnection)
  270. {
  271. using (var cmd = conn.CreateTextCommand(string.Format("DELETE FROM {0}Pages WHERE BlogID = {1}blogid AND PageID = {1}id", this.tablePrefix, this.parmPrefix)))
  272. {
  273. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  274. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("id"), page.Id.ToString()));
  275. cmd.ExecuteNonQuery();
  276. }
  277. }
  278. }
  279. }
  280. /// <summary>
  281. /// Deletes a post in the database
  282. /// </summary>
  283. /// <param name="post">
  284. /// post to delete
  285. /// </param>
  286. public override void DeletePost(Post post)
  287. {
  288. using (var conn = this.CreateConnection())
  289. {
  290. if (conn.HasConnection)
  291. {
  292. var sqlQuery = string.Format("DELETE FROM {0}PostTag WHERE BlogID = {1}blogid AND PostID = {1}id", this.tablePrefix, this.parmPrefix);
  293. using (var cmd = conn.CreateTextCommand(sqlQuery))
  294. {
  295. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  296. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("id"), post.Id.ToString()));
  297. cmd.ExecuteNonQuery();
  298. }
  299. sqlQuery = string.Format("DELETE FROM {0}PostCategory WHERE BlogID = {1}blogid AND PostID = {1}id", this.tablePrefix, this.parmPrefix);
  300. using (var cmd = conn.CreateTextCommand(sqlQuery))
  301. {
  302. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  303. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("id"), post.Id.ToString()));
  304. cmd.ExecuteNonQuery();
  305. }
  306. sqlQuery = string.Format("DELETE FROM {0}PostNotify WHERE BlogID = {1}blogid AND PostID = {1}id", this.tablePrefix, this.parmPrefix);
  307. using (var cmd = conn.CreateTextCommand(sqlQuery))
  308. {
  309. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  310. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("id"), post.Id.ToString()));
  311. cmd.ExecuteNonQuery();
  312. }
  313. sqlQuery = string.Format("DELETE FROM {0}PostComment WHERE BlogID = {1}blogid AND PostID = {1}id", this.tablePrefix, this.parmPrefix);
  314. using (var cmd = conn.CreateTextCommand(sqlQuery))
  315. {
  316. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  317. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("id"), post.Id.ToString()));
  318. cmd.ExecuteNonQuery();
  319. }
  320. sqlQuery = string.Format("DELETE FROM {0}Posts WHERE BlogID = @blogid AND PostID = {1}id", this.tablePrefix, this.parmPrefix);
  321. using (var cmd = conn.CreateTextCommand(sqlQuery))
  322. {
  323. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  324. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("id"), post.Id.ToString()));
  325. cmd.ExecuteNonQuery();
  326. }
  327. }
  328. }
  329. }
  330. /// <summary>
  331. /// Remove AuthorProfile from database
  332. /// </summary>
  333. /// <param name="profile">An AuthorProfile.</param>
  334. public override void DeleteProfile(AuthorProfile profile)
  335. {
  336. using (var conn = this.CreateConnection())
  337. {
  338. if (conn.HasConnection)
  339. {
  340. using (var cmd = conn.CreateTextCommand(string.Format("DELETE FROM {0}Profiles WHERE BlogID = {1}blogid AND UserName = {1}name", this.tablePrefix, this.parmPrefix)))
  341. {
  342. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  343. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("name"), profile.Id));
  344. cmd.ExecuteNonQuery();
  345. }
  346. }
  347. }
  348. }
  349. /// <summary>
  350. /// Gets all BlogRolls in database
  351. /// </summary>
  352. /// <returns>
  353. /// List of BlogRolls
  354. /// </returns>
  355. public override List<BlogRollItem> FillBlogRoll()
  356. {
  357. var blogRoll = new List<BlogRollItem>();
  358. using (var conn = this.CreateConnection())
  359. {
  360. if (conn.HasConnection)
  361. {
  362. using (var cmd = conn.CreateTextCommand(string.Format("SELECT BlogRollId, Title, Description, BlogUrl, FeedUrl, Xfn, SortIndex FROM {0}BlogRollItems WHERE BlogId = {1}blogid ", this.tablePrefix, this.parmPrefix)))
  363. {
  364. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  365. using (var rdr = cmd.ExecuteReader())
  366. {
  367. while (rdr.Read())
  368. {
  369. var br = new BlogRollItem
  370. {
  371. Id = rdr.GetGuid(0),
  372. Title = rdr.GetString(1),
  373. Description = rdr.IsDBNull(2) ? string.Empty : rdr.GetString(2),
  374. BlogUrl = rdr.IsDBNull(3) ? null : new Uri(rdr.GetString(3)),
  375. FeedUrl = rdr.IsDBNull(4) ? null : new Uri(rdr.GetString(4)),
  376. Xfn = rdr.IsDBNull(5) ? string.Empty : rdr.GetString(5),
  377. SortIndex = rdr.GetInt32(6)
  378. };
  379. blogRoll.Add(br);
  380. br.MarkOld();
  381. }
  382. }
  383. }
  384. }
  385. }
  386. return blogRoll;
  387. }
  388. /// <summary>
  389. /// Gets all Blogs in database
  390. /// </summary>
  391. /// <returns>
  392. /// List of Blogs
  393. /// </returns>
  394. public override List<Blog> FillBlogs()
  395. {
  396. var blogs = new List<Blog>();
  397. using (var conn = this.CreateConnection())
  398. {
  399. if (conn.HasConnection)
  400. {
  401. using (var cmd = conn.CreateTextCommand(string.Format("SELECT BlogId, BlogName, Hostname, IsAnyTextBeforeHostnameAccepted, StorageContainerName, VirtualPath, IsPrimary, IsActive FROM {0}Blogs ", this.tablePrefix)))
  402. {
  403. using (var rdr = cmd.ExecuteReader())
  404. {
  405. while (rdr.Read())
  406. {
  407. var b = new Blog
  408. {
  409. Id = rdr.GetGuid(0),
  410. Name = rdr.GetString(1),
  411. Hostname = rdr.GetString(2),
  412. IsAnyTextBeforeHostnameAccepted = rdr.GetBoolean(3),
  413. StorageContainerName = rdr.GetString(4),
  414. VirtualPath = rdr.GetString(5),
  415. IsPrimary = rdr.GetBoolean(6),
  416. IsActive = rdr.GetBoolean(7)
  417. };
  418. blogs.Add(b);
  419. b.MarkOld();
  420. }
  421. }
  422. }
  423. }
  424. }
  425. return blogs;
  426. }
  427. /// <summary>
  428. /// Gets all categories in database
  429. /// </summary>
  430. /// <returns>
  431. /// List of categories
  432. /// </returns>
  433. public override List<Category> FillCategories()
  434. {
  435. var categories = new List<Category>();
  436. using (var conn = this.CreateConnection())
  437. {
  438. if (conn.HasConnection)
  439. {
  440. using (var cmd = conn.CreateTextCommand(string.Format("SELECT CategoryID, CategoryName, description, ParentID FROM {0}Categories WHERE BlogId = {1}blogid ", this.tablePrefix, this.parmPrefix)))
  441. {
  442. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  443. using (var rdr = cmd.ExecuteReader())
  444. {
  445. while (rdr.Read())
  446. {
  447. var cat = new Category
  448. {
  449. Title = rdr.GetString(1),
  450. Description = rdr.IsDBNull(2) ? string.Empty : rdr.GetString(2),
  451. Parent = rdr.IsDBNull(3) ? (Guid?)null : new Guid(rdr.GetGuid(3).ToString()),
  452. Id = new Guid(rdr.GetGuid(0).ToString())
  453. };
  454. categories.Add(cat);
  455. cat.MarkOld();
  456. }
  457. }
  458. }
  459. }
  460. }
  461. return categories;
  462. }
  463. /// <summary>
  464. /// Gets all pages in database
  465. /// </summary>
  466. /// <returns>
  467. /// List of pages
  468. /// </returns>
  469. public override List<Page> FillPages()
  470. {
  471. var pageIDs = new List<string>();
  472. using (var conn = this.CreateConnection())
  473. {
  474. if (conn.HasConnection)
  475. {
  476. using (var cmd = conn.CreateTextCommand(string.Format("SELECT PageID FROM {0}Pages WHERE BlogID = {1}blogid ", this.tablePrefix, this.parmPrefix)))
  477. {
  478. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  479. using (var rdr = cmd.ExecuteReader())
  480. {
  481. while (rdr.Read())
  482. {
  483. pageIDs.Add(rdr.GetGuid(0).ToString());
  484. }
  485. }
  486. }
  487. }
  488. }
  489. return pageIDs.Select(id => Page.Load(new Guid(id))).ToList();
  490. }
  491. /// <summary>
  492. /// Gets all post from the database
  493. /// </summary>
  494. /// <returns>
  495. /// List of posts
  496. /// </returns>
  497. public override List<Post> FillPosts()
  498. {
  499. var postIDs = new List<string>();
  500. using (var conn = this.CreateConnection())
  501. {
  502. if (conn.HasConnection)
  503. {
  504. using (var cmd = conn.CreateTextCommand(string.Format("SELECT PostID FROM {0}Posts WHERE BlogID = {1}blogid ", this.tablePrefix, this.parmPrefix)))
  505. {
  506. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  507. using (var rdr = cmd.ExecuteReader())
  508. {
  509. while (rdr.Read())
  510. {
  511. postIDs.Add(rdr.GetGuid(0).ToString());
  512. }
  513. }
  514. }
  515. }
  516. }
  517. var posts = postIDs.Select(id => Post.Load(new Guid(id))).ToList();
  518. posts.Sort();
  519. return posts;
  520. }
  521. /// <summary>
  522. /// Return collection for AuthorProfiles from database
  523. /// </summary>
  524. /// <returns>
  525. /// List of AuthorProfile
  526. /// </returns>
  527. public override List<AuthorProfile> FillProfiles()
  528. {
  529. var profileNames = new List<string>();
  530. using (var conn = this.CreateConnection())
  531. {
  532. if (conn.HasConnection)
  533. {
  534. using (var cmd = conn.CreateTextCommand(string.Format("SELECT UserName FROM {0}Profiles WHERE BlogID = {1}blogid GROUP BY UserName", this.tablePrefix, this.parmPrefix)))
  535. {
  536. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  537. using (var rdr = cmd.ExecuteReader())
  538. {
  539. while (rdr.Read())
  540. {
  541. profileNames.Add(rdr.GetString(0));
  542. }
  543. }
  544. }
  545. }
  546. }
  547. return profileNames.Select(BusinessBase<AuthorProfile, string>.Load).ToList();
  548. }
  549. /// <summary>
  550. /// Gets all Referrers from the database.
  551. /// </summary>
  552. /// <returns>
  553. /// List of Referrers.
  554. /// </returns>
  555. public override List<Referrer> FillReferrers()
  556. {
  557. this.DeleteOldReferrers();
  558. var referrers = new List<Referrer>();
  559. using (var conn = this.CreateConnection())
  560. {
  561. if (conn.HasConnection)
  562. {
  563. using (var cmd = conn.CreateTextCommand(string.Format("SELECT ReferrerId, ReferralDay, ReferrerUrl, ReferralCount, Url, IsSpam FROM {0}Referrers WHERE BlogId = {1}blogid ", this.tablePrefix, this.parmPrefix)))
  564. {
  565. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  566. using (var rdr = cmd.ExecuteReader())
  567. {
  568. while (rdr.Read())
  569. {
  570. var refer = new Referrer
  571. {
  572. Id = rdr.GetGuid(0),
  573. Day = rdr.GetDateTime(1),
  574. ReferrerUrl = new Uri(rdr.GetString(2)),
  575. Count = rdr.GetInt32(3),
  576. Url = rdr.IsDBNull(4) ? null : new Uri(rdr.GetString(4)),
  577. PossibleSpam = rdr.IsDBNull(5) ? false : rdr.GetBoolean(5)
  578. };
  579. referrers.Add(refer);
  580. refer.MarkOld();
  581. }
  582. }
  583. }
  584. }
  585. }
  586. return referrers;
  587. }
  588. public override IDictionary<string, IEnumerable<string>> FillRights()
  589. {
  590. var rightsWithRoles = new Dictionary<string, IEnumerable<string>>();
  591. using (var conn = this.CreateConnection())
  592. {
  593. if (conn.HasConnection)
  594. {
  595. var sqlQuery = string.Format("SELECT RightName FROM {0}Rights WHERE BlogId = {1}blogid ", this.tablePrefix, this.parmPrefix);
  596. using (var cmd = conn.CreateTextCommand(sqlQuery))
  597. {
  598. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  599. using (var rdr = cmd.ExecuteReader())
  600. {
  601. while (rdr.Read())
  602. {
  603. rightsWithRoles.Add(rdr.GetString(0), new HashSet<string>(StringComparer.OrdinalIgnoreCase));
  604. }
  605. }
  606. // Get Right Roles.
  607. cmd.CommandText = string.Format("SELECT RightName, Role FROM {0}RightRoles WHERE BlogId = {1}blogid ", this.tablePrefix, this.parmPrefix);
  608. // don't need to add "blogid" parameter again since the same cmd is being used.
  609. using (var rdr = cmd.ExecuteReader())
  610. {
  611. while (rdr.Read())
  612. {
  613. string rightName = rdr.GetString(0);
  614. string roleName = rdr.GetString(1);
  615. if (rightsWithRoles.ContainsKey(rightName))
  616. {
  617. var roles = (HashSet<string>)rightsWithRoles[rightName];
  618. if (!roles.Contains(roleName))
  619. {
  620. roles.Add(roleName);
  621. }
  622. }
  623. }
  624. }
  625. }
  626. }
  627. }
  628. return rightsWithRoles;
  629. }
  630. /// <summary>
  631. /// Initializes the provider
  632. /// </summary>
  633. /// <param name="name">
  634. /// Configuration name
  635. /// </param>
  636. /// <param name="config">
  637. /// Configuration settings
  638. /// </param>
  639. public override void Initialize(string name, NameValueCollection config)
  640. {
  641. if (config == null)
  642. {
  643. throw new ArgumentNullException("config");
  644. }
  645. if (String.IsNullOrEmpty(name))
  646. {
  647. name = "DbBlogProvider";
  648. }
  649. if (String.IsNullOrEmpty(config["description"]))
  650. {
  651. config.Remove("description");
  652. config.Add("description", "Generic Database Blog Provider");
  653. }
  654. base.Initialize(name, config);
  655. if (config["connectionStringName"] == null)
  656. {
  657. // default to BlogEngine
  658. config["connectionStringName"] = "BlogEngine";
  659. }
  660. this.connStringName = config["connectionStringName"];
  661. config.Remove("connectionStringName");
  662. if (config["tablePrefix"] == null)
  663. {
  664. // default
  665. config["tablePrefix"] = "be_";
  666. }
  667. this.tablePrefix = config["tablePrefix"];
  668. config.Remove("tablePrefix");
  669. if (config["parmPrefix"] == null)
  670. {
  671. // default
  672. config["parmPrefix"] = "@";
  673. }
  674. this.parmPrefix = config["parmPrefix"];
  675. config.Remove("parmPrefix");
  676. // Throw an exception if unrecognized attributes remain
  677. if (config.Count > 0)
  678. {
  679. var attr = config.GetKey(0);
  680. if (!String.IsNullOrEmpty(attr))
  681. {
  682. throw new ProviderException(string.Format("Unrecognized attribute: {0}", attr));
  683. }
  684. }
  685. }
  686. /// <summary>
  687. /// Adds a new BlogRoll to the database.
  688. /// </summary>
  689. /// <param name="blogRollItem">
  690. /// The blog Roll Item.
  691. /// </param>
  692. public override void InsertBlogRollItem(BlogRollItem blogRollItem)
  693. {
  694. var blogRolls = BlogRollItem.BlogRolls;
  695. blogRolls.Add(blogRollItem);
  696. using (var conn = this.CreateConnection())
  697. {
  698. if (conn.HasConnection)
  699. {
  700. var sqlQuery = string.Format("INSERT INTO {0}BlogRollItems (BlogId, BlogRollId, Title, Description, BlogUrl, FeedUrl, Xfn, SortIndex) VALUES ({1}BlogId, {1}BlogRollId, {1}Title, {1}Description, {1}BlogUrl, {1}FeedUrl, {1}Xfn, {1}SortIndex)", this.tablePrefix, this.parmPrefix);
  701. using (var cmd = conn.CreateTextCommand(sqlQuery))
  702. {
  703. this.AddBlogRollParametersToCommand(blogRollItem, conn, cmd);
  704. cmd.ExecuteNonQuery();
  705. }
  706. }
  707. }
  708. }
  709. /// <summary>
  710. /// Adds a new blog to the database.
  711. /// </summary>
  712. /// <param name="blog">
  713. /// The blog.
  714. /// </param>
  715. public override void InsertBlog(Blog blog)
  716. {
  717. using (var conn = this.CreateConnection())
  718. {
  719. if (conn.HasConnection)
  720. {
  721. var sqlQuery = string.Format("INSERT INTO {0}Blogs (BlogId, BlogName, Hostname, IsAnyTextBeforeHostnameAccepted, StorageContainerName, VirtualPath, IsPrimary, IsActive) VALUES ({1}BlogId, {1}BlogName, {1}Hostname, {1}IsAnyTextBeforeHostnameAccepted, {1}StorageContainerName, {1}VirtualPath, {1}IsPrimary, {1}IsActive)", this.tablePrefix, this.parmPrefix);
  722. using (var cmd = conn.CreateTextCommand(sqlQuery))
  723. {
  724. this.AddBlogParametersToCommand(blog, conn, cmd);
  725. cmd.ExecuteNonQuery();
  726. }
  727. }
  728. }
  729. }
  730. /// <summary>
  731. /// Adds a new category to the database
  732. /// </summary>
  733. /// <param name="category">
  734. /// category to add
  735. /// </param>
  736. public override void InsertCategory(Category category)
  737. {
  738. var categories = Category.Categories;
  739. categories.Add(category);
  740. categories.Sort();
  741. using (var conn = this.CreateConnection())
  742. {
  743. if (conn.HasConnection)
  744. {
  745. var sqlQuery = string.Format("INSERT INTO {0}Categories (BlogID, CategoryID, CategoryName, description, ParentID) VALUES ({1}blogid, {1}catid, {1}catname, {1}description, {1}parentid)", this.tablePrefix, this.parmPrefix);
  746. using (var cmd = conn.CreateTextCommand(sqlQuery))
  747. {
  748. var parms = cmd.Parameters;
  749. parms.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  750. parms.Add(conn.CreateParameter(FormatParamName("catid"), category.Id.ToString()));
  751. parms.Add(conn.CreateParameter(FormatParamName("catname"), category.Title));
  752. parms.Add(conn.CreateParameter(FormatParamName("description"), category.Description));
  753. parms.Add(conn.CreateParameter(FormatParamName("parentid"), (category.Parent == null ? (object)DBNull.Value : category.Parent.ToString())));
  754. cmd.ExecuteNonQuery();
  755. }
  756. }
  757. }
  758. }
  759. /// <summary>
  760. /// Adds a page to the database
  761. /// </summary>
  762. /// <param name="page">
  763. /// page to be added
  764. /// </param>
  765. public override void InsertPage(Page page)
  766. {
  767. using (var conn = this.CreateConnection())
  768. {
  769. if (conn.HasConnection)
  770. {
  771. var sqlQuery = string.Format("INSERT INTO {0}Pages (BlogID, PageID, Title, Description, PageContent, DateCreated, DateModified, Keywords, IsPublished, IsFrontPage, Parent, ShowInList, Slug, IsDeleted) VALUES ({1}blogid, {1}id, {1}title, {1}desc, {1}content, {1}created, {1}modified, {1}keywords, {1}ispublished, {1}isfrontpage, {1}parent, {1}showinlist, {1}slug, {1}isdeleted)", this.tablePrefix, this.parmPrefix);
  772. using (var cmd = conn.CreateTextCommand(sqlQuery))
  773. {
  774. var parms = cmd.Parameters;
  775. parms.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  776. parms.Add(conn.CreateParameter(FormatParamName("id"), page.Id.ToString()));
  777. parms.Add(conn.CreateParameter(FormatParamName("title"), page.Title));
  778. parms.Add(conn.CreateParameter(FormatParamName("desc"), page.Description));
  779. parms.Add(conn.CreateParameter(FormatParamName("content"), page.Content));
  780. parms.Add(conn.CreateParameter(FormatParamName("created"), page.DateCreated.AddHours(-BlogSettings.Instance.Timezone)));
  781. parms.Add(conn.CreateParameter(FormatParamName("modified"),
  782. (page.DateModified == new DateTime() ? DateTime.Now : page.DateModified.AddHours(-BlogSettings.Instance.Timezone))));
  783. parms.Add(conn.CreateParameter(FormatParamName("keywords"), page.Keywords));
  784. parms.Add(conn.CreateParameter(FormatParamName("ispublished"), page.IsPublished));
  785. parms.Add(conn.CreateParameter(FormatParamName("isfrontpage"), page.IsFrontPage));
  786. parms.Add(conn.CreateParameter(FormatParamName("parent"), page.Parent.ToString()));
  787. parms.Add(conn.CreateParameter(FormatParamName("showinlist"), page.ShowInList));
  788. parms.Add(conn.CreateParameter(FormatParamName("slug"), page.Slug));
  789. parms.Add(conn.CreateParameter(FormatParamName("isdeleted"), page.IsDeleted));
  790. cmd.ExecuteNonQuery();
  791. }
  792. }
  793. }
  794. }
  795. /// <summary>
  796. /// Adds a new post to database
  797. /// </summary>
  798. /// <param name="post">
  799. /// The new post.
  800. /// </param>
  801. public override void InsertPost(Post post)
  802. {
  803. using (TransactionScope ts = new TransactionScope())
  804. {
  805. using (var conn = this.CreateConnection())
  806. {
  807. if (conn.HasConnection)
  808. {
  809. var sqlQuery = string.Format("INSERT INTO {0}Posts (BlogID, PostID, Title, Description, PostContent, DateCreated, DateModified, Author, IsPublished, IsCommentEnabled, Raters, Rating, Slug, IsDeleted) VALUES ({1}blogid, {1}id, {1}title, {1}desc, {1}content, {1}created, {1}modified, {1}author, {1}published, {1}commentEnabled, {1}raters, {1}rating, {1}slug, {1}isdeleted)", this.tablePrefix, this.parmPrefix);
  810. using (var cmd = conn.CreateTextCommand(sqlQuery))
  811. {
  812. var parms = cmd.Parameters;
  813. parms.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  814. parms.Add(conn.CreateParameter(FormatParamName("id"), post.Id.ToString()));
  815. parms.Add(conn.CreateParameter(FormatParamName("title"), post.Title));
  816. parms.Add(conn.CreateParameter(FormatParamName("desc"), (post.Description ?? string.Empty)));
  817. parms.Add(conn.CreateParameter(FormatParamName("content"), post.Content));
  818. parms.Add(conn.CreateParameter(FormatParamName("created"), post.DateCreated.AddHours(-BlogSettings.Instance.Timezone)));
  819. parms.Add(conn.CreateParameter(FormatParamName("modified"), (post.DateModified == new DateTime() ? DateTime.Now : post.DateModified.AddHours(-BlogSettings.Instance.Timezone))));
  820. parms.Add(conn.CreateParameter(FormatParamName("author"), (post.Author ?? string.Empty)));
  821. parms.Add(conn.CreateParameter(FormatParamName("published"), post.IsPublished));
  822. parms.Add(conn.CreateParameter(FormatParamName("commentEnabled"), post.HasCommentsEnabled));
  823. parms.Add(conn.CreateParameter(FormatParamName("raters"), post.Raters));
  824. parms.Add(conn.CreateParameter(FormatParamName("rating"), post.Rating));
  825. parms.Add(conn.CreateParameter(FormatParamName("slug"), (post.Slug ?? string.Empty)));
  826. parms.Add(conn.CreateParameter(FormatParamName("isdeleted"), post.IsDeleted));
  827. cmd.ExecuteNonQuery();
  828. }
  829. // Tags
  830. this.UpdateTags(post, conn);
  831. // Categories
  832. this.UpdateCategories(post, conn);
  833. // Comments
  834. this.UpdateComments(post, conn);
  835. // Email Notification
  836. this.UpdateNotify(post, conn);
  837. }
  838. }
  839. ts.Complete();
  840. }
  841. }
  842. /// <summary>
  843. /// Adds AuthorProfile to database
  844. /// </summary>
  845. /// <param name="profile">An AuthorProfile.</param>
  846. public override void InsertProfile(AuthorProfile profile)
  847. {
  848. this.UpdateProfile(profile);
  849. }
  850. /// <summary>
  851. /// Adds a new Referrer to the database.
  852. /// </summary>
  853. /// <param name="referrer">
  854. /// Referrer to add.
  855. /// </param>
  856. public override void InsertReferrer(Referrer referrer)
  857. {
  858. var referrers = Referrer.Referrers;
  859. referrers.Add(referrer);
  860. using (var conn = this.CreateConnection())
  861. {
  862. if (conn.HasConnection)
  863. {
  864. var sqlQuery = string.Format("INSERT INTO {0}Referrers (BlogId, ReferrerId, ReferralDay, ReferrerUrl, ReferralCount, Url, IsSpam) VALUES ({1}BlogId, {1}ReferrerId, {1}ReferralDay, {1}ReferrerUrl, {1}ReferralCount, {1}Url, {1}IsSpam)", this.tablePrefix, this.parmPrefix);
  865. using (var cmd = conn.CreateTextCommand(sqlQuery))
  866. {
  867. this.AddReferrersParametersToCommand(referrer, conn, cmd);
  868. cmd.ExecuteNonQuery();
  869. }
  870. }
  871. }
  872. }
  873. /// <summary>
  874. /// Load user data from DataStore
  875. /// </summary>
  876. /// <param name="extensionType">
  877. /// type of info
  878. /// </param>
  879. /// <param name="extensionId">
  880. /// id of info
  881. /// </param>
  882. /// <returns>
  883. /// stream of detail data
  884. /// </returns>
  885. public override object LoadFromDataStore(ExtensionType extensionType, string extensionId)
  886. {
  887. // MemoryStream stream;
  888. object o = null;
  889. using (var conn = this.CreateConnection())
  890. {
  891. if (conn.HasConnection)
  892. {
  893. var sqlQuery = string.Format("SELECT Settings FROM {0}DataStoreSettings WHERE BlogId = {1}blogid AND ExtensionType = {1}etype AND ExtensionId = {1}eid", this.tablePrefix, this.parmPrefix);
  894. using (var cmd = conn.CreateTextCommand(sqlQuery))
  895. {
  896. var parms = cmd.Parameters;
  897. parms.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  898. parms.Add(conn.CreateParameter(FormatParamName("etype"), extensionType.GetHashCode()));
  899. parms.Add(conn.CreateParameter(FormatParamName("eid"), extensionId));
  900. o = cmd.ExecuteScalar();
  901. }
  902. }
  903. }
  904. return o;
  905. }
  906. /// <summary>
  907. /// Gets the PingServices from the database
  908. /// </summary>
  909. /// <returns>
  910. /// collection of PingServices
  911. /// </returns>
  912. public override StringCollection LoadPingServices()
  913. {
  914. var col = new StringCollection();
  915. using (var conn = this.CreateConnection())
  916. {
  917. if (conn.HasConnection)
  918. {
  919. using (var cmd = conn.CreateTextCommand(string.Format("SELECT Link FROM {0}PingService WHERE BlogID = {1}blogid ", this.tablePrefix, this.parmPrefix)))
  920. {
  921. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  922. using (var rdr = cmd.ExecuteReader())
  923. {
  924. while (rdr.Read())
  925. {
  926. if (!col.Contains(rdr.GetString(0)))
  927. {
  928. col.Add(rdr.GetString(0));
  929. }
  930. }
  931. }
  932. }
  933. }
  934. }
  935. return col;
  936. }
  937. /// <summary>
  938. /// Gets the settings from the database
  939. /// </summary>
  940. /// <returns>
  941. /// dictionary of settings
  942. /// </returns>
  943. public override StringDictionary LoadSettings()
  944. {
  945. var dic = new StringDictionary();
  946. using (var conn = this.CreateConnection())
  947. {
  948. if (conn.HasConnection)
  949. {
  950. using (var cmd = conn.CreateTextCommand(string.Format("SELECT SettingName, SettingValue FROM {0}Settings WHERE BlogId = {1}blogid ", this.tablePrefix, this.parmPrefix)))
  951. {
  952. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  953. using (var rdr = cmd.ExecuteReader())
  954. {
  955. while (rdr.Read())
  956. {
  957. var name = rdr.GetString(0);
  958. var value = rdr.GetString(1);
  959. dic.Add(name, value);
  960. }
  961. }
  962. }
  963. }
  964. }
  965. return dic;
  966. }
  967. /// <summary>
  968. /// Get stopwords from the database
  969. /// </summary>
  970. /// <returns>
  971. /// collection of stopwords
  972. /// </returns>
  973. public override StringCollection LoadStopWords()
  974. {
  975. var col = new StringCollection();
  976. using (var conn = this.CreateConnection())
  977. {
  978. if (conn.HasConnection)
  979. {
  980. using (var cmd = conn.CreateTextCommand(string.Format("SELECT StopWord FROM {0}StopWords WHERE BlogId = {1}blogid ", this.tablePrefix, this.parmPrefix)))
  981. {
  982. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  983. using (var rdr = cmd.ExecuteReader())
  984. {
  985. while (rdr.Read())
  986. {
  987. var value = rdr.GetString(0);
  988. if (!col.Contains(value))
  989. {
  990. col.Add(value);
  991. }
  992. }
  993. }
  994. }
  995. }
  996. }
  997. return col;
  998. }
  999. /// <summary>
  1000. /// Deletes an item from the dataStore
  1001. /// </summary>
  1002. /// <param name="extensionType">
  1003. /// type of item
  1004. /// </param>
  1005. /// <param name="extensionId">
  1006. /// id of item
  1007. /// </param>
  1008. public override void RemoveFromDataStore(ExtensionType extensionType, string extensionId)
  1009. {
  1010. using (var conn = this.CreateConnection())
  1011. {
  1012. if (conn.HasConnection)
  1013. {
  1014. var sqlQuery = string.Format("DELETE FROM {0}DataStoreSettings WHERE BlogId = {1}blogId AND ExtensionType = {1}type AND ExtensionId = {1}id", this.tablePrefix, this.parmPrefix);
  1015. using (var cmd = conn.CreateTextCommand(sqlQuery))
  1016. {
  1017. var p = cmd.Parameters;
  1018. p.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  1019. p.Add(conn.CreateParameter(FormatParamName("type"), extensionType));
  1020. p.Add(conn.CreateParameter(FormatParamName("id"), extensionId));
  1021. cmd.ExecuteNonQuery();
  1022. }
  1023. }
  1024. }
  1025. }
  1026. /// <summary>
  1027. /// Saves the PingServices to the database
  1028. /// </summary>
  1029. /// <param name="services">
  1030. /// collection of PingServices
  1031. /// </param>
  1032. public override void SavePingServices(StringCollection services)
  1033. {
  1034. if (services == null)
  1035. {
  1036. throw new ArgumentNullException("services");
  1037. }
  1038. using (var conn = this.CreateConnection())
  1039. {
  1040. if (conn.HasConnection)
  1041. {
  1042. using (var cmd = conn.CreateTextCommand(string.Format("DELETE FROM {0}PingService WHERE BlogID = {1}blogid ", this.tablePrefix, this.parmPrefix)))
  1043. {
  1044. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  1045. cmd.ExecuteNonQuery();
  1046. foreach (var service in services)
  1047. {
  1048. cmd.CommandText = string.Format("INSERT INTO {0}PingService (BlogID, Link) VALUES ({1}blogid, {1}link)", this.tablePrefix, this.parmPrefix);
  1049. cmd.Parameters.Clear();
  1050. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  1051. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("link"), service));
  1052. cmd.ExecuteNonQuery();
  1053. }
  1054. }
  1055. }
  1056. }
  1057. }
  1058. public override void SaveRights(IEnumerable<Right> rights)
  1059. {
  1060. if (rights == null)
  1061. {
  1062. throw new ArgumentNullException("rights");
  1063. }
  1064. using (var conn = this.CreateConnection())
  1065. {
  1066. if (conn.HasConnection)
  1067. {
  1068. using (var cmd = conn.CreateTextCommand(string.Format("DELETE FROM {0}Rights WHERE BlogId = {1}blogid ", this.tablePrefix, this.parmPrefix)))
  1069. {
  1070. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  1071. cmd.ExecuteNonQuery();
  1072. cmd.CommandText = string.Format("DELETE FROM {0}RightRoles WHERE BlogId = {1}blogid ", this.tablePrefix, this.parmPrefix);
  1073. cmd.ExecuteNonQuery();
  1074. foreach (var right in rights)
  1075. {
  1076. cmd.CommandText = string.Format("INSERT INTO {0}Rights (BlogId, RightName) VALUES ({1}BlogId, {1}RightName)", this.tablePrefix, this.parmPrefix);
  1077. cmd.Parameters.Clear();
  1078. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("BlogId"), Blog.CurrentInstance.Id.ToString()));
  1079. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("RightName"), right.Name));
  1080. cmd.ExecuteNonQuery();
  1081. foreach (var role in right.Roles)
  1082. {
  1083. cmd.CommandText = string.Format("INSERT INTO {0}RightRoles (BlogId, RightName, Role) VALUES ({1}BlogId, {1}RightName, {1}Role)", this.tablePrefix, this.parmPrefix);
  1084. cmd.Parameters.Clear();
  1085. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("BlogId"), Blog.CurrentInstance.Id.ToString()));
  1086. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("RightName"), right.Name));
  1087. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("Role"), role));
  1088. cmd.ExecuteNonQuery();
  1089. }
  1090. }
  1091. }
  1092. }
  1093. }
  1094. }
  1095. /// <summary>
  1096. /// Saves the settings to the database
  1097. /// </summary>
  1098. /// <param name="settings">
  1099. /// dictionary of settings
  1100. /// </param>
  1101. public override void SaveSettings(StringDictionary settings)
  1102. {
  1103. if (settings == null)
  1104. {
  1105. throw new ArgumentNullException("settings");
  1106. }
  1107. using (var conn = this.CreateConnection())
  1108. {
  1109. if (conn.HasConnection)
  1110. {
  1111. using (var cmd = conn.CreateTextCommand(string.Format("DELETE FROM {0}Settings WHERE BlogId = {1}blogid", this.tablePrefix, this.parmPrefix)))
  1112. {
  1113. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  1114. cmd.ExecuteNonQuery();
  1115. foreach (string key in settings.Keys)
  1116. {
  1117. cmd.CommandText = string.Format("INSERT INTO {0}Settings (BlogId, SettingName, SettingValue) VALUES ({1}blogid, {1}name, {1}value)", this.tablePrefix, this.parmPrefix);
  1118. cmd.Parameters.Clear();
  1119. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  1120. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("name"), key));
  1121. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("value"), settings[key]));
  1122. cmd.ExecuteNonQuery();
  1123. }
  1124. }
  1125. }
  1126. }
  1127. }
  1128. /// <summary>
  1129. /// Save to DataStore
  1130. /// </summary>
  1131. /// <param name="extensionType">
  1132. /// type of info
  1133. /// </param>
  1134. /// <param name="extensionId">
  1135. /// id of info
  1136. /// </param>
  1137. /// <param name="settings">
  1138. /// data of info
  1139. /// </param>
  1140. public override void SaveToDataStore(ExtensionType extensionType, string extensionId, object settings)
  1141. {
  1142. if (settings == null)
  1143. {
  1144. throw new ArgumentNullException("settings");
  1145. }
  1146. // Save
  1147. var xs = new XmlSerializer(settings.GetType());
  1148. string objectXml;
  1149. using (var sw = new StringWriter())
  1150. {
  1151. xs.Serialize(sw, settings);
  1152. objectXml = sw.ToString();
  1153. }
  1154. using (var conn = this.CreateConnection())
  1155. {
  1156. if (conn.HasConnection)
  1157. {
  1158. var sqlQuery = string.Format("DELETE FROM {0}DataStoreSettings WHERE BlogId = {1}blogid AND ExtensionType = {1}type AND ExtensionId = {1}id; ", this.tablePrefix, this.parmPrefix);
  1159. using (var cmd = conn.CreateTextCommand(sqlQuery))
  1160. {
  1161. var p = cmd.Parameters;
  1162. p.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  1163. p.Add(conn.CreateParameter(FormatParamName("type"), extensionType.GetHashCode()));
  1164. p.Add(conn.CreateParameter(FormatParamName("id"), extensionId));
  1165. cmd.ExecuteNonQuery();
  1166. cmd.CommandText = string.Format("INSERT INTO {0}DataStoreSettings (BlogId, ExtensionType, ExtensionId, Settings) VALUES ({1}blogid, {1}type, {1}id, {1}file)", this.tablePrefix, this.parmPrefix);
  1167. p.Add(conn.CreateParameter(FormatParamName("file"), objectXml));
  1168. cmd.ExecuteNonQuery();
  1169. }
  1170. }
  1171. }
  1172. }
  1173. /// <summary>
  1174. /// Gets a BlogRoll based on a Guid.
  1175. /// </summary>
  1176. /// <param name="id">
  1177. /// The BlogRoll's Guid.
  1178. /// </param>
  1179. /// <returns>
  1180. /// A matching BlogRoll
  1181. /// </returns>
  1182. public override BlogRollItem SelectBlogRollItem(Guid id)
  1183. {
  1184. var blogRoll = BlogRollItem.BlogRolls.Find(br => br.Id == id) ?? new BlogRollItem();
  1185. blogRoll.MarkOld();
  1186. return blogRoll;
  1187. }
  1188. /// <summary>
  1189. /// Gets a Blog based on a Guid.
  1190. /// </summary>
  1191. /// <param name="id">
  1192. /// The Blog's Guid.
  1193. /// </param>
  1194. /// <returns>
  1195. /// A matching Blog
  1196. /// </returns>
  1197. public override Blog SelectBlog(Guid id)
  1198. {
  1199. var blog = Blog.Blogs.Find(b => b.Id == id) ?? new Blog();
  1200. blog.MarkOld();
  1201. return blog;
  1202. }
  1203. /// <summary>
  1204. /// Returns a category
  1205. /// </summary>
  1206. /// <param name="id">Id of category to return</param>
  1207. /// <returns>A category.</returns>
  1208. public override Category SelectCategory(Guid id)
  1209. {
  1210. var categories = Category.Categories;
  1211. var category = new Category();
  1212. foreach (var cat in categories.Where(cat => cat.Id == id))
  1213. {
  1214. category = cat;
  1215. }
  1216. category.MarkOld();
  1217. return category;
  1218. }
  1219. /// <summary>
  1220. /// Returns a page for given ID
  1221. /// </summary>
  1222. /// <param name="id">
  1223. /// ID of page to return
  1224. /// </param>
  1225. /// <returns>
  1226. /// selected page
  1227. /// </returns>
  1228. public override Page SelectPage(Guid id)
  1229. {
  1230. var page = new Page();
  1231. using (var conn = this.CreateConnection())
  1232. {
  1233. if (conn.HasConnection)
  1234. {
  1235. var sqlQuery = string.Format("SELECT PageID, Title, Description, PageContent, DateCreated, DateModified, Keywords, IsPublished, IsFrontPage, Parent, ShowInList, Slug, IsDeleted FROM {0}Pages WHERE BlogID = {1}blogid AND PageID = {1}id", this.tablePrefix, this.parmPrefix);
  1236. using (var cmd = conn.CreateTextCommand(sqlQuery))
  1237. {
  1238. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  1239. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("id"), id.ToString()));
  1240. using (var rdr = cmd.ExecuteReader())
  1241. {
  1242. if (rdr.Read())
  1243. {
  1244. page.Id = rdr.GetGuid(0);
  1245. page.Title = rdr.IsDBNull(1) ? String.Empty : rdr.GetString(1);
  1246. page.Content = rdr.IsDBNull(3) ? String.Empty : rdr.GetString(3);
  1247. page.Description = rdr.IsDBNull(2) ? String.Empty : rdr.GetString(2);
  1248. if (!rdr.IsDBNull(4))
  1249. {
  1250. page.DateCreated = rdr.GetDateTime(4);
  1251. }
  1252. if (!rdr.IsDBNull(5))
  1253. {
  1254. page.DateModified = rdr.GetDateTime(5);
  1255. }
  1256. if (!rdr.IsDBNull(6))
  1257. {
  1258. page.Keywords = rdr.GetString(6);
  1259. }
  1260. if (!rdr.IsDBNull(7))
  1261. {
  1262. page.IsPublished = rdr.GetBoolean(7);
  1263. }
  1264. if (!rdr.IsDBNull(8))
  1265. {
  1266. page.IsFrontPage = rdr.GetBoolean(8);
  1267. }
  1268. if (!rdr.IsDBNull(9))
  1269. {
  1270. page.Parent = rdr.GetGuid(9);
  1271. }
  1272. if (!rdr.IsDBNull(10))
  1273. {
  1274. page.ShowInList = rdr.GetBoolean(10);
  1275. }
  1276. if (!rdr.IsDBNull(11))
  1277. {
  1278. page.Slug = rdr.GetString(11);
  1279. }
  1280. if (!rdr.IsDBNull(12))
  1281. {
  1282. page.IsDeleted = rdr.GetBoolean(12);
  1283. }
  1284. }
  1285. }
  1286. }
  1287. }
  1288. }
  1289. return page;
  1290. }
  1291. /// <summary>
  1292. /// Returns a Post based on Id.
  1293. /// </summary>
  1294. /// <param name="id">
  1295. /// The Post ID.
  1296. /// </param>
  1297. /// <returns>
  1298. /// The Post..
  1299. /// </returns>
  1300. public override Post SelectPost(Guid id)
  1301. {
  1302. var post = new Post();
  1303. using (var conn = this.CreateConnection())
  1304. {
  1305. if (conn.HasConnection)
  1306. {
  1307. var sqlQuery = string.Format("SELECT PostID, Title, Description, PostContent, DateCreated, DateModified, Author, IsPublished, IsCommentEnabled, Raters, Rating, Slug, IsDeleted FROM {0}Posts WHERE BlogID = {1}blogid AND PostID = {1}id", this.tablePrefix, this.parmPrefix);
  1308. using (var cmd = conn.CreateTextCommand(sqlQuery))
  1309. {
  1310. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  1311. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("id"), id.ToString()));
  1312. using (var rdr = cmd.ExecuteReader())
  1313. {
  1314. if (rdr.Read())
  1315. {
  1316. post.Id = rdr.GetGuid(0);
  1317. post.Title = rdr.GetString(1);
  1318. post.Content = rdr.GetString(3);
  1319. post.Description = rdr.IsDBNull(2) ? String.Empty : rdr.GetString(2);
  1320. if (!rdr.IsDBNull(4))
  1321. {
  1322. post.DateCreated = rdr.GetDateTime(4);
  1323. }
  1324. if (!rdr.IsDBNull(5))
  1325. {
  1326. post.DateModified = rdr.GetDateTime(5);
  1327. }
  1328. if (!rdr.IsDBNull(6))
  1329. {
  1330. post.Author = rdr.GetString(6);
  1331. }
  1332. if (!rdr.IsDBNull(7))
  1333. {
  1334. post.IsPublished = rdr.GetBoolean(7);
  1335. }
  1336. if (!rdr.IsDBNull(8))
  1337. {
  1338. post.HasCommentsEnabled = rdr.GetBoolean(8);
  1339. }
  1340. if (!rdr.IsDBNull(9))
  1341. {
  1342. post.Raters = rdr.GetInt32(9);
  1343. }
  1344. if (!rdr.IsDBNull(10))
  1345. {
  1346. post.Rating = rdr.GetFloat(10);
  1347. }
  1348. post.Slug = !rdr.IsDBNull(11) ? rdr.GetString(11) : string.Empty;
  1349. if (!rdr.IsDBNull(12))
  1350. {
  1351. post.IsDeleted = rdr.GetBoolean(12);
  1352. }
  1353. }
  1354. }
  1355. // Tags
  1356. cmd.CommandText = string.Format("SELECT Tag FROM {0}PostTag WHERE BlogID = {1}blogid AND PostID = {1}id", this.tablePrefix, this.parmPrefix);
  1357. using (var rdr = cmd.ExecuteReader())
  1358. {
  1359. while (rdr.Read())
  1360. {
  1361. if (!rdr.IsDBNull(0))
  1362. {
  1363. post.Tags.Add(rdr.GetString(0));
  1364. }
  1365. }
  1366. }
  1367. post.Tags.MarkOld();
  1368. // Categories
  1369. cmd.CommandText = string.Format("SELECT CategoryID FROM {0}PostCategory WHERE BlogID = {1}blogid AND PostID = {1}id", this.tablePrefix, this.parmPrefix);
  1370. using (var rdr = cmd.ExecuteReader())
  1371. {
  1372. while (rdr.Read())
  1373. {
  1374. var key = rdr.GetGuid(0);
  1375. if (Category.GetCategory(key) != null)
  1376. {
  1377. post.Categories.Add(Category.GetCategory(key));
  1378. }
  1379. }
  1380. }
  1381. // Comments
  1382. cmd.CommandText = string.Format("SELECT PostCommentID, CommentDate, Author, Email, Website, Comment, Country, Ip, IsApproved, ParentCommentID, ModeratedBy, Avatar, IsSpam, IsDeleted FROM {0}PostComment WHERE BlogID = {1}blogid AND PostID = {1}id", this.tablePrefix, this.parmPrefix);
  1383. using (var rdr = cmd.ExecuteReader())
  1384. {
  1385. while (rdr.Read())
  1386. {
  1387. var comment = new Comment
  1388. {
  1389. Id = rdr.GetGuid(0),
  1390. IsApproved = true,
  1391. Author = rdr.GetString(2)
  1392. };
  1393. if (!rdr.IsDBNull(4))
  1394. {
  1395. Uri website;
  1396. if (Uri.TryCreate(rdr.GetString(4), UriKind.Absolute, out website))
  1397. {
  1398. comment.Website = website;
  1399. }
  1400. }
  1401. comment.Email = rdr.GetString(3);
  1402. comment.Content = rdr.GetString(5);
  1403. comment.DateCreated = rdr.GetDateTime(1);
  1404. comment.Parent = post;
  1405. if (!rdr.IsDBNull(6))
  1406. {
  1407. comment.Country = rdr.GetString(6);
  1408. }
  1409. if (!rdr.IsDBNull(7))
  1410. {
  1411. comment.IP = rdr.GetString(7);
  1412. }
  1413. comment.IsApproved = rdr.IsDBNull(8) || rdr.GetBoolean(8);
  1414. comment.ParentId = rdr.GetGuid(9);
  1415. if (!rdr.IsDBNull(10))
  1416. {
  1417. comment.ModeratedBy = rdr.GetString(10);
  1418. }
  1419. if (!rdr.IsDBNull(11))
  1420. {
  1421. comment.Avatar = rdr.GetString(11);
  1422. }
  1423. if (!rdr.IsDBNull(12))
  1424. {
  1425. comment.IsSpam = rdr.GetBoolean(12);
  1426. }
  1427. if (!rdr.IsDBNull(13))
  1428. {
  1429. comment.IsDeleted = rdr.GetBoolean(13);
  1430. }
  1431. post.AllComments.Add(comment);
  1432. }
  1433. }
  1434. post.AllComments.Sort();
  1435. // Email Notification
  1436. cmd.CommandText = string.Format("SELECT NotifyAddress FROM {0}PostNotify WHERE BlogID = {1}blogid AND PostID = {1}id", this.tablePrefix, this.parmPrefix);
  1437. using (var rdr = cmd.ExecuteReader())
  1438. {
  1439. while (rdr.Read())
  1440. {
  1441. if (!rdr.IsDBNull(0))
  1442. {
  1443. var email = rdr.GetString(0);
  1444. if (post.NotificationEmails.Contains(email))
  1445. {
  1446. post.NotificationEmails.Add(email);
  1447. }
  1448. }
  1449. }
  1450. }
  1451. }
  1452. }
  1453. }
  1454. return post;
  1455. }
  1456. /// <summary>
  1457. /// Loads AuthorProfile from database
  1458. /// </summary>
  1459. /// <param name="id">The user name.</param>
  1460. /// <returns>An AuthorProfile.</returns>
  1461. public override AuthorProfile SelectProfile(string id)
  1462. {
  1463. var dic = new StringDictionary();
  1464. var profile = new AuthorProfile(id);
  1465. // Retrieve Profile data from Db
  1466. using (var conn = this.CreateConnection())
  1467. {
  1468. if (conn.HasConnection)
  1469. {
  1470. using (var cmd = conn.CreateTextCommand(string.Format("SELECT SettingName, SettingValue FROM {0}Profiles WHERE BlogID = {1}blogid AND UserName = {1}name", this.tablePrefix, this.parmPrefix)))
  1471. {
  1472. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  1473. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("name"), id));
  1474. using (var rdr = cmd.ExecuteReader())
  1475. {
  1476. while (rdr.Read())
  1477. {
  1478. dic.Add(rdr.GetString(0), rdr.GetString(1));
  1479. }
  1480. }
  1481. }
  1482. }
  1483. }
  1484. // Load profile with data from dictionary
  1485. if (dic.ContainsKey("DisplayName"))
  1486. {
  1487. profile.DisplayName = dic["DisplayName"];
  1488. }
  1489. if (dic.ContainsKey("FirstName"))
  1490. {
  1491. profile.FirstName = dic["FirstName"];
  1492. }
  1493. if (dic.ContainsKey("MiddleName"))
  1494. {
  1495. profile.MiddleName = dic["MiddleName"];
  1496. }
  1497. if (dic.ContainsKey("LastName"))
  1498. {
  1499. profile.LastName = dic["LastName"];
  1500. }
  1501. if (dic.ContainsKey("CityTown"))
  1502. {
  1503. profile.CityTown = dic["CityTown"];
  1504. }
  1505. if (dic.ContainsKey("RegionState"))
  1506. {
  1507. profile.RegionState = dic["RegionState"];
  1508. }
  1509. if (dic.ContainsKey("Country"))
  1510. {
  1511. profile.Country = dic["Country"];
  1512. }
  1513. if (dic.ContainsKey("Birthday"))
  1514. {
  1515. DateTime date;
  1516. if (DateTime.TryParse(dic["Birthday"], out date))
  1517. {
  1518. profile.Birthday = date;
  1519. }
  1520. }
  1521. if (dic.ContainsKey("AboutMe"))
  1522. {
  1523. profile.AboutMe = dic["AboutMe"];
  1524. }
  1525. if (dic.ContainsKey("PhotoURL"))
  1526. {
  1527. profile.PhotoUrl = dic["PhotoURL"];
  1528. }
  1529. if (dic.ContainsKey("Company"))
  1530. {
  1531. profile.Company = dic["Company"];
  1532. }
  1533. if (dic.ContainsKey("EmailAddress"))
  1534. {
  1535. profile.EmailAddress = dic["EmailAddress"];
  1536. }
  1537. if (dic.ContainsKey("PhoneMain"))
  1538. {
  1539. profile.PhoneMain = dic["PhoneMain"];
  1540. }
  1541. if (dic.ContainsKey("PhoneMobile"))
  1542. {
  1543. profile.PhoneMobile = dic["PhoneMobile"];
  1544. }
  1545. if (dic.ContainsKey("PhoneFax"))
  1546. {
  1547. profile.PhoneFax = dic["PhoneFax"];
  1548. }
  1549. if (dic.ContainsKey("IsPrivate"))
  1550. {
  1551. profile.Private = dic["IsPrivate"] == "true";
  1552. }
  1553. return profile;
  1554. }
  1555. /// <summary>
  1556. /// Gets a Referrer based on an Id.
  1557. /// </summary>
  1558. /// <param name="id">
  1559. /// The Referrer Id.
  1560. /// </param>
  1561. /// <returns>
  1562. /// A matching Referrer
  1563. /// </returns>
  1564. public override Referrer SelectReferrer(Guid id)
  1565. {
  1566. var refer = Referrer.Referrers.Find(r => r.Id.Equals(id)) ?? new Referrer();
  1567. refer.MarkOld();
  1568. return refer;
  1569. }
  1570. /// <summary>
  1571. /// Sets up the required storage files/tables for a new Blog instance, from an existing blog instance.
  1572. /// </summary>
  1573. /// <param name="existingBlog">
  1574. /// The existing blog to copy from.
  1575. /// </param>
  1576. /// <param name="newBlog">
  1577. /// The new blog to copy to.
  1578. /// </param>
  1579. public override bool SetupBlogFromExistingBlog(Blog existingBlog, Blog newBlog)
  1580. {
  1581. // Even for the DbBlogProvider, we call newBlog.CopyExistingBlogFolderToNewBlogFolder().
  1582. // The reasons are that a small number of extensions/widgets use App_Data even if
  1583. // the DbBlogProvider is being used (Newsletter widget, Logger extension, and any
  1584. // other custom components written by other people). Also, even if the
  1585. // DbBlogProvider is being used, the XmlMembershipProvider and XmlRoleProvider could
  1586. // also be used, which stores data in App_Data.
  1587. // So as a rule of thumb, whenever a new blog instance is created, we will create
  1588. // a new folder in App_Data for that new instance, and copy all the files/folders in.
  1589. bool copyResult = newBlog.CopyExistingBlogFolderToNewBlogFolder(existingBlog);
  1590. if (!copyResult)
  1591. {
  1592. Utils.Log("DbBlogProvider.SetupBlogFromExistingBlog", new Exception("Unsuccessful result from newBlog.CopyExistingBlogFolderToNewBlogFolder."));
  1593. return false;
  1594. }
  1595. using (var conn = this.CreateConnection())
  1596. {
  1597. if (conn.HasConnection)
  1598. {
  1599. // be_BlogRollItems
  1600. using (var cmd = conn.CreateTextCommand(string.Format(
  1601. " INSERT INTO {0}BlogRollItems ( BlogId, BlogRollId, Title, Description, BlogUrl, FeedUrl, Xfn, SortIndex ) " +
  1602. " SELECT {1}newblogid, BlogRollId, Title, Description, BlogUrl, FeedUrl, Xfn, SortIndex " +
  1603. " FROM {0}BlogRollItems " +
  1604. " WHERE BlogID = {1}existingblogid ", this.tablePrefix, this.parmPrefix)))
  1605. {
  1606. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("newblogid"), newBlog.Id.ToString()));
  1607. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("existingblogid"), existingBlog.Id.ToString()));
  1608. cmd.ExecuteNonQuery();
  1609. }
  1610. // be_Categories
  1611. using (var cmd = conn.CreateTextCommand(string.Format(
  1612. " INSERT INTO {0}Categories ( BlogID, CategoryID, CategoryName, Description, ParentID ) " +
  1613. " SELECT {1}newblogid, CategoryID, CategoryName, Description, ParentID " +
  1614. " FROM {0}Categories " +
  1615. " WHERE BlogID = {1}existingblogid ", this.tablePrefix, this.parmPrefix)))
  1616. {
  1617. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("newblogid"), newBlog.Id.ToString()));
  1618. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("existingblogid"), existingBlog.Id.ToString()));
  1619. cmd.ExecuteNonQuery();
  1620. }
  1621. // be_DataStoreSettings
  1622. using (var cmd = conn.CreateTextCommand(string.Format(
  1623. " INSERT INTO {0}DataStoreSettings ( BlogId, ExtensionType, ExtensionId, Settings ) " +
  1624. " SELECT {1}newblogid, ExtensionType, ExtensionId, Settings " +
  1625. " FROM {0}DataStoreSettings " +
  1626. " WHERE BlogID = {1}existingblogid ", this.tablePrefix, this.parmPrefix)))
  1627. {
  1628. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("newblogid"), newBlog.Id.ToString()));
  1629. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("existingblogid"), existingBlog.Id.ToString()));
  1630. cmd.ExecuteNonQuery();
  1631. }
  1632. // be_Pages
  1633. using (var cmd = conn.CreateTextCommand(string.Format(
  1634. " INSERT INTO {0}Pages ( BlogID, PageID, Title, Description, PageContent, Keywords, DateCreated, DateModified, IsPublished, IsFrontPage, Parent, ShowInList, Slug, IsDeleted ) " +
  1635. " SELECT {1}newblogid, PageID, Title, Description, PageContent, Keywords, DateCreated, DateModified, IsPublished, IsFrontPage, Parent, ShowInList, Slug, IsDeleted " +
  1636. " FROM {0}Pages " +
  1637. " WHERE BlogID = {1}existingblogid ", this.tablePrefix, this.parmPrefix)))
  1638. {
  1639. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("newblogid"), newBlog.Id.ToString()));
  1640. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("existingblogid"), existingBlog.Id.ToString()));
  1641. cmd.ExecuteNonQuery();
  1642. }
  1643. // be_PingService
  1644. using (var cmd = conn.CreateTextCommand(string.Format(
  1645. " INSERT INTO {0}PingService ( BlogID, Link ) " +
  1646. " SELECT {1}newblogid, Link " +
  1647. " FROM {0}PingService " +
  1648. " WHERE BlogID = {1}existingblogid ", this.tablePrefix, this.parmPrefix)))
  1649. {
  1650. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("newblogid"), newBlog.Id.ToString()));
  1651. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("existingblogid"), existingBlog.Id.ToString()));
  1652. cmd.ExecuteNonQuery();
  1653. }
  1654. // be_Profiles
  1655. using (var cmd = conn.CreateTextCommand(string.Format(
  1656. " INSERT INTO {0}Profiles ( BlogID, UserName, SettingName, SettingValue ) " +
  1657. " SELECT {1}newblogid, UserName, SettingName, SettingValue " +
  1658. " FROM {0}Profiles " +
  1659. " WHERE BlogID = {1}existingblogid ", this.tablePrefix, this.parmPrefix)))
  1660. {
  1661. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("newblogid"), newBlog.Id.ToString()));
  1662. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("existingblogid"), existingBlog.Id.ToString()));
  1663. cmd.ExecuteNonQuery();
  1664. }
  1665. // be_Referrers
  1666. using (var cmd = conn.CreateTextCommand(string.Format(
  1667. " INSERT INTO {0}Referrers ( BlogId, ReferrerId, ReferralDay, ReferrerUrl, ReferralCount, Url, IsSpam ) " +
  1668. " SELECT {1}newblogid, ReferrerId, ReferralDay, ReferrerUrl, ReferralCount, Url, IsSpam " +
  1669. " FROM {0}Referrers " +
  1670. " WHERE BlogID = {1}existingblogid ", this.tablePrefix, this.parmPrefix)))
  1671. {
  1672. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("newblogid"), newBlog.Id.ToString()));
  1673. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("existingblogid"), existingBlog.Id.ToString()));
  1674. cmd.ExecuteNonQuery();
  1675. }
  1676. // be_Rights
  1677. using (var cmd = conn.CreateTextCommand(string.Format(
  1678. " INSERT INTO {0}Rights ( BlogId, RightName ) " +
  1679. " SELECT {1}newblogid, RightName " +
  1680. " FROM {0}Rights " +
  1681. " WHERE BlogID = {1}existingblogid ", this.tablePrefix, this.parmPrefix)))
  1682. {
  1683. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("newblogid"), newBlog.Id.ToString()));
  1684. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("existingblogid"), existingBlog.Id.ToString()));
  1685. cmd.ExecuteNonQuery();
  1686. }
  1687. // be_RightRoles
  1688. using (var cmd = conn.CreateTextCommand(string.Format(
  1689. " INSERT INTO {0}RightRoles ( BlogId, RightName, Role ) " +
  1690. " SELECT {1}newblogid, RightName, Role " +
  1691. " FROM {0}RightRoles " +
  1692. " WHERE BlogID = {1}existingblogid ", this.tablePrefix, this.parmPrefix)))
  1693. {
  1694. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("newblogid"), newBlog.Id.ToString()));
  1695. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("existingblogid"), existingBlog.Id.ToString()));
  1696. cmd.ExecuteNonQuery();
  1697. }
  1698. // be_Settings
  1699. using (var cmd = conn.CreateTextCommand(string.Format(
  1700. " INSERT INTO {0}Settings ( BlogId, SettingName, SettingValue ) " +
  1701. " SELECT {1}newblogid, SettingName, SettingValue " +
  1702. " FROM {0}Settings " +
  1703. " WHERE BlogID = {1}existingblogid ", this.tablePrefix, this.parmPrefix)))
  1704. {
  1705. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("newblogid"), newBlog.Id.ToString()));
  1706. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("existingblogid"), existingBlog.Id.ToString()));
  1707. cmd.ExecuteNonQuery();
  1708. }
  1709. // be_StopWords
  1710. using (var cmd = conn.CreateTextCommand(string.Format(
  1711. " INSERT INTO {0}StopWords ( BlogId, StopWord ) " +
  1712. " SELECT {1}newblogid, StopWord " +
  1713. " FROM {0}StopWords " +
  1714. " WHERE BlogID = {1}existingblogid ", this.tablePrefix, this.parmPrefix)))
  1715. {
  1716. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("newblogid"), newBlog.Id.ToString()));
  1717. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("existingblogid"), existingBlog.Id.ToString()));
  1718. cmd.ExecuteNonQuery();
  1719. }
  1720. // be_Posts
  1721. using (var cmd = conn.CreateTextCommand(string.Format(
  1722. " INSERT INTO {0}Posts ( BlogId, PostID, Title, Description, PostContent, DateCreated, DateModified, Author, IsPublished, IsCommentEnabled, Raters, Rating, Slug, IsDeleted ) " +
  1723. " SELECT {1}newblogid, PostID, Title, Description, PostContent, DateCreated, DateModified, Author, IsPublished, IsCommentEnabled, Raters, Rating, Slug, IsDeleted " +
  1724. " FROM {0}Posts " +
  1725. " WHERE BlogID = {1}existingblogid ", this.tablePrefix, this.parmPrefix)))
  1726. {
  1727. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("newblogid"), newBlog.Id.ToString()));
  1728. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("existingblogid"), existingBlog.Id.ToString()));
  1729. cmd.ExecuteNonQuery();
  1730. }
  1731. // be_PostCategory
  1732. using (var cmd = conn.CreateTextCommand(string.Format(
  1733. " INSERT INTO {0}PostCategory ( BlogId, PostID, CategoryID ) " +
  1734. " SELECT {1}newblogid, PostID, CategoryID " +
  1735. " FROM {0}PostCategory " +
  1736. " WHERE BlogID = {1}existingblogid ", this.tablePrefix, this.parmPrefix)))
  1737. {
  1738. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("newblogid"), newBlog.Id.ToString()));
  1739. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("existingblogid"), existingBlog.Id.ToString()));
  1740. cmd.ExecuteNonQuery();
  1741. }
  1742. // be_PostComment
  1743. using (var cmd = conn.CreateTextCommand(string.Format(
  1744. " INSERT INTO {0}PostComment ( BlogId, PostCommentID, PostID, ParentCommentID, CommentDate, Author, Email, Website, Comment, Country, Ip, IsApproved, ModeratedBy, Avatar, IsSpam, IsDeleted ) " +
  1745. " SELECT {1}newblogid, PostCommentID, PostID, ParentCommentID, CommentDate, Author, Email, Website, Comment, Country, Ip, IsApproved, ModeratedBy, Avatar, IsSpam, IsDeleted " +
  1746. " FROM {0}PostComment " +
  1747. " WHERE BlogID = {1}existingblogid ", this.tablePrefix, this.parmPrefix)))
  1748. {
  1749. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("newblogid"), newBlog.Id.ToString()));
  1750. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("existingblogid"), existingBlog.Id.ToString()));
  1751. cmd.ExecuteNonQuery();
  1752. }
  1753. // be_PostNotify
  1754. using (var cmd = conn.CreateTextCommand(string.Format(
  1755. " INSERT INTO {0}PostNotify ( BlogId, PostID, NotifyAddress ) " +
  1756. " SELECT {1}newblogid, PostID, NotifyAddress " +
  1757. " FROM {0}PostNotify " +
  1758. " WHERE BlogID = {1}existingblogid ", this.tablePrefix, this.parmPrefix)))
  1759. {
  1760. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("newblogid"), newBlog.Id.ToString()));
  1761. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("existingblogid"), existingBlog.Id.ToString()));
  1762. cmd.ExecuteNonQuery();
  1763. }
  1764. // be_PostTag
  1765. using (var cmd = conn.CreateTextCommand(string.Format(
  1766. " INSERT INTO {0}PostTag ( BlogId, PostID, Tag ) " +
  1767. " SELECT {1}newblogid, PostID, Tag " +
  1768. " FROM {0}PostTag " +
  1769. " WHERE BlogID = {1}existingblogid ", this.tablePrefix, this.parmPrefix)))
  1770. {
  1771. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("newblogid"), newBlog.Id.ToString()));
  1772. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("existingblogid"), existingBlog.Id.ToString()));
  1773. cmd.ExecuteNonQuery();
  1774. }
  1775. //////////////////////////////////////
  1776. // The DbMembershipProvider and DbRoleProvider may or may not be in use.
  1777. // Even if it's not in use, copy the rows for the Users and Roles tables.
  1778. //
  1779. // be_Users
  1780. using (var cmd = conn.CreateTextCommand(string.Format(
  1781. " INSERT INTO {0}Users ( BlogId, UserName, Password, LastLoginTime, EmailAddress ) " +
  1782. " SELECT {1}newblogid, UserName, Password, LastLoginTime, EmailAddress " +
  1783. " FROM {0}Users " +
  1784. " WHERE BlogID = {1}existingblogid ", this.tablePrefix, this.parmPrefix)))
  1785. {
  1786. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("newblogid"), newBlog.Id.ToString()));
  1787. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("existingblogid"), existingBlog.Id.ToString()));
  1788. cmd.ExecuteNonQuery();
  1789. }
  1790. // be_Roles
  1791. using (var cmd = conn.CreateTextCommand(string.Format(
  1792. " INSERT INTO {0}Roles ( BlogId, Role ) " +
  1793. " SELECT {1}newblogid, Role " +
  1794. " FROM {0}Roles " +
  1795. " WHERE BlogID = {1}existingblogid ", this.tablePrefix, this.parmPrefix)))
  1796. {
  1797. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("newblogid"), newBlog.Id.ToString()));
  1798. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("existingblogid"), existingBlog.Id.ToString()));
  1799. cmd.ExecuteNonQuery();
  1800. }
  1801. // be_UserRoles
  1802. using (var cmd = conn.CreateTextCommand(string.Format(
  1803. " INSERT INTO {0}UserRoles ( BlogId, UserName, Role ) " +
  1804. " SELECT {1}newblogid, UserName, Role " +
  1805. " FROM {0}UserRoles " +
  1806. " WHERE BlogID = {1}existingblogid ", this.tablePrefix, this.parmPrefix)))
  1807. {
  1808. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("newblogid"), newBlog.Id.ToString()));
  1809. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("existingblogid"), existingBlog.Id.ToString()));
  1810. cmd.ExecuteNonQuery();
  1811. }
  1812. }
  1813. }
  1814. return true;
  1815. }
  1816. /// <summary>
  1817. /// Saves an existing BlogRoll to the database
  1818. /// </summary>
  1819. /// <param name="blogRollItem">
  1820. /// BlogRoll to be saved
  1821. /// </param>
  1822. public override void UpdateBlogRollItem(BlogRollItem blogRollItem)
  1823. {
  1824. var blogRolls = BlogRollItem.BlogRolls;
  1825. blogRolls.Remove(blogRollItem);
  1826. blogRolls.Add(blogRollItem);
  1827. using (var conn = this.CreateConnection())
  1828. {
  1829. if (conn.HasConnection)
  1830. {
  1831. var sqlQuery = string.Format("UPDATE {0}BlogRollItems SET Title = {1}Title, Description = {1}Description, BlogUrl = {1}BlogUrl, FeedUrl = {1}FeedUrl, Xfn = {1}Xfn, SortIndex = {1}SortIndex WHERE BlogId = {1}BlogId AND BlogRollId = {1}BlogRollId", this.tablePrefix, this.parmPrefix);
  1832. using (var cmd = conn.CreateTextCommand(sqlQuery))
  1833. {
  1834. this.AddBlogRollParametersToCommand(blogRollItem, conn, cmd);
  1835. cmd.ExecuteNonQuery();
  1836. }
  1837. }
  1838. }
  1839. }
  1840. /// <summary>
  1841. /// Saves an existing Blog to the database
  1842. /// </summary>
  1843. /// <param name="blog">
  1844. /// Blog to be saved
  1845. /// </param>
  1846. public override void UpdateBlog(Blog blog)
  1847. {
  1848. using (var conn = this.CreateConnection())
  1849. {
  1850. if (conn.HasConnection)
  1851. {
  1852. var sqlQuery = string.Format("UPDATE {0}Blogs SET BlogName = {1}BlogName, Hostname = {1}Hostname, IsAnyTextBeforeHostnameAccepted = {1}IsAnyTextBeforeHostnameAccepted, StorageContainerName = {1}StorageContainerName, VirtualPath = {1}VirtualPath, IsPrimary = {1}IsPrimary, IsActive = {1}IsActive WHERE BlogId = {1}BlogId", this.tablePrefix, this.parmPrefix);
  1853. using (var cmd = conn.CreateTextCommand(sqlQuery))
  1854. {
  1855. this.AddBlogParametersToCommand(blog, conn, cmd);
  1856. cmd.ExecuteNonQuery();
  1857. }
  1858. }
  1859. }
  1860. }
  1861. /// <summary>
  1862. /// Saves an existing category to the database
  1863. /// </summary>
  1864. /// <param name="category">
  1865. /// category to be saved
  1866. /// </param>
  1867. public override void UpdateCategory(Category category)
  1868. {
  1869. var categories = Category.Categories;
  1870. categories.Remove(category);
  1871. categories.Add(category);
  1872. categories.Sort();
  1873. using (var conn = this.CreateConnection())
  1874. {
  1875. if (conn.HasConnection)
  1876. {
  1877. var sqlQuery = string.Format("UPDATE {0}Categories SET CategoryName = {1}catname, Description = {1}description, ParentID = {1}parentid WHERE BlogID = {1}blogid AND CategoryID = {1}catid", this.tablePrefix, this.parmPrefix);
  1878. using (var cmd = conn.CreateTextCommand(sqlQuery))
  1879. {
  1880. var p = cmd.Parameters;
  1881. p.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  1882. p.Add(conn.CreateParameter(FormatParamName("catid"), category.Id.ToString()));
  1883. p.Add(conn.CreateParameter(FormatParamName("catname"), category.Title));
  1884. p.Add(conn.CreateParameter(FormatParamName("description"), category.Description));
  1885. p.Add(conn.CreateParameter(FormatParamName("parentid"), (category.Parent == null ? (object)DBNull.Value : category.Parent.ToString())));
  1886. cmd.ExecuteNonQuery();
  1887. }
  1888. }
  1889. }
  1890. }
  1891. /// <summary>
  1892. /// Saves an existing page in the database
  1893. /// </summary>
  1894. /// <param name="page">
  1895. /// page to be saved
  1896. /// </param>
  1897. public override void UpdatePage(Page page)
  1898. {
  1899. using (var conn = this.CreateConnection())
  1900. {
  1901. if (conn.HasConnection)
  1902. {
  1903. var sqlQuery = string.Format("UPDATE {0}Pages SET Title = {1}title, Description = {1}desc, PageContent = {1}content, DateCreated = {1}created, DateModified = {1}modified, Keywords = {1}keywords, IsPublished = {1}ispublished, IsFrontPage = {1}isfrontpage, Parent = {1}parent, ShowInList = {1}showinlist, Slug = {1}slug, IsDeleted = {1}isdeleted WHERE BlogID = {1}blogid AND PageID = {1}id", this.tablePrefix, this.parmPrefix);
  1904. using (var cmd = conn.CreateTextCommand(sqlQuery))
  1905. {
  1906. var p = cmd.Parameters;
  1907. p.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  1908. p.Add(conn.CreateParameter(FormatParamName("id"), page.Id.ToString()));
  1909. p.Add(conn.CreateParameter(FormatParamName("title"), page.Title));
  1910. p.Add(conn.CreateParameter(FormatParamName("desc"), page.Description));
  1911. p.Add(conn.CreateParameter(FormatParamName("content"), page.Content));
  1912. p.Add(conn.CreateParameter(FormatParamName("created"), page.DateCreated.AddHours(-BlogSettings.Instance.Timezone)));
  1913. p.Add(conn.CreateParameter(FormatParamName("modified"), (page.DateModified == new DateTime() ? DateTime.Now : page.DateModified.AddHours(-BlogSettings.Instance.Timezone))));
  1914. p.Add(conn.CreateParameter(FormatParamName("keywords"), page.Keywords));
  1915. p.Add(conn.CreateParameter(FormatParamName("ispublished"), page.IsPublished));
  1916. p.Add(conn.CreateParameter(FormatParamName("isfrontpage"), page.IsFrontPage));
  1917. p.Add(conn.CreateParameter(FormatParamName("parent"), page.Parent.ToString()));
  1918. p.Add(conn.CreateParameter(FormatParamName("showinlist"), page.ShowInList));
  1919. p.Add(conn.CreateParameter(FormatParamName("slug"), page.Slug));
  1920. p.Add(conn.CreateParameter(FormatParamName("isdeleted"), page.IsDeleted));
  1921. cmd.ExecuteNonQuery();
  1922. }
  1923. }
  1924. }
  1925. }
  1926. /// <summary>
  1927. /// Saves and existing post in the database
  1928. /// </summary>
  1929. /// <param name="post">
  1930. /// post to be saved
  1931. /// </param>
  1932. public override void UpdatePost(Post post)
  1933. {
  1934. using (TransactionScope ts = new TransactionScope())
  1935. {
  1936. using (var conn = this.CreateConnection())
  1937. {
  1938. if (conn.HasConnection)
  1939. {
  1940. var sqlQuery = string.Format("UPDATE {0}Posts SET Title = {1}title, Description = {1}desc, PostContent = {1}content, DateCreated = {1}created, DateModified = {1}modified, Author = {1}Author, IsPublished = {1}published, IsCommentEnabled = {1}commentEnabled, Raters = {1}raters, Rating = {1}rating, Slug = {1}slug, IsDeleted = {1}isdeleted WHERE BlogID = {1}blogid AND PostID = {1}id", this.tablePrefix, this.parmPrefix);
  1941. using (var cmd = conn.CreateTextCommand(sqlQuery))
  1942. {
  1943. var p = cmd.Parameters;
  1944. p.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  1945. p.Add(conn.CreateParameter(FormatParamName("id"), post.Id.ToString()));
  1946. p.Add(conn.CreateParameter(FormatParamName("title"), post.Title));
  1947. p.Add(conn.CreateParameter(FormatParamName("desc"), (post.Description ?? string.Empty)));
  1948. p.Add(conn.CreateParameter(FormatParamName("content"), post.Content));
  1949. p.Add(conn.CreateParameter(FormatParamName("created"), post.DateCreated.AddHours(-BlogSettings.Instance.Timezone)));
  1950. p.Add(conn.CreateParameter(FormatParamName("modified"), (post.DateModified == new DateTime() ? DateTime.Now : post.DateModified.AddHours(-BlogSettings.Instance.Timezone))));
  1951. p.Add(conn.CreateParameter(FormatParamName("author"), (post.Author ?? string.Empty)));
  1952. p.Add(conn.CreateParameter(FormatParamName("published"), post.IsPublished));
  1953. p.Add(conn.CreateParameter(FormatParamName("commentEnabled"), post.HasCommentsEnabled));
  1954. p.Add(conn.CreateParameter(FormatParamName("raters"), post.Raters));
  1955. p.Add(conn.CreateParameter(FormatParamName("rating"), post.Rating));
  1956. p.Add(conn.CreateParameter(FormatParamName("slug"), (post.Slug ?? string.Empty)));
  1957. p.Add(conn.CreateParameter(FormatParamName("isdeleted"), post.IsDeleted));
  1958. cmd.ExecuteNonQuery();
  1959. }
  1960. // Tags
  1961. this.UpdateTags(post, conn);
  1962. // Categories
  1963. this.UpdateCategories(post, conn);
  1964. // Comments
  1965. this.UpdateComments(post, conn);
  1966. // Email Notification
  1967. this.UpdateNotify(post, conn);
  1968. }
  1969. }
  1970. ts.Complete();
  1971. }
  1972. }
  1973. /// <summary>
  1974. /// Updates AuthorProfile to database
  1975. /// </summary>
  1976. /// <param name="profile">
  1977. /// An AuthorProfile.
  1978. /// </param>
  1979. public override void UpdateProfile(AuthorProfile profile)
  1980. {
  1981. // Remove Profile
  1982. this.DeleteProfile(profile);
  1983. // Create Profile Dictionary
  1984. var dic = new StringDictionary();
  1985. if (!String.IsNullOrEmpty(profile.DisplayName))
  1986. {
  1987. dic.Add("DisplayName", profile.DisplayName);
  1988. }
  1989. if (!String.IsNullOrEmpty(profile.FirstName))
  1990. {
  1991. dic.Add("FirstName", profile.FirstName);
  1992. }
  1993. if (!String.IsNullOrEmpty(profile.MiddleName))
  1994. {
  1995. dic.Add("MiddleName", profile.MiddleName);
  1996. }
  1997. if (!String.IsNullOrEmpty(profile.LastName))
  1998. {
  1999. dic.Add("LastName", profile.LastName);
  2000. }
  2001. if (!String.IsNullOrEmpty(profile.CityTown))
  2002. {
  2003. dic.Add("CityTown", profile.CityTown);
  2004. }
  2005. if (!String.IsNullOrEmpty(profile.RegionState))
  2006. {
  2007. dic.Add("RegionState", profile.RegionState);
  2008. }
  2009. if (!String.IsNullOrEmpty(profile.Country))
  2010. {
  2011. dic.Add("Country", profile.Country);
  2012. }
  2013. if (!String.IsNullOrEmpty(profile.AboutMe))
  2014. {
  2015. dic.Add("AboutMe", profile.AboutMe);
  2016. }
  2017. if (!String.IsNullOrEmpty(profile.PhotoUrl))
  2018. {
  2019. dic.Add("PhotoURL", profile.PhotoUrl);
  2020. }
  2021. if (!String.IsNullOrEmpty(profile.Company))
  2022. {
  2023. dic.Add("Company", profile.Company);
  2024. }
  2025. if (!String.IsNullOrEmpty(profile.EmailAddress))
  2026. {
  2027. dic.Add("EmailAddress", profile.EmailAddress);
  2028. }
  2029. if (!String.IsNullOrEmpty(profile.PhoneMain))
  2030. {
  2031. dic.Add("PhoneMain", profile.PhoneMain);
  2032. }
  2033. if (!String.IsNullOrEmpty(profile.PhoneMobile))
  2034. {
  2035. dic.Add("PhoneMobile", profile.PhoneMobile);
  2036. }
  2037. if (!String.IsNullOrEmpty(profile.PhoneFax))
  2038. {
  2039. dic.Add("PhoneFax", profile.PhoneFax);
  2040. }
  2041. if (profile.Birthday != DateTime.MinValue)
  2042. {
  2043. dic.Add("Birthday", profile.Birthday.ToString("yyyy-MM-dd"));
  2044. }
  2045. dic.Add("IsPrivate", profile.Private.ToString());
  2046. // Save Profile Dictionary
  2047. using (var conn = this.CreateConnection())
  2048. {
  2049. using (var cmd = conn.CreateCommand())
  2050. {
  2051. foreach (string key in dic.Keys)
  2052. {
  2053. var sqlQuery = string.Format("INSERT INTO {0}Profiles (BlogID, UserName, SettingName, SettingValue) VALUES ({1}blogid, {1}user, {1}name, {1}value)", this.tablePrefix, this.parmPrefix);
  2054. cmd.CommandText = sqlQuery;
  2055. cmd.Parameters.Clear();
  2056. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  2057. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("user"), profile.Id));
  2058. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("name"), key));
  2059. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("value"), dic[key]));
  2060. cmd.ExecuteNonQuery();
  2061. }
  2062. }
  2063. }
  2064. }
  2065. /// <summary>
  2066. /// Saves an existing Referrer to the database.
  2067. /// </summary>
  2068. /// <param name="referrer">
  2069. /// Referrer to be saved.
  2070. /// </param>
  2071. public override void UpdateReferrer(Referrer referrer)
  2072. {
  2073. var referrers = Referrer.Referrers;
  2074. referrers.Remove(referrer);
  2075. referrers.Add(referrer);
  2076. using (var conn = this.CreateConnection())
  2077. {
  2078. if (conn.HasConnection)
  2079. {
  2080. var sqlQuery = string.Format("UPDATE {0}Referrers SET ReferralDay = {1}ReferralDay, ReferrerUrl = {1}ReferrerUrl, ReferralCount = {1}ReferralCount, Url = {1}Url, IsSpam = {1}IsSpam WHERE BlogId = {1}BlogId AND ReferrerId = {1}ReferrerId", this.tablePrefix, this.parmPrefix);
  2081. using (var cmd = conn.CreateTextCommand(sqlQuery))
  2082. {
  2083. this.AddReferrersParametersToCommand(referrer, conn, cmd);
  2084. cmd.ExecuteNonQuery();
  2085. }
  2086. }
  2087. }
  2088. }
  2089. #region Packaging
  2090. /// <summary>
  2091. /// Log of all installed packages
  2092. /// </summary>
  2093. /// <param name="package">Intalled package</param>
  2094. public override void SavePackage(InstalledPackage package)
  2095. {
  2096. using (var conn = CreateConnection())
  2097. {
  2098. if (conn.HasConnection)
  2099. {
  2100. var sqlQuery = string.Format("INSERT INTO {0}Packages (PackageId, [Version]) VALUES ({1}PackageId, {1}Version)", this.tablePrefix, this.parmPrefix);
  2101. using (var cmd = conn.CreateTextCommand(sqlQuery))
  2102. {
  2103. var parms = cmd.Parameters;
  2104. parms.Add(conn.CreateParameter(FormatParamName("PackageId"), package.PackageId));
  2105. parms.Add(conn.CreateParameter(FormatParamName("Version"), package.Version));
  2106. cmd.ExecuteNonQuery();
  2107. }
  2108. }
  2109. }
  2110. }
  2111. /// <summary>
  2112. /// Log of all files for installed package
  2113. /// </summary>
  2114. /// <param name="packageFiles">List of intalled package files</param>
  2115. public override void SavePackageFiles(List<PackageFile> packageFiles)
  2116. {
  2117. using (var conn = CreateConnection())
  2118. {
  2119. if (conn.HasConnection)
  2120. {
  2121. var sqlQuery = string.Format("INSERT INTO {0}PackageFiles (PackageId, FileOrder, FilePath, IsDirectory) VALUES ({1}PackageId, {1}FileOrder, {1}FilePath, {1}IsDirectory)", this.tablePrefix, this.parmPrefix);
  2122. foreach (var file in packageFiles)
  2123. {
  2124. using (var cmd = conn.CreateTextCommand(sqlQuery))
  2125. {
  2126. var parms = cmd.Parameters;
  2127. parms.Add(conn.CreateParameter(FormatParamName("PackageId"), file.PackageId));
  2128. parms.Add(conn.CreateParameter(FormatParamName("FileOrder"), file.FileOrder));
  2129. parms.Add(conn.CreateParameter(FormatParamName("FilePath"), file.FilePath));
  2130. parms.Add(conn.CreateParameter(FormatParamName("IsDirectory"), file.IsDirectory));
  2131. cmd.ExecuteNonQuery();
  2132. }
  2133. }
  2134. }
  2135. }
  2136. }
  2137. /// <summary>
  2138. /// Gets list of files for installed package
  2139. /// </summary>
  2140. /// <param name="packageId">Package ID</param>
  2141. /// <param name="version">Version</param>
  2142. /// <returns>List of files for installed package</returns>
  2143. public override List<PackageFile> FillPackageFiles(string packageId)
  2144. {
  2145. var files = new List<PackageFile>();
  2146. using (var conn = this.CreateConnection())
  2147. {
  2148. if (conn.HasConnection)
  2149. {
  2150. using (var cmd = conn.CreateTextCommand(string.Format("SELECT PackageId, FileOrder, FilePath, IsDirectory FROM {0}PackageFiles ", this.tablePrefix)))
  2151. {
  2152. using (var rdr = cmd.ExecuteReader())
  2153. {
  2154. while (rdr.Read())
  2155. {
  2156. var f = new PackageFile()
  2157. {
  2158. PackageId = rdr.GetString(0),
  2159. FileOrder = rdr.GetInt32(1),
  2160. FilePath = rdr.GetString(2),
  2161. IsDirectory = rdr.GetBoolean(3)
  2162. };
  2163. files.Add(f);
  2164. }
  2165. }
  2166. }
  2167. }
  2168. }
  2169. return files;
  2170. }
  2171. /// <summary>
  2172. /// Gets all installed from gallery packages
  2173. /// </summary>
  2174. /// <returns>List of installed packages</returns>
  2175. public override List<InstalledPackage> FillPackages()
  2176. {
  2177. var packages = new List<InstalledPackage>();
  2178. using (var conn = this.CreateConnection())
  2179. {
  2180. if (conn.HasConnection)
  2181. {
  2182. using (var cmd = conn.CreateTextCommand(string.Format("SELECT PackageId, Version FROM {0}Packages ", tablePrefix)))
  2183. {
  2184. using (var rdr = cmd.ExecuteReader())
  2185. {
  2186. while (rdr.Read())
  2187. {
  2188. var p = new InstalledPackage()
  2189. {
  2190. PackageId = rdr.GetString(0),
  2191. Version = rdr.GetString(1)
  2192. };
  2193. packages.Add(p);
  2194. }
  2195. }
  2196. }
  2197. }
  2198. }
  2199. return packages;
  2200. }
  2201. /// <summary>
  2202. /// Should delete package and remove all package files
  2203. /// </summary>
  2204. /// <param name="packageId">Package ID</param>
  2205. public override void DeletePackage(string packageId)
  2206. {
  2207. using (var conn = this.CreateConnection())
  2208. {
  2209. if (conn.HasConnection)
  2210. {
  2211. var sqlQuery = string.Format("DELETE FROM {0}PackageFiles WHERE PackageId = {1}PackageId", this.tablePrefix, this.parmPrefix);
  2212. using (var cmd = conn.CreateTextCommand(sqlQuery))
  2213. {
  2214. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("PackageId"), packageId));
  2215. cmd.ExecuteNonQuery();
  2216. }
  2217. sqlQuery = string.Format("DELETE FROM {0}Packages WHERE PackageId = {1}PackageId", this.tablePrefix, this.parmPrefix);
  2218. using (var cmd = conn.CreateTextCommand(sqlQuery))
  2219. {
  2220. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("PackageId"), packageId));
  2221. cmd.ExecuteNonQuery();
  2222. }
  2223. }
  2224. }
  2225. }
  2226. #endregion
  2227. /// <summary>
  2228. /// Returns a formatted parameter name to include this DbBlogProvider instance's paramPrefix.
  2229. /// </summary>
  2230. /// <param name="parameterName"></param>
  2231. /// <returns></returns>
  2232. private string FormatParamName(string parameterName)
  2233. {
  2234. return String.Format("{0}{1}", this.parmPrefix, parameterName);
  2235. }
  2236. #endregion
  2237. #region Methods
  2238. /// <summary>
  2239. /// The update categories.
  2240. /// </summary>
  2241. /// <param name="post">
  2242. /// The post to update.
  2243. /// </param>
  2244. /// <param name="conn">
  2245. /// The connection.
  2246. /// </param>
  2247. private void UpdateCategories(Post post, DbConnectionHelper conn)
  2248. {
  2249. var sqlQuery = string.Format("DELETE FROM {0}PostCategory WHERE BlogID = {1}blogid AND PostID = {1}id", this.tablePrefix, this.parmPrefix);
  2250. using (var cmd = conn.CreateTextCommand(sqlQuery))
  2251. {
  2252. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  2253. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("id"), post.Id.ToString()));
  2254. cmd.ExecuteNonQuery();
  2255. foreach (var cat in post.Categories)
  2256. {
  2257. cmd.CommandText = string.Format("INSERT INTO {0}PostCategory (BlogID, PostID, CategoryID) VALUES ({1}blogid, {1}id, {1}cat)", this.tablePrefix, this.parmPrefix);
  2258. cmd.Parameters.Clear();
  2259. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  2260. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("id"), post.Id.ToString()));
  2261. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("cat"), cat.Id.ToString()));
  2262. cmd.ExecuteNonQuery();
  2263. }
  2264. }
  2265. }
  2266. /// <summary>
  2267. /// The update comments.
  2268. /// </summary>
  2269. /// <param name="post">
  2270. /// The post to update.
  2271. /// </param>
  2272. /// <param name="conn">
  2273. /// The connection.
  2274. /// </param>
  2275. private void UpdateComments(Post post, DbConnectionHelper conn)
  2276. {
  2277. var sqlQuery = string.Format("DELETE FROM {0}PostComment WHERE BlogID = {1}blogid AND PostID = {1}id", this.tablePrefix, this.parmPrefix);
  2278. using (var cmd = conn.CreateTextCommand(sqlQuery))
  2279. {
  2280. var parms = cmd.Parameters;
  2281. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  2282. parms.Add(conn.CreateParameter(FormatParamName("id"), post.Id.ToString()));
  2283. cmd.ExecuteNonQuery();
  2284. foreach (var comment in post.AllComments)
  2285. {
  2286. sqlQuery = string.Format("INSERT INTO {0}PostComment (BlogID, PostCommentID, ParentCommentID, PostID, CommentDate, Author, Email, Website, Comment, Country, Ip, IsApproved, ModeratedBy, Avatar, IsSpam, IsDeleted) VALUES ({1}blogid, {1}postcommentid, {1}parentid, {1}id, {1}date, {1}author, {1}email, {1}website, {1}comment, {1}country, {1}ip, {1}isapproved, {1}moderatedby, {1}avatar, {1}isspam, {1}isdeleted)", this.tablePrefix, this.parmPrefix);
  2287. cmd.CommandText = sqlQuery;
  2288. parms.Clear();
  2289. parms.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  2290. parms.Add(conn.CreateParameter(FormatParamName("postcommentid"), comment.Id.ToString()));
  2291. parms.Add(conn.CreateParameter(FormatParamName("parentid"), comment.ParentId.ToString()));
  2292. parms.Add(conn.CreateParameter(FormatParamName("id"), post.Id.ToString()));
  2293. parms.Add(conn.CreateParameter(FormatParamName("date"), comment.DateCreated.AddHours(-BlogSettings.Instance.Timezone)));
  2294. parms.Add(conn.CreateParameter(FormatParamName("author"), comment.Author));
  2295. parms.Add(conn.CreateParameter(FormatParamName("email"), (comment.Email ?? string.Empty)));
  2296. parms.Add(conn.CreateParameter(FormatParamName("website"), (comment.Website == null ? string.Empty : comment.Website.ToString())));
  2297. parms.Add(conn.CreateParameter(FormatParamName("comment"), comment.Content));
  2298. parms.Add(conn.CreateParameter(FormatParamName("country"), (comment.Country ?? string.Empty)));
  2299. parms.Add(conn.CreateParameter(FormatParamName("ip"), (comment.IP ?? string.Empty)));
  2300. parms.Add(conn.CreateParameter(FormatParamName("isapproved"), comment.IsApproved));
  2301. parms.Add(conn.CreateParameter(FormatParamName("moderatedby"), (comment.ModeratedBy ?? string.Empty)));
  2302. parms.Add(conn.CreateParameter(FormatParamName("avatar"), (comment.Avatar ?? string.Empty)));
  2303. parms.Add(conn.CreateParameter(FormatParamName("isspam"), comment.IsSpam));
  2304. parms.Add(conn.CreateParameter(FormatParamName("isdeleted"), comment.IsDeleted));
  2305. cmd.ExecuteNonQuery();
  2306. }
  2307. }
  2308. }
  2309. /// <summary>
  2310. /// The update notify.
  2311. /// </summary>
  2312. /// <param name="post">
  2313. /// The post to update.
  2314. /// </param>
  2315. /// <param name="conn">
  2316. /// The connection.
  2317. /// </param>
  2318. private void UpdateNotify(Post post, DbConnectionHelper conn)
  2319. {
  2320. var sqlQuery = string.Format("DELETE FROM {0}PostNotify WHERE BlogID = {1}blogid AND PostID = {1}id", this.tablePrefix, this.parmPrefix);
  2321. using (var cmd = conn.CreateTextCommand(sqlQuery))
  2322. {
  2323. var parms = cmd.Parameters;
  2324. parms.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  2325. parms.Add(conn.CreateParameter(FormatParamName("id"), post.Id.ToString()));
  2326. cmd.ExecuteNonQuery();
  2327. foreach (var email in post.NotificationEmails)
  2328. {
  2329. cmd.CommandText = string.Format("INSERT INTO {0}PostNotify (BlogID, PostID, NotifyAddress) VALUES ({1}blogid, {1}id, {1}notify)", this.tablePrefix, this.parmPrefix);
  2330. parms.Clear();
  2331. parms.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  2332. parms.Add(conn.CreateParameter(FormatParamName("id"), post.Id.ToString()));
  2333. parms.Add(conn.CreateParameter(FormatParamName("notify"), email));
  2334. cmd.ExecuteNonQuery();
  2335. }
  2336. }
  2337. }
  2338. /// <summary>
  2339. /// The update tags.
  2340. /// </summary>
  2341. /// <param name="post">
  2342. /// The post to update.
  2343. /// </param>
  2344. /// <param name="conn">
  2345. /// The connection
  2346. /// </param>
  2347. private void UpdateTags(Post post, DbConnectionHelper conn)
  2348. {
  2349. var sqlQuery = string.Format("DELETE FROM {0}PostTag WHERE BlogID = {1}blogid AND PostID = {1}id", this.tablePrefix, this.parmPrefix);
  2350. using (var cmd = conn.CreateTextCommand(sqlQuery))
  2351. {
  2352. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  2353. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("id"), post.Id.ToString()));
  2354. cmd.ExecuteNonQuery();
  2355. foreach (var tag in post.Tags)
  2356. {
  2357. cmd.CommandText = string.Format("INSERT INTO {0}PostTag (BlogID, PostID, Tag) VALUES ({1}blogid, {1}id, {1}tag)", this.tablePrefix, this.parmPrefix);
  2358. cmd.Parameters.Clear();
  2359. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
  2360. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("id"), post.Id.ToString()));
  2361. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("tag"), tag));
  2362. cmd.ExecuteNonQuery();
  2363. }
  2364. }
  2365. }
  2366. /// <summary>
  2367. /// The add blog roll parameters to command.
  2368. /// </summary>
  2369. /// <param name="blogRollItem">
  2370. /// The blog roll item.
  2371. /// </param>
  2372. /// <param name="conn">
  2373. /// The connection.
  2374. /// </param>
  2375. /// <param name="cmd">
  2376. /// The command.
  2377. /// </param>
  2378. private void AddBlogRollParametersToCommand(
  2379. BlogRollItem blogRollItem, DbConnectionHelper conn, DbCommand cmd)
  2380. {
  2381. var parms = cmd.Parameters;
  2382. parms.Add(conn.CreateParameter(FormatParamName("BlogId"), Blog.CurrentInstance.Id.ToString()));
  2383. parms.Add(conn.CreateParameter(FormatParamName("BlogRollId"), blogRollItem.Id.ToString()));
  2384. parms.Add(conn.CreateParameter(FormatParamName("Title"), blogRollItem.Title));
  2385. parms.Add(conn.CreateParameter(FormatParamName("Description"), blogRollItem.Description));
  2386. parms.Add(conn.CreateParameter(FormatParamName("BlogUrl"), (blogRollItem.BlogUrl != null ? (object)blogRollItem.BlogUrl.ToString() : DBNull.Value)));
  2387. parms.Add(conn.CreateParameter(FormatParamName("FeedUrl"), (blogRollItem.FeedUrl != null ? (object)blogRollItem.FeedUrl.ToString() : DBNull.Value)));
  2388. parms.Add(conn.CreateParameter(FormatParamName("Xfn"), blogRollItem.Xfn));
  2389. parms.Add(conn.CreateParameter(FormatParamName("SortIndex"), blogRollItem.SortIndex));
  2390. }
  2391. /// <summary>
  2392. /// Adds blog parameters to command.
  2393. /// </summary>
  2394. /// <param name="blog">
  2395. /// The blog.
  2396. /// </param>
  2397. /// <param name="conn">
  2398. /// The connection.
  2399. /// </param>
  2400. /// <param name="cmd">
  2401. /// The command.
  2402. /// </param>
  2403. private void AddBlogParametersToCommand(
  2404. Blog blog, DbConnectionHelper conn, DbCommand cmd)
  2405. {
  2406. var parms = cmd.Parameters;
  2407. parms.Add(conn.CreateParameter(FormatParamName("BlogId"), blog.Id.ToString()));
  2408. parms.Add(conn.CreateParameter(FormatParamName("BlogName"), blog.Name ?? string.Empty));
  2409. parms.Add(conn.CreateParameter(FormatParamName("Hostname"), blog.Hostname ?? string.Empty));
  2410. parms.Add(conn.CreateParameter(FormatParamName("IsAnyTextBeforeHostnameAccepted"), blog.IsAnyTextBeforeHostnameAccepted));
  2411. parms.Add(conn.CreateParameter(FormatParamName("StorageContainerName"), blog.StorageContainerName));
  2412. parms.Add(conn.CreateParameter(FormatParamName("VirtualPath"), blog.VirtualPath ?? string.Empty));
  2413. parms.Add(conn.CreateParameter(FormatParamName("IsPrimary"), blog.IsPrimary));
  2414. parms.Add(conn.CreateParameter(FormatParamName("IsActive"), blog.IsActive));
  2415. }
  2416. /// <summary>
  2417. /// The add referrers parameters to command.
  2418. /// </summary>
  2419. /// <param name="referrer">
  2420. /// The referrer.
  2421. /// </param>
  2422. /// <param name="conn">
  2423. /// The connection.
  2424. /// </param>
  2425. /// <param name="cmd">
  2426. /// The command.
  2427. /// </param>
  2428. private void AddReferrersParametersToCommand(Referrer referrer, DbConnectionHelper conn, DbCommand cmd)
  2429. {
  2430. var parms = cmd.Parameters;
  2431. parms.Add(conn.CreateParameter("BlogId", Blog.CurrentInstance.Id.ToString()));
  2432. parms.Add(conn.CreateParameter("ReferrerId", referrer.Id.ToString()));
  2433. parms.Add(conn.CreateParameter(FormatParamName("ReferralDay"), referrer.Day));
  2434. parms.Add(conn.CreateParameter(FormatParamName("ReferrerUrl"), (referrer.ReferrerUrl != null ? (object)referrer.ReferrerUrl.ToString() : DBNull.Value)));
  2435. parms.Add(conn.CreateParameter(FormatParamName("ReferralCount"), referrer.Count));
  2436. parms.Add(conn.CreateParameter(FormatParamName("Url"), (referrer.Url != null ? (object)referrer.Url.ToString() : DBNull.Value)));
  2437. parms.Add(conn.CreateParameter(FormatParamName("IsSpam"), referrer.PossibleSpam));
  2438. }
  2439. /// <summary>
  2440. /// The delete old referrers.
  2441. /// </summary>
  2442. private void DeleteOldReferrers()
  2443. {
  2444. using (var conn = this.CreateConnection())
  2445. {
  2446. if (conn.HasConnection)
  2447. {
  2448. using (var cmd = conn.CreateTextCommand(string.Format("DELETE FROM {0}Referrers WHERE BlogId = {1}BlogId AND ReferralDay < {1}ReferralDay", this.tablePrefix, this.parmPrefix)))
  2449. {
  2450. var cutoff = DateTime.Today.AddDays(-BlogSettings.Instance.NumberOfReferrerDays);
  2451. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("BlogId"), Blog.CurrentInstance.Id.ToString()));
  2452. cmd.Parameters.Add(conn.CreateParameter(FormatParamName("ReferralDay"), cutoff));
  2453. cmd.ExecuteNonQuery();
  2454. }
  2455. }
  2456. }
  2457. }
  2458. #endregion
  2459. /// <summary>
  2460. /// Creates a new DbConnectionHelper for this DbBlogProvider instance.
  2461. /// </summary>
  2462. /// <returns></returns>
  2463. private DbConnectionHelper CreateConnection()
  2464. {
  2465. ConnectionStringSettings settings = ConfigurationManager.ConnectionStrings[this.connStringName];
  2466. return new DbConnectionHelper(settings);
  2467. }
  2468. }
  2469. }