/projects/PigeonCms.Core/DAL/StaticPagesManager.cs

http://pigeoncms.googlecode.com/ · C# · 348 lines · 300 code · 35 blank · 13 comment · 15 complexity · 35ece841c9b5e68d7d21feefcd10a9b3 MD5 · raw file

  1. using System;
  2. using System.Data;
  3. using System.Configuration;
  4. using System.Web;
  5. using System.Web.Security;
  6. using System.Web.UI;
  7. using System.Web.UI.WebControls;
  8. using System.Web.UI.WebControls.WebParts;
  9. using System.Web.UI.HtmlControls;
  10. using System.ComponentModel;
  11. using System.Collections.Generic;
  12. using System.Diagnostics;
  13. using System.Threading;
  14. using System.Data.Common;
  15. using System.Text.RegularExpressions;
  16. namespace PigeonCms
  17. {
  18. /// <summary>
  19. /// DAL for StaticPage (in table staticPages)
  20. /// </summary>
  21. public class StaticPagesManager: TableManager<StaticPage, StaticPageFilter,string>, ITableManager
  22. {
  23. public const string DEFAULT_PAGE_NAME = "default";
  24. public StaticPagesManager()
  25. {
  26. this.TableName = "#__staticPages ";
  27. this.KeyFieldName = "PageName";
  28. }
  29. public override List<StaticPage> GetByFilter(StaticPageFilter filter, string sort)
  30. {
  31. DbProviderFactory myProv = Database.ProviderFactory;
  32. DbConnection myConn = myProv.CreateConnection();
  33. DbDataReader myRd = null;
  34. DbCommand myCmd = myConn.CreateCommand();
  35. string sSql;
  36. List<StaticPage> result = new List<StaticPage>();
  37. try
  38. {
  39. myConn.ConnectionString = Database.ConnString;
  40. myConn.Open();
  41. myCmd.Connection = myConn;
  42. sSql = "SELECT pageName FROM #__staticPages WHERE 1=1 ";
  43. if (!string.IsNullOrEmpty(filter.PageName))
  44. {
  45. sSql += " AND pageName = @pageName ";
  46. myCmd.Parameters.Add(Database.Parameter(myProv, "pageName", filter.PageName));
  47. }
  48. if (filter.Visible != Utility.TristateBool.NotSet)
  49. {
  50. sSql += " AND Visible = @Visible ";
  51. myCmd.Parameters.Add(Database.Parameter(myProv, "Visible", filter.Visible));
  52. }
  53. if (!string.IsNullOrEmpty(sort))
  54. {
  55. sSql += " ORDER BY " + sort;
  56. }
  57. else
  58. {
  59. sSql += " ORDER BY pageName ";
  60. }
  61. myCmd.CommandText = Database.ParseSql(sSql);
  62. myRd = myCmd.ExecuteReader();
  63. while (myRd.Read())
  64. {
  65. StaticPage item = GetStaticPageByName((string)myRd["pageName"]);
  66. result.Add(item);
  67. }
  68. myRd.Close();
  69. }
  70. finally
  71. {
  72. myConn.Dispose();
  73. }
  74. return result;
  75. }
  76. /// <summary>
  77. /// dictionary list to use in module admin area (combo)
  78. /// </summary>
  79. /// <returns></returns>
  80. public override Dictionary<string,string> GetList()
  81. {
  82. Dictionary<string, string> res = new Dictionary<string, string>();
  83. StaticPageFilter filter = new StaticPageFilter();
  84. List<StaticPage>list = GetByFilter(filter, "");
  85. foreach (StaticPage item in list)
  86. {
  87. res.Add(item.PageName, item.PageName);
  88. }
  89. return res;
  90. }
  91. /// <summary>
  92. /// Indica se la pageName esiste o no
  93. /// </summary>
  94. /// <param name="pageName"></param>
  95. /// <returns>true or false</returns>
  96. public static bool ExistPage(string pageName)
  97. {
  98. DbProviderFactory myProv = Database.ProviderFactory;
  99. DbConnection myConn = myProv.CreateConnection();
  100. DbDataReader myRd = null;
  101. DbCommand myCmd = myConn.CreateCommand();
  102. string sSql;
  103. bool result = false;
  104. if (pageName == null) pageName = "";
  105. try
  106. {
  107. myConn.ConnectionString = Database.ConnString;
  108. myConn.Open();
  109. myCmd.Connection = myConn;
  110. sSql = "SELECT pageName "
  111. + " FROM #__staticPages m "
  112. + " WHERE pageName = @pageName ";
  113. myCmd.CommandText = Database.ParseSql(sSql);
  114. myCmd.Parameters.Add(Database.Parameter(myProv, "pageName", pageName));
  115. myRd = myCmd.ExecuteReader();
  116. if (myRd.Read())
  117. {
  118. result = true;
  119. }
  120. myRd.Close();
  121. }
  122. finally
  123. {
  124. myConn.Dispose();
  125. }
  126. return result;
  127. }
  128. public StaticPage GetStaticPageByName(string pageName)
  129. {
  130. DbProviderFactory myProv = Database.ProviderFactory;
  131. DbConnection myConn = myProv.CreateConnection();
  132. DbDataReader myRd = null;
  133. DbCommand myCmd = myConn.CreateCommand();
  134. string sSql;
  135. StaticPage result = new StaticPage();
  136. try
  137. {
  138. myConn.ConnectionString = Database.ConnString;
  139. myConn.Open();
  140. myCmd.Connection = myConn;
  141. sSql = "SELECT pageName, visible, showPageTitle "
  142. + " FROM #__staticPages m "
  143. + " WHERE pageName = @pageName ";
  144. myCmd.CommandText = Database.ParseSql(sSql);
  145. myCmd.Parameters.Add(Database.Parameter(myProv, "pageName", pageName));
  146. myRd = myCmd.ExecuteReader(CommandBehavior.SingleRow);
  147. if (myRd.Read())
  148. {
  149. if (!Convert.IsDBNull(myRd["pageName"]))
  150. result.PageName = (string)myRd["pageName"];
  151. if (!Convert.IsDBNull(myRd["visible"]))
  152. result.Visible = (bool)myRd["visible"];
  153. if (!Convert.IsDBNull(myRd["showPageTitle"]))
  154. result.ShowPageTitle = (bool)myRd["showPageTitle"];
  155. }
  156. myRd.Close();
  157. //culture specific texts
  158. sSql = "SELECT cultureName, pageName, pageTitle, pageContent "
  159. + " FROM #__staticPages_Culture m "
  160. + " WHERE pageName=@pageName ";
  161. myCmd.CommandText = Database.ParseSql(sSql);
  162. myCmd.Parameters.Clear();
  163. myCmd.Parameters.Add(Database.Parameter(myProv, "pageName", pageName));
  164. myRd = myCmd.ExecuteReader();
  165. while (myRd.Read())
  166. {
  167. if (!Convert.IsDBNull(myRd["pageTitle"]))
  168. result.PageTitleTranslations.Add((string)myRd["cultureName"], (string)myRd["pageTitle"]);
  169. if (!Convert.IsDBNull(myRd["pageContent"]))
  170. result.PageContentTranslations.Add((string)myRd["cultureName"], (string)myRd["pageContent"]);
  171. }
  172. myRd.Close();
  173. }
  174. finally
  175. {
  176. myConn.Dispose();
  177. }
  178. return result;
  179. }
  180. public override int Update(StaticPage theObj)
  181. {
  182. DbProviderFactory myProv = Database.ProviderFactory;
  183. DbTransaction myTrans = null;
  184. DbConnection myConn = myProv.CreateConnection();
  185. DbCommand myCmd = myConn.CreateCommand();
  186. string sSql;
  187. int result = 0;
  188. try
  189. {
  190. myConn.ConnectionString = Database.ConnString;
  191. myConn.Open();
  192. myCmd.Connection = myConn;
  193. myTrans = myConn.BeginTransaction();
  194. myCmd.Transaction = myTrans;
  195. sSql = "UPDATE #__staticPages SET visible=@visible, "
  196. + " ShowPageTitle=@ShowPageTitle "
  197. + " WHERE pageName = @pageName";
  198. myCmd.CommandText = Database.ParseSql(sSql);
  199. myCmd.Parameters.Add(Database.Parameter(myProv, "pageName", theObj.PageName));
  200. myCmd.Parameters.Add(Database.Parameter(myProv, "visible", theObj.Visible));
  201. myCmd.Parameters.Add(Database.Parameter(myProv, "ShowPageTitle", theObj.ShowPageTitle));
  202. result = myCmd.ExecuteNonQuery();
  203. updateCultureText(theObj, myCmd, myProv);
  204. myTrans.Commit();
  205. }
  206. catch (Exception e)
  207. {
  208. myTrans.Rollback();
  209. throw e;
  210. }
  211. finally
  212. {
  213. myTrans.Dispose();
  214. myConn.Dispose();
  215. }
  216. return result;
  217. }
  218. public override StaticPage Insert(StaticPage newObj)
  219. {
  220. DbProviderFactory myProv = Database.ProviderFactory;
  221. DbTransaction myTrans = null;
  222. DbConnection myConn = myProv.CreateConnection();
  223. DbCommand myCmd = myConn.CreateCommand();
  224. string sSql;
  225. StaticPage result = new StaticPage();
  226. try
  227. {
  228. myConn.ConnectionString = Database.ConnString;
  229. myConn.Open();
  230. myCmd.Connection = myConn;
  231. myTrans = myConn.BeginTransaction();
  232. myCmd.Transaction = myTrans;
  233. result.PageName = newObj.PageName;
  234. result.PageTitleTranslations = newObj.PageTitleTranslations;
  235. result.PageContentTranslations = newObj.PageContentTranslations;
  236. result.Visible = newObj.Visible;
  237. result.ShowPageTitle = newObj.ShowPageTitle;
  238. sSql = "INSERT INTO #__staticPages(PageName, Visible, ShowPageTitle) "
  239. + "VALUES(@PageName, @Visible, @ShowPageTitle) ";
  240. myCmd.CommandText = Database.ParseSql(sSql);
  241. myCmd.Parameters.Add(Database.Parameter(myProv, "PageName", result.PageName));
  242. myCmd.Parameters.Add(Database.Parameter(myProv, "Visible", result.Visible));
  243. myCmd.Parameters.Add(Database.Parameter(myProv, "ShowPageTitle", result.ShowPageTitle));
  244. myCmd.ExecuteNonQuery();
  245. updateCultureText(result, myCmd, myProv);
  246. myTrans.Commit();
  247. }
  248. catch (Exception e)
  249. {
  250. myTrans.Rollback();
  251. throw e;
  252. }
  253. finally
  254. {
  255. myTrans.Dispose();
  256. myConn.Dispose();
  257. }
  258. return result;
  259. }
  260. public int Delete(string pageName)
  261. {
  262. DbProviderFactory myProv = Database.ProviderFactory;
  263. DbConnection myConn = myProv.CreateConnection();
  264. DbCommand myCmd = myProv.CreateCommand();
  265. string sSql;
  266. int res = 0;
  267. try
  268. {
  269. myConn.ConnectionString = Database.ConnString;
  270. myConn.Open();
  271. myCmd.Connection = myConn;
  272. sSql = "DELETE FROM #__staticPages WHERE pageName = @pageName ";
  273. myCmd.CommandText = Database.ParseSql(sSql);
  274. myCmd.Parameters.Add(Database.Parameter(myProv, "pageName", pageName));
  275. res = myCmd.ExecuteNonQuery();
  276. sSql = "DELETE FROM #__staticPages_Culture WHERE pageName = @pageName ";
  277. myCmd.CommandText = Database.ParseSql(sSql);
  278. myCmd.Parameters.Clear();
  279. myCmd.Parameters.Add(Database.Parameter(myProv, "pageName", pageName));
  280. myCmd.ExecuteNonQuery();
  281. }
  282. finally
  283. {
  284. myConn.Dispose();
  285. }
  286. return res;
  287. }
  288. private static void updateCultureText(StaticPage theObj, DbCommand myCmd, DbProviderFactory myProv)
  289. {
  290. string sSql = "";
  291. foreach (KeyValuePair<string, string> item in theObj.PageTitleTranslations)
  292. {
  293. string contentValue = "";
  294. theObj.PageContentTranslations.TryGetValue(item.Key, out contentValue);
  295. sSql = "DELETE FROM #__staticPages_Culture WHERE CultureName=@CultureName AND PageName=@PageName ";
  296. myCmd.CommandText = Database.ParseSql(sSql);
  297. myCmd.Parameters.Clear();
  298. myCmd.Parameters.Add(Database.Parameter(myProv, "CultureName", item.Key));
  299. myCmd.Parameters.Add(Database.Parameter(myProv, "PageName", theObj.PageName));
  300. myCmd.ExecuteNonQuery();
  301. sSql = "INSERT INTO #__staticPages_Culture(CultureName, PageName, PageTitle, PageContent) "
  302. + "VALUES(@CultureName, @PageName, @PageTitle, @PageContent) ";
  303. myCmd.CommandText = Database.ParseSql(sSql);
  304. myCmd.Parameters.Clear();
  305. myCmd.Parameters.Add(Database.Parameter(myProv, "CultureName", item.Key));
  306. myCmd.Parameters.Add(Database.Parameter(myProv, "PageName", theObj.PageName));
  307. myCmd.Parameters.Add(Database.Parameter(myProv, "PageTitle", item.Value));
  308. myCmd.Parameters.Add(Database.Parameter(myProv, "PageContent", contentValue));
  309. myCmd.ExecuteNonQuery();
  310. }
  311. }
  312. }
  313. }