public async Task <ActionResult <StringResult> > Submit([FromBody] SubmitRequest request) { if (!await _authManager.HasSitePermissionsAsync(request.SiteId, Types.SitePermissions.TemplatesPreview)) { return(Unauthorized()); } var site = await _siteRepository.GetAsync(request.SiteId); if (site == null) { return(NotFound()); } var contentId = 0; if (request.TemplateType == TemplateType.ContentTemplate) { var channel = await _channelRepository.GetAsync(request.ChannelId); var count = await _contentRepository.GetCountAsync(site, channel); if (count > 0) { var tableName = _channelRepository.GetTableName(site, channel); contentId = await _contentRepository.GetFirstContentIdAsync(tableName, request.ChannelId); } if (contentId == 0) { return(this.Error("所选栏目下无内容,请选择有内容的栏目")); } } _cacheManager.AddOrUpdateSliding(CacheKey, request.Content, 60); //var cacheItem = new CacheItem<string>(CacheKey, request.Content, ExpirationMode.Sliding, TimeSpan.FromHours(1)); //_cacheManager.AddOrUpdate(cacheItem, _ => request.Content); var templateInfo = new Template { TemplateType = request.TemplateType }; await _parseManager.InitAsync(site, request.ChannelId, contentId, templateInfo); var parsedContent = await _parseManager.ParseTemplatePreviewAsync(request.Content); return(new StringResult { Value = parsedContent }); }
private async Task <FileResult> GetResponseMessageAsync(VisualInfo visualInfo) { if (visualInfo.Site == null || visualInfo.Template == null) { return(null); } var site = visualInfo.Site; var templateInfo = visualInfo.Template; await _parseManager.InitAsync(EditMode.Preview, site, visualInfo.ChannelId, visualInfo.ContentId, templateInfo); _parseManager.PageInfo.IsLocal = true; _parseManager.ContextInfo.ContextType = visualInfo.ContextType; var contentBuilder = new StringBuilder(await _pathManager.GetTemplateContentAsync(site, templateInfo)); if (templateInfo.CreatedFileExtName == ".shtml") { //<!-- #include virtual="{Stl.SiteUrl}/include/head.html" --> var content = Regex.Replace(contentBuilder.ToString(), @"<!-- #include virtual=""([^""]+)"" -->", @"<stl:include file=""$1""></stl:include>"); contentBuilder = new StringBuilder(content); } FileResult message = null; if (templateInfo.TemplateType == TemplateType.FileTemplate) //单页 { message = await GetFileTemplateAsync(visualInfo, contentBuilder); } else if (templateInfo.TemplateType == TemplateType.IndexPageTemplate || templateInfo.TemplateType == TemplateType.ChannelTemplate) //栏目页面 { message = await GetChannelTemplateAsync(visualInfo, contentBuilder); } else if (templateInfo.TemplateType == TemplateType.ContentTemplate) //内容页面 { message = await GetContentTemplateAsync(visualInfo, contentBuilder); } return(message); }
public async Task <string> Submit([FromBody] SubmitRequest request) { var user = await _authManager.GetUserAsync(); var site = await _siteRepository.GetAsync(request.SiteId); var stlPageContentsElement = _settingsManager.Decrypt(request.StlPageContentsElement); var channel = await _channelRepository.GetAsync(request.PageChannelId); var template = await _templateRepository.GetAsync(request.TemplateId); await _parseManager.InitAsync(site, channel.Id, 0, template); _parseManager.PageInfo.User = user; var stlPageContents = await StlPageContents.GetAsync(stlPageContentsElement, _parseManager); var pageHtml = await stlPageContents.ParseAsync(request.TotalNum, request.CurrentPageIndex, request.PageCount, false); return(pageHtml); }
public static async Task <string> ParseDynamicAsync(IParseManager parseManager, Dynamic dynamicInfo, string template) { var databaseManager = parseManager.DatabaseManager; if (string.IsNullOrEmpty(template)) { return(string.Empty); } var templateInfo = await databaseManager.TemplateRepository.GetAsync(dynamicInfo.TemplateId); var siteInfo = await databaseManager.SiteRepository.GetAsync(dynamicInfo.SiteId); await parseManager.InitAsync(EditMode.Default, siteInfo, dynamicInfo.ChannelId, dynamicInfo.ContentId, templateInfo); parseManager.PageInfo.User = dynamicInfo.User; var templateContent = StlRequest.ParseRequestEntities(dynamicInfo.QueryString, template); var contentBuilder = new StringBuilder(templateContent); var stlElementList = ParseUtils.GetStlElements(contentBuilder.ToString()); var pageIndex = dynamicInfo.Page - 1; //如果标签中存在<stl:pageContents> if (ParseUtils.IsStlElementExists(StlPageContents.ElementName, stlElementList)) { var stlElement = ParseUtils.GetStlElement(StlPageContents.ElementName, stlElementList); var stlPageContentsElement = stlElement; var stlPageContentsElementReplaceString = stlElement; var pageContentsElementParser = await StlPageContents.GetAsync(stlPageContentsElement, parseManager, dynamicInfo.Query); var(pageCount, totalNum) = pageContentsElementParser.GetPageCount(); for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++) { if (currentPageIndex == pageIndex) { var pageHtml = await pageContentsElementParser.ParseAsync(totalNum, currentPageIndex, pageCount, false); contentBuilder.Replace(stlPageContentsElementReplaceString, pageHtml); await parseManager.ReplacePageElementsInDynamicPageAsync(contentBuilder, stlElementList, currentPageIndex, pageCount, totalNum, false, dynamicInfo.ElementId); break; } } } //如果标签中存在<stl:pageChannels> else if (ParseUtils.IsStlElementExists(StlPageChannels.ElementName, stlElementList)) { var stlElement = ParseUtils.GetStlElement(StlPageChannels.ElementName, stlElementList); var stlPageChannelsElement = stlElement; var stlPageChannelsElementReplaceString = stlElement; var pageChannelsElementParser = await StlPageChannels.GetAsync(stlPageChannelsElement, parseManager); var pageCount = pageChannelsElementParser.GetPageCount(out var totalNum); for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++) { if (currentPageIndex != pageIndex) { continue; } var pageHtml = await pageChannelsElementParser.ParseAsync(currentPageIndex, pageCount); contentBuilder.Replace(stlPageChannelsElementReplaceString, pageHtml); await parseManager.ReplacePageElementsInDynamicPageAsync(contentBuilder, stlElementList, currentPageIndex, pageCount, totalNum, false, dynamicInfo.ElementId); break; } } //如果标签中存在<stl:pageSqlContents> else if (ParseUtils.IsStlElementExists(StlPageSqlContents.ElementName, stlElementList)) { var stlElement = ParseUtils.GetStlElement(StlPageSqlContents.ElementName, stlElementList); var stlPageSqlContentsElement = stlElement; var stlPageSqlContentsElementReplaceString = stlElement; var pageSqlContentsElementParser = await StlPageSqlContents.GetAsync(stlPageSqlContentsElement, parseManager); var pageCount = pageSqlContentsElementParser.GetPageCount(out var totalNum); for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++) { if (currentPageIndex != pageIndex) { continue; } var pageHtml = await pageSqlContentsElementParser.ParseAsync(totalNum, currentPageIndex, pageCount, false); contentBuilder.Replace(stlPageSqlContentsElementReplaceString, pageHtml); await parseManager.ReplacePageElementsInDynamicPageAsync(contentBuilder, stlElementList, currentPageIndex, pageCount, totalNum, false, dynamicInfo.ElementId); break; } } else if (ParseUtils.IsStlElementExists(StlPageItems.ElementName, stlElementList)) { var pageCount = TranslateUtils.ToInt(dynamicInfo.QueryString["pageCount"]); var totalNum = TranslateUtils.ToInt(dynamicInfo.QueryString["totalNum"]); var pageContentsAjaxDivId = dynamicInfo.QueryString["pageContentsAjaxDivId"]; for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++) { if (currentPageIndex != pageIndex) { continue; } await parseManager.ReplacePageElementsInDynamicPageAsync(contentBuilder, stlElementList, currentPageIndex, pageCount, totalNum, false, pageContentsAjaxDivId); break; } } await parseManager.ParseInnerContentAsync(contentBuilder); //var parsedContent = StlParserUtility.GetBackHtml(contentBuilder.ToString(), pageInfo); //return pageInfo.HeadCodesHtml + pageInfo.BodyCodesHtml + parsedContent + pageInfo.FootCodesHtml; return(contentBuilder.ToString()); }
public async Task <ActionResult <StringResult> > Submit([FromBody] StlSearch.SearchRequest request) { var template = string.Empty; try { var form = GetPostCollection(request); template = _settingsManager.Decrypt(request.Template); var pageIndex = request.Page - 1; if (pageIndex < 0) { pageIndex = 0; } var templateInfo = new Template { Id = 0, SiteId = request.SiteId, TemplateName = string.Empty, TemplateType = TemplateType.FileTemplate, RelatedFileName = string.Empty, CreatedFileFullName = string.Empty, CreatedFileExtName = string.Empty, DefaultTemplate = false }; var site = await _siteRepository.GetAsync(request.SiteId); await _parseManager.InitAsync(site, request.SiteId, 0, templateInfo); _parseManager.PageInfo.User = await _authManager.GetUserAsync(); var contentBuilder = new StringBuilder(StlRequestEntities.ParseRequestEntities(form, template)); var stlLabelList = StlParserUtility.GetStlLabelList(contentBuilder.ToString()); if (StlParserUtility.IsStlElementExists(StlPageContents.ElementName, stlLabelList)) { var stlElement = StlParserUtility.GetStlElement(StlPageContents.ElementName, stlLabelList); var stlPageContentsElement = stlElement; var stlPageContentsElementReplaceString = stlElement; var whereString = await _contentRepository.GetWhereStringByStlSearchAsync(_databaseManager, request.IsAllSites, request.SiteName, request.SiteDir, request.SiteIds, request.ChannelIndex, request.ChannelName, request.ChannelIds, request.Type, request.Word, request.DateAttribute, request.DateFrom, request.DateTo, request.Since, request.SiteId, StlSearch.GetSearchExcludeAttributeNames, form); var stlPageContents = await StlPageContents.GetAsync(stlPageContentsElement, _parseManager, request.PageNum, whereString); var(pageCount, totalNum) = stlPageContents.GetPageCount(); if (totalNum == 0) { return(NotFound()); } for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++) { if (currentPageIndex != pageIndex) { continue; } var pageHtml = await stlPageContents.ParseAsync(totalNum, currentPageIndex, pageCount, false); var pagedBuilder = new StringBuilder(contentBuilder.ToString().Replace(stlPageContentsElementReplaceString, pageHtml)); await _parseManager.ReplacePageElementsInSearchPageAsync(pagedBuilder, stlLabelList, request.AjaxDivId, currentPageIndex, pageCount, totalNum); if (request.IsHighlight && !string.IsNullOrEmpty(request.Word)) { var pagedContents = pagedBuilder.ToString(); pagedBuilder = new StringBuilder(); pagedBuilder.Append(RegexUtils.Replace( $"({request.Word.Replace(" ", "\\s")})(?!</a>)(?![^><]*>)", pagedContents, $"<span style='color:#cc0000'>{request.Word}</span>")); } await _parseManager.ParseAsync(pagedBuilder, string.Empty, false); return(new StringResult { Value = pagedBuilder.ToString() }); } } else if (StlParserUtility.IsStlElementExists(StlPageSqlContents.ElementName, stlLabelList)) { var stlElement = StlParserUtility.GetStlElement(StlPageSqlContents.ElementName, stlLabelList); var stlPageSqlContents = await StlPageSqlContents.GetAsync(stlElement, _parseManager); var pageCount = stlPageSqlContents.GetPageCount(out var totalNum); if (totalNum == 0) { return(NotFound()); } for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++) { if (currentPageIndex != pageIndex) { continue; } var pageHtml = await stlPageSqlContents.ParseAsync(totalNum, currentPageIndex, pageCount, false); var pagedBuilder = new StringBuilder(contentBuilder.ToString().Replace(stlElement, pageHtml)); await _parseManager.ReplacePageElementsInSearchPageAsync(pagedBuilder, stlLabelList, request.AjaxDivId, currentPageIndex, pageCount, totalNum); if (request.IsHighlight && !string.IsNullOrEmpty(request.Word)) { var pagedContents = pagedBuilder.ToString(); pagedBuilder = new StringBuilder(); pagedBuilder.Append(RegexUtils.Replace( $"({request.Word.Replace(" ", "\\s")})(?!</a>)(?![^><]*>)", pagedContents, $"<span style='color:#cc0000'>{request.Word}</span>")); } await _parseManager.ParseAsync(pagedBuilder, string.Empty, false); return(new StringResult { Value = pagedBuilder.ToString() }); } } await _parseManager.ParseAsync(contentBuilder, string.Empty, false); return(new StringResult { Value = contentBuilder.ToString() }); } catch (Exception ex) { var message = await _parseManager.AddStlErrorLogAsync(StlSearch.ElementName, template, ex); return(this.Error(message)); } }