示例#1
0
        /// <summary>
        /// 删除文档
        /// </summary>
        public string Delete_POST()
        {
            int        id      = int.Parse(base.Request["archive.id"]);
            ArchiveDto archive = ServiceCall.Instance.ArchiveService.GetArchiveById(this.SiteId, id);

            if (!ArchiveUtility.CanModifyArchive(archive.Author))
            {
                return(base.ReturnError("您无权删除此文档!"));
            }

            try
            {
                ServiceCall.Instance.ArchiveService.DeleteArchive(this.SiteId, archive.Id);
            }
            catch (Exception exc)
            {
                return(base.ReturnError(exc.Message));
            }

            //删除

            //触发删除事件
            //WatchService.PrevDeleteArchive(archive);
            //WatchService.UpdateArchive(archive);

            return(base.ReturnSuccess());
        }
示例#2
0
        public void Update_POST()
        {
            var archive = ServiceCall.Instance.ArchiveService
                          .GetArchiveById(SiteId, int.Parse(Request.Form("Id")));

            //判断是否有权修改
            if (!ArchiveUtility.CanModifyArchive(SiteId, archive.PublisherId))
            {
                RenderError("您无权修改此文档!");
                return;
            }

            var alias = string.IsNullOrEmpty(Request.Form("Alias"))
                ? string.Empty
                : HttpUtils.UrlEncode(Request.Form("Alias"));

            if (alias != string.Empty && archive.Alias != alias)
            {
                if (!ServiceCall.Instance.ArchiveService
                    .CheckArchiveAliasAvailable(SiteId, archive.Id, alias))
                {
                    RenderError("别名已经存在!");
                    return;
                }
            }

            archive = GetFormCopyedArchive(SiteId, Request, archive, alias);
            var r = ServiceCall.Instance.ArchiveService.SaveArchive(
                SiteId, archive.Category.ID, archive);

            RenderJson(r);
        }
示例#3
0
        public void Forword_GET()
        {
            int        id         = int.Parse(base.Request["archive.id"]);
            ArchiveDto archive    = ServiceCall.Instance.ArchiveService.GetArchiveById(this.SiteId, id);
            string     fullDomain = this.CurrentSite.FullDomain;

            if (fullDomain.IndexOf("#", StringComparison.Ordinal) != -1)
            {
                fullDomain = fullDomain.Replace("#", WebCtx.Current.Host);
            }
            string url = Request.Url.Scheme + ":" + fullDomain + archive.Url + ".html";


            if (String.IsNullOrEmpty(archive.Outline))
            {
                archive.Outline = ArchiveUtility.GetOutline(archive.Content, 100);
            }

            object data = new
            {
                title           = archive.Title,
                outline         = archive.Outline,
                url             = url,
                forword_content = String.Format("<a href=\"{0}\" target=\"_blank\"><strong>{1}</strong><br />{2}</a>",
                                                url,
                                                archive.Title,
                                                archive.Outline),
                link_content = ""
            };

            base.RenderTemplate(ResourceMap.GetPageContent(ManagementPage.Archive_Forword), data);
        }
示例#4
0
        public void Forword()
        {
            var id         = int.Parse(Request.Query("archive.id"));
            var archive    = ServiceCall.Instance.ArchiveService.GetArchiveById(SiteId, id);
            var fullDomain = CurrentSite.FullDomain;

            if (fullDomain.IndexOf("#", StringComparison.Ordinal) != -1)
            {
                fullDomain = fullDomain.Replace("#", WebCtx.Current.Host);
            }
            var url = Request.GetProto() + ":" + fullDomain + archive.Path + ".html";


            if (string.IsNullOrEmpty(archive.Outline))
            {
                archive.Outline = ArchiveUtility.GetOutline(archive.Content, 100);
            }

            object data = new
            {
                title           = archive.Title,
                outline         = archive.Outline,
                url             = url,
                forword_content = string.Format("<a href=\"{0}\" target=\"_blank\"><strong>{1}</strong><br />{2}</a>",
                                                url,
                                                archive.Title,
                                                archive.Outline),
                link_content = ""
            };

            RenderTemplate(ResourceMap.GetPageContent(ManagementPage.Archive_Forword), data);
        }
