Example #1
0
        /// <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);
                }
            }
        }
Example #2
0
        /// <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();
            }
        }
Example #5
0
        /// <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;
                }
            }
        }