internal static EmailTemplateEntity CreateDefaultTemplate(EmailModelEntity emailModel) { EmailModelInfo info = registeredModels.GetOrThrow(entityToType.Value.GetOrThrow(emailModel)); if (info.DefaultTemplateConstructor == null) { throw new InvalidOperationException($"No EmailTemplate for {emailModel} found and DefaultTemplateConstructor = null"); } EmailTemplateEntity template = info.DefaultTemplateConstructor.Invoke(); if (template.MasterTemplate != null) { template.MasterTemplate = EmailMasterTemplateLogic.GetDefaultMasterTemplate(); } if (template.Name == null) { template.Name = emailModel.FullClassName; } template.Model = emailModel; template.Query = QueryLogic.GetQueryEntity(info.QueryName); template.ParseData(QueryLogic.Queries.QueryDescription(info.QueryName)); return(template); }
public UserQueryEntity FromQueryRequest(CreateRequest request) { var qr = request.queryRequest.ToQueryRequest(); var qd = DynamicQueryManager.Current.QueryDescription(qr.QueryName); return(qr.ToUserQuery(qd, QueryLogic.GetQueryEntity(qd.QueryName), request.defaultPagination.ToPagination(), withoutFilters: false)); }
public static UserQueryEntity ToUserQuery(QueryRequest request) { return(request.ToUserQuery( DynamicQueryManager.Current.QueryDescription(request.QueryName), QueryLogic.GetQueryEntity(request.QueryName), FindOptions.DefaultPagination, withoutFilters: false /*Implement Simple Filter Builder*/)); }
public static ImportAction Load(XDocument document) { XElement element = document.Element(_Query) !; var ci = CultureInfoLogic.CultureInfoToEntity.Value.GetOrThrow(element.Attribute(_Culture) !.Value); var queryName = SelectInteractive(element.Attribute(_Key) !.Value, QueryLogic.QueryNames, "queries"); if (queryName == null) { return(ImportAction.Skipped); } var query = QueryLogic.GetQueryEntity(queryName); var entity = Database.Query <QueryHelpEntity>().SingleOrDefaultEx(a => a.Culture.Is(ci) && a.Query.Is(query)) ?? new QueryHelpEntity { Culture = ci, Query = query, }; entity.Description = element.Element(_Description)?.Value; var cols = element.Element(_Columns); if (cols != null) { var queryColumns = QueryLogic.Queries.GetQuery(queryName).Core.Value.StaticColumns.Select(a => a.Name).ToDictionary(a => a); foreach (var item in cols.Elements(_Column)) { string?name = item.Attribute(_Name) !.Value; name = SelectInteractive(name, queryColumns, "columns of {0}".FormatWith(queryName)); if (name == null) { continue; } var col = entity.Columns.SingleOrDefaultEx(c => c.ColumnName == name); if (col != null) { col.Description = item.Value; } else { entity.Columns.Add(new QueryColumnHelpEmbedded { ColumnName = name, Description = item.Value }); } } } return(Save(entity)); }
public static void ImportWordReportTemplateForOrder() { new WordTemplateEntity { Name = "Order template", Query = QueryLogic.GetQueryEntity(typeof(OrderEntity)), Culture = CultureInfo.GetCultureInfo("en").ToCultureInfoEntity(), Template = new FileEntity("../../WordTemplates/Order.docx").ToLiteFat(), FileName = "Order.docx" }.Save(); }
QueryEntity?IFromXmlContext.TryGetQuery(string queryKey) { var qn = QueryLogic.TryToQueryName(queryKey); if (qn == null) { return(null); } return(QueryLogic.GetQueryEntity(qn)); }
public static void Start(SchemaBuilder sb, DynamicQueryManager dqm) { if (sb.NotDefined(MethodInfo.GetCurrentMethod())) { AuthLogic.AssertStarted(sb); QueryLogic.Start(sb, dqm); dqm.AllowQuery += new Func <object, bool, bool>(dqm_AllowQuery); cache = new AuthCache <RuleQueryEntity, QueryAllowedRule, QueryEntity, object, QueryAllowed>(sb, qn => QueryLogic.ToQueryName(qn.Key), QueryLogic.GetQueryEntity, merger: new QueryMerger(), invalidateWithTypes: true, coercer: QueryCoercer.Instance); AuthLogic.ExportToXml += exportAll => cache.ExportXml("Queries", "Query", QueryUtils.GetKey, b => b.ToString(), exportAll ? QueryLogic.QueryNames.Values.ToList(): null); AuthLogic.ImportFromXml += (x, roles, replacements) => { string replacementKey = "AuthRules:" + typeof(QueryEntity).Name; replacements.AskForReplacements( x.Element("Queries").Elements("Role").SelectMany(r => r.Elements("Query")).Select(p => p.Attribute("Resource").Value).ToHashSet(), QueryLogic.QueryNames.Keys.ToHashSet(), replacementKey); return(cache.ImportXml(x, "Queries", "Query", roles, s => { var qn = QueryLogic.TryToQueryName(replacements.Apply(replacementKey, s)); if (qn == null) { return null; } return QueryLogic.GetQueryEntity(qn); }, str => { if (Enum.TryParse <QueryAllowed>(str, out var result)) { return result; } var bResult = bool.Parse(str); //For backwards compatibilityS return bResult ? QueryAllowed.Allow : QueryAllowed.None; })); }; } }
public static UserQueryEntity ParseAndSave(this UserQueryEntity userQuery) { if (!userQuery.IsNew || userQuery.queryName == null) { throw new InvalidOperationException("userQuery should be new and have queryName"); } userQuery.Query = QueryLogic.GetQueryEntity(userQuery.queryName); QueryDescription description = QueryLogic.Queries.QueryDescription(userQuery.queryName); userQuery.ParseData(description); return(userQuery.Execute(UserQueryOperation.Save)); }
public static UserChartEntity ParseData(this UserChartEntity userChart) { if (!userChart.IsNew || userChart.queryName == null) { throw new InvalidOperationException("userChart should be new and have queryName"); } userChart.Query = QueryLogic.GetQueryEntity(userChart.queryName); QueryDescription description = QueryLogic.Queries.QueryDescription(userChart.queryName); userChart.ParseData(description); return(userChart); }
public static EmailTemplateEntity ParseData(this EmailTemplateEntity emailTemplate) { if (!emailTemplate.IsNew || emailTemplate.queryName == null) { throw new InvalidOperationException("emailTemplate should be new and have queryName"); } emailTemplate.Query = QueryLogic.GetQueryEntity(emailTemplate.queryName); QueryDescription description = QueryLogic.Queries.QueryDescription(emailTemplate.queryName); emailTemplate.ParseData(description); return(emailTemplate); }
static IDisposable?Current_QueryExecuted(DynamicQueryContainer.ExecuteType type, object queryName, BaseQueryRequest?request) { if (request == null || !LogQuery(request, type) || UserHolder.Current == null) { return(null); } var old = Connector.CurrentLogger; StringWriter sw = new StringWriter(); Connector.CurrentLogger = old == null ? (TextWriter)sw : new DuplicateTextWriter(sw, old); var viewLog = new ViewLogEntity { Target = QueryLogic.GetQueryEntity(queryName).ToLite(), User = UserHolder.Current !.ToLite(), ViewAction = type.ToString(), }; return(new Disposable(() => { try { var str = GetData(request !, sw); using (ExecutionContext.SuppressFlow()) Task.Factory.StartNew(() => { using (ExecutionMode.Global()) using (Transaction tr = Transaction.ForceNew()) { viewLog.EndDate = TimeZoneManager.Now; viewLog.Data = new BigStringEmbedded(str); using (ExecutionMode.Global()) viewLog.Save(); tr.Commit(); } }); } finally { Connector.CurrentLogger = old; } })); }
}//ImportInstanceTranslations public static void ImportWordReportTemplateForOrder() { var bytes = File.ReadAllBytes("../../../WordAssets.xml"); var preview = UserAssetsImporter.Preview(bytes); using (UserHolder.UserSession(AuthLogic.SystemUser !)) UserAssetsImporter.Import(bytes, preview); new WordTemplateEntity { Name = "Order template", Query = QueryLogic.GetQueryEntity(typeof(OrderEntity)), Culture = CultureInfo.GetCultureInfo("en").ToCultureInfoEntity(), Template = new FileEntity("../../../WordTemplates/Order.docx").ToLiteFat(), FileName = "Order.docx" }.Save(); }
public QueryHelp(object queryName, CultureInfo ci, QueryHelpEntity entity) { QueryName = queryName; Culture = ci; Info = HelpGenerator.GetQueryHelp(DynamicQueryManager.Current.GetQuery(queryName).Core.Value); Columns = DynamicQueryManager.Current.GetQuery(queryName).Core.Value.StaticColumns.ToDictionary( cf => cf.Name, cf => new QueryColumnHelp(cf, cf.DisplayName(), HelpGenerator.GetQueryColumnHelp(cf))); if (entity != null) { HasEntity = true; UserDescription = entity.Description; foreach (var tranColumn in entity.Columns) { Columns.GetOrThrow(tranColumn.ColumnName).UserDescription = tranColumn.Description; } } Entity = new Lazy <QueryHelpEntity>(() => HelpLogic.GlobalContext(() => { if (entity == null) { entity = new QueryHelpEntity { Culture = this.Culture.ToCultureInfoEntity(), Query = QueryLogic.GetQueryEntity(this.QueryName), } } ; entity.Columns.AddRange( DynamicQueryManager.Current.GetQuery(this.QueryName).Core.Value.StaticColumns.Select(a => a.Name) .Except(entity.Columns.Select(a => a.ColumnName)) .Select(pr => new QueryColumnHelpEmbedded { ColumnName = pr, Description = null, })); return(entity); })); }
public QueryHelpEntity GetEntity() { var cd = DBEntity?.Columns.ToDictionary(a => a.ColumnName, a => a.Description); var result = new QueryHelpEntity { Culture = this.Culture.ToCultureInfoEntity(), Query = QueryLogic.GetQueryEntity(this.QueryName), Description = DBEntity?.Description, Info = Info, Columns = this.Columns.Values.Where(a => a.Column.IsAllowed() == null) .Select(c => new QueryColumnHelpEmbedded { ColumnName = c.Column.Name, Description = cd?.TryGetCN(c.Column.Name) !, NiceName = c.NiceName, Info = c.Info, }).ToMList()
private static void CustomizeChartRequest() { var converters = PropertyConverter.GetPropertyConverters(typeof(ChartRequestModel)); converters.Remove("queryName"); converters.Add("queryKey", new PropertyConverter() { AvoidValidate = true, CustomReadJsonProperty = ctx => { ((ChartRequestModel)ctx.Entity).QueryName = QueryLogic.ToQueryName((string)ctx.JsonReader.Value); }, CustomWriteJsonProperty = ctx => { var cr = (ChartRequestModel)ctx.Entity; ctx.JsonWriter.WritePropertyName(ctx.LowerCaseName); ctx.JsonWriter.WriteValue(QueryLogic.GetQueryEntity(cr.QueryName).Key); } }); converters.Add("filters", new PropertyConverter() { AvoidValidate = true, CustomReadJsonProperty = ctx => { var list = (List <FilterTS>)ctx.JsonSerializer.Deserialize(ctx.JsonReader, typeof(List <FilterTS>)); var cr = (ChartRequestModel)ctx.Entity; var qd = QueryLogic.Queries.QueryDescription(cr.QueryName); cr.Filters = list.Select(l => l.ToFilter(qd, canAggregate: true)).ToList(); }, CustomWriteJsonProperty = ctx => { var cr = (ChartRequestModel)ctx.Entity; ctx.JsonWriter.WritePropertyName(ctx.LowerCaseName); ctx.JsonSerializer.Serialize(ctx.JsonWriter, cr.Filters.Select(f => FilterTS.FromFilter(f)).ToList()); } }); }
private static void CustomizeFiltersModel() { var converters = PropertyConverter.GetPropertyConverters(typeof(QueryModel)); converters.Remove("queryName"); converters.Add("queryKey", new PropertyConverter() { AvoidValidate = true, CustomReadJsonProperty = ctx => { ((QueryModel)ctx.Entity).QueryName = QueryLogic.ToQueryName((string)ctx.JsonReader.Value !); }, CustomWriteJsonProperty = ctx => { var cr = (QueryModel)ctx.Entity; ctx.JsonWriter.WritePropertyName(ctx.LowerCaseName); ctx.JsonWriter.WriteValue(QueryLogic.GetQueryEntity(cr.QueryName).Key); } });
internal static WordTemplateEntity CreateDefaultTemplate(SystemWordTemplateEntity systemWordReport) { SystemWordTemplateInfo info = systemWordReports.GetOrThrow(systemWordReport.ToType()); if (info.DefaultTemplateConstructor == null) { return(null); } WordTemplateEntity template = info.DefaultTemplateConstructor(); if (template.Name == null) { template.Name = systemWordReport.FullClassName; } template.SystemWordTemplate = systemWordReport; template.Query = QueryLogic.GetQueryEntity(info.QueryName); return(template); }
private static void CustomizeChartRequest() { var converters = SignumServer.WebEntityJsonConverterFactory.GetPropertyConverters(typeof(ChartRequestModel)); converters.Remove("queryName"); converters.Add("queryKey", new PropertyConverter() { AvoidValidate = true, CustomReadJsonProperty = (ref Utf8JsonReader reader, ReadJsonPropertyContext ctx) => { ((ChartRequestModel)ctx.Entity).QueryName = QueryLogic.ToQueryName(reader.GetString() !); }, CustomWriteJsonProperty = (Utf8JsonWriter writer, WriteJsonPropertyContext ctx) => { var cr = (ChartRequestModel)ctx.Entity; writer.WritePropertyName(ctx.LowerCaseName); writer.WriteStringValue(QueryLogic.GetQueryEntity(cr.QueryName).Key); } });
internal static EmailTemplateEntity CreateDefaultTemplate(SystemEmailEntity systemEmail) { SystemEmailInfo info = systemEmails.GetOrThrow(systemEmailToType.Value.GetOrThrow(systemEmail)); EmailTemplateEntity template = info.DefaultTemplateConstructor(); if (template.MasterTemplate != null) { template.MasterTemplate = EmailMasterTemplateLogic.GetDefaultMasterTemplate(); } if (template.Name == null) { template.Name = systemEmail.FullClassName; } template.SystemEmail = systemEmail; template.Query = QueryLogic.GetQueryEntity(info.QueryName); template.ParseData(DynamicQueryManager.Current.QueryDescription(info.QueryName)); return(template); }
public static List <SuggestedFindOptions> GetSuggestedFindOptions(Type type) { var schema = Schema.Current; var queries = QueryLogic.Queries; var table = schema.Tables.TryGetC(type); if (table == null) { return(new List <SuggestedFindOptions>()); } return((from t in Schema.Current.Tables.Values from c in t.Columns.Values where c.ReferenceTable == table where queries.TryGetQuery(t.Type) != null let parentColumn = GetParentColumnExpression(t.Fields, c)?.Let(s => "Entity." + s) where parentColumn != null select new SuggestedFindOptions( queryKey: QueryLogic.GetQueryEntity(t.Type).Key, parentToken: parentColumn )).ToList()); }
private static void CustomizeFiltersModel() { var converters = PropertyConverter.GetPropertyConverters(typeof(QueryModel)); converters.Remove("queryName"); converters.Add("queryKey", new PropertyConverter() { AvoidValidate = true, CustomReadJsonProperty = ctx => { ((QueryModel)ctx.Entity).QueryName = QueryLogic.ToQueryName((string)ctx.JsonReader.Value); }, CustomWriteJsonProperty = ctx => { var cr = (QueryModel)ctx.Entity; ctx.JsonWriter.WritePropertyName(ctx.LowerCaseName); ctx.JsonWriter.WriteValue(QueryLogic.GetQueryEntity(cr.QueryName).Key); } }); converters.Add("filters", new PropertyConverter() { AvoidValidate = true, CustomReadJsonProperty = ctx => { var list = (List <FilterTS>)ctx.JsonSerializer.Deserialize(ctx.JsonReader, typeof(List <FilterTS>)); var cr = (QueryModel)ctx.Entity; var qd = QueryLogic.Queries.QueryDescription(cr.QueryName); cr.Filters = list.Select(l => l.ToFilter(qd, canAggregate: true)).ToList(); }, CustomWriteJsonProperty = ctx => { var cr = (QueryModel)ctx.Entity; ctx.JsonWriter.WritePropertyName(ctx.LowerCaseName); ctx.JsonSerializer.Serialize(ctx.JsonWriter, cr.Filters.Select(f => FilterTS.FromFilter(f)).ToList()); } }); converters.Add("orders", new PropertyConverter() { AvoidValidate = true, CustomReadJsonProperty = ctx => { var list = (List <OrderTS>)ctx.JsonSerializer.Deserialize(ctx.JsonReader, typeof(List <OrderTS>)); var cr = (QueryModel)ctx.Entity; var qd = QueryLogic.Queries.QueryDescription(cr.QueryName); cr.Orders = list.Select(l => l.ToOrder(qd, canAggregate: true)).ToList(); }, CustomWriteJsonProperty = ctx => { var cr = (QueryModel)ctx.Entity; ctx.JsonWriter.WritePropertyName(ctx.LowerCaseName); ctx.JsonSerializer.Serialize(ctx.JsonWriter, cr.Orders.Select(f => new OrderTS { token = f.Token.FullKey(), orderType = f.OrderType })); } }); converters.Add("pagination", new PropertyConverter() { AvoidValidate = true, CustomReadJsonProperty = ctx => { var pagination = (PaginationTS)ctx.JsonSerializer.Deserialize(ctx.JsonReader, typeof(PaginationTS)); var cr = (QueryModel)ctx.Entity; cr.Pagination = pagination.ToPagination(); }, CustomWriteJsonProperty = ctx => { var cr = (QueryModel)ctx.Entity; ctx.JsonWriter.WritePropertyName(ctx.LowerCaseName); ctx.JsonSerializer.Serialize(ctx.JsonWriter, new PaginationTS(cr.Pagination)); } }); }
public QueryEntity GetQueryEntity(string queryName) { var qn = QueryLogic.ToQueryName(queryName); return(QueryLogic.GetQueryEntity(qn)); }
private static void CustomizeChartRequest() { var converters = PropertyConverter.GetPropertyConverters(typeof(ChartRequest)); converters.Remove("queryName"); converters.Add("queryKey", new PropertyConverter() { AvoidValidate = true, CustomReadJsonProperty = ctx => { ((ChartRequest)ctx.Entity).QueryName = QueryLogic.ToQueryName((string)ctx.JsonReader.Value); }, CustomWriteJsonProperty = ctx => { var cr = (ChartRequest)ctx.Entity; ctx.JsonWriter.WritePropertyName(ctx.LowerCaseName); ctx.JsonWriter.WriteValue(QueryLogic.GetQueryEntity(cr.QueryName).Key); } }); converters.Add("filters", new PropertyConverter() { AvoidValidate = true, CustomReadJsonProperty = ctx => { var list = (List <FilterTS>)ctx.JsonSerializer.Deserialize(ctx.JsonReader, typeof(List <FilterTS>)); var cr = (ChartRequest)ctx.Entity; var qd = DynamicQueryManager.Current.QueryDescription(cr.QueryName); cr.Filters = list.Select(l => l.ToFilter(qd, canAggregate: true)).ToList(); }, CustomWriteJsonProperty = ctx => { var cr = (ChartRequest)ctx.Entity; ctx.JsonWriter.WritePropertyName(ctx.LowerCaseName); ctx.JsonSerializer.Serialize(ctx.JsonWriter, cr.Filters.Select(f => new FilterTS { token = f.Token.FullKey(), operation = f.Operation, value = f.Value }).ToList()); } }); converters.Add("orders", new PropertyConverter() { AvoidValidate = true, CustomReadJsonProperty = ctx => { var list = (List <OrderTS>)ctx.JsonSerializer.Deserialize(ctx.JsonReader, typeof(List <OrderTS>)); var cr = (ChartRequest)ctx.Entity; var qd = DynamicQueryManager.Current.QueryDescription(cr.QueryName); cr.Orders = list.Select(l => l.ToOrder(qd, canAggregate: true)).ToList(); }, CustomWriteJsonProperty = ctx => { var cr = (ChartRequest)ctx.Entity; ctx.JsonWriter.WritePropertyName(ctx.LowerCaseName); ctx.JsonSerializer.Serialize(ctx.JsonWriter, cr.Orders.Select(f => new OrderTS { token = f.Token.FullKey(), orderType = f.OrderType })); } }); }
QueryEntity IFromXmlContext.GetQuery(string queryKey) { var qn = QueryLogic.ToQueryName(queryKey); return(QueryLogic.GetQueryEntity(qn)); }
public static void ImportPredictor() { using (AuthLogic.UnsafeUserSession("System")) { var predictor = new PredictorEntity { Name = "Product Estimation", Algorithm = TensorFlowPredictorAlgorithm.NeuralNetworkGraph, ResultSaver = PredictorSimpleResultSaver.Full, MainQuery = new PredictorMainQueryEmbedded { Query = QueryLogic.GetQueryEntity(typeof(OrderEntity)), GroupResults = true, Columns = { new PredictorColumnEmbedded { Usage = PredictorColumnUsage.Input, Token = new QueryTokenEmbedded("Entity.OrderDate.Year"), Encoding = DefaultColumnEncodings.NormalizeZScore }, new PredictorColumnEmbedded { Usage = PredictorColumnUsage.Input, Token = new QueryTokenEmbedded("Entity.OrderDate.Month"), Encoding = DefaultColumnEncodings.NormalizeZScore }, new PredictorColumnEmbedded { Usage = PredictorColumnUsage.Input, Token = new QueryTokenEmbedded("Entity.Details.Element.Product"), Encoding = DefaultColumnEncodings.OneHot }, new PredictorColumnEmbedded { Usage = PredictorColumnUsage.Output, Token = new QueryTokenEmbedded("Entity.Details.Element.Quantity.Sum"), Encoding = DefaultColumnEncodings.NormalizeZScore }, } }, Settings = new PredictorSettingsEmbedded { TestPercentage = 0.05, }, AlgorithmSettings = new NeuralNetworkSettingsEntity { PredictionType = PredictionType.Regression, Optimizer = TensorFlowOptimizer.GradientDescentOptimizer, LossFunction = NeuralNetworkEvalFunction.MeanSquaredError, EvalErrorFunction = NeuralNetworkEvalFunction.MeanAbsoluteError, LearningRate = 0.0001, MinibatchSize = 100, NumMinibatches = 1000, } }.ParseData().Execute(PredictorOperation.Save); predictor.TrainSync(); predictor.Execute(PredictorOperation.Publish, ProductPredictorPublication.MonthlySales); } }//ImportPredictor
public static void Start(IApplicationBuilder app) { UserAssetServer.Start(app); SignumControllerFactory.RegisterArea(MethodInfo.GetCurrentMethod()); CustomizeChartRequest(); SignumServer.WebEntityJsonConverterFactory.AfterDeserilization.Register((ChartRequestModel cr) => { if (cr.ChartScript != null) { cr.GetChartScript().SynchronizeColumns(cr, null); } if (cr.QueryName != null) { var qd = QueryLogic.Queries.QueryDescription(cr.QueryName); if (cr.Columns != null) { foreach (var c in cr.Columns) { c.ParseData(cr, qd, SubTokensOptions.CanElement | SubTokensOptions.CanAggregate); } } } }); SignumServer.WebEntityJsonConverterFactory.AfterDeserilization.Register((UserChartEntity uc) => { if (uc.ChartScript != null) { uc.GetChartScript().SynchronizeColumns(uc, null); } if (uc.Query != null) { var qd = QueryLogic.Queries.QueryDescription(uc.Query.ToQueryName()); uc.ParseData(qd); } }); UserChartEntity.SetConverters( query => QueryLogic.ToQueryName(query.Key), queryName => QueryLogic.GetQueryEntity(queryName)); EntityPackTS.AddExtension += ep => { if (ep.entity.IsNew || !ChartPermission.ViewCharting.IsAuthorized() || TypeAuthLogic.GetAllowed(typeof(UserChartEntity)).MaxDB() == TypeAllowedBasic.None) { return; } var userCharts = UserChartLogic.GetUserChartsEntity(ep.entity.GetType()); if (userCharts.Any()) { ep.extension.Add("userCharts", userCharts); } }; }
public static void Start(SchemaBuilder sb) { if (sb.NotDefined(MethodInfo.GetCurrentMethod())) { AuthLogic.AssertStarted(sb); QueryLogic.Start(sb); QueryLogic.Queries.AllowQuery += new Func <object, bool, bool>(dqm_AllowQuery); sb.Include <RuleQueryEntity>() .WithUniqueIndex(rt => new { rt.Resource, rt.Role }); cache = new AuthCache <RuleQueryEntity, QueryAllowedRule, QueryEntity, object, QueryAllowed>(sb, toKey: qn => QueryLogic.ToQueryName(qn.Key), toEntity: QueryLogic.GetQueryEntity, isEquals: (q1, q2) => q1 == q2, merger: new QueryMerger(), invalidateWithTypes: true, coercer: QueryCoercer.Instance); sb.Schema.EntityEvents <RoleEntity>().PreUnsafeDelete += query => { Database.Query <RuleQueryEntity>().Where(r => query.Contains(r.Role.Entity)).UnsafeDelete(); return(null); }; AuthLogic.ExportToXml += exportAll => cache.ExportXml("Queries", "Query", QueryUtils.GetKey, b => b.ToString(), exportAll ? QueryLogic.QueryNames.Values.ToList(): null); AuthLogic.ImportFromXml += (x, roles, replacements) => { string replacementKey = "AuthRules:" + typeof(QueryEntity).Name; replacements.AskForReplacements( x.Element("Queries") !.Elements("Role").SelectMany(r => r.Elements("Query")).Select(p => p.Attribute("Resource") !.Value).ToHashSet(), QueryLogic.QueryNames.Keys.ToHashSet(), replacementKey); return(cache.ImportXml(x, "Queries", "Query", roles, s => { var qn = QueryLogic.TryToQueryName(replacements.Apply(replacementKey, s)); if (qn == null) { return null; } return QueryLogic.GetQueryEntity(qn); }, str => { if (Enum.TryParse <QueryAllowed>(str, out var result)) { return result; } var bResult = bool.Parse(str); //For backwards compatibilityS return bResult ? QueryAllowed.Allow : QueryAllowed.None; })); }; sb.Schema.Table <QueryEntity>().PreDeleteSqlSync += new Func <Entity, SqlPreCommand>(AuthCache_PreDeleteSqlSync); } }
public static void Start(HttpConfiguration config) { UserAssetServer.Start(config); SignumControllerFactory.RegisterArea(MethodInfo.GetCurrentMethod()); CustomizeChartRequest(); PropertyConverter.GetPropertyConverters(typeof(ChartScriptParameterEmbedded)).Add("enumValues", new PropertyConverter() { CustomWriteJsonProperty = ctx => { var csp = (ChartScriptParameterEmbedded)ctx.Entity; if (csp.Type == ChartParameterType.Enum) { ctx.JsonWriter.WritePropertyName(ctx.LowerCaseName); ctx.JsonSerializer.Serialize(ctx.JsonWriter, csp.GetEnumValues().Select(a => new { name = a.Name, typeFilter = a.TypeFilter }).ToList()); } }, AvoidValidate = true, CustomReadJsonProperty = ctx => { var list = ctx.JsonSerializer.Deserialize(ctx.JsonReader); //Discard } }); EntityJsonConverter.AfterDeserilization.Register((ChartRequest cr) => { if (cr.ChartScript != null) { cr.ChartScript.SynchronizeColumns(cr); } if (cr.QueryName != null) { var qd = DynamicQueryManager.Current.QueryDescription(cr.QueryName); if (cr.Columns != null) { foreach (var c in cr.Columns) { c.ParseData(cr, qd, SubTokensOptions.CanElement | (c.IsGroupKey == false ? SubTokensOptions.CanAggregate : 0)); } } } }); EntityJsonConverter.AfterDeserilization.Register((UserChartEntity uc) => { if (uc.ChartScript != null) { uc.ChartScript.SynchronizeColumns(uc); } if (uc.Query != null) { var qd = DynamicQueryManager.Current.QueryDescription(uc.Query.ToQueryName()); uc.ParseData(qd); } }); UserChartEntity.SetConverters( query => QueryLogic.ToQueryName(query.Key), queryName => QueryLogic.GetQueryEntity(queryName)); EntityPackTS.AddExtension += ep => { if (ep.entity.IsNew || !ChartPermission.ViewCharting.IsAuthorized()) { return; } var userCharts = UserChartLogic.GetUserChartsEntity(ep.entity.GetType()); if (userCharts.Any()) { ep.Extension.Add("userCharts", userCharts); } }; }
public static void Start() { if (Navigator.Manager.NotDefined(MethodInfo.GetCurrentMethod())) { QueryClient.Start(); UserAssetsClient.Start(); UserAssetsClient.RegisterExportAssertLink <UserChartEntity>(); LinksClient.RegisterEntityLinks <UserChartEntity>((lite, ctx) => new[] { new QuickLinkAction(ChartMessage.Preview, RouteHelper.New().Action <ChartController>(cc => cc.ViewUserChart(lite, null))) { IsVisible = ChartPermission.ViewCharting.IsAuthorized() } }); Func <SubTokensOptions, Mapping <QueryTokenEmbedded> > qtMapping = ops => ctx => { string tokenStr = UserAssetsHelper.GetTokenString(ctx); string queryKey = ctx.Parent.Parent.Parent.Inputs[TypeContextUtilities.Compose("Query", "Key")]; object queryName = QueryLogic.ToQueryName(queryKey); var chart = ((UserChartEntity)ctx.Parent.Parent.Parent.UntypedValue); QueryDescription qd = DynamicQueryManager.Current.QueryDescription(queryName); return(new QueryTokenEmbedded(QueryUtils.Parse(tokenStr, qd, ops | (chart.GroupResults ? SubTokensOptions.CanAggregate : 0)))); }; Navigator.AddSettings(new List <EntitySettings> { new EntitySettings <UserChartEntity> { PartialViewName = _ => ChartClient.ViewPrefix.FormatWith("UserChart"), IsCreable = EntityWhen.Never } }); Navigator.EntitySettings <UserChartEntity>().MappingMain = Navigator.EntitySettings <UserChartEntity>().MappingLine = new EntityMapping <UserChartEntity>(true) .SetProperty(cb => cb.Columns, new ChartClient.MListCorrelatedOrDefaultMapping <ChartColumnEmbedded>(ChartClient.MappingChartColumn)) .SetProperty(cr => cr.Filters, new MListMapping <QueryFilterEmbedded> { ElementMapping = new EntityMapping <QueryFilterEmbedded>(false) .CreateProperty(a => a.Operation) .CreateProperty(a => a.ValueString) .SetProperty(a => a.Token, qtMapping(SubTokensOptions.CanAnyAll | SubTokensOptions.CanElement)) }) .SetProperty(cr => cr.Orders, new MListMapping <QueryOrderEmbedded> { ElementMapping = new EntityMapping <QueryOrderEmbedded>(false) .CreateProperty(a => a.OrderType) .SetProperty(a => a.Token, qtMapping(SubTokensOptions.CanAnyAll | SubTokensOptions.CanElement)) }) .SetProperty(cb => cb.Parameters, new MListDictionaryMapping <ChartParameterEmbedded, string>(p => p.Name) { OnlyIfPossible = true }); RouteTable.Routes.MapRoute(null, "UC/{webQueryName}/{lite}", new { controller = "Chart", action = "ViewUserChart" }); UserChartEntity.SetConverters(query => QueryLogic.ToQueryName(query.Key), queryName => QueryLogic.GetQueryEntity(queryName)); OperationClient.AddSetting(new EntityOperationSettings <UserChartEntity>(UserChartOperation.Delete) { Click = ctx => ChartClient.Module["deleteUserChart"](ctx.Options(), Finder.FindRoute(((UserChartEntity)ctx.Entity).Query.ToQueryName())), }); LinksClient.RegisterEntityLinks <Entity>((entity, ctrl) => { if (!ChartPermission.ViewCharting.IsAuthorized()) { return(null); } return(UserChartLogic.GetUserChartsEntity(entity.EntityType) .Select(cp => new UserChartQuickLink(cp, entity)).ToArray()); }); } }
public override void Execute() { DefineSection("head", () => { WriteLiteral("\r\n"); WriteLiteral(" "); #line 12 "..\..\Help\Views\ViewEntity.cshtml" Write(Html.ScriptCss("~/help/Content/help.css")); #line default #line hidden WriteLiteral("\r\n"); }); WriteLiteral("\r\n"); #line 15 "..\..\Help\Views\ViewEntity.cshtml" EntityHelp eh = (EntityHelp)Model; ViewBag.Title = eh.Type.NiceName(); #line default #line hidden WriteLiteral("\r\n\r\n"); WriteLiteral("\r\n\r\n<div"); WriteLiteral(" class=\"row\""); WriteLiteral(">\r\n <div"); WriteLiteral(" class=\"col-md-9\""); WriteLiteral(">\r\n"); #line 52 "..\..\Help\Views\ViewEntity.cshtml" #line default #line hidden #line 52 "..\..\Help\Views\ViewEntity.cshtml" using (TypeContext <EntityHelpEntity> ec = new TypeContext <EntityHelpEntity>(eh.Entity.Value, null)) { var name = Navigator.ResolveWebTypeName(eh.Type); ec.FormGroupStyle = FormGroupStyle.None; using (Html.BeginForm((HelpController hc) => hc.SaveEntity(), new { id = "form-save" })) { #line default #line hidden #line 60 "..\..\Help\Views\ViewEntity.cshtml" Write(Html.HiddenRuntimeInfo(ec)); #line default #line hidden #line 60 "..\..\Help\Views\ViewEntity.cshtml" #line default #line hidden #line 61 "..\..\Help\Views\ViewEntity.cshtml" Write(Html.HiddenRuntimeInfo(ec, e => e.Culture)); #line default #line hidden #line 61 "..\..\Help\Views\ViewEntity.cshtml" #line default #line hidden #line 62 "..\..\Help\Views\ViewEntity.cshtml" Write(Html.HiddenRuntimeInfo(ec, e => e.Type)); #line default #line hidden #line 62 "..\..\Help\Views\ViewEntity.cshtml" if (!Navigator.IsReadOnly(typeof(EntityHelpEntity))) { Html.RenderPartial(HelpClient.Buttons, new ViewDataDictionary { { "options", Database.Query <EntityHelpEntity>() .Where(e => e.Type == ec.Value.Type && e.Culture != ec.Value.Culture) .Select(e => new { e.Culture }) .ToList() .Select(e => KVP.Create(e.Culture.ToCultureInfo(), this.Url.Action((HelpController a) => a.TraslateEntity(e.Culture.Name)))) .ToDictionary() } }); } #line default #line hidden WriteLiteral(" <div"); WriteLiteral(" class=\"edit-container\""); WriteLiteral(">\r\n <h1"); WriteAttribute("title", Tuple.Create(" title=\"", 2876), Tuple.Create("\"", 2902) #line 76 "..\..\Help\Views\ViewEntity.cshtml" , Tuple.Create(Tuple.Create("", 2884), Tuple.Create <System.Object, System.Int32>(eh.Type.Namespace #line default #line hidden , 2884), false) ); WriteLiteral(">"); #line 76 "..\..\Help\Views\ViewEntity.cshtml" Write(eh.Type.NiceName()); #line default #line hidden WriteLiteral("</h1>\r\n <code"); WriteLiteral(" class=\'shortcut\'"); WriteLiteral(">[e:"); #line 77 "..\..\Help\Views\ViewEntity.cshtml" Write(name); #line default #line hidden WriteLiteral("]</code>\r\n <span"); WriteLiteral(" class=\"info\""); WriteLiteral(">\r\n"); WriteLiteral(" "); #line 79 "..\..\Help\Views\ViewEntity.cshtml" Write(Html.WikiParse(eh.Info, HelpWiki.DefaultWikiSettings)); #line default #line hidden WriteLiteral("\r\n </span>\r\n"); WriteLiteral(" "); #line 81 "..\..\Help\Views\ViewEntity.cshtml" Write(Html.TextArea(ec.SubContextPrefix(a => a.Description), eh.Description, 5, 80, new { @class = "editable" })); #line default #line hidden WriteLiteral("\r\n <span"); WriteLiteral(" class=\"wiki\""); WriteLiteral(">\r\n"); WriteLiteral(" "); #line 83 "..\..\Help\Views\ViewEntity.cshtml" Write(Html.WikiParse(eh.Description, HelpWiki.DefaultWikiSettings)); #line default #line hidden WriteLiteral("\r\n </span>\r\n </div>\r\n"); WriteLiteral(" <div"); WriteLiteral(" id=\"entityContent\""); WriteLiteral(" class=\"help_left\""); WriteLiteral(">\r\n"); #line 87 "..\..\Help\Views\ViewEntity.cshtml" #line default #line hidden #line 87 "..\..\Help\Views\ViewEntity.cshtml" var allowedProps = eh.Properties.Where(a => a.Value.IsAllowed() == null).ToDictionary(); #line default #line hidden WriteLiteral("\r\n\r\n"); #line 91 "..\..\Help\Views\ViewEntity.cshtml" #line default #line hidden #line 91 "..\..\Help\Views\ViewEntity.cshtml" if (allowedProps.Any()) { #line default #line hidden WriteLiteral(" <div"); WriteLiteral(" id=\"properties\""); WriteLiteral(">\r\n <h2"); WriteLiteral(" class=\"greyTitle\""); WriteLiteral(">"); #line 94 "..\..\Help\Views\ViewEntity.cshtml" Write(Html.PropertyNiceName(() => eh.Entity.Value.Properties)); #line default #line hidden WriteLiteral("</h2>\r\n"); #line 95 "..\..\Help\Views\ViewEntity.cshtml" #line default #line hidden #line 95 "..\..\Help\Views\ViewEntity.cshtml" var elementContexts = ec.TypeElementContext(e => e.Properties).ToDictionary(a => a.Value.Property.Path); var tuplesDic = allowedProps.Values.Select(p => Tuple.Create(p, elementContexts.GetOrThrow(p.PropertyRoute.PropertyString()))).ToDictionary(a => a.Item1.PropertyRoute); var roots = TreeHelper.ToTreeC(tuplesDic.Values, kvp => { var parent = kvp.Item1.PropertyRoute.Parent; if (parent.PropertyRouteType == PropertyRouteType.Root || parent.PropertyRouteType == PropertyRouteType.Mixin) { return(null); } if (parent.PropertyRouteType == PropertyRouteType.MListItems) { parent = parent.Parent; } return(tuplesDic.GetOrThrow(parent)); }); #line default #line hidden WriteLiteral("\r\n\r\n <dl"); WriteLiteral(" class=\"dl-horizontal\""); WriteLiteral(">\r\n"); #line 114 "..\..\Help\Views\ViewEntity.cshtml" #line default #line hidden #line 114 "..\..\Help\Views\ViewEntity.cshtml" foreach (var node in roots) { #line default #line hidden #line 116 "..\..\Help\Views\ViewEntity.cshtml" Write(WriteProperty(node, name)); #line default #line hidden #line 116 "..\..\Help\Views\ViewEntity.cshtml" ; } #line default #line hidden WriteLiteral(" </dl>\r\n </div>\r\n"); #line 120 "..\..\Help\Views\ViewEntity.cshtml" } #line default #line hidden WriteLiteral("\r\n"); #line 122 "..\..\Help\Views\ViewEntity.cshtml" #line default #line hidden #line 122 "..\..\Help\Views\ViewEntity.cshtml" var allowedOperations = eh.Operations.Where(a => a.Value.IsAllowed() == null).ToDictionary(); #line default #line hidden WriteLiteral("\r\n\r\n"); #line 126 "..\..\Help\Views\ViewEntity.cshtml" #line default #line hidden #line 126 "..\..\Help\Views\ViewEntity.cshtml" if (allowedOperations.Any()) { var operations = ec.TypeElementContext(e => e.Operations).ToDictionary(a => a.Value.Operation); #line default #line hidden WriteLiteral(" <div"); WriteLiteral(" id=\"operations\""); WriteLiteral(">\r\n <h2"); WriteLiteral(" class=\"greyTitle\""); WriteLiteral(">"); #line 131 "..\..\Help\Views\ViewEntity.cshtml" Write(Html.PropertyNiceName(() => eh.Entity.Value.Operations)); #line default #line hidden WriteLiteral("</h2>\r\n <dl"); WriteLiteral(" class=\"dl-horizontal\""); WriteLiteral(">\r\n"); #line 133 "..\..\Help\Views\ViewEntity.cshtml" #line default #line hidden #line 133 "..\..\Help\Views\ViewEntity.cshtml" foreach (var op in allowedOperations) { using (TypeElementContext <OperationHelpEntity> ctx = operations.GetOrThrow(op.Key)) { #line default #line hidden WriteLiteral(" <dt"); WriteAttribute("id", Tuple.Create(" id=\"", 5953), Tuple.Create("\"", 5987) #line 137 "..\..\Help\Views\ViewEntity.cshtml" , Tuple.Create(Tuple.Create("", 5958), Tuple.Create <System.Object, System.Int32>(HelpUrls.IdOperation(op.Key) #line default #line hidden , 5958), false) ); WriteLiteral(">"); #line 137 "..\..\Help\Views\ViewEntity.cshtml" Write(op.Key.NiceToString()); #line default #line hidden WriteLiteral("<code"); WriteLiteral(" class=\'shortcut\'"); WriteLiteral(">[o:"); #line 137 "..\..\Help\Views\ViewEntity.cshtml" Write(op.Key.Key); #line default #line hidden WriteLiteral("]</code></dt>\r\n"); WriteLiteral(" <dd>\r\n <span"); WriteLiteral(" class=\"info\""); WriteLiteral(">\r\n"); WriteLiteral(" "); #line 140 "..\..\Help\Views\ViewEntity.cshtml" Write(Html.WikiParse(op.Value.Info, HelpWiki.DefaultWikiSettings)); #line default #line hidden WriteLiteral("\r\n </span>\r\n"); WriteLiteral(" "); #line 142 "..\..\Help\Views\ViewEntity.cshtml" Write(Html.HiddenRuntimeInfo(ctx)); #line default #line hidden WriteLiteral("\r\n"); WriteLiteral(" "); #line 143 "..\..\Help\Views\ViewEntity.cshtml" Write(Html.HiddenRuntimeInfo(ctx, e => e.Culture)); #line default #line hidden WriteLiteral("\r\n"); WriteLiteral(" "); #line 144 "..\..\Help\Views\ViewEntity.cshtml" Write(Html.HiddenRuntimeInfo(ctx, a => a.Operation)); #line default #line hidden WriteLiteral("\r\n"); WriteLiteral(" "); #line 145 "..\..\Help\Views\ViewEntity.cshtml" Write(Html.TextArea(ctx.SubContextPrefix(a => a.Description), op.Value.UserDescription, new { @class = "editable" })); #line default #line hidden WriteLiteral("\r\n <span"); WriteLiteral(" class=\"wiki\""); WriteLiteral(">\r\n"); WriteLiteral(" "); #line 147 "..\..\Help\Views\ViewEntity.cshtml" Write(Html.WikiParse(op.Value.UserDescription, HelpWiki.DefaultWikiSettings)); #line default #line hidden WriteLiteral("\r\n </span>\r\n </" + "dd>\r\n"); #line 150 "..\..\Help\Views\ViewEntity.cshtml" } } #line default #line hidden WriteLiteral(" </dl>\r\n </div>\r\n"); #line 154 "..\..\Help\Views\ViewEntity.cshtml" } #line default #line hidden WriteLiteral("\r\n"); #line 156 "..\..\Help\Views\ViewEntity.cshtml" #line default #line hidden #line 156 "..\..\Help\Views\ViewEntity.cshtml" var allowedQueries = eh.Queries.Where(a => a.Value.IsAllowed() == null).ToDictionary(); #line default #line hidden WriteLiteral("\r\n\r\n"); #line 160 "..\..\Help\Views\ViewEntity.cshtml" #line default #line hidden #line 160 "..\..\Help\Views\ViewEntity.cshtml" if (allowedQueries.Any()) { var queries = ec.TypeElementContext(e => e.Queries).ToDictionary(a => a.Value.Query); #line default #line hidden WriteLiteral(" <div"); WriteLiteral(" id=\"queries\""); WriteLiteral(">\r\n <h2"); WriteLiteral(" class=\"greyTitle\""); WriteLiteral(">"); #line 165 "..\..\Help\Views\ViewEntity.cshtml" Write(typeof(QueryEntity).NicePluralName()); #line default #line hidden WriteLiteral("</h2>\r\n"); #line 166 "..\..\Help\Views\ViewEntity.cshtml" #line default #line hidden #line 166 "..\..\Help\Views\ViewEntity.cshtml" foreach (var mq in allowedQueries) { using (TypeElementContext <QueryHelpEntity> qctx = queries.GetOrThrow(QueryLogic.GetQueryEntity(mq.Key))) { #line default #line hidden #line 171 "..\..\Help\Views\ViewEntity.cshtml" Write(Html.HiddenRuntimeInfo(qctx)); #line default #line hidden #line 171 "..\..\Help\Views\ViewEntity.cshtml" #line default #line hidden #line 172 "..\..\Help\Views\ViewEntity.cshtml" Write(Html.HiddenRuntimeInfo(qctx, e => e.Culture)); #line default #line hidden #line 172 "..\..\Help\Views\ViewEntity.cshtml" #line default #line hidden #line 173 "..\..\Help\Views\ViewEntity.cshtml" Write(Html.HiddenRuntimeInfo(qctx, a => a.Query)); #line default #line hidden #line 173 "..\..\Help\Views\ViewEntity.cshtml" #line default #line hidden WriteLiteral(" <h3"); WriteAttribute("id", Tuple.Create(" id=\"", 8163), Tuple.Create("\"", 8193) #line 174 "..\..\Help\Views\ViewEntity.cshtml" , Tuple.Create(Tuple.Create("", 8168), Tuple.Create <System.Object, System.Int32>(HelpUrls.IdQuery(mq.Key) #line default #line hidden , 8168), false) ); WriteLiteral(">"); #line 174 "..\..\Help\Views\ViewEntity.cshtml" Write(QueryUtils.GetNiceName(mq.Key)); #line default #line hidden WriteLiteral("</h3>\r\n"); WriteLiteral(" <div"); WriteLiteral(" class=\"queryName\""); WriteLiteral(">\r\n <code"); WriteLiteral(" class=\'shortcut\'"); WriteLiteral(">[q:"); #line 176 "..\..\Help\Views\ViewEntity.cshtml" Write(QueryUtils.GetKey(mq.Key)); #line default #line hidden WriteLiteral("]</code>\r\n <span"); WriteLiteral(" class=\"info\""); WriteLiteral(">\r\n"); WriteLiteral(" "); #line 178 "..\..\Help\Views\ViewEntity.cshtml" Write(Html.WikiParse(mq.Value.Info, HelpWiki.DefaultWikiSettings)); #line default #line hidden WriteLiteral("\r\n </span>\r\n"); WriteLiteral(" "); #line 180 "..\..\Help\Views\ViewEntity.cshtml" Write(Html.TextArea(qctx.SubContextPrefix(a => a.Description), mq.Value.UserDescription, new { @class = "editable" })); #line default #line hidden WriteLiteral("\r\n <span"); WriteLiteral(" class=\"wiki\""); WriteLiteral(">\r\n"); WriteLiteral(" "); #line 182 "..\..\Help\Views\ViewEntity.cshtml" Write(Html.WikiParse(mq.Value.UserDescription, HelpWiki.DefaultWikiSettings)); #line default #line hidden WriteLiteral("\r\n </span>\r\n </div>\r\n"); #line 185 "..\..\Help\Views\ViewEntity.cshtml" var allowedColumn = mq.Value.Columns.Where(a => a.Value.IsAllowed() == null); if (allowedColumn.Any()) { var columns = qctx.TypeElementContext(a => a.Columns).ToDictionary(a => a.Value.ColumnName); #line default #line hidden WriteLiteral(" <dl"); WriteLiteral(" class=\"dl-horizontal columns\""); WriteLiteral(">\r\n"); #line 192 "..\..\Help\Views\ViewEntity.cshtml" #line default #line hidden #line 192 "..\..\Help\Views\ViewEntity.cshtml" foreach (var qc in allowedColumn) { using (var ctx = columns.GetOrThrow(qc.Value.Column.Name)) { #line default #line hidden #line 196 "..\..\Help\Views\ViewEntity.cshtml" Write(Html.HiddenRuntimeInfo(ctx)); #line default #line hidden #line 196 "..\..\Help\Views\ViewEntity.cshtml" #line default #line hidden WriteLiteral(" <dt>"); #line 197 "..\..\Help\Views\ViewEntity.cshtml" Write(qc.Value.NiceName); #line default #line hidden WriteLiteral("</dt>\r\n"); WriteLiteral(" <dd>\r\n " + " <span"); WriteLiteral(" class=\"info\""); WriteLiteral(">\r\n"); WriteLiteral(" "); #line 200 "..\..\Help\Views\ViewEntity.cshtml" Write(Html.WikiParse(qc.Value.Info, HelpWiki.DefaultWikiSettings)); #line default #line hidden WriteLiteral("\r\n </span>\r\n"); WriteLiteral(" "); #line 202 "..\..\Help\Views\ViewEntity.cshtml" Write(Html.Hidden(ctx.SubContextPrefix(a => a.ColumnName), ctx.Value.ColumnName)); #line default #line hidden WriteLiteral("\r\n"); WriteLiteral(" "); #line 203 "..\..\Help\Views\ViewEntity.cshtml" Write(Html.TextArea(ctx.SubContextPrefix(a => a.Description), ctx.Value.Description, new { @class = "editable" })); #line default #line hidden WriteLiteral("\r\n <span"); WriteLiteral(" class=\"wiki\""); WriteLiteral(">\r\n"); WriteLiteral(" "); #line 205 "..\..\Help\Views\ViewEntity.cshtml" Write(Html.WikiParse(qc.Value.UserDescription, HelpWiki.DefaultWikiSettings)); #line default #line hidden WriteLiteral("\r\n </span>\r\n " + " </dd>\r\n"); #line 208 "..\..\Help\Views\ViewEntity.cshtml" } } #line default #line hidden WriteLiteral(" </dl>\r\n"); #line 211 "..\..\Help\Views\ViewEntity.cshtml" } } } #line default #line hidden WriteLiteral(" </div>\r\n"); #line 216 "..\..\Help\Views\ViewEntity.cshtml" } #line default #line hidden WriteLiteral(" </div>\r\n"); #line 218 "..\..\Help\Views\ViewEntity.cshtml" } } #line default #line hidden WriteLiteral(" </div>\r\n\r\n <div"); WriteLiteral(" class=\"col-md-3\""); WriteLiteral(">\r\n"); #line 223 "..\..\Help\Views\ViewEntity.cshtml" #line default #line hidden #line 223 "..\..\Help\Views\ViewEntity.cshtml" Html.RenderPartial(HelpClient.MiniMenu, new ViewDataDictionary { { "type", eh.Type } }); #line default #line hidden WriteLiteral("\r\n </div>\r\n</div>\r\n"); }