using System.Collections; using System.Data; using System; using CMS.CMSHelper; using CMS.DataEngine; using CMS.GlobalHelper; using CMS.PortalEngine; using CMS.SettingsProvider; using CMS.SiteProvider; using CMS.DocumentEngine; /// /// Class containing resolvers for specific types of e-mail templates. /// public static class EmailTemplateMacros { #region "Enumeration" /// /// Email type enumeration. Determines the type of a resolver used in the e-mail template. /// public enum EmailType { General, Automation, Blog, BlogSubscription, Boards, BoardsSubscription, BookingEvent, Ecommerce, EcommerceEproductExpiration, Forum, ForumSubscribtion, Friends, GroupMember, GroupInvitation, GroupMemberInvitation, Password, ProjectManagement, Messaging, Registration, RegistrationApproval, MembershipRegistration, MembershipExpiration, MembershipChangePassword, MembershipUnlockAccount, ForgottenPassword, Newsletter, WorkflowEmail, Scoring, TranslationServices, Reporting } #endregion #region "Variables" private static ContextResolver mEmailTemplateResolver = null; private static ContextResolver mShoppingCartResolver = null; private static ContextResolver mNewsletterResolver = null; private static ContextResolver mNewsletterOptInResolver = null; private static ContextResolver mEcommerceResolver = null; private static ContextResolver mEcommerceEproductExpirationResolver = null; private static ContextResolver mWorkflowBaseResolver = null; private static ContextResolver mWorkflowSimpleResolver = null; private static ContextResolver mWorkflowEmailResolver = null; private static ContextResolver mWorkflowBaseDocumentResolver = null; private static ContextResolver mWorkflowSimpleDocumentResolver = null; private static ContextResolver mAutomationSimpleResolver = null; private static ContextResolver mAutomationEmailResolver = null; private static ContextResolver mBlogResolver = null; private static ContextResolver mBlogSubscribeResolver = null; private static ContextResolver mBookingResolver = null; private static ContextResolver mForumsResolver = null; private static ContextResolver mForumsSubscribeResolver = null; private static ContextResolver mFriendsResolver = null; private static ContextResolver mMessagingResolver = null; private static ContextResolver mRegistrationResolver = null; private static ContextResolver mRegistrationApprovedResolver = null; private static ContextResolver mMembershipRegistrationResolver = null; private static ContextResolver mMembershipExpirationResolver = null; private static ContextResolver mPasswordResolver = null; private static ContextResolver mForgottenPasswordResolver = null; private static ContextResolver mGroupMemberResolver = null; private static ContextResolver mBoardsResolver = null; private static ContextResolver mBoardsSubscribeResolver = null; private static ContextResolver mGroupsInvitationResolver = null; private static ContextResolver mGroupsAcceptedInvitationResolver = null; private static ContextResolver mProjectManagementResolver = null; private static ContextResolver mScoringResolver = null; private static ContextResolver mTranslationsResolver = null; private static ContextResolver mContactResolver = null; private static ContextResolver mContactActivityResolver = null; private static ContextResolver mContactScoreResolver = null; private static ContextResolver mVariantResolver = null; private static ContextResolver mAnalyticsResolver = null; private static ContextResolver mMembershipChangePasswordResolver = null; private static ContextResolver mMembershipUnlockAccountResolver = null; private static ContextResolver mReportingResolver = null; private static ContextResolver mDeviceProfilesResolver = null; #endregion #region "Methods" /// /// Sets additional context values to resolver. /// /// Context resolver private static void SetContext(ContextResolver resolver) { resolver.Context.DisableContextObjectMacros = true; } /// /// Returns the EmailType enum constant from string representation. /// /// String representation of email type public static EmailType GetEmailTypeEnum(string emailType) { // Get a enum representation and return it as result switch (emailType.ToLowerCSafe()) { case "general": return EmailType.General; case "automation": return EmailType.Automation; case "blog": return EmailType.Blog; case "blogsubscription": return EmailType.BlogSubscription; case "boards": return EmailType.Boards; case "boardssubscription": return EmailType.BoardsSubscription; case "bookingevent": return EmailType.BookingEvent; case "ecommerce": return EmailType.Ecommerce; case "ecommerceeproductexpiration": return EmailType.EcommerceEproductExpiration; case "forum": return EmailType.Forum; case "forumsubscribtion": return EmailType.ForumSubscribtion; case "friends": return EmailType.Friends; case "groupmember": return EmailType.GroupMember; case "groupinvitation": return EmailType.GroupInvitation; case "groupmemberinvitation": return EmailType.GroupMemberInvitation; case "password": return EmailType.Password; case "projectmanagement": return EmailType.ProjectManagement; case "messaging": return EmailType.Messaging; case "registration": return EmailType.Registration; case "registrationapproval": return EmailType.RegistrationApproval; case "membershipregistration": return EmailType.MembershipRegistration; case "membershipexpiration": return EmailType.MembershipExpiration; case "forgottenpassword": return EmailType.ForgottenPassword; case "membershipchangepassword": return EmailType.MembershipChangePassword; case "membershipunlockaccount": return EmailType.MembershipUnlockAccount; case "newsletter": return EmailType.Newsletter; case "workflow": return EmailType.WorkflowEmail; case "scoring": return EmailType.Scoring; case "translationservices": return EmailType.TranslationServices; case "reporting": return EmailType.Reporting; default: return EmailType.General; } } /// /// Returns string representation of the EmailType enum constant. /// /// EmailType enum constant public static string GetEmailTypeString(EmailType emailType) { // Get a enum representation and return it as result switch (emailType) { case EmailType.General: return "general"; case EmailType.Automation: return "automation"; case EmailType.Blog: return "blog"; case EmailType.BlogSubscription: return "blogsubscription"; case EmailType.Boards: return "boards"; case EmailType.BoardsSubscription: return "boardssubscription"; case EmailType.BookingEvent: return "bookingevent"; case EmailType.Ecommerce: return "ecommerce"; case EmailType.EcommerceEproductExpiration: return "ecommerceeproductexpiration"; case EmailType.Forum: return "forum"; case EmailType.ForumSubscribtion: return "forumsubscribtion"; case EmailType.Friends: return "friends"; case EmailType.GroupMember: return "groupmember"; case EmailType.GroupInvitation: return "groupinvitation"; case EmailType.GroupMemberInvitation: return "groupmemberinvitation"; case EmailType.Password: return "password"; case EmailType.ProjectManagement: return "projectmanagement"; case EmailType.Messaging: return "messaging"; case EmailType.Registration: return "registration"; case EmailType.RegistrationApproval: return "registrationapproval"; case EmailType.MembershipRegistration: return "membershipregistration"; case EmailType.MembershipExpiration: return "membershipexpiration"; case EmailType.ForgottenPassword: return "forgottenpassword"; case EmailType.MembershipUnlockAccount: return "membershipunlockaccount"; case EmailType.Newsletter: return "newsletter"; case EmailType.WorkflowEmail: return "workflow"; case EmailType.MembershipChangePassword: return "membershipchangepassword"; case EmailType.Scoring: return "scoring"; case EmailType.TranslationServices: return "translationservices"; case EmailType.Reporting: return "reporting"; default: return "general"; } } /// /// Returns appropriate resolver for given e-mail type. /// /// E-mail type public static ContextResolver GetEmailTemplateResolver(EmailType type) { switch (type) { case EmailType.Automation: return AutomationEmailResolver; case EmailType.Blog: return BlogsResolver; case EmailType.BlogSubscription: return BlogSubscriptionResolver; case EmailType.Boards: return BoardsResolver; case EmailType.BoardsSubscription: return BoardsSubscriptionResolver; case EmailType.BookingEvent: return BookingResolver; case EmailType.Ecommerce: return EcommerceResolver; case EmailType.EcommerceEproductExpiration: return EcommerceEproductExpirationResolver; case EmailType.Forum: return ForumsResolver; case EmailType.ForumSubscribtion: return ForumsSubscribtionResolver; case EmailType.Friends: return FriendsResolver; case EmailType.GroupMember: return GroupMemberResolver; case EmailType.GroupInvitation: return GroupsInvitationResolver; case EmailType.GroupMemberInvitation: return GroupsAcceptedInvitationResolver; case EmailType.Password: return PasswordResolver; case EmailType.MembershipUnlockAccount: return MembershipUnlockAccountResolver; case EmailType.ProjectManagement: return ProjectManagement; case EmailType.Messaging: return MessagingResolver; case EmailType.Registration: return RegistrationResolver; case EmailType.RegistrationApproval: return RegistrationApprovedResolver; case EmailType.MembershipRegistration: return MembershipRegistrationResolver; case EmailType.MembershipExpiration: return MembershipExpirationResolver; case EmailType.ForgottenPassword: return ForgottenPasswordResolver; case EmailType.Newsletter: return NewsletterResolver; case EmailType.WorkflowEmail: return WorkflowEmailResolver; case EmailType.Scoring: return ScoringResolver; case EmailType.MembershipChangePassword: return MembershipChangePasswordResolver; case EmailType.TranslationServices: return TranslationsResolver; case EmailType.Reporting: return ReportingResolver; default: return EmailTemplateResolver; } } /// /// Reigsters flat values in the resolver (adds them to values which are already registered). /// /// Resolver object /// Names of the macros - values will be accessible by this names in the resolver private static void RegisterValues(this MacroResolver resolver, string[] names) { if ((resolver != null) && (names != null)) { object[,] sourceParameters = null; int i = 0; if (resolver.SourceParameters == null) { // Create new parameters sourceParameters = new string[names.Length, 2]; } else { // Add parameters to current resolver int currentSize = resolver.SourceParameters.GetUpperBound(0); sourceParameters = new string[names.Length + currentSize + 1, 2]; // Copy current values for (int j = 0; j <= currentSize; j++) { sourceParameters[j, 0] = resolver.SourceParameters[j, 0]; i++; } } foreach (string name in names) { sourceParameters[i++, 0] = name; } resolver.SourceParameters = sourceParameters; } } /// /// Registers NamedDataSource to a given resolver under the specified name. /// /// Resolver object /// Name of the macro - object will be accessible by this name in the resolver /// Class object to register private static void RegisterObject(this MacroResolver resolver, string name, object classObject) { resolver.SetNamedSourceData(name, classObject); } /// /// Registers NamedDataSource to a given resolver under the specified name. /// /// Resolver object /// Name of the macro - object will be accessible by this name in the resolver /// Class name of the object (for the AutoCompletion to work properly) private static void RegisterObject(this MacroResolver resolver, string name, string className) { BaseInfo obj = CMSObjectHelper.GetReadOnlyObject(className); if (obj != null) { resolver.SetNamedSourceData(name, obj); } else { resolver.SetNamedSourceData(name, DataClassFactory.NewDataClass(className)); } } #endregion #region "Resolvers" /// /// Newsletter resolver. /// public static ContextResolver NewsletterResolver { get { if (mNewsletterResolver == null) { ContextResolver resolver = ContextResolver.GetInstance(); resolver.RegisterObject("NewsletterIssue", PredefinedObjectType.NEWSLETTERISSUE); resolver.RegisterObject("Newsletter", PredefinedObjectType.NEWSLETTER); resolver.RegisterObject("Subscriber", PredefinedObjectType.NEWSLETTERSUBSCRIBER); resolver.SetNamedSourceData("Email", string.Empty); resolver.SetNamedSourceData("FirstName", string.Empty); resolver.SetNamedSourceData("LastName", string.Empty); resolver.SetNamedSourceData("UnsubscribeLink", string.Empty); // Disable context macros SetContext(resolver); mNewsletterResolver = resolver; } return mNewsletterResolver; } } /// /// Newsletter opt-in resolver. /// public static ContextResolver NewsletterOptInResolver { get { if (mNewsletterOptInResolver == null) { // Use data from Newsletter resolver ContextResolver resolver = NewsletterResolver.CreateContextChild(); // Set additional macros resolver.SetNamedSourceData("ActivationLink", string.Empty); // Disable context macros SetContext(resolver); mNewsletterOptInResolver = resolver; } return mNewsletterOptInResolver; } } /// /// Default e-mail template resolver. /// public static ContextResolver EmailTemplateResolver { get { if (mEmailTemplateResolver == null) { // Use data from ShoppingCart resolver ContextResolver resolver = ShoppingCartResolver.CreateContextChild(); // Add newsletter data resolver.RegisterObject("Newsletter_Subscriber", PredefinedObjectType.NEWSLETTERSUBSCRIBER); resolver.RegisterObject("Newsletter_Newsletter", PredefinedObjectType.NEWSLETTER); resolver.RegisterObject("Newsletter_NewsletterIssue", PredefinedObjectType.NEWSLETTERISSUE); // Set additional context macros resolver.CurrentDocument = TreeNode.New("CMS.root"); resolver.CurrentPageInfo = new PageInfo(); resolver.CurrentPageInfo.UsedPageTemplateInfo = new PageTemplateInfo(); // Disable context macros SetContext(resolver); mEmailTemplateResolver = resolver; } return mEmailTemplateResolver; } } /// /// Returns membership change password e-mail template macro resolver. /// public static ContextResolver MembershipChangePasswordResolver { get { if (mMembershipChangePasswordResolver == null) { ContextResolver resolver = ContextResolver.GetInstance(); resolver.RegisterValues(new string[] { "ResetPasswordUrl", "CancelUrl" }); // Disable context macros SetContext(resolver); mMembershipChangePasswordResolver = resolver; } return mMembershipChangePasswordResolver; } } /// /// Blog e-mail template macro resolver. /// public static ContextResolver BlogsResolver { get { if (mBlogResolver == null) { ContextResolver resolver = ContextResolver.GetInstance(); // Blog document type doesn't exists, fill with the root doc. type if (DataHelper.DataSourceIsEmpty(DataClassInfoProvider.GetDataClass("cms.blog"))) { resolver.RegisterObject("Blog", TreeNode.New("CMS.Root")); } else { resolver.RegisterObject("Blog", TreeNode.New("CMS.Blog")); } // BlogPost document type doesn't exists, fill with the root doc. type if (DataHelper.DataSourceIsEmpty(DataClassInfoProvider.GetDataClass("cms.blogpost"))) { resolver.RegisterObject("BlogPost", TreeNode.New("CMS.Root")); } else { resolver.RegisterObject("BlogPost", TreeNode.New("CMS.BlogPost")); } resolver.RegisterObject("Comment", PredefinedObjectType.BLOGCOMMENT); resolver.RegisterObject("CommentUser", PredefinedObjectType.USER); resolver.RegisterObject("CommentUserSettings", SiteObjectType.USERSETTINGS); // Register flat values resolver.RegisterValues(new string[] { "UserFullName", "CommentUrl", "Comments", "CommentDate", "BlogPostTitle", "BlogLink", "BlogPostLink", "UnsubscriptionLink" }); // Disable context macros SetContext(resolver); // Set BlogResolver mBlogResolver = resolver; } return mBlogResolver; } } /// /// Blog e-mail template macro resolver. /// public static ContextResolver BlogSubscriptionResolver { get { if (mBlogSubscribeResolver == null) { ContextResolver resolver = ContextResolver.GetInstance(); // Blog document type doesn't exists, fill with the root doc. type if (DataHelper.DataSourceIsEmpty(DataClassInfoProvider.GetDataClass("cms.blog"))) { resolver.RegisterObject("Blog", TreeNode.New("CMS.Root")); } else { resolver.RegisterObject("Blog", TreeNode.New("CMS.Blog")); } // BlogPost document type doesn't exists, fill with the root doc. type if (DataHelper.DataSourceIsEmpty(DataClassInfoProvider.GetDataClass("cms.blogpost"))) { resolver.RegisterObject("BlogPost", TreeNode.New("CMS.Root")); } else { resolver.RegisterObject("BlogPost", TreeNode.New("CMS.BlogPost")); } // Register flat values resolver.RegisterValues(new string[] { "UserFullName", "BlogPostTitle", "BlogLink", "BlogPostLink", "UnsubscriptionLink", "SubscriptionLink", "OptInInterval" }); // Disable context macros SetContext(resolver); // Set BlogResolver mBlogSubscribeResolver = resolver; } return mBlogSubscribeResolver; } } /// /// Project management e-mail template macro resolver. /// public static ContextResolver ProjectManagement { get { if (mProjectManagementResolver == null) { ContextResolver resolver = ContextResolver.GetInstance(); resolver.RegisterObject("ProjectTask", PredefinedObjectType.PROJECTTASK); resolver.RegisterObject("Project", PredefinedObjectType.PROJECT); resolver.RegisterObject("ProjectTaskStatus", PredefinedObjectType.PROJECTTASKSTATUS); resolver.SetNamedSourceData("Owner", PredefinedObjectType.USER); resolver.SetNamedSourceData("Assignee", PredefinedObjectType.USER); resolver.RegisterValues(new string[] { "TaskURL", "ProjectTaskDescriptionPlain", "ReminderMessage", "ReminderMessagePlain" }); // Disable context macros SetContext(resolver); mProjectManagementResolver = resolver; } return mProjectManagementResolver; } } /// /// Boards e-mail template macro resolver. /// public static ContextResolver BoardsResolver { get { if (mBoardsResolver == null) { ContextResolver resolver = ContextResolver.GetInstance(); resolver.RegisterObject("Board", "board.board"); resolver.RegisterObject("Message", "board.message"); resolver.RegisterObject("MessageUser", PredefinedObjectType.USER); resolver.RegisterObject("MessageUserSettings", SiteObjectType.USERSETTINGS); // Register flat values resolver.RegisterValues(new string[] { "UnsubscriptionLink", "DocumentLink" }); // Disable context macros SetContext(resolver); mBoardsResolver = resolver; } return mBoardsResolver; } } /// /// Boards subscription e-mail template macro resolver. /// public static ContextResolver BoardsSubscriptionResolver { get { if (mBoardsSubscribeResolver == null) { ContextResolver resolver = ContextResolver.GetInstance(); resolver.RegisterObject("Board", "board.board"); // Register flat values resolver.RegisterValues(new string[] { "UnsubscriptionLink", "SubscriptionLink", "OptInInterval", "DocumentLink" }); // Disable context macros SetContext(resolver); mBoardsSubscribeResolver = resolver; } return mBoardsSubscribeResolver; } } /// /// Booking e-mail template macro resolver. /// public static ContextResolver BookingResolver { get { if (mBookingResolver == null) { ContextResolver resolver = ContextResolver.GetInstance(); // Register "cms.bookingevent" object if exists if (CMSObjectHelper.GetReadOnlyObject("cms.bookingevent") != null) { resolver.RegisterObject("Event", "cms.bookingevent"); } resolver.RegisterObject("Attendee", "cms.eventattendee"); // Set additional macros resolver.SetNamedSourceData("EventDateString", string.Empty); // Disable context macros SetContext(resolver); mBookingResolver = resolver; } return mBookingResolver; } } /// /// Forums e-mail template macro resolver. /// public static ContextResolver ForumsResolver { get { if (mForumsResolver == null) { ContextResolver resolver = ContextResolver.GetInstance(); resolver.RegisterObject("ForumPost", PredefinedObjectType.FORUMPOST); resolver.RegisterObject("Forum", PredefinedObjectType.FORUM); resolver.RegisterObject("ForumGroup", PredefinedObjectType.FORUMGROUP); resolver.RegisterObject("Subscriber", "forums.forumsubscription"); resolver.RegisterValues(new string[] { "ForumDisplayName", "PostSubject", "Link", "ForumName", "PostText", "PostUsername", "PostTime", "GroupDisplayname", "GroupName", "GroupDescription", "ForumDescription", "UnsubscribeLink" }); // Disable context macros SetContext(resolver); mForumsResolver = resolver; } return mForumsResolver; } } /// /// Forums subscription e-mail template macro resolver. /// public static ContextResolver ForumsSubscribtionResolver { get { if (mForumsSubscribeResolver == null) { ContextResolver resolver = ContextResolver.GetInstance(); // Register objects resolver.RegisterObject("ForumPost", PredefinedObjectType.FORUMPOST); resolver.RegisterObject("Forum", PredefinedObjectType.FORUM); resolver.RegisterObject("ForumGroup", PredefinedObjectType.FORUMGROUP); // Register flat values resolver.RegisterValues(new string[] { "ForumDisplayName", "Subject", "Link", "UnsubscribeLink", "SubscribeLink", "Separator", "OptInInterval" }); // Disable context macros SetContext(resolver); // Save the resolver for future use mForumsSubscribeResolver = resolver; } return mForumsSubscribeResolver; } } /// /// Friends e-mail template macro resolver. /// public static ContextResolver FriendsResolver { get { if (mFriendsResolver == null) { ContextResolver resolver = ContextResolver.GetInstance(); resolver.RegisterObject("Sender", PredefinedObjectType.USER); resolver.RegisterObject("Recipient", PredefinedObjectType.USER); resolver.RegisterObject("Friendship", PredefinedObjectType.FRIEND); resolver.RegisterValues(new string[] { "ManagementUrl", "ProfileUrl", "FormatedSenderName", "FormatedRecipientName" }); // Disable context macros SetContext(resolver); mFriendsResolver = resolver; } return mFriendsResolver; } } /// /// Groups e-mail template macro resolver. /// public static ContextResolver GroupMemberResolver { get { if (mGroupMemberResolver == null) { ContextResolver resolver = ContextResolver.GetInstance(); resolver.RegisterObject("Group", PredefinedObjectType.GROUP); resolver.RegisterObject("MemberUser", PredefinedObjectType.USER); // Disable context macros SetContext(resolver); mGroupMemberResolver = resolver; } return mGroupMemberResolver; } } /// /// Groups invitation e-mail template macro resolver. /// public static ContextResolver GroupsInvitationResolver { get { if (mGroupsInvitationResolver == null) { ContextResolver resolver = ContextResolver.GetInstance(); resolver.RegisterObject("Invitation", "community.invitation"); resolver.RegisterObject("Group", PredefinedObjectType.GROUP); resolver.RegisterValues(new string[] { "AcceptionURL", "InvitedBy" }); // Disable context macros SetContext(resolver); mGroupsInvitationResolver = resolver; } return mGroupsInvitationResolver; } } /// /// Groups accepted invitation e-mail template macro resolver. /// public static ContextResolver GroupsAcceptedInvitationResolver { get { if (mGroupsAcceptedInvitationResolver == null) { ContextResolver resolver = ContextResolver.GetInstance(); resolver.RegisterObject("Sender", PredefinedObjectType.USER); resolver.RegisterObject("Recipient", PredefinedObjectType.USER); resolver.RegisterObject("GroupMember", PredefinedObjectType.GROUPMEMBER); resolver.RegisterObject("Group", PredefinedObjectType.GROUP); // Disable context macros SetContext(resolver); mGroupsAcceptedInvitationResolver = resolver; } return mGroupsAcceptedInvitationResolver; } } /// /// Password e-mail template macro resolver. /// public static ContextResolver PasswordResolver { get { if (mPasswordResolver == null) { ContextResolver resolver = RegistrationResolver.CreateContextChild(); resolver.RegisterValues(new string[] { "Password" }); // Disable context macros SetContext(resolver); mPasswordResolver = resolver; } return mPasswordResolver; } } /// /// Forgotten password e-mail template macro resolver. /// public static ContextResolver ForgottenPasswordResolver { get { if (mForgottenPasswordResolver == null) { ContextResolver resolver = PasswordResolver.CreateContextChild(); resolver.RegisterValues(new string[] { "LogonURL" }); mForgottenPasswordResolver = resolver; } return mForgottenPasswordResolver; } } /// /// Registration e-mail template macro resolver. /// public static ContextResolver RegistrationResolver { get { if (mRegistrationResolver == null) { ContextResolver resolver = ContextResolver.GetInstance(); resolver.RegisterValues(new string[] { "FirstName", "LastName", "Email", "UserName" }); // Disable context macros SetContext(resolver); mRegistrationResolver = resolver; } return mRegistrationResolver; } } /// /// Registration approved e-mail template macro resolver. /// public static ContextResolver RegistrationApprovedResolver { get { if (mRegistrationApprovedResolver == null) { ContextResolver resolver = ContextResolver.GetInstance(); resolver.RegisterValues(new string[] { "HomePageURL" }); // Disable context macros SetContext(resolver); mRegistrationApprovedResolver = resolver; } return mRegistrationApprovedResolver; } } /// /// Returns membership registration e-mail template macro resolver. /// public static ContextResolver MembershipRegistrationResolver { get { if (mMembershipRegistrationResolver == null) { ContextResolver resolver = PasswordResolver.CreateContextChild(); resolver.RegisterValues(new string[] { "ConfirmAddress" }); mMembershipRegistrationResolver = resolver; } return mMembershipRegistrationResolver; } } /// /// Returns membership expiration e-mail template macro resolver. /// public static ContextResolver MembershipExpirationResolver { get { if (mMembershipExpirationResolver == null) { ContextResolver resolver = ContextResolver.GetInstance(); // Expiring memberships resolver.SetNamedSourceData("MembershipsTable", (new DataTable()).Rows); // Disable context macros SetContext(resolver); mMembershipExpirationResolver = resolver; } return mMembershipExpirationResolver; } } /// /// Returns messaging e-mail template macro resolver. /// public static ContextResolver MessagingResolver { get { if (mMessagingResolver == null) { ContextResolver resolver = ContextResolver.GetInstance(); resolver.RegisterObject("Sender", PredefinedObjectType.USER); resolver.RegisterObject("Recipient", PredefinedObjectType.USER); resolver.RegisterObject("Message", "messaging.message"); resolver.RegisterValues(new string[] { "LogonUrl" }); // Disable context macros SetContext(resolver); mMessagingResolver = resolver; } return mMessagingResolver; } } /// /// Returns base empty workflow macro resolver. /// public static ContextResolver WorkflowBaseResolver { get { if (mWorkflowBaseResolver == null) { ContextResolver resolver = ContextResolver.GetInstance(); resolver.RegisterObject("CurrentUser", PredefinedObjectType.USER); // Disable context macros SetContext(resolver); mWorkflowBaseResolver = resolver; } return mWorkflowBaseResolver; } } /// /// Returns base empty workflow macro resolver with document field. /// public static ContextResolver WorkflowBaseDocumentResolver { get { if (mWorkflowBaseDocumentResolver == null) { ContextResolver resolver = WorkflowBaseResolver.CreateContextChild(); resolver.RegisterObject("Document", TreeNode.New("CMS.Root")); // Disable context macros SetContext(resolver); mWorkflowBaseDocumentResolver = resolver; } return mWorkflowBaseDocumentResolver; } } /// /// Returns simple empty workflow macro resolver. /// public static ContextResolver WorkflowSimpleResolver { get { if (mWorkflowSimpleResolver == null) { ContextResolver resolver = WorkflowBaseResolver.CreateContextChild(); resolver.RegisterObject("CurrentStep", PredefinedObjectType.WORKFLOWSTEP); resolver.RegisterObject("Workflow", PredefinedObjectType.WORKFLOW); resolver.RegisterObject("ActionDefinition", PredefinedObjectType.WORKFLOWACTION); // Disable context macros SetContext(resolver); mWorkflowSimpleResolver = resolver; } return mWorkflowSimpleResolver; } } /// /// Returns simple workflow macro resolver with document field. /// public static ContextResolver WorkflowSimpleDocumentResolver { get { if (mWorkflowSimpleDocumentResolver == null) { ContextResolver resolver = WorkflowSimpleResolver.CreateContextChild(); resolver.RegisterObject("Document", TreeNode.New("CMS.Root")); // Disable context macros SetContext(resolver); mWorkflowSimpleDocumentResolver = resolver; } return mWorkflowSimpleDocumentResolver; } } /// /// Returns simple automation macro resolver with Contact field. /// public static ContextResolver AutomationSimpleResolver { get { if (mAutomationSimpleResolver == null) { ContextResolver resolver = WorkflowSimpleResolver.CreateContextChild(); resolver.RegisterObject("Contact", PredefinedObjectType.CONTACT); resolver.RegisterObject("AutomationState", PredefinedObjectType.AUTOMATIONSTATE); // Disable context macros SetContext(resolver); mAutomationSimpleResolver = resolver; } return mAutomationSimpleResolver; } } /// /// Returns automation e-mail macro resolver with On-line marketing fields. /// public static ContextResolver AutomationEmailResolver { get { if (mAutomationSimpleResolver == null) { ContextResolver resolver = AutomationSimpleResolver.CreateContextChild(); resolver.RegisterObject("Score", PredefinedObjectType.SCORE); resolver.RegisterObject("Activity", PredefinedObjectType.ACTIVITY); // Disable context macros SetContext(resolver); mAutomationEmailResolver = resolver; } return mAutomationEmailResolver; } } /// /// Returns workflow e-mail template macro resolver. /// public static ContextResolver WorkflowEmailResolver { get { if (mWorkflowEmailResolver == null) { ContextResolver resolver = WorkflowSimpleResolver.CreateContextChild(); resolver.RegisterObject("Document", TreeNode.New("CMS.root")); resolver.RegisterObject("OriginalStep", PredefinedObjectType.WORKFLOWSTEP); resolver.RegisterValues(new string[] { "ApplicationURL", "ApprovedBy", "ApprovedWhen", "OriginalStepName", "CurrentStepName", "Comment", "FirstName", "LastName", "UserName", "Email", "FullName", "DocumentPreviewUrl", "DocumentEditUrl", "DocumentActionName" }); // Prioritized properties resolver.PrioritizeProperty("ApplicationURL"); resolver.PrioritizeProperty("Comment"); resolver.PrioritizeProperty("DocumentPreviewUrl"); resolver.PrioritizeProperty("DocumentEditUrl"); resolver.PrioritizeProperty("DocumentActionName"); // Disable context macros SetContext(resolver); mWorkflowEmailResolver = resolver; } return mWorkflowEmailResolver; } } /// /// Returns scoring e-mail template macro resolver. /// public static ContextResolver ScoringResolver { get { if (mScoringResolver == null) { ContextResolver resolver = ContactResolver.CreateContextChild(); resolver.RegisterObject("Score", "om.score"); resolver.SetNamedSourceData("ScoreValue", string.Empty); mScoringResolver = resolver; } return mScoringResolver; } } /// /// Returns translation services e-mail template macro resolver. /// public static ContextResolver TranslationsResolver { get { if (mTranslationsResolver == null) { ContextResolver resolver = ContactResolver.CreateContextChild(); resolver.RegisterObject("Submission", "cms.translationsubmission"); mTranslationsResolver = resolver; } return mTranslationsResolver; } } /// /// Returns contact resolver. /// public static ContextResolver ContactResolver { get { if (mContactResolver == null) { ContextResolver resolver = ContextResolver.GetInstance(); resolver.RegisterObject("Contact", "OM.Contact"); // Disable context macros SetContext(resolver); mContactResolver = resolver; } return mContactResolver; } } /// /// Returns contact activity resolver (for trigger macro). /// public static ContextResolver ContactActivityResolver { get { if (mContactActivityResolver == null) { ContextResolver resolver = ContactResolver.CreateContextChild(); resolver.RegisterObject("Activity", "OM.Activity"); mContactActivityResolver = resolver; } return mContactActivityResolver; } } /// /// Returns contact score resolver (for trigger macro). /// public static ContextResolver ContactScoreResolver { get { if (mContactScoreResolver == null) { ContextResolver resolver = ContactResolver.CreateContextChild(); resolver.RegisterObject("Score", "OM.Score"); mContactScoreResolver = resolver; } return mContactScoreResolver; } } /// /// Returns variant resolver. /// public static ContextResolver VariantResolver { get { if (mVariantResolver == null) { ContextResolver resolver = ContextResolver.GetInstance(); resolver.PrioritizeProperty("CurrentUser"); resolver.PrioritizeProperty("OnlineMarketingContext"); resolver.PrioritizeProperty("CurrentDevice"); mVariantResolver = resolver; } return mVariantResolver; } } /// /// Returns web analytics resolver. /// public static ContextResolver AnalyticsResolver { get { if (mAnalyticsResolver == null) { ContextResolver resolver = ContextResolver.GetInstance(); resolver.PrioritizeProperty("CurrentUser"); resolver.PrioritizeProperty("OnlineMarketingContext"); resolver.PrioritizeProperty("CurrentDevice"); mAnalyticsResolver = resolver; } return mAnalyticsResolver; } } /// /// Returns membership unlock account e-mail template macro resolver. /// public static ContextResolver MembershipUnlockAccountResolver { get { if (mMembershipUnlockAccountResolver == null) { ContextResolver resolver = ContextResolver.GetInstance(); resolver.RegisterObject("User", PredefinedObjectType.USER); resolver.RegisterValues(new string[] { "ResetPasswordUrl", "UnlockAccountUrl" }); resolver.PrioritizeProperty("ResetPasswordUrl"); resolver.PrioritizeProperty("UnlockAccountUrl"); // Disable context macros SetContext(resolver); mMembershipUnlockAccountResolver = resolver; } return mMembershipUnlockAccountResolver; } } /// /// Returns reporting e-mail template macro resolver. /// public static ContextResolver ReportingResolver { get { if (mReportingResolver == null) { ContextResolver resolver = ContextResolver.GetInstance(); resolver.RegisterObject("Report", PredefinedObjectType.REPORT); resolver.RegisterObject("ReportSubscription", PredefinedObjectType.REPORTSUBSCRIPTION); resolver.SetNamedSourceData("SubscriptionBody", String.Empty); resolver.SetNamedSourceData("DefaultSubscriptionCSS", String.Empty); resolver.SetNamedSourceData("UnsubscriptionLink", String.Empty); resolver.SetNamedSourceData("ItemName", String.Empty); // Disable context macros SetContext(resolver); mReportingResolver = resolver; } return mReportingResolver; } } /// /// Returns device profiles macro resolver. /// public static ContextResolver DeviceProfilesResolver { get { if (mDeviceProfilesResolver == null) { ContextResolver resolver = ContextResolver.GetInstance(); resolver.PrioritizeProperty("CurrentDevice"); resolver.ShowOnlyPrioritized = true; mDeviceProfilesResolver = resolver; } return mDeviceProfilesResolver; } } #endregion #region "E-commerce resolvers" /// /// Shopping cart resolver. /// public static ContextResolver ShoppingCartResolver { get { if (mShoppingCartResolver == null) { ContextResolver resolver = ContextResolver.GetInstance(); // Data resolver.RegisterObject("Order", PredefinedObjectType.ORDER); resolver.RegisterObject("OrderStatus", PredefinedObjectType.ORDERSTATUS); resolver.RegisterObject("BillingAddress", "ecommerce.address"); resolver.RegisterObject("ShippingAddress", "ecommerce.address"); resolver.RegisterObject("CompanyAddress", "ecommerce.address"); resolver.RegisterObject("ShippingOption", PredefinedObjectType.SHIPPINGOPTION); resolver.RegisterObject("PaymentOption", PredefinedObjectType.PAYMENTOPTION); resolver.RegisterObject("Currency", PredefinedObjectType.CURRENCY); resolver.RegisterObject("Customer", PredefinedObjectType.CUSTOMER); resolver.RegisterObject("DiscountCoupon", PredefinedObjectType.DISCOUNTCOUPON); resolver.RegisterObject("ShoppingCart", "ecommerce.shoppingcart"); // Content tables DataTable table = new DataTable(); resolver.SetNamedSourceData("ContentTable", table.Rows); resolver.SetNamedSourceData("ContentTaxesTable", table.Rows); resolver.SetNamedSourceData("ShippingTaxesTable", table.Rows); // E-product table resolver.SetNamedSourceData("EproductsTable", table.Rows); // Disable context macros SetContext(resolver); mShoppingCartResolver = resolver; } return mShoppingCartResolver; } } /// /// E-commerce e-mail template macro resolver. /// public static ContextResolver EcommerceResolver { get { if (mEcommerceResolver == null) { // Copy all the data from ShoppingCart resolver ContextResolver resolver = ShoppingCartResolver.CreateContextChild(); resolver.RegisterValues(new string[] { "TotalPrice", "TotalShipping", "NewOrderLink" }); mEcommerceResolver = resolver; } return mEcommerceResolver; } } /// /// E-commerce expiring e-product e-mail template macro resolver. /// public static ContextResolver EcommerceEproductExpirationResolver { get { if (mEcommerceEproductExpirationResolver == null) { ContextResolver resolver = ContextResolver.GetInstance(); // Expriring e-products resolver.SetNamedSourceData("EproductsTable", (new DataTable()).Rows); // Disable context macros SetContext(resolver); mEcommerceEproductExpirationResolver = resolver; } return mEcommerceEproductExpirationResolver; } } #endregion }