using System.Linq; using CMS.CMSHelper; using CMS.SettingsProvider; using CMS.FormEngine; using CMS.FormControls; /// /// Class providing resolvers for IntelliSense and ConditionBuilders throughout the system. /// public static class ResolverFactory { #region "Methods" /// /// Returns static resolver if exists. /// /// Name of the resolver to return private static ContextResolver GetStaticResolver(string name) { switch (name.ToLowerCSafe()) { case "analyticsresolver": return EmailTemplateMacros.AnalyticsResolver; case "workflowbasedocumentresolver": return EmailTemplateMacros.WorkflowBaseDocumentResolver; case "workflowsimpledocumentresolver": return EmailTemplateMacros.WorkflowSimpleDocumentResolver; case "automationsimpleresolver": return EmailTemplateMacros.AutomationSimpleResolver; case "contactresolver": return EmailTemplateMacros.ContactResolver; case "contactactivityresolver": return EmailTemplateMacros.ContactActivityResolver; case "contactscoreresolver": return EmailTemplateMacros.ContactScoreResolver; case "variantresolver": return EmailTemplateMacros.VariantResolver; case "newsletterresolver": return EmailTemplateMacros.NewsletterResolver; case "newsletteroptinresolver": return EmailTemplateMacros.NewsletterOptInResolver; case "emailtemplateresolver": return EmailTemplateMacros.EmailTemplateResolver; case "bookingresolver": return EmailTemplateMacros.BookingResolver; case "deviceprofilesresolver": return EmailTemplateMacros.DeviceProfilesResolver; } return null; } /// /// Returns a resolver based on given name. /// /// Name of the resolver public static ContextResolver GetResolver(string name) { if (string.IsNullOrEmpty(name)) { return GetDefaultResolver(); } string key = name.ToLowerCSafe(); ContextResolver resolver = GetStaticResolver(name); if (resolver == null) { if (key.StartsWithCSafe("form.")) { resolver = GetFormResolver(key.Substring(5)); } else if (key.StartsWithCSafe("formdefinition.")) { resolver = GetFormDefinitionResolver(name.Substring(15)); } else { resolver = GetDefaultResolver(); } } return resolver.CreateContextChild(); } /// /// Returns new instance of resolver for given class (includes all fields, etc.). /// /// Name of the class private static ContextResolver GetFormResolver(string className) { DataClassInfo dc = DataClassInfoProvider.GetDataClass(className); if (dc != null) { return GetFormDefinitionResolver(dc.ClassFormDefinition); } return null; } /// /// Returns new instance of resolver based on given form definition. /// /// Form definition private static ContextResolver GetFormDefinitionResolver(string formDefinition) { FormInfo fi = new FormInfo(formDefinition); return GetFormResolver(fi); } /// /// Returns new instance of resolver for given class (includes all fields, etc.). /// /// FormInfo private static ContextResolver GetFormResolver(FormInfo formInfo) { ContextResolver mContextResolver = GetDefaultResolver(); var controlPlaceholder = new EditingFormControl(); foreach (var fieldInfo in formInfo.ItemsList.OfType()) { mContextResolver.SetNamedSourceData(fieldInfo.Name, controlPlaceholder); } return mContextResolver; } /// /// Returns resolver which should be used if not other is applicable. /// private static ContextResolver GetDefaultResolver() { return CMSContext.CurrentResolver.CreateContextChild(); } #endregion }