private string MoveTopic()
        {
            int topicId       = -1;
            int forumId       = -1;
            int targetForumId = -1;

            if (Params.ContainsKey("topicid") && SimulateIsNumeric.IsNumeric(Params["topicid"]))
            {
                topicId = int.Parse(Params["topicid"].ToString());
            }
            if (Params.ContainsKey("forumid") && SimulateIsNumeric.IsNumeric(Params["forumid"]))
            {
                targetForumId = int.Parse(Params["forumid"].ToString());
            }
            if (topicId > 0)
            {
                TopicsController tc = new TopicsController();
                TopicInfo        t  = tc.Topics_Get(PortalId, ModuleId, topicId);
                Data.ForumsDB    db = new Data.ForumsDB();
                forumId = db.Forum_GetByTopicId(topicId);
                ForumController fc = new ForumController();
                Forum           f  = fc.Forums_Get(forumId, this.UserId, true);
                if (f != null)
                {
                    if (Permissions.HasPerm(f.Security.ModMove, ForumUser.UserRoles))
                    {
                        tc.Topics_Move(PortalId, ModuleId, targetForumId, topicId);
                        DataCache.ClearAllCache(ModuleId, TabId);
                        return(BuildOutput(string.Empty, OutputCodes.Success, true));
                    }
                }
            }
            return(BuildOutput(string.Empty, OutputCodes.UnsupportedRequest, false));
        }
        private string MarkAnswer()
        {
            int topicId = -1;
            int forumId = -1;
            int replyId = -1;

            if (Params.ContainsKey("topicid") && SimulateIsNumeric.IsNumeric(Params["topicid"]))
            {
                topicId = int.Parse(Params["topicid"].ToString());
            }
            if (Params.ContainsKey("replyid") && SimulateIsNumeric.IsNumeric(Params["replyid"]))
            {
                replyId = int.Parse(Params["replyid"].ToString());
            }
            if (topicId > 0 & UserId > 0)
            {
                TopicsController tc = new TopicsController();
                TopicInfo        t  = tc.Topics_Get(PortalId, ModuleId, topicId);
                Data.ForumsDB    db = new Data.ForumsDB();
                forumId = db.Forum_GetByTopicId(topicId);
                ForumController fc = new ForumController();
                Forum           f  = fc.Forums_Get(forumId, this.UserId, true);
                if ((this.UserId == t.Author.AuthorId && !t.IsLocked) || Permissions.HasAccess(f.Security.ModEdit, ForumUser.UserRoles))
                {
                    DataProvider.Instance().Reply_UpdateStatus(PortalId, ModuleId, topicId, replyId, UserId, 1, Permissions.HasAccess(f.Security.ModEdit, ForumUser.UserRoles));
                }
                return(BuildOutput(string.Empty, OutputCodes.Success, true));
            }
            else
            {
                return(BuildOutput(string.Empty, OutputCodes.UnsupportedRequest, false));
            }
        }
        private string DeleteTopic()
        {
            int topicId = -1;
            int forumId = -1;

            if (Params.ContainsKey("topicid") && SimulateIsNumeric.IsNumeric(Params["topicid"]))
            {
                topicId = int.Parse(Params["topicid"].ToString());
            }
            if (topicId > 0)
            {
                TopicsController tc = new TopicsController();
                TopicInfo        t  = tc.Topics_Get(PortalId, ModuleId, topicId);
                Data.ForumsDB    db = new Data.ForumsDB();
                forumId = db.Forum_GetByTopicId(topicId);
                ForumController fc = new ForumController();
                Forum           f  = fc.Forums_Get(forumId, this.UserId, true);
                if (f != null)
                {
                    if (Permissions.HasPerm(f.Security.ModDelete, ForumUser.UserRoles) || (t.Author.AuthorId == this.UserId && Permissions.HasAccess(f.Security.Delete, ForumUser.UserRoles)))
                    {
                        tc.Topics_Delete(PortalId, ModuleId, forumId, topicId, MainSettings.DeleteBehavior);
                        return(BuildOutput(string.Empty, OutputCodes.Success, true));
                    }
                }
            }
            return(BuildOutput(string.Empty, OutputCodes.UnsupportedRequest, false));
        }
        private string DeletePost()
        {
            int replyId = -1;
            int TopicId = -1;

            if (Params.ContainsKey("topicid") && SimulateIsNumeric.IsNumeric(Params["topicid"]))
            {
                TopicId = int.Parse(Params["topicid"].ToString());
            }
            if (Params.ContainsKey("replyid") && SimulateIsNumeric.IsNumeric(Params["replyid"]))
            {
                replyId = int.Parse(Params["replyid"].ToString());
            }
            int forumId = -1;

            Data.ForumsDB db = new Data.ForumsDB();
            forumId = db.Forum_GetByTopicId(TopicId);
            ForumController fc = new ForumController();
            Forum           f  = fc.Forums_Get(forumId, this.UserId, true);

            if (TopicId > 0 & replyId < 1)
            {
                TopicsController tc = new TopicsController();
                TopicInfo        ti = tc.Topics_Get(PortalId, ModuleId, TopicId);

                if (Permissions.HasAccess(f.Security.ModDelete, ForumUser.UserRoles) || (Permissions.HasAccess(f.Security.Delete, ForumUser.UserRoles) && ti.Content.AuthorId == UserId && ti.IsLocked == false))
                {
                    DataProvider.Instance().Topics_Delete(forumId, TopicId, MainSettings.DeleteBehavior);
                    string journalKey = string.Format("{0}:{1}", forumId.ToString(), TopicId.ToString());
                    JournalController.Instance.DeleteJournalItemByKey(PortalId, journalKey);
                }
                else
                {
                    return(BuildOutput(string.Empty, OutputCodes.UnsupportedRequest, false));
                }
            }
            else
            {
                ReplyController rc = new ReplyController();
                ReplyInfo       ri = rc.Reply_Get(PortalId, ModuleId, TopicId, replyId);
                if (Permissions.HasAccess(f.Security.ModDelete, ForumUser.UserRoles) || (Permissions.HasAccess(f.Security.Delete, ForumUser.UserRoles) && ri.Content.AuthorId == UserId))
                {
                    DataProvider.Instance().Reply_Delete(forumId, TopicId, replyId, MainSettings.DeleteBehavior);
                    string journalKey = string.Format("{0}:{1}:{2}", forumId.ToString(), TopicId.ToString(), replyId.ToString());
                    JournalController.Instance.DeleteJournalItemByKey(PortalId, journalKey);
                }
                else
                {
                    return(BuildOutput(string.Empty, OutputCodes.UnsupportedRequest, false));
                }
            }
            string cachekey = string.Format("AF-FV-{0}-{1}", PortalId, ModuleId);

            DataCache.CacheClearPrefix(cachekey);
            return(BuildOutput(TopicId + "|" + replyId, OutputCodes.Success, true));
        }
        private string MarkAnswer()
        {
            int topicId = -1;
            int forumId = -1;
            int replyId = -1;
            if (Params.ContainsKey("topicid") && SimulateIsNumeric.IsNumeric(Params["topicid"]))
            {
                topicId = int.Parse(Params["topicid"].ToString());
            }
            if (Params.ContainsKey("replyid") && SimulateIsNumeric.IsNumeric(Params["replyid"]))
            {
                replyId = int.Parse(Params["replyid"].ToString());
            }
            if (topicId > 0 & UserId > 0)
            {
                TopicsController tc = new TopicsController();
                TopicInfo t = tc.Topics_Get(PortalId, ModuleId, topicId);
                Data.ForumsDB db = new Data.ForumsDB();
                forumId = db.Forum_GetByTopicId(topicId);
                ForumController fc = new ForumController();
                Forum f = fc.Forums_Get(forumId, this.UserId, true);
                if ((this.UserId == t.Author.AuthorId && ! t.IsLocked) || Permissions.HasAccess(f.Security.ModEdit, ForumUser.UserRoles))
                {
                    DataProvider.Instance().Reply_UpdateStatus(PortalId, ModuleId, topicId, replyId, UserId, 1, Permissions.HasAccess(f.Security.ModEdit, ForumUser.UserRoles));

                }
                return BuildOutput(string.Empty, OutputCodes.Success, true);
            }
            else
            {
                return BuildOutput(string.Empty, OutputCodes.UnsupportedRequest, false);
            }
        }
        private string LoadTopic()
        {
            int topicId = -1;
            int forumId = -1;
            if (Params.ContainsKey("topicid") && SimulateIsNumeric.IsNumeric(Params["topicid"]))
            {
                topicId = int.Parse(Params["topicid"].ToString());
            }
            if (topicId > 0)
            {
                TopicsController tc = new TopicsController();
                TopicInfo t = tc.Topics_Get(PortalId, ModuleId, topicId);
                Data.ForumsDB db = new Data.ForumsDB();
                forumId = db.Forum_GetByTopicId(topicId);
                ForumController fc = new ForumController();
                Forum f = fc.Forums_Get(PortalId, -1, forumId, this.UserId, true, false, -1);
                if (f != null)
                {
                    if (Permissions.HasPerm(f.Security.ModEdit, ForumUser.UserRoles))
                    {
                        StringBuilder sb = new StringBuilder();
                        sb.Append("{");
                        sb.Append(Utilities.JSON.Pair("topicid", t.TopicId.ToString()));
                        sb.Append(",");
                        sb.Append(Utilities.JSON.Pair("subject", t.Content.Subject));
                        sb.Append(",");
                        sb.Append(Utilities.JSON.Pair("authorid", t.Content.AuthorId.ToString()));
                        sb.Append(",");
                        sb.Append(Utilities.JSON.Pair("locked", t.IsLocked.ToString()));
                        sb.Append(",");
                        sb.Append(Utilities.JSON.Pair("pinned", t.IsPinned.ToString()));
                        sb.Append(",");
                        sb.Append(Utilities.JSON.Pair("priority", t.Priority.ToString()));
                        sb.Append(",");
                        sb.Append(Utilities.JSON.Pair("status", t.StatusId.ToString()));
                        sb.Append(",");
                        sb.Append(Utilities.JSON.Pair("forumid", forumId.ToString()));
                        sb.Append(",");
                        sb.Append(Utilities.JSON.Pair("forumname", f.ForumName));
                        sb.Append(",");
                        sb.Append(Utilities.JSON.Pair("tags", t.Tags));
                        sb.Append(",");
                        sb.Append(Utilities.JSON.Pair("categories", t.Categories));
                        sb.Append(",");
                        sb.Append("\"properties\":[");
                        string sCats = string.Empty;
                        if (f.Properties != null)
                        {
                            int i = 0;
                            foreach (PropertiesInfo p in f.Properties)
                            {
                                sb.Append("{");
                                sb.Append(Utilities.JSON.Pair("propertyid", p.PropertyId.ToString()));
                                sb.Append(",");
                                sb.Append(Utilities.JSON.Pair("datatype", p.DataType));
                                sb.Append(",");
                                sb.Append(Utilities.JSON.Pair("propertyname", p.Name));
                                sb.Append(",");
                                string pvalue = p.DefaultValue;
                                foreach (PropertiesInfo tp in t.TopicProperties)
                                {
                                    if (tp.PropertyId == p.PropertyId)
                                    {
                                        pvalue = tp.DefaultValue;
                                    }
                                }

                                sb.Append(Utilities.JSON.Pair("propertyvalue", pvalue));
                                if (p.DataType.Contains("list"))
                                {
                                    sb.Append(",\"listdata\":[");
                                    if (p.DataType.Contains("list|categories"))
                                    {
                                        using (IDataReader dr = DataProvider.Instance().Tags_List(PortalId, f.ModuleId, true, 0, 200, "ASC", "TagName", forumId, f.ForumGroupId))
                                        {
                                            dr.NextResult();
                                            while (dr.Read())
                                            {
                                                sCats += "{";
                                                sCats += Utilities.JSON.Pair("id", dr["TagId"].ToString());
                                                sCats += ",";
                                                sCats += Utilities.JSON.Pair("name", dr["TagName"].ToString());
                                                sCats += ",";
                                                sCats += Utilities.JSON.Pair("selected", IsSelected(dr["TagName"].ToString(), t.Categories).ToString());
                                                sCats += "},";
                                            }
                                            dr.Close();
                                        }
                                        if (! (string.IsNullOrEmpty(sCats)))
                                        {
                                            sCats = sCats.Substring(0, sCats.Length - 1);
                                        }
                                        sb.Append(sCats);
                                    }
                                    else
                                    {
                                        DotNetNuke.Common.Lists.ListController lists = new DotNetNuke.Common.Lists.ListController();
                                        string lName = p.DataType.Substring(p.DataType.IndexOf("|") + 1);
                                        DotNetNuke.Common.Lists.ListEntryInfoCollection lc = lists.GetListEntryInfoCollection(lName, string.Empty);
                                        int il = 0;
                                        foreach (DotNetNuke.Common.Lists.ListEntryInfo l in lc)
                                        {
                                            sb.Append("{");
                                            sb.Append(Utilities.JSON.Pair("itemId", l.Value));
                                            sb.Append(",");
                                            sb.Append(Utilities.JSON.Pair("itemName", l.Text));
                                            sb.Append("}");
                                            il += 1;
                                            if (il < lc.Count)
                                            {
                                                sb.Append(",");
                                            }
                                        }
                                    }
                                    sb.Append("]");
                                }
                                sb.Append("}");
                                i += 1;
                                if (i < f.Properties.Count)
                                {
                                    sb.Append(",");
                                }

                            }
                        }

                        sb.Append("],\"categories\":[");
                        sCats = string.Empty;
                        using (IDataReader dr = DataProvider.Instance().Tags_List(PortalId, f.ModuleId, true, 0, 200, "ASC", "TagName", forumId, f.ForumGroupId))
                        {
                            dr.NextResult();
                            while (dr.Read())
                            {
                                sCats += "{";
                                sCats += Utilities.JSON.Pair("id", dr["TagId"].ToString());
                                sCats += ",";
                                sCats += Utilities.JSON.Pair("name", dr["TagName"].ToString());
                                sCats += ",";
                                sCats += Utilities.JSON.Pair("selected", IsSelected(dr["TagName"].ToString(), t.Categories).ToString());
                                sCats += "},";
                            }
                            dr.Close();
                        }
                        if (! (string.IsNullOrEmpty(sCats)))
                        {
                            sCats = sCats.Substring(0, sCats.Length - 1);
                        }
                        sb.Append(sCats);
                        sb.Append("]");
                        sb.Append("}");
                        return BuildOutput(sb.ToString(), OutputCodes.Success, true, true);
                    }
                }

            }
            return BuildOutput(string.Empty, OutputCodes.UnsupportedRequest, false);
        }
        private string DeletePost()
        {
            int replyId = -1;
            int TopicId = -1;
            if (Params.ContainsKey("topicid") && SimulateIsNumeric.IsNumeric(Params["topicid"]))
            {
                TopicId = int.Parse(Params["topicid"].ToString());
            }
            if (Params.ContainsKey("replyid") && SimulateIsNumeric.IsNumeric(Params["replyid"]))
            {
                replyId = int.Parse(Params["replyid"].ToString());
            }
            int forumId = -1;
            Data.ForumsDB db = new Data.ForumsDB();
            forumId = db.Forum_GetByTopicId(TopicId);
            ForumController fc = new ForumController();
            Forum f = fc.Forums_Get(forumId, this.UserId, true);

            // Need to get the list of attachments BEFORE we remove the post recods
            var attachmentController = new Data.AttachController();
            var attachmentList = (MainSettings.DeleteBehavior == 0)
                                     ? attachmentController.ListForPost(TopicId, replyId)
                                     : null;

            if (TopicId > 0 & replyId < 1)
            {
                TopicsController tc = new TopicsController();
                TopicInfo ti = tc.Topics_Get(PortalId, ModuleId, TopicId);

                if (Permissions.HasAccess(f.Security.ModDelete, ForumUser.UserRoles) || (Permissions.HasAccess(f.Security.Delete, ForumUser.UserRoles) && ti.Content.AuthorId == UserId && ti.IsLocked == false))
                {
                    DataProvider.Instance().Topics_Delete(forumId, TopicId, MainSettings.DeleteBehavior);
                    string journalKey = string.Format("{0}:{1}", forumId.ToString(), TopicId.ToString());
                    JournalController.Instance.DeleteJournalItemByKey(PortalId, journalKey);
                }
                else
                {
                    return BuildOutput(string.Empty, OutputCodes.UnsupportedRequest, false);
                }
            }
            else
            {
                ReplyController rc = new ReplyController();
                ReplyInfo ri = rc.Reply_Get(PortalId, ModuleId, TopicId, replyId);
                if (Permissions.HasAccess(f.Security.ModDelete, ForumUser.UserRoles) || (Permissions.HasAccess(f.Security.Delete, ForumUser.UserRoles) && ri.Content.AuthorId == UserId))
                {
                    DataProvider.Instance().Reply_Delete(forumId, TopicId, replyId, MainSettings.DeleteBehavior);
                    string journalKey = string.Format("{0}:{1}:{2}", forumId.ToString(), TopicId.ToString(), replyId.ToString());
                    JournalController.Instance.DeleteJournalItemByKey(PortalId, journalKey);

                }
                else
                {
                    return BuildOutput(string.Empty, OutputCodes.UnsupportedRequest, false);
                }

            }

            // If it's a hard delete, delete associated attachments
            // attachmentList will only be populated if the DeleteBehavior is 0
            if (attachmentList != null)
            {
                var fileManager = FileManager.Instance;
                var folderManager = FolderManager.Instance;
                var attachmentFolder = folderManager.GetFolder(PortalId, "activeforums_Attach");

                foreach (var attachment in attachmentList)
                {
                    attachmentController.Delete(attachment.AttachmentId);

                    var file = attachment.FileId.HasValue
                                   ? fileManager.GetFile(attachment.FileId.Value)
                                   : fileManager.GetFile(attachmentFolder, attachment.FileName);

                    // Only delete the file if it exists in the attachment folder
                    if (file != null && file.FolderId == attachmentFolder.FolderID)
                        fileManager.DeleteFile(file);
                }
            }

            // Return the result
            string cachekey = string.Format("AF-FV-{0}-{1}", PortalId, ModuleId);
            DataCache.CacheClearPrefix(cachekey);
            return BuildOutput(TopicId + "|" + replyId, OutputCodes.Success, true);
        }
        public XmlDocument ForumListXML(int SiteId, int InstanceId)
        {
            XmlDocument xDoc = new XmlDocument();
            object      obj  = DataCache.CacheRetrieve(InstanceId + "fv");

            if (obj == null)
            {
                Data.ForumsDB   db = new Data.ForumsDB();
                ForumCollection fc = db.Forums_List(SiteId, InstanceId);
                //Dim ds As DataSet = SqlHelper.ExecuteDataset(connectionString, databaseOwner & objectQualifier & "activeforums_UI_ForumDisplay", SiteId, InstanceId, UserId, -1, ForumIds)
                System.Text.StringBuilder sb = new System.Text.StringBuilder();
                sb.Append("<?xml version=\"1.0\" encoding=\"utf-8\" ?>");
                sb.AppendLine();
                sb.Append("<root>");
                sb.AppendLine();
                int groupId = -1;
                System.Text.StringBuilder groups = new System.Text.StringBuilder();
                System.Text.StringBuilder forums = new System.Text.StringBuilder();
                foreach (Forum f in fc)
                {
                    if (groupId != f.ForumGroupId)
                    {
                        groups.Append("<group groupid=\"" + f.ForumGroupId.ToString() + "\" active=\"" + f.ForumGroup.Active.ToString().ToLowerInvariant() + "\" hidden=\"" + f.ForumGroup.Hidden.ToString().ToLowerInvariant() + "\">");
                        groups.Append("<name><![CDATA[" + f.GroupName.ToString() + "]]></name>");
                        //If Not String.IsNullOrEmpty(f.ForumGroup.SEO) Then
                        //    groups.Append(f.ForumGroup.SEO)
                        //End If
                        groups.Append("</group>");
                        sb.AppendLine();
                        groupId = f.ForumGroupId;
                    }
                }
                sb.Append("<groups>");
                sb.AppendLine();
                sb.Append(groups.ToString());
                sb.Append("</groups>");
                sb.AppendLine();
                foreach (Forum f in fc)
                {
                    forums.Append("<forum groupid=\"" + f.ForumGroupId.ToString() + "\" forumid=\"" + f.ForumID.ToString() + "\"");
                    //forums.Append(" name=""" & HttpUtility.UrlEncode(f.ForumName) & """")
                    //forums.Append(" desc=""" & HttpUtility.UrlEncode(Utilities.HTMLEncode(f.ForumDesc.ToString)) & """")
                    forums.Append(" active=\"" + f.Active.ToString().ToLowerInvariant() + "\"");
                    forums.Append(" hidden=\"" + f.Hidden.ToString().ToLowerInvariant() + "\"");
                    forums.Append(" totaltopics=\"" + f.TotalTopics.ToString() + "\"");
                    forums.Append(" totalreplies=\"" + f.TotalReplies.ToString() + "\"");
                    forums.Append(" lasttopicid=\"" + f.LastTopicId.ToString() + "\"");
                    forums.Append(" lastreplyid=\"" + f.LastReplyId.ToString() + "\"");
                    //forums.Append(" lastpostsubject=""" & f.LastPostSubject & """")
                    //forums.Append(" lastpostauthorname=""" & f.LastPostDisplayName & """")
                    forums.Append(" lastpostauthorid=\"" + f.LastPostUserID + "\"");
                    forums.Append(" lastpostdate=\"" + f.LastPostDateTime.ToString() + "\"");
                    forums.Append(" lastread=\"" + f.LastRead.ToString() + "\"");
                    forums.Append(" allowrss=\"" + f.ForumSettings["ALLOWRSS"].ToString() + "\"");
                    forums.Append(" parentforumid=\"" + f.ParentForumId.ToString() + "\"");
                    forums.Append(" viewroles=\"" + f.Security.View.ToString() + "\"");
                    forums.Append(" readroles=\"" + f.Security.Read.ToString() + "\"");
                    forums.Append(" replyroles=\"" + f.Security.Reply.ToString() + "\"");
                    forums.Append(" modroles=\"" + f.Security.ModApprove.ToString() + "\"");
                    forums.Append(" modmove=\"" + f.Security.ModMove.ToString() + "\"");
                    forums.Append(">");
                    forums.Append("<name><![CDATA[" + f.ForumName + "]]></name>");
                    forums.Append("<description><![CDATA[" + f.ForumDesc + "]]></description>");
                    forums.Append("<security>");
                    forums.Append("<view>" + f.Security.View + "</view>");
                    forums.Append("<read>" + f.Security.Read + "</read>");
                    forums.Append("<create>" + f.Security.Create + "</create>");
                    forums.Append("<reply>" + f.Security.Reply + "</reply>");
                    forums.Append("<edit>" + f.Security.Edit + "</edit>");
                    forums.Append("<delete>" + f.Security.Delete + "</delete>");
                    forums.Append("<lock>" + f.Security.Lock + "</lock>");
                    forums.Append("<pin>" + f.Security.Pin + "</pin>");
                    forums.Append("<modapprove>" + f.Security.ModApprove + "</modapprove>");
                    forums.Append("<modedit>" + f.Security.ModEdit + "</modedit>");
                    forums.Append("<moddelete>" + f.Security.ModDelete + "</moddelete>");
                    forums.Append("<modlock>" + f.Security.ModLock + "</modlock>");
                    forums.Append("<modpin>" + f.Security.ModPin + "</modpin>");
                    forums.Append("<modmove>" + f.Security.ModMove + "</modmove>");
                    forums.Append("</security>");
                    //If Not String.IsNullOrEmpty(f.SEO) Then
                    //    forums.Append(f.SEO)
                    //End If

                    forums.Append("</forum>");
                    sb.AppendLine();
                }
                sb.Append("<forums>");
                sb.AppendLine();
                sb.Append(forums.ToString());
                sb.Append("</forums>");
                sb.AppendLine();
                sb.Append("<topics />");
                sb.AppendLine();
                sb.Append("<replies />");
                sb.AppendLine();
                sb.Append("</root>");
                sb.AppendLine();


                //Dim sXML As String = ds.GetXml()
                xDoc.LoadXml(sb.ToString());
                DataCache.CacheStore(InstanceId + "fv", xDoc);
            }
            else
            {
                xDoc = (XmlDocument)obj;
            }
            //Logger.Log(xDoc.OuterXml)
            return(xDoc);
        }
