예제 #1
0
        /// <summary>
        /// Process Request Override
        /// </summary>
        public override void ProcessRequest()
        {

            if (InputContext.ViewingUser == null || !InputContext.ViewingUser.IsEditor)
            {
                AddErrorXml("Unauthorised", "User not authorised", RootElement);
                return;
            }

            string groupName = String.Empty;
            if (InputContext.DoesParamExist("manage", "manage"))
            {
                groupName = InputContext.GetParamStringOrEmpty("manage", "manage");
            }

            if ( groupName == String.Empty )
                groupName = "moderator";

            // Process Input
            var foundUserId = ProcessSubmission( groupName );

            // Generate XML
            GenerateXml( groupName, foundUserId );

            // Get a list of all the sites.
            SiteXmlBuilder siteXml = new SiteXmlBuilder(InputContext);
            RootElement.AppendChild(ImportNode(siteXml.GenerateSitesForUserAsEditorXml(InputContext.TheSiteList).FirstChild));

        }
예제 #2
0
        /// <summary>
        /// 
        /// </summary>
        public override void ProcessRequest()
        {

            bool alerts = InputContext.GetParamBoolOrFalse("alerts", "Moderation Alerts");
            bool referrals = InputContext.GetParamBoolOrFalse("referrals", "Refered Items");
            bool locked = InputContext.GetParamBoolOrFalse("locked", "Locked Items");
            bool fastMod = InputContext.GetParamBoolOrFalse("fastmod", "!Fast Moderation");
            int modClassId = InputContext.GetParamIntOrZero("modclassid", "Moderation Class Id");
            int postId = InputContext.GetParamIntOrZero("postfilterid", "PostId Filter");
            int show = InputContext.GetParamIntOrZero("show", "Number of Items");
            if (show == 0)
            {
                show = 10;
            }

            // Process Input
            ProcessSubmission();

            if (InputContext.DoesParamExist("done","Redirect"))
            {
                String redir = InputContext.GetParamStringOrEmpty("redirect", "Redirect");
                //AddDnaRedirect("moderate?newstyle=1");
                XmlNode redirect = AddElementTag(RootElement, "REDIRECT");
                AddAttribute(redirect, "URL", redir);
                return;
            }

            // Generate XML
            GenerateXml(alerts, referrals, locked, fastMod, InputContext.ViewingUser.UserID, modClassId, postId, show);
            
            // Get a list of all the sites.
            SiteXmlBuilder siteXml = new SiteXmlBuilder(InputContext);
            RootElement.AppendChild(ImportNode(siteXml.GenerateAllSitesXml(InputContext.TheSiteList).FirstChild));

            // Get a list of site options for all sites.
            RootElement.AppendChild(ImportNode(siteXml.GetSiteOptionListXml(InputContext.TheSiteList)));

            //Get Moderation Resons for current moderation class
            ModerationReasons modReasons = new ModerationReasons(InputContext);
            RootElement.AppendChild(ImportNode(modReasons.GenerateXml(modClassId)) );

            //Get Distress Messages for current Moderation Class
            ModerationDistressMessages mdm = new ModerationDistressMessages(InputContext);
            RootElement.AppendChild(ImportNode(mdm.GenerateXml(modClassId)));
            
        }
