/// <summary> /// Functions generates the User Subscription List /// </summary> /// <param name="userID">The user of the subscriptions to get</param> /// <param name="siteID">Site of the posts</param> /// <param name="skip">number of posts to skip</param> /// <param name="show">number to show</param> /// <returns>Whether created ok</returns> public bool CreateUserSubscriptionsList(int userID, int siteID, int skip, int show) { // check object is not already initialised if (userID <= 0 || show <= 0) { return false; } int count = show; XmlElement UserSubscriptionsList = AddElementTag(RootElement, "USERSUBSCRIPTION-LIST"); AddAttribute(UserSubscriptionsList, "SKIP", skip); AddAttribute(UserSubscriptionsList, "SHOW", show); using (IDnaDataReader dataReader = GetUsersSubscriptionList(userID, siteID, skip, show + 1)) // Get +1 so we know if there are more left { // Check to see if we found anything Owner of the list record first // then their list in the following recordset string userName = String.Empty; if (dataReader.HasRows && dataReader.Read()) { User subscriber = new User(InputContext); subscriber.AddPrefixedUserXMLBlock(dataReader, userID, "Subscriber", UserSubscriptionsList); _userAcceptsSubscriptions = dataReader.GetBoolean("SubscriberAcceptSubscriptions"); dataReader.NextResult(); if (dataReader.HasRows && dataReader.Read()) { XmlElement users = CreateElement("USERS"); do { User subscribedTo = new User(InputContext); int subscribedToID = dataReader.GetInt32NullAsZero("subscribedToID"); subscribedTo.AddUserXMLBlock(dataReader, subscribedToID, users); count--; } while (count > 0 && dataReader.Read()); // dataReader.Read won't get called if count == 0 UserSubscriptionsList.AppendChild(users); // See if there's an extra row waiting if (count == 0 && dataReader.Read()) { AddAttribute(UserSubscriptionsList, "MORE", 1); } } } } return true; }
/// <summary> /// Functions generates the TryCreateComingUp XML /// </summary> /// <param name="skip">Number of posts to skip</param> /// <param name="show">Number of posts to show</param> public void TryCreateComingUpXML(int skip, int show) { //Clean any existing XML. RootElement.RemoveAll(); int recordsCount = 0; int total = 0; int numberToTryandGet = show + 1; XmlElement recommendations = AddElementTag(RootElement, "RECOMMENDATIONS"); AddAttribute(recommendations, "COUNT", show); AddAttribute(recommendations, "SKIPTO", skip); using (IDnaDataReader dataReader = InputContext.CreateDnaDataReader("getacceptedentries")) { dataReader.AddParameter("siteID", InputContext.CurrentSite.SiteID); dataReader.Execute(); // Check to see if we found anything if (dataReader.HasRows && dataReader.Read()) { //Read/skip over the skip number of rows so that the row that the first row that in the do below is //the one required for (int i = 0; i < skip; i++) { dataReader.Read(); } do { string subject = dataReader.GetStringNullAsEmpty("Subject"); int guideStatus = dataReader.GetInt32NullAsZero("GuideStatus"); int acceptedStatus = dataReader.GetByteNullAsZero("AcceptedStatus"); int originalEntryID = dataReader.GetInt32NullAsZero("OriginalEntryID"); int originalh2g2ID = dataReader.GetInt32NullAsZero("Originalh2g2ID"); int newEntryID = dataReader.GetInt32NullAsZero("EntryID"); int newh2g2ID = dataReader.GetInt32NullAsZero("h2g2ID"); int subEditorID = dataReader.GetInt32NullAsZero("SubEditorID"); int scoutID = dataReader.GetInt32NullAsZero("ScoutID"); DateTime dateAllocated = DateTime.MinValue; DateTime dateReturned = DateTime.MinValue; bool existsDateAllocated = !dataReader.IsDBNull("DateAllocated"); bool existsDateReturned = !dataReader.IsDBNull("DateReturned"); if (existsDateAllocated) { dateAllocated = dataReader.GetDateTime("DateAllocated"); } if (existsDateReturned) { dateReturned = dataReader.GetDateTime("DateReturned"); } XmlElement recommendation = AddElementTag(recommendations, "RECOMMENDATION"); AddTextTag(recommendation, "SUBJECT", subject); AddIntElement(recommendation, "ACCEPTEDSTATUS", acceptedStatus); AddIntElement(recommendation, "GUIDESTATUS", guideStatus); XmlElement original = AddElementTag(recommendation, "ORIGINAL"); AddIntElement(original, "ENTRYID", originalEntryID); AddIntElement(original, "H2G2ID", originalh2g2ID); XmlElement edited = AddElementTag(recommendation, "EDITED"); AddIntElement(edited, "ENTRYID", newEntryID); AddIntElement(edited, "H2G2ID", newh2g2ID); User user = new User(InputContext); user.AddPrefixedUserXMLBlock(dataReader, scoutID, "scout", recommendation); user = new User(InputContext); user.AddPrefixedUserXMLBlock(dataReader, subEditorID, "subeditor", recommendation); if (existsDateAllocated) { AddDateXml(dateAllocated, recommendation, "DATEALLOCATED"); } if (existsDateReturned) { AddDateXml(dateReturned, recommendation, "DATERETURNED"); } total++; recordsCount++; } while (dataReader.Read()); } } AddAttribute(recommendations, "COUNT", recordsCount); AddAttribute(recommendations, "TOTAL", total); }
/// <summary> /// Generates XML for Blocked User Subscriptions. /// Allows the author to stop blocked users from tracking their content. /// </summary> /// <param name="userID">The ID of the user to get the list of blocked users for</param> /// <param name="skip">Number of blocked users to skip</param> /// <param name="show">Number of blocked users to show</param> private void GenerateBlockedUserSubscriptionsXml(int userID, int skip, int show) { XmlElement bannedUserSubscriptions = AddElementTag(RootElement, "BLOCKEDUSERSUBSCRIPTIONS"); AddAttribute(bannedUserSubscriptions, "USERID", userID); bool userAcceptsSubscriptions = false; if (_actionResult != null) { bannedUserSubscriptions.AppendChild(_actionResult); } XmlElement bannedList = AddElementTag(bannedUserSubscriptions, "BLOCKEDUSERSUBSCRIPTIONS-LIST"); AddAttribute(bannedList, "SKIP", skip); AddAttribute(bannedList, "SHOW", show); bannedUserSubscriptions.AppendChild(bannedList); XmlElement users = CreateElement("USERS"); using (IDnaDataReader dataReader = InputContext.CreateDnaDataReader("getblockedusersubscriptions")) { dataReader.AddParameter("userid", userID); dataReader.AddParameter("siteid", InputContext.CurrentSite.SiteID); dataReader.AddParameter("skip", skip); dataReader.AddParameter("show", show + 1); dataReader.Execute(); if (dataReader.HasRows && dataReader.Read()) { User blocker = new User(InputContext); blocker.AddPrefixedUserXMLBlock(dataReader, userID, "Blocker", bannedList); userAcceptsSubscriptions = dataReader.GetBoolean("BlockerAcceptSubscriptions"); AddAttribute(bannedUserSubscriptions, "ACCEPTSUBSCRIPTIONS", Convert.ToInt32(userAcceptsSubscriptions)); //Get the list from the second recordset dataReader.NextResult(); if (dataReader.HasRows) { User user = new User(InputContext); int count = show; while (((count--) > 0) && dataReader.Read()) { //Delegate generation of standardised User XML to User class. int blockedUserId = dataReader.GetInt32NullAsZero("userid"); user.AddUserXMLBlock(dataReader, blockedUserId, users); } if (count <= 0 && dataReader.Read()) { AddAttribute(bannedList, "MORE", 1); } } } } bannedList.AppendChild(users); }
/// <summary> /// Helper method to create the list after a specific stored procedure /// has been called to return an appropriate results set. /// </summary> /// <param name="articleList"></param> /// <param name="dataReader"></param> /// <param name="skip">Number of Articles to skip</param> /// <param name="show">Number of Articles to show</param> /// <returns></returns> public int CreateList(XmlElement articleList, IDnaDataReader dataReader, int skip, int show) { int count = show; bool records = true; //Read/skip over the skip number of rows so that the row that the first row that in the do below is //the one required for (int i = 0; i < skip; i++) { records = dataReader.Read(); if (!records) { break; } } if (records) { do { // Setup the article XmlElement article = AddElementTag(articleList, "ARTICLE"); if (dataReader.DoesFieldExist("EntryID")) { AddIntElement(article, "ENTRY-ID", dataReader.GetInt32NullAsZero("EntryID")); } if (dataReader.DoesFieldExist("h2g2ID")) { AddAttribute(article, "H2G2ID", dataReader.GetInt32NullAsZero("h2g2ID")); //TODO: remove the H2G2-ID from all schemas and skins... AddIntElement(article, "H2G2-ID", dataReader.GetInt32NullAsZero("h2g2ID")); } if (dataReader.DoesFieldExist("SiteID")) { AddIntElement(article, "SITEID", dataReader.GetInt32NullAsZero("SiteID")); } if (dataReader.DoesFieldExist("RecommendationID")) { AddIntElement(article, "RECOMMENDATION-ID", dataReader.GetInt32NullAsZero("RecommendationID")); } if (dataReader.DoesFieldExist("NotificationSent")) { AddIntElement(article, "NOTIFIED", dataReader.GetBoolean("NotificationSent") ? 1 : 0); } User user = new User(InputContext); if (dataReader.DoesFieldExist("Editor")) { // place all user details within a USER tag and structure them appropriately // editor info int editorID = dataReader.GetInt32NullAsZero("Editor"); XmlElement editorTag = AddElementTag(article, "EDITOR"); user.AddPrefixedUserXMLBlock(dataReader, editorID, "Editor", editorTag); } if (dataReader.DoesFieldExist("AuthorID")) { // author info int authorID = dataReader.GetInt32NullAsZero("AuthorID"); XmlElement authorTag = AddElementTag(article, "AUTHOR"); user.AddPrefixedUserXMLBlock(dataReader, authorID, "Author", authorTag); } if (dataReader.DoesFieldExist("AcceptorID")) { // acceptor info (user that accepted a recommendation) int acceptorID = dataReader.GetInt32NullAsZero("AcceptorID"); XmlElement acceptorTag = AddElementTag(article, "ACCEPTOR"); user.AddPrefixedUserXMLBlock(dataReader, acceptorID, "Acceptor", acceptorTag); } if (dataReader.DoesFieldExist("AllocatorID")) { // allocator info (user that allocated a recommendation to a sub) int allocatorID = dataReader.GetInt32NullAsZero("AllocatorID"); XmlElement allocatorTag = AddElementTag(article, "ALLOCATOR"); user.AddPrefixedUserXMLBlock(dataReader, allocatorID, "Allocator", allocatorTag); } if (dataReader.DoesFieldExist("ScoutID")) { // scout info int scoutID = dataReader.GetInt32NullAsZero("ScoutID"); XmlElement scoutTag = AddElementTag(article, "SCOUT"); user.AddPrefixedUserXMLBlock(dataReader, scoutID, "Scout", scoutTag); } if (dataReader.DoesFieldExist("SubEditorID")) { // sub editor info int subEditorID = dataReader.GetInt32NullAsZero("SubEditorID"); XmlElement subEditorTag = AddElementTag(article, "SUBEDITOR"); user.AddPrefixedUserXMLBlock(dataReader, subEditorID, "SubEditor", subEditorTag); } if (dataReader.DoesFieldExist("Status")) { AddIntElement(article, "STATUS", dataReader.GetInt32NullAsZero("Status")); } if (dataReader.DoesFieldExist("RecommendationStatus")) { AddIntElement(article, "RECOMMENDATION-STATUS", dataReader.GetInt32NullAsZero("RecommendationStatus")); } if (dataReader.DoesFieldExist("SubbingStatus")) { AddIntElement(article, "SUBBING-STATUS", dataReader.GetInt32NullAsZero("SubbingStatus")); } if (dataReader.DoesFieldExist("Style")) { AddIntElement(article, "STYLE", dataReader.GetInt32NullAsZero("Style")); } if (dataReader.DoesFieldExist("Subject")) { AddTextTag(article, "SUBJECT", dataReader.GetStringNullAsEmpty("Subject")); } if (dataReader.DoesFieldExist("DateCreated")) { AddDateXml(dataReader, article, "DateCreated", "DATE-CREATED"); } if (dataReader.DoesFieldExist("LastUpdated")) { AddDateXml(dataReader, article, "LastUpdated", "LASTUPDATED"); } if (dataReader.DoesFieldExist("DateRecommended")) { AddDateXml(dataReader, article, "DateRecommended", "DATE-RECOMMENDED"); } if (dataReader.DoesFieldExist("DecisionDate")) { AddDateXml(dataReader, article, "DecisionDate", "RECOMMENDATION-DECISION-DATE"); } if (dataReader.DoesFieldExist("DateAllocated")) { AddDateXml(dataReader, article, "DateAllocated", "DATE-ALLOCATED"); } if (dataReader.DoesFieldExist("DateReturned")) { AddDateXml(dataReader, article, "DateReturned", "DATE-RETURNED"); } //TODO add Extra Info correctly if (dataReader.DoesFieldExist("ExtraInfo")) { //Add Extra Info XML where it exists. string extraInfo = dataReader.GetAmpersandEscapedStringNullAsEmpty("ExtraInfo"); if (extraInfo != string.Empty) { XmlDocument extraInfoXml = new XmlDocument(); extraInfoXml.LoadXml(extraInfo); article.AppendChild(ImportNode(extraInfoXml.FirstChild)); } //TODO Use Extra Info Class will need to change SP to get out the guide entry Type //ExtraInfo extraInfo = new ExtraInfo(); //extraInfo.TryCreate(dataReader.GetInt32NullAsZero("Type"), dataReader.GetStringNullAsEmpty("ExtraInfo")); //AddInside(article, extraInfo); } if (dataReader.DoesFieldExist("ForumPostCount")) { AddIntElement(article, "FORUMPOSTCOUNT", dataReader.GetInt32NullAsZero("ForumPostCount")); AddIntElement(article, "FORUMPOSTLIMIT", InputContext.GetSiteOptionValueInt("Forum", "PostLimit")); } if (dataReader.DoesFieldExist("StartDate") && !dataReader.IsDBNull("StartDate")) { AddDateXml(dataReader, article, "StartDate", "DATERANGESTART"); } // Take a day from the end date as stored in the database for UI purposes. // E.g. User submits a date range of 01/09/1980 to 02/09/1980. They mean for this to represent 2 days i.e. 01/09/1980 00:00 - 03/09/1980 00:00. // This gets stored in the database but for display purposes we subtract a day from the database end date to return the // original dates submitted by the user inorder to match their expectations. if (dataReader.DoesFieldExist("EndDate") && !dataReader.IsDBNull("EndDate")) { AddDateXml(dataReader.GetDateTime("EndDate").AddDays(-1), article, "DATERANGEEND"); } if (dataReader.DoesFieldExist("TimeInterval")) { AddIntElement(article, "TIMEINTERVAL", dataReader.GetInt32NullAsZero("TimeInterval")); } if (dataReader.DoesFieldExist("LASTPOSTED")) { AddDateXml(dataReader, article, "LASTPOSTED", "FORUMLASTPOSTED"); } ////////// if (dataReader.DoesFieldExist("BookmarkCount")) { AddTextTag(article, "BOOKMARKCOUNT", dataReader.GetInt32NullAsZero("BookmarkCount")); } if (dataReader.DoesFieldExist("ZeitgeistScore")) { AddElement(article, "ZEITGEIST", "<SCORE>" + dataReader.GetDoubleNullAsZero("ZeitgeistScore") + "</SCORE>"); } #region LocationXML //*********************************************************************** // Location Info //*********************************************************************** if (dataReader.DoesFieldExist("Latitude") && !dataReader.IsDBNull("Latitude")) { AddTextTag(article, "LATITUDE", dataReader.GetDoubleNullAsZero("Latitude").ToString()); AddTextTag(article, "LONGITUDE", dataReader.GetDoubleNullAsZero("Longitude").ToString()); if (dataReader.DoesFieldExist("Distance")) { if (dataReader.GetDoubleNullAsZero("Distance") < 0.0001) { AddTextTag(article, "DISTANCE", "0"); } else { AddTextTag(article, "DISTANCE", dataReader.GetDoubleNullAsZero("Distance").ToString()); } } AddTextTag(article, "LOCATIONTITLE", dataReader.GetString("LocationTitle")); AddTextTag(article, "LOCATIONDESCRIPTION", dataReader.GetString("LocationDescription")); AddTextTag(article, "LOCATIONZOOMLEVEL", dataReader.GetInt32NullAsZero("LocationZoomLevel").ToString()); AddTextTag(article, "LOCATIONUSERID", dataReader.GetInt32NullAsZero("LocationUserID").ToString()); AddDateXml(dataReader.GetDateTime("LocationDateCreated"), article, "LOCATIONDATECREATED"); } //*********************************************************************** #endregion if (dataReader.DoesFieldExist("MediaAssetID")) { AddMediaAssetXml(dataReader, article, dataReader.GetInt32NullAsZero("MediaAssetID")); } if (dataReader.DoesFieldExist("CRPollID")) { AddPollXml(dataReader, article); } count--; } while (count > 0 && dataReader.Read()); // dataReader.Read won't get called if count == 0 // See if there's an extra row waiting if (count == 0 && dataReader.Read()) { AddAttribute(articleList, "MORE", 1); } } return count; }