Beispiel #9
0
        private string ParseTemplate()
        {
            var sb = new StringBuilder();
            string groupTemplate = DisplayTemplate;
            if (groupTemplate.Contains("[GROUPSECTION]"))
            {
                groupTemplate = TemplateUtils.GetTemplateSection(DisplayTemplate, "[GROUPSECTION]", "[/GROUPSECTION]");
            }
            var db = new Data.ForumsDB();
            ForumData = db.ForumListXML(ControlConfig.SiteId, ControlConfig.InstanceId);
            if (ForumData != null)
            {
                XmlNodeList xGroups;
                xGroups = ForumGroupId == -1 ? ForumData.SelectNodes("//groups/group[@active='true']") : ForumData.SelectNodes("//groups/group[@groupid='" + ForumGroupId + "' and @active='true']");

                foreach (XmlNode xNode in xGroups)
                {
                    string sGroup = groupTemplate;
                    int groupId = int.Parse(xNode.Attributes["groupid"].Value);
                    string groupName = xNode.Attributes["name"].Value;
                    sGroup = sGroup.Replace("[GROUPNAME]", groupName);
                    bool isVisible = ToggleBehavior != 1;
                    sGroup = sGroup.Replace("[GROUPCOLLAPSE]", "<af:toggle IsVisible=\"" + isVisible + "\"  id=\"tgGroup" + groupId + "\" key=\"" + groupId + "\" cssclass=\"afarrow\" CssClassOn=\"aficon afarrowdown\" CssClassOff=\"aficon afarrowleft\" runat=\"server\" ImagePath=\"" + ThemePath + "\" />");
                    var xNodeList = ForumData.SelectNodes("//forums/forum[@active='true' and @groupid='" + groupId + "' and @parentforumid='0']");
                    var forums = new StringBuilder();
                    int i = 0;
                    foreach (XmlNode fNode in xNodeList)
                    {
                        i += 1;
                        string sCSSClass = "afforumrowmid";
                        if (i == 1)
                        {
                            sCSSClass = "afforumrowtop";
                        }
                        else if (i == xNodeList.Count)
                        {
                            sCSSClass = "afforumrowbottom";
                        }
                        int fid = int.Parse(fNode.Attributes["forumid"].Value);
                        //Dim viewRoles As String = fNode.Attributes["canview"].Value.ToString
                        //Dim readRoles As String = fNode.Attributes["canread"].Value.ToString
                        string sForum = TemplateUtils.GetTemplateSection(sGroup, "[FORUMS]", "[/FORUMS]");
                        sForum = sForum.Replace("[CSS:ROWCLASS]", sCSSClass);
                        sForum = ParseForumRow(fNode, sForum, groupName);

                        forums.Append(sForum);
                    }

                    sGroup = TemplateUtils.ReplaceSubSection(sGroup, forums.ToString(), "[FORUMS]", "[/FORUMS]");
                    sGroup = sGroup.Replace("[GROUP]", "<af:toggledisplay IsVisible=\"" + isVisible + "\" id=\"tgdGroup" + groupId + "\" key=\"" + groupId + "\" runat=\"server\"><content>");
                    sGroup = sGroup.Replace("[/GROUP]", "</content></af:toggledisplay>");
                    sb.Append(sGroup);
                }
            }
            string sOut = sb.ToString();
            if (sOut.Contains("[GROUPSECTION]"))
            {
                sOut = TemplateUtils.ReplaceSubSection(DisplayTemplate, sb.ToString(), "[GROUPSECTION]", "[/GROUPSECTION]");
            }

            //sOut = sOut.Replace("[BREADCRUMB]", String.Empty)
            //sOut = sOut.Replace("[WHOSONLINE]", "<af:usersonline id=""ctlUsersOnline"" templatefile=""usersonline.htm"" runat=""server"" />")
            //sOut = sOut.Replace("[JUMPTO]", String.Empty)
            //sOut = sOut.Replace("[TEMPLATE:TOOLBAR]", "<af:toolbar id=""ctlToolbar"" templatefile=""toolbar.htm"" runat=""server"" />")

            //DataCache.CacheStore(ModuleId & "fvt", sOut)
            return sOut;
        }
