/* <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); } } } }
/// <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); }
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; }
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; }
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() + "&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; }
/// <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); }
/// <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); } } }