예제 #3
0
        /// <summary>
        /// Functions generates the Recent Posts List
        /// </summary>
        /// <param name="userID">The user of the posts to get</param>
        /// <param name="skip">number of posts to skip</param>
        /// <param name="show">number to show</param>
        /// <param name="postType">Type of posts to look for</param>
        /// <param name="siteID">Site of the posts</param>
        /// <returns>Whether created ok</returns>
        public bool CreateRecentPostsList(int userID, int skip, int show, int postType, int siteID)
        {
	        //TDVASSERT(userID > 0, "CreateRecentPostsList(...) called with non-positive ID");
	        //TDVASSERT(iMaxNumber > 0, "CreateRecentPostsList(...) called with non-positive max number of posts");
        	
	        // check object is not already initialised
	        if (userID <= 0 || show <= 0)
	        {
		        return false;
	        }

	        bool showPrivate = false;
            if (InputContext.ViewingUser != null && (userID == InputContext.ViewingUser.UserID || InputContext.ViewingUser.IsEditor))
	        {
		        showPrivate = true;
	        }

	        //Allow post authors to see their user-deleted notices and events.
	        bool showUserHidden = showPrivate && (postType == 1 || postType == 2);
            int count = 0;
            int rows = 0;

            XmlElement postList = AddElementTag(RootElement, "POST-LIST");
            AddAttribute(postList, "SHOW", show);
            AddAttribute(postList, "SKIPTO", skip);
            //AddAttribute(postList, "COUNT", show);

            using (IDnaDataReader dataReader = GetUsersMostRecentPosts(userID, skip, show, postType, siteID, showUserHidden))
            {         
		        // Check to see if we found anything
		        string userName = String.Empty;
		        if (dataReader.HasRows && dataReader.Read())
		        {
                    User user = new User(InputContext);
                    user.AddUserXMLBlock(dataReader, userID, postList);
       		
                    string threadPostType = String.Empty;
                    string threadSubject = String.Empty;
		            ArrayList noticeThreadIDArray = new ArrayList();
		            int threadID = 0;
		            int postSiteID = 0;		
		            int IsPostingFromVisibleSite = 0;

                    if (skip > 0)
                    {
                        //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();
                        }
                    }
                    //TODO think i will need to check if the reads fail above ie you skip past the end
		            Forum Forum = new Forum(InputContext);

		            do
		            {
			            IsPostingFromVisibleSite = dataReader.GetInt32NullAsZero("IsPostingFromVisibleSite"); 
			            if (IsPostingFromVisibleSite == 1)
			            {
 				            // Setup the Post Tag and Attributes
                            XmlElement post = CreateElement("POST");

				            AddAttribute(post, "COUNTPOSTS", dataReader.GetInt32NullAsZero("CountPosts"));

				            if (showPrivate)
				            {
                                AddAttribute(post, "LASTPOSTCOUNTREAD", dataReader.GetInt32NullAsZero("LastPostCountRead"));
				            }

				            // Add User-Hidden Status.
				            if ( showUserHidden && dataReader.DoesFieldExist("Hidden") && dataReader.GetInt32NullAsZero("Hidden") > 0 )
                            {
                                AddAttribute(post, "HIDDEN", dataReader.GetInt32NullAsZero("HIDDEN"));
				            }

				            int yourLastPost = dataReader.GetInt32NullAsZero("YourLastPost");			
            		
				            //add the editable attribute
                            if (InputContext.ViewingUser != null)
				            {
					            int editable = 0;
                                if (InputContext.ViewingUser.UserID != userID)
					            {
						            editable = 0;
					            }
					            else
					            {
						            if (yourLastPost > 0 )
						            {
							            DateTime dateMostRecent = dataReader.GetDateTime("MostRecent");		
                                        editable = Forum.GetPostEditableAttribute(userID, dateMostRecent);
						            }
						            else
						            {
							            editable = 0;
						            }
					            }
                                AddAttribute(post, "EDITABLE", editable);
				            }

                            AddAttribute(post, "PRIVATE", dataReader.GetInt32NullAsZero("Private"));

				            // Add the siteid and reply details
                            postSiteID = dataReader.GetInt32NullAsZero("SiteID");
                            AddIntElement(post, "SITEID", postSiteID);
                            AddIntElement(post, "HAS-REPLY", dataReader.GetInt32NullAsZero("Replies"));


				            // Setup a Thread Tag and Attributes
                            XmlElement thread = CreateElement("Thread");
                            AddAttribute(thread, "FORUMID", dataReader.GetInt32NullAsZero("ForumID"));
                           
                            threadID = dataReader.GetInt32NullAsZero("ThreadID");
                            AddAttribute(thread, "THREADID", threadID);

				            // Add the first post id if it exists in the result set
				            if (dataReader.DoesFieldExist("FirstPostID"))
				            {
                                AddAttribute(thread, "FIRSTPOSTID", dataReader.GetInt32NullAsZero("FirstPostID"));
				            }

                            threadPostType = dataReader.GetStringNullAsEmpty("Type");
                            AddAttribute(thread, "TYPE", threadPostType);

                            AddDateXml(dataReader, thread, "EVENTDATE", "EventDate");
                            AddDateXml(dataReader, thread, "DATEFIRSTPOSTED", "DateFirstPosted");

				            // See if we've got an notice or event, if so then get the taginfo for the post
                            if (threadPostType == "notice" || threadPostType == "event")
				            {
					            // Add the threadid to the array so we can get the tag details later
					            noticeThreadIDArray.Add(threadID);
				            }

				            // Add the Subject 
                            threadSubject = ThreadPost.FormatSubject(dataReader.GetStringNullAsEmpty("FirstSubject"), CommentStatus.Hidden.NotHidden);
                            AddTextTag(thread, "SUBJECT", threadSubject);
                            
                            AddDateXml(dataReader, thread, "LastReply", "REPLYDATE");

				            // If we have a journal user then put the following in...
				            if (dataReader.GetInt32NullAsZero("Journal") > 0)
				            {
                                XmlElement journal = CreateElement("JOURNAL");
                                AddAttribute(journal, "USERID", dataReader.GetInt32NullAsZero("Journal"));

                                AddTextTag(journal, "UserName", dataReader.GetStringNullAsEmpty("JournalName"));
                                AddTextTag(journal, "Area", dataReader.GetStringNullAsEmpty("JournalArea"));
                                AddTextTag(journal, "FirstNames", dataReader.GetStringNullAsEmpty("JournalFirstNames"));
                                AddTextTag(journal, "LastName", dataReader.GetStringNullAsEmpty("JournalLastName"));
                                AddTextTag(journal, "Title", dataReader.GetStringNullAsEmpty("JournalTitle"));
                                AddTextTag(journal, "SiteSuffix", dataReader.GetStringNullAsEmpty("JournalSiteSuffix"));

                                thread.AppendChild(journal);
				            }

				            // Get the ForumInfo and Last post details
                            //AddTextTag(thread, "ForumTitle", dataReader.GetStringNullAsEmpty("ForumTitle"));
                            string forumTitle = dataReader.GetStringNullAsEmpty("ForumTitle");
                            XmlElement forumTitleElement = AddTextElement(thread, "ForumTitle", "");
                            try
                            {
                                forumTitleElement.InnerXml = forumTitle;
                            }
                            catch (System.Xml.XmlException ex)
                            {
                                AppContext.TheAppContext.Diagnostics.WriteWarningToLog("PostList", "Escaping character in Forum Title" + ex.Message);
                                forumTitleElement.InnerXml = StringUtils.EscapeAllXml(forumTitle);
                            }

                            if (yourLastPost > 0)
				            {
                                XmlElement lastUserPost = CreateElement("LASTUSERPOST");
                                AddAttribute(lastUserPost, "POSTID", yourLastPost );
                                AddDateXml(dataReader, lastUserPost, "MostRecent", "DATEPOSTED");
                                thread.AppendChild(lastUserPost);
				            }

				            // Close the ThreadTag
                            post.AppendChild(thread);

				            // Add the first poster info
				            int firstPostUserID = 0;
                            XmlElement firstPoster = CreateElement("FIRSTPOSTER");
                            firstPostUserID = dataReader.GetInt32NullAsZero("FirstPosterUserID");
                            user.AddPrefixedUserXMLBlock(dataReader, firstPostUserID, "FirstPoster", firstPoster);
                            post.AppendChild(firstPoster);

				            // Finally close the POST tag
                            postList.AppendChild(post);
                            count++;
			            }
                        rows++;
                    } while (rows < show && dataReader.Read());
                    if (dataReader.Read())
                    {
                        AddAttribute(postList, "MORE", 1);
                    }

		            // Now insert the tag info for any notices or events found
		            if (noticeThreadIDArray.Count > 0)
		            {
			            // Set up some locals
			            string taggedNodeInfo;
			            int noticeThreadID = 0;
			            TagItem tagItem = new TagItem(InputContext);

			            // Now go through the list adding the taginfo into the XML
			            for (int i = 0; i < noticeThreadIDArray.Count; i++)
			            {
				            // Get the ThreadId for the current Index
				            noticeThreadID = (int) noticeThreadIDArray[i];
				            taggedNodeInfo = String.Empty;

				            // Get the Tagging locations!
				            if (tagItem.InitialiseFromThreadId(noticeThreadID, siteID, userID, threadSubject, false) && tagItem.GetAllNodesTaggedForItem())
				            {
					            // Get the taginfo from the tagitem object and insert it into the page
					            //tagItem.GetAsString(taggedNodeInfo);
					            //AddInsideWhereIntAttributeEquals("THREAD", "THREADID", noticeThreadID, taggedNodeInfo, 1);

                                string xpath = "/THREAD[@THREADID=" + noticeThreadID.ToString() + "]";
                                XmlNodeList threads = postList.SelectNodes(xpath);
                                if (threads.Count > 0)
                                {
                                    foreach (XmlNode thread in threads)
                                    {
                                        SiteXmlBuilder siteXml = new SiteXmlBuilder(InputContext);
                                        thread.AppendChild(ImportNode(siteXml.GenerateAllSitesXml(InputContext.TheSiteList).FirstChild));
                                    }
                                }
				            }
				            else
				            {
					            // Setup an error for this post!
					            throw new DnaException("CreateRecentPostsList : FailedToGetTagInfo - Failed to get Tagging Info for post");
				            }
			            }
		            }
                }
            }
            AddAttribute(postList, "COUNT", count);

	        RemovePrivatePosts(showPrivate);

	        return true;
        }