Beispiel #10
0
        private string ParseTemplate()
        {
            var    sb            = new StringBuilder();
            string groupTemplate = DisplayTemplate;

            if (groupTemplate.Contains("[GROUPSECTION]"))
            {
                groupTemplate = TemplateUtils.GetTemplateSection(DisplayTemplate, "[GROUPSECTION]", "[/GROUPSECTION]");
            }
            var db = new Data.ForumsDB();

            ForumData = db.ForumListXML(ControlConfig.SiteId, ControlConfig.InstanceId);
            if (ForumData != null)
            {
                XmlNodeList xGroups;
                xGroups = ForumGroupId == -1 ? ForumData.SelectNodes("//groups/group[@active='true']") : ForumData.SelectNodes("//groups/group[@groupid='" + ForumGroupId + "' and @active='true']");

                foreach (XmlNode xNode in xGroups)
                {
                    string sGroup    = groupTemplate;
                    int    groupId   = int.Parse(xNode.Attributes["groupid"].Value);
                    string groupName = xNode.Attributes["name"].Value;
                    sGroup = sGroup.Replace("[GROUPNAME]", groupName);
                    bool isVisible = ToggleBehavior != 1;
                    sGroup = sGroup.Replace("[GROUPCOLLAPSE]", "<af:toggle IsVisible=\"" + isVisible + "\"  id=\"tgGroup" + groupId + "\" key=\"" + groupId + "\" cssclass=\"afarrow\" CssClassOn=\"aficon afarrowdown\" CssClassOff=\"aficon afarrowleft\" runat=\"server\" ImagePath=\"" + ThemePath + "\" />");
                    var xNodeList = ForumData.SelectNodes("//forums/forum[@active='true' and @groupid='" + groupId + "' and @parentforumid='0']");
                    var forums    = new StringBuilder();
                    int i         = 0;
                    foreach (XmlNode fNode in xNodeList)
                    {
                        i += 1;
                        string sCSSClass = "afforumrowmid";
                        if (i == 1)
                        {
                            sCSSClass = "afforumrowtop";
                        }
                        else if (i == xNodeList.Count)
                        {
                            sCSSClass = "afforumrowbottom";
                        }
                        int fid = int.Parse(fNode.Attributes["forumid"].Value);
                        //Dim viewRoles As String = fNode.Attributes["canview"].Value.ToString
                        //Dim readRoles As String = fNode.Attributes["canread"].Value.ToString
                        string sForum = TemplateUtils.GetTemplateSection(sGroup, "[FORUMS]", "[/FORUMS]");
                        sForum = sForum.Replace("[CSS:ROWCLASS]", sCSSClass);
                        sForum = ParseForumRow(fNode, sForum, groupName);

                        forums.Append(sForum);
                    }

                    sGroup = TemplateUtils.ReplaceSubSection(sGroup, forums.ToString(), "[FORUMS]", "[/FORUMS]");
                    sGroup = sGroup.Replace("[GROUP]", "<af:toggledisplay IsVisible=\"" + isVisible + "\" id=\"tgdGroup" + groupId + "\" key=\"" + groupId + "\" runat=\"server\"><content>");
                    sGroup = sGroup.Replace("[/GROUP]", "</content></af:toggledisplay>");
                    sb.Append(sGroup);
                }
            }
            string sOut = sb.ToString();

            if (sOut.Contains("[GROUPSECTION]"))
            {
                sOut = TemplateUtils.ReplaceSubSection(DisplayTemplate, sb.ToString(), "[GROUPSECTION]", "[/GROUPSECTION]");
            }

            //sOut = sOut.Replace("[BREADCRUMB]", String.Empty)
            //sOut = sOut.Replace("[WHOSONLINE]", "<af:usersonline id=""ctlUsersOnline"" templatefile=""usersonline.htm"" runat=""server"" />")
            //sOut = sOut.Replace("[JUMPTO]", String.Empty)
            //sOut = sOut.Replace("[TEMPLATE:TOOLBAR]", "<af:toolbar id=""ctlToolbar"" templatefile=""toolbar.htm"" runat=""server"" />")

            //DataCache.CacheStore(ModuleId & "fvt", sOut)
            return(sOut);
        }
        private string SaveTopic()
        {
            int topicId = -1;
            int forumId = -1;
            if (Params.ContainsKey("topicid") && SimulateIsNumeric.IsNumeric(Params["topicid"]))
            {
                topicId = int.Parse(Params["topicid"].ToString());
            }
            if (topicId > 0)
            {
                TopicsController tc = new TopicsController();
                TopicInfo t = tc.Topics_Get(PortalId, ModuleId, topicId);
                Data.ForumsDB db = new Data.ForumsDB();
                forumId = db.Forum_GetByTopicId(topicId);
                ForumController fc = new ForumController();
                Forum f = fc.Forums_Get(PortalId, -1, forumId, this.UserId, true, false, -1);
                if (Permissions.HasPerm(f.Security.ModEdit, ForumUser.UserRoles))
                {
                    string subject = Params["subject"].ToString();
                    subject = Utilities.XSSFilter(subject, true);
                    if (! (string.IsNullOrEmpty(f.PrefixURL)))
                    {
                        string cleanSubject = Utilities.CleanName(subject).ToLowerInvariant();
                        if (SimulateIsNumeric.IsNumeric(cleanSubject))
                        {
                            cleanSubject = "Topic-" + cleanSubject;
                        }
                        string topicUrl = cleanSubject;
                        string urlPrefix = "/";
                        if (! (string.IsNullOrEmpty(f.ForumGroup.PrefixURL)))
                        {
                            urlPrefix += f.ForumGroup.PrefixURL + "/";
                        }
                        if (! (string.IsNullOrEmpty(f.PrefixURL)))
                        {
                            urlPrefix += f.PrefixURL + "/";
                        }
                        string urlToCheck = urlPrefix + cleanSubject;
                        Data.Topics topicsDb = new Data.Topics();
                        for (int u = 0; u <= 200; u++)
                        {
                            int tid = topicsDb.TopicIdByUrl(PortalId, f.ModuleId, urlToCheck);
                            if (tid > 0 && tid == topicId)
                            {
                                break;
                            }
                            else if (tid > 0)
                            {
                                topicUrl = (u + 1) + "-" + cleanSubject;
                                urlToCheck = urlPrefix + topicUrl;
                            }
                            else
                            {
                                break;
                            }
                        }
                        if (topicUrl.Length > 150)
                        {
                            topicUrl = topicUrl.Substring(0, 149);
                            topicUrl = topicUrl.Substring(0, topicUrl.LastIndexOf("-"));
                        }
                        t.TopicUrl = topicUrl;
                        //.URL = topicUrl
                    }
                    else
                    {
                        //.URL = String.Empty
                        t.TopicUrl = string.Empty;
                    }
                    t.Content.Subject = subject;
                    t.IsPinned = bool.Parse(Params["pinned"].ToString());
                    t.IsLocked = bool.Parse(Params["locked"].ToString());
                    t.Priority = int.Parse(Params["priority"].ToString());
                    t.StatusId = int.Parse(Params["status"].ToString());
                    if (f.Properties != null)
                    {
                        StringBuilder tData = new StringBuilder();
                        tData.Append("<topicdata>");
                        tData.Append("<properties>");
                        foreach (PropertiesInfo p in f.Properties)
                        {
                            string pkey = "prop-" + p.PropertyId.ToString();

                            tData.Append("<property id=\"" + p.PropertyId.ToString() + "\">");
                            tData.Append("<name><![CDATA[");
                            tData.Append(p.Name);
                            tData.Append("]]></name>");
                            if (Params[pkey] != null)
                            {
                                tData.Append("<value><![CDATA[");
                                tData.Append(Utilities.XSSFilter(Params[pkey].ToString()));
                                tData.Append("]]></value>");
                            }
                            else
                            {
                                tData.Append("<value></value>");
                            }
                            tData.Append("</property>");
                        }
                        tData.Append("</properties>");
                        tData.Append("</topicdata>");
                        t.TopicData = tData.ToString();
                    }
                }
                tc.TopicSave(PortalId, t);
                if (Params["tags"] != null)
                {
                    DataProvider.Instance().Tags_DeleteByTopicId(PortalId, f.ModuleId, topicId);
                    string tagForm = string.Empty;
                    if (Params["tags"] != null)
                    {
                        tagForm = Params["tags"].ToString();
                    }
                    if (! (tagForm == string.Empty))
                    {
                        string[] Tags = tagForm.Split(',');
                        foreach (string tag in Tags)
                        {
                            string sTag = Utilities.CleanString(PortalId, tag.Trim(), false, EditorTypes.TEXTBOX, false, false, f.ModuleId, string.Empty, false);
                            DataProvider.Instance().Tags_Save(PortalId, f.ModuleId, -1, sTag, 0, 1, 0, topicId, false, -1, -1);
                        }
                    }
                }

                if (Params["categories"] != null)
                {
                    string[] cats = Params["categories"].ToString().Split(';');
                    DataProvider.Instance().Tags_DeleteTopicToCategory(PortalId, f.ModuleId, -1, topicId);
                    foreach (string c in cats)
                    {
                        int cid = -1;
                        if (! (string.IsNullOrEmpty(c)) && SimulateIsNumeric.IsNumeric(c))
                        {
                            cid = Convert.ToInt32(c);
                            if (cid > 0)
                            {
                                DataProvider.Instance().Tags_AddTopicToCategory(PortalId, f.ModuleId, cid, topicId);
                            }
                        }
                    }
                }
            }

            return BuildOutput(string.Empty, OutputCodes.UnsupportedRequest, false);
        }
        private string LoadTopic()
        {
            int topicId = -1;
            int forumId = -1;

            if (Params.ContainsKey("topicid") && SimulateIsNumeric.IsNumeric(Params["topicid"]))
            {
                topicId = int.Parse(Params["topicid"].ToString());
            }
            if (topicId > 0)
            {
                TopicsController tc = new TopicsController();
                TopicInfo        t  = tc.Topics_Get(PortalId, ModuleId, topicId);
                Data.ForumsDB    db = new Data.ForumsDB();
                forumId = db.Forum_GetByTopicId(topicId);
                ForumController fc = new ForumController();
                Forum           f  = fc.Forums_Get(PortalId, -1, forumId, this.UserId, true, false, -1);
                if (f != null)
                {
                    if (Permissions.HasPerm(f.Security.ModEdit, ForumUser.UserRoles))
                    {
                        StringBuilder sb = new StringBuilder();
                        sb.Append("{");
                        sb.Append(Utilities.JSON.Pair("topicid", t.TopicId.ToString()));
                        sb.Append(",");
                        sb.Append(Utilities.JSON.Pair("subject", t.Content.Subject));
                        sb.Append(",");
                        sb.Append(Utilities.JSON.Pair("authorid", t.Content.AuthorId.ToString()));
                        sb.Append(",");
                        sb.Append(Utilities.JSON.Pair("locked", t.IsLocked.ToString()));
                        sb.Append(",");
                        sb.Append(Utilities.JSON.Pair("pinned", t.IsPinned.ToString()));
                        sb.Append(",");
                        sb.Append(Utilities.JSON.Pair("priority", t.Priority.ToString()));
                        sb.Append(",");
                        sb.Append(Utilities.JSON.Pair("status", t.StatusId.ToString()));
                        sb.Append(",");
                        sb.Append(Utilities.JSON.Pair("forumid", forumId.ToString()));
                        sb.Append(",");
                        sb.Append(Utilities.JSON.Pair("forumname", f.ForumName));
                        sb.Append(",");
                        sb.Append(Utilities.JSON.Pair("tags", t.Tags));
                        sb.Append(",");
                        sb.Append(Utilities.JSON.Pair("categories", t.Categories));
                        sb.Append(",");
                        sb.Append("\"properties\":[");
                        string sCats = string.Empty;
                        if (f.Properties != null)
                        {
                            int i = 0;
                            foreach (PropertiesInfo p in f.Properties)
                            {
                                sb.Append("{");
                                sb.Append(Utilities.JSON.Pair("propertyid", p.PropertyId.ToString()));
                                sb.Append(",");
                                sb.Append(Utilities.JSON.Pair("datatype", p.DataType));
                                sb.Append(",");
                                sb.Append(Utilities.JSON.Pair("propertyname", p.Name));
                                sb.Append(",");
                                string pvalue = p.DefaultValue;
                                foreach (PropertiesInfo tp in t.TopicProperties)
                                {
                                    if (tp.PropertyId == p.PropertyId)
                                    {
                                        pvalue = tp.DefaultValue;
                                    }
                                }

                                sb.Append(Utilities.JSON.Pair("propertyvalue", pvalue));
                                if (p.DataType.Contains("list"))
                                {
                                    sb.Append(",\"listdata\":[");
                                    if (p.DataType.Contains("list|categories"))
                                    {
                                        using (IDataReader dr = DataProvider.Instance().Tags_List(PortalId, f.ModuleId, true, 0, 200, "ASC", "TagName", forumId, f.ForumGroupId))
                                        {
                                            dr.NextResult();
                                            while (dr.Read())
                                            {
                                                sCats += "{";
                                                sCats += Utilities.JSON.Pair("id", dr["TagId"].ToString());
                                                sCats += ",";
                                                sCats += Utilities.JSON.Pair("name", dr["TagName"].ToString());
                                                sCats += ",";
                                                sCats += Utilities.JSON.Pair("selected", IsSelected(dr["TagName"].ToString(), t.Categories).ToString());
                                                sCats += "},";
                                            }
                                            dr.Close();
                                        }
                                        if (!(string.IsNullOrEmpty(sCats)))
                                        {
                                            sCats = sCats.Substring(0, sCats.Length - 1);
                                        }
                                        sb.Append(sCats);
                                    }
                                    else
                                    {
                                        DotNetNuke.Common.Lists.ListController lists = new DotNetNuke.Common.Lists.ListController();
                                        string lName = p.DataType.Substring(p.DataType.IndexOf("|") + 1);
                                        DotNetNuke.Common.Lists.ListEntryInfoCollection lc = lists.GetListEntryInfoCollection(lName, string.Empty);
                                        int il = 0;
                                        foreach (DotNetNuke.Common.Lists.ListEntryInfo l in lc)
                                        {
                                            sb.Append("{");
                                            sb.Append(Utilities.JSON.Pair("itemId", l.Value));
                                            sb.Append(",");
                                            sb.Append(Utilities.JSON.Pair("itemName", l.Text));
                                            sb.Append("}");
                                            il += 1;
                                            if (il < lc.Count)
                                            {
                                                sb.Append(",");
                                            }
                                        }
                                    }
                                    sb.Append("]");
                                }
                                sb.Append("}");
                                i += 1;
                                if (i < f.Properties.Count)
                                {
                                    sb.Append(",");
                                }
                            }
                        }



                        sb.Append("],\"categories\":[");
                        sCats = string.Empty;
                        using (IDataReader dr = DataProvider.Instance().Tags_List(PortalId, f.ModuleId, true, 0, 200, "ASC", "TagName", forumId, f.ForumGroupId))
                        {
                            dr.NextResult();
                            while (dr.Read())
                            {
                                sCats += "{";
                                sCats += Utilities.JSON.Pair("id", dr["TagId"].ToString());
                                sCats += ",";
                                sCats += Utilities.JSON.Pair("name", dr["TagName"].ToString());
                                sCats += ",";
                                sCats += Utilities.JSON.Pair("selected", IsSelected(dr["TagName"].ToString(), t.Categories).ToString());
                                sCats += "},";
                            }
                            dr.Close();
                        }
                        if (!(string.IsNullOrEmpty(sCats)))
                        {
                            sCats = sCats.Substring(0, sCats.Length - 1);
                        }
                        sb.Append(sCats);
                        sb.Append("]");
                        sb.Append("}");
                        return(BuildOutput(sb.ToString(), OutputCodes.Success, true, true));
                    }
                }
            }
            return(BuildOutput(string.Empty, OutputCodes.UnsupportedRequest, false));
        }
        private string DeletePost()
        {
            int replyId = -1;
            int TopicId = -1;

            if (Params.ContainsKey("topicid") && SimulateIsNumeric.IsNumeric(Params["topicid"]))
            {
                TopicId = int.Parse(Params["topicid"].ToString());
            }
            if (Params.ContainsKey("replyid") && SimulateIsNumeric.IsNumeric(Params["replyid"]))
            {
                replyId = int.Parse(Params["replyid"].ToString());
            }
            int forumId = -1;

            Data.ForumsDB db = new Data.ForumsDB();
            forumId = db.Forum_GetByTopicId(TopicId);
            ForumController fc = new ForumController();
            Forum           f  = fc.Forums_Get(forumId, this.UserId, true);

            // Need to get the list of attachments BEFORE we remove the post recods
            var attachmentController = new Data.AttachController();
            var attachmentList       = (MainSettings.DeleteBehavior == 0)
                                             ? attachmentController.ListForPost(TopicId, replyId)
                                             : null;


            if (TopicId > 0 & replyId < 1)
            {
                TopicsController tc = new TopicsController();
                TopicInfo        ti = tc.Topics_Get(PortalId, ModuleId, TopicId);

                if (Permissions.HasAccess(f.Security.ModDelete, ForumUser.UserRoles) || (Permissions.HasAccess(f.Security.Delete, ForumUser.UserRoles) && ti.Content.AuthorId == UserId && ti.IsLocked == false))
                {
                    DataProvider.Instance().Topics_Delete(forumId, TopicId, MainSettings.DeleteBehavior);
                    string journalKey = string.Format("{0}:{1}", forumId.ToString(), TopicId.ToString());
                    JournalController.Instance.DeleteJournalItemByKey(PortalId, journalKey);
                }
                else
                {
                    return(BuildOutput(string.Empty, OutputCodes.UnsupportedRequest, false));
                }
            }
            else
            {
                ReplyController rc = new ReplyController();
                ReplyInfo       ri = rc.Reply_Get(PortalId, ModuleId, TopicId, replyId);
                if (Permissions.HasAccess(f.Security.ModDelete, ForumUser.UserRoles) || (Permissions.HasAccess(f.Security.Delete, ForumUser.UserRoles) && ri.Content.AuthorId == UserId))
                {
                    DataProvider.Instance().Reply_Delete(forumId, TopicId, replyId, MainSettings.DeleteBehavior);
                    string journalKey = string.Format("{0}:{1}:{2}", forumId.ToString(), TopicId.ToString(), replyId.ToString());
                    JournalController.Instance.DeleteJournalItemByKey(PortalId, journalKey);
                }
                else
                {
                    return(BuildOutput(string.Empty, OutputCodes.UnsupportedRequest, false));
                }
            }

            // If it's a hard delete, delete associated attachments
            // attachmentList will only be populated if the DeleteBehavior is 0
            if (attachmentList != null)
            {
                var fileManager      = FileManager.Instance;
                var folderManager    = FolderManager.Instance;
                var attachmentFolder = folderManager.GetFolder(PortalId, "activeforums_Attach");

                foreach (var attachment in attachmentList)
                {
                    attachmentController.Delete(attachment.AttachmentId);

                    var file = attachment.FileId.HasValue
                                   ? fileManager.GetFile(attachment.FileId.Value)
                                   : fileManager.GetFile(attachmentFolder, attachment.FileName);

                    // Only delete the file if it exists in the attachment folder
                    if (file != null && file.FolderId == attachmentFolder.FolderID)
                    {
                        fileManager.DeleteFile(file);
                    }
                }
            }

            // Return the result
            string cachekey = string.Format("AF-FV-{0}-{1}", PortalId, ModuleId);

            DataCache.CacheClearPrefix(cachekey);
            return(BuildOutput(TopicId + "|" + replyId, OutputCodes.Success, true));
        }
