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

/CmsWeb/Models/HomeModel.cs

https://bitbucket.org/rbhakser/bvcms
C# | 303 lines | 285 code | 18 blank | 0 comment | 57 complexity | 550fbe4f844854bbb4bd5bac6573df2c MD5 | raw file
Possible License(s): CC-BY-SA-3.0, Apache-2.0, BSD-3-Clause, AGPL-3.0, MPL-2.0-no-copyleft-exception
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Collections;
  4. using System.Linq;
  5. using System.Data.Linq;
  6. using System.Web;
  7. using CmsData;
  8. using UtilityExtensions;
  9. using System.Web.Mvc;
  10. using System.Text;
  11. using System.Net.Mail;
  12. using System.Web.UI.WebControls;
  13. using System.Web.UI;
  14. using System.Data.Linq.SqlClient;
  15. using System.Net;
  16. using System.IO;
  17. using System.Xml.Linq;
  18. using System.ServiceModel.Syndication;
  19. using System.Xml;
  20. using CmsData.Codes;
  21. namespace CmsWeb.Models
  22. {
  23. public class HomeModel
  24. {
  25. public class BirthdayInfo
  26. {
  27. public DateTime Birthday { get; set; }
  28. public string Name { get; set; }
  29. public int PeopleId { get; set; }
  30. }
  31. public IEnumerable<BirthdayInfo> Birthdays()
  32. {
  33. var up = DbUtil.Db.CurrentUserPerson;
  34. if (up == null)
  35. return new List<BirthdayInfo>();
  36. var n = UtilityExtensions.Util.Now;
  37. var tag = DbUtil.Db.FetchOrCreateTag("TrackBirthdays", up.PeopleId, DbUtil.TagTypeId_Personal);
  38. var q = tag.People(DbUtil.Db);
  39. if (q.Count() == 0)
  40. q = from p in DbUtil.Db.People
  41. where p.OrganizationMembers.Any(om => om.OrganizationId == up.BibleFellowshipClassId)
  42. select p;
  43. var q2 = from p in q
  44. let nextbd = DbUtil.Db.NextBirthday(p.PeopleId)
  45. where SqlMethods.DateDiffDay(UtilityExtensions.Util.Now, nextbd) <= 15
  46. where p.DeceasedDate == null
  47. orderby nextbd
  48. select new BirthdayInfo { Birthday = nextbd.Value, Name = p.Name, PeopleId = p.PeopleId };
  49. return q2;
  50. }
  51. public class MyInvolvementInfo
  52. {
  53. public string Name { get; set; }
  54. public string MemberType { get; set; }
  55. public int OrgId { get; set; }
  56. public string OrgType { get; set; }
  57. }
  58. public IEnumerable<MyInvolvementInfo> MyInvolvements()
  59. {
  60. var u = DbUtil.Db.CurrentUser;
  61. if (u == null)
  62. return new List<MyInvolvementInfo>();
  63. var pid = u.PeopleId;
  64. var limitvisibility = Util2.OrgMembersOnly || Util2.OrgLeadersOnly;
  65. var oids = new int[0];
  66. if (Util2.OrgLeadersOnly)
  67. oids = DbUtil.Db.GetLeaderOrgIds(pid);
  68. var roles = DbUtil.Db.CurrentUser.UserRoles.Select(uu => uu.Role.RoleName).ToArray();
  69. var orgmembers = from om in DbUtil.Db.OrganizationMembers
  70. where om.Organization.LimitToRole == null || roles.Contains(om.Organization.LimitToRole)
  71. select om;
  72. var q = from om in orgmembers
  73. where om.PeopleId == pid
  74. where (om.Pending ?? false) == false
  75. where oids.Contains(om.OrganizationId) || !(limitvisibility && om.Organization.SecurityTypeId == 3)
  76. orderby om.Organization.OrganizationType.Code ?? "z", om.Organization.OrganizationName
  77. select new MyInvolvementInfo
  78. {
  79. Name = om.Organization.OrganizationName,
  80. MemberType = om.MemberType.Description,
  81. OrgId = om.OrganizationId,
  82. OrgType = om.Organization.OrganizationType.Description ?? "Other",
  83. };
  84. return q;
  85. }
  86. public class NewsInfo
  87. {
  88. public string Title { get; set; }
  89. public DateTime Published { get; set; }
  90. public string Url { get; set; }
  91. }
  92. public IEnumerable<NewsInfo> BVCMSNews()
  93. {
  94. var feedurl = "http://feeds.feedburner.com/BvcmsBlog";
  95. var wr = new WebClient();
  96. var feed = DbUtil.Db.RssFeeds.FirstOrDefault(r => r.Url == feedurl);
  97. HttpWebRequest req = null;
  98. try
  99. {
  100. req = WebRequest.Create(feedurl) as HttpWebRequest;
  101. }
  102. catch
  103. {
  104. }
  105. if (feed != null)
  106. {
  107. if (feed.LastModified.HasValue)
  108. {
  109. req.IfModifiedSince = feed.LastModified.Value;
  110. req.Headers.Add("If-None-Match", feed.ETag);
  111. }
  112. }
  113. else
  114. {
  115. feed = new RssFeed();
  116. DbUtil.Db.RssFeeds.InsertOnSubmit(feed);
  117. feed.Url = feedurl;
  118. }
  119. if (req != null)
  120. {
  121. try
  122. {
  123. var resp = req.GetResponse() as HttpWebResponse;
  124. feed.LastModified = resp.LastModified;
  125. feed.ETag = resp.Headers["ETag"];
  126. var sr = new StreamReader(resp.GetResponseStream());
  127. feed.Data = sr.ReadToEnd();
  128. sr.Close();
  129. DbUtil.Db.SubmitChanges();
  130. }
  131. catch (WebException)
  132. {
  133. }
  134. if (feed.Data != null)
  135. {
  136. try
  137. {
  138. var reader = XmlReader.Create(new StringReader(feed.Data));
  139. var f = SyndicationFeed.Load(reader);
  140. var posts = from item in f.Items
  141. select new NewsInfo
  142. {
  143. Title = item.Title.Text,
  144. Published = item.PublishDate.DateTime,
  145. Url = item.Links.Single(i => i.RelationshipType == "alternate").GetAbsoluteUri().AbsoluteUri
  146. };
  147. return posts;
  148. }
  149. catch
  150. {
  151. return new List<NewsInfo>();
  152. }
  153. }
  154. }
  155. return null;
  156. }
  157. public IEnumerable<NewsInfo> ChurchNews()
  158. {
  159. var feedurl = DbUtil.Db.Setting("ChurchFeedUrl", "");
  160. var feed = DbUtil.Db.RssFeeds.FirstOrDefault(r => r.Url == feedurl);
  161. HttpWebRequest req = null;
  162. try
  163. {
  164. req = WebRequest.Create(feedurl) as HttpWebRequest;
  165. }
  166. catch
  167. {
  168. }
  169. if (feed != null)
  170. {
  171. if (feed.LastModified.HasValue)
  172. {
  173. req.IfModifiedSince = feed.LastModified.Value;
  174. req.Headers.Add("If-None-Match", feed.ETag);
  175. }
  176. }
  177. else
  178. {
  179. feed = new RssFeed();
  180. DbUtil.Db.RssFeeds.InsertOnSubmit(feed);
  181. feed.Url = feedurl;
  182. }
  183. if (req != null)
  184. {
  185. try
  186. {
  187. var resp = req.GetResponse() as HttpWebResponse;
  188. feed.LastModified = resp.LastModified;
  189. feed.ETag = resp.Headers["ETag"];
  190. var sr = new StreamReader(resp.GetResponseStream());
  191. feed.Data = sr.ReadToEnd();
  192. sr.Close();
  193. DbUtil.Db.SubmitChanges();
  194. }
  195. catch (WebException)
  196. {
  197. }
  198. if (feed.Data != null)
  199. {
  200. try
  201. {
  202. var reader = XmlReader.Create(new StringReader(feed.Data));
  203. var f = SyndicationFeed.Load(reader);
  204. var posts = from item in f.Items
  205. let a = item.Authors.FirstOrDefault()
  206. let au = a == null ? "" : a.Name
  207. select new NewsInfo
  208. {
  209. Title = item.Title.Text,
  210. Published = item.PublishDate.DateTime,
  211. Url = item.Links.Single(i => i.RelationshipType == "alternate").GetAbsoluteUri().AbsoluteUri
  212. };
  213. return posts;
  214. }
  215. catch
  216. {
  217. return new NewsInfo[] { };
  218. }
  219. }
  220. }
  221. return new NewsInfo[] { };
  222. }
  223. public class MySavedQueryInfo
  224. {
  225. public string Name { get; set; }
  226. public int QueryId { get; set; }
  227. }
  228. public IEnumerable<MySavedQueryInfo> MyQueries()
  229. {
  230. var up = DbUtil.Db.CurrentUserPerson;
  231. if (up == null)
  232. return new List<MySavedQueryInfo>();
  233. var q = from c in DbUtil.Db.QueryBuilderClauses
  234. where c.SavedBy == Util.UserName
  235. where c.GroupId == null && c.Field == "Group" && c.Clauses.Any()
  236. where !c.Description.Contains("scratchpad")
  237. orderby c.Description
  238. select new MySavedQueryInfo
  239. {
  240. Name = c.Description,
  241. QueryId = c.QueryId
  242. };
  243. return q;
  244. }
  245. public class TaskInfo
  246. {
  247. public int TaskId { get; set; }
  248. public int PeopleId { get; set; }
  249. public string Who { get; set; }
  250. public string Description { get; set; }
  251. }
  252. public IEnumerable<TaskInfo> Tasks()
  253. {
  254. var up = DbUtil.Db.CurrentUserPerson;
  255. if (up == null)
  256. return new List<TaskInfo>();
  257. var completedcode = TaskStatusCode.Complete;
  258. var pid = DbUtil.Db.CurrentUser.PeopleId;
  259. var q = from t in DbUtil.Db.Tasks
  260. where t.Archive == false // not archived
  261. where t.OwnerId == pid || t.CoOwnerId == pid
  262. where t.WhoId != null && t.StatusId != completedcode
  263. where !(t.OwnerId == pid && t.CoOwnerId != null)
  264. orderby t.CreatedOn
  265. select new TaskInfo
  266. {
  267. TaskId = t.Id,
  268. PeopleId = t.AboutWho.PeopleId,
  269. Who = t.AboutWho.Name,
  270. Description = t.Description,
  271. };
  272. return q;
  273. }
  274. public IEnumerable<CodeValueItem> Tags()
  275. {
  276. var up = DbUtil.Db.CurrentUserPerson;
  277. if (up == null)
  278. return new List<CodeValueItem>();
  279. var ctl = new CodeValueModel();
  280. var pid = DbUtil.Db.CurrentUser.PeopleId;
  281. var list = ctl.UserTags(pid);
  282. return list;
  283. }
  284. }
  285. }