예제 #4
0
 private void AddEditableSitesXML()
 {
     SiteXmlBuilder siteXml = new SiteXmlBuilder(InputContext);
     RootElement.AppendChild(ImportNode(siteXml.GenerateSitesForUserAsEditorXml(InputContext.TheSiteList, false, "EDITABLESITES").FirstChild));
 }
예제 #5
0
 private void AddCurrentSiteSiteOptionsXML()
 {
     SiteXmlBuilder siteXml = new SiteXmlBuilder(InputContext);
     RootElement.AppendChild(ImportNode(siteXml.GetSiteOptionListForSiteXml(selectedSite.SiteID, InputContext.TheSiteList, true)));
 }
예제 #6
0
 private void AddDefaultSiteOptionsListXML()
 {
     SiteXmlBuilder siteXml = new SiteXmlBuilder(InputContext);
     RootElement.AppendChild(ImportNode(siteXml.GetSiteOptionListForSiteXml(0, InputContext.TheSiteList, true)));
 }
예제 #7
0
 /// <summary>
 /// Put in the XML representation of all the sites into the page
 /// </summary>
 public void AddAllSitesXmlToPage()
 {
     SiteXmlBuilder siteXml = new SiteXmlBuilder(this);
     siteXml.GenerateAllSitesXml(TheSiteList);
     _page.AddInside(siteXml, "H2G2");
 }
