public static List <CampaignLog> ProcessXmlFilter(Guid CampaignId, string trackKey, int attemp, string xmlFilter, int portalId) { List <CampaignLog> listResult = new List <CampaignLog>(); MailContainer mailContainer; try { mailContainer = new MailContainer(); XmlSerializer serializer = new XmlSerializer(mailContainer.GetType()); MemoryStream memoryStream = new MemoryStream(Encoding.ASCII.GetBytes(xmlFilter)); mailContainer = (MailContainer)serializer.Deserialize(memoryStream); StringBuilder queryPotentialUser = new StringBuilder(); StringBuilder queryUser = new StringBuilder(); StringBuilder queryOrganization = new StringBuilder(); StringBuilder querySolution = new StringBuilder(); MIFNEXSOEntities ent = new MIFNEXSOEntities(); foreach (MailFilter mailFilter in mailContainer.MailFilter) { switch (mailFilter.Table) { case "PotentialUsers": { switch (mailFilter.Field) { case "Country": { queryPotentialUser.Append(GetSqlClause(mailFilter)); break; } case "Language": { queryPotentialUser.Append(GetSqlClause(mailFilter)); break; } case "Source": { queryPotentialUser.Append(GetSqlClause(mailFilter)); break; } } break; } case "UserProperties": { switch (mailFilter.Field) { case "Country": { queryUser.Append(GetSqlClause(mailFilter)); break; } case "Language": { queryUser.Append(GetSqlClause(mailFilter)); break; } //case "CustomerType": // { // break; // } case "[AllowNexsoNotifications]": { if (mailFilter.FilterValue.Count > 0) { if (mailFilter.FilterValue[0] == "1") { queryUser.Append(GetSqlClause(mailFilter)); } } break; } } break; } case "UserPropertiesLists": { switch (mailFilter.Field) { case "[Key]": { queryUser.Append(GetSqlClause(mailFilter)); break; } } break; } case "Organization": { switch (mailFilter.Field) { case "Country": { queryOrganization.Append(GetSqlClause(mailFilter)); break; } } break; } case "Solution": { switch (mailFilter.Field) { case "Language": { querySolution.Append(GetSqlClause(mailFilter)); break; } case "ChallengeReference": { querySolution.Append(GetSqlClause(mailFilter)); break; } case "SolutionState": { querySolution.Append(GetSqlClause(mailFilter)); break; } case "FUNC:GetScore(Solution.SolutionId,'JUDGE')": { querySolution.Append(GetSqlClause(mailFilter)); break; } case "FUNC:WordCount(Solution.SolutionId)": { querySolution.Append(GetSqlClause(mailFilter)); break; } } break; } } } foreach (MailFilter mailFilter in mailContainer.MailFilter) { switch (mailFilter.Table) { case "&&1": { switch (mailFilter.Field) { case "UsePotentialUser": { if (mailFilter.FilterValue[0] == "0") { queryPotentialUser = null; } break; } case "UseUser": { if (mailFilter.FilterValue[0] == "0") { queryUser = null; } break; } case "UseOrganization": { if (mailFilter.FilterValue[0] == "0") { queryOrganization = null; } break; } case "UseSolution": { if (mailFilter.FilterValue[0] == "0") { querySolution = null; } break; } } break; } } } List <UserProperty> queryPotentialUserEntity = null; IEnumerable <PotentialUser> queryPotentialUserEntityInt = null; IEnumerable <UserProperty> querySolutionEntity = null; IEnumerable <UserProperty> queryUserEntity = null; IEnumerable <UserProperty> queryOrganizationEntity = null; if (queryPotentialUser != null) { queryPotentialUser.Insert(0, " SELECT * FROM POTENTIALUSERS" + " where 1=1 "); queryPotentialUserEntityInt = ent.ExecuteStoreQuery <PotentialUser>(queryPotentialUser.ToString()); queryPotentialUserEntity = new List <UserProperty>(); foreach (var item in queryPotentialUserEntityInt) { queryPotentialUserEntity.Add(new UserProperty() { email = item.Email, FirstName = item.FirstName, LastName = item.LastName } ); } } if (queryUser != null) { queryUser.Insert(0, " SELECT UserProperties.* " + " FROM UserProperties left JOIN UserPropertiesLists ON UserProperties.UserId = UserPropertiesLists.UserPropertyId" + " where 1=1 "); queryUserEntity = ent.ExecuteStoreQuery <UserProperty>(queryUser.ToString()); } if (queryOrganization != null) { queryOrganization.Insert(0, " SELECT UserProperties.* " + " FROM Organization INNER JOIN UserOrganization ON Organization.OrganizationID = UserOrganization.OrganizationID " + " INNER JOIN UserProperties ON UserOrganization.UserID = UserProperties.UserId" + " where 1=1 "); queryOrganizationEntity = ent.ExecuteStoreQuery <UserProperty>(queryOrganization.ToString()); } if (querySolution != null) { querySolution.Insert(0, " SELECT UserProperties.* FROM Solution INNER JOIN UserProperties ON Solution.CreatedUserId = UserProperties.UserId " + " where 1=1 "); querySolutionEntity = ent.ExecuteStoreQuery <UserProperty>(querySolution.ToString()); } IEnumerable <UserProperty> resultfinal = queryUserEntity; if (queryOrganizationEntity != null) { if (resultfinal == null) { resultfinal = queryOrganizationEntity; } else { resultfinal = resultfinal.Concat(queryOrganizationEntity); } } if (querySolutionEntity != null) { if (resultfinal == null) { resultfinal = querySolutionEntity; } else { resultfinal = resultfinal.Concat(querySolutionEntity); } } if (queryPotentialUserEntity != null) { if (resultfinal == null) { resultfinal = queryPotentialUserEntity; } else { resultfinal = resultfinal.Concat(queryPotentialUserEntity); } } CampaignComponent campaign = new CampaignComponent(CampaignId); if (mailContainer.UserProperty.Count > 0) { if (resultfinal == null) { resultfinal = mailContainer.UserProperty; } else { resultfinal = resultfinal.Concat(mailContainer.UserProperty).ToList(); } } if (resultfinal != null) { var comparer = new UserComparer(); foreach (var item in resultfinal.Distinct(comparer).ToList()) { try { var user = UserController.GetUserById(portalId, item.UserId); listResult.Add(getCampaignLog(campaign, item, user)); } catch (Exception) { } } } } catch (Exception) { } return(listResult); }
private static CampaignLog getCampaignLog(CampaignComponent campaign, UserProperty userProperty, UserInfo user) { CampaignLog return_ = new CampaignLog(); string mail = userProperty.email; if (user != null) { mail = user.Email; } string template = campaign.Campaign.CampaignTemplate.TemplateContent; if (!string.IsNullOrEmpty(template)) { template = template.Replace("{USER:UserId}", userProperty.UserId.ToString()); template = template.Replace("{USER:Agreement}", userProperty.Agreement); template = template.Replace("{USER:SkypeName} ", userProperty.SkypeName); template = template.Replace("{USER:Twitter}", userProperty.Twitter); template = template.Replace("{USER:FaceBook}", userProperty.FaceBook); template = template.Replace("{USER:Google}", userProperty.Google); template = template.Replace("{USER:LinkedIn}", userProperty.LinkedIn); template = template.Replace("{USER:OtherSocialNetwork} ", userProperty.OtherSocialNetwork); template = template.Replace("{USER:City}", userProperty.City); template = template.Replace("{USER:Region}", userProperty.Region); template = template.Replace("{USER:Country}", userProperty.Country); template = template.Replace("{USER:PostalCode}", userProperty.PostalCode); template = template.Replace("{USER:Telephone} ", userProperty.Telephone); template = template.Replace("{USER:Address}", userProperty.Address); template = template.Replace("{USER:FirstName}", userProperty.FirstName); template = template.Replace("{USER:LastName}", userProperty.LastName); template = template.Replace("{USER:email}", mail); template = template.Replace("{USER:CustomerType}", userProperty.CustomerType.ToString()); template = template.Replace("{USER:NexsoEnrolment}", userProperty.FirstName); template = template.Replace("{USER:AllowNexsoNotifications}", userProperty.AllowNexsoNotifications.ToString()); template = template.Replace("{USER:Language}", userProperty.Language.ToString()); template = template.Replace("{USER:Latitude}", userProperty.Latitude.ToString()); template = template.Replace("{USER:Longitude}", userProperty.Longitude.ToString()); template = template.Replace("{USER:GoogleLocation}", userProperty.GoogleLocation); } return_.MailContent = template; template = campaign.Campaign.CampaignTemplate.TemplateSubject; if (!string.IsNullOrEmpty(template)) { template = template.Replace("{USER:UserId}", userProperty.UserId.ToString()); template = template.Replace("{USER:Agreement}", userProperty.Agreement); template = template.Replace("{USER:SkypeName} ", userProperty.SkypeName); template = template.Replace("{USER:Twitter}", userProperty.Twitter); template = template.Replace("{USER:FaceBook}", userProperty.FaceBook); template = template.Replace("{USER:Google}", userProperty.Google); template = template.Replace("{USER:LinkedIn}", userProperty.LinkedIn); template = template.Replace("{USER:OtherSocialNetwork} ", userProperty.OtherSocialNetwork); template = template.Replace("{USER:City}", userProperty.City); template = template.Replace("{USER:Region}", userProperty.Region); template = template.Replace("{USER:Country}", userProperty.Country); template = template.Replace("{USER:PostalCode}", userProperty.PostalCode); template = template.Replace("{USER:Telephone} ", userProperty.Telephone); template = template.Replace("{USER:Address}", userProperty.Address); template = template.Replace("{USER:FirstName}", userProperty.FirstName); template = template.Replace("{USER:LastName}", userProperty.LastName); template = template.Replace("{USER:email}", mail); template = template.Replace("{USER:CustomerType}", userProperty.CustomerType.ToString()); template = template.Replace("{USER:NexsoEnrolment}", userProperty.FirstName); template = template.Replace("{USER:AllowNexsoNotifications}", userProperty.AllowNexsoNotifications.ToString()); template = template.Replace("{USER:Language}", userProperty.Language.ToString()); template = template.Replace("{USER:Latitude}", userProperty.Latitude.ToString()); template = template.Replace("{USER:Longitude}", userProperty.Longitude.ToString()); template = template.Replace("{USER:GoogleLocation}", userProperty.GoogleLocation); } return_.MailSubject = template; return_.email = mail; return_.userId = userProperty.UserId; return_.CreatedOn = DateTime.Now; return_.CampaignLogId = Guid.NewGuid(); return(return_); }
public override void DoWork() { try { DateTime dateTime = DateTime.Now; List <Campaign> listCampaign = CampaignComponent.GetCampaigns().ToList(); if (listCampaign != null && listCampaign.Count > 0) { listCampaign = listCampaign.Where(a => a.Deleted == false && a.Status != "Inactive").ToList(); if (listCampaign != null && listCampaign.Count > 0) { foreach (Campaign campaignItem in listCampaign) { if (Convert.ToDateTime(campaignItem.NextExecution) < DateTime.Now) { CampaignComponent campaignComponent = new CampaignComponent(campaignItem.CampaignId); var result = MailServices.ProcessXmlFilter(campaignItem.CampaignId, "", 0, campaignItem.FilterTemplate, 0); var createdOn = DateTime.Now; foreach (var item in result) { MailServices.CreateMailLog((Guid)campaignItem.CampaignId, campaignComponent.Campaign.TrackKey, campaignComponent.Campaign.Attemps, item.MailContent, item.MailSubject, item.email, Convert.ToInt32(item.userId), item.CampaignLogId, createdOn); } campaignComponent.Campaign.Attemps++; switch (Convert.ToInt32(campaignItem.Repeat)) { case 0: campaignComponent.Campaign.NextExecution = new DateTime(9999, 12, 31); break; case 1: case 7: campaignComponent.Campaign.NextExecution = campaignItem.NextExecution.Value.AddDays(Convert.ToInt32(campaignItem.Repeat)); break; case 30: campaignComponent.Campaign.NextExecution = campaignItem.NextExecution.Value.AddMonths(1); break; } if (campaignComponent.Save() == -1) { this.ScheduleHistoryItem.Succeeded = false; Exception ee = new Exception("error database"); DotNetNuke.Services.Exceptions.Exceptions.LogException(ee); } } } } } this.ScheduleHistoryItem.AddLogNote("Schedule Succeded"); ////Show success this.ScheduleHistoryItem.Succeeded = true; } catch (Exception ex) { this.ScheduleHistoryItem.Succeeded = false; //InsertLogNote("Exception= " + ex.ToString()); this.Errored(ref ex); DotNetNuke.Services.Exceptions.Exceptions.LogException(ex); } }