public static bool IsCreatable(ChannelInfo channelInfo, IContentInfo contentInfo) { if (channelInfo == null || contentInfo == null) { return(false); } //引用链接,不需要生成内容页;引用内容,需要生成内容页; if (contentInfo.ReferenceId > 0 && ETranslateContentTypeUtils.GetEnumType(contentInfo.GetString(ContentAttribute.TranslateContentType)) != ETranslateContentType.ReferenceContent) { return(false); } return(channelInfo.Additional.IsContentCreatable && string.IsNullOrEmpty(contentInfo.LinkUrl) && contentInfo.IsChecked && contentInfo.SourceId != SourceManager.Preview && contentInfo.ChannelId > 0); }
/// <summary> /// 对GetContentUrlByID的优化 /// 通过传入参数contentInfoCurrent,避免对ContentInfo查询太多 /// </summary> private static string GetContentUrlById(SiteInfo siteInfo, IContentInfo contentInfoCurrent, bool isLocal) { if (contentInfoCurrent == null) { return(PageUtils.UnclickedUrl); } if (isLocal) { return(ApiRoutePreview.GetContentUrl(siteInfo.Id, contentInfoCurrent.ChannelId, contentInfoCurrent.Id)); } var sourceId = contentInfoCurrent.SourceId; var referenceId = contentInfoCurrent.ReferenceId; var linkUrl = contentInfoCurrent.GetString(ContentAttribute.LinkUrl); var channelId = contentInfoCurrent.ChannelId; if (referenceId > 0 && contentInfoCurrent.GetString(ContentAttribute.TranslateContentType) != ETranslateContentType.ReferenceContent.ToString()) { if (sourceId > 0 && (ChannelManager.IsExists(siteInfo.Id, sourceId) || ChannelManager.IsExists(sourceId))) { var targetChannelId = sourceId; var targetSiteId = StlChannelCache.GetSiteId(targetChannelId); var targetSiteInfo = SiteManager.GetSiteInfo(targetSiteId); var targetChannelInfo = ChannelManager.GetChannelInfo(targetSiteId, targetChannelId); var contentInfo = ContentManager.GetContentInfo(targetSiteInfo, targetChannelInfo, referenceId); if (contentInfo == null || contentInfo.ChannelId <= 0) { return(PageUtils.UnclickedUrl); } if (contentInfo.SiteId == targetSiteInfo.Id) { return(GetContentUrlById(targetSiteInfo, contentInfo, false)); } var siteInfoTmp = SiteManager.GetSiteInfo(contentInfo.SiteId); return(GetContentUrlById(siteInfoTmp, contentInfo, false)); } else { var tableName = ChannelManager.GetTableName(siteInfo, channelId); channelId = StlContentCache.GetChannelId(tableName, referenceId); linkUrl = StlContentCache.GetValue(tableName, referenceId, ContentAttribute.LinkUrl); if (ChannelManager.IsExists(siteInfo.Id, channelId)) { return(GetContentUrlById(siteInfo, channelId, referenceId, 0, 0, linkUrl, false)); } var targetSiteId = StlChannelCache.GetSiteId(channelId); var targetSiteInfo = SiteManager.GetSiteInfo(targetSiteId); return(GetContentUrlById(targetSiteInfo, channelId, referenceId, 0, 0, linkUrl, false)); } } if (!string.IsNullOrEmpty(linkUrl)) { return(ParseNavigationUrl(siteInfo, linkUrl, false)); } var contentUrl = PathUtility.ContentFilePathRules.Parse(siteInfo, channelId, contentInfoCurrent); return(GetSiteUrl(siteInfo, contentUrl, false)); }
private static string ParseContentPath(SiteInfo siteInfo, int channelId, IContentInfo contentInfo, string contentFilePathRule) { var filePath = contentFilePathRule.Trim(); var regex = "(?<element>{@[^}]+})"; var elements = RegexUtils.GetContents("element", regex, filePath); var addDate = contentInfo.AddDate; var contentId = contentInfo.Id; foreach (var element in elements) { var value = string.Empty; if (StringUtils.EqualsIgnoreCase(element, ChannelId)) { value = channelId.ToString(); } else if (StringUtils.EqualsIgnoreCase(element, ContentId)) { value = contentId.ToString(); } else if (StringUtils.EqualsIgnoreCase(element, Sequence)) { var tableName = ChannelManager.GetTableName(siteInfo, channelId); value = StlContentCache.GetSequence(tableName, channelId, contentId).ToString(); } else if (StringUtils.EqualsIgnoreCase(element, ParentRule))//继承父级设置 20151113 sessionliang { var nodeInfo = ChannelManager.GetChannelInfo(siteInfo.Id, channelId); var parentInfo = ChannelManager.GetChannelInfo(siteInfo.Id, nodeInfo.ParentId); if (parentInfo != null) { var parentRule = GetContentFilePathRule(siteInfo, parentInfo.Id); value = DirectoryUtils.GetDirectoryPath(ParseContentPath(siteInfo, parentInfo.Id, contentInfo, parentRule)).Replace("\\", "/"); } } else if (StringUtils.EqualsIgnoreCase(element, ChannelName)) { var nodeInfo = ChannelManager.GetChannelInfo(siteInfo.Id, channelId); if (nodeInfo != null) { value = nodeInfo.ChannelName; } } else if (StringUtils.EqualsIgnoreCase(element, LowerChannelName)) { var nodeInfo = ChannelManager.GetChannelInfo(siteInfo.Id, channelId); if (nodeInfo != null) { value = nodeInfo.ChannelName.ToLower(); } } else if (StringUtils.EqualsIgnoreCase(element, ChannelIndex)) { var nodeInfo = ChannelManager.GetChannelInfo(siteInfo.Id, channelId); if (nodeInfo != null) { value = nodeInfo.IndexName; } } else if (StringUtils.EqualsIgnoreCase(element, LowerChannelIndex)) { var nodeInfo = ChannelManager.GetChannelInfo(siteInfo.Id, channelId); if (nodeInfo != null) { value = nodeInfo.IndexName.ToLower(); } } else if (StringUtils.EqualsIgnoreCase(element, Year) || StringUtils.EqualsIgnoreCase(element, Month) || StringUtils.EqualsIgnoreCase(element, Day) || StringUtils.EqualsIgnoreCase(element, Hour) || StringUtils.EqualsIgnoreCase(element, Minute) || StringUtils.EqualsIgnoreCase(element, Second)) { if (StringUtils.EqualsIgnoreCase(element, Year)) { value = addDate.Year.ToString(); } else if (StringUtils.EqualsIgnoreCase(element, Month)) { value = addDate.Month.ToString("D2"); //value = addDate.ToString("MM"); } else if (StringUtils.EqualsIgnoreCase(element, Day)) { value = addDate.Day.ToString("D2"); //value = addDate.ToString("dd"); } else if (StringUtils.EqualsIgnoreCase(element, Hour)) { value = addDate.Hour.ToString(); } else if (StringUtils.EqualsIgnoreCase(element, Minute)) { value = addDate.Minute.ToString(); } else if (StringUtils.EqualsIgnoreCase(element, Second)) { value = addDate.Second.ToString(); } } else { var attributeName = element.Replace("{@", string.Empty).Replace("}", string.Empty); var isLower = false; if (StringUtils.StartsWithIgnoreCase(attributeName, "lower")) { isLower = true; attributeName = attributeName.Substring(5); } value = contentInfo.GetString(attributeName); if (isLower) { value = value.ToLower(); } } value = StringUtils.HtmlDecode(value); filePath = filePath.Replace(element, value); } if (filePath.Contains("//")) { filePath = Regex.Replace(filePath, @"(/)\1{2,}", "/"); filePath = filePath.Replace("//", "/"); } if (filePath.Contains("(")) { regex = @"(?<element>\([^\)]+\))"; elements = RegexUtils.GetContents("element", regex, filePath); foreach (var element in elements) { if (!element.Contains("|")) { continue; } var value = element.Replace("(", string.Empty).Replace(")", string.Empty); var value1 = value.Split('|')[0]; var value2 = value.Split('|')[1]; value = value1 + value2; if (!string.IsNullOrEmpty(value1) && !string.IsNullOrEmpty(value1)) { value = value1; } filePath = filePath.Replace(element, value); } } return(filePath); }
protected override void OnInit(EventArgs e) { base.OnInit(e); var channelId = AuthRequest.GetQueryInt("channelId"); var contentId = AuthRequest.GetQueryInt("contentId"); _returnUrl = AuthRequest.GetQueryString("returnUrl"); _contentInfo = Main.ContentApi.GetContentInfo(SiteId, channelId, contentId); _adminInfo = Main.AdminApi.GetAdminInfoByUserId(AuthRequest.AdminId); var state = EStateUtils.GetEnumType(_contentInfo.GetString(ContentAttribute.State)); if (IsPostBack) { return; } if (PhBtnAccept != null) { PhBtnAccept.Visible = InteractManager.IsPermission(SiteId, _contentInfo.ChannelId, Permissions.Accept); } if (PhBtnSwitchToTranslate != null) { PhBtnSwitchToTranslate.Visible = InteractManager.IsPermission(SiteId, _contentInfo.ChannelId, Permissions.SwitchToTranslate); } if (PhBtnReply != null) { PhBtnReply.Visible = InteractManager.IsPermission(SiteId, _contentInfo.ChannelId, Permissions.Reply); } if (PhBtnCheck != null) { PhBtnCheck.Visible = state != EState.Checked && InteractManager.IsPermission(SiteId, _contentInfo.ChannelId, Permissions.Check); } if (PhBtnComment != null) { PhBtnComment.Visible = state != EState.Checked && InteractManager.IsPermission(SiteId, _contentInfo.ChannelId, Permissions.Comment); } if (PhBtnReturn != null) { PhBtnReturn.Visible = !ConfigInfo.ApplyIsOpenWindow; } var tableColumns = Main.ContentApi.GetTableColumns(SiteId, _contentInfo.ChannelId); var isSingle = true; var builder = new StringBuilder(); foreach (var tableColumn in tableColumns) { if (tableColumn.InputStyle == null || Utils.EqualsIgnoreCase(tableColumn.AttributeName, nameof(IContentInfo.Title)) || Utils.EqualsIgnoreCase(tableColumn.AttributeName, nameof(IContentInfo.IsHot)) || Utils.EqualsIgnoreCase(tableColumn.AttributeName, nameof(IContentInfo.IsColor)) || Utils.EqualsIgnoreCase(tableColumn.AttributeName, nameof(IContentInfo.IsRecommend)) || Utils.EqualsIgnoreCase(tableColumn.AttributeName, nameof(IContentInfo.IsTop)) || Utils.EqualsIgnoreCase(tableColumn.AttributeName, ContentAttribute.DepartmentId) || Utils.EqualsIgnoreCase(tableColumn.AttributeName, ContentAttribute.Content)) { continue; } var value = _contentInfo.GetString(tableColumn.AttributeName); if (Utils.EqualsIgnoreCase(tableColumn.AttributeName, ContentAttribute.TypeId)) { value = InteractManager.GetTypeName(Utils.ToInt(value)); } else if (Utils.EqualsIgnoreCase(tableColumn.AttributeName, ContentAttribute.IsPublic)) { value = Utils.ToBool(value) ? "公开" : "不公开"; } else if (Utils.EqualsIgnoreCase(tableColumn.AttributeName, ContentAttribute.FileUrl)) { if (!string.IsNullOrEmpty(value)) { value = $@"<a href=""{value}"" target=""_blank"">{value}</a>"; } } else if (Utils.EqualsIgnoreCase(tableColumn.AttributeName, ContentAttribute.State)) { value = EStateUtils.GetText(state); } if (isSingle) { builder.Append("<tr>"); } builder.Append( $@"<th>{tableColumn.InputStyle.DisplayName}</th><td>{value}</td>"); if (!isSingle) { builder.Append("</tr>"); } isSingle = !isSingle; } if (!isSingle) { builder.Append("</tr>"); } LtlTitle.Text = _contentInfo.Title; LtlApplyAttributes.Text = builder.ToString(); LtlContent.Text = _contentInfo.GetString(ContentAttribute.Content); if (PhReply != null) { if (state == EState.Denied || state == EState.Replied || state == EState.Redo || state == EState.Checked) { var replyInfo = ReplyDao.GetReplyInfoByContentId(SiteId, _contentInfo.Id); if (replyInfo != null) { PhReply.Visible = true; LtlDepartmentAndUserName.Text = $"{DepartmentManager.GetDepartmentName(replyInfo.DepartmentId)}({replyInfo.UserName})"; LtlReplyAddDate.Text = Utils.GetDateAndTimeString(replyInfo.AddDate); LtlReply.Text = replyInfo.Reply; if (!string.IsNullOrEmpty(replyInfo.FileUrl)) { LtlReplyFileUrl.Text = $@"<a href=""{replyInfo.FileUrl}"" target=""_blank"">{replyInfo.FileUrl}</a>"; } } } } if (BtnSwitchTo != null) { var departmentId = _contentInfo.GetInt(ContentAttribute.DepartmentId); BtnSwitchTo.Attributes.Add("onclick", ModalDepartmentSelectSingle.GetOpenWindowString(SiteId, _contentInfo.ChannelId)); var scriptBuilder = new StringBuilder(); if (departmentId > 0) { var departmentName = DepartmentManager.GetDepartmentName(departmentId); scriptBuilder.Append( $@"<script>departmentSelect('{departmentName}', {departmentId});</script>"); } LtlScript.Text = scriptBuilder.ToString(); } if (DdlTranslateChannelId != null) { var nodeInfoList = InteractManager.GetInteractChannelInfoList(SiteId); foreach (var nodeInfo in nodeInfoList) { if (nodeInfo.Id != _contentInfo.ChannelId) { var listItem = new ListItem(nodeInfo.ChannelName, nodeInfo.Id.ToString()); DdlTranslateChannelId.Items.Add(listItem); } } } RptRemarks.DataSource = RemarkDao.GetDataSourceByContentId(SiteId, _contentInfo.Id); RptRemarks.ItemDataBound += RptRemarks_ItemDataBound; RptRemarks.DataBind(); if (RptLogs != null) { RptLogs.DataSource = LogDao.GetDataSourceByContentId(SiteId, _contentInfo.Id); RptLogs.ItemDataBound += RptLogs_ItemDataBound; RptLogs.DataBind(); } }