示例#5
0
        private async Task <bool> ExtractToolAsync(Tool tool, bool reloadTool)
        {
            if (!reloadTool && File.Exists(tool.ExecutablePath))
            {
                return(false);
            }

            if (Directory.Exists(tool.DirectoryPath))
            {
                Directory.Delete(tool.DirectoryPath, true);
            }

            try
            {
                await ArchiveUtility.ExtractAsync(
                    tool.Settings.ZippedToolFormat,
                    tool.ZipPath,
                    tool.DirectoryPath,
                    tool.Settings.GetEntryPath).ConfigureAwait(false);
            }
            catch (Exception ex)
            {
                throw new TorSharpException(
                          $"Failed to extract tool '{tool.Settings.Name}'. Verify that the .zip at path '{tool.ZipPath}' " +
                          $"is valid.",
                          ex);
            }

            return(true);
        }
示例#6
0
        /// <summary>
        /// 删除文档
        /// </summary>
        public string Delete_POST()
        {
            var id      = int.Parse(Request.Form("archive.id"));
            var archive = ServiceCall.Instance.ArchiveService.GetArchiveById(SiteId, id);

            if (!ArchiveUtility.CanModifyArchive(SiteId, archive.PublisherId))
            {
                return(ReturnError("您无权删除此文档!"));
            }

            try
            {
                ServiceCall.Instance.ArchiveService.DeleteArchive(SiteId, archive.Id);
            }
            catch (Exception exc)
            {
                return(ReturnError(exc.Message));
            }

            //删除

            //触发删除事件
            //WatchService.PrevDeleteArchive(archive);
            //WatchService.UpdateArchive(archive);

            return(ReturnSuccess());
        }
示例#7
0
        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            //return;
            if (DateTime.Now > new DateTime(2012, 11, 1))
            {
                Response.Redirect("/images@#/", true);
            }

            hotTopics       = HttpRuntime.Cache["hottopics"] as string;
            recommendTopics = HttpRuntime.Cache["recommendtopics"] as string;
            companyInfo     = HttpRuntime.Cache["companyinfo"] as string;

            DataTable     table;
            StringBuilder sb;

            if (hotTopics == null)
            {
                sb    = new StringBuilder();
                table = bll.GetArchivesByViewCount(ModuleType.TextNews, 6);
                foreach (DataRow dr in table.Rows)
                {
                    sb.Append("<dt><a title=\"").Append(dr["title"].ToString()).Append("\" href=\"/s_").Append(dr["id"].ToString()).Append("/\">")
                    .Append(dr["title"].ToString().Length > 15 ? dr["title"].ToString().Substring(0, 13) + "..." : dr["title"].ToString()).Append("</a></dt>");
                }
                hotTopics = sb.ToString();

                HttpRuntime.Cache.Insert("hottopics", hotTopics, null, DateTime.Now.AddHours(1), TimeSpan.Zero);
            }

            if (recommendTopics == null)
            {
                sb    = new StringBuilder();
                table = bll.GetSpecialArchives(ModuleType.TextNews, 6);
                foreach (DataRow dr in table.Rows)
                {
                    sb.Append("<h4><a title=\"").Append(dr["title"].ToString()).Append("\" href=\"s-").Append(dr["id"].ToString()).Append("/\" target=\"_blank\"><img src=\"")
                    .Append(ArchiveUtility.GetFirstPicUri(dr["content"].ToString(), false) ?? "/images/nopic.gif").Append("\" width=\"70\" height=\"70\" alt=\"").Append(dr["title"].ToString()).Append("\"/></a></h4>");
                }
                recommendTopics = sb.ToString();

                HttpRuntime.Cache.Insert("recommendtopics", recommendTopics, null, DateTime.Now.AddHours(1), TimeSpan.Zero);
            }

            if (companyInfo == null)
            {
                Archive a = bll.Get("about");
                if (a != null)
                {
                    Regex reg = new Regex("<[^>]+>");
                    companyInfo = reg.Replace(a.Content, String.Empty);
                    if (companyInfo.Length > 130)
                    {
                        companyInfo = companyInfo.Remove(130);
                    }
                    companyInfo += "...&nbsp;【<a href=\"/home/about/\" style=\"color:green\">详细</a>】";
                }
                // HttpRuntime.Cache.Insert("companyInfo", recommendTopics, null, DateTime.Now.AddHours(1), TimeSpan.Zero);
            }
        }