Beispiel #14
0
		public string Render()
		{
			if (string.IsNullOrEmpty(Template))
			{
				return "Please specify a template";
			}
			StringBuilder sb = new StringBuilder();
			Data.ForumsDB fdb = new Data.ForumsDB();
			ForumCollection allForums = fdb.Forums_List(PortalId, ModuleId);
			ForumCollection filteredForums = new ForumCollection();
			foreach (Forum f in allForums)
			{
				if (f.ForumGroup.Active && f.Active && f.ParentForumId == 0)
				{
					if (Permissions.HasPerm(f.Security.View, ForumUser.UserRoles))
					{
						f.TabId = TabId;
						f.SubForums = GetSubForums(allForums, f.ForumID);
						filteredForums.Add(f);
					}
				}
			}
			string groupTemplate = TemplateUtils.GetTemplateSection(Template, "[AF:DIR:FORUMGROUP]", "[/AF:DIR:FORUMGROUP]");
			string forumTemplate = TemplateUtils.GetTemplateSection(Template, "[AF:DIR:FORUM]", "[/AF:DIR:FORUM]");
			string subForumTemplate = TemplateUtils.GetTemplateSection(Template, "[AF:DIR:SUBFORUM]", "[/AF:DIR:SUBFORUM]");
			int currGroup = -1;
			string gtmp = string.Empty;
			string ftmp = string.Empty;
			string subtmp = string.Empty;
			StringBuilder list = new StringBuilder();
			bool inprogress = false;
			foreach (Forum f in filteredForums)
			{
				if (currGroup != f.ForumGroupId)
				{
					if (! (string.IsNullOrEmpty(gtmp)))
					{
						gtmp = gtmp.Replace("[FORUMHOLDER]", string.Empty);
						list.Append(gtmp);
					}
					gtmp = groupTemplate;
					gtmp = TemplateUtils.ReplaceSubSection(gtmp, "[FORUMHOLDER]", "[AF:DIR:FORUM]", "[/AF:DIR:FORUM]");
					gtmp = ParseForumGroup(f.ForumGroup, gtmp);
					ftmp = forumTemplate;
					ftmp = TemplateUtils.ReplaceSubSection(ftmp, "[SUBFORUMHOLDER]", "[AF:DIR:SUBFORUM]", "[/AF:DIR:SUBFORUM]");
					subtmp = subForumTemplate;
					currGroup = f.ForumGroupId;
				}
				string forums = ParseForum(f, ftmp);
				if (f.SubForums != null)
				{
					foreach (Forum s in f.SubForums)
					{
						forums = forums.Replace("[SUBFORUMHOLDER]", ParseForum(s, subtmp) + "[SUBFORUMHOLDER]");
					}
				}
				forums = forums.Replace("[SUBFORUMHOLDER]", string.Empty);
				gtmp = gtmp.Replace("[FORUMHOLDER]", forums + "[FORUMHOLDER]");

			}
			gtmp = gtmp.Replace("[FORUMHOLDER]", string.Empty);
			list.Append(gtmp);
			Template = TemplateUtils.ReplaceSubSection(Template, list.ToString(), "[AF:DIR:FORUMGROUP]", "[/AF:DIR:FORUMGROUP]");
			return Template;
		}
        private string MoveTopic()
        {
            int topicId = -1;
            int forumId = -1;
            int targetForumId = -1;
            if (Params.ContainsKey("topicid") && SimulateIsNumeric.IsNumeric(Params["topicid"]))
            {
                topicId = int.Parse(Params["topicid"].ToString());
            }
            if (Params.ContainsKey("forumid") && SimulateIsNumeric.IsNumeric(Params["forumid"]))
            {
                targetForumId = int.Parse(Params["forumid"].ToString());
            }
            if (topicId > 0)
            {
                TopicsController tc = new TopicsController();
                TopicInfo t = tc.Topics_Get(PortalId, ModuleId, topicId);
                Data.ForumsDB db = new Data.ForumsDB();
                forumId = db.Forum_GetByTopicId(topicId);
                ForumController fc = new ForumController();
                Forum f = fc.Forums_Get(forumId, this.UserId, true);
                if (f != null)
                {
                    if (Permissions.HasPerm(f.Security.ModMove, ForumUser.UserRoles))
                    {
                        tc.Topics_Move(PortalId, ModuleId, targetForumId, topicId);
                        DataCache.ClearAllCache(ModuleId, TabId);
                        return BuildOutput(string.Empty, OutputCodes.Success, true);
                    }
                }

            }
            return BuildOutput(string.Empty, OutputCodes.UnsupportedRequest, false);
        }
        private string SaveTopic()
        {
            int topicId = -1;
            int forumId = -1;

            if (Params.ContainsKey("topicid") && SimulateIsNumeric.IsNumeric(Params["topicid"]))
            {
                topicId = int.Parse(Params["topicid"].ToString());
            }
            if (topicId > 0)
            {
                TopicsController tc = new TopicsController();
                TopicInfo        t  = tc.Topics_Get(PortalId, ModuleId, topicId);
                Data.ForumsDB    db = new Data.ForumsDB();
                forumId = db.Forum_GetByTopicId(topicId);
                ForumController fc = new ForumController();
                Forum           f  = fc.Forums_Get(PortalId, -1, forumId, this.UserId, true, false, -1);
                if (Permissions.HasPerm(f.Security.ModEdit, ForumUser.UserRoles))
                {
                    string subject = Params["subject"].ToString();
                    subject = Utilities.XSSFilter(subject, true);
                    if (!(string.IsNullOrEmpty(f.PrefixURL)))
                    {
                        string cleanSubject = Utilities.CleanName(subject).ToLowerInvariant();
                        if (SimulateIsNumeric.IsNumeric(cleanSubject))
                        {
                            cleanSubject = "Topic-" + cleanSubject;
                        }
                        string topicUrl  = cleanSubject;
                        string urlPrefix = "/";
                        if (!(string.IsNullOrEmpty(f.ForumGroup.PrefixURL)))
                        {
                            urlPrefix += f.ForumGroup.PrefixURL + "/";
                        }
                        if (!(string.IsNullOrEmpty(f.PrefixURL)))
                        {
                            urlPrefix += f.PrefixURL + "/";
                        }
                        string      urlToCheck = urlPrefix + cleanSubject;
                        Data.Topics topicsDb   = new Data.Topics();
                        for (int u = 0; u <= 200; u++)
                        {
                            int tid = topicsDb.TopicIdByUrl(PortalId, f.ModuleId, urlToCheck);
                            if (tid > 0 && tid == topicId)
                            {
                                break;
                            }
                            else if (tid > 0)
                            {
                                topicUrl   = (u + 1) + "-" + cleanSubject;
                                urlToCheck = urlPrefix + topicUrl;
                            }
                            else
                            {
                                break;
                            }
                        }
                        if (topicUrl.Length > 150)
                        {
                            topicUrl = topicUrl.Substring(0, 149);
                            topicUrl = topicUrl.Substring(0, topicUrl.LastIndexOf("-"));
                        }
                        t.TopicUrl = topicUrl;
                        //.URL = topicUrl
                    }
                    else
                    {
                        //.URL = String.Empty
                        t.TopicUrl = string.Empty;
                    }
                    t.Content.Subject = subject;
                    t.IsPinned        = bool.Parse(Params["pinned"].ToString());
                    t.IsLocked        = bool.Parse(Params["locked"].ToString());
                    t.Priority        = int.Parse(Params["priority"].ToString());
                    t.StatusId        = int.Parse(Params["status"].ToString());
                    if (f.Properties != null)
                    {
                        StringBuilder tData = new StringBuilder();
                        tData.Append("<topicdata>");
                        tData.Append("<properties>");
                        foreach (PropertiesInfo p in f.Properties)
                        {
                            string pkey = "prop-" + p.PropertyId.ToString();

                            tData.Append("<property id=\"" + p.PropertyId.ToString() + "\">");
                            tData.Append("<name><![CDATA[");
                            tData.Append(p.Name);
                            tData.Append("]]></name>");
                            if (Params[pkey] != null)
                            {
                                tData.Append("<value><![CDATA[");
                                tData.Append(Utilities.XSSFilter(Params[pkey].ToString()));
                                tData.Append("]]></value>");
                            }
                            else
                            {
                                tData.Append("<value></value>");
                            }
                            tData.Append("</property>");
                        }
                        tData.Append("</properties>");
                        tData.Append("</topicdata>");
                        t.TopicData = tData.ToString();
                    }
                }
                tc.TopicSave(PortalId, t);
                if (Params["tags"] != null)
                {
                    DataProvider.Instance().Tags_DeleteByTopicId(PortalId, f.ModuleId, topicId);
                    string tagForm = string.Empty;
                    if (Params["tags"] != null)
                    {
                        tagForm = Params["tags"].ToString();
                    }
                    if (!(tagForm == string.Empty))
                    {
                        string[] Tags = tagForm.Split(',');
                        foreach (string tag in Tags)
                        {
                            string sTag = Utilities.CleanString(PortalId, tag.Trim(), false, EditorTypes.TEXTBOX, false, false, f.ModuleId, string.Empty, false);
                            DataProvider.Instance().Tags_Save(PortalId, f.ModuleId, -1, sTag, 0, 1, 0, topicId, false, -1, -1);
                        }
                    }
                }

                if (Params["categories"] != null)
                {
                    string[] cats = Params["categories"].ToString().Split(';');
                    DataProvider.Instance().Tags_DeleteTopicToCategory(PortalId, f.ModuleId, -1, topicId);
                    foreach (string c in cats)
                    {
                        int cid = -1;
                        if (!(string.IsNullOrEmpty(c)) && SimulateIsNumeric.IsNumeric(c))
                        {
                            cid = Convert.ToInt32(c);
                            if (cid > 0)
                            {
                                DataProvider.Instance().Tags_AddTopicToCategory(PortalId, f.ModuleId, cid, topicId);
                            }
                        }
                    }
                }
            }


            return(BuildOutput(string.Empty, OutputCodes.UnsupportedRequest, false));
        }
 private string PinTopic()
 {
     int topicId = -1;
     int forumId = -1;
     if (Params.ContainsKey("topicid") && SimulateIsNumeric.IsNumeric(Params["topicid"]))
     {
         topicId = int.Parse(Params["topicid"].ToString());
     }
     if (topicId > 0)
     {
         TopicsController tc = new TopicsController();
         TopicInfo t = tc.Topics_Get(PortalId, ModuleId, topicId);
         Data.ForumsDB db = new Data.ForumsDB();
         forumId = db.Forum_GetByTopicId(topicId);
         ForumController fc = new ForumController();
         Forum f = fc.Forums_Get(forumId, this.UserId, true);
         if (f != null)
         {
             if (Permissions.HasPerm(f.Security.ModPin, ForumUser.UserRoles) || (t.Author.AuthorId == this.UserId && Permissions.HasAccess(f.Security.Pin, ForumUser.UserRoles)))
             {
                 if (t.IsPinned)
                 {
                     t.IsPinned = false;
                 }
                 else
                 {
                     t.IsPinned = true;
                 }
                 tc.TopicSave(PortalId, t);
                 return BuildOutput(string.Empty, OutputCodes.Success, true);
             }
         }
     }
     return BuildOutput(string.Empty, OutputCodes.UnsupportedRequest, false);
 }