예제 #8
0
        /// <summary>
        /// Calls the individual objects to generate the User Page XML
        /// </summary>
        /// <param name="userPageParameters"></param>
        private void GenerateUserPageXml(UserPageParameters userPageParameters)
        {
            // all the XML objects we need to build the page
            if (userPageParameters.IsRegistering)
            {
                //TODO REGISTER USER STUFF
            }
            else
            {
	            // introducing the players - these will point to the BBC.DNA Component objects required
	            // to construct a user page
                PageUI          pageInterface = new PageUI(userPageParameters.UserID);
	            User			owner = new User(InputContext);
	            GuideEntry		masthead = null;
	            Forum			pageForum = new Forum(InputContext);
	            Forum			journal = new Forum(InputContext);
	            PostList		recentPosts = new PostList(InputContext);
	            ArticleList	    recentArticles = new ArticleList(InputContext);
	            ArticleList	    recentApprovals = new ArticleList(InputContext);
	            CommentsList	recentComments = new CommentsList(InputContext);
                ArticleSubscriptionsList subscribedUsersArticles = new ArticleSubscriptionsList(InputContext);

                // get or create all the appropriate xml objects
                bool gotMasthead = false;
                bool gotPageForum = false;
                bool gotJournal = false;
                bool gotRecentPosts = false;
                bool gotRecentArticles = false;
                bool gotRecentApprovals = false;
                bool gotRecentComments = false;
                bool gotSubscribedToUsersRecentArticles = false;

                bool gotOwner = CreatePageOwner(userPageParameters.UserID, ref owner);

		        if (InputContext.GetSiteOptionValueBool("PersonalSpace", "IncludeUsersGuideEntry")      || userPageParameters.IncludeUsersGuideEntries ||
                    InputContext.GetSiteOptionValueBool("PersonalSpace", "IncludeUsersGuideEntryForum") || userPageParameters.IncludeUsersGuideEntriesForums)
		        {
                    gotMasthead = CreatePageArticle(userPageParameters.UserID, owner, out masthead);

                    if (gotMasthead && (InputContext.GetSiteOptionValueBool("PersonalSpace", "IncludeUsersGuideEntryForum") || userPageParameters.IncludeUsersGuideEntriesForums))
			        {
				        // GuideEntry forum can not be returned if GuideEntry is not being returned.
                        gotPageForum = CreatePageForum(masthead, ref pageForum);
			        }
		        }

                bool gotInterface = CreateUserInterface(owner, masthead, ref pageInterface);
        		
		        // Only display other information if the page has a valid masthead
		        if (gotMasthead)
		        {
                    if (InputContext.GetSiteOptionValueBool("PersonalSpace", "IncludeJournal") || userPageParameters.IncludeJournals)
			        {
                        gotJournal = CreateJournal(owner, ref journal);
			        }

                    if (InputContext.GetSiteOptionValueBool("PersonalSpace", "IncludeRecentPosts") || userPageParameters.IncludeRecentPosts)
			        {
                        gotRecentPosts = CreateRecentPosts(owner, ref recentPosts);
			        }

                    if (InputContext.GetSiteOptionValueBool("PersonalSpace", "IncludeRecentComments") || userPageParameters.IncludeRecentComments)
			        {
                        gotRecentComments = CreateRecentComments(owner, ref recentComments);
			        }

                    if (InputContext.GetSiteOptionValueBool("PersonalSpace", "IncludeRecentGuideEntries") || userPageParameters.IncludeRecentGuideEntries)
			        {
                        gotRecentArticles = CreateRecentArticles(owner, ref recentArticles);
                        gotRecentApprovals = CreateRecentApprovedArticles(owner, ref recentApprovals);
			        }

                    if (InputContext.GetSiteOptionValueBool("PersonalSpace", "IncludeUploads") || userPageParameters.IncludeRecentUploads)
			        {
				        //string sUploadsXML;
				        //CUpload Upload(m_InputContext);
				        //Upload.GetUploadsForUser(iUserID,sUploadsXML);
				        //pWholePage->AddInside("H2G2",sUploadsXML);
			        }

                    if (InputContext.GetSiteOptionValueBool("PersonalSpace", "IncludeRecentArticlesOfSubscribedToUsers") || userPageParameters.IncludeRecentArticlesOfSubscribedUsers)
			        {
                        gotSubscribedToUsersRecentArticles = CreateSubscribedToUsersRecentArticles(owner, InputContext.CurrentSite.SiteID, ref subscribedUsersArticles); 
			        }
                }


                XmlElement pageOwner = AddElementTag(RootElement, "PAGE-OWNER");
                if(gotOwner)
                {
                    AddInside(pageOwner, owner);
                }
                else
                {
                    XmlElement pretendUser = AddElementTag(pageOwner, "USER");
                    AddIntElement(pretendUser, "USERID", userPageParameters.UserID);
                    AddTextTag(pretendUser, "USERNAME", "Researcher " + userPageParameters.UserID.ToString());
                }
                if(gotInterface)
                {
                    AddInside(pageInterface, "");
                }

                if (userPageParameters.Clip)
                {
                    string clipSubject = String.Empty;
                    if (gotOwner)
                    {
                        clipSubject = owner.UserName;
                    }
                    else
                    {
                        clipSubject = "U" + userPageParameters.UserID.ToString();
                    }
                    Link link = new Link(InputContext);
                    //TODO ClipPageToUser page
                    link.ClipPageToUserPage("userpage", userPageParameters.UserID, clipSubject, String.Empty, InputContext.ViewingUser, userPageParameters.Private);
                    AddInside(link);                       
                }

                // if masthead NULL stylesheet should do the default response
                if (gotMasthead && (InputContext.GetSiteOptionValueBool("PersonalSpace", "IncludeUsersGuideEntry") || userPageParameters.IncludeUsersGuideEntries))
                {
                    AddInside(masthead);
                }
                // add page forum if there is one => this is the forum associated with
                // the guide enty that is the masthead for this user
                if (gotPageForum && (InputContext.GetSiteOptionValueBool("PersonalSpace", "IncludeUsersGuideEntryForum") || userPageParameters.IncludeUsersGuideEntriesForums))
                {
                    XmlElement articleForumTag = AddElementTag(RootElement, "ARTICLEFORUM");
                    AddInside(articleForumTag, pageForum);
                }
                // add journal if it exists
                if ( gotJournal)
                {
                    XmlElement journalTag = AddElementTag(RootElement, "JOURNAL");
                    AddInside(journalTag, journal);
                }
                // add recent posts if they exist, this may add an empty
                // POST-LIST tag if the user exists but has never posted
                if ( gotRecentPosts)
                {
                    XmlElement recentPostsTag = AddElementTag(RootElement, "RECENT-POSTS");
                    AddInside(recentPostsTag, recentPosts);
                }
                // add recent articles if they exist, this may add an empty
                // ARTICLES-LIST tag if the user exists but has never written a guide entry
                if ( gotRecentArticles)
                {
                    XmlElement recentEntries = AddElementTag(RootElement, "RECENT-ENTRIES");
                    AddInside(recentEntries, recentArticles);
                    // add the user XML for the owner too
                    if (gotOwner)
                    {
                        AddInside(recentEntries, owner);
                    }
                }
                // add recent approvals if they exist, this may add an empty
                // ARTICLES-LIST tag if the user exists but has never had an entry approved
                if ( gotRecentApprovals)
                {
                    XmlElement recentApprovalsTag = AddElementTag(RootElement, "RECENT-APPROVALS");
                    AddInside(recentApprovalsTag, recentApprovals);
                    // add the user XML for the owner too
                    if (gotOwner)
                    {
                        AddInside(recentApprovalsTag, owner);
                    }
                }
                // add recent comments if they exist, this may add an empty
                // COMMENTS-LIST tag if the user exists but has never posted
                if ( gotRecentComments)
                {
                    XmlElement recentCommentsTag = AddElementTag(RootElement, "RECENT-COMMENTS");
                    AddInside(recentCommentsTag, recentComments);
                }

                if ( gotSubscribedToUsersRecentArticles)
                {
                    XmlElement subscribedUsersArticlesTag = AddElementTag(RootElement, "RECENT-SUBSCRIBEDARTICLES");
                    AddInside(subscribedUsersArticlesTag, subscribedUsersArticles);
                }

                SiteXmlBuilder siteXml = new SiteXmlBuilder(InputContext);
                RootElement.AppendChild(ImportNode(siteXml.GenerateAllSitesXml(InputContext.TheSiteList).FirstChild));

                AddWatchListSection(userPageParameters, gotMasthead);

                AddWhosOnlineSection();

                AddClubsSection(userPageParameters, gotMasthead);

                AddPrivateForumSection(userPageParameters, gotMasthead, gotOwner);

                AddLinksSection(userPageParameters, owner, gotMasthead, gotOwner);

                AddTaggedNodesSection(userPageParameters, owner, gotMasthead);

                AddNoticeBoardPostcoderSection(userPageParameters, gotMasthead);

                AddSiteOptionSection(userPageParameters);
            }
        }
