protected override void InternalProcess(User user, Group @group, JobData jobData)
        {
            GroupEnumerate groupEnumerate = new GroupEnumerate(@group.Id.Value);

            foreach (Group g in groupEnumerate)
            {
                var lookups = g.ExtendedAttributes.ToLookup(attribute => attribute.Key, val => (IExtendedAttribute)val);

                string setting = lookups.GetString("DefaultDigestSetting", "unset");

                if ("daily".Equals(setting))
                {
                    PublicApi.Users.RunAsUser(user.Id.Value, () =>
                    {
                        EmailDigestSubscription subscription = PublicApi.EmailDigestSubscriptions.GetByGroup(@group.Id.Value);
                        if (subscription != null)
                        {
                            PublicApi.EmailDigestSubscriptions.Update(subscription.Id.Value, 1);
                        }
                        else
                        {
                            PublicApi.EmailDigestSubscriptions.Create("group", @group.Id.Value, 1);
                        }
                    });
                }
                else if ("weekly".Equals(setting))
                {
                    PublicApi.Users.RunAsUser(user.Id.Value, () =>
                    {
                        EmailDigestSubscription subscription = PublicApi.EmailDigestSubscriptions.GetByGroup(@group.Id.Value);
                        if (subscription != null)
                        {
                            PublicApi.EmailDigestSubscriptions.Update(subscription.Id.Value, 7);
                        }
                        else
                        {
                            PublicApi.EmailDigestSubscriptions.Create("group", @group.Id.Value, 7);
                        }
                    });
                }
                else if("off".Equals(setting))
                {
                    PublicApi.Users.RunAsUser(user.Id.Value, () =>
                    {
                        EmailDigestSubscription subscription = PublicApi.EmailDigestSubscriptions.GetByGroup(@group.Id.Value);
                        if (subscription != null)
                        {
                            PublicApi.EmailDigestSubscriptions.Delete(subscription.Id.Value);
                        }
                    });
                }
            }
        }
        protected override void InternalProcess(User user, Group @group, JobData jobData)
        {
            GroupEnumerate groupEnumerate = new GroupEnumerate(@group.Id.Value);

            foreach (Group g in groupEnumerate)
            {
                var lookups = g.ExtendedAttributes.ToLookup(attribute => attribute.Key, val => (IExtendedAttribute)val);

                string setting = lookups.GetString("DefaultDigestSetting", "unset");

                if ("daily".Equals(setting))
                {
                    PublicApi.Users.RunAsUser(user.Id.Value, () =>
                    {
                        EmailDigestSubscription subscription = PublicApi.EmailDigestSubscriptions.GetByGroup(@group.Id.Value);
                        if (subscription != null)
                        {
                            PublicApi.EmailDigestSubscriptions.Update(subscription.Id.Value, 1);
                        }
                        else
                        {
                            PublicApi.EmailDigestSubscriptions.Create("group", @group.Id.Value, 1);
                        }
                    });
                }
                else if ("weekly".Equals(setting))
                {
                    PublicApi.Users.RunAsUser(user.Id.Value, () =>
                    {
                        EmailDigestSubscription subscription = PublicApi.EmailDigestSubscriptions.GetByGroup(@group.Id.Value);
                        if (subscription != null)
                        {
                            PublicApi.EmailDigestSubscriptions.Update(subscription.Id.Value, 7);
                        }
                        else
                        {
                            PublicApi.EmailDigestSubscriptions.Create("group", @group.Id.Value, 7);
                        }
                    });
                }
                else if ("off".Equals(setting))
                {
                    PublicApi.Users.RunAsUser(user.Id.Value, () =>
                    {
                        EmailDigestSubscription subscription = PublicApi.EmailDigestSubscriptions.GetByGroup(@group.Id.Value);
                        if (subscription != null)
                        {
                            PublicApi.EmailDigestSubscriptions.Delete(subscription.Id.Value);
                        }
                    });
                }
            }
        }
        public void Process(JobData jobData)
        {
            GroupId  = jobData.Data.ContainsKey("GroupId") ? int.Parse(jobData.Data["GroupId"]) : default(int?);
            UserName = jobData.Data.ContainsKey("UserName") ? jobData.Data["UserName"] : null;

            var userEnumerator = new UserEnumerate(UserName, GroupId);

            var groupEnumerate = new GroupEnumerate(GroupId);

            foreach (User user in userEnumerator)
            {
                foreach (Group group in groupEnumerate)
                {
                    InternalProcess(user, group, jobData);
                }
            }
        }
        public void Process(JobData jobData)
        {
            GroupId = jobData.Data.ContainsKey("GroupId") ? int.Parse(jobData.Data["GroupId"]) : default(int?);
            UserName = jobData.Data.ContainsKey("UserName") ? jobData.Data["UserName"] : null;

            var userEnumerator = new UserEnumerate(UserName, GroupId);

            var groupEnumerate = new GroupEnumerate(GroupId);

            foreach (User user in userEnumerator)
            {
                foreach (Group group in groupEnumerate)
                {
                    InternalProcess(user, group, jobData);
                }
            }
        }