示例#8
0
        /// <summary>
        /// 文档发布时候发生
        /// </summary>
        /// <param name="archive"></param>
        static void WatchService_OnArchivePublished(Archive archive)
        {
            return;

            if (archive == null)
            {
                return;
            }

            //更新标签链接
            ArchiveUtility.UpdateArchiveTagLinks("/tags/{0}", archive, true);
            Category category = new CategoryBLL().Get(a => a.ID == archive.Cid);

            PageGenerator.Generate(PageGeneratorObject.ArchivePage, category, archive);
        }
示例#9
0
        /// <summary>
        /// Read the <see cref="TorSharpSettings.ZippedToolsDirectory"/> and find the latest tool matching the criteria
        /// in the provided <paramref name="toolSettings"/>. If none is found return null.
        /// </summary>
        /// /// <param name="settings">The settings for TorSharp.</param>
        /// <param name="toolSettings">The settings for the tool.</param>
        /// <returns>The tool, or null if none was found.</returns>
        public static Tool GetLatestToolOrNull(
            TorSharpSettings settings,
            ToolSettings toolSettings)
        {
            if (!Directory.Exists(settings.ZippedToolsDirectory))
            {
                return(null);
            }

            var fileExtension = ArchiveUtility.GetFileExtension(toolSettings.ZippedToolFormat);
            var pattern       = $"{toolSettings.Prefix}*{fileExtension}";

            string[] zipPaths = Directory
                                .EnumerateFiles(settings.ZippedToolsDirectory, pattern, SearchOption.TopDirectoryOnly)
                                .ToArray();

            var versions = new List <Tool>();

            foreach (string zipPath in zipPaths)
            {
                string fileName         = Path.GetFileName(zipPath);
                string withoutExtension = fileName.Substring(0, fileName.Length - fileExtension.Length);
                string directoryPath    = Path.Combine(settings.ExtractedToolsDirectory, withoutExtension);
                string version          = withoutExtension.Substring(toolSettings.Prefix.Length);
                if (!Version.TryParse(version, out var parsedVersion))
                {
                    continue;
                }

                versions.Add(new Tool
                {
                    Settings          = toolSettings,
                    ZipPath           = zipPath,
                    DirectoryPath     = directoryPath,
                    Version           = parsedVersion,
                    ExecutablePath    = Path.Combine(directoryPath, toolSettings.ExecutablePath),
                    WorkingDirectory  = Path.Combine(directoryPath, toolSettings.WorkingDirectory),
                    ConfigurationPath = Path.Combine(directoryPath, toolSettings.ConfigurationPath),
                });
            }

            return(versions
                   .OrderByDescending(t => t.Version)
                   .FirstOrDefault());
        }