예제 #9
0
        /// <summary>
        /// Finalises the page by add required member variable XML to the page
        /// </summary>
        private void FinalisePage()
        {
            SiteXmlBuilder siteXml = new SiteXmlBuilder(this);
            Diagnostics.WriteToLog("FinalisePage", "Adding siteoption list for site " + CurrentSite.SiteID.ToString());

            XmlNode siteOptionList = siteXml.GetSiteOptionListForSiteXml(CurrentSite.SiteID, TheSiteList);
            siteXml.GenerateXml(siteOptionList, CurrentSite);
            InsertPageComponent(siteXml);

            // Add the domain tag to the page
            string domain = "bbc.co.uk";
            if (pageDomain == "com")
            {
                domain = "bbc.com";
            }
            _page.AddTextTag(_page.RootElement.FirstChild, "PAGEDOMAIN", domain);
        }
예제 #10
0
        private void GenerateAltIdentitiesXml(IDnaDataReader dataReader, XmlNode parentXml)
        {
            int postPassedCount = 0;
            int postFailedCount = 0;
            int postTotalCount = 0;
            int articlePassedCount = 0;
            int articleFailedCount = 0;
            int articleTotalCount = 0;

             // Add Result Data .
            while (dataReader.Read())
            {
                XmlNode memberXml = AddElementTag(parentXml,"MEMBERDETAILS");

                //AddUser XML
                XmlNode userXml = AddElementTag(memberXml, "USER");
                AddIntElement(userXml,"USERID", dataReader.GetInt32NullAsZero("userid"));
                AddTextTag(userXml, "USERNAME", dataReader.GetStringNullAsEmpty("username"));
                AddTextTag(userXml, "LOGINNAME", dataReader.GetStringNullAsEmpty("loginname"));
                AddTextTag(userXml, "EMAIL", dataReader.GetStringNullAsEmpty("email"));
                XmlNode statusXml = AddElementTag(userXml, "STATUS");
                AddAttribute(statusXml, "STATUSID", dataReader.GetInt32NullAsZero("prefstatus"));
                AddIntElement(userXml, "ACTIVE", Convert.ToInt32(dataReader.GetBoolean("active")));

                //Add Site XML.
                int siteId = dataReader.GetInt32NullAsZero("siteid");
                ISite site = InputContext.TheSiteList.GetSite(siteId);
                SiteXmlBuilder siteXmlBuilder = new SiteXmlBuilder(InputContext);
                XmlNode siteXML = siteXmlBuilder.GenerateXml(null, site);
                siteXML = ImportNode(siteXML);
                memberXml.AppendChild(siteXML);

                if (!dataReader.IsDBNull("datejoined"))
                {
                    AddDateXml(dataReader.GetDateTime("datejoined"), memberXml, "DATEJOINED");
                }
                
                //Add Stats XML
                AddIntElement(memberXml, "POSTPASSEDCOUNT", dataReader.GetInt32NullAsZero("postpassedcount"));
                AddIntElement(memberXml, "POSTFAILEDCOUNT", dataReader.GetInt32NullAsZero("postfailedcount"));
                AddIntElement(memberXml, "POSTTOTALCOUNT", dataReader.GetInt32NullAsZero("totalpostcount"));
                AddIntElement(memberXml, "ARTICLEPASSEDCOUNT", dataReader.GetInt32NullAsZero("articlepassedcount"));
                AddIntElement(memberXml, "ARTICLEFAILEDCOUNT", dataReader.GetInt32NullAsZero("articlefailedcount"));
                AddIntElement(memberXml, "ARTICLETOTALCOUNT", dataReader.GetInt32NullAsZero("totalarticlecount"));

                postPassedCount += dataReader.GetInt32NullAsZero("postpassedcount");
                postFailedCount += dataReader.GetInt32NullAsZero("postfailedcount");
                postTotalCount += dataReader.GetInt32NullAsZero("totalpostcount");
                articlePassedCount += dataReader.GetInt32NullAsZero("articlepassedcount");
                articleFailedCount += dataReader.GetInt32NullAsZero("articlefailedcount");
                articleTotalCount += dataReader.GetInt32NullAsZero("totalarticlecount");
            }

            //Add Member Details Summary XML
            XmlNode summaryXml = AddElementTag(parentXml, "SUMMARY");
            AddIntElement(summaryXml, "POSTPASSEDCOUNT", postPassedCount);
            AddIntElement(summaryXml, "POSTFAILEDCOUNT", postFailedCount);
            AddIntElement(summaryXml, "POSTTOTALCOUNT", postTotalCount);
            AddIntElement(summaryXml, "ARTICLEPASSEDCOUNT", articlePassedCount);
            AddIntElement(summaryXml,"ARTICLEFAILEDCOUNT",articleFailedCount);
            AddIntElement(summaryXml, "ARTICLETOTALCOUNT", articleTotalCount);
        }
