/projects/PigeonCms.Core/DAL/CategoriesManager.cs

http://pigeoncms.googlecode.com/ · C# · 696 lines · 605 code · 61 blank · 30 comment · 83 complexity · 0264571577a9a0c5a2090c0cf78e31ec 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.IO;
  13. using System.Data.Common;
  14. using PigeonCms;
  15. using System.Diagnostics;
  16. namespace PigeonCms
  17. {
  18. /// <summary>
  19. /// DAL for categoria obj (in table categorie)
  20. /// </summary>
  21. public class CategoriesManager : TableManagerWithOrdering<Category, CategoriesFilter, int>, ITableManagerWithPermission
  22. {
  23. private bool checkUserContext = false;
  24. private bool writeMode = false;
  25. public bool CheckUserContext
  26. {
  27. get { return checkUserContext; }
  28. }
  29. public bool WriteMode
  30. {
  31. get { return writeMode; }
  32. }
  33. [DebuggerStepThrough()]
  34. public CategoriesManager(): this(false, false)
  35. { }
  36. public CategoriesManager(bool checkUserContext, bool writeMode)
  37. {
  38. this.TableName = "#__categories";
  39. this.KeyFieldName = "Id";
  40. this.checkUserContext = checkUserContext;
  41. this.writeMode = writeMode;
  42. if (this.writeMode) this.checkUserContext = true; //forced
  43. }
  44. public override Dictionary<string, string> GetList()
  45. {
  46. Dictionary<string, string> res = new Dictionary<string, string>();
  47. CategoriesFilter filter = new CategoriesFilter();
  48. List<Category> list = GetByFilter(filter, "SectionId");
  49. foreach (Category item in list)
  50. {
  51. string sectionTitle = "";
  52. sectionTitle = new SectionsManager().GetByKey(item.SectionId).Title;
  53. res.Add(item.Id.ToString(), sectionTitle + " > " + item.Title);
  54. }
  55. return res;
  56. }
  57. public override List<Category> GetByFilter(CategoriesFilter filter, string sort)
  58. {
  59. DbProviderFactory myProv = Database.ProviderFactory;
  60. DbConnection myConn = myProv.CreateConnection();
  61. DbDataReader myRd = null;
  62. DbCommand myCmd = myConn.CreateCommand();
  63. string sSql;
  64. List<Category> result = new List<Category>();
  65. var sectionsList = new List<Section>();
  66. try
  67. {
  68. myConn.ConnectionString = Database.ConnString;
  69. myConn.Open();
  70. myCmd.Connection = myConn;
  71. sSql = "SELECT t.Id, t.SectionId, t.ParentId, t.Enabled, "
  72. + " t.Ordering, t.DefaultImageName, "
  73. + " t.AccessType, t.PermissionId, t.AccessCode, t.AccessLevel, "
  74. + " t.WriteAccessType, t.WritePermissionId, t.WriteAccessCode, t.WriteAccessLevel, "
  75. + " sect.AccessType sectAccessType, sect.PermissionId sectPermissionId, "
  76. + " sect.AccessCode sectAccessCode, sect.AccessLevel sectAccessLevel, "
  77. + " sect.WriteAccessType sectWriteAccessType, sect.WritePermissionId sectWritePermissionId, "
  78. + " sect.WriteAccessCode sectWriteAccessCode, sect.WriteAccessLevel sectWriteAccessLevel "
  79. + " FROM [" + this.TableName + "] t "
  80. + " LEFT JOIN [" + this.TableName + "_Culture]c ON t.Id=c.CategoryId "
  81. + " LEFT JOIN #__sections sect ON t.SectionId = sect.Id "
  82. + " WHERE t.Id > 0 ";
  83. if (filter.Id > 0 || filter.Id == -1)
  84. {
  85. sSql += " AND t.Id = @Id ";
  86. myCmd.Parameters.Add(Database.Parameter(myProv, "Id", filter.Id));
  87. }
  88. if (filter.SectionId > 0 || filter.SectionId == -1)
  89. {
  90. sSql += " AND t.SectionId = @SectionId ";
  91. myCmd.Parameters.Add(Database.Parameter(myProv, "SectionId", filter.SectionId));
  92. }
  93. if (filter.ParentId > 0)
  94. {
  95. sSql += " AND t.ParentId = @ParentId ";
  96. myCmd.Parameters.Add(Database.Parameter(myProv, "ParentId", filter.ParentId));
  97. }
  98. //if (!string.IsNullOrEmpty(filter.Title))
  99. //{
  100. // sSql += " AND c.Title = @Title ";
  101. // myCmd.Parameters.Add(Database.Parameter(myProv, "Title", filter.Title));
  102. //}
  103. if (filter.Enabled != Utility.TristateBool.NotSet)
  104. {
  105. sSql += " AND t.Enabled = @Enabled ";
  106. myCmd.Parameters.Add(Database.Parameter(myProv, "Enabled", filter.Enabled));
  107. }
  108. if (!string.IsNullOrEmpty(filter.Alias))
  109. {
  110. sSql += " AND (replace(lower(c.title),' ','-') = @Alias) ";
  111. myCmd.Parameters.Add(Database.Parameter(myProv, "Alias", filter.Alias));
  112. }
  113. sSql += "GROUP BY t.Id, t.SectionId, t.ParentId, t.Enabled, "
  114. + " t.Ordering, t.DefaultImageName, "
  115. + " t.AccessType, t.PermissionId, t.AccessCode, t.AccessLevel, "
  116. + " t.WriteAccessType, t.WritePermissionId, t.WriteAccessCode, t.WriteAccessLevel, "
  117. + " sect.AccessType, sect.PermissionId, "
  118. + " sect.AccessCode, sect.AccessLevel, "
  119. + " sect.WriteAccessType, sect.WritePermissionId, "
  120. + " sect.WriteAccessCode, sect.WriteAccessLevel";
  121. if (!string.IsNullOrEmpty(sort))
  122. sSql += " ORDER BY " + sort;
  123. else
  124. sSql += " ORDER BY t.SectionId, t.Ordering ";
  125. myCmd.CommandText = Database.ParseSql(sSql);
  126. myRd = myCmd.ExecuteReader();
  127. while (myRd.Read())
  128. {
  129. var item = new Category();
  130. FillObject(item, myRd);
  131. result.Add(item);
  132. var sec = new Section();
  133. fillSection(sec, myRd);
  134. if (!sectionsList.Exists(
  135. delegate(Section s)
  136. {
  137. return s.Id == sec.Id;
  138. }))
  139. sectionsList.Add(sec);
  140. }
  141. myRd.Close();
  142. //(other loop to avoid multiple reader on same command)
  143. foreach (Category item in result)
  144. {
  145. //load read roles
  146. if (item.ReadPermissionId > 0 && item.ReadAccessType != MenuAccesstype.Public)
  147. item.ReadRolenames = new PermissionProvider().GetPermissionRoles(item.ReadPermissionId);
  148. //load write roles
  149. if (item.WritePermissionId > 0 && item.WriteAccessType != MenuAccesstype.Public)
  150. item.WriteRolenames = new PermissionProvider().GetPermissionRoles(item.WritePermissionId);
  151. }
  152. if (this.CheckUserContext)
  153. {
  154. result.RemoveAll(new PermissionProvider().IsItemNotAllowed);
  155. if (this.WriteMode)
  156. result.RemoveAll(new PermissionProvider().IsItemNotAllowedForWrite);
  157. //check parent sections
  158. loadSectionsRoles(sectionsList);
  159. sectionsList.RemoveAll(new PermissionProvider().IsItemNotAllowed);
  160. if (this.WriteMode)
  161. sectionsList.RemoveAll(new PermissionProvider().IsItemNotAllowedForWrite);
  162. //remove items for not allowed sections
  163. result.RemoveAll(new SectionPredicate(sectionsList).IsItemNotInSection);
  164. }
  165. //culture specifics
  166. foreach (var item in result)
  167. {
  168. getCultureSpecific(item, myRd, myCmd, myProv);
  169. }
  170. }
  171. finally
  172. {
  173. myConn.Dispose();
  174. }
  175. return result;
  176. }
  177. public Category GetByAlias(string alias)
  178. {
  179. var result = new Category();
  180. var resultList = new List<Category>();
  181. var filter = new CategoriesFilter();
  182. filter.Alias = alias;
  183. resultList = GetByFilter(filter, "");
  184. if (resultList.Count > 0)
  185. result = resultList[0];
  186. return result;
  187. }
  188. public override Category GetByKey(int id)
  189. {
  190. var result = new Category();
  191. var resultList = new List<Category>();
  192. var filter = new CategoriesFilter();
  193. filter.Id = id;
  194. resultList = GetByFilter(filter, "");
  195. if (resultList.Count > 0)
  196. result = resultList[0];
  197. return result;
  198. }
  199. public override int Update(Category theObj)
  200. {
  201. DbProviderFactory myProv = Database.ProviderFactory;
  202. DbTransaction myTrans = null;
  203. DbConnection myConn = myProv.CreateConnection();
  204. DbCommand myCmd = myConn.CreateCommand();
  205. string sSql;
  206. int result = 0;
  207. if (theObj.Ordering == 0)
  208. {
  209. theObj.Ordering = this.GetNextOrdering();
  210. }
  211. try
  212. {
  213. //fill ReadPermissionId and WritePermissionId before trans
  214. new PermissionProvider().UpdatePermissionObj(theObj);
  215. myConn.ConnectionString = Database.ConnString;
  216. myConn.Open();
  217. myCmd.Connection = myConn;
  218. myTrans = myConn.BeginTransaction();
  219. myCmd.Transaction = myTrans;
  220. sSql = "UPDATE [" + this.TableName + "] "
  221. + " SET SectionId=@SectionId, ParentId=@ParentId, Enabled=@Enabled, "
  222. + " Ordering=@Ordering, DefaultImageName=@DefaultImageName, "
  223. + " AccessType=@AccessType, PermissionId=@PermissionId, "
  224. + " [AccessCode]=@AccessCode, AccessLevel=@AccessLevel, "
  225. + " WriteAccessType=@WriteAccessType, WritePermissionId=@WritePermissionId, "
  226. + " [WriteAccessCode]=@WriteAccessCode, WriteAccessLevel=@WriteAccessLevel "
  227. + " WHERE Id = @Id";
  228. myCmd.CommandText = Database.ParseSql(sSql);
  229. myCmd.Parameters.Add(Database.Parameter(myProv, "Id", theObj.Id));
  230. myCmd.Parameters.Add(Database.Parameter(myProv, "SectionId", theObj.SectionId));
  231. myCmd.Parameters.Add(Database.Parameter(myProv, "ParentId", theObj.ParentId));
  232. myCmd.Parameters.Add(Database.Parameter(myProv, "Enabled", theObj.Enabled));
  233. myCmd.Parameters.Add(Database.Parameter(myProv, "Ordering", theObj.Ordering));
  234. myCmd.Parameters.Add(Database.Parameter(myProv, "DefaultImageName", theObj.DefaultImageName));
  235. //read permissions
  236. myCmd.Parameters.Add(Database.Parameter(myProv, "AccessType", theObj.ReadAccessType));
  237. myCmd.Parameters.Add(Database.Parameter(myProv, "PermissionId", theObj.ReadPermissionId));
  238. myCmd.Parameters.Add(Database.Parameter(myProv, "AccessCode", theObj.ReadAccessCode));
  239. myCmd.Parameters.Add(Database.Parameter(myProv, "AccessLevel", theObj.ReadAccessLevel));
  240. //write permissions
  241. myCmd.Parameters.Add(Database.Parameter(myProv, "WriteAccessType", theObj.WriteAccessType));
  242. myCmd.Parameters.Add(Database.Parameter(myProv, "WritePermissionId", theObj.WritePermissionId));
  243. myCmd.Parameters.Add(Database.Parameter(myProv, "WriteAccessCode", theObj.WriteAccessCode));
  244. myCmd.Parameters.Add(Database.Parameter(myProv, "WriteAccessLevel", theObj.WriteAccessLevel));
  245. result = myCmd.ExecuteNonQuery();
  246. updateCultureText(theObj, myCmd, myProv);
  247. myTrans.Commit();
  248. }
  249. catch (Exception e)
  250. {
  251. myTrans.Rollback();
  252. throw e;
  253. }
  254. finally
  255. {
  256. myTrans.Dispose();
  257. myConn.Dispose();
  258. }
  259. return result;
  260. }
  261. public override Category Insert(Category newObj)
  262. {
  263. DbProviderFactory myProv = Database.ProviderFactory;
  264. DbTransaction myTrans = null;
  265. DbConnection myConn = myProv.CreateConnection();
  266. DbCommand myCmd = myConn.CreateCommand();
  267. string sSql;
  268. Category result = new Category();
  269. try
  270. {
  271. //create read/write permission
  272. new PermissionProvider().CreatePermissionObj(newObj);
  273. myConn.ConnectionString = Database.ConnString;
  274. myConn.Open();
  275. myCmd.Connection = myConn;
  276. myTrans = myConn.BeginTransaction();
  277. myCmd.Transaction = myTrans;
  278. result = newObj;
  279. result.Id = base.GetNextId();
  280. result.Ordering = base.GetNextOrdering();
  281. sSql = "INSERT INTO [" + this.TableName + "](Id, SectionId, ParentId, Enabled, Ordering, DefaultImageName, "
  282. + " AccessType, PermissionId, AccessCode, AccessLevel, "
  283. + " WriteAccessType, WritePermissionId, WriteAccessCode, WriteAccessLevel) "
  284. + " VALUES(@Id, @SectionId, @ParentId, @Enabled, @Ordering, @DefaultImageName, "
  285. + " @AccessType, @PermissionId, @AccessCode, @AccessLevel, "
  286. + " @WriteAccessType, @WritePermissionId, @WriteAccessCode, @WriteAccessLevel) ";
  287. myCmd.CommandText = Database.ParseSql(sSql);
  288. myCmd.Parameters.Add(Database.Parameter(myProv, "Id", result.Id));
  289. myCmd.Parameters.Add(Database.Parameter(myProv, "SectionId", result.SectionId));
  290. myCmd.Parameters.Add(Database.Parameter(myProv, "ParentId", result.ParentId));
  291. myCmd.Parameters.Add(Database.Parameter(myProv, "Enabled", result.Enabled));
  292. myCmd.Parameters.Add(Database.Parameter(myProv, "Ordering", result.Ordering));
  293. myCmd.Parameters.Add(Database.Parameter(myProv, "DefaultImageName", result.DefaultImageName));
  294. //read permissions
  295. myCmd.Parameters.Add(Database.Parameter(myProv, "AccessType", (int)result.ReadAccessType));
  296. myCmd.Parameters.Add(Database.Parameter(myProv, "PermissionId", result.ReadPermissionId));
  297. myCmd.Parameters.Add(Database.Parameter(myProv, "AccessCode", (string)result.ReadAccessCode));
  298. myCmd.Parameters.Add(Database.Parameter(myProv, "AccessLevel", (int)result.ReadAccessLevel));
  299. //write permissions
  300. myCmd.Parameters.Add(Database.Parameter(myProv, "WriteAccessType", (int)result.WriteAccessType));
  301. myCmd.Parameters.Add(Database.Parameter(myProv, "WritePermissionId", result.WritePermissionId));
  302. myCmd.Parameters.Add(Database.Parameter(myProv, "WriteAccessCode", (string)result.WriteAccessCode));
  303. myCmd.Parameters.Add(Database.Parameter(myProv, "WriteAccessLevel", (int)result.WriteAccessLevel));
  304. myCmd.ExecuteNonQuery();
  305. updateCultureText(result, myCmd, myProv);
  306. myTrans.Commit();
  307. }
  308. catch (Exception e)
  309. {
  310. myTrans.Rollback();
  311. throw e;
  312. }
  313. finally
  314. {
  315. myTrans.Dispose();
  316. myConn.Dispose();
  317. }
  318. return result;
  319. }
  320. public int DeleteById(int id, bool deleteChilds)
  321. {
  322. DbProviderFactory myProv = Database.ProviderFactory;
  323. DbTransaction myTrans = null;
  324. DbConnection myConn = myProv.CreateConnection();
  325. DbCommand myCmd = myProv.CreateCommand();
  326. string sSql;
  327. int res = 0;
  328. if (!deleteChilds && this.hasChilds(id))
  329. {
  330. throw new ArgumentException("current obj has childs");
  331. }
  332. try
  333. {
  334. var currObj = this.GetByKey(id);
  335. if (deleteChilds && id > 0)
  336. {
  337. //delete all its items
  338. var itemsManager = new ItemsManager<Item, ItemsFilter>();
  339. var itemsFilter = new ItemsFilter();
  340. itemsFilter.CategoryId = id;
  341. var itemsList = itemsManager.GetByFilter(itemsFilter, "");
  342. foreach (var item in itemsList)
  343. {
  344. itemsManager.DeleteById(item.Id);
  345. }
  346. }
  347. currObj.DeleteImages();
  348. currObj.DeleteFiles();
  349. new PermissionProvider().RemovePermissionById(currObj.ReadPermissionId);
  350. new PermissionProvider().RemovePermissionById(currObj.WritePermissionId);
  351. myConn.ConnectionString = Database.ConnString;
  352. myConn.Open();
  353. myCmd.Connection = myConn;
  354. myTrans = myConn.BeginTransaction();
  355. myCmd.Transaction = myTrans;
  356. sSql = "DELETE FROM [" + this.TableName + "] WHERE Id = @Id ";
  357. myCmd.CommandText = Database.ParseSql(sSql);
  358. myCmd.Parameters.Add(Database.Parameter(myProv, "Id", id));
  359. res = myCmd.ExecuteNonQuery();
  360. sSql = "DELETE FROM [" + this.TableName + "_Culture] WHERE CategoryId = @CategoryId ";
  361. myCmd.CommandText = Database.ParseSql(sSql);
  362. myCmd.Parameters.Clear();
  363. myCmd.Parameters.Add(Database.Parameter(myProv, "CategoryId", id));
  364. myCmd.ExecuteNonQuery();
  365. myTrans.Commit();
  366. }
  367. catch (Exception e)
  368. {
  369. myTrans.Rollback();
  370. throw e;
  371. }
  372. finally
  373. {
  374. myTrans.Dispose();
  375. myConn.Dispose();
  376. }
  377. return res;
  378. }
  379. public override int DeleteById(int id)
  380. {
  381. return this.DeleteById(id, false);
  382. }
  383. private class SectionPredicate
  384. {
  385. private List<Section> list = null;
  386. public SectionPredicate(List<Section> list)
  387. {
  388. this.list = list;
  389. }
  390. public bool IsItemNotInSection(Category item)
  391. {
  392. foreach (var s in list)
  393. if (s.Id == item.SectionId) return false;
  394. return true;
  395. }
  396. }
  397. private void loadSectionsRoles(List<Section> list)
  398. {
  399. foreach (var item in list)
  400. {
  401. //load read roles
  402. if (item.ReadPermissionId > 0 && item.ReadAccessType != MenuAccesstype.Public)
  403. item.ReadRolenames = new PermissionProvider().GetPermissionRoles(item.ReadPermissionId);
  404. //load write roles
  405. if (item.WritePermissionId > 0 && item.WriteAccessType != MenuAccesstype.Public)
  406. item.WriteRolenames = new PermissionProvider().GetPermissionRoles(item.WritePermissionId);
  407. }
  408. }
  409. private void fillSection(Section result, DbDataReader myRd)
  410. {
  411. if (!Convert.IsDBNull(myRd["SectionId"]))
  412. result.Id = (int)myRd["SectionId"];
  413. //read permissions
  414. if (!Convert.IsDBNull(myRd["SectAccessType"]))
  415. result.ReadAccessType = (MenuAccesstype)int.Parse(myRd["SectAccessType"].ToString());
  416. if (!Convert.IsDBNull(myRd["SectPermissionId"]))
  417. result.ReadPermissionId = (int)myRd["SectPermissionId"];
  418. if (!Convert.IsDBNull(myRd["SectAccessCode"]))
  419. result.ReadAccessCode = (string)myRd["SectAccessCode"];
  420. if (!Convert.IsDBNull(myRd["SectAccessLevel"]))
  421. result.ReadAccessLevel = (int)myRd["SectAccessLevel"];
  422. //write permissions
  423. if (!Convert.IsDBNull(myRd["SectWriteAccessType"]))
  424. result.WriteAccessType = (MenuAccesstype)int.Parse(myRd["SectWriteAccessType"].ToString());
  425. if (!Convert.IsDBNull(myRd["SectWritePermissionId"]))
  426. result.WritePermissionId = (int)myRd["SectWritePermissionId"];
  427. if (!Convert.IsDBNull(myRd["SectWriteAccessCode"]))
  428. result.WriteAccessCode = (string)myRd["SectWriteAccessCode"];
  429. if (!Convert.IsDBNull(myRd["SectWriteAccessLevel"]))
  430. result.WriteAccessLevel = (int)myRd["SectWriteAccessLevel"];
  431. }
  432. protected override void FillObject(Category result, DbDataReader myRd)
  433. {
  434. if (!Convert.IsDBNull(myRd["Id"]))
  435. result.Id = (int)myRd["Id"];
  436. if (!Convert.IsDBNull(myRd["SectionId"]))
  437. result.SectionId = (int)myRd["SectionId"];
  438. if (!Convert.IsDBNull(myRd["ParentId"]))
  439. result.ParentId = (int)myRd["ParentId"];
  440. if (!Convert.IsDBNull(myRd["Enabled"]))
  441. result.Enabled = (bool)myRd["Enabled"];
  442. if (!Convert.IsDBNull(myRd["Ordering"]))
  443. result.Ordering = (int)myRd["Ordering"];
  444. if (!Convert.IsDBNull(myRd["DefaultImageName"]))
  445. result.DefaultImageName = myRd["DefaultImageName"].ToString();
  446. //read permissions
  447. if (!Convert.IsDBNull(myRd["AccessType"]))
  448. result.ReadAccessType = (MenuAccesstype)int.Parse(myRd["AccessType"].ToString());
  449. if (!Convert.IsDBNull(myRd["PermissionId"]))
  450. result.ReadPermissionId = (int)myRd["PermissionId"];
  451. if (!Convert.IsDBNull(myRd["AccessCode"]))
  452. result.ReadAccessCode = (string)myRd["AccessCode"];
  453. if (!Convert.IsDBNull(myRd["AccessLevel"]))
  454. result.ReadAccessLevel = (int)myRd["AccessLevel"];
  455. //write permissions
  456. if (!Convert.IsDBNull(myRd["WriteAccessType"]))
  457. result.WriteAccessType = (MenuAccesstype)int.Parse(myRd["WriteAccessType"].ToString());
  458. if (!Convert.IsDBNull(myRd["WritePermissionId"]))
  459. result.WritePermissionId = (int)myRd["WritePermissionId"];
  460. if (!Convert.IsDBNull(myRd["WriteAccessCode"]))
  461. result.WriteAccessCode = (string)myRd["WriteAccessCode"];
  462. if (!Convert.IsDBNull(myRd["WriteAccessLevel"]))
  463. result.WriteAccessLevel = (int)myRd["WriteAccessLevel"];
  464. }
  465. protected override int GetPreviousRecordInOrder(int ordering, int currentRecordId)
  466. {
  467. DbProviderFactory myProv = Database.ProviderFactory;
  468. DbConnection myConn = myProv.CreateConnection();
  469. DbDataReader myRd = null;
  470. DbCommand myCmd = myConn.CreateCommand();
  471. string sSql;
  472. int result = currentRecordId;
  473. try
  474. {
  475. var o1 = new PigeonCms.Category();
  476. o1 = this.GetByKey(currentRecordId);
  477. myConn.ConnectionString = Database.ConnString;
  478. myConn.Open();
  479. myCmd.Connection = myConn;
  480. sSql = "SELECT TOP 1 t.Id "
  481. + " FROM [" + this.TableName + "] t "
  482. + " LEFT JOIN #__sections sect ON t.SectionId = sect.Id "
  483. + " WHERE t.Ordering < @Ordering "
  484. + " AND t.SectionId = @SectionId "
  485. + " ORDER BY t.Ordering DESC ";
  486. myCmd.CommandText = Database.ParseSql(sSql);
  487. myCmd.Parameters.Add(Database.Parameter(myProv, "Ordering", ordering));
  488. myCmd.Parameters.Add(Database.Parameter(myProv, "SectionId", o1.Section.Id));
  489. myRd = myCmd.ExecuteReader();
  490. if (myRd.Read())
  491. {
  492. if (myRd[0] != DBNull.Value)
  493. {
  494. result = (int)myRd[0];
  495. }
  496. }
  497. myRd.Close();
  498. //se nn trovo un record prendo quello precedente per chiave (per init tabella)
  499. if (result == 0)
  500. {
  501. sSql = "SELECT TOP 1 [Id] FROM " + TableName
  502. + " WHERE [" + KeyFieldName + "] < @currentRecordId ORDER BY t.Ordering ASC ";
  503. myCmd.CommandText = Database.ParseSql(sSql);
  504. myCmd.Parameters.Add(Database.Parameter(myProv, "currentRecordId", currentRecordId));
  505. myRd = myCmd.ExecuteReader();
  506. if (myRd.Read())
  507. {
  508. if (myRd[0] != DBNull.Value)
  509. {
  510. result = (int)myRd[0];
  511. }
  512. }
  513. myRd.Close();
  514. }
  515. }
  516. finally
  517. {
  518. myConn.Dispose();
  519. }
  520. return result;
  521. }
  522. protected override int GetNextRecordInOrder(int ordering, int currentRecordId)
  523. {
  524. DbProviderFactory myProv = Database.ProviderFactory;
  525. DbConnection myConn = myProv.CreateConnection();
  526. DbDataReader myRd = null;
  527. DbCommand myCmd = myConn.CreateCommand();
  528. string sSql;
  529. int result = currentRecordId;
  530. try
  531. {
  532. var o1 = new PigeonCms.Category();
  533. o1 = this.GetByKey(currentRecordId);
  534. myConn.ConnectionString = Database.ConnString;
  535. myConn.Open();
  536. myCmd.Connection = myConn;
  537. sSql = "SELECT TOP 1 t.Id "
  538. + " FROM [" + this.TableName + "] t "
  539. + " LEFT JOIN #__sections sect ON t.SectionId = sect.Id "
  540. + " WHERE t.Ordering > @Ordering "
  541. + " AND t.SectionId = @SectionId "
  542. + " ORDER BY t.Ordering ASC ";
  543. myCmd.CommandText = Database.ParseSql(sSql);
  544. myCmd.Parameters.Add(Database.Parameter(myProv, "Ordering", ordering));
  545. myCmd.Parameters.Add(Database.Parameter(myProv, "SectionId", o1.Section.Id));
  546. myRd = myCmd.ExecuteReader();
  547. if (myRd.Read())
  548. {
  549. if (myRd[0] != DBNull.Value)
  550. {
  551. result = (int)myRd[0];
  552. }
  553. }
  554. myRd.Close();
  555. //se nn trovo un record prendo quello successivo per chiave (per init tabella)
  556. if (result == currentRecordId)
  557. {
  558. sSql = "SELECT TOP 1 [Id] FROM " + TableName
  559. + " WHERE [" + KeyFieldName + "] > @currentRecordId ORDER BY Ordering, [" + KeyFieldName + "] ";
  560. myCmd.CommandText = Database.ParseSql(sSql);
  561. myCmd.Parameters.Add(Database.Parameter(myProv, "currentRecordId", currentRecordId));
  562. myRd = myCmd.ExecuteReader();
  563. if (myRd.Read())
  564. {
  565. if (myRd[0] != DBNull.Value)
  566. {
  567. result = (int)myRd[0];
  568. }
  569. }
  570. myRd.Close();
  571. }
  572. }
  573. finally
  574. {
  575. myConn.Dispose();
  576. }
  577. return result;
  578. }
  579. private bool hasChilds(int categoryId)
  580. {
  581. bool res = false;
  582. var man = new ItemsManager<Item, ItemsFilter>();
  583. var filter = new ItemsFilter();
  584. filter.CategoryId = categoryId;
  585. if (man.GetByFilter(filter, "").Count > 0)
  586. res = true;
  587. return res;
  588. }
  589. private void getCultureSpecific(Category result, DbDataReader myRd,
  590. DbCommand myCmd, DbProviderFactory myProv)
  591. {
  592. string sSql;
  593. //culture specific
  594. sSql = "SELECT CultureName, CategoryId, Title, Description "
  595. + " FROM [" + this.TableName + "_culture] t "
  596. + " WHERE CategoryId = @CategoryId ";
  597. myCmd.CommandText = Database.ParseSql(sSql);
  598. myCmd.Parameters.Clear();
  599. myCmd.Parameters.Add(Database.Parameter(myProv, "CategoryId", result.Id));
  600. myRd = myCmd.ExecuteReader();
  601. while (myRd.Read())
  602. {
  603. if (!Convert.IsDBNull(myRd["Title"]))
  604. result.TitleTranslations.Add((string)myRd["cultureName"], (string)myRd["Title"]);
  605. if (!Convert.IsDBNull(myRd["Description"]))
  606. result.DescriptionTranslations.Add((string)myRd["cultureName"], (string)myRd["Description"]);
  607. }
  608. myRd.Close();
  609. }
  610. private void updateCultureText(Category theObj, DbCommand myCmd, DbProviderFactory myProv)
  611. {
  612. string sSql = "";
  613. foreach (KeyValuePair<string, string> item in theObj.TitleTranslations)
  614. {
  615. string descriptionValue = "";
  616. theObj.DescriptionTranslations.TryGetValue(item.Key, out descriptionValue);
  617. sSql = "DELETE FROM [" + this.TableName + "_culture] WHERE CultureName=@CultureName AND CategoryId=@CategoryId ";
  618. myCmd.CommandText = Database.ParseSql(sSql);
  619. myCmd.Parameters.Clear();
  620. myCmd.Parameters.Add(Database.Parameter(myProv, "CultureName", item.Key));
  621. myCmd.Parameters.Add(Database.Parameter(myProv, "CategoryId", theObj.Id));
  622. myCmd.ExecuteNonQuery();
  623. sSql = "INSERT INTO [" + this.TableName + "_culture](CultureName, CategoryId, Title, Description) "
  624. + " VALUES(@CultureName, @CategoryId, @Title, @Description) ";
  625. myCmd.CommandText = Database.ParseSql(sSql);
  626. myCmd.Parameters.Clear();
  627. myCmd.Parameters.Add(Database.Parameter(myProv, "CultureName", item.Key));
  628. myCmd.Parameters.Add(Database.Parameter(myProv, "CategoryId", theObj.Id));
  629. myCmd.Parameters.Add(Database.Parameter(myProv, "Title", item.Value));
  630. myCmd.Parameters.Add(Database.Parameter(myProv, "Description", descriptionValue));
  631. myCmd.ExecuteNonQuery();
  632. }
  633. }
  634. }
  635. }