Example #1
0
 public void DeleteBadgeToMember(BadgeToMember badgeToMember)
 {
     ContextPerRequest.Db.BadgeToMember.Remove(badgeToMember);
 }
Example #2
0
        /// <summary>
        /// Processes the user for the specified badge type
        /// </summary>
        /// <param name="badgeType"></param>
        /// <param name="user"></param>
        /// <returns>True if badge was awarded</returns>
        public bool ProcessBadge(BadgeType badgeType, Member user)
        {
            var databaseUpdateNeeded = false;


            if (_badges.ContainsKey(badgeType))
            {
                if (!RecentlyProcessed(badgeType, user))
                {
                    databaseUpdateNeeded = true;

                    var badgeSet = _badges[badgeType];

                    foreach (var badgeMapping in badgeSet)
                    {
                        if (!BadgeCanBeAwarded(user, badgeMapping))
                        {
                            continue;
                        }

                        // Instantiate the badge and execute the rule
                        var badge = GetInstance <IBadge>(badgeMapping);

                        // Award badge?
                        if (badge != null && badge.Rule(user))
                        {
                            // Re-fetch the badge otherwise system will try and create new badges!
                            var dbBadge = GetallBadges().FirstOrDefault(x => x.Id == badgeMapping.DbBadge.Id);
                            if (dbBadge != null)
                            {
                                if (dbBadge.AwardsPoints != null && dbBadge.AwardsPoints > 0)
                                {
                                    var points = new MemberPoints
                                    {
                                        DateAdded = DateTime.UtcNow,
                                        Points    = (int)dbBadge.AwardsPoints,
                                        MemberId  = user.Id
                                    };
                                    ServiceFactory.MemberPointsService.Add(points);
                                }

                                var exists = ContextPerRequest.Db.BadgeToMember
                                             .FirstOrDefault(x => x.DialogueBadgeId == dbBadge.Id && x.MemberId == user.Id);

                                if (exists == null)
                                {
                                    // Add the badge mapping
                                    var badgeMember = new BadgeToMember
                                    {
                                        DialogueBadgeId = dbBadge.Id,
                                        MemberId        = user.Id
                                    };
                                    ContextPerRequest.Db.BadgeToMember.Add(badgeMember);

                                    // This needs to be
                                    //ContextPerRequest.Db.Badge.Add(dbBadge);
                                    ServiceFactory.ActivityService.BadgeAwarded(badgeMapping.DbBadge, user, DateTime.UtcNow);
                                }
                            }
                        }
                    }
                }
            }

            return(databaseUpdateNeeded);
        }