Exemplo n.º 1
0
    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);
    }
Exemplo n.º 2
0
    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_);
    }
Exemplo n.º 3
0
        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);
            }
        }