Ejemplo n.º 1
0
        /*		    <FORUMSOURCE>
                        <JOURNAL>
                            <USER>
                                <USERID>6</USERID>
                                <USERNAME>Jim Lynn</USERNAME>
                            </USER>
                        </JOURNAL>
                    </FORUMSOURCE>
    				
                    or

                    <FORUMSOURCE>
                        <ARTICLE>
                            <H2G2ID>12345</H2G2ID>
                            <SUBJECT>Hello there</SUBJECT>
                        </ARTICLE>
                    </FORUMSOURCE>

                    or

                    <FORUMSOURCE>
                        <USERPAGE>
                            <USER>
                                <USERID>6</USERID>
                                <USERNAME>Jim Lynn</USERNAME>
                            </USER>
                        </USERPAGE>
                    </FORUMSOURCE>

                    or 

                    <FORUMSOURCE>
                        <CLUB ID= '1'>
                            <NAME>Dharmesh Club</NAME>
                        </CLUB>
                    </FORUMSOURCE> 
         */
        /// <summary>
        /// Builds an XML representation of the forum source, vis:
        /// </summary>
        /// <param name="forumID">ID of forum</param>
        /// <param name="threadID">ID of forum thread</param>
        /// <param name="includeArticle">flag to include article data</param>
        /// <param name="type">Type of forum</param>
        /// <param name="ID">ID either H2G2ID or club ID</param>
        /// <param name="title">Title</param>
        /// <param name="siteID">Site ID</param>
        /// <param name="url">URL involved</param>
        public void GetTitle(int forumID, int threadID, bool includeArticle, ref int type, ref int ID, ref string title, ref int siteID, ref string url)
        {
            string subject = "";	// Subject based on type found
            int userID = 0;
            int reviewForumID = 0;
            int alertInstantly = 0;
            int hiddenStatus = 0;
            int articleStatus = 0;
            int realForumID = 0;

            using (IDnaDataReader dataReader = InputContext.CreateDnaDataReader("getforumsource"))
            {
                dataReader.AddParameter("ForumID", forumID);
                dataReader.AddParameter("ThreadID", threadID);
                dataReader.AddParameter("CurrentSiteID", InputContext.CurrentSite.SiteID);
                dataReader.Execute();

                if (dataReader.HasRows && dataReader.Read())
                {
                    // Fill in return values
                    ID = dataReader.GetInt32NullAsZero("h2g2ID");
                    type = dataReader.GetInt32NullAsZero("Type");
                    hiddenStatus = dataReader.GetInt32NullAsZero("HiddenStatus");
                    articleStatus = dataReader.GetInt32NullAsZero("ArticleStatus");
                    alertInstantly = dataReader.GetInt32NullAsZero("AlertInstantly");
                    siteID = dataReader.GetInt32NullAsZero("SiteID");
                    realForumID = dataReader.GetInt32NullAsZero("ForumID");

                    reviewForumID = 0;
                    userID = 0;

                    if (dataReader.GetInt32NullAsZero("JournalOwner") > 0)
                    {
                        title = dataReader.GetStringNullAsEmpty("JournalUserName");
                        userID = dataReader.GetInt32NullAsZero("JournalOwner");
                    }
                    else if (dataReader.GetInt32NullAsZero("UserID") > 0)
                    {
                        title = dataReader.GetStringNullAsEmpty("UserName");
                        userID = dataReader.GetInt32NullAsZero("UserID");
                    }
                    else if (!dataReader.IsDBNull("ReviewForumID"))
                    {
                        title = dataReader.GetStringNullAsEmpty("ReviewForumName");
                        reviewForumID = dataReader.GetInt32NullAsZero("ReviewForumID");
                    }
                    else if (!dataReader.IsDBNull("URL"))
                    {
                        url = dataReader.GetStringNullAsEmpty("URL");
                    }
                    else
                    {
                        title = dataReader.GetStringNullAsEmpty("Subject");
                    }

                    XmlElement forumSource = AddElementTag(RootElement, "FORUMSOURCE");

                    if (type == 0)
                    {
                        AddAttribute(forumSource, "TYPE", "journal");

                        User journalOwner = new User(InputContext);
                        journalOwner.AddPrefixedUserXMLBlock(dataReader, userID, "Journal", forumSource);
                    }
                    else if (type == 3)
                    {
                        // It's a review forum
                        AddAttribute(forumSource, "TYPE", "reviewforum");

                        XmlElement reviewForum = AddElementTag(forumSource, "REVIEWFORUM");
                        AddAttribute(reviewForum, "ID", reviewForumID);
                        AddTextTag(reviewForum, "REVIEWFORUMNAME", subject);
                        AddTextTag(reviewForum, "URLFRIENDLYNAME", "RF" + reviewForumID.ToString());
                    }
                    else if (type == 1)
                    {
                        AddAttribute(forumSource, "TYPE", "article");
                    }
                    /*else if (type == 5)
                    {
                        AddAttribute(forumSource, "TYPE", "club");

                        XmlElement club = AddElementTag(forumSource, "CLUB");
                        AddAttribute(club, "ID", clubID);
                        AddTextTag(club, "NAME", subject);
                    }
                    else if (type == 6)
                    {
                        AddAttribute(forumSource, "TYPE", "clubforum");

                        XmlElement club = AddElementTag(forumSource, "CLUB");
                        AddAttribute(club, "ID", clubID);
                        AddTextTag(club, "NAME", subject);
                    }
                    else if (type == 7)
                    {
                        AddAttribute(forumSource, "TYPE", "clubjournal");

                        XmlElement club = AddElementTag(forumSource, "CLUB");
                        AddAttribute(club, "ID", clubID);
                        AddTextTag(club, "NAME", subject);
                    }*/
                    else if (type == 4)
                    {
                        AddAttribute(forumSource, "TYPE", "privateuser");
                        XmlElement userPage = AddElementTag(forumSource, "USERPAGE");
                        User user = new User(InputContext);
                        user.AddUserXMLBlock(dataReader, userID, userPage);
                    }
                    else if (type == 8)
                    {
                        AddAttribute(forumSource, "TYPE", "noticeboard");
                    }
                    else
                    {
                        AddAttribute(forumSource, "TYPE", "userpage");
                        XmlElement userPage = AddElementTag(forumSource, "USERPAGE");
                        User user = new User(InputContext);
                        user.AddUserXMLBlock(dataReader, userID, userPage);
                    }

                    if (ID > 0)
                    {
                        if (includeArticle)
                        {
                            GuideEntrySetup guideEntrySetup = new GuideEntrySetup(ID);
                            guideEntrySetup.ShowEntryData = true;
                            guideEntrySetup.ShowPageAuthors = true;
                            guideEntrySetup.ShowReferences = true;
                            guideEntrySetup.SafeToCache = true;

                            GuideEntry guideEntry = new GuideEntry(InputContext, guideEntrySetup);
                            if (!guideEntry.Initialise())
                            {
                                throw new DnaException("The article doesn't exist. " + ID.ToString());
                            }

                            if (!guideEntry.IsDeleted)
                            {
                                AddInside(guideEntry, "FORUMSOURCE");
                                XmlElement article = (XmlElement)forumSource.SelectSingleNode("ARTICLE");
                                AddIntElement(article, "H2G2ID", ID);
                            }
                            else
                            {
                                XmlElement deletedArticle = AddElementTag(forumSource, "ARTICLE");
                                AddIntElement(deletedArticle, "H2G2ID", ID);
                                AddTextTag(deletedArticle, "SUBJECT", "Deleted");
                                AddIntElement(deletedArticle, "HIDDEN", hiddenStatus);
                                XmlNode statusNode = AddTextTag(deletedArticle, "STATUS", GuideEntry.GetDescriptionForStatusValue(articleStatus));
                                AddAttribute(statusNode, "TYPE", articleStatus);
                            }
                        }
                        else
                        {
                            XmlElement defaultArticle = AddElementTag(forumSource, "ARTICLE");
                            AddIntElement(defaultArticle, "H2G2ID", ID);
                            AddTextTag(defaultArticle, "SUBJECT", subject);
                            AddIntElement(defaultArticle, "HIDDEN", hiddenStatus);
                            XmlNode statusNode = AddTextTag(defaultArticle, "STATUS", GuideEntry.GetDescriptionForStatusValue(articleStatus));
                            AddAttribute(statusNode, "TYPE", articleStatus);
                        }

                        AddIntElement(forumSource, "ALERTINSTANTLY", alertInstantly);
                    }
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Functions generates the Try Create Review Forum Builder XML
        /// </summary>
        /// <param name="ID">ID of the review forum to get</param>
        /// <param name="skip">Number to skip</param>
        /// <param name="show">Number to show</param>
        /// <param name="orderBy">Ordering of the review forum</param>
        /// <param name="direction">Direction of ordering </param>
        /// <param name="entry">Whether we need to add a description at the top</param>
        public void TryCreateReviewForumBuilderXML(int ID, int skip, int show, ReviewForum.OrderBy orderBy, bool direction, bool entry)
        {
            ReviewForum reviewForum = new ReviewForum(InputContext);

            reviewForum.InitialiseViaReviewForumID(ID, false);

            if (SwitchSites(reviewForum.SiteID, ID, skip, show, orderBy, direction, entry))
            {
                return;
            }

            reviewForum.GetReviewForumThreadList(show, skip, orderBy, direction);
            //add the entry 
            if (entry)
            {
                GuideEntrySetup guideEntrySetup = new GuideEntrySetup(reviewForum.H2G2ID);
                //guideEntrySetup.ShowReferences = true;
                guideEntrySetup.SafeToCache = true;

                GuideEntry guideEntry = new GuideEntry(InputContext, guideEntrySetup);
                guideEntry.Initialise();

                _GuideEntryElement = CreateElement("ROOT");
                _GuideEntryElement.AppendChild(ImportNode(guideEntry.RootElement.FirstChild));
            }
            //add the fact that we don't want/have an entry
            else
            {
                _GuideEntryElement = CreateElement("ROOT");
                AddElementTag(_GuideEntryElement, "NOGUIDE");
            }

            AddInside(reviewForum);
        }
Ejemplo n.º 3
0
        private bool CreatePageArticle(int userID, User pageOwner, out GuideEntry masthead)
        {
            bool gotMasthead = false;
            masthead = null;

            if (pageOwner.UserID > 0 && pageOwner.Masthead > 0)
            {
                GuideEntrySetup setup = new GuideEntrySetup(pageOwner.Masthead);
                setup.ShowEntryData = true;
                setup.ShowPageAuthors = true;
                setup.ShowReferences = true;
                setup.SafeToCache = true;

                masthead = new GuideEntry(InputContext, setup);
                masthead.Initialise();

                //TODO do we need to do the XSLT parsing here if so how???
                gotMasthead = true;
            }
            return gotMasthead;
        }
Ejemplo n.º 4
0
        private bool CreatePageForum(GuideEntry masthead, ref Forum pageForum)
        {
            bool gotPageForum = false;

            int forumID = masthead.ForumID;
            if (forumID > 0)
            {
                pageForum.GetMostRecent(forumID);
                gotPageForum = true;
            }
            return gotPageForum;
        }
Ejemplo n.º 5
0
        private bool CreateUserInterface(User owner, GuideEntry masthead, ref PageUI pageInterface)
        {
		    bool allowDiscuss = true;
            bool allowEdit = false;

            // get the ID of the forum if we have been given a masthead article and
            // it actually has a forum (which it should)
            int forumID = 0;
            if (masthead != null)
            {
                forumID = masthead.ForumID;
            }
            if (forumID == 0)
            {
                allowDiscuss = false;
            }
            // check if we have a registered viewer and also if this happens to be their
            // own home page and set the appropriate button flags
            if (InputContext.ViewingUser.UserID > 0 && InputContext.ViewingUser.UserLoggedIn)
            {
                if (InputContext.ViewingUser.UserID == owner.UserID)
                {
                    // also if this is their own home page they have an edit page button
                    allowEdit = true;
                }
            }

            string discussLink = "AddThread?forum=" + forumID.ToString() + "&amp;article=";

            int h2g2ID = 0;
            if (owner != null)
            {
                h2g2ID = owner.Masthead;
            }
            if (h2g2ID == 0)
            {
                if (masthead != null)
                {
                    h2g2ID = masthead.H2G2ID;
                }
            }

            discussLink += h2g2ID.ToString();

            string editLink = "/UserEdit" + h2g2ID.ToString() + "?Masthead=1";

		    // now set the apppropriate buttons in the UI object
		    // currently you only get the edit page button if this is actually your homepage, i.e. you
		    // wont get it if you have editor status
            pageInterface.SetDiscussVisibility(allowDiscuss, discussLink);
            pageInterface.SetEditPageVisibility(allowEdit, editLink);

            return true;
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Remove the thread from the Forum
        /// </summary>
        /// <param name="userID"></param>
        /// <param name="rFID"></param>
        /// <param name="H2G2ID"></param>
        /// <param name="threadID"></param>
        /// <param name="forumID"></param>
        /// <param name="hasPermission"></param>
        public void RemoveThreadFromForum(int userID, int rFID, int H2G2ID, ref int threadID, ref int forumID, bool hasPermission)
        {
            XmlElement submitReviewForum = AddElementTag(RootElement, "SUBMIT-REVIEW-FORUM");
            if (rFID <= 0 || H2G2ID <= 0)
            {
                AddErrorXml("RMBADID", "Bad arguments for this action", submitReviewForum);
                return;
            }

            //Initialise the article
            GuideEntrySetup guideSetup = new GuideEntrySetup(H2G2ID);
            guideSetup.ShowEntryData = true;
            guideSetup.ShowPageAuthors = false;
            guideSetup.ShowReferences = false;

            GuideEntry guideEntry = new GuideEntry(InputContext, guideSetup);
            guideEntry.Initialise();

            int postID = 0;

            using (IDnaDataReader dataReader = InputContext.CreateDnaDataReader("fetchreviewforummemberdetails"))
            {
                dataReader.AddParameter("h2g2id", H2G2ID);
                dataReader.Execute();
                // Check to see if we found anything
                if (dataReader.HasRows && dataReader.Read())
                {
                    int submitterID = dataReader.GetInt32NullAsZero("SubmitterID");
                    postID = dataReader.GetInt32NullAsZero("PostID");
                    threadID = dataReader.GetInt32NullAsZero("ThreadID");
                    forumID = dataReader.GetInt32NullAsZero("ForumID");
                    int actualReviewForumID = dataReader.GetInt32NullAsZero("ReviewForumID");

	                //make sure that we are in the right review forum for the article
                    if (rFID != actualReviewForumID)
                    {
                        AddErrorXml("BADRFID", "The article is in a different review forum.", submitReviewForum);
                        return;
                    }

                	//Permission has been verified by the caller so don't check
                    if (!hasPermission)
                    {
 		                //ok if you're an editor
                        if (!InputContext.ViewingUser.IsEditor)
                        {
                            //ok if you are the author
                            if (!(guideEntry.AuthorsUserID == InputContext.ViewingUser.UserID))
                            {
                                //ok if you are the submitter
                                if (!(InputContext.ViewingUser.UserID == submitterID))
                                {
                                    AddErrorXml("BADUSER", "You do not have permission to move the thread", submitReviewForum);
                                }
                            }
                        }
                   }
                }
                else
                {
                    AddErrorXml("BADH2G2ID", "The article is not in a review forum.", submitReviewForum);
                    return;
                }
            }

            ReviewForum reviewForum = new ReviewForum(InputContext);
            reviewForum.InitialiseViaReviewForumID(rFID, false);
            if (!reviewForum.IsInitialised)
            {
                AddErrorXml("NOREVIEW", "Invalid Review Forum ID", submitReviewForum);
                return;
            }

            bool movedThread = false;

            using (IDnaDataReader dataReader = InputContext.CreateDnaDataReader("MoveThread2"))
            {
                dataReader.AddParameter("ThreadID", threadID);
                dataReader.AddParameter("ForumID", guideEntry.ForumID);
                dataReader.Execute();
                // Check to see if we found anything
                if (dataReader.HasRows && dataReader.Read())
                {
                    movedThread = dataReader.GetBoolean("Success");
                }
            }
            if(!movedThread)
            {
                AddErrorXml("NOMOVE", "Failed to move thread to article", submitReviewForum);
                return;
            }

            int removedFromPeerReview = 0;
            using (IDnaDataReader dataReader = InputContext.CreateDnaDataReader("removearticlefrompeerreview"))
            {
                dataReader.AddParameter("H2G2ID", H2G2ID);
                dataReader.Execute();
                // Check to see if we found anything
                if (dataReader.HasRows && dataReader.Read())
                {
                    removedFromPeerReview = dataReader.GetInt32NullAsZero("Success");
                }
            }

            bool undoneThread = false;
            if (removedFromPeerReview == 0)
            {
                using (IDnaDataReader dataReader = InputContext.CreateDnaDataReader("UndoThreadMove"))
                {
                    dataReader.AddParameter("ThreadID", threadID);
                    dataReader.AddParameter("PostID", 0);
                    dataReader.Execute();
                    // Check to see if we found anything
                    if (dataReader.HasRows && dataReader.Read())
                    {
                        undoneThread = dataReader.GetBoolean("Success");
                    }
                }
                if (!undoneThread)
                {
                    AddErrorXml("HALFMOVE", "The thread has been moved, but not from review", submitReviewForum);
                    return;
                }
                else
                {
                    AddErrorXml("NOMOVE", "Failed to move thread to article", submitReviewForum);
                    return;
                }
            }

            using (IDnaDataReader dataReader = InputContext.CreateDnaDataReader("ForceUpdateEntry"))
            {
                dataReader.AddParameter("H2G2ID", H2G2ID);
                dataReader.Execute();
            }

            string postSubject = String.Empty;
            string postText = String.Empty;
            string newSubject = String.Empty;

            using (IDnaDataReader dataReader = InputContext.CreateDnaDataReader("FetchPostDetails"))
            {
                dataReader.AddParameter("PostID", postID);
                dataReader.Execute();
                // Check to see if we found anything
                if (dataReader.HasRows && dataReader.Read())
                {
                    postSubject = dataReader.GetStringNullAsEmpty("Subject");
                    postText = dataReader.GetStringNullAsEmpty("Text");

                    newSubject = reviewForum.ReviewForumName + ": " + postSubject;
                }
            }
            using (IDnaDataReader dataReader = InputContext.CreateDnaDataReader("UpdatePostDetails"))
            {
                dataReader.AddParameter("UserID", 0);
                dataReader.AddParameter("PostID", postID);
                dataReader.AddParameter("Subject", newSubject);
                dataReader.AddParameter("Text", postText);
                dataReader.AddParameter("SetLastUpdated", false);
                dataReader.AddParameter("ForceModerateAndHide", false);
                dataReader.AddParameter("IgnoreModeration", true);
                dataReader.Execute();
            }
            //update the thread first subject details
            using (IDnaDataReader dataReader = InputContext.CreateDnaDataReader("updatethreadfirstsubject"))
            {
                dataReader.AddParameter("ThreadID", threadID);
                dataReader.AddParameter("firstsubject", newSubject);
                dataReader.Execute();
            }
            //post the success story
            XmlElement movedThreadXml = AddElementTag(submitReviewForum, "MOVEDTHREAD");
            AddIntElement(movedThreadXml, "H2G2ID", H2G2ID);
            AddTextTag(movedThreadXml, "SUBJECT", guideEntry.Subject);
            XmlElement reviewForumXml = AddElementTag(movedThreadXml, "REVIEWFORUM");
            AddAttribute(reviewForumXml, "ID", rFID);
            AddTextTag(reviewForumXml, "REVIEWFORUMNAME", reviewForum.ReviewForumName);
            AddTextTag(reviewForumXml, "URLFRIENDLYNAME", reviewForum.UrlFriendlyName);

        }
Ejemplo n.º 7
0
        /// <summary>
        /// Submits an article to a review forum
        /// </summary>
        /// <param name="user"></param>
        /// <param name="H2G2ID"></param>
        /// <param name="siteID"></param>
        /// <param name="response"></param>
        /// <param name="reviewForumID"></param>
        public void SubmitArticle(IUser user, int H2G2ID, int siteID, string response, int reviewForumID)
        {
            XmlElement submitReviewForum = AddElementTag(RootElement, "SUBMIT-REVIEW-FORUM");
            if (user.UserID == 0)
            {
                AddGracefulErrorXml("NO_USERID", "You have not logged in!", "Login", "Login", submitReviewForum);
            }

            if (response == String.Empty)
            {
                AddErrorXml("NO_COMMENT", "There should be comments with this click back to back", submitReviewForum);
            }

            GuideEntrySetup guideSetup = new GuideEntrySetup(H2G2ID);
            guideSetup.ShowEntryData = true;
            guideSetup.ShowPageAuthors = true;
            guideSetup.ShowReferences = false;

            GuideEntry guideEntry = new GuideEntry(InputContext, guideSetup);
            guideEntry.Initialise();

            if (guideEntry.IsSubmittable && !user.IsEditor)
            {
                AddGracefulErrorXml("NO_SUBMIT", "This article is not for review", "FRONTPAGE", "Back to frontpage", submitReviewForum);
            }

            string subjectName = String.Empty;
            XmlElement subjectNameElement = (XmlElement) guideEntry.RootElement.SelectSingleNode("ARTICLE/SUBJECT");
            if (subjectNameElement != null)
            {
                subjectName = subjectNameElement.InnerText;
            }
            int editorID = 0;
            XmlElement editorIDElement = (XmlElement)guideEntry.RootElement.SelectSingleNode("PAGEAUTHOR/EDITOR/USERID");
            if (editorIDElement != null)
            {
                Int32.TryParse(editorIDElement.InnerText, out editorID);
            }

            string subject = "A" + H2G2ID.ToString() + " - " + subjectName;
            string aNumber = "A" + H2G2ID.ToString();

            User editor = new User(InputContext);
            editor.CreateUser(editorID);

            string editedComments = "Entry: " + subjectName + " - A" + H2G2ID + "\n";
            editedComments += "Author: " + editor.UserName + " - U" + editorID + "\n\n";
            editedComments += response;

            string hash = String.Empty;
            string hashString = subject + "<:>" + editedComments + "<:>" + user.UserID + "<:>0<:>0<:>0<:>ToReviewForum";

            using (IDnaDataReader dataReader = InputContext.CreateDnaDataReader("addarticletoreviewforummembers"))
            {
                dataReader.AddParameter("h2g2id", H2G2ID);
                dataReader.AddParameter("reviewforumid", reviewForumID);
                dataReader.AddParameter("submitterid", user.UserID);
                dataReader.AddParameter("subject", subject);
                dataReader.AddParameter("content", editedComments);
                dataReader.AddParameter("Hash", DnaHasher.GenerateHash(hashString));

                dataReader.Execute();
                // Check to see if we found anything
                if (dataReader.HasRows && dataReader.Read())
                {
                    XmlElement article = AddTextTag(submitReviewForum, "ARTICLE", subjectName);
                    AddAttribute(article, "H2G2ID", H2G2ID);
                    XmlElement newThread = AddElementTag(submitReviewForum, "NEW-THREAD");
                    AddAttribute(newThread, "postid", dataReader.GetInt32NullAsZero("PostID"));
                    AddAttribute(newThread, "threadid", dataReader.GetInt32NullAsZero("ThreadID"));
                    AddAttribute(newThread, "forumid", dataReader.GetInt32NullAsZero("ForumID"));

                    ReviewForum reviewForum = new ReviewForum(InputContext);
                    reviewForum.InitialiseViaReviewForumID(reviewForumID, false);
                    AddInside(newThread, reviewForum);
                }
            }
        }