예제 #11
0
        /// <summary>
        /// Calls the post list class to generate the posts matching the search
        /// </summary>
        private void GetThreadSearchXml(string search, int skip, int show)
        {
            // Put in the wrapping <POSTS> tag which has the user ID in it
            XmlElement threadSearch = AddElementTag(RootElement, "THREADENTRY-SEARCH");
            AddTextTag(threadSearch, "SEARCH", search);
            AddIntElement(threadSearch, "SITEID", InputContext.CurrentSite.SiteID);

            XmlElement postlist = AddElementTag(threadSearch, "POST-LIST");
            AddAttribute(postlist, "SKIP", skip);
            AddAttribute(postlist, "SHOW", show);

            using (IDnaDataReader dataReader = InputContext.CreateDnaDataReader("searchthreadentriesfast"))
            {
                dataReader.AddParameter("siteid", InputContext.CurrentSite.SiteID);
                dataReader.AddParameter("condition", search);

                dataReader.Execute();

                int results = 0;
                int more = 0;

                // Check to see if we found anything
                if (dataReader.HasRows && dataReader.Read())
                {
                    //Need to skip to start of results. TODO replace with paged results
                    for (int i = 0; i < skip; ++i)
                    {
                        dataReader.Read();
                    }
                    do
                    {
                        XmlElement post = AddElementTag(postlist, "POST");

                        AddIntElement(post, "POSTID", dataReader.GetInt32NullAsZero("entryid"));
                        AddIntElement(post, "THREADID", dataReader.GetInt32NullAsZero("threadID"));
                        AddIntElement(post, "FORUMID", dataReader.GetInt32NullAsZero("forumid"));
                        AddTextTag(post, "SUBJECT", dataReader.GetStringNullAsEmpty("subject"));
                        AddTextTag(post, "TEXT", dataReader.GetStringNullAsEmpty("text"));
                        AddDateXml(dataReader.GetDateTime("dateposted"), post, "DATEPOSTED");
                        AddDateXml(dataReader.GetDateTime("lastupdated"), post, "LASTUPDATED");

                        AddIntElement(post, "POSTSTYLE", dataReader.GetTinyIntAsInt("PostStyle"));
                        int score = Convert.ToInt32(dataReader.GetDoubleNullAsZero("score") * 100.0);
                        AddIntElement(post, "SCORE", score);

                        ++results;
                    } while (dataReader.Read() && results < show);
                    if (dataReader.Read())
                    {
                        more = 1;
                    }
                }

                AddAttribute(postlist, "MORE", more);
                AddAttribute(postlist, "COUNT", results);
            }

            FileCache.PutItem(AppContext.TheAppContext.Config.CachePath, "threadentrysearch", _cacheName, threadSearch.OuterXml);

            SiteXmlBuilder siteXml = new SiteXmlBuilder(InputContext);
            RootElement.AppendChild(ImportNode(siteXml.GenerateAllSitesXml(InputContext.TheSiteList).FirstChild));
        }