示例#10
0
        public void Update_POST()
        {
            var        form    = HttpContext.Current.Request.Form;
            ArchiveDto archive = ServiceCall.Instance.ArchiveService
                                 .GetArchiveById(this.SiteId, int.Parse(form["Id"]));

            //判断是否有权修改
            if (!ArchiveUtility.CanModifyArchive(archive.Author))
            {
                base.RenderError("您无权修改此文档!");
                return;
            }

            string alias = String.IsNullOrEmpty(form["Alias"]) ?
                           String.Empty :
                           HttpContext.Current.Server.UrlEncode(form["Alias"]);

            if (alias != String.Empty && archive.Alias != alias)
            {
                if (!ServiceCall.Instance.ArchiveService
                    .CheckArchiveAliasAvailable(this.SiteId, archive.Id, alias))
                {
                    base.RenderError("别名已经存在!");
                    return;
                }
            }

            archive = GetFormCopyedArchive(this.SiteId, form, archive, alias);

            int resultId = ServiceCall.Instance.ArchiveService.SaveArchive(this.SiteId, archive);


            /*
             * try
             * {
             *  //调用监视操作
             *  //WatchService.UpdateArchive(CmsLogic.Archive.GetArchiveByID(archiveID));
             * }
             * catch
             * {
             * }
             */

            base.RenderSuccess("保存成功!");
        }
示例#11
0
文件: ArchiveC.cs 项目: JangoCity/cms
        public void Update_POST()
        {
            var        form    = HttpContext.Current.Request.Form;
            ArchiveDto archive = ServiceCall.Instance.ArchiveService
                                 .GetArchiveById(this.SiteId, int.Parse(form["Id"]));

            //判断是否有权修改
            if (!ArchiveUtility.CanModifyArchive(this.SiteId, archive.PublisherId))
            {
                base.RenderError("您无权修改此文档!");
                return;
            }

            string alias = String.IsNullOrEmpty(form["Alias"]) ?
                           String.Empty :
                           HttpContext.Current.Server.UrlEncode(form["Alias"]);

            if (alias != String.Empty && archive.Alias != alias)
            {
                if (!ServiceCall.Instance.ArchiveService
                    .CheckArchiveAliasAvailable(this.SiteId, archive.Id, alias))
                {
                    base.RenderError("别名已经存在!");
                    return;
                }
            }

            archive = GetFormCopyedArchive(this.SiteId, form, archive, alias);

            archive = GetFormCopyedArchive(this.SiteId, form, archive, alias);
            Result r = ServiceCall.Instance.ArchiveService.SaveArchive(
                this.SiteId, archive.Category.ID, archive);

            if (r.ErrCode > 0)
            {
                base.RenderError(r.ErrMsg);
            }
            else
            {
                //返回文章ID
                base.RenderSuccess("保存成功");
            }
        }
示例#12
0
        static void WatchService_OnClearingCache()
        {
            //重新注册模板
            ApplicationManager.Reload();

            //清除文档辅助方法缓存
            ArchiveUtility.ClearCache();



            //初始化数据
            //PageGenerator.Generate(PageGeneratorObject.InitData);

            //退出时候更新首页
            // PageGenerator.Generate(PageGeneratorObject.Default);

            //更新about页
            // PageGenerator.Generate(PageGeneratorObject.About);
        }
示例#13
0
        /// <summary>
        /// 文档删除之前发生
        /// </summary>
        /// <param name="archive"></param>
        static void WatchService_OnPrevArchiveUpdate(Archive archive)
        {
            //先删除文件,避免修改分类后无法识别生成文件位置

            string basePath = AppDomain.CurrentDomain.BaseDirectory + (UseDefaultHtmlPath
                    ?ArchiveUtility.GetCategoryDirectoryPath(archive.Cid)
                    :HtmlPath);

            FileInfo[] files = new FileInfo[2] {
                new FileInfo(String.Format(htmlPathFormat, basePath, archive.ID)),
                new FileInfo(String.Format(htmlPathFormat, basePath, archive.Alias))
            };
            foreach (FileInfo file in files)
            {
                if (file.Exists)
                {
                    file.Delete();
                }
            }
        }
