/// <summary> /// Startet einen neuen Forum-Thread und speichert darin den neuen Artikel. /// </summary> /// <param name="threadFile"></param> /// <param name="name"></param> /// <param name="email"></param> /// <param name="title"></param> /// <param name="text"></param> public void AddForumArticle(string threadFile, string name, string email, string title, string text) { object objLock = new object(); lock (objLock) { // Existiert das Thread-File bereits, so ist etwas schief gelaufen und // die Daten dürfen hier nicht gespeichert werden. if (!File.Exists(GetDataPath(threadFile))) { // Laden der Forumsdaten. ForumData CurrentForumData = ThreadRootData; // Merken des aktuellen Zeitpunktes. DateTime CurrentDate = DateTime.Now; // Speichern des neuen Artikels. ForumData.ForumRow fRow = CurrentForumData.Forum.NewForumRow(); fRow.ThreadFile = HttpUtility.HtmlEncode(threadFile); fRow.DateTime = CurrentDate; fRow.Author = HttpUtility.HtmlEncode(name); fRow.Email = HttpUtility.HtmlEncode(email); fRow.Title = HttpUtility.HtmlEncode(title); fRow.Text = HttpUtility.HtmlEncode(text); fRow.CommentCount = 0; CurrentForumData.Forum.AddForumRow(fRow); ThreadRootData = CurrentForumData; // Erzeugen des Thread-Datenobjektes. ThreadData CurrentThreadData = GetThreadData(threadFile); // Speichern des neuen Artikels. ThreadData.ThreadRow tRow = CurrentThreadData.Thread.NewThreadRow(); tRow.Title = HttpUtility.HtmlEncode(title); tRow.Text = HttpUtility.HtmlEncode(text); tRow.Author = HttpUtility.HtmlEncode(name); tRow.Email = HttpUtility.HtmlEncode(email); tRow.DateTime = CurrentDate; tRow.Id = 0; CurrentThreadData.Thread.AddThreadRow(tRow); WriteThreadData(CurrentThreadData, threadFile); } } }
/// <summary> /// Speichert einen neuen Artikel innerhalb eines bestehenden Threads. /// </summary> /// <param name="threadFile"></param> /// <param name="parentMessage"></param> /// <param name="name"></param> /// <param name="email"></param> /// <param name="title"></param> /// <param name="text"></param> public void AddThreadArticle(string threadFile, int parentMessage, string name, string email, string title, string text) { object objLock = new object(); lock (objLock) { // Existiert das Thread-File nicht, so ist etwas schief gelaufen und // die Daten dürfen hier nicht gespeichert werden. if (File.Exists(GetDataPath(threadFile))) { // Merken des aktuellen Zeitpunktes. DateTime CurrentDate = DateTime.Now; // Erzeugen des Thread-Datenobjektes. ThreadData CurrentThreadData = GetThreadData(threadFile); // Speichern des neuen Artikels. ThreadData.ThreadRow tRow = CurrentThreadData.Thread.NewThreadRow(); tRow.Title = HttpUtility.HtmlEncode(title); tRow.Text = HttpUtility.HtmlEncode(text); tRow.Author = HttpUtility.HtmlEncode(name); tRow.Email = HttpUtility.HtmlEncode(email); tRow.DateTime = CurrentDate; tRow.Parent = parentMessage; CurrentThreadData.Thread.AddThreadRow(tRow); WriteThreadData(CurrentThreadData, threadFile); // Laden der Forumsdaten. ForumData CurrentForumData = ThreadRootData; // Holen der entsprechenden Zeile. ForumData.ForumRow fRow = (ForumData.ForumRow)CurrentForumData.Forum.Select("ThreadFile = '" + threadFile + "'", "DateTime DESC")[0]; fRow.DateTime = CurrentDate; fRow.CommentCount = CurrentThreadData.Thread.Rows.Count - 1; fRow.LastPosterName = HttpUtility.HtmlEncode(name); ThreadRootData = CurrentForumData; } } }
/// <summary> /// Diese Methode stellt eine Threadmessage dar und ruft sich rekursiv für alle /// Child-Nodes der entsprechenden Threadmessage auf. /// </summary> /// <param name="row"></param> /// <param name="nDepth"></param> private void AddThreadMessage(ThreadData.ThreadRow row, int nDepth) { DataRow datarow = m_Data.NewRow(); datarow["Title"] = row["Title"]; datarow["Text"] = row["Text"]; datarow["Author"] = row["Author"]; datarow["Email"] = row["Email"]; datarow["UserId"] = row["UserId"]; datarow["Id"] = row["Id"]; datarow["Parent"] = row["Parent"]; datarow["DateTime"] = row["DateTime"]; datarow["Depth"] = nDepth; m_Data.Rows.Add(datarow); // Rekursiver Aufruf aller Child-Nodes. foreach (ThreadData.ThreadRow r in row.GetChildRows("ThreadThread")) { AddThreadMessage(r, nDepth + 1); } }
private void Bind() { // Einlesen der Threaddaten. ArticleManager mgr = new ArticleManager(configAgent); ThreadData data = mgr.GetThreadData(configAgent.ThreadFile); data.Thread.DefaultView.Sort = "DateTime DESC"; // Ermitteln der Row, welche den Root-Node enthält. ThreadData.ThreadRow root = null; foreach (ThreadData.ThreadRow r in data.Thread.Rows) { if (r.Id == 0) { root = r; break; } } //ThreadData.ThreadRow root = data.Thread.FindById(0); // Initialisieren des Datensets. m_Data = new DataTable(); m_Data.Columns.Add("Title", typeof(string)); m_Data.Columns.Add("Text", typeof(string)); m_Data.Columns.Add("Author", typeof(string)); m_Data.Columns.Add("Email", typeof(string)); m_Data.Columns.Add("UserId", typeof(string)); m_Data.Columns.Add("Depth", typeof(int)); m_Data.Columns.Add("Id", typeof(int)); m_Data.Columns.Add("Parent", typeof(int)); m_Data.Columns.Add("DateTime", typeof(DateTime)); // Zusammenstellen eines neuen Datensets. if (null != root) { AddThreadMessage(root, 0); m_ThreadTable.DataSource = m_Data; m_ThreadTable.DataBind(); } }
/// <summary> /// Entfernt einen Beitrag samt allen untergeordneten Beiträge aus dem Forum. /// Ist articleId == 0, so handelt es sich um den Root-Node. /// </summary> /// <param name="articleId"></param> public void DeleteArticle(int articleId) { object objLock = new object(); lock (objLock) { if (articleId == 0) { // Es handelt sich um den Root-Node, also muss das File gelöscht werden und // der Root-Node aus dem Übersichtsfile entfernt werden. // Ermitteln des Threadfiles. string threadFile = GetDataPath(configAgent.ThreadFile); // Löschen des Threadfiles. if (File.Exists(threadFile)) { File.Delete(threadFile); } // Laden der Forumsdaten. ForumData CurrentForumData = ThreadRootData; foreach (ForumData.ForumRow row in CurrentForumData.Forum.Rows) { if (row.ThreadFile == configAgent.ThreadFile) { CurrentForumData.Forum.RemoveForumRow(row); break; } } ThreadRootData = CurrentForumData; } else { ThreadData CurrentThreadData = GetThreadData(configAgent.ThreadFile); ThreadData.ThreadRow row = null; foreach (ThreadData.ThreadRow r in CurrentThreadData.Thread.Rows) { if (r.Id == articleId) { row = r; break; } } if (null != row) { CurrentThreadData.Thread.RemoveThreadRow(row); } WriteThreadData(CurrentThreadData, configAgent.ThreadFile); // Laden der Forumsdaten. ForumData CurrentForumData = ThreadRootData; foreach (ForumData.ForumRow fRow in CurrentForumData.Forum.Rows) { if (fRow.ThreadFile == configAgent.ThreadFile) { fRow.CommentCount = CurrentThreadData.Thread.Rows.Count - 1; break; } } ThreadRootData = CurrentForumData; } } }