public static Dictionary <string, Menu> GetSiteMenus(int siteId) { var menus = new Dictionary <string, Menu>(); foreach (var service in PluginManager.Services) { if (service.SiteMenuFunc == null) { continue; } Menu metadataMenu = null; try { metadataMenu = service.SiteMenuFunc.Invoke(siteId); } catch (Exception ex) { LogUtils.AddPluginErrorLog(service.PluginId, ex); } if (metadataMenu == null) { continue; } var pluginMenu = GetMenu(service.PluginId, siteId, metadataMenu, 0); menus.Add(service.PluginId, pluginMenu); } return(menus); }
public static Dictionary <string, Menu> GetTopMenus() { var menus = new Dictionary <string, Menu>(); foreach (var service in PluginManager.Services) { if (service.PluginMenu == null) { continue; } try { var metadataMenu = service.PluginMenu; var pluginMenu = GetMenu(service.PluginId, 0, metadataMenu, 0); menus.Add(service.PluginId, pluginMenu); } catch (Exception ex) { LogUtils.AddPluginErrorLog(service.PluginId, ex); } } return(menus); }
public IHttpActionResult Post(string pluginId, string name) { try { var request = new Request(); var service = PluginManager.GetService(pluginId); return(GetHttpActionResult(service.OnApiPost(new ApiEventArgs(request, name, null)))); } catch (Exception ex) { LogUtils.AddPluginErrorLog(pluginId, ex); return(BadRequest(ex.Message)); } }
public IHttpActionResult Post(string pluginId) { try { var request = new Request(); var service = PluginManager.GetService(pluginId); var retval = service.OnApiPost(new ApiEventArgs(request, null, null)); return(retval == null ? (IHttpActionResult)NotFound() : Ok(retval)); } catch (Exception ex) { LogUtils.AddPluginErrorLog(pluginId, ex); return(BadRequest(ex.Message)); } }
public HttpResponseMessage Post(string pluginId, string name) { try { var request = new Request(); var service = PluginManager.GetService(pluginId); return(service?.HttpPostWithName == null ? Request.CreateResponse(HttpStatusCode.NotFound) : service.HttpPostWithName.Invoke(request, name)); } catch (Exception ex) { LogUtils.AddPluginErrorLog(pluginId, ex); return(Request.CreateResponse(HttpStatusCode.BadRequest, ex.Message)); } }
public bool RemoveConfig(int siteId, string name = "") { if (name == null) { name = string.Empty; } try { DataProvider.PluginConfigDao.Delete(_metadata.Id, siteId, name); } catch (Exception ex) { LogUtils.AddPluginErrorLog(_metadata.Id, ex); return(false); } return(true); }
public IHttpActionResult Post(string pluginId) { try { var request = new Request(); var service = PluginManager.GetService(pluginId); if (service?.JsonPost == null) { return(NotFound()); } return(Ok(service.JsonPost(request))); } catch (Exception ex) { LogUtils.AddPluginErrorLog(pluginId, ex); return(BadRequest(ex.Message)); } }
public IHttpActionResult Delete(string pluginId, string name, string id) { try { var request = new Request(); var service = PluginManager.GetService(pluginId); if (service?.JsonDeleteWithNameAndId == null) { return(NotFound()); } return(Ok(service.JsonDeleteWithNameAndId(request, name, id))); } catch (Exception ex) { LogUtils.AddPluginErrorLog(pluginId, ex); return(BadRequest(ex.Message)); } }
public T GetConfig <T>(int siteId, string name = "") { if (name == null) { name = string.Empty; } try { var value = DataProvider.PluginConfigDao.GetValue(_metadata.Id, siteId, name); if (!string.IsNullOrEmpty(value)) { return(JsonConvert.DeserializeObject <T>(value)); } } catch (Exception ex) { LogUtils.AddPluginErrorLog(_metadata.Id, ex); } return(default(T)); }
public bool SetConfig(int siteId, string name, object config) { if (name == null) { name = string.Empty; } try { if (config == null) { DataProvider.PluginConfigDao.Delete(_metadata.Id, siteId, name); } else { var settings = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; var json = JsonConvert.SerializeObject(config, Formatting.Indented, settings); if (DataProvider.PluginConfigDao.IsExists(_metadata.Id, siteId, name)) { var configInfo = new PluginConfigInfo(0, _metadata.Id, siteId, name, json); DataProvider.PluginConfigDao.Update(configInfo); } else { var configInfo = new PluginConfigInfo(0, _metadata.Id, siteId, name, json); DataProvider.PluginConfigDao.Insert(configInfo); } } } catch (Exception ex) { LogUtils.AddPluginErrorLog(_metadata.Id, ex); return(false); } return(true); }
public static void Parse(SiteInfo siteInfo, PageInfo pageInfo, ContextInfo contextInfo, StringBuilder contentBuilder, string filePath, bool isDynamic) { foreach (var service in PluginManager.Services) { try { service.OnBeforeStlParse(new ParseEventArgs(pageInfo.SiteId, pageInfo.PageChannelId, pageInfo.PageContentId, pageInfo.TemplateInfo.TemplateType, pageInfo.TemplateInfo.Id, filePath, contentBuilder)); } catch (Exception ex) { LogUtils.AddPluginErrorLog(service.PluginId, ex, nameof(service.OnBeforeStlParse)); } } if (contentBuilder.Length > 0) { StlParserManager.ParseTemplateContent(contentBuilder, pageInfo, contextInfo); } if (EFileSystemTypeUtils.IsHtml(PathUtils.GetExtension(filePath))) { if (isDynamic) { var pageUrl = PageUtils.AddProtocolToUrl(PageUtils.ParseNavigationUrl($"~/{PathUtils.GetPathDifference(WebConfigUtils.PhysicalApplicationPath, filePath)}")); string templateString = $@" <base href=""{pageUrl}"" />"; StringUtils.InsertAfter(new[] { "<head>", "<HEAD>" }, contentBuilder, templateString); } if (pageInfo.SiteInfo.Additional.IsCreateBrowserNoCache) { const string templateString = @" <META HTTP-EQUIV=""Pragma"" CONTENT=""no-cache""> <META HTTP-EQUIV=""Expires"" CONTENT=""-1"">"; StringUtils.InsertAfter(new[] { "<head>", "<HEAD>" }, contentBuilder, templateString); } if (pageInfo.SiteInfo.Additional.IsCreateIe8Compatible) { const string templateString = @" <META HTTP-EQUIV=""x-ua-compatible"" CONTENT=""ie=7"" />"; StringUtils.InsertAfter(new[] { "<head>", "<HEAD>" }, contentBuilder, templateString); } if (pageInfo.SiteInfo.Additional.IsCreateJsIgnoreError) { const string templateString = @" <script type=""text/javascript"">window.onerror=function(){return true;}</script>"; StringUtils.InsertAfter(new[] { "<head>", "<HEAD>" }, contentBuilder, templateString); } if (pageInfo.PageContentId > 0 && pageInfo.SiteInfo.Additional.IsCountHits && !pageInfo.BodyCodes.ContainsKey(PageInfo.Const.JsAdStlCountHits)) { if (!pageInfo.FootCodes.ContainsKey(PageInfo.Const.JsAdStlCountHits)) { pageInfo.FootCodes.Add(PageInfo.Const.JsAdStlCountHits, $@" <script src=""{ApiRouteActionsAddContentHits.GetUrl(pageInfo.ApiUrl, pageInfo.SiteId, pageInfo.PageChannelId, pageInfo.PageContentId)}"" type=""text/javascript""></script>"); } } var isShowPageInfo = pageInfo.SiteInfo.Additional.IsCreateShowPageInfo; if (!pageInfo.IsLocal) { if (pageInfo.SiteInfo.Additional.IsCreateDoubleClick) { var fileTemplateId = 0; if (pageInfo.TemplateInfo.TemplateType == TemplateType.FileTemplate) { fileTemplateId = pageInfo.TemplateInfo.Id; } var apiUrl = pageInfo.ApiUrl; var ajaxUrl = ApiRouteActionsTrigger.GetUrl(apiUrl, pageInfo.SiteId, contextInfo.ChannelId, contextInfo.ContentId, fileTemplateId, true); if (!pageInfo.FootCodes.ContainsKey("CreateDoubleClick")) { pageInfo.FootCodes.Add("CreateDoubleClick", $@" <script type=""text/javascript"" language=""javascript"">document.ondblclick=function(x){{location.href = '{ajaxUrl}&returnUrl=' + encodeURIComponent(location.search);}}</script>"); } } } else { isShowPageInfo = true; } if (isShowPageInfo) { contentBuilder.Append($@" <!-- {pageInfo.TemplateInfo.RelatedFileName}({TemplateTypeUtils.GetText(pageInfo.TemplateInfo.TemplateType)}) -->"); } var headScripts = StlParserManager.GetPageInfoHeadScript(pageInfo, contextInfo); if (!string.IsNullOrEmpty(headScripts)) { if (contentBuilder.ToString().IndexOf("</head>", StringComparison.Ordinal) != -1 || contentBuilder.ToString().IndexOf("</HEAD>", StringComparison.Ordinal) != -1) { StringUtils.InsertBefore(new[] { "</head>", "</HEAD>" }, contentBuilder, headScripts); } else { contentBuilder.Insert(0, headScripts); } } var afterBodyScripts = StlParserManager.GetPageBodyCodes(pageInfo); if (!string.IsNullOrEmpty(afterBodyScripts)) { if (contentBuilder.ToString().IndexOf("<body", StringComparison.Ordinal) != -1 || contentBuilder.ToString().IndexOf("<BODY", StringComparison.Ordinal) != -1) { var index = contentBuilder.ToString().IndexOf("<body", StringComparison.Ordinal); if (index == -1) { index = contentBuilder.ToString().IndexOf("<BODY", StringComparison.Ordinal); } index = contentBuilder.ToString().IndexOf(">", index, StringComparison.Ordinal); contentBuilder.Insert(index + 1, StringUtils.Constants.ReturnAndNewline + afterBodyScripts + StringUtils.Constants.ReturnAndNewline); } else { contentBuilder.Insert(0, afterBodyScripts); } } if (pageInfo.FootCodes.Count > 0) { var builder = new StringBuilder(); foreach (var key in pageInfo.FootCodes.Keys) { builder.Append(pageInfo.FootCodes[key]); } builder.Append(StringUtils.Constants.ReturnAndNewline); //contentBuilder.Append(endScriptBuilder.ToString()); //StringUtils.InsertBeforeOrAppend(new string[] { "</body>", "</BODY>" }, contentBuilder, endScriptBuilder.ToString()); StringUtils.InsertAfterOrAppend(new[] { "</html>", "</html>" }, contentBuilder, builder.ToString()); } } foreach (var service in PluginManager.Services) { try { service.OnAfterStlParse(new ParseEventArgs(pageInfo.SiteId, pageInfo.PageChannelId, pageInfo.PageContentId, pageInfo.TemplateInfo.TemplateType, pageInfo.TemplateInfo.Id, filePath, contentBuilder)); } catch (Exception ex) { LogUtils.AddPluginErrorLog(service.PluginId, ex, nameof(service.OnAfterStlParse)); } } }
protected override void Render(HtmlTextWriter output) { if (StyleInfoList == null || StyleInfoList.Count == 0 || Attributes == null) { return; } var pageScripts = new NameValueCollection(); var builder = new StringBuilder(); foreach (var styleInfo in StyleInfoList) { string extra; var value = BackgroundInputTypeParser.Parse(SiteInfo, ChannelId, styleInfo, Attributes, pageScripts, out extra); if (string.IsNullOrEmpty(value) && string.IsNullOrEmpty(extra)) { continue; } if (styleInfo.InputType == InputType.TextEditor) { var commands = WebUtils.GetTextEditorCommands(SiteInfo, styleInfo.AttributeName); builder.Append($@" <div class=""form-group form-row""> <label class=""col-sm-1 col-form-label text-right"">{styleInfo.DisplayName}</label> <div class=""col-sm-10""> {commands} <div class=""m-t-10""> {value} </div> </div> <div class=""col-sm-1""> {extra} </div> </div>"); } else { var html = $@" <div class=""form-group form-row""> <label class=""col-sm-1 col-form-label text-right"">{styleInfo.DisplayName}</label> <div class=""col-sm-6""> {value} </div> <div class=""col-sm-5""> {extra} </div> </div>"; if (styleInfo.InputType == InputType.Customize) { var eventArgs = new ContentFormLoadEventArgs(SiteInfo.Id, ChannelId, styleInfo.AttributeName, Attributes); foreach (var service in PluginManager.Services) { try { var serviceReturnedHtml = service.OnContentFormLoad(eventArgs); if (!string.IsNullOrEmpty(serviceReturnedHtml)) { html = serviceReturnedHtml; } } catch (Exception ex) { LogUtils.AddPluginErrorLog(service.PluginId, ex, nameof(IService.ContentFormLoad)); } } } builder.Append(html); } } output.Write(builder.ToString()); foreach (string key in pageScripts.Keys) { output.Write(pageScripts[key]); } }
private int SaveContentInfo(bool isPreview, out string errorMessage) { int savedContentId; errorMessage = string.Empty; var contentId = 0; string redirectUrl; if (!isPreview) { contentId = Body.GetQueryInt("id"); } if (contentId == 0) { var contentInfo = new ContentInfo(); try { contentInfo.ChannelId = _nodeInfo.Id; contentInfo.SiteId = SiteId; contentInfo.AddUserName = Body.AdminName; contentInfo.LastEditUserName = contentInfo.AddUserName; contentInfo.LastEditDate = DateTime.Now; BackgroundInputTypeParser.SaveAttributes(contentInfo, SiteInfo, _styleInfoList, Request.Form, ContentAttribute.AllAttributesLowercase); contentInfo.GroupNameCollection = ControlUtils.SelectedItemsValueToStringCollection(CblContentGroups.Items); var tagCollection = TagUtils.ParseTagsString(TbTags.Text); contentInfo.Title = TbTitle.Text; var formatString = TranslateUtils.ToBool(Request.Form[ContentAttribute.Title + "_formatStrong"]); var formatEm = TranslateUtils.ToBool(Request.Form[ContentAttribute.Title + "_formatEM"]); var formatU = TranslateUtils.ToBool(Request.Form[ContentAttribute.Title + "_formatU"]); var formatColor = Request.Form[ContentAttribute.Title + "_formatColor"]; var theFormatString = ContentUtility.GetTitleFormatString(formatString, formatEm, formatU, formatColor); contentInfo.Set(ContentAttribute.GetFormatStringAttributeName(ContentAttribute.Title), theFormatString); foreach (ListItem listItem in CblContentAttributes.Items) { var value = listItem.Selected.ToString(); var attributeName = listItem.Value; contentInfo.Set(attributeName, value); } contentInfo.LinkUrl = TbLinkUrl.Text; contentInfo.AddDate = TbAddDate.DateTime; if (contentInfo.AddDate.Year <= DateUtils.SqlMinValue.Year) { contentInfo.AddDate = DateTime.Now; } contentInfo.CheckedLevel = TranslateUtils.ToIntWithNagetive(DdlContentLevel.SelectedValue); contentInfo.IsChecked = contentInfo.CheckedLevel >= SiteInfo.Additional.CheckContentLevel; contentInfo.Tags = TranslateUtils.ObjectCollectionToString(tagCollection, " "); foreach (var service in PluginManager.Services) { try { service.OnContentFormSubmit(new ContentFormSubmitEventArgs(SiteId, _nodeInfo.Id, contentInfo, new ExtendedAttributes(Request.Form))); } catch (Exception ex) { LogUtils.AddPluginErrorLog(service.PluginId, ex, nameof(IService.ContentFormSubmit)); } } if (isPreview) { savedContentId = DataProvider.ContentDao.InsertPreview(_tableName, SiteInfo, _nodeInfo, contentInfo); } else { savedContentId = DataProvider.ContentDao.Insert(_tableName, SiteInfo, contentInfo); //判断是不是有审核权限 int checkedLevelOfUser; var isCheckedOfUser = CheckManager.GetUserCheckLevel(Body.AdminName, SiteInfo, contentInfo.ChannelId, out checkedLevelOfUser); if (CheckManager.IsCheckable(SiteInfo, contentInfo.ChannelId, contentInfo.IsChecked, contentInfo.CheckedLevel, isCheckedOfUser, checkedLevelOfUser)) { //添加审核记录 DataProvider.ContentDao.UpdateIsChecked(_tableName, SiteId, contentInfo.ChannelId, new List <int> { savedContentId }, 0, true, Body.AdminName, contentInfo.IsChecked, contentInfo.CheckedLevel, ""); } TagUtils.AddTags(tagCollection, SiteId, savedContentId); } contentInfo.Id = savedContentId; } catch (Exception ex) { LogUtils.AddSystemErrorLog(ex); errorMessage = $"内容添加失败:{ex.Message}"; return(0); } if (contentInfo.IsChecked) { CreateManager.CreateContentAndTrigger(SiteId, _nodeInfo.Id, contentInfo.Id); } Body.AddSiteLog(SiteId, _nodeInfo.Id, contentInfo.Id, "添加内容", $"栏目:{ChannelManager.GetChannelNameNavigation(SiteId, contentInfo.ChannelId)},内容标题:{contentInfo.Title}"); ContentUtility.Translate(SiteInfo, _nodeInfo.Id, contentInfo.Id, Request.Form["translateCollection"], ETranslateContentTypeUtils.GetEnumType(DdlTranslateType.SelectedValue), Body.AdminName); redirectUrl = PageContentAddAfter.GetRedirectUrl(SiteId, _nodeInfo.Id, contentInfo.Id, ReturnUrl); } else { var contentInfo = DataProvider.ContentDao.GetContentInfo(_tableName, contentId); try { var tagsLast = contentInfo.Tags; contentInfo.LastEditUserName = Body.AdminName; contentInfo.LastEditDate = DateTime.Now; BackgroundInputTypeParser.SaveAttributes(contentInfo, SiteInfo, _styleInfoList, Request.Form, ContentAttribute.AllAttributesLowercase); contentInfo.GroupNameCollection = ControlUtils.SelectedItemsValueToStringCollection(CblContentGroups.Items); var tagCollection = TagUtils.ParseTagsString(TbTags.Text); contentInfo.Title = TbTitle.Text; var formatString = TranslateUtils.ToBool(Request.Form[ContentAttribute.Title + "_formatStrong"]); var formatEm = TranslateUtils.ToBool(Request.Form[ContentAttribute.Title + "_formatEM"]); var formatU = TranslateUtils.ToBool(Request.Form[ContentAttribute.Title + "_formatU"]); var formatColor = Request.Form[ContentAttribute.Title + "_formatColor"]; var theFormatString = ContentUtility.GetTitleFormatString(formatString, formatEm, formatU, formatColor); contentInfo.Set(ContentAttribute.GetFormatStringAttributeName(ContentAttribute.Title), theFormatString); foreach (ListItem listItem in CblContentAttributes.Items) { var value = listItem.Selected.ToString(); var attributeName = listItem.Value; contentInfo.Set(attributeName, value); } contentInfo.LinkUrl = TbLinkUrl.Text; contentInfo.AddDate = TbAddDate.DateTime; var checkedLevel = TranslateUtils.ToIntWithNagetive(DdlContentLevel.SelectedValue); if (checkedLevel != CheckManager.LevelInt.NotChange) { contentInfo.IsChecked = checkedLevel >= SiteInfo.Additional.CheckContentLevel; contentInfo.CheckedLevel = checkedLevel; } contentInfo.Tags = TranslateUtils.ObjectCollectionToString(tagCollection, " "); foreach (var service in PluginManager.Services) { try { service.OnContentFormSubmit(new ContentFormSubmitEventArgs(SiteId, _nodeInfo.Id, contentInfo, new ExtendedAttributes(Request.Form))); } catch (Exception ex) { LogUtils.AddPluginErrorLog(service.PluginId, ex, nameof(IService.ContentFormSubmit)); } } DataProvider.ContentDao.Update(_tableName, SiteInfo, contentInfo); TagUtils.UpdateTags(tagsLast, contentInfo.Tags, tagCollection, SiteId, contentId); ContentUtility.Translate(SiteInfo, _nodeInfo.Id, contentInfo.Id, Request.Form["translateCollection"], ETranslateContentTypeUtils.GetEnumType(DdlTranslateType.SelectedValue), Body.AdminName); //更新引用该内容的信息 //如果不是异步自动保存,那么需要将引用此内容的content修改 //var sourceContentIdList = new List<int> //{ // contentInfo.Id //}; //var tableList = DataProvider.TableDao.GetTableCollectionInfoListCreatedInDb(); //foreach (var table in tableList) //{ // var targetContentIdList = DataProvider.ContentDao.GetReferenceIdList(table.TableName, sourceContentIdList); // foreach (var targetContentId in targetContentIdList) // { // var targetContentInfo = DataProvider.ContentDao.GetContentInfo(table.TableName, targetContentId); // if (targetContentInfo == null || targetContentInfo.GetString(ContentAttribute.TranslateContentType) != ETranslateContentType.ReferenceContent.ToString()) continue; // contentInfo.Id = targetContentId; // contentInfo.SiteId = targetContentInfo.SiteId; // contentInfo.ChannelId = targetContentInfo.ChannelId; // contentInfo.SourceId = targetContentInfo.SourceId; // contentInfo.ReferenceId = targetContentInfo.ReferenceId; // contentInfo.Taxis = targetContentInfo.Taxis; // contentInfo.Set(ContentAttribute.TranslateContentType, targetContentInfo.GetString(ContentAttribute.TranslateContentType)); // DataProvider.ContentDao.Update(table.TableName, contentInfo); // //资源:图片,文件,视频 // var targetSiteInfo = SiteManager.GetSiteInfo(targetContentInfo.SiteId); // var bgContentInfo = contentInfo as BackgroundContentInfo; // var bgTargetContentInfo = targetContentInfo as BackgroundContentInfo; // if (bgTargetContentInfo != null && bgContentInfo != null) // { // if (bgContentInfo.ImageUrl != bgTargetContentInfo.ImageUrl) // { // //修改图片 // var sourceImageUrl = PathUtility.MapPath(SiteInfo, bgContentInfo.ImageUrl); // CopyReferenceFiles(targetSiteInfo, sourceImageUrl); // } // else if (bgContentInfo.GetString(ContentAttribute.GetExtendAttributeName(BackgroundContentAttribute.ImageUrl)) != bgTargetContentInfo.GetString(ContentAttribute.GetExtendAttributeName(BackgroundContentAttribute.ImageUrl))) // { // var sourceImageUrls = TranslateUtils.StringCollectionToStringList(bgContentInfo.GetString(ContentAttribute.GetExtendAttributeName(BackgroundContentAttribute.ImageUrl))); // foreach (string imageUrl in sourceImageUrls) // { // var sourceImageUrl = PathUtility.MapPath(SiteInfo, imageUrl); // CopyReferenceFiles(targetSiteInfo, sourceImageUrl); // } // } // if (bgContentInfo.FileUrl != bgTargetContentInfo.FileUrl) // { // //修改附件 // var sourceFileUrl = PathUtility.MapPath(SiteInfo, bgContentInfo.FileUrl); // CopyReferenceFiles(targetSiteInfo, sourceFileUrl); // } // else if (bgContentInfo.GetString(ContentAttribute.GetExtendAttributeName(BackgroundContentAttribute.FileUrl)) != bgTargetContentInfo.GetString(ContentAttribute.GetExtendAttributeName(BackgroundContentAttribute.FileUrl))) // { // var sourceFileUrls = TranslateUtils.StringCollectionToStringList(bgContentInfo.GetString(ContentAttribute.GetExtendAttributeName(BackgroundContentAttribute.FileUrl))); // foreach (var fileUrl in sourceFileUrls) // { // var sourceFileUrl = PathUtility.MapPath(SiteInfo, fileUrl); // CopyReferenceFiles(targetSiteInfo, sourceFileUrl); // } // } // } // } //} } catch (Exception ex) { LogUtils.AddSystemErrorLog(ex); errorMessage = $"内容修改失败:{ex.Message}"; return(0); } if (contentInfo.IsChecked) { CreateManager.CreateContentAndTrigger(SiteId, _nodeInfo.Id, contentId); } Body.AddSiteLog(SiteId, _nodeInfo.Id, contentId, "修改内容", $"栏目:{ChannelManager.GetChannelNameNavigation(SiteId, contentInfo.ChannelId)},内容标题:{contentInfo.Title}"); redirectUrl = ReturnUrl; savedContentId = contentId; } if (!isPreview) { PageUtils.Redirect(redirectUrl); } return(savedContentId); }