示例#14
0
        /// <summary>
        /// 文档删除之后发生
        /// </summary>
        /// <param name="archive"></param>
        static void WatchService_OnArchiveDeleted(Archive archive)
        {
            if (archive != null)
            {
                //先删除文件,避免修改分类后无法识别生成文件位置

                string basePath = AppDomain.CurrentDomain.BaseDirectory + (UseDefaultHtmlPath
                        ? ArchiveUtility.GetCategoryDirectoryPath(archive.Cid)
                        : HtmlPath);

                string fileID = String.IsNullOrEmpty(archive.Alias) ? archive.ID : archive.Alias;

                FileInfo file = new FileInfo(String.Format(htmlPathFormat, basePath, fileID));

                if (file.Exists)
                {
                    file.Delete();
                }
            }
        }
示例#15
0
        private async Task DownloadFileAsync(ToolUpdate update)
        {
            if (update.Status != ToolUpdateStatus.NoUpdateAvailable || _settings.ReloadTools)
            {
                Directory.CreateDirectory(Path.GetDirectoryName(update.DestinationPath));

                try
                {
                    await _simpleHttpClient.DownloadToFileAsync(
                        update.LatestDownload.Url,
                        update.DestinationPath,
                        _progress).ConfigureAwait(false);

                    try
                    {
                        await ArchiveUtility.TestAsync(
                            update.LatestDownload.Format,
                            update.DestinationPath).ConfigureAwait(false);
                    }
                    catch (Exception ex)
                    {
                        throw new TorSharpException(
                                  $"The tool downloaded from '{update.LatestDownload.Url.AbsoluteUri}' could not be read as a " +
                                  $"{ArchiveUtility.GetFileExtension(update.LatestDownload.Format)} file.", ex);
                    }
                }
                catch
                {
                    try
                    {
                        File.Delete(update.DestinationPath);
                    }
                    catch
                    {
                        // Best effort.
                    }

                    throw;
                }
            }
        }
示例#16
0
        private async Task <ToolUpdate> CheckForUpdateAsync(
            ToolSettings toolSettings,
            IFileFetcher fetcher,
            bool useExistingTools)
        {
            var latestLocal = ToolUtility.GetLatestToolOrNull(_settings, toolSettings);

            if (useExistingTools && latestLocal != null)
            {
                return(null);
            }

            EnableSecurityProtocols();

            var latestDownload = await fetcher.GetLatestAsync().ConfigureAwait(false);

            var fileExtension   = ArchiveUtility.GetFileExtension(latestDownload.Format);
            var fileName        = $"{toolSettings.Prefix}{latestDownload.Version}{fileExtension}";
            var destinationPath = Path.Combine(_settings.ZippedToolsDirectory, fileName);

            ToolUpdateStatus status;

            if (latestLocal == null)
            {
                status = ToolUpdateStatus.NoLocalVersion;
            }
            else if (!File.Exists(destinationPath))
            {
                status = ToolUpdateStatus.NewerVersionAvailable;
            }
            else
            {
                status = ToolUpdateStatus.NoUpdateAvailable;
            }

            return(new ToolUpdate(
                       status,
                       latestLocal?.Version,
                       destinationPath,
                       latestDownload));
        }
