コード例 #1
0
        public ActionResult Add(BadgeCreateViewModel badge)
        {
            var newBadge = Mapper.Map <BadgeCreateViewModel, Badge>(badge);

            if (badge.Image == null)
            {
                _badgeRepository.Add(newBadge);
            }
            else
            {
                var fileName = Path.GetFileName(badge.Image.FileName);
                newBadge.ImageUrl = fileName;
                _badgeRepository.Add(newBadge);
                var path      = GetImagePath(newBadge.Id);
                var imagePath = path + "/" + fileName;
                Directory.CreateDirectory(path);
                badge.Image.SaveAs(imagePath);
            }

            if (!Request.IsAjaxRequest())
            {
                return(RedirectToAction("Index"));
            }

            var badgeViewModel = Mapper.Map <Badge, BadgeViewModel>(newBadge);

            return(PartialView("Partial/_BadgeSingle", badgeViewModel));
        }
コード例 #2
0
        /// <summary>
        /// Bring the database into line with the badge classes found at runtime
        /// </summary>
        /// <returns>Set of valid badge classes to use when assigning badges</returns>
        public void SyncBadges()
        {
            try
            {
                GetBadgesByReflection();

                // Turn the badge classes into a set of domain objects
                var badgesFromClasses = new Dictionary <Guid, Badge>();
                foreach (var badgeType in _badges.Keys)
                {
                    foreach (var badgeClassMapping in _badges[badgeType])
                    {
                        if (!badgesFromClasses.ContainsKey(badgeClassMapping.DbBadge.Id))
                        {
                            badgesFromClasses.Add(badgeClassMapping.DbBadge.Id, badgeClassMapping.DbBadge);
                        }
                    }
                }

                var badgesToDelete = new List <Badge>();
                var badgesToInsert = new List <Badge>();

                var dbBadges = _badgeRepository.GetAll().ToList();

                // Find badges to delete - ie in database not in classes
                badgesToDelete.AddRange(dbBadges);
                foreach (var dbBadge in dbBadges)
                {
                    if (badgesFromClasses.Values.Any(classBadge => classBadge.Id == dbBadge.Id))
                    {
                        badgesToDelete.Remove(dbBadge);
                    }
                }

                // Find badges to insert or update
                badgesToInsert.AddRange(badgesFromClasses.Values);
                foreach (var classBadge in badgesFromClasses.Values)
                {
                    foreach (var dbBadge in dbBadges)
                    {
                        if (dbBadge.Id == classBadge.Id)
                        {
                            // This class is found in the database so it's not new, but might be an update
                            if (dbBadge.Name != classBadge.Name)
                            {
                                dbBadge.Name = classBadge.Name;
                            }

                            if (dbBadge.Description != classBadge.Description)
                            {
                                dbBadge.Description = classBadge.Description;
                            }

                            if (dbBadge.DisplayName != classBadge.DisplayName)
                            {
                                dbBadge.DisplayName = classBadge.DisplayName;
                            }

                            if (dbBadge.Image != classBadge.Image)
                            {
                                dbBadge.Image = classBadge.Image;
                            }

                            if (dbBadge.AwardsPoints != classBadge.AwardsPoints)
                            {
                                dbBadge.AwardsPoints = classBadge.AwardsPoints;
                            }

                            // Remove it from insert collection, it's not new
                            badgesToInsert.Remove(classBadge);
                        }
                    }
                }

                foreach (var badge in badgesToDelete)
                {
                    _badgeRepository.Delete(badge);
                }

                foreach (var badge in badgesToInsert)
                {
                    _badgeRepository.Add(badge);
                }
            }
            catch (Exception ex)
            {
                _loggingService.Error(ex);
            }
        }