Beispiel #18
0
        public string Render()
        {
            if (string.IsNullOrEmpty(Template))
            {
                return("Please specify a template");
            }
            StringBuilder sb = new StringBuilder();

            Data.ForumsDB   fdb            = new Data.ForumsDB();
            ForumCollection allForums      = fdb.Forums_List(PortalId, ModuleId);
            ForumCollection filteredForums = new ForumCollection();

            foreach (Forum f in allForums)
            {
                if (f.ForumGroup.Active && f.Active && f.ParentForumId == 0)
                {
                    if (Permissions.HasPerm(f.Security.View, ForumUser.UserRoles))
                    {
                        f.TabId     = TabId;
                        f.SubForums = GetSubForums(allForums, f.ForumID);
                        filteredForums.Add(f);
                    }
                }
            }
            string        groupTemplate    = TemplateUtils.GetTemplateSection(Template, "[AF:DIR:FORUMGROUP]", "[/AF:DIR:FORUMGROUP]");
            string        forumTemplate    = TemplateUtils.GetTemplateSection(Template, "[AF:DIR:FORUM]", "[/AF:DIR:FORUM]");
            string        subForumTemplate = TemplateUtils.GetTemplateSection(Template, "[AF:DIR:SUBFORUM]", "[/AF:DIR:SUBFORUM]");
            int           currGroup        = -1;
            string        gtmp             = string.Empty;
            string        ftmp             = string.Empty;
            string        subtmp           = string.Empty;
            StringBuilder list             = new StringBuilder();
            bool          inprogress       = false;

            foreach (Forum f in filteredForums)
            {
                if (currGroup != f.ForumGroupId)
                {
                    if (!(string.IsNullOrEmpty(gtmp)))
                    {
                        gtmp = gtmp.Replace("[FORUMHOLDER]", string.Empty);
                        list.Append(gtmp);
                    }
                    gtmp      = groupTemplate;
                    gtmp      = TemplateUtils.ReplaceSubSection(gtmp, "[FORUMHOLDER]", "[AF:DIR:FORUM]", "[/AF:DIR:FORUM]");
                    gtmp      = ParseForumGroup(f.ForumGroup, gtmp);
                    ftmp      = forumTemplate;
                    ftmp      = TemplateUtils.ReplaceSubSection(ftmp, "[SUBFORUMHOLDER]", "[AF:DIR:SUBFORUM]", "[/AF:DIR:SUBFORUM]");
                    subtmp    = subForumTemplate;
                    currGroup = f.ForumGroupId;
                }
                string forums = ParseForum(f, ftmp);
                if (f.SubForums != null)
                {
                    foreach (Forum s in f.SubForums)
                    {
                        forums = forums.Replace("[SUBFORUMHOLDER]", ParseForum(s, subtmp) + "[SUBFORUMHOLDER]");
                    }
                }
                forums = forums.Replace("[SUBFORUMHOLDER]", string.Empty);
                gtmp   = gtmp.Replace("[FORUMHOLDER]", forums + "[FORUMHOLDER]");
            }
            gtmp = gtmp.Replace("[FORUMHOLDER]", string.Empty);
            list.Append(gtmp);
            Template = TemplateUtils.ReplaceSubSection(Template, list.ToString(), "[AF:DIR:FORUMGROUP]", "[/AF:DIR:FORUMGROUP]");
            return(Template);
        }