示例#17
0
        /// <summary>
        /// 文档显示页面
        /// </summary>
        /// <param name="id"></param>
        public void Show(string id)
        {
            Archive   archive;
            Member    member;
            Category  catalog;
            DataTable comments;
            string    user,          //发贴名称
                      replayContent; //评论列表


            StringBuilder sb = new StringBuilder();

            archive = bll.Get(id);
            if (archive == null || archive.IsSystem)
            {
                Render404(); return;
            }



            //增加评论

            new System.Threading.Thread(() =>
            {
                bll.AddViewCount(id, 1);
            }).Start();

            //获取分类
            catalog = cbll.Get(c => c.ID == archive.CatalogID);

            //获取作者昵称
            member = mbll.GetMember(archive.Author);
            user   = member == null ? "游客" : member.Nickname;

            //获取评论
            comments = cmbll.GetArchiveComments(archive.ID);
            string nickname, content;
            Match  match;

            for (int i = 0; i < comments.Rows.Count; i++)
            {
                content = comments.Rows[i]["content"].ToString();
                match   = Regex.Match(content, "\\(u:'(?<user>.+?)'\\)");

                if (match != null)
                {
                    nickname = match.Groups["user"].Value;
                    content  = Regex.Replace(content, "\\(u:'(.+?)'\\)", String.Empty);
                }
                else
                {
                    nickname = "游客";
                }

                sb.Append("<li><dl><!--<em><a href=\"#\">引用</a></em>--><span class=\"cDGray\">")
                .Append((i + 1).ToString()).Append("楼</span>&nbsp;<span class=\"cGray\">").Append(nickname)
                .Append("</span>&nbsp;于 <span class=\"cDGray\">")
                .Append(String.Format("{0:yyyy-MM-dd HH:mm:ss}", comments.Rows[i]["createDate"])).Append("</span> 说:</dl><dt><p>")
                .Append(content).Append("</p></dt></li>");
            }
            if (sb.Length == 0)
            {
                replayContent = "<li style=\"text-align:center\">暂无评论</li>";
            }
            else
            {
                replayContent = sb.ToString();
                sb.Remove(0, sb.Length);
            }


            string tagsLink = String.Empty;



            //如果关键词不为空
            if (!String.IsNullOrEmpty(archive.Tags))
            {
                sb.Remove(0, sb.Length);
                Array.ForEach(archive.Tags.Split(','), str =>
                {
                    sb.Append("<strong><a href=\"${domain}/tag/")
                    .Append(Server.UrlEncode(str)).Append("/\" title=\"")
                    .Append(str).Append("\">").Append(str).Append("</a></strong>");
                });

                tagsLink = sb.ToString();
            }


            //呈现页面
            PageUtility.Render("3d9e2da210eea3fb",
                               new
            {
                sitemap      = @"<a href=""${domain}/archive${suffix}/list/${catalogTag}/"">${catalogName}</a>",
                catalogName  = catalog.Name,
                catalogTag   = catalog.Tag,
                archiveTitle = archive.Title,
                author       = archive.Author,
                content      = archive.Content,
                keywords     = archive.Tags,
                click        = ++archive.ViewCount,
                user         = user,
                replays      = comments.Rows.Count,
                outline      = ArchiveUtility.GetOutline(archive, 190),
                source       = String.IsNullOrEmpty(archive.Source) ? "${site.shortname}" : archive.Source,
                publishdate  = string.Format("{0:yyyy-MM-dd HH:mm:ss}", archive.CreateDate),
                tagsLink     = tagsLink,

                guestName     = String.Format("游客:{0}", Request.UserHostAddress),
                replayContent = replayContent,


                h_topics      = hotTopics,
                r_topics      = recommendTopics,
                h_companyinfo = companyInfo
            });
        }
