PageRenderTime 54ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 1ms

/WEB/App_Code/BLL/SiteMap.cs

https://bitbucket.org/zzare/eko
C# | 467 lines | 309 code | 116 blank | 42 comment | 93 complexity | 9099f7a0700295cc754f83ff61b21442 MD5 | raw file
  1. using System;
  2. using System.Data;
  3. using System.Configuration;
  4. using System.Linq;
  5. using System.Web;
  6. using System.Web.Security;
  7. using System.Web.UI;
  8. using System.Web.UI.HtmlControls;
  9. using System.Web.UI.WebControls;
  10. using System.Web.UI.WebControls.WebParts;
  11. using System.Xml.Linq;
  12. using System.Data.Linq;
  13. using System.Data.Linq.Mapping ;
  14. using System.Reflection ;
  15. using System.Collections.Generic;
  16. using System.Linq.Expressions;
  17. /// <summary>
  18. /// Summary description for SiteMap
  19. /// </summary>
  20. public partial class SITEMAP
  21. {
  22. public static SITEMAP GetSiteMapByID(int id)
  23. {
  24. eMenikDataContext db = new eMenikDataContext();
  25. SITEMAP smap;
  26. smap = (from sm in db.SITEMAPs where sm.SMAP_ID == id select sm).SingleOrDefault();
  27. return smap;
  28. }
  29. public static SITEMAP GetSiteMapByID(int id, Guid pageid)
  30. {
  31. eMenikDataContext db = new eMenikDataContext();
  32. SITEMAP smap;
  33. smap = (from sm in db.SITEMAPs
  34. from m in db.MENUs
  35. from u in db.EM_USERs
  36. where sm.SMAP_ID == id && m.MENU_ID == sm.MENU_ID && u.USERNAME == m.USERNAME && u.UserId == pageid
  37. select sm).SingleOrDefault();
  38. return smap;
  39. }
  40. public static IEnumerable<SITEMAP> GetSiteMapChildsByID(int id)
  41. {
  42. eMenikDataContext db = new eMenikDataContext();
  43. IEnumerable<SITEMAP> smap;
  44. smap = from sm in db.SITEMAPs where sm.PARENT == id select sm;
  45. return smap;
  46. }
  47. public static IEnumerable<SITEMAP> GetSiteMapsByUserName(string username)
  48. {
  49. eMenikDataContext db = new eMenikDataContext();
  50. IEnumerable<SITEMAP> smap;
  51. smap = from sm in db.SITEMAPs join m in db.MENUs on sm.MENU_ID equals m.MENU_ID where m.USERNAME == username.ToLower() select sm;
  52. return smap;
  53. }
  54. public static int GetSiteMapCountByUserName(string username)
  55. {
  56. eMenikDataContext db = new eMenikDataContext();
  57. int count;
  58. count = (from sm in db.SITEMAPs join m in db.MENUs on sm.MENU_ID equals m.MENU_ID where m.USERNAME == username.ToLower() select 1).Count();
  59. return count -1;
  60. }
  61. public static IEnumerable<em_GetSitemapNavByParentByLangResult> GetSiteMapNavByParentByLang(int parent, string culID)
  62. {
  63. eMenikDataContext db = new eMenikDataContext();
  64. IEnumerable<em_GetSitemapNavByParentByLangResult> smap;
  65. smap = db.em_GetSitemapNavByParentByLang(parent, culID);
  66. return smap;
  67. }
  68. public static IEnumerable<em_GetSitemapNavByParentByLangEditCMSResult> GetSiteMapNavByParentByLangEditCMS(int parent, string culID)
  69. {
  70. eMenikDataContext db = new eMenikDataContext();
  71. IEnumerable<em_GetSitemapNavByParentByLangEditCMSResult> smap;
  72. smap = db.em_GetSitemapNavByParentByLangEditCMS(parent, culID);
  73. return smap;
  74. }
  75. public static IEnumerable<em_GetSitemapNavByParentByLangWWWResult> GetSiteMapNavByParentByLangWWW(int parent)
  76. {
  77. eMenikDataContext db = new eMenikDataContext();
  78. IEnumerable<em_GetSitemapNavByParentByLangWWWResult> smap;
  79. smap = db.em_GetSitemapNavByParentByLangWWW(parent, LANGUAGE.GetCurrentCulture());
  80. return smap;
  81. }
  82. public static IEnumerable<em_GetSitemapNavByParentByLangWWWResult> GetSiteMapNavByParentByLangWWWByCulture(int parent, string culture )
  83. {
  84. eMenikDataContext db = new eMenikDataContext();
  85. IEnumerable<em_GetSitemapNavByParentByLangWWWResult> smap;
  86. smap = db.em_GetSitemapNavByParentByLangWWW(parent, culture );
  87. return smap;
  88. }
  89. public static List<em_GetEmenikSitemapLang_HierarchyResult> GetSiteMapHierarchyByLang(string pageName, string culture)
  90. {
  91. eMenikDataContext db = new eMenikDataContext();
  92. return db.em_GetEmenikSitemapLang_Hierarchy(pageName, culture).ToList();
  93. }
  94. public static IEnumerable<em_GetEmenikSitemapLang_HierarchyResult> GetSiteMapHierarchyByLangByMenu(int menuID, string culture)
  95. {
  96. eMenikDataContext db = new eMenikDataContext();
  97. return db.em_GetEmenikSitemapLang_byMenuID_Hierarchy2(menuID, culture);
  98. }
  99. public static List<em_GetEmenikSitemapLangEx_HierarchyResult> GetSiteMapHierarchyByLangEx(string pageName, string culture)
  100. {
  101. eMenikDataContext db = new eMenikDataContext();
  102. return db.em_GetEmenikSitemapLangEx_Hierarchy(pageName, culture).ToList();
  103. }
  104. public static IEnumerable<em_GetEmenikSitemapLangEx_HierarchyResult> GetSiteMapHierarchyByLangExByMenu(int menuID, string culture)
  105. {
  106. eMenikDataContext db = new eMenikDataContext();
  107. return db.em_GetEmenikSitemapLangEx_byMenuID_Hierarchy2(menuID, culture);
  108. }
  109. public static IEnumerable<SITEMAP_LANG> GetSiteMapChildsByIDByLang(int id, string langID)
  110. {
  111. eMenikDataContext db = new eMenikDataContext();
  112. IEnumerable<SITEMAP_LANG> smap;
  113. smap = from sm in db.SITEMAP_LANGs from s in db.SITEMAPs where s.SMAP_ID == sm.SMAP_ID && sm.SITEMAP.PARENT == id && sm.LANG_ID==langID orderby s.SMAP_ORDER select sm;
  114. return smap;
  115. }
  116. public static IEnumerable<SITEMAP_LANG> GetSitemapLangsBySitemap(int smapID)
  117. {
  118. eMenikDataContext db = new eMenikDataContext();
  119. IEnumerable<SITEMAP_LANG> list = (from l in db.SITEMAP_LANGs from c in db.CULTUREs from u in db.EM_USER_CULTUREs from s in db.SITEMAPs from m in db.MENUs from emu in db.EM_USERs
  120. where l.SMAP_ID == smapID && l.LANG_ID == c.LANG_ID && c.LCID == u.LCID && u.UserId == emu.UserId && emu.USERNAME == m.USERNAME && m.MENU_ID == s.MENU_ID && s.SMAP_ID == l.SMAP_ID
  121. select l);
  122. return list;
  123. }
  124. public static SITEMAP_LANG GetSitemapLangByID(int smapID, string langID)
  125. {
  126. eMenikDataContext db = new eMenikDataContext();
  127. SITEMAP_LANG sl = db.SITEMAP_LANGs.SingleOrDefault(w => w.LANG_ID == langID && w.SMAP_ID == smapID);
  128. return sl;
  129. }
  130. public static IEnumerable<SITEMAP> GetSiteMapChildsByID(int id, int menuID)
  131. {
  132. eMenikDataContext db = new eMenikDataContext();
  133. IEnumerable<SITEMAP> smap;
  134. smap = from sm in db.SITEMAPs where sm.PARENT == id && sm.MENU_ID == menuID orderby sm.SMAP_ORDER select sm;
  135. return smap;
  136. }
  137. public static SITEMAP GetRootByMenu(int menuID)
  138. {
  139. eMenikDataContext db = new eMenikDataContext();
  140. SITEMAP smap;
  141. smap =(SITEMAP ) (from sm in db.SITEMAPs where sm.PARENT == -1 && sm.MENU_ID == menuID select sm).FirstOrDefault();
  142. return smap;
  143. }
  144. public static SITEMAP GetRootByPageName(string pageName)
  145. {
  146. eMenikDataContext db = new eMenikDataContext();
  147. SITEMAP smap;
  148. smap = (SITEMAP)(from sm in db.SITEMAPs join m in db.MENUs on sm.MENU_ID equals m.MENU_ID
  149. from em in db.EM_USERs
  150. where sm.PARENT == -1 && m.USERNAME == em.USERNAME && em.PAGE_NAME == pageName
  151. select sm).FirstOrDefault();
  152. return smap;
  153. }
  154. public static SITEMAP GetRootByAnySitemap(int smpID)
  155. {
  156. eMenikDataContext db = new eMenikDataContext();
  157. var smap = ( from sm in db.SITEMAPs
  158. let menuID = (from s in db.SITEMAPs where s.SMAP_ID == smpID select s.MENU_ID ).FirstOrDefault()
  159. where sm.PARENT == -1 && sm.MENU_ID == menuID select sm);
  160. return smap.FirstOrDefault();
  161. }
  162. public static string GetWWWurlBySitemapID(int sitemapID) {
  163. SITEMAP smp = GetSiteMapByID(sitemapID);
  164. if (smp == null) return "";
  165. if (smp.WWW_URL != null && !string.IsNullOrEmpty(smp.WWW_URL))
  166. return smp.WWW_URL ;
  167. return smp.PAGE_MODULE.WWW_URL.Replace("{}", sitemapID.ToString());
  168. }
  169. //public static IQueryable<Data.SitemapLang > GetSitemapLangs(int smapID, string langID, Expression expr)
  170. //{
  171. // eMenikDataContext db = new eMenikDataContext();
  172. // var list = from s in db.SITEMAPs
  173. // from sl in db.SITEMAP_LANGs
  174. // where s.SMAP_ID == smapID && sl.SMAP_ID == s.SMAP_ID && sl.LANG_ID == langID
  175. // select new Data.SitemapLang
  176. // {
  177. // SMAP_ID = s.SMAP_ID,
  178. // LANG_ID = sl.LANG_ID,
  179. // SMAP_GUID = s.SMAP_GUID,
  180. // MENU_ID = s.MENU_ID,
  181. // PARENT = s.PARENT,
  182. // PMOD_ID = s.PMOD_ID,
  183. // SML_ACTIVE = sl.SML_ACTIVE,
  184. // SML_DESC = sl.SML_DESC,
  185. // SML_KEYWORDS = sl.SML_KEYWORDS,
  186. // SML_META_DESC = sl.SML_META_DESC,
  187. // SML_ORDER = sl.SML_ORDER,
  188. // SML_TITLE = sl.SML_TITLE
  189. // };
  190. // return list;
  191. //}
  192. public static List<RuleViolation> AddSitemap(EM_USER em_user, string title, string lang, int parent)
  193. {
  194. List<RuleViolation> errlist = new List<RuleViolation>();
  195. // check if user has menus left
  196. if (em_user.SITEMAP_COUNT <= SITEMAP.GetSiteMapCountByUserName(em_user.USERNAME))
  197. {
  198. errlist.Add(new RuleViolation("* Trenutno imaš največje število dovoljenih menijev (" + em_user.SITEMAP_COUNT.ToString() + "). Če jih želiš imeti več, nas prosim kontaktiraj.", "SITEMAP_COUNT"));
  199. return errlist;
  200. }
  201. title = title.Trim();
  202. if (string.IsNullOrEmpty(title))
  203. title = "(nov meni)";
  204. eMenikDataContext db = new eMenikDataContext();
  205. // insert new sitemap
  206. SITEMAP s = new SITEMAP();
  207. SITEMAP p = SITEMAP.GetSiteMapByID (parent, em_user.UserId );
  208. if (p == null) {
  209. errlist.Add(new RuleViolation("* Napaka pri dodajanju.", "PageID"));
  210. return errlist;
  211. }
  212. s.MENU_ID = p.MENU_ID;
  213. s.PARENT = p.SMAP_ID;
  214. s.SMAP_GUID = Guid.NewGuid();
  215. s.PMOD_ID = SM.BLL.Common.PageModule.TwoColumn; // two column
  216. s.SMAP_TITLE = title;
  217. s.SMAP_ACTIVE = true;
  218. s.WWW_ROLES = "?,*";
  219. s.CMS_ROLES = "admin, em_cms";
  220. s.SMAP_ORDER = 100;
  221. s.WWW_VISIBLE = true;
  222. db.SITEMAPs.InsertOnSubmit(s);
  223. db.SubmitChanges();
  224. // get users languages
  225. List<LANGUAGE> langs = LANGUAGE.GetEmUsersLanguages(em_user.UserId).ToList();
  226. // add new item for each language
  227. foreach (LANGUAGE lan in langs){
  228. MENU.ChangeSitemapLang(s.SMAP_ID, s.SMAP_TITLE, lan.LANG_ID, false);
  229. }
  230. // remove menu cache for current user
  231. SM.EM.Caching.RemoveEmenikUserMenuCacheKey(em_user.PAGE_NAME );
  232. return errlist ;
  233. }
  234. partial void OnValidate(System.Data.Linq.ChangeAction action)
  235. {
  236. if (action == System.Data.Linq.ChangeAction.Delete)
  237. return;
  238. if (string.IsNullOrEmpty(this.SMAP_TITLE))
  239. throw new ArgumentException("Sitemap title must be set!");
  240. //if (this.PARENT <0)
  241. // throw new ArgumentException("PARENT title must be set!");
  242. }
  243. public static void DeleteSiteMapByID(int id)
  244. {
  245. eMenikDataContext db = new eMenikDataContext();
  246. SITEMAP smap;
  247. // delete all module content
  248. CONTENT.DeleteContentBySitemapID(id);
  249. ARTICLE.DeleteContentBySitemapID(id);
  250. // delete all CWPs
  251. CMS_WEB_PART.DeleteCWPsBySitemap(id);
  252. // delete simteap modules
  253. DeleteModulsForSitemapModule(id);
  254. // delete groups
  255. //MODULE_GROUP.DeleteGroupBySitemapID(id);
  256. // delete sitemap langs
  257. DeleteSiteMapLangsBySitemapID(id);
  258. // delete sitemap
  259. smap = (from sm in db.SITEMAPs where sm.SMAP_ID == id select sm).SingleOrDefault();
  260. db.SITEMAPs.DeleteOnSubmit(smap);
  261. db.SubmitChanges();
  262. }
  263. public static void DeleteSiteMapLangsBySitemapID(int id)
  264. {
  265. eMenikDataContext db = new eMenikDataContext();
  266. List<SITEMAP_LANG> smap;
  267. smap = (from sm in db.SITEMAP_LANGs where sm.SMAP_ID == id select sm).ToList() ;
  268. db.SITEMAP_LANGs.DeleteAllOnSubmit(smap);
  269. db.SubmitChanges();
  270. }
  271. public static List<SITEMAP_LANG> GetSitemapLangsForUser(Guid uid)
  272. {
  273. eMenikDataContext db = new eMenikDataContext();
  274. var cont = (from u in db.EM_USERs
  275. from uc in db.EM_USER_CULTUREs
  276. from c in db.CULTUREs
  277. from m in db.MENUs
  278. from sml in db.SITEMAP_LANGs
  279. from s in db.SITEMAPs
  280. where u.UserId == uid && uc.UserId == u.UserId && uc.DEFAULT == true && uc.ACTIVE == true && c.LCID == uc.LCID
  281. && m.USERNAME == u.USERNAME & s.MENU_ID == m.MENU_ID && s.SMAP_ACTIVE == true && sml.SMAP_ID == s.SMAP_ID && sml.LANG_ID == c.LANG_ID
  282. && sml.SML_ACTIVE == true
  283. orderby uc.DEFAULT descending , c.ORDER, s.SMAP_ORDER
  284. select sml );
  285. return cont.ToList();
  286. }
  287. // sitemap modules!!!
  288. public static IEnumerable<SITEMAP_MODULE> GetModulsForSitemapModuls(int smapID)
  289. {
  290. eMenikDataContext db = new eMenikDataContext();
  291. return db.SITEMAP_MODULEs.Where(pm => pm.SMAP_ID == smapID);
  292. }
  293. public static void DeleteModulsForSitemapModule(int smapID)
  294. {
  295. eMenikDataContext db = new eMenikDataContext();
  296. var smapMods = db.SITEMAP_MODULEs.Where(pm => pm.SMAP_ID == smapID);
  297. db.SITEMAP_MODULEs.DeleteAllOnSubmit(smapMods);
  298. db.SubmitChanges();
  299. }
  300. public static void UpdatePageModule(int smapID, int pageModule)
  301. {
  302. eMenikDataContext db = new eMenikDataContext();
  303. SITEMAP smap = db.SITEMAPs.SingleOrDefault(pm => pm.SMAP_ID == smapID);
  304. if (smap == null) return;
  305. smap.PMOD_ID = pageModule;
  306. db.SubmitChanges();
  307. // delete from cache
  308. SM.EM.BLL.BizObject.PurgeCacheItems(SM.EM.Caching.Key.PageModule(smapID));
  309. }
  310. public static void UpdateCustomClass(int smapID, string customclass)
  311. {
  312. eMenikDataContext db = new eMenikDataContext();
  313. SITEMAP smap = db.SITEMAPs.SingleOrDefault(pm => pm.SMAP_ID == smapID);
  314. if (smap == null) return;
  315. smap.CUSTOM_CLASS = customclass ;
  316. db.SubmitChanges();
  317. }
  318. public static void InsertSitemapLang(int smapID, string lang, string title, string desc, bool active, string metadesc, string keywords, int order)
  319. {
  320. eMenikDataContext db = new eMenikDataContext();
  321. SITEMAP_LANG r = db.SITEMAP_LANGs.SingleOrDefault(pm => pm.SMAP_ID == smapID && pm.LANG_ID == lang );
  322. if (r != null) return ;
  323. r = new SITEMAP_LANG ();
  324. r.SMAP_ID = smapID;
  325. r.LANG_ID = lang;
  326. r.SML_TITLE = title;
  327. r.SML_DESC= desc;
  328. r.SML_ACTIVE = active;
  329. r.SML_META_DESC = metadesc;
  330. r.SML_KEYWORDS = keywords;
  331. r.SML_ORDER = order;
  332. db.SITEMAP_LANGs.InsertOnSubmit(r);
  333. db.SubmitChanges();
  334. }
  335. public class Data {
  336. public class SitemapLang {
  337. public int SMAP_ID { get; set; }
  338. public string LANG_ID { get; set; }
  339. public string SML_TITLE { get; set; }
  340. public string SML_DESC { get; set; }
  341. public string SML_META_DESC { get; set; }
  342. public string SML_KEYWORDS { get; set; }
  343. public int SML_ORDER { get; set; }
  344. public bool SML_ACTIVE { get; set; }
  345. public int MENU_ID { get; set; }
  346. public Guid SMAP_GUID { get; set; }
  347. public int PMOD_ID { get; set; }
  348. public int? PARENT { get; set; }
  349. }
  350. }
  351. }