Beispiel #19
0
        public XmlDocument ForumListXML(int SiteId, int InstanceId)
        {
            XmlDocument xDoc = new XmlDocument();
            object obj = DataCache.CacheRetrieve(InstanceId + "fv");
            if (obj == null)
            {
                Data.ForumsDB db = new Data.ForumsDB();
                ForumCollection fc = db.Forums_List(SiteId, InstanceId);
                //Dim ds As DataSet = SqlHelper.ExecuteDataset(connectionString, databaseOwner & objectQualifier & "activeforums_UI_ForumDisplay", SiteId, InstanceId, UserId, -1, ForumIds)
                System.Text.StringBuilder sb = new System.Text.StringBuilder();
                sb.Append("<?xml version=\"1.0\" encoding=\"utf-8\" ?>");
                sb.AppendLine();
                sb.Append("<root>");
                sb.AppendLine();
                int groupId = -1;
                System.Text.StringBuilder groups = new System.Text.StringBuilder();
                System.Text.StringBuilder forums = new System.Text.StringBuilder();
                foreach (Forum f in fc)
                {
                    if (groupId != f.ForumGroupId)
                    {
                        groups.Append("<group groupid=\"" + f.ForumGroupId.ToString() + "\" active=\"" + f.ForumGroup.Active.ToString().ToLowerInvariant() + "\" hidden=\"" + f.ForumGroup.Hidden.ToString().ToLowerInvariant() + "\">");
                        groups.Append("<name><![CDATA[" + f.GroupName.ToString() + "]]></name>");
                        //If Not String.IsNullOrEmpty(f.ForumGroup.SEO) Then
                        //    groups.Append(f.ForumGroup.SEO)
                        //End If
                        groups.Append("</group>");
                        sb.AppendLine();
                        groupId = f.ForumGroupId;
                    }
                }
                sb.Append("<groups>");
                sb.AppendLine();
                sb.Append(groups.ToString());
                sb.Append("</groups>");
                sb.AppendLine();
                foreach (Forum f in fc)
                {
                    forums.Append("<forum groupid=\"" + f.ForumGroupId.ToString() + "\" forumid=\"" + f.ForumID.ToString() + "\"");
                    //forums.Append(" name=""" & HttpUtility.UrlEncode(f.ForumName) & """")
                    //forums.Append(" desc=""" & HttpUtility.UrlEncode(Utilities.HTMLEncode(f.ForumDesc.ToString)) & """")
                    forums.Append(" active=\"" + f.Active.ToString().ToLowerInvariant() + "\"");
                    forums.Append(" hidden=\"" + f.Hidden.ToString().ToLowerInvariant() + "\"");
                    forums.Append(" totaltopics=\"" + f.TotalTopics.ToString() + "\"");
                    forums.Append(" totalreplies=\"" + f.TotalReplies.ToString() + "\"");
                    forums.Append(" lasttopicid=\"" + f.LastTopicId.ToString() + "\"");
                    forums.Append(" lastreplyid=\"" + f.LastReplyId.ToString() + "\"");
                    //forums.Append(" lastpostsubject=""" & f.LastPostSubject & """")
                    //forums.Append(" lastpostauthorname=""" & f.LastPostDisplayName & """")
                    forums.Append(" lastpostauthorid=\"" + f.LastPostUserID + "\"");
                    forums.Append(" lastpostdate=\"" + f.LastPostDateTime.ToString() + "\"");
                    forums.Append(" lastread=\"" + f.LastRead.ToString() + "\"");
                    forums.Append(" allowrss=\"" + f.ForumSettings["ALLOWRSS"].ToString() + "\"");
                    forums.Append(" parentforumid=\"" + f.ParentForumId.ToString() + "\"");
                    forums.Append(" viewroles=\"" + f.Security.View.ToString() + "\"");
                    forums.Append(" readroles=\"" + f.Security.Read.ToString() + "\"");
                    forums.Append(" replyroles=\"" + f.Security.Reply.ToString() + "\"");
                    forums.Append(" modroles=\"" + f.Security.ModApprove.ToString() + "\"");
                    forums.Append(" modmove=\"" + f.Security.ModMove.ToString() + "\"");
                    forums.Append(">");
                    forums.Append("<name><![CDATA[" + f.ForumName + "]]></name>");
                    forums.Append("<description><![CDATA[" + f.ForumDesc + "]]></description>");
                    forums.Append("<security>");
                    forums.Append("<view>" + f.Security.View + "</view>");
                    forums.Append("<read>" + f.Security.Read + "</read>");
                    forums.Append("<create>" + f.Security.Create + "</create>");
                    forums.Append("<reply>" + f.Security.Reply + "</reply>");
                    forums.Append("<edit>" + f.Security.Edit + "</edit>");
                    forums.Append("<delete>" + f.Security.Delete + "</delete>");
                    forums.Append("<lock>" + f.Security.Lock + "</lock>");
                    forums.Append("<pin>" + f.Security.Pin + "</pin>");
                    forums.Append("<modapprove>" + f.Security.ModApprove + "</modapprove>");
                    forums.Append("<modedit>" + f.Security.ModEdit + "</modedit>");
                    forums.Append("<moddelete>" + f.Security.ModDelete + "</moddelete>");
                    forums.Append("<modlock>" + f.Security.ModLock + "</modlock>");
                    forums.Append("<modpin>" + f.Security.ModPin + "</modpin>");
                    forums.Append("<modmove>" + f.Security.ModMove + "</modmove>");
                    forums.Append("</security>");
                    //If Not String.IsNullOrEmpty(f.SEO) Then
                    //    forums.Append(f.SEO)
                    //End If

                    forums.Append("</forum>");
                    sb.AppendLine();
                }
                sb.Append("<forums>");
                sb.AppendLine();
                sb.Append(forums.ToString());
                sb.Append("</forums>");
                sb.AppendLine();
                sb.Append("<topics />");
                sb.AppendLine();
                sb.Append("<replies />");
                sb.AppendLine();
                sb.Append("</root>");
                sb.AppendLine();

                //Dim sXML As String = ds.GetXml()
                xDoc.LoadXml(sb.ToString());
                DataCache.CacheStore(InstanceId + "fv", xDoc);
            }
            else
            {
                xDoc = (XmlDocument)obj;
            }
            //Logger.Log(xDoc.OuterXml)
            return xDoc;
        }
        private string DeletePost()
        {
            int replyId = -1;
            int TopicId = -1;
            if (Params.ContainsKey("topicid") && SimulateIsNumeric.IsNumeric(Params["topicid"]))
            {
                TopicId = int.Parse(Params["topicid"].ToString());
            }
            if (Params.ContainsKey("replyid") && SimulateIsNumeric.IsNumeric(Params["replyid"]))
            {
                replyId = int.Parse(Params["replyid"].ToString());
            }
            int forumId = -1;
            Data.ForumsDB db = new Data.ForumsDB();
            forumId = db.Forum_GetByTopicId(TopicId);
            ForumController fc = new ForumController();
            Forum f = fc.Forums_Get(forumId, this.UserId, true);
            if (TopicId > 0 & replyId < 1)
            {
                TopicsController tc = new TopicsController();
                TopicInfo ti = tc.Topics_Get(PortalId, ModuleId, TopicId);

                if (Permissions.HasAccess(f.Security.ModDelete, ForumUser.UserRoles) || (Permissions.HasAccess(f.Security.Delete, ForumUser.UserRoles) && ti.Content.AuthorId == UserId && ti.IsLocked == false))
                {
                    DataProvider.Instance().Topics_Delete(forumId, TopicId, MainSettings.DeleteBehavior);
                    string journalKey = string.Format("{0}:{1}", forumId.ToString(), TopicId.ToString());
                    JournalController.Instance.DeleteJournalItemByKey(PortalId, journalKey);
                }
                else
                {
                    return BuildOutput(string.Empty, OutputCodes.UnsupportedRequest, false);
                }
            }
            else
            {
                ReplyController rc = new ReplyController();
                ReplyInfo ri = rc.Reply_Get(PortalId, ModuleId, TopicId, replyId);
                if (Permissions.HasAccess(f.Security.ModDelete, ForumUser.UserRoles) || (Permissions.HasAccess(f.Security.Delete, ForumUser.UserRoles) && ri.Content.AuthorId == UserId))
                {
                    DataProvider.Instance().Reply_Delete(forumId, TopicId, replyId, MainSettings.DeleteBehavior);
                    string journalKey = string.Format("{0}:{1}:{2}", forumId.ToString(), TopicId.ToString(), replyId.ToString());
                    JournalController.Instance.DeleteJournalItemByKey(PortalId, journalKey);

                }
                else
                {
                    return BuildOutput(string.Empty, OutputCodes.UnsupportedRequest, false);
                }

            }
            string cachekey = string.Format("AF-FV-{0}-{1}", PortalId, ModuleId);
            DataCache.CacheClearPrefix(cachekey);
            return BuildOutput(TopicId + "|" + replyId, OutputCodes.Success, true);
        }