示例#18
0
        public override string GetArchive(Category category, Archive archive, params object[] args)
        {
            // return base.GetArchive(category, archive, args);

            #region 属性

            /*
             * //验证密码
             * PropertyBLL pbll = new PropertyBLL();
             * var a = pbll.GetProperty(category.ModuleID, "pwd");
             * if (a != null)
             * {
             *  var json = archive.GetPropertiesJson();
             *  string key = json.GetValue("pwd");
             *  if (!String.IsNullOrEmpty(key))
             *  {
             *      string requireKey = HttpContext.Current.Request.QueryString["pwd"];
             *      if (requireKey != key)
             *      {
             *          HttpContext.Current.Response.Write("<div style='margin:0 auto;padding:30px 0'>请输入密码:<input type='text'/><input type='button' value='提交' onclick=\"location.replace(location.href+'?pwd='+this.previousSibling.value)\"/></div>");
             *          HttpContext.Current.Response.End();
             *      }
             *
             *  }
             * }*/
            #endregion

            //获取模板ID
            string    tplID = null;
            ModuleBLL mbll  = new ModuleBLL();
            Module    m     = mbll.GetModule(category.ModuleID);
            if (m != null)
            {
                TemplateBind tb = tbbll.GetArchiveTemplateBind(archive.ID, category.ID);
                if (tb != null)
                {
                    string id = this.GetTemplateID(tb.TplPath);
                    if (id != null)
                    {
                        tplID = "/" + id;
                    }
                }
            }

            //设置默认的模板
            if (String.IsNullOrEmpty(tplID))
            {
                tplID = this.FormatTemplatePath("archive");
            }

            string description = ArchiveUtility.GetOutline(archive, 200);



            //用于当前的模板共享数据
            Cms.Context.Items["archive.id"]   = archive.ID;
            Cms.Context.Items["category.tag"] = category.Tag;
            Cms.Context.Items["module.id"]    = category.ModuleID;


            //解析模板
            string html = MultLangPageUtility.Require(tplID,
                                                      new
            {
                id2          = string.IsNullOrEmpty(archive.Alias)?archive.ID:archive.Alias,
                id           = archive.ID,
                title        = archive.Title,
                categoryName = category.Name,
                categoryTag  = category.Tag,
                moduleId     = category.ModuleID,
                author       = archive.Author,
                content      = archive.Content,
                tags         = archive.Tags,
                keywords     = archive.Tags,
                description  = description.Replace("\"", String.Empty),
                outline      = description,
                count        = archive.ViewCount,
                source       = String.IsNullOrEmpty(archive.Source) ? "原创" : archive.Source,
                publishdate  = string.Format("{0:yyyy-MM-dd}", archive.CreateDate)
            });


            HttpRequest request = HttpContext.Current.Request;

            //如果包含查询,则加入标签
            if (!String.IsNullOrEmpty(request.Url.Query))
            {
                //将查询参数作为标签
                html = global::J6.Template.TemplateRegexUtility.Replace(html, a =>
                {
                    if (request[a.Groups[1].Value] != null)
                    {
                        return(request[a.Groups[1].Value]);
                    }
                    return(a.Value);
                });
            }

            //
            //TODO:模板被替换成空白
            //

            return(html);
        }
示例#19
0
        /// <summary>
        /// 文档页
        /// </summary>
        /// <param name="tag"></param>
        /// <param name="id"></param>
        /// <returns></returns>
        public void Archive(string lang, string allhtml)
        {
            string   id       = null;
            string   html     = String.Empty;
            Archive  archive  = null;
            Category category = null;


            Regex paramRegex = new Regex("/*([^/]+).html$", RegexOptions.IgnoreCase);

            if (paramRegex.IsMatch(allhtml))
            {
                id      = paramRegex.Match(allhtml).Groups[1].Value;
                archive = bll.Get(id);
            }



            if (archive == null)
            {
                base.RenderNotfound();
                return;
            }
            else
            {
                BuiltInArchiveFlags flag = ArchiveFlag.GetBuiltInFlags(archive.Flags);

                if ((flag & BuiltInArchiveFlags.Visible) != BuiltInArchiveFlags.Visible)
                //|| (flag & BuiltInArchiveFlags.IsSystem) == BuiltInArchiveFlags.IsSystem)
                {
                    base.RenderNotfound();
                    return;
                }


                category = cbll.Get(a => a.ID == archive.Cid);
                if (category == null)
                {
                    base.RenderNotfound();
                    return;
                }
                else
                {
                    string vpath = "/" + lang;

                    if ((flag & BuiltInArchiveFlags.AsPage) == BuiltInArchiveFlags.AsPage)
                    {
                        string pattern     = "^" + vpath + "/[0-9a-zA-Z]+/[\\.0-9A-Za-z_-]+\\.html$";
                        string pagePattern = "^" + vpath + "/[\\.0-9A-Za-z_-]+\\.html$";

                        if (!Regex.IsMatch(Request.Path, pagePattern))
                        {
                            Response.StatusCode       = 301;
                            Response.RedirectLocation = String.Format("/{0}/{1}.html",
                                                                      lang,
                                                                      String.IsNullOrEmpty(archive.Alias) ? archive.ID : archive.Alias
                                                                      );
                            Response.End();
                            return;
                        }
                    }
                    else
                    {
                        //校验栏目是否正确
                        string categoryPath = ArchiveUtility.GetCategoryUrlPath(category);
                        if (!allhtml.StartsWith(categoryPath + "/"))
                        {
                            base.RenderNotfound();
                            return;
                        }

                        //设置了别名,则跳转
                        if (!String.IsNullOrEmpty(archive.Alias) && String.Compare(id, archive.Alias, true) != 0) //设置了别名
                        {
                            Response.StatusCode       = 301;
                            Response.RedirectLocation = String.Format("/{0}/{1}/{2}.html",
                                                                      lang,
                                                                      category.Tag,
                                                                      String.IsNullOrEmpty(archive.Alias) ? archive.ID : archive.Alias
                                                                      );
                            Response.End();
                            return;
                        }
                    }


                    //增加浏览次数
                    ++archive.ViewCount;
                    new System.Threading.Thread(() =>
                    {
                        try
                        {
                            bll.AddViewCount(archive.ID, 1);
                        }
                        catch
                        {
                        }
                    }).Start();

                    //显示页面
                    html = cmsPage.GetArchive(category, archive, lang);

                    //再次处理模板
                    //html = PageUtility.Render(html, new { }, false);
                }
            }

            base.Render(html);
        }
