/pigeoncms/Controls/MessageControl.ascx.cs

http://pigeoncms.googlecode.com/ · C# · 403 lines · 352 code · 47 blank · 4 comment · 39 complexity · 5d877417aca883b6724fd5ebf97b9162 MD5 · raw file

  1. using System;
  2. using System.Collections;
  3. using System.Configuration;
  4. using System.Data;
  5. using System.Linq;
  6. using System.Web;
  7. using System.Web.Security;
  8. using System.Web.UI;
  9. using System.Web.UI.HtmlControls;
  10. using System.Web.UI.WebControls;
  11. using System.Web.UI.WebControls.WebParts;
  12. using System.Collections.Generic;
  13. using PigeonCms;
  14. using System.Net.Mail;
  15. public partial class Controls_MessageControl : PigeonCms.BaseModuleControl
  16. {
  17. #region events
  18. public delegate void MessageDelegate(object sender, Message.MessageEventArgs e);
  19. public event MessageDelegate AfterDelete;
  20. public event MessageDelegate ItemSelected;
  21. public event MessageDelegate MessageSent;
  22. //public delegate void ItemSelectedDelegate(object sender, Message.MessageEventArgs e);
  23. #endregion
  24. const int COL_DELETE_INDEX = 5;
  25. const int VIEW_LIST_INDEX = 0;
  26. const int VIEW_MESSAGE_INDEX = 1;
  27. const int VIEW_NEW_INDEX = 2;
  28. public enum MessagesViewMode
  29. {
  30. ListMessages = 0,
  31. ShowMessage,
  32. InsertMessage
  33. }
  34. public enum FolderType
  35. {
  36. Inbox = 0,
  37. Outbox
  38. }
  39. public MessagesViewMode ViewMode
  40. {
  41. get
  42. {
  43. var res = MessagesViewMode.ListMessages;
  44. if (ViewState["ViewMode"] != null)
  45. res = (MessagesViewMode)ViewState["ViewMode"];
  46. return res;
  47. }
  48. set
  49. {
  50. ViewState["ViewMode"] = value;
  51. setViewMode();
  52. }
  53. }
  54. public FolderType Folder
  55. {
  56. get
  57. {
  58. var res = FolderType.Inbox;
  59. if (ViewState["Folder"] != null)
  60. res = (FolderType)ViewState["Folder"];
  61. return res;
  62. }
  63. set
  64. {
  65. ViewState["Folder"] = value;
  66. }
  67. }
  68. public Utility.TristateBool IsRead
  69. {
  70. get
  71. {
  72. var res = Utility.TristateBool.NotSet;
  73. if (ViewState["IsRead"] != null)
  74. res = (Utility.TristateBool)ViewState["IsRead"];
  75. return res;
  76. }
  77. set { ViewState["IsRead"] = value; }
  78. }
  79. private string lastMessage = "";
  80. public string LastMessage
  81. {
  82. get { return lastMessage; }
  83. }
  84. public bool AllowDelete
  85. {
  86. get
  87. {
  88. var res = false;
  89. if (ViewState["AllowDelete"] != null)
  90. res = (bool)ViewState["AllowDelete"];
  91. return res;
  92. }
  93. set { ViewState["AllowDelete"] = value; }
  94. }
  95. public int NumberOfRowsPerPage
  96. {
  97. get
  98. {
  99. var res = 10;
  100. if (ViewState["NumberOfRowsPerPage"] != null)
  101. res = (int)ViewState["NumberOfRowsPerPage"];
  102. return res;
  103. }
  104. set
  105. {
  106. ViewState["NumberOfRowsPerPage"] = value;
  107. }
  108. }
  109. protected new void Page_Init(object sender, EventArgs e)
  110. {
  111. this.BaseModule = new Module();
  112. this.BaseModule.ModuleNamespace = "PigeonCms";
  113. this.BaseModule.ModuleName = "MessagesListControl";
  114. base.Page_Init(sender, e);
  115. Grid1.PageSize = this.NumberOfRowsPerPage;
  116. Grid1.Columns[COL_DELETE_INDEX].Visible = this.AllowDelete;
  117. }
  118. protected void Page_Load(object sender, EventArgs e)
  119. {
  120. }
  121. protected void ObjDs1_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
  122. {
  123. var filter = new MessagesFilter();
  124. if (this.Folder == FolderType.Outbox)
  125. filter.FromUser = PgnUserCurrent.UserName;
  126. else
  127. filter.ToUserLike = PgnUserCurrent.UserName;
  128. filter.IsRead = this.IsRead;
  129. e.InputParameters["filter"] = filter;
  130. e.InputParameters["sort"] = "";
  131. }
  132. protected void Grid1_PreRender(object sender, EventArgs e)
  133. {
  134. Grid1.UseAccessibleHeader = true;
  135. if (Grid1.HeaderRow != null)
  136. Grid1.HeaderRow.TableSection = TableRowSection.TableHeader;
  137. }
  138. protected void Grid1_RowCommand(object sender, GridViewCommandEventArgs e)
  139. {
  140. if (e.CommandName == "Select")
  141. {
  142. selectRow(int.Parse(e.CommandArgument.ToString()));
  143. }
  144. if (e.CommandName == "DeleteRow")
  145. {
  146. deleteRow(int.Parse(e.CommandArgument.ToString()));
  147. }
  148. //Enabled
  149. if (e.CommandName == "ImgStarredOk")
  150. {
  151. setFlag(Convert.ToInt32(e.CommandArgument), false, "starred");
  152. Grid1.DataBind();
  153. }
  154. if (e.CommandName == "ImgStarredKo")
  155. {
  156. setFlag(Convert.ToInt32(e.CommandArgument), true, "starred");
  157. Grid1.DataBind();
  158. }
  159. }
  160. protected void Grid1_RowCreated(object sender, GridViewRowEventArgs e)
  161. {
  162. if (e.Row.RowType == DataControlRowType.Header)
  163. Utility.AddGlyph(Grid1, e.Row);
  164. }
  165. protected void Grid1_RowDataBound(object sender, GridViewRowEventArgs e)
  166. {
  167. if (e.Row.RowType == DataControlRowType.DataRow)
  168. {
  169. var item = new PigeonCms.Message();
  170. item = (PigeonCms.Message)e.Row.DataItem;
  171. LinkButton LnkSubject = (LinkButton)e.Row.FindControl("LnkSubject");
  172. string subject = Utility.Html.GetTextPreview(item.Title, 50, "");
  173. if (item.IsRead)
  174. LnkSubject.Text = subject;
  175. else
  176. LnkSubject.Text = "<b>" + subject + "</b>";
  177. Literal LitBody = (Literal)e.Row.FindControl("LitBody");
  178. LitBody.Text = Utility.Html.GetTextPreview(item.Description, 200, "");
  179. Literal LitDateInserted = (Literal)e.Row.FindControl("LitDateInserted");
  180. LitDateInserted.Text = item.DateInserted.ToString();
  181. //Starred
  182. if (item.IsStarred)
  183. {
  184. Image img1 = (Image)e.Row.FindControl("ImgStarredOk");
  185. img1.Visible = true;
  186. }
  187. else
  188. {
  189. Image img1 = (Image)e.Row.FindControl("ImgStarredKo");
  190. img1.Visible = true;
  191. }
  192. }
  193. }
  194. protected void MultiView1_ActiveViewChanged(object sender, EventArgs e)
  195. {
  196. }
  197. public void ReloadList()
  198. {
  199. Grid1.DataBind();
  200. }
  201. public void ShowMessage(int recordId)
  202. {
  203. var obj = new PigeonCms.Message();
  204. MultiView1.ActiveViewIndex = VIEW_MESSAGE_INDEX;
  205. clearMessage();
  206. CurrentId = recordId;
  207. if (CurrentId > 0)
  208. {
  209. obj = new MessagesManager().GetByKey(CurrentId);
  210. obj2message(obj);
  211. }
  212. }
  213. public void CreateMessage(string to, string subject, string body)
  214. {
  215. MultiView1.ActiveViewIndex = VIEW_NEW_INDEX;
  216. TxtTo.Text = to;
  217. TxtTitle.Text = subject;
  218. TxtDescription.Text = body;
  219. }
  220. public void SendMessage(MessageProvider.SendMessageEnum sendLocalMessage,
  221. MessageProvider.SendMessageEnum sendEmail)
  222. {
  223. bool res = false;
  224. try
  225. {
  226. var o1 = new Message();
  227. form2obj(o1);
  228. MessageProvider.SendMessage(Utility.String2List(o1.ToUser, ";"), o1,
  229. sendLocalMessage, sendEmail);
  230. res = true;
  231. }
  232. catch (Exception e1)
  233. {
  234. this.lastMessage = Utility.GetLabel("RECORD_ERR_MSG") + "<br />" + e1.ToString();
  235. }
  236. finally
  237. {
  238. }
  239. if (this.MessageSent != null)
  240. this.MessageSent(this,
  241. new Message.MessageEventArgs(0, "send", this.LastMessage, res));
  242. }
  243. private void selectRow(int recordId)
  244. {
  245. if (this.ItemSelected != null)
  246. {
  247. var man = new MessagesManager();
  248. var o1 = man.GetByKey(recordId);
  249. if (!o1.IsRead)
  250. {
  251. //flag as read
  252. o1.IsRead = true;
  253. man.Update(o1);
  254. Grid1.DataBind();
  255. }
  256. this.ItemSelected(this,
  257. new Message.MessageEventArgs(recordId, "select", "", true));
  258. }
  259. }
  260. private void clearMessage()
  261. {
  262. LitSubject.Text = "";
  263. LitCreated.Text = "";
  264. LitUser.Text = "";
  265. LitDescription.Text = "";
  266. LitImages.Text = "";
  267. LitFiles.Text = "";
  268. }
  269. private void obj2message(Message obj)
  270. {
  271. LitSubject.Text = obj.Title;
  272. LitCreated.Text = obj.DateInserted.ToString();
  273. LitUser.Text = "From " + obj.FromUser + " to " + obj.ToUser;
  274. LitDescription.Text = obj.Description;
  275. LitImages.Text = "";
  276. LitFiles.Text = "";
  277. }
  278. private void form2obj(Message obj)
  279. {
  280. obj.ToUser = TxtTo.Text;
  281. obj.Title = TxtTitle.Text;
  282. obj.Description = TxtDescription.Text;
  283. }
  284. private bool checkForm()
  285. {
  286. bool res = true;
  287. return res;
  288. }
  289. private void clearForm()
  290. {
  291. TxtTo.Text = "";
  292. TxtTitle.Text = "";
  293. TxtDescription.Text = "";
  294. }
  295. private void deleteRow(int recordId)
  296. {
  297. bool res = true;
  298. try
  299. {
  300. if (!PgnUserCurrent.IsAuthenticated)
  301. throw new Exception("user not authenticated");
  302. new MessagesManager().DeleteById(recordId);
  303. Grid1.DataBind();
  304. }
  305. catch (Exception e)
  306. {
  307. res = false;
  308. this.lastMessage = e.Message;
  309. }
  310. if (this.AfterDelete != null)
  311. this.AfterDelete(this,
  312. new Message.MessageEventArgs(recordId, "delete", this.LastMessage, res));
  313. }
  314. private void setFlag(int recordId, bool value, string flagName)
  315. {
  316. try
  317. {
  318. var man = new MessagesManager();
  319. var o1 = man.GetByKey(recordId);
  320. switch (flagName.ToLower())
  321. {
  322. case "starred":
  323. o1.IsStarred = value;
  324. break;
  325. case "read":
  326. o1.IsRead = value;
  327. break;
  328. default:
  329. break;
  330. }
  331. man.Update(o1);
  332. }
  333. catch (Exception e1)
  334. {
  335. this.lastMessage = Utility.GetLabel("RECORD_ERR_MSG") + "<br />" + e1.ToString();
  336. }
  337. finally { }
  338. }
  339. private void setViewMode()
  340. {
  341. switch (ViewMode)
  342. {
  343. case MessagesViewMode.ListMessages:
  344. MultiView1.ActiveViewIndex = VIEW_LIST_INDEX;
  345. break;
  346. case MessagesViewMode.ShowMessage:
  347. MultiView1.ActiveViewIndex = VIEW_MESSAGE_INDEX;
  348. break;
  349. case MessagesViewMode.InsertMessage:
  350. MultiView1.ActiveViewIndex = VIEW_NEW_INDEX;
  351. break;
  352. default:
  353. break;
  354. }
  355. }
  356. }