private void LoadCategories()
        {
            //转换目录信息列表至树形节点列表
            List <RecursiveCategoryData> listRecursive = LocalUtils.ConvertCategoryListToRecursiveList(PortalCategoryList);
            RecursiveCategoryItem        m_recursiveCategoryRoot;

            m_recursiveCategoryRoot = RecursiveHelper.ConvertListToRecursiveItem(listRecursive);

            RecursiveHelper.ConvertRecursiveItemToAspNetTree(ref tvCategory, m_recursiveCategoryRoot);

            List <CategoryInfo> list = CategoryController.ListByPortals(PortalId);


            for (int i = 0; i < list.Count; i++)
            {
                list[i].Name = Utils.FormatLevelName(list[i].Name, list[i].Level, "..");
            }

            List <RecursiveCategoryData> listRecursiveData = new List <RecursiveCategoryData>();

            listRecursiveData = LocalUtils.ConvertCategoryListToRecursiveList(list);


            RecursiveCategoryItem orderedItems = RecursiveHelper.ConvertListToRecursiveItem(listRecursiveData);

            ArrayList             listCategory = orderedItems.GetListOrdered();
            RecursiveCategoryItem a            = new RecursiveCategoryItem();

            a.Id   = -1;
            a.Name = Localization.GetString("SelectCategory.Text", this.LocalResourceFile);
            listCategory.Add(a);
            ddlCategory.DataSource = listCategory;
            ddlCategory.DataBind();
            ddlCategory.SelectedValue = "-1";
        }
        protected void lbtnUpdateContinue_Click(object sender, EventArgs e)
        {
            if (Page.IsValid == false)
            {
                return;
            }
            lblInvalidCategory.Visible = false;
            string category = RecursiveHelper.GetAspNetTreeCheckList(tvCategory);

            if (category == "" || category == null || category.Split(',').Length > ArticlePortalSettings.General.Portal_ArticleCategorySelectCount)
            {
                lblInvalidCategory.Visible = true;
                return;
            }

            UpdateArticle();
            txtTitle.Text = "";
            txtTitle.Focus();
        }
        protected void lbtnUpdateReturn_Click(object sender, EventArgs e)
        {
            if (Page.IsValid == false)
            {
                return;
            }
            lblInvalidCategory.Visible = false;
            string category = RecursiveHelper.GetAspNetTreeCheckList(tvCategory);

            if (category == "" || category == null || category.Split(',').Length > ArticlePortalSettings.General.Portal_ArticleCategorySelectCount)
            {
                lblInvalidCategory.Visible = true;
                return;
            }

            UpdateArticle();
            BindArticleList();
            SetButtonStatus("Return");
        }
        private void UpdateArticle()
        {
            ArticleInfo objArticle = new ArticleInfo();

            objArticle.Id       = ArticleId;
            objArticle.PortalId = PortalId;

            //Normal
            objArticle.Title  = txtTitle.Text;
            objArticle.Author = txtAuthor.Text;
            objArticle.Source = txtSource.Text;
            objArticle.Quote  = chkQuote.Checked;
            objArticle.Draft  = chkDraft.Checked;

            objArticle.LinkUrl  = ctlLinkUrl.Url;
            objArticle.PinOrder = Convert.ToInt32(txtPinOrder.Text);
            //other
            if (ArticlePortalSettings.General.Portal_ArticleRequireApproval == true)
            {
                objArticle.Authed = chkAuthed.Checked;
            }
            else
            {
                objArticle.Authed = true;
            }
            objArticle.Featured = chkFeatured.Checked;
            objArticle.Active   = chkActive.Checked;

            objArticle.Thumbnail        = "";
            objArticle.Image            = UserInfo.IsInRole(PortalSettings.AdministratorRoleName)?ctlImage.Url : ctlUserImage.Url;
            objArticle.ImageDescription = txtImageDescription.Text;


            if (objArticle.Image.StartsWith("FileID="))
            {
                FileController fc = new FileController();
                DotNetNuke.Services.FileSystem.FileInfo      fi        = new DotNetNuke.Services.FileSystem.FileInfo();
                DotNetNuke.Entities.Portals.PortalController ctlPortal = new DotNetNuke.Entities.Portals.PortalController();
                DotNetNuke.Entities.Portals.PortalInfo       pi        = ctlPortal.GetPortal(PortalId);

                fi = GetFileInfoById(objArticle.Image);
                if (fi != null && System.IO.File.Exists(fi.PhysicalPath))
                {
                    objArticle.Thumbnail = DotNetNuke.Common.Globals.ApplicationPath + "/" + pi.HomeDirectory + "/" + fi.Folder + fi.FileName;
                    System.IO.FileInfo physicalFile = new System.IO.FileInfo(fi.PhysicalPath);

                    if (!fi.FileName.ToLower().StartsWith("thumb_"))                                                 //文件没有以"thumb_"开头,则先查找是否存在以thumb_ 开头的同名图片
                    {
                        if (System.IO.File.Exists(physicalFile.DirectoryName + "\\" + "thumb_" + physicalFile.Name)) //存在该文件,则自动指向
                        {
                            objArticle.Thumbnail = DotNetNuke.Common.Globals.ApplicationPath + "/" + pi.HomeDirectory + "/" + fi.Folder + "thumb_" + fi.FileName;
                        }
                        else//不存在,则生成该文件,然后指向
                        {
                            if (ArticlePortalSettings.General.Portal_ArticleGenerateThumb)
                            {
                                Utils.ResizeImage(fi.PhysicalPath, ArticlePortalSettings.General.Portal_ArticleThumbnailSize, physicalFile.DirectoryName + "\\" + "thumb_" + physicalFile.Name);
                                objArticle.Thumbnail = DotNetNuke.Common.Globals.ApplicationPath + "/" + pi.HomeDirectory + "/" + fi.Folder + "thumb_" + fi.FileName;
                            }
                        }
                    }
                }
            }
            //Add Categories
            objArticle.Categories = RecursiveHelper.GetAspNetTreeCheckList(tvCategory);

            //Add Tags
            objArticle.Tags = "";
            TagInfo    objTag  = new TagInfo();
            List <int> tagList = new List <int>();

            if (txtTag1.Text.Trim() != "")
            {
                objTag = TagController.GetByTag(txtTag1.Text.Trim());
                if (objTag == null)
                {
                    objTag          = new TagInfo();
                    objTag.PortalId = PortalId;
                    objTag.UserId   = UserId;
                    objTag.Tag      = txtTag1.Text.Trim();
                    objTag.Id       = TagController.Add(objTag);
                }
                tagList.Add(objTag.Id);
            }
            if (txtTag2.Text.Trim() != "" && ArticlePortalSettings.General.Portal_ArticleTagSelectCount > 1)
            {
                objTag = TagController.GetByTag(txtTag2.Text.Trim());
                if (objTag == null)
                {
                    objTag          = new TagInfo();
                    objTag.PortalId = PortalId;
                    objTag.UserId   = UserId;
                    objTag.Tag      = txtTag2.Text.Trim();
                    objTag.Id       = TagController.Add(objTag);
                }
                tagList.Add(objTag.Id);
            }
            if (txtTag3.Text.Trim() != "" && ArticlePortalSettings.General.Portal_ArticleTagSelectCount > 2)
            {
                objTag = TagController.GetByTag(txtTag3.Text.Trim());
                if (objTag == null)
                {
                    objTag          = new TagInfo();
                    objTag.PortalId = PortalId;
                    objTag.UserId   = UserId;
                    objTag.Tag      = txtTag3.Text.Trim();
                    objTag.Id       = TagController.Add(objTag);
                }
                tagList.Add(objTag.Id);
            }
            if (txtTag4.Text.Trim() != "" && ArticlePortalSettings.General.Portal_ArticleTagSelectCount > 3)
            {
                objTag = TagController.GetByTag(txtTag4.Text.Trim());
                if (objTag == null)
                {
                    objTag          = new TagInfo();
                    objTag.PortalId = PortalId;
                    objTag.UserId   = UserId;
                    objTag.Tag      = txtTag4.Text.Trim();
                    objTag.Id       = TagController.Add(objTag);
                }
                tagList.Add(objTag.Id);
            }
            if (txtTag5.Text.Trim() != "" && ArticlePortalSettings.General.Portal_ArticleTagSelectCount > 4)
            {
                objTag = TagController.GetByTag(txtTag5.Text.Trim());
                if (objTag == null)
                {
                    objTag          = new TagInfo();
                    objTag.PortalId = PortalId;
                    objTag.UserId   = UserId;
                    objTag.Tag      = txtTag5.Text.Trim();
                    objTag.Id       = TagController.Add(objTag);
                }
                tagList.Add(objTag.Id);
            }
            if (txtTag6.Text.Trim() != "" && ArticlePortalSettings.General.Portal_ArticleTagSelectCount > 5)
            {
                objTag = TagController.GetByTag(txtTag6.Text.Trim());
                if (objTag == null)
                {
                    objTag          = new TagInfo();
                    objTag.PortalId = PortalId;
                    objTag.UserId   = UserId;
                    objTag.Tag      = txtTag6.Text.Trim();
                    objTag.Id       = TagController.Add(objTag);
                }
                tagList.Add(objTag.Id);
            }
            if (txtTag7.Text.Trim() != "" && ArticlePortalSettings.General.Portal_ArticleTagSelectCount > 6)
            {
                objTag = TagController.GetByTag(txtTag7.Text.Trim());
                if (objTag == null)
                {
                    objTag          = new TagInfo();
                    objTag.PortalId = PortalId;
                    objTag.UserId   = UserId;
                    objTag.Tag      = txtTag7.Text.Trim();
                    objTag.Id       = TagController.Add(objTag);
                }
                tagList.Add(objTag.Id);
            }
            if (txtTag8.Text.Trim() != "" && ArticlePortalSettings.General.Portal_ArticleTagSelectCount > 7)
            {
                objTag = TagController.GetByTag(txtTag8.Text.Trim());
                if (objTag == null)
                {
                    objTag          = new TagInfo();
                    objTag.PortalId = PortalId;
                    objTag.UserId   = UserId;
                    objTag.Tag      = txtTag8.Text.Trim();
                    objTag.Id       = TagController.Add(objTag);
                }
                tagList.Add(objTag.Id);
            }
            if (txtTag9.Text.Trim() != "" && ArticlePortalSettings.General.Portal_ArticleTagSelectCount > 8)
            {
                objTag = TagController.GetByTag(txtTag9.Text.Trim());
                if (objTag == null)
                {
                    objTag          = new TagInfo();
                    objTag.PortalId = PortalId;
                    objTag.UserId   = UserId;
                    objTag.Tag      = txtTag9.Text.Trim();
                    objTag.Id       = TagController.Add(objTag);
                }
                tagList.Add(objTag.Id);
            }
            if (txtTag10.Text.Trim() != "" && ArticlePortalSettings.General.Portal_ArticleTagSelectCount > 9)
            {
                objTag = TagController.GetByTag(txtTag10.Text.Trim());
                if (objTag == null)
                {
                    objTag          = new TagInfo();
                    objTag.PortalId = PortalId;
                    objTag.UserId   = UserId;
                    objTag.Tag      = txtTag10.Text.Trim();
                    objTag.Id       = TagController.Add(objTag);
                }
                tagList.Add(objTag.Id);
            }
            var newTaglist = (from p in tagList select p).Distinct();//remove the  repeated tag item.

            foreach (int item in newTaglist)
            {
                objArticle.Tags += item.ToString() + ",";
            }
            objArticle.Tags = Utils.RemoveSeperator(objArticle.Tags, ",");
            //Tags end

            //date
            if ((txtPublishDate.Text != null) && (txtPublishDate.Text != ""))
            {
                objArticle.PublishDate = Convert.ToDateTime(txtPublishDate.Text);
            }
            else
            {
                objArticle.PublishDate = DateTime.Now;
            }
            if (txtExpireDate.Text != "")
            {
                objArticle.ExpireDate = Convert.ToDateTime(txtExpireDate.Text);
            }

            objArticle.ViewRoles = Utils.GetCheckedItems(cblViewRoles, PortalSettings.AdministratorRoleId);
            //Rating
            objArticle.AllowRating = chkAllowRating.Checked;
            objArticle.RatingRoles = Utils.GetCheckedItems(cblRatingRoles, PortalSettings.AdministratorRoleId);

            //Recommend
            objArticle.AllowRecommend = chkAllowRecommend.Checked;
            objArticle.RecommendRoles = Utils.GetCheckedItems(cblRecommendRoles, PortalSettings.AdministratorRoleId);


            //Comment
            objArticle.AllowComment    = chkAllowComment.Checked;
            objArticle.CommentRoles    = Utils.GetCheckedItems(cblCommentRoles, PortalSettings.AdministratorRoleId);
            objArticle.AutoAuthComment = chkAutoAuthComment.Checked;
            //Download roles
            objArticle.DownloadRoles = Utils.GetCheckedItems(cblDownloadRoles, PortalSettings.AdministratorRoleId);

            objArticle.Summary = LocalUtils.RemoveAllHtmlTags(txtSummary.Text);
            objArticle.Article = txtDetail.Text;
            objArticle.UserId  = UserId;
            //Now processing attachment
            int newArticleId = -1;

            if (ArticleId == -1)
            {
                newArticleId = ArticleController.Add(objArticle);
            }
            else
            {
                ArticleController.Update(objArticle);
                newArticleId = ArticleId;
                AttachmentController.DeleteByArticle(ArticleId); //delete attachment first.
            }
            AttachmentInfo ai = new AttachmentInfo();

            foreach (AttachmentInfo item in AttachmentList)
            {
                ai.ArticleId = newArticleId;
                ai.FilePath  = item.FilePath;
                AttachmentController.Add(ai);
            }
            //Reset all
            ArticleId               = -1;
            AttachmentList          = new List <AttachmentInfo>();
            gvAttachment.DataSource = AttachmentList;
            gvAttachment.DataBind();
        }
        private void BindArticle(int articleId)
        {
            lblInvalidCategory.Visible = false;
            ArticleInfo objArticle = ArticleController.Get(articleId);

            if (objArticle == null)
            {
                return;
            }


            txtTitle.Text    = objArticle.Title;
            txtAuthor.Text   = objArticle.Author;
            txtSource.Text   = objArticle.Source;
            chkQuote.Checked = objArticle.Quote;
            txtPinOrder.Text = Convert.ToString(objArticle.PinOrder);
            chkDraft.Checked = objArticle.Draft;

            ctlLinkUrl.Url      = objArticle.LinkUrl;
            chkFeatured.Checked = objArticle.Featured;
            chkAuthed.Checked   = objArticle.Authed;
            chkActive.Checked   = objArticle.Active;

            //Image

            if (UserInfo.IsInRole(PortalSettings.AdministratorRoleName))
            {
                ctlImage.Url = objArticle.Image;
            }
            else
            {
                ctlUserImage.Url = objArticle.Image;
            }
            txtImageDescription.Text = objArticle.ImageDescription;
            RecursiveHelper.FillAspNetTreeCheckBox(ref tvCategory, objArticle.Categories, true);

            List <ArticleToTagInfo> tags = (from t in ArticleToTagController.ListByArticle(articleId) select t).ToList();

            txtTag1.Text  = tags.Count > 0 ? tags[0].Tag : "";
            txtTag2.Text  = tags.Count > 1 ? tags[1].Tag : "";
            txtTag3.Text  = tags.Count > 2 ? tags[2].Tag : "";
            txtTag4.Text  = tags.Count > 3 ? tags[3].Tag : "";
            txtTag5.Text  = tags.Count > 4 ? tags[4].Tag : "";
            txtTag6.Text  = tags.Count > 5 ? tags[5].Tag : "";
            txtTag7.Text  = tags.Count > 6 ? tags[6].Tag : "";
            txtTag8.Text  = tags.Count > 7 ? tags[7].Tag : "";
            txtTag9.Text  = tags.Count > 8 ? tags[8].Tag : "";
            txtTag10.Text = tags.Count > 9 ? tags[9].Tag : "";

            //Date
            if (!Null.IsNull(objArticle.PublishDate))
            {
                txtPublishDate.Text = objArticle.PublishDate.ToShortDateString();
            }
            if (!Null.IsNull(objArticle.ExpireDate))
            {
                txtExpireDate.Text = objArticle.ExpireDate.ToShortDateString();
            }

            cblViewRoles = Utils.FillRolesCheckBox(cblViewRoles, objArticle.ViewRoles, PortalSettings.AdministratorRoleId, PortalId);

            //rating
            chkAllowRating.Checked = objArticle.AllowRating;
            cblRatingRoles         = Utils.FillRolesCheckBox(cblRatingRoles, objArticle.RatingRoles, PortalSettings.AdministratorRoleId, PortalId);

            //Comment value
            chkAllowComment.Checked    = objArticle.AllowComment;
            chkAutoAuthComment.Checked = objArticle.AutoAuthComment;
            cblCommentRoles            = Utils.FillRolesCheckBox(cblCommentRoles, objArticle.CommentRoles, PortalSettings.AdministratorRoleId, PortalId);

            //
            chkAllowRecommend.Checked = objArticle.AllowRecommend;
            cblRecommendRoles         = Utils.FillRolesCheckBox(cblRecommendRoles, objArticle.RecommendRoles, PortalSettings.AdministratorRoleId, PortalId);

            cblDownloadRoles = Utils.FillRolesCheckBox(cblDownloadRoles, objArticle.DownloadRoles, PortalSettings.AdministratorRoleId, PortalId);



            txtSummary.Text = objArticle.Summary;
            txtDetail.Text  = Server.HtmlDecode(objArticle.Article);

            AttachmentList = new List <AttachmentInfo>();
            List <AttachmentInfo> aiList = AttachmentController.ListByArticle(articleId);

            for (int i = 0; i < aiList.Count; i++)
            {
                AttachmentInfo ai = new AttachmentInfo();
                ai.Id        = i;
                ai.ArticleId = articleId;
                ai.FilePath  = aiList[i].FilePath;
                AttachmentList.Add(ai);
            }

            gvAttachment.DataSource = AttachmentList;
            gvAttachment.DataBind();
        }