示例#20
0
        /// <summary>
        /// 栏目页面
        /// </summary>
        /// <param name="tag"></param>
        /// <param name="page"></param>
        /// <returns></returns>
        public void Category(string lang, string allcate)
        {
            string tag  = null;
            int    page = 1;

            Regex paramRegex = new Regex("/*([^/]+)/(p(\\d+).html)*$", RegexOptions.IgnoreCase);

            if (paramRegex.IsMatch(allcate))
            {
                Match mc = paramRegex.Match(allcate);

                tag = mc.Groups[1].Value;

                //计算页吗:页码如:p3
                if (mc.Groups[3].Value != "")
                {
                    page = int.Parse(mc.Groups[3].Value);
                }
            }
            else
            {
                base.RenderNotfound();
                return;
            }

            string   html     = String.Empty;
            Category category = cbll.Get(a => String.Compare(tag, a.Tag, true) == 0);

            if (category == null)
            {
                base.RenderNotfound();
                return;
            }
            else
            {
                //获取路径
                string categoryPath = ArchiveUtility.GetCategoryUrlPath(category);

                if (!allcate.StartsWith(categoryPath + "/"))
                {
                    base.RenderNotfound();
                    return;
                }

                /*********************************
                *  @ 单页,跳到第一个特殊文档,
                *  @ 如果未设置则最新创建的文档,
                *  @ 如未添加文档则返回404
                *********************************/
                if (category.ModuleID == (int)SysModuleType.CustomPage)
                {
                    Archive a = bll.GetFirstSpecialArchive(category.ID);
                    if (a == null)
                    {
                        global::System.Data.DataTable dt = bll.GetArchives(category.ID, 1);
                        if (dt.Rows.Count == 1)
                        {
                            a = dt.Rows[0].ToEntity <Archive>();
                        }
                        else
                        {
                            base.RenderNotfound("栏目下应确保有推荐的文档存在!");
                            return;
                        }
                    }
                    Response.StatusCode = 302;

                    Response.RedirectLocation = String.Format("/{0}/{1}/{2}.html",
                                                              lang,
                                                              categoryPath,
                                                              String.IsNullOrEmpty(a.Alias) ? a.ID : a.Alias
                                                              );
                    Response.End();
                    return;
                }

                html = cmsPage.GetCategory(category, page, lang);
            }

            base.Render(html);
        }