using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
namespace ASPNetPortal {
public class DiscussDetails : System.Web.UI.Page {
protected System.Web.UI.WebControls.LinkButton ReplyBtn;
protected System.Web.UI.WebControls.Panel ButtonPanel;
protected System.Web.UI.WebControls.TextBox TitleField;
protected System.Web.UI.WebControls.TextBox BodyField;
protected System.Web.UI.WebControls.LinkButton updateButton;
protected System.Web.UI.WebControls.LinkButton cancelButton;
protected System.Web.UI.WebControls.Panel EditPanel;
protected System.Web.UI.WebControls.Label Title;
protected System.Web.UI.WebControls.Label CreatedByUser;
protected System.Web.UI.WebControls.Label CreatedDate;
protected System.Web.UI.WebControls.Label Body;
protected System.Web.UI.HtmlControls.HtmlAnchor prevItem;
protected System.Web.UI.HtmlControls.HtmlAnchor nextItem;
int moduleId = 0;
int itemId = 0;
//*******************************************************
//
// The Page_Load server event handler on this page is used
// to obtain the ModuleId and ItemId of the discussion list,
// and to then display the message contents.
//
//*******************************************************
private void Page_Load(object sender, System.EventArgs e) {
// Obtain moduleId and ItemId from QueryString
moduleId = Int32.Parse(Request.Params["Mid"]);
if (Request.Params["ItemId"] != null) {
itemId = Int32.Parse(Request.Params["ItemId"]);
}
else {
itemId = 0;
EditPanel.Visible = true;
ButtonPanel.Visible = false;
}
// Populate message contents if this is the first visit to the page
if (Page.IsPostBack == false) {
BindData();
}
if (PortalSecurity.HasEditPermissions(moduleId) == false) {
if (itemId == 0) {
Response.Redirect("~/Admin/EditAccessDenied.aspx");
}
else {
ReplyBtn.Visible=false;
}
}
}
//*******************************************************
//
// The ReplyBtn_Click server event handler on this page is used
// to handle the scenario where a user clicks the message's
// "Reply" button to perform a post.
//
//*******************************************************
void ReplyBtn_Click(Object Sender, EventArgs e) {
EditPanel.Visible = true;
ButtonPanel.Visible = false;
}
//*******************************************************
//
// The UpdateBtn_Click server event handler on this page is used
// to handle the scenario where a user clicks the "update"
// button after entering a response to a message post.
//
//*******************************************************
void UpdateBtn_Click(Object sender, EventArgs e) {
// Create new discussion database component
DiscussionDB discuss = new DiscussionDB();
// Add new message (updating the "itemId" on the page)
itemId = discuss.AddMessage(moduleId, itemId, User.Identity.Name, Server.HtmlEncode(TitleField.Text), Server.HtmlEncode(BodyField.Text));
// Update visibility of page elements
EditPanel.Visible = false;
ButtonPanel.Visible = true;
// Repopulate page contents with new message
BindData();
}
//*******************************************************
//
// The CancelBtn_Click server event handler on this page is used
// to handle the scenario where a user clicks the "cancel"
// button to discard a message post and toggle out of
// edit mode.
//
//*******************************************************
void CancelBtn_Click(Object sender, EventArgs e) {
// Update visibility of page elements
EditPanel.Visible = false;
ButtonPanel.Visible = true;
}
//*******************************************************
//
// The BindData method is used to obtain details of a message
// from the Discussion table, and update the page with
// the message content.
//
//*******************************************************
void BindData() {
// Obtain the selected item from the Discussion table
ASPNetPortal.DiscussionDB discuss = new ASPNetPortal.DiscussionDB();
SqlDataReader dr = discuss.GetSingleMessage(itemId);
// Load first row from database
dr.Read();
// Update labels with message contents
Title.Text = (String) dr["Title"];
Body.Text = (String) dr["Body"];
CreatedByUser.Text = (String) dr["CreatedByUser"];
CreatedDate.Text = String.Format("{0:d}", dr["CreatedDate"]);
TitleField.Text = ReTitle(Title.Text);
int prevId = 0;
int nextId = 0;
// Update next and preview links
object id1 = dr["PrevMessageID"];
if (id1 != DBNull.Value) {
prevId = (int) id1;
prevItem.HRef = Request.Path + "?ItemId=" + prevId + "&mid=" + moduleId;
}
object id2 = dr["NextMessageID"];
if (id2 != DBNull.Value) {
nextId = (int) id2;
nextItem.HRef = Request.Path + "?ItemId=" + nextId + "&mid=" + moduleId;
}
// close the datareader
dr.Close();
// Show/Hide Next/Prev Button depending on whether there is a next/prev message
if (prevId <= 0) {
prevItem.Visible = false;
}
if (nextId <= 0) {
nextItem.Visible = false;
}
}
//*******************************************************
//
// The ReTitle helper method is used to create the subject
// line of a response post to a message.
//
//*******************************************************
String ReTitle(String title) {
if (title.Length > 0 & title.IndexOf("Re: ",0) == -1) {
title = "Re: " + title;
}
return title;
}
public DiscussDetails() {
Page.Init += new System.EventHandler(Page_Init);
}
private void Page_Init(object sender, EventArgs e) {
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
}
#region Web Form Designer generated code
///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///
private void InitializeComponent() {
this.ReplyBtn.Click += new System.EventHandler(this.ReplyBtn_Click);
this.updateButton.Click += new System.EventHandler(this.UpdateBtn_Click);
this.cancelButton.Click += new System.EventHandler(this.CancelBtn_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}