예제 #12
0
        /// <summary>
        /// Used to process the current request.
        /// </summary>
        public override void ProcessRequest()
        {
            //Clean any existing XML.
            RootElement.RemoveAll();

            XmlNode summaryXML = AddElementTag(RootElement, "SITESUMMARY");

            if (InputContext.ViewingUser == null || !InputContext.ViewingUser.IsSuperUser)
            {
                AddErrorXml("Invalid Permissions", "Superuser permissions required", RootElement);
                return;
            }

            int siteId = InputContext.GetParamIntOrZero("siteid","SiteId");
            if (siteId > 0)
            {
                //Add XML for selected site.
                ISite site = InputContext.TheSiteList.GetSite(siteId);
                SiteXmlBuilder siteXmlBuilder = new SiteXmlBuilder(InputContext);
                XmlNode siteXML = siteXmlBuilder.GenerateXml(null, site);
                siteXML = ImportNode(siteXML);
                summaryXML.AppendChild(siteXML);
            }

            bool recalculateReport = InputContext.GetParamIntOrZero("recalculate", "Recalculate Report") == 1;

            //Require Dates to produce site summary report.
            if (InputContext.DoesParamExist("startdate", "Start Date") && InputContext.DoesParamExist("enddate", "End Date"))
            {
                DateTime startDate;
                DateTime endDate;
                try
                {
                    startDate = DateTime.Parse(InputContext.GetParamStringOrEmpty("startdate", "StartDate"));
                    endDate = DateTime.Parse(InputContext.GetParamStringOrEmpty("enddate", "EndDate"));
                }
                catch(FormatException fe)
                {
                    this.AddErrorXml("Bad Format",fe.Message,RootElement);
                    return;
                }

                DateRangeValidation dateValidate = new DateRangeValidation();
                DateRangeValidation.ValidationResult result = dateValidate.ValidateDateRange(startDate, endDate, 1, false, true);
                if (result != DateRangeValidation.ValidationResult.VALID)
                {
                    XmlElement errorXML = dateValidate.GetLastValidationResultAsXmlElement(RootElement.OwnerDocument);
                    RootElement.AppendChild(errorXML);
                    return;
                }

                AddDateXml(startDate, summaryXML, "STARTDATE");
                AddDateXml(endDate, summaryXML, "ENDDATE");

                GenerateStatsXML(summaryXML, siteId, startDate, endDate, recalculateReport);
            }
            SiteXmlBuilder siteXml = new SiteXmlBuilder(InputContext);
            siteXml.GenerateAllSitesXml(InputContext.TheSiteList);
            AddInside(RootElement, siteXml);
       
        }